銀行家死鎖避免算法模擬實現(xiàn)(Java)_第1頁
銀行家死鎖避免算法模擬實現(xiàn)(Java)_第2頁
銀行家死鎖避免算法模擬實現(xiàn)(Java)_第3頁
銀行家死鎖避免算法模擬實現(xiàn)(Java)_第4頁
銀行家死鎖避免算法模擬實現(xiàn)(Java)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

1、*大學(xué)計算機學(xué)院實 驗 報 告 冊院系名稱: 計算機科學(xué)學(xué)院 課程名稱: 操作系統(tǒng) 實驗學(xué)期 2009 年至 2010 年 第 二 學(xué)期專業(yè)班級: 計算機科學(xué)與技術(shù) 2008級1班 姓名: HORACE 學(xué)號: 20081* 指導(dǎo)教師: *老師 實驗最終成績: 實驗報告須知1學(xué)生填寫實驗報告應(yīng)按規(guī)范填寫,填寫格式見由任課老師給出的實驗報告樣本;2學(xué)生應(yīng)填寫的內(nèi)容包括:封面相關(guān)欄目、第一頁中本學(xué)期(年)開設(shè)實驗課程情況一覽表中的實驗名稱、學(xué)時數(shù);每次報告中的實驗性質(zhì)、同組人姓名、實驗日期、以及實驗報告中的一至五項;3教師填寫內(nèi)容為:實驗評價、每次報告成績、第一頁中本學(xué)期(年)開設(shè)實驗課程情況一覽

2、表中成績、及封面的實驗最終成績;4學(xué)生實驗結(jié)束后,教師應(yīng)對學(xué)生實驗結(jié)果進行核實,學(xué)生方可離開實驗室。5、實驗成績等級分為(90100分)優(yōu),(8089分)良,(70-79分)中,(6069分)及格,(59分)不及格。6本實驗冊應(yīng)妥善保管,本課程實驗結(jié)束后應(yīng)交回實驗室。實驗報告(7)實驗名稱死鎖避免算法實現(xiàn)同組人姓名實驗性質(zhì) 基本操作 設(shè)計性 綜合性 驗證性實驗日期2010-05-10實驗成績教師評價:實驗預(yù)習(xí) 實驗操作 實驗結(jié)果 實驗報告 其它 教師簽名:一、實驗?zāi)康募耙螅?)了解操作系統(tǒng)如何處理死鎖(2)通過編寫程序掌握如何利用銀行家算法來實現(xiàn)死鎖的避免。二、實驗內(nèi)容(1)用熟悉的計算機編

3、程語言編寫一實現(xiàn)計算機資源動態(tài)分配的程序。(2)要求接收用戶輸入數(shù)據(jù),利用銀行家算法來判斷該次請求能否分配。(3)掌握操作系統(tǒng)是如何在資源的動態(tài)分配過程中防止系統(tǒng)死鎖的發(fā)生。三、主要設(shè)備及軟件PC、WindowsXP操作系統(tǒng)、MyEclipse Java編譯環(huán)境四、實驗流程、操作步驟或核心代碼、算法片段本人以Java語言模擬實現(xiàn)銀行家避免死鎖算法,其中分別把銀行家算法和安全性檢測算法封裝在不同的類中,即class Banker和class SafeTest,最終在主類中創(chuàng)建Banker類對象進行測試。具體實現(xiàn)代碼如下:1、銀行家類Banker的實現(xiàn):package com.kaiping.Av

4、oidDeadlock;import java.util.Scanner;public class Banker int ProcessNum;/進程數(shù)int SourceNum;/資源類型數(shù)int Available;/可利用資源向量int Max;/最大需求矩陣int Allocation;/分配矩陣int Need;/需求矩陣public Banker(int pN, int sN)ProcessNum = pN;SourceNum = sN;Available = new intSourceNum;Max = new intProcessNumSourceNum;Allocation

