銀行家演算法 鄭金

2023-01-26 09:24:05 字數 3041 閱讀 6339

姓名: 學號班級:

一、摘要:

死鎖會引起計算機工作僵死,因此作業系統中必須防止。本實驗讓我們獨立的使用高階語言編寫和除錯乙個系統動態分配資源的簡單模擬程式,了解死鎖產生的條件和原因,並採用銀行家演算法有效地防止死鎖的發生,以加深對課堂上所講授的知識的理解。

二、關鍵字:

可利用資源向量**ailable;最大需求矩陣max;分配矩陣allocation;需求矩陣need;向量

三、正文:

1)概述

設計有n個程序共享m個系統資源的系統,程序可動態的申請和釋放資源,系統按各程序的申請動態的分配資源。系統能顯示各個程序申請和釋放資源,以及系統動態分配資源的過程,便於使用者觀察和分析;

2)作業系統相關理論知識

2.11. 可利用資源向量**ailable ,它是乙個含有m個元素的陣列,其中的每乙個元素代表一類可利用的資源的數目,其初始值是系統中所配置的該類全部可用資源數目。其數值隨該類資源的分配和**而動態地改變。

如果**ailable(j)=k,標是系統中現有rj類資源k個。

2. 最大需求矩陣max,這是乙個n×m的矩陣,它定義了系統中n個程序中的每乙個程序對m類資源的最大需求。如果max(i,j)=k,表示程序i需要rj類資源的最大數目為k。

3. 分配矩陣allocation,這是乙個n×m的矩陣,它定義了系統中的每類資源當前一分配到每乙個程序的資源數。如果allocation(i,j)=k,表示程序i當前已經分到rj類資源的數目為k。allocation i表示程序i的分配向量,有矩陣allocation的第i行構成。

4. 需求矩陣need,這是乙個n×m的矩陣,用以表示每個程序還需要的各類資源的數目。如果need(i,j)=k,表示程序i還需要rj類資源k個,才能完成其任務。need i表示程序i的需求向量,由矩陣need的第i行構成。

上述三個矩陣間存在關係:need(i,j)=max(i,j)-allocation(i,j);

2.2request i 是程序pi 的請求向量。request i (j)=k表示程序pi請求分配rj類資源k個。當pi發出資源請求後,系統按下述步驟進行檢查:

1. 如果request i ≤need,則轉向步驟2;否則,認為出錯,因為它所請求的資源數已超過它當前的最大需求量。

2. 如果request i ≤**ailable,則轉向步驟3;否則,表示系統中尚無足夠的資源滿足pi的申請,pi必須等待。

3. 系統試探性地把資源分配給程序pi,並修改下面資料結構中的數值:

**ailable = **ailable - request i

allocation i= allocation i+ request i

need i= need i - request i

4. 系統執行安全性演算法,檢查此次資源分配後,系統是否處於安全狀態。如果安全才正式將資源分配給程序pi,以完成本次分配;否則,將試探分配作廢,恢復原來的資源分配狀態,讓程序pi等待。

假定系統有5個程序(p0,p1,p2,p3,p4)和三類資源(a,b,c),各種資源的數量分別為10,5,7,在t0時刻的資源分配情況如下圖:

maxallocationneed**ailable

a b c a b ca b c a b c

p0 7 5 30 1 07 4 3 3 3 2

2 3 0 )

p1 3 2 22 0 01 2 2

3 0 20 2 0 )

p2 9 0 23 0 26 0 0

p3 2 2 22 1 10 1 1

p4 4 3 30 0 24 3 1

3)總體設計

1. 設定兩個向量。

work:它表示系統可提供給程序繼續執行的各類資源數目,它包含m個元素,開始執行安全性演算法時,work = **ailable。

finish:它表示系統是否有足夠的資源分配給程序,使之執行完成,開始finish(i)=false;當有足夠資源分配給程序pi時,令finish(i)=true;

2. 從程序集合中找到乙個能滿足下述條件的程序。

finish(i)= = false;

need i ≤work;

如找到則執行步驟3;否則,執行步驟4;

3. 當程序pi獲得資源後,可順利執行直到完成,並釋放出分配給它的資源,故應執行

work = work + allocation i

finish(i)=true;轉向步驟2;

4. 若所有程序的finish(i)都為true,則表示系統處於安全狀態;否則,系統處於不安全狀態。

4)演算法及詳細設計

#include<>

#include<>

#include

using namespace std;

typedef struct max1資源的最大需求量

maxtypedef struct allocation1 //已分配的資源數

allocation

typedef struct need1 //還需要的資源數

need

struct **ailable1 //可利用的資源量

q;struct pr定義乙個結構

p[5];

char na[5];

void init讀入檔案""

fclose(fp); //關閉檔案

}int fenpei()//分配資源

count++;//禁止迴圈過多

if(count>5)return 0;

}return 1;

}int shq申請資源

{ int m=0,i=0,j=0,k=0m為程序號; i,j,k為申請的三類資源數

cout<<"請輸入程序號和請求資源的數目!"< cout<<"如:程序號資源a b c"< cout<<" 0 2 0 2"< cin>>m>>i>>j>>k;

if(i<=p[m].<=p[m]. &&k<=p[m].

{if(i<=<=<=

銀行家演算法

實驗2 銀行家演算法 2學時 一 實驗目的 理解銀行家演算法,掌握程序安全性檢查的方法及資源分配的方法。二 實驗內容 編寫程式實現銀行家演算法,並驗證程式的正確性。三 實驗要求 編制模擬銀行家演算法的程式,並以下面給出的例子驗證所編寫的程式的正確性。例子 某系統有a b c d 4類資源共5個程序 ...

銀行家演算法

include include include define m 5 define n 3 define false 0 define true 1 m個程序對n類資源最大資源需求量 int max m n 系統可用資源數 int ailable n m個程序對n類資源最大資源需求量 int all...

銀行家演算法

作業系統課程設計報告 院 系 電腦科學與工程學院 專業班級 學生學號 指導教師 2011年 12月 目錄摘要1 緒論1 1 需求分析1 1 1銀行家演算法的提出1 1 2 銀行家演算法設計思想1 1 3銀行家演算法設計分析2 2 概要設計3 2 1主要的常量變數4 2 2演算法中用到的資料結構的說明...