1. 程式人生 > >【作業系統】第三章 處理機排程與死鎖

【作業系統】第三章 處理機排程與死鎖

1.處理機排程相關基本概念
處理機排程:多道程式環境下,動態的把處理機分配給就緒佇列中的一個程序使之執行。
(1)作業進入系統駐留在外存的後備佇列上,再至調入記憶體執行完畢,可能要經歷下述三級排程。
高階排程(High Scheduling)(又稱作業排程或長程排程(Long-Term Scheduling),接納排程(Admission Scheduling))
主要在早期批處理階段,處理在外存上的作業。
接納多少作業——取決於多道程式度。
接納哪些作業——取決於採用的排程演算法。
系統執行並不一定存在高階排程

低階排程(Low Level Scheduling)(也稱為程序排程、微觀排程或短程排程(Short-Term Scheduling))
**是最基本的一種排程,在三種基本OS中都有。**執行頻率最高,演算法不能太複雜
程序排程方式: 排程的時機
—————————————————————————————————
非搶佔方式 程式完成;
發生某事件阻塞;
————————————————————————————————
搶佔方式 程式完成;
發生某事件阻塞;
新程序就緒;
PCB記錄系統中所有程序的有關情況


中級排程(Intermediate-Level Scheduling)(又稱交換排程或中程排程(Medium-Term Scheduling))

在這裡插入圖片描述(2)三類排程佇列模型
1)僅有程序排程的排程佇列模型
常見情況:分時系統。
排程物件:處於就緒狀態的程序。
組織形式:棧、樹或一個無序連結串列

分時系統中把就緒程序組織成FIFO佇列形式:按時間片輪轉方式執行。
每個程序在執行時按規定的時間片演算法,在給定時間片內任務有三種執行情況:
a.完成工作,釋放處理機進入完成狀態
b.未完成,將該任務再放入就緒佇列末尾
c.因某事件而被阻塞,被OS放入阻塞佇列
2)具有高階和低階排程的排程佇列模型
批處理系統中,還需要作業排程
3)同時具有三級排程的排程佇列模型
引入中級排程後,程序的狀態變化:
a.就緒狀態:分為記憶體就緒和外存就緒。
b.阻塞狀態:分為記憶體阻塞和外存阻塞。
中級排程使程序在上述狀態間變化,並使資料在內外存間互換。
(3)選擇排程方式和排程演算法的若干準則
1)面向使用者的準則


a.週轉時間短:
CPU執行用時Ts
總的等待時間Tw = 在後備佇列中等待 + 就緒佇列上等待+ 阻塞佇列中等待(等待I/O操作用時)
週轉時間T=Ts+Tw
帶權週轉時間W= T/Ts
平均週轉時間、平均帶權週轉時間(n個作業求平均)
b.響應時間快
c.均衡性
d.截止時間的保證
e優先權準則
2)面向系統的準則
系統吞吐量高:批處理系統的重要指標。
2.常用排程演算法
(1)排程的實質就是一種資源分配。
批處理系統為照顧為數眾多的短作業,應採用短作業優先的排程演算法;
分時系統為保證系統具有合理的響應時間,應採用輪轉法進行排程。
a.先來先服務排程演算法FCFS(First Come First Service) 不利於短作業

按先後順序進行排程。既可用於作業排程,也可用於程序排程。
b.短作業(程序)優先排程演算法SJF/SPF
1)優點:SJF/SPF排程演算法能有效的降低作業的平均等待時間,提高系統吞吐量。
分搶佔和非搶佔兩種方式
2)SJF/SPF的不足:
1. 對短作業有利,但同時造成了對長作業的不利。
2.由於作業(程序)的長短含主觀因素,不一定能真正做到短作業優先。
3.未考慮作業的緊迫程度,因而不能保證緊迫性作業(程序)的及時處理。
c.高優先權優先排程演算法HPF Highest Priority First
1)分兩種方式:
非搶佔式優先權演算法
搶佔式優先權演算法 關鍵點:新作業產生時
2)優先權的型別
靜態優先權:建立程序時確定,整個執行期間保持不變。一般利用某一範圍的一個整數來表示,又稱為優先數。
動態優先權:建立程序時賦予的優先權可隨程序的推進或隨其等待時間的增加而改變。
d.高響應比優先排程演算法HRRN Highest Response Raito Next
HRRN為每個作業引入動態優先權
優先權 =(等待時間+要求服務時間)/要求服務時間
= 響應時間 / 要求服務時間
c.基於時間片的輪轉排程演算法RR (Round Robin)
分時系統新需求:及時響應使用者的請求;採用基於時間片的輪轉式程序排程演算法。
(1)時間片輪轉演算法
a.將系統中所有的就緒程序按照FCFS原則,排成一個佇列。
b.每次排程時將CPU分派給隊首程序,讓其執行一個時間片。時間片的長度從幾個ms到幾百ms。
c.在一個時間片結束時,發生時鐘中斷。
d.排程程式據此暫停當前程序的執行,將其送到就緒佇列的末尾,並通過上下文切換執行當前就緒的隊首程序。
程序阻塞情況發生時,未用完時間片也要出讓CPU
(2)多級反饋佇列演算法FB (Multiple-level Feed Back Queue)
a.設定多個就緒佇列,各佇列有不同的優先順序,優先順序從第一個佇列依次降低。
b. 賦予各佇列程序執行時間片大小不同, 優先權越高,時間片越短。
當一個新程序進入記憶體,引發的排程過程
準備排程:先將它放入第一個佇列的末尾,按FCFS原則排隊等待排程。
IF時間片內完成,便可準備撤離系統;
IF時間片內未能完成,排程程式便將該程序轉入第二佇列的末尾等待再次被排程執行。
當第一佇列中的程序都執行完,系統再按FCFS原則排程第二佇列。在第二佇列的稍放長些的時間片內仍未完成,再依次將它放入第三佇列。
依次降到第n佇列後,在第n佇列中便採取按時間片輪轉的方式執行。

