Table of Contents
๋ณธ๊ฒฉ์ ์ผ๋ก ํ๋ก์ธ์ค์ ๋ํด์ ๋ค๋ฃจ๊ธฐ ์์ํ๋ค. Ch.1 Overview์์ ๋์๋ฏ์ด ๋์คํฌ์ ์๋ ๊ฒ์ ํ๋ก๊ทธ๋จ, ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๊ฒ์ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋ค. ํ๋ก์ธ์ค๋ Stack, Heap, Data, Code๋ก ๋๋๋ค.
+---------------+ max
| stack |
+-------+-------+
| | |
| v |
| |
| ^ |
| | |
+-------+-------+
| heap |
+---------------+
| data |
+---------------+
| text |
+---------------+ 0
Process State
ํ๋ก์ธ์ค์ ์ํ๋ ํ์ฌ ํ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
+------------interrupt------------+
v |
+-----+ +-------+ +----+----+ +------------+
| new +---admitted-->| ready +---scheduler dispatch-->| running +---exit-->| terminated |
+-----+ +-------+ +----+----+ +------------+
^ +---------+ |
+-----------+ waiting |<----------+
I/O or event completion +---------+ I/O or event wait
- New: ํ๋ก์ธ์ค๊ฐ ์ฒ์ ์์ฑ๋์์ ๋.
- Ready: ํ๋ก์ธ์ค๊ฐ ํ๋ก์ธ์์ ํ ๋น๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆด ๋.
- Running: ํ๋ก์ธ์ค๊ฐ ํ ๋น๋์ด ์คํ๋ ๋.
- Waiting: ํ๋ก์ธ์ค๊ฐ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ค๋ฆด ๋.
- Terminated: ํ๋ก์ธ์ค๊ฐ ์คํ์ ๋ง์ณค์ ๋.
Process Control Block (PCB)
๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ์์ ์ ์ ๋ณด ๋ฌถ์์ธ PCB๋ฅผ ๊ฐ์ง๊ณ ์๋ค. PCB์๋ ํ๋ก์ธ์ค ์ํ์ ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ๋ฉ๋ชจ๋ฆฌ ํ๊ณ, ๋ ์ง์คํฐ ์ ๋ณด ๋ฑ์ด ๋ด๊ฒจ์๋ค.
- Process state: ํ๋ก์ธ์ค์ ์ํ.
- Program counter: ํด๋น ํ๋ก์ธ์ค๊ฐ ์ด์ด์ ์คํํด์ผ ํ ๋ช ๋ น์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์นด์ดํฐ.
- CPU registers: ํ๋ก์ธ์ค๊ฐ ์ธํฐ๋ฝํธ ์ดํ ์ฌ๋ฐ๋ฅด๊ฒ ์์ ์ ์ด์ด๊ฐ๊ธฐ ์ํด ์ฐธ์กฐํ๋ CPU ๋ ์ง์คํฐ ๊ฐ.
- CPU-scheduling information: ํ๋ก์ธ์ค์ ์ค์๋, ์ค์ผ์ค๋ง ํ ํฌ์ธํฐ ๋ฑ ์ค์ผ์ค๋ง ํ๋ผ๋ฏธํฐ ์ ๋ณด.
- Memory-management information: base, limit ๋ ์ง์คํฐ ๊ฐ, ํ์ด์ง ํ ์ด๋ธ ๋ฑ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์ ๋ณด.
- Accounting information: ์ฌ์ฉ๋ CPU ์ด๋, ํ๋ก์ธ์ค ๊ฐ์, ์๊ฐ ์ ํ ๋ฑ.
- I/O status information: ํ๋ก์ธ์ค์ ํ ๋น๋ ์ ์ถ๋ ฅ ์ฅ์น ๋ชฉ๋ก, ์ด๋ฆฐ ํ์ผ ๋ชฉ๋ก ๋ฑ.
Threads
ํ๋ก์ธ์ค๋ฅผ ์ชผ๊ฐ ํ๋์ ํ๋ก์ธ์ค ์์์ ๋์์ ์ฌ๋ฌ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค. ์ง๊ธ๊น์ง๋ ์ฑ๊ธ ์ค๋ ๋ ํ๋ก์ธ์ค๋ฅผ ์ ์ ํ๊ณ ์ดํด๋ดค๋ค. ์ฑ๊ธ ์ค๋ ๋ ํ๋ก์ธ์ค๋ ํ๋ฒ์ ํ๋์ ์์ ๋ง ํ ์ ์๋ค. ๊ฐ๋ น ์๋ ํ๋ก์ธ์ ํ๋ก๊ทธ๋จ์ ์คํํ๋ค๋ฉด, ๊ธ์๋ฅผ ํ์ดํํ ๋ ๊ฐ์ ํ๋ก์ธ์ค ์์์ ๋์ํ๋ ๋ฌธ๋ฒ ๊ต์ ๊ธฐ๊ฐ ๋์์ ๋์ํ ์ ์๋ค. ์ฑํฐ 4์์ ์์ธํ ๋ค๋ฃฌ๋ค.
Process Scheduling
๋ฉํฐํ๋ก๊ทธ๋๋ฐ์ ๋ชฉ์ ์ CPU๋ฅผ ์ต๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด ํญ์ ์ผ๋ถ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๊ฒ์ด๋ค. ํ์์์ด๋ง์ ๋ชฉ์ ์ ํ๋ก์ธ์ค ๊ฐ์ CPU๋ฅผ ์์ฃผ ์ ํํจ์ผ๋ก์จ ์ฌ์ฉ์๊ฐ ๊ฐ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ์๋ก ์ํธ์์ฉํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด ํ๋ก์ธ์ค ์ค์ผ์ค๋ฌ๋ CPU์์์ ํ๋ก๊ทธ๋จ์ ์คํ์ ์ํด ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๋ฉฐ, ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ํ๋ก์ธ์์ ํ ๋นํ ๊ฒ์ธ๊ฐ ๊ฒฐ์ ํ๋ ์ผ์ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง์ด๋ผ๊ณ ํ๋ค.
Scheduling Queues
ํ๋ก์ธ์ค๊ฐ ์์คํ ์ ๋ค์ด์ค๋ฉด ์ก ํ(Job queue)์ ๋ค์ด๊ฐ๋ค. ์ก ํ๋ ์์คํ ์ ๋ชจ๋ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑ๋์ด์๋ค. ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์์ ์คํ์ ๊ธฐ๋ค๋ฆฌ๋ ready ์ํ์ ํ๋ก์ธ์ค๋ค์ ๋ ๋ ํ(Ready queue)์ ์์ธ๋ค. ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค๋ค์ ๋๋ฐ์ด์ค ํ(Device queue)๋ก ๋ค์ด๊ฐ๋ค.
Schedulers
๋ ๋ ํ์ ํ๋ก์ธ์ค๋ฅผ ์ฎ๊ธฐ๋ ๊ฒ์ ์ก ์ค์ผ์ค๋ฌ, ๋๋ Long-term ์ค์ผ์ค๋ฌ๋ผ๊ณ ํ๋ค. ํ๋ก์ธ์ค๋ฅผ ํ๋ก์ธ์์ ํ ๋นํ๋ ๊ฒ์ CPU ์ค์ผ์ค๋ฌ, ๋๋ Short-term ์ค์ผ์ค๋ฌ๋ผ๊ณ ํ๋ค. Long-term ์ค์ผ์ค๋ฌ๋ CPU ๋ฐ์์ ๊ฐ๋ ์ํ๋๋ค. Short-term ์ค์ผ์ค๋ฌ๋ ๊ทธ ๋ฐ๋๋ค.
Context Switch
ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ค๊ฐ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํด ์ด์์ฒด์ ๊ฐ ๊ฐ์ ํ์ฌ ํ๋ก์ธ์์ ํ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ ๋งํ๋ค. ์์คํ ์ฝ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ํ๋ก์ธ์ค๊ฐ ์์ฒด์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์์ฒด์ ๊ฐ ๊ฐ์ ํด์ผ ํ๋ค. ํ๋ก์ธ์๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ค์์นํ ๋, ์์คํ ์ ์์ ์ค์ด๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์๋ก์ด ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ก๋ํ๋ค. ์ปดํจํฐ๊ณผํ์์ ์ปจํ ์คํธ๋ ๋ด ์์คํ ์์ ํ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ํฐ๋ง๋ ์ ๋ณด๋ค์ ์๋ฏธํ๋ค. ํ๋ก์ธ์ ์ ์ฅ์์ ์ปจํ ์คํธ๋ PCB์ด๊ธฐ ๋๋ฌธ์ PCB ์ ๋ณด๊ฐ ๋ฐ๋๋ ๊ฒ์ ์ปจํ ์คํธ ์ค์์น๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ปจํ ์คํธ ์ค์์น๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ฌด ์์ฃผ ์ผ์ด๋๋ฉด ์ฑ๋ฅ์ ์ ํํ๋ค.
Operations on Processes
๋๋ถ๋ถ์ ์์คํ ์์ ํ๋ก์ธ์ค๋ ๋์์ ์คํ๋ ์ ์๊ณ , ์ด๋ค์ ๋์ ์ผ๋ก ์์ฑ๋๊ฑฐ๋ ์ญ์ ๋ ์ ์๋ค. ์์คํ ์ ํ๋ก์ธ์ค ์์ฑ, ์ญ์ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํด์ผ ํ๋ค.
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๋ฅผ ์ฌ์ฉํ๋ฉด ๊ผญ ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ์๋๋๋ผ๋ ํ์ดํ๋ฅผ ์ด์ฉํด ํต์ ํ ์ ์๋ค.