Basic Concepts
因為 multiprogramming 所以才要 scheduling。
CPU-I/O burst cycle
→ 東西要嘛在 CPU 要嘛在 I/O
-
所以每一個 process 就切成在 CPU burst 和在 I/O burst
-
I/O-bound program → 大部分在做 I/O
⇒ 不等於 I/O burst 的 cycle 數比 CPU 多(數量應該要是一樣的,因為一個做完接另一個),應該要是一個 burst 要很久。
-
CPU-bound program → 大部分在做 CPU
-
CPU 大多是短的 burst 很多
CPU Scheduler
Ready state → Running state
下面都假設是 single core,只有單一隻程式
Preemptive vs. Non-preemptive
- Preemptive → 一個 process 可以在 CPU burst 中間被打斷
- Non-preemptive → 一個 process 不能在 CPU burst 中間被打斷,一定要做完的
- CPU scheduling 要做事的時間點:
- A process switch from running to waiting → CPU 空下來了,可以加東西囉
- A process switch from running to ready(可能是 timer 到了,所以被丟過去了)→ CPU 空下來了,可以加東西囉
- A process switch from waiting to ready → 看看有沒有更重要,需要就把 running 的拿掉換他
- A process terminates → CPU 空下來了,可以加東西囉
- 紫色是 Non-preemptive 的 scheduler 只能做的事
- 大部分都是 preemptive。(Windows, Mac OS)
- Preemptive issue
- 會打斷東西,所以可能會 raise condition(如果不打斷就不會產生)
- 會影響到 OS 需不需要處理 synchronisation 的問題
- Unix solution: 進到 kernel space 就 disable 2 和 3(就會變成 non-preemptive)