์ด ๊ธ์ ใ์ปดํจํฐ ๋ฐ๋ฐ๋ฅ์ ๋น๋ฐใ ์ฑ ์ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ฒ์ ๋๋ค.
์ ์๊ถ ๋ฌธ์ ์ ๋น๊ณต๊ฐํ๊ฒ ์ต๋๋ค.
์ ์ถ๋ ฅ์ ๊ตฌํํ๋ ์๋ฆฌ์ ํ๋ก๊ทธ๋๋จธ๋ก์ ์ด๋ป๊ฒ ํ๋ฉด ๋ ํจ์จ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ์ ์ถ๋ ฅ์ ์ฒ๋ฆฌํ๋๋ก ํ ๊ฒ์ธ๊ฐ…
6.1 CPU๋ ์ด๋ป๊ฒ ์ ์ถ๋ ฅ ์์ ์ ์ฒ๋ฆฌํ ๊น?
*์ฅ์น ๋ ์ง์คํฐ(device register)
CPU์์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฅํ๊ฑฐ๋ CPU์์ ๊ณ์ฐํ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๋ ์ง์คํฐ๊ฐ ์๋ ๊ฒ ์ฒ๋ผ ์ฅ์น์๋ ์์ฒด์ ์ธ ๋ ์ง์คํฐ์ธ ์ฅ์น ๋ ์ง์คํฐ(device register)๊ฐ ์๋ค.
1) ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ ์ง์คํฐ
ex) ์ฌ์ฉ์๊ฐ ํค๋ณด๋์ ํค๋ฅผ ๋๋ฅด๋ฉด ๊ทธ ์ ๋ณด๋ ์ด ๋ ์ง์คํฐ์ ์ ์ฅ๋๋ค.
2) ์ ์ด ์ ๋ณด์ ์ํ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ ์ง์คํฐ: ์ด๋ฐ ๋ ์ง์คํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์์ ์ ์ด์ฉํด์ ์ฅ์น๋ฅผ ์ ์ดํ๊ฑฐ๋ ์ฅ์น ์ํ๋ฅผ ๋ณผ ์ ์๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ์ฅ์น ๋ ์ง์คํฐ๋ฅผ ์ฝ๊ณ ์ธ๊น? → ๊ธฐ๊ณ ๋ช ๋ น์ด๋ก ์ฝ๊ณ ์ด๋ค.
๊ทธ๋ผ ๋ ๊ธฐ๊ณ ๋ช ๋ น์ด๋ ์ด๋ป๊ฒ ์ค๊ณ๋์ด์ผ ํ ๊น ?
*์ ์ถ๋ ฅ ๊ตฌํ ๋ฐฉ๋ฒ 2๊ฐ์ง.
1. ์ ์ถ๋ ฅ ๊ธฐ๊ณ ๋ช ๋ น์ด
: ํน์ ์ ์ถ๋ ฅ ๊ธฐ๊ณ ๋ช ๋ น์ด ์ฌ์ฉ.
1)CPU ๋ด๋ถ์์ ์ฐ์ ๊ณ์ฐ, ์ ํ, ๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๋ฑ์ ์ํํ ๋ ํน์ ํ ๊ธฐ๊ณ ๋ช ๋ น์ด๊ฐ ์๋ ๊ฒ์ฒ๋ผ ์ฅ์น ๋ ์ง์คํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ํน์ ํ ๊ธฐ๊ณ ๋ช ๋ น์ด๊ฐ ์๋ค.
2) ์๋ฆฌ๋ ์ฅ์น๋ง๋ค ๊ณ ์ ํ ์ฃผ์๊ฐ ์๊ณ , ์ ์ถ๋ ฅ ๋ช ๋ น์ด์ ์ฅ์น ์ฃผ์๋ฅผ ์ง์ ํ๋ค.
ex) x86์ IN, OUT ๊ธฐ๊ณ ๋ช ๋ น์ด.
2. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ ์ ์ถ๋ ฅ
: ๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๋ช ๋ น์ด๋ฅผ ํจ๊ป ์ฌ์ฉํ์ง๋ง ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ๋ถ์ ์ฅ์น์ ํ ๋นํ๊ธฐ.
LOAD์ STORE ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ฅ์น ๋ ์ง์คํฐ๋ ์ฝ๊ณ ์ธ ์ ์์ง ์์๊น ?
→ LOAD, STORE ๋ช ๋ น์ด์ ํจ๊ป ์ ๋ฌ๋๋ ‘๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ(memory address space)’ ์ ๋ณด๋ก ๊ฐ๋ฅํ๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ๊ณผ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ฉฐ, CPU๋ ์ฃผ์์ ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ด๋์ ์๋์ง๋ ์ ํ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ๋ฅผ ์ฅ์น์ ํ ๋นํ ์ ์๋ค.
ex) 00000000~11111111 ์ฃผ์๊ณต๊ฐ์ด ์์ ๋, 11110010์ด๋ผ๋ ์ฃผ์๊ฐ ๋์ฐฉํ๋ค๋ฉด.
์์ 4๋นํธ๊ฐ ๋ชจ๋ 1์ด๋ฉด ์ฅ์น๋ฅผ ๋์์ผ๋ก ๋์ํ๊ณ ์๋๋ฉด ์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ ๋ช ๋ น์ด๋ก ๋์ํ๋ค.
*์ฅ์น ์ํ ๋ ์ง์คํฐ
ํค๋ณด๋์ ํค ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๊ณ ์๋์ง, ๋ง์ฐ์ค์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๊ณ ์๋์ง ๋ฑ CPU๊ฐ ์ฅ์น์ ์์ ์ํ๋ฅผ ์ ์ ์๋ ๋ฐฉ๋ฒ.
1) ํด๋ง: ๊ณ์ ๊ฒ์ฌํ๊ธฐ
while(ํค๊ฐ ๋๋ฆฌ์ง ์์){ ; // ํค๊ฐ ๋๋ฆด ๋ ๊น์ง ๋๊ธฐ } ํค๋ณด๋ ๋ฐ์ดํฐ ์ฝ๊ธฐ |
CPU๋ ๋ถํ์ํ๊ฒ ํญ์ ์ํํ๋ฉฐ ๋๊ธฐํจ.
2) ์ธํฐ๋ฝํธ ๊ตฌ๋์ ์ ์ถ๋ ฅ: ๋น๋๊ธฐ์ฒ๋ฆฌ ๋ฐฉ๋ฒ.
ํ๋ก๊ทธ๋จ A์ ๊ธฐ๊ณ ๋ช
๋ น์ด n ์คํ ํ๋ก๊ทธ๋จ A์ ๊ธฐ๊ณ ๋ช ๋ น์ด n + 1 ์คํ ํ๋ก๊ทธ๋จ A์ ๊ธฐ๊ณ ๋ช ๋ น์ด n + 2 ์คํ ์ธํฐ๋ฝํธ ์ ํธ ๊ฐ์ง ํ๋ก๊ทธ๋จ A์ ์คํ์ํ ์ ์ฅ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๊ธฐ๊ณ ๋ช ๋ น์ด m ์คํ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๊ธฐ๊ณ ๋ช ๋ น์ด m + 1 ์คํ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๊ธฐ๊ณ ๋ช ๋ น์ด m + 2 ์คํ ํ๋ก๊ทธ๋จ A์ ์คํ์ํ ๋ณต์ ํ๋ก๊ทธ๋จ A์ ๊ธฐ๊ณ ๋ช ๋ น์ด n + 3 ์คํ ํ๋ก๊ทธ๋จ A์ ๊ธฐ๊ณ ๋ช ๋ น์ด n + 4 ์คํ … |
: ๋๊ตฐ๊ฐ ํค๋ณด๋๋ฅผ ๋๋ฅด๋ฉด CPU ๋ฅผ ์ค๋จ์ํค๊ณ ํค๋ณด๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๋ค์ ์ค๋จ๋ ์์ ์ ์คํ. DYSEAC ์์คํ ์์ ์ฒ์ ์ฌ์ฉ ๋จ.
* ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ๋ฐฉ๋ฒ์ ๋ด๋ถ ๊ตฌํ ๊ตฌ์กฐ::stack
ํ๋ก๊ทธ๋จ A ์ ์ํ ์ ์ฅ ํ๋ก๊ทธ๋จ B ์ ์ํ ์ ์ฅ ํ๋ก๊ทธ๋จ C ์ ์ํ ์ ์ฅ ํ๋ก๊ทธ๋จ C ์ ์ํ ๋ณต์ ํ๋ก๊ทธ๋จ B ์ ์ํ ๋ณต์ ํ๋ก๊ทธ๋จ A ์ ์ํ ๋ณต์ |
: ์ํ๊ฐ ๋จผ์ ์ ์ฅ๋ ์๋ก ์ํ ๋ณต์์ ๋ ๋์ค์ ๋จ. ์ด ์คํ์ ๋ฐ๋์ ์ปค๋์ ์์ด์ผ ํจ.
6.2 ๋์คํฌ๊ฐ ์ ์ถ๋ ฅ์ ์ฒ๋ฆฌํ ๋ CPU ๊ฐ ํ๋ ์ผ์ ๋ฌด์์ผ๊น?
: ์ค์ผ์ค๋ง. ๋์คํฌ๊ฐ ์ ์ถ๋ ฅ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ ์ด์์ฒด์ ๋ CPU๊ฐ ๋ค๋ฅธ ์์ ์ ์ํํ๋๋ก ์ค์ผ์ค๋งํจ.
๋์คํฌ์ ์ ์ถ๋ ฅ ์ฒ๋ฆฌ์ CPU๊ฐ ์คํํ๋ ์์ ์ ์๋ก ์์กดํ์ง ์๋ ๋ ๋ฆฝ์ ์ธ ๋ ์์ ์ด๋ฏ๋ก ๋ณํ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
*๋์คํฌ๊ฐ ์ ์ถ๋ ฅ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ ์ฒด ๊ณผ์ ์์ ์ CPU ๊ฐ์ ์ด ํ์ํ์ง ์์๊น ?
์ฅ์น ์ ์ด๊ธฐ, ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ, ์ธํฐ๋ฝํธ์ ๊ด๊ณ๋ฅผ ์ดํดํ๋ฉด ์ ์ ์๋ค.
1. ์ฅ์น ์ ์ด๊ธฐ
: ๋์คํฌ์ ๋์ ๋ณด์ด๊ณ ๋ง์ง ์ ์๋ ๊ธฐ๊ณ ๋ถ๋ถ์ ์ ์ธํ ๋ถ๋ถ
๊ธฐ๊ณ ์ฅ์น์ธ ๋์คํฌ์์ ๋ฐ์ดํฐ๊ฐ ํค๋์ ํธ๋์ ์์ ๋ ๋ค๋ฅธ ํธ๋์ผ๋ก ์ด๋ํ๋ฉฐ ํ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ํ์ ์๊ฐ์ ๋์คํฌ ์ ์ถ๋ ฅ ์ค์์ ๋งค์ฐ ๋ง์ ์๊ฐ์ ์๋ชจํ๋ ์์ ์ด๋ค.
์ฆ, CPU์์ ์๋์ฐจ์ด๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ๊ธฐ๊ณ ์ฅ์น์ ์ํํธ์จ์ด ์ฌ์ด์ ์ฅ์น ์ ์ด๊ธฐ(ํ๋์จ์ด ์ ์๋ถ๋ถ)์ ๋์ด ์ฅ์น์์ ์ฝ์ ๋ฐ์ดํฐ๋ ์ฅ์น์ ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
2. ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ(Direct Memory Access)
: CPU ๊ฐ์ ์ด ์๋ ์ํฉ์์ ์ง์ ์ฅ์น์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ ์๋ ๋ฐฉ์.
1) CPU๊ฐ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ์ง ์๋ ค์ฃผ๋ ๋ช ๋ น์ด๋ฅผ DMA์ ์ ๋ฌ.
2) DMA๋ ์์ ์ ์์ ๋ชฉํ๋ฅผ ๋ช ํํ ํ๊ณ ๋ฒ์ค์ ์ฌ์ฉ ๊ถํ์ ์์ฒญํ ํ ์ฅ์น๋ฅผ ์๋์ํจ๋ค.
3) ์ด์์ฒด์ ๊ฐ DMA์ ํ์ํ ๊ฐ์ ์ฃผ์์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ฌ์ด์ ์ฌ์ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ DMA๊ฐ ๊ฐ์ ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค.
4) DMA๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์๋ฃํ๋ฉด ์ธํฐ๋ฝํธ ์๋ ๋ฐฉ์์ผ๋ก CPU์๊ฒ ์๋ ค์ค๋ค.
6.3 ํ์ผ์ ์ฝ์ ๋ ํ๋ก๊ทธ๋จ์๋ ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น?
1. ๋ฉ๋ชจ๋ฆฌ ๊ด์ ์์์ ์ ์ถ๋ ฅ
: ๋ฉ๋ชจ๋ฆฌ ๊ด์ ์์์ ์ ์ถ๋ ฅ์ ๋จ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ์ผ ๋ฟ ๊ทธ ์ด์๋ ์ดํ๋ ์๋๋ค.
: ์ฆ, ๋ฉ๋ชจ๋ฆฌ์ ์ธ๋ถ ์ฅ์น ์ฌ์ด์ ๋ณต์ฌ ๋ฐ์ดํฐ๊ฐ ์๋ค ๊ฐ๋ค ํ๋ ๊ฒ์ ์ ์ถ๋ ฅ(I/O)์ด๋ผ๊ณ ํ๋ค.
- ์ ๋ ฅ(input): ๋ฐ์ดํฐ๊ฐ ์ธ๋ถ ์ฅ์น์์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ณต์ฌ
- ์ถ๋ ฅ(output): ๋ฉ๋ชจ๋ฆฌ์์ ์ธ๋ถ ์ฅ์น๋ก ๋ณต์ฌ
2. ํ๋ก์ธ์ค๊ฐ ํ์ผ์ ์ฝ๋ ์ ์ฒด ๊ณผ์
char buffer[LEN]; read(buffer); |
์ ์ฝ๋๊ฐ ์คํ๋๋ ๊ณผ์ ์ ์ดํด๋ณด์.
ํ๋ก์ธ์ค A์ ํ๋ก์ธ์ค B ๋ ๊ฐ๊ฐ ์๋ค.
ํ๋ก์ธ์ค A๊ฐ ํ์ฌ ์คํ ์ค ์ด๋ค.
ํ๋ก์ธ์ค A ์ ํ์ผ์ ์ฝ๋ ์ฝ๋๊ฐ ์๋ค.
์ด์์ฒด์ ๋ ํ์ฌ ํ๋ก์ธ์ค A์ ์คํ์ ์ผ์ ์ค์งํ๊ณ ์ ์ถ๋ ฅ ๋ธ๋กํน ๋๊ธฐ์ด์ ๋ฃ๋๋ค.
๋์คํฌ๋ DMA ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ๋ณต์ฌํ๋ค.
์ด ๋ ์ด์์ฒด์ ๋ ์ฌ์ง ์๊ณ ์ค๋น ์๋ฃ ๋๊ธฐ์ด์ ์๋ ํ๋ก์ธ์ค B๋ฅผ ๊บผ๋ด์ ์คํํ๋ค.
์ฆ, ์ด์์ฒด์ ์ ์ค์ผ์ค๋ง์ ๋ฐ๋ผ CPU์ ๋์คํฌ๊ฐ ๋ชจ๋ ์ถฉ๋ถํ ํ์ฉ๋๋ค.
๋์คํฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ๋ก์ธ์ค A์ ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌํ๋ ์์ ์ด ์๋ฃ๋๋ฉด ๋์คํฌ๋ CPU์ ์ธํฐ๋ฝํธ ์ ํธ๋ฅผ ๋ณด๋ธ๋ค.
CPU๋ ์ธํฐ๋ฝํธ ์ ํธ๋ฅผ ๋ฐ๊ณ ์ฒ๋ฆฌ๊ฐ ์ค๋จ๋์๋ ํจ์๋ก ์ ํํ๋ค.
์ด ๋, ์ด์์ฒด์ ๋ CPU๋ฅผ ํ๋ก์ธ์ค A์ ํ ๋นํ ์ง, ํ๋ก์ธ์ค B์ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ค.
ํ๋ก์ธ์ค B์ ํ ๋น๋ CPU ์๊ฐ์ด ๋จ์์ ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค B๋ฅผ ๊ณ์ ์คํํ๋ ๊ฒ์ผ๋ก ๊ฒฐ์ ํ๋ค(๊ฐ์ )
ํ๋ก์ธ์ค B๋ ๊ณ์ ์คํ๋๊ณ , ํ๋ก์ธ์ค A๋ ๊ณ์ ๋๊ธฐํ๋ค.
ํ๋ก์ธ์ค B๊ฐ ์ผ์ ์๊ฐ ์คํ๋ ํ ์์คํ ์ ํ์ด๋จธ๊ฐ ํ์ด๋จธ ์ธํฐ๋ฝํธ ์ ํธ๋ฅผ ๋ณด๋ธ๋ค.
CPU๋์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ํจ์๋ก ์ ํํ๋ค.
ํ๋ก์ธ์ค A๋ฅผ ์ ์ถ๋ ฅ ๋ธ๋กํน ๋๊ธฐ์ด์์ ์ค๋น์๋ฃ ๋๊ธฐ์ด๋ก ์ฎ๊ธด๋ค.
ํ๋ก์ธ์ค A๋ฅผ ์ค๋น ์๋ฃ ๋๊ธฐ์ด์์ ๊บผ๋ด์ CPU์ ํ ๋นํ๊ณ ์คํํ๋ค.
์ฆ, ์ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ ๋จผ์ ์ด์ ์ฒด์ ๋ด๋ถ๋ก ๋ณต์ฌ๋๊ณ , ์ด ํ ์ด์ ์ฒด์ ๊ฐ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ผ๋ก ๋ณต์ฌํ๋ค.
์ด์์ฒด์ ๋ฅผ ํตํ ๋ณต์ฌ๋ผ๋ ํ๋์ ๊ณ์ธต์ด ๋ ์กด์ฌํ๋ ๊ฒ.
6.4 ๋์ ๋์์ฑ์ ๋น๊ฒฐ: ์ ์ถ๋ ฅ ๋ค์คํ
๋ชจ๋ ์ ์ถ๋ ฅ ์ฅ์น๋ ํ์ผ์ด๋ผ๋ ๊ฐ๋ ์ผ๋ก ์ถ์ํ๋๋ค.
๋ชจ๋ ์ ์ถ๋ ฅ ์์ ์ ํ์ผ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ก ๊ตฌํํ ์ ์๋ค.
read(buffer);
* ํ์ผ ์์ ์(file descripter): ํ์ผ์ ๋ถ์ธ ๋ฒํธ
ํ์ผ์ ์ด ๋, ์ปค๋์ ํ์ผ ์์ ์(file descripter)๋ฅผ ๋ฐํํ๋ค.
ํ์ผ ์์ ์ ์คํํ ๋, ํด๋น ํ์ผ ์์ ์๋ฅผ ์ปค๋์ ์ ๋ฌํ๋ค.
์ปค๋์ ์ด ์ซ์๋ฅผ ์ป์ ํ ํด๋น ์ซ์์ ๋์ํ๋ ํ์ผ์ ๊ด๋ จ๋ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ฐพ์ ํ์ผ ์์ ์ ์๋ฃํ ์ ์๋ค.
ํ์ผ ์์ ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ธ์ค๋ ํ์ผ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ชฐ๋ผ๋ ๋๋ค.
๋ํ, ๊ด์ฌ ๋์์ธ ํ์ผ ์์ ์๋ฅผ ์ปค๋์ ์๋ ค์ฃผ๊ณ ์ปค๋์๊ฒ ๋์ ๊ฐ์ํ๋ค๊ฐ ์ฝ๊ณ ์ธ ์ ์๋ ํ์ผ ์์ ์๊ฐ ์์ ๋ ์๋ ค์ฃผ๋ผ๊ณ ํ ์ ์๋ค. => ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์์ ๋ง์ ์์ ํ์ผ ์์ ์๋ฅผ ๋ค๋ฃฐ ์ ์๋ ์ ์ถ๋ ฅ ๋ค์คํ(input/output multiplexting) ๊ธฐ์ .
์ ์ถ๋ ฅ ๋ค์คํ๋ก ์ฌ๋ฌ ์ ์ถ๋ ฅ์ ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ค.
ex) Linux ์์ select, poll, epoll ๋ฑ
1) select: ์ ์ถ๋ ฅ ๋ค์คํ ๊ธฐ์ ์์ 1024๊ฐ๋ฅผ ๋์ง ์๋ ๊ฐ์ํ ์ ์๋ ํ์ผ ์์ ์ ๋ฌถ์์ ์ง์ํ๋ค.
- ๋ฌธ์ ์ : ํ๋ก์ธ์ค๊ฐ ๋ค์ ๊นจ์ด ๋ฌ์ ๋ ์ด๋ค ํ์ผ ์์ ์๊ฐ ์ฝ๊ณ ์ธ ์ ์๋์ง ์ ์ ์์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ค์ ํ์ธํด์ผ ํ๋ค.
2) poll: select์ ์ ์ฌํ๊ณ ํ์ผ ์์ ์ ๋ฌถ์์ 1024๊ฐ๋ผ๋ ์ ํ์ด ์๋ค.
3) epoll: poll ์ ์ ๊ทธ๋ ์ด๋ ๋ฒ์ . ์ปค๋์ ํ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋น ์๋ฃ๋ ํ์ผ ์์ ์ ๋ชฉ๋ก์ ๊ฐ๊ณ ์๋ค. ์ค๋๋ ์ ์ ์ถ๋ ฅ ๋ค์คํ ๊ธฐ์ .
6.5 mmap
๋ฉ๋ชจ๋ฆฌ์ ์ฝ๊ธฐ/์ฐ๊ธฐ์ ๋นํด ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ ์๋์ ์ผ๋ก ๋ณต์กํ๋ค.
๊ทธ๋ผ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ฒ๋ผ ๋์คํฌ์ ํ์ผ์ ์ฝ๊ณ ์ธ ์๋ ์์๊น ?
*mmap: ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฉํด์ ๋ฉ๋ชจ๋ฆฌ์ ํน์ ๊ณต๊ฐ์ ํ์ผ์ mapping(์ฌ์)ํ๋ ๋ฐฉ๋ฒ.
1) ์ฅ์
- ๋์คํฌ์ ํ์ผ์ ์ฝ๊ณ ์ธ ๋ ์์คํ ํธ์ถ๊ณผ ๋ฐ์ดํฐ ๋ณต์ฌ ๋ถ๋ด์ด ์๋ค.
- ํฐ ํ์ผ๋ ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ง์ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ๋์ ๋งํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ ๋, mmap์ผ๋ก ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ์ง์ ์ฌ์ํ ์ ์๋ค.
(๋์ ๋งํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ ํ๋ก๊ทธ๋จ์ด ์๋ฌด๋ฆฌ ๋ง๋๋ผ๋ ์คํ ํ์ผ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ง ์์์ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์๋ค.)
2) ๋จ์
- ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ๊ณผ ํ์ผ์ ์ฌ์ ๊ด๊ณ๋ฅผ ์ ์งํ๊ธฐ ์ํด ํน์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์ฑ๋ฅ ๋ถ๋ด.
- ํ์ด์ง ๋๋ฝ ๋ฌธ์ ๊ฐ ์์ ์ ์๋ค.