๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
HYU/์šด์˜์ฒด์ œ(OS)

14. I/O Systems

by Jaeguk 2023. 6. 2.

I/O Hardware

์šด์˜์ฒด์ œ๋Š” ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ I/O ๋””๋ฐ”์ด์Šค์—๊ฒŒ ๋ช…๋ น์„ ๋‚ด๋ฆฐ๋‹ค. ๋‚ด๋ถ€์ ์ธ ์ˆ˜ํ–‰์€ I/O ๋””๋ฐ”์ด์Šค๊ฐ€ ์•Œ์•„์„œ ํ•œ๋‹ค.
=> ์ˆ˜๋งŽ์€ ์ข…๋ฅ˜์˜ I/O ๋””๋ฐ”์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ.

I/O ๋””๋ฐ”์ด์Šค์˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ๊ทธ ๋ ˆ์ง€์Šคํ„ฐ์— ๋ช…๋ น์„ ์จ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋””๋ฐ”์ด์Šค๋ฅผ ์ปจํŠธ๋กค ํ•œ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์–ด๋–ป๊ฒŒ ๊ฐ’์„ ์จ์ค„๊นŒ?
๋ฉ”๋ชจ๋ฆฌ์˜ ํŠน์ • ์ฃผ์†Œ๋ฅผ I/O ๋””๋ฐ”์ด์Šค์˜ ๋ฒ„ํผ์™€ ๋งคํ•‘์„ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.
์ด ์ฃผ์†Œ์—๋‹ค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์จ์ฃผ๋ฉด ๋งคํ•‘์ด ๋˜์–ด ๋””๋ฐ”์ด์Šค์˜ ๋ฒ„ํผ์— ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ–ˆ๋‹ค.
=> Memory Mapped I/O

์ด๊ฒƒ๊ณผ ๋ณ„๊ฐœ๋กœ CPU๊ฐ€ I/O ๋ช…๋ น์„ ๋ณ„๋„๋กœ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.
I/O ๋””๋ฐ”์ด์Šค์— ๋ช…๋ น์„ ๋‚ด๋ฆด ๋• ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

 

I/O ํฌํŠธ๋Š” 4๊ฐ€์ง€์˜ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

Status Register

: ๋””๋ฐ”์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ ˆ์ง€์Šคํ„ฐ์ด๋‹ค.

Control Register

: ์ปจํŠธ๋กค ๋ ˆ์ง€์Šคํ„ฐ์— ๋ช…๋ น์„ ์จ์ฃผ๋ฉด ๋ช…๋ น์ด ๋””๋ฐ”์ด์Šค๋กœ ์ „๋‹ฌ๋œ๋‹ค.

Data-in Register

: I/O ๋””๋ฐ”์ด์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ OS์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ

Data-out Register

: ๋ฐ˜๋Œ€๋กœ OS๊ฐ€ I/O ๋””๋ฐ”์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ Writeํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์จ์ฃผ๋Š” ๊ณต๊ฐ„

 

Polling

status register์˜ ๊ฐ’์„ ๋ณด๊ณ  busy๋ฉด ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋ฉด ์•ˆ ๋˜๊ณ  ready๋ฉด ๋ช…๋ น์„ ๋‚ด๋ ค์•ผ ํ•œ๋‹ค.

๋ช…๋ น์„ ๋‚ด๋ฆด ๋•Œ I/O ๋””๋ฐ”์ด์Šค์˜ ์ƒํƒœ๋ฅผ ์ฒดํฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ฒดํฌํ•˜๋Š” ๋ฐฉ์‹์˜ ๋””ํดํŠธ๊ฐ€ Polling์ด๋‹ค.
=> Polling์€ Busy waiting์„ ํ•˜๋Š” ๋ฐฉ์‹

while loop๋ฅผ ๋Œ๋ฉด์„œ I/O ๋””๋ฐ”์ด์Šค๊ฐ€ ready ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
=> CPU ์ž์›์˜ ๋‚ญ๋น„

๊ทธ๋Ÿฌ๋ฉด ์“ฐ๋ฉด ์•ˆ ๋ ๊นŒ? ๋งค์šฐ ๋น ๋ฅธ I/O ๋””๋ฐ”์ด์Šค๋ผ๋ฉด ์กฐ๊ธˆ๋งŒ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๋˜๋‹ˆ๊นŒ Polling๋„ ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ๋‹ค.

 

Interrupt

