處理機調度的層次
高級調度
高級調度又稱為作業調度或長程調度,其主要功能是根據某種算法,把外存上處于后備隊列中的那些作業調入內存,也就是說,它的調度對象是作業。
1.作業和作業步
作業:一個比程序廣泛的概念,不僅包含了通常的程序和數據,而且還應有一份作業說明書,系統根據說明書來對程序的運行進行控制。在批處理系統中,是以作業為基本單位從外存調入內存的。
作業步:在作業運行期間,每個作業都必須經過若干個相對獨立又相互關聯的順序加工步驟才能得到結果,我們把其中的每一個加工步驟稱為一個作業步,各作業步之間存在著相互聯系,往往是把上一個作業步的輸出作為下一個作業步的輸入。一個典型的作業可以分為三步:①編譯作業步;②連結裝配作業步;③運行作業步。
作業流:若干個作業進入系統后,被依次存放在外存上,這便形成了輸入的作業流,在OS控制下,逐個作業進行處理,便形成了作業流。
2.作業控制塊JCB
為了管理和調度作業,在多道批處理系統中為每個作業設置而來一個作業控制塊,其中保存了系統對作業進行管理和調度所需的全部信息。通常應包含:作業標識,用戶名稱,用戶賬戶,作業類型,作業狀態,調度信息,資源需求,進入系統時間,開始處理時間,作業完成時間,作業退出時間,資源使用情況等。JCB類似進程的PCB。
3.作業調度
作業調度的主要功能是根據作業控制塊中的信息,審查系統能否滿足用戶作業的資源需求,以及按照一定的算法,從外存的后備隊列中選取某些作業調入內存,并為它們創建進程,分配必要的資源。然后再將新創建的進程插入到就緒隊列,準備執行。
在每次執行作業調度時,都須做出以下兩個決定:接納多少個作業(取決于多道程序度);接納哪些作業(取決于所采用的調度算法)。
低級調度
低級調度也稱為進程調度或短程調度,它所調用的對象是進程。它是最基本的一種調度。
低級調度的主要功能如下:①保存處理機的現場信息;②按某種算法選取進程;③把處理器分配給進程。
進程調度中的三個基本機制:
①排隊器。為了提高進程調度的效率,應事先將系統中所有的就緒進程按一定的方式排成一個或多個隊列,以便調度程序能夠最快的找到它。
②分派器。分派器把由進程調度所選定的進程,從就緒隊列取出該進程,然后進行上下文切換,將處理機分配給它。
③上下文切換機制。當對處理機進行切換時,會發生兩對上下文切換操作。在第一對上下文切換時,操作系統將保存當前進程的上下文,而裝入分派程序的上下文,以便分派程序運行;在第二對上下文切換時,將移出分派程序,而把新選進程的CPU現場信息裝入到處理機的各個相應寄存器中。
3.進程調度方式
?1) 非搶占方式(Non-preemptive Mode)
在采用非搶占調度方式時,可能引起進程調度的因素可歸結為這樣幾個:① 正在執行的進程執行完畢, 或因發生某事件而不能再繼續執行; ② 執行中的進程因提出I/O請求而暫停執行;③ 在進程通信或同步過程中執行了某種原語操作,如P操作(wait操作)、Block原語、Wakeup原語等。這種調度方式的優點是實現簡單、系統開銷小,適用于大多數的批處理系統環境。但它難以滿足緊急任務的要求——立即執行,因而可能造成難以預料的后果。顯然,在要求比較嚴格的實時系統中,不宜采用這種調度方式。
2) 搶占方式(Preemptive Mode)
這種調度方式允許調度程序根據某種原則去暫停某個正在執行的進程,將已分配給該進程的處理機重新分配給另一進程。優點是可以防止一個長進程長時間占用處理機,能為大多數進程提供更公平的服務,特別是能滿足對響應時間有著較嚴格要求的實時任務的需求。搶占調度方式的原則:優先權原則(對一些重要的和緊急的作業賦予較高的優先權);短作業或進程優先原則(當新到達的作業比正在執行的作業明顯的短時,將暫停當前的長作業的執行,將處理機分配給新到達的作業);時間片原則(各進程按時間片輪轉運行,當一個時間片用完后,便停止該進程的執行而重新進行調度)。
中級調度
中級調度又稱中程調度(Medium-Term Scheduling)。 引入中級調度的主要目的,是為了提高內存利用率和系統吞吐量。 為此,應使那些暫時不能運行的進程不再占用寶貴的內存資源,而將它們調至外存上去等待,把此時的進程狀態稱為就緒駐外存狀態或掛起狀態。當這些進程重又具備運行條件、且內存又稍有空閑時,由中級調度來決定把外存上的哪些又具備運行條件的就緒進程,重新調入內存,并修改其狀態為就緒狀態,掛在就緒隊列上等待進程調度。?
調度隊列模型和調度準則
調度隊列模型
1. 僅有進程調度的調度隊列模型

