[ํ๋ก์ธ์ค์ ์๊ทธ๋] ํ๋ก์ธ์ค (Process)
<์์์ง ๋์ ์ฌ๋ฌผ์ธํฐ๋ท์ ์ํ ๋ฆฌ๋ ์ค ํ๋ก๊ทธ๋๋ฐ with ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์์ ์ ์ฐธ๊ณ ํด์ ์์ฑํ์์ต๋๋ค :-)>
โญ ๋ฉํฐ ํ๋ก์ธ์ค์์ ์๋ก์ด ํ๋ก์ธ์ค ์์ฑ
fork() ํจ์๋ก ์์ฑํ๋ค
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์์ ๋์ผํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋คํธ์ํฌ ์๋ฒ์ ๊ฐ์ ๊ฒฝ์ฐ ํ๋์ ํ๋ก์ธ์ค๋ฅผ ๋ณต์ ํ์ฌ ๋ถ๋ชจ์ ์์์ด ๋์์ ๊ฐ๊ฐ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์คํํ ์ ์๋ค
์ ธ์์์ ๊ฐ์ด ์๋ก์ด ํ๋ก๊ทธ๋จ์ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ fork() ํจ์๋ก ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ํ์ exec() ํจ์๋ฅผ ํธ์ถํ์ฌ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ์คํํ๋ค
SUS ์์๋ fork()/exec() ์ ํจ๊ป ์ํํ๋ posix_spawn() ํจ์ ์ ๊ณตํจ
โญ IPC (Inter-Process Communication)
ํ๋ก์ธ์ค ์ฌ์ด์๋ ์๋ก ๊ณต์ ํ๋ ๊ณต๊ฐ์ด ์์
์๋ก ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด์๋ ๋ณ๋์ IPC ๊ฐ ํ์ํจ
IPC ๋ก ํ์ดํ๋, FIFO, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋จ
ํ์ดํ ๋ ๋ถ๋ชจ์ ์์ ๊ด๊ณ์์๋ง ํต์
FIFO ๋ ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ์๋ ํ๋ก์ธ์ค๋ค๋ ํต์ ๊ฐ๋ฅ
โญ ์ค๋ ๋
์ผ์ ์ฒ๋ฆฌ์ ๋จ์
ํ๋ก์ธ์ค์ ๋นํด์ ๋น ๋ฅด๊ฒ ์์ฑ๋จ
์๋ก ๊ณต์ ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ฉํด์ ์๋ก ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํจ
But, ๋ชจ๋ ์ค๋ ๋๊ฐ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๊ณ ์์ผ๋ฏ๋ก ๋๊ธฐํ ๋ฌธ์ ๋ฐ์
์ธ๋งํฌ์ด๋ ๋ฎคํ ์ค ์ด์ฉํด์ ํด๊ฒฐํจ
โญ ํ๋ก์ธ์ค
์ปดํจํฐ ๋ด์์ ํ์ฌ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ ( == ํ์คํฌ task )
๋ฉํฐ ํ๋ก์ธ์ค : ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์คํ๋๋ ๊ฒ
๋ฉํฐ ํ์คํน : ์๋ถํ ์์คํ ๊ฒฝ์ฐ
์์ฑ (New), ์ค๋น (Ready), ๋๊ธฐ (Waiting), ์คํ (Running), ์๋ฃ (Terminated)
๋ฆฌ๋ ์ค์์๋ ์๋ถํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ํด ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค์ ๋์์ ์คํํ๋ ๊ธฐ๋ฅ ์ ๊ณต
์ฌ๋ฌ ๊ฐ์ ์ผ์ ๋์์ ์ํํ ์ ์๋ ๋ฉํฐํ์คํน์ ์ง์ํจ
โ๏ธ ํ๋ก์ธ์ค์ ์ํ
CPU ์ ์ฝ์ด๋ ํ์๊ฐ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์คํํ ์ ์์
๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ๋๊ธฐํด์ผํจ
ํ๋ก์ธ์ค๋ค์ ๊ฐ๊ฐ์ ์ํ๋ฅผ ๊ฐ์ง๋๋ฐ, ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ PCB (Process Control Block)์ ํ์ฌ์ ์คํ๊ณผ ๊ด๋ จ๋ ์ํ๊ฐ ์ ์ฅ๋จ
CPU ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ ์ฒด์ CPU ์๊ฐ์ ๋ถํ ํด์ ํ๋ก์ธ์ค์ ํ ๋นํ๋ค
ํ๋ก์ธ์ค๋ค์ ์ฌ๋ฌ ์ํ๋ค ์ฌ์ด๋ฅผ ์ ํํ๋ฉด์ ์ผ์ ์ํํ๋ค
์ ์ ๋ชจ๋ ์ํ ์ค์ธ ์ํ
์ปค๋ ๋ชจ๋ ์ํ ์ค์ธ ์ํ
์ํ ๋๊ธฐ ์ํ
CPU time ์ ํ ๋น๋ฐ์ ์ํ๋ก ์ ์ ๋ชจ๋์์ ์คํ๋๋ค๊ฐ, ์์คํ ํธ์ถ์ ์ํด ์ปค๋ ๋ชจ๋๋ก ๋ณ๊ฒฝ
์๋ถํ ์์คํ ์์๋ CPU ์์ ํ๋ก์ธ์ค๋ค์ด ๋์๊ฐ๋ฉด์ ์คํ๋๋ค
CPU์ ์ฝ์ด๋ ๋งค์๊ฐ ํ ํ๋ก์ธ์ค๋ง ์คํํ์ง๋ง, ์คํํ๋ ์ฃผ๊ธฐ๋ฅผ ์์ฃผ ์งง๊ฒ ๋๋๋ฉด ์ฌ๋ฌ ํ๋ก๊ทธ๋จ๋ค์ด ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋ค
ํ๋ก์ธ์ค์ ์คํ์ ์ํด ๋๋ ์งง์ ์๊ฐ์ ํํด ํ์ (Quantum Time)
ํํ ํ์ ๋จ์๋ก ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ด ๋์๊ฐ๋ฉด์ ์คํ๋๋๋ฐ, ์ด ์คํ๋๋ ํ๋ก์ธ์ค๋ค์ ํ๋ก์ธ์ค ํ์ ์ํด ๊ด๋ฆฌ๋๋ค
์คํ ์ค์ธ ํ๋ก์ธ์ค๋ ์ฌ์ฉ์๊ฐ Ctrl+C or Ctrl+Z ๋๋ฅด๋ฉด ๋ฐ์ํ๋ ์ธํฐ๋ฝํธ์ ์ํด ์ค์ง๋๊ฑฐ๋ ๋ฉ์ถค
์ด ๋ ์ด์์ฒด์ ์์ ์๊ทธ๋์ด ๋ฐ์ํด ํด๋น ํ๋ก์ธ์ค์ ์ ๋ฌ๋๋ค
โ๏ธํ๋ก์ธ์ค์ ์๋ฃ ๊ตฌ์กฐ
์ ๋์ค์์ ํ๋ก์ธ์ค๋ค์ด ์คํ๋๋ฉด, ์ฌ๋ฌ ๋ฐ์ดํฐ๋ค์ด ๋ฉ๋ชจ๋ฆฌ์์์ ๊ด๋ฆฌ๋๋ค
์ฌ์ฉ์ ๊ตฌ์กฐ -> ํ๋ก์ธ์ค ํ ์ด๋ธ (์ํธ๋ฆฌ) -> ํ๋ก์ธ์ค ์์ญ ํ ์ด๋ธ (ํ ์คํธ, ๋ฐ์ดํฐ, ์คํ) -> ๋ฉ๋ชจ๋ฆฌ (์ค์ ๋ฉ๋ชจ๋ฆฌ)
์ฌ์ฉ์ ๊ตฌ์กฐ: ํ๋ก์ธ์ค ์ํ ์ค์ ํ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํจ
ํ๋ก์ธ์ค ํ ์ด๋ธ: ํ๋ก์ธ์ค ๊ณ ๋๋ฆฌ์ ํ์ํ ์ ๋ณด๋ค ์ ์ฅํจ
ํ ์คํธ, ๋ฐ์ดํฐ, ์คํ์ ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ๋ ์๊ทธ๋ ํจ์์ ์ฒ๋ฆฌ๋ฅผ ์ํ ์๊ทธ๋ ๋ฒํธ, ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ ๋ณด ๋ฑ ๋ค์ํ ์ ๋ณด ์ ์ฅ
๋ฆฌ๋ ์ค์์ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ task_struct ๊ตฌ์กฐ์ฒด๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ค
ํ๋ก์ธ์ค์ ๊ดํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ณด๊ดํ๋ ํ๋ก์ธ์ค ์์ ์, ๋ง์ ๊ตฌ์กฐ์ฒด์ ๋ฉค๋ฒ๋ก ์ด๋ค์ง
ps ๋ช ๋ น์ด๋ก ์ ๋ณด ๊ฐ์ ธ์ด
proc ๋๋ ํฐ๋ฆฌ๋ก ํ์ฌ ์คํ๋๋ ํ๋ก์ธ์ค ์ ๋ณด ํ์ธ
์คํ์ค์ธ ๊ฐ๊ฐ์ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ /proc ๋๋ ํฐ๋ฆฌ ์์ PID ์ซ์ ์ด๋ฆ์ ์๋ธ ๋๋ ํฐ๋ฆฌ์ ์กด์ฌํจ
ls /proc/
๊ด๋ จ ์ ๋ณด๋ status ํ์ผ์ ํตํด ์ดํด๋ณผ ์ ์์