




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選文檔計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告一、 實(shí)驗(yàn)名稱(chēng):銀行家算法二、 實(shí)驗(yàn)?zāi)康模恒y行家算法是避免死鎖的一種重要方法,通過(guò)編寫(xiě)一個(gè)簡(jiǎn)單的銀行家算法程序,加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。三、 問(wèn)題分析與設(shè)計(jì):1、算法思路:先對(duì)用戶(hù)提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求是否大于需要的,是否大于可利用的。若請(qǐng)求合法,則進(jìn)行預(yù)分配,對(duì)分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則分配;若不安全,則拒絕申請(qǐng),恢復(fù)到原來(lái)的狀態(tài),拒絕申請(qǐng)。2、銀行家算法步驟:(1)如果Requestior =Need,則轉(zhuǎn)向步驟(2);否則,認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已超過(guò)它所宣布的
2、最大值。(2)如果Requestor=Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無(wú)足夠的資源,進(jìn)程必須等待。(3)系統(tǒng)試探把要求的資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值: Available=Available-Requesti; Allocation=Allocation+Request;Need=Need-Request;(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。 3、安全性算法步驟: (1)設(shè)置兩個(gè)向量工作向量Work。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)
3、行所需要的各類(lèi)資源數(shù)目,執(zhí)行安全算法開(kāi)始時(shí),Work=Allocation;布爾向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開(kāi)始時(shí)先做Finishi=false,當(dāng)有足夠資源分配給進(jìn)程時(shí),令Finishi=true。(2)從進(jìn)程集合中找到一個(gè)能滿足下述條件的進(jìn)程:Finishi=falseNeed<or=Work如找到,執(zhí)行步驟(3);否則,執(zhí)行步驟(4)。(3)當(dāng)進(jìn)程P獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Work=Work+Allocation;Finishi=true; 轉(zhuǎn)向步驟(2)。(4)如果所有進(jìn)程的Finishi=tr
4、ue,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。4、流程圖:系統(tǒng)主要過(guò)程流程圖銀行家算法流程圖安全性算法流程圖四、 實(shí)驗(yàn)代碼:/#define M 5/#define N 3#include <stdio.h> /本實(shí)驗(yàn)中使用到的庫(kù)函數(shù)#include <stdlib.h>#include <string.h>int max51; /開(kāi)始定義銀行家算法中需要用到的數(shù)據(jù)int allocation51;int need51;int available1;int request51;char *finish5;int safe5;int n,i,m;in
5、t k=0;int j=0;int work1;int works51;void line() /美化程序,使程序運(yùn)行時(shí)更加明朗美觀printf("-n");void start() /表示銀行家算法開(kāi)始line();printf(" 銀行家算法開(kāi)始n");printf(" - 死鎖避免方法 n");line();void end() /表示銀行家算法結(jié)束line();printf(" 銀行家算法結(jié)束,謝謝使用n");line();void input() /輸入銀行家算法起始各項(xiàng)數(shù)據(jù)for (n=0;n<5
6、;n+)printf("請(qǐng)輸入進(jìn)程P%d的相關(guān)信息:n",n);printf("Max:");for (m=0;m<1;m+)scanf("%d",&maxnm);printf("Allocation:");for (m=0;m<1;m+)scanf("%d",&allocationnm);for (m=0;m<1;m+)neednm=maxnm-allocationnm;printf("請(qǐng)輸入系統(tǒng)可利用資源數(shù)Available:");for
7、 (m=0;m<1;m+)scanf("%d",&availablem);void output() /輸出系統(tǒng)現(xiàn)有資源情況line();printf("資源情況 Max Allocation Need Availablen");printf("進(jìn)程 A A A A n");line();for(n=0;n<5;n+)printf("P%d%3d%3d%3d",n,maxn0,allocationn0,needn0);if (n=0)printf("%3d%3dn",avai
8、lable0);elseprintf("n");line();void change() /當(dāng)Requesti,j<=Availablej時(shí),系統(tǒng)把資源分配給進(jìn)程Pi,Availablej和Needi,j發(fā)生改變for (m=0;m<1;m+)availablem-=requestim;allocationim+=requestim;needim-=requestim;void outputsafe() /輸出安全序列的資源分配表printf("該安全序列的資源分配圖如下:n");line();printf("資源情況 Work N
9、eed Allocation Work+Allocation Finishn");printf("進(jìn)程 A A A A n");line();for(n=0;n<5;n+)printf("P%d%9d%3d%3d%5d%12sn",safen,workssafen0,needsafen0,allocationsafen0,workssafen0+allocationsafen0,finishn);line();int check() /安全性算法printf("開(kāi)始執(zhí)行安全性算法n");for (m=0;m<1;
10、m+) /數(shù)組work和finish初始化workm=availablem;for (n=0;n<5;n+)finishn="false"safen=0;k=0;for (m=0;m<5;m+)for (n=0;n<5;n+)if(strcmp(finishn,"false")=0 && needn0<=work0 ) /查找可以分配資源但尚未分配到資源的進(jìn)程safek=n; /以數(shù)組safek記下各個(gè)進(jìn)程得到分配的資源的順序workssafek0=work0;work0+=allocationn0; /進(jìn)程執(zhí)行后
11、釋放出分配給它的資源finishn="ture" /finishn變?yōu)?以示該進(jìn)程完成本次分k+;for (m=0;m<5;m+) /判斷是否所有進(jìn)程分配資源完成if (strcmp(finishm,"false")=0)printf("找不到安全序列,系統(tǒng)處于不安全狀態(tài)。n");return 0; /找不到安全序列,結(jié)束check函數(shù),返回0elseif (m=4) /此處m=4表示所有數(shù)組finish的所有元素都為tureprintf("找到安全序列P%d->P%d->P%d->P%d->P
12、%d,系統(tǒng)是安全的n",safe0,safe1,safe2,safe3,safe4);j=1;outputsafe(); /輸出安全序列的資源分配表return 1;void main() /主程序開(kāi)始start();for (;j=0;) /確認(rèn)輸入數(shù)據(jù)的正確性,若輸入錯(cuò)誤,重新輸入input();printf("以下為進(jìn)程資源情況,請(qǐng)確認(rèn)其是否正確:n");output();printf("數(shù)據(jù)是否無(wú)誤:n正確:輸入1n錯(cuò)誤:輸入0n請(qǐng)輸入:");scanf("%d",&j);printf("數(shù)據(jù)確認(rèn)無(wú)
13、誤,算法繼續(xù)。n");if (check()=0) /若check函數(shù)返回值為0,表示輸入的初始數(shù)據(jù)找不到安全序列,無(wú)法進(jìn)行下一步,程序結(jié)束end();exit(0);for(;j=1;) /當(dāng)有多個(gè)進(jìn)程請(qǐng)求資源時(shí),循環(huán)開(kāi)始printf("請(qǐng)輸入請(qǐng)求資源的進(jìn)程i(0、1、2、3、4):"); /輸入發(fā)出請(qǐng)求向量的進(jìn)程及請(qǐng)求向量scanf("%d",&i);printf("請(qǐng)輸入進(jìn)程P%d的請(qǐng)求向量Request%d:",i,i);for(n=0;n<1;n+)scanf("%d",&
14、requestin);for (;requesti0>needi0;) /若請(qǐng)求向量大于需求資源,則認(rèn)為是輸入錯(cuò)誤,要求重新輸入printf("數(shù)據(jù)輸入有誤,請(qǐng)重試!n請(qǐng)輸入進(jìn)程P%d的請(qǐng)求向量Request%d:",i,i);for(n=0;n<1;n+)scanf("%d",&requestin);if(requesti0<=available0) /判斷系統(tǒng)是否有足夠資源提供分配printf("系統(tǒng)正在為進(jìn)程P%d分配資源n",i);change(); /分配資源j=0;elseprintf("
15、;系統(tǒng)沒(méi)有足夠的資源,進(jìn)程P%d需要等待。n",i);if (j=0) /j=0表示系統(tǒng)有足夠資源分配的情況printf("當(dāng)前系統(tǒng)資源情況如下:n"); /輸出分配資源后的系統(tǒng)資源分配情況output();if(check()=0) /若找不到安全系列,則之前的資源分配無(wú)效printf("本次資源分配作廢,恢復(fù)原來(lái)的資源分配狀態(tài)。n");for (m=0;m<1;m+) /恢復(fù)分配資源前的系統(tǒng)資源狀態(tài)availablem+=requestim;allocationim-=requestim;needim+=requestim;output(); /輸出系統(tǒng)資源狀
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字化轉(zhuǎn)型對(duì)文化創(chuàng)意產(chǎn)業(yè)的推動(dòng)作用
- 油菜高產(chǎn)種植技術(shù)的創(chuàng)新與應(yīng)用
- 2025年托??谡Z(yǔ)綜合任務(wù)5-6專(zhuān)項(xiàng)突破:歷年真題詳解與技巧提煉
- 牦牛養(yǎng)殖與可持續(xù)發(fā)展的協(xié)同路徑
- 人工智能推動(dòng)遠(yuǎn)程醫(yī)療服務(wù)的創(chuàng)新發(fā)展
- 民俗文化的跨文化傳播與體驗(yàn)設(shè)計(jì)
- 哲學(xué)的生活智慧
- 春季新品盛宴
- 2025合同范本 物料與采購(gòu)管理系統(tǒng)協(xié)議
- 2025辦公用品購(gòu)銷(xiāo)合同
- 一把手講安全課件:提升全員安全意識(shí)
- 3.4重力壩的應(yīng)力分析資料
- (新版)油田數(shù)字化運(yùn)維理論考試題庫(kù)-下(判斷題)
- YS∕T 1184-2017 原鋁液貯運(yùn)安全技術(shù)規(guī)范
- 黑龍江省易地調(diào)動(dòng)領(lǐng)導(dǎo)干部周轉(zhuǎn)住房管理辦法
- 大型設(shè)備吊裝安全施工施工方法及工藝要求
- 骨科快速康復(fù)(ERAS)
- 四川省成都市金牛區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末數(shù)學(xué)試題
- 上海市靜安區(qū)2023-2024學(xué)年八年級(jí)下學(xué)期期末數(shù)學(xué)試題(無(wú)答案)
- 【現(xiàn)代管理原理與應(yīng)用課程論文:X公司行政管理存在的問(wèn)題及優(yōu)化建議探析3200字】
- 2024年臨床執(zhí)業(yè)醫(yī)師考試真題附答案【培優(yōu)b卷】
評(píng)論
0/150
提交評(píng)論