如何理解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)

相关推荐

  • 网页原型图设计工具用什么(网页的原型设计如何使用)

    技术如何用浏览器给网站设计原型如何用浏览器给网站设计原型,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。给网站设计原型是一个全面系统的过程,在此过程中你需

    攻略 2021年12月22日
  • blend for visual studio是什么(microsoft visual c可以删除吗)

    技术Microsoft Visual Studio 2005集成开发环境有哪些新功能这篇文章将为大家详细讲解有关Microsoft Visual Studio 2005集成开发环境有哪些新功能,小编觉得挺实用的,因此分享

    攻略 2021年12月24日
  • 如何使用Black自由格式化Python

    技术如何使用Black自由格式化Python如何使用Black自由格式化Python,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在我们覆盖

    攻略 2021年10月26日
  • Java基础之如何理解Object源码

    技术Java基础之如何理解Object源码本篇内容主要讲解“Java基础之如何理解Object源码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java基础之如何理解Obje

    攻略 2021年10月23日
  • class文件都是在java什么上运行(java中的class文件是什么文件)

    技术Java class文件基本结构是怎样的本篇内容主要讲解“Java class文件基本结构是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java class文件基

    攻略 2021年12月21日
  • 解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题

    技术解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题 解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题前言
    之前在 使用Python定时清理运行超时的pdflatex僵尸进程

    礼包 2021年12月2日