- ํ๋ก์ธ์ค๋ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ด๋ฉฐ, ์ฌ์ฉ์๊ฐ ์์ฑํ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์ ์ํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ ์คํ ์ค์ธ ๊ฒ์ ๋งํฉ๋๋ค.
- ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ๋ ๋ฆฝ์ ์ธ ์์ ์ ์ํํฉ๋๋ค.
- ๋ชจ๋ ํ๋ก์ธ์ค์๋ ํ ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ์กด์ฌํ์ฌ ์์ ์ ์ํํฉ๋๋ค.
- ํ๋ก์ธ์ค์์ ๋ ๊ฐ ์ด์์ ์ค๋ ๋๋ฅผ ๊ฐ์ง ๋, ๋ฉํฐ ์ค๋ ๋ ํ๋ก์ธ์ค(multi-threaded process)๋ผ๊ณ ํํํฉ๋๋ค.
- ์ค๋ ๋์์๋ ํ๋ก์ธ์ค์ ๊ณ ์ ํ ๊ฐ๋ค(์ํ, ํฌ์ธํฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฑ)์ ๊ณต์ ํ๊ณ , ์ด์ธ์ ๊ฐ(๋ ์ง์คํฐ, pc๊ฐ, stack)์ ๋ณ๋๋ก ๊ฐ์ง๋๋ค.
- ํ๋ก์ธ์ค ๋ด CPU ์ํ ๋จ์๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ฆ ์ค๋ ๋๋
CPU๋ฅผ ์ํํ๋ ๋จ์
- process๋ฅผ ๋ณ๋๋ก ๋๋ ๊ฒ๋ณด๋ค thread๋ฅผ ์ฌ๋ฌ ๊ฐ ๋๋ ๊ฒ์ด ๊ฐ๋ณ๊ธฐ์
lightweight process
๋ผ๊ณ ๋ ํํํ๋ค. - cf. ์ ํต์ ์ธ process๋
heavyweight process
-
์ฃผ์๊ณต๊ฐ์ code + data + stack ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, process ๋ง๋ค ์ฃผ์๊ณต๊ฐ์ด ์กด์ฌํ๋ค.
-
๋์ผํ ์ผ์ ํ๋ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ๋, ๋ณ๋์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ณต๊ฐ์ด ์ฌ๋ฌ ๊ฐ๊ฐ ๋ง๋ค์ด์ง๊ณ ์ด๋ ๋ฉ๋ชจ๋ฆฌ(์์) ๋ญ๋น์ด๋ค.
-
๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ณต๊ฐ์ ํ๋๋ง ๋์ด๋๊ณ ํ์ฌ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ๊ฐ๋ฆฌํค๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ฉด ๋๋ค.
-
์ฆ process๋ ํ๋๋ง ๋์ด๋๊ณ (code, data, stack), ํ์ฌ cpu๊ฐ ์ด๋ ๋ถ๋ถ์ ์คํํ๊ณ ์๋๊ฐ(pc๊ฐ ์ด๋ ๊ฐ๋ฆฌํค๊ณ ์๋๊ฐ) pc๋ง ์ฌ๋ฌ ๊ฐ ๋๋ฉด ๋๋ค.
-
=> process ํ๋์ cpu ์ํ๋จ์๋ง ์ฌ๋ฌ ๊ฐ ๋๋ ๊ฒ์
์ค๋ ๋
๋ผ๊ณ ๋ถ๋ฅธ๋ค. -
๊ณต์ ํ ์ ์๋๊ฑด ์ต๋ํ ๊ณต์ ํ๊ณ (๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ณต๊ฐ, PCB), ๋ณ๋๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒ์ cpu ์ํ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ค(pc, register, stack)์ด๋ค.
-
PCB ๋ด์ ์ค๋ ๋ ๋ถ๋ถ์์ pc์ register๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๋ ์ด์ ๋ ์ค๋ ๋๊ฐ ๊ฐ cpu ์ํ๋จ์(์ค๋ ๋)๋ง๋ค ํ์ฌ register์ ์ด๋ค ๊ฐ์ ๋ฃ๊ณ , pc๊ฐ code ์ด๋ ๋ถ๋ถ์ ๊ฐ๋ฆฌํค๊ณ ์คํํ๊ณ ์์๋๊ฐ๋ฅผ ๋ณ๋๋ก ์ ์งํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
-
์ฃผ์๊ณต๊ฐ์์ ์ค๋ ๋๋ง๋ค stack์ด ์๋ ์ด์ ๋ ์ฃผ์๊ณต๊ฐ ๋ด์ code ์์ญ์์ code๋ฅผ ์คํํ๋ค๊ฐ ํจ์ํธ์ถ์ด ๋๊ณ return์ด ๋ ๋๊น์ง ๊ทธ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ stack์ ์๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ cpu ์ํ๋จ์๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด stack๋ ๋ณ๋๋ก ๋๋ค.
ํ๋ก์ธ์ค์ ์ค๋ ๋ ?
- ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ๋ก๋ถํฐ ์์์ ํ ๋น๋ฐ๋ ์์ ์ ๋จ์์ด๊ณ ,
- ์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ์ ๋จ์์ ๋๋ค.
-
Thread ๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒ๋ค
- program counter
- ์ค๋ ๋๋ cpu๋ฅผ ํ ๋น๋ฐ๋ค๊ฐ ๋ชจ๋ ์คํํ์ง ๋ชปํ๊ณ ์ค์ผ์ฅด๋ฌ์ ์ํด ์ ์ ๋นํฉ๋๋ค. ์ด๋ ์ค๋ ๋๋ ์ด๋๋ถ๋ถ๊น์ง ์ํํ๋์ง ๊ธฐ์ตํด์ผํ๊ธฐ ๋๋ฌธ์ pc๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋นํฉ๋๋ค.
- register set
- stack space
- program counter
-
Thread๊ฐ ๋๋ฃ Thread์ ๊ณต์ ํ๋ ๋ถ๋ถ (=task)
cf. ํ๋์ process์ thread๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ค๋ฉด, task๋ ํ ๊ฐ ์๋ ๊ตฌ์กฐ- code section
- data section
- OS resources
- Runnable(์ค๋น ์ํ) ์ค๋ ๋๊ฐ ์คํ ํ๊ธฐ ์ํด ์ค๋นํ๊ณ ์๋ ์ํ๋ฅผ ๋งํฉ๋๋ค. ์ด๋ cpu๋ ํ ๋น๋์ด ์์ง ์๊ณ , ์คํ์ ์ํด ๋๊ธฐํ๊ณ ์์ต๋๋ค.
- Running(์คํ ์ํ) ์ค๋ ๋๊ฐ cpu์ ์ ๊ถ์ ํ ๋น๋ฐ์ ์คํ ์ค์ธ ์ํ์ ๋๋ค.
- Dead(์ข ๋ฃ ์ํ) ์ค๋ ๋๊ฐ ๋ชจ๋ ์คํ์ ๋ง์น ์๋ฃ ์ํ์ ๋๋ค.
- Block(์ง์ฐ ์ํ) ์ค๋ ๋๊ฐ ์คํน ๋์ค ์ค์ผ์ค๋ฌ์ ์ํด cpu์ ์ ๊ถ์ ๋นผ์๊ฒจ block๋์ด์๋ ์ํ์ ๋๋ค.
- ์๋ต์ฑ(Responsiveness)
๋ฉํฐ ์ค๋ ๋ ํ๋ก์ธ์ค์ผ ๋ ํ๋์ ์ค๋ ๋๊ฐ block ์ํ์ด๋๋ผ๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์คํ๋์ด ๋น ๋ฅธ ์๋ต์ฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
eg) multi-threaded web
if one thread is blocked (eg. network, img resources๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด blocked๋ ์ํ)
another thread continues (eg. display, img๋ฅผ ๋ถ๋ฌ์ค๋ ์ค๋ ๋๊ฐ ์๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ด๋ฏธ ๋ถ๋ฌ์จ HTMl์ ๋ ๋๋งํ๋ค. -> user์ ๋ต๋ตํจ์ ์ค์ผ ์ ์์, ์๋ต์ฑ ์ธก๋ฉด ์ฅ์ , ์ค๋ ๋๋ฅผ ํ์ฉํ ๋น๋๊ธฐ์)
-
์์ ๊ณต์ (Resources Sharing) n threads can share binary code, data, resources of the process. ๋ณ๋์ ํ๋ก์ธ์ค๋ฅผ ๋๊ธฐ๋ณด๋ค cpu ์ํ๋จ์(์ค๋ ๋)๋ฅผ ์ฌ๋ฌ ๊ฐ ๋๋ฉด ์์์ ํจ์จ์ ์ผ๋ก ์ธ ์ ์๋ค.
-
๊ฒฝ์ ์ฑ(Economy)
- process creating๊ณผ CPU switching(context switching)์ overhead๊ฐ ์๋นํ ํฌ๋ค. (cpu ๊ด๋ จ ์ ๋ณด์ ์ฅ, cache memory flush ๋ฑ ์์ ์ํ ํ์)
- ๋ฐ๋ฉด์ thread์ ๊ฒฝ์ฐ process ๋ด๋ถ์์ thread ๊ฐ์ switching์ด ์ผ์ด๋๋ ๊ฒ์ ์ค๋ฒํค๋๊ฐ ์๊ณ ๊ฐ๋จํ๋ค.
(๊ณต์ ํ๋ ๋ถ๋ถ์ด ์กด์ฌํด์ ๋ฌธ๋งฅ์ด ๋น์ทํ๋ฏ๋ก)
-
Utilization of MP Architectures
cf. MP : Multi processors- cpu๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ ๊ฒฝ์ฐ์ ํด๋นํ๋ฉฐ ๊ฐ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์์์ ๋ณ๋ ฌ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ๋ค.
Context Switching ?
์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๋ณ๊ฒฝ์ด ๋๋ฉด, CPU๋ด์ ๋ ์ง์คํฐ๋ค์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด์ผ ๋๋๋ฐ, ๋ณ๊ฒฝ๋๊ธฐ ์ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ ํ๋ก์ธ์ค switching์ ๊ฒฝ์ฐ ๊ณต์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ๋๋ฌธ์ ๋น์ฉ์ด ๋ง์ด ๋ค์ง๋ง, ์ค๋ ๋ switching์ ๊ฒฝ์ฐ ๊ณต์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ด์ด ๋ํ๋ค.
์ ๊น! ์ปค๋์ด ๋ฌด์์ธ๊ฐ์?
์ปค๋์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ ์ด์์ฒด์ ์ ํต์ฌ ๋ถ๋ถ์ผ๋ก, ์ปดํจํฐ์ ์ํ ์์๋ค์ ๋ํ ์ ๊ทผ์ ์ค์ฌํฉ๋๋ค. ์์ํ ๋น, ํ๋์จ์ด ์ธํฐํ์ด์ค, ๋ณด์, ์ธํฐ๋ฝํธ ์ ์ด, ๋คํธ์ํฌ ๊ด๋ฆฌ ๋ฑ์ ๋ด๋นํฉ๋๋ค.
- ์ปค๋ ์์ญ์ ์์์์ ์ง์๋๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํค ๊ตฌํ๋ฉ๋๋ค.
- Process ๋ด ์ค๋ ๋๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ค๋ ์ฌ์ค์ ์ด์์ฒด์ ์ปค๋์ ๋ชจ๋ฅด๊ณ , user program์ด ์ฌ์ฉ์ ์์ค์์ ์ค์ค๋ก ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ์ปค๋์ด ๋ณผ ๋๋ ์ผ๋ฐ์ ์ธ process๋ก ๋ณด์ด๋๋ฐ process ๋ณธ์ธ์ด ๋ด๋ถ์์ cpu ์ํ ๋จ์๋ฅผ ์ฌ๋ฌ ๊ฐ ๋๋ฉด์ ๊ด๋ฆฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๊ตฌํ ์์ ์ ์ฝ์ ์ด ์กด์ฌํ ์ ์์ต๋๋ค.
์ฅ์
- ์ฌ์ฉ์๊ฐ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ฏ๋ก ์๋๊ฐ ๋น ๋ฆ ๋๋ค.
- ์ปค๋์ ๊ฐ์
์ ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ด์์ฒด์ ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋จ์ - ํ๋์ ์ค๋ ๋๊ฐ ์ค๋จ๋๋ฉด ๋ชจ๋ ๋๋จธ์ง ๋ชจ๋ ์ค๋ ๋๊ฐ ์ค๋จ๋ฉ๋๋ค.
์ด์์ฒด์ ๊ฐ ์ง์ํ๋ ์ค๋ ๋ ๊ธฐ๋ฅ์ผ๋ก ๊ตฌํ๋๋ฉฐ, ์ปค๋์ด ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์ฅ์
- ์ปค๋์ด ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ํ๋ก์ธ์ค ๋ด ์ค๋ ๋๋ค์ด ๋ณํ์ผ๋ก ์ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ณํ์ผ๋ก ์ํํ๋ฏ๋ก ํ๊ฐ์ ์ค๋ ๋๊ฐ ์ค๋จ๋๋ ๋๋จธ์ง ์ค๋ ๋๋ค์ ๊ณ์ ์ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋จ์
- ์ฌ์ฉ์ ์ค๋ ๋๋ณด๋ค ์์ฑ ๋ฐ ๊ด๋ฆฌ ์๋๊ฐ ๋๋ฆฝ๋๋ค.
User-Level Thread์ Kernel-Level Thread๋ฅผ ํฉ์น ๊ฒ์
๋๋ค. ์ด๋ ๋ ๋ฐฉ์์ ๋จ์ ์ ๊ทน๋ณตํฉ๋๋ค.
์ฅ์
- ํ๋ก์ธ์ค ๋ด ์ค๋ ๋๋ค์ด ๋ณํ์ผ๋ก ์ํํฉ๋๋ค.
- ์ค๋ ๋ ํ๋ง ๊ธฐ๋ฒ์ ํตํด ์ผ๋์ผ ์ค๋ ๋ ๋งคํ์์์ ์ค๋ฒํค๋๋ฅผ ์ค์ฌ์ค๋๋ค.
์์คํ ์ ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํด ๋ฏธ๋ฆฌ ์์ฑํ ์ค๋ ๋๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ค๋ ๋ ์์ฑ ์๊ฐ์ ์ค์ ๋๋ค. ๋ํ ๋์์ ์์ฑํ ์ ์๋ ์ค๋ ๋ ์๋ฅผ ์ ํํ์ฌ ์์คํ ์ ์์ ์๋น๋ฅผ ์ค์ ๋๋ค
- ์ค๋ ๋ ์์ฑ๊ณผ ํ๋ก์ธ์ค ์์ฑ์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ?
- PC Register๋ฅผ Thread๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋นํ๋ ์ด์ ๋?
- ์ปค๋ ์์ค ์ค๋ ๋์ ์ฌ์ฉ์ ์์ค ์ค๋ ๋์ ์ฅ๋จ์ ์?