[์ด์์ฒด์ ] CPU ์ค์ผ์ค๋ง
๋ฉํฐํ๋ก๊ทธ๋๋ฐ์
์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๋๋ฐ
๊ฐ ํ๋ก์ธ์ค๊ฐ cpu๋ฅผ ์ ์ ํด์ concurrentํ๊ฒ ์คํ๋๋ ๊ฒ์
๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํจ (๋ฉํฐ ํ ์คํน)
concurrent์ ๋ชฉ์
์ ์ ์กฐ๊ฑด : cpu๊ฐ ๋งค์ฐ ๋นจ๋ผ์ ๋๊ณ ์์ ๋ ์๋ถํ ํ์ฌ cpu์์์ ์ฌ์ฉํ๋ ๊ฒ
cpu utilization์ ๋๋ฆฌ๊ธฐ ์ํด ์ค์ผ์ค๋ง์ด ํ์ํจ
cpu ์ค์ผ์ค๋ฌ
ready์ํ์ ํ๋ก์ธ์ค๋ค ์ค์ cpu๋ฅผ ํ ๋นํด์ค ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ ํ
ํ cpu running ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๊ณ ready์ธ ํ๋ก์ธ์ค ์ค ์ด๋ ํ๋ก์ธ์ค๋ฅผ ์ ํํ ๊ฒ์ธ๊ฐ?
preemptive(์ ์ ํ) vs non-preemptive (๋น์ ์ ํ)
์ ์ ํ : ๊ฐ์ ๋ก ์ซ์๋ผ ์ ์๋ค. <-> ์๋ฐ์ ์ผ๋ก ๋๊ฐ๊ฒ
์ค์ผ์ค๋ฌ๊ฐ ํ ๋น ์ค์ธ ํ๋ก์ธ์๋ฅผ ์ซ์๋ผ ์ ์๋ค.
๋น์ ์ ํ : cpu๋ฅผ ํ๋ก์ธ์ค๊ฐ ์ ์ ํ๊ณ ๋๋ฉด, releaseํ๊ธฐ ์ ๊น์ง๋ ์๋ฐ์ ๋์ค๊ธฐ ์ ๊น์ง๋ ํ๋ก์ธ์ค๊ฐ ์ฐ๋๋ก ๋ด๋ฒ๋ฌ๋
1. running -> waiting : cpu์ ์ ์ค์ด๋ค๊ฐ I/O๋ก
2. running -> ready
3. waiting -> ready : ํ์ผ ์ ์ถ๋ ฅ ๋๋จ, cpu ์ ์ ํ๋ฌ ready๋ก ๊ฐ
4. ํ๋ก์ธ์ค terminate
1, 4 -> ์๋ฐ์ ์ผ๋ก ์ด๋ (๋น์ ์ ํ)
2, 3 -> ready๋ก ๊ฐ์ผ๋ cpu๋ฅผ ์ ์ ํ ์ฐ์ ์์๊ฐ ๋์ผ๋ฉด cpu์ ํ ํ ๋น์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ซ์๋ผ ์ ์์ฃ !
(์ ์ ํ(V) ๋๋ ๋น์ ์ ํ(๋นํจ์จ์ ))
dispatcher
context switch๋ฅผ ํด์ฃผ๋ ๋ชจ๋
ํ๋ก์ธ์ค์๊ฒ cpu๋ฅผ ๋๊ฒจ์ค
(cpu running -> waiting or ready ์ซ์๋ -> ready์ ํ๋ก์ธ์ค๋ฅผ ํ ๋น)
ํ ์ผ:
cpu๋ฅผ ํ๋์ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ํ ๋นํด์ฃผ๊ณ
์๋ก์ด ํ๋ก์ธ์ค์ ์ ๋นํ ์์น๋ก resumeํด์ค
์ค์ผ์ค๋ฌ : ํ๋ก์ธ์ค๋ฅผ ์ ํ
dispatcher : ์ค์ context switching๋ฅผ ์ํ
dispatcher๊ฐ ๋ชน์ ๋นจ๋ผ์ผ ํจ!
dispatcher latency๋ ๊ฐ๊ธ์ ์งง์์ผํ๋ค.
dispatcher latency๋?
ํ๋ก์ธ์ค๋ฅผ ๋ฉ์ถ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ runningํ๋ ์๊ฐ
์ค์ผ์ค๋ง ๋ชฉํ
cpu utilizaion : cpu๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๊ธฐ busy
throughput : ๋จ์์๊ฐ ๋ด ์๋ฃ๋ ํ๋ก์ธ์ค์ ํ์ ์ฆ๊ฐ
turnaround time : ํ๋ก์ธ์ค ๋์ฐฉ ~ ์ข ๋ฃ๊น์ง ์๊ฐ ์ต์ํ
waiting time !์ค์! : ํ๋ก์ธ์ค๊ฐ ready queue์์ ๋๊ธฐํ๋ ์๊ฐ์ ์ต์ํ
response time : ์๋ต์๊ฐ ์ต์ํ
<์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ>
1. FCFS : first come first served ๋จผ์ ์จ ์์๋๋ก ์ฒ๋ฆฌ, ๊ณตํ
๋ฌธ์ ๋ง์, ์ด์ฐฝ๊ธฐ ์ด์์ฒด์ ์ ์ฌ์ฉ
2. SJF : shortest job first , SRTF : shortest remaining time first (๋จ์ ์๊ฐ์ด ๊ฐ์ฅ ์ ์ ๊ฒ)
์๋๋ถํฐ ์๋ถํ ๊ด๋ จ time-sharing
3. RR : round-robin ์ ํด์ง ์๊ฐ๋งํผ๋ง
t1, t2, t3, ... ready queue์ ์๋ค๊ฐ ์ ํด์ง ์๊ฐ๋งํผ๋ง ์ฌ์ฉ
4. priority-based : RR์ ์ฐ๋๋ฐ, ์ฐ์ ์์๋ฅผ ๋ถ์ด
5. MLQ : multi-level queue : ์ฐ์ ์์์ ๋ฐ๋ผ ready queue๋ฅผ ๋ฐ๋ก
6. MLFQ : multi level feedback queue : ready queue๋ฅผ ๋ฐ๋ก + ์ฐ์ ์์ ์์ , ํ๋์ ์ค์ผ์ค๋ฌ
FCFS
๊ฐ์ฅ ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ
CPU๋ฅผ ๋จผ์ ์์ฒญํ ํ๋ก์ธ์ค์๊ฒ ๋จผ์ ํ ๋น
queue์ ๋ฃ์ด ๋๊ธฐ์ํค๊ณ , ๋ค ์คํํ๋ฉด ๋๊ฐ๊ณ ...
์์๋๋ก ์ฒ๋ฆฌ
FCFS
p1 - p2 - p3
burst time
p1 24,
p2 3
p3 3
waiting time
์์ ํ๋ก์ธ์ค๊ฐ ๋๋ ๋๊น์ง ๊ณ์ ๋๊ธฐ
p1 = 0
p2 = 24
p3 = 27
total 51
average 51/3 = 17
average waiting time์ ์ค์ผ ๋ฐฉ๋ฒ์?
p2 - p3 - p1
p1 = 6, pw = 0, p3 = 3
total = 9
average = 3
turnaround time : ๋์ฐฉ ~ ์ข ๋ฃ๊น์ง
p2 - p3 - p1
p1 = 30, p2 = 3, p3 = 6
total = 39
average = 13
note
average waiting time์ด cpu-burst time์ด ์ผ๋ง๋์ ๋ฐ๋ผ ๋งค์ฐ ๋ฌ๋ผ์ง
FCFS๋ ๋น์ ์ ํ. ๋ค ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆผ
cpu bound 1๊ฐ์ I/O bound ์ฌ๋ฌ ๊ฐ๊ฐ ์์ ๋
(cpu ๋ง์ด ์ฐ๋ ํ๋ก์ธ์ค์ , cpu๋ ์ ๊ฒ ์ฐ์ง๋ง I/O๋ฅผ ๋ง์ด ์ฐ๋ ํ๋ก์ธ์ค)
convoy effect ํธ์ก ํจ๊ณผ, ๋ฅ์ฐจ ํจ๊ณผ
(์คํฌ์ธ ์นด๋ค์ด ๋ฅ์ฐจ ๋๋ฌธ์ ๋งํ๋ค)
cpu ๋ค ์ธ๋๊น์ง ํ์ผ์์ด ๊ธฐ๋ค๋ ค์ผํจ
cpu ์ ๊น๋ง ์ฐ๋ฉด ๋๋๋ฐ
๋ฐ๋ผ์ FCFS๋ ๋นํจ์จ์ ์ด๋ค
SJF
sortest next cpu burst first ์ค์ผ์ค๋ง
ํ๋ก์ธ์ค์ next CPU burst time์ ๊ณ์ฐํ์ฌ ๊ฐ์ฅ ์์ ๊ฒ์ ํ ๋น
SJF : provabily optimal ์ต์ ์ด๋ผ๋ ๊ฒ์ด ์ฆ๋ช ๊ฐ๋ฅํ๋ค
์ด๋ก ์ ์ผ๋ก ์ต์
average waiting time์ด ์ต์๋ค.
short ํ๋ก์ธ์ค์ waiting time์ ๊ฐ์
์ค์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๋๋ค.
๊ตฌํ์ด ๋ถ๊ฐํ๋ค
next CPU burst๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ๋๋ฐ ์์์๋ ๋ฐฉ๋ฒ์ด ์๋ค.
cpu ์ผ๋ง๋ ์ฐ๋์ง ์์ธกํ ์ ์๋ค.
SJF๋ฅผ ์๊ฒฉํ๊ฒ ๊ตฌํ ์ ์๊ณ , ์์ธกํ์ฌ ๊ทผ์ฌ์ ์ผ๋ก ๊ตฌํ์
predicted CPU burst๊ฐ ๊ฐ์ฅ ์งง์ ํ๋ก์ธ์ค๋ฅผ ์ ํํ์.
๊ณผ๊ฑฐ๋ฅผ ๋ณด์. previous cpu burst๋ฅผ ๋ณด์.
๊ณผ๊ฑฐ์ ์ธก์ ๋ ๊ฐ์ ๋ณด๊ณ , ์ง์์ ํ๊ท ์ ๋ด์
์ํ๊ฐ 0 --> ์์ ํ ๊ณผ๊ฑฐ ๊ธฐ๋ก๋ง
์ํ๊ฐ 1 --> ์์ ํ ์ต๊ทผ ๊ธฐ๋ก๋ง
SJF๋ preemptive or non-premptive
์๋ก์ด ํ๋ก์ธ์ค๊ฐ ready queue์ ๋์ฐฉํ์ ๋
p1์ cpu burst time์ด ๋ ์งง์๋ cpu ์ ์ ์ค์ธ p0๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ฃผ๋ ๊ฒฝ์ฐ non-preemptive SJF
p1์ cpu burst time์ด ๋ ์งง์์ p0๋ฅผ ready queue์ ๋ฃ๊ณ p1๊ฐ cpu ์ ์ ํ ๊ฒฝ์ฐ preemptive SJF
SRTF : shortest remaining time first : preemptive SJF
์ ํ๋ก์ธ์ค์ cpu burst๊ฐ, ์คํ ์ค์ธ ํ๋ก์ธ์ค์ remaining time๋ณด๋ค ๋ ์์ผ๋ฉด ์ ํ๋ก์ธ์ค๋ฅผ ์ ์ ํ๋ค.
์ ์ ํ์ธ SRTF (ํจ์จ์ ) < ๋น์ ์ ํ์ธ SJF
RR
time sharing
round robin : preemptive FCFS ์๊ฐ๋จ์๋ฅผ ์ค (time quantum, ๋ณดํต 10 millisecond)
๋จ์์๊ฐ ๋ด์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ณ ๋จ์์๊ฐ์ด ๋๋๋ฉด ๋ด๋ณด๋
circular queue
cpu burst๊ฐ ํ ์๊ฐ๋จ์๋ณด๋ค ์งง์ ๋
- ํ๋ก์ธ์ค๊ฐ ์๋ฐ์ ์ผ๋ก cpu release
cpu burst๊ฐ ํ ์๊ฐ๋จ์๋ณด๋ค ๊ธธ ๋
- ํ์ด๋จธ๊ฐ interrupt
- context swtich ์คํ
- ํ๋ก์ธ์ค๊ฐ ready queue์ ๋tail์ ๋ค์ด๊ฐ
RR์์ average waiting time์ด ์ข ๋ ๊ธธ ์ ์๋ค.
ํ์ง๋ง SJF์ ์์ด์ฐ๋ ์๊ฐ, ์ ์ฉ
RR์ ๋ฐ๋์ ์ ์ฉ๋จ
RR์ preemptive
cpu burst๊ฐ ํ ์๊ฐ๋จ์๋ณด๋ค ์ด๊ณผํ๋ฉด, ๊ฐ์ ๋ก ์ซ๊ฒจ๋จ, ๋ค์ ready queue๋ก ๋์๊ฐ
time quantum์ ๋ฐ๋ผ์ ์ฑ๋ฅ ๋ฌ๋ผ์ง
context switch๋ง๋ค dispatch latency ๋ฐ์!!
- dispatch latency๋ฅผ ์ต์ํํ๋ ๊ฒ์ด ์ข์ผ๋
- ๊ทธ๋ ๋ค๊ณ quantum์ด ๋ฌดํ๋๊ฐ ๋๋ฉด FCFS๊ฐ ๋จ
- quaumtum์ด ๋๋ฌด ์์ผ๋ฉด context switch๊ฐ ๋๋ฌด ์์ฃผ ์ผ์ด๋ dispatch latency๊ฐ ๊ธธ์ด์ง
- time quantum์ ๋๋ฌด ๋ง์ด ์ค๋, ๋๋ฌด ์ ๊ฒ ์ค๋ turnaround time์ด ์ค์ด๋ฆ
- ์ ์ ํ turnaround time์ด ๋๊ฒ๋ quantum์ ์ง์ ํด์ค์ผ
Priority-base ์ฐ์ ์์ ์ค์ผ์ค๋ง
์ฐ์ ์์๋ฅผ ์ด๋ป๊ฒ ๋ถ์ฌํ ๊ฒ์ธ๊ฐ?
์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค์๊ฒ cpu ํ ๋น
์ฐ์ ์์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ FCFS
SJF - predicted next CPU burst๊ฐ ์งง์ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ๋๋ค
preemptive : SRTF
non-preemptive : SJF
priority scheduling์์ ํญ์ ๋ฐ๋ฅด๋ ๋ฌธ์ :
starvation ๊ธฐ์! indefinite blocking ๋ฌดํ์ ๋๊ธฐ
์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ ๋ฌดํ์ ๊ธฐ๋ค๋ ค์ผํ ์ง๋ ๋ชจ๋ฅธ๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ : aging
์ค๋ ๊ธฐ๋ค๋ฆฐ ์์คํ ์๊ฒ๋ ์ฐ์ ์์ ๋์ฌ์ฃผ๊ธฐ
RR + Priority scheduling
- ์ฐ์ ์์๋ฅผ ์ฐ์ ์ ์ผ๋ก ๋ณด๋
- ์ฐ์ ์์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ, round-robin ์ค์ผ์ค๋ง
Multi-level queue MLQ ์ค์ผ์ค๋ง
์ฐ์ ์์์ ๋ฐ๋ผ ready queue๋ฅผ ๋ฐ๋ก
Multi level feedback queue MLFQ ์ค์ผ์ค๋ง
- ์ฐ์ ์ฌ๋ฌ ๊ฐ์ ํ๊ฐ ์กด์ฌ
- ํ๋ค์ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ ๋ฒจ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฏ๋ก multi level queue
- ๊ณผ๊ฑฐ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์ฐ์ ์์๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ์์ ๋ฐฉ๋ฒ์ด๋ฏ๋ก feedback์ด๋ผ๋ ๋จ์ด๋ ์ถ๊ฐ๋์ต๋๋ค.
- ๊ท์น 1 : ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๋ค์ ๋จผ์ ์ํํ๋ค.
- ๊ท์น 2 : ์์ ๋ค์ด ๊ฐ์ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ค๋ฉด RR๋ก ์ํํ๋ค.
- ๊ท์น 3 : ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ์์คํ ์ ๋ค์ด๊ฐ๋ฉด ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๋ค.
- ๊ท์น 4 : ์์ ์ ๋ชจ๋ ์ฐ์ ์์์์ ์ฃผ์ด์ง time quauntum๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ฉด ์ฐ์ ์์๊ฐ ๊ฐ์ํ๋ค.
๊ท์น 5 : ์ผ์ ์๊ฐ ํ ์์คํ ์ ๋ชจ๋ ์์ ์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ๋ก ์ด๋ํ๋ค.
modern OS
์ค์ ๋ก๋ Thread ์ค์ผ์ค๋ง์ ํจ, not process
์ปดํจํฐ์์ task๋ก ์ฌ์ฉํ๋ ๋จ์๋ Thread
๊ฒฐ๋ก : OS ์ปค๋์, ์ปค๋ Thread๋ฅผ ๋์์ผ๋ก CPU ์ค์ผ์ค๋ง์ ํ๋ค.
SQMS
ํ๋์ ํ์ ์์ ๋ค์ ๋ฃ์ด์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ SQMS(Single Queue Multprocessor Scheduling)
- ๋จ์ํ๋ค๋ ์ฅ์
- ์ค์ผ์ค๋ฌ๊ฐ ์ฌ๋ฌ CPU์์ ์ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด Lock์ ์ฌ์ฉ
- Lock์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ํฌ๊ฒ ์ ํ์ํฌ ์ ์์
- ์ค์ ํ๋ก๊ทธ๋จ ์ํ ์๊ฐ๋ณด๋ค Lock์ ์ฒ๋ฆฌํ๋ ์์ ์ ๋ ๋ง์ ์๊ฐ์ ์ฌ์ฉํ ์ ์์
Lock : ์ฌ๋ฌ CPU๊ฐ ๋์์ ๊ณต์ ๋ฐ์ดํฐ๊ฐ ์ ๊ทผํ ๋, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํจ
MQMS
SQMS์์์ ๋ฌธ์ ์ ์ ๋ณด์ํ MQMS(Multi Queue Multiprocessor Scheduling)
- SQMS์์ ์ฐจ์ด์ : ํ๊ฐ ์ฌ๋ฌ ๊ฐ
- ๊ฐ๊ฐ์ ํ๋ RR๊ณผ ๊ฐ์ ํน์ ํ ์ค์ผ์ค๋ง ๋ฐฉ๋ฒ์ ์ฌ์ฉ
- ์์ ์ด ์์คํ ์ ๋ค์ด์ค๋ฉด ํ๋์ ํ์๋ง ๋ฐฐ์น๋๊ณ , CPU ๋ ๋ฆฝ์ ์ผ๋ก ์ค์ผ์ค๋ง
์ถ์ฒ : https://www.inflearn.com/course/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B3%B5%EB%A3%A1%EC%B1%85-%EC%A0%84%EA%B3%B5%EA%B0%95%EC%9D%98/dashboard [์ธํ๋ฐ]
์ถ์ฒ: https://icksw.tistory.com/127 [PinguiOS]