操作系统课程设计报告
课题: 银行家算法
专业
计算机科学技术
学生姓名
班级
计算机
学号
指导教师
信息工程学院
实验求实验目
实验目:课程设计学生学完操作系统原理课程进行次全面综合训练通课程设计学生更掌握操作系统原理实现方法加深操作系统基础理重算法理解加强学生动手力
实验求:课程设计目出发通设计工作环节达教学求:两组组题目中选(拟题目需指导教师意)学生必须独立完成课程设计相互抄袭组者文档相设计完成完成工作交指导教师检查求写出份详细设计报告
二设计容:
课题编制银行家算法通程序检测状态系统安全性
1)银行家算法中数结构:
利资源量Available含m 元素数组中元素代表类利资源数目初始值系统中配置该类全部资源数目数值该类资源分配回收动态改变Available[j]K表示系统中现Rj 类资源K
需求矩阵Maxn*m矩阵定义系统中n进程中进程m类资源需求果Max[ij]K表示进程i需Rj类资源数目K
1 分配矩阵Allocationn*m矩阵定义系统中类资料前已分配没进程资源数果Allocation[ij]K表示进程i前已分Rj类资源数目K需求矩阵Needn*m矩阵表示进程尚需类资源数果Need[ij]K表示进程i需Rj类资源K方完成务
述三矩阵存关系: Need[ij] Max[ij] Allocation[ij]
2)银行家算法
设Request[i] 进程Pi请求量果Request[ij]K表示进程Pi需KRj类型资源Pi发出资源请求系统述步骤进行检查:果Request[ij]< Need[ij]便转步骤2否认出错需资源数已超宣布值
三设计思路
设计思路A 设计进程资源申请表示初值确定B 设定系统提供资源初始状态C 设定次某进程类资源申请表示D 编制程序银行家算法决定申请否满足
四详细设计
1初始化:户输入数分利资源量矩阵AVAILABLE需求矩阵MAX分配矩阵ALLOCATION需求矩阵NEED赋值
2银行家算法:避免死锁方法中施加限制条件较弱获令满意系统性该方法中系统状态分安全状态安全状态系统始终处安全状态便避免发生死锁银行家算法基思想分配资源前判断系统否安全分配具代表性避免死锁算法
设进程cusneed提出请求REQUEST [i]银行家算法规进行判断
(1)果REQUEST [cusneed] [i]< NEED[cusneed][i]转(2)否出错
(2)果REQUEST [cusneed] [i]< AVAILABLE[cusneed][i]转(3)否出错
银行家算法数结构
假设M进程N类资源数结构
#define W 10
#define R 20
int M 总进程数
int N 资源种类
int ALL_RESOURCE[W] 种资源数目总
int MAX[W][R] M进程N类资源资源需求量
int AVAILABLE[R] 系统资源数
int ALLOCATION[W][R] M进程已N类资源资源量
int NEED[W][R] M进程需N类资源资源量
int Request[R] 请求资源数
3安全性检测算法
1)先定义两变量表示推算程数
F[n]A[n]表示推算程中系统中剩余资源量变化
J[n]False表示推算程中进程否假设已完成
系统试探分配资源修改相关数:
AVAILABLE[i]REQUEST[cusneed][i]
ALLOCATION[cusneed][i]+REQUEST[cusneed][i]NEED[cusneed][i]REQUEST[cusneed][i]
4安全性检查算法
1)设置两工作量WorkAVAILABLEFINISH
2)进程集合中找满足述条件进程
FINISHfalse
NEED
3)设进程获资源利执行直完成释放资源
Work+ALLOCATION
Finishtrue
GOTO 2
4)进程Finish true表示安全否系统安全
安全状态 某时刻系统中进程排列安全序列{P1P2`````Pn}刚称时系统安全
谓安全序列{P1P2`````Pn}指P2需剩余资源数量系统掌握剩余空间资源Pi(j安全状态产生死锁
目前状态 需求 尚需
P1 3 9 6
P2 5 10 5
P3 2 4 2
次进程中申请资源判定实际分配话系统否安全
银行家算法数结构
五代码清单
#include
#include
#include
#include
#include
#include
const int MAX_P20
const int MAXA10 定义A类资源数量
const int MAXB5
const int MAXC7
typedef struct node{
int a
int b
int c
int remain_a
int remain_b
int remain_c
}bank
typedef struct node1{
char name[20]
int a
int b
int c
int need_a
int need_b
int need_c
}process
bank banker
process processes[MAX_P]
int quantity
初始化函数
void initial()
{
int i
bankeraMAXA
bankerbMAXB
bankercMAXC
bankerremain_aMAXA
bankerremain_bMAXB
bankerremain_cMAXC
for(i0i
processes[i]a0
processes[i]b0
processes[i]c0
processes[i]need_a0
processes[i]need_b0
processes[i]need_c0
}
}
新加作业
void add()
{
char name[20]
int flag0
int t
int need_aneed_bneed_c
int i
cout<
cin>>name
for(i0i
flag1
break
}
}
if(flag){
cout<<错误作业已存<
else{
cout<<作业需A类资源
cin>>need_a
cout<<作业需B类资源
cin>>need_b
cout<<作业需C类资源
cin>>need_c
t1
cout<
cout<<错误需A类资源银行家剩A类资源<
}
if(need_b>bankerremain_b){
cout<<错误需B类资源银行家剩B类资源<
}
if(need_c>bankerremain_c){
cout<<错误需C类资源银行家剩C类资源<
}
if(t){
strcpy(processes[quantity]namename)
processes[quantity]need_aneed_a
processes[quantity]need_bneed_b
processes[quantity]need_cneed_c
quantity++
cout<<新加作业成功<
else{
cout<<新加作业失败<
}
}
作业申请资源
void bid()
{
char name[20]
int ip
int abc
int flag
cout<
cin>>name
p1
for(i0i
pi
break
}
}
if(p1){
cout<<该作业申请A类资源数量
cin>>a
cout<<该作业申请B类资源数量
cin>>b
cout<<该作业申请C类资源数量
cin>>c
flag1
if((a>bankerremain_a)||(a>processes[p]need_aprocesses[p]a)){
cout<<错误申请A类资源银行家剩A类资源该进程需数量<
}
if((b>bankerremain_b)||(b>processes[p]need_bprocesses[p]b)){
cout<<错误申请B类资源银行家剩B类资源该进程需数量<
}
if((c>bankerremain_c)||(c>processes[p]need_cprocesses[p]c)){
cout<<错误申请C类资源银行家剩C类资源该进程需数量<
}
if(flag){
bankerremain_aa
bankerremain_bb
bankerremain_cc
processes[p]a+a
processes[p]b+b
processes[p]c+c
cout<<作业申请资源成功<
else{
cout<<作业申请资源失败<
}
else{
cout<<该作业存<
}
撤消作业
void finished()
{
char name[20]
int ip
cout<
cin>>name
p1
for(i0i
pi
break
}
}
if(p1){
bankerremain_a+processes[p]a
bankerremain_b+processes[p]b
bankerremain_c+processes[p]c
for(ipi
}
strcpy(processes[quantity1]name)
processes[quantity1]a0
processes[quantity1]b0
processes[quantity1]c0
processes[quantity1]need_a0
processes[quantity1]need_b0
processes[quantity1]need_c0
quantity
cout<<撤消作业成功<
else{
cout<<撤消作业失败<
}
查资源情况
void view()
{
int i
cout<
for(i0i
}
else{
cout<<前没作业<
}
显示版权信息函数
void version()
{
cout<
void main()
{
int chioce
int flag1
initial()
version()
while(flag){
cout<<1新加作业 2作业申请资源 3撤消作业<
cin>>chioce
switch(chioce){
case 1
add()
break
case 2
bid()
break
case 3
finished()
break
case 4
view()
break
case 0
flag0
break
default
cout<<选择错误<
}
}
六说明
运行环境CFREE40新建务编制代码输入运行环境中
F5:出现图示窗口提示新建作业:wujun作业分配资源A:3B:4C:5输入2作业分配资源三种资源数量分配分A3B5C4输入4查资源情况出现出错提示申请B类资源超银行家剩B类资源作业申请资源失败输入0退出系统
重新加入作业:wujun1作业分配资源分A3B3C3该作业分配资源A3B2C2输入4查资源情况
显示输出银行家算法剩资源(剩余资源总资源)
七实验心
八参考文献
汤子瀛等计算机操作系统西安电子科技学出版社2001年5月
蒋静 徐志伟操作系统原理•技术编程『M』北京机械工业出版社2004
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档