實驗三死鎖檢測和解除_第1頁
實驗三死鎖檢測和解除_第2頁
實驗三死鎖檢測和解除_第3頁
實驗三死鎖檢測和解除_第4頁
實驗三死鎖檢測和解除_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

創(chuàng)作時間:二零二一年六月三十天南華大年夜學(xué)計算機科學(xué)與技術(shù)學(xué)院之答祿夫天創(chuàng)作創(chuàng)作時間:二零二一年六月三十天實驗陳述課程名稱把持系統(tǒng)I姓名學(xué)號專業(yè)班級任課教師日期創(chuàng)作時間:二零二一年六月三十天創(chuàng)作時間:二零二一年六月三十天一、實驗內(nèi)容死鎖的檢測與排除二、實驗?zāi)康恼莆瞻殉窒到y(tǒng)的進度管理與資源分派原理,掌握對把持系統(tǒng)平安性查驗和死鎖的排除的原理和方法.三、實驗題目系統(tǒng)中有m個同類資源被n個進度共享,每個進度對資源的最大年夜需求數(shù)分別為S1,S2,,Sn,且Max(Si)<=m,(i=1,2,n).進度能夠靜態(tài)地申請資源和開釋資源.編寫一個法式,實現(xiàn)銀專家算法,當(dāng)系統(tǒng)將資源分派給某一進度而不會死鎖時,就分派之.不然,推延分派,并顯示適合的信息.分別使用檢測“進度—資源循環(huán)等待鏈”的方法和Coffman的算法來檢測進度的死鎖狀態(tài).對同樣的進度資源分派、占用次序,比力兩個算法的結(jié)果.四、設(shè)計思路和流程圖1.輸入系統(tǒng)進度數(shù)目n和資源種類數(shù)目m.2.輸入每類資源的數(shù)目.3.輸入每個進度每類資源的最大年夜需求量和已獲資源量.4.查驗系統(tǒng)的安全.5.若檢測結(jié)果為系統(tǒng)不服安,能夠?qū)λ梨i進行排除,直到安全為止再檢測.6.重復(fù)5把持,直到全部進度運轉(zhuǎn)完成.創(chuàng)作時間:二零二一年六月三十天創(chuàng)作時間:二零二一年六月三十天五、主要數(shù)據(jù)構(gòu)造及其說明創(chuàng)作時間:二零二一年六月三十天創(chuàng)作時間:二零二一年六月三十天intMax[100][100]={0};//各進度所需各種資源的最大年夜需求;intAvailable[100]={0};//系統(tǒng)可用資源;charName[100]={0};//資源的名稱;intAllocation[100][100]={0};//系統(tǒng)已分派資源;intNeed[100][100]={0};//還需要資源intRequest[100]={0};//懇求資源向量;intTemp[100]={0};//存放安全序列;intWork[100]={0};//存放系統(tǒng)可供給資源;boolFinish[100]={0};//存放已達成的序列六、源法式并附上說明#include"stdafx.h"#include<iostream>#defineFalse0#defineTrue1usingnamespacestd;intMax[100][100]={0};//各進度所需各種資源的最大年夜需求;intAvailable[100]={0};//系統(tǒng)可用資源;charName[100]={0};//資源的名稱;intAllocation[100][100]={0};//系統(tǒng)已分派資源;intNeed[100][100]={0};//還需要資源intRequest[100]={0};//懇求資源向量;intTemp[100]={0};//存放安全序列;intWork[100]={0};//存放系統(tǒng)可供給資源;boolFinish[100]={0};intM=100;//作業(yè)的最大年夜數(shù)intN=100;//資源的最大年夜數(shù)intl=0;//記錄安全進度的TEMP下標(biāo)voidShowData( )//初始化資源矩陣{inti,j;cout<<"系統(tǒng)可用資源[Available]:"<<endl;for(i=0;i<N;i++)cout<<Name[i]<<"";cout<<endl;for(j=0;j<N;j++)cout<<Available[j]<<"";//顯示可分派的資源cout<<endl;cout<<"MaxAllocationNeed"<<endl;cout<<"進度名";for(j=0;j<3;j++)//MAXALLOCATIONNEED共列{for(i=0;i<N;i++){cout<<Name[i]<<"";創(chuàng)作時間:二零二一年六月三十天創(chuàng)作時間:二零二一年六月三十天}cout<<"";}cout<<endl;for(i=0;i<M;i++){cout<<""<<i<<"";//輸出進度名for(j=0;j<N;j++)cout<<Max[i][j]<<"";//輸出最大年夜cout<<"";for(j=0;j<N;j++)cout<<Allocation[i][j]<<"";//輸出已分派cout<<"";for(j=0;j<N;j++)cout<<Need[i][j]<<"";//輸出需求cout<<endl;}}boolSafe( )//安全性算法{inti,j,k;for(i=0;i<N;i++)Work[i]=Available[i];//初始化工作向量for(i=0;i<M;i++){Finish[i]=false;//判斷進度i能否已履行}for(i=0;i<M;i++){if(Finish[i]==true){continue;}else{for(j=0;j<N;j++)//考證每一個資源的需求量能否小于可用資源量{if(Need[i][j]>Work[j]){break;}}if(j==N)//若Need都小于Work{Finish[i]=true;for(k=0;k<N;k++){創(chuàng)作時間:二零二一年六月三十天創(chuàng)作時間:二零二一年六月三十天Work[k]+=Allocation[i][k];//進度i履行完后回收資源}Temp[l++]=i;i=-1;}else{continue;}}if(l==M){cout<<"系統(tǒng)是安全的"<<endl;cout<<"安全序列:"<<endl;for(i=0;i<l;i++){cout<<Temp[i];if(i!=l-1){cout<<"-->";}}cout<<""<<endl;returntrue;}}for(i=0;i<M;i++)if(Finish[i]==false)cout<<"會發(fā)存亡鎖,發(fā)存亡鎖的進度是:"<<i<<""<<endl;cout<<endl;returnfalse;}voidunlock( ){inti,j;i=0;cout<<"死鎖排除開始";cout<<endl;while(i<M&&Finish[i]==false)//查找未達成的進度{for(j=0;j<N;j++){Available[j]+=Allocation[i][j];//回收該進度全部資源Allocation[i][j]=0;創(chuàng)作時間:二零二一年六月三十天創(chuàng)作時間:二零二一年六月三十天}if(Safe( ))cout<<"死鎖已排除"<<endl;elsei++;//到下一個進度Safe( );}}intmain( ){inti,j,number,m,n,flag;intover;charmc;cout<<"--------------------------死鎖的檢測與排除----------------------------------";cout<<endl;cout<<endl;cout<<"輸入此后系統(tǒng)可供使用資源種類的數(shù)目:";cin>>n;N=n;for(i=0;i<n;i++){cout<<"資源"<<i+1<<"的名稱:";cin>>mc;Name[i]=mc;cout<<"資源"<<i+1<<"的數(shù)目:";cin>>number;Available[i]=number;cout<<endl;}cout<<endl;cout<<"請輸入作業(yè)的數(shù)目:";cin>>m;M=m;cout<<"請輸入各進度的最大年夜需求量("<<m<<"*"<<n<<"矩陣)[Max]:"<<endl;for(inti=0;i<m;i++)for(intj=0;j<n;j++){cin>>Max[i][j];}do{flag=0;cout<<"請輸入各進度已經(jīng)分派資源量("<<m<<"*"<<n<<"矩陣)[Allocation]:"<<endl;for(inti=0;i<m;i++)for(j=0;j<n;j++)創(chuàng)作時間:二零二一年六月三十天創(chuàng)作時間:二零二一年六月三十天{cin>>Allocation[i][j];if(Allocation[i][j]>Max[i][j])flag=1;Need[i][j]=Max[i][j]-Allocation[i][j];}if(flag)cout<<"初次輸入的已分派資源已經(jīng)大年夜于最大年夜需求量請從頭輸入!\n";}while(flag);//當(dāng)申請資源切合要求時enddoShowData( );//顯示Safe( );//安全檢測if(l!=m)//當(dāng)安全進度數(shù)不即是全部進度數(shù)unlock( );cout<<"運轉(zhuǎn)結(jié)束"<<endl;cin>>over;}七、法式運轉(zhuǎn)時的初值和運轉(zhuǎn)結(jié)果創(chuàng)作時間:二零二一年六月三十天創(chuàng)作時間:二零二一年六月三十天八、實驗領(lǐng)會經(jīng)過本次實驗,比力完好的掌握了把持系統(tǒng)的進度管理與資源分配原理,以及對把持系統(tǒng)安全性查驗和死鎖的排除的原理和方法.一開始,對死鎖的排除,我不過從第一個進度開始剝奪其資源,也無論它能否是發(fā)生了死鎖,向來剝奪到死鎖排除為止.而后,經(jīng)過對法式進行改良,讓其能夠判斷死鎖進度與非死鎖進度,而后從第一個死鎖進

溫馨提示

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

最新文檔

評論

0/150

提交評論