[OS] Operating System(5-1): CPU Scheduling
๐ ์ด์์ฒด์ ์ ๊ณต ์์ ์ ๋ฆฌ
CPU Scheduling์ ํ๋์์๋ Thread Scheduling๊ณผ ๊ฐ๋ค
CPU Scheduling basic concept
CPUโI/O Burst Cycle
- ํ๋ก์ธ์ค ์คํ์ CPU burst์ I/O burst์ ๋ฐ๋ณต์ผ๋ก ๊ตฌ์ฑ๋จ.
- ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋จ์ ์งง์
CPU burst
์ ๊ธดI/O burst
๋ฅผ ๊ฐ์ง๋ค. - CPU brust ๋ถํฌ๋ ๋๋ถ๋ถ short bursts๊ฐ ๋ง๊ณ longer bursts๋ ์ ์ ํํ๋ฅผ ๋ณด์ธ๋ค.
- CPU ํ์ฉ์ ์ต๋ํ์ผ๋ก ํ๊ธฐ ์ํจ์ด๋ค.
- CPU burst: ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐ์ ์ํํ๋ ์๊ฐ
- I/O burst: ํ๋ก์ธ์ค๊ฐ ์ ์ถ๋ ฅ ์์ ์ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ
CPU Scheduler
CPU Scheduler๋ Ready Queue์ ์๋ ํ๋ก์ธ์ค ์ค ์ด๋ค ํ๋ก์ธ์ค์๊ฒ CPU core๋ฅผ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ค.
CPU scheduling decisions์ ๋ค์ ๋ค ๊ฐ์ง ์ํฉ์์ ๋ฐ์:
- ํ๋ก์ธ์ค๊ฐ ์คํ ์ํ์์ ๋๊ธฐ ์ํ๋ก ์ ํ๋ ๋
- ํ๋ก์ธ์ค๊ฐ ์คํ ์ํ์์ ์ค๋น ์ํ๋ก ์ ํ๋ ๋
- ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ์์ ์ค๋น ์ํ๋ก ์ ํ๋ ๋
- ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋
โ CPU Scheduling์ ๋๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค.
- Nonpreemptive(๋น์ ์ ํ)
- ์ํฉ 1๊ณผ 4์์๋ง ์ค์ผ์ค๋ง์ด ๋ฐ์
- ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ํ ๋น๋ฐ์ผ๋ฉด ์๋ฐ์ ์ผ๋ก ๋์ ๋๊น์ง CPU๋ฅผ ๋ ์
- ์ฆ, ์ข ๋ฃ/wating ์ํ๊ฐ ์๋๋ฉด CPU๋ฅผ ๋ ์ ํจ
- Preemptive(์ ์ ํ)
- ๋ชจ๋ ์ํฉ์์ ์ค์ผ์ค๋ง์ด ๋ฐ์ํ ์ ์์
- OS๊ฐ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ก๋ถํฐ CPU๋ฅผ ๊ฐ์ ๋ก ํ์ํ ์ ์๋ค
- ๊ณ ๋ คํ ์ 3๊ฐ์ง
- shared data์ ๋ํ ์ ๊ทผ(race condition ๋ฐ์ ๊ฐ๋ฅ)
- race condition(๊ฒฝ์ ์กฐ๊ฑด): ๋ ์ด์์ ์ค๋ ๋๊ฐ ๋์์ ์์์ ์ ๊ทผํ๋ฉด์, ์คํ ์์์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ๋ฒ๊ทธ๋ฅผ ์ผ์ผํฌ ์ ์๋ ์ํฉ
- kernel mode์์์ ์ ์ (์ ์ ์์ kernel์์ ์จ์ ํ๊ฒ task๊ฐ ๋๋์ง ์์์ฑ๋ก ์ ํ๋๋ฉด ๋ฌธ์ ๊ฐ ์๊น)
- ์ค์ OS ํ๋ ์ค interrupts ๋ฐ์(๋ถ๊ฐํผํ ๊ฒฝ์ฐ interrupt๋ฅผ disableํ๊ณ ๋๋๋ฉด ๋ค์ enable์ํฌ ์ ์์)
Dispatcher
Dispatcher: CPU ์ค์ผ์ค๋ฌ๊ฐ ์ ํํ ํ๋ก์ธ์ค์๊ฒ ์ค์ ๋ก CPU ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๋ ๋ชจ๋
โ Scheduler๋ด์ task์ ์คํ์์๋ฅผ ์ ์ดํ๋ ์ญํ- ์ฃผ์ ๊ธฐ๋ฅ
- context switching: ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ฎ๊ฒจ๊ฐ๋ ์์
- switching to user mode
- ํ๋ก๊ทธ๋จ์ ์ฌ์์ํ๊ธฐ ์ํด ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ํน์ ์์น๋ก ์ ํํ๋ ์์
- Dispatch Latency(์ง์ฐ): ํ๋์ ํ๋ก์ธ์ค๋ฅผ ์ค์งํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ
Scheduling Criteria
- CPU utilization(์ด์ฉ๋ฅ ):
- CPU๊ฐ ์ผ๋ง๋ ๋ฐ์๊ฒ ์ผํ๋์ง๋ฅผ ์ธก์
- 40% ์ดํ๋ ๊ฐ๋ฒผ์ด ์์คํ ๋ถํ, 90% ์ด์์ ๋ฌด๊ฑฐ์ด ์์คํ ๋ถํ๋ฅผ ์๋ฏธ
- Throughput(์ฒ๋ฆฌ๋):
- ๋จ์ ์๊ฐ๋น ์ฒ๋ฆฌ/์๋ฃ๋๋ ํ๋ก์ธ์ค์ ์
- Turnaround Time(๋ฐํ ์๊ฐ):
- ํ๋ก์ธ์ค๊ฐ ์์ํด์ ๋๋ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ
- Waiting Time(๋๊ธฐ ์๊ฐ):
- ํ๋ก์ธ์ค๊ฐ Ready Queue์์ ๊ธฐ๋ค๋ฆฌ๋ ์ด ์๊ฐ
- CPU time์ด๋ I/O time์ ์ค์ผ์ค๋ฌ๊ฐ ์ค์ผ ์ ์๋ค.
- ์ฆ, ๋๊ธฐ์๊ฐ์ ํ๋ก์ธ์ค๊ฐ ready queue์ ๋จธ๋ฌด๋ ์๊ฐ์ผ๋ก ์ธก์
- Response Time(์๋ต ์๊ฐ):
- ์์ฒญ ์ ์ถ ์์ ๋ถํฐ ์ฒซ ์๋ต์ด ๋์ฌ ๋๊น์ง์ ์๊ฐ
- ๋ฐํ์๊ฐ์ด ๊ฐ์๋ ์๋ต์๊ฐ์ด ์งง์ผ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋ ํจ๊ณผ๊ฐ ์์
- ์ผ๋ฐ์ ์ผ๋ก ํ๊ท ๋ณด๋ค ํธ์ฐจ๋ฅผ ์ค์ด๋ ๊ฒ์ด ๋ ์ค์
Scheduling Algorithm
๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ํ๊ฐ ๊ธฐ์ค์ ํ๊ท ๋๊ธฐ์๊ฐ์ด๋ค. ํ๊ท ๋๊ธฐ์๊ฐ์ด ์งง์ ์๋ก ์ข์ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๊ฐ
FCFS(First-Come, First-Served)
Nonpreemptive(๋น์ ์ ํ) ์ค์ผ์ค๋ง์ด๋ฉฐ, ๋จผ์ ๋์ฐฉํ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์คํ
p1,p2,p3 ์์ผ๋ก ๋ค์ด์จ ๊ฒฝ์ฐ
Gantt Chart๋ ๊ทธ๋ฆผ์ฒ๋ผ ๋์ด
ํ๊ท ๋๊ธฐ ์๊ฐ: (0 + 24 + 27)/3 = 17
p2,p3,p1 ์์ผ๋ก ๋ค์ด์จ ๊ฒฝ์ฐ
ํ๊ท ๋๊ธฐ ์๊ฐ: (6 + 0 + 3)/3 = 3
๋ ๊ฐ์ ์์๋ฅผ ๋น๊ตํด๋ณด๋ฉด ํ task๋ ๊ฐ์ง๋ง ํ๊ท ์๊ฐ์ด ์์ฒญ๋๊ฒ ์ฐจ์ด๋๋ค.
โ ๋จ์ : Convoy Effect - CPU ์ง์ฝ์ ์ธ ๊ธด ํ๋ก์ธ์ค ๋ค์ ์งง์ ํ๋ก์ธ์ค๋ค์ด ์ค๋ ๊ธฐ๋ค๋ ค์ผ ํ๋ ํ์
SJF(Shortest Job First)
- ํ๊ท ๋๊ธฐ์๊ฐ์ ์ค์ด๊ธฐ ์ํด CPU brust๊ฐ ๊ฐ์ฅ ์งง์ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์คํ
- Nonpreemptive(๋น์ ์ ํ) ์ค์ผ์ค๋ง
- ์ต์ ํ๊ท ๋๊ธฐ ์๊ฐ์ ์ ๊ณตํ๋ optimalํ ์๊ณ ๋ฆฌ์ฆ
- ๋ค์ CPU brust ๊ธธ์ด๋ฅผ ์ ํํ ์์ธกํ๊ธฐ ์ด๋ ต๋ค.
๊ทธ๋ผ CPU Brust๋ ์ด๋ป๊ฒ ์ธก์ ํด์ผํ๋๊ฐ??
โ exponential averaging(์ง์ ๊ฐ์คํ๊ท )๊ธฐ๋ฒ์ ์ฌ์ฉ
1
ฯโโโ = ฮฑยทtโ + (1-ฮฑ)ยทฯโ
- ฯโ = ์ค์ n๋ฒ์งธ CPU brust์ ๊ธธ์ด
- ฯโโโ = ๋ค์ CPU brust์ ์์ธก ๊ฐ
- ฮฑ๋ 0๊ณผ 1์ฌ์ด ๊ฐ
- ฮฑ ๊ฐ์ ๋ฐ๋ผ ์ต๊ทผ ์ธก์ ๊ฐ์ ๋ฐ์ ๋น์จ์ด ๊ฒฐ์ ๋๋ค.
ฮฑ = 0: ๊ณผ๊ฑฐ ๊ธฐ๋ก๋ง ๊ณ ๋ ค - ฯโโโ = tโ
ฮฑ = 1: ์ต๊ทผ CPU ๋ฒ์คํธ๋ง ๊ณ ๋ ค - ฯโโโ = ฮฑยทtโ
SRTF(Shortest Remaining Time First)
- SJF์ ์ ์ ํ ๋ฒ์ (SRTF = preemptive SJF)
- ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ ๋๋ง๋ค ๋จ์ ์คํ ์๊ฐ์ ๋น๊ตํ์ฌ ๋ ์งง์ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฐจ์ง
ํ๊ท ๋๊ธฐ ์๊ฐ: [(10-1)+(1-1)+(17-2)+(5-3)]/4 = 26/4 = 6.5
p1, p2 .. ์์ธ๋ฐ p2๋ 1์ด๋ค์ ๋์ฐฉํ๊ณ ๋ฐ๋ก ์คํํ์ผ๋ (1-1)์ด๋ค.ํ๊ท ๋๊ธฐ ์๊ฐ
์์ ์ฃผ์
RR(Round Robin)
- ๊ฐ ํ๋ก์ธ์ค๋ ์๊ฐ ํ ๋น๋(time quantum) q๋ฅผ ๋ฐ๋๋ค.
- q ์๊ฐ์ด ์ง๋๋ฉด ํ๋ก์ธ์ค๋ ์ ์ ๋์ด Ready Queue์ ๋์ผ๋ก ์ด๋
- q๊ฐ ํฌ๋ฉด FCFS์ ์ ์ฌํด์ง๊ณ , q๊ฐ ๋งค์ฐ ์์ผ๋ฉด context switch ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐ
q๊ฐ 4์ธ ๊ฒฝ์ฐ
SJF๋ณด๋ค ํ๊ท ๋๊ธฐ์๊ฐ์ ๊ธธ์ง๋ง, response๊ฐ ๋ ์ข์
q๋ 10ms~100ms ์ ๋์ด๋ฉฐ, context switch time(<10ฮผs)๋ณด๋ค ์ถฉ๋ถํ ์ปค์ผ ํ๋ค.
ํ๊ท ๋๊ธฐ ์๊ฐ = (4+7+6)/3 = 5.66
q๊ฐ ์ค์ด๋ฆ์ ๋ฐ๋ผ context switch๊ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋จ
์ฆ, ํ์ ํํ ์ค์ ์ ๋ฏผ๊ฐํจ
์ผ๋ฐ์ ์ผ๋ก CPU brust์ 80%๊ฐ ์๊ฐ ํ ๋น๋๋ณด๋ค ์์ ๋ ํจ์จ์ ์ด๋ค.
Priority Scheduling
- ๊ฐ ํ๋ก์ธ์ค์ ์ฐ์ ์์ ๋ฒํธ(์ ์)๋ฅผ ํ ๋นํ๊ณ , ๊ฐ์ฅ ๋์ ์ฐ์ ์์(๊ฐ์ฅ ์์ ์ ์)์ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๋ค.
- ์ ์ ํ๊ณผ ๋น์ ์ ํ ๋ชจ๋ ๊ฐ๋ฅ
- ์ ์ ํ: ๋๋ณด๋ค ๋ ๋์ ์ฐ์ ์์๊ฐ ๋ค์ด์ค๋ฉด ์๋ณดํ๋ ๋ฐฉ์
- ๋น์ ์ ํ: ๋๋ณด๋ค ๋ ๋์ ์ฐ์ ์์๊ฐ ๋ค์ด์๋ ํ๋ ์ผ์ ๋ง๋ฌด๋ฆฌํ๋ ๋ฐฉ์
โ ๋ฌธ์ ์ : Starvation - ๋ฎ์ ์ฐ์ ์์ ํ๋ก์ธ์ค๊ฐ ์คํ ๊ธฐํ๋ฅผ ์ป์ง ๋ชปํ ์ ์๋ค.
โ ํด๊ฒฐ์ฑ : Aging - ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ์ ์ง์ ์ผ๋ก ์ฆ๊ฐ์ํจ๋ค.
์ด ์์๋ ๋น์ ์ ํ
ํ๊ท ๋๊ธฐ ์๊ฐ = (0+6+16+18+1)/5 = 8.2msec
๊ทธ๋ผ ๋์์ ๋์ฐฉํ๊ณ ์ฐ์ ์์๋ ๊ฐ์ ๊ฒฝ์ฐ๋?
๊ฐ์ ์ฐ์ ์์๋ Round-Robin์ ์ฌ์ฉํ๋ค.
q๊ฐ 2์ธ ๊ฒฝ์ฐ๋ ์์์ ๊ฐ์ ์ค์ผ์ค๋ง์ ๊ฐ์ง๋ค.
Multilevel Queue
Ready Queue๋ฅผ ์ฐ์ ์์๋ณ๋ก ์ฌ๋ฌ ํ๋ก ๋ถํ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ค ์ ํ์ ๋ฐ๋ผ ํ๋ฅผ ๋ถ๋ฅํ๋ค:
real-time process (์: ์๊ธ ์๋ฆผ ์์คํ , ์ผ์ ์ ์ด ๋ฑ โ ์๊ฐ ๋ด์ ๊ผญ ์คํ๋์ด์ผ ํจ) system process interactive process batch process (์ตํ์ ์ฐ์ ์์)
- ๋์ ์ฐ์ ์์๋ฅผ ๋ฌด์กฐ๊ฑด ๋จผ์ ์คํํ ์๋ ์๊ณ ,
- ํ์ ๋ฐ๋ผ time-slice (์๊ฐ ํ ๋น)์ ๋ค๋ฅด๊ฒ ์ค ์๋ ์์.
Multilevel Feedback Queue
- ํ๋ก์ธ์ค๊ฐ ํ ์ฌ์ด๋ฅผ ์ด๋ํ ์ ์๋
multilevel queue
์ด๋ค. - CPU๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ํ๋ก์ธ์ค๋ ๋ฎ์ ์ฐ์ ์์ ํ๋ก ์ด๋ํ๊ณ , ์ค๋ ๊ธฐ๋ค๋ฆฐ ํ๋ก์ธ์ค๋ ๋์ ์ฐ์ ์์ ํ๋ก ์ด๋ํ ์ ์์.
- ๊ฐ์ฅ ์ผ๋ฐ์ ์ด์ง๋ง ๊ฐ์ฅ ๋ณต์กํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ
โ ์ค์ ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ:
- ๋ช ๊ฐ์ ํ๋ฅผ ์ธ์ง (
number of queues
) - ๊ฐ ํ๋ง๋ค ์ด๋ค ์ค์ผ์ค๋ง ๋ฐฉ์ ์ธ์ง (
scheduling algorithm
) - ์ด๋ค ๊ธฐ์ค์ผ๋ก ํ๋ฅผ ์ฌ๋ฆด์ง/๋ด๋ฆด์ง (
upgrade
,demote
) - ์ฒ์ ์ด๋ค ํ์ ๋ฃ์์ง (
entry queue
)
- Scheduling ํ๋ฆ:
- ์ job์ Qโ๋ถํฐ ์์ โคท CPU๋ฅผ ๋ฐ์ผ๋ฉด 8ms ์ฌ์ฉํจ โคท ๋ค ๋ชป ๋๋ด๋ฉด Qโ์ผ๋ก ์ด๋
- Qโ์์ 16ms ์๊ฐ ํ ๋น โคท ๊ทธ๋๋ ๋ค ๋ชป ๋๋ด๋ฉด Qโ๋ก ์ด๋
- Qโ์์ FCFS ๋ฐฉ์ โคท ์ฌ๊ธฐ์ ์๊ฐ์ ํ ์์ด ์ฒ๋ฆฌ๋จ
๐ํต์ฌ ์ ๋ฆฌ
- ๋นจ๋ฆฌ ๋๋ ์ ์๋ ์งง์ job์ ๋นจ๋ฆฌ ๋๋ด๊ณ , ๊ธด job์ ์ ์ ๋ฎ์ ์ฐ์ ์์๋ก ๋ฐ์ด๋
- ์ ์ฐํ๊ฒ ํ ์ด๋ ๊ฐ๋ฅ โ CPU ์์ ๋ฐฐ๋ถ ํจ์จ์
Thread Scheduling
๐Thread Scheduling์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ CPU ์๊ฐ์ ์ด๋ป๊ฒ ๋๋์ด ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ
โ ์ค๋ ๋ ์ค์ผ์ค๋ง์ ๋ ๊ฐ์ง ์ฃผ์ ๋ฒ์:
- PCS - Process Contention Scope
- ๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๋ค ๊ฐ์ CPU ์๊ฐ์ ์ด๋ป๊ฒ ๋๋์ง ๊ฒฐ์
- ์ค๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ์ฉ์ ์์ค ์ค๋ ๋๋ฅผ LWP์ ๋งคํํ์ฌ ๊ด๋ฆฌ
- LWP (Lightweight Process): user-level thread๊ฐ ์ค์ ๋ก ์คํ๋๋ ๋ ผ๋ฆฌ์ ์ธ ์ค๋ ๋ ๋จ์
- ์ค์ผ์ค๋ง ๊ฒฝ์์ด ํ๋ก์ธ์ค ๋ด๋ถ์์๋ง ๋ฐ์
- ํ๋ก๊ทธ๋๋จธ๊ฐ ์ค๋ ๋์ ์ฐ์ ์์๋ฅผ ์ค์ ํ ์ ์์
- SCS - System Contention Scope
- ์์คํ ์ ์ฒด์ ๋ชจ๋ ์ค๋ ๋๋ค ๊ฐ์ CPU ์๊ฐ์ ์ด๋ป๊ฒ ๋๋์ง ๊ฒฐ์
- ์ปค๋์ด ์ง์ ์ค๋ ๋๋ฅผ ์ค์ผ์ค๋ง
- ๋ชจ๋ ํ๋ก์ธ์ค์ ๋ชจ๋ ์ค๋ ๋๊ฐ ์๋ก ๊ฒฝ์
- many-to-many model
- ๋ค์์ ์ฌ์ฉ์ ์์ค ์ค๋ ๋๋ฅผ ์ ์ ํ ์์ ์ปค๋ ์ค๋ ๋์ ๋งคํ
- ํ๋ก์ธ์ค ๋ด ์ค์ผ์ค๋ง์ ์ฌ์ฉ์ ์์ค ์ค๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ด๋น(PCS)
- One-to-One model
- ๊ฐ ์ฌ์ฉ์ ์์ค ์ค๋ ๋๊ฐ ํ๋์ ์ปค๋ ์์ค ์ค๋ ๋์ ๋งคํ
- ์ฅ์ : ํ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋์ด๋ ๋ค๋ฅธ ์ค๋ ๋๋ ์คํ ๊ฐ๋ฅ, ๋ฉํฐํ๋ก์ธ์์์ ๋ณ๋ ฌ ์คํ ๊ฐ๋ฅ
- ๋จ์ : ์ค๋ ๋ ์์ฑ ์ ์ปค๋ ์ค๋ ๋๋ ์์ฑํด์ผ ํ๋ฏ๋ก ์ค๋ฒํค๋ ๋ฐ์
- Linux, Windows, macOS ๋ฑ ํ๋ ์ด์์ฒด์ ์์ ์ฃผ๋ก ์ฌ์ฉ
Pthread Scheduling
PTHREAD_SCOPE_PROCESS
: PCS ์ค์ผ์ค๋ง ์ฌ์ฉPTHREAD_SCOPE_SYSTEM
: SCS ์ค์ผ์ค๋ง ์ฌ์ฉ
Linux์ macOS๋ PTHREAD_SCOPE_SYSTEM
๋ง ์ง์
1
2
3
// Pthread๋ user-level์์ ๊ตฌํ๋ ์๋ ์๊ณ kernel-level์์ ๊ตฌํ๋ ์๋ ์์ด์ ๋๊ฐ์ง scope๊ฐ ์กด์ฌ
pthread_attr_setscope(pthread_attr_t *attr, int scope);
pthread_attr_getscope(pthread_attr_t *attr, int *scope);
Multiple-Processor Scheduling
multiprocessor
์ CPU Scheduling์ ํจ์ complex
- ์ฌ๋ฌ ๊ฐ์ CPU๋ฅผ ๋ฃ์จ์ ์ผ๋ก ๊ด๋ฆฌํด์ผํ๊ธฐ ๋๋ฌธ
โ multiprocessor์ ๊ตฌ์ฑ:
- Multicore CPU: ํ๋์ ์นฉ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ ์ฝ์ด๊ฐ ํฌํจ
- Multithreaded core: ํ๋์ ์ฝ์ด๊ฐ ์ฌ๋ฌ ํ๋์จ์ด ์ค๋ ๋๋ฅผ ์ง์
- NUMA systems(Non Uniform Memory Access): ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๊ฐ์ด ๊ท ์ผํ์ง ์์
- Heterogeneous multiprocessing: ๋ชจ๋ฐ์ผ ์์คํ ์์ ๋์ผํ ๊ธฐ๋ฅ์ ํ์ง๋ง ์ ์์ ์ ์ฝํ๊ธฐ ์ํด ์ฑ๋ฅ์ด ๋ค๋ฅธ ์ฝ์ด๋ฅผ ํจ๊ป ๊ฐ์ง๊ณ ์๋ ํํ
Symmetric multiprocessing(SMP)
๐Symmetric multiprocessing(SMP): ๋ชจ๋ ํ๋ก์ธ์๊ฐ ๋๋ฑ, ๊ฐ์ ์ค์ผ์ค๋ง์ ์ฒ๋ฆฌ
- ์ด๋ ํ๋ ์ด์์ฒด์ ์์ ์ฌ์ฉ๋๋ ๋ฐฉ์
โ SMP์ ์ค๋ ๋ ๊ด๋ฆฌ ๋ฐฉ์:
- Common(๊ณต์ ) ready queue:
- ๋ชจ๋ ์ค๋ ๋๊ฐ ํ๋์ ๊ณตํต๋ readt queue์ ์ ์ฅ๋จ
- ๋ชจ๋ ํ๋ก์ธ์๊ฐ ์ด ํ์์ ์์ ์ ๊ฐ์ ธ์ด
- Per-core run queues:
- ๊ฐ ํ๋ก์ธ์๊ฐ ์์ ๋ง์ ๊ฐ๋ณ ์ค๋ ๋ ํ๋ฅผ ๊ฐ์ง
(a)
ready queue๋ฅผ ๊ณต์
โ race condition ๋ฐ์ ๊ฐ๋ฅ
race condition์ ๋ฐฉ์งํ๊ธฐ ์ํดLocking
์ด ํ์ โ ์ฑ๋ฅ ์ ํ+high contention (b) ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํํ, Cahce์ ์ฑ๋ฅ์ด ์ข์(workload balacning ์๊ณ ๋ฆฌ์ฆ ํ์)
- ๊ฐ ํ๋ก์ธ์๊ฐ ์์ ๋ง์ ๊ฐ๋ณ ์ค๋ ๋ ํ๋ฅผ ๊ฐ์ง
Multicore Processor
ํ๋์๋ ์ฌ๋ฌ ํ๋ก์ธ์ ์ฝ์ด๋ฅผ ํ๋์ ์นฉ์ ๋ฐฐ์นํ๋ ์ถ์ธ โ Multicore ์ฅ์ :
- ๋น ๋ฅธ ์ฒ๋ฆฌ ์๋
- ์ ๋ ฅ ํจ์จ์ฑ
- ์ฝ์ด๋ณ ๋ค์ค ์ค๋ ๋(ํ๋์จ์ด ์ค๋ ๋)
๋ํ memory stall ์ํฉ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
- memory stall(๋ฉ๋ชจ๋ฆฌ ์ง์ฐ): CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ๋ด๋ณด๋ผ๋ ์๋ฌด๊ฒ๋ ์ํ๋ ํ์
- ๋จ์ผ ์ค๋ ๋์ ๊ฒฝ์ฐ
๋ฉ๋ชจ๋ฆฌ ์ง์ฐ ๋์ CPU๊ฐ Idle ์ํ(ํ๋ก์ธ์ค๊ฐ ์คํํ๊ณ ์์ง ์์ ์ํ)๋ก ๋๊ธฐํ๋ฏ๋ก CPU ํ์ฉ๋ฅ ์ด ๋ฎ์
- ๋ฉํฐ ์ค๋ ๋์ ๊ฒฝ์ฐ
ํ ์ค๋ ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ง์ฐ ์ํ โ ๋ค๋ฅธ ์ค๋ ๋๋ก ์ ํ, CPU ์์์ ๊ณ์ ํ์ฉ
Multithreaded Multicore System
๐ Multithreaded Multicore System: ๊ฐ ์ฝ์ด๊ฐ ๋ ๊ฐ ์ด์์ ํ๋์จ์ด ์ค๋ ๋๋ฅผ ์ง์ํ๋ ์์คํ
- ๊ฐ ์ฝ์ด๋ ์ฌ๋ฌ ๊ฐ์ ํ๋์จ์ด ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์์
- ๊ฐ ํ๋์จ์ด ์ค๋ ๋๋ ๋ณ๋์ IP(Instruction Pointer)์ register set์ ๋ณด์
- Instruction Pointer๋ ์ผ๋ฐ์ ์ผ๋ก program counter๋ฅผ ์๋ฏธ
- Chip-multithreading(CMT): ๊ฐ ์ฝ์ด์ ์ฌ๋ฌ ํ๋์จ์ด ์ค๋ ๋๋ฅผ ํ ๋นํ๋ ๊ธฐ์ = simultaneous multithreading
- Intel์ ์ด๋ฅผ
hyperthreading
์ด๋ผ๊ณ ํจ- ex: Intel i7 hexa-core(6๊ฐ) ํ๋ก์ธ์๋ ์ด 12๊ฐ์ ํ๋์จ์ด ์ค๋ ๋๋ฅผ ๊ฐ์ง
- quad-core system์์ ์ฝ์ด๋น 2๊ฐ์ hardware thread๊ฐ ์๋ ๊ฒฝ์ฐ โ OS๋ 8๊ฐ์ logical processor๋ก ์ธ์
์ฝ์ด ๋ด์์ ๋ ๊ฐ์ ํ๋์จ์ด ์ค๋ ๋๊ฐ ์ค์์นญ ํ ๋ instruction pipline์ด ๊นจ์ง โ ๋น์ฉ ์ฆ๊ฐ ๊ฐ์
๊ฐ ์ฝ์ด๋ ํ๋์ ํ๋์จ์ด ์ค๋ ๋๋ง ์คํ ๊ฐ๋ฅ
Two levels of scheduling
Multithreaded Multicore System์์๋ ์ค์ผ์ค๋ง์ด ๋ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง
- level 1 - OS scheduling: ์ด์์ฒด์ ๊ฐ ์ํํธ์จ์ด ์ค๋ ๋๋ฅผ logical CPU(hardware thread)์ ํ ๋น
- level 2 - Core Internal scheduling: ๋ฌผ๋ฆฌ์ ์ฝ์ด๊ฐ ์ด๋ค ํ๋์จ์ด ์ค๋ ๋๋ฅผ ์คํํ ์ง ๊ฒฐ์
Load Balancing
SMP ์์คํ ์์๋ ํจ์จ์ฑ์ ์ํด ๋ชจ๋ CPU๊ฐ ์์ ์ ๊ท ๋ฑํ๊ฒ ๋๋ ๊ฐ์ ธ์ผํจ ์ด๋ฅผ ์ํด load balancing์ด ํ์
load balancing์ ์ฝ์ด๊ฐ ๊ฐ๋ณ์ ์ธ ํ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ์๋ง ์๋ฏธ๊ฐ ์์
๐load balancing: workload๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ๋ ๊ณผ์
- Push migration:
periodic
task๋ฅผ ๊ฒ์ฌํ์ฌ overloaded CPU์์ ๋ค๋ฅธ CPU๋ก ์์ ์ ์ด๋ - Pull migration: Idle processor๊ฐ busy prosseor๋ก๋ถํฐ ์์ ์ ๋น๊ฒจ์ด
Processor Affinity
๐Processor Affinity: ์ค๋ ๋๊ฐ ํน์ ํ๋ก์ธ์์ ๋ํด ๊ฐ๋ ์ฐ๊ด์ฑ
- ์ค๋ ๋๊ฐ ํ ํ๋ก์ธ์์์ ์คํ๋๋ฉด ํด๋น ํ๋ก์ธ์์ ์บ์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ ๋ณด๊ฐ ์ ์ฅ๋จ
- ๋ก๋ ๋ฐธ๋ฐ์ฑ์ผ๋ก ์ธํด ์ค๋ ๋๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์๋ก ์ด๋ โ ์บ์ ์ ๋ณด๊ฐ ์์ค๋์ด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ ๊ฐ๋ฅ
โ Processor Affinity ์ข ๋ฅ:
- Soft affinity: ์ด์์ฒด์ ๊ฐ ์ค๋ ๋๋ฅผ ๊ฐ๋ฅํ ํ ๊ฐ์ ํ๋ก์ธ์์์ ์คํ(๋ณด์ฅX)
- Hard affinity: ํ๋ก์ธ์ค๊ฐ ์คํ๋ ํ๋ก์ธ์ ์งํฉ์ ๋ช
์์ ์ผ๋ก ์ง์ (linux -
sched_setaffinity()
ํจ์ ์ด์ฉ)