【面經筆記】進程調度方式

分爲兩大類:可剝奪和不可剝奪


基於優先級調度:

優先級高的進程先運行,可剝奪

基於調度策略:

選擇函數:

  • 先進先出(FCFS、FIFO)

改進:將優先級與隊列結合,每個優先級一個隊列

  • 輪詢/輪轉

週期性間隔產生中斷,中斷髮生時,當前運行的進程置於就緒隊列中,然後基於FIFO策略選擇下一個就緒進程。

  • 最短進程優先(Shortest Process Next,SPN)

這是一個非搶佔策略,下一次選擇預計處理時間最短的進程進行處理,其難點是不知道進程的運行時間。風險是長進程飢餓。

  • 最短剩餘時間(Shortest Remaining Time ,SRT)

針對SPN增加了搶佔機制,總是選擇預計剩餘處理時間最短的進程。
當一個新進程加入就緒隊列時,它可能比當前運行的進程具有更短的剩餘時間,因此,只要新進程就緒,就搶佔當前正在運行的進程。
相對於一個正在運行的長作業,短作業可以立即被選擇運行。

  • 最高響應比

R=w+ss

w 爲等待處理器時間,s爲預計的服務時間。

處理器選擇R最大的就緒進程。當系統偏向短作業時,長作業由於得不到服務的時間不斷增加,R會不斷增大,從而勝過短作業。

  • 多級反饋隊列調度

既能使高優先級的作業得到響應又能使短作業(進程)迅速完成

由於沒法獲得進程剩餘執行時間,那就關注已經執行的時間
多級反饋隊列調度基於搶佔原則(基於時間片),並使用動態優先級機制

當一個進程第一次進入系統後,優先級最高,隨後的時間裏,每當它被搶佔時,它就被降級到下一個低優先級隊列。

除了優先級最低的隊列外,其他隊列都使用FIFO調度:每個隊列都是基於時間片的輪詢策略,但是每個進程在非底層隊列中最多被調用一個時間片,然後就去了下一個隊列。所以可以按FIFO調度理解。

優先級最低的隊列使用輪詢調度。

短進程很快會執行完,不會在就緒隊列中降很多級,一個長進程會逐級下降。因此,新到的進程和短進程優先級優先於老進程和長進程。


多級(假設爲N級)反饋隊列調度算法可以如下原理:

1、設有N個隊列(Q1,Q2….QN),其中各個隊列對於處理機的優先級是不一樣的,也就是說位於各個隊列中的作業(進程)的優先級也是不一樣的。一般來說,優先級Priority(Q1) > Priority(Q2) > … > Priority(QN)。怎麼講,位於Q1中的任何一個作業(進程)都要比Q2中的任何一個作業(進程)相對於CPU的優先級要高(也就是說,Q1中的作業一定要比Q2中的作業先被處理機調度),依次類推其它的隊列。

2、對於某個特定的隊列來說,裏面是遵循時間片輪轉法。也就是說,位於隊列Q2中有N個作業,它們的運行時間是通過Q2這個隊列所設定的時間片來確定的(爲了便於理解,我們也可以認爲特定隊列中的作業的優先級是按照FCFS來調度的)。

3、各個隊列的時間片是一樣的嗎?不一樣,這就是該算法設計的精妙之處。各個隊列的時間片是隨着優先級的增加而減少的,也就是說,優先級越高的隊列中它的時間片就越短。同時,爲了便於那些超大作業的完成,最後一個隊列QN(優先級最低的隊列)的時間片一般很大(不需要考慮這個問題)。

多級反饋隊列調度算法描述:

1、進程在進入待調度的隊列等待時,首先進入優先級最高的Q1等待。

2、首先調度優先級高的隊列中的進程。若高優先級中隊列中已沒有調度的進程,則調度次優先級隊列中的進程。例如:Q1,Q2,Q3三個隊列,只有在Q1中沒有進程等待時纔去調度Q2,同理,只有Q1,Q2都爲空時纔會去調度Q3。

3、對於同一個隊列中的各個進程,按照時間片輪轉法調度。比如Q1隊列的時間片爲N,那麼Q1中的作業在經歷了N個時間片後若還沒有完成,則進入Q2隊列等待,若Q2的時間片用完後作業還不能完成,一直進入下一級隊列,直至完成。

4、在低優先級的隊列中的進程在運行時,又有新到達的作業,那麼在運行完這個時間片後,CPU馬上分配給新到達的作業(搶佔式)。、


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