1、進程調度的任務算法
(1)保存處理機的現場信息。在進行調度時首先要保存當前的處理機的現場信息。ide
(2)按某種算法選取進程。調度程序按某種算法選取進程,將其狀態改成運行狀態,並準備把處理機分配給它。性能
(3)把處理機分配給進程。由分派程序把處理機分派給該進程,此時須要將選中的進程的進程控制塊內有關處理機現場的信息裝入處理機相應的各個寄存器中,把處理機的控制權予於該進程,讓它在上次的斷電出恢復。spa
2、進程調度算法操作系統
輪轉調度算法blog
該算法採用剝奪策略。讓就緒進程以FCFS 的方式按時間片輪流使用CPU 的調度方式,即將系統中全部的就緒進程按照FCFS 原則,排成一個隊列,每次調度時將CPU 分派給隊首進程,讓其執行一個時間片,時間片的長度從幾個ms 到幾百ms。在一個時間片結束時,發生時鐘中斷,調度程序據此暫停當前進程的執行,將其送到就緒隊列的末尾,並經過上下文切換執行當前的隊首進程,進程可 以未使用完一個時間片,就出讓CPU(如阻塞)。時間片輪轉調度算法的特色是簡單易行、平均響應時間短,但不利於處理緊急做業。隊列
顯然,輪轉法只能用來調度分配一些能夠搶佔的資源。這些能夠搶佔的資源能夠隨時被剝奪,並且能夠將它們再分配給別的進程。CPU是可搶佔資源的一種。但 打印機等資源是不可搶佔的。因爲做業調度是對除了CPU以外的全部系統硬件資源的分配,其中包含有不可搶佔資源,因此做業調度不使用輪轉法。在輪轉法中, 時間片長度的選取很是重要。首先,時間片長度的選擇會直接影響到系統的開銷和響應時間。若是時間片長度太短,則調度程序搶佔處理機的次數增多。這將使進程 上下文切換次數也大大增長,從而加劇系統開銷。反過來,若是時間片長度選擇過長,例如,一個時間片能保證就緒隊列中所需執行時間最長的進程能執行完畢,則 輪轉法變成了先來先服務法。時間片長度的選擇是根據系統對響應時間的要求和就緒隊列中所容許最大的進程數來肯定的。進程
在輪轉法中,加入到就緒隊列的進程有3種狀況,一種是分給它的時間片用完,但進程還未完成,回到就緒隊列的末尾等待下次調度去繼續執行。另外一 種狀況是分給該進程的時間片並未用完,只是由於請求I/O或因爲進程的互斥與同步關係而被阻塞。當阻塞解除以後再回到就緒隊列。第三種狀況就是新建立進程 進入就緒隊列。若是對這些進程區別對待,給予不一樣的優先級和時間片,從直觀上看,能夠進一步改善系統服務質量和效率。例如,咱們可把就緒隊列按照進程到達 就緒隊列的類型和進程被阻塞時的阻塞緣由分紅不一樣的就緒隊列,每一個隊列按FCFS原則排列,各隊列之間的進程享有不一樣的優先級,但同一隊列內優先級相同。 這樣,當一個進程在執行完它的時間片以後,或從睡眠中被喚醒以及被建立以後,將進入不一樣的就緒隊列。內存
2. 優先級調度算法ci
在時間片輪轉調度算法中,作了一個隱含的假設,即系統中全部的進程時間緊迫性是相同的。但實際並不是如此,爲了知足實際的需求,在進程調度算法中引入優先級,而造成優先級調度算法。
優先級調度算法核心是肯定進程的優先級。首先,系統或用戶按某種原則爲進程指定一個優先級來表示該進程所享有的調度優先權。肯定優先級的方法較多,通常可分爲 兩類,即靜態法和動態法。靜態法根據進程的靜態特性,在進程開始執行以前就肯定它們的優先級,一旦開始執行以後就不能改變。動態法則否則,它把進程的靜態 特性和動態特性結合起來肯定進程的優先級,隨着進程的執行過程,其優先級不斷變化。
<1>進程的靜態優先級肯定最基本的方法是按照進程的類型給予不一樣的優先級。例如,在有些系統中,進程被劃分爲系統進程和用戶進程。系統進程享有比用戶進程高 的優先級;對於用戶進程來講,則能夠分爲:I/O繁忙的進程、CPU繁忙的進程、I/O與CPU均衡的進程和其餘進程等。
基於靜態優先級的調度算法實現簡單,系統開銷小,但因爲靜態優先級一旦肯定以後,直到執行結束爲止始終保持不變,從而系統效率較低,調度性能不高。如今的操做系統中,若是使用優先級調度的話,則大多采用動態優先級的調度策略。
<2>進程的動態優先級通常能夠根據如下兩個方面來肯定:
(1)根據進程佔有CPU時間的長短來決定。一個進程佔有處理機的時間愈長,則在被阻塞以後再次得到調度的優先級就越低。反之,其得到調度的可能性就會越大。
(2)根據就緒進程等待CPU的時間長短來決定。一個就緒進程在就緒隊列中等待的時間越長,則它得到調度選中的優先級就越高。
因爲動態優先級隨時間的推移而變化,系統要常常計算各個進程的優先級,所以,系統要爲此付出必定的開銷。
優先級優先調度算法用於多道批處理系統中較好,但它使得優先級較低的進程等待時間較長,這對於分時系統中要想得到較好的響應時間是不容許的,因此在分時系統中多采用時間片輪轉法來進行進程調度。
3.多隊列調度算法
在進程調度時,因爲系統設置一個進程的就緒隊列,即低級調度算法是固定的,單一的,沒法知足系統中不一樣用戶對進程調度策略的不一樣要求,在多處理機系統中,這種單一的調度策略實現機制的缺點更突出,多隊列調度算法可以在必定的程度上彌補這一缺點。
該算法將系統中的進程就緒隊列一個拆分紅若干個。將不一樣類型或性質的進程固定分配在不一樣在不一樣的就緒隊列,不一樣的就緒隊列採用不一樣的調度算法,就緒隊列中的進程可設不一樣的優先級。所以,系統針對不一樣用戶進程的需求,很容易提供多種調度策略。
4.多級反饋隊列調度算法
多級反饋隊列調度算法則沒必要事先知道各類進程所需的執行時間,並且還能夠知足各類類型進程的須要,於是它是目前被公認的一種較好的進程調度算法。
(1) 設置多個就緒隊列。在系統中設置多個就緒隊列,併爲各個隊列賦予不一樣的優先級。第一個隊列的優先級最高,第二個隊列次之,其他各隊列的優先權逐個下降。該算法賦予各個隊列中進程執 行時間片的大小也各不相同,在優先權愈高的隊列中,爲每一個進程所規定的執行時間片就愈小。例如,第二個隊列的時間片要比第一個隊列的時間片長一倍,……, 第i+1個隊列的時間片要比第i個隊列的時間片長一倍。
(2) 每一個隊列都採用FCFS算法。當一個新進程進入內存後,首先將它放入第一隊列的末尾,按FCFS原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,即可準備撤離系統;如 果它在一個時間片結束時還沒有完成,調度程序便將該進程轉入第二隊列的末尾,再一樣地按FCFS原則等待調度執行;若是它在第二隊列中運行一個時間片後仍未 完成,再依次將它放入第三隊列,……,如此下去,當一個長做業(進程)從第一隊列依次降到第n隊列後,在第n隊列便採起按時間片輪轉的方式運行。
(3) 按隊列優先級調度。僅當第一隊列空閒時,調度程序才調度第二隊列中的進程運行;僅當第1~(i-1)隊列均空時,纔會調度第i隊列中的進程運行。若是處理機正在第i隊列中爲 某進程服務時,又有新進程進入優先權較高的隊列(第1~(i-1)中的任何一個隊列),則此時新進程將搶佔正在運行進程的處理機,即由調度程序把正在運行 的進程放回到第i隊列的末尾,把處理機分配給新到的高優先權進程。