题 目
名 称
C语言实现银行家算法
院 系
信息科学工程学院
班 级
完成时间
指导老师
次实验
成绩
组长
联系电话
邮件址
组员(姓名
学号)
务
程序算法编写实现运行调试
组员(姓名
学号)
务
实验报告完成
组员(姓名
学号)
务
实验报告完成
组员(姓名
学号)
原
理
参
考
资
料
(
包
括
实
验
容
条
件
)
银行家算法原理:
操作系统作银行家操作系统理资源相银行家理资金进程操作系统请求分配资源相户银行家贷款
保证资金安全银行家规定
(1) 顾客资金需求量超银行家现资金时接纳该顾客
(2) 顾客分期贷款贷款总数超需求量
(3) 银行家现资金满足顾客尚需贷款数额时顾客贷款推迟支付总顾客限时间里贷款
(4) 顾客需全部资金定限时间里资金
操作系统银行家制定规进程分配资源进程首次申请资源时测试该进程资源需求量果系统现存资源满足需求量前申请量分配资源否推迟分配进程执行中继续申请资源时先测试该进程次申请资源数否超该资源剩余总量超拒绝分配资源满足前申请量分配资源否推迟分配
参考书:
计算机操作系统第三版 西安电子科技学出版社 汤子瀛编
算
法
流
程
图
具
体
实
验
步
骤
算
法
流
程
图
具
体
实
验
步
骤
算法流程图:
附录1 银行家算法流程图
附录2 安全性算法流程图
实验步骤:
.银行家算法
进程i发出请求资源申请
(1)果Request [j]
Available[ij] Available[ij] Request [j]
Allocation[i][j] Allocation[i][j]+ Request [j]
need[i][j] need[i][j] Request [j]
(4)试分配执行安全性检查调check()函数检查次资源分配系统否处安全状态安全正式资源分配进程否次试探分配作废恢复原资源分配状态该进程等
(5)do{…}while 循环语句实现输入字符yn判断否继续进行资源申请
二.安全性检查算法(check()函数)
(1)设置两量:
工作量Work表示系统提供进程继续运行需类资源数目执行安全性算法开始时Work Available
工作量Finish表示系统否足够资源分配进程运行完成开始时先做Finish[i]false足够资源分配进程时令Finish[i]true
(2)进程中查找符合条件进程:
条件1:Finish[i]false
条件2:need[i][j]
(3)进程获资源利执行直完成释放出分配资源应执行:
Work[j] Work[j]+ Allocation[i][j]
Finish[i]true
goto step (2)
(4)果Finish[i]true满足表示系统处安全状态否处安全状态
程序源代码调试结果
附录3 程序源代码
附录4 程序运行调试结果
实 验 心
次实验负责程序编写方面然基础般然坚持花三天时间终程序欣慰事次实验仅银行家算法更深入理解编程力较提高希更样机会较锻炼更掌握运专业知识提高力水
次实验相c基础定难度程序方面做较少银行家算法解较透彻程序设计原理流程图方面做工作较次实验学东西知道方面足然发展方定位硬件方C语言进步学
Y
N
Y
N
Y
N
Y
N
系统初始化
输入进程数no1
输入资源类数no2
输入进程需求矩阵Max已分配矩阵Allocation利资源矩阵Available
印输出时资源分配情况表
Need[][]Max[][]Allocation[][]
输入欲申请资源进程号
输入否合法
输入该进程申请资源量
Request[]>Need[][]
继续分配(Y)
or
退出(N)
Request[]>Available[][]
预分配
调check()函数进行安全性检查
退出系统
附录 1
银行家算法流程图
附录 2
安全性算法流程图
调check()函数
work[]available[]
finish[]false
need[][]
work[]work[]+allocation[][]
finish[]true
Y
N
进程finish[]true
Y
N
输出安全序列印出前资源分配情况
输出提示:系统安全
调结束
附录3
程序源代码:
#include
#include
#include
# define m 50
int no1 进程数
int no2 资源数
int r
int allocation[m][m]need[m][m]available[m]max[m][m]
char name1[m]name2[m] 定义全局变量
void main()
{
void check()
void print()
int ijp0q0
char c
int request[m]allocation1[m][m]need1[m][m]available1[m]
printf(**********************************************\n)
printf(* 银行家算法设计实现 *\n)
printf(**********************************************\n)
printf(请输入进程总数\n)
scanf(d&no1)
printf(请输入资源种类数\n)
scanf(d&no2)
printf(请输入Max矩阵\n)
for(i0i
printf(请输入Allocation矩阵\n)
for(i0i
for(i0i
printf(请输入Available矩阵\n)
for(i0i
print() 输出已知条件
check() 检测T0时刻已知条件安全状态
if(r1) 果安全执行代码
{
do{
q0
p0
printf(\n请输入请求资源进程号(0~4):\n)
for(j0j<10j++)
{
scanf(d&i)
if(i>no1)
{
printf(输入错误请重新输入:\n)
continue
}
else break
}
printf(\n请输入该进程请求资源数request[j]\n)
for(j0j
for(j0j
判断请求否超该进程需资源数
if(p)
printf(请求资源超该进程资源需求量请求失败\n)
else
{
for(j0j
判断请求否超资源数
if(q)
printf(没做够资源分配请求失败\n)
else 请求满足条件
{
for(j0j
available1[j]available[j]
allocation1[i][j]allocation[i][j]
need1[i][j]need[i][j]
保存原已分配资源数需资源数资源数
available[j]available[j]request[j]
allocation[i][j]+request[j]
need[i][j]need[i][j]request[j]
系统尝试资源分配请求进程
}
print()
check() 检测分配安全性
if(r0) 果分配系统安全
{
for(j0j
available[j]available1[j]
allocation[i][j]allocation1[i][j]
need[i][j]need1[i][j]
原已分配资源数需资源数资源数
}
printf(返回分配前资源数\n)
print()
}
}
}printf(\n继续分配?Y or N \n)
判断否继续进行资源分配
cgetche()
}while(c'y'||c'Y')
}
}
void check() 安全算法函数
{
int kfv0ij
int work[m]a[m]
bool finish[m]
r1
for(i0i
for(i0i
kno1
do{
for(i0i
if(finish[i]false)
{
f1
for(j0j
f0
if(f1) 找没完成需求数提供进程继续运行资源数进程
{
finish[i]true
a[v++]i 记录安全序列号
for(j0j
}
}
}
k 完成进程分配未完成进程数减1
}while(k>0)
f1
for(i0i
if(finish[i]false)
{
f0
break
}
}
if(f0) 进程没完成安全状态
{
printf(系统处安全状态)
r0
}
else
{
printf(\n系统前安全状态安全序列:\n)
for(i0i
}
}
void print() 输出函数
{
int ij
printf(\n)
printf(*************时刻资源分配情况*********************\n)
printf(进程名号 | Max | Allocation | Need |\n)
for (i 0 i < no1 i++)
{
printf( pdd ii)
for (j 0 j < no2 j++)
{printf(d max[i][j])}
for (j 0 j < no2 j++)
{printf( d allocation[i][j])}
for (j 0 j < no2 j++)
{printf( d need[i][j])}
printf(\n)
}
printf(\n)
printf(类资源利资源数)
for (j 0 j < no2 j++)
{printf( davailable[j])}
printf(\n)
}
(程序结束)
附录 4
程序运行调试结果:
1 程序初始化
2检测系统资源分配否安全结果
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档