๋ณธ๊ฒฉ์ ์ผ๋ก ํ๋ก์ธ์ค์ ๋ํด์ ๋ค๋ฃจ๊ธฐ ์์ํ๋ค. Ch.1 Overview์์ ๋์๋ฏ์ด ๋์คํฌ์ ์๋ ๊ฒ์ ํ๋ก๊ทธ๋จ, ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๊ฒ์ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋ค. ํ๋ก์ธ์ค๋ Stack, Heap, Data, Code๋ก ๋๋๋ค.
Process State
ํ๋ก์ธ์ค๊ฐ ์ฒ์ ์์ฑ๋์ ๋๋ new, ํ๋ก์ธ์์๊ฒ ํ ๋น๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆด ๋๋ ready, ํ๋ก์ธ์์ ํ ๋น๋์ด ์คํ๋ ๋๋ running, ์คํ ์ค ์ข ๋ฃ๋ ๋๋ terminated, ์คํ ์ค ์์ ์ด ์๋ฃ๋์ด ์ ์ถ๋ ฅ์ ๊ธฐ๋ค๋ฆด ๋๋ waiting ์ํ๋ฅผ ๊ฐ๋๋ค.
Process Control Block (PCB)
๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ์์ ์ ์ ๋ณด ๋ฌถ์์ธ PCB๋ฅผ ๊ฐ์ง๊ณ ์๋ค. PCB์๋ ํ๋ก์ธ์ค ์ํ์ ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ๋ฉ๋ชจ๋ฆฌ ํ๊ณ, ๋ ์ง์คํฐ ์ ๋ณด ๋ฑ์ด ๋ด๊ฒจ์๋ค.
CPU Switch
ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ค๊ฐ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํด ์ด์์ฒด์ ๊ฐ ๊ฐ์ ํ์ฌ ํ๋ก์ธ์์ ํ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ ๋งํ๋ค. ์์คํ ์ฝ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ํ๋ก์ธ์ค๊ฐ ์์ฒด์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์์ฒด์ ๊ฐ ๊ฐ์ ํด์ผ ํ๋ค. CPU ์ค์์นญ์ ํ ๋๋ ์์ ์ค์ด๋ ํ๋ก์ธ์ค์ PCB๋ฅผ ๋ฐฑ์ ํ๋ค.
Threads
ํ๋ก์ธ์ค๋ฅผ ์ชผ๊ฐ ํ๋์ ํ๋ก์ธ์ค ์์์ ๋์์ ์ฌ๋ฌ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค. ์ฑํฐ5์์ ์์ธํ ๋ค๋ฃฌ๋ค.
Process Scheduling
์ด๋ค ํ๋ก์ธ์ค๋ฅผ ํ๋ก์ธ์์ ํ ๋นํ ๊ฒ์ธ๊ฐ ๊ฒฐ์ ํ๋ ์ผ์ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง์ด๋ผ๊ณ ํ๋ค. ์ค์ผ์ค๋ฌ์๋ ready ์ํ์ ํ๋ก์ธ์๊ฐ ์์ฌ ์๋ ๋ ๋ ํ(Ready queue)์ ํ๋ก์ธ์ค๋ฅผ ์ฎ๊ธฐ๋ Long-term ์ค์ผ์ค๋ฌ์ ํ๋ก์ธ์ค๋ฅผ ํ๋ก์ธ์์ ํ ๋นํ๋ Short-term scheduler๊ฐ ์๋ค. Long-term ์ค์ผ์ค๋ฌ๋ CPU ๋ฐ์์ ์์ ํ๋ฉฐ, ๊ฐ๋ ์ํ๋๋ค. Short-term ์ค์ผ์ค๋ฌ๋ ๊ทธ ๋ฐ๋๋ค.
Context Switch
ํ๋ก์ธ์๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ค์์นํ ๋, ์์คํ ์ ์์ ์ค์ด๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์๋ก์ด ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ก๋ํ๋ค. ์ด๊ฒ์ ์ปจํ ์คํธ ์ค์์น๋ผ๊ณ ํ๋ค. ์ปจํ ์คํธ๋ ๋งฅ๋ฝ์ด๋ผ๋ ๋ป์ธ๋ฐ, ์ปดํจํฐ๊ณผํ์์๋ ๋ด ์์คํ ์์ ํ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ํฐ๋ฆญ๋ ์ ๋ณด๋ค์ ์๋ฏธํ๋ค. ํ๋ก์ธ์ ์ ์ฅ์์ ์ปจํ ์คํธ๋ PCB์ด๊ธฐ ๋๋ฌธ์ PCB ์ ๋ณด๊ฐ ๋ฐ๋๋ ๊ฒ์ ์ปจํ ์คํธ ์ค์์น๋ผ๊ณ ํ๋ ๊ฒ์ด๋ค. ์ปจํ ์คํธ ์ค์์น๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ฌด ์์ฃผ ์ผ์ด๋๋ฉด ์ฑ๋ฅ์ ์ ํํ๋ค.
Process Creation
ํ๋ก์ธ์ค๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค. ์ฆ, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ ๋ค. PCB์ ์ ์ฅ๋ pid
๊ฐ์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๋๋ฐ, ์ด๋ ์ด์์ฒด์ ๊ฐ ์ ํด์ค ๊ณ ์ ๋ฒํธ๋ค. ํ๋ก์ธ์ค ์์ฑ์ ํ๋ผ๋๋ฆฌ์ ๋ฒ์๊ณผ ์ ์ฌํ๋ค. ์์คํ
์ฝ์ fork()
ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ ๊ณผ ๋๊ฐ์ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค. ์์ ํ๋ก์ธ์ค๋ exec()
๋ฅผ ํตํด ๋ด์ฉ์ ๋ชจ๋ ๋ฐ๊พผ๋ค. fork()
ํจ์๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์๊ฒ ์์ ํ๋ก์ธ์ค์ pid
๋ฅผ, ์์ํ๋ก์ธ์ค์๊ฒ 0
์ ๋ฐํํ๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๋ ๋์์ ์๋ํ๋ค.
Process Termination
exit()
๋ฅผ ํธ์ถํ๋ฉด ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃ์ํฌ ์ ์๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ณด๋ค ๋จผ์ ์ข
๋ฃ๋๋ฉด ์์ ํ๋ก์ธ์ค๋ ๊ทธ ์์ ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ก ๋ฐ๋ผ๋ณธ๋ค. ์์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋์๋๋ฐ, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๊ฐ ๋ฐํํ ์ ๋ณด๋ฅผ ํ์ํ์ง ์์ผ๋ฉด ์์ ํ๋ก์ธ์ค๋ ์ข
๋ฃ๋์์์๋ ์ ๋ณด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์ ์๋ ์ข๋น ํ๋ก์ธ์ค๊ฐ ๋๋ค.
Interprocess Communication (IPC)
ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๊ฑฐ๋ ์๋ก ํ๋ ฅํ๋ฉฐ ๋์ํ ์ ์๋ค. ํ๋ ฅํ๋ ํ๋ก์ธ์ค๋ค์ ํต์ ํ๋ฉฐ ์๋ก์๊ฒ ์ํฅ์ ๋ฏธ์น๋ค. IPC ๋ชจ๋ธ์๋ ๋ฉ์์ง ํจ์ฑ(Message passing)๊ณผ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ(Shared memory)๊ฐ ์๋ค.
Message Passing
๋ฉ์์ง ํจ์ฑ์ ์ฐํธ์ด๋ค. ์ก์ ํ๋ก์ธ์ค๊ฐ ์ ๋ณด๋ฅผ ๋ฐ๋ ์์ ํ๋ก์ธ์ค์๊ฒ ์ปค๋์ ํตํด ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ฉฐ, ์์ ํ๋ก์ธ์ค๋ ์ปค๋์ ์ ๊ทผํด ์ ๋ณด๋ฅผ ์์ ํ๋ค. ๋ฉ์์ง ํจ์ฑ์ ์ปจํ ์คํธ ์ค์์น๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆฌ๋ค. ๋ค๋ง ์ปค๋์ด ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฉ์์ ๋นํด์ ๊ตฌํ์ด ์ฝ๋ค.
Shared Memory
๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฒ์ํ์ด๋ค. ํน์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ ํ๋ก์ธ์ค๊ฐ ํจ๊ป ์ฌ์ฉํ๋ฉฐ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค. ์ปค๋์ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด์ง๋ง ๋ฉ๋ชจ๋ฆฌ์ ๋์ ์ ๊ทผํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฐ๋ก ๊ตฌํ์ ํด์ค์ผ ํ๋ค.
Producer-Consumer Problem
ํ๋ ฅํ๋ ํ๋ก์ธ์ค ์ค ์ ๋ณด๋ฅผ ์์ฐํ๋ ํ๋ก์ธ์ค๋ฅผ ์์ฐ์(Producer), ์ ๋ณด๋ฅผ ์๋นํ๋ ํ๋ก์ธ์ค๋ฅผ ์๋น์(Consumer)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์์ฐ์-์๋น์ ๋ฌธ์ ๋ ๋ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋์ํ ๋ ์ผ์ด๋๋ ์ด์๋ฅผ ๋งํ๋ค. ๋ณดํต ์ ๋ณด๊ฐ ์์ฐ๋๋ ์๋๊ฐ ์๋นํ๋ ์๋๋ณด๋ค ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋๋ ๋ฒํผ(Buffer)๋ฅผ ์ฌ์ฉํ๋ค. ํฌ๊ธฐ์ ํ๊ณ๊ฐ ์๋ ๋ฒํผ๋ฅผ ์ ํ ๋ฒํผ(Bounded buffer), ๋ฒํผ์ ์์๊ณผ ๋์ ์ด์ด๋ถ์ฌ ํฌ๊ธฐ๊ฐ ๋ฌดํํ ๋ฒํผ๋ฅผ ๋ฌดํ ๋ฒํผ(Unbounded buffer)๋ผ๊ณ ํ๋ค.
Synchronization
๋ฉ์์ง ํจ์ฑ์ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด blocking ๋ฐฉ์๊ณผ non-blocking ๋ฐฉ์์ด ์ฌ์ฉ๋๋ค.
- Blocking send: ์์ ์๊ฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋๊น์ง ์ก์ ์๋ block๋๋ค.
- Blocking receive: ๋ฉ์์ง๋ฅผ ์์ ํ ๋๊น์ง ์์ ์๋ block๋๋ค.
- Non-blocking send: ์ก์ ์๊ฐ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ์์ ์ ๊ณ์ํ๋ค.
- None-blocking receive: ์์ ์๊ฐ ์ ํจํ ๋ฉ์์ง๋ Null ๋ฉ์์ง๋ฅผ ๋ฐ๋๋ค.
Sockets
์์ผ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ํต์ ํ๋ ๋ฐฉ์์ด๋ค. IP์ฃผ์์ ํฌํธ ์ ๋ณด๊ฐ ์์ผ๋ฉด ํด๋ผ์ด์ธํธ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์๋ฒ ํ๋ก์ธ์ค์ ์ ๊ทผํ ์ ์๋ค. RPC(Remote Procedure Calls)๋ ํ๋ก์ธ์ค์ ํ๋ก์ธ์ค๊ฐ ๋คํธ์ํฌ๋ก ์ด์ด์ ธ ์์ ๋ ๋ฐ์ํ๋ ํธ์ถ์ ๋งํ๋ค. ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ํต์ ํ ๋๋ IP์ฃผ์์ ํฌํธ๋ฅผ ๋ํํด์ Stub์ผ๋ก ๋ง๋ค์ด ์ ์กํ๋ค.
Pipes
ํ์ดํ๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๊ฐ ํต์ ํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. ๋ง ๊ทธ๋๋ก ํ๋ก์ธ์ค ์ฌ์ด์ ํ์ดํ๋ฅผ ๋๊ณ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฑด๋ฐ, ํ์ดํ๋ ๋จ๋ฐฉํฅ ํต์ ๋ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๋ฐฉํฅ์ผ๋ก ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ ค๋ฉด ๋ ๊ฐ์ ํ์ดํ๊ฐ ํ์ํ๋ค. (ํ์ดํ๋ ํ์ผ์ด๋ค.) ํ์ดํ์ ์ด๋ฆ์ ๋ถ์ธ named pipe๋ฅผ ์ฌ์ฉํ๋ฉด ๊ผญ ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ์๋๋๋ผ๋ ํ์ดํ๋ฅผ ์ด์ฉํด ํต์ ํ ์ ์๋ค.