計算機作業系統 (第四版湯小丹老師) 複習筆記第三章

淘淘是隻大憨狗發表於2020-12-06

教材為西安電子科技大學 湯小丹老師 第四版

3.1處理機排程的層次和排程演算法的目標

人們一般都認為, 在計算機系統中,中央處理機CPU是最重要的資源。每一個提交給計算機的任務都必須使用CPU。 CPU管理的主要任務是對處理機時間進行分配,也就是按照一定的策略將CPU執行時間分配給各個使用者以滿足使用者的要求,同時要考慮到充分利用CPU來提高它的效率。這就是處理機排程的主要功能。

3.1.1處理機排程的層次

高階排程:即作業排程或巨集觀排程或長程排程。
其任務是對那些提交給系統後被收容的作業, 按照一定策略選擇出某些作業, 為其分配記憶體等必要的資源, 建立與之對應的程式(可能是多個程式), 並將程式的PCB表放入就緒佇列中, 使其具備參與競爭使用CPU的權利。

高階排程主要用於多道批處理系統中。

低階排程:即程式排程或微觀排程或短程排程。
其任務是在進入記憶體並處於就緒佇列的程式中, 確定哪個程式真正獲得CPU及其使用CPU的時間。用執行指標指向選中程式的PCB表,將它從就緒佇列移出並重布現場,使其執行。

中級排程:又稱為記憶體排程或交換排程或中程排程。
將就緒狀態細化為記憶體就緒和外存就緒狀態,阻塞狀態細化為記憶體阻塞和外存阻塞狀態後,中級排程完成程式在記憶體與外存之間的對換。其任務是週期性地將那些在記憶體中暫時不用的程式換出並放到外存,而將那些在外存上需要執行的程式換入到記憶體。

2、處理機排程演算法的目標
在作業系統設計中如何選擇排程方式和演算法,通常取決於作業系統的型別及其設計目標。

處理機排程演算法的共同目標
(1)資源利用率:系統最重要的資源就是CPU。 CPU 的利用率 = CPU 的有效工作時間 / (CPU 的有效工作時間 + CPU 空閒等待時間)

(2)公平性:公平性是指所有的程式都獲得合理的CPU時間, 不會發生飢餓現象。但公平是相對的。
(3)平衡性:保持系統資源使用的平衡性。
(4)策略強制執行:如安全策略

批處理系統的目標

(1)平均週轉時間短
(2)系統吞吐量高, 吞吐量:單位時間內所完成的作業數,跟作業本身特性和排程演算法都有關係。
(3)處理機利用率高, 對於大、中型計算機尤為重要(CPU昂貴) ,故排程選擇計算量大的作業可提高CPU的利用率。

分時系統的目標
(1)響應時間快: 響應時間是從使用者從鍵盤提交一個請求開始,直到螢幕上顯示出處理結果為止的一段時間間隔。
(2)均衡性: 均衡性是指系統響應時間的快慢應與使用者所請求服務的複雜性相適應。 通常,使用者對較複雜的任務的響應時間允許較長。

實時系統的目標
(1)截止時間的保證, 截止時間是指某任務必須開始執行的最遲時間,或必須完成的最遲時間。 實時任務又分為硬實時任務與軟實時任務之分。
(2)可預測性, 實時系統中可預測性非常重要,如視訊播放應具有連續性,應具有提前下載的功能,提高併發性。

3.2作業與作業排程

3.2.1批處理系統中的作業

作業和作業步
1)作業:使用者在一次解題過程中或一個事務處理中要求計算機系統所作工作的總和,它是使用者向計算機系統提交一項工作(任務)的基本單位。
–使用者的觀點:在一次業務處理過程中,從輸入程式和資料到輸出結果的全過程。
–系統的觀點(針對作業進行資源分配):作業由程式及資料 (作業體)和作業說明書(作業控制語言)構成。
2)作業步:是在一個作業的處理過程中,計算機所做的相對獨立的工作。
3)作業流:批量系統中需要將一批作業依次輸入到輔助儲存器中,形成作業流。

作業控制塊(JCB,Job ControI Block)

  • 預輸入程式從輸入裝置上接收作業資訊(即作業說明書、程式 和資料),把作業組織成檔案送到磁碟上的特定空間(稱為輸 入井),同時,系統應把所錄入的作業進行登記,登記在一張 作業控制表中。每一個進入系統的作業均佔據作業控制表中的 一個表項,該表項稱之為作業控制塊。此時,作業建立完成。
  • JCB包含了對作業進行管理控制所必需的資訊。作業控制塊是 作業在系統中存在的標誌。作業控制塊的內容也是作業排程的 依據。
  • 從系統管理的角度看,作業的建立過程就是申請一個空白的作 業控制表項,填寫作業控制塊。