Polling ๋ฐฉ์‹์ด Busy waiting์„ ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๋ฉด, Interrupt๋Š” I/O ๋””๋ฐ”์ด์Šค๊ฐ€ Ready๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ณด๋‚ด์„œ ์•Œ๋ ค์ฃผ์ž๋Š” ๋ฐฉ์‹์ด๋‹ค.

I/O ์žฅ์น˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ผ์„ ํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

 

interrupt์˜ ์ข…๋ฅ˜์—๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

Interrupt์˜ disable ๊ฐ€๋Šฅ ์—ฌ๋ถ€์— ๋”ฐ๋ผ Nonmaskable, Maskable ์ธํ„ฐ๋ŸฝํŠธ๋กœ ๋‚˜๋‰œ๋‹ค.

Nonmaskable : Disable ์‹œํ‚ฌ ์ˆ˜ ์—†๋Š” ์ค‘์š”ํ•œ ์ธํ„ฐ๋ŸฝํŠธ
Maskable : Disable ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐ๋ŸฝํŠธ

 

์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ์™”์„ ๋•Œ, ์ธํ„ฐ๋ŸฝํŠธ ์ข…๋ฅ˜์— ๋งž๋Š” ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ์— ํ•ด๋‹นํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ช‡ ๋ฒˆ์ง€์— ์žˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด ๋ฐ”๋กœ Interrupt vector์ด๋‹ค.

 

A kernel I/O Structure

์ˆ˜๋งŽ์€ I/O ๋””๋ฐ”์ด์Šค๋“ค์„ OS๊ฐ€ ์–ด๋–ป๊ฒŒ ์ธ์ง€ํ•˜๊ณ  ๊ตฌ๋™์‹œํ‚ฌ๊นŒ?

๋” ํฐ ๋ฌธ์ œ๋Š” ํ˜„์กดํ•˜๋Š” ๋””๋ฐ”์ด์Šค๋Š” ์–ด๋–ป๊ฒŒ๋“  ์ปค๋„์ด ์ธ์ง€ํ•ด์„œ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์น˜๋”๋ผ๋„ ์•ž์œผ๋กœ ๋งŒ๋“ค์–ด์งˆ ์ƒˆ๋กœ์šด ๋””๋ฐ”์ด์Šค๋Š” ์–ด๋–ป๊ฒŒ OS๊ฐ€ ์ธ์‹์„ ํ•˜๊ฒŒ ๋ ๊นŒ?
๊ณผ๊ฑฐ์˜ OS๊ฐ€ ๋ฏธ๋ž˜์˜ ๋””๋ฐ”์ด์Šค๋ฅผ ์ง€์›?

Kernel I/O subsystem๊นŒ์ง€๋Š” OS๊ฐ€ ๋””ํดํŠธ๋กœ ์ œ๊ณต์„ ํ•˜๊ฒ ๋‹ค.

๊ฐ ๋””๋ฐ”์ด์Šค๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ๊ตฌ์ฒด์ ์ธ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์€ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ช…๋ น์œผ๋กœ ๋‚ด๋ ค์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๊ฒƒ์€ ๋””๋ฐ”์ด์Šค๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋””๋ฐ”์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํšŒ์‚ฌ๋Š” ๊ทธ ๋””๋ฐ”์ด์Šค๋ฅผ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋„ ๊ฐ™์ด ๋งŒ๋“ค์–ด์„œ ์ œ๊ณต์„ ํ•ด๋ผ.

๊ตฌ์ฒด์ ์œผ๋กœ ํŠน์ • ๋””๋ฐ”์ด์Šค๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ธ ๋“œ๋ผ์ด๋ฒ„๋Š” ๋””๋ฐ”์ด์Šค ํšŒ์‚ฌ์—์„œ ์•Œ์•„์„œ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๋ณ„๋„๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ํ‘œ์ค€ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌ๋™ํ•ด๋„ ๋˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ฒ ๋‹ค๋ผ๋Š” ์ •์ฑ…

 

Application I/O Interface

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ง์ ‘ I/O ๋””๋ฐ”์ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.
=> OS์—๊ฒŒ ๋Œ€์‹  ์š”์ฒญํ•œ๋‹ค.
๊ทธ ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ System call์ด์—ˆ๋‹ค.

