CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] ์ปดํ“จํ„ฐ์˜ ์š”์†Œ

1eehyunji 2023. 7. 7. 19:29

์ปดํ“จํ„ฐ๋Š” CPU / DMA ์ปจํŠธ๋กค๋Ÿฌ / ๋ฉ”๋ชจ๋ฆฌ / ํƒ€์ด๋จธ / ๋””๋ฐ”์ด์Šค ์ปจํŠธ๋กค๋Ÿฌ ๋“ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

ํ•œ ๊ฐœ์”ฉ ์ฐจ๋ก€๋กœ ์•Œ์•„๋ณด๊ธฐ๋กœ ํ•˜์ž!

CPU(Central Processing Unit)

CPU๋Š” ์‚ฐ์ˆ ๋…ผ๋ฆฌ์—ฐ์‚ฐ์žฅ์น˜(ALU), ์ œ์–ด์žฅ์น˜(CU), ๋ ˆ์ง€์Šคํ„ฐ(register)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ ์žฅ์น˜์ด๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ์— ์˜ํ•ด ๋‹จ์ˆœํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ํ•ด์„ํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ฆ‰, ์šด์˜์ฒด์ œ์˜ ์ปค๋„์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์„œ ํ”„๋กœ์„ธ์Šค๋กœ ๋งŒ๋“ค๋ฉด CPU๊ฐ€ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

 

์ œ์–ด์žฅ์น˜(Control Unit)

์ œ์–ด ์žฅ์น˜๋Š” ํ”„๋กœ์„ธ์Šค ์กฐ์ž‘์„ ์ง€์‹œํ•˜๋Š” CPU์˜ ํ•œ ๋ถ€ํ’ˆ์ด๋‹ค. 

์ž…์ถœ๋ ฅ ์žฅ์น˜๊ฐ„ ํ†ต์‹ ์„ ์ œ์–ดํ•˜๊ณ  ๋ช…๋ น์–ด๋“ค์„ ์ฝ๊ณ  ํ•ด์„ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

 

๋ ˆ์ง€์Šคํ„ฐ(register)

CPU ์•ˆ์— ์žˆ๋Š” ๋งค์šฐ ๋น ๋ฅธ ์ž„์‹œ๊ธฐ์–ต์žฅ์น˜์ด๋‹ค. CPU์™€ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ์—ฐ์‚ฐ ์†๋„๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ์ˆ˜์‹ญ ๋ฐฐ์—์„œ ์ˆ˜๋ฐฑ ๋ฐฐ๊นŒ์ง€ ๋น ๋ฅด๋‹ค.

CPU๋Š” ์ž์ฒด์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๊ฑฐ์ณ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

 

์‚ฐ์ˆ ๋…ผ๋ฆฌ์—ฐ์‚ฐ์žฅ์น˜(Arithmetic Logic Unit, ALU)

ALU๋Š” ๋ง์…ˆ, ๋บ„์…ˆ ๊ฐ™์€ ๋‘ ์ˆซ์ž์˜ ์‚ฐ์ˆ  ์—ฐ์‚ฐ๊ณผ ๋ฐฐํƒ€์  ๋…ผ๋ฆฌํ•ฉ, ๋…ผ๋ฆฌ๊ณฑ ๊ฐ™์€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋””์ง€ํ„ธ ํšŒ๋กœ์ด๋‹ค.

 

CPU ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

CPU์—์„œ ์ œ์–ด์žฅ์น˜, ๋ ˆ์ง€์Šคํ„ฐ, ์‚ฐ์ˆ ๋…ผ๋ฆฌ์—ฐ์‚ฐ์žฅ์น˜๋ฅผ ํ†ตํ•ด ์—ฐ์‚ฐํ•˜๋Š” ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ์ œ์–ด์žฅ์น˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๊ณ„์‚ฐํ•  ๊ฐ’์„ ๋กœ๋“œํ•˜๊ณ , ๋ ˆ์ง€์Šคํ„ฐ์—๋„ ๋กœ๋“œํ•œ๋‹ค.

2. ์ œ์–ด์žฅ์น˜๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ์— ์žˆ๋Š” ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋ผ๊ณ  ์‚ฐ์ˆ ๋…ผ๋ฆฌ์—ฐ์‚ฐ์žฅ์น˜์— ๋ช…๋ นํ•œ๋‹ค.

3. ์ œ์–ด์žฅ์น˜๊ฐ€ ๋‹ค์‹œ '๋ ˆ์ง€์Šคํ„ฐ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋กœ' ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

 

์ธํ„ฐ๋ŸฝํŠธ(Interrupt)

์ธํ„ฐ๋ŸฝํŠธ๋Š” ์–ด๋–ค ์‹ ํ˜ธ๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ CPU๋ฅผ ์ž ๊น ์ •์ง€์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ, ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค ๋“ฑ IO ๋””๋ฐ”์ด์Šค๋กœ ์ธํ•œ ์ธํ„ฐ๋ŸฝํŠธ, 0์œผ๋กœ ์ˆซ์ž๋ฅผ ๋‚˜๋ˆ„๋Š” ์‚ฐ์ˆ ์—ฐ์‚ฐ์— ์˜ํ•œ ์ธํ„ฐ๋ŸฝํŠธ, ํ”„๋กœ์„ธ์Šค ์˜ค๋ฅ˜ ๋“ฑ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.

 