5、= new intProcessNumSourceNum;Need = new intProcessNumSourceNum;public void Initilize()/初始化方法Scanner s = new Scanner(System.in); System.out.println("=初始化="); for(int i = 0; i < Max.length; i+) System.out.print("請依次輸入第" + i + "進程的各資源數(shù):"); for(int j = 0; j < Maxi.len

6、gth; j+) Maxij = s.nextInt(); for(int i=0;i<Allocation.length;i+) System.out.print("請依次輸入第" + i + "進程中已分配資源的數(shù)量:"); for(int j=0;j<Allocationi.length;j+) Allocationij = s.nextInt(); Needij = Maxij - Allocationij; for(int i=0;i<Available.length;i+) System.out.print("請輸

7、入系統(tǒng)中第" + i + "種資源的剩余量:"); Availablei = s.nextInt(); System.out.println("=初始化結(jié)果="); System.out.println(" MAX ALLOCATION NEED AVAILABLE"); for(int i = 0; i < ProcessNum; i+) System.out.print("P" + i + ": "); for(int j = 0; j < SourceNum; j+)

8、 if(Maxij>9)/如果是兩位數(shù),控制格式,在數(shù)字前少輸出一個" "。 System.out.print(Maxij + " "); else System.out.print(" " + Maxij + " "); System.out.print(" "); for(int j = 0; j < SourceNum; j+) if(Allocationij>9) System.out.print(Allocationij + " "); else

9、System.out.print(" " + Allocationij + " "); System.out.print(" "); for(int j = 0; j < SourceNum; j+) if(Needij>9) System.out.print(Needij + " "); else System.out.print(" " + Needij + " "); if(i=0) System.out.print(" "); for(

10、int j=0;j<SourceNum;j+) if(Availablej>9) System.out.print(Availablej + " "); else System.out.print(" " + Availablej + " "); System.out.println(); System.out.println("=完成初始化="); System.out.println();public void BakerAlgorithm()/銀行家算法具體實現(xiàn)int Request= new i

11、ntSourceNum;int number;/進程號Scanner s=new Scanner(System.in);int i;/循環(huán)計數(shù)器System.out.print("請輸入要申請資源的進程號:");number = s.nextInt();System.out.print("請輸入請求向量:");for(i=0; i<SourceNum; i+)Requesti = s.nextInt();for(i=0; i<SourceNum; i+)if(Requesti > Neednumberi)/所需資源數(shù)大于需求量Syste

12、m.out.println("進程所要求分配的資源數(shù)已超過其宣布的最大值,系統(tǒng)不予分配!");return;if(Requesti > Availablei)/所需資源大于可利用資源System.out.println("系統(tǒng)中無足夠的資源滿足進程的申請,系統(tǒng)不予分配!");return;for(i=0; i<SourceNum; i+)/假設(shè)系統(tǒng)將申請資源數(shù)分配給該進程,對數(shù)據(jù)進行相關(guān)修改Availablei -= Requesti;Neednumberi -= Requesti;Allocationnumberi += Requesti;

13、SafeTest safetest = new SafeTest(this);if(safetest.SafeTestAlgorithm()/安全性檢查結(jié)果為安全System.out.println("系統(tǒng)可以為該進程分配資源!");return;elseSystem.out.println("系統(tǒng)不為該進程分配資源!");for(i=0; i<SourceNum; i+)/系統(tǒng)不能為該進程分配資源,前面的假設(shè)作廢,對數(shù)據(jù)進行相關(guān)修改Availablei += Requesti;Neednumberi += Requesti;Allocationn

14、umberi -= Requesti;return;2、安全性檢測算法類SafeTest的實現(xiàn):package com.kaiping.AvoidDeadlock;class SafeTest int ProcessNum;/進程數(shù)int SourceNum;/資源類型數(shù)int SafeSequence;/安全序列向量int Work;/空閑資源矩陣boolean Finish;/進程資源分配完成標(biāo)志Banker banker;/銀行家實例public SafeTest(Banker bK)banker = bK;ProcessNum = bK.ProcessNum;SourceNum = b

15、K.SourceNum;SafeSequence = new intProcessNum;Work = new intSourceNum;Finish = new booleanProcessNum;for(int i = 0; i < ProcessNum; i+)/初始化向量SafeSequence、FinishSafeSequencei = 0;Finishi = false;for(int i = 0;i < SourceNum; i+)/初始化向量WorkWorki = bK.Availablei;public boolean SafeTestAlgorithm()/安全

16、性測試算法具體實現(xiàn)int k = 0;int i,j;/循環(huán)計數(shù)器for(i=0; i<ProcessNum; i+)if(Finishi=false)for(j=0; j<SourceNum; j+)/*判斷當(dāng)前進程需求矩陣能否得到滿足*/if(banker.Needij > Workj)break;/不滿足則跳出if(j = SourceNum)/第i個進程滿足SafeSequencek+=i;/將進程號存入安全序列for(int q=0; q<SourceNum; q+)/修改空閑資源矩陣Workq += banker.Allocationiq;Finishi =

17、 true;/標(biāo)志該進程可完成i = -1;/下次檢查重頭開始for(i=0; i<ProcessNum; i+)/檢查標(biāo)志數(shù)組,若尚有false則未找到安全序列if(!Finishi)System.out.println("找不到安全序列,系統(tǒng)處于不安全狀態(tài)!");return false;System.out.println("找到安全序列:");for(i=0; i<ProcessNum; i+)/顯示安全序列System.out.print("P"+SafeSequencei+" ");Syst

18、em.out.println();System.out.println("系統(tǒng)處于安全狀態(tài)!");return true;3、主類AvoidDeadlockImplement的實現(xiàn):package com.kaiping.AvoidDeadlock;import java.util.Scanner;public class AvoidDeadlockImplement public static void main(String args) int ProNum,SouNum;/進程數(shù)、資源類型數(shù)Banker banker;/銀行家算法對象SafeTest safetest;/安全性測試算法對象Scanner scanner=new Scanner(System.in);System.out.print("請依次輸入系統(tǒ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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論