Windows處理器排程機制

2021-07-29 22:42:51 字數 4196 閱讀 2973

windows處理器排程機制

一.  排程優先順序

1.     windows處理器排程力度為執行緒,windows為每乙個執行緒分配排程優先順序

2.     排程器根據優先順序採用搶占式排程策略,讓具有最高優先順序的執行緒首先執行

3.     windows核心使用32個優先順序分別來表示執行緒要求執行的緊迫性,用0~31的數字表示

4.     根據優先順序的功能不同,可以分為3組:16個實時優先級別(16~31),15個可變優先順序(1~15),1個系統優先順序(0),為記憶體頁清零執行緒保留

5.     當建立程序時,可以賦予一下優先級別:實時,高,高於一般,一般,低於一般和空閒

6.     當建立執行緒時,在程序的優先級別進一步賦予一下優先級別:盡量實時,最高,高於一般,一般,低於一般,最低和空閒

7.     應用優先順序和系統的優先級別對應關係

36

15

12

10

8

6

35

14

11

9

7

5

24

13

10

8

6

4

23

12

9

7

5

3

22

11

8

6

4

2

實時

高於一般

一般

低於一般

空閒

8.     處理器排程時參考兩個優先順序設定:乙個是從當前執行緒所在的程序的基準優先順序,另外乙個是執行緒的優先順序

9.     一般來說,應該執行緒執行在可變優先級別(1~15)的範圍內,如果需要進入實時優先級別(16~31)範圍來執行,必須取得更高的排程優先順序特權

二.  執行緒狀態

1.     在處理器排程執行緒執行過程中,通過改變執行緒的狀態對多個執行緒進行有效的管理

2.     如圖2 乙個執行緒在處理器排程過程中狀態轉化圖

圖2.windows執行緒狀態轉化圖

3.     如表2 執行緒狀態的含義說明

狀態

含義

就緒

表示乙個執行緒已經準備就緒,等待執行。排程器查詢執行緒庫中處於就緒狀態的執行緒,來決定下乙個執行的執行緒

預備

表示乙個執行緒已經被選擇作為乙個執行的執行緒,如果條件滿足,排程器會將上下文環境切換到該執行緒。但處於預備狀態的執行緒也可能會被轉換到就緒狀態繼續等待

執行

當排程器將上下文環境切換到乙個程序,該執行緒就處於執行狀態。當分配給執行緒的時間配額用完,或則有更高優先順序的執行緒搶占cpu,它會讓出處理器

等待

當乙個執行緒需要等待必要的系統資源時,會轉入等待狀態,知道系統資源就緒

過渡

如果乙個執行緒已經準備就緒,但執行它所需的核心棧暫時被分頁排程到磁碟上,它就進入過渡狀態,等待核心棧調入記憶體

終止

當乙個執行緒完成執行後,就進入終止狀態,物件管理器釋放相應的執行執行緒塊資源

已初始化

乙個執行緒剛被建立時的內部狀態

三.  執行緒排程機制

1.     windows通過排程資料庫來為每乙個優先順序別的執行緒維護乙個就緒等待佇列,當處理器需要調入乙個執行緒執行時,系統會從排程資料庫中找到乙個具有最高優先順序別的就緒執行緒,並分配執行時間

2.     系統中同時有多個執行緒存在,而每個處理器在乙個時刻只能執行乙個執行緒,windows用排程資料記錄處於就緒的執行緒,以便在確定乙個執行的執行緒時參考

3.     當乙個執行緒進入執行狀態時,它獲得乙個可以執行的時間配額

4.     執行緒在核心執行緒塊中都記錄了當前的時間配額值,每過乙個時鐘週期,該值就會減1,當該值為0時,表示時間配額已經用完

5.    當分配給該執行緒的時間配額用完時,排程器會查詢排程資料庫看是否有就緒的執行緒在等待。如果有等待的就緒執行緒,排程器會將正在執行的執行緒轉入等待或就緒佇列,調入下乙個具有最高優先順序的執行緒執行。如果沒有則再分配時間配額讓該執行緒繼續執行

6.     windows採用基於優先順序的搶占式排程演算法,在乙個具有較低優先順序別的執行緒正在執行時,如果有乙個較高的優先順序別的執行緒進入就緒等待佇列,或乙個具有較高優先順序別的執行緒等待時間結束時,就可以搶占處理器優先執行

7.    當乙個正在執行的執行緒需要等待某乙個物件時,包括事件,互斥的狀態解鎖等,會主動讓出處理器進入等待狀態

8.     系統為每乙個需要等待的物件維護了乙個等待佇列,讓出處理器的執行緒會進入隊尾等待,處在排程資料庫中具有最高優先順序的執行緒將被分配執行時間,並開始執行

9.     當乙個執行緒的時間配額用完時,如果等待佇列中有就緒執行緒等待,排程器會將當前執行緒移到就緒等待佇列的隊尾,而為具有最高優先順序的執行緒分配執行時間,並開始執行

10.  當乙個執行緒完成所有的**執行,排程器會將它的狀態設為結束。系統會將它從屬程序的執行緒表中去掉,並釋放它使用的記憶體和系統物件資源

11.  處理器調入和調出乙個執行緒時,是通過切換上下文來實現的

12.  當系統調出乙個正在執行的執行緒時,需要儲存的執行緒上下文資訊為執行指令指標,使用者佔和核心棧指標已經執行緒所在程序的虛擬位址空間指標

13.  執行緒的核心棧用來完成上下文的切換,排程器將調出執行緒的上下文環境資訊壓入該執行緒的核心棧,並將棧指標儲存到該執行緒的核心執行緒塊中

14.  在調入乙個執行緒執行時,核心棧指標指向調入執行緒的核心棧,並恢復調入線的執行上下文

15.  如果調入執行緒所在的程序需要改變,處理器會將相關的位址暫存器設定到新程序的虛擬位址空間。處理器再將控制轉到調入線的執行指令指標,開始執行該執行緒

Android執行緒排程機制

2014 2 24 閱讀789 在android weekly上看到了一篇關於android執行緒排程的文章,感覺挺不錯的,試著將其翻譯了一下,這篇文章是關於android中線程是如何排程的,以及怎麼樣顯示設定執行緒優先順序保證應用程式在 多個執行緒在後台執行時保持響應。執行緒排程是指作業系統負責決...

linux程序排程機制

linux是以執行緒為單位進行cpu排程的。所以下面的描述中所說的執行緒和程序從cpu排程角度來說是等效。linux程序優先順序 priority。程序的優先順序是作業系統自己給定並且動態調整的。使用者可以通過nice值來調整實際優先順序。centos6.2 kernel 2.6.32 程序的預設優...

Spark 任務排程機制

driver執行緒主要是初始化sparkcontext物件,準備執行所需的上下文,然後一方面保持與的rpc連線,通過申請資源,另一方面根據使用者業務邏輯開始排程任務,將任務下發到已有的空閒executor上。executor程序起來後,會向driver反向註冊,註冊成功後保持與driver的心跳,同...