操作系统课程设计60644

上传人:xins****2008 文档编号:110024735 上传时间:2019-10-28 格式:DOC 页数:18 大小:548.50KB
返回 下载 相关 举报
操作系统课程设计60644_第1页
第1页 / 共18页
操作系统课程设计60644_第2页
第2页 / 共18页
操作系统课程设计60644_第3页
第3页 / 共18页
操作系统课程设计60644_第4页
第4页 / 共18页
操作系统课程设计60644_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《操作系统课程设计60644》由会员分享,可在线阅读,更多相关《操作系统课程设计60644(18页珍藏版)》请在金锄头文库上搜索。

1、银行家算法课程设计 班 级:110613学 号:110613120姓 名:袁超课程设计的主要内容和要求(包括原始数据、技术参数、设计要求、工作量要求等) 技术参数: Windows XP系统,VC+6.0开发工具。设计要求: 1 设计银行家算法的核心数据结构、安全性检查算法;2 画出银行家算法流程图;3 编程实现算法功能;4 编写课程设计说明书。 工作量要求:完成以上设计要求中的所有算功能介绍我设计的银行家算法实现系统是一个进程动态请求资源的模拟系统,实现系统为进城随机产生请求资源的数量,系统通过资源安全性检查,检查是否满足安全要求。若安全,则才分配资源;不安全时,系统恢复申请前的状态;只有当

2、进程满足全部的资源需求时,该进程执行结束,释放所占的资源。 内容介绍我设计的银行家算法系统主要实验对进程资源的动态分配,对进程尚需的资源再分配,直到进程已获得全部的所需资源时,系统收回对该进程的分配的所有资源。在系统每次分配时,都要通过安全性的检查,只有在安全的状态下,系统才会给进程分配资源,否则,恢复到原来的进程状态。设计目的通过银行家算法设计与实现,可以加深学生对死锁的理解,掌握死锁的预防、避免、检测和解除的基本原理,重点掌握死锁的避免方法银行家算法。使学生初步具有研究、设计、编制和调试操作系统模块的能力。 设计要求系统在进行资源分配的过程中,允许进程动态的申请资源,为了避免发生死锁,在分

3、配资源前要进行安全性检查,若此次分配不会导致系统进入不安全状态,便将资源分配给进程,否则,进程等待。设计一个进程动态请求资源的模拟系统,实现随机产生进程请求资源的数量;资源安全性检查算法;资源的分配算法;以及输出显示每次请求的结果和系统资源的状态设计思想 开始时,输入当前进程资源的状态以及整个系统的资源使用情况,即进行初始化安全性检查;如果是不安全状态,重新初始化系统;否则,给进程分配资源,并使用银行家算法进行检测,输出当前系统的状态和安全序列;如果是安全状态,系统继续从等待队列中提取等待进程进行检查,并且再分配所需的资源,当所需的资源已经满足进程所需资源时,便释放所占的资源;如果是不安全状态

4、,进程恢复到原先的状态。 程序流程图程序流程图包括:主程序流程图和各功能模块的流程图。主程序流程图如下图:图2 主程序模块图各功能模块的流程图:简略的展示部分函数模块的流程图,我采用简洁的叙述算法的流程过程,实际的应用参照程序清单,以下为:银行家算法的流程图,安全性检查算法流程图,释放资源算法流程图等。 银行家算法的流程图:图3 银行家算法安全性检查算法流程图图4 安全检查算法 释放资源算法流程图图5释放资源算法 实验运行结果 实验结果达到了实验要求和预期的结果,实验运行结果截图如下: 图7 初始化资源信息图7为刚开始执行程序时进程数和资源种类确定,以及系统可利用资源的初始化。图8 系统给进程

