銀行家算法課程設計(附源代碼)

      網友投稿 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 #include #include using namespace std; typedef struct Max{ int m_a; int m_b; int m_c; }Max; typedef struct Allocation{ int a_a; int a_b; int a_c; }Allocation; typedef struct Need{ int n_a; int n_b; int n_c; }Need; struct Available{ int av_a; int av_b; int av_c; }q; struct pr{ char name; Max max; Allocation allocation; Need need; int finishflag; }p[5]; char na[5]; void init(){ cout<<"各進程還需要的資源數NEED: "<=p[i].need.n_a&&q.av_b>=p[i].need.n_b&&q.av_c>=p[i].need.n_c){ q.av_a+=p[i].allocation.a_a; q.av_b+=p[i].allocation.a_b; q.av_c+=p[i].allocation.a_c; p[i].finishflag=1; finishcnt++; na[k++]=p[i].name; break; } } count++; if(count>5){ return 0; } } return 1; } int shq(){ int m=0,i=0,j=0,k=0; cout<<"請輸入進程號和請求資源的數目!"<>m>>i>>j>>k; if(i<=p[m].need.n_a&&j<=p[m].need.n_b&&k<=p[m].need.n_c){ if(i<=q.av_a&&j<=q.av_b&&k<=q.av_c){ p[m].allocation.a_a+=i; p[m].allocation.a_b+=j; p[m].allocation.a_c+=k; p[m].need.n_a=p[m].max.m_a-p[m].allocation.a_a; p[m].need.n_b=p[m].max.m_b-p[m].allocation.a_b; p[m].need.n_c=p[m].max.m_c-p[m].allocation.a_c; cout<<"各進程還需要的資源數NEED:"<<'\n'; for(int w=0;w<5;w++){ cout<Available讓進程"<Available讓進程"<"<

      思古之圣賢,與我同為丈夫,彼何以百世可師,我何以一身瓦裂。

      任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:財務管理系統,提升企業效率和財務控制的利器
      下一篇:Excel表格中一次性插入多行或多列的技巧
      相關文章
      国产亚洲精AA在线观看SEE| 亚洲AV成人潮喷综合网| 亚洲一区二区三区在线播放| 亚洲美国产亚洲AV| 亚洲无码一区二区三区 | 亚洲sss综合天堂久久久| 99亚洲精品高清一二区| 亚洲美女aⅴ久久久91| 久久国产亚洲高清观看| 精品亚洲麻豆1区2区3区| 亚洲精品视频久久| 亚洲一区电影在线观看| 国内精品久久久久影院亚洲| 亚洲色丰满少妇高潮18p| 亚洲AV无码一区二区三区网址 | 亚洲va久久久噜噜噜久久狠狠| 亚洲精品无码久久久久| 亚洲AV无一区二区三区久久| 亚洲视频.com| 91亚洲视频在线观看| 国产亚洲国产bv网站在线| 亚洲国产精品18久久久久久| 精品久久久久久亚洲综合网| 亚洲成A人片77777国产| 亚洲精品无码av人在线观看| 亚洲高清在线视频| 亚洲小说图片视频| 亚洲乱色伦图片区小说| 色九月亚洲综合网| 久久亚洲中文字幕精品一区四 | 亚洲精品无码你懂的| www.91亚洲| 亚洲乱码中文字幕综合| 亚洲视频在线观看网址| 亚洲一区在线视频| 爱爱帝国亚洲一区二区三区| 亚洲VA综合VA国产产VA中| 国产亚洲精品看片在线观看| 亚洲av女电影网| 亚洲a级在线观看| 国产成人亚洲午夜电影|