2. 具有高級和低級調度的調度隊列模型

?3. 同時具有三級調度的調度隊列模型



②當要求服務的時間相同時,作業的優先權決定于其等待時間,等待時間愈長,其優先權愈高,因而它實現的是先來先服務。
③?對于長作業,作業的優先級可以隨等待時間的增加而提高,當其等待時間足夠長時,其優先級便可升到很高, 從而也可獲得處理機。
在早期的時間片輪轉法中,系統將所有的就緒進程按先來先服務的原則,排成一個隊列,每次調度時,把CPU分配給隊首進程,并令其執行一個時間片。時間片的大小從幾ms到幾百ms。當執行的時間片用完時,由一個計時器發出時鐘中斷請求,調度程序便據此信號來停止該進程的執行,并將它送往就緒隊列的末尾;然后,再把處理機分配給就緒隊列中新的隊首進程,同時也讓它執行一個時間片。這樣就可以保證就緒隊列中的所有進程,在一給定的時間內,均能獲得一時間片的處理機執行時間。
②開始截止時間和完成截止時間?
④資源要求?

對于一些小的實時系統,如果能預知任務的開始截止時間,則對實時任務的調度可采用非搶占調度機制,以簡化調度程序和對任務調度時所花費的系統開銷。但在設計這種調度機制時,應使所有的實時任務都比較小,并在執行完關鍵性程序和臨界區后,能及時地將自己阻塞起來,以便釋放出處理機, 供調度程序去調度那種開始截止時間即將到達的任務。
(1) 對外部中斷的快速響應能力。為使在緊迫的外部事件請求中斷時系統能及時響應,要求系統具有快速硬件中斷機構,還應使禁止中斷的時間間隔盡量短, 以免耽誤時機(其它緊迫任務)。
(2) 快速的任務分派能力。在完成任務調度后,便應進行任務切換。為了提高分派程序進行任務切換時的速度, 應使系統中的每個運行功能單位適當的小,以減少任務切換的時間開銷。

(3) 分配矩陣Allocation。這也是一個n×m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果Allocation[i,j]=K,則表示進程i當前已分得Rj類資源的數目為K。
(4) 需求矩陣Need。這也是一個n×m的矩陣,用以表示每一個進程尚需的各類資源數。如果Need[i,j]=K,則表示進程i還需要Rj類資源K個,方能完成其任務。
設Requesti是進程Pi的請求向量,如果Requesti[j]=K,表示進程Pi需要K個Rj類型的資源。當Pi發出資源請求后,系統按下述步驟進行檢查:
(1) 如果Requesti[j]≤Need[i,j],便轉向步驟2;否則認為出錯,因為它所需要的資源數已超過它所宣布的最大值。
(2) 如果Requesti[j]≤Available[j],便轉向步驟(3);否則, 表示尚無足夠資源,Pi須等待。
? Available[j]∶=Available[j]-Requesti[j];
? Allocation[i,j]∶=Allocation[i,j]+Requesti[j];
? Need[i,j]∶=Need[i,j]-Requesti[j];
(4) 系統執行安全性算法,檢查此次資源分配后,系統是否處于安全狀態。若安全,才正式將資源分配給進程Pi,以完成本次分配;否則, 將本次的試探分配作廢,恢復原來的資源分配狀態,讓進程Pi等待。
??????? ① Finish[i]=false; ② Need[i,j]≤Work[j]; 若找到, 執行步驟(3), 否則,執行步驟(4)。
(3) 當進程Pi獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行:
?Work[j]∶=Work[i]+Allocation[i,j];
? Finish[i]∶=true;
? go to step 2;