1. 程式人生 > >作業系統是如何排程程序的呢

作業系統是如何排程程序的呢

(一) 程序排程的任務:

(1)儲存處理機的現場資訊,如程式計數器、多個通用暫存器中的內容

(2)按照某種演算法選取程序,將其狀態改為執行狀態

(3)把處理器分配給程序,由分派程式把處理器分配給該程序,將程序控制塊內有關處理器現場的資訊裝入處理器相應的各個暫存器中,把處理器的控制權交給該程序,讓他從上次斷點處恢復執行

(二) 程序排程機制:

a)       排隊器

將所有就緒的程序按照一定的策略排成一個或多個佇列,以便排程程序能最快找到他們。

b)       分派器

取出程序排程程式選中的程序,程序間上下文切換,分配處理器

c)       上下文切換器

儲存當前程序的上下文資訊,儲存到相應單元,裝入分派程式的上下文;移出分派程式的上下文裝入新選程序的現場資訊。

(三) 程序排程方式:

a)       非搶佔式

一旦處理機分配給某個程序後,就一直讓其執行直到完成或者發生某事件而阻塞(如I/O請求)

b)       搶佔式

允許排程程式根據某種規則,暫停某個正在執行的程序,由以下規則:優先權原則:優先順序高的搶佔當前程序;短程序優先原則;時間片原則:各程序按時間片輪轉執行時,當正在執行的程序的時間片用完後,便停止該程序的執行而重新進行排程

(四) 程序排程演算法:

a)       輪轉排程演算法

基於時間片輪轉,系統將所有的就緒程序按照FCFS(先入先出)策略排成一個就緒佇列,系統每隔一段時間產生一次中斷,去啟用程序排程進行排程,把cpu分給隊首程序,執行一個時間片後再進行排程,保證佇列中的所有程序在確定時間內都能獲得一個時間片的處理機時間。

切換時機:(1)時間片未用完,程序便完成;(2)時間片用完,終端處理程式被啟用,程序若未完成,送完佇列尾部。

b)       優先順序排程演算法

(1)    非搶佔式

(2)    搶佔式

更高優先順序的程序可搶斷當前程序

c)       多佇列排程演算法

將就緒佇列拆分為若干個,不同型別的程序固定分配在不同的就緒佇列,不同的佇列採用不同的排程演算法,同一佇列的程序可設定不同的優先順序。

d)       多級反饋佇列排程演算法

若未指明程序長度,短程序優先和基於長度的搶佔式排程演算法都無法使用。而多級反饋佇列排程演算法事先不需知道各個程序所需的執行時間。

(1)    排程機制

設定多個就緒佇列,每個佇列賦予不同的優先順序(遞減);每個佇列採用FCFS演算法,新程序進入時首先放入第一佇列末尾,若第一個時間結束未完成,將其轉入第二佇列末尾…….;按佇列優先順序排程,僅當前一佇列空閒時才呼叫下一佇列。

e)       基於公平原則的排程演算法

1)     保證排程演算法

有n個相同型別的程序,保證每個程序都獲得相同的處理機時間1/n

過程:跟蹤每個程序自建立以來已經執行的處理時間;計算每個程序應獲得的時間,計算程序獲得處理機的比率,程序實際執行的處理時間比上應獲得處理機時間;比較各程序獲得的處理機時間比率;排程程式選擇比率小的程序分配處理機。

2)     公平分享排程演算法

所有使用者獲得相同的處理機時間,或所要求的時間比例,比如使用者1:ABCD,使用者2:E,執行以下排程序列:AEBECEDE…….;或希望使用者1獲得處理機的時間是使用者2的2倍,則:ABECDE……