c语言死锁算法实验报告,死锁实验报告
《死鎖實驗報告》由會員分享,可在線閱讀,更多相關《死鎖實驗報告(3頁珍藏版)》請在人人文庫網上搜索。
1、操作系統實驗二報告一實驗名稱:死鎖的檢測與解除二實驗目的:觀察死鎖產生的條件,并使用適當的算法,有效的防止和避免死鎖的發生。三實驗內容:死鎖的檢測算法:1找出不再申請資源的進程,將它們所占的資源與系統中還剩余的資源加在一起作為“可分配的資源”,同時對這些進程置標志;2檢測所有無標志的進程,找出一個所需資源量不超過“可分配的資源”量的進程,將其所占用的資源添加到“可分配的資源”中,同時為該進程置標志;重復2)直到所有進程均有標志或無標志的進程的所需資源量均超過“可分配的資源”量;3若進程均有標志,說明系統當前不存在死鎖;若存在無標志的進程,則表示系統當前已有死鎖形成,這些無標志的進程就是一組處于。
2、死鎖狀態的進程。死鎖的解除:當死鎖檢測程序檢測到有死鎖存在時,一般采用兩種方式來解除死鎖:1終止進程:終止一個或多個涉及死鎖的進程的執行,收回它們所占的資源再分配。2搶奪資源:從涉及死鎖的一個或幾個進程中搶奪資源,把奪來的資源再分配給卷入死鎖的其他進程,直到死鎖解除。四實驗代碼:#include using namespace std;#define mp 50/最大進程數#define mr 100/最大資源數int keyongmr;/可用資源數組int MAXmpmr;/最大需求矩陣int fenpeimpmr;/分配矩陣int needmpmr;/剩余需求矩陣bool FINISHmp。
3、;/系統是否有足夠資源分配int pmp; /記錄序列int Workmr; /工作數組int m,n; /m個進程,n個資源int l=0; void Init();/初始化bool Safe();void jc();void main() Init();Safe();if(l!=m)jc();void Init()/初始化算法 int i,j;coutm;coutn;coutMAXij;coutfenpeiij;needij=MAXij-fenpeiij;if(needijkeyongi; coutWorkj) break;if(j=n) FINISHi=true;for(k=0;k;co。
4、utendl;return true; cout會發生死鎖,發生死鎖的進程是:endl;for(i=0;im;i+)if(FINISHi=false)couti ;coutendl;return false;void jc() int i,j,k,q;i=0;while(im&FINISHi=false) /尋找沒執行的for(j=0;jn;j+)keyongj+=fenpeiij; /回收fenpeiij=0;if(Safe()cout死鎖已解除endl;elsei+;Safe();五實驗結果輸入進程已擁有資源數總需求資源數1(0.0.1.2)(0.0.1.2.)2(2.0.0.0)(2.7。
5、.5.0)3(0.0.3.4)(6.6.5.6)4(2.3.5.4)(4.3.5.6)5(0.3.3.2)(0.6.5.2)其中系統可用資源數 為 2 1 0 0給進程3 分配資源數 0 1 0 0六實驗心得:加深理解了有關資源申請分配、檢測以及避免死鎖等概念,了解死鎖和避免死鎖的具體實施方法。死鎖的解除實質上就是如何讓釋放資源的進程能夠繼續運行.為了解除死鎖就要剝奪資源,此時,需要考慮一下幾個問題 : 選擇一個犧牲進程,即要剝奪哪個進程的哪些資源?剝奪的進程如何再次運行?.怎樣保證不發生”餓死”現象 ?“最小代價”,即最經濟合算的算法,使得進程回退帶來的開銷最小.但是,”最小開銷”是很不精確的,進程重新運行的開銷包括很多因素:進程的優先級、該進程使用的資源種類和數量?為完成任務,進程還需要多少資源?有多少進程要被撤銷、該進程被重新啟動運行的次數.。只有綜合考慮各個進程之間的關系,跟資源的關系,才能搞好的解除死鎖。避免系統出錯。
總結
以上是生活随笔為你收集整理的c语言死锁算法实验报告,死锁实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git初学札记(二)————EGit导入
- 下一篇: 继上一篇博客--javaweb通过接口来