CPU調度算法——FCFS算法/SJF算法/優先級調度算法/RR算法

一、先來先服務(FCFS)調度算法

非搶佔式調度,選擇就緒隊列中等待最長時間的進程。
評價:簡單;系統開銷小;對長進程有優勢;更利於多CPU處理的進程。

帶權週轉時間=週轉時間/服務時間

例子:下圖中,P1到P5五個進程根據到達時間,每個進程結束之後,下一個進程纔開始運行。
在這裏插入圖片描述

二、最短作業優先(SJF)算法

選擇下一個期望最短處理時間的進程運行。

1. 非搶佔式SJF

當運行進程主動放棄CPU控制權時進行調度。

例子:P1進程0時刻到達,開始運行,運行到2時刻時,P2進程到達並等待。P1在3時刻運行完,此時只有P2在等待,故P2開始運行。運行期間,4時刻時,P3到達,6時刻時P4到達,8時刻時P5到達,9時刻時P2運行完,此時P3、P4、P5都在等待,根據最短作業優先算法,P5運行時間最短,故先調度P5。P5結束後,P3和P4中,P3運行時間最短,故調度P3,最後調度P4。
在這裏插入圖片描述

2. 搶佔式SJF

進程主動離開CPU時調度運行時間最短的進程。
新到達進程的運行時間小於正在運行進程的剩餘運行時間時,調度新進程。
缺點:需要知道或者估計進程會執行多長時間;可能使長進程產生飢餓;因爲沒有剝奪,所以不適合在實時系統中實現。

例子:P1在0時刻到達,開始運行。2時刻時P2到達,此時P1剩餘運行時間爲1,P2的運行時間爲6,P1更小,故P1繼續運行。3時刻時,P1運行結束。此時只有進程P2在等待,故P2開始運行。4時刻時,P3到達,此時P2的剩餘運行時間爲5,P3的運行時間爲4,P3更小,故P2中斷,調度P3運行,P2進入等待隊列。6時刻時,P4到達,此時P3的剩餘運行時間爲2,P4的運行時間爲5,P3更小,故繼續運行P3,P4進入等待隊列。8時刻時,P4運行結束,P5到達。此時等待隊列中又P2、P4和P5,運行時長分別爲5、5和2。故P5先運行。由於時長一樣,故P5結束後從隊列中按FCFS運行P2和P4。
在這裏插入圖片描述

三、優先級調度算法

非搶佔式/搶佔式
每個進程有一個優先級,優先級由優先數來表示。
優先級不同時調度優先權最高的進程,優先級相同時按照FCFS順序調度。

1. 非搶佔式優先級調度算法

優先數在括號中給出,優先數越小,優先級越大。

例子:0時刻P1到達開始運行。2時刻P2到達後等待。P1運行之後,等待的進程P2開始運行。P2運行期間,P3、P4、P5都到達了,都在等待隊列中。此時由於優先級P5>P3>P2,故P2運行完之後,按着優先級依次調度P5、P3和P2。
在這裏插入圖片描述

2. 搶佔式優先級調度算法

新進程到達時,若其優先級高於正在運行的進程,則調度新進程。

四、時間片輪轉(RR)算法

搶佔式調度算法
時鐘每隔一段時間產生一箇中斷,運行狀態的進程進入就緒狀態,用FCFS方法從就緒隊列中選擇一個進程去執行。
若時間片太短,則系統開銷大;若時間片太長,則變成FCFS算法。

例子:假設時間片長度設爲4,P1運行時間長度3,長度小於4,用不完一個時間片。2時刻P2進入就緒隊列。3時刻P1結束進程後,P2開始運行,期間4時刻P3到達,6時刻P4到達,P3和P4依次進入就緒隊列。7時刻P2中斷,運行P3,P2進入就緒隊列,此時就緒隊列中進程順序爲P4、P2。8時刻P5到達,進入就緒隊列,此時就緒隊列中進程順序爲P4、P2、P5。11時刻P3運行完,運行P4,此時就緒隊列中進程順序爲P2、P5。15時刻,P4中斷並進入就緒隊列,此時就緒隊列中進程順序爲P2、P5、P4,運行時間均小於4,按FCFS依次運行完。
在這裏插入圖片描述

五、多級隊列調度

將就緒隊列劃分爲多個隊列,各個隊列有不同的優先級。一個進程進入系統後根據其具體情況(比如內存大小、優先級大小、進程的類型等)分批到固定的隊列中,隊列之間用優先級調度,同一隊列用自己的調度算法。
例如:前臺交互進程和後臺批處理進程放到不同的隊列中,前臺交互式進程優先級更高。前臺交互式進程採用RR,後臺批處理進程用FCFS。

高優先級的進程沒有運行完,低優先級的進程無法運行。低優先級的進程正在運行時,有高優先級的進程到達的話,可以搶佔CPU。
在這裏插入圖片描述

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