计算机操作系统实验银行家算法,实验六 银行家算法(下)

实验六 银行家算法(下)

一、实验说明

实验说明:本次实验主要是对银行家算法进行进一步的实践学习,掌握银行家算法的整体流程,理解程序测试时每一步的当前状态,能对当前的资源分配进行预判断。

二、实验要求

1、获取源代码

2、看懂大致框架

3、尝试运行并知道运行中输入的信息的意义

4、通过运行程序分配如下: 总需求:a 8 5 5; b 5 3 4; 已分配:a 4 2 3; b 4 2 2; 现在a 提出分配 1 1 1。 可以分配吗?

5、请从银行家算法的理论进行分析上述分配是否会造成死锁,如果会造成死锁,说明源代码并不完整,请同学改进完善源代码,使其能有效判断是否存在安全序列,进而拒绝不安全的分配要求。

三、实验步骤

1、在文档右边的虚拟化操作系统中,打开桌面的 Xfce 终端,输入cd Desktop

2、输入touch 6-1.c

3、输入gedit 6-1.c

4、在 gedit 里面输入源代码,点击 save 保存

5、关掉 gedit 编辑器

6、输入g++ -o 6-1 6-1.c

7、在桌面的 Xfce 终端继续输入命令./6-1

8、按要求输入并运行,观察结果

9、针对实验要求5,改进完善源代码.

四、实验报告要求 1、通过运行程序分配如下: 总需求:a 8 5 5; b 5 3 4; 已分配:a 4 2 3; b 4 2 2; 现在a 提出分配 1 1 1 完成

0a9389ddffcd0fc55e6e7201c3e83c3d.png

2、简述自己对银行家算法的理解?

银行家算法是避免死锁的算法,在每一个进程进入系统时,都必须申明在运行过程中所需要每种资源的最大单元数目,其数目不嫩超过系统所拥有的资源总量,当进程请求资源时,系统会确认是否有足够的资源分配给该进程,若有的话,还要进一步判断如果分配给该进程所申请的资源会不会使系统处于不安全状态,如果不会,才将资源分配给该进程。

3、针对实验要求5,改进完善源代码.对改进之处说明或截图,并重新进行前面的分配过程,并截图。

4、将最后的完整源代码复制。

#include

#include

#include

#include

#include

//#include

const int MAX_P=20;

const int MAXA=10; //定义A类资源的数量

const int MAXB=5;

const int MAXC=7;

using namespace std;

typedef struct node{

int a;

int b;

int c;

int remain_a;

int remain_b;

int remain_c;

}bank;

typedef struct node1{

char name[20];

int a;

int b;

int c;

int need_a;

int need_b;

int need_c;

}process;

bank banker;

process processes[MAX_P];

int quantity;

//初始化函数

void initial()

{

int i;

banker.a=MAXA;

banker.b=MAXB;

banker.c=MAXC;

banker.remain_a=MAXA;

banker.remain_b=MAXB;

banker.remain_c=MAXC;

for(i=0;i

strcpy(processes[i].name,"");

processes[i].a=0;

processes[i].b=0;

processes[i].c=0;

processes[i].need_a=0;

processes[i].need_b=0;

processes[i].need_c=0;

}

}

//新加作业

void add()

{

char name[20];

int flag=0;

int t;

int need_a,need_b,need_c;

int i;

cout<

cout<

cout<

cout<

cin>>name;

for(i=0;i

if(!strcmp(processes[i].name,name)){

flag=1;

break;

}

}

if(flag){

cout<

}

else{

cout<

cin>>need_a;

cout<

cin>>need_b;

cout<

cin>>need_c;

t=1;

cout<

if(need_a>banker.remain_a){

cout<

t=0;

}

if(need_b>banker.remain_b){

cout<

t=0;

}

if(need_c>banker.remain_c){

cout<

t=0;

}

if(t){

strcpy(processes[quantity].name,name);

processes[quantity].need_a=need_a;

processes[quantity].need_b=need_b;

processes[quantity].need_c=need_c;

quantity++;

cout<

}

else{

cout<

}

}

}

//为作业申请资源

void bid()

{

char name[20];

int i,p;

int a,b,c;

int flag;

cout<

cout<

cout<

cin>>name;

p=-1;

for(i=0;i

if(!strcmp(processes[i].name,name)){

p=i;

break;

}

}

if(p!=-1){

cout<

cin>>a;

cout<

cin>>b;

cout<

cin>>c;

flag=1;

if((a>banker.remain_a)||(a>processes[p].need_a-processes[p].a)){

cout<

flag=0;

}

if((b>banker.remain_b)||(b>processes[p].need_b-processes[p].b)){

cout<

flag=0;

}

if((c>banker.remain_c)||(c>processes[p].need_c-processes[p].c)){

cout<

flag=0;

}

if(flag){

banker.remain_a-=a;

banker.remain_b-=b;

banker.remain_c-=c;

processes[p].a+=a;

processes[p].b+=b;

processes[p].c+=c;

cout<

}

else{

cout<

}

}

else{

cout<

}

}

