[OS] Operating System(5-3): Scheduling: Linux,Window
๐ ์ด์์ฒด์ ์ ๊ณต ์์ ์ ๋ฆฌ
Linux Scheduling Through Version 2.5
2.5 ์ด์ ์๋ ํ์ค UNIX ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ณํ์ ์ฌ์ฉ, 2.5๋ถํฐ๋ ์์ ์๊ฐ O(1) ์ค์ผ์ค๋ง ์๊ฐ์ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ํ
- O(1) scheduling time: ์์ ์๊ณ ๋ฆฌ์ฆ โ
ํน์ง:
- Preemptive, priority based
- ์ฐ์ ์์๊ฐ 2๊ฐ์ง๋ก ๋๋จ
1~99:
real-time class(๋ฎ์ ์ซ์ = ๋์ ์ฐ์ ์์ ์ฃผ์!)100~140
: conventional class- ์ ์ญ ์ฐ์ ์์ ๋งคํ
- ์ซ์๊ฐ ๋ฎ์์๋ก ๋์ ์ฐ์ ์์
- ์ฐ์ ์์๊ฐ ๋์์๋ก ๋ ํฐ ์๊ฐ ํ ๋น๋(quantum)์ ๋ฐ์
- ํ์คํฌ ์ํ ๊ด๋ฆฌ
- ์๊ฐ ํ ๋น๋์ด ๋จ์์์ผ๋ฉด ํ์คํฌ๋
active
(์คํ ๊ฐ๋ฅ) - ์๊ฐ ํ ๋น๋์ ๋ชจ๋ ์ฌ์ฉํ๋ฉด
expired
(๋ค๋ฅธ ํ์คํฌ๊ฐ ๋ชจ๋ ์๊ฐ ํ ๋น๋์ ์ฌ์ฉํ ๋๊น์ง ์คํ ๋ถ๊ฐ)- runqueue ๋ฐ์ดํฐ ๊ตฌ์กฐ
- ๊ฐ CPU๋ง๋ค ์กด์ฌํ๋ ์คํ ๊ฐ๋ฅํ ํ์คํฌ ์ถ์ ๊ตฌ์กฐ
- ๋ ๊ฐ์ ์ฐ์ ์์ ๋ฐฐ์ด (
active
,expired
) - ํ์คํฌ๋ ์ฐ์ ์์๋ก ์ธ๋ฑ์ฑ๋จ
- active ๋ฐฐ์ด์ด ๋น๋ฉด active์ expired ๋ฐฐ์ด์ ๊ต์ฒด
O(1) ์ค์ผ์ค๋ฌ๋ ํจ์จ์ ์ผ๋ก ์๋ํ์ง๋ง, ์ธํฐ๋ํฐ๋ธ ํ๋ก์ธ์ค์ ๋ํ ์๋ต ์๊ฐ์ด ์ข์ง ์์์
Linux Scheduling in Version 2.6.23+
์์ linux O(1) ์ค์ผ์ค๋ฌ ์ดํ 2.6.23๋ถํฐ๋ CFS๋ฅผ ๋์
๐Completely Fair Scheduler(CFS):
- CFS๋ ์ฐ์ ์์๋ฅผ ์ง์ ํ ๋นํ์ง ์๊ณ
virtual run time
์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์กฐ์ - runnable ํ์คํฌ ์ค์์
virtual run time
์ด ๊ฐ์ฅ ์์ ๊ฒ์ ๋จผ์ ์คํ - โ ๊ณ ์ ๋ ์๊ฐ ํ ๋น ๋์ CPU ์๊ฐ์ ๋น์จ์ ๊ธฐ๋ฐํ ์ค์ผ์ค๋ง
Sheduling Classes
๋ฆฌ๋
์ค ์ปค๋์์ ๋ค์ํ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋ ์ ์ํฌ ๊ธฐ๋ณธ์ ์ผ๋ก, Linux Scheduling์ Scheduling class
์ ์์กดํ์ฌ ์์ฉ
- ๊ฐ ํด๋์ค๋ ํน์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค
- ์ค์ผ์ค๋ฌ๋ ๊ฐ์ฅ ๋์ ์ค์ผ์ค๋ง ํด๋์ค์์ ๊ฐ์ฅ ๋์ ์ฐ์ ์์ ํ์คํฌ๋ฅผ ์ ํ
- ๊ธฐ๋ณธ์ ์ผ๋ก 2๊ฐ์ ํด๋์ค๊ฐ ํฌํจ๋๋ฉฐ ์ถ๊ฐ ํ์ฅ ๊ฐ๋ฅ:
Defalut(CFS)
real-time(RT)
virtual run time๊ณผ nice value๋??
- virtual run time: ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉํ ์๊ฐ์ ์ถ์ ํ๋ ๋งคํธ๋ฆญ โ ๋จ์ํ ๋ฌผ๋ฆฌ์ ์คํ์๊ฐ X, ์ฐ์ ์์(nice value)์ ๋ฐ๋ผ ๊ฐ์ค์น ์ ์ฉ๋ ์๊ฐ
- CFS๋ ๊ฐ ํ์คํฌ๋ณ๋ก virtual run time์
vruntime
๋ณ์์ ์ ์ฅ - ๊ฐ์ฅ ๋ฎ์
vruntime
๊ฐ์ ๊ฐ์ง ํ์คํฌ๋ฅผ ๋ค์์ ์คํํ ํ ์คํฌ๋ก ์ ํํจ - ํ์คํฌ๊ฐ ์คํ๋๋ฉด ์คํ ์๊ฐ์ ๋ฐ๋ผ
vruntime
์ด ์ฆ๊ฐ- ๋ง์ CPU ์๊ฐ์ ์ฌ์ฉํ ํ๋ก์ธ์ค๋ ์ฐ์ ์์๊ฐ ๋ฎ์์ง
- ์ ์ CPU ์๊ฐ์ ์ฌ์ฉํ ํ๋ก์ธ์ค๋ ์ฐ์ ์์๊ฐ ๋์์ง
- nice value: nice value๋ -20๋ถํฐ +19๊น์ง์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ค
- nice valueโ(-20) = ์ฐ์ ์์โ
- nice valueโ(+19) = ์ฐ์ ์์โ
๊ธฐ๋ณธ๊ฐ์ 0
- nice value๋ ๋์ ์ง์ฐ(target latency)๊ณ์ฐ์ ์ ์ฉ๋๋ค
- target latency: ๋ชจ๋ ์คํ ๊ฐ๋ฅํ task๊ฐ ์ ์ด๋ ํ ๋ฒ์ ์คํ๋์ด์ผ ํ๋ ์๊ฐ ๊ฐ๊ฒฉ(= ์๋ต ์๊ฐ)
- ํ์ฑ task ์๊ฐ ์ฆ๊ฐํ๋ฉด ๊ฐ task์
timeslice(=context switching)
์ด ์งง์์ง โ target latency ์ฆ๊ฐ
- nice value์ ๋ฐ๋ผ decay๊ณ์๊ฐ ๊ฒฐ์
- decay ๊ณ์: ์ค์ ์คํ ์๊ฐ์์ ๊ฐ์ ์คํ ์๊ฐ์ผ๋ก ๋ณํํ ๋ ์ ์ฉ๋๋ ๊ณ์
- ์ฐ์ ์์๊ฐ ๋ฎ์์๋ก(=๊ฐ์ด ํด์๋ก) decay ๊ณ์๊ฐ ๋์์ง๋ค
- nice = 0์ธ ๊ฒฝ์ฐ, ๊ฐ์ ์คํ ์๊ฐ = ์ค์ ์คํ ์๊ฐ
๋ฆฌ๋ ์ค๋ POSIX.1b ํ์ค์ ๋ฐ๋ผ ์ค์๊ฐ ์ค์ผ์ค๋ง์ ์ง์
- ์ค์๊ฐ ์์ ๊ณผ ์ผ๋ฐ ์์ ์ ๊ธ๋ก๋ฒ ์ฐ์ ์์ ์ฒด๊ณ๋ก ํตํฉ
nice value -20
: ๊ธ๋ก๋ฒ ์ฐ์ ์์ 100์ ๋งคํ (๊ฐ์ฅ ๋์ ์ผ๋ฐ ์ฐ์ ์์)nice value 0
: ๊ธ๋ก๋ฒ ์ฐ์ ์์ 120์ ๋งคํ (๊ธฐ๋ณธ ์ฐ์ ์์)nice value +19
: ๊ธ๋ก๋ฒ ์ฐ์ ์์ 139์ ๋งคํ (๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์)
- ๋ฆฌ๋
์ค๋ load balancing ๋ฟ๋ง ์๋๋ผ NUMA-aware๋ ์ง์ํจ
Scheduling Domain
- Scheduling Domain:
load balacing
์ด ๊ฐ๋ฅํ CPU ์ฝ์ด์ ์งํฉ - domain์ ๊ณต์ ํ๋ ์์(ex: ์บ์ ๋ฉ๋ชจ๋ฆฌ)์ ๋ฐ๋ผ ๊ตฌ์ฑ๋๋ค
- ๋ํ ์ค๋ ๋๊ฐ ๋๋ฉ์ธ ๊ฐ์ migration๋๋ ๊ฒ์ ๋ฐฉ์ง
์ค๋ ๋๊ฐ ๋ค๋ฅธ ๋ ธ๋๋ก migration๋๋ฉด ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ๋ฐ์!
- Cold Cache ๋ฌธ์ :
- ์ ๋ ธ๋์ ์บ์๋ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ํฌํจX โ ์บ์๋ฅผ ๋ค์ ์ฑ์ฐ๋๋ฐ ์๊ฐ ์์
- ์๊ฒฉ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ฆ๊ฐ:
- ์ค๋ ๋๊ฐ ์๋ ํ ๋น๋ ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ฉด ์๊ฒฉ ์ ๊ทผ ๋ฐ์
- โ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ง์ฐ ์๊ฐ์ด ์ฆ๊ฐํจ
์บ์ L1์ ๊ฐ CPU์ฝ์ด์ ์ ์ฉ์ผ๋ก ํ ๋น
L2๋ ์ฝ์ด๋ณ ๋๋ ์ฝ์ด ์๋ณ๋ก ํ ๋น
L3๋ NUMA ๋ ธ๋ ์ ์ฒด๊ฐ ๊ณต์
Window Scheduling
๐Window Scheduling: ์ฐ์ ์์ ๊ธฐ๋ฐ ์ ์ ์ค์ผ์ค๋ง
โ ์ค๋ ๋ ์คํ ์กฐ๊ฑด:
- ๋ธ๋ก(block) ์ํ๊ฐ ๋์์ ๋ (์: I/O ์์ ๋๊ธฐ)
- ํ ๋น๋ ์๊ฐ ํ ๋น๋(time slice)์ ๋ชจ๋ ์ฌ์ฉํ์ ๋
- ๋ ๋์ ์ฐ์ ์์์ ์ค๋ ๋์ ์ํด ์ ์ ๋์์ ๋
- ์ค๋ ๋๊ฐ ์ข ๋ฃ๋์์ ๋
- real-time ์ค๋ ๋๋
non-real-time(์ผ๋ฐ) ์ค๋ ๋๋ฅผ ์ ์
๊ฐ๋ฅ
์๋์ฐ๋ 32-level์ ์ฐ์ ์์ scheme
๊ฐ ์๋ค
Variable class
: 1-15real-time class
: 16-31- ์ฐ์ ์์ 0์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ค๋ ๋
์ซ์๊ฐ ํด์๋ก ์ฐ์ ์์๊ฐ ๋๋ค(๋ฆฌ๋ ์ค์ ์ฐจ์ด์ ์ฃผ์)
- ๊ฐ ์ฐ์ ์์๋ง๋ค ๋ณ๋์ Queue(=ready queue)๊ฐ ์กด์ฌ
- ์คํ ๊ฐ๋ฅํ ์ค๋ ๋๊ฐ ์์ผ๋ฉด
idle thread
๊ฐ ์คํ
Windows Priority Classes
window OS๋ ๋ ๋จ๊ณ์ ์ฐ์ ์์ ์ฒด๊ณ๋ฅผ ์ฌ์ฉ
- Priority Class: ํ๋ก์ธ์ค์ ํ ๋น๋๋ ์ฐ์ ์์
- Relative Priority: ๊ฐ์ Priority Class ๋ด์์ ์ค๋ ๋์ ํ ๋น๋๋ ์ฐ์ ์์
Priority Class
- REALTIME_PRIORITY_CLASS: ๊ฐ์ฅ ๋์ ์ฐ์ ์์
- HIGH_PRIORITY_CLASS
- ABOVE_NORMAL_PRIORITY_CLASS
- NORMAL_PRIORITY_CLASS: ์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ์ฐ์ ์์
- BELOW_NORMAL_PRIORITY_CLASS
- IDLE_PRIORITY_CLASS: ์์คํ ์ด Idle ์ํ์ผ ๋๋ง ์คํ๋๋ ๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์
- Real-time์ ์ ์ธํ ๋ชจ๋ Priority Class๋ ๊ฐ๋ณ์ โ ์์คํ ์ด ํ์์ ๋ฐ๋ผ ์ฐ์ ์์ ์กฐ์ ๊ฐ๋ฅ
Relative Priority
- TIME_CRITICAL: ๊ฐ์ ํด๋์ค ๋ด์์ ๊ฐ์ฅ ๋์ ์ฐ์ ์์
- HIGHEST
- ABOVE_NORMAL
- NORMAL: ๊ธฐ๋ณธ ์ฐ์ ์์
- BELOW_NORMAL
- LOWEST
- IDLE: ๊ฐ์ ํด๋์ค ๋ด์์ ๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์
โ ์๋์ฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ฐ์ ์์๋ฅผ ๋์ ์ผ๋ก ์กฐ์ :
- quantum ๋ง๋ฃ: ์ฐ์ ์์ ํ๋ฝ, ๊ธฐ๋ณธ ์ฐ์ ์์๋ณด๋ค ๋ฎ์์ง์ง๋ ์์
- ๋๊ธฐ ์ํ ๋ฐ์: ์ค๋ ๋๊ฐ ์๋ฌด๊ฒ๋ ์ํ๊ณ ์์ผ๋ฉด ์ฐ์ ์์ ์์น(Variable class์ ์ํ task๋ง ํด๋น,
ํค๋ณด๋I/O>๋์คํฌI/O
) - Foreground window: ์ฌ์ฉ์๊ฐ ํ์ฌ ํ์ฑํํ ์ฐฝ์ 3๋ฐฐ์ ์ฐ์ ์์ ๋ถ์คํธ๋ฅผ ๋ฐ์
Varialbep priority ์ค๋ ๋
๊ฐ I/O ์์ ์ ๊ธฐ๋ค๋ฆฌ๋ฉด ๋์คํจ์ฒ๊ฐ ์ฐ์ ์์๋ฅผ ์์น โ I/O-bound ์ค๋ ๋๊ฐ CPU-bound ์ค๋ ๋๋ณด๋ค ์ฐ์ ์๋จ์ ์๋ฏธ
UMS(User-Mode Scheduling)
Window 7๋ถํฐ๋ User-Mode Scheduling(UMS)
์ด ์ถ๊ฐ๋จ
โ UMS ํน์ง:
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ปค๋๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ
- ๋๋์ ์ค๋ ๋๋ฅผ ์ฒ๋ฆฌํ ๋ ํจ์ฌ ํจ์จ์
- UMS ์ค์ผ์ค๋ฌ๋
C++ Concurrent Runtime(ConcRT)
ํ๋ ์์ํฌ์ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณต
Algorithm Evaluation
์ด์์ฒด์ ์์ CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ๊ฒ์ ์์คํ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ ์ค์ํ ๊ฒฐ์ ์ด๋ค
โ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ ์ ํ ๊ณผ์ :
- ํ๊ฐ ๊ธฐ์ค ์ค์
- ์๊ณ ๋ฆฌ์ฆ ํ๊ฐ
- ์ต์ ์๊ณ ๋ฆฌ์ฆ ์ ํ
โ CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ ํ๊ฐ ๋ฐฉ๋ฒ:
Deterministic modeling
Queueing models
Simulations
Implementation
Deterministic modeling
๐Deterministic modeling: ๋ถ์์ ํ๊ฐ(analytic evaluation) ์ ํ
- ํน์ ํ ๋ฏธ๋ฆฌ ์ ์๋ ์ํฌ๋ก๋์ ๋ํด ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์ ํํ ๊ณ์ฐ
- ๊ฐ๋จํ๊ณ ๋น ๋ฅธ ํ๊ฐ ๋ฐฉ๋ฒ
- ์ ํํ ์ ๋ ฅ๊ฐ์ด ํ์ํ๋ฉฐ, ํด๋น ์ ๋ ฅ์๋ง ์ ์ฉ ๊ฐ๋ฅ
- ์ฃผ๋ก ํ๊ท ๋๊ธฐ ์๊ฐ๊ณผ ๊ฐ์ ์ฑ๋ฅ ์งํ๋ฅผ ๊ณ์ฐ
- FCFS-
average waiting time
= 28ms- Non-preemptive SJF-
average waiting time
= 13ms- RR-
average waiting time
=23ms
โํน์ ์ํฌ๋ก๋์ ๋ํด์๋ง ์ฑ๋ฅ์ ํ๊ฐํด์ ๋ค์ํ ์กฐ๊ฑด์์์ ์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ์ ์ผ๋ฐํํ๊ธฐ ์ด๋ ค์
Queueing Models
๐Queueing Models: ํ๋ก์ธ์ค์ ๋์ฐฉ๊ณผ CPU ๋ฐ I/O ๋ฒ์คํธ๋ฅผ ํ๋ฅ ์ ์ผ๋ก ํํํ๋ ๋ฐฉ๋ฒ
โ ํน์ง:
- ์ง์ ๋ถํฌ(exponential distribution)๋ฅผ ์ฌ์ฉํ๊ณ ํ๊ท ๊ฐ(mean)์ผ๋ก ํํ
- ์ฒ๋ฆฌ๋, ์์ ํ์ฉ๋ฅ , ๋๊ธฐ ์๊ฐ ๋ฑ์ ์ฑ๋ฅ ์งํ ๊ณ์ฐ
Littleโs Formula
๐Littleโs law: โ$n = ฮป * W$โ = ์์ ์ํ์์ ์์คํ ๋ด์ ํ๊ท ํ๋ก์ธ์ค ์(n)๋ ๋์ฐฉ๋ฅ (ฮป)๊ณผ ํ๊ท ๋๊ธฐ ์๊ฐ(W)์ ๊ณฑ๊ณผ ๊ฐ์
- $n$ = queue length์ ํ๊ท (jobs)
- $W$ = queue์์์ ํ๊ท wating time(sec)
- $ฮป$(๋์ฐฉ๋ฅ ) = queue์ ๋์ฐฉํ๋ ํ๊ท ๋(jobs/sec)
ex: ์ด๋น 7๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋์ฐฉ, queue์ 14๊ฐ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ํ๊ท wait time์??
n = 14, ฮป = 7 โ $W = n/ฮป = 2(sec)$
โ์ค์ ์์คํ ์ ๋ณต์ก์ฑ์ ์์ ํ ๋ฐ์X
Simulations
Queue model๋ณด๋ค Simulations
์ด ๋ ์ ํํจ
- ์ปดํจํฐ ์์คํ ์ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ฌ์ฉ
- ์๊ฐ์ ๋ณ์๋ก ์ทจ๊ธ โ ์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ ํต๊ณ ์์ง
โ simulation data ์์ง ๋ฐฉ๋ฒ:
- Random number generator
- ํ๋ฅ ์ ๋ฐ๋ผ ์ด๋ฒคํธ ์์ฑ
- Distributions of mathematically(์ํ์ )/empirically(๊ฒฝํ์ )
- ์ํ ๊ณต์์ผ๋ก ์ ์๋ ๋ถํฌ
- ์ค์ ์์คํ ์ ๊ด์ฐฐํด ์ป์ ๊ฒฝํ์ ๋ฐ์ดํฐ
- Trace tapes
- ์ค์ ์์คํ ์์ ๋ฐ์ํ ์ด๋ฒคํธ ๊ธฐ๋ก
- ํธ๋ ์ด์ค ํ ์ดํ๋ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์
- ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ(FCFS, SJF, RR ๋ฑ)์ ๋ํด ๋์ผํ ์ ๋ ฅ์ผ๋ก ์๋ฎฌ๋ ์ด์ ์คํ
- ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ ํต๊ณ(CPU ์ฌ์ฉ๋ฅ , ๋๊ธฐ ์๊ฐ, ์๋ต ์๊ฐ, ์ฒ๋ฆฌ๋ ๋ฑ) ์์ง
- ๊ฒฐ๊ณผ ๋น๊ต๋ฅผ ํตํด ํน์ ์ํฌ๋ก๋์ ๊ฐ์ฅ ์ ํฉํ ์๊ณ ๋ฆฌ์ฆ ์ ์
Implemenation
Simulation์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์ถฉ๋ถํ ํ๊ฐํด๋ ์ค์ ์์คํ ์์ ๋์์ ๋ค๋ฅผ ์ ์๋ค Implemenation: ์ต์ข ์ ์ผ๋ก ์ค์ ๋ก ๊ตฌํํ๊ณ ํ ์คํธํด๋ด์ผ ํจ
- ๊ฐ์ฅ ์ ํํ ์ฑ๋ฅ ํ๊ฐ ๋ฐฉ๋ฒ
- ๋์ ๋น์ฉ๊ณผ ์ํ์ด ์๋ฐ๋จ
- ์ค์ ํ๊ฒฝ์ ๋ชจ๋ ๋ณ์๋ฅผ ๊ณ ๋ คํ ์ ์์