作業執行的三個階段和三種狀態
作業從進入系統到執行結束,通常要經歷收容、執行、 和完成三個階段。
收容階段:使用者作業從提交到放入作業後備佇列中,此時作業為後備狀態;
執行階段:作業被排程進記憶體,建立程式控制塊,進入就緒佇列直至執行結束,此期間作業均為執行狀態;
完成階段:當作業完成或異常結束時,進入完成階段, 此時作業為完成狀態,等待回收資源。

3.2.2作業排程的主要任務

作業排程的主要任務是根據JCB中的資訊,檢查資源需求, 並按一定的排程演算法,從外存的後備佇列中選取某些作業到 記憶體中來,為其建立程式。故作業排程也稱為接納排程。
作業排程的主要工作:
(1)接納多少個作業:從後備佇列中選取多少作業進入記憶體,取決於多道程式度;
(2)接納那些作業:選擇後備佇列中的那些作業進入記憶體, 取決於排程演算法。
作業排程的目標是使作業執行最大限度地發揮各種資源的利用率,並保持系統內各種活動的充分並行。

3.2.3先來先服務和短作業優先排程演算法

先來先服務排程演算法(first-come first-served,FCFS)

短作業(程式)優先排程演算法SJF,是指對短作業或短程式優先排程的演算法。它們可以分別用於作業排程和程式排程。
短作業優先(SJF)的排程演算法,是從後備佇列中選擇一個或若干個估計執行時間最短的作業,將它們調入記憶體執行。
短程式優先(SPF)排程演算法,則是從就緒佇列中選出一估計執行時間最短的程式,將處理機分配給它, 使它立即執行並一直執行到完成,或發生某事件而被 阻塞放棄處理機時,再重新排程。

SJF排程演算法也存在不容忽視的缺點:
(1) 該演算法對長作業不利。
(2) 該演算法完全未考慮作業的緊迫程度,因而不能保證緊迫性作業(程式)會被及時處理。
(3) 由於作業(程式)的長短只是根據使用者所提供的估計執行時間而定的,而使用者又可能會有意或無意地縮短其作業的估計執行時間,致使該演算法不一定能真正做到短作業優先排程。

3.2.4優先順序排程演算法和高響應比優先排程演算法

優先順序排程演算法(priority-scheduling algorithm,PSA)
先來先服務的優先順序就是作業等待時間的長短;
短作業的優先順序是指作業執行時間的長短。
通常優先順序是指依據作業的重要緊迫程度而設定的優先順序,級別高的作業可以獲得優先排程。

高響應比優先排程演算法(Highest Response ratio Next,HRRN)
優先權的變化規律可描述為:
優先權 = (等待時間 + 要求服務時間) / 要求服務時間

由於等待時間與服務時間之和,就是系統對該作業的響應 時間,故該優先權又相當於響應比RP。據此,又可表示為:
優先權 = (等待時間 + 要求服務時間) / 要求服務時間 = 響應時間 / 要求服務時

由公式可知:
(1) 如果作業的等待時間相同,則要求服務的時間愈短,其優先權愈高,因而該演算法有利於短作業。
(2) 當要求服務的時間相同時,作業的優先權決定於其等待時間,等待時間愈長,其優先權愈高,因而它實現的是先來先服務。
(3) 對於長作業,作業的優先順序可以隨等待時間的增加而提高,當其等待時間足夠長時,其優先順序便可升到很高, 從而也可獲得處理機。

3.3程式排程

3.3.1程式排程的任務、機制和方式

程式排程的任務

  • 儲存現場
  • 按某種演算法選取程式
  • 將處理器分配給程式

程式排程機制

  • 排隊器:將就緒程式插入到相應的就緒佇列
  • 分派器:從就緒佇列挑選程式執行
  • 上下文切換:當前程式->分派器->新選程式 (為節省切換時間,可採用2組或多組暫存器)

程式排程方式(Low Level Scheduling)
1)非搶佔方式(Non-preemptive Mode)
在採用非搶佔排程方式時,可能引起程式排程的因素可歸結 為這樣幾個:
① 正在執行的程式執行完畢, 或因發生某事件而不能再繼續執行;
② 執行中的程式因提出I/O請求而暫停執行;
③ 在程式通訊或同步過程中執行了某種原語操作,如P操作 (wait操作)、Block原語、Wakeup原語等。
這種排程方式的優點是實現簡單、系統開銷小,適用於大多數的批處理系統環境。但它難以滿足緊急任務的要求——立即執行,因而可能造成難以預料的後果。顯然,在要求比較嚴格的實時系統中,不宜採用這種排程方式。

