操作系统-进程和线程-同步、互斥、死锁

news2024/12/28 13:35:05

目录

一、同步互斥

 二、互斥的实现方法

2.1软件实现

2.1.1单标志法

2.1.2双标志先检查

2.1.3双标志后检查

2.1.4Petersons算法

2.2硬件实现

2.2.1 TestAndSet指令

2.2.2 Swap指令 

 三、信号量机制

3.1整形变量

 3.2 记录型变量

 3.3用信号量实现进程互斥、同步、前驱关系

3.3.1互斥

 3.3.2同步

3.3.3前驱关系

四、同步和互斥经典问题

4.1 生产者-消费者问题

 4.2多生产多消费问题

 4.3 吸烟者问题

 4.4 读写者问题

 4.5 哲学家进餐问题

 五、管程

 六、死锁

6.1死锁产生得必要条件

6.2发生死锁的时候

七、死锁的处理策略

 7.1预防死锁 静态策略

7.2 避免死锁(银行家算法)动态策略

7.3 死锁得检测和解除

死锁得检测

死锁得解除


一、同步互斥

 二、互斥的实现方法

2.1软件实现

2.1.1单标志法

两个进程在访问完临界区后会使用临界区的权限转交给另一个进程,也就是说每个进程进入临界区的权限只能被另一个进程赋予

只能轮流使用 

2.1.2双标志先检查

2.1.3双标志后检查

2.1.4Petersons算法

2.2硬件实现

中断屏蔽方法:利用“开/关中断指令”实现

关中断-》临界区-》开中断

2.2.1 TestAndSet指令

简称TS或TSL

2.2.2 Swap指令 

 三、信号量机制

信号量其实就是一个变量(可以是一个整数,也可以是复制的记录型变量),可以用一个信号量表示系统中某种资源数量

一对原语:wait(s)和signal(s),简称P(s),V(s)

3.1整形变量

表示系统中某种资源的数量

 3.2 记录型变量

 3.3用信号量实现进程互斥、同步、前驱关系

3.3.1互斥

 3.3.2同步

 并发进程要求有序的推进

3.3.3前驱关系

四、同步和互斥经典问题

实现互斥P操作一定要早实现同步P操作后

4.1 生产者-消费者问题

 4.2多生产多消费问题

 4.3 吸烟者问题

 4.4 读写者问题

 4.5 哲学家进餐问题

 五、管程

管程是一种特殊的软件模块,有这些部分组成:

1.局部于管程的共享数据结构说明

2.对该数据结构进行操作的一组过程

3.对局部于管程的共享数据结构设置初始值语句

4.管程有一个名字

基本特征:
1.局部于管程的数据只能被局部于管程的过程访问

2.一个进程只有通过调用管程内的过程才能进入管程访问共享数据

3.每次仅允许一个进程在管程内执行某个内部过程

 用管程解决生产者消费者问题

 六、死锁

死锁:多个进程竞争资源造成的一种僵局(相互等待),若无外力作用,这些进程是无法向前推进的

饥饿:由于长期得不到想要资源,某进程无法向前推进现象。

死循环:某进程执行过程中一直跳不出某个循环得现象。

6.1死锁产生得必要条件

1.互斥条件:只有对必须互斥使用得资源的争抢才会导致死锁

2.不剥夺条件:进程所获得的资源在未完成之前,不能由其他进程强行夺走,只能主动释放

3.请求和保存条件:进程已经保持了至少一个资源,但又提出新资源请求,而该资源又被其他进程占有,此时进程阻塞又对已有资源保持不放

4.循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个资源请求

6.2发生死锁的时候

七、死锁的处理策略

 7.1预防死锁 静态策略

破坏互斥条件:SPOOLing技术、

破坏不剥夺条件:1.得不到资源,就释放全部资源,以后要就重新请求                                                                         2.系统协助,直接剥夺其他资源自己使用

破坏请求和保持条件:静态分配法:进程运行前一次申请完所需得全部资源,资源未满足前不让它投入使用,一旦投入使用就一直归它所有     资源利用率低,可能饥饿

破坏循环等待条件:顺序资源分配法:

7.2 避免死锁(银行家算法)动态策略

7.3 死锁得检测和解除

死锁得检测

死锁得解除

1.资源剥夺法:挂起某些死锁进程,并抢占它得资源,将这些资源分配给其他死锁进程,但防止给i去得长期得不到资源而饥饿

2.撤销进程法:强制撤销部分、甚至全部死锁进程,并剥夺这些进程得资源,简单但代价大,有些进程运行很长时间接近结束,被终止就功亏一篑,还得从头再来

3.进程回退法:让一个或多个死锁进程回退到足以避免死锁的地步,操作系统就要记录信息设置还原点 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sui与F1甲骨文红牛车队达成合作

在近期达成的一项为期多年的合作协议中,甲骨文红牛车队将利用Sui网络开发,为粉丝带来全新的数字化体验。 甲骨文红牛车队的粉丝将很快在Sui网络上体验到他们最爱的一级方程式车队带来的激情。最近几个赛季一直统治着F1赛场的甲骨文红牛车队,与…

代码随想录算法训练营第五十三天 | 力扣 1143.最长公共子序列, 1035.不相交的线, 53. 最大子序和

1143.最长公共子序列 题目 1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符…

2022年值得关注的7个主要SD-WAN趋势

随着SD-WAN技术在2022年继续发展成熟,该技术在集成远程访问、自动化和多云连接方面的支持有望得到更多的改进。 软件定义WAN仍然是增强用户体验(UX),提高安全性,以及提供与基于云计算的应用程序的连接的一项关键技术。 随着SD-WAN的成熟&…

java设计模式之:原型模式

