如何理解C语言实现的操作系统银行家算法

技术如何理解C语言实现的操作系统银行家算法如何理解C语言实现的操作系统银行家算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、选题背景这次课程设计要

如何理解C语言实现的操作系统银行家算法,针对这个问题,本文详细介绍了相应的分析和解决方法,希望能帮助更多想要解决这个问题的小伙伴找到更简单更容易的方法。

一、选题背景

本课程设计要求完成一个资源管理系统,掌握使用银行家算法管理系统资源分配的工作原理。深刻理解多道程序设计系统中合理资源分配的重要性,加深对死锁相关概念的理解。实现了模拟银行家算法来分配系统资源以防止死锁。在本课题中实现实际操作系统的资源管理肯定是不可能的,而是通过处理模拟的资源数据来检测银行家算法在防止死锁中的作用。

二、方案论证

模拟银行家算法分配系统资源防止死锁。在本课题中实现实际操作系统的资源管理肯定是不可能的,而是通过处理模拟的资源数据来检测银行家算法在防止死锁中的作用。首先,检查用户请求的合法性,即检查所请求的请求是否不超过必要和不超过可用。如果请求合法,请尝试分配它。最后调用安全检查算法,对试分配后的状态进行安全检查。如果安全,就分配;否则,不要分配它,恢复原始状态,并拒绝应用程序。

三、实验环境

Windows操作系统。

VS 2013

c编程语言

00-1010-

四、设计思想及实验步骤

首先,检查用户提出的请求的合法性,即检查所请求的请求是否不超过必要和不超过可用。如果请求合法,请尝试分配它。最后调用安全检查算法,对试分配后的状态进行安全检查。如果安全,就分配;否则,不要分配它,恢复原始状态,并拒绝应用程序。

4.1 设计思想

可利用资源向量Available.这是一个包含m个元素的数组,每个元素代表一个类的可用资源数量。其初始值是系统中配置的该类所有可用资源的数量,其值随着该类资源的分配和恢复而动态变化。如果Available[j]=K,则表示系统中有K个Rj资源。

最大需求矩阵Max.这是一个新的矩阵,它定义了系统中每个进程对类资源的最大需求。如果Max[I,j]=K,那么进程I所需的Rj资源的最大数量就是K。

分配矩阵Allocation.这也是一个新的矩阵,它为系统中的每种资源类型定义了当前分配给每个进程的资源数量。如果Allocation[i,j]=K,则表示进程I已经分配的Rj资源数为K。

需求矩阵Need.这也是一个新的矩阵,用来表示每个流程所需要的各种资源的数量。如果Need[i,j]=K,则表示进程I仍然需要k Rj资源来完成任务。

那就是:

int M;//进程总数

int N;//资源类型。

int ALL _ RESOURCE[W];//各种资源数量的总和。

int Max[W][R];//最大需求矩阵,m个进程对n种资源的最大资源需求。

int Available[R];//可用资源向量,

整数分配[W][R];//分配矩阵,每个进程m已经获得了n类资源的资源数。

int需要[W][R];//M个进程还需要n种资源的资源量。

int Request[R];//进程请求的资源数量。

上述三个矩阵之间存在以下关系:

如何理解C语言实现的操作系统银行家算法

00-1010让请求I成为进程Pi的请求向量。如果Requesti[j]=K,则意味着进程Pi需要K个Rj类型的资源。发送请求后,系统根据以下步骤进行检查:

(1)检查申请量是否不大于需求量.如果请求I[j]=需要[i,j],转到步骤(2);否则,就被认为是错误的,因为他需要的资源数量已经超过了他宣布的最大值。

(2)检查申请量是否小于系统中的可利用资源数量.如果Requesti[j]=Available[i,j],转到步骤(2);否则,如果没有足够的资源,Pi必须等待。

strong>(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:

 
  1. Available[j]=Available[j]-Request[j];

  2. Allocation[k][j]=Allocation[k][j]+Request[j];

  3. Need[k][j]=Need[k][j]-Request[j];

  • (1)试分配后,系统执行安全性算法,调用safe()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程,以完成本次分配,并将安全序列打印出来;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。

4.4 安全性算法safe()

  • (1)设置两个向量

    • 工作向量:Work,它表示系统可提供给进程继续运行所需要的各类资源数目,它含有m个元素,在执行安全性算法开始时,Work: =Available

    • Finish,它表示系统是否有足够资源分配给进程,使之运行完成。开始时先做Finish[i]:=false;当有足够的资源分配给进程时,再令Finish[i]:=true

  • (2)从进程集合中找到一个满足下述条件的进程

    • Finish[i]:=false;

    • Need[i,j]<=Work[j];若找到,执行步骤(3),否则,执行步骤(4)

  • (3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行

如何理解C语言实现的操作系统银行家算法

5.2 流程图

如何理解C语言实现的操作系统银行家算法

如何理解C语言实现的操作系统银行家算法

如何理解C语言实现的操作系统银行家算法

七、总结

银行家算法就是一个分配资源的过程,使分配的序列不会产生死锁。此算法的中心思想是:按该法分配资源时,每次分配后总存在着一个进程,如果让它单独运行下去,必然可以获得它所需要的全部资源,也就是说,它能结束,而它结束后可以归还这类资源以满足其他申请者的需要。

关于如何理解C语言实现的操作系统银行家算法问题的解答就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/52414.html

(0)

相关推荐

  • Android studio有哪些使用小技巧

    技术Android studio有哪些使用小技巧这篇文章主要介绍“Android studio有哪些使用小技巧”,在日常操作中,相信很多人在Android studio有哪些使用小技巧问题上存在疑惑,小编查阅了各式资料,

    攻略 2021年11月13日
  • Oracle11g报警功能识别是否会忽略或吞掉错误的程序

    技术Oracle11g报警功能识别是否会忽略或吞掉错误的程序Oracle11g报警功能识别是否会忽略或吞掉错误的程序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易

    攻略 2021年11月29日
  • 铁与稀硝酸反应,少量铁和稀硝酸反应离子方程式

    技术铁与稀硝酸反应,少量铁和稀硝酸反应离子方程式(1)少量铁与稀硝酸反应(或铁粉与过量稀硝酸反应)的方程式:Fe+4HNO3(稀)=Fe(NO3)3+NO↑+2H2O
    离子方程式为:
    Fe+4H+ +NO3-==Fe3

    生活 2021年10月26日
  • 如何使用Ant进行ssh和scp操作

    技术如何使用Ant进行ssh和scp操作今天就跟大家聊聊有关如何使用Ant进行ssh和scp操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用Ant进行ssh

    攻略 2021年11月10日
  • Mysql数据分组排名实现的示例分析

    技术Mysql数据分组排名实现的示例分析Mysql数据分组排名实现的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.数据源2.数据

    攻略 2021年10月31日
  • zabbix4.0-编译安装:LNAP+zabbix4.0

    技术zabbix4.0-编译安装:LNAP+zabbix4.0 zabbix4.0-编译安装:LNAP+zabbix4.0相关网址:
    nginx下载地址:http://nginx.org/en/down

    礼包 2021年10月27日