標籤(空格分隔): 進程調度 調度算法 操做系統算法
定義
: 操做系統管理了系統的有限資源,當有多個進程(或多個進程發出的請求)要使用這些資源時,由於資源的有限性,必須按照必定的原則選擇進程(請求)來佔用資源, 咱們稱之爲調度。spa
其目的是控制資源使用者的數量,選取資源使用者許可佔用資源或佔用資源。處理機調度的三個層次:操作系統
做業調度的算法也適用於進程調度線程
服務時間\(T_s\): 系統爲做業或進程提供服務的時間
週轉時間\(T_i\): 做業或進程被提交給系統到做業或進程完成爲止的時間間隔.
一般包括:設計
做業在外存後備隊列上等待調度的時間.
進程在就緒隊列上等待進程調度的時間.
進程在cpu上執行的時間.
進程等待I/O操做完成的時間.指針
平均週轉時間:
\[T = \frac{\sum_{i=1}^n T_i}{n}\]
帶權週轉時間: 做業的週轉時間與爲它提供服務的時間之比
\[W_i = \frac{T_i}{T_s}\]
平均帶權週轉時間:
\[W = \frac{\sum_{i=1}^n \frac{T_i}{T_s}}{n}\]對象
進程調度和切換程序是操做系統內核程序。當請求調度的事件發生後,纔可能會運行進程調度程序,當調度了新的就緒進程後,纔會去進行進程間的切換。理論上這三件事情應該順序執行,但在實際設計中,在操做系統內核程序運行時,若是某時發生了引發進程調度的因素,並不必定可以立刻進行調度與切換。隊列
現代操做系統中,不能進行進程的調度與切換的狀況有如下幾種狀況:進程
在處理中斷的過程當中:中斷處理過程複雜,在實現上很難作到進程切換,並且中斷處理是系統工做的一部分,邏輯上不屬於某一進程,不該被剝奪處理機資源。事件
進程在操做系統內核程序臨界區中:進入臨界區後,須要獨佔式地訪問共享數據,理論上必須加鎖,以防止其餘並行程序進入,在解鎖前不該切換到其餘進程運行,以加快該共享數據的釋放。
其餘須要徹底屏蔽中斷的原子操做過程當中:如加鎖、解鎖、中斷現場保護、恢復等原子操做。在原子過程當中,連中斷都要屏蔽,更不該該進行進程調度與切換。
若是在上述過程當中發生了引發調度的條件,並不能立刻進行調度和切換,應置系統的請求調度標誌,直到上述過程結束後才進行相應的調度與切換。
應該進行進程調度與切換的狀況有:
當發生引發調度條件,且當前進程沒法繼續運行下去時,能夠立刻進行調度與切換。若是操做系統只在這種狀況下進行進程調度,就是非剝奪調度。
當中斷處理結束或自陷處理結束後,返回被中斷進程的用戶態程序執行現場前,若置上請求調度標誌,便可立刻進行進程調度與切換。若是操做系統支持這種狀況下的運行調度程序,就實現了剝奪方式的調度。
進程切換每每在調度完成後馬上發生,它要求保存原進程當前切換點的現場信息,恢復被調度進程的現場信息。現場切換時,操做系統內核將原進程的現場信息推入到當前進程的內核堆棧來保存它們,並更新堆棧指針。內核完成重新進程的內核棧中裝入新進程的現場信息、更新當前運行進程空間指針、重設PC寄存器等相關工做以後,開始運行新的進程。
即FCFS調度算法, 既可用於做業調度, 也可用於進程調度. 系統按照做業到達的前後次序(優先考慮在就緒隊列中等待時間最長的做業)進行調度.
缺點:未考慮做業的緊迫程度, 只能順序運行
爲短做業而設立, 由於操做系統中大多爲短做業.系統在做業運行時, 選出運行時間最短的做業將其調入內存.
缺點:
PSA算法基於做業的緊迫程度, 由外部賦予做業相應的優先級, 根據做業優先級進行調度.
HRRN算法即考慮了做業的等待時間, 又考慮了做業運行時間. 爲沒有做業引入一個動態優先級:
優先權 = (等待時間+要求服務時間) / 要求服務時間
可縮寫爲:
R = 響應時間 / 要求服務時間
特色:
原理: 系統根據FCFS策略將全部的就緒進程排成一個就緒隊列, 並設置每隔一段時間產生依次中斷, 激活系統中的進程調度程序, 完成依次調度, 將cpu分配給新的隊首進程(或新到達的緊迫進程).
進程切換
注意:時間片選取太小, 則將頻繁的執行進程調度和進程長下文切換, 增長系統開銷; 時間片選取過長, 則RR算法退化爲FCFS算法, 沒法知足短做業和交互式用戶需求. 時間片應選取略大於依次典型的交互所須要的時間, 是大多數進程在一個時間片內完成.
實時系統是指系統能及時響應外部事件的請求並及時處理這些請求.基於這一特性, 實時系統在工業(武器)控制, 多媒體等系統中常見.
實時系統中通分爲存在一個截止時間, 硬實時任務(HRT)要求在開始截止時間前必須執行, 在結束截止時間前必須結束. 軟實時任務同上, 但並不嚴格.
在實時系統中有兩類算法值得注意:最先截止時間優先算法(Earliest Deadline First)和最低鬆弛度優先算法(Least Laxity First).兩類算法均可用搶佔式和非搶佔式調度, 但後者經常使用於搶佔式調度.
在m個週期性的實時調度中, 每一個實時任務的處理時間\(C_i\), 週期時間\(P_i\), 在但處理機的狀況下, 需知足條件:$\sum_{i=1}^m\frac{C_i}{P_i} \(小於1; 多處理機條件下, 須知足條件\)\sum_{i=1}^m\frac{C_i}{P_i} $小於N, N爲處理機數量.
該算法在實時系統中根據任務的截止時間肯定其優先級.
非搶佔式
搶佔式
在該法中根據任務的緊急程度(鬆弛程度)賦予其優先級, 越緊急的任務優先級越高.
任務的鬆弛程度 = 必須完成時間 - 其自己運行時間 - 當前時間
系統的任務按照鬆弛度排成一個就緒隊列, 鬆弛度低的任務排在隊列前面, 即調度程序優先執行.