1. 程式人生 > >作業系統程序(作業)排程常見演算法詳解

作業系統程序(作業)排程常見演算法詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

一、程序排程的原因

在作業系統中,由於程序綜述多於處理機,它們必然競爭處理機。為了充分利用計算機系統中的CPU資源,讓計算機系統能夠多快好省地完成我們讓它做的各種任務,所以需要進行程序排程。


二、程序排程的定義

程序排程(也稱CPU排程)是指按照某種排程演算法(或原則)從就緒佇列中選取程序分配CPU,主要是協調對CPU的爭奪使用。


通常有以下兩種程序排程方式: 

1) 非剝奪排程方式,又稱非搶佔方式。

是指當一個程序正在處理機上執行時,即使有某個更為重要或緊迫的程序進入就緒佇列,仍然讓正在執行的程序繼續執行,直到該程序完成或發生某種事件而進入阻塞狀態時,才把處理機分配給更為重要或緊迫的程序。 在非剝奪排程方式下,一旦把CPU分配給一個程序,那麼該程序就會保持CPU直到終止或轉換到等待狀態。這種方式的優點是實現簡單、系統開銷小,適用於大多數的批處理系統,但它不能用於分時系統和大多數的實時系統。 

2) 剝奪排程方式,又稱搶佔方式。

是指當一個程序正在處理機上執行時,若有某個更為重要或緊迫的程序需要使用處理機,則立即暫停正在執行的程序,將處理機分配給這個更為重要或緊迫的程序。


三、程序排程的評價指標

排程演算法的評價指標通常如下:

1)CPU利用率

CPU是計算機系統中的稀缺資源,所以應在有具體任務的情況下儘可能使CPU保持忙,從而使得CPU資源利用率最高。

CPU利用率 = CPU利用的時間 / 開機執行的總時間


2)吞吐量

CPU執行時的工作量大小是以每單位時間所完成的程序數目來描述的,即稱為吞吐量。


3)週轉時間

指從程序建立到作程序結束所經過的時間,這期間包括了由於各種因素(比如等待I/O操作完成)導致的程序阻塞,處於就緒態並在就緒佇列中排隊,在處理機上執行所花時間的總和。

作業的週轉時間: 

週轉時間 = 作業完成時間 - 作業提交時間 

平均週轉時間是指多個作業週轉時間的平均值: 

平均週轉時間 = (作業1的週轉時間 + … + 作業 n 的週轉時間) / n 

帶權週轉時間是指作業週轉時間與作業實際執行時間的比值: 

帶權週轉時間 = 作業週轉時間 / 作業實際執行時間 

平均帶權週轉時間是指多個作業帶權週轉時間的平均值: 

平均帶權週轉時間 = (作業1的帶權週轉時間 + … + 作業 n 的帶權週轉時間) / n

4)等待時間

即程序在就緒佇列中等待所花的時間總和。因此衡量一個排程演算法的簡單方法就是統計程序在就緒佇列上的等待時間。


5)響應時間

指從事件(比如產生了一次時鐘中斷事件)產生到程序或系統作出響應所經過的時間。在互動式桌面計算機系統中,使用者希望響應時間越快越好,但這常常要以犧牲吞吐量為代價。


四、程序排程的常見演算法

1)先來先服務排程演算法(FCFS,First Come First Server)

處於就緒態的程序按先後順序鏈入到就緒佇列中,而FCFS排程演算法按就緒程序進入就緒佇列的先後次序選擇當前最先進入就緒佇列的程序來執行,直到此程序阻塞或結束,才進行下一次的程序選擇排程。FCFS排程演算法採用的是不可搶佔的排程方式,一旦一個程序佔有處理機,就一直執行下去,直到該程序完成其工作,或因等待某一事件而不能繼續執行時,才釋放處理機。


FCFS排程演算法的特點是演算法簡單,但效率低;對長作業比較有利,但對短作業不利(相對SJF和高響應比);有利於CPU繁忙型作業,而不利於I/O繁忙型作業。


2)短作業優先排程演算法(SJF,Short Job First)

短作業(程序)優先排程演算法是指對短作業(程序)優先排程的演算法。短作業優先(SJF)排程演算法是從後備佇列中選擇一個或若干個估計執行時間最短的作業,將它們調入記憶體執行。而短程序優先(SPF)排程演算法,則是從就緒佇列中選擇一個估計執行時間最短的程序,將處理機分配給它,使之立即執行,直到完成或發生某事件而阻塞時,才釋放處理機。


SJF又分為兩種:

(1)SRTF搶佔式:又稱最短剩餘優先,當新進來的程序的CPU區間比當前執行的程序所剩的CPU區間短,則搶佔。

(2)非搶佔:稱為下一個最短優先,因為在就緒佇列中選擇最短CPU區間的程序放在隊頭。


SJF排程演算法的特點是吞吐率高,平均等待時間、平均週轉時間最少;但演算法對長作業十分不利,也完全未考慮作業的緊迫程度。


