作業系統(5)處理器排程管理

笨蛋糕發表於2014-03-02

1、高階排程:即作業排程。控制多道程式的道數,被選擇進入主存的作業越多,每個作業所獲得的CPU時間就越少。

中級排程:即平衡排程。當主存資源緊缺時,會把暫時不能執行的程式換出主存,此時這個執行緒處於”掛起“狀態,不參與低階排程。

低階排程:即程式/執行緒排程。根據某種原則決定就緒佇列中的哪個程式/核心級執行緒獲得處理器,並將處理器讓出給它使用。低階排程執行十分頻繁,這部分程式碼要精心設計,並常駐主存。

2、選擇排程演算法的原則:

1)資源利用率:CPU利用率=CPU有效時間/CPU總的執行時間。

CPU總的執行時間=CPU有效工作時間+CPU空閒等待時間。

在一定的I/O操作等待時間的比率下,執行程式的道數越多,CPU空閒時間所佔的百分比越低。

2)吞吐率:單位時間內CPU處理作業個數。

3)公平性:確保每個程式都能獲得合理的CPU份額和其他資源份額,不會出現飢餓現象。

4)響應時間:從互動式程式提交一個請求(命令)至得到響應之間的時間間隔。

5)週轉時間:批處理使用者從向系統提交作業開始,到作業完成為止的時間間隔。

注意:批處理系統的排程效能用作業週轉時間和帶權作業週轉時間來衡量,此時間越短則系統效率越高,作業的吞吐率越高。

3、作業和程式的關係:

作業是使用者提交給作業系統計算的一個獨立任務。每個作業必須經過若干相對獨立且相互關聯的順序加工步驟才能得到結果,其中,每個加工步驟稱為作業步。

作業是任務實體,程式是完成任務的執行實體。沒有作業任務,程式無事可做;沒有程式,作業任務無法完成。

4、批處理作業的輸入:採用離線控制方式,作業由程式、資料和作業說明書組成。

批處理作業的建立:為每個作業盡力一個作業控制塊JCB,所有JCB組成作業表。

批處理作業的排程:選擇作業,分配資源,建立程式,作業控制,後續處理。

5、低階排程的主要功能:排程和分派。

前者實現排程策略,確定就緒態程式/執行緒競爭使用處理器的次序的裁決原則,即程式/執行緒合適應該放棄CPU和選擇哪個程式/執行緒來執行。

後者實現排程機制,確定如何分時多工CPU,處理上下文交換細節,完成程式/執行緒同CPU的繫結及放棄的實際工作。

6、需要執行低階排程的事件:

建立新程式/執行緒。程式/執行緒終止。程式/執行緒阻塞自己。程式/執行緒執行過程中發生中斷或異常。程式/執行緒執行系統排程。程式/執行緒所請求的I/O操作完成。程式/執行緒耗盡時間片。程式/執行緒改變優先順序等等。

排程機制由3個模組組成:

1)佇列管理程式:將PCB/TCB指標放入等待CPU資源的程式/執行緒列表中。

2)上下文切換程式:發生執行緒/程式切換時,其將當前執行程式/執行緒的上下文資訊儲存在其PCB/TCB中。

3)分派程式:當一個程式/執行緒讓出CPU資源後,分派程式被啟用。

7、低階排程的基本型別:
1)搶先式:高優先順序程式/執行緒剝奪低優先順序的。當執行程式/執行緒的時間片用完後被剝奪。

2)非搶先式:一旦某個程式/執行緒開始執行後便不再讓出處理器,除非此程式/執行緒執行結束,或主動放棄處理器,或因發生某個事件而不能繼續執行。

注意:核心關鍵程式是非剝奪式的,使用者程式是剝奪式的。

8、1)先來先服務演算法FCFS:

非剝奪式排程。按照作業進入系統後備作業佇列的先後次序來挑選作業。同樣適用於程式/執行緒排程。在進行處理器排程時,允許作業排程與程式/執行緒排程分別採用不同的排程演算法。

2)最短作業優先演算法SJF:

以進入系統的作業鎖要求的CPU執行時間的長短為標準,總是選取預計計算時間最短的作業投入執行。非剝奪式。

3)最短剩餘時間優先演算法SRTF:

它確保一旦新的短作業進入系統或新程式/執行緒就緒能夠很快得到服務。

4)響應比最高者優先演算法HRRF:

非剝奪式。要考慮作業的等待時間,和作業處理時間。

響應比=作業週轉時間/作業處理時間。

     =(作業等待時間=作業處理時間)/作業處理時間=1+作業等待時間/作業處理時間。

注意:作業處理時間由使用者給出,是一個常量。作業等待時間開始於時間點0。

5)優先順序排程演算法:

總是選擇就緒佇列中的優先順序最高者投入執行。

外部指定法:使用者提出優先順序。內部指定法:由系統綜合考慮有關因素來確定程式/執行緒的優先順序。

優先順序通常用0~4095的整數表示。靜態優先順序在程式/執行緒建立時即確定,且生命週期內不再改變。但會產生飢餓現象,受某些低優先順序程式/執行緒無限期地被推遲執行。動態優先順序是各程式/執行緒的優先順序隨時間而改變,

