操作系统:死锁与饥饿

目录

死锁概念

饥饿与饿死概念

饥饿和死锁对比

死锁类型

死锁条件(Coffman条件)

死锁恢复方法

死锁避免

安全状态与安全进程序列:

银行家算法: 

死锁检测时机(了解):

死锁检测

死锁案例

过河问题


死锁概念

定义:一组进程中的每一个进程,均无限期地等待此组进程中某个其他进程占有的资源,因而永远无法得到的资源,这种现象称为进程死锁。

由定义可得:参与死琐的进程至少有二个; 每个参与死锁的进程均等待资源。

饥饿与饿死概念

饥饿:没有时间上界的等待。排队等待、忙式等待。

饿死:等待时间超过极限,进程即使完成也不再具有实际意义时

饥饿和死锁对比

1、死锁进程处于等待状态,饿死进程已经死了。

2、死锁(一定发生了循环等待)可以检测,饿死不可以。

3、死锁进程等待永远不会被释放的资源,饿死进程等待会被释放但却不会分配给自己的资源,其等待时限没有上限。

4、死锁一定涉及多个进程,而饥饿或被饿死的进程可能只有一个。

死锁类型

1.  竞争资源引起的死锁:

  例如:P1需要4台打印机,P2需要两台打印机。P1申请了3台,P2申请了一台,造成死锁。

 2、进程通讯引起的死锁

 3、其它原因引起的死锁

死锁条件(Coffman条件)

1、资源独占(mutual exclusion):资源被进程占用

2、不可抢占(non preemption):不可强制抢夺被进程占用的资源

3、保持申请(hold-while-applying):申请新资源并不释放它占用的资源

4、循环等待(circular wait):存在一个进程循环等待序列,P1等P2,P2等P3,P3等P1的循环等待。

死锁恢复方法

1. 系统重新启动:  简单,代价大

2.终止进程(process termination):终止环路上占有资源的进程并收回它们占有的资源。

3.剥夺资源(resource preemption):剥夺进程所占用的全部或部分资源。

4.进程回退(rollback):回退到以前没有发生死锁的状态。

死锁避免

死锁避免是保证系统不会进入死锁状态的动态策略。

安全状态与安全进程序列:

安全状态:所有进程可以按照某一次序安全运行,说明系统处于安全状态。

安全进程序列: 系统出于安全状态,可以按照某一次序安全运行,这个次序叫安全进程序列

银行家算法: 

数据结构:

m:资源类总数   n:进程总数
int Available:[m];   //系统可用资源
int Claim[n,m];      //进程最大需求
int Allocation[n,m]; //当前分配
int Need[n,m];       //尚需资源
int Request[n,m];    //当前请求资源
int Work[m];         //记录可用资源 
int Finish[n];       //记录进程是否可以执行完

安全性检测算法 

1、初始化Work数组=Available数组,Finish = {false}。

2、循环查找Need[i]<=Work[i] 且 Finish[i]=false,找到转3,未找到转4。

3、Work+=Allocation[i](相当于释放资源),Finish[i]=true,记录i到安全序列。

4、对于所有i,存在Finish[i]=true,则系统处于安全状态,从而得到安全序列。

资源分配算法

1、判断请求资源量是否小于需求资源量,若没有则返回错误。

2、判断请求资源量是否小于可用资源量,若没有则等待。

3、分配资源,可用资源减少,进程占用资源增加,需求资源减少。

4、运行安全性检测算法,检测系统是否安全,不安全则归还分配资源,并转入等待。

5、系统安全则确认资源分配。

死锁检测时机(了解):

考虑因素:死锁发生频度,死锁影响的进程。

1、等待时检测

2、定时检测

3、资源(eg. CPU)利用率下降时检测

死锁检测

1、初始化Work=Available,Finish={false}。

2、查找满足条件Request[i]<=Work,Finish[i]=false的i,转到3,没找到转到4。

3、Work+=Allocation[i](相当于释放资源),Finish[i]=true,继续转2。

4、对于所有i,存在Finish[i]=true,则系统未死锁,反之系统死锁。

 死锁案例

过河问题

        这里要求找到S最大人数,不会死锁情况下,桥上可以容纳的最大人数。其次每一个S0-S8代表石块,P(Sn) 代表石块占用,V(Sn)代表石块释放。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SkyWalking Helm Chart 4.7.0 安装、配置

https://skywalking.apache.org/events/release-apache-skywalking-kubernetes-helm-chart-4.7.0/https://github.com/apache/skywalking-helm/tree/v4.7.0https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/简介 skywalking 是分布式系统的 APM(Applicat…

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题 这篇文章是接我cocos专栏的上一篇文章继续写的&#xff0c;我上一篇文章写的是 cocos 开发触摸屏项目&#xff0c;需要嵌入一个网页用来展示&#xff0c;最后通过 electron 打包成 exe 程序&#xff0c;而且网页里面…

嵌入式Linux应用开发中CAN通信实现

14.1 CAN介绍 14.1.1 CAN是什么? CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速…

Grafana功能菜单介绍

Grafana的功能菜单设计为侧边栏(sidebar)形式,可以折叠隐藏,便于我们更加专注数据的可视化。现将菜单栏各项功能进行编号讲解,如下图所示:① Grafana Logo 在这里插入图片描述 点击Grafana的logo,无论当前处于哪个页面,都会跳转回Home Page(主页)。② 新建与导入用于…

MVC基础——市场管理系统(二)

文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…

前端 mp4 视频改成 m3u8 流模式

