๐Ÿ“Œ[OS] System Structure & Program Execution 1

๋ชจ๊น…ยท2023๋…„ 4์›” 1์ผ
0

๐Ÿ“– 01. ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ๊ตฌ์กฐ

  • ์ธํ’‹ : I/O -> CPU, ์•„์›ƒํ’‹ : CPU -> I/O

  • memory๋Š” CPU์˜ ์ž‘์—…๊ณต๊ฐ„. ๋˜ํ•œ CPU๋Š” ๋งค clock ์‚ฌ์ดํด๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ์—์„œ instruction(๊ธฐ๊ณ„์–ด)๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค. + ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์„ ํ™•์ธํ•œ๋‹ค.
    -> CPU๋Š” ์ด๊ฒƒ๋ฐ–์— ์•ˆํ•จ!

  • registers : CPU์•ˆ์— ์กด์žฌํ•˜๋Š” ์ž‘์€ ์ •๋ณด ์ €์žฅ ๊ณต๊ฐ„

  • modebit : CPU์•ˆ์— ์กด์žฌํ•˜๋ฉฐ CPU์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด OS์ธ์ง€ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ธ์ง€ ์•Œ๋ ค์คŒ

  • Interrupt line : CPU๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  interrput๊ฐ€ ๋“ค์–ด์™”๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ธ. I/O์™€ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•˜๋‹ค. (CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ช…๋ น์–ด๋งŒ ์ฝ๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)

  • device controller : ๊ฐ ๋””๋ฐ”์ด์Šค๋งˆ๋‹ค ๋ถ™์–ด์žˆ๋Š” ์ž‘์€ CPU
    -> ๊ฐ ๋””๋ฐ”์ด์Šค์˜ ๋‚ด๋ถ€๋ฅผ ์ปจํŠธ๋กคํ•œ๋‹ค. (Main CPU๊ฐ€ ํ†ต์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜!)

  • local buffer : device controller์˜ ์ž‘์—…๊ณต๊ฐ„

  • ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ๋„๋Š” ํ”„๋กœ๊ทธ๋žจ์— CPU๊ฐ€ ์“ฐ์ผ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌ ํ•  ๊ฒƒ์ด๋‹ค.
    -> CPU๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—๋„ ์™”๋‹ค๊ฐ”๋‹ค ํ•ด์•ผํ•˜๋Š”๋ฐ(time sharing) ๋ฌดํ•œ๋ฃจํ”„์— ์˜ํ•ด ๋น ์ ธ ๋‚˜์˜ค์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    -> ๋”ฐ๋ผ์„œ timer๋ผ๋Š” H.W๋ฅผ ๋‘๊ณ  ์žˆ๋‹ค.
    -> timer : ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์ด CPU์˜ ๋…์ ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค.
    -> ์ปดํ“จํ„ฐ๋ฅผ ๋ถ€ํŒ…ํ–ˆ์„ ๋•Œ OS์— CPU๊ฐ€ ์“ฐ์ด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค
    -> ์ดํ›„ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์— CPU๋ฅผ ๋„˜๊ธธ ๋•Œ OS๋Š” timer์— ์–ด๋– ํ•œ ๊ฐ’์„ ์…‹ํŒ…ํ•œ ํ›„์— ๋„˜๊ธด๋‹ค.
    -> ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์€ ์…‹ํŒ…๋œ ์‹œ๊ฐ„์ด ๋˜๋ฉด timer๊ฐ€ CPU์— interrupt๋ฅผ ๊ฑด๋‹ค.
    -> CPU๋Š” ๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•˜๊ณ  interrupt line์„ ํ™•์ธํ•œ๋‹ค.
    -> CPU๋Š” interrupt๊ฐ€ ๊ฑธ๋ ค์žˆ์œผ๋ฉด ํ•˜๋˜์ผ์„ ์ค‘๋‹จํ•˜๊ณ  ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์— ์žˆ์—ˆ๋˜ ์ œ์–ด๊ถŒ์„ OS์—๊ฒŒ ๋„˜๊ธด๋‹ค.
    -> OS๋Š” timer๋ฅผ ์…‹ํŒ…ํ•ด์„œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ CPU์ œ์–ด๊ถŒ์„ ๋„˜๊ธด๋‹ค.
    -> ๋‹ค์Œ์ด ๋ฐ˜๋ณต๋œ๋‹ค.

  • ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ CPU๋ฅผ ์ž๋™ ๋ฐ˜๋‚ฉํ•œ๋‹ค.

  • ํ”„๋กœ๊ทธ๋žจ์—์„œ I/O์™€์˜ ์†Œํ†ต์ด ํ•„์š”ํ•˜๋ฉด ์ž์ง„ํ•ด์„œ OS์—๊ฒŒ CPU์ œ์–ด๊ถŒ์„ ๋„˜๊ธด๋‹ค. (I/O ์ž‘์—…์€ OS๋งŒ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
    -> OS๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ CPU ์ œ์–ด๊ถŒ์„ ๋„˜๊ธด๋‹ค.
    -> ์ œ์–ด๊ถŒ์„ ๋„˜๊ธฐ๋Š” ๋ฐฉ๋ฒ•์€ Trap์ด๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด CPU๊ฐ€ ํ™•์ธํ•˜๋„๋ก ํ•œ๋‹ค.

  • ๊ทธ๋ ‡๋‹ค๋ฉด I/O์˜ ์š”์ฒญ์„ ํ•œ ํ”„๋กœ๊ทธ๋žจ์€ ์–ธ์ œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ƒ?
    -> I/O์—์„œ ์š”์ฒญํ•œ ์ž‘์—…(ํ‚ค๋ณด๋“œ ์ž…๋ ฅ)์ด ๋๋‚˜๊ฒŒ ๋˜๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ local buffer์— ์ €์žฅ๋˜๊ณ  controller๊ฐ€ CUP์—๊ฒŒ interrupt๋ฅผ ๊ฑด๋‹ค.
    -> interrupt๊ฐ€ ๊ฑธ๋ฆฌ๋ฉด ์ž๋™์ ์œผ๋กœ CPU์˜ ์ œ์–ด๊ถŒ์€ OS๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
    -> OS๋Š” interrupt๊ฐ€ ์™œ ๋“ค์–ด์™”๋Š”์ง€ ํ™•์ธ ํ›„์— ์š”์ฒญํ•œ ์ž‘์—…(ํ‚ค๋ณด๋“œ ์ž…๋ ฅ)์˜ buffer๋ฅผ memory๊ณต๊ฐ„์— copy๋ฅผ ํ•ด์ค€๋‹ค.
    -> ๋ณดํ†ต์€ interrupt ๋˜๊ธฐ ์ „ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ CPU์ œ์–ด๊ถŒ์„ ๋‹ค์‹œ ์ค€๋‹ค. (timer์˜ ์‹œ๊ฐ„์ด ๋‚จ์•„์žˆ๋‹ค๋ฉด) ํ˜น์€ ํƒ€์ด๋จธ์˜ ์‹œ๊ฐ„์ด ๋๋‚ฌ๋‹ค๋ฉด interrupt ๋ฐ›์•˜๋˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ„๋‹ค.

  • CPU๋Š” main Memory์™€ I/O์˜ local buffer์— ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๊ณ  controller(์ž‘์€ CPU)๋Š” local buffer๋งŒ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋‹ค.

  • CPU๋Š” ์ˆ˜๋งŽ์€ Interrupt๋ฅผ ๋‹นํ•˜๋Š”๋ฐ ๊ทธ๊ฑธ ํ•ด์†Œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด DMA controller
    -> ์›๋ž˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ CPU๋ฟ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DMA๋„ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    -> ์ด๋•Œ, CPU์™€ DMA๊ฐ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ทธ๊ฑธ memory controller๊ฐ€ ์ค‘์žฌํ•ด์ค€๋‹ค.
    -> ๊ทธ๋ ‡๋‹ค๋ฉด, DMA์˜ ์—ญํ• ์€? local buffer์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ Memory๋กœ copyํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    -> copy๊ฐ€ ๋๋‚˜๋ฉด CPU์— Interrupt๋ฅผ ๊ฑธ์–ด์„œ ์•Œ๋ ค์ค€๋‹ค. (์ˆ˜๋งŽ์€ Interrupt๋ฅผ ํ•œ๋ฒˆ๋งŒ ๊ฑธ๊ฒŒํ•ด์คŒ!)

  • CPU๋Š” register์ค‘์— ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ ๋ผ๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    -> CPU๋Š” ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๋ฅผ ๋ณด๊ณ  ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

  • cf. Device Driver๊ฐ€ ์‹ค์ œ๋กœ ํ—ค๋”๋ฅผ ์›€์ง์—ฌ ํŒŒ์ผ์„ ์ฝ๋Š” ๋ช…๋ น์„ ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ Disk controller(device controller)์— ํฌํ•จ๋œ ํŽŒ์›จ์–ด์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ์— ๋”ฐ๋ผ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด์œผ๋กœ ์ ํ”„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ์ด๋‹ค. (์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ๋Š” ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค)

  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ•  ์ˆ˜ ์—†๋Š” ์ผ(์ปค๋„๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ, 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋“ฑ)์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์ž๋™์ ์œผ๋กœ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๊ณ  ์ปค๋„์— ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. (Exception ์ƒํ™ฉ) ๋ณดํ†ต์€ ์ข…๋ฃŒ์‹œํ‚จ๋‹ค.

  • (์ˆ˜์ •)
    ์ฒ˜์Œ์— ์ปดํ“จํ„ฐ๋ฅผ ํ‚ค๊ฒŒ๋˜๋ฉด OS๊ฐ€ CPU๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    CPU๋Š” ํƒ€์ด๋จธ ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์— CPU๋ฅผ ์ค€๋‹ค.
    CPU๋Š” ์ฃผ์–ด์ง„ ์‹œ๊ฐ„๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ํ”„๋กœ๊ทธ๋žจ์˜ instruction๊ณผ ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์„ ํ™•์ธํ•œ๋‹ค.
    ํƒ€์ด๋จธ ์‹œ๊ฐ„์ด ๋˜๋ฉด ํƒ€์ด๋จธ๋Š” ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๊ฑด๋‹ค.
    ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์„ ํ™•์ธํ•œ CPU๋Š” OS๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.
    ์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณต์ด ๋˜๋Š” ๋„์ค‘ IO๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” instruction์ด ์‹คํ–‰๋˜๋ฉด ํŠธ๋žฉ์„ ๊ฑด๋‹ค.
    ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์„ ํ™•์ธํ•œ CPU๋Š” device controller์—๊ฒŒ ๋ช…๋ น์„ ํ•œ ํ›„ ์›๋ž˜ ๋ณธ์ธ์˜ ์ผ์„ ํ•œ๋‹ค.
    IO์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด device controller๋Š” ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๊ฑด๋‹ค.
    ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๊ฑธ๋ฆฌ๋ฉด ์ž๋™์ ์œผ๋กœ CPU์˜ ์ œ์–ด๊ถŒ์€ OS๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.
    OS๋Š” ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋“ค์–ด์˜จ ์ด์œ ๋ฅผ ํ™•์ธํ•œ ํ›„ buffer์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ memory๊ณต๊ฐ„์— copyํ•œ๋‹ค.
    ๋ณดํ†ต ์›๋ž˜ instruction์ด ์ˆ˜ํ–‰๋˜๋˜ ํ”„๋กœ๊ทธ๋žจ์— CPU์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€๊ฒŒ๋œ๋‹ค.
    ๋‹ค์‹œ CPU๋Š” ๋ณธ๋ž˜์˜ ์ผ์„ ํ•œ๋‹ค.

๐Ÿ“– 02. Mode bit

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

  • Mode bit์„ ํ†ตํ•ด ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ์˜ operation์ง€์›
    -> 1 ์‚ฌ์šฉ์ž ๋ชจ๋“œ : ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
    -> 0 ๋ชจ๋‹ˆํ„ฐ(์ปค๋„) ๋ชจ๋“œ : OS ์ฝ”๋“œ ์ˆ˜ํ–‰

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

๐Ÿ“– 03. Timer

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

๐Ÿ“– 04. Device Controller

  • I/O device controller

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

  • Device controller๋Š” I/O๊ฐ€ ๋๋‚ฌ์„ ๊ฒฝ์šฐ interrupt๋กœ CPU์— ์‚ฌ์‹ค ์•Œ๋ฆผ

  • device driver(์žฅ์น˜๊ตฌ๋™๊ธฐ)
    : OS ์ฝ”๋“œ ์ค‘ ๊ฐ ์žฅ์น˜๋ณ„ ์ฒ˜๋ฆฌ๋ฃจํ‹ด -> software
    ๊ฐ ๋””๋ฐ”์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ทธ ๋””๋ฐ”์ด์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ ๊ฑฐ๊ธฐ์— ๋งž๊ฒŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์ด์–ด์ด๋‹ค. (์šด์˜์ฒด์ œ ์ฝ”๋“œ์ด๋‹ค)

  • device controller(์žฅ์น˜์ œ์–ด๊ธฐ)
    : ๊ฐ ์žฅ์น˜๋ฅผ ํ†ต์ œํ•˜๋Š” ์ผ์ข…์˜ ์ž‘์€ CPU -> hardware

  • ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ†ตํ•ด CPU๊ฐ€ I/O controller์—๊ฒŒ ๋ช…๋ น์„ ๋‚ด๋ฆฐ๋‹ค.

๐Ÿ“– 05. ์ž…์ถœ๋ ฅ(I/O)์˜ ์ˆ˜ํ–‰

  • ๋ชจ๋“  ์ž…์ถœ๋ ฅ ๋ช…๋ น์€ ํŠน๊ถŒ ๋ช…๋ น

  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์€ ์–ด๋–ป๊ฒŒ I/O๋ฅผ ํ•˜๋Š”๊ฐ€?

    • ์‹œ์Šคํ…œ ์ฝœ(system call)
      -> ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜์ฒด์ œ์—๊ฒŒ I/O ์š”์ฒญ
    • trap์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ์˜ ํŠน์ • ์œ„์น˜๋กœ ์ด๋™
    • ์ œ์–ด๊ถŒ์ด ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด์œผ๋กœ ์ด๋™
    • ์˜ฌ๋ฐ”๋ฅธ I/O ์š”์ฒญ์ธ์ง€ ํ™•์ธ ํ›„ I/O ์ˆ˜ํ–‰
    • I/O ์™„๋ฃŒ ์‹œ ์ œ์–ด๊ถŒ์„ ์‹œ์Šคํ…œ์ฝœ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์˜ฎ๊น€
  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด I/O์˜ ์ž…์ถœ๋ ฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
    -> ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์— ์š”๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง์ ‘ interrupt ๊ฑด๋‹ค. -> mode bit์ด 0์ด ๋˜๊ณ  os๋Š” ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ™•์ธํ•ด์„œ I/O๊ฐ€ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. (system call)

๐Ÿ“– 06. ์ธํ„ฐ๋ŸฝํŠธ(Interrupt)

  • ์ธํ„ฐ๋ŸฝํŠธ

    • ์ธํ„ฐ๋ŸฝํŠธ ๋‹นํ•œ ์‹œ์ ์˜ ๋ ˆ์ง€์Šคํ„ฐ์™€ program counter๋ฅผ save ํ•œ ํ›„ CPU์˜ ์ œ์–ด๋ฅผ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์— ๋„˜๊ธด๋‹ค.
  • Interrupt (๋„“์€ ์˜๋ฏธ)

    • Interrupt (ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ) : ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ฐœ์ƒ์‹œํ‚ค ์ธํ„ฐ๋ŸฝํŠธ
    • Trap (์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ)
      -> Exception : ํ”„๋กœ๊ทธ๋žจ์ด ์˜ค๋ฅ˜๋ฅผ ๋ฒ”ํ•œ ๊ฒฝ์šฐ
      -> System call : ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ
  • ์ธํ„ฐ๋ŸฝํŠธ ๊ด€๋ จ ์šฉ์–ด

    • ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ
      -> ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ์˜ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
    • ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด
      (=Interrupt Service Routine, ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ)
      -> ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปค๋„ ํ•จ์ˆ˜
  • ์š”์ฒญ์„ ํ•  ๊ฒฝ์šฐ ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ I/O๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ•  ๊ฒƒ์ด๋‹ค.

  • Exception
    -> ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์—์„œ 0์œผ๋กœ ๋‚˜๋ˆˆ๊ฑฐ๋‚˜ ์ปค๋„์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ฒƒ์€ CPU instruction set์—์„œ ๋ง‰์•„๋†จ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ฒƒ์„ ํ–ˆ๋‹ค๋ฉด ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์ด ์ž๋™์œผ๋กœ ์„ค์ •๋˜๊ณ  CPU ์ œ์–ด๊ถŒ์ด ์ž๋™์œผ๋กœ ์ปค๋„์— ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.(mode bit 0์œผ๋กœ ์„ค์ •๋œ ํ›„)

  • ์ธํ„ฐ๋ŸฝํŠธ ์ข…๋ฅ˜๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ๋‹ค. -> ํ‚ค๋ณด๋“œ ์ธํ„ฐ๋ŸฝํŠธ, ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ ๋“ฑ -> ์ธํ„ฐ๋ŸฝํŠธ๋งˆ๋‹ค ์šด์˜์ฒด์ œ๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์ด ๋‹ค๋ฅด๋‹ค. -> ํ‚ค๋ณด๋“œ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋“ค์–ด์™”์œผ๋ฉด ํ‚ค๋ณด๋“œ buffer์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ memory๋กœ copyํ•ด์•ผํ•˜๊ณ  ํ‚ค๋ณด๋“œ I/O๋ฅผ ์š”์ฒญํ–ˆ๋˜ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ CPU๋ฅผ ๋Œ๋ ค์ค€๋‹ค. ํ˜น์€ ํƒ€์ด๋จธ๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๊ฑธ์—ˆ๋‹ค๋ฉด CPU๋ฅผ ๋บ์–ด์„œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ๋„˜๊ฒจ์•ผ ํ•œ๋‹ค. -> ๊ฐ ๊ฐ์˜ ์ธํ„ฐ๋ŸฝํŠธ๋งˆ๋‹ค ํ•ด์•ผํ•  ์ผ์ด ์šด์˜์ฒด์ œ ์ฝ”๋“œ์— ์ •์˜๊ฐ€ ๋˜์–ด์žˆ๋‹ค. ์ฆ‰, ์šด์˜์ฒด์ œ๋ฅผ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋งŒ๋“ค๋ฉด์„œ ์–ด๋–ค ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋ฌด์Šจ ์ผ์„ ํ•ด๋ผ. -> ์ธํ„ฐ๋ŸฝํŠธ๋งˆ๋‹ค ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์‹ค์ œ ์ฝ”๋“œ๋ฅผ '์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด'์ด๋ผ๊ณ  ํ•œ๋‹ค. -> ๊ทธ๋Ÿผ ์–ด๋–ค ํ•จ์ˆ˜๋กœ ๊ฐ€์•ผํ•˜๋ƒ? -> '์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ'์— ์ ํ˜€์žˆ๋‹ค.

  • CPU๋Š” ๊ธฐ๊ณ„์–ด(0๊ณผ1๋กœ ์ด๋ฃจ์–ด์ง„, instruction๋งˆ๋‹ค ๋‹ค๋ฅด๋ฉด ๋ณดํ†ต์€ 4๋ฐ”์ดํŠธ)๊ฐ€ ๋ฌด์Šจ ์ผ์„ ํ•ด์•ผํ•˜๋Š”์ง€ ๊ธฐ๊ณ„์–ด set์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. CPU๋Š” ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๊ฐ€ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ๋Š” ์ฃผ์†Œ์˜ ๊ธฐ๊ณ„์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ๋งŒ ํ•œ๋‹ค.
    ์˜ˆ๋ฅผ๋“ค์–ด ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์— ์˜ํ•ด ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ 3๋ฒˆ์— ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๊ฑธ๋ ธ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ(๋ฒˆํ˜ธ, ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฃจํ‹ด ์œผ๋กœ ์ด๋ฃจ์–ด์ง)์— Mapping์‹œ์ผœ์„œ 3๋ฒˆ์— ํ•ด๋‹นํ•˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์„ ์‹คํ–‰ํ•œ๋‹ค.

๐Ÿ“– 07. ์‹œ์Šคํ…œ ์ฝœ (System Call)

  • ์‹œ์Šคํ…œ์ฝœ
    • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์˜ ์„œ๋น„์Šค๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ปค๋„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ





[์ถœ์ฒ˜] ๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜๋‹˜ ๊ฐ•์˜

profile
๋ฉˆ์ถ”์ง€ ์•Š๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€