2)搶佔方式(Preemptive Mode)
搶佔的原則有:
(1) 優先權原則。
(2) 短程式優先原則。
(3) 時間片原則。

3.3.2輪轉排程演算法

輪轉法的基本原理

在早期的時間片輪轉法中,系統將所有的就緒程式按先來先 服務的原則,排成一個佇列,每次排程時,把CPU分配給隊首程式,並令其執行一個時間片。時間片的大小從幾ms到幾 百ms。當執行的時間片用完時,由一個計時器發出時鐘中斷 請求,排程程式便據此訊號來停止該程式的執行,並將它送往就緒佇列的末尾;然後,再把處理機分配給就緒佇列中新 的隊首程式,同時也讓它執行一個時間片。這樣就可以保證 就緒佇列中的所有程式,在一給定的時間內,均能獲得一時間片的處理機執行時間。

程式切換時機
程式切換分為兩種情況:

  1. 時間片未完但程式已結束,可啟用排程程式;
  2. 時間片耗盡但程式未結束,也可啟用排程程式。

時間片大小的確定
時間片小:有利於短作業,中斷頻繁,系統開銷大。
時間片大:程式可在一個時間片內執行完,就成為FCFS,不利於互動。

故時間片應略大於一次典型的互動所需要的時間。
這樣可使大多數互動程式可在一個時間片內完成。

3、優先順序排程演算法
優先順序排程演算法的型別

1)非搶佔式優先權演算法
在這種方式下,系統一旦把處理機分配給就緒佇列中 優先權最高的程式後,該程式便一直執行下去,直至完成; 或因發生某事件使該程式放棄處理機時,系統方可再將處 理機重新分配給另一優先權最高的程式。

2)搶佔式優先權排程
在採用這種排程演算法時,是每當系統中出現一個新的就緒進 程i時,就將其優先權Pi與正在執行的程式j的優先權Pj進行比較。如果Pi≤Pj,原程式Pj便繼續執行;但如果是Pi>Pj, 則 立即停止Pj的執行,做程式切換,使i程式投入執行。顯然,這種搶佔式的優先權排程演算法,能更好地滿足緊迫作業的要求,故而常用於要求比較嚴格的實時系統中。

優先順序的型別
1)靜態優先順序
靜態優先順序是在建立程式時確定的,且在程式的整個執行期間保持不變。一般地,優先權是利用某一範圍內的一個整數來表示的,例如,0-7或0-255中的某一整數, 又把該整數稱為優先數。

確定程式優先順序的依據有如下三個方面:
程式型別:系統程式高於使用者程式。
程式對資源的需求:需求少的高。
使用者要求:重要或緊迫的高。

2)動態優先順序
在建立程式時所賦予的優先權,是可以隨程式的推進或隨其等待時間的增加而改變的,以便獲得更好的排程效能。

例如,我們可以規定,在就緒佇列中的程式,隨其等待時間的增長,其優先權以速率a提高。若所有的程式都具有相同的優先權初值,則顯然是最先進入就緒佇列的程式,將因其動 態優先權變得最高而優先獲得處理機,此即FCFS演算法。

若所有的就緒程式具有各不相同的優先權初值,那麼,對於優先權初值低的程式,在等待了足夠的時間後,其優先權便可能升為最高,從而可以獲得處理機。當採用搶佔式優先權 排程演算法時,如果再規定當前程式的優先權以速率b下降,則 可防止一個長作業長期地壟斷處理機。

3.3.4多佇列排程演算法

一個就緒佇列無法滿足不同使用者對程式排程策略的不同要求,多處理機系統該缺點更加突出。在採用這種排程演算法時,將不同型別或性質的程式固定分配在不同的就緒佇列,分別採用不同的排程演算法。
在多處理機系統中,可以為每個CPU設定一個就緒 佇列,每個處理機可以採用不同的排程演算法。

3.3.5多級反饋佇列

排程機制
(1) 應設定多個就緒佇列,併為各個佇列賦予不同的優先順序。
第一個佇列的優先順序最高,第二個佇列次之,其餘各佇列的優先權逐個降低。該演算法賦予各個佇列中程式執行時間片的大小也各不相同,在優先權愈高的佇列中,為每個程式所規定的執行時間片就愈小。例如,第二個佇列的時間片要比第一個佇列的時間片長一倍,……,第 i +1個佇列的時間片要比 第i個佇列的時間片長一倍

