作業系統(二)—— 程序管理
二、程序管理
1. 程序與執行緒
1)程序的概念與特徵
① 概念:程序(程序實體) = 程式段 + 資料段 + PCB,PCB是程序存在的唯一標誌
② 定義:程序是程式的一次執行過程。程序是程序實體的執行過程,是系統進行資源分配和排程的一個獨立單位。
③ 特徵:動態性、併發性、獨立性、非同步性、結構性
【考點】程序是能獨立執行、系統資源分配的最小單位
2) 程序的狀態與轉換
3) 程序控制
對系統中的所有程序的管理——實現程序轉換
4) 程序的組織
① 連結方式
② 索引方式
5) 程序的通訊
① 概念:程序是相互獨立的,一個程序不能直接訪問另一個程序的地址空間,實現程序之間進行資訊交換就是程序通訊。
② 通訊方式:
6) 執行緒概念和多執行緒模型
① 執行緒是什麼? ——輕量級“程序”
② 執行緒的屬性:
③ 執行緒的實現方式
使用者級執行緒:由應用程式管理,作業系統看不到
核心級執行緒:由作業系統管理
【注】核心級執行緒才是處理機分配的單位
④ 多執行緒模型:
多對一:多個使用者級執行緒對映到一個核心級執行緒
一對一:一個使用者級 對應 一個核心級
多對多:n個使用者級 對映到 m個核心級
2. 處理機排程
1)基本概念
程序數量往往大於處理機個數,為了更好地處理程序間的競爭,引入了處理機排程機制。
**2)三個層次
**
3)三層排程的聯絡和對比
作業排程為程序活動做準備,記憶體排程將暫時不能執行的程序掛起,程序排程使程序正常活動起來。
4)程序排程的時機
① 需要排程的時機:
a. 主動放棄處理機:程序正常終止、執行異常而終止、主動請求阻塞(I/O)
b. 被動放棄處理機:時間片用完,處理機資源被搶佔
② 不能進行排程:
a. 處理中斷的過程中
b. 作業系統核心程式臨界區
c. 原子操作期間
5)程序排程的切換
【注】程序的切換和排程是有代價的
6)程序排程的方式
① 非搶佔式 —— 早期的批處理系統
② 搶佔式 —— 分時作業系統、實時作業系統
7)排程演算法的評價指標
8)排程演算法
適用於批處理作業系統:
① 先來先服務(FCFS)
a. 演算法思想:“公平”,排隊
b. 演算法規則:按照作業/程序的先後順序服務
c. 用於作業/程序排程:都可以用
d. 是否可搶佔:非搶佔式
e. 優缺點:演算法簡單、公平,但是效率低;有利於長作業,不利於短作業;有利於CPU繁忙型作業,不利於IO繁忙型作業。
f. 是否會導致飢餓:不會
② 短作業優先(SJF)
a. 演算法思想:追求最少的平均等待時間、最少的平均週轉時間、最少的平均帶全週轉時間
b. 演算法規則:已到達的最短的作業/程序優先得到服務(服務時間最短)
c. 用於作業/程序排程:都可以用,用於程序時叫“短程序優先(SPF)”
d. 是否可搶佔:SJF和SPF是非搶佔式,但是也有搶佔式版本的——最短剩餘時間優先演算法
e. 優缺點:優點:“最短的”平均等待時間、平均週轉時間;缺點:不公平,對短作業有利,長作業不利,有可能飢餓現象;作業長短由使用者確定,可能出現不準確。
f. 是否會導致飢餓:會,甚至餓死
③ 高響應比優先(HRRN)
a. 演算法思想:綜合考慮作業/程序的等待時間和要求服務的時間
b. 演算法規則:每次排程時,先計算各個作業或程序的響應比,選擇響應比最高的作業/程序服務。 響應比 = (等待時間+要求服務時間) / 要求服務時間
c. 用於作業/程序排程:都可以
d. 是否可搶佔:非搶佔式
e. 優缺點:
i. 綜合考慮了等待時間和執行時間(要求服務時間)
ii. 等待時間相同時,要求服務時間短的優先(SF 的優點)
iii. 要求服務時間相同時,等待時間長的優先(FCFS 的優點)
f. 是否會導致飢餓:不會
適用於互動式系統:
④ 時間片輪轉排程演算法
a. 演算法思想:公平的、輪流地為各個程序服務,時間片
b. 演算法規則:分配時間片,用完了就重新進入佇列
c. 用於作業/程序排程:用於程序排程
d. 是否可搶佔:搶佔式,由時鐘中斷來通知CPU時間片已結束
e. 優缺點:公平、響應快,適用於分時作業系統;高頻率切換程序會有一定的開銷;不區分任務緊急程度
f. 是否會導致飢餓:不會
⑤ 優先順序排程演算法
a. 演算法思想:很多場景需要根據任務的緊急程度來決定處理順序,常用於實時作業系統
b. 演算法規則:優先順序高的先執行
c. 用於作業/程序排程:都可以,還可以用於I/O排程
d. 是否可搶佔:搶佔式、非搶佔式都有
e. 優缺點:用優先順序劃分排程,適用於實時作業系統,可靈活調整任務的偏好程度;如果有很多的高優先順序進來,可能導致飢餓。
f. 是否會導致飢餓:會的
⑥ 多級反饋佇列排程演算法
a. 演算法思想:對其他演算法折中權衡
b. 演算法規則:
c. 用於作業/程序排程:用於程序排程
d. 是否可搶佔:搶佔式
e. 優缺點:
f. 是否會導致飢餓:不會
3. 程序同步
1)概念
① 同步:為完成某個任務而簡歷的兩個或多個程序
② 互斥:當一個程序訪問臨界資源時,另一個程序必須等待,當訪問結束後,另一個才能訪問。
③ 臨界資源:一次只能為一個程序服務的資源,如印表機、攝像頭等
2)程序互斥的軟體實現方法
① 單標誌法
a. 演算法思想:兩個程序訪問臨界資源結束後,會把使用臨界區的許可權轉交給另一個程序。
b. 優點:可以實現“同一時刻最多隻允許一個程序訪問臨界區”
c. 侷限性:如果一個程序拿到鎖,但是一直不進入,一直等待。違背“空閒讓進”原則
② 雙標誌先檢查法
a. 演算法思想:每個程序進入臨界區之前先檢查當前臨界區有沒有其他程序,用一個boolean陣列存放每個程序的狀態(鎖標誌)。
b. 優點:不會出現一直等待問題
c. 侷限性:因為是併發執行,可能多個程序同時進入臨界區。違背“忙則等待”原則。
③ 雙標誌後檢查法
a. 演算法思想:在演算法②的邏輯,改為先加鎖,再檢查。
b. 優點:解決了“忙則等待”問題。
c. 侷限性:併發執行,可能會導致都進入不了,程序餓死了。違背了“空閒讓進”、“有限等待”原則
④ Peterson 演算法
a. 演算法思想:如果多個程序都想進入臨界區,就讓他們“孔融讓梨”。
b. 優點:滿足 空閒讓進、忙則等待、有限等待。
c. 侷限性:未遵循讓權等待原則。
3)程序互斥的硬體實現方法
① 中斷遮蔽
a. 優點:簡單高效
b. 侷限性:不適用於多處理機、只適用於作業系統核心程序(因為開/關中斷指令只能執行在核心態)
② 硬體指令:
指令:TestAndSet指令(TSL指令或TS指令)、Swap指令
4)訊號量機制
4)訊號量機制實現互斥、同步、前驅關係
5)生產者消費者問題(同步互斥問題)
① 問題描述:生產者每次生產一個產品放入緩衝區,消費者每次從緩衝區拿一個產品並使用,緩衝區滿了不能再生產,緩衝區空了不能再拿。
【注】這裡的緩衝區應該是臨界資源,各程序之間應該互斥訪問,以保證緩衝區中的資料安全(避免覆蓋、多拿問題)。
【考點】實現互斥必須在實現同步的兩個P操作之後,否則會死鎖
6)吸菸者問題(互斥問題)
7)讀者-寫者(互斥問題)
① 兩個及以上的讀程序 不需要互斥
② 讀 和 寫程序需要互斥
③ 兩個及以上的寫程序 需要互斥
8)哲學家進餐問題
9)管程
類似於 Java中的 類,將執行過程封裝到方法中了。
4. 死鎖
1)死鎖的概念
① 什麼是死鎖?
併發環境下,各個程序相互等待對方手裡的資源,無法向前推進。
② 程序死鎖、飢餓、死迴圈的區別
死鎖:併發環境下,各個程序相互等待對方手裡的資源,無法向前推進。
飢餓:某個程序由於長期得不到想要的資源,程序無法推進。
死迴圈:某程序執行過程中一直跳不出去某個循。
③ 死鎖產生的必要條件(四個)
a. 互斥條件:只有對必須互斥使用的資源的爭搶才會出現死鎖。
b. 不可剝奪條件:程序所獲得的資源沒使用完之前,不能由其他程序強行剝奪,只能由其主動釋放。
c. 請求和保持條件:程序持有了至少一個資源的情況下又提出了新的資源請求,新的資源請求得不到滿足,也不釋放已有的資源。
d. 迴圈等待條件:存在一種程序資源等待鏈,鏈中的每一個程序已獲得的資源被下一個程序所請求。
④ 什麼時候會產生死鎖
a. 競爭不可剝奪的系統資源
b. 程序推薦順序非法
c. 訊號量的使用不當
⑤ 死鎖的處理策略
a. 預防死鎖 —— 破壞死鎖的四個必要條件之一
b. 避免死鎖 —— 用某種方法防止系統進入不安全狀態從而避免死鎖,如銀行家演算法
c. 死鎖的檢測和解除 —— 允許死鎖的發生,但是會檢測處理並解除
2)死鎖預防
① 破壞互斥條件
偶爾可以破壞,如SPOOLing技術解決印表機互斥問題,很多時候都不能破壞,甚至要保護。
② 破壞不可剝奪條件
方案一:程序請求新的資源得不到滿足時,釋放持有的資源
方案二:某個程序需要一個被其他程序佔用的資源時,由作業系統協助,強行剝奪
缺點:實現複雜;增加系統開銷;可能導致飢餓;僅適用於易儲存/恢復狀態的資源,如CPU
③ 破壞請求和保持條件
靜態分配方法:程序執行前一次性申請所需要全部的資源
缺點:資源利用率低(資源用得不多,但要一直保持),可能引起飢餓(有的資源一直不到位)。
④ 破壞迴圈等待條件
順序資源分配法:規定每個程序必須按編號遞增的順序請求資源,同編號資源一次申請完。(先持有小編號—> 才能申請大編號的資源)
缺點:不方便新增裝置;程序實際使用資源與遞增順序不一樣,資源浪費;必須按照順序申請,程式設計麻煩。
3)死鎖避免
原理:每一次資源分配時,用銀行家演算法檢測,保證系統處於安全狀態。
① 安全序列:如果系統按照一種序列分配資源,能保證每個程序都順利完成,那麼這個序列就是安全序列。
② 安全狀態:能找到任何一個安全序列,就是安全狀態
【注】安全狀態一定不會發生死鎖,非安全狀態不一定會發生死鎖。
③ 銀行家演算法:資源分配之前判斷這次分配是否會導致系統進入不安全狀態,如果會進入,就讓執行緒阻塞。
4)死鎖檢測和解除
① 檢測死鎖
資源分配圖,能消除所有的邊,則稱這個圖是可完全簡化的,此時一定沒有發生死鎖;不能全部消除,則此時一定發生了死鎖,且連著邊的節點就是發生死鎖的程序。
② 死鎖解除
a. 資源剝奪法
b. 撤銷程序法(終止程序法)
c. 程序回退法