//撤消作业

void finished()

{

char name[20];

int i,p;

cout<

cout<

cout<

cin>>name;

p=-1;

for(i=0;i

if(!strcmp(processes[i].name,name)){

p=i;

break;

}

}

if(p!=-1){

banker.remain_a+=processes[p].a;

banker.remain_b+=processes[p].b;

banker.remain_c+=processes[p].c;

for(i=p;i

processes[i]=processes[i+1];

}

strcpy(processes[quantity-1].name,"");

processes[quantity-1].a=0;

processes[quantity-1].b=0;

processes[quantity-1].c=0;

processes[quantity-1].need_a=0;

processes[quantity-1].need_b=0;

processes[quantity-1].need_c=0;

quantity--;

cout<

}

else{

cout<

}

}

//查看资源情况

void view()

{

int i;

cout<

cout<

cout<

cout<

cout<

cout<

cout<

if(quantity>0){

for(i=0;i

cout<

cout<

cout<

cout<

cout<

}

}

else{

cout<

}

}

//显示版权信息函数

void version()

{

cout<

cout<

}

int main()

{

int chioce;

int flag=1;

initial();

version();

while(flag){

cout<

cout<

cout<

cout<

cin>>chioce;

switch(chioce){

case 1:

add();

break;

case 2:

bid();

break;

case 3:

finished();

break;

case 4:

view();

break;

case 0:

flag=0;

break;

default:

cout<

}

}

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么原因导致芯片短路_华为为什么突然大量用起了联发科芯片,或是这三个产品策略原因...

经常关注数码圈的都知道&#xff0c;近几年来&#xff0c;随着华为自研能力的提升&#xff0c;华为几乎很少采购第三方芯片&#xff0c;近几年来的绝大多数华为手机&#xff0c;几乎都是用的自研芯片麒麟系列。并没有像其它国产品牌那样用联发科或者高通的芯片。不过今年却大不…

如何运行vue项目(维护他人的项目)

假如你是个小白&#xff0c;在公司接手他人的项目&#xff0c;这个时候&#xff0c;该怎么将这个项目跑通&#xff1f; 前提&#xff1a; 首先&#xff0c;这个教程主要针对vue小白&#xff0c;并且不知道安装node.js环境的。言归正传&#xff0c;下面开始教程&#xff1a;在维…

进程操作

2019独角兽企业重金招聘Python工程师标准>>> 一、创建一个进程 进程是系统中最基本的执行单位。Linux系统允许任何一个用户进程创建一个子进程&#xff0c;创建之后&#xff0c;子进程存在于系统之中并独立于父进程。 关于父进程与子进程这两个概念&#xff0c;除了…

计算机硬件发展的特点有哪些,简述计算机的发展历程及各代计算机的特点。

满意答案Karen0491推荐于 2017.11.25采纳率&#xff1a;40% 等级&#xff1a;6已帮助&#xff1a;608人世界上第一台计算机是1946年问世的&#xff0c;根据计算机的性能和软硬件技术&#xff0c;将计算机发展划分成以下几个阶段&#xff1a;①第一阶段&#xff1a;电子管计算…

电饼锅的样式图片价格_进口珐琅铸铁锅专场,精致小厨娘们来康康!

两个月前&#xff0c;小灰兔我写了《10个高颜值居家好物&#xff0c;让你在朋友圈万众瞩目&#xff01;》一文&#xff0c;曾有小伙伴私信说这张图简直就是梦想中厨房的亚子强烈同意&#xff01;&#xff01;&#xff01;有多少女孩子&#xff0c;看到颜值炒鸡高的锅路都走不动…

在UITouch事件中画圆圈-iOS8 Swift基础教程

这篇教程主要内容展示如何利用Core Graphics Framework画圆圈,当用户点击屏幕时随机生成不同大小的圆,这篇教程在Xcode6和iOS8下编译通过。 打开Xcode,新建项目选择Single View Application,Product Name填写iOS8SwiftDrawingCirclesTutorial,Organization Name和Organization …

浏览器兼容性问题

转载于:https://www.cnblogs.com/python-machine/p/9406084.html

有人在远程使用计算机是什么意思,如何远程控制计算机,计算机远程控制有什么用途...

对于每个人来说&#xff0c;计算机都是至关重要的家用电器. 因为使用计算机可以使我们的业余生活丰富多彩. 随着Internet的普及&#xff0c;越来越多的用户开始学习自己使用计算机. 但是&#xff0c;操作中仍然存在很多问题&#xff0c;只要每个人都学会了远程控制&#xff0c;…

图学java基础篇之IO

java io体系 如图可以看出&#xff0c;java的io按照包来划分的话可以分为三大块&#xff1a;io、nio、aio&#xff0c;但是从使用角度来看&#xff0c;这三块其实揉杂在一起的&#xff0c;下边我们先来概述下这三块&#xff1a; io:主要包含字符流和字节流&#xff0c;我们常用…

boot界面上下键调节键不能动_为什么电脑一开机就自动进入BIOS界面

电脑故障的问题表现形式很多&#xff0c;比如说为什么电脑蓝屏&#xff0c;为什么电脑一开机就自动进入BIOS界面等。这些问题往往另很多网友不知所措。今天小编就针对电脑一开机就自动进入BIOS界面的问题&#xff0c;教下大家具体的解决方法。1、你的BIOS电池没有电了。解决方法…

句子相似度--余弦相似度算法的实现

1、余弦相似度余弦距离&#xff0c;也称为余弦相似度&#xff0c;是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。余弦值越接近1&#xff0c;就表明夹角越接近0度&#xff0c;也就是两个向量越相似&#xff0c;这就叫"余弦相似性"。 上图两…

红帽436——HA高可用集群之概念篇

一、集群概念&#xff1a;集群&#xff1a;提高性能&#xff0c;降低成本&#xff0c;提高可扩展性&#xff0c;增强可靠性&#xff0c;任务调度室集群中的核心技术。集群作用:保证业务不断 集群三种网络&#xff1a;业务网络,集群网络,存储网络 二、集群三种类型&#xff1a;…

按季度分类汇总_2019年纯碱行业相关上市公司季报 与半年报情况汇总

2019年纯碱行业相关上市公司季报与半年报情况汇总经百川盈孚统计&#xff0c;目前纯碱行业相关上市公司共计11家(包含三家ST股)&#xff0c;已经全部公布2019年一季度报告。2019年上半年度报告仅五家公司公布&#xff0c;其中包含&#xff1a;大连大化、山东海化、华昌化工、湖…

sapmto生产模式配置及操作详解_硬岩制砂线怎么设计?300t/h的生产流程与设备配置详解...

点击上方“蓝字”关注我们说到硬岩&#xff0c;花岗岩、辉绿岩都不陌生&#xff0c;关于花岗岩的生产线配置小编曾介绍过&#xff0c;感兴趣的可直接点阅&#xff1a;《硬质岩破碎很发愁&#xff1f;从原料到成品&#xff0c;看花岗岩的破碎制砂生产线配置》《年产300万t花岗岩…

公交卡软件测试思路,中国移动NFC专用SIM卡测试过程介绍

近期&#xff0c;通讯运营商在NFC的应用领域迈出了一大步&#xff0c;消费者在北京乘坐地铁、公交以及其他支持市政一卡通消费的场所均可进行手机支付。接下来就从办卡开始&#xff0c;为大家详细介绍一下中国移动NFC手机钱包的实测过程。办理手机NFC支付业务想要刷手机消费除了…

青年教师大讲堂 计算机,浙海大青年教师大讲堂之船机学院“知识改变命运”...

原标题&#xff1a;浙海大青年教师大讲堂之船机学院“知识改变命运”10月28日上午&#xff0c;由校团委主办&#xff0c;船舶与机电工程学院团委承办的青年博士教师大讲堂系列活动之“知识改变命运”在长峙校区杨存国一号报告厅举行。本次讲座由船舶与机电工程学院青年博士石学…

深入浅出分布式文件系统MogileFS集群

一&#xff0c;简介 MogileFS是一款开源的分布式文件存储系统&#xff0c;由LiveJournal旗下的Danga Interactive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前MogileFS的日益成熟使用此解决方法的公司越来越多&#xff0c;例如日…

计算机的控制面板打不开,控制面板打不开,教您控制面板打不开怎么办

最近有些不少的小伙伴向小编反映说&#xff0c;控制面板突然出现了打不开的情况&#xff0c;那么遇到这种情况该怎么办呢&#xff1f;其实控制面板打不开很有可能是因为系统文件损坏造成的。今天&#xff0c;小编就来把打不开控制面板的解决方法分享给你们。其实控制面板是我们…

【算法题】Multiples of 3 and 5

Multiples of 3 and 5 原题 题意如下&#xff1a; 找出N以内的3和5的倍数的和。 思路 1、刚看到觉得好弱智&#xff0c;直接遍历一遍不就OK了吗&#xff1f;但是第2和第3个测试用例报了TLE&#xff0c;超时。 2、然后想不出来了&#xff0c;搜了一下&#xff0c;发现有一个类似…

PIL简单图片处理(上)

自己看了下python&#xff0c;本来想照教程上一点一点学的&#xff0c;学了一会发现好没劲&#xff08;教程本身质量很好&#xff09;&#xff0c;学python就是为了好玩&#xff0c;为什么还这么按部就班勒&#xff1f;果断google下python的爬虫&#xff08;开始目的是这个&…