一.處理機調度的層次:
1.高級調度:高級調度又稱爲作業調度或長程調度,其主要功能是根據某種算法,把外存上處於後備隊列中的那些作業調入內存,也就是說,它的調度對象是作業。(屬於從外存向內存的調度,一般將作業從無到創建到就緒態)
2.中級調度:中級調度又稱中程調度。引入中程調度的主要目的是爲了提高內存利用率和系統吞吐量。中級調度實際上就是存儲器管理中的對換功能。(屬於從外存向內存的調度,一般將作業從掛起到就緒態)
3.低級調度:低級調度通常也稱爲進程調度或短程調度,它所調度的對象是進程(或內核級線程),進程調度是最基本的一種調度,在多道批處理,分時,實時三種類型的OS中,都必須配置這級調度。(屬於從內存向CPU的調度,一般將作業從就緒到運行態)
二.調度隊列模型:
1.僅有進程調度的調度隊列模型:
2.具有高級和低級調度的調度隊列模型:
3.同時具有三級調度的調度隊列模型:
三.調度算法:
1.先來先服務和短作業(進程)優先調度算法
(1)先來先服務調度算法(FCFS):
先來先服務調度算法是一種最簡單的調度算法,該算法即可用於作業調度,也可用於進程調度。當在作業調度中採用該算法時,每次調度都是從後備作業隊列中選擇一個或多個最先進入該隊列的作業,將它們調入內存,爲它們分配資源,創建進程,然後放入就緒隊列。在進程調度中採用FCFS算法時,則每次調度是從就緒隊列中選擇一個最先進入該隊列的進程,爲之分配處理機,使之投入運行。該進程一直運行到完或發生某事件而阻塞後才放棄處理機。
FCFS算法比較有利於長作業(進程),而不利於短作業(進程)。
(2)短作業(進程)優先調度算法:
短作業(進程)優先調度算法SJ(P)F,是指對短作業或短進程優先調度的算法。它們可以分別用於作業調度和進程調度。短作業優先(SJF)的調度算法是從後備隊列中選擇一個或若干個估計運行時間最短的作業,將它們調入內存運行。而短進程(SPF)調度算法則是從就緒隊列中選出一個估計運行時間最短的進程,將處理機分配給它,使它立即執行並一直執行到完成,或發生某事件而被阻塞放棄處理機再重新調度。
優點:SJ(P)F調度算法能有效地降低作業(進程)的平均等待時間,提高系統吞吐量。
缺點:1>該算法對長作業不利;
2>完全未考慮作業的緊迫程度,因而不能保證緊迫性作業(進程)長期不被調度;
3>由於作業(進程)的長短只是根據用戶所提供的估計執行時間而定的,而用戶又可能會有意或無意地縮短其作業的估計運行時間,致使該算法不一定能真正做到短作業優先調度;
實例:
2.高優先權優先調度算法:
優先級調度的含義:
# 當該算法用於作業調度時,系統從後備作業隊列中選擇若干個優先級最高的,且系統能滿足資源要求的作業裝入內存運行。
# 當該算法用於進程調度時,將把處理機分配給就緒進程隊列中優先級最高的進程。
優先權調度算法的類型:
(1)非搶佔式優先級算法:
在這種調度方式下,系統一旦把處理機分配給就緒隊列中優先級最高的進程後,該進程就能一直執行下去,直至完成;或因等待某事件的發生使該進程不得不放棄處理機時,系統才能將處理機分配給另一個優先級高的就緒進程。
使用場合:主要用於一般的批處理系統、分時系統,也常用於某些實時性要求不太高的實時系統。
(2)搶佔式優先級調度算法:
在這種調度方式下,進程調度程序把處理機分配給當時優先級最高的就緒進程,使之執行。一旦出現了另一個優先級更高的就緒進程時,進程調度程序就停止正在執行的
進程,將處理機分配給新出現的優先級最高的就緒進程。
使用場合:常用於實時要求比較嚴格的實時系統中,以及對實時性能要求高的分時系統。
優先級的類型:進程的優先級可採用靜態優先級和動態優先級兩種,優先級可由用戶自定或由系統確定。
(1)靜態優先級:靜態優先級是在創建進程時確定進程的優先級,並且規定它在進程的整個運行期間保持不變。
確定優先級的依據:①進程的類型。通常系統進程優先級高於一般用戶進程的優先級;交互型的用戶進程的優先級高於批處理作業所對應的進程的優先級。
②進程對資源的需求。例如,進程的估計執行時間及內存需求量少的進程,應賦於較高的優先級,這有利縮小作業的平均週轉時間。
③根據用戶的要求。用戶可以根據自己作業的緊迫程度來指定一個合適的優先級。
優點:①簡單易行 ②系統開銷小
缺點:①不太靈活,很可能出現低優先級的作業(進程),長期得不到調度而等待的情況。
②靜態優先級法僅適用於實時要求不太高的系統。
(2)動態優先級:動態優先級是在創建進程時賦予該進程一個初始優先級,然後其優先級隨着進程的執行情況的變化而改變,以便獲得更好的調度性能。
優缺點:動態優先級優點是使相應的優先級調度算法比較靈活、科學,可防止有些進程一直得不到調度,也可防止有些進程長期壟斷處理機。動態優先級缺點是需要花費相當多執行程序時間,因而花費的系統開銷比較大。
3.基於時間片的輪轉調度算法
時間片輪轉算法:
時間片輪轉調度是一種最古老,最簡單,最公平且使用最廣的算法,多用於分時系統。每個進程被分配一個時間段,稱作它的時間片,即該進程允許運行的時間。如果在時間片結束時進程正在運行,則CPU將被剝奪並分配給另一個進程。如果進程在時間片結束前阻塞或結束,則CPU當即進行切換。調度程序所要做的就是維護一張就緒進程列表,當進程用完它的時間片後,它被移到隊列的末尾。
時間片輪轉調度中唯一有趣的一點是時間片的長度。從一個進程切換到另一個進程是需要一定時間的--保存和裝入寄存器值及內存映像,更新各種表格和隊列等。假如進程切換(process switch) - 有時稱爲上下文切換(context switch),需要5毫秒,再假設時間片設爲20毫秒,則在做完20毫秒有用的工作之後,CPU將花費5毫秒來進行進程切換。CPU時間的20%被浪費在了管理開銷上。
原理:在早期的時間片輪轉法中,系統將所有的就緒進程按先來先服務的原則,排成一個隊列,每次調度時,把CPU分配給隊首進程,並令其執行一個時間片,時間片的大小從幾ms到幾百ms。當執行的時間片用完時,由一個計時器發出時鐘中斷請求,調度程序便據此信號來停止該進程的執行,並將它送往就緒隊列的末尾;然後,再把處理機分配給就緒隊列中新的隊首進程,同時也讓它執行一個時間片。這樣就可以保證就緒隊列中的所有進程,在一給定的時間內,均能獲得一時間片的處理機執行時間。
實例:
4、實時調度
1.最早截止時間優先EDF(Earliest Deadline First)
根據任務的開始截止時間來確定任務的優先級。截止時間越早,其優先級越高。(開始截至時間爲t:在t時刻之前該任務必須 開始執行)
- 系統保持一個實時任務就緒隊列
- 隊列按各任務截止時間的早晚排序
- 調度程序總是選擇就緒隊列中的第一個任務,分配處理機使之投入運行。
新任務產生時,是否等當前程序執行完:
- 搶佔式/非搶佔式
可能會使作業錯過,但可適用於軟實時系統
2.最低鬆弛度優先LLF(Least Laxity First)
根據任務緊急(或鬆弛)的程度,來確定任務的優先級。任務的緊急程度越高(鬆弛度值越小),優先級就越高。
鬆弛度= 截止完成時間 – 還需執行時間 - 當前時間
可理解爲當前時刻到開始截止時刻間的差距,隨着時間的推進,這個差值逐漸變小,任務越來越緊迫。
- 進程執行完
- 進程I/O阻塞
- 新進程出現時可能的搶佔
- 某進程鬆弛度爲0時發生搶佔
有的時刻,其他併發的實時任務下一週期未到來,會出現只有一個任務的情況。