資源管理概述
資源管理的目的和任務
- 保證資源的高利用率;
- 在合理時間內使所有顧客有獲得所需資源的機會;
- 對不可共享的資源實施互斥使用;
- 防止由資源分配不當而引起的死鎖。
資源管理功能
- 資源數據結構的描述:包含資源的物理名、邏輯名、類型、地址、分配狀態等信息。
- 確定資源的分配原則(調度原則):決定資源應分給誰,何時分配,分配多少等問題。
- 實施資源分配:執行資源分配;資源回收工作。
- 存取控制和安全保護:對資源的存取進行控制並對資源實施安全保護措施。
資源的靜態分配和動態分配
- 資源的靜態分配:系統對作業一級采用資源靜態分配方法。系統在調度作業時,根據作業所需資源進行分配;並在作業運行完畢時,收回所分配的全部資源。這種分配通常稱為資源的靜態分配。
- 資源的動態分配:資源對程序一級采用資源動態分配方法。系統在進程運行中,根據進程提出的資源需求,進行資源的動態分配和回收。這種分配通常稱為資源的動態分配。
虛擬資源
-
操作系統對資源區分兩種不同的概念:1.物理資源(實資源);2.虛擬資源(邏輯資源):某些物理資源有限,采用其它物理資源改造成該類資源使用。
-
目的:1.方便用戶使用;2.資源可動態分配,提高資源利用率。
-
計算機系統中的物理資源與虛擬資源分析
資源類別 物理資源 虛擬(邏輯) 映射 處理機 CPU 進程 進程調度 存儲器 主存 虛存(程序地址空間) 地址映射 設備 外部設備 邏輯設備 虛擬設備 設備分配 動態映射 信息 文件物理結構 文件邏輯結構 磁盤空間分配文件目錄查找
資源分配機構和策略
資源分配的機構
資源描述器
定義:描述各類資源的最小分配單位的數據結構稱為資源描述器 rd。如:主存分區分配方法中,最小分配單位為主存分區。
內容:資源名、資源類型、最小分配單位的大小、地址、分配標志、描述器鏈接信息、存取權限、密級、存取時間。
資源信息塊
定義:描述某類資源的請求者、可用資源和該類資源分配程序等必要信息的數據結構。
內容:
資源信息塊示例
資源分配策略
常用的資源分配策略
- 先請求先服務:每一個新產生的請求均排在隊尾;當資源可用時,取隊首元素,並滿足其需要。排序原則:按請求的先后次序排序。
- 優先調度:對每一個進程指定一個優先級;每一個新產生的請求,按其優先級的高低插到對應的位置;當資源可用時,取隊首元素並滿足其需要。排序原則:按優先級的高低排序。
死鎖
什么是死鎖
在兩個或多個並發進程中,如果每個進程持有某種資源而又都等待着別的進程釋放它或它們現在保持着的資源,否則就不能向前推進。此時,稱這一組進程產生了死鎖。
死鎖實例
設備共享:進程\(p_1\)、\(p_2\)共享一台打印機和一台輸入機
時刻 \(t_1\):
進程 \(p_1\)—— 占用打印機,
進程 \(p_2\) —— 占用輸入機;
時刻 \(t_2\):
進程 \(p_1\) —— 又請求輸入機,
進程 \(p_2\) —— 又請求打印機。
時刻\(t_2\)后,系統出現僵持局面,即出現了死鎖現象。
沒有妹子怎么出門;不出門怎么有妹子(×
進程——資源分配圖
-
約定Pi→Rj為請求邊,表示進程Pi申請資源類Rj中的一個資源得不到滿足而處於等待Rj類資源的狀態,該有向邊從進程開始指到方框的邊緣,表示進程Pi申請Rj類中的一個資源。
-
Rj→Pi為分配邊,表示Rj類中的一個資源已被進程Pi占用
信號燈的P、V操作導致死鎖
設進程p1與進程p2共享一台打印機(r1) 和一台輸入機(r2),用信號燈的p、v操作表示資源的申請和釋放。 信號燈設置—— s1:表示r1可用,初值為1;s2:表示r2可用,初值為1討論兩種資源請求序列,哪種情況可能產生互相死等的局面。
程序描述如下:
程序描述2有可能出現死鎖。
生產者——消費者問題
當緩沖區滿時,生產者仍可順利執行p(mutex)操作,於是它對緩沖區有控制權,然后,當它執行p(empty)時,由於沒有空緩沖區被掛起。能將這個生產者釋放的是有一個消費者從緩沖區中取走一個產品,並執行v(empty)操作,但由於緩沖區已被生產者占用,出現了死鎖。
死鎖的起因和條件
引起死鎖的原因
- 系統資源不足
- 進程推進順序非法
產生死鎖的必要條件
- 互斥條件——涉及的資源是非共享的,即為臨界資源。
- 不剝奪條件——進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走。
- 部分分配——進程每次申請它所需要的一部分資源。在等待一新資源的同時,進程繼續占用已分配到的資源。
- 環路條件——存在一種進程的循環鏈,鏈中的每一個進程已獲得的資源同時被鏈中下一個進程所請求。
系統狀態分析
初始狀態描述
假定一個系統包括\(n\)個進程和\(m\)類資源,表示如下
- 一組確定的進程集合,記作:\(p = \{p_1 , p_2 , ... , p_n\}\)
- 一組不同類型的資源集合,記作:\(r = \{r_1 , r_2 , ... , r_m\}\)
- 矢量\(w\)說明各類可利用資源的總的數目:\(w = \{w_1 , w_2 , ... , w_m\}\)
資源請求矩陣
在時刻\(t\)資源請求矩陣表示如下:
\(d_{i j}\)表示進程\(p_i\)還需要\(j\)類資源的數目。
資源分配矩陣
在時刻\(t\)資源分配矩陣表示如下:
\(a_{i j}\)表示進程\(p_i\)已占有\(j\)類資源的數目。
解決死鎖問題的策略
必須要破壞產生死鎖的四個必要條件之一。
死鎖預防——靜態分配策略
在作業調度時為選中的作業分配它所需要的所有資源,資源一旦分配給該作業后,在其整個運行期間這些資源為它獨占。
靜態分配策略的缺點:一個用戶(進程)在程序運行之前很難提出將要使用的全部設備;用戶作業需要的某些資源可能在后期使用;設備(資源)的浪費太大,有些資源在進程運行過程中可能只有很少的時間會用到,有的甚至根本不會用到,例如一個分枝語句。
死鎖避免——有序資源分配法
系統中所有資源都給定一個唯一的編號,所有分配請求必須以上升的次序進行。當遵守上升次序的規則時,若資源可用,則予以分配;否則,請求者等待。
優點:提高了資源使用效率
缺點:進程實際使用資源的順序不一定與資源的編號相一致
銀行家算法
背景:銀行家擁有一筆周轉資金;客戶要求分期貸款,如果客戶能夠得到各期貸款,就一定能夠歸還貸款,否則就一定不能歸還貸款。銀行家應謹慎的貸款,防止出現壞賬。
算法思想:
- 對每個請求進行檢查,是否會導致不安全狀態。若是則不滿足該請求;否則便滿足。
- 檢查狀態是否安全:是否有足夠的資源滿足一個距其最大需求最近的進程,如此反復下去。如果所有資源最終都被收回,則該狀態是安全狀態,最初的請求可以批准。
- 按某種順序並發進程都能達到獲得最大資源而順序完成的序列為安全序列。
銀行家算法示例
系統擁有某類資源10個,現有進程P、Q、R共享該類資源,它們申請該類資源的最大需求量如下。
進程 | 最大需求量 | 已占有資源 | 現申請資源個數 |
---|---|---|---|
P | 8 | 4 | 1 |
Q | 4 | 2 | 1 |
R | 9 | 2 | 1 |
當這些進程動態申請資源時,按銀行家算法應如何分配,能保證不發生死鎖。\(Q \to P \to R\)
死鎖的檢測和解除
解決死鎖問題的一條途徑是死鎖檢測和解除,這種方法對資源的分配不加任何限制,也不采取死鎖避免措施,但系統定時地運行一個“死鎖檢測”程序,判斷系統內是否已出現死鎖,如果檢測到系統已發性了死鎖,再采取措施解除它。
資源分配圖檢測系統死鎖狀態
- 如果進程資源分配圖中無環路,則此時系統沒有發送死鎖。
- 如果進程資源分配圖中有環路,且每個資源類中僅有一個資源,則系統中發生了死鎖,此時,環路是系統發生死鎖的充要條件,環路中的進程便為死鎖進程。
- 如果進程資源分配圖中有環路,且涉及的資源類中有多個資源,則環路的存在只是產生死鎖的必要條件而不是充分條件。
死鎖的解除
- 立即結束所有進程的執行,並重新啟動操作系統。方法簡單,但以前工作全部作廢,損失可能很大。
- 撤銷陷於死鎖的所有進程,解除死鎖繼續運行。
- 逐個撤銷陷於死鎖的進程,回收其資源,直至死鎖解除。
- 剝奪陷於死鎖的進程占用的資源,但並不撤銷它, 直至死鎖解除。
- 根據系統保存的checkpoint,讓所有進程回退,直到足以解除死鎖。
- 當檢測到死鎖時,如果存在某些未卷入死鎖的進程,隨着這些進程執行到結束,則它們可能釋放足夠的資源來解除死鎖。