操作系統原理學習(第五週)_CPU調度

5-1 CPU調度的基本概念

1.進程的CPU和I/O burst的交替序列

①交替序列的圖

②CPU脈衝的分佈:在系統中存在許多短CPU脈衝,只有少量的長CPU脈衝。

③I/O型作業,許多短CPU脈衝;CPU型作業,有幾個長CPU脈衝。

 

2.當CPU空閒時,OS就選擇內存中某個就緒進程,並給其分配CPU

 

3.進程的CPU調度可能發生在以下情況下:

①從運行轉到等待  非搶佔方式

②從運行到就緒    搶佔方式

③從等待到就緒   搶佔方式

④終止運行  非搶佔方式

 

4.搶佔方式和非搶佔方式

①搶佔方式 (preemptive mode)

允許調度程序根據某個原則,去停止正在執行的進程,將處理機重新分配給另一個進程。

②非搶佔方式(nonpreemptive)

把處理機分配給某個進程後,便一直執行,直到該進程完成或發生某事件而被阻塞,才把處理機分配給其他進程,不允許其他進程搶佔已經分配出去的處理機。

優點:實現簡單,開銷小

缺點:難以滿足緊急任務需求

 

5.搶佔方式的原則

①時間片原則:各進程按時間片運行,當一個時間片用完後,便停止該進程的執行而重新調度,適用於分時系統。

②優先權原則:通常對異性重要的和緊急的進程賦予較高的優先級,則將處理機分配給優先級更高的進程。

③短作業優先原則:當新到達的作業比正在執行的作業明顯短時,將暫停當前長作業的執行,將處理機分配給短作業,使之執行。

 

5-2 CPU調度算法:FCFS

1.問題

①調度程序採用什麼算法選擇一個進程(作業)?

②如何評價調度算法的性能?

 

2.調度準則

①CPU利用率——使CPU儘可能的忙碌

②吞吐量——單位時間內運行完的進程數

③週轉時間——進程從提高到運行結束的全部時間

④等待時間——進程在就緒對待中等待調度的時間片總和

⑤響應時間——從進程提出請求到首次被響應的時間

 

小結:調度算法影響的是等待時間,而不能影響進程真正使用CPU的時間和I/O時間。

 

3.First-Come-First-Served(FCFS,先來先服務)

①最簡單的調度調度算法,可用於作業或進程調度,按照作業到達後備作業隊列(或進程進入就緒隊列)的先後次序來選擇

②FCFS算法屬於非搶佔方式

③FCFS算法易於實現,表明上很公平,實際上有利於長作業,不利於短作業;由於有CPU繁忙型,不利於I/O繁忙型

 

④護航效應:假設有一個CPU型進程和許多I/O型進程,當CPU進程佔用CPU運行時,I/O型進程可能完成了其I/O操作,回到就緒隊列等待CPU,I/O設備空閒;CPU進程釋放後,I/O進程陸續使用CPU,並很快轉爲I/O操作,CPU空閒。

 

5-3 CPU調度算法SJF(Shortest-Job-First)

關聯到每個進程下次運行的CPU脈衝長度,調度最短的進程

1.兩種策略

①非搶佔式調度

一旦進程擁有CPU,使用權限只能在該CPU脈衝結束後讓出

②搶佔式調度

發生在有比當前進程剩餘時間片更短的進程到達時,也稱爲最短剩餘時間優先調度。

 

2.SJF是最優的——對一組進程而言,它給出了最短的平均等待時間

搶佔式調度

侷限性:下一個進程的長度只能估計

 

3.SJF的特點

有利於系統減少平均週轉時間,提高系統吞吐量

一般情況下SJF調度算法比FCFS調度算法的效率更高一些,但是實現相對要困難一些

③如果作業的到來順序及運行時間不合適,會出現飢餓現象

 

5-4 優先級和RR時間片輪轉

1.優先級算法

①每個進程都有自己的優先數[整數]

②CPU分配給最高優先級的進程

③搶佔式和非搶佔式

④SJF是以下一次CPU脈衝長度爲優先數的優先級調度

 

2.靜態優先級

①靜態優先級在進程創建時確定,且在整個生命期中保持不變

②問題:飢餓——低優先級的可能永遠得不到運行

③解決方法:老化——視進程等待時間延長提高其優先級

 

3.動態優先級

①動態優先級:優先權隨進程推進而改變,以便獲得更好的調度性能。

②改變優先權的因素:

  • 進程等待時間
  • 已使用處理機的時間
  • 資源使用情況
  •  

4.時間片輪轉調度法(Round Robin,RR)

①分時系統:每個進程將得到小單位的CPU時間(10-100毫秒),時間片用完,該進程被搶佔並插入隊列末尾。

②例子:

 

③特徵:時間片q過大,趨近於FCFS方法;

時間片q過小,q相對於上下文切換而言足夠長,否則導致系統開銷過大。

④一組進程的評價週轉時間並不隨着時間片增大而降低。一般來說,如果大多數(80%)進程能在一個時間片內完成,就會改善平均週轉時間。

 

5-5多級隊列和多級反饋隊列

1.多級隊列

①按進程的屬性分類,每類進程組成一個就緒隊列,每個進程固定處於某一個隊列中,如前臺就緒隊列和後臺就緒隊列。

②每個隊列都有自己的調度算法,如前臺(foreground) RR調度算法,後臺(background) FCFS

 

2.隊列間的調度

①固定優先級 產生飢餓問題

②給定時間片調度,即給每個隊列一定的CPU時間,進程在給定時間內執行

如80%時間執行前臺的RR調度,20%時間執行後臺的FCFS調度。

 

3.多級反饋隊列調度

①存在多個隊列,不同優先級,各自按RR調度

②各就緒隊列中時間片大小不同,優先級越高的隊列時間片越小

③允許進程在隊列間移動

④一個進程執行完一個時間片後被搶佔處理器,優先級降一級而進入下級就緒隊列,如此直到將至進程的基本優先級。一個進程從阻塞太變爲就緒態時要提高優先級(阻塞時間過長)

⑤最後將I/O型和交互性進程留在較高優先級隊列

⑥多級反饋隊列調度示意圖

 

⑦進程能在不同隊列間移動,可實現老化

⑧多級反饋隊列調度程序的參數:

  • 隊列數
  • 每一隊列的調度算法
  • 決定進程升級的方法
  • 決定進程降級的方法
  • 決定需要服務的進程進入哪個隊列的方法

 

本文知識以及圖片來源:慕課_操作系統原理_田麗華

網址:https://www.icourse163.org/learn/XJTU-1003409001?tid=1206408203#/learn/content

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章