当前位置:文档之家› #操作系统课程设计-银行家算法(流程图 源代码 设计报告)

#操作系统课程设计-银行家算法(流程图 源代码 设计报告)

操作系统课程设计-银行家算法(流程图+源代码+设计报告)

一、实验目的:

熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记意。

二、实验要求:

用高级语言编写和调试一个描述银行家算法的程序。

三、实验内容:

1、 设计一个结构体,用于描述每个进程对资源的要求分配情况。包括:进程名——name[5],要求资源数目——command[m](m 类资源),还需要资源数目

——need[m],已分配资源数目——allo[m]。

2、 编写三个算法,分别用以完成:①申请资源;

②显示资源;③释放资源。(动态完成)

四、程序流程图

五、源程序:最新版本:bk5.c

/*bk2.c::可以自定义进程及资源数目,可选择读文件或创建新文件,但不超过 10,5*/

/*可修改# define NP 10*/

/* # define NS 5 */ /*资源种类*/

/*bk3.c::可以继续分配资源(〉2)*/

/*bk4.c::可保存分析结果*/

/*bk5.c::除以上功能外,对暂时不能分配的可以进行另外一次尝试,并恢复已分配的资源*/

/*

四、程序流程图:

五、源程序:最新版本:bk5.c

/*bk2.c::可以自定义进程及资源数目,可选择读文件或创建新文件,但不超过 10,5*/

/*可修改# define NP 10*/

/* # define NS 5 */ /*资源种类*/

/*bk3.c::可以继续分配资源(〉2)*/

/*bk4.c::可保存分析结果*/

/*bk5.c::除以上功能外,对暂时不能分配的可以进行另外一次尝试,并恢复已分配的资源*/

#include "string.h"

#include "stdio.h"

#include "dos.h"

#include "conio.h"

#define MOVEIN 1

#define GUIYUE 2

#define ACC 3

#define OK 1

#define ERROR 0

#define MAXSH 7

#define MAXSHL 10

#define MAXINPUT 50

#define maxsize 100

int act;

int ip=0;

int line=0; /*line 为要写的行号,全局变量*/

int writeok;

int right;

char wel[30] = {"Welcome To Use An_Li System"};

char ente[76]={" 警告:未经作者同意不得随意复制更改!"};

char rights[40]={"Copyright (c) 2002"};

struct date today;

sssssssssssss;

ttttttttttttt

{int data[maxsize];

int top;

}stack;

int emptystack(stack *S)

{if(S->top==48&&S->data[S->top]==35)return(1); /*35 is '#'*/

else return(0);

}

int push(stack *S,int x)

{if(S->top>=maxsize-1)return(-1);

else{S->top++;

S->data[S->top]=x;

return(0);

}

}

int gettop(stack *S)

{return S->data[S->top];

}

int pop(stack *S)

{if(emptystack(S)){

printf("the stack is empty\n");

exit(1);}

else S->top--;

return S->data[S->top+1];

}

void initstack(stack *S)

{int i;

S->top=0;S->data[S->top]=35;

}

/*****模拟打字机的效果*********/

delay_fun()

{

int i;

void music();

for(i=0;;i++)

{

if(wel!='\0')

{

delay(1000);

textcolor(YELLOW);

gotoxy(26+i,8);

cprintf("%c",wel);

printf("谢谢");

printf("网络 ");

music(1,60);

}

else break;

}

delay(500000);

for(i=0; ; i++)

{

if(ente!='\0')

{

delay(1000);

textcolor(RED);/*显示警告及版权*/

gotoxy(2+i,11);

cprintf("%c",ente);

music(1,60);

}

else break;

}

delay(40000);

for(i=0;;i++)

{

if(rights != '\0')

{

delay(1000);

textcolor(YELLOW);

gotoxy(30+i,14);

cprintf("%c",rights);

music(1,60);

}

else

break;

}

getch();

}

/*********登陆后的效果**********/

logined()

{ int i;

clrscr();

gotoxy(28,10);

textcolor(YELLOW);

cprintf("程序正在载入 请稍候.....");

gotoxy(35,12);

for(i=0;i<=50;i++)

{

gotoxy(40,12);

delay(8000);

cprintf("%02d%已完成",i*2);

gotoxy(i+15,13);

cprintf("\n");

cprintf("|");

}

main0();

}

/*********对 PC 扬声器操作的函数****/

void music(int loop,int f) /* f 为频率*/

{ int i;

for(i=0;i<30*loop;i++)

{

sound(f*20);

delay(200);}

nosound();

}

int analys(int s,int a)

{int hh,pos;

switch(a)

{case (int)'i':hh=0;break;

case (int)'+':hh=1;break;

case (int)'*':hh=2;break;

case (int)'(':hh=3;break;

case (int)')':hh=4;break;

case (int)'#':hh=5;break;

case (int)'E':hh=6;break;

case (int)'T':hh=7;break;

case (int)'F':hh=8;break;

default:{printf(" \n analys()分析发现不该有的字符 %c !(位置:%d)",a,ip+1);

writeerror('0',"\n............分析出现错误!!!");

writeerror(a,"\n 错误类型: 不该有字符 ");

printf("谢谢");

printf("网 ");

return ERROR;

}

}

pos=(s-48)*10+hh;

switch(pos)

{case 3:

case 43:

case 63:

case 73:act=4;return MOVEIN;

case 0:

case 40:

case 60:

case 70:act=5;return MOVEIN;

case 11:

case 81: act=6;return MOVEIN;

case 92:

case 22:act=7;return MOVEIN;

case 84:act=11;return MOVEIN;

/*-------------------------------------------*/

case 91:

case 94:

case 95:

act=1;return GUIYUE;

case 21:

case 24:

相关主题