銀行家算法實驗報告_第1頁
銀行家算法實驗報告_第2頁
銀行家算法實驗報告_第3頁
銀行家算法實驗報告_第4頁
銀行家算法實驗報告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、淮海工學(xué)院計算機工程學(xué)院實驗報告書課程名:操作系統(tǒng)原理題 目:銀行家算法班 級:學(xué) 號:姓 名:評語:成績: 指導(dǎo)教師: 批閱時間:年 月 日一、 實驗?zāi)康你y行家算法是操作系統(tǒng)中避免死鎖的典型算法, 本實驗可以加深對銀行家算法的步驟和相關(guān)數(shù)據(jù)結(jié)構(gòu)用法的更好理解。實驗環(huán)境Turbo C 2.0/3.0 或 VC+6.0 實驗學(xué)時4 學(xué)時,必做實驗。二、實驗內(nèi)容用C語言編寫一個簡單的銀行家算法模擬程序,用銀行家算法實現(xiàn)資源分配。程序能模擬多個進程共享多種資源的情形。 進程可動態(tài)地申請資源, 系統(tǒng)按各進程的申請動態(tài)地分配資源。要求程序具有顯示和打印各進程的某一時刻的資源分配表和安全序列;顯示和打印各

2、進程依次要求申請的資源數(shù)量以及為某進程分配資源后的有關(guān)資源數(shù)據(jù)的情況。三、 實驗說明實驗中進程的數(shù)量、資源的種類以及每種資源的總量Totalj 最好允許動態(tài)指定。初始時每個進程運行過程中的最大資源需求量Maxi,j 和系統(tǒng)已分配給該進程的資源量 Allocationi,j 均為已知(這些數(shù)值可以在程序運行時動態(tài)輸入) ,而算法中其他數(shù)據(jù)結(jié)構(gòu)的值(包括Needi,j 、 Availablej )則需要由程序根據(jù)已知量的值計算產(chǎn)生。四、 實驗步驟1、理解本實驗中關(guān)于兩種調(diào)度算法的說明。2、根據(jù)調(diào)度算法的說明,畫出相應(yīng)的程序流程圖。3、按照程序流程圖,用C語言編程并實現(xiàn)。五、分析與思考1要找出某一狀

3、態(tài)下所有可能的安全序列,程序該如何實現(xiàn)?答:要找出這個狀態(tài)下的所有可能的安全序列,前提是要是使這個系統(tǒng)先處于安全狀態(tài),而系統(tǒng)的狀態(tài)可通過以下來描述:進程剩余申請數(shù)=最大申請數(shù)- 占有數(shù); 可分配資源數(shù)=總數(shù) - 占有數(shù)之和;通過這個描述來算出系統(tǒng)是否安全,從而找出所有的安全序列。2銀行家算法的局限性有哪些? 答: 銀行家算法是一種最有代表性的避免死鎖的算法。銀行家算法即把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當于銀行家管理的資金,進程向操作系統(tǒng)請求分配資源相當于用戶向銀行家貸款。操作系統(tǒng)按照銀行家制定的規(guī)則為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量, 如果系統(tǒng)現(xiàn)存

4、的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當進程在執(zhí)行中繼續(xù)申請資源時,先測試該進程已占用的資源數(shù)與本次申請的資 源數(shù)之和是否超過了該進程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系 統(tǒng)現(xiàn)存的資源能否滿足該進程尚需的最大資源量,若能滿足則按當前的申請量分配資源,否則也要 推遲分配。但任何一種算法都存在其缺點,對各進程的資源分配要求嚴格,經(jīng)常使其處于不安全狀 態(tài),銀行家算法的主要局限是過于謹慎和檢查各申請者對各類資源的最大需求量開銷較大。六、測試數(shù)據(jù)與實驗結(jié)果銀行家算法流程圖(1)所示:圖(1)銀行家算法流程運行結(jié)果如圖( 2) ( 3 )所示:2)

