操作系统银行家算法 下载本文

内容发布更新时间 : 2024/5/28 8:21:02星期一 下面是文章的全部内容请认真阅读。

一、 实验目的

银行家算法是由Dijkstra设计的最具代表性的避免死锁的算法,本实验要求用高级语言编写一个银行家的模拟算法,通过本实验可以对预防死锁和银行家算法有更深刻的认识。 二、 实验仪器设备

仪器设备名称 规格型号 PC 软件 三、 实验内容 1.设置数据结构

包括可利用资源向量(Availiable),最大需求矩阵(MAX),分配矩阵(Allocation),需求矩阵(Need) 2.设计安全性算法

设置工作向量Work表示系统可提供进程继续运行可利用资源数目,Finish表示系统是否有足够的资源分配给进程。 四、 实验代码

#include #include #include

#include/*用到了getch()*/ #define M 5/*进程数*/ #define N 3/*资源数*/ #define FALSE 0 #define TRUE 1

/*M个进程对N类资源最大资源需求量*/

int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};

编号 备注 64位操作系统 Windos 7 Vc++

/*系统可用资源数*/

int AVAILABLE[N]={3,3,2};

/*M个进程已分配到的N类数量*/

int ALLOCATION[M][N]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; /*M个进程已经得到N类资源的资源量*/

int NEED[M][N]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}}; /*M个进程还需要N类资源的资源量*/ int Request[N]={0,0,0}; void main() {

int i=0,j=0; char k; char flag;

void showdata(); void changdata(int); void rstordata(int); int chkerr(int); showdata(); enter: {

printf(\请输入需申请资源的进程号(从0到\printf(\printf(\):\scanf(\}

if(i<0||i>=M) {

printf(\输入的进程号不存在,重新输入!\\n\goto enter; } err: {

printf(\请输入进程\printf(\

printf(\申请的资源数\\n\printf(\类别:ABC\\n\printf(\

for(j=0;j

scanf(\if(Request[j]>NEED[i][j]) {

printf(\printf(\号进程\

printf(\申请的资源数>进程\printf(\printf(\还需要\printf(\

printf(\类资源的资源量!申请不合理,出错!请重新选择!\\n\goto err; } else {

if(Request[j]>AVAILABLE[j]) {

printf(\进程\printf(\

printf(\申请的资源数大于系统可用\printf(\

printf(\类资源的资源量!申请不合理,出错!请重新选择!\\n\goto err; } } } }

changdata(i); if(chkerr(i)) {

rstordata(i); showdata(); } else

showdata(); printf(\

printf(\按'y'或'Y'键继续,否则退出\\n\flag=getch();

if(flag=='y'||flag=='Y') {

goto enter; } else {

exit(0); } }

/*显示数组*/ void showdata() {