๐Input/Output
๋ฐ์ดํฐ์ ์ ๋ ฅ
Input๊ณผ ์ถ๋ ฅOutput์ ํจ๊ป ์ผ์ปซ๋ ๋ง ํ์ผ I/O๋ฟ๋ง ์๋๋ผ ๋๋ฐ์ด์ค๋ฅผ ํตํด ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ์ด๋ค์ง๋ ์์
- ์ค์ I/O ์์
์ ์ํํ๋ ์์น๋
Kernel(User๋Kernel์๊ฒ ์์ฒญํ๊ณ ์์ ์๋ฃ ํKernel์์ ๋ฐํํ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆด ๋ฟ)
๐Blocking & Non-Blocking
๐Blocking I/O
I/O ์์ ์ด ์งํ๋๋ ๋์ ์ ์ ํ๋ก์ธ์ค๊ฐ ์์ ์ ์์ ์ ์ค๋จํ ์ฑ I/O๊ฐ ๋๋ ๋๊น์ง ๋๊ธฐํ๋ ๋ฐฉ์

- ์ดํ๋ฆฌ์ผ์ด์ ์์ ๋ค๋ฅธ ์์ ์ ์ํํ์ง ๋ชปํ๊ณ ๋๊ธฐ โ ์์ ๋ญ๋น
๐๊ณผ์
- ์ดํ๋ฆฌ์ผ์ด์
์์
recvfrom()๋ฅผ ํธ์ถํด ์ปค๋์ I/O๋ฅผ ์์ฒญ โ ์ ์ด๊ถ ๋๊น - I/O๊ฐ ๋๋ ๋๊น์ง ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๊ธฐ โ Block๋์ด(์ ์ด๊ถ ๋๊ฒจ) ๋ค๋ฅธ ์์ ๋ถ๊ฐ๋ฅ
- I/O๊ฐ ๋๋๋ฉด
Kernel Mode์์User Mode๋ก ๋ฐ์ดํฐ ๋ณต์ฌ โ ์ ์ด๊ถ ๋๊ฒจ ๋ฐ์
๐Non-Blocking I/O
I/O ์์ ์ด ์๋ฃ๋ ๋๊น์ง ์ ์ ํ๋ก์ธ์ค๊ฐ ์์ ์ ์์ ์ ์ค๋จํ์ง ์๊ณ , I/O ํธ์ถ์ ๋ํด ์ฆ์ ๋ฆฌํดํ๊ณ ์ด์ด์ ๋ค๋ฅธ ์ผ์ ์ํํ ์ ์๋๋ก ํ๋ ๋ฐฉ์

Blocking I/O๋ฐฉ์์ ๋นํจ์จ์ฑ์ ๊ทน๋ณตํ๊ณ ์ ๋์
๐๊ณผ์
- ์ดํ๋ฆฌ์ผ์ด์
์์
recvfrom()๋ฅผ ํธ์ถํด ์ปค๋์ I/O๋ฅผ ์์ฒญ - I/O ์์
์๋ฃ ์ฌ๋ถ์๋ ๋ฌด๊ดํ๊ฒ ์ฆ์ ์๋ต
โ ์
๋ ฅ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด
EWOULDBLOCK๋ฐํ โ ์ ์ด๊ถ์ ์ฆ์ ๋๊ฒจ ๋ฐ์ โ I/O ์์ ์ด ์๋ฃ๋๊ธฐ ์ ์ ๋ค๋ฅธ ์์ ์ ์ํ ๊ฐ๋ฅ
EWOULDBLOCK
๋ฐ์ดํฐ๊ฐ ์๋ค๋ ๊ฒฐ๊ณผ ๋ฉ์ธ์ง
- ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์์ ๋๊น์ง 1~2๋ฒ ๊ณผ์ ๋ฐ๋ณต
- ์
๋ ฅ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด I/O๊ฐ ๋๋๋ฉด
Kernel Mode์์User Mode๋ก ๋ฐ์ดํฐ ๋ณต์ฌ