1. 程式人生 > 其它 >作業系統(二)—— 程序管理

作業系統(二)—— 程序管理

二、程序管理

1. 程序與執行緒

1)程序的概念與特徵

​ ① 概念:程序(程序實體) = 程式段 + 資料段 + PCBPCB是程序存在的唯一標誌

​ ② 定義:程序是程式的一次執行過程。程序是程序實體的執行過程,是系統進行資源分配和排程的一個獨立單位。

​ ③ 特徵:動態性、併發性、獨立性、非同步性、結構性

​ 【考點】程序是能獨立執行、系統資源分配的最小單位

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. 程序回退法