欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    操作系统原理课程设计银行家算法.docx

    • 资源ID:8937136       资源大小:142.91KB        全文页数:24页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统原理课程设计银行家算法.docx

    1、操作系统原理课程设计银行家算法课 程 设 计课程名称 操作系统原理课程设计题 目 编程序模拟银行家算法专 业 计算机网络 班 级 姓 名 成 绩 指导教师 2009 年7月6日至2009年7月10日课程设计任务书设计题目:编程序模拟银行家算法设计目的1、银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。2、提高学生的程序设计能力、 提高算法设计质量与程序设计素质 ;设计任务 (在规定的时间内完成下列任务)思想:将一定数量的资金供多个用户周转使用,当用户对资金的最大申请量不超

    2、过现存资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大的申请量。银行家对客户的借款可以推迟支付,但是能够使客户在有限的时间内得到借款,客户得到所有的借款后能在有限的时间内归还。用银行家算法分配资源时,测试进程对资源的最大需求量,若现存资源能满足最大需求就满足当前进程的申请,否则推迟分配,这样能够保证至少有一个进程可以得到所需的全部资源而执行到结束,然后归还资源,若OS能保证所有进程在有限的时间内得到所需资源则称系统处于安全状态。时间安排 1月 14日 布置课程设计任务;分配题目后,查阅资料、 准备程序; 1月 15 1月17 日上机调试程序、书写课程设计报告;1月18 日 提交

    3、课程设计报告及相关文档。具体要求1. 课程设计报告按统一通用格式书写,具体格式要求请在网络上查阅;2. 每位学生应独立完成各自的任务且每天至少在设计室工作半天;指 导 教 师 签 名: 09年 7月 6日教研室主任(或责任教师)签名: 09年 7月 10日1.需求分析本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。集体要求如下:(1)模拟一个银行家算法;(2)初始化时让系统拥有一定的资源;(3)用键盘输入的方式申请资源;(4)如果预分配后,系统处于安全状态,则修改系统的资源分配情况;(5) 如果预分配后,系统处于

    4、不安全状态,则提示不能满足请求, 此次课程设计的主要内容时模拟实现动态资源分配。同时要求编写和调试一个系统动态资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。死锁的产生,必须同时满足四个条件,即一个资源每次只能由一个进程张勇;第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,单它仍继续宝石已得到的所有其他资源;第三个为非剥夺条件,即在出现死锁的系统中一定有不可剥夺使用的资源;第四个为循环等待条件,系

    5、统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。通过这个算法可以用来解决生活中的实际问题。死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。1.1 设计原理:死锁产生的条件1互斥控制,进程对其所要求的资源进行排他控制,一个资源仅能被一个进程独占。2非剥夺控制,进程所获得的资源在未被释放之前,不能被其他进程剥夺,即使

    6、该进程处于阻塞状态,他所占用的资源野不能被其他进程使用,而其他进程只能等待该资源的释放;3逐次请求,进程以随意的零星方式逐次取得资源,而不是集中性的一次请求,这样有利于提高资源的利用率;4.环路条件,在发生死锁时,必然存在一个进程资源的环形链。不断有资源在等待被占用的资源;我们只要破坏以上四个条件之一,既可以预防死锁。银行家算法是避免死锁的方法中,施加的限制条件较弱的,有利于获得令人满意的系统性能的方法。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。Dijkstra(1965)年提出了一种能够避免死锁的调度方法,称为银行家算法,描述如下:假

    7、定一个银行家拥有资金,数量为,被N个可户共享。银行家对可户提出下列约束条件:.每个客户必须预先说明自己所要求的最大资金量;.每个客户每次提出部分资金量申请和获得分配;.如果银行家满足了客户对资金的最大需求量,那么,客户在资金运作后,应在有限时间内全部归还银行。把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁.1.2设计思想:假设

    8、在进程并发执行时进程i提出请求j类资源k个后,表示为Requestij=k。系统按下述步骤进行安全检查:(1)如果RequestiNeedi则继续以下检查,否则显示需求申请超出最大需求值的错误。(2)如果RequestiAvailable则继续以下检查,否则显示系统无足够资源,Pi阻塞等待。(3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值: Availablej=Availablej-Requestij; Allocationi,j=Allocationi,j+Requestij; Needi,j=Needi,j-Requestij; (4)系统执行安全性算法,检查此次资源分配

    9、后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则, 将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。(5)设置两个向量: 工作向量Work: 它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work=Available; Finish: 它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi=false; 当有足够资源分配给进程时, 再令Finishi=true。(2)从进程集合中找到一个能满足下述条件的进程: Finishi=false; Needi,jWorkj; 若找到, 执行步

    10、骤(3), 否则,执行步骤(4)。(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Workj= Worki+Allocationi,j; Finishi= true; go to step 2; (4)如果所有进程的Finishi=true都满足, 则表示系统处于安全状态;否则,系统处于不安全状态。1.3 程序结构:A.字符判断模块:判断输入的字符是否为数字,如果不是则提示出错并重新输入,主要处理输入为非数字时程序出现运行错误现象。此模块功能由数字判断函数( int shuzi(int sz); )实现。B.程序初始化模块:用于程序开始进行初始化输入数据:

    11、进程数量、资源种类、各种资源可利用数量、各进程的各种资源已分配数量、各进程对各类资源最大需求数等。此模块功能在系统初始化函数(void chushihua(); )中实现。C.当前安全性检查模块:用于判断当前状态安全性,根据不同地方的调用提示处理不同,在安全性算法函数(void safe(); )中实现。D.银行家算法模块:进行银行家算法模拟实现的模块,调用其他各个模块进行银行家算法模拟过程,在银行家算法函数(void bank();)中实现。E.显示分配模块:显示当前资源分配详细情况,包括:各种资源的总数量(all)、系统目前各种资源可用的数量、各进程已经得到的资源数量、各进程还需要的资源量

    12、,在显示分配情况函数(void showdata(); )中实现。1.4程序流程图:图1 银行家算法的流程图1.5数据结构:1.5.1定义全局变量const int x=50,y=100; /定义常量,便于修改int Availablex; /各种资源可利用的数量int Allocationyy; /各进程当前已分配的资源数量int Maxyy; /各进程对各类资源的最大需求数int Needyy; /还需求矩阵int Requestx; /申请各类资源的数量int Workx; /工作向量,表系统可提供给进程运行所需各类资源数量int Finishy; /表系统是否有足够的资源分配给进程,0

    13、为否,1为是int py; /存储安全序列int i,j; /全局变量,主要用于循环语句中int n,m; /n为进程的数量,m为资源种类数int l=0,counter=0;1.5.2函数声明int shuzi(int sz); /数字判断函数,还可使用 void shuzi(int& sz); 方式void chushihua(); /系统初始化函数void safe(); /安全性算法函数void bank(); /银行家算法函数void showdata(); /函数showdata,输出当前资源分配情况1.5.3主函数结构int main()system(color 06f); /设

    14、置当前窗口的背景色和前景色 cout /显示程序开始提示信息 chushihua(); /初始化函数调用 coutendlendl; showdata(); /输出初始化后的状态 safe(); /安全性算法函数调用 if (ln) coutn当前状态不安全,无法申请,程序退出!endl; coutendl; system(pause); return 0; / break; else int i; /局部变量 l=0;coutn安全的状态!endl; cout安全序列为: ; coutendl进程(p0); /输出安全序列,考虑显示格式,先输出第一个 for (i=1; in; i+) co

    15、ut进程(pi); for (i=0; in; i+) Finishi=0; /所有进程置为未分配状态 coutendlendl; bank(); /银行家算法函数调用return 0; 1.5.4银行家算法:设Requesti是进程Pi的请求向量,如果Requestij = K,表示进程Pi需要K个Ri类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:(1)如果Requestij = Needi, j,便转向步骤2;否则认为出错,因为它所需的资源数已经超过了它所宣布的最大值。(2)如果Requestij = Availablej,便转向步骤3;否则表示尚无足够资源,Pi需等待。(3)

    16、系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值。 Availablej = Available-Requestij; Allocationi, j = Allocationi, j + Requestij; Needi, j = Needi, j - Requestj; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来资源的分配状态,让进程Pi等待。1.5.5源程序:#include #include #include #include #include /=定义全局变量=c

    17、onst int x=50,y=100; /定义常量,便于修改int Availablex; /各种资源可利用的数量int Allocationyy; /各进程当前已分配的资源数量int Maxyy; /各进程对各类资源的最大需求数int Needyy; /还需求矩阵int Requestx; /申请各类资源的数量int Workx; /工作向量,表示系统可提供给进程继续运行所需的各类资源数量int Finishy; /表示系统是否有足够的资源分配给进程,0为否,非0为是int py; /存储安全序列int i,j;int n,m; /n为进程的数量,m为资源种类数int l=0,counte

    18、r=0;/函数声明int shuzi(int sz); /数字判断函数 或者使用 void shuzi(int& sz); 方式void chushihua(); /系统初始化函数void safe(); /安全性算法函数void bank(); /银行家算法函数void showdata(); /函数showdata,输出当前资源分配情况/=数字判断函数=int shuzi(int sz) /输入数据并判断是否为数字 char *temp; temp=new char; /临时指针,存放输入字符 int len; /存储取字符的长度 sz=0 ; /清零 char s; / do /输入赌注

    19、,只能输入数字 / gets(temp); /getline(cin,temp) cintemp; len=strlen(temp); /取字符长度 for(int i=0;ilen;i+) s= *(temp+i); if(s9) cout 笨蛋,输错了! 你输入的是数字吗?! nn; cout请重新输入:; break; while(s9); for(int i=0;ilen;i+) /输入字符串转化为整形数字 int t=1; for(int j=1;jlen-i;j+) t*=10; sz+=(*(temp+i)-48)*t; return sz;/=系统初始化函数=void chus

    20、hihua() /=系统初始化输入= cout % 程序开始,系统初始化输入 % endl; cout=endlendl; cout请输入进程的数量: ;/从此开始输入有关数据 n=shuzi(n); cout请输入资源种类数: ; m=shuzi(m); coutendl请输入各种资源可利用的数量( m 种): endl; coutendl; for (j=0; jm; j+) cout 输入资源 j 可利用的数量Availablej: ; Availablej=shuzi(Availablej); Workj=Availablej; /初始化Workj coutendl; cout请输入各

    21、进程当前已分配的资源数量Allocationnm: endlendl; for (i=0; in; i+) for (j=0; jm; j+) cout 请输入进程 i 当前已分配的资源 j 数量: ; Allocationij=shuzi(Allocationij); coutendl; Finishi=0;/初始化Finishi coutendl; cout请输入各进程对各类资源的最大需求数Maxnm: endl; for (i=0; in; i+) for (j=0; jm; j+) cout 请输入进程 i 对资源 j=Allocationij) / Needij = Maxij-Al

    22、locationij; /计算还需求量 else Needij=0;/最大需求量小于已分配量时还需求量为0,即此类资源已足够不需再申请 cout% 初始化完成! %endl;/=安全性算法函数=void safe() l=0; for (i=0; in;) /i+ if (Finishi=0) /寻找Finishi=0的进程 条件一 counter=0; /记数器 for (j=0; j=Needij); /可用大于等于需求 else counter=1; break; if(counter!=1) /进程的每类资源量都符合条件Workj=Needij 条件二 pl=i; /存储安全序列 Fi

    23、nishi=1; /标志为可分配 for (j=0; j=Needij i= -1; /从第一个进程开始继续寻找满足条件一二的进程 i+; /for循环继续寻找 /=显示分配情况函数 =void showdata() /函数showdata,输出当前资源分配情况 int i,j; /局部变量 int Ally; /各种资源的总数量 int l2; /局部变量 l1, cout=endl; coutendl% 系统当前状态如下:%endl; cout% 各种资源的总数量(all):endl; for (j=0;jm;j+) cout 资源j: ; Allj=Availablej; /初始化 先赋

    24、值加上可利用量 for (i=0;in;i+) Allj+=Allocationij; /再加上每个进程已分配量计算J类资源总量 coutAllj ; if (j+1)%5=0 ) coutendl; /每行显示五个 & j!=0 coutendlendl; cout% 系统目前各种资源可用的数为(available):endl; for (j=0;jm;j+) cout 资源j: Availablej ; if(j+1)%5=0) coutendl; /每行最多显示五个 & j!=0 coutendlendl; cout% 各进程已经得到的资源量(allocation): endl; / l

    25、1=0; /归零 for(i=0;i=m/5;i+) /设计每行最多显示五种资源 for (j=i*5;ji*5+5 & jm;j+)cout 资源j; coutendl; for(l2=0;l2n;l2+) cout进程l2:; for (j=i*5;ji*5+5 & jm;j+)coutAllocationl2j ; coutendl; coutendl; cout% 各进程还需要的资源量(need):endl; for(i=0;i=m/5;i+) /设计每行显示五种资源 for (j=i*5;ji*5+5 & jm;j+)cout 资源j; coutendl; for(l2=0;l2n;

    26、l2+) cout进程l2:; for (j=i*5;ji*5+5 & jm;j+)coutNeedl2j ; coutendl; coutendl; cout=endl; coutendl; system(pause); / 暂停/=银行家算法函数=void bank() cout=endlendl; cout% 以下开始为进程进行资源分配申请 %endlendl; /=申请资源= int k=0;/用于输入进程编号 bool r=false; / 初值为假,输入Y继续申请则置为真 do /输入请求 cout请输入申请资源的进程编号(输入0-n-1之间): ; k=shuzi(k); coutn-1) /输入异常处理 coutendl您输入了错误的进程号,请重新输入!endl; coutendl请输入申请资源的进程编号(输入0-n-1之间): ; k=shuzi(k); coutendl;


    注意事项

    本文(操作系统原理课程设计银行家算法.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开