์š”์ฒญํ•˜๋Š” ๋””๋ฐ”์ด์Šค์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์›๋ž˜์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ๋Œ์•„๊ฐˆ ๊ธฐ๊ณ„์— ํ•˜๋“œ ๋””์Šคํฌ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„์ง€ SSD๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
=> ์ผ๋ฐ˜ํ™”๋œ ์‹œ์Šคํ…œ ์ฝœ์„ ์ œ๊ณตํ•œ๋‹ค.

์ผ๋ฐ˜ํ™”๋œ ์‹œ์Šคํ…œ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ ๋””๋ฐ”์ด์Šค ๋งˆ๋‹ค์˜ ์ฐจ์ด๋Š” ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ช…ํ™•ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์„ ๋•Œ๋Š” ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Character-stream๊ณผ Block์ด ์žˆ๋‹ค.

Character-stream ๋””๋ฐ”์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ธ”๋Ÿญ ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ stream์˜ ํ˜•ํƒœ๋กœ ์ญ‰ ํ˜๋Ÿฌ๊ฐ€๋Š” ๋””๋ฐ”์ด์Šค์ด๋‹ค.
๋Œ€ํ‘œ์ ์œผ๋กœ ์˜ค๋””์˜ค ์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ์Œ์•…๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ์ญ‰ ํ˜๋Ÿฌ๊ฐ„๋‹ค.
๋˜๋Š” ํ”„๋ฆฐํŠธ์˜ ๊ฒฝ์šฐ ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์ญ‰ ํ˜๋Ÿฌ๊ฐ„๋‹ค.

Character-stream ๋””๋ฐ”์ด์Šค์™€ block ๋””๋ฐ”์ด์Šค๊ฐ„์˜ ์ฐจ์ด๋ฅผ I/O systemcall์—์„œ ๊ตฌ๋ถ„ํ•ด์„œ ์ œ๊ณตํ•œ๋‹ค.

์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ž๋ฐœ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋””๋ฐ”์ด์Šค์— ๋Œ€ํ•ด์„œ๋Š” ์บ๋ฆญํ„ฐ ๋””๋ฐ”์ด์Šค๋ฅผ ๋งŽ์ด ์“ฐ๋”๋ผ.

 

๋ธ”๋Ÿญ ๋””๋ฐ”์ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์ ‘๊ทผ๋œ๋‹ค.

์บ๋ฆญํ„ฐ ๋””๋ฐ”์ด์Šค๋ฅผ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์—๋Š” get, put ๋“ฑ์ด ์žˆ๋‹ค.

get์€ read์™€ ๋Œ€์‘๋˜๊ณ , put์€ write์™€ ๋Œ€์‘๋˜๋Š”๋ฐ, ์บ๋ฆญํ„ฐ ๋‹จ์œ„๋กœ I/O๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.

 

Blocking and Nonblocking I/O

Blocking I/O

I/O๋ฅผ ์š”์ฒญํ•˜๊ณ  I/O๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ suspend๊ฐ€ ๋œ ์ฑ„๋กœ ๊ธฐ๋‹ค๋ฆฐ๋‹ค

 

Non-blocking I/O

I/O๋ฅผ ์š”์ฒญํ•˜๊ณ  ๋๋‚˜์ง€ ์•Š์•„๋„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ฆฌํ„ดํ•œ๋‹ค.
๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์ง€ ์•Š๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ๋ฆฌํ„ดํ•˜๋Š” ์‹œ์ ์— ์ง„ํ–‰๋œ I/O ๋งŒํผ๋งŒ ๊ฐ€์ง€๊ณ  ๋ฆฌํ„ดํ•œ๋‹ค.

 

Asynchronous I/O

ํ”„๋กœ์„ธ์Šค๊ฐ€ I/O๋ฅผ ์‹œ์ผœ๋†“๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋‹ค๋ฅธ ์ผ์„ ํ•œ๋‹ค.
I/O๊ฐ€ ๋๋‚ฌ๋‹ค๋Š” ๊ฒƒ์€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

Kernel I/O Subsystem

Kernel I/O Subsystem์ด๋ž€ ์ปค๋„์ด ๊ฐ€์ง€๋Š” I/O๋ฅผ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์ด๋‹ค

=> I/O์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ๋Œ€๋ถ€๋ถ„

 

Scheduling

I/O ์š”์ฒญ๋“ค์„ ์–ด๋Š ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •

 

Buffering

๋‘ ๋ฐ์ดํ„ฐ ํ”„๋กœ์„ธ์‹ฑ ์ฃผ์ฒด ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ transferํ•˜๋Š” ๊ณผ์ •์—์„œ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋กœ ์ž„์‹œ ์ €์žฅํ•˜๋Š” ์ €์žฅ ์žฅ์น˜.

