1. 程式人生 > >學習筆記之湯小丹《計算機作業系統第四版》----第三章 處理機排程與死鎖

學習筆記之湯小丹《計算機作業系統第四版》----第三章 處理機排程與死鎖

  • 處理機排程的層次:
  1. 高階排程(作業排程、長程排程):排程物件為作業(還不是程序),為它們建立程序,分配必要的資源,並將它們放入就緒佇列(從外存 --->記憶體)
  2. 低階排程(程序排程、短程排程):決定就緒佇列中的哪個程序應獲得處理機
  3. 中級排程(記憶體排程):提高記憶體利用率和系統吞吐量,把暫時不能執行的程序(掛起狀態)調至外存等待
  • 處理機排程演算法的共同目標:
  1.   
  2. 公平性:使各程序都獲得合理的CPU時間(不是相同的,根據緊急程度或重要性來提供不同的CPU時間)
  3. 平衡性:由於系統中可能具有多種型別的程序,應保持系統資源使用的平衡性
  4. 策略強制執行
  • 批處理系統的目標:
  1. 平均週轉時間短。週轉時間:指從作業被提交給系統開始,到作業完成為止的這段時間間隔。包括:作業在外存後備佇列上等待作業排程的時間、程序在就緒佇列上等待程序排程的時間、程序在CPU上執行的時間以及程序等待I/O操作完成的時間                                       平均週轉時間:T = \frac{1}{n} * \sum _{i=1}^{i=n}T_{i}                                                                                                                                                   平均帶權週轉時間:W = \frac{1}{n}\sum _{i=1}^{i=n}\frac{T_{i}}{T_{s}}
         Ti:作業的週轉時間,Ts:系統為它提供服務的時間
  2. 系統吞吐量高。吞吐量:單位時間內系統所完成的作業數
  3. 處理機利用率高
  • 分時系統的目標:
  1. 響應速度快。響應時間:從使用者通過鍵盤提交一個請求開始,直到螢幕上顯示出處理結果為止的一段時間間隔
  2. 均衡性:系統響應時間的快慢應與使用者所請求的服務的複雜性相適應
  • 實時系統的目標:
  1. 截止時間的保證。截止時間:某任務必須開始執行的最遲時間或必須完成的最遲時間
  2. 可預測性
  • 作業:程式 + 資料 + 作業說明書(系統根據它對程式的執行進行控制)
  • 作業步
  • 作業控制塊JCB:類似於PCB
  • 作業執行的三個階段和三個狀態:
  1. 收容階段 ---->  後備狀態
  2. 執行階段 ---->  執行狀態
  3. 完成階段 ---->  完成狀態
  • 作業排程的主要任務:
  1. 接納多少個作業。取決於多道程式度,即允許多少個作業同時在記憶體中執行
  2. 接納哪些作業:由FCFS,SJF,PSA,HRRN等演算法決定
  • 在分時系統中,為了做到及時響應,使用者輸入的命令或資料都被直接送入記憶體,因而無須配置作業排程機制。但需有接納控制措施(限制進入系統作業的數目)
  • 先來先服務演算法(FCFS):現在一般是在系統中按程序的優先順序設定多個佇列,每個優先順序一個佇列,每一個佇列的排程都基於FCFS演算法
  • 短作業優先演算法(SJF):根據估計作業執行時間來衡量作業的長短
  • SJF的缺點:
  1. 必須預知作業的執行時間
  2. 對長作業非常不利,完全忽視作業的等待時間,可能出現飢餓現象
  3. 人-機無法互動???
  4. 未考慮作業的緊迫程度
  • 優先順序排程演算法PSA(priority-scheduling algorithm):基於作業的緊迫程度,由外部賦予作業的相應的優先順序
  • 高響應比優先排程演算法HRRN(Highest Response Ratio Next):引入動態優先順序。                                                                                                                                                以上優先權及相應比,響應時間 = 週轉時間 = 等待時間 + 要求服務時間
  • HRRN的缺點:每次進行排程之前,都需要先做響應比的計算,會增加系統開銷
  • 程序排程的任務:
  1. 儲存處理機的現場資訊
  2. 按某種演算法選取程序
  3. 把處理器分配給程序
  • 程序排程機制包括:
  1. 排隊器:排隊器把轉變為就緒狀態的程序插入到就緒佇列(若未滿的話)
  2. 分派器
  3. 上下文切換器
  • 程序排程方式:
  1. 非搶佔方式:一旦把處理機分配給某個程序後,就一直讓它執行下去,直至該程序完成或發生某事件而被阻塞
  2. 搶佔方式:允許排程程式根據某種原則,去暫停某個正在執行的程序
  • 搶佔的原則:
  1. 優先權原則
  2. 短程序優先原則
  3. 時間片原則
  • 輪轉排程演算法:最基本和最常用的 基於時間片的輪轉(RR),引入計時器,常用於分時系統
  • 輪轉演算法的基本原理
  • 輪轉演算法中程序切換時間:程序完成;時間片用完
  • 時間片大小的確定:略大於 一次典型的互動所需的時間
  • 優先順序排程演算法的型別:
  1. 非搶佔式優先順序排程演算法
  2. 搶佔式優先順序排程演算法
  • 優先順序的型別:
  1. 靜態優先順序
  2. 動態優先順序(類似於之前的HRRN引入的優先權)
  • 多級反饋佇列排程演算法的排程機制:
  1. 設定多個就緒佇列 。第一個佇列優先順序最高 ;優先順序越高的佇列,其時間片越小
  2. 每個佇列都採用FCFS演算法。當新程序進入記憶體後,首先將它放入第一佇列的末尾,按FCFS等待排程。當輪到該程序執行時,如 它能在該時間片內完成,則將其撤離系統;否則,將它轉入下一佇列末尾;迴圈,直到進入最後一個佇列,採用RR演算法
  3. 按佇列優先順序排程。僅當第1~i - 1的所有佇列均空時,才會排程第i佇列的程序執行。如果處理機正在處理第i佇列中為某程序服務時又有新程序進入任一優先順序較高的佇列,此時須立即把正在執行的程序放回第i佇列的末尾,而把處理機分配給新到的高優先順序程序
  • 基於公平原則排程演算法:
  1. 保證排程演算法(立足於實際執行了的處理機時間與應獲得的處理機時間)
  2. 公平公享排程演算法(立足於對使用者公平,而不是對程序公平)
  • 可重用性資源和可消耗性資源(比如用於程序間通訊的訊息)
  • 可搶佔性資源和不可搶佔性資源
  • 計算機系統中引起死鎖的原因:
  1. 競爭不可搶佔性資源引起死鎖
  2. 競爭可消耗資源引起死鎖
  3. 程式推進順序不當引起死鎖
  • 產生死鎖的必要條件:
  1. 互斥條件(資源)
  2. 請求和保持條件(程序 + 資源)
  3. 不可搶佔條件(資源)
  4. 迴圈等待條件(程序 + 資源)
  • 處理死鎖的方法:
  1. 預防死鎖
  2. 避免死鎖:在資源的動態分配過程中,用某種方法防止系統進入不安全狀態
  3. 檢測死鎖
  4. 解除死鎖:常用的方法是撤銷一些程序,回收資源                                                                                                                   以上四點,對死鎖的防範程度逐漸減弱,對資源的利用率提高,程序因資源因素而阻塞的頻度逐漸下降,併發程度逐漸提高
  • 互斥條件是非共享裝置所必須的,不僅不能改變,還應加以保證
  • 通過破壞“請求和保持”條件預防死鎖:
  1. 第一種協議:程序一次性申請並被分配其所需的所有資源                                                                                                        缺點:資源被嚴重浪費;程序會發生飢餓現象
  2. 第二種協議:允許一個程序只獲得執行初期所需的資源後便開始執行。程序執行過程中再逐步釋放已分配給自己的且已用完的資源,然後再請求新的所需資源
  • 通過破壞“不可搶佔”條件預防死鎖:通過釋放自己(提出新資源請求的程序)所擁有的全部資源 
  • 通過破壞“迴圈等待條件”:對系統所有資源型別進行線性排序,並賦予不同的序號,每個程序必須按序號遞增的順序請求資源                                                                                                                                                                                                缺點:
  1. 為資源規定的序號必須相對穩定,這限制了新型別裝置的增加
  2. 可能造成資源的浪費
  3. 使用者程式設計複雜
  • 在避免死鎖的方法中,把系統的狀態分為安全狀態和不安全狀態
  • 安全狀態:系統能按某種程序推進順序(P1,P2,...,Pn)為每個程序Pi分配其所需所有資源(為當前程序分配資源時,前一程序已結束,擁有的資源已被釋放),直至滿足每個程序對資源的最大需求
  • 如果無法找到這樣一個序列,系統則處於不安全狀態
  • 利用銀行家演算法避免死鎖(假設該資源請求可以分配---->檢驗資源分配後是否是安全狀態,如果是不安全狀態,則不予以分配);Java實現
  • 資源分配圖                                                                                                                                                                                       P1獲得2個單位的R1資源,P1請求1個單位的R2資源
  • 常用解除死鎖的方法:
  1. 搶佔資源
  2. 終止程序
  • 頁面置換演算法:
  1. 最近最久未使用演算法(LRU):基於時間先後,棧
  2. 最少使用演算法(LFU):基於一個時間段的使用次數