(2) 每個佇列都採用FCFS演算法
當一個新程式進入記憶體後,首先將它放入第一佇列的末尾,按FCFS原則排隊等待排程。當輪到該程式執行時, 如它能在該時間片內完成,便可準備撤離系統;如果它在一個時間片結束時尚未完成,排程程式便將該程式轉入第 二佇列的末尾,再同樣地按FCFS原則等待排程執行;如果它在第二佇列中執行一個時間片後仍未完成,再依次將它 放入第三佇列,……,如此下去,當一個長作業(程式)從第一佇列依次降到第n佇列後,在第n佇列中便採取按時間片輪轉的方式執行。

(3) 按佇列優先順序排程
僅當第一佇列空閒時,排程程式才排程第二佇列中的程式執行; 僅當第1-(i-1) 佇列均空時,才會排程第 i 佇列中的程式執行。如果處理機正在第i佇列中為某程式服務時,又有新程式進入優先權較高的佇列(第1~(i-1) 中的任何一個佇列),則此時新程式將搶佔正在執行程式的處理機,即由排程程式把正在執行的程式放回到第i隊 列的末尾,把處理機分配給新到的高優先權程式。

多級反饋佇列排程演算法的效能 多級反饋佇列排程演算法具有較好的效能,能很好地滿足 各種型別使用者的需要。

• 終端型作業
– 作業通常較小,作業(程式)在第一佇列所規定的時間片內完成;
• 短批處理作業
– 很短的批處理型作業,在第一佇列中執行一個時間片即可完成。 對於稍長的作業,通常也只需在第二佇列和第三佇列各執行一 個時間片即可完成,其週轉時間仍然較短。
• 長批處理作業
– 對於長作業,它將依次在第1,2,…,n個佇列中執行,然後再 按輪轉方式執行,使用者不必擔心其作業長期得不到處理。

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

保證排程演算法
該演算法要做到排程的公平性,比如處理機分配的公平性,系統中若有n個程式,每個程式都可獲得1/n 的CPU時間。此時系統應具有如下功能:

  1. 跟蹤計算每個程式已獲得的CPU時間;
  2. 計算每個程式應該獲得的CPU時間,自建立以來的時間除以n;
  3. 計算每個程式獲得的CPU時間的比率,實際服務時間與應該獲得的時間之比;
  4. 比較各個程式獲得的CPU時間的比率;
  5. 排程比率最小的程式執行,直至超過最接近它的程式比率為止。

公平分享排程演算法
上面演算法對程式排程公平,若使用者啟用的程式數量不同,如A使用者有6個程式,B使用者有2個程式,時間輪轉法就會對程式少的使用者不公平。
若對使用者公平,就應強制排程式列,如: A1 A2 B1 B2 A3 A4 B1 B2 A5 A6 B1 B2

3.4實時排程

3.4.1實現實時排程的基本條件

提供必要的資訊
(1)就緒時間
(2) 開始截止時間和完成截止時間。
(3) 處理時間。
(4) 資源要求。
(5) 優先順序。

系統處理能力強

採用搶佔式排程機制
• 含有硬實時任務的實時系統中,廣泛採用搶佔機制。
• 小型實時系統,如果能預知任務的開始截止時間,則 對實時任務的排程可採用非搶佔排程機制。

具有快速切換機制
• 對外部中斷的快速響應能力。
• 快速的任務分派能力。

3.4.2實時排程演算法的分類

非搶佔式排程演算法
1)非搶佔式輪轉排程演算法
工業生產的群控系統中,由一臺計算機控制若干個相同的 (或類似的)物件,為每一個被控物件建立一個實時任務,並 將它們排成一個輪轉佇列。
2)非搶佔式優先排程演算法
實時任務到達時,把它們安排在就緒佇列的隊首,等待當 前任務自我終止或執行完成後才能被排程執行。

搶佔式排程演算法
在要求較嚴格的(響應時間為數十毫秒以下)的實時系統中, 應採用搶佔式優先權排程演算法。
1)基於時鐘中斷的搶佔式優先權排程演算法
• 不立即搶佔當前任務的處理機,而是等到時鐘中斷到來時,排程程式才 剝奪當前任務的執行,將處理機分配給新到的高優先權任務。排程延遲可降為幾十毫秒至幾毫秒
2)立即搶佔的優先權排程演算法
• 立即剝奪當前任務的執行,把處理機分配給請求中斷的緊迫任務。排程延遲降低到幾毫秒至100微秒。

3.4.3最早截止時間優先即EDF(Earliest Deadline First)演算法

非搶佔式排程方式用於非週期實時任務

搶佔式排程方式用於週期實時任務

