ํ๋ก์ธ์ค๋?
ํ๋ก์ธ์ค๋ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋งํ๋ค.
ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ(context)
ํน์ ์์ ์์ ํ๋ก์ธ์ค๊ฐ ์ด๋์๋ถํฐ ์ด๋๊น์ง ์คํ๋๋์ง์ ์ํ๋ฅผ ํํํ ํ๋์จ์ด ๋ฌธ๋งฅ์ด๋ค. ์๋ ๋ด์ฉ๋ค์ ๋ชจ๋ ํฌํจํด ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ด๋ผ๊ณ ํ๋ค. ํ๋ ์ปดํจํฐ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ time sharing์ ํ๋ฉฐ ๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ค์ ํ๋ก์ธ์ค๋ก ๋์ด๊ฐ ๋ ์ด์ ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ ์ ์ฅํด๋์ผ ๋ค์ ๋์์์ ๋ ์ ์์ ์ผ๋ก ์คํํ ์ ์๋ค.
ํ๋์จ์ด ๋ฌธ๋งฅ
๋ค์์ ์คํํ ๋ช ๋ น์ด ์ฃผ์๋ฅผ ๋ด๊ณ ์๋ Program Counter ์ ๊ฐ์ข register์ ์ ๋ณด
ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ
code, data, stack ์ ์ด๋ค ๋ด์ฉ์ด ๋ค์ด ์๋๊ฐ.
ํ๋ก์ธ์ค ๊ด๋ จ ์ปค๋ ์๋ฃ ๊ตฌ์กฐ
ํ๋ก์ธ์ค ๊ด๋ฆฌ๋ฅผ ์ํ ์๋ฃ๊ตฌ์กฐ์ธ PCB(Process Control Block) ์ ์ด์์ฒด์ ์์ ํด๋น ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ kernel stack.
ํ๋ก์ธ์ค์ ์ํ(Process State)
ํ๋ก์ธ์ค๋ ์๋ ์ธ ๊ฐ์ง ์ํ๋ก ๋ณ๊ฒฝ๋๋ฉฐ ์ํ๋๋ค.
Ready๋ Memory ์ Address Space ๋ฅผ ์ธํ ํ๋ ๋ฑ์ ์์ ์ด ๋ชจ๋ ๋๋๊ณ ๋ง์ง๋ง์ผ๋ก CPU๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๋ค. ์ดํ CPU ์ ์ฐจ์งํ๊ณ instruction์ ์ํ์ค์ธ ์ํ๋ฅผ Running ์ด๋ผ๊ณ ํ๋ค. ๋ง์ฝ I/O ์์ ์ ํ๊ฑฐ๋ disk์์ file์ ์ฝ์ด์ค๋ ๋ฑ ์์ฒญํ event ๊ฐ ๋ง์กฑ๋์ง ์์ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋๋ผ CPU๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ํ๊ฐ ๋๋ฉด Blocked(=wait, sleep) ์ํ๊ฐ ๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ New ๋ผ๋ ํ๋ก์ธ์ค ์์ฑ ์ค์ธ ์ํ์ Terminated ๋ผ๋ ํ๋ก์ธ์ค ์ํ์ด ๋๋๊ณ ๋๋ผ ์ค๋น๋ฅผ ํ๋ ์ํ๋ ๊ฐ์ด ๋งํ๊ธฐ๋ ํ๋ค. ๋ง์ฝ ๊ณ์ ์คํ๋์ด์ผ ํ๋๋ฐ time sharing ๋๋ฌธ์ timer ๊ฐ ๋๋๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ CPU ์ ์ด๋ฅผ ๋๊ธฐ๋ฉด ๋ค์ Ready ์ํ๊ฐ ๋๋ค.
์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์์ ์ ์ฐจ๋ก๊ฐ ๋๊ธธ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ์ค ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ Ready Queue / I/O queue ๋ผ๊ณ ํ๋ค. ํ๋์จ์ด ๋ฟ๋ง ์๋๋ผ ์ํํธ์จ์ด์์ ๊ณต์ ์์์ ์ ๊ทผํ ๋๋ ๋์์ ์ ๊ทผํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฏ๋ก Resource queue ์ ์ค์ธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ฐ๊พธ๊ณ queue์ ์ค์ธ์ฐ๊ณ ๊ฐ์ ์์ ๋ค์ ์ด์์ฒด์ ์ ์ปค๋์ด ๊ด๋ฆฌํ๋ค.
ํ๋ก์ธ์ค ์ค์ผ์ค๋ง ํ
ํ๋ก์ธ๋ ๊ฐ ํ๋ค์ ์ค๊ฐ๋ฉฐ ์ํ๋๋ค.
Job queue
ํ์ฌ ์์คํ ๋ด์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ์งํฉ
Ready queue
ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์์ผ๋ฉด์ CPU ์ ์ด๊ถ์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค์ ์งํฉ
Device queue
I/O device ์ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค์ ์งํฉ
PCB(Process Control Block)
์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ ์งํ๋ ์ ๋ณด์ด๋ค. ์ฆ, ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ ๋ํ ์๋ฃ๊ตฌ์กฐ๋ค.
(1) OS๊ฐ ๊ด๋ฆฌ์ ์ฌ์ฉํ๋ ์ ๋ณด
- Process state, Process ID
- Scheduling information, priority
์์์๋ queue๋ก ์ค์ธ์ฐ๊ณ ์์๋๋ก ์คํํ๋ ๊ฒ์ด๋ผ๊ณ ์ค๋ช ํ์ง๋ง, ์ฌ์ค ๊ทธ ์ค์์๋ ์ฐ์ ์์๊ฐ ๋์ ๊ฒ์ ๋จผ์ ์คํํ๊ฒ๋ ์ค๊ณ๋์ด ์๋ค. ์ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด priority ๋ค.
(2) CPU ์ํ ๊ด๋ จ ํ๋์จ์ด ๊ฐ
- Program counter, registers
(3) ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ
- code, data, stack ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋์ ์์นํด์๋๊ฐ
(4) ํ์ผ ๊ด๋ จ
- file, resource ...
๋ฌธ๋งฅ ๊ตํ(Context Switch)
CPU๊ฐ ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๋ ๊ณผ์ ์ด๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋๊ฒจ์ค ๋ ์ด์ ํ๋ก์ธ์ค์ PCB๋ฅผ ์ ์ฅํ๊ณ , ๋ค๋ฅธ ํ๋ก์ธ์ค์ PCB๋ฅผ ์ฝ์ด์ค๋ฉฐ ์คํํ๋ค.
์์คํ ์ฝ์ด๋ Interrupt ๋ฐ์ ์์ ๋ฌด์กฐ๊ฑด context switch ๊ฐ ์ผ์ด๋๋ ๊ฒ์ ์๋๋ค. ๋ฌธ๋งฅ ๊ตํ์ ์ค๋ฒํค๋๊ฐ ์๋นํ ํฐ ์์ ์ด๋ค. ๋ฐ๋ผ์ (1)๋ฒ๊ฐ์ ๊ฒฝ์ฐ mode ๋ง ๋ฐ๊พธ๊ณ , (2)๋ฒ๊ฐ์ด ํ๋ก์ธ์ค A์์ B๋ก ๋์ด๊ฐ ๋์ ๋ฌธ๋งฅ๊ตํ์ด ์ผ์ด๋๋ค.
์ค์ผ์ค๋ฌ(Scheduler)
Short-term scheduler(=CPU scheduler)
์์ฃผ ์งง์ ์๊ฐ(millisecond ๋จ์)์ ์ด๋ฃจ์ด์ ธ์ผํ๋ ์ค์ผ์ค๋ฌ. ์ด๋ค ํ๋ก์ธ์ค๋ฅผ CPU ์๊ฒ ์ค์ง, ์ฆ running ์ํ๋ก ๋ง๋ค์ง ๊ฒฐ์ ํ๋ค.
Long-term scheduler(=job scheduler)
์คํ๋ ํ๋ก์ธ์ค๋ค ์ค ์ด๋ค ๊ฒ์ momory๋ฅผ ์ค์ง, ์ฆ Ready queue๋ก ๋ณด๋ผ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ค๋ฌ. Multiprogramming ์ ์ ์ดํ๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๋๋ฌด ๋ง์ ํน์ ๋๋ฌด ์ ์ ํ๋ก์ธ์ค๋ฅผ ์ฌ๋ ค๋๋ฉด ์์คํ ์ฑ๋ฅ์ด ์ข์ง ์๊ธฐ ๋๋ฌธ์ ์ ๋นํ๊ฒ ์กฐ์ ํด์ผ ํ๋ค. ์ค๋๋ ์ ์์คํ , time sharing system ์์๋ ์ฅ๊ธฐ ์ค์ผ์ค๋ฌ๊ฐ ์๊ณ ์์๋๋ฉด ๋ฌด์กฐ๊ฑด ready ์ํ๋ก ์ฌ๋ ค์ง๋ค.(๋ฌด์กฐ๊ฑด ์์๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋จ)
Medium-Term Scheduler(=Swapper)
๋ฉ๋ชจ๋ฆฌ์ ๋๋ฌด ๋ง์ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ผ๊ฐ ์์ผ๋ฉด ์ฌ์ ๊ณต๊ฐ ๋ง๋ จ์ ์ํด ํ๋ก์ธ์ค๋ฅผ ํต์งธ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ๋์คํฌ๋ก ์ซ์๋ธ๋ค. ์ด๊ฒ์ Swapper ๋ผ๊ณ ํ๋ค. ์ค๋๋ ์ ์์คํ ์ ์ฅ๊ธฐ ์ค์ผ์ค๋ฌ๋ฅผ ๋์ง ์๊ณ ์ผ๋จ ๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ ํ์ Swapper ๊ฐ ๋๊ตฌ๋ฅผ ์ซ์๋ผ์ง ์ ํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก Multiprogramming ์ ์ ์ดํ๋ค.
์ด ์ค๊ธฐ ์ค์ผ์ค๋ฌ ๋๋ฌธ์ ํ๋ก์ธ์ค์ ์ํ๊ฐ ํ๋ ๋ ์ถ๊ฐ๋ ๊ฒ์ด ์๋ค. ๋ฐ๋ก Suspended(=stopped) ์ํ๋ค. ์ธ๋ถ์ ์ธ ์ด์ ๋ก ํ๋ก์ธ์ค ์ํ์ด ์ ์ง๋ผ์(ํ๋ก์ธ์ค๋ฅผ ์ผ์ ์ค์ง ์ํค๊ฑฐ๋, ๋ฉ๋ชจ๋ฆฌ์ ๋๋ฌด ๋ง์ ํ๋ก์ธ์ค๊ฐ ์๋ค๊ฑฐ๋ ๋ฑ) ํต์งธ๋ก ๋์คํฌ์ swap out ๋ ์ํ๋ค. Blocked ๋ ์์ฒญํ event ๊ฐ ๋ง์กฑ๋๋ฉด Ready ์ํ๊ฐ ๋์ง๋ง, suspended ๋ ์ธ๋ถ์์ resume ํด์ค์ผ ๋ค์ Active ๋๋ค.
์์ ๋ด์ฉ์ ๋ค์ ์ ๋ฆฌํด์ ํ๋ก์ธ์ค์ ์ํ๋๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
Thread (=lighweight process)
ํ๋ก์ธ์ค ๋ด๋ถ์ CPU ์ํ ๋จ์๊ฐ ์ฌ๋ฌ๊ฐ ์๋ ๊ฒ. Adress Space๋ฅผ ์ฌ๋ฌ๊ฐ ์์ฑํ์ง ์๊ณ ๊ทธ ๋ด๋ถ์์ CPU ์ํ ๋จ์๋ง ์ชผ๊ฐ ๋ค. ํ๋ก์ธ์ค ํ๋์์ ๊ณต์ ํ ์ ์๋ ๊ฒ(code, data, os resources ๋ฑ๋ฑ)์ ์ต๋ํ ๊ณต์ ํจ. ๋ณ๋๋ก ๊ฐ์ ธ์ผ ํ๋ program counter, registers, stack ๋ง์ ์ค๋ ๋๋ค์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ์ง.
ํ๋ก์ธ์ค๋ ํ๋์ด๋ฏ๋ก PCB๋ 1๊ฐ๋ง ์์ฑ๋๋ค. ๊ณต์ ํ์ง ์๋ ๋ถ๋ถ๋ง ๋ณ๋๋ก ๊ฐ์ง๊ฒ ๋๋ค.
์ค๋ ๋์ ์ฅ์
Responsiveness
ํ๋์ ํ๋ก์ธ์ค ์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ๋๊ฒ ๋๋ฉด ํ ์ค๋ ๋๊ฐ blocked ์ํ์์๋ ๋์ผํ ํ์คํฌ ๋ด ๋ค๋ฅธ ์ค๋ ๋๊ฐ running ๋๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๋คํธ์ํน ์ค๋ ๋๋ ์๋ฒ์ ์ ์ถ๋ ฅ์ ํ๊ณ , ๊ทธ๋์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ UI๋ฅผ ๋ฏธ๋ฆฌ ๊ทธ๋ ค๋๋ ์์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ์ฌ์ฉ์๊ฐ ๋น ๋ฅด๊ฒ ์๋ต์ ๋ฐ์ ์ ์๋ค. ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ธ์ค ํ๋๋ง ์คํ๋๋ ๋คํธ์ํน์ ํ๋ ๋์ blocked ์ํ๊ฐ ๋๋ ๋ค๋ฅธ ์ผ์ ํ์ง ๋ชปํ๋ค. (์ค๋ ๋๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ์์ )
Resource Sharing
๊ฐ์ ์ผ์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ๋ฌ๊ฐ ๋์๋๋ ๊ฒฝ์ฐ, code/data/os resources ๋ฅผ ๋ ์์ฑํ์ง ์๊ณ ๊ณต์ ํ๋ฏ๋ก ์์์ ์ ์ฝํ ์ ์๋ค.
Economy
Process ๋ฅผ ํ๋ ๋ง๋๋ ๊ฑด ์ค๋ฒํค๋๊ฐ ํฌ์ง๋ง, ํ๋ก์ธ์ค ๋ด์ Thread ํ๋๋ฅผ ๋ง๋๋ ๊ฑด ์ค๋ฒํค๋๊ฐ ํฌ์ง ์๋ค. ๋ Process Context Switching ์ ์ฌ๋ฌ ์์ ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ํฌ์ง๋ง ํ๋ก์ธ์ค ๋ด๋ถ์์ Thread Context Switching ์ ๋๋ถ๋ถ์ด ๋์ผํ๋ฏ๋ก ์ค๋ฒํค๋๊ฐ ํฌ์ง ์๋ค. ์ฆ, ๊ฐ์ ์ผ์ ํ๋ ์์ ๊ฐ์ ๊ฒฝ์ฐ Thread ๋ฅผ ์์ฑํ๊ณ CPU Switching ์ ํ๋ฉด ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์๋ค.
Utillzation of MP(Multi Processor) Architectures
ํ๋ก์ธ์ค๊ฐ ํ๋์ง๋ง CPU๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ ์๋ก ๋ค๋ฅธ CPU ๊ฐ ์ค๋ ๋๋ฅผ ์ด์ฉํด์ ์ผ์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํด ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
ํ๋ก์ธ์ค ์์ฑ๊ณผ ์ข ๋ฃ
ํ๋ก์ธ์ค ์์ฑ
๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค. ํ๋ก์ธ์ค ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํ์ฑ๋จ. ํ๋ก์ธ์ค๊ฐ ์คํ๋๋๋ฐ ํ์ํ ์์์ ์ด์์ฒด์ ๋ก๋ถํฐ ๋ฐ๋๋ฐ, ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์์ ๊ณต์ ํ๋ ๋ชจ๋ธ๋ ์๊ณ ์๋ ๋ชจ๋ธ๋ ์๋ค. ๋ ๋ถ๋ชจ์ ์์์ด ๊ณต์กดํ๋ฉฐ ์ํ๋๋ ๋ชจ๋ธ๋ ์๊ณ ํน์ ์์์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋ชจ๋ธ๋ ์๋ค.
์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๊ณต๊ฐ์ ๋ณต์ฌํ๊ณ ๋ณต์ฌํ ๊ณต๊ฐ์ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ์ฌ๋ฆฐ๋ค. ์ ๋์ค์์๋ fork() ๋ผ๋ ์์คํ ์ฝ๋ก ๋ณต์ฌ๋ฅผ ํ๊ณ exec() ๋ผ๋ ์์คํ ์ฝ๋ก ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋ฎ์ด ์์ด๋ค. ์ฆ, ์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋ ์ด์์ฒด์ ์๊ฒ ์์ฒญํด์ ์์ฑํจ.
ํ๋ก์ธ์ค ์ข ๋ฃ
ํ๋ก์ธ์ค๊ฐ ์ด์์ฒด์ ์๊ฒ ๋ช ์์ ์ผ๋ก exit call ์ ๋ณด๋ด ์ข ๋ฃ์ํจ๋ค. ์ค๊ดํธ๋ฅผ ๋ซ๊ฑฐ๋ return 0์ ํ๊ฑฐ๋ ๋ฑ ์์์ด ๋ถ๋ชจ์๊ฒ output data ๋ฅผ ๋ณด๋ด๋ฉด(wait) ๊ฐ์ข ์์๋ค์ด ์ด์์ฒด์ ์๊ฒ ๋ฐ๋ฉ๋๋ค. ์ด๊ฑด ์์์ด ์์ ์ ์ข ๋ฃ๋ฅผ ์๋ฆฌ๋ ๊ฒ์ด๊ณ , ์์ ํ๋ก์ธ์ค๊ฐ ํ ๋น ์์์ ํ๊ณ์น๊ฐ ๋์ด์๊ฑฐ๋ ์์ ํ๋ก์ธ์ค๊ฐ ๋์ด์ ํ์ํ์ง ์๋ ๊ฒฝ์ฐ, ํน์ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ(exit) ๋๋ ๊ฒฝ์ฐ ๋จ๊ณ์ ์ผ๋ก ์ข ๋ฃ๋์ด์ผ ํ๋ฏ๋ก ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃ์ํฌ ์ ์๋ค(abort)
ํ๋ก์ธ์ค์ ๊ด๋ จ๋ ์์คํ ์ฝ
fork()
์ ์ฌ์ง์ฒ๋ผ fork() ํธ์ถ๋ ์์ ์์ ๋ฌธ๋งฅ์ด ๊ทธ๋๋ก ๋ณต์ฌ๋๊ณ , ๋ฌธ๋งฅ์ด ๋ณต์ฌ๋ ๊ฒ์ด๋ฏ๋ก ์คํ ์์ (PC)๋ ๋ณต์ฌ๋์ผ๋ ์ฒ์๋ถํฐ ์คํ๋๋ ๊ฒ ์๋๋ผ fork() ๊ฐ ํธ์ถ๋ ํ์ ์์ ์์ ์์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ค. ์ฆ fork() ์๋ถ๋ถ์ printf ๋ถ๋ถ์ ์์ ํ๋ก์ธ์ค๋ ์คํํ์ง ์๋๋ค. fork() ์ return value ๊ฐ ๋ค๋ฅด๋ฏ๋ก ๋ถ๋ชจ/์์ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค.
exec()
execlp ๊ฐ ํธ์ถ๋๋ฉด ๊ทธ ์์ ์์ ๋ค๋ฅธ ๋ด์ฉ์ผ๋ก ๋ฎ์ด์์์ง๊ณ , ๊ทธ ๋ด์ฉ์ ์ฒ์๋ถํฐ ์คํ๋๊ณ ์ข ๋ฃ๋๋ฉด ๋ค์ ๋์์ค์ง ์๋๋ค. exec() ์ ํ๋ก์ธ์ค ์์ฑ์์๋ง ์ฐ์ง๋ ์๋๋ค.
wait()
wait() ์์คํ ์ฝ์ด ํธ์ถ๋๋ฉด ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ blocked ์ํ๋ก sleep ์ํจ๋ค. ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๊นจ์ด๋๊ณ ready ์ํ๋ก ๋ฐ๋๋ค. ์์์ด ์ข ๋ฃ๋ ๋๊น์ง ๋ถ๋ชจ๊ฐ ๊ธฐ๋ค๋ฆฌ๋ wait ๋ชจ๋ธ์ ํด๋น๋๋ค.
exit()
ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃ์ํฌ ๋ ํธ์ถํ๋ ์์คํ ์ฝ์ด๋ค. ๋ช ์์ ์ผ๋ก exit() ๋ฅผ ํธ์ถํ ์๋ ์๊ณ , ์ปดํ์ผ๋ฌ๊ฐ ์์์ main ํจ์๊ฐ ๋ฆฌํด๋๋ ์์น์ ๋ฃ์ด์ค๋ค. ๋ณดํต์ ์๋ฐ์ ์ผ๋ก ์ข ๋ฃํ ๋ ์ฐ์ด๋๋ฐ, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋๋ฌธ์ ์์์ ์ฃฝ์ด๋ ๋ฑ์ ์ธ๋ถ์์ ์ข ๋ฃ์ํค๋ ๋น์๋ฐ์ ์ข ๋ฃ์๋ ์ฐ์ธ๋ค.
ํ๋ก์ธ์ค๊ฐ ํ๋ ฅ
์์น์ ์ผ๋ก ํ๋ก์ธ์ค๋ ์์์ด๋ ๋ถ๋ชจ๋ ๊ด๊ณ ์๊ด ์์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ ์ ๋ถ ๋ ๋ฆฝ์ ์ด๋ผ CPU ๋ฅผ ๊ฒฝ์์ ์ผ๋ก ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ์คํํด์ผํ๋ ํ๋ ฅ์ด ํ์ํ ๊ฒฝ์ฐ๋ ์๋ค. ์ด๊ฒ์ ํ๋ก์ธ์ค ๊ฐ ํ๋ ฅ ๋ฉ์ปค๋์ฆ(IPC, Interprocess Communication) ์ด๋ผ๊ณ ํ๋ค. ์ฐธ๊ณ ๋ก ์ค๋ ๋๋ ์ฃผ์๊ณต๊ฐ์ ์์ ํ ๊ณต์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ค๋ ๋ ๊ฐ์๋ ์์ ํ ํ๋ ฅ์ด ๊ฐ๋ฅํ๋ค.
message passing
ํ๋ก์ธ์ค ๊ฐ ๊ณต์ ๋ณ์๋ฅผ ์ผ์ฒด ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์ปค๋์ ํตํด ๋ฉ์์ง๋ฅผ ์ ๋ฌํจ.
shared memory
code ๋ stack ์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋๋ฐ, ๊ทธ ์ผ๋ถ ์ฃผ์ ๊ณต๊ฐ์ ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค ๊ฐ์ ๊ณต์ ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ ผ๋ฆฌ์ ์ธ Address space ๋ ๋ฐ๋ก ๋ง๋ค๋ ์ผ๋ถ ๊ณต๊ฐ์ Memory ์์์ ๊ฒน์ณ์ ํ ๋น๋ฐ๋ ๊ฒ.