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

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

相关文章

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践举例

《Vue2项目中配置TailwindCSS和FontAwesome的最佳实践举例》:本文主要介绍Vue2项目中配置TailwindCSS和FontAwesome的最... 目录vue 2 项目中配置 Tailwind css 和 Font Awesome 的最佳实践一、Tailwind CSS 配置1. 安

CSS3 布局样式及其应用举例

《CSS3布局样式及其应用举例》CSS3的布局特性为前端开发者提供了无限可能,无论是Flexbox的一维布局还是Grid的二维布局,它们都能够帮助开发者以更清晰、简洁的方式实现复杂的网页布局,本文给... 目录深入探讨 css3 布局样式及其应用引言一、CSS布局的历史与发展1.1 早期布局的局限性1.2

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用