I/O ์์ ์ Kernel level์์๋ง ์ํํ ์ ์๋ค. ๋ฐ๋ผ์, Process, Thread๋ ์ปค๋์๊ฒ I/O๋ฅผ ์์ฒญํด์ผ ํ๋ค.
-
I/O Blocking ํํ์ ์์ ์
(1) Process(Thread)๊ฐ Kernel์๊ฒ I/O๋ฅผ ์์ฒญํ๋ ํจ์๋ฅผ ํธ์ถ
(2) Kernel์ด ์์ ์ ์๋ฃํ๋ฉด ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ ๋ฐ์.
- ํน์ง
- I/O ์์ ์ด ์งํ๋๋ ๋์ user Process(Thread) ๋ ์์ ์ ์์ ์ ์ค๋จํ ์ฑ ๋๊ธฐ
- Resource ๋ญ๋น๊ฐ ์ฌํจ
(I/O ์์ ์ด CPU ์์์ ๊ฑฐ์ ์ฐ์ง ์์ผ๋ฏ๋ก)
์ฌ๋ฌ Client ๊ฐ ์ ์ํ๋ ์๋ฒ๋ฅผ Blocking ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ
-> I/O ์์ ์ ์งํํ๋ ์์ ์ ์ค์ง -> ๋ค๋ฅธ Client๊ฐ ์งํ์ค์ธ ์์ ์ ์ค์งํ๋ฉด ์๋๋ฏ๋ก, client ๋ณ๋ก ๋ณ๋์ Thread๋ฅผ ์์ฑํด์ผ ํจ -> ์ ์์ ์๊ฐ ๋งค์ฐ ๋ง์์ง์ด๋ก ์ธํด, ๋ง์์ง Threads ๋ก ์ปจํ ์คํธ ์ค์์นญ ํ์๊ฐ ์ฆ๊ฐํจ,,, ๋นํจ์จ์ ์ธ ๋์ ๋ฐฉ์
- ํน์ง
-
I/O ์์ ์ด ์งํ๋๋ ๋์ User Process์ ์์ ์ ์ค๋จํ์ง ์์.
-
์งํ ์์
-
User Process๊ฐ recvfrom ํจ์ ํธ์ถ (์ปค๋์๊ฒ ํด๋น Socket์ผ๋ก๋ถํฐ data๋ฅผ ๋ฐ๊ณ ์ถ๋ค๊ณ ์์ฒญํจ)
-
Kernel์ ์ด ์์ฒญ์ ๋ํด์, ๊ณง๋ฐ๋ก recvBuffer๋ฅผ ์ฑ์์ ๋ณด๋ด์ง ๋ชปํ๋ฏ๋ก, "EWOULDBLOCK"์ returnํจ.
-
Blocking ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ, User Process๋ ๋ค๋ฅธ ์์ ์ ์งํํ ์ ์์.
-
recvBuffer์ user๊ฐ ๋ฐ์ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ, Buffer๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ฌ ๋ฐ์์ด.
์ด๋, recvBuffer๋ Kernel์ด ๊ฐ์ง๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ์์ผ๋ฏ๋ก, Memory๊ฐ ๋ณต์ฌ๋ก ์ธํด, I/O๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ์๋๋ก data๋ฅผ ๋ฐ์์ฌ ์ ์์.
-
recvfrom ํจ์๋ ๋น ๋ฅธ ์๋๋ก data๋ฅผ ๋ณต์ฌํ ํ, ๋ณต์ฌํ data์ ๊ธธ์ด์ ํจ๊ป ๋ฐํํจ.
-
-