在這裡插入圖片描述
3.實時排程
(1)實時系統:指系統能夠在限定的響應時間內提供所需水平的服務
實時任務:具有明確時間約束的計算任務,有軟/硬,隨機/週期性之分。
硬實時任務:必須滿足任務對截止時間的要求
軟實時任務:聯絡著一個截止時間,但不嚴格,可偶爾錯過,不會對系統造成大的影響。
(2)實時排程演算法的分類:
根據實時任務的性質
硬實時排程演算法
軟實時排程演算法;

按排程方式
非搶佔排程演算法
搶佔排程演算法;

根據排程時間不同
靜態排程演算法
動態排程演算法。

多處理機環境下
集中式排程
分散式排程

(3)常用的幾種實時排程演算法:
a.最早截止時間優先EDF(Earliest Deadline First)演算法
根據任務的開始截止時間來確定任務的優先順序。截止時間越早,其優先順序越高。
b.最低鬆弛度優先LLF(Least Laxity First)演算法
鬆弛度= 截止完成時間 – 還需執行時間 - 當前時間
鬆弛度越小,越緊急
4.產生死鎖的原因和必要條件
(1)死鎖(Deadlock): 指程序之間無休止地互相等待!
飢餓(Starvation):指一個程序無休止地等待!
(2)產生死鎖的必要條件(必須四個同時具備)
a.互斥條件
b.請求和保持條件
c.不剝奪條件
d.環路等待條件
5.預防死鎖的方法
摒棄“請求和保持”條件
摒棄“不剝奪”條件
摒棄“環路等待”條件
6…避免死鎖
只要使系統始終處於安全狀態,便可避免發生死鎖。
不是所有的不安全狀態都是死鎖狀態。
銀行家演算法:
向量Available :(i1,i2,…,im),含m個元素,每個元素代表一類可利用的資源數目。
最大需求矩陣Max
已分配矩陣Allocation:nm,定義系統中每一程序已獲得的每類資源數量。
還需求的矩陣Need:n
m,表示每一程序尚需的各類資源數。
三者之間的關係:Max【i,j】= Allocation【i,j】+Need【i,j】
演算法過程:
程序Pi發出資源請求後,系統按下述步驟進行檢查:
首先是兩個基本判斷:
(1)IF Requesti[j]<= Need[i,j]
THEN 轉向步驟2;
ELSE 認為出錯,所需資源數超過宣佈的最大值(自我矛盾)
(2)IF Requesti[j]<= Available[j]
THEN 轉向步驟3;
ELSE 表示尚無足夠資源,Pi需等待(現實不滿足)
如果上面兩步判斷都通過了,進入實質的資源分析
(3)系統試探著把資源分配給程序Pi ,並修改相應資料結構的值(假設性操作):
Available【j】 =Available【j】 - Requesti【j】;
Allocation【i,j】=Allocation【i,j】+ Requesti【j】;
Need【i,j】= Need【i,j】 - Requesti【j】;
(4)系統執行安全性演算法,判斷新的資源分配狀態是否是安全的。
即:找一個安全序列,使這些程序按順序執行完)如果能夠找到,則將假設操作真正實施完成資源分配。
7.死鎖的檢測與解除
當發現程序死鎖時,便應立即把它們從死鎖狀態中解脫出來。常採用的方法是:
剝奪資源。從其他程序剝奪足夠數量的資源給死鎖程序以解除死鎖狀態。
撤銷程序。最簡單的是讓全部程序都死掉;溫和一點的是按照某種順序逐個撤銷程序,直至有足夠的資源可用,使死鎖狀態消除為止。
8.
(1)若要使當前執行程序總是優先順序最高的程序,則應選擇:可搶佔優先順序排程演算法。
(2)在分時系統中,程序排程經常採用:時間片輪轉排程演算法。
(3)不讓死鎖發生的策略可分為靜態和動態兩種,死鎖避免屬於:動態策略。
(4)預先靜態分配法可以破壞:佔有且等待條件。
(5)某系統中有3個併發程序,都需要同類資源4個,該系統絕對不會發生死鎖的最少資源個數是:
使3個併發程序都分配到了3個資源,在加1個便可 3*3+1=10