操作系统实验报告材料三-银行家算法

上传人:泽*** 文档编号:73644915 上传时间:2022-04-12 格式:DOC 页数:20 大小:886KB
收藏 版权申诉 举报 下载
操作系统实验报告材料三-银行家算法_第1页
第1页 / 共20页
操作系统实验报告材料三-银行家算法_第2页
第2页 / 共20页
操作系统实验报告材料三-银行家算法_第3页
第3页 / 共20页
资源描述:

《操作系统实验报告材料三-银行家算法》由会员分享,可在线阅读,更多相关《操作系统实验报告材料三-银行家算法(20页珍藏版)》请在装配图网上搜索。

1、实用标准文案操作系统实验三银行家算法姓名:杨益林文档大全银行家算法学号: 71115215报告日期: 2017.06.07一、实验目的通过实验,加深对多实例资源分配系统中死锁避免方法银行家算法的理解,掌握Windows环境下银行家算法的实现方法,同时巩固利用Windows API进行共享数据互斥访问和多线程编程的方法。二、实验内容1.在 Windows操作系统上,利用 Win32API编写多线程应用程序实现银行家算法。2.创建 n 个线程来申请或释放资源,只有保证系统安全,才会批准资源申请。3.通过 Win32 API提供的信号量机制,实现共享数据的并发访问。三、实验步骤(一)设计思路:银行家

2、算法可分为个主要的功能模块,其描述如下:1.初始化由用户输入数据,分别对运行的进程数、总的资源种类数、总资源数、各进程所需要的最大资源数量(Max ),已分配的资源数量赋值。2.安全性检查算法银行家算法(1) 设置两个工作向量 Work=AVAILABLE;FINISH=false;(2) 从进程集合中找到一个满足下述条件的进程,FINISH=false;NEED=Work;如找到,执行 (3) ;否则,执行 (4)(3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。Work+=ALLOCATION;Finish=true;(4). 如所有的进程 Finish= true ,则表示安全

3、;否则系统不安全。3. 银行家算法在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的 ;若是 ,才分配。它是最具有代表性的避免死锁的算法。设进程 j 提出请求 REQUEST i ,则银行家算法按如下规则进行判断。(1).如果 REQUEST j i= NEEDji,则转 (2) ;否则,出错。(2). 如果 REQUEST j i= AVAILABLEji,则转 (3) ;银行家算法否则,出错。(3). 系统试探分配

4、资源,修改相关数据:AVAILABLEi-=REQUESTji;ALLOCATIONji+=REQUESTji;NEEDji-=REQUESTji;用到的数据结构:实现银行家算法要有若干数据结构,它们用来表示资源分配系统的状态。令n 表示系统中进程的数目,m 表示资源的分类数。还需要以下数据结构:1).Available是一个长度为 m 的向量,它表示每类资源可用的数量。 Available j=k,表示 j 类资源可用的数量为k。2).Max 是一个 n m 矩阵,它表示每个进程对资源的最大需求。Max i ,j=k ,表示进程 pi 至多可以申请k 个 j 类资源单位。3).Allocat

5、ion是一个 n m 矩阵,它表示当前分给每个进程的资源数目。 Allocation i,j=k ,表示进程 i 当前分到 k 个 j 类资源。4).Need 是一个 n m 矩阵,它表示每个进程还缺少多少资源。 Needi , j=k ,表示进程 pi 尚需 k 个 j 类资源才能完成其任务。显然 Needi ,j= Max i ,j- Allocation i ,j 。(二)流程图银行家算法四、运行结果示例这里以书上的例子为例,初值如下表:银行家算法AllocationMaxAvailableA B CA B CA B CP00 1 07 5 33 3 2P12 0 03 2 2P23 0

6、 19 0 0P32 1 12 2 2P40 0 24 3 3现在让进程 P1 再申请 A:1 B:0 C:2 个资源,首先调用安全算法测试如果分配后系统是否安全,然后给出了分配序列,如下图:银行家算法如果再让 P4 申请 A:0 B:2 C:0 个资源,首先调用安全算法测试如果分配后系统是否安全,发现分配后系统不安全,于是报分配错误,不予分配,结果如下图:银行家算法七、实验体会银行家算法的具体实现,我学到了很多课本上没有的知识。想要完成模拟银行家算法的C+ 程序,首先就是要彻底熟悉算法,了解算法的基本原理,才能开始着手程序设计在程序设计设计过程中,遇到了一些困难,通过向同学询问,翻阅资料等,

7、问题被一一解决了。首先就是在知识层面上了解了银行家算法这种进程调度和避免死锁的算法,并用 C+ 程序真正模拟出安全性检查和银行家算法过程,复习了之前所学C+ 和数据结构的银行家算法知识;在编程过程中虽然遇到很多困难,解决问题的过程中,同时也锻炼了我不怕困难,勇于迎接挑战的精神,为以后的工作打下了坚实的基础。八、源程序并附上注释#include#include#include#include#defineFalse 0#defineTrue 1using namespacestd;int Max100100 = 0 ;/ 各进程所需各类资源的最大需求int ReMax100100 = 0 ;in

8、t Avaliable100 = 0 ;/ 系统可用资源int ReAvaliable100 = 0 ;char name100 = 0 ;/ 资源的名称int Allocation100100 = 0 ;/ 系统已分配资源int ReAllocation100100 = 0 ;int Need100100 = 0 ;/ 还需要资源int ReNeed100100 = 0 ;int Request100 = 0 ;/ 请求资源向量int temp100 = 0 ;/ 存放安全序列银行家算法int Work100 = 0 ;/ 存放系统可提供资源int M = 100;/ 进程的最大数量为100