์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜๋ฉด, ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ๋ชจ์—ฌ ์žˆ๋Š” ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ๋กœ ๊ฐ€์„œ ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

์ธํ„ฐ๋ŸฐํŠธ ๊ฐ„์—๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๊ณ , ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์‹คํ–‰๋˜๋ฉฐ, ์ธํ„ฐ๋ŸฝํŠธ๋Š” ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ / ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰จ.

* ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜ : ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ด๋ฅผ ํ•ธ๋“ค๋งํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜. ์ปค๋„ ๋‚ด๋ถ€์˜ IRQ(์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ)๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋˜๋ฉฐ, request_irq()๋ฅผ ํ†ตํ•ด ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

  • ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ
    • ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋Š” ํ‚ค๋ณด๋“œ๋‚˜ ๋งˆ์šฐ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋“ฑ์˜ IO ๋””๋ฐ”์ด์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋งํ•œ๋‹ค.
    • ์ด๋•Œ ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์ด ์„ค๊ณ„๋œ ์ดํ›„ ์ˆœ์ฐจ์ ์ธ ์ธํ„ฐ๋ŸฝํŠธ ์‹คํ–‰์„ ์ค‘์ง€ํ•˜๊ณ  ์šด์˜์ฒด์ œ์— ์‹œ์Šคํ…œ์ฝœ์„ ์š”์ฒญํ•ด์„œ ์›ํ•˜๋Š” ๋””๋ฐ”์ด์Šค๋กœ ํ–ฅํ•ด ๋””๋ฐ”์ด์Šค์— ์žˆ๋Š” ์ž‘์€ ๋กœ์ปฌ ๋ฒ„ํผ์— ์ ‘๊ทผํ•˜์—ฌ ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 
  • ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ
    • ํŠธ๋žฉ(trap)์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•˜๋ฉฐ, ํ”„๋กœ์„ธ์Šค ์˜ค๋ฅ˜ ๋“ฑ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ์ฝœ์„ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐœ๋™ํ•œ๋‹ค. 

 

DMA(Direct Memory Access) ์ปจํŠธ๋กค๋Ÿฌ

DMA ์ปจํŠธ๋กค๋Ÿฌ๋Š” CPU์˜ ๋„์›€์—†์ด I/O ๋””๋ฐ”์ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์žฅ์น˜๋ฅผ ๋œปํ•œ๋‹ค.

CPU์—๋งŒ ๋„ˆ๋ฌด ๋งŽ์€ ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์—, CPU ๋ถ€ํ•˜๋ฅผ ๋ง‰์•„์ฃผ๋ฉฐ CPU์˜ ์ผ์„ ๋ถ€๋‹ดํ•˜๋Š” ๋ณด์กฐ ์—ญํ• ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋˜, ํ•˜๋‚˜์˜ ์ž‘์—…์„ CPU์™€ DMA ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋™์‹œ์— ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ(Memory)

๋ฉ”๋ชจ๋ฆฌ๋Š” ์ „์žํšŒ๋กœ์—์„œ ๋ฐ์ดํ„ฐ๋‚˜ ์ƒํƒœ, ๋ช…๋ น์–ด ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ์žฅ์น˜๋ฅผ ๋งํ•œ๋‹ค. 

๋ณดํ†ต RAM(Ramdom Access Memory)์„ ๋งํ•œ๋‹ค. CPU๋Š” ๊ณ„์‚ฐ์„ ๋‹ด๋‹นํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ธฐ์–ต์„ ๋‹ด๋‹นํ•œ๋‹ค.

 

๊ณต์žฅ์— ๋น„์œ ํ•˜์ž๋ฉด, CPU๋Š” ์ผ๊พผ์ด๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ž‘์—…์žฅ์ด๋ฉฐ, ์ž‘์—…์žฅ์˜ ํฌ๊ธฐ๊ฐ€ ๊ณง ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ์ด๋‹ค.

์ž‘์—…์žฅ์ด ํด์ˆ˜๋ก ์ฐฝ๊ณ ์—์„œ ๋ฌผ๊ฑด์„ ๋งŽ์ด ๊ฐ€์ ธ๋‹ค๋†“๊ณ  ๋งŽ์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํฌ๋ฉด ํด์ˆ˜๋ก ๋งŽ์€ ์ผ์„ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ๋‹ค

 

ํƒ€์ด๋จธ(Timer)

๋ช‡ ์ดˆ ์•ˆ์—๋Š” ์ž‘์—…์ด ๋๋‚˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ •ํ•˜๊ณ  ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์— ์‹œ๊ฐ„ ์ œํ•œ์„ ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•  ๋•Œ ์ œํ•œ์„ ๊ฑธ๊ธฐ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค.

 

๋””๋ฐ”์ด์Šค ์ปจํŠธ๋กค๋Ÿฌ(Device Controller), ๋กœ์ปฌ ๋ฒ„ํผ(Local Buffer)

๋””๋ฐ”์ด์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ปดํ“จํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” I/O ๋””๋ฐ”์ด์Šค๋“ค์˜ ์ž‘์€ CPU๋ฅผ ๋งํ•˜๊ณ , ์˜†์— ๋ถ™์–ด ์žˆ๋Š” ๋กœ์ปฌ ๋ฒ„ํผ๋Š” ๊ฐ ๋””๋ฐ”์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋œปํ•จ.