课程设计报告
姓 名:
学 号:
班 级:计科班
专 业:计算机科学技术
指导教师:
时 间: 2009
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<
} Finish[i]0 进程置未分配状态 for (i1 i for (i0 i
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
#include
定义全局变量
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] 表示系统否足够资源分配进程1
int p[y] 存储安全序列
int ij i表示进程j表示资源
int nm n进程i数量m资源j种类数
int l0 l记录进程Finish[i]1ln说明系统状态安全
int counter0
函数声明
void chushihua() 初始化函数
void safe() 安全性算法
void show() 函数show输出前状态
void bank() 银行家算法
void jieshu() 结束函数
void chushihua()
{
cout<<输入进程数量 开始输入关数
cin>>n
cout<<输入资源种类数
cin>>m
cout<
cout<<输入资源 <
Work[j]Available[j] 初始化Work[j]初始值前资源数
}
cout<
for (j0 j
cout<< 输入进程 < cin>>Allocation[i][j]
}
cout<
}
cout<
for (j0 j
cout<< 输入进程 < cin>>Max[i][j]
if(Max[i][j]>Allocation[i][j]) 需求已分配计算需求量
Need[i][j] Max[i][j]Allocation[i][j]
else
Need[i][j]0Max已分配时候类资源已足够需申请
}
cout<
cout<
安全性算法函数
void safe()
{
l0
for (i0 i
if (Finish[i]0)
{ 逐查找Finish[i]0进程 条件
counter0 记数器
for (j0 j
if (Work[j]>Need[i][j]) countercounter+1需求记数
}
if(counterm) i进程类资源符合Work[j]>Need[i][j] 条件二
{
p[l]i 存储安全序列
Finish[i]1 i进程标志分配
for (j0 j
ll+1 记数现L进程安全LN时说明满足安全序列
i 1 第进程开始继续寻找满足条件二进程
}
}
}
}
显示前状态函数
void show() 函数show输出前资源分配情况
{
int ij 局部变量
int All[y] 种资源总数量
int L1 局部变量L1
cout<<前状态:<
cout<< 资源<
for (i0i
cout<
cout<
cout<
for (jij
cout<<进程<
}
cout<
for (jij
cout<<进程<
}
}
银行家算法函数
void bank()
{
cout<
int k0 输入进程编号
bool rfalse 初值假输入Y继续申请置真
do{输入请求
cout<<输入申请资源进程(0<
cout<
{
cout<
cout<
cout<
do{ do……while 循环判断申请输入情况
cout<<进程 <
cout<
cout<<申请需量<
else 先判断否申请需求量判断否申请利量
if(Request[j]>Available[j]){ 申请利量 应该阻塞等?…… ???
cout<<\n没资源目前利资源<
goto ppp goto语句 跳转结束次申请
}
}while(Request[j]>Need[k][j]) Request[j]>Available[j]||
}
改变AvilableAllocationNeed值
for (j0 j
Allocation[k][j] Allocation[k][j]+Request[j]
Need[k][j] Need[k][j]Request[j]
Work[j] Available[j]
}
判断前状态安全性
safe() 调安全性算法函数
if (l
l0
cout<<\n试分配状态安全予分配恢复原状态<
for (j0 j
Available[j] Available[j]+Request[j]
Allocation[k][j] Allocation[k][j]Request[j]
Need[k][j] Need[k][j]+Request[j]
Work[j] Available[j]
}
for (i0 i
}
else
{
l0
cout<<\n申请资源成功<
for(j0j
if(Need[k][j]0)
else { 种资源没全部申请该进程执行释放拥资源
l1 置l1作判断标志
break
}
}
if(l1){ 进程执行释放该进程资源
for (j0j
Allocation[k][j]0
}
cout<<该进程已需求资源执行释放拥资源<
l0 零
cout<<\n安全状态<
cout<
for (i1 i
}
cout<
show() 显示前状态
ppp 申请利量 应该阻塞等结束次资源申请GOTO 语句跳转
cout<
cout<
rtrue
else{
rfalse 输入非 Y 令 R false
jieshu() 调结束函数
}
} while (rtrue)
}
结束函数
void jieshu()
{
cout<
函数
int main()
{
cout<
cout<
safe() 判断前状态安全性
if (l
cout<<\n前状态安全拒绝申请<
}
else
{
int i 局部变量
l0
cout<
bank() 调银行家算法函数
cout<<\t\t 演示计算完毕<
}
运行结果:
1初始化结果
2检测系统资源分配否安全结果:
六课程设计总结
操作系统基特征发享系统允许进程发执行享系统软硬件资源限度利计算机系统资源操作系统应采动态分配策略样容易资源足分配引起死锁次课程设计银行家算法避免死锁银行家算法分配资源程分配序列会产生死锁算法中心思想:该法分配资源时次分配总存着进程果单独运行必然获需全部资源说结束结束类资源满足申请者需
次程序面思路展开时间仓促课程设计存着足:实现发操作总资源时满足进程需资源数时进程时进行进程序执行二扫描进程序单进程序(编号)扫描产生安全序序基础产生实安全序三进程数资源数进行数量进行限制十四运行程序界面较差进程数需资源数已分配资源数资源数目然
次课程设计时间说仓促点然学实性知识更深解算法C语言进行复程中知识点记感谢程中帮助老师学
感悟:亲动手学知识
次感谢帮助老师学
参考文献:
[1] 汤丹梁红兵哲凤屏汤子瀛计算机操作系统(第三版)西安电子科技学出版社2009
[2] 百度百科
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档