




已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
。操作系統(tǒng)銀行家算法課后作業(yè)一、實驗?zāi)康募由顚Χ鄬嵗Y源分配系統(tǒng)中死鎖避免方法銀行家算法的理解,掌握 Windows 環(huán)境下銀行家算法的實現(xiàn)方法。強調(diào)對于資源的管理、申請、比較來避免出現(xiàn)死鎖的情況,保證系統(tǒng)的正常運行。 二、實驗內(nèi)容1.在 Windows 操作系統(tǒng)上,利用DEVC+編寫應(yīng)用程序?qū)崿F(xiàn)銀行家算法。2.創(chuàng)建 n 個線程來申請或釋放資源,只有保證系統(tǒng)安全,才會批準(zhǔn)資源申請。三、實驗步驟(一)設(shè)計思路:銀行家算法可分為個主要的功能模塊,其描述如下:1.初始化由用戶輸入數(shù)據(jù),分別對運行的進(jìn)程數(shù)、總的資源種類數(shù)、總資源數(shù)、各進(jìn)程所需要的最大資源數(shù)量(Max),已分配的資源數(shù)量賦值。2.安全性檢查算法(1)設(shè)置兩個工作向量Work=AVAILABLE;FINISH=false;(2)從進(jìn)程集合中找到一個滿足下述條件的進(jìn)程,F(xiàn)INISH=false;NEED=Work;如找到,執(zhí)行(3);否則,執(zhí)行(4)(3)設(shè)進(jìn)程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。Work+=ALLOCATION;Finish=true;(4).如所有的進(jìn)程Finish= true,則表示安全;否則系統(tǒng)不安全。 3. 銀行家算法在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終都處于安全狀態(tài),便可以避免發(fā)生死鎖。銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。它是最具有代表性的避免死鎖的算法。設(shè)進(jìn)程j提出請求REQUEST i,則銀行家算法按如下規(guī)則進(jìn)行判斷。(1).如果REQUEST j i= NEEDji,則轉(zhuǎn)(2);否則,出錯。(2).如果REQUEST j i= AVAILABLEji,則轉(zhuǎn)(3);否則,出錯。(3).系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù): AVAILABLEi-=REQUESTji; ALLOCATIONji+=REQUESTji;NEEDji-=REQUESTji;用到的數(shù)據(jù)結(jié)構(gòu):實現(xiàn)銀行家算法要有若干數(shù)據(jù)結(jié)構(gòu),它們用來表示資源分配系統(tǒng)的狀態(tài)。令n表示系統(tǒng)中進(jìn)程的數(shù)目,m表示資源的分類數(shù)。還需要以下數(shù)據(jù)結(jié)構(gòu):1).Available是一個長度為m的向量,它表示每類資源可用的數(shù)量。Available j=k,表示j類資源可用的數(shù)量為k。2).Max是一個nm矩陣,它表示每個進(jìn)程對資源的最大需求。Max i,j=k,表示進(jìn)程pi至多可以申請k個j類資源單位。3).Allocation是一個nm矩陣,它表示當(dāng)前分給每個進(jìn)程的資源數(shù)目。Allocation i,j=k,表示進(jìn)程i當(dāng)前分到k個j類資源。4).Need是一個nm矩陣,它表示每個進(jìn)程還缺少多少資源。Needi,j=k,表示進(jìn)程pi尚需k個j類資源才能完成其任務(wù)。顯然Needi,j= Max i,j- Allocation i,j。(二)流程圖四、運行結(jié)果示例這里以書上的例子為例,初值如下表:AllocationMaxAvailableA B CA B CA B CP00 1 07 5 33 3 2P12 0 03 2 2P23 0 19 0 0P32 1 12 2 2P40 0 24 3 3將Available數(shù)列輸入,每個資源的數(shù)量,線程的數(shù)目輸入每個進(jìn)程的最大資源需求量輸入每個線程的資源量僅輸入一個例子再輸入一個不安全的狀態(tài)申請資源量大于最大需求資源量輸入一個申請資源大于資源系統(tǒng)現(xiàn)有可分配資源的情況成功觸發(fā)銀行家算法的條件系統(tǒng)顯示不安全以上實例,很好證明了對于銀行家算法的實例。代碼附錄:/感謝CSDN論壇的代碼資源#include#include#includeint Available10; /可使用資源向量int Max1010; /最大需求矩陣int Allocation1010=0; /分配矩陣int Need1010=0; /需求矩陣int Work10; /工作向量int Finish10; /狀態(tài)標(biāo)志int Request1010; /進(jìn)程申請資源向量int Pause10;int List10;int i,j;int n; /系統(tǒng)資源總數(shù)int m; /總的進(jìn)程數(shù)int a; /當(dāng)前申請的進(jìn)程號int l,e; /計數(shù)器int b=0,c=0,f=0,g; /計數(shù)器void mainenter()/主要的輸入部分代碼 printf(請輸入系統(tǒng)總共有的資源數(shù):); scanf(%d,&n); printf(請輸入總共有多少個進(jìn)程:); scanf(%d,&m); for(i=1;i=n;i+) printf(第%d類資源有的資源實例:,i); scanf(%d,&Availablei); for(i=1;i=m;i+) for(j=1;j=n;j+) printf(進(jìn)程P%d對第%d類資源的最大需求量:,i,j); scanf(%d,&Maxij); Needij=Maxij; void mainrequest() /進(jìn)程提出新申請的代碼部分 printf(請輸入申請資源的進(jìn)程:); scanf(%d,&a); for(i=1;iNeedai) printf(n出錯!進(jìn)程申請的資源數(shù)多于它自己申報的最大量n); if(RequestaiAvailablei) printf(nP%d必須等待n,a);/以下是試探性分配 Availablei=Availablei-Requestai; Allocationai=Allocationai+Requestai; Needai=Needai-Requestai; Worki=Availablei; for(i=1;i=m;i+) Pausei=Availablei;/Pausei只是一個暫時寄存的中間變量,為防止在下面 /安全性檢查時修改到Availablei而代替的一維數(shù)組 Finishi=false; for(g=1;g=m;g+) for(i=1;i=m;i+) b=0; /計數(shù)器初始化 for(j=1;j=n;j+) if(Needij=Pausej) b=b+1; if(Finishi=false&b=n) for(l=1;l=n;l+) Pausel=Pausel+Allocationil; Finishi=true; printf($ %d ,i);/依次輸出進(jìn)程安全序列之一中每個元素 printf(n); for(i=1;i=m;i+) if(Finishi=true) f=f+1;/統(tǒng)計Finishitrue的個數(shù) if (f=m) printf(safe static); f=0;/將計數(shù)器f重新初始化,為下一次提出新的進(jìn)程申請做準(zhǔn)備 else printf( unsafe static );/以下代碼為當(dāng)系統(tǒng)被判定為不安全狀態(tài)時 /返回提出申請前的狀態(tài) for(i=1;i=n;i+) Availablei=Availablei+Requestai; Allocationai=Allocationai-Requestai; Needai=Needai+Requestai; void mainprint() printf(當(dāng)前的系統(tǒng)狀態(tài)n); printf( 目前占有量 最大需求量 尚需要量 n進(jìn)程); for(i=1;i=n;i+) for(j=1;j=n;j+) printf( %d類,j); for(i=1;i=m;i+) printf(nP%d,i); for(j=1;j=n;j+) printf( %d ,Allocationij); for(j=1;j=n;j+) printf( %d ,Maxij); for(j=1;j=n;j+) printf( %d ,Needij); printf(nn系統(tǒng)剩余資源量: ); for(i=1;i=n;i+) printf( %d ,Availablei); printf(n);int main() int k,h=1; while(h) system(cls); printf(nn 1:輸入系統(tǒng)的資源數(shù)、申請進(jìn)程數(shù)、每個類資源的實例數(shù)); printf(n 2: 輸入進(jìn)程的資源申請); printf(n 3: 輸出系統(tǒng)狀態(tài)); printf(n 4: 退出程序); printf(nn 請選擇 ); scanf(%d,&k); switch(k) case 1:mainenter(); break; case 2:mainrequest(); break; case 3:mainprint(); break; case 4:h=0; break; printf(n); system(pause); system(cls); printf(nn 謝謝使用 n); printf(nn See you next time
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年團(tuán)組織考核內(nèi)容試題及答案
- 2025年中級會計臨考復(fù)習(xí)策略試題及答案
- 高級審計師備考成功案例試題及答案
- 適應(yīng)考試形式變化的2024年高級審計師考試試題及答案
- 202年初中學(xué)業(yè)水平考試地理模擬卷及答案(人文地理專項)-世界地理知識應(yīng)用試題
- 護(hù)理法律常識試題及答案總結(jié)
- 2025年ACCA國際注冊會計師考試真題卷:商業(yè)法律與倫理案例分析試題
- 2025年環(huán)境影響評價工程師考試真題卷(環(huán)境評價方法與標(biāo)準(zhǔn))
- 2025年醫(yī)保知識競賽題庫及答案(醫(yī)保目錄解讀與醫(yī)療保險法規(guī)實施試題)
- 建造師考試常見誤區(qū)解析試題及答案
- 《頁巖氣(頁巖油)開發(fā)地塊特征污染物土壤環(huán)境生態(tài)安全閾值確定技術(shù)指南編制說明》
- 2024年09月全國2024廈門國際銀行青年銀行家(分行市場類)校園招考筆試歷年參考題庫附帶答案詳解
- 保護(hù)環(huán)境的課件英文版
- 醫(yī)院預(yù)防職務(wù)犯罪講座
- 2025屆山東省師大附中高考數(shù)學(xué)一模試卷含解析
- 房產(chǎn)出租授權(quán)委托書
- 音樂引導(dǎo)的運動節(jié)奏
- 起重工的安全技術(shù)操作規(guī)程(4篇)
- 裝配式圍擋施工方案
- 2024年注冊安全工程師真題答案與解析【法規(guī)】
- 專題12 數(shù)列-【好題匯編】五年(2020-2024)高考數(shù)學(xué)真題分類匯編(含答案解析)
評論
0/150
提交評論