iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
0
自我挑戰組

非本科系也能懂和該懂得作業系統系列 第 17

Day 17 - Scheduling Algorithm

  • 分享至 

  • xImage
  •  

CPU sheduling在做的就是CPU burst的程式,也就決定在ready queue裡面的Process誰可以被執行,其依靠的就是底下的Scheduling Algorithm,在講演算法之前,要先了解怎麼衡量一個Scheduling演算法的好與壞,因此我需要先介紹一個觀念 - CPU burst & I/O burst

CPU burst & I/O burst

對系統而言,不是在做運算,就是在做I/O,burst的概念有點像是『極限』,CPU burst可以理解為CPU吃到滿,I/O burst則是只系統ㄧ直在做I/O的任務,我在Quora上面有找到一個不錯的解釋情境。

  1. 當CPU不斷的在執行instruction直到需要取得更多的資料。(結束了一個CPU burst)
  2. 開始從memeory讀取資料 (開始I/O burst)。
  3. 資料讀取完 (結束I/O)。
  4. CPU又開始運算 (開始 I/O burst)。

因此最好的排程就是可以把執行時間的CPU burst與I/O burst排到一樣長,不會互相牽制成為彼此的瓶頸。而對於一個programmer而言,都會想要知道程式是屬於 I/O-bound(程式的運行速度瓶頸在記憶體的讀取速度),CPU-bound(程式的執行速度瓶頸在CPU的運算速度),才能夠對症下藥去優化程式的效能。

能做Scheduling 地點大概有四個

  1. Switches from running to waiting state,指的是process執行時遇到I/O了
  2. Switches from running to ready state,Time sharing發生了,Timer 出來叫你回去ready state
  3. Switches from waiting to ready,IO做完了,代表ready queue有新的夥伴近來,他可能很重要所以scheduling被叫起來看看誰要執行這樣。
  4. Terminates,一個process執行完,當然要把scheduling重新叫起來知道要做下一個是哪個。

Non-preemptive v.s. Preemptive

Scheduling的Algorithm依照兇殘、霸道的程度分為兩個種類:

  • Non-preemptive: scheduling不會打斷process的執行(一定要把CPU burst做完才換人)。
  • Preemptive:scheduling發現有更好的選擇,就直接打斷目前做的程式,效能比較好,能讓CPU使用率達到更高,但有一個更大的缺點就是在CPU run到一半就被打斷會產生資料同步(synchronization)的問題。

上一篇
Day 16 - Scheduler
下一篇
Day 18 - Scheduling Algorithm 2
系列文
非本科系也能懂和該懂得作業系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言