์˜ˆ๋ฅผ ๋“ค์–ด ๋„คํŠธ์›Œํฌ ์นด๋“œ์™€ ํ•˜๋“œ ๋””์Šคํฌ ์‚ฌ์ด์— ๋„คํŠธ์›Œํฌ๋กœ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋“œ ๋””์Šคํฌ์— ์ €์žฅํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ํ•˜์ž.

๋„คํŠธ์›Œํฌ ์นด๋“œ์—์„œ ์ „์†กํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์†๋„๋ฅผ ํ•˜๋“œ ๋””์Šคํฌ๊ฐ€ ๋ฐ›์•„๋“ค์ด์ง€ ๋ชป ํ•œ๋‹ค.
๋˜ํ•œ transfer๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์ด์ฆˆ ์‚ฌ์ด์—๋„ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
๋„คํŠธ์›Œํฌ ์นด๋“œ๋Š” ํŒจํ‚ท ๋‹จ์œ„๋กœ ์ „์†กํ•˜๊ณ  ํ•˜๋“œ ๋””์Šคํฌ๋Š” ๋ธ”๋Ÿญ ๋‹จ์œ„๋กœ ์ „์†กํ•œ๋‹ค.
=> ๋ฐ์ดํ„ฐ ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์— ๋ฒ„ํผ๋ฅผ ๋‘ฌ์„œ ๊ทธ ์ฐจ์ด๋ฅผ ๊ทน๋ณตํ•œ๋‹ค.

 

Copy semantics๋ผ๋Š” ์›์น™์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด์„œ, I/O๋Š” ํ”„๋กœ์„ธ์Šค์˜ address space์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
๋ฒ„ํผ์— ์žˆ๋Š” ๊ฐ’์„ I/O ๋””๋ฐ”์ด์Šค์— ๋‚ด๋ฆฌ๊ฒŒ ๋œ๋‹ค.
=> ์ด๋Ÿฌํ•œ ์šฉ๋„๋กœ๋„ ๋ฒ„ํผ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

Copy semantics๋ž€?

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ค ๋ฐ์ดํ„ฐ ์•„์ดํ…œ A์—๋‹ค๊ฐ€ 1์„ ์ผ๋‹ค.
์ด๊ฑด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ€์ง€๋Š” address space๋‚ด์— A์— ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜์— 1์ด ์จ์ง„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด A๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋“œ ๋””์Šคํฌ์— ์จ๋ผ ๋ผ๋Š” ๋ช…๋ น์„ ๋‚ด๋ ธ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ I/O๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์ง€๋ƒ๋ฉด, ์ง€๊ธˆ ๋‹น์žฅ ํ•˜๋“œ ๋””์Šคํฌ์˜ ๋Š๋ฆฐ ์†๋„๋ฅผ ๊ฐ์•ˆํ•ด์„œ 1 ๋ฐ”์ดํŠธ๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด ๋ฐ”๋กœ I/O๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

์ค‘๊ฐ„์— ๋ฒ„ํผ๋ง์„ ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์›ฌ๋งŒํ•˜๋ฉด ๋ชจ์•„์„œ ์“ด๋‹ค.

์ด ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋“œ ๋””์Šคํฌ๋กœ ๋‚ด๋ ค๊ฐ€๊ธฐ ์ „์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ A๋ฅผ 2๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ ธ๋‹ค๋ฉด, ์‹ค์ œ I/O๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์ ์— 2๋ฅผ ์จ์•ผ ํ• ๊นŒ 1์„ ์จ์•ผํ• ๊นŒ?

๋‹น์—ฐํžˆ I/O ๋ช…๋ น์ด ๋‚ด๋ ค์ง„ ์‹œ์ ์˜ ๋ฐ์ดํ„ฐ์ธ 1์„ ์“ฐ๋Š” ๊ฒƒ์ด ๋งž๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? A ๊ฐ’์€ ์ด๋ฏธ 1์—์„œ 2๋กœ ๋ฐ”๋€Œ์—ˆ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ด์ „ ๊ฐ’์„ ์“ธ ์ˆ˜ ์žˆ์„๊นŒ?
=> ๋ฒ„ํผ๊ฐ€ ์ด์ „ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
I/O๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋Š” ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋“œ ๋””์Šคํฌ์— ์“ฐ๊ฒŒ ๋œ๋‹ค.

 

