#操作系统课程设计-银行家算法(流程图 源代码 设计报告)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程设计-银行家算法(流程图+源代码+设计报告)
一、实验目的:
熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记意。
二、实验要求:
用高级语言编写和调试一个描述银行家算法的程序。
三、实验内容:
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 NP10*/
/* #define NS5*//*资源种类*/
/*bk3.c::可以继续分配资源(〉2)*/
/*bk4.c::可保存分析结果*/
/*bk5.c::除以上功能外,对暂时不能分配的可以进行另外一次尝试,并恢复已分配的资源*/ #include "string.h"
#include "stdio.h"
#include"dos.h"
#include"conio.h"
#define MOVEIN1
#define GUIYUE2
#define ACC3
#define OK1
#define ERROR0
#define MAXSH7
#define MAXSHL10
#define MAXINPUT50
#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); /*35is'#'*/
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);
}
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);