前端 mp4 视频改成 m3u8 流模式 mp4 视频的问题 1、mp4 视频通常对应一个文件&#xff0c;播放时需要加载全部文件&#xff0c;消耗网络资源。如果用户从中间某个时间访问&#xff0c;也会从头开始下载&#xff0c;浪费服务器性能。 2、mp4 视频文件容易被用户下载到本地。有…

爬虫基础之代理的基本原理

在做爬虫的过程中经常会遇到一种情况&#xff0c;就是爬虫最初是正常运行、正常抓取数据的&#xff0c;一切看起来都是那么美好&#xff0c;然而一杯茶的工夫就出现了错误&#xff0c;例如 403 Forbidden&#xff0c;这时打开网页一看&#xff0c;可能会看到“您的IP访问频率太…

如何将自己的PHP类库发布到composer仓库

将自己的 PHP 类库发布到 Composer 仓库&#xff0c;需要经过一系列的准备和操作步骤&#xff0c;以下是详细说明&#xff1a; 准备工作 创建类库项目&#xff1a;确保你的 PHP 类库项目具有清晰的目录结构&#xff0c;遵循 PSR-4 等 PHP 编码规范。通常&#xff0c;类文件应…

频道web - 性能优化之往返缓存

性能优化之往返缓存 往返缓存简介:如何验证当前页面是否有往返缓存?有哪些开发场景可以用bfcache提升性能?哪些无需关注?阻止页面进行往返缓存的行为都有哪些?1、缓存2、强制刷新3、浏览器设置4、JavaScript 代码5、网络问题6、 iframe 本身不符合 bfcache 的条件为什么会…

当前热门 DApp 模式解析:六大方向的趋势与创新

去中心化应用&#xff08;DApp&#xff09;随着区块链技术的不断发展&#xff0c;已经成为 Web3 领域的核心创新之一。与传统应用不同&#xff0c;DApp 通过智能合约运行在区块链上&#xff0c;具有去中心化、透明、安全等特点。近年来&#xff0c;随着用户需求的变化和技术的发…

Windows中将springboot项目运行到docker的容器中

0&#xff0c;先打包好项目&#xff0c;再启动docker 1&#xff0c;在Java项目根目录下创建一个名为Dockerfile的文件&#xff08;没有扩展名&#xff09;&#xff0c;并添加以下内容。 # 使用OpenJDK的基础镜像 FROM openjdk:8-jdk-alpine# 设置工作目录 WORKDIR /app# 将项…

使用html 和javascript 实现微信界面功能1

1.功能说明&#xff1a; 搜索模块: 提供一个搜索框&#xff0c;但目前没有实现具体的搜索功能。 好友模块: 在左侧的“好友”部分有一个“查看好友”按钮。点击左侧的“查看好友”按钮时&#xff0c;会在右侧显示所有好友的列表。列表中每个好友可以点击查看详情&#xff0c;包…

uniapp——H5中使用富文本编辑器,如何使用。

一、插件市场 去插件市场找到这个插件https://ext.dcloud.net.cn/plugin?id14726 二、引入 找到自己项目引入 项目里面多了很多文件 三、使用 找到A页面&#xff0c;在里面引入组件 <view class"editBox"><sp-editor exportHtml"handleExpor…

前端视角下的Go语法学习:创建 Go 项目

今日话题 使用 GoLand 创建 Go 项目 作者&#xff1a; 时间&#xff1a;2024年6月20日 17时16分14秒 主线任务 一、GoLand 创建项目 1、点击 “new Project” 按钮 2、已经有下载过两个 Golang SDK 版本&#xff0c;选择版本创建即可~ 3、如果没有下载过Golang SDK&#…

使用pyinstaller打包pyqt的程序,运行后提示ModuleNotFoundError: No module named ‘Ui_main‘

环境&#xff1a;windowpython3.9pyqt6 使用pyqt UI编辑器生成了main.ui &#xff0c;main.ui编译成了Ui_main.py main.py 使用当前目录下的Ui_main.py。 打包过程没报错&#xff0c;运行报错。 错误如下: 解决方法&#xff1a;pyinstaller -Fw main.py --paths. 使…

1. 机器学习基本知识(4)——机器学习测试和验证

1.6 测试和验证 了解模型对新实例的泛化能力的唯一方法是在新实例上进行实际尝试。 一种方法是将模型部署到生产环境并监控其性能。 ​ 这种方法很有效&#xff0c;但如果模型非常糟糕&#xff0c;你的用户就会抱怨&#xff0c;所以这显然不是最好的方法。 更好的选择是将数…

Qwen 论文阅读记录

本文仅作自己初步熟悉大模型&#xff0c;梳理之用&#xff0c;慢慢会更改/增加/删除&#xff0c;部分细节尚未解释&#xff0c;希望不断学习之后&#xff0c;能够完善补充。若有同道之人&#xff0c;欢迎指正探讨。 关于后面的code-qwen and math-qwen&#xff0c;我个人认为依…

yarn 安装问题

Couldn’t find package “regenerator-runtime” on the “npm” registry. Error: Couldn’t find package “watch-size” on the “npm” regist 标题Error: Couldn’t find package “babel-helper-vue-jsx-merge-props” on the “npm” registry. Error: Couldn’t f…

【开源】基于SpringBoot框架的音乐网站与分享平台(计算机毕业设计)+万字说明文档 T011

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

【SpringMVC】应用分层

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;场景引入 二&#xff1a;前后端分离三层架构 1&#xff1a;表现层 2&#xff1a;业务…