5、圖( 3)銀行家算法截圖七、實驗心得與體會銀行家算法是操作系統(tǒng)中避免死鎖的典型算法。所謂死鎖 : 是指兩個或兩個以上的進程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖, 這些永遠在互相等待的進程稱為死鎖進程。 由于資源占用是互斥的,當某個進程提出申請資源后,使得有關(guān)進程在無外力協(xié)助下,永遠分配不到必需的資源而無法繼續(xù)運行,這就產(chǎn)生了一種特殊現(xiàn)象死鎖。通過這次實驗,加深了我對銀行家算法的了解,掌握了如何利用銀行家算法避免死鎖。在實驗中,難免會遇到問題,通過自己在網(wǎng)上查找資料、詢問同學(xué),這些問題都得到了解決,完成了本

6、次實驗。通過這次的實驗,使我的理論知識更加的牢固。附錄#include<iostream.h>#include<string.h>#include<stdio.h>#define False 0#define True 1int Max100100=0;/ 各進程所需各類資源的最大需求int Avaliable100=0;/ 系統(tǒng)可用資源char name100=0;/ 資源的名稱int Allocation100100=0;/ 系統(tǒng)已分配資源int Need100100=0;/ 還需要資源int Request100=0;/ 請求資源向量int temp1

7、00=0;/存放安全序列int Work100=0;/存放系統(tǒng)可提供資源int M=100;/作業(yè)的最大數(shù)為100int N=100;/資源的最大數(shù)為100void showdata()/ 顯示資源矩陣int i,j;cout<<" 系統(tǒng)目前可用的資源 Avaliable:"<<endl;for(i=0;i<N;i+)cout<<namei<<" "cout<<endl;for (j=0;j<N;j+)cout<<Avaliablej<<" &quo

8、t;/輸出分配資源cout<<endl;cout<<" Max Allocation Need"<<endl;cout<<" 進程名 "for(j=0;j<3;j+)for(i=0;i<N;i+)cout<<namei<<" "cout<<" "cout<<endl;for(i=0;i<M;i+)cout<<" "<<i<<""

9、for(j=0;j<N;j+)cout<<Maxij<<" "cout<<" "for(j=0;j<N;j+)cout<<Allocationij<<" "cout<<" "for(j=0;j<N;j+)cout<<Needij<<" "cout<<endl;int changdata(int i)/ 進行資源分配int j;for (j=0;j<M;j+) Ava

10、liablej=Avaliablej-Requestj;Allocationij=Allocationij+Requestj;Needij=Needij-Requestj;return 1;int safe()/ 安全性算法int i,k=0,m,apply,Finish100=0;int j;int flag=0;Work0=Avaliable0;Work1=Avaliable1;Work2=Avaliable2;for(i=0;i<M;i+)apply=0;for(j=0;j<N;j+)if (Finishi=False&&Needij<=Workj)ap

11、ply+;if(apply=N)for(m=0;m<N;m+)Workm=Workm+Allocationim;/變分配數(shù)Finishi=True;tempk=i;i=-1;k+;flag+;for(i=0;i<M;i+)if(Finishi=False)cout<<" 系統(tǒng)不安全 "<<endl;/ 不成功系統(tǒng)不安全return -1;cout<<" 系統(tǒng)是安全的 !"<<endl;/ 如果安全,輸出成功cout<<" 分配的序列 :"for(i=0;i<

12、M;i+)/ 輸出運行進程數(shù)組cout<<tempi;if(i<M-1) cout<<"->"cout<<endl;return 0;void share()/ 利用銀行家算法對申請資源對進行判定char ch;int i=0,j=0;ch='y'cout<<" 請輸入要求分配的資源進程號(0-"<<M-1<<"):"cin>>i;/ 輸入須申請的資源號cout<<" 請輸入進程"<&l

