處理機調度層次
調度層次分為三種
- 高級調度 = 作業調度 = 長程調度
- 低級調度 = 進程調度 = 短程調度
- 中級調度 = 中程調度
作業調度往往是發生在一個作業運行完畢,退出系統,而需要重新調入一個(批)作業進入內存時,故作業調度的周期較長,大約幾分鐘一次,因此把它稱為長程調度。由于其運行頻率較低,故允許作業調度算法花費較多的時間。
進程調度的運行頻率最高,在分時系統中通常是 10~100 ms 便進行一次進程調度,因此把它稱為短程調度。為避免進程調度占用太多的CPU時間,進程調度算法不宜太復雜。
中級調度的運行頻率基本上介于上述兩種調度之間,因此把它稱為中程調度。
(1)高級調度
高級調度的主要功能是根據某種算法,把外存上處于后被隊列中的那些作業調入內存,也就是說它們的調度對象是作業。所以高級調度又稱作業調度。
-
作業和作業步
[1]作業
作業不僅包含通常的程序和數據,還應配有一份作業說明書,系統根據說明書對程序的運行進行控制。
在批處理系統中,是以作業為基本單位從外存調入的。
[2]作業步
通常,在作業運行期間,每個作業都必須經過若干個相對獨立,又相互關聯的順序加工步驟才能得到結果,我們把其中的每一個加工步驟稱為一個作業步。
各作業步之間存在著相互聯系,往往是把上一個作業步的輸出作為下一個作業步的輸入。
-
一個典型的作業可分成三個作業步:
① “編譯”作業步,通過執行編譯程序對源程序進行編譯,產生若干個目標程序段;
② “連結裝配”作業步,將“編譯”作業步所產生的若干個目標程序段裝配成可執行的目標程序;
③ “運行”作業步,將可執行的目標程序讀入內存并控制其運行。
[3]作業流
- 若干個作業進入系統后,被依次存放在外存上,這便形成了輸入的作業流;
- 在操作系統的控制下,逐個作業進行處理,于是便形成了處理作業流。
-
作業控制塊(Job Control Block)
為了管理和調度作業,在多道批處理系統中為每個作業設置了一個作業控制塊。每當作業進入系統時,系統便為每個作業建立一個 JCB,根據作業類型將它插入相應的后備隊列中。
如同進程控制塊是進程在系統中存在的標志一樣,它是作業在系統中存在的標志,其中保存了系統對作業進行管理和調度所需的全部信息。
在 JCB 中所包含的內容因系統而異,通常應含的內容有:作業標識、用戶名稱、用戶帳戶、作業類型(CPU繁忙型、I/O繁忙型、批量型、終端型)、作業狀態、調度信息(優先級、作業已運行時間)、資源需求(預計運行時間、 要求內存大小、要求 I/O 設備的類型和數量等)、進入系統時間、開始處理時間、作業完成時間、作業退出時間、資源使用情況等。
作業調度程序依據一定的調度算法來調度作業,被調度到的作業將會裝入內存。在作業運行期間,系統就按照 JCB 中的信息對作業進行控制。當一個作業執行結束進入完成狀態時,系統負責回收分配給它的資源,撤消它的作業控制塊。
-
作業調度
作業調度的功能:
-
作業調度的主要功能是根據作業控制塊中的信息,審查系統能否滿足用戶作業的資源需求,以及按照一定的算法,從外存的后備隊列中選取某些作業調入內存,并為它們創建進程、分配必要的資源。
然后再將新創建的進程插入就緒隊列,準備執行。因此,有時也把作業調度稱為接納調度(Admission Scheduling)。
周轉時間:
-
對用戶而言,總希望自己作業的周轉時間盡可能的少,最好周轉時間就等于作業的執行時間。
然而對系統來說,則希望作業的平均周轉時間盡可能少,有利于提高CPU的利用率和系統的吞吐量。
為此,每個系統在選擇作業調度算法時,既應考慮用戶的要求,又能確保系統具有較高的效率。在每次執行作業調度時,都須做出以下兩個決定:
① 決定接納多少個作業
作業調度每次要接納多少個作業進入內存,取決于多道程序度(Degree of Multiprogramming),即允許多少個作業同時在內存中運行。
當內存中同時運行的作業數目太多時,可能會影響 到系統的服務質量,比如,使周轉時間太長。
但如果在內存中同時運行作業的數量太少時, 又會導致系統的資源利用率和系統吞吐量太低。
因此,多道程序度的確定應根據系統的規模和運行速度等情況做適當的折衷。
② 決定接納哪些作業
應將哪些作業從外存調入內存,這將取決于所采用的調度算法。下面是幾種調度算法:
-
先來先服務調度算法
將最早進入外存的作業最先調入內存;
-
短作業優先調度算法
是將外存上最短的作業最先調入內存;
-
基于作業優先級的調度算法
該算法是將外存上優先級最高的作業優先調入內存;
”響應比高者優先”的調度算法。
-
在批處理系統中,作業進入系統后,總是先駐留在外存的后備隊列上,因此需要有作
業調度的過程,以便將它們分批地裝入內存。
然而在分時系統中,為了做到及時響應,用戶通過鍵盤輸入的命令或數據等都是被直接送入內存的,因而無需再配置上述的作業調度機制而只需要低級調度。但也需要有某些限制性措施來限制進入系統的用戶數。即,如果系統尚未飽和,將接納所有授權用戶,否則,將拒絕接納。類似地,在實時系統中通常也不需要作業調度。
(2)低級調度
低級調度 = 進程調度 = 短程調度
它所調度的對線是進程或內核級線程。
它是最基本的調度,在多道批處理、分時、實時三種類型的OS中都必須配備這級調度。
-
低級調度的功能
低級調度用于決定就緒隊列中的哪個進程應獲得處理機,然后再由分派程序執行把處理機分配給該進程的具體操作。
低級調度的主要功能如下:
-
保存處理機的現場信息
在進程調度進行調度時,首先需要保存當前進程的處理機的現場信息,如程序計數器、多個通用寄存器中的內容等,將它們送入該進程的進程控制塊(PCB)中的相應單元。
-
按某種算法選取進程
低級調度程序按某種算法如優先數算法、輪轉法等,從就緒隊列中選取一個進程,把它的狀態改為運行狀態,并準備把處理機分配給它。
-
把處理器分配給進程
由分派程序(Dispatcher)把處理器分配給進程。
此時需為選中的進程恢復處理機現場,即把選中進程的進程控制塊內有關處理機現場的信息裝入處理器相應的各個寄存器中,把處理器的控制權交給該進程,讓它從取出的斷點處開始繼續運行
-
-
進程調度的三個基本機制
- 排隊器
為了提高進程調度的效率,應事先將系統中所有的就緒進程按照一定的方式排成一個或多個隊列,以便調度程序能最快地找到它。
-
分派器
分派器把由進程調度程序所選定的進程,從就緒隊列中取出該進程,然后進行上下文切換,將處理機分配給它。
-
上下文切換機制
當對處理機進行切換時,會發生兩對上下文切換操作。
在第一對上下文切換時,操作系統將保存當前進程的上下文,而裝入分派器程序的上下文,以便分派程序運行;
在第二對上下文切換時,將移出分派器程序,而把新選進程的CPU現場信息裝入到處理機的各個相應寄存器中。
-
進程調度的方式
-
非搶占方式(Non-preemptive Mode)
在采用這種調度方式時,一旦把處理機分配給某進程后,不管它要運行多長時間,都一直讓它運行下去,決不會因為時鐘中斷等原因而搶占正在運行進程的處理機,也不允許其它進程搶占已經分配給它的處理機。
直至該進程完成,自愿釋放處理機,或發生某事件而被阻塞時,才再把處理機分配給其他進程。
在采用非搶占調度方式時,可能引起進程調度的因素可歸結為如下幾個:
? ① 正在執行的進程執行完畢,或因發生某事件而不能再繼續執行;
? ② 執行中的進程因提出 I/O 請求而暫停執行;
? ③ 在進程通信或同步過程中執行了某種原語操作,如P操作(wait 操作)、Block原語、Wakeup原語等。
這種調度方式的優點是實現簡單,系統開銷小,適用于大多數的批處理系統環境。
但它難以滿足緊急任務的要求——立即執行,因而可能造成難以預料的后果,因而在要求比較嚴格的實時系統中,不宜采用這種調度方式。
-
搶占方式(Preemptive Mode)
這種調度方式允許調度程序根據某種原則去暫停某個正在執行的進程,將已分配給該進程的處理機重新分配給另一進程。
搶占方式的優點是,可以防止一個長進程長時間占用處理機,能為大多數進程提供更公平的服務,特別是能滿足對響應時間有著較嚴格要求的實時任務的需求。
但搶占方式比非搶占方式調度所需付出的開銷較大。
搶占調度方式可以采取幾種原則,主要有如下幾條:
-
優先權原則
通常是對一些重要的和緊急的作業賦予較高的優先權。
當這種作業到達時,如果其優先權比正在執行進程的優先權高,便停止正在執行(當前)的進程,將處理機 分配給優先權高的新到的進程,使之執行;或者說,允許優先權高的新到進程搶占當前進程的處理機。
-
短進程優先原則
當新到達的作業(進程)比正在執行的作業(進程)明顯的短時,將暫停當前長作業(進程)的執行,將處理機分配給新到的短作業(進程),使之優先執行。
-
時間片原則
各進程按時間片輪流運行,當一個時間片用完后,便停止該進程的執行而重新進行調度。
這種原則適用于分時系統、大多數的實時系統,以及要求較高的批處理系統。
-
-
(3)中級調度
中級調度(Intermediate Level Scheduling)又稱中程調度(Medium-Term Scheduling)。
引入中級調度的主要目的是為了提高內存利用率和系統吞吐量。
為此,應使那些暫時不能運行的進程不再占用寶貴的內存資源,而將它們調至外存上去等待,把此時的進程狀態稱為就緒駐外存狀態或掛起狀態。
當這些進程重又具備運行條件且內存又稍有空閑時,由中級調度來決定把外存上的那些又具備運行條件的就緒進程重新調入內存,并修改其狀態為就緒狀態,掛在就緒隊列上等待進程調度。