77范文网 - 专业文章范例文档资料分享平台

操作系统课程设计——银行家算法的模拟实现

来源:网络收集 时间:1970-01-01 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

信息科学与工程学院 课程设计任务书

题目: 银行家算法的模拟实现

学 号:

姓 名: 专 业: 课 程: 指导教师:

完成时间: 2012年5月----2012年6月

信息科学与工程学院制

2012 年 6 月 20 日

目录

1. 课设简介???????????????????2 2. 实验原理分析?????????????????2

3. 程序结构分析?????????????????4

4. 数据结构分析?????????????????6

5.各子模块相关函数代码?????????????9

6. 程序运行结果分析???????????????20

7. 心得体会???????????????????30

8. 参考文献???????????????????31

银行家算法的模拟实现

1 课设简介:

1.1 课程设计题目

银行家算法的模拟实现 1.2 课程设计目的

1.2.1了解进程产生死锁原因,了解为什么要进行死锁的避免。

1.2.2掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。

1.3 课程设计内容

设计一个n 个并发进程共享m 个系统资源的系统。进程可动态申请资源和释放资源,系统按各进程的申请动态的分配资源。要求采用银行家算法实现。 2 实验原理分析: 2.1 整个银行家算法的思路

先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进

行安全性检查。

2.2 算法用到的主要数据结构和C语言说明。

2.2.1可利用资源向量 INT AVAILABLE[M] M为资源的类型。

2.2.2最大需求矩阵 INT MAX[N][M] N为进程的数量。 2.2.3已分配矩阵 INT ALLOCATION[N][M] 2.2.4还需求矩阵 INT NEED[N][N] 2.2.5申请各类资源数量int Request[x]; 2.2.6工作向量 int Work[x];

2.2.7 int Finish[y]; //是否有足够的资源分配给进程,0为否,非0为是 2.3 银行家算法主程序

2.3.1系统初始化。调用函数 chushihua(),输入进程数量,资源种类,各资源可用数量,各进程已分配、最大需求各资源数量等 2.3.2安全性算法调用函数safe()检查当前资源分配状态。

2.3.3调用bank()函数,输入用户的请求三元组(I,J,K),为进程I申请K个J类资源。

2.3.4检查用户请求是否小于还需求量,条件是K<=NEED[I,J]。如果条件不符则提示重新输入,即不允许索取大于需求量

2.3.5检查用户的请求是否小于系统中的可利用资源数量,条件是

K<=AVALIABLE[I,J]。如果条件不符则申请失败,阻塞该进程,重新进行进程动态资源申请(使用goto语句跳转) 2.3.6进行资源的预分配,语句如下: AVALIBLE[I][J]= AVALIBLE[I][J]-K; ALLOCATION[I][J]= ALLOCATION[I][J]+K; NEED[I][J]=NEED[I][J]-K;

2.3.7系统调用安全性检查算法(safe()函数)进行检查,如果检查不安全,则进行回收,进程资源申请失败进入等待。否则不用回收,并检查该进程是否已获得所有需要资源,如是则进行其拥有资源释放,语句如下:

Available[j]=Available[j]+Allocation[k][j]; Allocation[k][j]=0;

2.3.8 do{?}while 循环输入字符Y/N判断是否继续进行资源申请。 2.4 安全性检查算法(safe()函数) 2.4.1设置两个临时变量:

FINISH[N]记录进程模拟执行的结束状态,初值为0,如果可以模拟执行结束,则可设为1。

WORK[M]记录模拟执行中资源的回收情况,初值为AVAILABLE[M]的值。 2.4.2在进程中查找符合以下条件的进程。 条件1:FINISH[I]=0

条件2:NEED[I][J]〈=WORK[J]

2.4.3如果查找成功则存储安全序列并进行资源的模拟回收,语句如下:

FINISH[I]=1

WORK[J]=WORK[J]+ALLOCATION[I][J];

2.4.4如查找不成功,则根据不同地方的调用情况进行相应判断处理。 3 程序结构分析: 3.1 程序流程图

3.2 程序模块划分 本程序共有以下六个模块:

3.2.1、字符判断模块:判断输入的字符是否为数字,如果不是则提示出错并重新输入,主要处理输入为非数字时程序出现运行错误现象。此模块功能由数字判断函数( int shuzi(int sz); )实现。

3.2.2、程序初始化模块:用于程序开始进行初始化输入数据:进程数量、资源种类、各种资源可利用数量、各进程的各种资源已分配数量、各进程对各类资源最大需求数等。此模块功能在系统初始化函数(void chushihua(); )中实现。

3.2.3、当前安全性检查模块:用于判断当前状态安全性,根据不同地方的调用提示处理不同,在安全性算函数(void safe(); )中实现。

3.2.4、银行家算法模块:进行银行家算法模拟实现的模块,调用其他各个模块进行银行家算法模拟过程,在银行家算法函数(void bank();)中实现。 3.2.5、显示分配模块:显示当前资源分配详细情况,包括:各种资源的总数量(all)、系统目前各种资源可用的数量、各进程已经得到的资源数量、各进程还需要的资源量,在显示分配情况函数(void showdata(); )中实现。 3.2.6、签名模块:用于程序结束时显示程序版权声明签名等,在签名函数(void sign(); )中实现。 4 数据结构分析

本程序所使用的主体数据结构如下: 4.1定义全局变量

const int x=50,y=100; //定义常量,便于修改 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为是

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作系统课程设计——银行家算法的模拟实现在线全文阅读。

操作系统课程设计——银行家算法的模拟实现.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/276146.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: