




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 實(shí)驗(yàn)二:死鎖的檢測(cè)和預(yù)防一、 實(shí)驗(yàn)?zāi)康?、進(jìn)一步了解進(jìn)程的并發(fā)執(zhí)行。2、加強(qiáng)對(duì)進(jìn)程死鎖的理解3、是用銀行家算法完成死鎖檢測(cè)二、 實(shí)驗(yàn)內(nèi)容給出進(jìn)程需求矩陣C、資源向量R以及一個(gè)進(jìn)程的申請(qǐng)序列。使用進(jìn)程啟動(dòng)拒絕和資源分配拒絕(銀行家算法)模擬該進(jìn)程組的執(zhí)行情況。要求:初始狀態(tài)沒有進(jìn)程啟動(dòng)計(jì)算每次進(jìn)程申請(qǐng)是否分配?如:計(jì)算出預(yù)分配后的狀態(tài)情況(安全狀態(tài)、不安全狀態(tài)),如果是安全狀態(tài),輸出安全序列。每次進(jìn)程申請(qǐng)被允許后,輸出資源分配矩陣A和可用資源向量V。每次申請(qǐng)情況應(yīng)可單步查看,如:輸入一個(gè)空格,繼續(xù)下個(gè)申請(qǐng) 三、 實(shí)驗(yàn)環(huán)境VC+四、 實(shí)驗(yàn)原理及實(shí)驗(yàn)思路1、安全狀態(tài):如果存在一個(gè)由系統(tǒng)中所有進(jìn)程構(gòu)
2、成的安全序列P1,Pn,則系統(tǒng)處于安全狀態(tài)。安全狀態(tài)一定是沒有死鎖發(fā)生。 2、不安全狀態(tài):不存在一個(gè)安全序列。不安全狀態(tài)一定導(dǎo)致死鎖。 安全序列:一個(gè)進(jìn)程序列P1,Pn是安全的,如果對(duì)于每一個(gè)進(jìn)程Pi(1in),它以后尚需要的資源量不超過系統(tǒng)當(dāng)前剩余資源量與所有進(jìn)程Pj (j < i )當(dāng)前占有資源量之和。 3、銀行家算法: 我們可以把操作系統(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ì)資源的最大需求量,如果
3、系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當(dāng)前的申請(qǐng)量分配資源,否則就推遲分配。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請(qǐng)資源時(shí),先測(cè)試該進(jìn)程已占用的資源數(shù)與本次申請(qǐng)的資源數(shù)之和是否超過了該進(jìn)程對(duì)資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測(cè)試系統(tǒng)現(xiàn)存的資源能否滿足該進(jìn)程尚需的最大資源量,若能滿足則按當(dāng)前的申請(qǐng)量分配資源,否則也要推遲分配。4、銀行家算法的思路: 1),進(jìn)程一開始向系統(tǒng)提出最大需求量. 2),進(jìn)程每次提出新的需求(分期貸款)都統(tǒng)計(jì)是否超出它事先提出的最大需求量. 3),若正常,則判斷該進(jìn)程所需剩余剩余量(包括本次申請(qǐng))是否超出系統(tǒng)所掌握的 剩余資源量,若
4、不超出,則分配,否則等待. 5、銀行家算法的數(shù)據(jù)結(jié)構(gòu):1),系統(tǒng)剩余資源量An,其中An表示第I類資源剩余量. 2),各進(jìn)程最大需求量,Bmn,其中Bji表示進(jìn)程j對(duì)i 類資源最大需求. 3),已分配資源量Cmn,其中Cji表示系統(tǒng)j程已得到的第i資源的數(shù)量. 4),剩余需求量.Dmn,其中Dji對(duì)第i資源尚需的數(shù)目. 1 / 9五、 流程圖銀行家算法:安全檢測(cè):六、 源代碼#include "string.h" #include <stdio.h> #include <stdlib.h
5、> #define M 5 #define N 3 #define FALSE 0 #define TRUE 1 /*M個(gè)進(jìn)程對(duì)N類資源最大資源需求量*/ int MAXMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3; /*系統(tǒng)可用資源數(shù)*/ int AVAILABLEN=10,5,7; /*M個(gè)進(jìn)程對(duì)N類資源已經(jīng)分配數(shù)量*/ int ALLOCATIONMN=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; /*M個(gè)進(jìn)程還需要N類資源的資源量 */ int NEEDMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3; /*M個(gè)進(jìn)程還需要N類資
6、源的資源量*/ int RequestN=0,0,0; void main() int i=0,j=0; char flag='Y' char finishFlag='Y'void showdata(); void changdata(int); void rstordata(int); int chkerr(int); showdata(); while(finishFlag='Y'|finishFlag='y') /可以分配資源 i=-1; while(i<0|i>=M) /判斷申請(qǐng)的資源號(hào)是否有效 printf(
7、"請(qǐng)輸入需申請(qǐng)資源的進(jìn)程號(hào)(從0到%d,否則重輸入!):",M-1); scanf("%d",&i); if(i<0|i>=M)printf("輸入的進(jìn)程號(hào)不存在,重新輸入!n"); printf("請(qǐng)輸入進(jìn)程%d申請(qǐng)的資源數(shù)n",i); for (j=0;j<N;j+) printf("資源%d:",j); scanf("%d",&Requestj); if(Requestj>NEEDij) /進(jìn)程申請(qǐng)資源數(shù)大于進(jìn)程還需要的資源 pr
8、intf("進(jìn)程%d申請(qǐng)的資源數(shù)大于進(jìn)程%d還需要%d類資源的資源量!申請(qǐng)不合理,出錯(cuò)!請(qǐng)重新選擇!n",i,i,j); flag='N' break; else if(Requestj>AVAILABLEj) /進(jìn)程申請(qǐng)資源數(shù)大于系統(tǒng)可用該類資源量 printf("進(jìn)程%d申請(qǐng)的資源數(shù)大于系統(tǒng)可用%d類資源的資源量!申請(qǐng)不合理,出錯(cuò)!請(qǐng)重新選擇!n",i,j); flag='N' break; if(flag='Y'|flag='y') int result;changdata(i)
9、; result=chkerr(i);if(result=1) rstordata(i); showdata(); else showdata(); /else /showdata(); printf("n"); printf("是否繼續(xù)銀行家算法演示,按'Y'或'y'鍵繼續(xù),按'N'或'n'鍵退出演示: "); getchar();scanf("%c",&finishFlag); void showdata() /顯示各類資源的分配情況 int i,j; pri
10、ntf("系統(tǒng)可用的資源數(shù)為:n"); printf(" "); for (j=0;j<N;j+) printf(" 資源%d:%d ",j,AVAILABLEj); printf("n"); printf("各進(jìn)程還需要的資源量:n"); for (i=0;i<M;i+) printf(" 進(jìn)程%d ",i); for (j=0;j<N;j+) printf("資源%d:%d ",j,NEEDij); printf("n&qu
11、ot;); printf("各進(jìn)程已經(jīng)得到的資源量: n"); for (i=0;i<M;i+) printf(" 進(jìn)程%d ",i); for (j=0;j<N;j+) printf("資源%d:%d ",j,ALLOCATIONij); printf("n"); void changdata(int k) int j; for (j=0;j<N;j+) AVAILABLEj=AVAILABLEj-Requestj; ALLOCATIONkj=ALLOCATIONkj+Requestj; NEE
12、Dkj=NEEDkj-Requestj; void rstordata(int k) int j; for (j=0;j<N;j+) AVAILABLEj=AVAILABLEj+Requestj; ALLOCATIONkj=ALLOCATIONkj-Requestj; NEEDkj=NEEDkj+Requestj; int chkerr(int s) /檢查是否能夠分配該資源 int WORK,FINISHM,tempM; int i,j,k=0; for(i=0;i<M;i+)FINISHi=FALSE; for(j=0;j<N;j+) WORK=AVAILABLEj; i=s; while(i<M) if (FINISHi=FALSE&&NEEDij<=WORK) WORK=WORK+ALLOCATIONij; FINISHi=TRUE; tempk=i; k+; i=0; else i+; for(i=0;i<M;i+) if(FINISHi=FALSE) printf("n系統(tǒng)不安全! 本次資源申請(qǐng)不成功!nn"); return 1; printf("n經(jīng)安全性檢查,系統(tǒng)安全,本次分配成功。nn"); printf(" 本次安全序列:&qu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年資陽(yáng)出租車從業(yè)資格證考試試題
- 2025年伊春機(jī)動(dòng)車二級(jí)教練員考試題庫(kù)
- 葉片培訓(xùn)課件
- 2025年福建參加出租車駕駛員從業(yè)資格考試
- 2025年浙江客運(yùn)從業(yè)資格考試題庫(kù)答案
- 淺導(dǎo)培訓(xùn)課件
- 高中英語(yǔ)人教版(2019)必修2課時(shí)分層作業(yè)10 -Language Points
- 機(jī)房消防培訓(xùn)課件
- 員工不及格評(píng)語(yǔ)
- 建材商城未來發(fā)展方向
- 國(guó)企集團(tuán)公司各崗位廉潔風(fēng)險(xiǎn)點(diǎn)防控表格(廉政)范本
- 反腐敗與廉潔行為管理制度
- 2023年湖北省高級(jí)人民法院及直屬法院招聘雇員制審判輔助人員考試真題
- 高考英語(yǔ)語(yǔ)法專題非謂語(yǔ)動(dòng)詞講解
- ISO28000:2022供應(yīng)鏈安全管理體系
- (2024年)《莊子》二則課件
- 化療病人的營(yíng)養(yǎng)膳食課件
- 高考日語(yǔ)復(fù)習(xí):日語(yǔ)形容詞用法專項(xiàng)課件
- “拍賣委托書–古董拍賣”
- 大型火災(zāi)戰(zhàn)評(píng)報(bào)告
- 切口感染護(hù)理查房
評(píng)論
0/150
提交評(píng)論