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