銀行家算法 實驗資料報告材料

上傳人:痛*** 文檔編號:85965028 上傳時間:2022-05-06 格式:DOC 頁數:10 大?。?42KB
收藏 版權申訴 舉報 下載
銀行家算法 實驗資料報告材料_第1頁
第1頁 / 共10頁
銀行家算法 實驗資料報告材料_第2頁
第2頁 / 共10頁
銀行家算法 實驗資料報告材料_第3頁
第3頁 / 共10頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《銀行家算法 實驗資料報告材料》由會員分享,可在線閱讀,更多相關《銀行家算法 實驗資料報告材料(10頁珍藏版)》請在裝配圖網上搜索。

1、word 淮海工學院計算機工程學院 實驗報告書 課程名:《操作系統(tǒng)原理》 題 目: 銀行家算法 班 級: 學 號: 姓 名: 評語: 成績: 指導教師: 批閱時間: 年 月 日 9 / 10 一、實驗目的 銀行家算法是操作系統(tǒng)中防止死鎖的典型算法,本實驗可以加深對銀行家算法的步驟

2、和相關數據結構用法的更好理解。 實驗環(huán)境 實驗學時 4學時,必做實驗。 二、實驗容 用C語言編寫一個簡單的銀行家算法模擬程序,用銀行家算法實現資源分配。程序能模擬多個進程共享多種資源的情形。進程可動態(tài)地申請資源,系統(tǒng)按各進程的申請動態(tài)地分配資源。要求程序具有顯示和打印各進程的某一時刻的資源分配表和安全序列;顯示和打印各進程依次要求申請的資源數量以與為某進程分配資源后的有關資源數據的情況。 三、 實驗說明 實驗中進程的數量、資源的種類以與每種資源的總量Total[j]最好允許動態(tài)指定。初始時每個進程運行過程中的最大資源需求量Max[i,j]和系統(tǒng)已分配給該進程的資源量A

3、llocation[i,j]均為〔這些數值可以在程序運行時動態(tài)輸入〕,而算法中其他數據結構的值〔包括Need[i,j]、Available[j]〕如此需要由程序根據量的值計算產生。 四、 實驗步驟 1、 理解本實驗中關于兩種調度算法的說明。 2、 根據調度算法的說明,畫出相應的程序流程圖。 3、 按照程序流程圖,用C語言編程并實現。 五、分析與思考 1. 要找出某一狀態(tài)下所有可能的安全序列,程序該如何實現? 答:要找出這個狀態(tài)下的所有可能的安全序列,前提是要是使這個系統(tǒng)先處于安全狀態(tài),而 系統(tǒng)的狀態(tài)可通過以下來描述: 進程剩余申請數=最大申請數-占有數; 可分配資源數=

4、總數-占有數之和; 通過這個描述來算出系統(tǒng)是否安全,從而找出所有的安全序列。 2. 銀行家算法的局限性有哪些? 答:銀行家算法是一種最有代表性的防止死鎖的算法。銀行家算法即把操作系統(tǒng)看作是銀行 家,操作系統(tǒng)管理的資源相當于銀行家管理的資金,進程向操作系統(tǒng)請求分配資源相當于用戶向銀行家貸款。操作系統(tǒng)按照銀行家制定的規(guī)如此為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統(tǒng)現存的資源可以滿足它的最大需求量如此按當前的申請量分配資源,否如此就推遲分配。當進程在執(zhí)行中繼續(xù)申請資源時,先測試該進程已占用的資源數與本次申請的資源數之和是否超過了該進程對資源的最大需求

5、量。假設超過如此拒絕分配資源,假設沒有超過如此再測試系統(tǒng)現存的資源能否滿足該進程尚需的最大資源量,假設能滿足如此按當前的申請量分配資源,否如此也要推遲分配。但任何一種算法都存在其缺點,對各進程的資源分配要求嚴格,經常使其處于不安全狀態(tài),銀行家算法的主要局限是過于慎重和檢查各申請者對各類資源的最大需求量開銷較大。 六、測試數據與實驗結果 銀行家算法流程圖〔1〕所示: 完畢 否 是 申請失敗。 以上分配作廢,恢復原來的分配狀態(tài): Available[j] = Available[j] + Requesti[j] Allocation[i][j]= Allocation[

6、i][j]-Requesti[j] Need[i][j] = Need[i][j]+Requesti[j] N Y N Y Requesti[j]> Need[i][j] 出錯返回:return(error) Requesti[j]> Available[j] 出錯返回:(進程阻塞) return(error) Available[j] = Available[j] – Requesti[j] Allocation[i][j]= Allocation[i][j] + Requesti[j] Need[i][j] = Need[i][j] – Requesti[j]