5、随机分配资源图8系统给进程0、1随机分配资源,显示所需的资源数。 图9 随机分配资源后进程信息图9为进程随机分配资源后信息的显示包括:进程状态,还需资源,已分配资源,最大资源,可利用资源。图10 安全检查图10为安全信息检查,输出安全序列号。 图11 进程再申请资源图11为给进程0再次分配资源,当满足所需资源时,进程执行完,释放系统所占的资源。图12 分配资源超过可利用资源图12 分配资源超过可利用资源,系统处于不安全状态,本次申请作废,恢复原来的资源分配状态。 总 结 遇到的问题由于使用进程编程较少,所以也遇到了一些问题,无论是哪种算法或问题首先要有自己的思路,接下来就是通过语言的实现。遇到

6、的最大的问题就是不了解银行家算法和安全性算法,所以刚开始无从下手,还有问题就是编译调试中的问题。 解决方法我通过网上和图书馆查阅相关的资料,对这两种算法有了初步的了解,然后提出自己的设计思路,确定采用单链表的数据结构实现,对于一些自己模糊和不清楚自己又解决不了的问题那就问老师和同学。收获体会 通过这次实验,让我更加全面的复习C语言,也让我加深了操作系统的知识,知道了系统给进程分配资源时解决死锁的方法,对安全算法和银行家算法有了一定的了解。以前的自己C语言的编程还是有些基础,也做了大量的编程题,所以,编程不是主要的问题。主要的问题就是对于操作系统系统分配资源的不熟悉,以及试验中所遇到的算法的了解

7、不够,致使在编程中出现了一些错误,之后,通过借阅图书馆的书籍,查阅相关的资料,弄懂了算法的含义,解决了相关的问题,让我收获不少。程序清单#include#include#include#define MaxResource 10 / 最大系统资源类#define NULL 0struct pcb /定义进程控制块PCB int pid; /进程标号 int MaxMaxResource;/ 表示某个进程对某类资源的最大需求 int AllocationMaxResource;/ 表示某个进程已分配到某类资源的个数 int NeedMaxResource;/ 表示某个进程尚需要某类资源的个数 i

8、nt markMaxResource; /在使用FreeRecourse是以确定是否释放资源 pcb *next; ;void Initialize(pcb *&head,int m,int n, int AvailableMaxResource)/初始化进程资源值int i,j=0;void AddPcb(pcb *&head,pcb node);pcb node; printf(t*请输入%d进程的%d个最大资源数*tn,n,m);do node.pid=j;printf(请输入第 %d个进程最大需求资源数:n,node.pid); for(i=0;im;i+) scanf(%d,&nod

9、e.Maxi);printf(系统给进程%d随机分配资源数为:n ,node.pid);for(i=0;im;i+) node.Allocationi=rand()%node.Maxi;printf(%10d,node.Allocationi);Availablei=Availablei-node.Allocationi; printf(n);printf(进程%d还所需的资源数为:n,node.pid);for(i=0;im;i+) node.Needi=node.Maxi-node.Allocationi;printf(%10d,node.Needi); for(i=0;im;i+)nod

10、e.marki=0;printf(n);AddPcb(head,node);j+;while(jnext=NULL;if(head=NULL)head=p;else last=head;while(last-next!=NULL)last=last-next;last-next=p;void ShowPcb(pcb *head,int *avail,int m) /显示进程初始化的资源值pcb *p=NULL; int j;p=head;if(p=NULL)printf(当前没有进程,请重新输入进程!n); exit(0);elseprintf(进程号 最大资源值 已分配资源 还需资源 可利用

11、的资源 状态nn);while(p!=NULL)printf(p%d,p-pid);for(j=0;jMaxj,p-Allocationj,p-Needj,availj);if(p-markj)printf( 已执行n);else printf( 等待n);p=p-next;pcb *Seek(pcb *head,int pid)/查找进程在链表中的位置pcb *p=NULL;p=head;if(p=NULL)printf(没有进程,进程链表空!n);return p;elsewhile(p!=NULL)if(p-pid=pid)break; elsep=p-next;if(NULL=p)printf(没有这个进程!n);return p;else return p;void FreeResource(pcb *&head,int AvailableMaxResource,int m)/若进程所需资源已全部分配,则释放该进程占据的全部系统资源pcb *p=NULL;int i;p=head;if(!p)printf(没有进程,请先初始化进程!);else for(i=0;iNe

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号