銀行家算法 實(shí)驗(yàn)資料報(bào)告材料

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

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

10 積分

下載資源

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

資源描述:

《銀行家算法 實(shí)驗(yàn)資料報(bào)告材料》由會(huì)員分享,可在線閱讀,更多相關(guān)《銀行家算法 實(shí)驗(yàn)資料報(bào)告材料(10頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、word 淮海工學(xué)院計(jì)算機(jī)工程學(xué)院 實(shí)驗(yàn)報(bào)告書 課程名:《操作系統(tǒng)原理》 題 目: 銀行家算法 班 級(jí): 學(xué) 號(hào): 姓 名: 評(píng)語(yǔ): 成績(jī): 指導(dǎo)教師: 批閱時(shí)間: 年 月 日 9 / 10 一、實(shí)驗(yàn)?zāi)康? 銀行家算法是操作系統(tǒng)中防止死鎖的典型算法,本實(shí)驗(yàn)可以加深對(duì)銀行家算法的步驟

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

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

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

5、量。假設(shè)超過(guò)如此拒絕分配資源,假設(shè)沒(méi)有超過(guò)如此再測(cè)試系統(tǒng)現(xiàn)存的資源能否滿足該進(jìn)程尚需的最大資源量,假設(shè)能滿足如此按當(dāng)前的申請(qǐng)量分配資源,否如此也要推遲分配。但任何一種算法都存在其缺點(diǎn),對(duì)各進(jìn)程的資源分配要求嚴(yán)格,經(jīng)常使其處于不安全狀態(tài),銀行家算法的主要局限是過(guò)于慎重和檢查各申請(qǐng)者對(duì)各類資源的最大需求量開銷較大。 六、測(cè)試數(shù)據(jù)與實(shí)驗(yàn)結(jié)果 銀行家算法流程圖〔1〕所示: 完畢 否 是 申請(qǐng)失敗。 以上分配作廢,恢復(fù)原來(lái)的分配狀態(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] 出錯(cuò)返回:return(error) Requesti[j]> Available[j] 出錯(cuò)返回:(進(jìn)程阻塞) 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、 假定分配: 輸入初始參數(shù)〔資源分配與請(qǐng)求情況〕 開始 假定分配之后,系統(tǒng)安全嗎? 申請(qǐng)成功。輸出各種數(shù)據(jù)的變化 圖〔1〕銀行家算法流程圖 運(yùn)行結(jié)果如圖〔2〕〔3〕所示: 圖〔2〕 圖〔3〕銀行家算法截圖 七、實(shí)驗(yàn)心得與體會(huì) 銀行家算法是操作系統(tǒng)中防止死鎖的典型算法。所謂死鎖: 是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,因爭(zhēng)奪資源而造成的一種互相等待的現(xiàn)象,假設(shè)無(wú)外力作用,它們都將無(wú)法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在

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

9、t Max[100][100]={0};//各進(jìn)程所需各類資源的最大需求 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};//請(qǐng)求資源向量 int temp[100]={0};//存放安全序列 int Work[100]={0};//存放系統(tǒng)可提供資源 int M=100;//作業(yè)的最大數(shù)為100 int N=100;//資源的

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

11、<"進(jìn)程名 "; 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;//輸入須申請(qǐng)的資源號(hào) cout<<"請(qǐng)輸入進(jìn)程 "<>Request[j];//輸入需要申請(qǐng)的資源 } for (j=0;jNeed[i][j])//判斷申請(qǐng)是否大于需求,假設(shè)大于如此出錯(cuò) { cout<<"進(jìn)程 "<

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

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

19、Avaliable[flag++]; } showdata(); safe(); } void delresources(){//刪除資源 char ming; int i,flag=1; cout<<"請(qǐng)輸入需要?jiǎng)h除的資源名稱:"; 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(){//修改資源函數(shù) cout<<"系統(tǒng)目前可用的資源[Avaliable]:"<>Avaliable[0]>>A

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

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

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

24、"請(qǐng)輸入各進(jìn)程已經(jīng)申請(qǐng)的資源量("<>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1; Need[i][j]=Max[i][j]-Allocation[i][j]; } if(flag) cout<<"申請(qǐng)的資源大于最大需求量,請(qǐng)重新輸入!\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<<"請(qǐng)正確選擇功能號(hào)(0-5)!"<

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


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