在我们的生活中,有很多例子,都是用到了原型模式,例如:我们去配钥匙的时候,肯定先要有一个原配钥匙才可以去配钥匙;《西游记》中孙悟空可以用猴毛根据自己的形象,复制(又称“克隆”或…

时间序列预测 | Matlab基于北方苍鹰算法优化随机森林(NGO-RF)与随机森林(RF)的时间序列预测对比

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于北方苍鹰算法优化随机森林(NGO-RF)与随机森林(RF)的时间序列预测对比 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %-----------…

【Apache-Flink零基础入门】「入门到精通系列」手把手+零基础带你玩转大数据流式处理引擎Flink(基础概念解析)

手把手零基础带你玩转大数据流式处理引擎Flink 前言介绍Apache Flink 的定义、架构及原理Flink应用服务Streams有限数据流和无限数据流的区别 StateTimeAPI Flink架构体系 Flink操作处理Flink 的应用场景Flink 的应用场景:Data Pipeline实时数仓搜索引擎推荐 Flink …

华为诺亚 VanillaNet

文章标题:《VanillaNet: the Power of Minimalism in Deep Learning》 文章地址:https://arxiv.org/abs/2305.12972 github地址:https://github.com/huawei-noah/VanillaNet 华为诺亚方舟实验室和悉尼大学,2023年5月代码刚开源的…

基于HAL库的STM32的单定时器的多路输入捕获测量脉冲频率(外部时钟实现)

目录 写在前面 一般的做法(定时器单通道输入捕获) 以外部时钟的方式(高低频都适用) 测试效果 写在前面 STM32的定时器本身有输入捕获的功能。可选择双端捕获,上升沿捕获或者是下降沿捕获。对应捕获频率来说,连续捕获上升沿或下降沿的时间间隔就是其脉…

手把手教你F103工程文件的创建并且通过protesu仿真验证创建工程文件的正确性(低成本)

目录 一、新建工程文件夹 二、新建一个工程框架 三、添加文件 四、仿真验证 五、仿真调试中遇到的问题并解决 一、新建工程文件夹 新建工程文件夹分为 2 个步骤:1,新建工程文件夹;2,拷贝工程相关文件。 1.新建工程文件 首先…

【04】STM32·HAL库开发-MDK5使用技巧 |文本美化 | 代码编辑技巧 | 查找与替换技巧 | 编译问题定位 | 窗口视图初始化

目录 1.文本美化(熟悉)1.1编辑器设置1.2字体和颜色设置1.3用户关键字设置1.4代码提示&语法检测1.5global.prop文件妙用 2.代码编辑技巧(熟悉)2.1Tab键的妙用2.2快速定位函数或变量被定义的地方2.3快速注释&快速取消注释 3…

python面向对象操作2(速通版)

目录 一、私有和公有属性的定义和使用 1.公有属性定义和使用 2.私有属性 二、继承 1.应用 2.子类不能用父类的私有方法 3.子类初始化父类 4.子类重写和调用父类方法 5.多层继承 6.多层继承-初始化过程 7.多继承基本格式 8.多层多继承时的初始化问题 9.多继承初始化…

云原生Docker Cgroups资源控制操作

资源控制 Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 ControlGroups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如…

Node服务器-express框架

1 Express认识初体验 2 Express中间件使用 3 Express请求和响应 4 Express路由的使用 5 Express的错误处理 6 Express的源码解析 一、手动创建express的过程: 1、在项目文件的根目录创建package.json文件 npm init 2、下载express npm install express 3、基本…

kafka3

分区副本机制 kafka 从 0.8.0 版本开始引入了分区副本;引入了数据冗余 用CAP理论来说,就是通过副本及副本leader动态选举机制提高了kafka的 分区容错性和可用性 但从而也带来了数据一致性的巨大困难! 6.6.2分区副本的数据一致性困难 kaf…

多模态学习

什么是多模态学习? 模态 模态是指一些表达或感知事物的方式,每一种信息的来源或者形式,都可以称为一种模态 视频图像文本音频 多模态 多模态即是从多个模态表达或感知事物 多模态学习 从多种模态的数据中学习并且提升自身的算法 多…

【k8s 系列】k8s 学习三,docker回顾,k8s 起航

k8s 逐渐已经作为一个程序员不得不学的技术,尤其是做云原生的兄弟们,若你会,那么还是挺难的 学习 k8s ,实践尤为重要,如果身边有自己公司就是做云的,那么云服务器倒是不用担心,若不是&#xff…

IMX6ULL PHY 芯片驱动

前言 之前使用 IMX6ULL 开发板时遇到过 nfs 挂载不上的问题,当时是通过更换官方新版 kernel 解决的,参考《挂载 nfs 文件系统》。 今天,使用自己编译的 kernel 又遇到了该问题,第二次遇到了,该正面解决了。 NFS 挂载…

18JS09——作用域

作用域 一、作用域1、作用域 二、变量的作用域1、变量作用域的分类2、全局变量3、局部变量4、全局变量和局部变量区别 三、作用域链 目标: 1、作用域 2、变量的作用域 3、作用域链 一、作用域 1、作用域 通常来说,一段程序代码中所用到的名字并不总是有…

python基础----06-----文件读写追加操作

一 文件编码概念 思考:计算机只能识别: 0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢? 答案:使用编码技术(密码本)将内容翻译成0和1存入。 常见编码有UTF8,gbk等等。不同的编码,将内…

vulnhub靶场之DC-3渗透教程(Joomla CMS)

目录 0x01靶机概述 0x02靶场环境搭建 0x03主机发现 0x04靶场渗透过程 ​ 0x05靶机提权 0x06渗透实验总结 0x01靶机概述 靶机基本信息: 靶机下载链接https://download.vulnhub.com/dc/DC-3-2.zip作者DCAU发布日期2020年4月25日难度中等 0x02靶场环…