操作系統知識整理 - 處理機調度(個人覺得比較重要)

主要內容

作業的概念

作業的狀態及轉換

作業控制塊(JCB)

作業調度目標與性能衡量

先來先服務(FCFS)

輪轉法(round robin,RR)

優先級法


一般來說,處理機調度可以分爲4級:

(1)作業調度又稱宏觀調度或高級調度。其主要任務是完成作業從後備狀態(或稱收容狀態)到執行狀態的轉變,以及從執行狀態到完成狀態的轉變。

(2)交換調度。又稱中級調度。其主要任務是交換主存和外存交換區中的就緒態或等待狀態的進程,涉及到主存的管理與擴充。

(3)進程調度。又稱微觀調度或低級調度。其主要任務是選取一個(內存)就緒態的進程佔用處理機,並進行進程上下文切換。

(4)線程調度。其主要任務是改善進程執行情況,減少進程創建和進程上下文切換的開銷。


 

作業調度

 

作業的概念

作業可被看作是用戶向計算機提交任務的任務實體,例如一次計算和一個控制過程等。

進程則是計算機爲了完成用戶任務而設置的執行實體,是系統分配資源和執行的基本單位。

計算機完成一個任務實體必須要有一個以上的執行實體,也就是說一個作業總是由一個以上的進程組成。

關係表示:作業(進程(線程))

 

如何將作業分解爲進程?

系統首先爲一個作業創建一個根進程,然後再創建相應的子進程,最後爲各子進程分配資源,調度各子進程執行,完成作業要求的任務。

 

作業的狀態及轉換

一個作業從提交給計算機系統到執行結束推出系統,一般都要經歷4個狀態:提交後備(收容)執行完成

1)提交狀態:從輸入設備進入外存的過程稱爲提交狀態,此時作業的信息尚未全部進入系統,不能被作業調度程序選取。

2)後備(收容)狀態:輸入後的作業信息存放在一個被稱作輸入井的外存分區中,併爲每個作業建立一個作業控制塊(JCB)來記錄作業信息。在被調度去執行之前,作業都處於後備狀態。

3)執行狀態:被作業調度程序送到內存的若干個作業處於執行狀態。作業調度程序爲選中的作業創建進程並分配必要的資源(內存、外存、外設等)。若干個作業被分解爲若干xN個進程後,就進入到進程狀態轉換的階段。(可回顧“進程狀態轉換”

4)完成狀態:作業的所有進程運行完畢後,作業也進入完成狀態,但它所佔用的資源尚未全部被系統回收,這種狀態下還需要系統做諸如打印結果、回收資源等善後工作(主要是輸出作業管理信息)。系統通過撤銷JCB來釋放資源和撤銷作業。

 

作業控制塊(JCB)

作業調度程序對作業進行管理和調度的依據。

包括信息:

1)作業名:用戶提供作業名,系統將其轉換爲系統可識別的作業標識符。

2)作業類型:計算型(要求CPU時間多)、管理型(要求輸入輸出量大)或圖形設計型(要求高速圖形顯示)等。

3)資源要求:作業的預期執行時間、要求最遲完成的時間(deadline)、要求的內存量和外存量、要求的外設類型及臺數、要求的庫函數等。

4)當前狀態:提交、後備、執行或完成。

5)資源使用情況:作業進入系統時間(全部信息進入輸入井,提交->後備)、開始執行時間(被作業調度程序選取,後備->執行)、已執行時間(執行到完成之前的計時)、內存地址(分配給作業的起始地址)、外設臺數等。

6)作業的優先級:既可以用戶定義,也可以由系統動態計算產生。

 

作業調度目標與性能衡量

1)公平合理地對待所有作業;

2)使設備具有較高的利用率;

3)執行儘可能多的作業;

4)較短的響應時間。

需要注意的是,以上4個目標互相沖突,不存在一個調度算法可以同時滿足上面的4個目標。

例如:要執行儘可能多的作業,調度算法就應選擇預期執行時間較短的作業,但這樣會造成作業的不公平對待,而且被怠慢的作業的響應時間會變得相當長。

所以應該用其他量來衡量作業調度算法的優劣。

對於批處理系統而言,作業的平均週轉時間平均帶權週轉時間被作爲衡量算法優劣的標準;

