處理機調度層次
1.高級調度(長程調度/作業調度)
決定將外存上處于后備隊列中的哪幾個作業調入內存,并建立相應進程。每個作業值調入一次,調出一次。調入時會建立PCB,調出時才撤銷PCB。
2.低級調度(進程調度/短程調度)——最基本,頻率最高
決定就緒隊列中的哪個進程應獲得處理機
3.中級調度(內存調度)
把外存上的已具備運行條件的就緒進程再重新調入內存,并修改其狀態為就緒狀態
(之前為了提高內存利用率,而把一些暫時不能運行的進程調至外存等待變成就緒駐外狀態(或掛起狀態)了)注意PCB會常駐內存,并不會被調出。
實際上就是存儲器管理中的對換功能。
處理機調度算法的目標
1.處理機調度算法的共同目標
1)資源利用率
CPU利用率=CPU有效工作時間/(CPU有效工作時間+CPU空閑等待時間)
2)公平性
使諸進程都獲得合理的CPU時間,不會發生進程饑餓現象
3)平衡性
保持系統資源的平衡性,使系統中的CPU和各種外部設備都能經常處于忙碌狀態
4)策略強制執行
2.批處理系統的目標
1)平均周轉時間短
周轉時間:從作業被提交給系統開始到作業完成為止的時間間隔
包括四部分:作業在外存后備隊列上等待作業調度的時間;進程在就緒隊列上等待進程調度的時間;進程在CPU上執行的時間;進程等待I/O操作完成的時間。(后三個會發生多次)
T=1/n[ΣTi]
W=1/n[ΣTi/Ts]
2)系統吞吐量高
吞吐量:單位時間內系統所完成的作業數
3)處理機利用率高
3.分時系統的目標
1)響應時間快
響應時間:從用戶通過鍵盤提交一個請求開始,知道屏幕上顯示出處理結果為止
2)均衡性
系統響應時間快慢與用戶所請求服務的復雜性相適應
4.實時系統的目標
1)截至時間的保證
截至時間:某任務必須開始執行的最遲時間,或必須完成的最遲時間
2)可預測性
作業與作業調度
(畫時空圖,模擬就緒隊列)
批處理系統中,以作業為基本單位從外存調入內存。
作業運行期間的每個加工步驟稱為一個作業步,編譯作業步,鏈接裝配作業步,運行作業步。
作業控制塊JCB
當一個作業進入系統時,“作業注冊”程序為其創建一個JCB,再根據作業類型,將它放到相應的作業后備隊列中等待調度,被調度到的作業將被裝入內存。
收容階段(后備狀態,不再內存中)-》運行階段-》完成階段
作業調度的主要任務:根據JCB中的信息,檢查系統中的資源能否滿足作業對資源的需求,以及按照一定的調度算法,從外存后備隊列中選取某些作業調入內存。
接納調度(接納多少個作業,接納哪些作業)
分時系統和實時系統不用作業調度,直接被送到內存。
先來先服務調度算法FCFS
很少作為主調度算法,經常把它與其它調度算法相結合使用
比如,在系統中按進程的優先級設置多個隊列,每個隊列基于FCFS來調度。
哪個作業先到達后備隊列/哪個進程先到達就緒隊列
非搶占
對長作業有利,對短作業不利
不會導致饑餓
短作業優先調度算法SJF
最短的平均等待時間,平均周轉時間
缺點:必須預知作業的運行時間;對長作業非常不利(饑餓現象);無法人機交互;未考慮作業的緊迫程度
也可以用于進程調度SPF
SJF,SPF是非搶占的
還有個搶占式的版本SRTN,如果新到的進程的時間比當前正在執行的進程的剩余時間小的話那就會發生搶占。
高響應比優先調度算法HRRN
既可用于作業又可以用于進程
動態優先級
隨著等待時間變長優先級變高
優先權(Rp)=(等待時間+要求服務時間)/要求服務時間=響應時間/要求服務時間
非搶占
不會饑餓
FCFS,SJF,HRRN都不能交互。
時間片輪轉RR
時間片用完之后是放在當前就緒隊列的隊尾,要注意有的進程可能還沒到。
用于進程調度(只有作業放入內存建立了相應進程后,才能被分配處理機時間片)
搶占式,時鐘中斷
公平,響應快用于分時系統
進程切換頻率高,開銷大;不區分任務緊急程度
不會饑餓
優先級調度算法PSA
基于作業的緊迫程度,由外部賦予作業相應的優先級,調度算法是根據該優先級進行調度的。
即可用于作業調度又可進程調度
搶占式,非搶占都有
會饑餓
進程調度
進程調度的時間:
當前運行的進程主動放棄處理機(進程正常終止;運行過程中發生異常;進程主動請求阻塞)
當前運行的進程被動放棄處理機(時間片用完;有更緊急的事(比如I/O中斷;有更高優先級的進程進入就緒隊列)
不能進行進程調度與切換的情況:在處理中斷的過程中;在操作系統內核程序臨界區中(注意并不是普通的臨界區);在原語過程中。
進程調度的任務:保存處理機的現場信息;按照某種算法選取進程;把處理器分配給進程。
排隊器:每當有一個進程轉變為就緒狀態時,排隊器便將它插入相應的就緒隊列。
分派器
上下文切換器:保存當前進程的上下文;裝入分派程序的上下文以便分派程序運行;移除分配程序上下文,把新選進程的CPU現場信息裝入
(現在一般靠硬件來實現,設置多組寄存器,切換上下文時只需改變指向寄存器的指針即可)
進程調度方式
1)非搶占方式(只允許進程主動放棄處理機)
不會因為時間中斷或任何其它原因去搶占當前正在運行進程的處理機
2)搶占方式
優先權原則;短進程優先原則;時間片原則(時間片輪轉)
輪轉調度算法RR
如果就緒隊列上n個進程,則每個進程每次大約都可以獲得1/n的處理機時間
系統根據FCFS策略,將所有就緒進程排成一個就緒隊列,設置每隔一定時間間隔產生一次中斷,激活系統中的進程調度程序,完成一次調度。
進程切換時機:正在運行的進程完成了;一個時間片用完(若進程尚未完成則送至就緒隊列隊尾,注意是當前就緒隊列的對尾!!)
時間片小-》頻繁的上下文切換-》增加系統開銷
時間片太長-》退化為FCFS
可取的時間片大小:略大于一次典型的交互所需要的時間,使大多數交互式進程能在一個時間片內完成,從而可獲得很小的響應時間。
題目一般是給出進程的到達時間與服務時間,然后計算每個進程的完成時間,周轉時間,帶權周轉時間以及平均周轉時間與帶權周轉時間。
優先級調度算法
(前面講的RR是默認所有進程的緊迫性都是一樣的所以用的FCFS)
1)非搶占式優先級調度算法
2)搶占式優先級調度算法
1)靜態優先級
一個整數,通常由進程類型,進程對資源的需求,用戶要求來決定
2)動態優先級
比如優先級隨等待時間增長而變高,隨運行時間推移而下降(可防止一個長作業長期壟斷處理機)
多隊列調度算法
將不同類型或性質的進程固定分配在不同的就緒隊列,不同的就緒隊列采用不同的調度算法,一個就緒隊列中的進程可以設置不同的優先級,不同的就緒隊列本身也可以設置不同的優先級。
多級反饋隊列
綜合了之前所有的調度算法的優點
用于進程調度
搶占式
不必先知道各種進程所需的執行時間
設置多個就緒隊列,為每個隊列賦予不同的優先級,不同的時間片大小,優先級越高的隊列時間片越小
每個隊列都采用FCFS算法。當新進程進入內存時先放到第一隊列的末尾,若輪到它執行第一個隊列的時間片后它沒完成就放到第二隊列末尾,以此類推。當進程被降到第n隊列后,該隊列就采用RR。
按隊列的優先級調度。搶占。如果處理機正在第i隊列為某進程服務,此時有新進程進入任一優先級較高的隊列,此時立即把正在運行的進程放到第i隊列的隊尾(注意還是當前隊列而不是像上面一樣放到下一級),然后把處理機分配給新到的高優先級進程。
若規定第一個隊列的時間片略大于多數人機交互所需要的時間,則可以滿足各種類型的用戶的需要,終端型用戶,短批處理作業用戶,長批處理作業用戶。
基于公平原則的的調度算法
以上介紹的幾種調度算法所保證的只是優先運行,并不保證作業占用處理機多長時間。
1.保證調度算法
明確的性能保證
如果在系統中有n個相同類型的進程同時運行,公平起見,須保證每個進程都獲得相同的處理機時間1/n。
1)跟蹤計算每個進程自創建以來已經執行的處理時間。x
2)計算每個進程應獲得的處理機時間,即自創建以來的時間除以n。y
3)計算進程獲得處理機時間的比率,即z=x/y
4)比較各進程獲得處理機時間的比率。
5)調度程序應選擇比率最小的進程,讓該進程一直運行直至超過最接近它的進程比率為止。(然后呢,如果A把B剛好超過了,那就會執行B,但B執行一下下不就又把A超過了?)
2.公平分享調度算法
使所有用戶都能獲得相同的處理機時間或所要求的時間比例
實時調度
所需信息:
就緒時間(某任務成為就緒狀態的起始時間。在周期任務的情況下,這個是事先預知的一串時間序列)
開始截止時間和完成截至時間
處理時間
資源要求
優先級
處理時間Ci,周期時間Pi需滿足:ΣCi/Pi<=N(N是處理機數量)
實時調度算法分類
硬實時調度算法/軟實時調度算法,
非搶占調度算法(非搶占式輪轉調度算法/非搶占優先調度算法)
/搶占調度算法(基于時鐘中斷的搶占式優先級調度算法/立即搶占的優先級調度算法)
最早截至時間優先算法EDF
截至時間越早,優先級越高
1.非搶占式調度方法用于非周期實時任務
2.搶占式調度方式用于周期實時任務
(如果新到的進程完成截至時間更早則正在執行的進程被搶占)
最低松弛度優先算法LLF(注意計算松弛的時機)
進程的松弛度=必須完成時間-其本身還需要運行的時間-當前時間
任務越緊急,優先級越高。
就緒隊列中,松弛度最低的任務排在最前面。
主要用于可搶占調度方式中
要注意進程是否已到達下一周期(比如A3提前結束了,則此時A4還沒到,所以不管松弛度誰大誰小都應該執行已進入下一周期的B2)P101