操作系统进程(作业)调度常见算法详解
一、進程調度的原因
在操作系統中,由于進程綜述多于處理機,它們必然競爭處理機。為了充分利用計算機系統中的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
總結
以上是生活随笔為你收集整理的操作系统进程(作业)调度常见算法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 珍黄胶囊的功效与作用
- 下一篇: 操作系统死锁详解