728x90
Motivation
๋ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ณ ์ถ์ ๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ์ฑ์ด ์ข์์ง๋ค. ํ๋์ ํ๋ก์ธ์ค ์์์ ์ฐ๋ ๋๋ฅผ ๋ ๊ฐ ์ฌ์ฉํ๋ค๊ฐ ํ๋์ ์ฐ๋ ๋๊ฐ ์ฃฝ์ผ๋ฉด ํด๋น ํ๋ก์ธ์ค๊ฐ ์ฃฝ์ด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์์ ์ฑ ์ธก๋ฉด์์ ์ข์ง ์๋ค. ํ์ง๋ง ์ฐ๋ ๋๋ ๋ ๊ฒฝ์ ์ ์ด๊ณ ์ ๋ณด๋ฅผ ๊ณต์ ํ ๋ ํธ๋ฆฌํ๋ค. ํ๋ก์ธ์ค๋ ์๋ ๋ ๋ฆฝ์ ์ธ Entity์ด๋ฏ๋ก ์ฝ์ง ์๋ค. ์ฐ๋ ๋๋ผ๋ฆฌ ํต์ ์ ํ ๋ Shared Memory๊ฐ ํ์ํ์ง ์๋ค. ๊ทธ์ ์ ์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฅํ๋ค.
Overview
ํ๋ก์ธ์ค๋ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๊ณ ๋ ๋ฆฝ์ ์ธ ์์์ด๋ค. ๋ฐ๋ฉด ์ฐ๋ ๋๋ ํ๋ก์ธ์ค ์์ ํ๋ก๊ทธ๋จ์ด์ฌ์ ์์์ ๊ณต์ ํด์ ์ฌ์ฉํ๋ค. Thread ID์ PC, register set, stack๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค. PC๋ ์ฐ๋ ๋ ๋ง๋ค ํ๋์ฉ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. Stack์ ๋ก์ปฌ ๋ณ์๊ฐ ์ ์ฅ๋๋ ๊ณณ์ด๊ณ Function call์ ํ ๋ ์ฃผ์๊ฐ ์ ์ฅ๋๋ค.
Multithreaded Process
code data files๋ ์ ์ญ์ผ๋ก ๊ณต์ ํ๋ ๋ฐ์ดํฐ์ด๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ค. register์ stack์ ์ฐ๋ ๋๋ณ๋ก ์กด์ฌํด์ผ ํ๋ค.
TCB
Scheduling์ ๊ธฐ๋ณธ ๋จ์๊ฐ Thread์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. Pointer to PCB, ํ๋ก์ธ์ค์ ์ฐ๋ ๋๋ Parent Child ๊ด๊ณ๊ฐ ์์ ์ ์๋ค. ๋ด๊ฐ ์ํ ํ๋ก์ธ์ค์ PCB์ ๋ํ ํฌ์ธํฐ๋ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. TCB ์์์ PCB์ Linked List๋ฅผ ์ ์ฅํ ์ ์๋ Header Pointer๊ฐ ์กด์ฌํ๋ค.
Why Thread
request๊ฐ ๋ค์ด์ค๋ฉด Thread๋ฅผ ๋ง๋ค์ด์ Client์ ์์ ์ ์ํํ๋๋ก ํ ์ ์๊ฑฐ๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฝ์ ์ ์ด์ง๋ง ์์ ์ฑ์ด ๋จ์ด์ง๋ค๋ ๋จ์ ์ด ์๋ค.
Why Thread
๋ฉํฐ ํ๋ก์ธ์์ ํ์๋ฅผ ํ์ฉํด์ ๋ ๋ง์ ์ผ์ ํ๊ฒ ํ ์ ์๋ค. ์ ์ ์ Interface๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ ์ ์ธํ๊ณ ๊ฐ๋จํ ์์ ์ ํด๋นํ๋ ๊ฒ์ Thread๋ก ์ฌ์ฉํ๋ค. ์์์ ๊ณต์ ํ๊ธฐ๊ฐ ์ฝ๋ค. ์ฐ๋ ๋๋ฅผ ๋ง๋๋ ๊ฒ์ด ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค Overhead๊ฐ ๋ ๋ฐ์ํ๋ค.
Multicore Programming
activity๋ฅผ ๋๋ ์ผ ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ ์ ์๋ค. Data๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ถ๋ฆฌ๋ฅผ ์์ผ๋์ผ ํ๋ค. Data dependency, ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ๋ก ๋ง๋ค์ด์ผ ํ๋ค. ๋๋ฒ๊ทธํ๋ ๊ฒ์ด ์ด๋ ต๋ค.
Concurrency vs Parallelism
์ค์ผ์ค๋ฌ์ ์ํด์ ์์ ์ ํ ๋ Cocurrency๋ผ๊ณ ๋ถ๋ฅธ๋ค. Parallelism CPU๊ฐ ๋์์ ๋์๊ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
Multicore Programming
data P - ๋์ผํ ์ผ์ ํ์ง๋ง ํ๋ก์ธ์ค๋ค์ด ๋งก์ ์์ญ์ด ๋ค๋ฅธ ๊ฒ. ๊ต์ฅํ ๊ธด ๋ฐฐ์ด์ ๋ํ๋๋ฐ ํ๋๋ ์ง์ ํ๋๋ ํ์๋ก ๋๋ ์ ์๋ค๊ณ ํ์ จ๋ค. ๋ํ๋ ์์ ์ ๋์ผํ์ง๋ง ํ๋๋ ์ง์ ํ๋๋ ํ์๋ก ๋ถ๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ด๋ป๊ฒ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๊ฐ. Thread ๋ณ๋ก์ Index๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์๋ค. Thread์ ๊ฐ์๊ฐ ๋์ด๋๋ฉด architecture support๋ฅผ ๋์ด๋๊ฒ ํ ์ ์๋ค. ์ฐ๋ ๋๋ฅผ CPU๊ฐ ๋์์ ์คํํ ์ ์๋ ์ฐ๋ ๋๋ฅผ ํ๋์จ์ด ์ฐ๋ ๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Amdahl's Law
๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ํ ๋ ํผํฌ๋จผ์ค๊ฐ ๋ช ๋ฐฐ ๋นจ๋ฆฌ์ง ์ ์๋ ๊ฐ๋ฅผ ๋ถ์ํ ๋ฒ์น์ด๋ค. ์๋์ ๊ดํ ์์ด๋ฏ๋ก ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ตฌํด์ ๋ถ๋ชจ๋ก ๋ณด๋ด์ ์ญ์๋ฅผ ์ทจํด์ผ ํ๋ค.
Types of Threads
User thread์ Kernel thread ๋ ๊ฐ๋ก ๋๋๋ค. user level์์๋ ์ฐ๋ ๋๋ฅผ ๋ธ๋์น ํ ์ ์๋ค. kernel ์ฐ๋ ๋๋ ํ๋๋ง ์กด์ฌํ๋ ๋ฐ Thread LIbrary๊ฐ ์ด๋ฅผ ๊ณต์ ํด์ ์ฌ๋ฌ ๊ฐ์ Thread๋ฅผ ๋ง๋๋ ๊ฒ์ด User Thread๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ค์ User Thread๋ Library function์ ํธ์ถํด์ ์์ฑํ๋ค. ์ผ๋ฐ Function call์ ์ฌ์ฉํ๋ฉด ๋๋ค. kernel์ User Thread์ ์ ๊ฒฝ์ ์ฐ์ง ์์๋ ๋๋ค. ๋ํ user Thread๋ Creating ํ๊ฑฐ๋ Switchingํ๋ Overhead๊ฐ ์ ๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ๋ณ๋ค.
Kernel Thread
Kernel ๋ด๋ถ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ํ ์ด๋ธ์ด ์กด์ฌํ๋ค. PCB์ TCB์ ํด๋นํ๋ ํ ์ด๋ธ๋ค์ด๋ค. User Thread์ ๋ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ํ์๊ฐ ์ ํ ์๋ค.
Multithreading Models
User Thread๋ ํ๋์ ๋์ ์ผ๋ก ๊ณต์ ๊ธฐ๋ฅผ ํตํด ์ฌ๋ฌ ๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค๊ณ ๋น์ ํ์ฌ. ์ค์ ๋ก Kernel Thread์ ์ฐ๊ฒฐ๋์ด์ผ ์ฌ์ฉํ ์ ์๋ค. ์ผ๋์ผ ๋งค์นญ์ด ๋์ง ์์ง๋ง ๋จ์ ํ๋๋ Scheduling์ ๊ฐ๋ ์ผ๋ก ์คํ์ด ๋๊ฒ ๋๋ค.
Multithreading Models
User Thread์ Kernel Thread๊ฐ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋์ด ์๋๊ฐ? User level Thread Library๊ฐ user Thread๋ฅผ ๋ง๋ ๋ค. kernel scheduler๊ฐ ํ๋ ๊ฒ์ด ์๋. User level Thread LIbrary๊ฐ ํด์ฃผ๋ ๊ฒ. Kernel์ด Thread๋ฅผ ์ง์ํ์ง ์์๋ Multi Thread๋ฅผ ๋ง๋ค ์ ์๋ค.
One to One model
kernel Thread์ User Thread๊ฐ ์ผ๋์ผ๋ก ๋งค์นญ๋์ด ์๋ค. Linux์์ Thread๋ฅผ ํ๋ ๋ง๋ค์๋ค๋ฉด ๊ทธ๊ฒ์ User Thread๊ฐ ์๋๋ผ Kernel Thread์ด๋ค.
Multithreading Models
3๊ฐ์ Kernel thread์ User thread 4๋ก ๊ตฌ์ฑ๋จ. ๊ธฐ๋ณธ์ ์ธ Many to Many model์์ ์์ ์ฑ์ ๋ํ Two level model๋ ์กด์ฌํจ.
Scheduler Activation
LWP๋?? Kernel Thread์ User Thread๋ฅผ ์ด๋ป๊ฒ Mapping ์ํค๋์ง์ ๊ดํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. User level library๋ User์ชฝ์ Thread๋ฅผ ๊ด๋ฆฌํด์ฃผ๋๋ฐ Kernel๊ณผ User๋ฅผ ์ด๋ป๊ฒ ์ฐ๊ฒฐ์ํค๋๊ฐ. ์ค๊ตญ์ง ์จ์ดํฐ์ ์ฃผ๋ฐฉ ์ฌ์ด์ ๊ด๊ณ. ์์ ์ฃผ๋ฌธ์์ ํด๋นํ๋ ๊ฒ์ด LWP์ด๋ค. ์ฑ ์ ๋ฐ๋ผ LWP๋ฅผ Kernel Thread๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.