โ ์คํ์ค์ ์๋ ํ๋ก๊ทธ๋จ
๋์คํฌ์ ์คํ ํ์ผ ๋ฑ์ ํํ๋ก ์กด์ฌํ๋ ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ -> ์คํ -> ์๋ช
๋ ฅ์ ๊ฐ์ง ํ๋ก์ธ์ค
โ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ธ ์๋ถํ ํ๊ฒฝ์์ CPU์ ์ ์ ๊ถ์ด ๊ณ์์ ์ผ๋ก ๋ฐ๋๋ค. CPU์ ์ ์ ๊ถ์ ๋นผ์๊ฒผ๋ค๊ฐ ๋ค์ ๋์ฐพ์ ํ๋ก์ธ์ค์ ์ด์ ์ํ๋ฅผ ์ฌํํ๊ธฐ ์ํด์ ํ์ํ ์ ๋ณด = Process Context
โ ํ๋ก์ธ์ค context ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋ค์ ์ ์ ๊ถ์ ํ๋ํ์ ๋ ์ด์ ์ ์ํ์ ์ด์ด์ ์์
์ ์ํํ ์ ์๋ค.
- CPU์ ์ํ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋์จ์ด ๋ฌธ๋งฅ
- pc๊ฐ - ํ์ฌ ํ๋ก์ธ์ค ๋ช ๋ น์ด๋ฅผ ํฌ์ธํ ํ๊ณ ์์ผ๋ฉฐ ๋ช ๋ น์ด ์ฃผ์ ์ ์ฅ, ๋ ์ง์คํฐ ์ ๋ณด
- CPU์ ์ํ์ํ๋ฅผ ๋ํ๋ด๋ ์ ๋ณด, ๊ฐ์ข ๋ ์ง์คํฐ์ ์ ์ฅํ๊ณ ์๋ ๊ฐ๋ค์ ์๋ฏธํ๋ค.
- ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ
- code, data, stack
- ํ๋ก์ธ์ค ๊ด๋ จ ์ปค๋ ์๋ฃ ๊ตฌ์กฐ
- PCB
- ์ด์ ์ฒด์ ์ปค๋์ ์๋ฃ๊ตฌ์กฐ๋ก์ ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ ์์์ ์ค์ ํ๊ณ ๊ฐ์ํ๋ ๋ฐ ํ์ํ ํ๋ก์ธ์ค ์ ๋ณด
- Kernal Stack
- ํ๋ก์ธ์ค๊ฐ ์์คํ ์ฝ์ ํ๋ฉด PC๊ฐ kernal ์ฃผ์๊ณต๊ฐ์ code๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ๋ช ๋ น์ด๋ฅผ ์ํํ๋ค. ์ด ๋ code๋ฅผ ์ํํ๋๋ฐ ํ์ํ ์ ๋ณด๋ฅผ kernal stack์ ์์๋๋ค.
- PCB
โ Running, Ready, Blocked
- Running
- CPU๋ฅผ ์ก๊ณ ๋ช ๋ น์ด๋ฅผ ์ํ ์ค์ธ ์ํ
- Running - User level, kernel level
- ์์คํ ์ฝ โ kernel level
- Ready
- ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ๋ฐ๋ก ์คํ๋ ์ ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ ํ๋ก์ธ์ค๊ฐ CPU ์ ์ ๊ถ์ ์ป์ง ๋ชปํด ๋๊ธฐ์ค์ธ ์ํ
- Ready ์ํ์ ํ๋ก์ธ์ค๋ค์ด CPU ์ ์ ๊ถ์ ํ๋ํ๊ณ ๋นผ์์ผ๋ฉด์ ์๋ถํ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ๋ฐ๋ก ์คํ๋ ์ ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ ํ๋ก์ธ์ค๊ฐ CPU ์ ์ ๊ถ์ ์ป์ง ๋ชปํด ๋๊ธฐ์ค์ธ ์ํ
- Blocked(wait, sleep)
- CPU๋ฅผ ํ ๋น๋ฐ๋๋ผ๋ ๋น์ฅ ๋ช
๋ น์ ์คํํ ์ ์๋ ์ํ
- io ์์ ๊ณผ ๊ฐ์ด ์์ฒญํ event๊ฐ ๋ฐ๋ก ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ๋ชปํ ๋ ํ๋ก์ธ์ค๋ blocked ๋๋ค.
- CPU๋ฅผ ํ ๋น๋ฐ๋๋ผ๋ ๋น์ฅ ๋ช
๋ น์ ์คํํ ์ ์๋ ์ํ
- Suspended(stopped)
- ์ธ๋ถ์ ์ธ ์ด์ ๋ก ํ๋ก์ธ์ค์ ์ํ์ด ์ ์ง๋ ์ํ์ด๋ค.
- Suspended ์ํ์ ํ๋ก์ธ์ค๋ ํต์งธ๋ก ๋์คํฌ์ swap out๋๋ค.
- ์ค๊ธฐ ์ค์ผ์ค๋ฌ์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋บด์๊ธด ํ๋ก์ธ์ค ์ํ์ด๋ค โ ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์ผ์ ์ ์ง ์ํค๊ฑฐ๋, ์์คํ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์ค๊ฐ ๋๋ฌด ๋ง์ด ์ฌ๋ผ์์์ด ์ ์ ์ค๋จ ์ํฌ ๊ฒฝ์ฐ suspended ์ํ๊ฐ ๋๋ค.
- Suspended Blocked, Suspended Ready
- io์์ ์ค์ด๊ฑฐ๋, blocked ์ํ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋นผ์๊ฒจ ๋์คํฌ๋ก swap out โ suspended blocked
- io ์์ ์ ๋ง์น๋ฉด โ Suspended ready
- New
- ํ๋ก์ธ์ค๊ฐ ์์ฑ์ค์ธ ์ํ
- Terminated
- ํ๋ก์ธ์ค์ ์ํ์ด ๋๋ ์ํ
- new โ ready
- ํ๋ก์ธ์ค๊ฐ ์์ฑ์ค์ด๋ค๊ฐ ์์ฑ๋๋ฉด ready ์ํ๋ก ๋ฐ๋๋ค
- ready โ running
- ready ์ํ์ ํ๋ก์ธ์ค๊ฐ cpu ์ ์ ๊ถ์ ์ป์ผ๋ฉด running ์ํ๋ก ๋ณํ๋ค.
- running โ terminated
- ํ๋ก์ธ์ค ์ํ์ด ๋๋ ๊ฒฝ์ฐ, cpu์ ์ ๊ถ์ ๋ฐํํ๊ณ terminated ์ํ๋ก ๋ฐ๋๋ค.
- running โ waiting
- ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ (io ์์ )์ ์ํํ ๊ฒฝ์ฐ, cpu์ ์ ๊ถ์ ๋ฐํํ๊ณ waiting ์ํ๋ก ๋ฐ๋๋ค.
- running โ ready
- timer interrupt(=ํ ๋น๋ ์๊ฐ์ด ๋๋ ๊ฒฝ์ฐ)๊ฐ ๋ค์ด์์ cpu์ ์ ๊ถ์ ๋ฐํํ๊ณ ready ์ํ๋ก ๋ฐ๋๋ค.
โ ์ด์์ฒด์ ๊ฐ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ธ์ค๋น ์ ์งํ๋ ์ ๋ณด์ด๋ค. pcb๋ ๊ตฌ์กฐ์ฒด ํํ์ด๋ค.
- ์ด์์ฒด์ ๊ฐ ๊ด๋ฆฌ์ ์ฌ์ฉํ๋ ์ ๋ณด
- process state, process id
- scheduling infromation, priority
- CPU ์ํ ๊ด๋ จ ํ๋์จ์ด ๊ฐ
- PC, register
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ
- code, data, stack
- ํ์ผ ๊ด๋ จ
- open file descriptors
โ cpu ์ ์ ๊ถ์ด ํ์ฌ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋์ด๊ฐ๋ ๊ณผ์
โ ํ๋ก์ธ์ค๋ cpu ์ ์ ๊ถ์ ๋นผ์๊ธฐ๋ ์์ ์ ๋ฌธ๋งฅ์ pcb๋ฅผ ํตํด ๊ธฐ๋กํด๋๋ค. ์ดํ ์ ์ ๊ถ์ ๋ค์ ํ๋ํ์ ๋, pcb๋ฅผ ํตํด ๋ฌธ๋งฅ์ ๋ค์ ์ฐพ์ ๋นผ์๊ฒผ๋ ์์ ์์ ์ํ๋๋ ๋ช ๋ น์ด๋ฅผ ์ด์ด์ ์ํํ๋ค.(PCB๋ kernal data์์ญ์ ์กด์ฌ)
- CPU ์ ์ ๊ถ์ ๋นผ์๊ธฐ๋ ์ํฉ
- ๋บ๊ธฐ๋ ์์ ์ ๋ฌธ๋งฅ์ ๊ธฐ์ตํ๊ธฐ ์ํด ํด๋น ํ๋ก์ธ์ค์ PCB์๋ค๊ฐ CPU์ pc๊ฐ๊ณผ ๋ ์ง์คํฐ ๊ฐ์ ์ ์ฅํ๋ค.
- CPU ์ ์ ๊ถ์ ์ป๋ ์ํฉ
- ์ด์์ฒด์ ๋ Kernal data์ ์ ์ฅ๋ ํด๋น ํ๋ก์ธ์ค์ PCB์์ CPU์ PC๊ฐ ๋ฐ ๋ ์ง์คํฐ ๊ฐ์ ๋ณต์์ํค๊ณ CPU ์ ์ ๊ถ์ ๋ค์ ํด๋น ํ๋ก์ธ์ค์๊ฒ ๋๊ฒจ์ฃผ๋ฉด์ ์คํํ๋ค.
โ context switch๊ฐ ๋ฐ์ํ๋์ง ํ๋จํ๋ ๊ธฐ์ค์ CPU ์ ์ ๊ถ ๊ธฐ์ค ๋ณด๋ค ํ๋ก์ธ์ค ๊ธฐ์ค ์ผ๋ก ํ๋จํ๋ ๊ฒ์ด ์ณ๋ค.
โ CPU ์ ์ ๊ถ์ด system call์ด๋ interrupt๋ก ์ธํ์ฌ OS๋ก ๋์ด๊ฐ๋ ๊ฒ์ context switch๋ฅผ ํ๋จํ๋ ๊ธฐ์ค์ด ๋๊ธฐ ํ๋ค๋ค.
โ Context, ์ฆ ๋ฌธ๋งฅ ์ํํ๋ ํ๋ก์ธ์ค A์์ cpu ์ ์ ๊ถ์ด ํ๋ก์ธ์ค B๋ก ๋์ด๊ฐ๋ฉด ๋ฌธ๋งฅ์ด ๋ฐ๋ ๊ฒ.
โ ์ด๋ค ํ๋ก์ธ์ค์๊ฒ ์์์ ํ ๋นํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์ด์์ฒด์ ์ปค๋์ ์ฝ๋๋ฅผ ์ง์นญํ๋ค.
โ ์ฅ๊ธฐ ์ค์ผ์ค๋ฌ(Job), ๋จ๊ธฐ ์ค์ผ์ค๋ฌ(CPU), ์ค๊ธฐ ์ค์ผ์ค๋ฌ(Swapper)
- Long-Term Scheduler (์ฅ๊ธฐ ์ค์ผ์ค๋ฌ, job scheduler)
- ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๊ฐ์ข
์์์ ์ด๋ค new ์ํ์ ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ค๋ฌ
- ํ๋ก์ธ์ค๊ฐ ์์ฑ ์ค์ด๋ค๊ฐ(new) ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ์ผ๋ฉด ๋น๋ก์ ready ์ํ๊ฐ ๋์ด ready queue์์ ๋๊ธฐํ๋ค. ์ด๋ new ์ํ์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ฃผ๋ ์ญํ ์ ํ๋๊ฒ long-term ์ค์ผ์ค๋ฌ์ด๋ค.
- degree of multiprogramming ์ ์ด - ๋ฉ๋ชจ๋ฆฌ์ ๋์์ ์ฌ๋ผ๊ฐ ํ๋ก์ธ์ค์ ์๋ฅผ ์ ์ดํ๋ค.
- ๋ณดํต์ ์๋ถํ ์์คํ
์์ ์ฅ๊ธฐ ์ค์ผ์ค๋ฌ ์์
- degree of multiprogramming ์ ์ด โ ์ค๊ธฐ ์ค์ผ์ค๋ฌ
- ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๊ฐ์ข
์์์ ์ด๋ค new ์ํ์ ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ค๋ฌ
- Short-Term Scheduler(๋จ๊ธฐ ์ค์ผ์ค๋ฌ, CPU ์ค์ผ์ค๋ฌ)
- CPU ์ ์ ๊ถ์ ์ด๋ค ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ค๋ฌ
- ์ค์ผ์ค๋ง์ด ์ผ์ด๋๋ ๋จ์๊ฐ ms โ ์์ฃผ ์ผ์ด๋จ
- CPU ์ ์ ๊ถ์ ์ด๋ค ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ค๋ฌ
- Medium-Term Scheduler (์ค๊ธฐ ์ค์ผ์ค๋ฌ, swapper)
- ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ ํ๋ก๊ทธ๋จ ๋์์ ์ฌ๋ผ๊ฐ ๋ โ ์ค๊ธฐ ์ค์ผ์ค๋ฌ๊ฐ swap out ์ํด
- degree of multiprogramming ์ ์ด
- ์ค๊ธฐ ์ค์ผ์ค๋ฌ์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋บด์๊ธด ํ๋ก์ธ์ค Suspended state
- degree of multiprogramming ์ ์ด
- ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ ํ๋ก๊ทธ๋จ ๋์์ ์ฌ๋ผ๊ฐ ๋ โ ์ค๊ธฐ ์ค์ผ์ค๋ฌ๊ฐ swap out ์ํด
โ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ ๋จ์
โ ํ๋ก์ธ์ค ์์ฑ ์ kernel data ์์ญ์ pcb๊ฐ ์์ฑ๋๋๋ฐ, ๋์ผํ ์์
์ ์ํํ๊ธฐ ์ํด ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ ๋ญ๋น ๋ง์์ง โ ๊ทธ๋์ ๋์ผ ๋จ์ ์์
์ thread๋ก ํ์
โ ํ๋์ ํ๋ก์ธ์ค has ํ๋์ task + ์ฌ๋ฌ ๊ฐ์ thread
- cpu ์ฐ์ฐ์ ์ํ์ ์ํด์ ์คํํ ๋ช ๋ น์ด์ ์์น๋ฅผ ๋ด๋ pc๊ฐ, ๋ ์ง์คํฐ ๊ฐ์ด ํ์ โ ์ค๋ ๋๋ง๋ค ๋ณ๋๋ก pc, ๋ ์ง์คํฐ ๊ฐ์ ๊ฐ์ง๊ณ ์์
- thread๊ฐ code ๋ถ๋ถ์ ์ํํ๋ค ํจ์ ํธ์ถ์ด ์ผ์ด๋๋ฉด ํจ์์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ stack์ ์์๋๋ค โ ์ค๋ ๋๋ง๋ค ๋ณ๋๋ก stack ๊ฐ์ง๊ณ ์์ (code, data์์ญ์ ์ค๋ ๋๋ผ๋ฆฌ ๊ณต์ )
โ PC๊ฐ, ๋ ์ง์คํฐ ๊ฐ, Stack ์์ญ per thread
โ code, data ์์ญ shared
โ ํ๋์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑํ์ฌ ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์์
์ํ
โ ๊ฐ ํ๋ก์ธ์ค ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ๋ถ์ด ํ์ํ๊ฑฐ๋ ๋ ๋ฆฝ๋ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ ธ์ผ ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
- ์์ ์ฑ
- ๋ ๋ฆฝ๋ ๊ตฌ์กฐ๋ก ํ๋์ ํ๋ก์ธ์ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค.
- ์ค๋ฒํค๋
- ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๊ธฐ ๋๋ฌธ์ context switching์ด ์์ฃผ์ผ์ด๋๋๋ฐ, context switching๊ณผ์ ์์ ์บ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ ๋ฑ ๋ฌด๊ฑฐ์ด ์์ ์ด ์งํ๋๊ณ ์๊ฐ ์๋ชจ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
- ํ๋ก์ธ์ค ๊ฐ์ ํต์ ๋ฐฉ์์ด ๋ฐ๋ก ํ์ํ๋ค(w/ ICPC)
โ ํ๋์ ํ๋ก์ธ์ค์ ์ฌ๋ฌ ์ค๋ ๋๋ก ์์์ ๊ณต์ ํ๋ฉฐ ์์
์ ๋๋์ด ์ํํ๋ ๊ฒ์ด๋ค.
- ์๋ต์ฑ
- ๋ค์ค ์ค๋ ๋๋ก ๊ตฌ์ฑ๋ task ๊ตฌ์กฐ์์ ํ๋์ ์ค๋ ๋๊ฐ blocked ์ํ์ธ ๋์์๋ ๋์ผํ task ๋ด์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ running ์ํ๋ก ์คํ๋์ด ๋น ๋ฅธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ค ์ค๋ ๋๋ก ์ํ๋ ๋, ํ๋์ ์ค๋ ๋๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ธฐ ์ํด ์๋ฒ์ ๋คํธ์ํฌ ์์ฒญ์ ๊ฑธ์ด blocked ์ํ๊ฐ ๋์ง๋ง(์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ), ๋ค๋ฅธ ์ค๋ ๋๋ running ์ํ์์ ๋ฐ์์ค๋ html ํ์ผ์ ํ๋ฉด์ ์ถ๋ ฅํด์ค ์ ์๋ค.
- ์์๊ณต์
- ํ๋์ ํ๋ก์ธ์ค ์์ CPU ์ํ ๋จ์์ธ ์ฐ๋ ๋๋ฅผ ๋๊ฒ ๋๋ฉด code, data, resource ์์์ ๊ณต์ ํ์ฌ ํจ์จ์ ์ผ๋ก ์์ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ๊ฒฝ์ ์ฑ
- ๋์ผํ ์ผ์ ์ํํ๋ ๋ค์ค ์ค๋ ๋๊ฐ ํ๋ ฅํ์ฌ ๋์ ์ฒ๋ฆฌ์จ, ์ฑ๋ฅ ํฅ์์ ์ป์ ์ ์๋ค.
- ์๋ก์ด ํ๋ก์ธ์ค ํ๋๋ฅผ ๋ง๋๋ ๊ฒ ๋ณด๋ค ๊ธฐ์กด์ ํ๋ก์ธ์ค์ ์ฐ๋ ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ค๋ฒํค๋๊ฐ ํจ์ฌ ์ ๋ค.ย (์ค๋ ๋ ๊ฐ์ Context Switching์ ํ๋ก์ธ์ค์ Context Switching๊ณผ ๋ฌ๋ฆฌ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ ํ์๊ฐ ์๊ณ Code, Data, Resource ์์ญ์ ๊ณต์ ํ๋ฏ๋ก Stack ์์ญ๋ง ์ฒ๋ฆฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ)
- ๋ฉํฐ ํ๋ก์ธ์ ์ํคํ
์ฒ์์์ ์ด์ฉ์ฑ
- Multi-Processer(CPU๊ฐ ์ฌ๋ฌ๊ฐ) ์ํคํ ์ณ์์ ๊ฐ๊ฐ์ ์ฐ๋ ๋๊ฐ ์๋ก ๋ค๋ฅธ CPU์์ ๋ณ๋ ฌ์ ์ผ๋ก ์์ ์ ์งํํ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ํจ์จ์ ์ผ๋ก ์์ ์ ์ํํ ์ ์๋ค.
- ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ (๋ณ๋ชฉํ์, ๋ฐ๋๋ฝ)
- ๋์ผํ ์์์ ๋ํ์ฌ ๋์์ ์์ ์ด ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ ๊ฐ ์ค๋ ๋์ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๊ณ ์์ญ์ ๋ํ์ฌ ๋ฎคํ ์ค(mutex), ๋๋ ์ธ๋งํฌ์ด(Semaphore) ๋ฐฉ์์ ํ์ฉํ๋ค.
- ํ๋์ thread์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ฒด ํ๋ก์ธ์ค ์ํฅ ๋ฐ์ โย ๋ฉํฐ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ, ํ ํ๋ก์ธ์ค์ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์คํ์๋ ์ํฅ์ด ์๋ค.