實驗2 銀行家演算法(2學時)
一、實驗目的
理解銀行家演算法,掌握程序安全性檢查的方法及資源分配的方法。
二、實驗內容
編寫程式實現銀行家演算法,並驗證程式的正確性。
三、實驗要求
編制模擬銀行家演算法的程式,並以下面給出的例子驗證所編寫的程式的正確性。
例子:某系統有a、b、c、d 4類資源共5個程序(p0、p1、p2、p3、p4)共享,各程序對資源的需求和分配情況如下表所示。
現在系統中a、b、c、d 4類資源分別還剩1、5、2、0個,請按銀行家演算法回答下列問題:
(1)現在系統是否處於安全狀態?
(2)如果現在程序p1提出需求(0、4、2、0)個資源的請求,系統能否滿足它的請求?
#include ""
#include "iostream"
using namespace std;
#define false 0
#define true 1
#define w 10
#define r 20
int m ; //總程序數
int n ; //資源種類
int all_resource[w];//各種資源的數目總和
int max[w][r]; //m個程序對n類資源最大資源需求量
int **ailable[r]; //系統可用資源數
int allocation[w][r]; //m個程序已經得到n類資源的資源量
int need[w][r]; //m個程序還需要n類資源的資源量
int request[r]; //請求資源個數
void showdata() //函式showdata,輸出資源分配情況
cout< cout< cout《資源0"<<" 資源1"<<" 資源2"< for (i=0;i
cout<}
void changdata(int k) //函式changdata,改變可用資源和已經拿到資源和還需要的資源的值
}void rstordata(int k) //函式rstordata,恢復可用資源和已經拿到資源和還需要的資源的值
}int chkerr(int s) //函式chkerr,檢查是否安全
if(l==n&&finish[i]==false)
for(j=0;j
work[j]+=allocation[i][j];
finish[i]=true;
cout<<" "<<"p"
else
}for(i=0;iif(finish[i]==false)
cout cout cout< cout《分配成功"< system("pause"); cout< return 0; }void bank() //銀行家演算法 else }if(flag=='y'||flag=='y') else //若系統不安全 showdata(); //輸出資源分配情況 }else //若flag=n||flag=n showdata(); cout< cout《繼續輸入y,退出輸入任意鍵: "; 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演算法中用到的資料結構的說明... 姓名 學號班級 一 摘要 死鎖會引起計算機工作僵死,因此作業系統中必須防止。本實驗讓我們獨立的使用高階語言編寫和除錯乙個系統動態分配資源的簡單模擬程式,了解死鎖產生的條件和原因,並採用銀行家演算法有效地防止死鎖的發生,以加深對課堂上所講授的知識的理解。二 關鍵字 可利用資源向量 ailable 最大...銀行家演算法
銀行家演算法
銀行家演算法 鄭金