微吼云上線多路互動直播服務 加速多場景互動直播落地
1243
2025-04-02
死鎖會引起計算機工作僵死,因此操作系統中必須防止。本實驗提供了一個系統動態分配資源的簡單模擬程序,用于了解死鎖產生的條件和原因,并采用銀行家算法有效地防止死鎖的發生。
一、實驗要求
設計有n個進程共享m個系統資源的系統,進程可動態的申請和釋放資源,系統按各進程的申請動態的分配資源。
系統能顯示各個進程申請和釋放資源,以及系統動態分配資源的過程,便于用戶觀察和分析;
二、銀行家算法
Request i 是進程Pi 的請求向量。Request i(j)=k表示進程Pi請求分配Rj類資源k個。當Pi發出資源請求后,系統按下述步驟進行檢查:
1.如果Request i≤Need,則轉向步驟2;否則,認為出錯,因為它所請求的資源數已超過它當前的最大需求量。
2.如果Request i≤Available,則轉向步驟3;否則,表示系統中尚無足夠的資源滿足Pi的申請,Pi必須等待。
3.系統試探性地把資源分配給進程Pi,并修改下面數據結構中的數值:
Available = Available - Request i
Allocation i= Allocation i+ Request i
Need i= Need i - Request i
4.系統執行安全性算法,檢查此次資源分配后,系統是否處于安全狀態。如果安全才正式將資源分配給進程Pi,以完成本次分配;否則,將試探分配作廢,恢復原來的資源分配狀態,讓進程Pi等待。
三、安全性算法
1.設置兩個向量。
Work:它表示系統可提供給進程繼續運行的各類資源數目,它包含m個元素,開始執行安全性算法時,Work = Available。
Finish:它表示系統是否有足夠的資源分配給進程,使之運行完成,開始Finish(i)=false;當有足夠資源分配給進程Pi時,令Finish(i)=true;
2.從進程集合中找到一個能滿足下述條件的進程。
Finish(i)= = false;
Need i ≤work;
如找到則執行步驟3;否則,執行步驟4;
3.當進程Pi獲得資源后,可順利執行直到完成,并釋放出分配給它的資源,故應執行
Work = work + Allocation i
Finish(i)=true;轉向步驟2;
4.若所有進程的Finish(i)都為true,則表示系統處于安全狀態;否則,系統處于不安全狀態。
假定系統有5個進程(p0,p1,p2,p3,p4)和三類資源(A,B,C),各種資源的數量分別為10,5,7,在T0時刻的資源分配情況如下圖:
問題:
1.T0時刻系統是否安全?如果安全,給出安全序列。
安全。安全序列為:
2.如果某時刻T1,P1請求資源:Request1(1,0,2),系統是否分配?為什么?
分配。因為Request1(1,0,2)≤Need1(1,2,2),而且Request1(1,0,2)≤Available(3,3,2)
安全序列為{P1,P3,P4,P2,P0}
3.P1請求處理完畢后,如果某時刻T2, P4請求資源: Request4(3,3,0),系統是否分配?為什么?
不分配。因為 Request4(3,3,0)≤Need4(4,3,1); Request4(3,3,0)>Available(2,3,0),讓P4等待。
4.打開“Microsoft Visual C++ 6.0”,輸入相關代碼,同時在源程序同一目錄下新建“input1.txt”文件,根據代碼要求,正確輸入T0時刻的系統狀態,并對程序行進編譯運行。根據提示將前述的三個問題的相關數據依次輸入,然后運行:
input1.text的內容如下:
運行結果:
5.輸出的結果與你所寫的一致否?如果不一致,理解之后,修改你的結果,給出“input1.txt”的內容。 一致。
#include Available讓進程"< 思古之圣賢,與我同為丈夫,彼何以百世可師,我何以一身瓦裂。 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。