3.4.4最低鬆弛度優先LLF(Least Laxity First)演算法

根據任務緊急(或鬆弛)的程度,來確定任務的優先順序。

3.4.5優先順序倒置(priority inversion problem)

優先順序倒置的形成
系統執行中,高優先順序程式或執行緒有可能被低優先順序進 程或執行緒延遲或阻塞。

3.5 死鎖概述

3.5.1資源的問題

可以引起死鎖的主要是:

  • 需要採用互斥訪問方式的方法
  • 不可以被搶佔的資源
    即在前面介紹的臨界資源。
  1. 可重用性資源和消耗性資源。
  2. 不可搶佔性資源和不可講佔性資源,
3.5.2計算機系統中的死鎖

死鎖的起因,通常是源於多個程式對資源的爭奪,不僅對不可搶佔資源進行爭奪時,會引起死鎖,而且對可消耗資源進行爭奪時,也會引起死鎖,

  1. 競爭不可搶佔性資源引起死鎖
  2. 競爭可消耗性資源引起的死鎖
  3. 程式推進順序不當引起死鎖:程式在執行過程中,對資源進行申請和釋放的順序是否合法,也是在系統中是否會產生死鎖的一個重要因素,
3.5.3死鎖的定義,必要條件和處理方法
  1. 死鎖的定義,如果一組程式中的每一個程式都在等待僅由該組程式中的其他程式才能引發的事件,那該組程式死鎖的。
  2. 產生死鎖的必要條件,
  • 互斥條件
  • 請求和保持條件
  • 不可搶佔條件
  • 迴圈等待條件,環路等待條件,
  1. 處理死鎖的方法,目前處理,死鎖的方法可以歸結為四種,
    一,預防死鎖,
    二,避免死鎖,
    三,檢測死鎖,
    四,解除死鎖

3.6 預防死鎖

預防思索是通過破壞產生死鎖的四個必要條件中的一個或幾個

3.6.1 破壞請求和保持條件: 為了能破壞請求和保持條件,系統必須做到,當一個程式請求資源時,它不能持有不可搶佔資源。可以通過兩種不同的協議實現,

第一種協議,該協議規定,所有程式在開始之前必須一次性申請其在整個執行過程中所需要的全部資源。

第二種協議,該協議是對第一種協議的改進,它允許一個程式只獲得執行初期所需的資源後便開始執行。

3.6.2破壞不可搶佔條件: 當一個已經保持了某些不可被搶佔資源的程式, 提出新的資源請求而得不到滿足時,它必須釋放已經保持的所有資源。待以後需要時再進行重新申請,
3.6.3破壞迴圈等待條件

3.7避免死鎖

避免死鎖同樣是屬於事先預防的策略,但並不是事先採取某種限制措施,破壞產生死鎖的必要條件,而是在資源動態分配的過程中防止系統進入不安全狀態,以避免發生死鎖,

3.7.1系統安全狀態,

在死鎖避免的方法中,把系統的狀態分為安全狀態和不安全狀態,當系統處於安全狀態時,可避免發生死鎖。反之,當系統處於不安全狀態時,則可能進入死鎖。

雖然並非所有不安全狀態都必然會成為死鎖狀態,但當系統進入不安全狀態後就有可能進入死鎖狀態,反之只要系統處於安全狀態系統,便不會進入死鎖狀態,因此避免死鎖的實質在於,系統在進行資源分配時應時,應時系統不進入不安全狀態。

在建立了系統安全狀態的概念後,便可知道避免死鎖的基本思想,就是確保系統始終處於安全狀態。

3.7.2利用銀行家演算法避免死鎖,這是一種試錯,嘗試性分配。

3.8死鎖的檢測與解除

  1. 死鎖檢測演算法。該方法用於檢測系統狀態,以確定系統中是否發生了死鎖
  2. 死鎖解除演算法。當認定系統中已發生死鎖,利用該演算法可將系統從死鎖狀態中解脫出來。
3.8.1死鎖的檢測
  • 資源分配圖。
  • 死鎖定理。
  • 死鎖檢測中的資料結構
3.8.2 死鎖的解除

最簡單的措施就是立即通知操作員,請操作員以人工方法解除死鎖,另一種措施則是利用死鎖解除演算法,把系統從死鎖狀態中解脫出來。常採用死鎖解除方法是:

  • 搶佔資源,從一個或多個程式中,搶佔足夠多的資源,分配給死鎖程式,以解除死鎖狀態。
  • 中止或撤銷程式

這是一個系列的,歡迎大家繼續關注
在這裡插入圖片描述

相關文章