๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ๊ตฌ์กฐ

๋ณธ ๊ฒŒ์‹œ๊ธ€์€ KOCW ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต ๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜๋‹˜์˜ <์šด์˜์ฒด์ œ> ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
๊ฒŒ์‹œ๊ธ€์— ํฌํ•จ๋˜๋Š” ์ด๋ฏธ์ง€ ์ž๋ฃŒ ๋˜ํ•œ ํ•ด๋‹น ๊ฐ•์˜์— ํฌํ•จ๋œ ๊ฐ•์˜ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ๊ตฌ์กฐ

์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ๊ตฌ์กฐ

์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์€ ํฌ๊ฒŒ CPU, Memory, ์ฃผ๋ณ€์žฅ์น˜(ํ•˜๋“œ๋””์Šคํฌ, ์ž…์ถœ๋ ฅ ์žฅ์น˜)๋กœ ๊ตฌ์„ฑ๋˜๊ณ , ์ด๋“ค์€ ์‹œ์Šคํ…œ ๋ฒ„์Šค๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ด๋ณด๋ฉด, CPU๋Š” ๋ชจ๋“  ์žฅ์น˜์˜ ๋™์ž‘์„ ์ œ์–ดํ•˜๊ณ  ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜์ด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๋Š” CPU์˜ ์ž‘์—… ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

์ฃผ๋ณ€์žฅ์น˜๋Š” ํฐ ๊ฐœ๋…์œผ๋กœ ๋ชจ๋‘ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ž…๋ ฅ ์žฅ์น˜์—๋Š” ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค ๋“ฑ์ด ์žˆ์œผ๋ฉฐ ์ถœ๋ ฅ์žฅ์น˜๋Š” ๋ชจ๋‹ˆํ„ฐ, ํ”„๋ฆฐํ„ฐ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋“œ๋””์Šคํฌ๋Š” ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜๋กœ ๋ณดํ†ต ์ด์•ผ๊ธฐ ํ•˜์ง€๋งŒ, ํ•˜๋“œ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฝ์–ด๋“ค์ด๊ธฐ๋„ ํ•˜๊ณ (์ž…๋ ฅ ์žฅ์น˜๋กœ์„œ์˜ ์—ญํ• ), ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋””์Šคํฌ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ(์ถœ๋ ฅ์žฅ์น˜๋กœ์„œ์˜ ์—ญํ• )ํ•˜๊ธฐ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž…์ถœ๋ ฅ ์žฅ์น˜๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CPU

CPU๋Š” ์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ๋งค ํด๋Ÿญ ์‚ฌ์ดํด ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ธฐ๊ณ„์–ด(= instruction)์„ ์ฝ์–ด ์‹คํ–‰ํ•จ์œผ๋กœ์จ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์˜ ์žฅ์น˜์˜ ๋™์ž‘์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

 

  • registers: CPU ๋‚ด๋ถ€์— ์žˆ์œผ๋ฉฐ, CPU๊ฐ€ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ
  • Mode bit: mode bit์œผ๋กœ ์ธํ•ด ์šด์˜์ฒด์ œ๋ฅผ ์œ„ํ•˜์—ฌ ์‹คํ–‰๋˜๋Š” ์ž‘์—…๊ณผ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์‹คํ–‰๋˜๋Š” ์ž‘์—…์„ ๊ตฌ๋ถ„
  • Interrupt line: interrupt์˜ ๋ฐœ์ƒ์„ ๊ฐ์ง€. CPU๋Š” ํ•˜๋‚˜์˜ instruction์ด ๋๋‚˜๊ณ  ๋‚˜๋ฉด interrupt line์„ ์ฒดํฌ

Mode bit

์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์˜ ์ž˜๋ชป๋œ ์ˆ˜ํ–‰์œผ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ ๋ฐ ์šด์˜์ฒด์ œ์— ํ”ผํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๋ณดํ˜ธ ์žฅ์น˜์ž…๋‹ˆ๋‹ค.

