Thread Scheduling
Kernel Thread๊ฐ Scheduling์ ๋จ์๊ฐ ๋๋ค. PCB์ ๋ฉ๋ฌ๋ ค ์๋ LWP๊ฐ ์๋ค. LWP์ Thread๋ One to one correspondence๊ฐ ์๋ค. ํ๋์ ํ๋ก์ธ์ค๊ฐ ์๊ณ ์ฌ๋ฌ ๊ฐ์ Kernel์ ํด๋นํ๋ LWP๊ฐ ์กด์ฌํ๋ค. ์ค์ ์ค์ผ์ค๋ง์ LWP ๋จ์๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
Contention Scope
PCS์ SCS๊ฐ ์๋ค. Scheduling์ kernel์์ ์ด๋ฃจ์ด์ง๊ณ (CPU๋ฅผ Kernel Thread๋ก ๋๋ ์ฃผ๋ ๊ฒ) ์ด๋ ๊ฒฝ์์ด ๋ฐ์ํ๋๋ฐ ์ด๋๋ฅผ SCS๋ผ๊ณ ํ๋ค. ๋ ๋ฒ์งธ๋ก Process ์์์์ ๊ฒฝ์์ด๋ค. User Process ์์์์ ๊ฒฝ์์ด PCS๋ผ๊ณ ํ๋ค.
Pthread Scheduling
pthread_attr_init์ผ๋ก default setting์ ํ๋ค. getscope๋ฅผ ํ๋ฉด attr์ ์ ๋ณด๋ฅผ ๊บผ๋ด์ scope๋ก ๊ฐ์ ธ๋ค ์ฃผ๊ฒ ๋๋ค. scope์ ๊ฐ์ ๋ ๊ฐ์ง Constant์ ๊ฐ์ ๊ฐ์ง๋ค. PTHREAD SCOPE SYSTEM์ user level์ scheduling์ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค. attr ๊ฐ์๋ค๊ฐ SCOPE๊ฐ์ ์ง์ด๋ฃ๊ฒ ๋๋ค. create๋ฅผ ํ๋ฉด attr๋๋ก tid๋ฅผ ๋ง๋๋ ค๊ณ ๋ ธ๋ ฅ์ ํ๋ค. one to one model์ user level thread library๊ฐ ์๋ค. ์์ ์ Thread ๋ชจ๋ธ์ด ์ง์์ ํ๋ฉด ๋ง๋ค ์ ์๊ฒ ๋๊ณ ์ง์ํ ์ ์๋ค๋ฉด ๋ฌด์ํ๊ฒ ๋๋ค. setscope๋ ์ง์ํ๋ ๊ฒ์ ๋ฃ์์ ๋ ์ ์ฉ์ด ๋๋ค.
JUMP
Operating System Example
Linux Scheduler
kernel version์ด 2.5์๋์๋ค. SMP๋ฅผ ์ ์ง์ํ์ง ๋ชปํ๋ค. ์ดํ์ ๋์จ Big Oh (1)์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง๋ ๊ฒ์ด ๋ฑ์ฅํ๋ค. Scheduler๊ฐ Constant Time์ผ๋ก ๋์๊ฐ๋ ์ค์ผ์ค๋ง์ ์ง์ํด์คฌ๋ค. 2.6 ๋ฒ์ ๋ถํฐ CFS๋ผ๋ ์ด๋ฆ์ ๊ฐ๊ฒ ๋์๋ค.
Linux Scheduler
Real-time scheduling์ ์ ์ผ ์ฐ์ ์์๊ฐ ๋์ ๊ฒ๋ค์ด๋ค. Real time์ 0์์ 99๊น์ง์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ฐ์ ์์๊ฐ ์๊ธฐ๋ณด๋ค ๋ฎ์ ์น๊ตฌ๋ ๋จผ์ ๋ค์ด๊ฐ๋ค. SCHED_FIFO ์๊ธฐ๋ณด๋ค ์ฐ์ ์์ ๋ฎ์ ๋ ์์ด ๋๊ณ ์์ผ๋ฉด ์๊ธฐ๊บผ๋ฅผ ๋๋ฆด ์ ์๋ค. Nonpreemtive์ด๊ณ ๋๋ Preemtive์ธ๋ฐ ์๋๋ฐฉ์ ๋ํํ Nonpreemtiveํ๋ค๋ ๊ฒ์ด๋ค. SCHED_RR(Round Robin์ ์ต๋ ์๊ฐ์ ์ ํ์ด ์๊ฒ ๋๋ค) ์ผ์ ์๊ฐ ์ดํ์๋ ์๋ณดํ๊ฒ ๋์ด์๋ค. Preemtiveํ ์ ์๋ค๋ ๊ด์ ์์ FIFO์ RR์ ๊ณตํต์ ์ ๋ค ์ ์๋ค.
Linux CFS Scheduler
task๋ง๋ค nice value๋ผ๋ ๊ฒ์ ๊ฐ์ง๊ณ ์๋ค. nice value๋ ์ผ์ข ์ ์๋์ ์ธ ๊ฐ์ด๋ค. User๊ฐ ์ง์ ์ง์ ํ ์๋ ์๋ค. External Priority์ Internal Priority๊ฐ ์๋ค๊ณ ํ์๋ค. ์ด๋ Expernal Priority์ด๋ค. Nice๋ฅผ ๋์ด๋ฉด ์๋์ ์ธ ์ฐ์ ์์๋ฅผ ๋ฎ์ถ ์ ์๊ณ Nice ๊ฐ์ ์ค์ด๋ฉด ์๋์ ์ธ ์ฐ์ ์์๋ฅผ ๋์ผ ์ ์๋ค.
Target latency ์ ์ฝ ์กฐ๊ฑด์ผ๋ก ๋ง๋ค์๊ธฐ ๋๋ฌธ์ Completely๋ผ๊ณ ํํ์ ํ๋ค. min ๊ฐ๋ ๊ฐ์ง๊ณ ์๋ค. ํ์ฌ task๊ฐ ๋ง์์ง๋ฉด target latency๊ฐ ์ฆ๊ฐํ ์ ๋ฐ์ ์๋ค. ์ด ๊ฐ์ ์ฒ์์ ์ฃผ์ด์ง์ง๋ง task์ ๊ฐ์์ ๋ฐ๋ผ ๋ณํ ์ ์๋ค.
Linux CFS Scheduler
vruntime value๋ ๋ ๊ฐ์ง ๊ฐ์ ๊ณฑ์ผ๋ก ๊ฒฐ์ ๋๋ค. Physical runtime์ decay factor ๊ฐ์ ๊ณฑํด์ ์ฌ์ฉํ๋ค. Normal priority๋ ๊ณฑํ๋ ๋ง๋ค ํ 1์ ๊ฐ์ ๊ฐ๊ฒ ๋๋ค. ์ฐ์ ์์๊ฐ ๋์ ๊ฐ๋ค์ Decay factor๋ฅผ ์ค์ด๊ฒ ๋๋ค. schedulingํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค.
Linux CFS Scheduler
IO Bound process๋ IO์ชฝ์ผ๋ก ๊ฐ๋ฏ๋ก ์์ฐ์ค๋ฝ๊ฒ ์ฐ์ ์์๊ฐ ์ฌ๋ผ๊ฐ๋ค.
CPU Bound Process๋ vruntime ๊ฐ์ด ํฐ ๊ฒ์ด ๋๋ค. vruntime์ด ์์ ๊ฒ๋ถํฐ ํํ๋ฏ๋ก ์ฐ์ ์์๊ฐ ๋ฎ๊ฒ ๋๋ค.
Windows Scheduling
Dispatcher๊ฐ ํ๋ค๊ณ ์๊ธฐ๋ฅผ ํ๋ค. ์๋์ฐ๋ ์ซ์๊ฐ ๋์ ๊ฒ์ ์ฐ์ ์์๊ฐ ๋์ ์ฒด์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
Priority class๋ฅผ ์ฌ๋ฌ ๊ฐ ๊ฐ์ง๊ณ ์๋ค. IDLE Process๋ ๋๊ณ ์๋ CPU์๊ฒ ๋น Process๋ฅผ ๋ง๋ค์ด์ ์ค ๊ฒ์ด๋ค. ๋์ผํ ํด๋์ค์์๋ Prioriry๊ฐ ์กด์ฌํ๋๋ฐ ์ด๋ฅผ relative priority๋ผ๊ณ ๋ถ๋ฅธ๋ค. real time์ด ๋ค์ด๊ฐ๋ค๊ณ ํ๋ฉด ์ผ๋จ ๋๋ค...
Windows Scheduling
setPriorityClass(), setThreadPriority()
IO bound process์ ์ฐ์ ์์๋ฅผ ๋์ด๊ณ CPU Bound Process์ ์ฐ์ ์์๋ฅผ ๋ฎ์ถ๋ค. quantum์ ์ ์ฒด ๋ค ์ผ๋ค ํ๋ฉด CPU Bound Process์ด๋ฏ๋ก ์ฐ์ ์์๋ฅผ ๋ฎ์ถ๋ค. wait process๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ฉด IO Bound Process์ด๋ฏ๋ก ์ฐ์ ์์๋ฅผ ๋์ธ๋ค. time quantum์ ๊ธธ์ด๋ฅผ 3๋ฐฐ ์ ๋ ๋๋ฆฌ๊ฒ ๋๋ค.
Background
๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ผ๋ฉด ~~ ์ด ๊ทธ๋ฆผ์์ Buffer๊ฐ shared memory๊ฐ ๋๋ค. Producer์ Consumer๊ฐ Process์ด๋ฉด Buffer๊ฐ shared memory์ฌ์ผ ํ๋ค. ํ์ง๋ง Thread์ธ ๊ฒฝ์ฐ Global ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
Concurrent Access of Shared Data
์ ์ญ ๋ณ์ count๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋นผ๊ณ ๋ฅผ ๊ณ์ฐํ ์ ์๋ค. count๋ ์ ์ญ ๋ณ์์ ์๊ณ ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ฐ๋ก ์ฆ๊ฐํ ์ ์์ผ๋ฏ๋ก ๋์ง์คํฐ๋ก ๊ฐ์ ธ๋ค ๋ฃ๊ณ ์ฆ๊ฐ์ ํด์ผ ํ๋ค.
Synchronization Problem
์์ count ์ ๊ฐ์ด 5๋ผ๊ณ ํ์. ๋ถ๋ช ํ ์๋ชป ์ ์ฅ๋ ์ ์์์ ์ ์ ์๋ค.
Process Synchronization
race condition
์ผ์ข ์ ๋ฒ๊ทธ. ๊ทธ๊ฒ์ ๋ง๋ ๊ฒ์ Synchronize๋ผ๊ณ ํ๋ค. ๊ณต์ ๋๊ณ ์๋ ์์์ด ์์ ๋ ์ฝ์์ ์ํด์ ์ฌ์ฉํ์๋ ๊ฒ์ด๋ค.
Critical Section
shared data์ accessํ๋ Process์ Interaction์ด ์๋ค. ๋๋จธ์ง ์์ญ์ Remainder Sectioin์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋จ์ Process์ ์ถฉ๋์ด ์ผ์ด๋ ์ ์๋ ๋ถ๋ถ์ critical section์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. Remainder section์์ ๋ฒ๊ทธ๊ฐ ์์ ์ ์๋ค. ํ์ง๋ง Sync ๊ด๋ จ๋ ๋ฒ๊ทธ๋ ๋ฐ์ํ์ง ์๋๋ค.
Critical section, ์ฃผ์ฐจ ๊ณต๊ฐ. ์ฐจ๊ฐ ์๋์ง ์๋ ์ง๋ฅผ ๋จผ์ ํ์ธํด์ผ ํ๋ค. ๋ง์ฝ ๋๊ฐ ์๋ค๊ณ ํ๋ฉด ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค๊ณ ํ๋ฉด ๋ด๊ฐ ๋ค์ด๊ฐ๋ฉด ๋๋ค. ๋ค์ด๊ฐ๋ฉด ๋จ์ด ๋ค์ด์ค์ง ๋ชปํ๋๋ก ํ๋ค. Entry Section์ด ๋๊ฐ ์๋์ง๋ฅผ ํ์ธํ๋ ๋ถ๋ถ์ด๊ณ Exit Section์ ๋ด๊ฐ ์๋ค๊ฐ ๋์ค๋ ์ํฉ์ด๊ณ ํด๋น ๊ณต๊ฐ์ ๋จ์ด ๋ค์ด๊ฐ ์ ์๋๋ก ์ด์ด ๋๋ ์ญํ ์ ํ๋ค.
Critical Section
๋๊ฐ Critical Section์ ์๋ค๋ฉด Shared Data๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ด๋ค. Shared Section์ ๋ง์ง๋ค๋ ๊ฒ์ Critical section์ ์๋ค๋ ๊ฒ์ด๋ค. Remainder section์ Shared Section์ ๊ด์ฌํ์ง ์๋๋ค.
The Critical Section Problem
์ํธ ์์ฉ์ด๋ผ ํจ์ Shared Resource๋ฅผ ๊ฐ์ด ๊ณต์ ํ๋ ๊ฒฝ์ฐ์ ํด๋นํ๋ค. Process์ ์ฝ๋๋ 4๊ฐ์ง ์ข ๋ฅ์ Section์ผ๋ก ๋๋์ด์ ธ ์๋ค.
The Critical Section Problem
do while์ด 4๊ฐ section์ ๋ํ ํํ์ด๋ค.
The Critical Section Problem
Mutual exclusion
์ด๋ ํ๋๊ฐ Critical section์ ์์ผ๋ฉด ๋ค๋ฅธ ๊ฒ๋ค์ด ๋ค์ด์ค๋ฉด ์๋๋ค.
Progress
์ด๋ค ์๊ฐ์๋ ์ด๋์ ๊ฑธ๋ ค์ ์ ์ง๋๋ ์ํฉ์ ์๊ธฐํ๋ค. ๋๊ฐ ์ฃผ์ฐจ ๊ณต๊ฐ์ ๋ค์ด๊ฐ๋๋ฐ, ๋๊ฐ ์์ด์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์ ์์ ์ธ ์ํฉ์ด๋ค. ํ์ง๋ง ๋์๋๋ฐ๋ ๋ค๋ฅธ ์ ๋ค์ด ๋ค์ด๊ฐ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ค.
์ฃผ์ฐจ ๊ณต๊ฐ์์ ๋์จ ์น๊ตฌ๋ค์ ๋ค์ ๋ค์ด๊ฐ๋ ค๊ณ ๊ฒฝ์ํ๋ฉด ์๋๋ค๋ ๋ป์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฌํ ํ๋จ์ด ์ฆ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
Bounded waiting
๊ฒฝ์ ์ํฉ์์ ๋จ์๊ฒ ์๋ณดํ๋ ๊ฒ. ๊ฒฝ์์๊ฐ 5๋ช ์ธ๋ฐ ์๋ณด๋ฅผ ํ์ง ์์ผ๋ฉด ์ ์ด๋ ๋ช ๋ฒ ์ด์ ๊ธฐ๋ค๋ฆฌ์ง๋ ์๊ฒ ๋ค๋ผ๋ Buffer bound๊ฐ ์กด์ฌํ๋ค.
Mutual exclusion๊ณผ Progress๋ ๋ฌด์กฐ๊ฑด Critical ํ๋ค.
Critical section problem
kernel์ ์ฌ๋ก
Non-preemtive scheduling์ Usermode์์ ์ฌ์ฉํ๋ค๊ฐ scheduling์ ๋นํ ์ ์๋ค ์๋๋ค๋ฅผ ๋ฐ์ง๋ ๊ฒ
Non-preemtive kernel์ System call ์ํฉ์์ scheduling์ ๋นํ ์ ์๋์ง์ ์ฌ๋ถ๋ฅผ ๋ณด์ธ๋ค.
Non-preemtive kernel์ ์ฌ์ฉํ๋ฉด kernel ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ธฐ ์ฌ์์ง๋ค. ์ด์ ์ต๋ ์ฅ์ ์ performance๋ณด๋ค Responsibility์ด๋ค.