14. I/O Systems
I/O Hardware
- ๋ค์ํ I/O ์ฅ์น ์กด์ฌ
- ๊ณตํต ๊ฐ๋
:
- ํฌํธ (์: Serial port)
- ๋ฒ์ค (daisy chain, shared direct access)
- ์ปจํธ๋กค๋ฌ (๋จ๋ ๋๋ host adapter ์นด๋์ ์์น)
- I/O ๋ช
๋ น์ด๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ์ด
- ์ปจํธ๋กค๋ฌ๋ ๋ฐ์ดํฐ ๋ฐ ์ ์ด ์ ํธ์ฉ ๋ ์ง์คํฐ ๋ณด์
- ํ๋ก์ธ์๋ ๋ค์ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์ฅ์น์ ๋ช
๋ น/๋ฐ์ดํฐ ์ ๋ฌ:
- ์ ์ฉ I/O ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด I/O ํฌํธ ์ฃผ์ ์ ๊ทผ
- ๋ฉ๋ชจ๋ฆฌ ๋งคํ I/O
- ์ฅ์น ์ ์ด ๋ ์ง์คํฐ๊ฐ ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ๋งคํ๋จ
- CPU๋ ํ์ค ๋ฐ์ดํฐ ์ ์ก ๋ช ๋ น์ด๋ก I/O ์ํ
- I/O ํฌํธ๋ ๋ค์ ๋ค ๊ฐ์ ๋ ์ง์คํฐ๋ก ๊ตฌ์ฑ๋จ:
- Status register
- ํธ์คํธ๊ฐ ์ฝ์ ์ ์๋ bit ํฌํจ (Busy bit, error bit ๋ฑ)
- Control register
- ๋ช ๋ น ์คํ ๋๋ ์ฅ์น ๋ชจ๋ ๋ณ๊ฒฝ์ฉ
- Data-in register
- ํธ์คํธ๊ฐ ์ฅ์น๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์ฌ์ฉ
- Data-out register
- ํธ์คํธ๊ฐ ์ฅ์น๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉ
- Status register
Polling
- ์ฅ์น ์ํ ํ๋จ ๋ฐฉ์
- Status register์ Busy bit ์ฒดํฌ
- Busy-wait: ์ฅ์น ์ค๋น๋ ๋๊น์ง ๋๊ธฐ
- ์ฅ์น/์ปจํธ๋กค๋ฌ๊ฐ ๋น ๋ฅด๋ฉด polling์ด ํฉ๋ฆฌ์
- Polling์ ๋จ์ :
- ์ฅ์น ์ค๋น ์ฌ๋ถ๋ฅผ ๊ณ์ ํ์ธํ์ง๋ง ๋๋ถ๋ถ ๋นํจ์จ์
- CPU๊ฐ ์ ์ฉํ ์์ ์ ํ์ง ๋ชปํจ
- ์ด๋ด ๊ฒฝ์ฐ, ์ธํฐ๋ฝํธ ๋ฐฉ์์ผ๋ก ํ๋์จ์ด ์ปจํธ๋กค๋ฌ๊ฐ CPU์ ์๋ฆผ
Interrupts
- CPU๋ interrupt-request line์ด๋ผ๋ ์ ์ ํตํด ์ธํฐ๋ฝํธ ๊ฐ์ง
- I/O ์ฅ์น๊ฐ ํธ๋ฆฌ๊ฑฐ
- CPU๋ ๋งค ๋ช ๋ น ํ ์ธํฐ๋ฝํธ ๋ฐ์ ์ฌ๋ถ ๊ฐ์ง
- ์ธํฐ๋ฝํธ ๋ฐ์ ์:
- ํ์ฌ ์ํ ์ ์ฅ ํ, ๊ณ ์ ๋ ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ ์ฃผ์๋ก ์ ํ
- ํธ๋ค๋ฌ๋ ์์ธ ๋ถ์, ์ฒ๋ฆฌ ํ return from interrupt๋ก ๋ณต๊ท
- ๋ ์ข
๋ฅ์ ์ธํฐ๋ฝํธ ์์ฒญ ๋ผ์ธ:
- Nonmaskable: ์น๋ช ์ ์ค๋ฅ ๋ฑ ๋ง์คํน ๋ถ๊ฐ๋ฅ
- Maskable: CPU์ ์ํด ์ ์ด ๊ฐ๋ฅ (์ผ๋ฐ I/O ์ธํฐ๋ฝํธ ๋ฑ)
- ์ธํฐ๋ฝํธ ๋ฒกํฐ:
- ์ฌ๋ฐ๋ฅธ ํธ๋ค๋ฌ๋ก ๋ถ๊ธฐํ๊ฒ ํด์ค
- ์์ธ ์ฒ๋ฆฌ์๋ ์ฌ์ฉ:
- 0์ผ๋ก ๋๋๊ธฐ, ๋ณดํธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๋ฑ
A Kernel I/O Structure
- ์ปค๋ I/O ๊ตฌ์กฐ๋ ๋ค์์ผ๋ก ๊ตฌ์ฑ:
- ํ๋์จ์ด ๋ ๋ฒจ์ ์ฅ์น๋ค (SCSI, ํค๋ณด๋, ๋ง์ฐ์ค ๋ฑ)
- ๊ฐ ์ฅ์น์ ํด๋นํ๋ ๋๋ฐ์ด์ค ์ปจํธ๋กค๋ฌ
- ์ปจํธ๋กค๋ฌ์ ๋์ํ๋ ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ
- ์ปค๋์ I/O ์๋ธ์์คํ ์ด ์ด๋ค์ ๊ด๋ฆฌ
Application I/O Interface
- I/O ์์คํ
ํธ์ถ์ ๋ค์ํ ์ฅ์น ๋์์ ์ผ๋ฐํ๋ ํด๋์ค์ ์บก์ํํจ
- I/O ์ฅ์น๋ฅผ ํ์ค ๋ฐฉ์์ผ๋ก ๋ค๋ฃฐ ์ ์๋๋ก ํจ
- ์ฅ์น๋ ๋ค์ํ ํน์ฑ์ ๊ฐ์ง:
- ๋ฌธ์ ๊ธฐ๋ฐ ๋๋ ๋ธ๋ก ๊ธฐ๋ฐ
- ์์ฐจ ์ ๊ทผ ๋๋ ์์ ์ ๊ทผ
- ๊ณต์ ๋๋ ์ ์ฉ
- ์๋ ์๋
- ์ฝ๊ธฐ-์ฐ๊ธฐ, ์ฝ๊ธฐ ์ ์ฉ, ์ฐ๊ธฐ ์ ์ฉ
- ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ ๊ณ์ธต์ ์ปค๋๋ก๋ถํฐ ์ฅ์น ์ ์ด๊ธฐ ์ฐจ์ด๋ฅผ ์จ๊น
Block and Character Devices
- Block devices: ๋์คํฌ ๋๋ผ์ด๋ธ ํฌํจ
- ๋ช
๋ น์ด:
read
,write
,seek
- Raw I/O (์: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ) ๋๋ ํ์ผ ์์คํ ์ ๊ทผ
- Memory-mapped file ์ ๊ทผ ๊ฐ๋ฅ
- ๋ช
๋ น์ด:
- Character devices: ํค๋ณด๋, ๋ง์ฐ์ค, ์๋ฆฌ์ผ ํฌํธ ๋ฑ
- ๋ช
๋ น์ด:
get
,put
- ์ฌ์ฉ์ ์ ๋ ฅ์ ์ ํฉ (์๋ฐ์ ๋ฐ์ดํฐ ์์ฑ)
- ์ถ๋ ฅ ์ฅ์น(ํ๋ฆฐํฐ, ์ค๋์ค ๋ฑ)์๋ ์ ์
- ๋ช
๋ น์ด:
Blocking and Nonblocking I/O
- Blocking I/O
- I/O ์๋ฃ๊น์ง ํ๋ก์ธ์ค ์ ์ง๋จ
- ์คํ ํ์์ ๋๊ธฐ ํ๋ก ์ด๋
- ์ฌ์ฉ์ด ์ฌ์
- Non-blocking I/O
- ๊ฐ๋ฅํ ๋งํผ ์ฆ์ ๋ฐํ
- ์ฝ๊ฑฐ๋ ์ด ๋ฐ์ดํธ ์๋ฅผ ๋ฐํ
- Asynchronous I/O
- I/O ์ํ ์ค์๋ ํ๋ก์ธ์ค ๊ณ์ ์คํ
- ์์ฒญ๋ ์์ ์ ์ถํ ์๋ฃ
- ๊ตฌํ ์ด๋ ค์
- I/O ์๋ธ์์คํ ์ I/O ์๋ฃ ์์ ์ ์๊ทธ๋์ ๋ณด๋
Kernel I/O Subsystem
Scheduling
- ๊ฐ ์ฅ์น๋ณ ํ๋ก I/O ์์ฒญ ์์ ์ ๋ ฌ
- ๊ณต์ ์ฑ ์ ์ง ์๋
Buffering
- ์ฅ์น ๊ฐ ์ ์ก ์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ ์ฅ
- ์๋ ๋ฐ ์ ์ก ํฌ๊ธฐ ๋ถ์ผ์น ๋์
- "copy semantics" ์ ์ง
- ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋๊ธด ๋ฐ์ดํฐ๋ ์ปค๋ ๋ฒํผ์ ๋ณต์ฌ
- ๋์คํฌ์ ์ฐ๋ ๊ฒ์ ์ปค๋ ๋ฒํผ ๊ธฐ์ค
Caching
- ์ฑ๋ฅ ํต์ฌ
- ๋์คํฌ ๋ฐ์ดํฐ์ ๋ณต์ฌ๋ณธ์ ๋น ๋ฅธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง
- ๋จ์ผ ๋ณต์ฌ๋ณธ ๋ณด์ฅ (buffer holds only copy)
Spooling
- ์ฅ์น ์ถ๋ ฅ ์์ ๋ณด๊ด
- ํ ๋ฒ์ ํ๋์ ์์ฒญ๋ง ์ฒ๋ฆฌ ๊ฐ๋ฅํ ์ฅ์น์์ ์ฌ์ฉ
- ์: ํ๋ฆฐํฐ
Error Handling
- OS๋ ๋ค์ํ ์ค๋ฅ ๋ณต๊ตฌ ๊ฐ๋ฅ
- ๋์คํฌ ์ค๋ฅ, ์ฅ์น ๋ถ๊ฐ์ฉ, ์ผ์์ ์คํจ ๋ฑ
- ์คํจํ I/O ์์ฒญ์ ๋ํด:
- ์ค๋ฅ ์ฝ๋ ๋ฐํ
- ์์คํ ๋ก๊ทธ ๊ธฐ๋ก
Kernel Data Structures
- ์ฅ์น ์ํ ์ถ์ ์ฉ ๊ตฌ์กฐ์ฒด ์ ์ง
- ํ์ผ ํ ์ด๋ธ, ๋คํธ์ํฌ ์ฐ๊ฒฐ, ๋ฌธ์ ์ฅ์น ์ํ ๋ฑ
- ๋ฒํผ, ๋ฉ๋ชจ๋ฆฌ, dirty ๋ธ๋ก ๋ฑ ๋ค์ํ ํธ๋ํน ๊ตฌ์กฐ ์ฌ์ฉ
Performance
- I/O๋ ์์คํ
์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์นจ
- ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ, ์ปค๋ I/O ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด CPU์ ํฐ ๋ถํ ๋ฐ์
- ์ธํฐ๋ฝํธ์ ์ํ ์ปจํ ์คํธ ์ค์์นญ
- ๋ฐ์ดํฐ ๋ณต์ฌ ๋น์ฉ
- ๋คํธ์ํฌ ํธ๋ํฝ์ ํนํ ๋ถ๋ด์ด ํผ
- I/O ์ฑ๋ฅ ํฅ์ ๋ฐฉ๋ฒ
- ์ปจํ ์คํธ ์ค์์น ์ ๊ฐ์
- ๋ฐ์ดํฐ ๋ณต์ฌ๋ ์ต์ํ
- ๋์ฉ๋ ์ ์ก ๋๋ polling ์ฌ์ฉ์ผ๋ก ์ธํฐ๋ฝํธ ์ ๊ฐ์
- DMA(Direct Memory Access) ํ์ฉ
- CPU, ๋ฉ๋ชจ๋ฆฌ, ๋ฒ์ค, I/O ์ฑ๋ฅ์ ๊ท ํ์ ํตํด ์ต๋ ์ฒ๋ฆฌ๋ ํ๋ณด
Concluding the OS courseโฆ
Operating System isโฆ
a collection of Cheating Schemes.