對於分時系統實時系統,另外增加了平均響應時間來作爲衡量標準。(可回顧“操作系統的基本類型”

一個作業的週轉時間說明了該作業在系統中的停留時間,包括等待時間(後備轉成執行的時間)和執行時間。


 

進程調度

無論在哪種操作系統中,用戶進程數一般都多於處理機數,這將導致用戶進程互相爭奪處理機。另外,系統進程同樣需要處理機,這就要求進程調度程序按一定的策略,動態地把處理機分配給處於就緒隊列的某個進程。

關於進程調度的功能可以回顧“上一篇博文”

 

進程調度雖然是系統內部的低級調度,但進程調度的優劣直接影響作業調度的性能。

作業的執行時間包含進程的等待時間(就緒態和等待狀態),而進程的等待時間取決於系統的運行速度進程調度程序的策略以及等待事件的發生


 

調度算法

進程調度算法與作業調度算法同理。

 

在認識調度算法前,要先了解一個概念——時間片

CPU分配給各(執行態)進程的執行時間段,我們稱它爲時間片。如果在時間片結束時進程還在運行,則CPU將被剝奪並分配給另一個進程。如果進程在時間片結束前阻塞或結束,則CPU當即進行切換(進程上下文切換),使進程進入等待狀態,而不會造成CPU資源浪費。

在宏觀上,我們可以同時打開多個應用程序,每個程序並行不悖,同時運行;但在微觀上,由於只有一個CPU,一次只能處理程序要求的一部分,如何處理公平,其中一種方法就是引入時間片,事每個程序、每個進程輪流執行。

通常情況下,進程被分配的時間片長短並不相等。系統通過測量進程處於“睡眠”和“正在運行”狀態的時間長短來計算每個進程的交互性,交互性和每個進程預設的靜態優先級的疊加即是動態優先級,動態優先級按比例縮放就是要分配給那個進程時間片的長短。

 

先來先服務(FCFS)

將用戶作業按照提交順序,或者將進程按照轉換爲就緒態的先後,排成一個隊列,並按先來先服務(First Come First Serve)的方式進行調度處理。這是一種最普遍、最簡單的算法。

該算法在一般意義下是公平的,每個作業或進程都按照在隊列中的位置來決定“享受服務”的先後。但對於那些執行時間較短的作業或進程而言,排在很後的位置似乎又不夠合理。

在實際的操作系統中,儘管很少單獨使用FCFS算法,但如果和其他算法配合起來,FCFS算法用到的地方還是蠻多的。

性能評價:短作業在系統中的駐留平均時間與長作業相同,這對短作業是不利的。

 

輪轉法(round robin,RR)

輪轉法的基本思想是讓每個進程在就緒隊列中的等待時間與享受服務的時間成正比。

將CPU的處理時間分成固定大小的時間片,當一個進程用完一個時間片且未能完成任務時,自動釋放CPU,並排到就緒隊列的末尾,等待下一次調度。

輪轉法只能調度分配可搶佔的資源(如CPU)。由於作業調度是對除了CPU之外的所有系統硬件資源的分配,其中包含了不可搶佔的資源,所以作業調度不能使用輪轉法。

在輪轉法中,時間片長度的選取非常重要,這會直接影響系統開銷以及響應時間。如果時間片過短,進程上下文切換次數增加,系統開銷增大;如果時間片過長,長到可以運行完最長的進程,輪轉法就變成了FCFS法。

時間片長度q根據響應時間要求R和就緒隊列允許的最大進程數N確定:q = R/N

爲了進一步改進算法,可以在每一次調度開始時,根據就緒隊列中的進程數計算一次時間片長度。

至於計算時間片帶來的開銷和固定時間片帶來的開銷哪個比較大,就要根據實際情況判斷了。

性能評價:進程的響應時間與服務時間成正比。從而,所需服務時間短的進程的響應時間將會小於所需服務時間長的進程。因此輪轉法在響應時間上優於FCFS算法。

 

優先級法

優先級高的作業或進程先執行。

確定優先級的方法可分爲靜態法動態法。靜態法根據作業或進程的靜態特性,在作業或進程開始執行之前確定它們的優先級,一旦開始執行就不能改變。動態法是將作業或進程的靜態特性和動態特性結合起來確定它們的優先級,隨着作業或進程的不斷執行,優先級不斷變化。

 

作業的靜態優先級確定原則:

1)用戶根據作業的緊急程度定義;

2)按作業類型確定:I/O繁忙、CPU繁忙、均衡、一般;

3)按照資源需求情況。

 

進程的靜態優先級確定原則:

1)進程類型:系統進程或用戶進程,I/O繁忙、CPU繁忙、均衡、一般;

2)根據作業的優先級。

 

進程的動態優先級確定原則(常用):

1)根據進程佔用CPU的時間長短,佔用時間越長,被阻塞之後再次獲得調度的優先級降低;

2)根據就緒態進程等待CPU的時間長短,等待時間越長,優先級越高。

需要注意的是,由於系統要經常計算各進程的優先級,因而系統要額外付出開銷。

 

除了以上三種算法還有線性優先級法(SRR,介於FCFS和RR)多級反饋輪轉法(進程結束前多次反饋循環執行)、最短作業優先法(SJF,注重執行時間)和最高響應比優先級法(HRN,響應比 = 1 + 後備狀態作業的等待時間 / 作業的預期執行時間)等。


 

路過的圈毛君:“妄想當個日更博主?肝還好嗎?腦子可能已經不靈活了惹......本來想寫點代碼示例的,但還是以後有機會再(wa)補(keng)上(bu)叭(tian)_(:з」∠)_”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章