13、t;i<<" 申請的資源:"<<endl;for(j=0;j<N;j+)cout<<namej<<":"cin>>Requestj;/ 輸入需要申請的資源for (j=0;j<N;j+)if(Requestj>Needij)/判斷申請是否大于需求,若大于則出錯cout<<" 進程 "<<i<<" 申請的資源大于它需要的資源 "cout<<"分配不合理,不予分配! "<

14、;<endl;ch='n'break;else if(Requestj>Avaliablej)/ 判斷申請是否大于當前資源,若大于則/出錯cout<<" 進程 "<<i<<" 申請的資源大于系統(tǒng)現(xiàn)在可利用的資源 "cout<<" 分配出錯,不予分配!"<<endl;ch='n'break;if(ch='y') changdata(i);/ 根據(jù)進程需求量變換資源showdata();/ 根據(jù)進程需求量顯示變換后的資源

15、safe();/ 根據(jù)進程需求量進行銀行家算法判斷void addresources()/ 添加資源int n,flag;cout<<" 請輸入需要添加資源種類的數(shù)量:"cin>>n;flag=N;N=N+n;for(int i=0;i<n;i+)cout<<"名稱 :"cin>>nameflag;cout<<" 數(shù)量 :"cin>>Avaliableflag+;showdata();safe();void delresources()/ 刪除資源char

16、ming;int i,flag=1;cout<<" 請輸入需要刪除的資源名稱: "docin>>ming;for(i=0;i<N;i+)if(ming=namei)flag=0;break;if(i=N)cout<<" 該資源名稱不存在,請重新輸入:while(flag);for(int j=i;j<N-1;j+)namej=namej+1;Avaliablej=Avaliablej+1;N=N-1;showdata();safe();void changeresources()/修改資源函數(shù)cout<<

17、" 系統(tǒng)目前可用的資源Avaliable:"<<endl;for(int i=0;i<N;i+)cout<<namei<<":"<<Avaliablei<<endl;cout<<" 輸入系統(tǒng)可用資源Avaliable:"<<endl;cin>>Avaliable0>>Avaliable1>>Avaliable2;cout<<"經(jīng)修改后的系統(tǒng)可用資源為"<<endl;f

18、or (int k=0;k<N;k+)cout<<namek<<":"<<Avaliablek<<endl;showdata();safe();void addprocess()添加作業(yè)int flag=M;M=M+1;cout<<"請輸入該作業(yè)的最打需求量Max"<<endl;for(int i=0;i<N;i+)cout<<namei<<":"cin>>Maxflagi;Needflagi=Maxflagi卜Al

19、locationflagi;showdata();safe();int main()/ 主函數(shù)int i,j,number,choice,m,n,flag;*"<<endl;char ming;cout<<"*單處理機系統(tǒng)進程調(diào)度實現(xiàn)cout<<"請首先輸入系統(tǒng)可供資源種類的數(shù)量:";cin>>n;N=n;for(i=0;i<n;i+)cout<<"資源"<<i+1<<"的名稱:"cin>>ming;namei=m

20、ing;cout<<" 資源的數(shù)量:";cin>>number;Avaliablei=number;cout<<endl;cout<<"請輸入作業(yè)的數(shù)量:"cin>>m;M=m;cout<<"請輸入各進程的最大需求量("<<m<<"*"<<n<<"矩陣)Max:"<<endl;for(i=0;i<m;i+)for(j=0;j<n;j+)cin>&g

21、t;Maxij;doflag=0;cout<<" 請輸入各進程已經(jīng)申請的資源量("<<m<<"*"<<n<<" 矩陣 )Allocation:"<<endl;for(i=0;i<m;i+)for(j=0;j<n;j+)cin>>Allocationij;if(Allocationij>Maxij)flag=1;Needij=Maxij-Allocationij;if(flag)cout<<" 申請的資源大于最大需求量,請重新輸入 !n"while(flag);showdata();/ 顯示各種資源safe();/ 用銀行家算法判定系統(tǒng)是否安全whi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論