操作系统银行家算法
课程设计报告
姓 名:
学 号:
班 级: 计科班
专 业:计算机科学技术
XX学 计算机科学信息学院
目 录
1 课程设计目 …………………………………………………… 1
2 课程设计求 ………………………………………………… 1
3 课程设计题目描述 ……………………………………………… 2
4 课程设计银行家算法原理 …………………………………… 2
5 源程序结构分析代码实现 …………………………………… 4
6 课程设计总结 …………………………………………………… 25
课程设计目
操作系统计算机系统核心系统软件负责控制理整系统资源组织户协调资源计算机高效工作操作系统课程设计操作系统理课必补充复检验学课程重手段课程设计目综合应学生学知识通实验环节加深学生操作系统基原理工作程理解提高学生独立分析问题解决问题力增强学生动手力
二课程设计求
1.分析设计容出解决方案(说明设计实现原理采数结构)
2.画出程序基结构框图流程图
3.程序部分详细设计分析说明
4.源代码格式规范
5.设计合适测试例运行结果分析
6.设计中遇问题设计心体会
7.期提交完整程序代码执行程序课程设计报告
三课程设计题目描述
银行家算法种代表性避免死锁算法
解释银行家算法必须先解释操作系统安全状态安全状态
安全状态:果存系统中进程构成安全序列P1…Pn系统处安全状态安全状态定没死锁发生
安全状态存安全序列安全状态定导致死锁
什安全序列呢?
安全序列:进程序列{P1…Pn}安全果进程Pi(1≤i≤n)尚需资源量超系统前剩余资源量进程Pj (j < i )前占资源量
银行家算法:
操作系统作银行家操作系统理资源相银行家理资金进程操作系统请求分配资源相户银行家贷款操作系统银行家制定规进程分配资源进程首次申请资源时测试该进程资源需求量果系统现存资源满足需求量前申请量分配资源否推迟分配进程执行中继续申请资源时先测试该进程已占资源数次申请资源数否超该进程资源需求量超拒绝分配资源没超测试系统现存资源否满足该进程尚需资源量满足前申请量分配资源否推迟分配
四 课程设计银行家算法原理
1.银行家算法思路
先户提出请求进行合法性检查检查请求需否利请求合法进行试分配试分配状态调安全性检查算法进行安全性检查安全分配否分配恢复原状态拒绝申请
2.银行家算法中数结构
利资源量 int Available[j] j资源种类
需求矩阵 int Max[i][j] i进程数量
分配矩阵 int Allocation[i][j]
需求矩阵 int need[i][j] Max[i][j] Allocation[i][j]
申请类资源数量 int Request i[j] i进程申请j资源数量
工作量 int Work[x] int Finish[y]
3.银行家算法bank()
进程i发出请求申请kj资源Request i[j]k
(1)检查申请量否需求量:Request i[j]
Available[ij] Available[ij] Request i[j]
Allocation[i][j] Allocation[i][j]+ Request i[j]
need[i][j] need[i][j] Request i[j]
(4)试分配执行安全性检查调safe()函数检查次资源分配系统否处安全状态安全正式资源分配进程否次试探分配作废恢复原资源分配状态该进程等
(5)do{…}while 循环语句实现输入字符yn判断否继续进行资源申请
4.安全性检查算法(safe()函数)
(1)设置两量:
工作量Work表示系统提供进程继续运行需类资源数目执行安全性算法开始时Work Available
Finish表示系统否足够资源分配进程运行完成开始时先做Finish[i]0足够资源分配进程时令Finish[i]1
(2)进程中查找符合条件进程:
条件1:Finish[i]0
条件2:need[i][j]
(3)进程获资源利执行直完成释放出分配资源应执行:
Work[j] Work[j]+ Allocation[i][j]
Finish[i]1
goto step 2
(4)果Finish[i]1满足表示系统处安全状态否处安全状态
五源程序结构分析代码实现
1.程序结构
程序五部分:
(1) 初始化chushihua():程序开始进行初始化输入数:进程数量资源种类种资源利数量进程种资源已分配数量进程类资源需求数等
(2)前安全性检查safe():判断前状态安全性根方调提示处理
(3)银行家算法bank():进行银行家算法模拟实现模块调模块进行银行家算法模拟程
(4)显示前状态show():显示前资源分配详细情况包括:种资源总数量(all)系统目前种资源数量进程已资源数量进程需资源量
(5)程序main()
逐调初始化显示状态安全性检查银行家算法函数程序序进行
2.数结构
程序全局变量:
const int x10y10 定义常量
int Available[x] 种资源利数量
int Allocation[y][y] 进程前已分配资源数量
int Max[y][y] 进程类资源需求数
int Need[y][y] 需求矩阵
int Request[x] 申请类资源数量
int Work[x] 工作量表系统提供进程运行需类资源数量
int Finish[y] 表系统否足够资源分配进程0否1
int p[y] 存储安全序列
int ij 全局变量循环语句中
int nm n进程数量m资源种类数
int l0counter0
3.函数声明
void chushihua() 系统初始化函数
void safe() 安全性算法函数
void bank() 银行家算法函数
void show () 输出前资源分配情况
4.函数main()
int main()
{
cout<<…… 显示程序开始提示信息
chushihua() 初始化函数调
cout<
判断前状态安全性
safe() 安全性算法函数调
if (l
sign() 调签名函数
return 0 break
}
else{
int i 局部变量
l0
cout<<\n安全状态<
cout<
}
for (i0 i
bank() 银行家算法函数调
return 0
}
5 操作系统银行家算法流程图:
初始化函数chushihua()开始
AVAILABLE[[i]REQUEST[i]
ALLOCATION[i]+REQUEST[i]
NEED[i]REQUEST[i]
输入进程数量
输入资源种类数
输入资源前资源数
输入进程前已分配资源数
输入进程类资源需求
输出提示:输入误请重新输入
初始化函数chushihua()结束银行家函数 Bank()
提出请求REQUEST[i]
Error
REQUEST[i]
REQUEST[i]
Error
Safe()
输出提示:请求拒
AVAILABLE[i]REQUEST[i]ALLOCATION[i]REQUEST[i]
NEED[i]+REQUEST[i]
输出提示:意分配请求
否进行次分配
退出程序银行家算法Bank()结束
安全性算法Safe()开始
WorkAVAILABLE
FINISHfalse
NEED[i]
Work+ALLOCATION[i]
FINISH[i]ture
进程FINISHture
输出提示:系统安全
安全输出安全序列
Return ture
安全算法safe()结束
2 源程序代码:
#include
#include
#include
using namespace std
#define TRUE 1 定义 TRUE 1
#define FALSE 0 定义 FLASE0
void bank(vector
int safe(vector
void init()
*************************************函数main()**************************************************************
void main()
{
init()
int safe(vector
}
**************************************初始化函数init()*********************************************************
void init()
{
int m m资源类数
int n 进程数
cout<<输入资源类数<
vector
cout<<输入类资源总数<
* 面刚掉DOS输入资源量*
*未刚掉Availabletxt文件中读入数*
************************************************************************
*
for (int i0i
cout<<输入R< cin>>Available[i]
}
*
FILE *fp
fpfopen(Availabletxtr+)
cout<
fscanf(fpd&Available[i])
cout<
fclose(fp)
cout<<\n输入进程数<
vector
************************************************************************
* 面刚掉DOS输入资源量*
*未刚掉Maxtxt文件中读入数*
************************************************************************
*
for ( i0i
cout<<输入进程< for (int j0j
cout<< 输入需R<
while (Max[i][j]>Available[j])
{
cout<
}
}
}*
fpfopen(Maxtxtr+)
cout<
for (int j0j
fscanf(fpd&Max[i][j])
cout<
cout<
fclose(fp)
cout<<输入已分配Allocation<
vector
************************************************************************
* 面刚掉DOS输入资源量*
*未刚掉Allocationtxt文件中读入数*
************************************************************************
*
for ( i0i
cout<<输入进程< for (int j0j
cout<< 输入分配R<
while(Allocation[i][j]>Max[i][j])
{
cout<
}
Need[i][j]Max[i][j]Allocation[i][j]
Available[j] Available[j]Allocation[i][j]
}
}*
fpfopen(Allocationtxtr+)
cout<
for(i0i
for (int j0j
fscanf(fpd&Allocation[i][j])
Need[i][j]Max[i][j]Allocation[i][j] 初始化Max时时初始化Need数组
Available[j] Available[j]Allocation[i][j] 初始化Max时时修改Available数组
cout<
cout<
}
fclose(fp)
int safe(vector
cout<<状态安全<
bank(AvailableNeedAllocationnm)调银行家算法bank()函数
}
**************************************银行家算法bank()函数*********************************************************
void bank(vector
{
vector
int all0
定义变量all果all0表示进程已运行完果all>1表示进程没运行完
for (int i0i
if (0all)
{
cout<<进程已运行完结束<
}
int jc选进程
char again
all0重新初始化all
while (1)
{
while (all0)
{
all0
果all0表示进程已运行完果all>1表示进程没运行完
循环直all>0找未运行完进程
cout<<选进程作前进程0<
for (int j0j
all + Need[jc][j]
}
if (0all)
{
cout<<进程已运行重新输入<
}
cout<<输入该进程请求量<
cin>>Request[i]
while(Request[i]>Need[jc][i]||Request[i]>Available[i])
{
cout<<请求量法满足<
}
}
系统试探着资源分配该进程
for (i0i
Available[i]Available[i]Request[i]
Allocation[jc][i]Allocation[jc][i]+Request[i]
Need[jc][i]Need[jc][i]Request[i]
}
int bb0
bbsafe(AvailableNeedAllocationnm)调安全性算法判断次资源分配系统否处安全状态
if (1bb)
{
cout<<系统成功分配资源<
else
{
cout<<系统未成分配资源收回预分配资源<
Available[i]Available[i]+Request[i]
Allocation[jc][i]Allocation[jc][i]Request[i]
Need[jc][i]Need[jc][i]+Request[i]
}
}
cout<<您想次请求分配请yY否请键<
if(again'y'||again'Y')
{
all0
continue
}
break
}
}
**************************************安全性算法safe()函数*********************************************************
int safe(vector
{
vector
WorkAvailable
vector
int len1 记录安全序列进程数果lenn表示finishitrue处安全状态
for(int i0i
int needed1
for (int j0j
if(Need[i][j]
neededneeded*TRUE
}
else neededneeded*FALSE
}
if ((Finish[i]FALSE)&&needed1)
{
for (j0j
Work[j]Work[j]+Allocation[i][j]
}
Finish[i]TRUE
lenlen+1
count[len]i
i1
}
}
if (lenn1)
{
cout<<系统安全<
cout<
{
cout<<>
}
}
cout<
}
else
{
cout<<系统安全<
1 初始化结果
2 检测系统资源分配否安全结果:
六课程设计总结
操作系统基特征发享系统允许进程发执行享系统软硬件资源限度利计算机系统资源操作系统应采动态分配策略样容易资源足分配引起死锁次课程设计银行家算法避免死锁银行家算法分配资源程分配序列会产生死锁算法中心思想:该法分配资源时次分配总存着进程果单独运行必然获需全部资源说结束结束类资源满足申请者需
次程序面思路展开时间仓促课程设计存着足:实现发操作总资源时满足进程需资源数时进程时进行进程序执行二扫描进程序单进程序(编号)扫描产生安全序序基础产生实安全序三进程数资源数进行数量进行限制十四运行程序界面较差进程数需资源数已分配资源数资源数目然
次课程设计时间说仓促点然学实性知识更深解算法C语言进行复程中知识点记感谢程中帮助老师学
感悟:亲动手学知识
次感谢帮助老师学
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档