Caching

๋ฒ„ํผ์™€ ์บ์‹œ๋Š” ์—„์—ฐํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
์บ์‹œ๋Š” ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋˜‘๊ฐ™์€ ๋ณต์‚ฌ๋ณธ์ด๊ณ , ๋ฒ„ํผ๋Š” ์–ด๋”˜๊ฐ€๋กœ ๊ฐ€์•ผํ•  ๋ฐ์ดํ„ฐ์˜ ์›๋ณธ์ด๋‹ค.

 

Spooling

๋””๋ฐ”์ด์Šค์— ๋ณด๋‚ด๋Š” output data๋ฅผ ์ค‘๊ฐ„์— ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„.

output ๋””๋ฐ”์ด์Šค๊ฐ€ ๋ฌด์ฒ™ ๋Š๋ ค์„œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด ๋””๋ฐ”์ด์Šค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ง‰ ๋ณด๋‚ด๋Š”๋ฐ ์ด ๋””๋ฐ”์ด์Šค๊ฐ€ ๋ฌด์ง€ ๋Š๋ ค์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋งˆ๋ƒฅ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ์—” ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.
=> ๋””๋ฐ”์ด์Šค๋กœ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์˜ Spool์˜์—ญ์— ๋‹ค ๋ณด๋‚ด๋ฉด, Spool์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋””๋ฐ”์ด์Šค๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ OS ์ปค๋„์˜ Spooler๊ฐ€ ๋ณด๋‚ด์ฃผ๊ฒ ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ Spooling์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ํ”„๋ฆฐํŠธ๊ฐ€ ์žˆ๋‹ค. ํ”„๋ฆฐํŠธ๋Š” ์ถœ๋ ฅ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋Š๋ฆฐ ์žฅ์น˜

 

Performance

CPU์— ๋น„ํ•˜๋ฉด I/O ๋””๋ฐ”์ด์Šค๋Š” ๋งค์šฐ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์— ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.
์ด๋Ÿฌํ•œ ๋Š๋ฆฐ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์ œ๊ณต๋œ๋‹ค.

I/O ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ ์ œ๊ณต๋˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ๋Š” ์—„์ฒญ ์ข‹์•„๋ณด์ด์ง€๋งŒ, ์‚ฌ์‹ค์€ ์†Œํ”„ํŠธ์›จ์–ด์ ์œผ๋กœ ๋งค์šฐ ๋ณต์žกํ•œ ๋งค์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ์˜ค๋ฉด context switch๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ๊ทธ๋กœ ์ธํ•ด context switch ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋˜ํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด I/O๋ฅผ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ->๋ฉ”๋ชจ๋ฆฌ๋กœ์˜ copy๊ฐ€ ๋งŽ์ด ์ผ์–ด๋‚œ๋‹ค.
=> ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๊นŒ ๋ณธ Buffering

 

I/O Performance Improvement

I/O ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ

  • ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๋ฅผ ์ตœ์†Œํ™” ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์นดํ”ผ๊ฐ€ ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ์ผ์–ด๋‚˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋งŽ์ด ๊ฐ€์ ธ์˜ค๋“ ์ง€ ํ•ด์„œ ์ธํ„ฐ๋Ÿฝ๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ๋ผ => ์ธํ„ฐ๋ŸฝํŠธ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฝค ํฐ ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ

 

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ Operating System ๊ฐ•์˜์—์„œ ๋ฐฐ์šด ๋ชจ๋“  ๋‚ด์šฉ๋“ค์ด๋‹ค.

OS๋Š” ๊ฑฐ๋Œ€ํ•œ ์‚ฌ๊ธฐ์ˆ ์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ํ–ˆ๋‹ค.

๊ณต๋ถ€ํ•˜๋ฉด์„œ ์™œ ๊ต์ˆ˜๋‹˜์ด OS๋Š” ๊ฑฐ๋Œ€ํ•œ ์‚ฌ๊ธฐ์ˆ ์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ํ•˜์…จ๋Š”์ง€ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด์ž.

728x90

'HYU > ์šด์˜์ฒด์ œ(OS)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

13. Mass Storage Management  (0) 2023.06.02
12. File System  (2) 2023.05.27
11. Virtual Memory (2)  (0) 2023.05.19
7. Deadlocks  (0) 2023.05.18
10. Virtual Memory (1)  (1) 2023.05.12