線程的調度
一、調度的概念
在多道程序系統中,進程的數量往往多於處理器的個數,進程爭用處理器的情況在所難免。處理器調度是對處理器進行分配,就是從就緒隊列中,按照一定的算法,選擇一個進程並將處理器分配給他運行,以實現進程的並發執行。處理器調度是多道程序操作系統的基礎,它是操作系統設計的核心問題。
一個作業從提交開始知道完成,往往要經歷一下三級調度:
1)作業調度。作業調度又稱高級調度:其主要任務是按一定的原則從外存上處於后備狀態的作業中挑選一個或多個作業,給他們分配內存、輸入輸出設備等必要的資源。並建立相應的進程,以使他們獲得競爭處理器的權利。多道批處理系統中大多配有作業調度,而其它系統中通常不需要配置作業調度。作業調度的執行頻率較低,通常為幾分鍾一次。
2)中級調度。中級調度又稱內存調度。引入中級調度視為了提高內存利用率和系統吞吐率,為此,應使那些暫時不能運行的進程調至外存等待,把此時的進程狀態稱為掛起狀態。當他們已具備運行條件且內存有稍有空閑時,由中級調度來決定,把外存上那些已具備運行條件的就緒進程,在重新調入內存,並修改其狀態為就緒狀態,掛在就緒隊列上等待。
3)進程調度。進程調度又稱為低級調度,其主要任務是按照某種方法和策略從就緒隊列中選取一個進程,將處理器分配給它。進程調度是操作系統中最基本的一中調度,在一般操作系統中都不需配置進程調度。進程調度的頻率很高,一般幾十毫秒一次。作業調度從外存的后備隊列中選擇一批作業進入內存,為他們建立進程。這些進程被送入就緒隊列。進程調度從就緒隊列中選出一個進程,並把其狀態改為運行狀態,把CPU分配給它。中級調度是位於高級調度和低級調度之間的一種調度。為了提高內存的利用率,系統將那些暫時不能運行的進程掛起來。當內存空間寬松式,通過中級調度選擇具備運行條件的進程,將其喚醒。
二、調度的時機、切換與過程
進程調度和切換程序是操作系統內核程序。當請求調度的事件發生后,才可能會運行進程調度程序,當調度了新的就緒進程后,才會去進行進程間的切換。現在操作系統中,不能進行進程的調度與切換的情況有以下幾種:
1) 在處理中斷的過程中:中斷處理過程復雜,在實現上很難做到,而且中斷處理時系統工作的一部分,邏輯上不屬於某一進程,不應被剝奪處理器資源。
2) 進程在操作系統內核程序臨界區中:進入臨界區后,需要獨占式的訪問共享數據,理論上必須加鎖,以防止其他並行程序的進入,在解鎖前不應該切換到其他進程,以加快該共享數據的釋放。
3) 其他需要完全屏蔽中斷的原子操作過程中:如加鎖、解鎖、中斷現場保護、恢復等等源自操作。在原子過程中,連中斷都要屏蔽,更不應該進行進程的切換。
如果在上述過程中發生了引起調度的條件,並不能馬上進行調度和切換,應置系統請求調度標志,知道上述過程結束后才能進行相應的調度和切換。
應該進行進程的調度與切換的情況有:
1) 當發生引起調度條件且當前進程無法繼續運行下去時,可以馬上進行調度與切換。如果操作系統只在這種情況下進行進程調度,就是非剝奪調度。
2) 當中斷處理結束后或自陷處理結束后,返回被中斷進程的用戶態程序執行現場前,若置上請求調度標志,即可馬上進行進程調度與切換。如果操作系統支持這種情況下的運行調度程序,就實現了剝奪方式的調度。
進程切換往往在調度完成后立刻發生,它要求保存源進程當前切換點的縣城信息,恢復被調度進程的現場信息。現場切換時,操作系統內核將遠近程的現場信息推入到當前進程的內核堆棧來保存他們,並更新堆棧指針。內核完成從新進程的內核棧中裝入新進程的線程信息、更新當前運行進程空間指針、重設PC寄存器等相關工作之后,開始運行新的進程。
三、進程調度方式
所謂進程調度方式是指當某一個進程正在處理器上執行時,若有某個更為重要或緊迫的進程需要處理,既有優先權更高的進程進入就緒隊列,此時應如何分配處理器。通常有一下兩種進程調度方式:
非剝奪調度方式
非剝奪調度方式又稱為非搶占調度方式,是指當一個進程正在處理器上執行時,即使有某個更為重要或緊迫的進程進入就緒狀態,仍然讓正在執行的進程繼續執行,知道該進程完成或發生某種時間而進入阻塞狀態時,才把處理器分配給更為重要或緊迫的進程。
剝奪調度方式
剝奪調度方式又稱為搶占方式,是指當一個進程正在處理器上執行時,若有某個更為重要或緊迫的進程需要使用處理器,則立即暫停正在執行的進程,將處理器分配給這個更為重要或緊迫的進程。
“剝奪”不是一種任意性行為,必須遵循一定的原則:優先權原則,短進程優先原則和時間片原則。
四、調度的基本准則
不同的調度算法具有不同的特性,在選擇調度算法時,必須考慮算法所具有的特性。為了比較處理器調度算法的性能,人們提出很多評價准則,下面介紹主要的幾種准則:
CPU利用率
CPU是計算機系統中最重要的資源之一,所以應盡可能使CPU保持在忙狀態,是這一資源利用率最高。
系統吞吐量
系統吞吐量表示單位時間內CPU完成作業的數量。長作業需要消耗較長的處理器時間,因此會降低系統的吞吐量。而對於短作業,他們所需要消耗的處理器時間短,因此能提高系統的吞吐量。調度算法和方式的不同,也會對系統的吞吐量產生較大的影響。
周轉時間
周轉時間是指從作業提交到作業完成所經歷的時間,包括作業等待、在就緒隊列中排隊、在處理器上運行以及進行輸入輸出操作所花費的時間的總和。
作業的周轉時間=作業完成時間-作業提交時間
等待時間
等待時間是指進程處於等處理器狀態時間之和,等待時間越長,用戶滿意度越低。處理器調度算法實際上並不影響作業執行或輸入輸出操作時間,只影響作業在就緒隊列中等待所花的時間。因此,衡量一個調度算法優劣常常只需簡單地考察等待時間。
響應時間
響應時間是指從用戶提交請求到系統首次產生響應所有的時間。在交互式系統中,周轉時間不可能是最好的評測准則,一般采用響應時間作為衡量調度算法的重要准則之一。從用戶的角度來看,調度策略應盡量降低響應時間,使響應時間處在用戶能夠接受的范圍之內。
五、典型的調度算法
通常系統的設計目標不同,所采用的調度算法也不同。在操作系統中存在多種調度算法,其中有的調度算法適用於作業調度,有的調度算法適用於進程調度,有的調度算法兩者都適用。下面介紹幾種常用的調度算法:
FIFS先來先服務調度算法
特點:算法簡單,但是效率低;有利於長作業,不利於短作業;有利於CPU繁忙型作業而不利於IO繁忙型作業。
王道考研操作系統知識點整理
SJF短作業優先調度算法
短作業(進程)優先調度算法是指對短作業禍端進程優先調度的算法。短作業優先調度算法是從后備隊列中選擇一個或若干個估計運算時間最短的作業,將他們調入內存運行。
SJF調度算法的缺點:
1) 該算法對長作業不理。
2) 該算法完全未考慮作業的緊迫程度
3) 由於作業的長短只根據用戶所提供的估計執行時間而定的,而用戶又可能會有意或無意的縮短其作業的估計運行時間,致使該算法不一定能真正做到算作業優先調度。
4) 注意:SJF調度算法的平均等待時間、平均周轉時間最少。
優先級調度算法
高響應比優先調度算法
高響應比優先調度算法主要用於作業調度。同時考慮從每個作業的等待時間和估計需要運行的時間。
時間片輪轉調度算法
時間片輪轉調度算法主要適用於分時系統。
多級反饋隊列調度算法
多級反饋隊列調度算法主要是時間片輪轉調度算法和優先級調度算法的綜合和發展。通過動態調整進程優先級和時間片大小,多級反饋隊列調度算法可以兼顧多方面的系統目標。