ํ๋ก์ธ์ค ์์ฑ Process Creation
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค ์์ฑ
- ๋ณต์ ์์ฑ : process context - code, data, stack / CPU context - PCB์ ๋ชจ๋ ๋ณต์ฌ
- ํ๋ก์ธ์ค์ ํธ๋ฆฌ(๊ณ์ธต ๊ตฌ์กฐ) ํ์ฑ
- ํ๋ก์ธ์ค๋ ์์์ ํ์๋ก ํจ : ์ด์์ฒด์ ๋ก๋ถํฐ ๋ฐ๊ฑฐ๋ ๋ถ๋ชจ์ ๊ณต์
์์์ ๊ณต์
- ๋ถ๋ชจ์ ์์์ด ๋ชจ๋ ์์์ ๊ณต์ ํ๋ ๋ชจ๋ธ : Copy-on-write(COW)
- copy ์์ฒด๋ ๋นํจ์จ์ ์ด๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๋ ํ์
- ๋ฆฌ๋ ์ค ๋ฑ ํจ์จ์ ์ธ OS์์๋ ๊ณต์ ํ ์ ์๋ ๊ฒ์ ๊ณต์ ํ๊ณ ๋ฌ๋ผ์ง๋ ๊ฒ๋ง ์ผ๋ถ copy(write)
- ์ผ๋ถ๋ฅผ ๊ณต์ ํ๋ ๋ชจ๋ธ
- ์ ํ ๊ณต์ ํ์ง ์๋ ๋ชจ๋ธ(์ผ๋ฐ์ : ๋ณ๊ฐ์ ํ๋ก์ธ์ค์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ-์์ ๊ฒฝ์)
์ํ Execution
- ๋ถ๋ชจ์ ์์์ด ๊ณต์กดํ๋ฉฐ ์ํ๋๋ ๋ชจ๋ธ
- ์์์ด ์ข ๋ฃterminate๋ ๋๊น์ง ๋ถ๋ชจ๊ฐ ๊ธฐ๋ค๋ฆฌ๋wait ๋ชจ๋ธ
์ฃผ์ ๊ณต๊ฐ Address Space
- ์์์ ๋ถ๋ชจ์ ๊ณต๊ฐ ๋ฐ ์์์ ๋ณต์ฌํ ํ(binary and OS data) ๊ทธ ๊ณต๊ฐ์ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋ฎ์ด์์
- ์ ๋์ค์ ์
- 1) fork() ์์คํ
์ฝ : ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑ(์ด์์ฒด์ ์๊ฒ ์์ฒญ)
- ๋ถ๋ชจ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌ(OS data except PID + binary) ํ ์ฃผ์ ๊ณต๊ฐ ํ ๋น
- 2) exec() ์์คํ ์ฝ : ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ
- 1) fork() ์์คํ
์ฝ : ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑ(์ด์์ฒด์ ์๊ฒ ์์ฒญ)
ํ๋ก์ธ์ค ์ข ๋ฃ Process Termination
- exit(์๋ฐ์ ): ํ๋ก์ธ์ค๊ฐ ๋ง์ง๋ง ๋ช
๋ น์ ์ํํ ํ ์ด์์ฒด์ ์๊ฒ ์ด๋ฅผ ์๋ ค์ค
- ์์์ด ๋ถ๋ชจ์๊ฒ wait์ ํตํด output data๋ฅผ ๋ณด๋
- ํ๋ก์ธ์ค์ ๊ฐ์ข ์์๋ค์ด ์ด์์ฒด์ ์๊ฒ ๋ฐ๋ฉ๋จ
- abort(๋น์๋ฐ์ ) : ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์์ ์ํ์ ์ข
๋ฃ์ํด
- ์์์ด ํ ๋น ์์์ ํ๊ณ์น๋ฅผ ๋์ด์ ๊ฒฝ์ฐ
- ์์์๊ฒ ํ ๋น๋ task๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ
- ๋ถ๋ชจ๊ฐ exitํ๋ ๊ฒฝ์ฐ : ๋ถ๋ชจ ์ข ๋ฃ -> ์์ ์ข ๋ฃ์์ผ๋ก ๋จ๊ณ์ ์ข ๋ฃ
fork() ์์คํ ์ฝ
ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ์ญํ ๋ก, caller์ ๋์ผํ ์ฃผ์ ๊ณต๊ฐ์ ๋ณต์ ํด์ ํ ๋นํ๋ค.
1) ๋ถ๋ชจ process : ์ฝ๋์ ์ฒ์๋ถํฐ ์์. fork ํ ์๋ ์ฝ๋ ์ด์ด์ ์คํ
2) ์์ process : fork() ์ด๋ฃจ์ด์ง ๋ค์ ์์ ๋ถํฐ ์์(๋ถ๋ชจ process์ PCB๋ฅผ ๋ณต์ ํ๊ธฐ ๋๋ฌธ)
=> fork๊ฐ ๋ฌดํํ ์ผ์ด๋๋ ๊ฒ์ด ์๋
exec() ์์คํ ์ฝ
ํน์ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ image๋ฅผ ๋ฎ์ด์์ - ๋ณต๊ตฌ ๋ถ๊ฐ
- fork()๋ฅผ ํ์ง ์์๋ exec()๊ฐ ๊ฐ๋ฅํ๋ค.
- exec() ์ดํ์ ์๋ ์ฝ๋๋ ์คํํ ์ ์๋ค.
wait() ์์คํ ์ฝ
ํ๋ก์ธ์ค A๊ฐ wait() ์์คํ ์ฝ์ ํธ์ถํ๋ฉด ์ปค๋์ child๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ํ๋ก์ธ์ค A๋ฅผ sleep ์ํด(block ์ํ)
child process๊ฐ ์ข ๋ฃ๋๋ฉด ์ปค๋์ ํ๋ก์ธ์ค A๋ฅผ ๊นจ์ด๋ค(ready ์ํ)
exit() ์์คํ ์ฝ
๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๊ณ , ๋ถ๋ชจ์๊ฒ ์๋ฆผ
- 1) ์๋ฐ์ ์ข
๋ฃ
- ๋ง์ง๋ง statement ์ํ ํ exit() ์์คํ ์ฝ์ ํตํด ์ข ๋ฃ
- ํ๋ก๊ทธ๋จ์ ๋ช ์์ ์ผ๋ก ์ ์ด๋ฃ์ง ์์๋ main ํจ์๊ฐ ๋ฆฌํด๋๋ ์์น์ ์ปดํ์ผ๋ฌ๊ฐ ๋ฃ์ด์ค
- 2) ๋น์๋ฐ์ ์ข
๋ฃ
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ์ข
๋ฃ์ํด
- ์์ ํ๋ก์ธ์ค๊ฐ ํ๊ณ์น๋ฅผ ๋์ด์๋ ์์์ ์์ฒญํ๋ ๊ฒฝ์ฐ
- ์์์๊ฒ ํ ๋น๋ task๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ
- ํค๋ณด๋๋ก kill, break๋ฅผ ์น ๊ฒฝ์ฐ
- ๋ถ๋ชจ๊ฐ ์ข ๋ฃํ๋ ๊ฒฝ์ฐ : ์์๋ค์ด ๋จผ์ ์ข ๋ฃ๋จ
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ์ข
๋ฃ์ํด
ํ๋ก์ธ์ค ๊ฐ ํ๋ ฅ
- 1) ๋
๋ฆฝ์ ํ๋ก์ธ์ค independent process
- ํ๋ก์ธ์ค๋ ๊ฐ์์ ์ฃผ์๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์ํ
- ์์น์ ์ผ๋ก ํ๋์ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํ์ ์ํฅ์ ๋ฏธ์น์ง ๋ชปํจ
- 2) ํ๋ ฅ ํ๋ก์ธ์ค Cooperating process
- ํ๋ก์ธ์ค ํ๋ ฅ ๋ฉ์ปค๋์ฆ์ ํตํด ํ๋์ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํ์ ์ํฅ์ ๋ฏธ์น ์ ์์
ํ๋ก์ธ์ค ๊ฐ ํ๋ ฅ ๋ฉ์ปค๋์ฆ( IPC : interprocess communication)
- message passing : OS ์ปค๋์ ํตํด ๋ฉ์์ง ์ ๋ฌ
- shared memory : ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค ๊ฐ์๋ ์ผ๋ถ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์
- cf) thread : thread๋ ์ฌ์ค์ ํ๋์ ํ๋ก์ธ์ค(ํ๋ก์ธ์ค ์์ ํ๋ ฅ ๋จ์)์ด๋ฏ๋ก ํ๋ก์ธ์ค ๊ฐ ํ๋ ฅ์ ์๋.
- ๋์ผํ process๋ฅผ ๊ตฌ์ฑํ๋ thread ๊ฐ์๋ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์ ํ๋ฏ๋ก ํ๋ ฅ์ด ๊ฐ๋ฅ
Message Passing
ํ๋ก์ธ์ค ์ฌ์ด์ shared variable์ ์ผ์ฒด ์ฌ์ฉํ์ง ์๊ณ ์ด์์ฒด์ ์ปค๋๋ก ํต์ ํ๋ ์์คํ
1) Direct communication
2) Indirect communication
Shared Memory
์ปค๋์๊ฒ shared memory ์์ฑ ์์ฒญ ํ์
'๐ป CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] 6. Process Synchronization (0) | 2022.12.25 |
---|---|
[์ด์์ฒด์ ] 5. CPU Scheduling (0) | 2022.11.27 |
[์ด์์ฒด์ ] 3. Process (0) | 2022.11.20 |
[์ด์์ฒด์ ] 2. System Structure & Program Execution 2 (0) | 2022.11.20 |
[์ด์์ฒด์ ] 2. System Structure & Program Execution 1 (0) | 2022.11.20 |
๋๊ธ