Mode bit์„ ํ†ตํ•ด ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ์˜ operation์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

1 ์‚ฌ์šฉ์ž ๋ชจ๋“œ: ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰
0 ๋ชจ๋‹ˆํ„ฐ ๋ชจ๋“œ(= ์ปค๋„ ๋ชจ๋“œ, ์‹œ์Šคํ…œ ๋ชจ๋“œ): OS ์ฝ”๋“œ ์ˆ˜ํ–‰

 

๋ณด์•ˆ์„ ํ•ด์น  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ๋ช…๋ น์–ด๋Š” ๋ชจ๋‹ˆํ„ฐ ๋ชจ๋“œ์—์„œ๋งŒ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ 'ํŠน๊ถŒ๋ช…๋ น'์œผ๋กœ ๊ทœ์ •ํ•ฉ๋‹ˆ๋‹ค.Interrupt๋‚˜ Exception ๋ฐœ์ƒ ์‹œ ํ•˜๋“œ์›จ์–ด๊ฐ€ mode bit์„ 0์œผ๋กœ ๋ฐ”๊พธ๊ณ , ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ CPU๋ฅผ ๋„˜๊ธฐ๊ธฐ ์ „์— mode bit์„ 1๋กœ ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.

 

  • mode bit์ด 0์ผ ๋•Œ: ์šด์˜์ฒด์ œ๊ฐ€ CPU๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ (๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ, I/O device ์ ‘๊ทผ instruction๊นŒ์ง€ ๋ฌด์Šจ ์ผ์ด๋“  ๋‹ค ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์˜๋˜์–ด ์žˆ์Œ)
  • mode bit์ด 1์ผ ๋•Œ: ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด CPU๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ (๋ณด์•ˆ ์ƒ์˜ ๋ชฉ์ ์œผ๋กœ ์ œํ•œ๋œ instruction๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅ)

Timer

ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์ด CPU๋ฅผ ๋…์ ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ผ์ • ๊ฐ„๊ฒฉ์œผ๋กœ interrupt ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ•˜๋“œ์›จ์–ด์ž…๋‹ˆ๋‹ค.

(์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์— CPU๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋˜๋ฉด CPU ์ œ์–ด๊ถŒ์ด OS์—๊ฒŒ ์—†์–ด ๋‹ค์‹œ ๋บ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— timer๋ฅผ ๋‘์–ด CPU ๋…์  ๋ฐฉ์ง€)

 

  • ํƒ€์ด๋จธ๋Š” ๋งค ํด๋Ÿญ ํ‹ฑ ๋•Œ๋งˆ๋‹ค 1์”ฉ ๊ฐ์†Œํ•˜๋Š”๋ฐ, ํƒ€์ด๋จธ ๊ฐ’์ด 0์ด ๋˜๋ฉด ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ
  • CPU๋ฅผ ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์ด ๋…์ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ
  • ํƒ€์ด๋จธ๋Š” time sharing์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ์ด์šฉ๋จ
  • ํƒ€์ด๋จธ๋Š” ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋„ ์‚ฌ์šฉ

I/O Device

I/O device์˜ ์ข…๋ฅ˜์—๋Š” ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค, ์Šคํ”ผ์ปค, ํ”„๋ฆฐํ„ฐ, ๋””์Šคํฌ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.๊ฐ๊ฐ์˜ I/O device์—๋Š” ํ•ด๋‹น ์žฅ์น˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ผ์ข…์˜ ์ž‘์€ CPU์ธ device controller๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.I/O๋Š” ์‹ค์ œ device์™€ local buffer ์‚ฌ์ด์—์„œ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

