有没有人懂操作系统的银行家算法,最好有一道例题可以讲

大连求婚策划Cinderella 2024-05-31 02:42:33
最佳回答
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系 银行家算法统在进行资源分配之前,应先计算此次分配兹源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全序列是指一个进程序列{p1,…,pn}是安全的,即对于每一个进程pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程pj (j < i )当前占有资源量之和。我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配兹源相当于用户向银行家贷款。为保证资金的安全,银行家规定:(1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;(2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量;(3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;(4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.操作系统按照银行家制定的规则为进程分配兹源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配兹源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配兹源,若能满足则按当前的申请量分配兹源,否则也要推迟分配。银行家算法在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配兹源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。设进程cusneed提出请求request [i],则银行家算法按如下规则进行判断。(1)如果request [cusneed] [i]<= need[cusneed][i],则转(2);否则,出错。(2)如果request [cusneed] [i]<= **ailable[i],则转(3);否则,等待。(3)系统试探分配兹源,修改相关数据:**ailable[i]-=request[cusneed][i];allocation[cusneed][i]+=request[cusneed][i];need[cusneed][i]-=request[cusneed][i];(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。安全性检查算法(1)设置两个工作向量work=**ailable;fin**h(2)从进程集合中找到一个满足下述条件的进程,fin**h==false;need<=work;如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。work=work+allocation;fin**h=true;goto 2(4)如所有的进程fin**h= true,则表示安全;否则系统不安全。银行家算法流程图算法(c语言实现)#include<string.h> #include<stdio.h> #include<stdlib.h> #include<conio.h>/*用到了getch()*/ #definem5/*进程数*/ #definen3/*资源数*/ #definefalse0 #definetrue1 /*m个进程对n类资源最大资源需求量*/intmax[m][n]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; /*系统可用资源数*/int**ailable[n]={10,5,7}; /*m个进程已分配到的n类数量*/intallocation[m][n]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; /*m个进程已经得到n类资源的资源量*/intneed[m][n]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; /*m个进程还需要n类资源的资源量*/intrequest[n]={0,0,0}; voidmain() { inti=0,j=0; charflag; voidshowdata(); voidchangdata(int); voidrstordata(int); intchkerr(); showdata(); enter: { printf("请输入需申请资源的进程号(从0到"); printf("%d",m-1); printf("):"); scanf("%d",&i); } if(i<0||i>=m) { printf("输入的进程号不存在,重新输入!\n"); gotoenter; } err: { printf("请输入进程"); printf("%d",i); printf("申请的资源数\n"); printf("类别:abc\n"); printf(""); for(j=0;j<n;j++) { scanf("%d",&request[j]); if(request[j]>need[i][j]) { printf("%d",i); printf("号进程"); printf("申请的资源数>进程"); printf("%d",i); printf("还需要"); printf("%d",j); printf("类资源的资源量!申请不合理,出错!请重新选择!\n"); gotoerr; } else{ if(request[j]>**ailable[j]) { printf("进程"); printf("%d",i); printf("申请的资源数大于系统可用"); printf("%d",j); printf("类资源的资源量!申请不合理,出错!请重新选择!\n"); gotoerr; } } } } changdata(i); if(chkerr()) { rstordata(i); showdata(); } elseshowdata(); printf("\n"); printf("按'y'或'y'键继续,否则退出\n"); flag=getch(); if(flag=='y'||flag=='y') { gotoenter; } else{ exit(0); } } /*显示数组*/voidshowdata() { inti,j; printf("系统可用资源向量:\n"); printf("*****ailable***\n"); printf("资源类别:abc\n"); printf("资源数目:"); for(j=0;j<n;j++) { printf("%d",**ailable[j]); } printf("\n"); printf("\n"); printf("各进程还需要的资源量:\n"); printf("******need******\n"); printf("资源类别:abc\n"); for(i=0;i<m;i++) { printf(""); printf("%d",i); printf("号进程:"); for(j=0;j<n;j++) { printf("%d",need[i][j]); } printf("\n"); } printf("\n"); printf("各进程已经得到的资源量:\n"); printf("***allocation***\n"); printf("资源类别:abc\n"); for(i=0;i<m;i++) { printf(""); printf("%d",i); printf("号进程:"); /*printf(":\n");*/for(j=0;j<n;j++) { printf("%d",allocation[i][j]); } printf("\n"); } printf("\n"); } /*系统对进程请求响应,资源向量改变*/voidchangdata(intk) { intj; for(j=0;j<n;j++) { **ailable[j]=**ailable[j]-request[j]; allocation[k][j]=allocation[k][j]+request[j]; need[k][j]=need[k][j]-request[j]; } } /*资源向量改变*/voidrstordata(intk) { intj; for(j=0;j<n;j++) { **ailable[j]=**ailable[j]+request[j]; allocation[k][j]=allocation[k][j]-request[j]; need[k][j]=need[k][j]+request[j]; } } /*安全性检查函数*/intchkerr()//在假定分配兹源的情况下检查系统的安全性 { intwork[n],fin**h[m],temp[m];//temp[]用来记录进程安全执行的顺序 inti,j,m,k=0,count; for(i=0;i<m;i++) fin**h[i]=false; for(j=0;j<n;j++) work[j]=**ailable[j];//把可利用资源数赋给work[] for(i=0;i<m;i++) { count=0; for(j=0;j<n;j++) if(fin**h[i]==false&&need[i][j]<=work[j]) count++; if(count==n)//当进程各类资源都满足need<=work时 { for(m=0;m<n;m++) work[m]=work[m]+allocation[i][m]; fin**h[i]=true; temp[k]=i;//记录下满足条件的进程 k++; i=-1; } } for(i=0;i<m;i++) if(fin**h[i]==false) { printf("系统不安全!!!本次资源申请不成功!!!\n"); return1; } printf("\n"); printf("经安全性检查,系统安全,本次分配成功。\n"); printf("\n"); printf("本次安全序列:"); for(i=0;i<m;i++)//打印安全系统的进程调用顺序 { printf("进程"); printf("%d",temp[i]); if(i<m-1) printf("->"); } printf("\n"); return0; } 20210311
汇率兑换计算器

类似问答
  • 计算机一级考试操作题没保存,然后就交卷,系统会自动保存答案吗?有
    • 2024-05-31 05:40:39
    • 提问者: 未知
    系统会自动保存答案,有分的。计算机一级考试时的答案是自动保存的。每做完一道题,操作者提交的答案都已经自动保存在系统中,无论是直接点击交卷,还是到最后考试结束自动交卷,之前的作答的内容都已经在其中了。所以不需要担心。拓展资料: 计算机一级考试:全国计算机等级考试是社会考试,...
  • 银行用什么操作系统
    • 2024-05-31 10:45:39
    • 提问者: 未知
    linux.unix .因为这两种操作系统比较高端,而且性能要好比较好,主要用于对技术要求含量较高的公司或是科研机构成!
  • 关于银行操作系统的问题
    • 2024-05-31 06:48:01
    • 提问者: 未知
    小型机和大型机等作服务器用的基本都是使用linux的系统,至于什么版本的就没人知道了,数据分析嘛,一般人也是不知道的·~
  • 操作系统主要完成哪些功能?都有哪些操作系统?
    • 2024-05-31 13:59:28
    • 提问者: 未知
    操作系统(英语;operating system,简称os)是一管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石。操作系统身负诸如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统是管理计算机系统的全部硬件资源包括软件资源及数据资源;控制程序运行;改善人机界面;为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用...
  • 什么是linux 操作系统,可以兼容xp系统吗
    • 2024-05-31 01:58:06
    • 提问者: 未知
    什么是linux简单地说,linux是一套免费使用和自由传播的类unix操作系统,它主要用于基于intel x86系列cpu的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的unix兼容产品。 linux的出现,最早开始于一位名叫linus torvalds的计算机业余爱好者,当时他是芬兰赫尔辛基大学的学生。他的目的是...
  • 餐饮供应链系统有没有好用的一个系统软件,或者app移动的操作?
    • 2024-05-31 02:48:54
    • 提问者: 未知
    餐饮企业通过供应链系统信息化会产生第三方冷链物流服务、金融服务,当有数据积累以后,中间环节也可以大量缩减。这种方式把供应商和餐饮商从博弈关系变成合作伙伴,未来...
  • 怎样进行职业规划?有没有系统、可行的方法?
    • 2024-05-31 17:12:18
    • 提问者: 未知
    题主所提供的信息量太少,只有两行字,所以这个问题很难回答,只能提供一种解决问题的思路。本人专职从事…
  • 最近有没有什么新上市的智能手机,最好是谷歌android操作系统的,价格别太高就行
    • 2024-05-31 11:04:29
    • 提问者: 未知
    欧盛w180的谷歌系统智能手机,适合你所提的要求,我目前正在用这款手机,蛮好的。我是在淘宝上买的,1280。目前的价格大致在1200~1400之间。你可以看下天极的报道:
  • 现在交易系统都可以编成系统了,人力操作可以敌得过系统吗?还有自己做交易的意义吗?
    • 2024-05-31 04:16:53
    • 提问者: 未知
    作为交易者头脑一定要清醒,很多似是而非的观点要多琢磨。本质上一个稳定盈利的自动化交易系统和一个稳定…
  • 怎样进行职业规划?有没有系统、可行的方法?
    • 2024-05-31 21:29:14
    • 提问者: 未知
    职业定位,就是清晰的明确一个人在职业上的发展方向,它是人在整个生涯发展历程中的战略性问题也是根本性…
汇率兑换计算器

热门推荐
热门问答
最新问答
推荐问答
新手帮助
常见问题
房贷计算器-九子财经 | 备案号: 桂ICP备19010581号-1 商务联系 企鹅:2790-680461

特别声明:本网为公益网站,人人都可发布,所有内容为会员自行上传发布",本站不承担任何法律责任,如内容有该作者著作权或违规内容,请联系我们清空删除。