๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ <์ด์์ฒด์ > ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ ๋ํ ํด๋น ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค.
I/O์ ์ํ
๋ชจ๋ I/O(์ ์ถ๋ ฅ) ๋ช ๋ น์ ํน๊ถ ๋ช ๋ น์ด๋ฏ๋ก ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ง์ I/O device์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ด๋ป๊ฒ I/O๋ฅผ ์ํํ๊ฒ ๋ ๊น์??์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์์คํ ์ฝ(System Call)์ ํตํด ์ด์์ฒด์ ์๊ฒ I/O ์์ฒญ์ ํ๊ฒ ๋ฉ๋๋ค.์์คํ ์ฝ์ ํตํด trap์ ์ฌ์ฉํ ์ธํฐ๋ฝํธ(Interrupt)๋ฅผ ๊ฑธ์ด CPU ์ ์ด๊ถ์ด ์ด์์ฒด์ ์๊ฒ ๋์ด๊ฐ ์ ์๋๋ก ํ๋ ๋ฐฉ์์ผ๋ก ์์ฒญํ๋ ๊ฒ์ ๋๋ค. ์ธํฐ๋ฝํธ๊ฐ ๋ค์ด์ค๋ฉด, CPU๋ ์ฌ๋ฐ๋ฅธ I/O ์์ฒญ์ธ์ง ํ์ธ ํ I/O ์์ฒญ์ ์ํํฉ๋๋ค.
์์คํ ์ฝ (System Call)
์์คํ ์ฝ์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์ ์๋น์ค๋ฅผ ๋ฐ๊ธฐ ์ํด ์ปค๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋๋ค.

