cpu burst
: cpu์ ์ํด ์ง์ ์ํ๋๋ ์์
์ ๋ถ๋ถ (I/O ๊ฑฐ์ ์์)
I/O burst
: cpu์ ์ํ์ง ์๊ณ ์ผ์ด๋๋ ์์
์ ๋ถ๋ถ
์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ค๋ ๋ง์ ์์ ์งง์ cpu burst๋ค ํน์ ์ ์ ์์ ๊ธด cpu burst ๋ค๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ด๋ค์ ํธ์ค์ ๋ฐ๋ผ I/O bound ํ๋ก๊ทธ๋จ๊ณผ cpu bound ํ๋ก๊ทธ๋จ์ผ๋ก ๋๋์ ์๋ค
I/O bound : ๋๋ถ๋ถ์ด I/O, ๋ง์ ์์ ์งง์ CPU burst
cpu bound : ๋๋ถ๋ถ์ด ์ ์ ์์ ๊ธด cpu burst
: (short-term scheduler)
: ๊ฐ์ ์ฑ์ ๋๊ณ ์๋ค.
: ํด๋น ํ๋ก์ธ์ค ์ค์ค๋ก๊ฐ ์๋ ํ์์ ์ํ ๊ฐ์ ์ ์ธ scheduling์ ์๋ฏธํ๋ค.
ex) ๋์๊ด์์ ํ์ฌ ์ข์์ ์ฐจ์งํ๊ณ ์๋ ํ์์๊ฒ ์๊ฐ์ด ๋์ผ๋ ๋ฌผ๋ฌ๋๋ผ๊ณ ํ๋ ๊ฒฝ์ฐ
ex) ์๊ธ์ค - ๊ธํ ํ์๊ฐ ์๊ธฐ๋ฉด ๋จผ์ ์์๋ ํ์๋ณด๋ค ๋จผ์ ์์ ์ ๋ค์ด๊ฐ๋ค
: ๊ฐ์ ์ฑ์ ๋๊ณ ์์ง ์๋ค.
: ํด๋น ํ๋ก์ธ์ค ์ค์ค๋ก ์ผ์ ์ํญํด๋ ๊ฒ์ ์๋ฏธํจ.
: ์ค์ค๋ก ๊ทธ๋ง๋๊ธฐ ์ ๊น์ง๋ ๊ฐ์ ๋ก ๊ทธ๋ง๋๊ฒ ๋ชปํจ.
ex) ๋์๊ด ์ข์์ ์ฐจ์งํ ํ์์ด ์๋ฆฌ๋ฅผ ๋น์์ผ๋ง ์๋ฆฌ๊ฐ ์๊ธฐ๊ฒ ํ๋ ์ข์ ๋ฐฐ์
ex) ์ํ - ๋จผ์ ์จ ์๋์ ์ฉ๋ฌด๊ฐ ๋๋๊ธฐ ์ ๊น์ง๋ ๋ค์ ์ฌ๋์ด ์ผ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค. / ํ์ฅ์ค
RUNNING -> BLOCKED / Process terminated : nonpreemptive
RUNNING -> READY / BLCOKED -> READY : preemptive
preemptiveํ ์ค์ผ์ค๋ง์ธ ๊ฒฝ์ฐ ์ด๋ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋๊ฐ?
: 2๊ฐ ์ด์์ ํ๋ก์ธ์ค๋ค์ด ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค.
ex) ์ด๋ค ํ๋ก์ธ์ค๊ฐ kernel mode(system call)์์ ์ค์ํ ๋ฐ์ดํฐ(ํ๋ก์ธ์ค ํ ์ด๋ธ์ ์์ , ํ๋ก์ธ์ค์ ์์ฑ)๋ฅผ ์ฌ์ฉ์ค์ผ๋ preemption ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
==> process synchronization
(์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ์ ํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ์ค)
: ํ์ฌ cpu๊ฐ ์ผ๋ง๋ ์ฌ์ฉ๋๊ณ ์๋์ง๋ฅผ ๋ํ๋ธ๋ค. cpu utilization์ด ๋์์๋ก cpu๋ฅผ ์ ํ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ด๋ฏ๋ก ๋์์๋ก ์ข์ ์ค์ผ์ค๋ง ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
: ๋จ์ ์๊ฐ๋น ์๋ฃ์ํค๋ ํ๋ก์ธ์ค ์
: ์ฒ๋ฆฌ์จ์ด ๋์์๋ก ์๊ฐ๋น ๋ง์ ํ๋ก์ธ์ค๋ฅผ ์ํํ ์ ์๋ค๋ ๊ฒ์ผ๋ก ๋์์๋ก ์ข๋ค.
: process ์์ ~ ์๋ฃ ์๊ฐ
: ํ ํ๋ก์ธ์ค๊ฐ new ์ํ์์ terminated ์ํ์ ๋๋ฌํ ๋ ๊น์ง์ ์๊ฐ์ ๋ํ๋ธ๋ค.
๋ฐํ์๊ฐ์ด ์งง์์ผ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋๋ฐ ํ์ํ ์๊ฐ์ด ์งง๋ค๋ ๊ฒ์ผ๋ก ์งง์์๋ก ์ข๋ค.
: ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ด๊ฐ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ + ready queue์์ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ + cpu ์คํํ๋ ์๊ฐ + I/O ํ๋ ์๊ฐ
: ํ๋ก์ธ์ค๊ฐ ready queue์์ ๋๊ธฐํ ์ด ์๊ฐ
: ready queue์์ ๋๊ธฐํ ์๊ฐ์ด ์งง์์๋ก ํ๋ก์ธ์ค๋ค์ด ๋๊ธฐ ์์ด ๋น ๋ฅด๊ฒ ์คํ๋์๋ค๋ ๊ฒ์ด๋ฏ๋ก ์งง์์๋ก ์ข๋ค.
: ์๊ตฌ๊ฐ ๋ค์ด๊ฐ์ ๋, ์ฒซ๋ฒ์งธ ์๋ต์ด ๋์์ค๊ธฐ๊น์ง์ ์๊ฐ
: ํ๋ก์ธ์ค๊ฐ ์๋ต์ ์์ํ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ
: ์ค์๊ฐ ์์คํ
์์ ๋งค์ฐ ์ค์ํ ์์์ด๋ค. ์งง์์๋ก ์ข๋ค.
#### * convoy effect : ๋จผ์ ๋์ฐฉํ ํ๋ก์ธ์ค๊ฐ cpu์์ ์ํ๋๋ burst time์ด ๋งค์ฐ ๊ธธ๋ฉด ๊ทธ ๋ค์ ๋์ฐฉํ ํ๋ก์ธ์ค๊ฐ ์ฒซ๋ฒ์งธ ํ๋ก์ธ์ค๊ฐ ๋๋ ๋๊น์ง ๋งค์ฐ ๊ธด ์๊ฐ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค.
ex)
* p1 burst time : 24 / p2 : 3 / p3 : 3
p1 ----- p2 - p3
0 ------ 24 - 27 - 30
p1, p2, p3 ์์๋ก ๋์ฐฉํ๋ค๋ฉด ํ๊ท ๋๊ธฐ์๊ฐ (average waiting time) : (0 + 24 + 27) /3 =17p2 - p3 -------- p1
0---3--6 ------- 30
p2, p3, p1 ์์๋ก ๋์ฐฉํ๋ค๋ฉด ํ๊ท ๋๊ธฐ์๊ฐ (average waiting time) : (0+3+6)/3 = 3==> ์คํ์๊ฐ์ด ์งง์ ์์ผ๋ก ํ๋ฉด ์ข๊ฒ ๋ค
:: SJF(shortest job first algorithm)
๋ค์์ ์ํํด์ผ ํ cpu burst๋ค ์ค์์ ๊ฐ์ฅ ์์ ์ํ์๊ฐ์ ๊ฐ์ง๋ ํ๋ก์ธ์ค๋ถํฐ ์ ํํ๋ค.
๋ง์ฝ, 2๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ ๋์ผํ ์ํ์๊ฐ์ ๊ฐ์ง๋ค๋ฉด ๊ทธ๋ค ์ค์์๋ FCFS๋ก scheduling ํ๋ค.
nonpreemptive scheduling
์ํ๋ ํ๋ก์ธ์ค , ํ๋ก์ธ์ค์ ์ํ์๊ฐ์ ์์๊ฐ ์๋ค.
= ์ค์ ๋ก ์คํ ์ ์๋ ํ๋ก์ธ์ค๋ค์ ์ํ์๊ฐ์ ์ ์ ์๊ธฐ๋๋ฌธ์ ๋นํ์ค์ ์ด๋ค.
ex)
*p1 : 6 / p2 : 8 / p3 : 7 / p4 : 3
p4 -- p1 -- p3 -- p2
00 -- 03 -- 09 -- 16 -- 24
ํ๊ท ๋๊ธฐ์๊ฐ
(p4:0/ p1:3 / p3:9 / p2: 16 -> (0+3+9+16)/4=7)
** ๋ง์ฝ FCFS scheduling ์ ํ๋ค๋ฉด?
(0+6+14+21)/4 = 10.25
์์ฌ cpu burst๊ฐ ๊ฐ์ฅ ์์ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๋ค.
SJF scheduling ๊ธฐ๋ฒ์ preemptive version ์ด๋ค.
ํ๋ก์ธ์ค์ ready queue์์ ๋์ฐฉ์๊ฐ์ด ๋ช ์๋์ด์ผ ํ๋ค.
ex) ๐๊ณ์ฐ๋ฌธ์ - ์๋ฃ ๋ณด๊ธฐ ๊ผญ!
์ฐ์ ์์๊ฐ ๊ฐ ํ๋ก์ธ์ค์ ๋ฐฐ์ ๋๋ค. ๋ฌด์์ ์ด์ ์์๋ก ์ค ๊ฒ์ธ๊ฐ๊ฐ ๊ฒฐ์ ๋์ด์ผ ํ๋ค.
SJF (ํ๋ก์ธ์ค์ ์ํ์๊ฐ์ด ์์์๋ก) , SRTF (์์ฌ CPU burst๊ฐ ์์์๋ก) ๋ ์ฐ์ ์์ ์ค์ผ์ฅด๋ง์ ํ ์ข ๋ฅ์ด๋ค.
FCFS๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋์ผํ๊ฒ ํ ๊ฒฝ์ฐ์ด๋ค.
preemptive ๋๋ nonpreemptive ํ๊ฒ ์ด์๋ ์ ์๋ค.
- ์ฐ์ ์์ ์ค์ผ์ค๋ง์ ๋ฌธ์ ์
: starvation = ์ค๊ธด์ค๋๋ฐ, ์ธ์ ์ฌ์ง ๋ชจ๋ฆ
: ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๋ค์ด ๊ณ์ ๋ค์ด์ค๋ฉด ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ ์ธ์ ์ํ๋ ์ง ๋ชจ๋ฆ.
-> aging ๊ธฐ๋ฒ : ์ค๋ซ๋์ ์์คํ ์ ๋จ์์๋ ํ๋ก์ธ์ค์ ๋ํด ์ ์ง์ ์ผ๋ก ์ฐ์ ์์๋ฅผ ์ฌ๋ ค์ฃผ๋ ๊ธฐ๋ฒ
- ์ฐ์ ์์ ๋ฐ์ ํ์
: ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ํ๋ก์ธ์ค๊ฐ ๋ฎ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ํ๋ก์ธ์ค์ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ํ์
: real-time ์ธ ๊ฒฝ์ฐ ์ฃผ์ด์ง deadline์ ๋ง์ถ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
์ฐ์ ์์ ์์ (priority inheritance)
ex) client๊ฐ ์ฐ์ ์์๋ฅผ server์๊ฒ ๋๊ฒจ์ค๋ค.
์๋ถํ ์์คํ ์ด๋ค. (์ํํ๋ฅผ ready queue๋ก ์ฌ์ฉ)
FCFS์ ๋น์ทํ์ง๋ง preemptive scheduling ์ด๋ค.
ํ ํ์ ์ฌ๋ผ์ด์ค์ ํ ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ๋ค.
ํ๊ท ๋๊ธฐ ์๊ฐ์ด ๊ฝค ๊ธธ๋ค.
time slice์ size์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง๋ค
: infinite(too long) = FCFS์ ๋์ผํ๋ค
: too short = ์ค์์นญ์ด ๋๋ฌด ๋น ๋ฅด๊ฒ ์ผ์ด๋์ ํ ํ๋ก์ธ์ค๋ง ์คํํ๊ณ ์๋ค๊ณ ์ฐฉ๊ฐํจ. (process sharing effect)
/ time slice์ ํฌ๊ธฐ๊ฐ ์์์ง์๋ก context switchํ๋ ํ์๊ฐ ์ฆ๊ฐํด context switch์ ๋ํ overhead๊ฐ ์ปค์ ธ ์ฑ๋ฅ ์ ํ
: time slice > switching time ์ด์ด์ผ ํจ.
: time slice์ ํฌ๊ธฐ๊ฐ ์์์ง์๋ก ์ปค์ง๋ค.
: time slice ํ๋ฒ์ ํ๋ก์ธ์ค๊ฐ ๋ฐ๋ก ๋๋๋ฉด turnaround time์ด ๊ฐ์ ๋ ์ ์๋ค.
++ ๐๊ณ์ฐ!
ํ๋ก์ธ์ค๋ฅผ ๊ทธ๋ฃนํ ํด์ ๊ฐ๊ฐ์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง.
: ์ํ์์ ๊ฐ๋จํ ์
๋ฌด / ๋์ถ ์
๋ฌด๋ฅผ ๊ตฌ๋ถํด์ ๋ฐ๋ ๊ฒ๊ณผ ์ ์ฌํจ.
๊ฐ queue๋ค๋ ์ค์ผ์ค๋ง์ ํด์ฃผ์ด์ผํจ.
: ๊ฐ๊ฐ์ queue์ ์ ๋์ ์ฐ์ ์์๊ฐ ์กด์ฌํจ.
๊ฐ queue๋ ๋ ๋ฆฝ๋ scheduling ์ ์ฑ ์ ๊ฐ์ง๊ณ ์์.
scheduling overhead๊ฐ ๋ฎ์ ์ฅ์ ์ด ์์ง๋ง inflexibleํ๋ค.
: ํ ํ๋ก์ธ์ค๋ ๊ทธ๋ฃน์ ํ ๋น๋๋ฉด ๊ณ ์ ๋จ.
queue ๊ฐ์ ํ๋ก์ธ์ค ์ด๋์ ํ์ฉํ๋ค.
๋๋ฌด ์ค๋๊ฑธ๋ฆฌ๋ process๋ lower-priority queue๋ก ์ด๋์ํจ๋ค.
starvation ์ฐ๋ ค์ higher-priority queue๋ก ์ด๋์ํจ๋ค.
hard real-time
: ์๋ต์๊ฐ์ ๋ณด์ฅํด์ค์ผ ํจ.
: ์๊ฐ์์ ๋๋๋ฉด ์์ํ๊ณ , ๊ทธ๊ฒ ์๋๋ผ๋ฉด ์์์ ์ํจ
: ํน์ ๋ชฉ์ ์ ์ด์ฉ๋จ (๋ฌด๊ธฐ / ํต๋ฏธ์ฌ์ผ)
soft real-time
: hard real time ๋ณด๋ค๋ ๋ ์ ํ์ ์ด๋ค.
: atm ๊ธฐ๊ณ, ์คํธ๋ฆฌ๋ฐ์ ์ด์ฉ๋จ.
: ์ฐ์ ์์ ๊ธฐ๋ฐ ์ค์ผ์ค๋ง์ ์ด์ฉํจ