在多道程式環境下,主存中有著多個程序,其數目往往多於處理機數目。這就要求系統能按某種演算法,動態地把處理機分配給就緒佇列中的乙個程序,使之執行。分配處理機的任務是由處理機排程程式完成的。由於處理機是最重要的計算機資源,提高處理機的利在多道程式系統中,乙個作業被提交後必須經過處理機排程後,方能獲得處理機執行。對於批量型作業而言,通常需要經歷作業排程(又稱高階排程或長程排程)和程序排程(又稱低階排程或短程排程)兩個過程後方能獲得處理機;對於終端型作業,則通常只需經過程序排程即可獲得處理機。在較完善的作業系統中,為提高記憶體的利用率,往往還設定了中級排程(又稱中程排程)。對於上述的每一級排程,又都可採用不同的排程方式和排程演算法。對於乙個批處理型作業,從進入系統並駐留在外存的後備佇列開始,直至作業執行完畢,可能要經歷上述的**排程。用率及改善系統效能(吞吐量、響應時間),在很大程度上取決於處理機排程效能的好壞,因而,處理機排程便成為作業系統設計的中心問題之一。
高階排程(high level scheduling)又稱為作業排程或長程排程(longterm scheduling),其主要功能是根據某種演算法,把外存上處於後備佇列中的那些作業調入記憶體,也就是說,它的排程物件是作業。
通常也把低階排程(low level scheduling) 稱為 程序排程或短程排程(shorttermscheduling),它所排程的物件是程序(或核心級執行緒)。程序排程是最基本的一種排程,在多道批處理、分時和實時三種型別的 os 中,都必須配置這級排程。
低階排程的主要功能如下:(1) 儲存處理機的現場資訊。在程序排程進行排程時,首先需要儲存當前程序的處理機的現場資訊,如程式計數器、多個通用暫存器中的內容等,將它們送入該程序的程序控制塊(pcb)中的相應單元。中級排程(intermediate level scheduling)又稱中程排程(medium-term scheduling)。引入中級排程的主要目的是為了提高記憶體利用率和系統吞吐量。為此,應使那些暫時不能執行的程序不再占用寶貴的記憶體資源,而將它們調至外存上去等待,把此時的程序狀態稱為就緒駐外存狀態或掛起狀態。(2) 按某種演算法選取程序。低階排程程式按某種演算法如優先數演算法、輪轉法等,從就緒佇列中選取乙個程序,把它的狀態改為執行狀態,並準備把處理機分配給它。
(3) 把處理器分配給程序。由分派程式(dispatcher)把處理器分配給程序。此時需為選中的程序恢復處理機現場,即把選中程序的程序控制塊內有關處理機現場的資訊裝入處理器相應的各個暫存器中,把處理器的控制權交給該程序,讓它從取出的斷點處開始繼續執行。
程序排程中的三個基本機制:
(1) 排隊器。為了提高程序排程的效率,應事先將系統中所有的就緒程序按照一定的方式排成乙個或多個佇列,以便排程程式能最快地找到它。
(2) 分派器(分派程式)。分派器把由程序排程程式所選定的程序,從就緒佇列中取出該程序,然後進行上下文切換,將處理機分配給它。
(3) 上下文切換機制。當對處理機進行切換時,會發生兩對上下文切換操作。在第一對上下文切換時,作業系統將儲存當前程序的上下文,而裝入分派程式的上下文,以便分派程式執行;在第二對上下文切換時,將移出分派程式,而把新選程序的 cpu 現場資訊裝入到處理機的各個相應暫存器中。
程序排程方式:
1) 非搶占方式(nonpreemptive mode)
2) 搶占方式(preemptive mode)
在乙個作業系統的設計中,應如何選擇排程方式和演算法,在很大程度上取決於作業系統的型別及其目標。
面向使用者的準則
面向系統的準則
排程演算法是指:根據系統的資源分配策略所規定的資源分配演算法。對於不同的系統和系統目標,通常採用不同的排程演算法,例如,在
批處理系統中,為了照顧為數眾多的短作業,應採用短作業優先的排程演算法;又如在分時系統中,為了保證系統具有合理的響應時間,應採用輪轉法進行排程。目前存在的多種排程演算法中,有的演算法適用於作業排程,有的演算法適用於程序排程;但也有些排程演算法既可用於作業排程,也可用於程序排程。
在多道程式系統中,雖可借助於多個程序的併發執行來改善系統的資源利用率,提高系統的吞吐量,但可能發生一種危險——死鎖。
死鎖(deadlock),是指多個程序在執行過程中因爭奪資源而造成的一種僵局(deadlyembrace),當程序處於這種僵持狀態時,若無外力作用,它們都將無法再向前推進。在前面介紹把訊號量作為同步工具時已提及到,若多個 wait 和 signal 操作順序不當,會產生程序死鎖。
產生死鎖的原因可歸結為如下兩點:競爭資源。當系統中供多個程序共享的資源如印表機、公用佇列等,其數目不足以滿足諸程序的需要時,會引起諸程序對資源的競爭而產生死鎖。
程序間推進順序非法。程序在執行過程中,請求和釋放資源的順序不當,也同樣會導致產生程序死鎖。
雖然程序在執行過程中可能發生死鎖,但死鎖的發生也必須具備一定的條件。綜上所述不難看出,死鎖的發生必須具備下列四個必要條件。互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求該資源,則請求者只能等待,直至占有該資源的程序用畢釋放。
請求和保持條件:指程序已經保持了至少乙個資源,但又提出了新的資源請求,而該資源又已被其它程序占有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。
不剝奪條件:指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
環路等待條件:指在發生死鎖時,必然存在乙個程序——資源的環形鏈,即程序集合中的 p0正在等待乙個 p1占用的資源;p1正在等待 p2占用的資源,……,pn正在等待已被 p0占用的資源。
為保證系統中諸程序的正常執行,應事先採取必要的措施,來預防發生死鎖。在系統中已經出現死鎖後,則應及時檢測到死鎖的發生,並採取適當措施來解除死鎖。目前,處理死鎖的方法可歸結為以下四種:(1) 預防死鎖。這是一種較簡單和直觀的事先預防的方法。該方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或幾個條件,來預防發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但由於所施加的限制條件往往太嚴格,因而可能會導致系統資源利用率和系統吞吐量降低。
(2) 避免死鎖。該方法同樣是屬於事先預防的策略,但它並不須事先採取各種限制措施去破壞產生死鎖的四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。這種方法只需事先施加較弱的限制條件,便可獲得較高的資源利用率及系統吞吐量,但在實現上有一定的難度。目前在較完善的系統中常用此方法來避免發生死鎖。
(3) 檢測死鎖。這種方法並不須事先採取任何限制性措施,也不必檢查系統是否已經進入不安全區,而是允許系統在執行過程中發生死鎖。但可通過系統所設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源; 然後,採取適當措施,從系統中將已發生的死鎖清除掉。
(4) 解除死鎖。這是與檢測死鎖相配套的一種措施。當檢測到系統中已發生死鎖時,須將程序從死鎖狀態中解脫出來。常用的實施方法是撤消或掛起一些程序,以便**一些資源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,以繼續執行。死鎖的檢測和解除措施有可能使系統獲得較好的資源利用率和吞吐量,但在實現上難度也最大。
可以參考:死鎖的四個必要條件?如何避免與預防死鎖?
作業系統原理第三章 處理機排程
計算機作業系統 第四版 什麼是處理機 排程 處理機 排程分別在什麼情況下發生 各級排程分別完成什麼工作 三種排程的區別 1 作業系統中有 排程 高階排程 作業排程 中級排程 交換排程 低階排程 程序排程 它們構成系統內的多級排程。不同型別的作業系統不一定完全都實現上述三種排程。2 處理機 排程分別在...
作業系統第三章 處理機排程與死鎖
1.對於批量型來說,必須經過作業排程 又稱高階排程或長程排程 程序排程 又稱低階排程或短程排程 才能獲得處理機 對於終端型作業,通常只需要經過程序排程。有些系統還存在終級排程 又稱中程排程 2.排程佇列模型 3.選擇排程方式和演算法的原則 4.排程演算法 先來先服務排程演算法 fcfs 作業排程 程...
作業系統第三章 處理機排程與死鎖
程序死鎖 1.基本概念 排程演算法 先來先服務 短程序 作業優先 時間片輪轉 基於優先順序的排程演算法 剩餘時間最短者優先 必須記錄各程序過去的服務時間,才能求出剩餘的時間 高響應比優先排程演算法 優點 該演算法既照顧了短作業,又考慮了作業到達的先後次序,不會使長作業長期得不到服務。缺點 利用該演算...