操作系統-Windows操作系統的線程調度了解這些
Windows操作系統支持內核級線程,調度單位是線程,它采用基於動態優先級的,搶占式調度,並結合時間配額的調整來完成調度
一、幾個前提知識點
就緒線程按優先級進入相應的就緒隊列
系統總是選擇優先級最高的就緒線程運行
同一優先級的各個線程按時間片輪轉方式進行調度
多CPU系統中允許多個線程並行運行
二、調度時機
線程調度的引發條件,除了前面提到的公共的4種情況外還有以下兩種
一個線程的優先級改變
一個線程改變了它的親和處理機集合(線程可以被處理的處理機的集合,比如這個集合中增加了一個新的處理機)
前面提到的4種情況也列出來:
線程正常終止 或 由於某種錯誤而終止
新線程創建 或 一個等待線程變為就緒態
當一個線程由運行態線程變為就緒態
當一個線程由運行態進入阻塞態
三、線程優先級(重要)
Windows使用的三類共32個線程優先級:(優先級和優先數自行查閱概念)
實時優先級:16-31(一旦確定優先級不再改變)
可變優先級:1-15(優先級可以在一定範圍內升高或降低,分為基本優先級和當前優先級)
系統線程:0(物理內存清零的操作等)
四、時間配額:加粗加硬,理解這個概念非常重要
時間配額不是一個時間長度值,而是一個被稱為配額單位的整數值
一個線程用完了自己的時間配額時,如果沒有其他相同優先級的線程,Windows將重新給該線程分配一個新的時間配額使其繼續運行
五、調度策略
1、主動切換
一個正在運行態的線程由於等待I/O結果進入阻塞態,讓出CPU,調度程序從就緒隊列選擇一個新的線程上CPU運行
2、搶占
如果剛才被阻塞的線程被喚醒,由於他的優先級高,會搶占CPU取運行,被搶占的線程回到就緒隊列
當線程被搶占時,它被放回相應優先級的就緒隊列的隊首
處於實時優先級的線程被搶占時,時間配額被重置為一個完整的時間配額
處於可變優先級的線程被搶占時,時間配額不變,重新得到CPU後將運行剩下的時間配額
3、時間配額用完
時間配額用完的線程,如果優先級降低了,Windows將選擇一個優先級更高的線程上CPU
優先級沒有降低的情況下,
如果隊列中有其他的就緒線程,則選擇下一個線程執行,A回到原來就緒隊列的末尾
如果隊列中沒有其他的就緒線程,系統會給當前線程重新分配一個新的時間配額,讓他繼續運行
六、優化方案
提升優先級的情況(只針對可變優先級1-15的線程)
線程處於就緒態超過了一定的時間還沒有運行 (俗稱饑餓)
完成I/O操作的線程
前臺進程中的線程完成一個等待操作
由於窗口活動而喚醒窗口線程
信號量或事件等待結束
特別的,"饑餓線程"的優先級提升
系統線程"平衡集管理器"每秒鐘掃描一次就緒隊列,發現是否存在等待時間超過300個時鐘中斷間隔的線程
平衡集管理器將這些線程的優先級提升到15,並分配它一個長度值為正常值4倍的時間配額,被提升的線程用完
它的時間配額後立即衰減到它原先的基本優先級
操作系統-Windows操作系統的線程調度了解這些