Device Controller

  • ํ•ด๋‹น I/O ์žฅ์น˜์œ ํ˜•์„ ๊ด€๋ฆฌํ•˜๋Š” ์ผ์ข…์˜ ์ž‘์€ CPU
  • ์ œ์–ด ์ •๋ณด๋ฅผ ์œ„ํ•ด control register, status register๋ฅผ ๊ฐ€์ง
  • local buffer๋ฅผ ๊ฐ€์ง (์ผ์ข…์˜ data register)

I/O ์ž‘์—…์€ ๋งค์šฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์—, CPU๊ฐ€ ์ œ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ instruction ์ฝ์–ด์„œ ์ˆ˜ํ–‰๋งŒ)

I/O ์ž‘์—…์„ ์š”์ฒญ๋ฐ›์œผ๋ฉด I/O ์ž‘์—…์„ Device Controller ๊ฐ€ ์ง„ํ–‰ํ•˜๊ณ , ์ž‘์—…์ด ๋๋‚˜๊ฒŒ ๋˜๋ฉด interrupt๋ฅผ ๊ฑธ์–ด ์ž‘์—…์ด ๋๋‚ฌ์Œ์„ CPU์—๊ฒŒ ์•Œ๋ ค CPU ๊ฐ€ Local Buffer์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ œ์–ด ์ •๋ณด๋ฅผ ์œ„ํ•ด control register, status register๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” local buffer๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (๋ฐ์ดํ„ฐ ์ž์ฒด๋Š” local buffer์— ์ €์žฅํ•˜๊ฒŒ ๋˜๊ณ , ์ด๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋ผ์™€ ๊ฐ™์€ ์ง€์‹œ๋Š” ์ œ์–ด register๋ฅผ ํ†ตํ•ด CPU๊ฐ€ device controller์—๊ฒŒ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ)

DMA(Direct Memory Access) Controller

DMA (Direct Memory Access)

  • I/O ์žฅ์น˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€๊นŒ์šด ์†๋„๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ. ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์›๋ž˜๋Š” CPU ๋งŒ ๊ฐ€๋Šฅ)
  • CPU์˜ ์ค‘์žฌ ์—†์ด DMA controller๊ฐ€ device์˜ buffer storage์˜ ๋‚ด์šฉ์„ ๋ฉ”๋ชจ๋ฆฌ์— block ๋‹จ์œ„๋กœ ์ง์ ‘ ์ „์†ก
  • ๋ฐ”์ดํŠธ ๋‹จ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ block ๋‹จ์œ„๋กœ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด

I/O ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด Device Controller๊ฐ€ CPU์—๊ฒŒ interrupt๋ฅผ ๊ฑธ๋ฉด, CPU๊ฐ€ local buffer์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ, I/O ์ž‘์—…์ด ๋๋‚  ๋•Œ ๋งˆ๋‹ค ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค๋ฉด CPU๊ฐ€ interrupt๋ฅผ ๋‹นํ•˜๋Š” ๋นˆ๋„๊ฐ€ ๋„ˆ๋ฌด ์žฆ์•„ CPU๊ฐ€ ๋น„ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

I/O์˜ ๊ณผ๋„ํ•œ interrupt๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด DMA Controller๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

local buffer์— ์ผ์ • ๋ถ„๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๋ฉด DMA Controller๊ฐ€ block ๋‹จ์œ„๋กœ ํ•œ๋ฒˆ์— ๋ฉ”๋ชจ๋ฆฌ์— copy ํ•˜๊ณ  interrupt๋ฅผ ๊ฑธ์–ด์ค๋‹ˆ๋‹ค. DMA๋ฅผ ๋‘ ์œผ๋กœ์จ CPU๊ฐ€ interrupt ๋‹นํ•˜๋Š” ๋นˆ๋„๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋˜์–ด CPU๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

DMA controller๊ฐ€ ์กด์žฌํ•จ์œผ๋กœ์จ CPU, DMA ๋‘˜ ๋‹ค ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‘˜์ด์„œ ๋™์‹œ์— ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ ‘๊ทผํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Memory Controller๊ฐ€ ์ค‘์žฌ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.