作業系統——第三章筆記(二)
排程演算法
排程的實質就是一種資源分配。不同的系統和系統目標,通常採用不同的排程演算法——適合自己的才是最好的。
1)如批處理系統為照顧為數眾多的短作業,應採用短作業優先的排程演算法;
2)如分時系統為保證系統具有合理的響應時間,應採用輪轉法進行排程。
3)目前存在的多種排程演算法中,有的演算法適用於作業排程,有的演算法適用於程序排程;但有些演算法作業排程和程序排程都可以採用。
一.先來先服務排程演算法FCFS (First Come First Service)
一種最簡單的排程演算法,按先後順序進行排程。既可用於作業排程,也可用於程序排程。
按照作業提交,或程序變為就緒狀態的先後次序分派CPU;
新作業只有噹噹前作業或程序執行完或阻塞才獲得CPU執行
被喚醒的作業或程序不立即恢復執行,通常等到當前作業或程序出讓CPU。 (所以,預設即是非搶佔方式)
1.不足:短作業C的帶權週轉時間竟高達100,這是不能容忍的;而長作業D的帶權週轉時間僅為1.99。
2.關於應用:有利於CPU繁忙型的作業,而不利於I/O繁忙的作業(程序)。
1)從程式規模上看,一般I/O繁忙型作業CPU進行處理的用時相對比較短,CPU繁忙型的作業相對較長。而FCFS不利於短作業,I/O繁忙型作業一旦排隊靠後就會處於劣勢。
2)另一方面,I/O繁忙型作業需頻繁的請求I/O,即使排隊靠前,但由於I/O請求阻塞,重新排隊可能就會排到隊尾(這一情況在其他演算法下也是普遍的,但不同的演算法,排隊情況不同,相對的在照顧公平性上也會有所不同)。
3)目前大多數事務處理都屬於I/O繁忙型作業。
PS:
1.各種時間的標識
到達時間:a
執行時間長度:b
開始時間:c
完成時間:d=c+b
週轉時間長度:t=d-a
帶權週轉時間:w=t/b
2.CPU繁忙型:CPU計算多,輸入輸出少。
I/O繁忙型:CPU計算少,輸入輸出多。
二.短作業(程序)優先排程演算法SJF/SPF
1.優點:通過上表可見採用SJF/SPF演算法,平均週轉時間、平均帶權週轉時間都有明顯改善。SJF/SPF排程演算法能有效的降低作業的平均等待時間,提高系統吞吐量。
2.方式:分搶佔和非搶佔兩種方式,上例為簡單的非搶佔式。
3.不足:
1)對短作業有利,但同時造成了對長作業的不利。
2)由於作業(程序)的長短含主觀因素,不一定能真正做到短作業優先。
3)未考慮作業的緊迫程度,因而不能保證緊迫性作業(程序)的及時處理。
三.高優先權優先排程演算法HPF(Highest Priority First)
照顧緊迫性作業,使其獲得優先處理而引入排程演算法。常用於批處理系統中的作業排程演算法,以及多種作業系統中的程序排程演算法
1.分兩種方式:
1)非搶佔式優先權演算法
2)搶佔式優先權演算法 關鍵點:新作業產生時
2.優先權的型別
1)靜態優先權:建立程序時確定,整個執行期間保持不變。一般利用某一範圍 的一個整數來表示,又稱為優先數。
2)動態優先權:建立程序時賦予的優先權可隨程序的推進或隨其等待時間的增 加而改變。
/*PS:關於程序優先權的確定?依據如下:
- 程序型別:一般來,系統程序高於使用者程序。
- 程序對資源的需求:如程序的估計時間及記憶體需要量的多少,對要求少的程序賦予較高優先權。
- 使用者要求:由使用者程序的緊迫程度及使用者所付費用的多少來確定優先權的。*/
3.高響應比優先排程演算法HRRN(Highest Response Raito Next)
1)短作業優先演算法是一種比較好的演算法(相當於根據作業長度設定的靜態優先權演算法),適用於短作業較多的批處理系統中,其主要不足是長作業的執行得不到保證。
2)HRRN為每個作業引入動態優先權,使作業的優先順序隨著等待時間的增加而以速率a 提高:
優先權 =(等待時間+要求服務時間)/要求服務時間 = 響應時間/要求服務時間
PS:
1.該方法對不同作業都有照顧(每一個新來的作業優先順序都是1)
1)同時到達的作業優先權相同。
初始t=0,隨著時間增長,如果等待時間 t 相同,執行時間愈短的優先權愈高,利於短作業。
對於長作業,作業的優先順序可以隨等待時間的增加而提高,當其等待時間足夠長也可獲得處理機。長作業有照顧。(來了很久的作業優先權一定高於新來的短作業)
2)當執行時間相同的作業,優先權的高低決定於其等待時間的長短,也就是先來先服務。
2.什麼時候計算各程序的響應比優先權?
需要進行排程選擇的時候比較各自優先權
1)作業完成時
2)新作業產生時(搶佔、非搶佔)
3)時間片完成時
4)程序阻塞時
四.基於時間片的輪轉排程演算法RR(Round Robin)
1.分時系統新需求:及時響應使用者的請求;採用基於時間片的輪轉式程序排程演算法。
1)排程過程:
○1將系統中所有的就緒程序按照FCFS原則,排成一個佇列。
○2每次排程時將CPU分派給隊首程序,讓其執行一個時間片。時間片的長度從幾個ms到幾百ms。
○3在一個時間片結束時,發生時鐘中斷。
○4排程程式據此暫停當前程序的執行,將其送到就緒佇列的末尾,並通過上下文切換執行當前就緒的隊首程序。
2)缺點:
程序阻塞情況發生時,未用完時間片也要出讓CPU。
能夠及時響應,但沒有考慮作業長短等問題。
3)時間片長度的選擇要與完成一個基本的互動過程所需的時間相當,保證一個基本的互動過程可在一個時間片內完成。
設定不合適反而都會導致響應時間長。
○1過長會怎樣?——FCFS
○2過短會怎樣?——頻繁切換
影響時間片長度的主要因素:系統的處理能力和系統的負載狀態。
2.早期分時系統採用的是簡單的時間片輪轉法,進入90年代後廣泛採用多級反饋佇列排程演算法FB(Multiple-level Feed Back Queue)。
1)當一個新程序進入記憶體,引發的排程過程
○1準備排程:先將它放入第一個佇列的末尾,按FCFS原則排隊等待排程。
○2IF時間片內完成,便可準備撤離系統;
○3IF時間片內未能完成,排程程式便將該程序轉入第二佇列的末尾等待再次被排程執行。
○4當第一佇列中的程序都執行完,系統再按FCFS原則排程第二佇列。在第二佇列的稍放長些的時間片內仍未完成,再依次將它放入第三佇列。
○5依次降到第n佇列後,在第n佇列中便採取按時間片輪轉的方式執行。
2)特點:多個就緒佇列,迴圈反饋
動態優先順序、時間片輪轉
○1設定多個就緒佇列,各佇列有不同的優先順序,優先順序從第一個佇列依次降低。
○2賦予各佇列程序執行時間片大小不同, 優先權越高,時間片越短。
3)多級反饋佇列排程演算法的效能
多級反饋佇列排程演算法具有較好的效能,能較好的滿足各種型別使用者的需要。
終端型作業使用者。大多屬於較小的互動性作業,只要能使作業在第一佇列的時間片內完成,便可令使用者滿意。
短批處理作業使用者。週轉時間仍然較短,至多在第二到三佇列即可完成。
長批處理作業使用者。將依次在1~n級佇列中輪轉執行,不必擔心作業長期得不到處理。
PS:
注意:
1.各佇列的時間片逐漸增大。優先順序逐漸降低
2.僅當優先權高的佇列(如第一佇列)空閒時,排程程式才排程第二佇列中的程序執行;僅當第1~(i-1)佇列均空時,才會排程第i佇列中的程序執行。
3.高優先順序搶佔問題:
1)第i佇列中為某程序正佔有CPU,又有新程序進入優先權較高的佇列(第1~i-1隊中);
2)被搶佔的程序放回原就緒佇列末尾。
五.優先順序倒置的解決方法
一種簡單的解決方法-中斷禁止:
1.假如程序P3在進入臨界區後,P3所佔用的處理機就不允許被搶佔。
2.如果系統中的臨界區都較短且不多,該方法是可行的。
3.反之,如果P3臨界區非常長,則高優先順序程序P1仍會等待很長的時間,其效果是無法令人滿意的。
4.還要防止P3在臨界區出現死迴圈。
另一種較為實用的方法:
1.當高優先順序程序P1要進入臨界區使用臨界資源R時,如果已有一個低優先順序程序P3正在使用該資源;
2.此時一方面P1被阻塞,另一方面由P3繼承P1的優先順序,並一直保持到P3退出臨界區。