Parallal Program
- ํ๋์ Job์ ์ฌ๋ฌ CPU์์ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์์ ์ ํฌํฌํด๊ฐ์ ์ฒ๋ฆฌํด์ ์ฃผ๋ ๊ฒ
- PCB, PT๋ค์ ์์ฑํด์ผ๋๊ณ , OS ๊ตฌ์กฐ๋ ๋ง๋ค์ด์ผํ๊ณ ํด์ ๋นํจ์จ์ ์ด๋ค (๊ณต๊ฐ, ์๊ฐ)
์ด๋ป๊ฒ ํ๋ฉด ๋ ํจ์จ์ ์ผ๋ก ํ ์ ์์๊น?
ํ๋ก์ธ์ค๋ค๋ผ๋ฆฌ ๋น์ทํ ๊ฒ
- Address Space (Code, data)
- Privilege (ํน๊ถ?)
- ๋ฆฌ์์ค (ํ์ผ, ์์ผ ๋ฑ)
๋ค๋ฅธ ๊ฒ - ์ด๋ ๊ฒ ๋ค๊ฐ!
- Registers, PC, SP, Process State
์ค๋ ๋ : ๊ฐ์ ๊ฒ์ ๊ณต์ ํ๊ณ , ๋ค๋ฅธ ๊ฒ์ ๊ฐ๋ณ์ ์ผ๋ก ๊ฐ์ ธ๊ฐ์
Thread
- ๋ง์ ํ๋ก๊ทธ๋จ์ด ๋์์ ๋์๊ฐ๋ค
- ์ฐ๋ ๋๋ค์ ๊ฐ์ ์ฃผ์๊ณต๊ฐ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ ๋๊ฐ ์ ๋ณด ๊ตํ์ด ๊ฐ๋จํ๋ค
- ํ๋ก์ธ์ค๋ฅผ ๋ง๋๋๊ฒ ๋ณด๋ค ๊ฐ๋ณ๋ค. ์๊ฐ. ๋ฉ๋ชจ๋ฆฌ
- ํ ํ๋ก์ธ์ค ๋ด์์ ๊ฐ ์ฐ๋ ๋๋ง๋ค cpu๋ฅผ ํ ๋นํ ์ ์์
- ์ค๋ฒํค๋๊ฐ ์๋ค
- ๋จ์ : ํ ์ฐ๋ ๋๊ฐ ์ค๋ฅ๋๋ฉด ์ ์ฒด ํ๋ก์ธ์ค๊ฐ ๋ค ์ฃฝ๋๋ค
Threads and Processes
- Process : ์ฃผ์๊ณต๊ฐ์ ๊ฐ๊ณ ๋ฐ๊นฅ์ ๋ฆฌ์์ค๋ค์ ๋ฐ์์จ๋ค
- Thread : ์์ฐจ์ ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์ํํ๋ค.
- ํ ํ๋ก์ธ์ค ์์ ์ฐ๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ ์์ ์ ์๋ค.
ํ ์ค๋ ๋๊ฐ os๋ฅผ ํตํด ์ด๋ค ๋ฆฌ์์ค๋ฅผ ์ป์ด๋ธ๋ค๋๊ฑด -> ํ๋ก์ธ์ค ๋จ์์ ์ด๋ค์ง - ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ทธ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๋ค.
- ์ค๋ ๋๋ CPU๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ฒด ์ฆ, CPU๋ฅผ ํ ๋นํ๋ ๋จ์๊ฐ ๋๋ค.
- ์ฐ๋ ๋ ์์์๋ Context Switch๊ฐ ์ผ์ด๋ ์ ์๋ค.
- ํ๋ก์ธ์ค๊ฐ ํ๋์ผ ๋, ๊ทธ ์์ ์ฌ๋ฌ๊ฐ์ TCB๊ฐ ์กด์ฌ ๊ฐ๋ฅ
Address space with threads
- ์ด ์์ญ์ accessํ ๋๋ synchronize๊ฐ ํ์ํ๋ค. (์ฐ๋ ๋๋ผ๋ฆฌ ๊ณต์ ํ๋ ๊ณต๊ฐ)
- ๊ฐ ์ฐ๋ ๋๋ง๋ค ์คํํฌ์ธํฐ๊ฐ ๋ฐ๋ก ๋ฐ๋ก ํ ๋น๋๋ค.
function call์ด ๊ฐ ์ฐ๋ ๋ ๋ด์์ ๋ ์์ ์ผ๋ก ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ ํ์ํจ.
-> ์ง์ญ๋ณ์๋ค์ ๊ฐ ์คํ ๋ด์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๊ณต์ ๋๊ธฐ ์ด๋ ค์ - ๊ฐ ์ฐ๋ ๋๊ฐ ์ํํ๊ณ ์๋ ์ฝ๋ ์์น๊ฐ ์ด๋ ๊ฒ ๊ฐ๊ฐ ๋ค๋ฅธ ์ํฉ.
ํ์ง๋ง ๊ฐ์ ๋ ์ง์คํฐ ๊ณต๊ฐ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๋ณ์๋ฅผ ๊ณต์ ํ๊ธฐ ์ฝ๋ค.
- ๋ง์ฝ ์คํํฌ์ธํฐ๊ฐ ๊ฐ๊น๊ฑฐ๋ ๋ถ์ด์๋ค๋ฉด, ์์ ์๋ ์ฐ๋ ๋์์ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ ๋ ๋ค๋ฅธ ์ฐ๋ ๋์ ์๋ ํจ์๋ฅผ ์ค๋ฒ๋ผ์ดํธํ๊ฒ ์ง. -> ์์์ ์ ์ ๋นํ ๋จ์ด๋จ๋ฆฐ๋ค.
Kernel threads & User-level threads
User Level Thread (์ฅ)
- ์ธ๊ณ ๋น ๋ฅด๋ค. ์ฐ๋ ๋ ๊ด๋ฆฌ๊ฐ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ ์ฝ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์.
- ํ๋ก์ธ์ค ๊ฐ์ Context switch overhead๊ฐ ์์ด (์์คํ ์ฝ์ด ์๋ -> ๋ชจ๋ ์ค์์น ์ํจ)
- OS์ ๊ด์ฌ๊ฐ ํ์์์ผ๋ฏ๋ก ์ค์ผ์ฅด๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ปค์คํ ํ๊ธฐ ์ฌ์.
User Level Thread (๋จ)
- OS๋ ๋ชจ๋ฅธ๋ค!!
- Blocking System Call : ํ๋์ ์ค๋ ๋๊ฐ block๋๋ฉด ํ๋ก์ธ์ค ์์ฒด์์ CPU ๋บ์ด์ ๋ค๋ฅธ ํ๋ก์ธ์ค ์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ์์ (๋ค๋ฅธ ์ค๋ ๋์์ ์ธ ์ ์์์๋ ๋ถ๊ตฌํ๊ณ )
๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ unblockingํ๋ call๋ก ์ง์ ํธ์ถํด์ฃผ์ด์ผ ํ๋ค (Asynchronous I/O) - Page Fault : ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์์ fault ๋ฐ์ํ๋ฉด, ํด๋น ํ๋ก์ธ์ค ์ ์ฒด๊ฐ block ๋นํจ.
- Infinite Loop : ๋ง์ฝ ์ฐ๋ ๋๊ฐ ๋ฌดํ๋ฃจํ ๋๋ฉด ๊บผ๋ผ ๋ฐฉ๋ฒ์ด ๋๊ฒ ๋ณต์กํจ
- ํ ํ๋ก์ธ์ค์ ์ฌ๋ฌ CPU๋ฅผ ํ ๋นํ ์ ์๋ค (OS๋ ์๋์ง๋ ๋ชจ๋ฅด๋๊น!) - ์์ฆ์ฒ๋ผ ๋ฉํฐ์ฝ์ด์์ ๋ณ๋ก
Kernel Thread
- ๋ชจ๋ ์ฐ๋ ๋์ ๋ํ ์ ๋ณด๋ ์ปค๋์์ ๊ด๋ฆฌ๋๋ค.
- ํ๋ก์ธ์ค ๋ด์์ ํน์ ์ฐ๋ ๋๊ฐ block ๋์ด๋ ๋ค๋ฅธ์ ๋ค์ OS์ ์ํด ๋ค์ ์ค์ผ์ฅด๋ง๋๋ค
- ํ์ง๋ง context switch overhead๊ฐ ํฐ ํธ. OS ์์คํ ์ฝ์ ํตํด ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋ ๊ฒ
Hybrid Implementations
- ๊ทธ๋์ ๋๊ฐ๋ฅผ ํฉ์ณ. User ๋ ๋ฒจ์์ ์ฐ๋ ๋๊ฐ ๋ค์ฏ ๊ฐ. ์ปค๋ ๋ ๋ฒจ์์ ๊ฐ๊ฐ 3, 2๊ฐ์ฉ ๋ฌถ์ด์ ์ด ๋๊ฐ์ ์ฐ๋ ๋๋ก ๋งคํํด๋์ ํํ.
- ํ๋์ user level thread๊ฐ block ๋์ด๋ ๋ค๋ฅธ ์ปค๋ ๋ ๋ฒจ์ ์ฐ๊ฒฐ๋ user level thread๋ค์ ์ด์์๋ค.