[OS] Operating System(5-2): Real-time Scheduling
๐ ์ด์์ฒด์ ์ ๊ณต ์์ ์ ๋ฆฌ
NUMA and CPU Scheduling
๐NUMA(Non-Uniform Memory Access): ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๊ฐ์ด ๊ท ์ผํ์ง ์์ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ์ค๊ณ
- ๊ฐ CPU๊ฐ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์์ด ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
- ์๊ฒฉ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ๋๋ ์๋์ ์ผ๋ก ๋๋ฆฐ ์ ๊ทผ ์๋
๐NUMA-aware OS:
- ๋ฉ๋ชจ๋ฆฌ ๊ทผ์ ์ฑ ์ต์ ํ: ์ค๋ ๋๊ฐ ์คํ ์ค์ธ CPU์ ๊ฐ๊น์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น
- ์ค๋ ๋ ๋ฐฐ์น ์ต์ ํ: ๊ด๋ จ ์ค๋ ๋๋ค์ ๊ฐ์ NUMA ๋ ธ๋์ ๋ฐฐ์นํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ํจ์จ์ฑ์ ๋์
- ๋ฉ๋ชจ๋ฆฌ ์ด๋ ์ต์ํ: ๊ฐ๋ฅํ ํ ์ค๋ ๋๋ฅผ ์ด๋์ํค์ง ์๊ณ ๋์ผํ ๋ ธ๋ ๋ด์์ ์คํํ๋๋ก ์ ์ง
โ
NUMA ์์คํ
์์๋ load balancing๊ณผ memory access time ์ฌ์ด์ ๊ท ํ์ด ์ค์ํ๋ค
โ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ต์ ํํ๋ฉด ์ค๋ ๋๊ฐ ์ฌ๋ฌ ๋
ธ๋๋ก ๋ถ์ฐ๋์ด ์๊ฒฉ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ์ฆ๊ฐํ ์ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๊ฐ์ ์ต์ ํํ๋ฉด ํน์ ๋
ธ๋์ ์์
์ด ์ง์ค๋ ์ ์๋ค.
Real-time CPU Scheduling
์ผ๋ฐ ์ค์ผ์ค๋ง๊ณผ ์ฐจ์ด์ ์กด์ฌ
์ ํด์ง ์๊ฐ(Real-time) ์์ ์์ ์ด ๋๋์ผํจ ๋ฐ๋์ ๋น ๋ฅผ ํ์๋ ์๊ณ , ์ ํด์ง ์๊ฐ์์๋ง ๋๋๋ฉด ๋๋ ์ค์ผ์ค๋ง
- soft real-time system: ํ์ ๋ฐ์ด๋์์ ๋๋ด๋ ค๊ณ ๋
ธ๋ ฅ์ ํ๋ ์์คํ
(no guarantee)
- ์ค์ํ real-time task์ ์ต๊ณ ์ฐ์ ์์ ๋ถ์ฌ
- hard real-time system: ํ์ ๋ฐ์ด๋์์ ๋ฌด์กฐ๊ฑด ๋๋ด์ผํ๋ ์์คํ
โ ๋๋ ์ด๊ฐ ์กด์ฌ(Event latency)
์ด๋ค ์ฌ๊ฑด(interrupt)์ด ๋ฐ์ ํ์ ๋ ์ด๋ฅผ ์ธ์งํ๊ณ ์๋น์ค๋ฅผ ์์ํ๊ธฐ ๊น์ง ์ง์ฐ ์๊ฐ ๋ฐ์
Event latency =
interrupt latency
+dispatch latency
โ ์ง์ฐ ์๊ฐ์ ๋ ๊ฐ์ง ์ ํ:
- interrupt latency: ์ธํฐ๋ฝํธ ๋ฐ์ ์์ ๋ถํฐ ํด๋น ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฃจํด(ISR)์ด ์์๋ ๋๊น์ง์ ์๊ฐ
- ์ธํฐ๋ฝํธ ๋ฐ์ โ ์ธํฐ๋ฝํธ ํ์ ๊ฒฐ์ โ ์ปจํ ์คํธ ์ค์์น โ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด ์คํ
- dispatch latency: ํ์ฌ ์งํ ์ค์ธ CPU๋ฅผ ๋ค๋ฅธ ์์
์ผ๋ก ๊ต์ฒดํ ๋ ์ง์ฐ ๋ฐ์
hard real-time system
์์ ์ผ๋ฐ์ ์ผ๋ก ์ usec
interrupt latency
context switch
: ํ์ฌ ์ํ๋ก ๋ค์ ๋์๊ฐ๊ธฐ ์ํ ์ค๋ ์ค๋ฅผ ์ฐ๊ธฐ ์ํจ
Dispatch latency
์์ ์ด ์๋ณ์ด ๋ ํ ์์ ์ ์คํํ๊ธฐ ๊น์ง ์ง์ฐ์๊ฐ Dispatch latency:
conflicts
(Preemption+Release
) +dispatch
- conflict phase:
Preemption
: ํ์ฌ ์งํ ์ค์ธ ์์ ์ด CPU๋ฅผ ๋บ๊ธฐ๋ ํ์Release
: ํ์ฌ ์์ ์ด ์ด๋ค resource๋ฅผ ์ก๊ณ ์์ผ๋ฉด ๋๊ฒํ๋ ํ์
Priority-based Scheduling
- real-time scheduling์ ์ ์ ํ + ์ฐ์ ์์ ๊ธฐ๋ฐ ์ค์ผ์ค๋ง์ด๋ค. ์ํํธ ์ค์๊ฐ๋ง ๋ณด์ฅํ๋ ๊ฒฝ์ฐ์๋ ์ด๊ฒ์ผ๋ก ์ถฉ๋ถํ์ง๋ง, ํ๋ ์ค์๊ฐ ์์คํ ์์๋ ์ด์ ๋ํด ๋ฐ๋๋ผ์ธ์ ์ถฉ์กฑ์ํค๋ ๋ฅ๋ ฅ์ด ํ์
Periodic Process
๐Periodic Process: ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก CPU๋ฅผ ํ์๋ก ํ๋ ํ๋ก์ธ์ค
t
: processing time,d
: deadline,p
: period
0 โค t โค d โค p
periodic task์ ๋น๋(rate)๋1/p
Admission-control algorithm
- ํ๋ก์ธ์ค๊ฐ ์ค์ผ์ค๋ฌ์๊ฒdeadline
์ ์์ฒญํ์ ๋:- ๋ฐ์๋ค์ฌ์ ์ฃผ์ด์ง ์๊ฐ ๋ด์ ์ข ๋ฃ๋ฅผ ๋ณด์ฅ
- ๋๋ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ฑฐ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ
์ฃผ์ real-time scheduling ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์์๋ณด์.
Rate Monotonic Scheduling
๐Rate Monotonic Scheduling: ์ฃผ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ ์์๋ฅผ ํ ๋นํ๋ ์ ์ ์ฐ์ ์์ ์ค์ผ์ค๋ง
= static priority policy
+ preemption
- ์ฃผ๊ธฐ๊ฐ ๊ธธ์๋ก priority๊ฐ ๋ฎ์
- ์ฃผ๊ธฐโ = ์ฐ์ ์์ โ
์ฃผ๊ธฐโ = ์ฐ์ ์์ โ
- ๊ฐ์ : periodic process์ processing time, ์ฆ, CPU burst๋ ํญ์ ๊ฐ๋ค
P1
: p1=50, t1=20, d1=50
P2
: p2=100, t2=35, d1=100
P1
์ ์ฃผ๊ธฐ๊ฐ 50์ด๋ฏ๋ก 50๋จ์๋ก ๋ฐ์๋จP1
์ ์ฃผ๊ธฐ๊ฐP2
๋ณด๋ค ์งง์ผ๋ฏ๋กP1
์ด ๋จผ์ ์คํ,P2
๊ฐ 30๋ฐ์ ์คํํ์ง ๋ชปํ์ง๋งP1
์ด ๋ค์ด์์ ์๋ณดํด์ค
- CPU ํ์ฉ๋ ๊ณ์ฐ:
- ๊ฐ ํ๋ก์ธ์ค์ CPU ํ์ฉ๋ =
t/p
- ์ ์ฒด CPU ํ์ฉ๋ =
ฮฃ(t/p)
- ์ ์์ : 20/50 + 35/100 = 0.4 + 0.35 = 0.75 = 75%
- โ ์ค์ผ์ค๋ง ๊ฐ๋ฅ!
- ๊ฐ ํ๋ก์ธ์ค์ CPU ํ์ฉ๋ =
๊ทธ๋ผ deadline์ ์งํค์ง ๋ชปํ ๊ฒฝ์ฐ์ ์ด๋ป๊ฒ ๋๋๊ฐ?
- CPU utilization: 25/30 + 35/80 = 94%
- 100%๋ฅผ ๋์ง ์๋๋ฐ ์ ์ค์ผ์ค๋ง์ด ๋ถ๊ฐํ๊ฐ?
โ Rate-monotonic scheduling ์๊ณ ๋ฆฌ์ฆ์ N๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ค์ผ์ค๋งํ ๋ CPU Utilization์ ๋ค์ ์์ ๋์ ์ ์๋ค
- $N(2^(1/N)-1)$
- N=1, Max Utilization = 1(100%)
- N=2, Max Utilization = 0.83 (83%)
- N=infinte, Max Utilization = 0.69 โ N์ด ๋ฌด์ํ ๋ง๋ค๋ฉด 69%์ ๊ทผ์ ํ๋ค.
- ์ฆ ์์ ์์ ์์๋ 0.83์ ๋์ด์ ์ค์ผ์ค๋ง์ด ๋ถ๊ฐ
Earliest Deadline First Scheduling (EDF)
deadline์ด ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ์งํ
deadline
์ด ๊ฐ๊น์ธ์๋ก ์ฐ์ ์์๊ฐ ๋์deadline
์ด ๋ฉ์๋ก ์ฐ์ ์์๊ฐ ๋ฎ์
โ ํน์ง:
EDF
๋ process๊ฐ periodic์ผ ํ์๊ฐ ์์ผ๋ฉฐ CPU burst๊ฐ ์ผ์ ํ ํ์๋ ์๋ค.- ๋ค๋ง ์ค์ผ์ค๋ฌ์๊ฒ
deadline
์ ๋ฏธ๋ฆฌ ์๋ ค์ค ์ ์์ผ๋ฉด ๋๋ค
P1
: p1=50, t1=25, d1=50
P2
: p2=80, t2=35, d1=80
- EDF๋ ์ด๋ก ์ ์ผ๋ก๋
optimal
์๊ณ ๋ฆฌ์ฆ โ CPU utilization์ 100%๊น์ง ๊ฐ๋ฅ- ๊ทธ๋ฌ๋ ํ์ค์์๋
context switching
๋ฑ ์ถ๊ฐ ๋น์ฉ์ผ๋ก ์ธํด 100%๋ฅผ ์ฑ์ทจํ ์ ์๋ค
Proportional Share Scheduling
๐Proportional Share Scheduling: CPU ์๊ฐ์ ๊ฐ ํ๋ก์ธ์ค์ ๊ณต์ ํ๊ฒ ๋ถ๋ฐฐํ๋ ๋ฐฉ์
โ ํน์ง:
- ์์คํ
์๋
T shares(total share)
๊ฐ ํ ๋น๋จ - ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ N๊ฐ์ ๊ณต์
(N < T)
๋ฅผ ๋ฐ์ ์ด๋ฅผ ํตํด ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์
N/T
๋น์จ๋งํผ์ ํ๋ก์ธ์ ์๊ฐ์ ๋ณด์ฅ- ์์:
- T = 100shares
- Process A: 50shares
- Process B: 15shares
- Process C: 20shares
- โ CPU Utilization = 85%
- ๋ง์ฝ D๊ฐ 30shares๋ฅผ ์์ฒญํ๋ฉด ๊ฑฐ๋ถ๋จ
- ์ด๋ฏธ ํ ๋น๋ ๊ณต์ (85๊ฐ)์ ํฉ์ณ์ 100๊ฐ๋ฅผ ์ด๊ณผํ๋ฏ๋ก
admission controller
๊ฐ D์ ์์ฒญ์ ๊ฑฐ๋ถ
POSIX Real-Time Scheduling
๐POSIX: ๋ค์ํ ์ด์์ฒด์ ์์ ํธํ์ฑ์ ์ ๊ณตํ๋ ํ์ค
SCHED_FIFO
:- FCFS ์ ๋ต์ผ๋ก ์ค๋ ๋ ์ค์ผ์ค๋ง
- ๋์ผํ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์ค๋ ๋ ๊ฐ์๋ ์๊ฐ ๋ถํ (time-slicing)์ด ์์
- ์ฐ์ ์์๊ฐ ๋์ ์ค๋ ๋๊ฐ ๋ฎ์ ์ค๋ ๋๋ฅผ ์ ์ ํ ์ ์์
SCHED_RR
:- ๋์ผํ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์ค๋ ๋ ๊ฐ์ ์๊ฐ ๋ถํ ์ด ๋ฐ์
- RR ๋ฐฉ์์ผ๋ก ๋์ผ, ์ฐ์ ์์ ์ค๋ ๋ ๊ฐ CPU ์๊ฐ ๋ถ๋ฐฐ
1
2
3
4
5
6
7
// ์ค๋ ๋ ์์ฑ์์ ํ์ฌ ์ค์ผ์ค๋ง ์ ์ฑ
์ ๊ฐ์ ธ์ด
pthread_attr_getsched_policy(pthread_attr_t *attr, int *policy)
// ์ค๋ ๋ ์์ฑ์ ์ค์ผ์ค๋ง ์ ์ฑ
(policy)์ ์ค์
// ์ ์ฑ
์ผ๋ก๋ SCHED_FIFO, SCHED_RR, SCHED_OTHER ์ค ํ๋๋ฅผ ์ฌ์ฉ
// SCHED_OTHER: ๋น์ค์๊ฐ ์์คํ
์ ๋ฐ๋ผ ๋ค๋ฆ
pthread_attr_setsched_policy(pthread_attr_t *attr, int policy)