實(shí)驗(yàn)二:死鎖的檢測(cè)和預(yù)防參考模板_第1頁(yè)
實(shí)驗(yàn)二:死鎖的檢測(cè)和預(yù)防參考模板_第2頁(yè)
實(shí)驗(yàn)二:死鎖的檢測(cè)和預(yù)防參考模板_第3頁(yè)
實(shí)驗(yàn)二:死鎖的檢測(cè)和預(yù)防參考模板_第4頁(yè)
實(shí)驗(yàn)二:死鎖的檢測(cè)和預(yù)防參考模板_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論