操作系统 | 银行家算法举例

2024-01-14 05:40

本文主要是介绍操作系统 | 银行家算法举例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据结构:

长度为m的一维数组Available表示还有多少可用资源n*m矩阵Max表示各进程对资源的最大需求数

n*m矩阵Allocation表示已经给各进程分配了多少资源

Max - Allocation = Need矩阵表示各进程最多还需要多少资源用长度为m的一位数组

Request表示进程此次申请的各种资源数

 

银行家算法步骤:

  • ①检查此次申请是否超过了之前声明的最大需求数
  • ②检查此时系统剩余的可用资源是否还能满足这次请求
  • ③试探着分配,更改各数据结构
  • ④用安全性算法检查此次分配是否会导致系统进入不安全状态

 

安全性算法步骤:

检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。

不断重复上述过程,看最终是否能让所有进程都加入安全序列。


 

举例说明:“若系统状态目前是安全的,若对某个申请评估时 在假定分配状态中,只要找到一个可满足线程就可断定系统是安全的”结论是错的。请构造一个例子进行证明。

例:在银行家算法中,若出现下述分配情况,试问:

若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?

答:不能,按照银行家算法,首先检查Requesti [j] 是否小于等于 Need[i,j],在这里(1,2,2,2) < (2,3,5,6)满足条件,则再判断Requesti [j] 是否小于等于 Available[j],这里(1,2,2,2) <(1,6,2,2)满足!此时找到了一个可满足进程。

然后便试探性的将资源分配给P2,此时P2的Allocation项变为(2,5,7,6),Need项变为(1,1,3,4),Available项变为(0,4,0,0)必须执行安全性算法,第一步就发现找不到一个进程使得Need[i,j] <= Work[j];所以安全性检查失败,这个Request请求会造成死锁,系统将处于不安全状态,故本次试探分配作废,恢复原来的资源分配状态,让进程P2等待。故“只要找到一个可满足线程就可断定系统是安全的”是错误的。

笔记:

1.多个进程: { P0,P1,P2,P4 } 代表1,2,3,4四个需要临界资源的进程

2.几种资源:{ A, B ,C } 代表A,B,C三种临界资源

3.Claim:最大需求矩阵(进程完成执行需要的各资源总量)

Allocation:分配矩阵(某个进程现在已经拥有的各资源量)

Need:需求矩阵(某个进程仍需要的各资源量)

Available:可利用资源向量 (系统保有的供分配的资源量)

其中:Need = Max - Allocation ,仍然需要的量等于总需求量减去拥有的量

当进程请求一组资源时,假设同意该请求,从而改变了系统的状态,然后确定其结果是否还处于安全状态。如果是,同意这个请求;如果不是,阻塞该进程知道同意该请求后系统状态仍然是安全的。

这篇关于操作系统 | 银行家算法举例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/604107

相关文章

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程