1. 程式人生 > >操作系統-Windows操作系統的線程調度了解這些

操作系統-Windows操作系統的線程調度了解這些

信號量 一次 多個 spa 自己的 單位 時機 win 中斷

  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操作系統的線程調度了解這些