์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ I/O์ ๊ฐ์ ์์ ์ด ํ์ํ ๋, OS ์ปค๋์ I/O์ ๊ด๋ จ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ ๊ทผํ ์ ์์ต๋๋ค. (mode bit์ด 1, ์ฆ ์ฌ์ฉ์ ๋ชจ๋์ด๊ธฐ ๋๋ฌธ) ์ด๋ฌํ ๊ฒฝ์ฐ, ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด OS ์๊ฒ ๋ฌด์ธ๊ฐ๋ฅผ ์์ฒญํ๊ธฐ ์ํด interrupt๋ฅผ ๊ฑธ์ด์ OS ์ปค๋์ ํจ์๋ฅผ ํธ์ถํ ์๊ฐ ์๋๋ฐ, ์ด๋ฌํ ๊ณผ์ ์ด ๋ฐ๋ก ์์คํ ์ฝ์ ๋๋ค.
์ธํฐ๋ฝํธ (Interrupt)
์ธํฐ๋ฝํธ(Interrupt)๋ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ ์ถ๋ ฅ ํ๋์จ์ด ๋ฑ์ ์ฅ์น์ ์๊ธฐ์น ์์ ์ํฉ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ํ์ฌ ์คํ์ค์ธ ์์ ์ ์ค๋จํ๊ณ ๋ฐ์๋ ์ํฉ์ ์ฒ๋ฆฌํ ํ ๋ค์ ์คํ์ค์ธ ์์ ์ผ๋ก ๋ณต๊ทํ๋ ์์ ์ ๋๋ค.
์ธํฐ๋ฝํธ๋ ํ๋์จ์ด ์ธํฐ๋ฝํธ์ ์ํํธ์จ์ด ์ธํฐ๋ฝํธ๋ก ๋๋ ์ ์์ต๋๋ค.
- ํ๋์จ์ด ์ธํฐ๋ฝํธ (= Interrupt): ํ๋์จ์ด(Timer, Device Controller, DMA Controller ๋ฑ)๊ฐ ๋ฐ์์ํจ ์ธํฐ๋ฝํธ
- ์ํํธ์จ์ด ์ธํฐ๋ฝํธ (= Trap)
- Exception: ํ๋ก๊ทธ๋จ์ด ์ค๋ฅ๋ฅผ ๋ฒํ ๊ฒฝ์ฐ
- System call: ํ๋ก๊ทธ๋จ์ด ์ปค๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ
์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ฉด, ์ธํฐ๋ฝํธ ๋นํ ์์ ์ ๋ ์ง์คํฐ์ Program Counter๋ฅผ ์ ์ฅํ ํ CPU์ ์ ์ด๋ฅผ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๋ฃจํด์ ๋๊น๋๋ค.ํ๋์ ์ด์์ฒด์ ๋ ์ธํฐ๋ฝํธ์ ์ํด ๊ตฌ๋๋ฉ๋๋ค. ์ธํฐ๋ฝํธ๊ฐ ๋ค์ด์ฌ ๋๋ง CPU ์ ์ด๊ถ์ด OS์๊ฒ ๋์ด๊ฐ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด CPU๋ ํญ์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๊ณ ์๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
์ธํฐ๋ฝํธ ๊ด๋ จ ์ฉ์ด
์ธํฐ๋ฝํธ๊ฐ ๋ค์ด์ค๋ฉด ์ํฉ์ ๋ง๊ฒ ์ฒ๋ฆฌํด์ผ ํ ์ผ๋ค์ด ์ด์์ฒด์ ์์ ์ปค๋ ํจ์๋ก ์ ์๋์ด์์ต๋๋ค.
- ์ธํฐ๋ฝํธ ๋ฒกํฐ: ํด๋น ์ธํฐ๋ฝํธ์ ์ฒ๋ฆฌ ๋ฃจํด ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์
- ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๋ฃจํด(= Interrupt Service Routine, ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ): ํด๋น ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ปค๋ ํจ์
๋๊ธฐ์ ์ ์ถ๋ ฅ๊ณผ ๋น๋๊ธฐ์ ์ ์ถ๋ ฅ
๋๊ธฐ์ ์ ์ถ๋ ฅ (Synchronous I/O)
I/O ์์ฒญ ํ ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋ ํ์์ผ ์ ์ด๊ฐ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์๊ฒ ๋์ด๊ฐ๋๋ค.
๊ตฌํ๋ฐฉ๋ฒ 1: CPU๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด์ ๊ธฐ๋ค๋ฆผ
- I/O๊ฐ ๋๋ ๋๊น์ง CPU๋ฅผ ๋ญ๋น์ํด
- ๋งค์์ ํ๋์ I/O๋ง ์ผ์ด๋ ์ ์์
โ ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ
๊ตฌํ๋ฐฉ๋ฒ 2: ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ๋์ CPU๋ฅผ ๋ค๋ฅธ ํ๋ก์ธ์คํํ ๋๊ฒจ์ค
- I/O๊ฐ ์๋ฃ๋ ๋๊น์ง ํด๋น ํ๋ก๊ทธ๋จ์์ CPU๋ฅผ ๋นผ์์
- I/O ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํ์ ํด๋น ํ๋ก๊ทธ๋จ์ ๋ฃ์
- ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์๊ฒ CPU๋ฅผ ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ
- I/O ์์ ์ด ์๋ฃ๋๋ฉด device controller๊ฐ ์ธํฐ๋ฝํธ๋ฅผ ๊ฑธ์ด ์๋ฃ๋ฅผ ์๋ฆผ
โ CPU, I/O ๋๋ค ๋์์ ์ฌ๋ฌ ์์ ๊ฐ๋ฅ
๋น๋๊ธฐ์ ์ ์ถ๋ ฅ (Asynchronous I/O)
I/O๊ฐ ์์๋ ํ ์ ์ถ๋ ฅ ์์ ์ด ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ ์ด๊ฐ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ฆ์ ๋์ด๊ฐ๋๋ค. (๋ค๋ฅธ ์์ ์ ์ํ instruction ๊ณง๋ฐ๋ก ์คํ)