基本原則是:正在執行的程式/執行緒隨著佔有CPU時間的增加,逐漸降低其優先順序;就緒佇列中等待CPU的程式/執行緒隨著等待時間的增加,逐漸提高其優先順序,等待時間足夠長的程式/執行緒會因其優先順序不斷提高而被排程執行。

6)輪轉排程演算法RR:

剝奪式排程。即時間片排程演算法。通常為10ms~20ms。就緒佇列中的每個程式/執行緒輪流地執行一個時間片,當時間片耗盡時,就強迫當前執行程式/執行緒讓出處理器,轉而排列到就緒佇列尾部,等候下一輪排程。

7)多級反饋佇列排程演算法MLFQ:

由系統建立多個就緒佇列,每個佇列對應於一個優先順序,第一個佇列的優先順序最高,第二個佇列的優先順序次之,氣候佇列的優先順序逐個降低。

注意:此演算法會導致飢餓發生,解決辦法是對於低優先順序佇列中等待時間足夠長的程式提升其優先順序,從而讓他獲得執行機會。

8)彩票排程演算法:

為程式/執行緒發放針對各種資源(如CPU時間)的彩票,當排程程式需要做出決策時,隨機選出一張彩票,彩票的持有者將獲得相應的系統資源。在這種情況下,所有程式/執行緒都是平等的。

9、實時排程演算法:

1)單比率排程演算法。2)限期排程演算法。3)最少裕度法。

10、多處理機排程的設計要點:

1)為程式分配處理機。

2)在單個處理機上是否使用多道程式設計技術。

3)實際指派程式的方法。

11、多處理機排程演算法:

1)負載共享排程演算法。2)群排程演算法。3)專用處理機排程演算法。4)動態排程演算法。

12、程式優先順序:

呼叫CreateProcess時,根據被建立程式的型別向它指派優先順序,通常預設值NORMAL_PRIORITY_CLASS表示,程式被分為4種型別:空閒程式(優先順序為4),普通程式(優先順序為7或9),高優先順序程式(優先順序為13),實時程式(優先順序為24)。這也是程式的相應執行緒開始執行時的優先順序。

注意:實時程式的優先順序通常為24,用於核心態系統程式,完成儲存管理、快取記憶體管理、本地和網路檔案系統及裝置驅動程式的功能。

13、執行緒優先順序:

範圍0~31。Windows的排程是基於核心級的搶佔式排程,包括多個優先順序層次。每個優先順序都對應於一個就緒佇列,每個執行緒佇列中的執行緒按照時間片方式輪轉排程。

1)執行緒實時優先順序(優先數為16~31)。2)執行緒可變優先順序(優先數為1~15)。

3)系統執行緒優先順序(0),僅用於對系統中空閒物理頁面進行清0的零頁執行緒。

14、執行緒排程程式和資料結構:

核心維護一組”排程程式資料結構“,負責記錄各執行緒的狀態。最主要的是排程器的就緒佇列,此佇列由一組子佇列組成,每個優先順序都有一個佇列,共32個。

為了加快排程速度,Windows維護一個稱為就緒點陣圖的32為掩碼,和一個稱為空閒點陣圖的32為掩碼。

15、執行緒排程策略:

1)主動切換:執行緒因進入等待態而主動放棄處理器,許多Win32等待函式的呼叫都使得執行緒等待某個物件,包括事件、互斥訊號量、資源訊號量、I/O操作、程式、視窗訊息等。

2)搶佔:當一個高優先順序執行緒進入就緒態時,正處於執行態的低優先順序執行緒將被搶佔。注意:在使用者態執行的執行緒可搶佔在核心態執行的執行緒。當執行緒被搶佔時,它被放在相應優先順序就緒佇列的隊首,而非隊尾。

3)時間配額耗盡:當處於執行態的執行緒用完其時間配額時,Windows必須確定是否需要降低此執行緒的優先順序,再確定是否需要排程另一個執行緒進入執行態。

4)結束:當執行緒完成執行時,其狀態從執行態轉換為終止態。執行緒完成原因可能是通過呼叫ExitThread而從主函式中返回,或被其他執行緒通過呼叫TerminateThread來終止。如果處於終止態的執行緒物件上沒有為關閉的控制程式碼,則此執行緒將被從程式的執行緒列表中刪除,相關的資料結構將被釋放。

16、執行緒優先順序提升:

系統永遠不會提升實時優先順序範圍內的執行緒優先順序,因此,在實時優先順序範圍內的執行緒排程總是可預測的。

1)I/O操作完成後的優先順序提升:通過核心函式IoCompleteRequest來指定優先順序的提升幅度。

2)訊號量或等待事件結束後的優先順序提升

3)前臺執行緒完成等待操作後的優先順序提升

4)圖形使用者介面執行緒被喚醒後的優先順序提升

5)對處理器飢餓執行緒的優先順序提升

17、每個執行緒都有一個親合掩碼,描述此執行緒可在哪些處理器上執行,這個親合掩碼是從程式的親合掩碼繼承而來的。執行緒的首選處理器和最近使用的處理器。

18、空閒執行緒:優先順序為0,其功能是在一個迴圈中檢測是否有工作要進行:處理所有待處理的中斷請求。檢查是否有待處理的DPC請求,如果有,則清除相應的軟體中斷並執行DPC。檢查是否有就緒執行緒可進入執行態,如果有,則排程執行緒執行,否則呼叫硬體抽象層的處理器空閒例程,執行相應的電源管理功能。








相關文章