3)時間片輪轉法(RR,Round Robin)

時間片輪轉排程演算法主要適用於分時系統。在這種演算法中,系統將所有就緒程序按到達時間的先後次序排成一個佇列,程序排程程式總是選擇就緒佇列中第一個程序執行,即先來先服務的原則,但僅能執行一個時間片,如100ms。在使用完一個時間片後,即使程序並未完成其執行,它也必須釋放出(被剝奪)處理機給下一個就緒的程序,而被剝奪的程序返回到就緒佇列的末尾重新排隊,等候再次執行。


在時間片輪轉排程演算法中,時間片的大小對系統性能的影響很大。如果時間片足夠大,以至於所有程序都能在一個時間片內執行完畢,則時間片輪轉排程演算法就退化為先來先服務排程演算法。如果時間片很小,那麼處理機將在程序間過於頻繁切換,使處理機的開銷增大,而真正用於執行使用者程序的時間將減少。因此時間片的大小應選擇適當。


時間片的長短通常由以下因素確定:系統的響應時間就緒佇列中的程序數目系統的處理能力

時間片q = 系統對相應時間的要求RT / 最大程序數N

(經驗表明,時間片的取值,應該使得80%的程序在時間內完成所需的一次CPU執行活動。)


4)多級反饋佇列排程演算法(MLFQ,Multi-Level Feedback Queue)

設定多個就緒佇列,併為各個佇列賦予不同的優先順序。第一個佇列的優先順序最高,第二隊次之,其餘佇列優先順序依次降低。僅當第1~i-1個佇列均為空時,作業系統排程器才會排程第i個佇列中的程序執行。賦予各個佇列中程序執行時間片的大小也各不相同。在優先順序越高的佇列中,每個程序的執行時間片就越小或越大(Linux-2.4核心就是採用這種方式)。

當一個就緒程序需要鏈入就緒佇列時,作業系統首先將它放入第一佇列的末尾,按FCFS的原則排隊等待排程。若輪到該程序執行且在一個時間片結束時尚未完成,則作業系統排程器便將該程序轉入第二佇列的末尾,再同樣按先來先服務原則等待排程執行。如此下去,當一個長程序從第一佇列降到最後一個佇列後,在最後一個佇列中,可使用FCFS或RR排程演算法來執行處於此佇列中的程序。

如果處理機正在第i(i>1)佇列中為某程序服務時,又有新程序進入第k(k<i)的佇列,則新程序將搶佔正在執行程序的處理機,即由排程程式把正在執行程序放回第i佇列末尾,重新將處理機分配給處於第k佇列的新程序。


5)高響應比優先排程演算法(HRRF,Highest Response Ratio First)

高響應比優先排程演算法主要用於作業排程,該演算法是對FCFS排程演算法和SJF排程演算法的一種綜合平衡,同時考慮每個作業的等待時間和估計的執行時間。在每次進行作業排程時,先計算後備作業佇列中每個作業的響應比,從中選出響應比最高的作業投入執行。

響應比 = (等待時間+要求服務時間) / 要求服務時間 = 應時間 / 執行時間


6)最高優先順序優先排程演算法(PR,Priority First)

在作業排程中,優先順序排程演算法每次從後備作業佇列中選擇優先順序最髙的一個或幾個作業,將它們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。在程序排程中,優先順序排程演算法每次從就緒佇列中選擇優先順序最高的程序,將處理機分配給它,使之投入執行。


根據新的更高優先順序程序能否搶佔正在執行的程序,可將該排程演算法分為:

(1)非剝奪式優先順序排程演算法。

當某一個程序正在處理機上執行時,即使有某個更為重要或緊迫的程序進入就緒佇列,仍然讓正在執行的程序繼續執行,直到由於其自身的原因而主動讓出處理機時(任務完成或等待事件),才把處理機分配給更為重要或緊迫的程序。

(2)剝奪式優先順序排程演算法。

當一個程序正在處理機上執行時,若有某個更為重要或緊迫的程序進入就緒佇列,則立即暫停正在執行的程序,將處理機分配給更重要或緊迫的程序。


而根據程序建立後其優先順序是否可以改變,可以將程序優先順序分為以下兩種:

(1)靜態優先順序。

優先順序是在建立程序時確定的,且在程序的整個執行期間保持不變。確定靜態優先順序的主要依據有程序型別、程序對資源的要求、使用者要求。

(2)動態優先順序。

在程序執行過程中,根據程序情況的變化動態調整優先順序。動態調整優先順序的主要依據為程序佔有CPU時間的長短、就緒程序等待CPU時間的長短。


參考資料:

http://c.biancheng.net/cpp/html/2595.html

https://chyyuu.gitbooks.io/ucorebook/content/zh/chapter-4/process_schedule_principal.html

http://www.iteblog.com/archives/251

http://blog.csdn.net/wanghao109/article/details/13004507


           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述