I/O ์์ ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ์์ ์ ๋๋ค. ์ผ์ ์๊ฐ์ด ํ๋ฌ์ผ I/O์์ ์ด ๋๋๊ฒ ๋๊ณ I/O์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ์ฌ์ฉ์์๊ฒ ๋์ฐฉํ๋๋ฐ(device controller๊ฐ ์ธํฐ๋ฝํธ๋ฅผ ๊ฑธ์ด์ ๋๋ฌ์์ ์๋ฆฌ๊ฒ ๋จ), ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ณ (๋์ฐฉ๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ) ์ฌ์ฉ์๊ฐ ๋ค์ ์์ ์ ํ๋ค๋ฉด ๋๊ธฐ์ ์ ์ถ๋ ฅ ๋ฐฉ์์ด๊ณ , I/O์์ ์์ฒญ๋ง ํด๋๊ณ ๋ฐ๋ก CPU์ ์ด๊ถ์ ์ป์ด์ ๋ค๋ฅธ ์์ ๋ค์ ํ๋ ๊ฒ์ ๋น๋๊ธฐ์ ์ ์ถ๋ ฅ ๋ฐฉ์์ ๋๋ค.
๋ณดํต์ ๊ฒฝ์ฐ(read ์์ )์๋ I/O์์ ์ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ง๊ณ ๋ค์ ์์ ์ ํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋๊ธฐ์(sync) ์ ์ถ๋ ฅ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ ๋๋ค.ํ์ง๋ง, ํ์ง๋ง, ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์์ด ๊ทธ ๋ค์ ์์ ์ ํ ์ ์๋ ๊ฒฝ์ฐ(์ถ๋ ฅ๊ฒฐ๊ณผ ๊ตณ์ด ๋ฐ๋ก ๋ณด์ง ์์๋ ํ ์ ์๋ ์์ ๋ค)๋ค๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ์๋ I/O ๊ฒฐ๊ณผ๋ฌผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๊ทธ ์์ ์ ๋จผ์ ํ ์ ์๋๋ก ๋น๋๊ธฐ์(async) ์ ์ถ๋ ฅ ๋ฐฉ์์ผ๋ก I/O์์ฒญ์ ํ๊ฒ ๋ฉ๋๋ค.
๋๊ธฐ์ ์ ์ถ๋ ฅ ๋ฐฉ์์ ๊ฒฝ์ฐ, ๊ตฌํ๋ฐฉ๋ฒ 1๊ณผ ๊ฐ์ด I/O๊ฐ ๋๋ ๋๊น์ง CPU๊ฐ ์๋ฌด์ผ๋ ํ์ง์๊ณ ๊ธฐ๋ค๋ฆฐ๋ค๋ฉด CPU, I/O ๋๋ค ๋ญ๋น๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ตฌํ๋ฐฉ๋ฒ 2์ ๊ฐ์ด ๋์์ ์ฌ๋ฌ ์์ ์ด ๊ฐ๋ฅํ๋๋ก ํฉ๋๋ค.
๋๊ธฐ์, ๋น๋๊ธฐ์ ์ ์ถ๋ ฅ ๋ฐฉ์ ๋ ๊ฒฝ์ฐ ๋ชจ๋ I/O์์ ์ ์๋ฃ๋ ์ธํฐ๋ฝํธ๋ก ์๋ ค์ฃผ๊ฒ ๋ฉ๋๋ค.
'๐ฅ CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ํ (0) | 2023.02.13 |
---|---|
[์ด์์ฒด์ ] ํ๋ก์ธ์ค (0) | 2023.02.12 |
[์ด์์ฒด์ ] ํ๋ก๊ทธ๋จ์ ์คํ (1) | 2023.02.01 |
[์ด์์ฒด์ ] ์ปดํจํฐ ์์คํ ๊ตฌ์กฐ (2) | 2023.01.13 |
[์ด์์ฒด์ ] ์ด์์ฒด์ ๋? (0) | 2022.12.18 |