Process
Thread
Multi-Process & Multi-Thread
ํ๋ก์ธ์ค ๊ด๋ฆฌ
ํ๋ก์ธ์ค ๊ฐ ํ๋ ฅ
โProcess is a program in executionโ
ํ๋ก์ธ์ค๋ ์คํ์ค์ ์๋ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ค.
- ๋์คํฌ์ ์คํ ํ์ผ(exe ๋ฑ)์ ํํ๋ก ์กด์ฌํ๋ ํ๋ก๊ทธ๋จ์ด โ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ์คํ๋๊ธฐ ์์ํ๋ฉด โ ์๋ช ๋ ฅ์ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ๋๋ค.
ํ๋ก์ธ์ค์ Context(๋ฌธ๋งฅ)
์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์คํ์ค์ธ ์๋ถํ ํ๊ฒฝ์์ ์์ฃผ CPU ์ ์ ๊ถ์ ๋นผ์๊ธฐ๊ณ ํ๋ํ๊ฒ ๋๋ค. CPU ์ ์ ๊ถ์ ๋ค์ ํ๋ํ ํ๋ก์ธ์ค๋ ์ด์ ์ ์ํ๋ฅผ ์ฌํํ๊ธฐ ์ํด ์ ๋ณด๊ฐ ํ์ํ๋ฐ, ๊ทธ ์ ๋ณด๋ฅผ ํ๋ก์ธ์ค Context(๋ฌธ๋งฅ)
์ด๋ผ๊ณ ํ๋ค.
ํ๋ก์ธ์ค Context์๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋๋๋ค.
-
CPU์ ์ํ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋์จ์ด ๋ฌธ๋งฅ (pc๊ฐ, ๋ ์ง์คํฐ ์ ๋ณด)
ํ๋์จ์ด ๋ฌธ๋งฅ์ด๋ CPU์ ์ํ ์ํ๋ฅผ ๋ํ๋ด๋ ์ ๋ณด๋ก์, Program Counter ๊ฐ๊ณผ ๊ฐ์ข ๋ ์ง์คํฐ์ ์ ์ฅํ๊ณ ์๋ ๊ฐ๋ค์ ์๋ฏธํ๋ค.
Program Counter ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋ช ๋ น์ด๋ฅผ ์ด๋ ์ง์ ๊น์ง ์ํํ๋์ง ๊ฐ๋ฆฌํค๊ณ ์๋ค.
-
ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ (code, data, stack)
-
ํ๋ก์ธ์ค ๊ด๋ จ ์ปค๋ ์๋ฃ ๊ตฌ์กฐ (PCB, Kernel stack)
PCB
์ด์ ์ฒด์ ์ปค๋์ ์๋ฃ๊ตฌ์กฐ๋ก์ ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ ์์์ ์ค์ ํ๊ณ ๊ฐ์ํ๋ ๋ฐ ํ์ํ ํ๋ก์ธ์ค์ ์ ๋ณด๋ฅผ PCB(Process Control Block)๋ผ ํ๋ค.
- ์ด์์ฒด์ ๋ ํ์ฌ ์คํ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์์ (์ปค๋)์ ๋ฐ์ดํฐ ์์ญ์ ํด๋น ํ๋ก์ธ์ค์ PCB๋ฅผ ๋๋ค.
Kernel stack
ํ๋ก์ธ์ค๊ฐ ์์คํ ์ฝ์ ํ๋ฉด (ํ๋ก์ธ์ค๊ฐ ์ํํ ์ ์๋ ์์ ์ ์์ฒญํ๋ฉด) PC๊ฐ Kernel ์ฃผ์ ๊ณต๊ฐ์ code๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ๋ช ๋ น์ด๋ฅผ ์ํํ๋ค. ์ด๋, ํจ์ ํธ์ถ์ด ์ด๋ค์ง๋ฉด ๊ด๋ จ๋ ์ ๋ณด๋ฅผ Kernel stack์ ์์๋๋ค.
- ์ปค๋์ ๋ชจ๋ ํ๋ก์ธ์ค์ ์์คํ ์ฝ์ ์ํํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค๋ง๋ค ๋ณ๋์ Kernel stack ๊ณต๊ฐ์ ๋๋ค.
์ด์ ๊ฐ์ด ํ๋ก์ธ์ค Context ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด(=ํ๋ก์ธ์ค์ ์ด์ ์ํ๋ฅผ ์๊ณ ์์ผ๋ฉด), ๋ค์ ์์ ์ ๋ช ๋ น์ด๋ฅผ ์ํํ ์ ์๊ฒ ๋๋ค.
ํ๋ก์ธ์ค์ ์ํ โ Running, Ready, Blocked
Running
- CPU๋ฅผ ์ก๊ณ ๋ช ๋ น์ด๋ฅผ ์ํ ์ค์ธ ์ํ
Ready
- ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ๋ฐ๋ก ์คํ๋ ์ ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ ํ๋ก์ธ์ค๊ฐ CPU ์ ์ ๊ถ์ ์ป์ง ๋ชปํด ๋๊ธฐ์ค์ธ ์ํ (Ready ์ํ์ ํ๋ก์ธ์ค๋ค์ด CPU ์ ์ ๊ถ์ ํ๋ํ๊ณ ๋นผ์์ผ๋ฉด์ ์๋ถํ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ค)
Blocked (Wait, Sleep)
- CPU๋ฅผ ํ ๋น๋ฐ๋๋ผ๋ ๋น์ฅ ๋ช ๋ น์ ์คํํ ์ ์๋ ์ํ (IO ์์ ๊ณผ ๊ฐ์ด ์์ฒญํ event๊ฐ ๋ฐ๋ก ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ๋ชปํ ๋ ํ๋ก์ธ์ค๋ Blocked ์ํ๊ฐ ๋๋ค)
Suspended (Stopped)
- ์ธ๋ถ์ ์ธ ์ด์ ๋ก ํ๋ก์ธ์ค์ ์ํ์ด ์ ์ง๋ ์ํ์ด๋ค. Suspended ์ํ์ ํ๋ก์ธ์ค๋ ํต์งธ๋ก ๋์คํฌ์ swap out ๋๋ค. (์ค๊ธฐ ์ค์ผ์ฅด๋ฌ์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋นผ์๊ธด ํ๋ก์ธ์ค์ ์ํ์ด๋ค)
- ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์ผ์ ์ ์ง์ํค๊ฑฐ๋, ์์คํ ์ด ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์ค๊ฐ ๋๋ฌด ๋ง์ด ์ฌ๋ผ์ ์์ด ์ ์ ์ค๋จ ์ํฌ ๊ฒฝ์ฐ Suspended ์ํ๊ฐ ๋๋ค.
- ์ธ๋ถ์ ์ธ ์ด์ ๋ก ํ๋ก์ธ์ค์ ์ํ์ด ์ ์ง๋ ์ํ์ด๋ค. Suspended ์ํ์ ํ๋ก์ธ์ค๋ ํต์งธ๋ก ๋์คํฌ์ swap out ๋๋ค. (์ค๊ธฐ ์ค์ผ์ฅด๋ฌ์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋นผ์๊ธด ํ๋ก์ธ์ค์ ์ํ์ด๋ค)
New
: ํ๋ก์ธ์ค๊ฐ ์์ฑ ์ค์ธ ์ํTerminated
: ํ๋ก์ธ์ค์ ์ํ์ด ๋๋ ์ํ
ํ๋ก์ธ์ค ์ํ๋
new โ ready
ํ๋ก์ธ์ค๊ฐ ์์ฑ์ค(new)์ด ๋ค๊ฐ ์์ฑ์ด ๋๋ฉด ready ์ํ๊ฐ ๋๋ค.(ready ์ํ์์๋ cpu ์ ์ ๊ถ์ ์ป์ผ๋ฉด ๋น์ฅ ์คํ์ด ๊ฐ๋ฅํ๋ค)ready โ running
ready ์ํ์ ํ๋ก์ธ์ค๋ cpu์ ์ ์ ๊ถ์ ์ป์ผ๋ฉด running ์ํ๋ก ๋ณํ๋๋ค.- running ์ํ์ ํ๋ก์ธ์ค๋ 3๊ฐ์ง ๊ฒฝ์ฐ์ ์ํด ์ํ๊ฐ ๋ณํ๋๋ค.
running โ terminated
: ํ๋ก์ธ์ค์ ์ํ์ด ๋๋ ๊ฒฝ์ฐ CPU ์ ์ ๊ถ์ ๋ด๋๋๋ค.running โ waiting
: ์ค๋๊ฑธ๋ฆฌ๋ ์์ (IO ์์ )์ ์ํํ ๊ฒฝ์ฐ CPU ์ ์ ๊ถ์ ๋ด๋๋๋คrunning โ ready
: timer interrupt๊ฐ ๋ค์ด์์(=ํ ๋น๋ ์๊ฐ์ด ๋๋์) CPU ์ ์ ๊ถ์ ๋ด๋๋๋ค.
ํ๋ก์ธ์ค ์ํ ์ ํ ์์ : blocked์ queue
- CPU๋ ํ๋์ ํ๋ก์ธ์ค๋ง ์คํํ๋ค. ์ด ๋ timer interrupt๊ฐ ๋ค์ด์ค๋ฉด ํด๋น ํ๋ก์ธ์ค๋ Ready Queue ๋ค๋ก ๋ค์ด๊ฐ ready ์ํ๊ฐ ๋๋ค.
- ํ๋ก์ธ์ค๊ฐ CPU์ ์ ๊ถ์ ์ป์ด ์คํ์ค์ธ running ์ํ์๋ค๊ฐ, Disk IO ์์
์ ์ํํ๊ฒ ๋๋ฉด Disk IO Queue ๋ค๋ก ๋ค์ด๊ฐ blocked ์ํ๊ฐ ๋๋ค.
- Disk IO ์์ ์ด ๋๋๋ฉด Disk Controller๊ฐ CPU์๊ฒ Interrupt๋ฅผ ๋ ๋ ค ์ด๋ฅผ ์๋ฆฐ๋ค.
- CPU๋ ์ด์์ฒด์ ์๊ฒ ์ด๋ฅผ ์๋ฆฌ๊ณ , ์ด์์ฒด์ ๋ ํด๋น ํ๋ก์ธ์ค๋ฅผ ready ์ํ๋ก ๋ณํ์ํค๊ณ Ready Queue ๋ค์ ๋ฃ๋๋ค.
- ํ๋์จ์ด ์์๋ฟ๋ง ์๋๋ผ ์ํํธ์จ์ด ๊ณต์ ์์(๋ฐ์ดํฐ)๊ฐ ์๋ค.
- ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฐ์ดํฐ์ ๋์์ ์ ๊ทผํ๋ฉด ์ผ๊ด์ฑ์ด ๊นจ์ง ์ ์๋ค. ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ํ๋ก์ธ์ค๋ Resource Queue ๋ค์ ๋ค์ด๊ฐ blocked ์ํ๊ฐ ๋๋ค. (๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ์์ ์ด ์ค๋๊ฑธ๋ฆด ๊ฒฝ์ฐ blocked ์ํ๊ฐ ๋๋ ๊ฒ์ด๋ค)
์ฌ์ค queue๋ ์ด์์ฒด์ ์ Kernel data ์์ญ์์ ์๋ฃ๊ตฌ์กฐ๋ก ๊ตฌํ๋์ด์๋ค.
PCB
PCB๋ ์ด์์ฒด์ ๊ฐ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ธ์ค๋น ์ ์งํ๋ ์ ๋ณด๋ก ๊ตฌ์กฐ์ฒด๋ก ์ ์ง๋๋ค.
- ์ด์์ฒด์ ๊ฐ ๊ด๋ฆฌ์ ์ฌ์ฉํ๋ ์ ๋ณด
- CPU ์ํ ๊ด๋ จ ํ๋์จ์ด ๊ฐ
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ ๋ณด
- ํ์ผ ๊ด๋ จ ์ ๋ณด
๋ฌธ๋งฅ ๊ตํ
์ด๋ CPU ์ ์ ๊ถ์ด ํ์ฌ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋์ด๊ฐ๋ ๊ณผ์ ์ด๋ค.
ํ๋ก์ธ์ค๋ CPU ์ ์ ๊ถ์ ๋บ๊ธฐ๋ ์์ ์ ๋ฌธ๋งฅ์ ๊ธฐ์ตํด๋์๋ค๊ฐ CPU ์ ์ ๊ถ์ ๋ค์ ํ๋ํ์ ๋, ๊ธฐ์ตํด๋ ๋ฌธ๋งฅ์ ์ด์ฉํ์ฌ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ํํ๋ค.
-
CPU ์ ์ ๊ถ์ ๋นผ์๊ธฐ๋ ์ํฉ
๋บ๊ธฐ๋ ์์ ์ ๋ฌธ๋งฅ์ ๊ธฐ์ตํ๊ธฐ ์ํด ํด๋น ํ๋ก์ธ์ค์ PCB์๋ค CPU์ PC๊ฐ๊ณผ ๋ ์ง์คํฐ ๊ฐ์ ์ ์ฅํด๋๋ค. (ํ๋ก์ธ์ค์ PCB ์ ๋ณด๋ Kernel data์ ํ๋ก์ธ์ค๋ง๋ค ์ ์ฅ๋์ด์๋ค)
-
CPU ์ ์ ๊ถ์ ์ป๋ ์ํฉ
์ด์์ฒด์ ๋ Kernel data์ ์ ์ฅ๋ ํด๋น ํ๋ก์ธ์ค์ PCB์์ CPU์ PC๊ฐ ๋ฐ ๋ ์ง์คํฐ ๊ฐ์ ๋ณต์์์ผ์ค๋ค. ๊ทธ๋ฐ ๋ค์์ CPU ์ ์ ๊ถ์ ํ๋ก์ธ์ค์๊ฒ ๋๊ฒจ์ฃผ๋ฉด ์คํ๋๋ค.
System call์ด๋ Interrupt๊ฐ ๋ฐ์ํ๋ฉด ํญ์ Context Switch๊ฐ ๋ฐ์ํ๋๊ฐ? โ NO!
์์คํ
์ฝ
์ ํ๋ก์ธ์ค๊ฐ ๋ณธ์ธ์ด ํ์ํ ์์
์ ์ด์์ฒด์ ์๊ฒ ์์ฒญํ๋ ๊ฒ์ด๊ณ , ์ธํฐ๋ฝํธ
๋ Controller์ ๊ฐ์ ์ฅ์น๊ฐ CPU์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ์๋จ์ด๋ค.
์์คํ ์ฝ์ด๋ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด CPU ์ ์ด๊ถ์ด ์ฌ์ฉ์ ํ๋ก์ธ์ค โ ์ด์์ฒด์ ์ปค๋๋ก ๋์ด๊ฐ๋ค. ์ด ๋, ์ ์ ๋ชจ๋์ ์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ์ด์์ฒด์ ์ปค๋๋ชจ๋๋ก ์ ํ๋๋ ๊ฒ์ ๋ฌธ๋งฅ ๊ตํ์ด๋ผ๊ณ ํ์ง ์๋๋ค. (๋ฌธ๋งฅ ๊ตํ์ ์ฌ์ฉ์ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ก CPU ์ ์ด๊ถ์ด ๋์ด๊ฐ๋ ๊ฒ์ด๋ค)
-
์ฌ์ฉ์ ํ๋ก์ธ์ค A โ ์ด์์ฒด์ ์ปค๋ โ ์ฌ์ฉ์ ํ๋ก์ธ์ค A
: ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋์ง ์๋๋ค.๋ฌผ๋ก ์ด ๊ฒฝ์ฐ์๋ CPU ๋ฌธ๋งฅ์ ์ผ๋ถ๋ฅผ PCB์ ์ ์ฅํ์ง๋ง ๋ฌธ๋งฅ ๊ตํ๋งํผ ๋ถ๋ด์ด ํฌ์ง ์๋ค
-
์ฌ์ฉ์ ํ๋ก์ธ์ค A โ ์ด์์ฒด์ ์ปค๋ โ ์ฌ์ฉ์ ํ๋ก์ธ์ค B
: ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋๋ค.ํ๋ก์ธ์ค A๊ฐ ์ฌ์ฉํ๋ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ ์ง์(flush)์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ด์ด ํฌ๋ค
ํ๋ก์ธ์ค๋ค์ ๊ฐ ํ๋ฅผ ์ค๊ฐ๋ฉฐ ์ํ๋๋ค.
Job Queue
: ํ์ฌ ์์คํ ๋ด์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค ์งํฉ์ด๋ค. (Ready Queue, Device Queues๋ฅผ ํฌํจํ๋ค)Ready Queue
: ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์์ผ๋ฉด์ CPU๋ฅผ ์ก์์ ์คํ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ค๋น ์ํ์ ํ๋ก์ธ์ค ์งํฉ์ด๋ค.Device Queue
: I/O ๋๋ฐ์ด์ค์ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ด์ ์ํ์ ํ๋ก์ธ์ค ์งํฉ์ด๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ธ Ready Queue๋ฅผ ์ค์ ์๋ฃ๊ตฌ์กฐ์ ๋ง๊ฒ ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ง ํ
- ํ๋ก๊ทธ๋จ์ด ์์์ด ๋๋ฉด ready queue์์ ๋๊ธฐํ๋ค๊ฐ CPU ์ ์ ๊ถ์ ์ป๊ฒ ๋๋ค.
- CPU ์ ์ ๊ถ์ ๊ฐ์ง๊ณ ์๋ค๊ฐ
- CPU ํ ๋น ์๊ฐ์ด ๋ง๋ฃ๋๋ฉด ๋ค์ ready queue์์ ๋๊ธฐํ๊ฒ ๋๋ค.
- ์ค๋๊ฑธ๋ฆฌ๋ ์์ (IO ์์ )์ ์ํํ๊ฒ ๋๋ฉด, ํด๋น ์์ queue์์ ๋๊ธฐํ๋ค๊ฐ ์์ ์ ์ํํ๊ณ โ IO ์์ ์ด ์๋ฃ๋๋ฉด Controller๊ฐ interrupt๋ฅผ ์ผ์ผ์ผ CPU์๊ฒ ์๋ฆฌ๋ฉด โ ํ๋ก์ธ์ค๋ ready queue์์ CPU ์ ์ ๋ฅผ ๋๊ธฐํ๊ฒ ๋๋ค.
์ค์ผ์ค๋ฌ
๋ ์ด๋ค ํ๋ก์ธ์ค์๊ฒ ์์์ ํ ๋นํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์ด์์ฒด์ ์ปค๋์ ์ฝ๋๋ฅผ ์ง์นญํ๋ค. ์ค์ผ์ค๋ฌ์๋ 3๊ฐ์ง ์ค์ผ์ค๋ฌ๊ฐ ์กด์ฌํ๋ค.
-
Long-Term Scheduler (์ฅ๊ธฐ ์ค์ผ์ค๋ฌ or job scheduler)
๋ฉ๋ชจ๋ฆฌ ๋ฐ ๊ฐ์ข ์์์ ์ด๋ค new ์ํ์ ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ฅด๋ฌ์ด๋ค.
- ํ๋ก์ธ์ค๊ฐ ์์ฑ ์ค์ด๋ค๊ฐ(new) ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ์ผ๋ฉด ๋น๋ก์ ready ์ํ๊ฐ ๋์ด ready queue์์ ๋๊ธฐํ๋ค. ์ด ๋ new ์ํ์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ฃผ๋ ์ญํ ์ ํ๋๊ฒ Long-Term ์ค์ผ์ฅด๋ฌ์ด๋ค.
degree of Multiprogramming ์ ์ด
: ๋ฉ๋ชจ๋ฆฌ์ ๋์์ ์ฌ๋ผ๊ฐ ํ๋ก์ธ์ค์ ์๋ฅผ ์ ์ดํ๋ค.
๋ณดํต ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์๋ถํ ์์คํ ์์๋ ์ฅ๊ธฐ ์ค์ผ์ฅด๋ฌ๊ฐ ์๋ค. (new ์ํ์ ํ๋ก์ธ์ค๋ ๊ณง๋ฐ๋ก ready ์ํ๊ฐ ๋๋ค.) ๊ทธ๋ ๋ค๋ฉด ์๋ถํ ์์คํ ์์๋
degree of Multiprogramming ์ ์ด
๋ฅผ ์ด๋ป๊ฒ ํ ๊น? โ ์ค๊ธฐ ์ค์ผ์ฅด๋ฌ๋ฅผ ์ด์ฉํ๋ค. -
Short-Term Scheduler (๋จ๊ธฐ ์ค์ผ์ค๋ฌ or CPU scheduler)
CPU ์ ์ ๊ถ์ ์ด๋ค ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ฅด๋ฌ์ด๋ค.
- ์ค์ผ์ฅด๋ง์ด ์ผ์ด๋๋ ๋จ์๊ฐ milisecond๋ก ๊ต์ฅํ ์์ฃผ ์ผ์ด๋๋ค.
-
Medium-Term Scheduler (์ค๊ธฐ ์ค์ผ์ค๋ฌ or Swapper)
๋ฉ๋ชจ๋ฆฌ์ ๋ง์ ํ๋ก๊ทธ๋จ์ด ๋์์ ์ฌ๋ผ๊ฐ๊ฒ ๋๋ฉด ์ค๊ธฐ ์ค์ผ์ฅด๋ฌ๊ฐ ์ผ๋ถ ํ๋ก์ธ์ค๋ฅผ ๊ณจ๋ผ๋ด์ด ๋์คํฌ๋ก ์ซ์๋ธ๋ค(ํ๋ก์ธ์ค์๊ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋นผ์๋๋ค). โ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก
degree of Multiprogramming ์ ์ด
๋ฅผ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋์์ ์ฌ๋ผ๊ฐ ์๋ ํ๋ก์ธ์ค์ ์๋ฅผ ์กฐ์ ํ๋ค.์ค๊ธฐ ์ค์ผ์ฅด๋ฌ์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋นผ์๊ธด ํ๋ก์ธ์ค๋ Suspended ์ํ๊ฐ ๋๋ค.
Blocked ์ํ์ Suspended ์ํ์ ์ฐจ์ด์
Blocked
์ํ๋ ํ๋ก์ธ์ค ๋ณธ์ธ์ด ์์ฒญํ ์ด๋ฒคํธ(IO ์์
)๋ฅผ ์ํํ๊ณ ์๋ ์ํ์ ํ๋ก์ธ์ค์ด๋ค. Blocked ์ํ์ ํ๋ก์ธ์ค๋ ์ด๋ฒคํธ ์ํ์ ๋ง์น๋ฉด Ready ์ํ๋ก ๋ณํ๋๋ค. (ํ๋ก์ธ์ค ์
์ฅ์์๋ ๊ณ์ ํน์ ํ ์์
์ ์ํ์ค์ด๋ค)
Suspended
์ํ๋ CPU ๋๋ ์ธ๋ถ(์ฌ๋ ๋๋ ์ค๊ธฐ ์ค์ผ์ฅด๋ฌ)์์๋ถํฐ ๊ฐ์ ๋ก ์ ์ง ๋นํ์ ๋์ ํ๋ก์ธ์ค ์ํ์ด๋ค. Suspended ์ํ์ ํ๋ก์ธ์ค๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋นผ์๊ฒจ ๋์คํฌ๋ก swap out์ด ๋๋ค. ๋ฐ๋ผ์ ์ธ๋ถ(์ฌ๋)์์ resumeํด์ค์ผ active(Running, Ready)ํ ์ํ๊ฐ ๋๋ค.
-
Running (user mode), Running (monitor mode)
์์คํ ์ฝ์ ํ ์ ์ ๋ชจ๋์ ํ๋ก์ธ์ค๋ ์ปค๋ ๋ชจ๋๋ก ์ ํ๋์ด ํด๋น ์์ ์ ์ํํ๋ค. ์ ์ ๋ชจ๋์์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ํ๋ก์ธ์ค๋ฅผ Running(user mode), ์ปค๋ ๋ชจ๋๋ก ์ ํ๋์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ํ๋ก์ธ์ค๋ฅผ Running(moitor mode)๋ก ๋ํ๋ธ๋ค.
-
Suspeded Blocked, Suspended Ready
ํ๋ก์ธ์ค๊ฐ IO ์์ ์ค์ด๋ผ Blocked ์ํ์ผ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋นผ์๊ฒจ ๋์คํฌ๋ก swap out ๋์๋ค๋ฉด Suspended Blocked ์ํ๊ฐ ๋๋ค. IO ์์ ์ ๋ง์น๋ฉด Suspended Ready ์ํ๋ก ์ ํ๋๋ค.
- Swap Out : ๋ฉ๋ชจ๋ฆฌ โ ๋์คํฌ
- Swap In : ๋์คํฌ โ ๋ฉ๋ชจ๋ฆฌ
์ค๋ ๋๋ผ๋ ๊ฐ๋ ์ด ์๋ค๋ฉด...?
ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ฉด ํ๋ก์ธ์ค๋ง์ ์ฃผ์ ๊ณต๊ฐ๊ณผ Kernel data ์์ญ์ ํ๋ก์ธ์ค ์ ๋ณด์ธ PCB๊ฐ ์์ฑ๋๋ค.
๋ง์ฝ ๋์ผํ ์์ ์ ์ํ์ ํ๊ธฐ ์ํด ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ๊ณผ PCB๊ฐ ์ฌ๋ฌ๊ฐ๊ฐ ๋ง๋ค์ด์ ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ญ๋น๊ฐ ์ฌํด์ง๋ค.
์ค๋ ๋๋
"A Thread (or lightweight process) is a basic unit of CPU utilizationโ
์ค๋ ๋
๋ ํ๋ก์ธ์ค๊ฐ ํ ๋น ๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ ๋จ์์ด๋ค.
ํ๋ก์ธ์ค ํ๋์ CPU ์ํ ๋จ์๋ง ์ฌ๋ฌ๊ฐ๋ฅผ ๋์์ ๋, ๊ทธ ๊ฐ๊ฐ์ ์ค๋ ๋๋ผ๊ณ ํ๋ค.
- CPU ์ํ์ ์ํด์ ์คํํ ๋ช
๋ น์ด์ ์์น๋ฅผ ๋ด๋ PC๊ฐ๊ณผ CPU์ ์ธํ
ํ ๋ ์ง์คํฐ ๊ฐ์ด ํ์ํ๋ค. โ
์ค๋ ๋๋ง๋ค ๋ณ๋๋ก PC๊ฐ, ๋ ์ง์คํฐ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค
- ์ค๋ ๋๊ฐ code ๋ถ๋ถ์ ์ํํ๋ค ํจ์ ํธ์ถ์ด ์ผ์ด๋๋ฉด, ํจ์์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ stack์ ์์๋๋ค. โ
์ค๋ ๋๋ง๋ค stack์ด ๋ณ๋๋ก ์กด์ฌํ๋ค. (code, data๋ ๊ณต์ )
์ค๋ ๋์ ๊ตฌ์ฑ
- CPU ์ํ๊ณผ ๊ด๋ จ๋ ์ ๋ณด(PC๊ฐ, ๋ ์ง์คํฐ๊ฐ)
- ํจ์ ํธ์ถ์ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ด์๋ stack ์์ญ
์ฆ, ์ด ๊ฐ๋ค์ ์ค๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ์ง๋ ์ ๋ณด์ด๋ค.
์ค๋ ๋๋ผ๋ฆฌ ๊ณต์ ํ๋ ๋ถ๋ถ = task
- code, data ์์ญ
- OS ์์
ํ๋์ ํ๋ก์ธ์ค์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋์๊ณ ํ๋์ task๋ง ์กด์ฌํ๋ค.
ํ๋์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑํ์ฌ ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์์ ์ ์ํํ๋ ๊ฒ์ด๋ค. ๊ฐ ํ๋ก์ธ์ค ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ๋ถ์ด ํ์ํ๊ฑฐ๋ ๋ ๋ฆฝ๋ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ ธ์ผ ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
-
์์ ์ฑ
๋ ๋ฆฝ๋ ๊ตฌ์กฐ๋ก ํ๋์ ํ๋ก์ธ์ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
-
์ค๋ฒํค๋
๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๊ธฐ ๋๋ฌธ์ Context Switching์ด ์์ฃผ ์ผ์ด๋๋๋ฐ, Context Switchingย ๊ณผ์ ์์ ์บ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ ๋ฑ ๋ฌด๊ฑฐ์ด ์์ ์ด ์งํ๋๊ณ ์๊ฐ์ด ์๋ชจ๋๋ ๋ฑ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
-
ํ๋ก์ธ์ค ๊ฐ์ ํต์ ๋ฐฉ์์ด ๋ฐ๋ก ํ์ํ๋ค
โ IPCํ๋ก์ธ์ค ๊ฐ์๋ ์ปค๋ฎค๋์ผ์ด์ ์ด ์์น์ ์ผ๋ก ์ ํ๋์ด ์๋ค. ํ๋ก์ธ์ค๋ง๋ค ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์๊ณ , CPU๊ฐ ์ฝํ ์คํธ ์ค์์นญ์ ์์๋ก ํ๋๋ฐ, ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํด์ ๊ฐ์ ๋ฐ๊พธ๊ฑฐ๋ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํด๋ฒ๋ฆฌ๋ฉด ํดํน์ด๋ ๋ค๋ฆ์๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ณ๋์ ํต์ ์ด ํ์ํ ๋๊ฐ ์๋๋ฐ
IPC(Inter-Process Communication)
์ด๋ผ๋ ํต์ ์ ํ์ฉํ๋ค.-
file ๊ณต์ ํ๊ธฐ
ํ๋ก์ธ์ค ๊ฐ ์ ์ฅ๋งค์ฒด๋ ๊ณต์ ํ๋ฏ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋, ์์คํ ์ฝ ๋ฑ๋ฑ ๊ฑฐ์น๊ธฐ์๋ ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๊ธฐ ์ด๋ ต๋ค.
-
๋ฉ์์ง ํ
ํค๊ฐ์ ๊ฐ์ง๊ณ ์๋ฐฉํฅ ํต์ ์ ํจ
-
shared memory
์ปค๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ ํ๊ณ , ์ฝ๊ณ ์ฐ๋ ๋ณ์๋ฅผ ํ๋ ์ง์ ํจ
-
ํ์ดํ
fork()ํด์ ์์ฑํ ๋ถ๋ชจ/์์ ๊ด๊ณ์ ์๋ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ์ ๋จ๋ฐฉํฅ์ผ๋ก ํต์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
-
signal
์ปค๋ ๋ชจ๋์์ ์ฌ์ฉ์๋ชจ๋ ์ ํ ์, ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ค.
-
์ธ๋งํฌ์ด
์ค๋ ๋์์ ์๊ณ์์ญ์ ๋ํ ์ ๊ทผ์ ์ผ์์ ์ผ๋ก ๋ฝํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ7. ์์ผ - ๋คํธ์ํฌ ํต์ ์ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ด๋ค.
-
ํ๋์ ํ๋ก์ธ์ค์ ์ฌ๋ฌ ์ค๋ ๋๋ก ์์์ ๊ณต์ ํ๋ฉฐ ์์ ์ ๋๋์ด ์ํํ๋ ๊ฒ์ด๋ค.
-
์๋ต์ฑ (Responsiveness)
- ๋ค์ค ์ค๋ ๋๋ก ๊ตฌ์ฑ๋ task ๊ตฌ์กฐ์์ ํ๋์ ์ค๋ ๋๊ฐ blocked ์ํ์ธ ๋์์๋ ๋์ผํ task ๋ด์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ running ์ํ๋ก ์คํ๋์ด ๋น ๋ฅธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ค ์ค๋ ๋๋ก ์ํ๋ ๋, ํ๋์ ์ค๋ ๋๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ธฐ ์ํด ์๋ฒ์ ๋คํธ์ํฌ ์์ฒญ์ ๊ฑธ์ด blocked ์ํ๊ฐ ๋์ง๋ง(์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ), ๋ค๋ฅธ ์ค๋ ๋๋ running ์ํ์์ ๋ฐ์์ค๋ html ํ์ผ์ ํ๋ฉด์ ์ถ๋ ฅํด์ค ์ ์๋ค.
- ๋ค์ค ์ค๋ ๋๋ก ๊ตฌ์ฑ๋ task ๊ตฌ์กฐ์์ ํ๋์ ์ค๋ ๋๊ฐ blocked ์ํ์ธ ๋์์๋ ๋์ผํ task ๋ด์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ running ์ํ๋ก ์คํ๋์ด ๋น ๋ฅธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
-
์์ ๊ณต์ (Resource Sharing)
ํ๋์ ํ๋ก์ธ์ค ์์ CPU ์ํ ๋จ์์ธ ์ฐ๋ ๋๋ฅผ ๋๊ฒ ๋๋ฉด code, data, resource ์์์ ๊ณต์ ํ์ฌ ํจ์จ์ ์ผ๋ก ์์ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
-
๊ฒฝ์ ์ฑ (Ecomony)
- ๋์ผํ ์ผ์ ์ํํ๋ ๋ค์ค ์ค๋ ๋๊ฐ ํ๋ ฅํ์ฌ ๋์ ์ฒ๋ฆฌ์จ, ์ฑ๋ฅ ํฅ์์ ์ป์ ์ ์๋ค.
- ์๋ก์ด ํ๋ก์ธ์ค ํ๋๋ฅผ ๋ง๋๋ ๊ฒ ๋ณด๋ค ๊ธฐ์กด์ ํ๋ก์ธ์ค์ ์ฐ๋ ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ค๋ฒํค๋๊ฐ ํจ์ฌ ์ ๋ค. (์ค๋ ๋ ๊ฐ์ Context Switching์ ํ๋ก์ธ์ค์ Context Switching๊ณผ ๋ฌ๋ฆฌ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ ํ์๊ฐ ์๊ณ Code, Data, Resource ์์ญ์ ๊ณต์ ํ๋ฏ๋ก Stack ์์ญ๋ง ์ฒ๋ฆฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ)
-
๋ฉํฐ ํ๋ก์ธ์ ์ํคํ ์ฒ์์์ ์ด์ฉ์ฑ (Utilization of MP Architectures)
Multi-Processer(CPU๊ฐ ์ฌ๋ฌ๊ฐ) ์ํคํ ์ณ์์ ๊ฐ๊ฐ์ ์ฐ๋ ๋๊ฐ ์๋ก ๋ค๋ฅธ CPU์์ ๋ณ๋ ฌ์ ์ผ๋ก ์์ ์ ์งํํ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ํจ์จ์ ์ผ๋ก ์์ ์ ์ํํ ์ ์๋ค.
-
์์์ ๊ณต์ ํ๊ธฐ์
๋๊ธฐํ ๋ฌธ์
๊ฐ ๋ฐ์ํ ์ ์๋ค. (๋ณ๋ชฉํ์, ๋ฐ๋๋ฝ ๋ฑ)๋์ผํ ์์์ ๋ํ์ฌ ๋์์ ์์ ์ด ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ ๊ฐ ์ค๋ ๋์ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํดย ์๊ณ ์์ญ์ ๋ํ์ฌ ๋ฎคํ ์ค(mutex), ๋๋ ์ธ๋งํฌ์ด(Semaphore) ๋ฐฉ์์ ํ์ฉํ๋ค.
-
ํ๋์ ์ค๋ ๋์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ ์ฒด ํ๋ก์ธ์ค๊ฐ ์ํฅ์ ๋ฐ๋๋ค
๋ฉํฐ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ, ํ ํ๋ก์ธ์ค์ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์คํ์๋ ์ํฅ์ด ์๋ค.
ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ธ๋ ๋ฉํฐํ๋ก์ธ์ค๋ฅผ ํ๋ฉด์ ๋ฉํฐ์ค๋ ๋๋ฅผ ํ๋ค.
-
๋ฉํฐํ๋ก์ธ์ค
๊ฐ๊ฐ์ ํญ๋ค์ ํ๋ก์ธ์ค์ด๋ค. ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ํ๋ฒ์ ์คํ๋๋ค. ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ฃฝ๋๋ผ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ด์์๋ค.๋ํ ์๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ์ง ์๋๋ค.
-
๋ฉํฐ์ค๋ ๋
๊ฐ ํ์ด์ง์์์ ํ๋ฒ์ ์ฌ๋ฌ ์ผ์ ํ๋ค. ํ๋์ ๋ค์ด๋ก๋๊ฐ ๋๋์ง ์์๋๋ฐ ๋ค๋ฅธ ๋ค์ด๋ก๋๋ฅผ ์์ํ ์ ์๋ค. ์ด๋ฏธ์ง ๋ก๋ฉ์ด ๋๋์ง ์์๋ ๊ทธ ๋ค์ ๊ธ๋ค์ ๋ก๋ฉ์ด ๋์ด ์๋ค.
ํ๋ก์ธ์ค ๊ด๋ฆฌ
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค. (์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ์ง์ ์์ฑํ์ง ๋ชปํ๊ณ
fork
๋ผ๋ ์์คํ ์ฝ์ ํตํด ์ด์์ฒด์ ์๊ฒ ์์ฒญ์ ํ๋ค)- ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค ๊ฐ์๋ ํธ๋ฆฌ ํํ์ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ํ์ฑ๋๋ค. (์ต์ด์ ํ๋ก์ธ์ค โ ์์ ํ๋ก์ธ์ค1 โ ์์ 2 ...)
- ์์ ํ๋ก์ธ์ค๋ ํ์ํ ์์์ ์ด์์ฒด์ ๋ก๋ถํฐ ๋ฐ๊ฑฐ๋ ๋ถ๋ชจ์ ๊ณต์ ํ๋ค.
- ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๊ฐ ์๋ก ๊ณต์กดํ๋ฉฐ ์ํ๋๋ ๋ชจ๋ธ์ด ์๊ณ , ์์์ด ์ข ๋ฃ๋ ๋๊น์ง ๋ถ๋ชจ๊ฐ ๊ธฐ๋ค๋ฆฌ๋(wait, blocked) ๋ชจ๋ธ์ด ์๋ค.
- ์์ ํ๋ก์ธ์ค๋ง์ ๋
์์ ์ธ ์ฃผ์ ๊ณต๊ฐ์ด ๋ง๋ค์ด์ง๋ค
- ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ(code, data, stack)์ ๋ณต์ฌํ๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค์ ํ์ฌ ์คํ์ค์ธ ์ํ๊ฐ ๊ทธ๋๋ก ๋ณต์ฌ๋๋ ๊ฒ์ด๋ค.
- ์์ ํ๋ก์ธ์ค๋ ๋ณต์ ๋ ๊ทธ ๊ณต๊ฐ์ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ์ฌ๋ ค ์คํํ๋ค. (
fork
๋ก ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๊ณ , ๋ง๋ค์ด์ง ์์ ํ๋ก์ธ์ค์ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋ฎ์ด์์ ์คํ์ํค๊ธฐ ์ํดexec
์์คํ ์ฝ์ ์ด์ฉํ๋ค)
fork ์์คํ ์ฝ
fork()
๊ฐ ์คํ๋๋ ์๊ฐ ๋๊ฐ์ ์ฝ๋๋ฅผ ์ํํ๋ ํ๋ก์ธ์ค๊ฐ ์๋ก ์๊ธด๋ค.
fork()
๋ฅผ ์ฒ์ ์คํํ ๋ถ๋ชจ ํ๋ก์ธ์ค
๋ ๊ทธ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๊ณ , ์๋ก ์์ฑ๋ ์์ ํ๋ก์ธ์ค
๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ๊ณผ PC๊ฐ์ ๋ณต์ ํ์๊ธฐ ๋๋ฌธ์ main ํจ์ ์์๋ถํฐ ์คํ๋๋๊ฒ ์๋๋ผ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋๊ฐ์ด ๊ทธ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋๋ค.
ํ์ฌ ์ฝ๋๋ฅผ ์คํํ๋ ํ๋ก์ธ์ค๊ฐ ๋ถ๋ชจ์ธ์ง ์์์ธ์ง ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ fork์ ๋ฐํ ๊ฐ์ ํตํด ๋ถ๊ธฐ์ฒ๋ฆฌํด์ผํ๋ค. (fork
์์คํ
์ฝ์ ๋ฐํ ๊ฐ์ ํ์ฌ ํ๋ก์ธ์ค๊ฐ ๋ถ๋ชจ์ธ ๊ฒฝ์ฐ ์์, ์์์ธ ๊ฒฝ์ฐ 0์ด๋ค)
exec ์์คํ ์ฝ
execlp
๋ผ๋ exec ์์คํ
์ฝ์ด ์ํ๋๋ฉด, ํ์ฌ ์ฝ๋๋ฅผ ์ํํ๋ ํ๋ก์ธ์ค๊ฐ execlp
์ ์ํด ์๋ก์ด ํ๋ก๊ทธ๋จ์ผ๋ก ๋ฎํ์์์ง๋ค. ๊ทธ๋ฌ๋ฉด execlp
์์คํ
์ฝ ์๋์ ์ฝ๋๋ ์คํ๋์ง ์๊ณ ์๋ก์ด ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ค.
์ด๋ ๋ฏ exec ์์คํ ์ฝ์ ์์ ํ๋ก์ธ์ค์๊ฒ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋ฎ์ด์์ธ ๋ ์ฌ์ฉํ๋ค. (pid==0 : ์์์๊ฒ๋ execlp๋ก ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋๋ฆฌ๊ณ , pid>0 : ๋ถ๋ชจ๋ ๋ณธ์ธ์ ํ๋ก๊ทธ๋จ์ ์ํํ๋ค.)
ํ๋ก์ธ์ค๊ฐ ์ ์์ ์ผ๋ก ์ข
๋ฃ๋ ๋๋ exit
์์คํ
์ฝ์ ํตํด ์ด์์ฒด์ ์๊ฒ ์ด๋ฅผ ์๋ฆฐ๋ค.
- ์์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋ ๋๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์๊ฒ output data๋ฅผ ๋ณด๋ด ์ด๋ฅผ ์๋ฆฐ๋ค.
wait
์์คํ ์ฝ
๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ์ข
๋ฃ์ํฌ ๋๋ abort
์์คํ
์ฝ์ ์ด์ฉํ๋ค.
- ์์์ด ํ ๋น ์์์ ํ๊ณ์น๋ฅผ ๋์ด์ค ๊ฒฝ์ฐ
- ์์์๊ฒ ํ ๋น๋ Task๊ฐ ๋์ด์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ข ๋ฃ(exit)๋๋ ๊ฒฝ์ฐ ์์์ ๋จผ์ ์ฃฝ์ด๊ณ ๋ถ๋ชจ๊ฐ ์ข ๋ฃ๋๋ค.
wait ์์คํ ์ฝ
๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ fork๋ก ์์์ ์์ฑํ ๋ค์ ๋ถ๋ชจ๊ฐ wait
์์คํ
์ฝ์ ํธ์ถํ๋ฉด โ ์์ ํ๋ก์ธ์ค๊ฐ ๋๋ ๋๊น์ง ๋ถ๋ชจ ํ๋ก์ธ์ค๋ Blocked
์ํ๊ฐ ๋๋ค. (์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์ด๋๊น Blocked ์ํ)
์ดํ์ ์์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๋ฉด ๋ถ๋ชจ ํ๋ก์ธ์ค๋ Ready
์ํ๋ก ์ ํ๋๋ค.
exit ์์คํ ์ฝ
ํ๋ก์ธ์ค๋ฅผ ์๋ฐ์ ์ผ๋ก ์ข ๋ฃ์ํค๋ ์์คํ ์ฝ์ด๋ค. exit ์์คํ ์ฝ๋ก ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ๋ฅผ โ์๋ฐ์ ์ข ๋ฃโ๋ผ๊ณ ํ๋ค.
๋ฐ๋ฉด์ โ๋น์๋ฐ์ ์ข ๋ฃโ๋ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ์ข ๋ฃ์ํค๋ ๊ฒฝ์ฐ, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ, ํค๋ณด๋๋ก break key๋ฅผ ๋๋ฅธ ๊ฒฝ์ฐ์ด๋ค.
ํ๋ก์ธ์ค ๊ฐ ํ๋ ฅ ๋ฉ์ปค๋์ฆ : IPC (Interprocess Communication)
๐ Message Passing
ํ๋ก์ธ์ค ๊ฐ์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ผ์ฒด ์ฌ์ฉํ์ง ์๊ณ ์ปค๋์ ํตํด ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด์ ํต์ ํ๋ ๋ฐฉ์์ด๋ค. (์ฌ์ฉ์ ํ๋ก์ธ์ค๋ผ๋ฆฌ ์ง์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์ ์ปค๋์ด ์ด๋ฅผ ๋์ ์ ๋ฌํด์ผํ๋ค)
Message Passing ๋ฐฉ์์ ํฌ๊ฒ ๋ ๊ฐ์ง๊ฐ ์๋ค
-
Direct Communication
ํต์ ํ๋ ค๋ ํ๋ก์ธ์ค์ ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ํ์ํ์ฌ ์ ๋ฌํ๋ ๋ฐฉ์์ด๋ค.
-
Indirect Communication
mailbox ๋๋ port๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ๊ฐ์ ์ ์ผ๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ด๋ค. (ํ๋ก์ธ์ค๊ฐ mailbox์ ๋ฉ์์ง๋ฅผ ์ง์ด๋ฃ์ผ๋ฉด, ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๊บผ๋ด ๋ณธ๋ค. ํน์ ํ๋ก์ธ์ค์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ ์ ์๋ค)
๐ Shared Memory
์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ๋ฅผ ๊ณต์ ํ์ฌ ํต์ ํ๋ ๋ฐฉ์์ด๋ค. ์์น์ ์ผ๋ก ํ๋ก์ธ์ค๋ค์ ๊ฐ์ ์์ ์ ์ฃผ์ ๊ณต๊ฐ๋ง ๋ณผ ์ ์๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ shared memory ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉด ์ผ๋ถ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์ ํ ์ ์๋ค. (์ฒ์์๋ Kernel์๊ฒ ์์ฒญ์ ํ์ฌ shared memory๋ฅผ ํ ๋น ๋ฐ์์ผ ํ๋ค.)
shared memory ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ํ๋ก์ธ์ค ๊ฐ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ์ค์ค๋ก ์ฑ ์์ ธ์ผ ํ๋ค.
๋ฐํจ๊ฒฝ ๊ต์๋ ์ด์์ฒด์ ๊ฐ์
https://steady-coding.tistory.com/522
๋ฉํฐ-ํ๋ก์ธ์ค์-๋ฉํฐ-์ค๋ ๋
ํ๋ก์ธ์ค๊ฐ ๋ฌด์์ธ๊ฐ์? (Context, Context Switching, Blocked ์ํ์ Suspended ์ํ ์ฐจ์ด)
์ค์ผ์ฅด๋ฌ์ ๋ํด ์์๋์? (์ค์ผ์ฅด๋ฌ ์ข ๋ฅ)
์ค๋ ๋๊ฐ ๋ฌด์์ธ๊ฐ์?
๋ฉํฐ ํ๋ก์ธ์ค, ๋ฉํฐ ์ค๋ ๋์ ์ฅ๋จ์ ์ ๋ํด ์ค๋ช ํด๋ณด์ธ์
IPC์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์