Process ๋?
์คํํ์ผ(program)์ด memory์ ์ ์ฌ๋์ด CPU๋ฅผ ํ ๋น๋ฐ์ ์คํ๋๋ ๊ฒ์ process๋ผ๊ณ ํ๋ค.
์ด์์ฒด์ ๋ฅผ ๊ดํตํ๋ ํต์ฌ์ ์ธ ๋จ์ด ํ๋๋ฅผ ๋ฝ๋๋ค๋ฉด Process์ด๋ค.
์ด์์ฒด์ ๊ฐ ์๋ํ๋ ๋ค์ํ ์๋ฆฌ๋ค์ด ๋ฐ๋ก Process๋ฅผ ์ํด ์กด์ฌํ๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ process์ ์ ์๋ฅผ ์ ์ดํดํ๋ค๋ฉด ์ด์์ฒด์ ์ ๋ค๋ฅธ ๋ด์ฉ๋ค์ ์ดํดํ๊ธฐ ํธํ๋ค.
process๋ฅผ memory์ CPU๊ด์ ์ผ๋ก ์๊ฐํ๊ธฐ!
Process
ํ๋ก์ธ์ค(process)๋ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ(program in execution)์ ๋ปํ๋ค.
์ฆ, ์คํํ์ผ ํํ๋ก ์กด์ฌํ๋ program์ด memory์ ์ ์ฌ๋์ด CPU์ ์ํด ์คํ(์ฐ์ฐ)๋๋๊ฒ์ process๋ผ๊ณ ํ๋ค.
( + program์ ๋จ์ํ ๋ช ๋ น์ด ๋ฆฌ์คํธ๋ฅผ ํฌํจํ๋ ํ์ผ์ด๋ค.)
Memory์ ์ ์ฌ
memory๋ CPU๊ฐ ์ง์ ์ ๊ทผํ ์ ์๋ ์ปดํจํฐ ๋ด๋ถ์ ๊ธฐ์ต์ฅ์น์ด๋ค.
program์ด CPU์์ ์คํ๋๋ ค๋ฉด ํด๋น ๋ด์ฉ์ด memory์ ์ ์ฌ๋ ์ํ์ฌ์ผ๋ง ํ๋ค.
ํ๋ก์ธ์ค์ ํ ๋น๋๋ memory ๊ณต๊ฐ์ Code, Data, Stack, Heap 4๊ฐ์ ์์ญ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ process๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น์ ๋ฐ๋๋ค.
CPU์ ์ฐ์ฐ๊ณผ PC register
ํ๋ก๊ทธ๋จ์ ์ฝ๋๋ฅผ ํ ๋๋ก CPU๊ฐ ์ค์ ๋ก ์ฐ์ฐ์ ํด์ผ๋ง ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ค๊ณ ๋ณผ ์ ์๋ค.
์ด๋ค ์ฝ๋๋ฅผ ์ฝ์ด์ผ ํ๋๊ฐ๋ฅผ ์ ํ๋ ๊ฒ์ CPU ๋ด๋ถ์ ์๋ PC(Program counter) register์ ์ ์ฅ๋์ด ์๋ค.
PC register์๋ ๋ค์์ ์คํ๋ ์ฝ๋(๋ช ๋ น์ด, instruction)์ ์ฃผ์๊ฐ์ด ์ ์ฅ๋์ด ์๋ค.
์ฆ, memory์ ์ ์ฌ๋์ด์๋ process code์์ญ์ ๋ช ๋ น์ด์ค ๋ค์๋ฒ ์ฐ์ฐ์์ ์ฝ์ด์ผํ ๋ช ๋ น์ด์ ์ฃผ์๊ฐ์ PC register๊ฐ ์์ฐจ์ ์ผ๋ก ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ , ํด๋น ๋ช ๋ น์ด๋ฅผ ์ฝ์ด์์ CPU๊ฐ ์ฐ์ฐ์ ํ๊ฒ ๋๋ฉด process๊ฐ ์คํ์ด ๋๋ ๊ฒ์ด๋ค.
process์ momory ์์ญ์ ๋ํด ์ค๋ช
ํ๋ก์ธ์ค๊ฐ ์ด์์ฒด์ ์์ ํ ๋น๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ code, data, stack, heap ์์ญ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
- code ์์ญ์ ์คํํ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- data ์์ญ์ ํ๋ก๊ทธ๋จ์ ์ ์ญ ๋ณ์์ static ๋ณ์๊ฐ ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- heap ์์ญ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๊ณต๊ฐ์ ํ ๋น(malloc)/ํด์ (free) ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- stack ์์ญ์ ํจ์ ํธ์ถ ์ ์์ฑ๋๋ ์ง์ญ ๋ณ์์ ๋งค๊ฐ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
Multi process
Multi process๋ 2๊ฐ ์ด์์ process๊ฐ ๋์์ ์คํ๋๋ ๊ฒ์ ๋งํ๋ค.
๋์์๋ผ๋ ๋ง์ ๋์์ฑ(concurrency)๊ณผ ๋ณ๋ ฌ์ฑ(parallelism) ๋๊ฐ์ง๋ฅผ ์๋ฏธํ๋ค.
๋์์ฑ์ CPU core๊ฐ 1๊ฐ์ผ ๋, ์ฌ๋ฌ process๋ฅผ ์งง์ ์๊ฐ๋์ ๋ฒ๊ฑธ์ ๊ฐ๋ฉด์ ์ฐ์ฐ์ ํ๊ฒ ๋๋ ์๋ถํ ์์คํ (time sharing system)์ผ๋ก ์คํ๋๋ ๊ฒ์ด๋ค.
๋ณ๋ ฌ์ฑ์ CPU core๊ฐ ์ฌ๋ฌ๊ฐ์ผ ๋, ๊ฐ๊ฐ์ core๊ฐ ๊ฐ๊ฐ์ process๋ฅผ ์ฐ์ฐํจ์ผ๋ก์จ process๊ฐ ๋์์ ์คํ๋๋ ๊ฒ์ด๋ค.
๋์์ฑ๊ณผ ๋ณ๋ ฌ์ฑ์ ์์ธํ ๋ด์ฉ
์ฐ๋ฆฌ๊ฐ ์ฐ๋ ๋ ธํธ๋ถ์ CPU core๊ฐ ์ฌ๋ฌ๊ฐ ์๋ค. core๊ฐ ์ฌ๋ฌ๊ฐ์ฌ์ ์ค์ ๋ก ์ฌ๋ฌ process๊ฐ ๋์์ ์ฒ๋ฆฌ๋๋ ๊ฒ์ ๋ณ๋ ฌ์ฑ์ด๋ผ๊ณ ํ๋ค.
์์ผ๋ก ์ค๋ช ํ ๋ชจ๋ ๋ด์ฉ์ Single core์ ๋์์ฑ์ ์ด์ ์ ๋ง์ท๋ค.
Multi process
Multi process๋ 2๊ฐ ์ด์์ process๊ฐ ๋์์ ์คํ๋๋ ๊ฒ์ ๋งํ๋ค.
์ด ๋ process๋ค์ CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ฒ ๋๋ค.
memory์ ๊ฒฝ์ฐ์๋ ์ฌ๋ฌ process๋ค์ด ๊ฐ์์ memory์์ญ์ ์ฐจ์งํ์ฌ ๋์์ ์ ์ฌ๋๋ค.
๋ฐ๋ฉด ํ๋์ CPU๋ ๋งค ์๊ฐ ํ๋์ process๋ง ์ฐ์ฐํ ์ ์๋ค. ํ์ง๋ง CPU์ ์ฒ๋ฆฌ์๋๊ฐ ๋นจ๋ผ์ ์ ms ์ด๋ด์ ์งง์ ์๊ฐ๋์ ์ฌ๋ฌ process๋ค์ด CPU์์ ๋ฒ๊ฐ์ ์คํ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ ์ฅ์์๋ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
์ด์ฒ๋ผ CPU์ ์์ ์๊ฐ์ ์ฌ๋ฌ process๋ค์ด ์กฐ๊ธ์ฉ ๋๋์ด ์ฐ๋ ์์คํ ์ ์๋ถํ ์์คํ (time sharing system)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
์ฌ๋ฌ process๊ฐ ๋์์ memory์ ์ ์ฌ๋ ๊ฒฝ์ฐ,
์๋ก ๋ค๋ฅธ process์ ์์ญ์ ์นจ๋ฒํ์ง ์๋๋ก ๊ฐ process๊ฐ ์์ ์ memory์์ญ์๋ง ์ ๊ทผํ๋๋ก ์ด์์ฒด์ ๊ฐ ๊ด๋ฆฌํด์ค๋ค.
CPU์ ์ฐ์ฐ๊ณผ PC register
CPU๋ PC(Program counter) register๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฝ์ด๋ค์ฌ ์ฐ์ฐ์ ์คํํ๋ค.
PC register์๋ ๋ค์์ ์คํ๋ ๋ช ๋ น์ด์ ์ฃผ์๊ฐ์ด ์ ์ฅ๋์ด ์๋ค.
multi process ์์คํ ์์๋ process1์ด ์งํ๋๊ณ ์์ ๋๋ process1์ code ์์ญ์ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
CPU๋ PC register๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ ๋ฐ๋ผ process๋ฅผ ๋ณ๊ฒฝํด ๊ฐ๋ฉด์ ๋ช ๋ น์ด๋ฅผ ์ฝ์ด๋ค์ด๊ณ ์ฐ์ฐ์ ํ๊ฒ ๋๋ค.
Context
์๋ถํ ์์คํ ์์๋ ํ process๊ฐ ๋งค์ฐ ์งง์ ์๊ฐ๋์ CPU๋ฅผ ์ ์ ํ์ฌ ์ผ์ ๋ถ๋ถ์ ๋ช ๋ น์ ์ํํ๊ณ , ๋ค๋ฅธ process์๊ฒ๋๊ธด๋ค. ๊ทธ ํ ์ฐจ๋ก๊ฐ ๋๋ฉด ๋ค์ CPU๋ฅผ ์ ์ ํ์ฌ ๋ช ๋ น์ ์ํํ๋ค.
๋ฐ๋ผ์ ์ด์ ์ ์ด๋๊น์ง ๋ช ๋ น์ ์ํํ๊ณ , register์๋ ์ด๋ค ๊ฐ์ด ์ ์ฅ๋์ด ์์๋์ง์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๊ฒ ๋๋ค. process๊ฐ ํ์ฌ ์ด๋ค ์ํ๋ก ์ํ๋๊ณ ์๋์ง์ ๋ํ ์ด์ ์ ์ธ ์ ๋ณด๊ฐ ๋ฐ๋ก context์ด๋ค. context ์ ๋ณด๋ค์ PCB(Process Control Block)์ ์ ์ฅ์ ํ๋ค.
PCB (Process Control Block)
PCB๋ ์ด์ ์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ํํํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
PCB์๋ ํ๋ก์ธ์ค์ ์ค์ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์, ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ณดํธ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์์ ์ ์ฅ์ด ๋๋ค.
์ผ๋ถ ์ด์ ์ฒด์ ์์ PCB๋ ์ปค๋ ์คํ์ ์์นํ๋ค. ์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ณดํธ๋ฅผ ๋ฐ์ผ๋ฉด์๋ ๋น๊ต์ ์ ๊ทผํ๊ธฐ๊ฐ ํธ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
PCB | |
Process State | new, running, waiting, halted ๋ฑ์ state๊ฐ ์๋ค. |
Process Number | ํด๋น process์ number |
Program counter(PC) | ํด๋น process๊ฐ ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. |
Registers | ์ปดํจํฐ ๊ตฌ์กฐ์ ๋ฐ๋ผ ๋ค์ํ ์์ ์ ํ์ ๊ฐ์ง register ๊ฐ๋ค |
Memory limits | base register, limit register, page table ๋๋ segment table ๋ฑ |
... |
Context switch
Context switch๋ ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก CPU ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๋ ๊ฒ์ ๋งํ๋ค.
์ด ๋ ์ด์ ์ ํ๋ก์ธ์ค์ ์ํ๋ฅผ PCB์ ์ ์ฅํ์ฌ ๋ณด๊ดํ๊ณ ์๋ก์ด ํ๋ก์ธ์ค์ PCB๋ฅผ ์ฝ์ด์ ๋ณด๊ด๋ ์ํ๋ฅผ ๋ณต๊ตฌํ๋ ์์ ์ด ์ด๋ฃจ์ด์ง๋ค.
Thread
Thread๋ ํ process ๋ด์์ ์คํ๋๋ ๋์(๊ธฐ๋ฅ function)์ ๋จ์์ด๋ค.
๊ฐ Thread๋ ์ํด ์๋ process์ Stack ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ธํ ๋๋จธ์ง memory ์์ญ์ ๊ณต์ ํ ์ ์๋ค.
Thread๋ process๋ด์์ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๋ค.
์ฆ, ๋ ๋ฆฝ์ ์ผ๋ก ํจ์๋ฅผ ํธ์ถํจ์ ์๋ฏธํ๊ณ ์ด๋ฅผ ์ํด stack memory์ PC Register๊ฐ ๊ฐ์ ํ์ํ ๊ฒ์ด๋ค.
Multi thread
Multi thread๋ ํ๋์ process๊ฐ ๋์์ ์ฌ๋ฌ ๊ฐ์ ์ผ์ ์ํํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ์ด๋ค.
์ฆ, ํ๋์ process์์ (์คํ์ด ๋ํ๋์ program์์) ์ฌ๋ฌ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด multi thread๋ฅผ ์ฌ์ฉํ๋ค.
Multi thread์์๋ ํ process ๋ด์ ์ฌ๋ฌ ๊ฐ์ thread๊ฐ ์๊ณ , thread๋ค์ Stack ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ธํ ๋๋จธ์ง ์์ญ(Code, Data, Heap) ์ ๊ณต์ ํ๊ฒ ๋๋ค.
Thread์ Multi thread
Thread๋ process ๋ด์์ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๋ค.
๊ฐ thread๊ฐ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๋ค๋ ๊ฒ์ ๋ ๋ฆฝ์ ์ผ๋ก ํจ์๋ฅผ ํธ์ถํจ์ ์๋ฏธํ๋ค.
Stack memory & PC register
Thread๊ฐ ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ํด์๋ ์ธ์ ์ ๋ฌ, Return Address ์ ์ฅ, ํจ์ ๋ด ์ง์ญ๋ณ์ ์ ์ฅ ๋ฑ์ ์ํ ๋ ๋ฆฝ์ ์ธ stack memory ๊ณต๊ฐ์ ํ์๋ก ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก thread๋ process๋ก๋ถํฐ Stack memory ์์ญ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น ๋ฐ๊ณ , Code, Data, Heap ์์ญ์ ๊ณต์ ํ๋ ํํ๋ฅผ ๊ฐ๊ฒ ๋๋ค.
๋ํ Multi thread์์๋ ๊ฐ๊ฐ์ thread๋ง๋ค PC register๋ฅผ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ๊ทธ ์ด์ ๋ ํ process ๋ด์์๋ thread๋ผ๋ฆฌ context switch๊ฐ ์ผ์ด๋๊ฒ ๋๋๋ฐ, PC register์ code address๊ฐ ์ ์ฅ๋์ด ์์ด์ผ ์ด์ด์ ์คํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
thread๋ ์ ๋ ๋ฆฝ์ ์ธ stack memory ์์ญ์ด ํ์ํ๊ฐ?
Stack ์์ญ์ ํจ์ ํธ์ถ ์ ์ ๋ฌ๋๋ ์ธ์, ํจ์์ Return Address, ํจ์ ๋ด ์ง์ญ๋ณ์ ๋ฑ์ ์ ์ฅํ๊ธฐ ์ํ memory์์ญ์ด๋ค. thread๊ฐ process๋ด์์ "๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ์คํ"ํ๋ค๋ ๊ฒ์ "๋ ๋ฆฝ์ ์ผ๋ก ํจ์๋ฅผ ํธ์ถ"ํจ์ ์๋ฏธํ๋ค.
๋ฐ๋ผ์ thread๊ฐ ๋ ๋ฆฝ์ ์ธ ๋์์ ์คํํ๊ธฐ ์ํด์๋ ๊ฐ thread์ stack memory์์ญ์ด ๋ ๋ฆฝ์ ์ด์ฌ์ผ ํ๋ค.
process์ thread ๋น๊ต ์ค๋ช
process | ์ด์์ฒด์ ๋ก๋ถํฐ ์์์ ํ ๋น๋ฐ๋ ์์
์ ๋จ์์ด๊ณ thread๋ process๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ์ ๋จ์์ด๋ค. ์ฆ, process๋ ์คํํ์ผ(program)์ด memory์ ์ ์ฌ๋์ด CPU๋ฅผ ํ ๋น๋ฐ์ ์คํ๋๋ ๊ฒ์ด๋ค. |
thread | ํ process ๋ด์์ ์คํ๋๋ ๋์์ ๋จ์์ด๋ค. process๋ memory ๊ณต๊ฐ์ code, data, heap, stack ์์ญ์ด ์๋๋ฐ, thread๋ process๋ด์์ stack ์์ญ์ ์ ์ธํ code, data, heap ์์ญ์ ๊ณต์ ํ๋ค. |
Multi process์ Multi thread ๋น๊ต ์ค๋ช
Multi process | - Mulit thread๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๊ณผ CPU ์๊ฐ์ ์ฐจ์งํ๋ค. - ํ๋์ process๊ฐ ์ฃฝ๋๋ผ๋ ๋ค๋ฅธ process์ ์ํฅ์ ์ฃผ์ง ์์ ์์ ์ฑ์ด ๋๋ค. |
Multi thread | - Mulit process๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ Context Switching์ด ๋น ๋ฅด๋ค. - ๋๊ธฐํ ๋ฌธ์ ์ ํ๋์ thread ์ฅ์ ๋ก ์ ์ฒด thread๊ฐ ์ข ๋ฃ๋ ์ํ์ด ์๋ค. |
๋ ๋ฐฉ๋ฒ์ ๋์์ ์ฌ๋ฌ ์์ ์ ์ํํ๋ค๋ ์ธก๋ฉด์์ ์ ์ฌํ ๋ฉด์ด ์๋ค.
์ ์ฉํ ์์คํ ์ ๋ฐ๋ผ ๋ ๋ฐฉ๋ฒ์ ์ฅ๋จ์ ์ ๊ณ ๋ คํ์ฌ ์ ํฉํ ๋ฐฉ์์ ์ ํํด์ผ ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ตฌ๋ถ์ด ํ์ํ ๋๋ multi process๊ฐ ์ ๋ฆฌํ๋ค.
๋ฐ๋ฉด, Context switching์ด ์์ฃผ ์ผ์ด๋๊ณ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ, ๊ทธ๋ฆฌ๊ณ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํด์ผ ๋๋ ๊ฒฝ์ฐ์๋ mulit thread๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ฆฌํ๋ค.
Multi process & Multi thread
Multi process ๋์ multi thread๋ก ๊ตฌํํ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๊ณผ ์์คํ ์์ ์๋ชจ๊ฐ ์ค์ด๋ค๊ฒ ๋๋ค.
ํ์ง๋ง mutli thread๋ฅผ ์ฌ์ฉํ ๋๋ thread๊ฐ ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ณ ๋ คํ ํ๋ก๊ทธ๋จ ์ค๊ณ๊ฐ ํ์ํ๋ค.
๋ํ process๊ฐ์ ํต์ (IPC)๋ณด๋ค thread๊ฐ์ ํต์ ๋น์ฉ์ด ์ ๊ธฐ ๋๋ฌธ์ ํต์ ์ผ๋ก ์ธํ ์ค๋ฒํค๋๊ฐ ์ ๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ / CPU ์๊ฐ | Context switching | ์์ ์ฑ | |
Multi process | ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ / CPU ์๊ฐ ์ฐจ์ง | ๋๋ฆผ | ๋์ |
Mutli thread | ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ / CPU ์๊ฐ ์ฐจ์ง | ๋น ๋ฆ | ๋ฎ์ |
Multi thread๊ฐ multi process๋ณด๋ค ์ข์ ์ ์?
Multi process๋ฅผ ์ด์ฉํ๋ ์์ ์ multi thread๋ก ๊ตฌํํ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๊ณผ ์์คํ ์์ ์๋ชจ๊ฐ ์ค์ด๋ค๊ฒ ๋๋ค.
๋ํ, process๋ฅผ ์์ฑํ๊ณ ์์์ ํ ๋นํ๋ ๋ฑ์ system call์ ์๋ตํ ์ ์๊ธฐ ๋๋ฌธ์ ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
๋ฟ๋ง ์๋๋ผ Context swtiching ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ ํ์๊ฐ ์์ด์ ์๋๊ฐ ๋น ๋ฅด๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋๋ฅผ ๋น๊ตํด๋ณด๋ฉด, process ๊ฐ์ ํต์ (IPC)๋ณด๋ค mutli thread ๊ฐ์ ํต์ ๋น์ฉ์ด ์ ๊ธฐ ๋๋ฌธ์ ํต์ ์ผ๋ก ์ธํ ์ค๋ฒํค๋๊ฐ ์ ๋ค.
Multi thread๊ฐ multi process๋ณด๋ค ์์ข์ ์ ์?
thread ๊ฐ์ ์์ ๊ณต์ ์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด์ ํ๋ก๊ทธ๋จ ์ค๊ณ ์ ์ฃผ์๊ฐ ํ์ํ๊ณ , ํ๋์ thread์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด process๋ด์ ๋ค๋ฅธ thread์๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
Mutli process ํ๊ฒฝ์์ process ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฃผ๊ณ ๋ฐ๋?
์์น์ ์ผ๋ก process๋ ๋ ๋ฆฝ์ ์ธ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ process์ ์ฃผ์ ๊ณต๊ฐ์ ์ฐธ์กฐํ ์ ์๋ค.
ํ์ง๋ง ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ด์์ฒด์ ๋ process ๊ฐ์ ์์ ์ ๊ทผ์ ์ํ ๋งค์ปค๋์ฆ์ธ ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC, Inter Process, Communication)๋ฅผ ์ ๊ณตํ๋ค.
ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC) ๋ฐฉ๋ฒ์ผ๋ก๋ ํ์ดํ, ํ์ผ, ์์ผ, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ์ด์ฉํ ๋ฐฉ๋ฒ์ด ์๋ค.
Multi thread์ ๋ค๋ฅด๊ฒ process๋ผ๋ฆฌ๋ ๋ฐ์ดํฐ ๊ณต์ ๋ฅผ ํ๊ณ ์์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์ IPC ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค. IPC๋ ํฌ๊ฒ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฉ์๊ณผ ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ผ๋ก ๋๋๋ค.
IPC (Inter-Process Communication)
process๋ ๊ฐ์ ์์ ๋ง์ ๋ ๋ฆฝ์ ์ธ ์ฃผ์๊ณต๊ฐ์ ๊ฐ์ง๋๋ฐ, ๋ค๋ฅธ process๊ฐ ์ด ์ฃผ์๊ณต๊ฐ์ ์ฐธ์กฐํ๋ ๊ฒ์ ํ์ฉํ์ง ์๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ process์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ณ ์ ์ด์์ฒด์ ๋ IPC ๊ธฐ๋ฒ์ ํตํด processs๋ค ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
process๊ฐ ํต์ (IPC)์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต์ ๋ฉ๋ชจ๋ฆฌ(shared memory)์ ๋ฉ์์ง ์ ๋ฌ(message passing)์ ๋ ๊ฐ์ง ๋ชจ๋ธ์ด ์๋ค.
๊ณต์ ๋ฉ๋ชจ๋ฆฌ (shared memeory)
๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฉ์์์๋ process๋ค์ด ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ๋ฅผ ๊ณต์ ํ๋ค. ๊ณต์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ํตํด์ ํต์ ์ ์ํํ๋ค. process๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ kernel์ ์์ฒญํ๋ฉด kernel์ ํด๋น process์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด์ค๋ค. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ๊ตฌ์ถ๋ ์ดํ์๋ ๋ชจ๋ ์ ๊ทผ์ด ์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ผ๋ก ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์ ๋์ด์ kernel์ ๋์ ์์ด๋ ๊ฐ process๋ค์ด ํด๋น ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผํ ์ ์๋ค. ๋ฐ๋ผ์ ์ปค๋์ ๊ด์ฌ ์์ด ๋ฐ์ดํฐ๋ฅผ ํต์ ํ ์ ์๊ธฐ ๋๋ฌธ์ IPC ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฐฉ์์ process๊ฐ์ ํต์ ์ผ๋ก ์์ํ๊ฒ ๋ง๋ค์ง๋ง ๋์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ๊ทผํ๊ฒ ๋๋ฉด ์ผ๊ด์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด์ ๋ํด์๋ ์ปค๋์ด ๊ด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ process๋ค ๋ผ๋ฆฌ ์ง์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ๋ํ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ์ฑ ์์ ธ์ผ ํ๋ค.
๋ฉ์์ง ์ ๋ฌ (message passing)
๋ฉ์์ง ์ ๋ฌ ๋ฐฉ๋ฒ์ ํต์ system call์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๋ค.
kernel์ ํตํด send(message)์ receive(message)๋ผ๋ ๋ ๊ฐ์ง ์ฐ์ฐ์ ์ ๊ณต๋ฐ๋๋ค.
์๋ฅผ ๋ค๋ฉด, process1์ด kernel๋ก message๋ฅผ ๋ณด๋ด๋ฉด kernel์ด process2์๊ฒ message๋ฅผ ๋ณด๋ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ณต์ ๋ณด๋ค ์๋๊ฐ ๋๋ฆฌ์ง๋ง, ์ถฉ๋์ ํํผํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋๋ฐ ์ ์ฉํ๊ณ ๊ตฌํํ๊ธฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ํ์ ์ธ ์์๋ก, pipe, socket, message queue ๋ฑ์ด ์๋ค.
IPC์ ์์๋?
IPC๋ ํฌ๊ฒ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ๊ณผ ๋ฉ์์ง ์ ๋ฌ ๋ชจ๋ธ๋ก ๋๋ ์ ์๋ค.
๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ๋ฅผ ๊ณต์ ํ๋ฉฐ ๊ณต์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ read/write๋ฅผ ํตํด ํต์ ํ๊ฒ ๋๋ค. ์์๋ก๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ POSIX๊ฐ ์๋ค.
๋ฉ์์ง ์ ์ก ๋ชจ๋ธ์ ๊ฒฝ์ฐ์๋ kernel์ ํตํด send/receive ์ฐ์ฐ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ์์๋ก๋ Pipe, socket, message queue ๋ฑ์ด ์๋ค.
๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฉ์์ง ์ ๋ฌ ๋ชจ๋ธ์ ์ฅ๋จ์ ์ค๋ช
๋ชจ๋ธ | ์ฅ์ | ๋จ์ |
๊ณต์ ๋ฉ๋ชจ๋ฆฌ | ์ด๊ธฐ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ ์ธํ๋ฉด kernel์ ๊ด์ฌ ์์ด ํต์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ค. | ์ฌ๋ฌ process๊ฐ ๋์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด์ ๋ณ๋์ ๋๊ธฐํ ๊ณผ์ ์ด ํ์ํ๋ค. |
๋ฉ์ธ์ง ์ ๋ฌ | kernel์์ ์ ์ด๋ฅผ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์์ ํ๋ฉฐ kernel์ด ๋๊ธฐํ๋ฅผ ์ ๊ณตํด์ค๋ค. | kernel์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ๋๋ฌธ์ ํต์ ์๋๊ฐ ๋๋ฆฌ๋ค. |
Multi process/thread ํ๊ฒฝ์์ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋?
๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด mutex, semaphore ๊ธฐ๋ฒ ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
Mutext | 1๊ฐ์ ์ค๋ ๋๋ง์ด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋๋ก ํ์ฌ, ๊ฒฝ์ ์ํฉ(race condition)์ ๋ฐฉ์งํ๋ ๊ธฐ๋ฒ์ด๋ค. ๊ณต์ ์์์ ์ ์ ํ๋ thread๊ฐ lock์ ๊ฑธ๋ฉด, ๋ค๋ฅธ thread๋ unlock ์ํ๊ฐ ๋ ๋๊น์ง ํด๋น ์์์ ์ ๊ทผํ ์ ์๋ค. |
Semaphore | S๊ฐ์ thread๋ง์ด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋๋ก ์ ์ดํ๋ ๋๊ธฐํ ๊ธฐ๋ฒ์ด๋ค. Semaphore ๊ธฐ๋ฒ์์๋ ์ ์ํ ๋ณ์ S(์ธ๋ชจํฌ) ๊ฐ์ ๊ฐ์ฉํ ์์์ ์๋ก ์ด๊ธฐํํ๊ณ , ์์์ ์ ๊ทผํ ๋ S-- ์ฐ์ฐ์ ์ํํ์ฌ ์ธ๋งํฌ ๊ฐ์ ๊ฐ์์ํค๊ณ ์์์ ๋ฐฉ์ถํ ๋๋ S++ ์ฐ์ฐ์ ์ํํ์ฌ ์ธ๋งํฌ ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค. ์ด ๋ ์ธ๋งํฌ ๊ฐ์ด 0์ด ๋๋ฉด ๋ชจ๋ ์์์ด ์ฌ์ฉ ์ค์์ ์๋ฏธํ๊ณ , ์ดํ ์์์ ์ฌ์ฉํ๋ ค๋ ํ๋ก์ธ์ค๋ ์ธ๋งํฌ ๊ฐ์ด 0๋ณด๋ค ์ปค์ง ๋๊น์ง block ๋๋ค. |
๋๊ธฐํ ๋ฌธ์
๋๊ธฐํ ๋ฌธ์ ๋ ์๋ก ๋ค๋ฅธ thread๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ thread๊ฐ ๋์ผํ ์์์ ๋์์ ์ ๊ทผํ์ฌ ์๋ฑํ ๊ฐ์ ์ฝ๊ฑฐ๋ ์์ ํ๋ ๋ฌธ์ ์ด๋ค.
์๋ฅผ ๋ค์ด,
count++ ๋ฅผ CPU ์ ์ฅ์์ ๋ถํดํด๋ณด๋ฉด 3๊ฐ์ atomic operations์ผ๋ก ๋๋๋ค.
- count ๋ณ์์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
- count ๋ณ์์ ๊ฐ์ 1 ์ฆ๊ฐ์ํจ๋ค.
- ๋ณ๊ฒฝ๋ count ๊ฐ์ ์ ์ฅํ๋ค.
CPU๋ atomic operation์ ์ฐ์ฐํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ count++์ ํ๊ธฐ ์ํด 3๋ฒ์ ์ฐ์ฐ์ ํ๊ฒ ๋๋ค.
์๋ถํ ์์คํ ์ผ๋ก ์๋ํ๋ multi process/multi thread ์์คํ ์์, ๋ ๊ฐ์ thread๊ฐ ๋์ผํ ๋ฐ์ดํฐ์ธ count์ ๋์์ ์ ๊ทผ์ ํ์ฌ ์กฐ์์ ํ๋ ์ํฉ์ ๊ฐ์ ํด๋ณด์.
thread1์์๋ count++๋ฅผ ํ๊ณ , thread2์์๋ count++๋ฅผ ํ๋ค๋ฉด ๊ทธ ์คํ ๊ฒฐ๊ณผ๊ฐ ์ ๊ทผ์ด ๋ฐ์ํ ์์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค. ์ด๋ฅผ ๊ฒฝ์์ํฉ(rece condition)์ด๋ผ๊ณ ํ๋ค.
์ฆ, ๋ ์ด์์ thread๊ฐ ๋์ผํ ์์์ ์ ๊ทผํ์ฌ ์กฐ์ํ๊ณ , ๊ทธ ์คํ ๊ฒฐ๊ณผ๊ฐ ์ ๊ทผ์ด ๋ฐ์ํ ์์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๊ฒฝ์์ํฉ์ ์ํด์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๊ฒฝ์ ์ํฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด, ์ฐ๋ฆฌ๋ ํ ์๊ฐ์ ํ๋์ process/thread๋ง ํด๋น ์์์ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋๋ก ๋ณด์ฅํด์ผ ํ๋ค. ๋ค์ ๋งํด์ process/thread๋ค์ด ๋๊ธฐํ ๋๋๋ก ํ ํ์๊ฐ ์๋ค.
์๊ณ์์ญ (critical section)
๋ ์ด์์ process/thread๊ฐ ๋์์ ๋์ผํ ์์์ ์ ๊ทผํ๋๋ก ํ๋ ํ๋ก๊ทธ๋จ ์ฝ๋ ๋ถ๋ถ์ ์๋ฏธํ๋ค.
์ค์ํ ํน์ง ์ค ํ๋๋, ํ process/thread๊ฐ ์์ ์ ์๊ณ์์ญ์์ ์ํํ๋ ๋์์๋ ๋ค๋ฅธ process/thread๋ค์ ๊ทธ๋ค์ ์๊ณ๊ตฌ์ญ์ ๋ค์ด๊ฐ ์ ์์ด์ผ ํ๋ค๋ ์ฌ์ค์ด๋ค. ์ฆ, ์๊ณ์์ญ ๋ด์ ์ฝ๋๋ ์์์ ์ผ๋ก(atomically) ์คํ์ด ๋์ด์ผ ํ๋ค.
์์์ ์ผ๋ก ์คํ๋๊ธฐ ์ํด์ ๊ฐ๊ฐ์ process/thread๋ ์์ ์ ์๊ณ๊ตฌ์ญ์ผ๋ก ์ง์ ํ๋ ค๋ฉด ์ง์ ํ๊ฐ๋ฅผ ์์ฒญํด์ผ ํ๋ค.
์ด ๋ถ๋ถ์ entry section ์ด๋ผ๊ณ ํ๊ณ , ์ง์ ์ด ํ๊ฐ๋๋ฉด ์๊ณ์์ญ์ ์คํํ ์ ์๋ค. ์๊ณ์์ญ์ด ๋๋๊ณ ๋๋ฉด exit section์ผ๋ก ํด์ถ์ ํ๊ฒ ๋๋ค. ์๊ณ์์ญ์ ์์์ฑ์ ๋ณด์ฅํ์ฌ process/thread๋ค์ด ๋๊ธฐํ๋๋๋ก ํ ์ ์๋ค.
๋๊ธฐํ ๋ฐฉ๋ฒ์ผ๋ก ๋ํ์ ์ผ๋ก Mutex์ Semaphore๊ฐ์๋ค.
Mutex
๋๊ธฐํ ๋ฐฉ๋ฒ์ค ํ๋๋ก mutual exclusion์ ์ถ์ฝ์ด์ด๋ค. ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ process/thread์ ์๋ฅผ 1๊ฐ๋ก ์ ํํ๋ค.
์๊ณ์์ญ์ ๋ณดํธํ๊ณ , ๊ฒฝ์์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด mutex lock์ ์ฌ์ฉํ๋ค. ์ฆ, process/thread๋ ์๊ณ์์ญ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ฐ๋์ lock์ ํ๋ํด์ผ ํ๊ณ , ์๊ณ๊ตฌ์ญ์ ๋น ์ ธ๋์ฌ ๋ lock์ ๋ฐํํด์ผ ํ๋ค.
acquire()ํจ์๊ฐ lock์ ํ๋ํ๊ณ release() ํจ์๊ฐ lock์ ๋ฐํํ๋ค.
acquire() // entry section
// critical section
release() // exit section
busy waiting์ ๋ค๋ฅธ process/thread๊ฐ ์์ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ CPU๋ฅผ ๋ญ๋นํ๋ค๋ ๋จ์ ์ด ์๋ค.
Semaphore
๋๊ธฐํ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, mutax์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ process/thread์ ๊ฐ์๊ฐ 2๊ฐ ์ด์์ด ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค.
semaphore ๋ณ์ S(์ธ๋งํฌ)์ ๋์์ ์ ๊ทผ ๊ฐ๋ฅํ process/thread์ ๊ฐ์๋ฅผ ์ ์ฅํ๋ค.
S๊ฐ 0๋ณด๋ค ํฌ๋ฉด ์๊ณ์์ญ์ผ๋ก ๋ค์ด๊ฐ ์ ์๊ณ , ์๊ณ์์ญ์ ๋ค์ด๊ฐ๋ฉด S๊ฐ์ 1๊ฐ์ ์ํจ๋ค.
S๊ฐ์ด 0์ด ๋๋ฉด ๋ค๋ฅธ process/thread๋ ์๊ณ์์ญ์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
์๊ณ์์ญ์์์ ์์ ์ด ๋๋๊ณ ์๊ณ์์ญ์์ exitํ๋ฉด์ S๊ฐ์ 1์ฆ๊ฐ ์ํจ๋ค.
wait(S) // entry section
// critical section
signal(S) // exit section
semaphore ๊ฐ์ด 0,1๋ง ๊ฐ์ง ์ ์๋ ๊ฒฝ์ฐ binary semaphore๋ผ๊ณ ํ๋๋ฐ, ์ด๋ mutex๋ ๊ฑฐ์ ์ ์ฌํ๊ฒ ์๋ํ๋ค.
mutex์ semaphore ๊ธฐ๋ฒ ๋น๊ต ์ค๋ช
๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ ๊ฐ์์ ์ํด ์ฐจ์ด๊ฐ ์๋ค.
mutex | ์ค์ง 1๊ฐ์ process/thread๋ง์ด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ค. mutex๋ binary semaphore๋ผ๊ณ ํ ์ ์๋ค. |
semaphore | semaphore๋ ์ธ๋งํฌ ๋ณ์์ ๊ฐ๋งํผ์ process/thread๋ค์ด ๋์์ ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ค. |
๊ต์ฐฉ์ํ (Deadlock)
๋ ์ด์์ thread๊ฐ ๊ฐ๊ธฐ ๋ค๋ฅธ thread๊ฐ ์ ์ ํ๊ณ ์๋ ์์์ ์๋ก ๊ธฐ๋ค๋ฆด ๋, ๋ฌดํ ๋๊ธฐ์ ๋น ์ง๋ ์ํฉ์ ๋งํ๋ค.
deadlock์ด ๋ฐ์ํ๋ ์กฐ๊ฑด์ ์ํธ ๋ฐฐ์ (mutual exclusion), ์ ์ ๋๊ธฐ(hold-and-wait), ๋น์ ์ (no preemption), ์ํ ๋๊ธฐ(circular wait)์ด๋ค. ์ด 4๊ฐ์ง ์กฐ๊ฑด์ด ๋์์ ์ฑ๋ฆฝํ ๋ ๋ฐ์ํ ์ ์๋ค.
deadlock ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์๋ ๋ฌด์, ์๋ฐฉ, ํํผ, ํ์ง-ํ๋ณต 4๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
deadlock์ด ๋ฐ์ํ๊ธฐ ์ํ ์กฐ๊ฑด๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ผญ ์์์ผํ๋ค.
๋ฐ์ ์กฐ๊ฑด | ํด๊ฒฐ ๋ฐฉ๋ฒ | |
Deadlock | ์ํธ๋ฐฐ์ , ์ ์ ๋๊ธฐ, ๋น์ ์ , ์ํ๋๊ธฐ | ๋ฌด์, ์๋ฐฉ, ํํผ, ํ์ง-ํ๋ณต |
Deadlock ๋ฐ์ ์กฐ๊ฑด
deadlock์ ๋ค์ 4๊ฐ์ง ์กฐ๊ฑด์ด ๋์์ ์ฑ๋ฆฝํ ๋ ๋ฐ์ํ ์ ์๋ค.
- ์ํธ ๋ฐฐ์ (mutual exclusion)
- ๋์์ ํ thread๋ง ์์์ ์ ์ ํ ์ ์๋ ์ํฉ์ด๋ค.
- ๋ค๋ฅธ thread๊ฐ ์์์ ์ฌ์ฉํ๋ ค๋ฉด ์์์ด ๋ฐฉ์ถ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
- ์ ์ ๋๊ธฐ (hold-and-wait)
- thread๊ฐ ์์์ใน ๋ณด์ ํ ์ํ์์ ๋ค๋ฅธ thread๊ฐ ๋ณด์ ํ ์์์ ์ถ๊ฐ๋ก ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ์ด๋ค.
- ๋น์ ์ (no preemption)
- ๋ค๋ฅธ thread๊ฐ ์ฌ์ฉ ์ค์ธ ์์์ ๊ฐ์ ๋ก ์ ์ ํ ์ ์๋ ์ํฉ์ด๋ค.
- ์์์ ์ ์ ํ๊ณ ์๋ thread์ ์ํด์๋ง ์์์ด ๋ฐฉ์ถ๋๋ค
- ์ํ ๋๊ธฐ (circular wait)
- ๋๊ธฐ ์ค์ธ thread๋ค์ด ์ํ ํํ๋ก ์์์ ๋๊ธฐํ๊ณ ์๋ ์ํฉ์ด๋ค.
Deadlock ํด๊ฒฐ ๋ฐฉ๋ฒ
์ค๋ช | ๋น๊ณ | |
๋ฌด์ | deadlock ๋ฐ์ ํ๋ฅ ์ด ๋ฎ์ ์์คํ ์์ ์๋ฌด๋ฐ ์กฐ์น๋ ์ทจํ์ง ์๊ณ deadlock์ ๋ฌด์ํ๋ ๋ฐฉ๋ฒ | - ๋ฌด์ ๊ธฐ๋ฒ์ ์์คํ
์ฑ๋ฅ ์ ํ๊ฐ ์๋ค๋ ํฐ ์ฅ์ ์ด ์๋ค. - ํ๋ ์์คํ ์์๋ deadlock์ด ์ ๋ฐ์ํ์ง ์๊ณ , ํด๊ฒฐ ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์ ๋ฌด์ ๋ฐฉ๋ฒ์ด ๋ง์ด ์ฌ์ฉ๋๋ค. |
์๋ฐฉ | ๊ต์ฐฉ ์ํ์ 4๊ฐ์ง ๋ฐ์ ์กฐ๊ฑด ์ค ํ๋๊ฐ ์ฑ๋ฆฝํ์ง ์๊ฒ ํ๋ ๋ฐฉ๋ฒ | - ์ํ ๋๊ธฐ ์กฐ๊ฑด์ด ์ฑ๋ฆฝํ์ง ์๋๋ก ํ๋ ๊ฒ์ด ํ์ค์ ์ผ๋ก ๊ฐ๋ฅํ ์๋ฐฉ ๊ธฐ๋ฒ์ด๋ค. - ์์ ์ฌ์ฉ์ ํจ์จ์ฑ์ด ๋จ์ด์ง๊ณ ๋น์ฉ์ด ํฌ๋ค. |
ํํผ | thread๊ฐ ์์ผ๋ก ์์์ ์ด๋ป๊ฒ ์์ฒญํ ์ง์ ๋ํ ์ ๋ณด๋ฅผ ํตํด ์ํ ๋๊ธฐ ์ํ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์์์ ํ ๋นํ๋ ๋ฐฉ๋ฒ | - ์์ ํ ๋น ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ, ์ํ์ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ์ฌ์ฉํ์ฌ ์์์ ํ ๋นํ์ฌ deadlockd์ ํํผํ๋ค. |
ํ์ง-ํ๋ณต | ์์คํ ๊ฒ์ฌ๋ฅผ ํตํด deadlock ๋ฐ์์ ํ์งํ๊ณ , ์ด๋ฅผ ํ๋ณต์ํค๋ ๋ฐฉ๋ฒ | - ์์ ์ฌ์ฉ์ ํจ์จ์ฑ์ด ๋จ์ด์ง๊ณ ๋น์ฉ์ด ํฌ๋ค. |
deadlock์ ์ธ์ ๋ฐ์ํ๊ฒ ๋๋?
deadlock์ ์ํธ๋ฐฐ์ , ์ ์ ๋๊ธฐ, ๋น์ ์ , ์ํ๋๊ธฐ 4๊ฐ์ง ์กฐ๊ฑด์ด ๋์์ ์ฑ๋ฆฝํ ๋ ๋ฐ์ํ ์ ์๋ค.
์ํธ ๋ฐฐ์ ๋ ๋์์ ํ thread๋ง ์์์ ์ ์ ํ ์ ์๋ ์ํฉ์ด๊ณ ,
์ ์ ๋๊ธฐ๋ thread๊ฐ ์์์ ๋ณด์ ํ ์ํ์์ ๋ค๋ฅธ thread๊ฐ ๋ณด์ ํ ์์์ ์ถ๊ฐ์ ์ผ๋ก ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ์ด๋ค.
๋น์ ์ ์ ๋ค๋ฅธ thread๊ฐ ์ฌ์ฉ ์ค์ธ ์์์ ๊ฐ์ ๋ก ์ ์ ํ ์ ์๋ ์ํฉ์ด๊ณ ,
์ํ ๋๊ธฐ๋ ๋๊ธฐ ์ค์ธ thread๋ค์ด ์ํ ํํ๋ก ์์์ ๋๊ธฐํ๋ ์ํฉ์ ๋งํ๋ค.
์ฐธ๊ณ
https://velog.velcdn.com/images/dot2__/post/89878cc7-5156-4d74-abba-ec55d6740c04/image.jpg
https://t1.daumcdn.net/cfile/tistory/994590345BB1B4DB2F
https://t1.daumcdn.net/cfile/tistory/998BB43D5A6E7E6912
https://static.javatpoint.com/operating-system/images/ipc-through-shared-memory.png
https://beingintelligent.com/wp-content/uploads/2022/04/Shared-Memory-and-Message-Passing-System.jpg
https://media.geeksforgeeks.org/wp-content/uploads/20210923191813/ttm.png
'๐ป Computer Science > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํฌ๋ ์(Forensic)์ด๋ ? ๋์งํธ ํฌ๋ ์์ด๋? ์๋ฆฌ (0) | 2023.08.11 |
---|---|
[์ด์์ฒด์ ] Memory ๋? (paging, segmentation, ๊ฐ์๋ฉ๋ชจ๋ฆฌ) (1) | 2023.05.27 |
compile(์ปดํ์ผ)๊ณผ runtime(๋ฐํ์) ์ฐจ์ด (0) | 2023.05.27 |
๋์์ฑ (Concurrency)๊ณผ ๋ณ๋ ฌ์ฑ (Parallelism) (0) | 2023.05.22 |