操作系统之死锁处理策略

news/2025/1/31 6:46:36/

概念

一、什么是死锁
哲学家进程问题中,都在等待另外的哲学家放弃另一只筷子,造成了都不能用餐的现象,互相等待对方的资源

二、死锁、饥饿、死循环区别
在这里插入图片描述
三、死锁产生的条件
1、互斥条件
只有对互斥使用的资源的争抢才能导致死锁,像内存,扬声器之类的可以共享的资源并不会导致死锁的产生;

2、不可剥夺条件
进程在使用完这个资源的时候不能被其他的进程掠夺这个资源,只能主动的释放;

3、请求和保持条件
进程已经保持了至少一个资源,但是又提出了新的资源请求,而该资源又被其他资源所占用;

4、循环等待条件
类似于哲学家进餐问题的互相等待筷子;

死锁的处理策略

一、预防死锁
1、破坏互斥条件
在这里插入图片描述

2、破坏不剥夺条件
在这里插入图片描述
3、破坏请求和保持条件
在这里插入图片描述
如果需要一次性请求所有资源,如果A,B交替使用资源1和2这个时候C不能一次性的请求1和2两个资源,导致了C进程资源饿死;

4、破环循环等待条件
在这里插入图片描述
如果先使用打印机,后使用扫描仪,但是需要扫描仪的编号在打印机之前,这样申请了扫描仪之后并不能使用,造成了资源浪费,而且不同的操作系统之间,编号顺序有可能不同,导致了不同的系统需要重新写不同的调用顺序代码,造成了用户编程比较麻烦

二、避免死锁

1、什么是安全序列?
在这里插入图片描述
安全序列指的就是能够找到使得每个进程都能够顺利的安全访问的条件,系统就是安全状态;安全序列可能有多个;

2、银行家算法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、死锁的检测和解除
在这里插入图片描述
在这里插入图片描述
类似于安全序列
在这里插入图片描述
死锁定理:如果某时刻系统的资源分配图是不可以完全简化的,不能消除所有的边,导致系统死锁
在这里插入图片描述


http://www.ppmy.cn/news/57435.html

相关文章

石子合并-CCPC

设有 NN 堆石子排成一排,其编号为 1,2,3,…,N1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这 NN 堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两…

c++ 对csv文件的读写功能实现(可以直接用)

创建一个头文件 #include <iostream> #include <fstream> #include <string> using namespace std; int csvTest(); int readCsv(); 创建对应的cpp文件 #include "csvTest.h" #include <vector> #include <sstream> using namespace s…

安装配置goaccess实现可视化并实时监控nginx的访问日志

一、业务需求 我们安装了nginx后,需要对nginx的访问情况进行监控(希望能够实时查看到访问nginx的情况),如下图所示: 二、goaccess的安装配置步骤 2.1、准备内容 需要先安装配置nginx或OpenResty - 安装 Linux环境对Nginx开源版源码下载、编译、安装、开机自启https://b…

PostgreSQL数据库以任意时间间隔聚合查询group by

文章目录 业务场景以固定时间&#xff08;年/月/日/时/分/秒&#xff09;聚合to_char聚合date_trunc聚合 以任意时间聚合date_bin聚合实际应用 业务场景 我们做的是交通信控平台&#xff0c;需要根据实时采集到的交通大数据&#xff0c;计算出一些指标&#xff0c;存储到数据库…

Springboot 整合事务

目录 事务介绍 事务的ACID特性 事物的隔离级别 事务的传播机制 只读 事务超时 回滚规则 事务的配置方式 声明式事务 编程式事务 Transactional失效问题 事务介绍 Spring 事务的对于数据库的操作&#xff0c;要么执行&#xff0c;要不都不执行&#xff0c;在事务中都执…

【大数据面试题大全】大数据真实面试题(持续更新)

【大数据面试题大全】大数据真实面试题&#xff08;持续更新&#xff09; 1&#xff09;Java1.1.Java 中的集合1.2.Java 中的多线程如何实现1.3.Java 中的 JavaBean 怎么进行去重1.4.Java 中 和 equals 有什么区别1.5.Java 中的任务定时调度器 2&#xff09;SQL2.1.SQL 中的聚…

通关MyBatis(上)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;spring框架 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 什么是MyBatis 如何使用Mybatis 添加依赖 创建数据库 配置数据库连接字符串 MyBatis的操作流程 数据持久层 配置mybatis的xml文件 mapp…

Arduino学习笔记4

一.声控灯实验 1.源代码 int led2;//定义板子上数字2口控制小灯 int flag0;//定义一个变量记录小灯是亮起还是熄灭 int shengyin3;//定义声音传感器的控制口void setup() {pinMode(led,OUTPUT);//定义小灯为输出模式pinMode(shengyin,INPUT);//定义声音控制口为输入模式 } vo…