Windows XP執行緒排程策略 Windows 2000/XP基於執行緒實現優先順序驅動的搶先式多工,並且在單處理器系統和多處理器系統中的執行緒排程策略是不同的。下面介紹單處理器系統中的執行緒排程策略。在單處理機系統中,處理機的切換有以下兒種情況。
1.主動切換 一個執行緒可能因為進入等待狀態而主動放棄處理器的使用,此時Windows 2000/XP將選杼一個新執行緒開始執行。許多WIN32等待函式呼叫(如WaitForSingkObject或WaitFor-MultipkObjects等)都使執行緒等待某個物件,等待的物件可能有事件、互斥訊號量、資源訊號M、I/O操作、程序、執行緒、視窗訊息等。如果進入等待執行緒的時間配額有剩餘,在等待事件出現時,執行緒的時間配額被減1,相當於1/3個時鐘間隔;如果執行緒的優先順序大於等於14,在等待事件出現時,執行緒的優先順序被重置。
2.搶先 當一個高優先順序執行緒的等待完成,即一個執行緒等待的事件出現,高優先順序執行緒進入就緒狀態,或者一個執行緒的優先順序被增加或減少,出現正在處於執行狀態的低優先順序執行緒低於就緒佇列中的某個執行緒時,系統都要確定是否讓當前執行緒繼續執行或當前執行緒是否要被一個高優先順序執行緒搶先。在Windows 2000/XP中的使用者態下執行的執行緒也可以搶先核心態下執行的執行緒。在判斷一個執行緒是否被搶先時,並不考慮執行緒處於使用者態還是核心態,排程器只是依據執行緒優先順序進行判斷。 當執行緒被搶先時,它被放回相應優先順序的就緒佇列的隊首。處於實時優先順序的執行緒在被搶先時,時間配額被重置為一個完整的時間片;而處於動態優先順序的執行緒在被搶先時,時間配額不變,重新得到處理器使用權後將執行到剩餘的時間配額用完。
3.時間配額用完 當一個處於執行狀態的執行緒用完它的時間配額時,Windows 2000/XP首先必須確定是否需要降低該執行緒的優先順序,然後確定是否需要排程另一個執行緒進入執行狀態。 如果剛用完時間配額的執行緒的優先順序被降低了,Windows 2000/XP將尋找一個更適合的執行緒進入執行狀態,所謂更適合的執行緒是指優先順序高於剛用完時間配額的執行緒的新設S值的就緒執行緒。如果剛用完時間配額的執行緒的優先順序沒有降低,並且有其他優先順序相同的就緒執行緒,Windows 2000/XP將選杼相同優先順序的就緒佇列中的下一個執行緒進入執行狀態,剛用完時間配額的執行緒被排到就緒佇列的隊尾(即分配一個新的時間配額並把執行緒狀態從執行狀態改為就緒狀態如果沒有優先順序相同的就緒執行緒可執行,剛用完時間配額的執行緒將得到一個新的時間配額並繼續執行。
4.執行緒執行結束 當執行緒完成執行時,它的狀態從執行狀態轉到終止狀態。此時系統將處理器排程給另一個執行緒。執行緒完成執行的原因可能是透過呼叫ExhThread而從主函式中返回或被其他執行緒透過呼叫TerminateThread來終止。如果處於終止狀態的執行緒物件上沒有未關閉的控制代碼,則該執行緒將被從程序的執行緒列表中刪除,相關資料結構將被釋放。
Windows XP執行緒排程策略 Windows 2000/XP基於執行緒實現優先順序驅動的搶先式多工,並且在單處理器系統和多處理器系統中的執行緒排程策略是不同的。下面介紹單處理器系統中的執行緒排程策略。在單處理機系統中,處理機的切換有以下兒種情況。
1.主動切換 一個執行緒可能因為進入等待狀態而主動放棄處理器的使用,此時Windows 2000/XP將選杼一個新執行緒開始執行。許多WIN32等待函式呼叫(如WaitForSingkObject或WaitFor-MultipkObjects等)都使執行緒等待某個物件,等待的物件可能有事件、互斥訊號量、資源訊號M、I/O操作、程序、執行緒、視窗訊息等。如果進入等待執行緒的時間配額有剩餘,在等待事件出現時,執行緒的時間配額被減1,相當於1/3個時鐘間隔;如果執行緒的優先順序大於等於14,在等待事件出現時,執行緒的優先順序被重置。
2.搶先 當一個高優先順序執行緒的等待完成,即一個執行緒等待的事件出現,高優先順序執行緒進入就緒狀態,或者一個執行緒的優先順序被增加或減少,出現正在處於執行狀態的低優先順序執行緒低於就緒佇列中的某個執行緒時,系統都要確定是否讓當前執行緒繼續執行或當前執行緒是否要被一個高優先順序執行緒搶先。在Windows 2000/XP中的使用者態下執行的執行緒也可以搶先核心態下執行的執行緒。在判斷一個執行緒是否被搶先時,並不考慮執行緒處於使用者態還是核心態,排程器只是依據執行緒優先順序進行判斷。 當執行緒被搶先時,它被放回相應優先順序的就緒佇列的隊首。處於實時優先順序的執行緒在被搶先時,時間配額被重置為一個完整的時間片;而處於動態優先順序的執行緒在被搶先時,時間配額不變,重新得到處理器使用權後將執行到剩餘的時間配額用完。
3.時間配額用完 當一個處於執行狀態的執行緒用完它的時間配額時,Windows 2000/XP首先必須確定是否需要降低該執行緒的優先順序,然後確定是否需要排程另一個執行緒進入執行狀態。 如果剛用完時間配額的執行緒的優先順序被降低了,Windows 2000/XP將尋找一個更適合的執行緒進入執行狀態,所謂更適合的執行緒是指優先順序高於剛用完時間配額的執行緒的新設S值的就緒執行緒。如果剛用完時間配額的執行緒的優先順序沒有降低,並且有其他優先順序相同的就緒執行緒,Windows 2000/XP將選杼相同優先順序的就緒佇列中的下一個執行緒進入執行狀態,剛用完時間配額的執行緒被排到就緒佇列的隊尾(即分配一個新的時間配額並把執行緒狀態從執行狀態改為就緒狀態如果沒有優先順序相同的就緒執行緒可執行,剛用完時間配額的執行緒將得到一個新的時間配額並繼續執行。
4.執行緒執行結束 當執行緒完成執行時,它的狀態從執行狀態轉到終止狀態。此時系統將處理器排程給另一個執行緒。執行緒完成執行的原因可能是透過呼叫ExhThread而從主函式中返回或被其他執行緒透過呼叫TerminateThread來終止。如果處於終止狀態的執行緒物件上沒有未關閉的控制代碼,則該執行緒將被從程序的執行緒列表中刪除,相關資料結構將被釋放。