9、int N = 100;/ 资源的最大数量为 100voidshowdata()/ 显示资源矩阵int i, j;cout endl;cout MaxAvaliable endl;cout ;for (j = 0; j4; j+)for (i = 0; iN; i+)cout namei ;AllocationNeedcout ;cout endl;for (i = 0; iM; i+)cout i for (j = 0; jN; j+)cout Maxij cout ; ; ;银行家算法for (j = 0; jN; j+)cout Allocationij cout ;for (j = 0

10、; jN; j+)cout Needij ;if (i = 0)cout ;for (j = 0; jN; j+)cout Avaliablej ; ;cout endl;void save()int i, j;for (i = 0; i N; i+)ReAvaliablei = Avaliablei;for (i = 0; i M; i+)for (j = 0; j N; j+)银行家算法ReMaxij = Maxij;ReAllocationij = Allocationij;ReNeedij = Needij;void restore()int i, j;for (i = 0; i N;

11、 i+)Avaliablei=ReAvaliablei;for (i = 0; i M; i+)for (j = 0; j N; j+)Maxij = ReMaxij;Allocationij = ReAllocationij;Needij = ReNeedij;int changdata(int i) / 进行资源分配银行家算法int j;for (j = 0; jM; j+) Avaliablej = Avaliablej - Requestj;Allocationij = Allocationij + Requestj;Needij = Needij - Requestj;return1

12、;int safe() / 安全性算法int i, k = 0, m, apply, Finish100 = 0 ;int j;int flag = 0;for (int num = 0; num N; num+)Worknum = Avaliablenum;for (i = 0; iM; i+)apply = 0;for (j = 0; jN; j+)if (Finishi = False&Needij = Workj)apply+;if (apply = N)for (m = 0; mN; m+)for银行家算法Workm = Workm + Allocationim;/ 变分配数Fini

13、shi = True;tempk = i;i = -1;k+;flag+;(i = 0; iM; i+)if (Finishi = False)cout 系统不安全 ,所有状态不改变! endl;/ 不成功系统不安全return1;cout 系统是安全的 ! endl;/ 如果安全,输出成功save(); / 进行保存cout 安全序列 :;for (i = 0; iM; i+)/ 输出运行进程数组cout tempi;if (iM - 1) cout ;银行家算法cout endlendl;return0;void share() / 利用银行家算法对申请资源对进行判定bool ch= tr

14、ue ;int i = 0, j = 0;/ch = y;cout 请输入请求分配资源的进程号(0- M - 1 i;/ 输入须申请的资源号cout 请输入进程 i 申请的资源数量 : endl;for (j = 0; jN; j+)cout namej Requestj;/ 输入需要申请的资源for (j = 0; jNeedij)/ 判断申请是否大于需求,若大于则出错cout 进程 i 申请的资源大于它需要的资源 ;cout 分配不合理,不予分配! Avaliablej)/ 判断申请是否大于当前资源,若大于则/ 出错cout 进程 i 申请的资源大于系统现在可利用的资源 ;cout 分配出

15、错,不予分配! endl;ch = false ;break ;if (ch) changdata(i);/ 根据进程需求量变换资源if (safe()restore();/ 根据进程需求量进行银行家算法判断showdata();/ 根据进程需求量显示变换后的资源void changeresources()/ 修改资源函数银行家算法cout 当前的 Avaliable: endl;for(inti = 0; iN; i+)cout namei : Avaliablei ;cout endl输入修改值 : endl;for(inti = 0; i N; i+)cout namei Avaliab

16、lei;cout 修改后的 Avaliable: endl;for(intk = 0; kN; k+)cout namek : Avaliablek endl;showdata();safe();int main() / 主函数int i, j, number, m, n, flag;int choice = 1;char ming;cout n;N = n;cout 请依次输入系统资源的名称与数量:endl;for (i = 0; in; i+)/cout 资源 i + 1 mingnumber;namei = ming;/cout 资源 i + 1 number;Avaliablei =

17、number;cout endl;cout m;M = m;cout 请输入各进程的最大需求量( m * n 矩阵 ) Max: endl;for (i = 0; im; i+)for (j = 0; j Maxij;do 银行家算法flag = 0;cout 请输入各进程已经申请的资源量( m * n 矩阵 )Allocation: endl;for (i = 0; im; i+)for (j = 0; j Allocationij;if (AllocationijMaxij)flag = 1;Needij = Maxij - Allocationij;Avaliablej = Avalia

18、blej - Allocationij;if (flag)cout 申请的资源大于最大需求量,请重新输入!n ; while(flag);showdata();/ 显示各种资源safe(); / 用银行家算法判定系统是否安全while (choice)cout *银行家算法演示 * endl;cout 1:修改现有资源实例数量 endl;cout 2:进程请求系统分配资源 endl;银行家算法cout 3:显示各个矩阵内容 endl;cout 0:退出程序 endl;cout * endl;cout choice;switch (choice)case 1: changeresources();case 2: share();break ;case 3: showdata();break ;case 0: choice = 0;break ;break ;default : cout 请正确选择功能号(0-3)! endl;break ;cout 您已成功退出程序! endl;return1;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!