7、 假定分配: 輸入初始參數〔資源分配與請求情況〕 開始 假定分配之后,系統(tǒng)安全嗎? 申請成功。輸出各種數據的變化 圖〔1〕銀行家算法流程圖 運行結果如圖〔2〕〔3〕所示: 圖〔2〕 圖〔3〕銀行家算法截圖 七、實驗心得與體會 銀行家算法是操作系統(tǒng)中防止死鎖的典型算法。所謂死鎖: 是指兩個或兩個以上的進程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現象,假設無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產生了死鎖,這些永遠在

8、互相等待的進程稱為死鎖進程。 由于資源占用是互斥的,當某個進程提出申請資源后,使得有關進程在無外力協(xié)助下,永遠分配不到必需的資源而無法繼續(xù)運行,這就產生了一種特殊現象死鎖。 通過這次實驗,加深了我對銀行家算法的了解,掌握了如何利用銀行家算法防止死鎖。在實驗中,難免會遇到問題,通過自己在網上查找資料、詢問同學,這些問題都得到了解決,完成了本次實驗。通過這次的實驗,使我的理論知識更加的結實。 附錄 #include #include #include #define False 0 #define True 1 in

9、t Max[100][100]={0};//各進程所需各類資源的最大需求 int Avaliable[100]={0};//系統(tǒng)可用資源 char name[100]={0};//資源的名稱 int Allocation[100][100]={0};//系統(tǒng)已分配資源 int Need[100][100]={0};//還需要資源 int Request[100]={0};//請求資源向量 int temp[100]={0};//存放安全序列 int Work[100]={0};//存放系統(tǒng)可提供資源 int M=100;//作業(yè)的最大數為100 int N=100;//資源的

10、最大數為100 void showdata()//顯示資源矩陣 { int i,j; cout<<"系統(tǒng)目前可用的資源[Avaliable]:"<

11、<"進程名 "; for(j=0;j<3;j++){ for(i=0;i

12、[j]<<" "; cout<<" "; for(j=0;j

13、Request[j]; } return 1; } int safe()//安全性算法 { int i,k=0,m,apply,Finish[100]={0}; int j; int flag=0; Work[0]=Avaliable[0]; Work[1]=Avaliable[1]; Work[2]=Avaliable[2]; for(i=0;i

14、 if(apply==N){ for(m=0;m

15、-1; } } cout<<"系統(tǒng)是安全的!"<"; } cout<

16、 cin>>i;//輸入須申請的資源號 cout<<"請輸入進程 "<>Request[j];//輸入需要申請的資源 } for (j=0;jNeed[i][j])//判斷申請是否大于需求,假設大于如此出錯 { cout<<"進程 "<

17、l; ch='n'; break; } else { if(Request[j]>Avaliable[j])//判斷申請是否大于當前資源,假設大于如此 { //出錯 cout<<"進程"<

18、 { changdata(i);//根據進程需求量變換資源 showdata();//根據進程需求量顯示變換后的資源 safe();//根據進程需求量進展銀行家算法判斷 } } void addresources(){//添加資源 int n,flag; cout<<"請輸入需要添加資源種類的數量:"; cin>>n; flag=N; N=N+n; for(int i=0;i>name[flag]; cout<<"數量:"; cin>>

19、Avaliable[flag++]; } showdata(); safe(); } void delresources(){//刪除資源 char ming; int i,flag=1; cout<<"請輸入需要刪除的資源名稱:"; do{ cin>>ming; for(i=0;i

20、{ name[j]=name[j+1]; Avaliable[j]=Avaliable[j+1]; } N=N-1; showdata(); safe(); } void changeresources(){//修改資源函數 cout<<"系統(tǒng)目前可用的資源[Avaliable]:"<>Avaliable[0]>>A

21、valiable[1]>>Avaliable[2]; cout<<"經修改后的系統(tǒng)可用資源為"<>Max[flag][

22、i]; Need[flag][i]=Max[flag][i]-Allocation[flag][i]; } showdata(); safe(); } int main()//主函數 { int i,j,number,choice,m,n,flag; char ming; cout<<"*****************單處理機系統(tǒng)進程調度實現*****************"<>n; N=n; for(i=0;i

23、1<<"的名稱:"; cin>>ming; name[i]=ming; cout<<"資源的數量:"; cin>>number; Avaliable[i]=number; } cout<>m; M=m; cout<<"請輸入各進程的最大需求量("<>Max[i][j]; do{ flag=0; cout<<

24、"請輸入各進程已經申請的資源量("<>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1; Need[i][j]=Max[i][j]-Allocation[i][j]; } if(flag) cout<<"申請的資源大于最大需求量,請重新輸入!\n"; } while(flag

25、); showdata();//顯示各種資源 safe();//用銀行家算法判定系統(tǒng)是否安全 while(choice) { cout<<"**************銀行家算法演示***************"<

26、 4:分配資源 "<>choice; switch(choice) { case 1: addresources();break; case 2: delresources();break; case 3: changeresources();break; case 4: share();break; case 5: addprocess();break; case 0: choice=0;break; default: cout<<"請正確選擇功能號(0-5)!"<

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!