I/O, ์ฆ ์ ์ถ๋ ฅ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค.
- Polling
- Interrupt Driven I/O
- Direct Memory Access(DMA)
์ ๋ฐฉ๋ฒ ์ค์์ ๋จผ์ Polling ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.
Polling์ด๋?
Polling์ ์ดํดํ๊ธฐ ์ํด์๋ ์ ์ถ๋ ฅ์ด ์ด๋ฃจ์ด์ง๋ ๊ณผ์ ๋ถํฐ ์ดํดํ ํ์๊ฐ ์๋ค.
๊ทธ๋ฆผ์์ System Call์ด ๋จผ์ ํธ์ถ๋๋ค.
์์์ ๋ฐฐ์ ๋ ๊ฒ์ฒ๋ผ, Interrupt์ ์ํด Kernel ์์ญ์ผ๋ก ์คํ์ ํ๋ฆ์ด ์ฎ๊ฒจ์ง๋ค.
์ด๋ I/O Management์์ ์ค์ ๋ก ์ /์ถ๋ ฅ์ ๋ด๋นํ๋ ์ฅ์น๊ฐ ๋ฌด์์ธ์ง ํ๋จํ๋ค. ์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋ ์ค๊ฐ์ Device-drive-interface๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. Device-drive-interface๋ ์ค์ Device Driver์ I/O Management๋ฅผ ์ด์ด์ฃผ๋ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ํ Device Driver๊ฐ ์ค๋๋ผ๋ I/O Management์ ํธํ์์ผ ์ค๋ค.
Device Driver๋ ํด๋น ์ฅ์น๋ฅผ ๋ง๋ ํ์ฌ์์ ๊ตฌํํด์ผ ํ๋ค. ์ด์์ฒด์ ์ ์ฅ์์๋ ๋๋ฌด๋๋ ๋ง์ ์ฅ์น๊ฐ ์์ ์ ์ด์์ฒด์ ์ ์ฅ์ฐฉ(?)๋ ์ ์๊ธฐ ๋๋ฌธ์ ํธํ์์ผ ์ค I/O Management๋ง ํ์ํ์ง, Device Driver๋ฅผ ๊ตฌํํ ํ์๋ ์๋ค. ์ด๋ฌํ Device Driver๋ ์ฅ์น๊ฐ ์ด๋ ํ ์ ๋ ฅ์ด ์ฃผ์ด์ก์ ๋, ์ด๋ค ์ถ๋ ฅ(๋์)์ ๋ด๋์์ง ์ ์ํด ๋์์ผ๋ง ํ๋ค.
Polling์ ํ ์ค๋ก ์ค๋ช ํ์๋ฉด, "๋๋ ๋๊น์ง ๊ณ์ ๋ฌป๋ ๊ฒ"์ด๋ผ๊ณ ํ ์ ์๋ค. ์ด๋ฅผ ์ํด์ ์ฅ์น ๋ด๋ถ์ ๋ ์ง์คํฐ์ ๋์ ๊ณผ์ ์ ์์์ผ ํ๋ค.
์ด๋ ์๊ฐ๋ณด๋ค ๋จ์ํ๋ค. ์ฅ์น๋ Control Register, Status Register, ๊ทธ๋ฆฌ๊ณ Internal Buffer๋ก ๊ตฌ์ฑ๋๋๋ฐ, Control Register๋ Command(๋ช ๋ น)์ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ ์ง์คํฐ์ด๊ณ , Status Register๋ ํ์ฌ I/O๊ฐ ์๋ฃ๋์๋์ง, ์งํ ์ค์ธ์ง ํน์ ์ค๋ฅ ๋ฑ์ด ์ผ์ด๋ฌ๋์ง ์๋ ค์ฃผ๋ ๋ ์ง์คํฐ์ด๋ค.
๋จผ์ , ๋ชจ๋ ๋ ์ง์คํฐ๋ Controller์์ ์์นํ๋ค. ์ฌ๊ธฐ์ ์๋ ๋ ์ง์คํฐ ๊ฐ์ Host์ Device๊ฐ ๋ฐ๊พธ์ด ๊ฐ๋ฉฐ, ์ /์ถ๋ ฅ ๋ก์ง์ ์งํํ๋ค.
์ต์ด์ ์ฅ์น๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด, Controller์์ busy bit์ด๋ผ๋ ๋นํธ๋ฅผ ์ฝ์ผ๋ฉฐ, ํด๋น ๋นํธ๊ฐ 1์ผ ๋๋ ์ฅ์น๊ฐ ๋ค๋ฅธ ์์ ์ ํ๊ณ ์์ผ๋ฏ๋ก I/O๋ฅผ ์งํํ ์ ์๋ ์ํ๋ผ๊ณ ํ์ ํ๋ค. ๋ง์ฝ 1์ด ์๋ 0์ด๋ผ๋ฉด Control register์์ ์๋ write bit๋ฅผ 1๋ก ์ธํ ํ๊ณ , data-out register์ ์ ๋ ฅ ๋ฐ์ดํธ ๊ฐ์ ์ง์ด๋ฃ๋๋ค. ์ด data-out register๋ Internal Buffer์ ํด๋น๋๋ฉฐ, ์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ญํ ์ ํ๋ค.
์ฌ๊ธฐ๊น์ง์ ์ํ๋ฅผ command-ready ์ํ๋ผ๊ณ ํ๋๋ฐ, ์ด๋ Host๊ฐ Deviceํํ ์ /์ถ๋ ฅํ ์ค๋น๋์ด์~ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์ด๋ด, Controller๋ command-ready๊ฐ 1๋ก set ๋ ๊ฒ์ ๋ณด๊ณ busy bit๋ฅผ 1๋ก set ํ๋ค. ์ฅ์น๋ ์ด์ control register(write command)๋ฅผ ์ฝ๊ณ , data-out register๋ฅผ ํตํด ์ ๋ ฅ ๊ฐ์ ๋ฐ์๋ค์ฌ I/O๋ฅผ ์ํํ๋ค.
Polling ํ๋ค๋ ๊ฒ์ ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ์ฅ์น์ ๋ํด์ ์ฃผ๊ธฐ์ ์ผ๋ก status๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ด๋ค.
ํ์ง๋ง, Device Driver์ ์ฝ๋๋ฅผ ๊ณ์ํด์ ์คํ์์ผํ๊ธฐ ๋๋ฌธ์ busy wating์ด ๋ฐ์ํ๋ค๋ ๋จ์ ์ด ์๋ค.(Pragrammed I/O)
Interrupt-Driven I/O๋?
Polling ๋ฐฉ์์์๋ ์ /์ถ๋ ฅ์ด ๋น ๋ฅธ ๊ฒ์๋ ํจ์จ์ ์ด๋, ์ /์ถ๋ ฅ์ด ๋๋ฆฐ ๊ฒ์๋ ํจ์จ์ ์ด์ง ์๋ค. ๋งค๋ฒ busy waiting์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ ๋ฐ๋ผ Interrupt-Driven I/O ๋ฐฉ์์ด ๋์ค๊ฒ ๋์๋ค.
์ด ๋ฐฉ์์ User Process์์ I/O ์์ฒญ์ด ์ผ์ด๋๋ฉด, Device Driver๊ฐ Device๋ฅผ ์คํํ ์ ์๋๋ก ํ๋๋ฐ, ๋ง์ฝ Device๊ฐ I/O ์์ ์ ๋ค์ด๊ฐ๊ฒ ๋๋ค๋ฉด ํ์ฌ์ ํ๋ก์ธ์ค๋ฅผ Block ์ํจ๋ค.
์ฆ, I/O ์์ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ Block ์ํ๋ก ๋ง๋ค์ด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ์์ ํ๋ ๊ฒ ๊ฐ๋ฅํ๋ค.
์ฌ๊ธฐ์ Block ๋ ํ๋ก์ธ์ค๋ก ์ธํด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ปจํ ์คํธ ์ค์์น๊ฐ ๋ฐ์ํ์ฌ ์๋ก์ด ํ๋ก์ธ์ค๋ก ๋์ด๊ฐ๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฌ๋ค๊ฐ CPU๊ฐ Block ๋ ํ๋ก์ธ์ค์ I/O ์์ ์ด ์๋ฃ๋์ด ์ํ์ด ์๋ฃ๋์๋ค๋ IRQ(Interrupt Request)๋ฅผ ๋ฐ๊ฒ ๋๋ฉด, IRQ๋ฅผ ๋ฐ์์ผ๋ก ์ธํด ISR(Interrupt Service Routine)์ด ์คํ๋๊ณ ์ธํฐ๋ฝํธ์ ๋ํ ํจ์๋ฅผ ์ฒ๋ฆฌํ๋ค. ๊ทธ๋ฆฌ๊ณ , Block ๋ ํ๋ก์ธ์ค๋ฅผ Ready ์ํ๋ก ๋ณ๊ฒฝ์ํจ๋ค.
์ด์ , Kernel Mode์์ ํ๋ก์ธ์ค๋ก ๋์๊ฐ์ผ ํ๋ค. ์ด๋ ๋์๊ฐ๊ธฐ ์ ์ ํ๋ก์ธ์ค์ ๋์ฐฉํ ์๊ทธ๋์ด ์๋์ง, ํน์ ๋จ์ ISR์ด ์๋์ง ๋ฑ์ ํ์ธํ๋ค.
์ค์ํ ๊ฒ์ ์ด์ ์ด๋ค ํ๋ก์ธ์ค๋ก ๋์๊ฐ ๊ฒ์ด๋์ด๋ค.
I/O์์ ์ด ์๋ฃ๋ ํ๋ก์ธ์ค๋ก ๋์๊ฐ ๊ฒ์ธ์ง, ํน์ ์๋ก์ด ํ๋ก์ธ์ค๋ก ๋์๊ฐ ๊ฒ์ธ์ง ์ ํํด์ผ ํ๋ค.
์ด๋ฌํ ๊ณผ์ ์ ์ค์ผ์ฅด๋ฌ๊ฐ ๊ฒฐ์ ํ๋ฉฐ, ๋ง์ฝ I/O ์์ ์ด ์๋ฃ๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๊ฐ ๋ ๋๋ค๋ฉด ํด๋น ํ๋ก์ธ์ค๋ก ๋์๊ฐ๋ค.
Direct Memory Access(DMA)
์ /์ถ๋ ฅ์ ํญ์ Processor๋ฅผ ๊ฑฐ์ณ์ ๋ค์ด๊ฐ๊ฑฐ๋ ๋๊ฐ๋ค.
ํ์ง๋ง ์ /์ถ๋ ฅ์ด ๊ต์ฅํ ๋ง์์ง๋ค๋ฉด, ์ธํฐ๋ฝํธ๋ ์์ฒญ๋๊ฒ ๋ง์ด ๋์จ๋ค. ๊ทธ๋ฌ๋ฉด ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ผ๋ก ๋์๊ฐ๊ธฐ ์ด๋ ค์ธ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ๊ฒ์ด DMA์ด๋ค.
ํ๋ก์ธ์๋ I/O ์์ ์ DMA ๋ชจ๋๋ก ์์ํ๋ค. ์ด๋ DMA ๋ชจ๋์ ํ๋๊ฐ ์๋๋ผ ์ฌ๋ฌ ๊ฐ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ I/O๋ฅผ ํ๋ก์ธ์์ ํ์ฌ ๋์๊ณผ ๊ด๊ณ์์ด ์ํํ ์ ์๋ค.
์ดํ, I/O์์ ์ด ์ข ๋ฃ๋๋ฉด, DMA๋ ์์๋์ I/O ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ๋ก์ธ์๋ก ํ ๋ฒ์ ์ก์ ํ๋ค.
'๐ Knowledge > ์ด์์ฒด์ (OS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ๋์คํฌ ์ค์ผ์ฅด๋ง(Disk Scheduling)์ ์ด๋ป๊ฒ ์ผ์ด๋ ๊น (0) | 2024.05.13 |
---|---|
[์ด์์ฒด์ ] ์ธํฐ๋ฝํธ๋ ๋ฌด์์ด๊ณ , ์ด๋ป๊ฒ ๋ฐ์ํ ๊น (0) | 2024.05.12 |
[์ด์์ฒด์ ] ์ /์ถ๋ ฅ ๊ด๋ฆฌ(I/O Management) (0) | 2024.05.06 |
[์ด์์ฒด์ ] ํ์ผ ์์คํ ์ฌ๋ก(Linux) (0) | 2024.05.05 |
[์ด์์ฒด์ ] ๋ฐ์ดํฐ ๋ธ๋ก(Data Block)์ ๊ด๋ฆฌ (0) | 2024.05.05 |