<Linux>(极简关键、省时省力)《Linux操作系统原理分析之进程管理2》(4)

《Linux操作系统原理分析之进程管理2》》(4)

  • 3 进程管理
    • 3.5 P、V操作
      • 3.5.1 信号量
      • 3.5.2 信号量的应用
      • 3.5.3 进程同步机制
    • 3.6 进程通信
      • 3.6.1 消息通信
      • 3.6.2 信箱通信
    • 3.7 死锁
      • 3.7.1 死锁的定义
      • 3.7.2 死锁产生的必要条件
      • 3.7.3 死锁的预防
      • 3.7.4 死锁的避免
      • 3.7.5 死锁的检测
      • 3.7.6 死锁的解除

3 进程管理

3.5 P、V操作

PV操作必须是原子操作。

操作说明本质实现
P操作申请信号量申请获得临界资源中某块资源的使用权限临界资源数sv的值在P操作后,计数器1;sv的值为0,挂起进程的执行。
V操作释放信号量归还临界资源中某块资源的使用权限临界资源数sv的值在V操作后,计数器1;因sv为0被挂起的进程恢复执行。

3.5.1 信号量

1、信号量的定义: 信号量 S(Semaphore)是一个记录性变量。

2、S.value 的取值及意义:

取值含义
S.value >0表示系统当前可用的该类资源的数目
S.value <=0其绝对值表示系统中因请求该类资源而被阻塞的进程数目

3、信号量的操作:
除初始化之外,信号量仅能由 P、V 两条原语,即 P、V 两种操作来改变。

3.5.2 信号量的应用

1、实现进程互斥
用信号量解决几个进程互斥进入临界区的问题,几个进程共享一个公用信号量 mutex(互斥信号量)。
每个进程进入临界区必须先执行 P(mutex),退出临界区后执行 V(mutex)。对于 n 个进程同时共享一个临界资源,则 mutex 的取值为 1 ~ -(n-1)。
举例:有 1 台打印机 2 个进程,则 mutex 的取值为?

2、互斥:A和B两个进程无法同时执行。

3.5.3 进程同步机制

1、生产者-消费者问题
示例:父亲给盘子放苹果,母亲放橘子;儿子只吃苹果,女儿只吃橘子。父母是生产者,儿女是消费者,盘子是缓冲区。
映射:共享使用固定大小缓冲区的两个进程(生产者和消费者)在实际运行中存在的问题。
说明:生产者数量不限,消费者数量不限,缓冲区大小不限。
目标:分析进程与缓冲区之间的互斥关系。
注意:

在缓冲区为空时,消费者不能再进行消费
在缓冲区为满时,生产者不能再进行生产
消费者之间互斥,生产者之间互斥,但是生产者和消费者之间不影响
注意条件变量与互斥锁的顺序

2、读者-写者问题
描述:如购票系统,多人可同时查看,但是一个进程正在修改,其他进程则不能访问,否则可能同一个座位多次销售。
映射:多个进程同时访问共享数据时实际出现的问题。
目标:分析进程间读、读共享;写、写互斥;写、读互斥。

3、哲学家进餐问题
描述:有5个哲学家围坐在一个圆桌上,每两个哲学家之间都有一根筷子,哲学家平时进行思考,只有当他们饥饿时,才拿起筷子吃饭。规定每个哲学家只能先取其左边筷子,然后取其右边筷子,然后才可以吃饭。如果筷子已在他人手上,则需要等待。进餐完毕后,放下筷子继续思考。

在这里插入图片描述
要求:

只有当哲学家饥饿时才试图拿起左、右两根筷子。
如果筷子已在他人手上,则需等待。
只有同时拿起两根筷子才可以进餐。

目标:避免临界资源分配不当造成的死锁现象。
映射:进程间死锁问题。
解决:
1、最多允许四个哲学家同时就餐。2、奇数哲学家先拿左边筷子,偶数哲学家相反,先拿右边筷子;保证相邻的哲学家同时拿筷子时,有一个会被直接阻塞。

3.6 进程通信

类型说明
低级通信交换信息量小。常用变量、数组等方式。例进程同步和互斥 P、V 操作。
高级通信交换信息量大。采用缓冲、管道、信箱、共享区等方式。

根据通信实施方式和数据存取方式可分为三类:

  • 共享存储器系统:相互通信的进程共享某些数据结构和共享存储区(如寄存器、数组等)。
  • 消息传递系统
  • 管道通信系统(共享文件)基于文件系统,用一个打开的共享文件连结两个相互通信的进程 。(以自然字符流方式读写)

3.6.1 消息通信

把需要在进程间传递的一组信息看作一个消息。在系统中设置一个存放消息的存储区域,称为消息缓冲区,它可以同时存放一定数量的消息。

通信原语:1) send 原语2) receive 原语

3.6.2 信箱通信

信箱:是一种公共的存储区,是通信的一种中间实体。
组成:

信箱头:描述信箱(信箱名称、信箱大小、信箱方向以及拥有该信箱的进程名等。
信箱体:存放消息,由若干格子组成,每个格子放一信件。(格子数目及大小在创建信箱时确定)

分类说明
单向信箱只发不答
双向信箱即发也收
公用信箱与多个进程通信(按优先级处理)

3.7 死锁

3.7.1 死锁的定义

所谓死锁,是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都无法向前推进,死锁是计算机系统和进程所处的一种状态。

3.7.2 死锁产生的必要条件

1、 互斥条件
2、 不剥夺条件
3、 请求与保持条件
4、 循环保持条件(进程资源图):存在一种进程资源的循环等待。

3.7.3 死锁的预防

死锁预防:设置某些条件,破坏产生死锁的必要条件中的一个或多个即可。
A. 破坏互斥条件:(应保证对临界资源的互斥访问,故不大可能实现)
B. 破坏不剥夺条件:当进程资源请求不能立即满足时,必须释放所有已获得的资源。
C. 破坏请求与保持条件:静态地一次性分配资源
D. 破坏循环等待条件:有序资源分配法。
1) 对资源进行编号;2)进程申请资源时,必须以编号递增方向申请。

3.7.4 死锁的避免

死锁的避免:在资源的动态分配过程中,用某种方法防止系统进入不安全状态。

系统状态说明
安全状态在某个时刻,系统能按某种顺序,如〈P1 , P2 ,┉ Pn 〉来为每个进程分配需要的资源,直至最大需求,是每个进程都能顺利地完成。则称此时的系统状态为安全状态。〈P1 , P2 ,┉ Pn 〉为安全序列。
不安全状态在某个时刻,系统不存在这样一个安全序列,则称此时的系统状态为不安全状态。

3.7.5 死锁的检测

死锁定理:S 为死锁状态的充分条件是,当且仅当 S 状态的资源分配表是不可完全简化的。

可完全简化 :不死锁
不可完全简化 ⇒ 死锁(死锁定理)

简化方法:寻找过程资源图中即不孤立又不阻塞的节点(进程节点)删去请求边和分配边。
具体如下:
1) 在资源分配表中,找一个即不阻塞也非独立的进程点 Pi,在顺利情况下,Pi 可获得所需资源而继续执行,直至运行完毕,再释放其占有的所有资源。(a)—(b)
2) P1 释放资源后,使 P2 获得资源而继续运行, P2 完成后又释放出所有的全部资源。(b)—(c)
3) 在进行一系列的简化后,若能消去图中所有边,使所有进程都成为孤立点。则称该图可完全简化,否则称该图为不可完全简化。

在这里插入图片描述

3.7.6 死锁的解除

将系统从死锁状态解脱出来,有两种方法:
1) 资源剥夺法(抢占):当发生死锁后,从其他进程剥夺足够数量的资源给死锁进程,以解除死锁状态。
2) 撤销进程法(终止):采用强制手段,从系统中撤销一个或部分死锁进程,并剥夺这些进程的资源,供其他死锁进程使用。

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

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

相关文章

如何使用Omniverse Kit开发元宇宙

最近我研究了一些潜在的元宇宙开发平台。尽管Facebook上个月引发了关于元宇宙的最新一轮炒作&#xff0c;但另一家公司英伟达&#xff08;Nvidia&#xff09;在开发实际元宇宙平台方面走得更远。Nvidia的Omniverse自2019年以来一直在运行&#xff0c;因此在今天的帖子中&#x…

vscode中Chinese (Simplified)汉化无效解决方法

问题复现 之前已经下载了 Chinese (Simplified)插件并启用了&#xff0c;都是正常的中文简体。有时候打开vscode的时候&#xff0c;会发现汉化失效了&#xff0c;如图&#xff1a; 解决方法 依次点击 扩展&#xff08;Extensions&#xff09;— Chinese (Simplified) — 选…

SpringBoot使用DevTools实现后端热部署

&#x1f4d1;前言 本文主要SpringBoot通过DevTools实现热部署的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句&…

WorkPlus移动数字化平台,助力企业全面掌控业务和生态

在移动化的时代&#xff0c;企业面临着将业务和生态纳入数字化平台的挑战。WorkPlus作为一款安全专属的移动数字化平台&#xff0c;成为企业业务和生态全面掌控的有力助手。它如同一艘强大的“航空母舰”&#xff0c;助力企业实现全面发展&#xff0c;从业务到生态&#xff0c;…

Linux安装Docker完整教程

Linux安装Docker完整教程 1.卸载旧版本的Docker&#xff08;可选&#xff09;2.安装Docker&#xff08;1&#xff09;yun安装&#xff08;2&#xff09;离线安装 3.启动Docker4.配置镜像加速5.Docker拉取镜像命令 参考链接 https://blog.csdn.net/m0_59196543/article/details/…

9.基于SpringBoot3+MybatisPlus定制化代码生成器类

我们在3.基于SpringBoot3集成MybatisPlus中讲到自定义代码生成器&#xff0c;但是往往遗留代码生成的类格式或者命名不符合要求&#xff0c;需要手工修改&#xff0c;但是当表很多时就比较头痛,所以我们自定义模板在进行代码生成 1. 新建MyTemplateEngine.java类 里面大多实现…

小型心仪什么牌子好又便宜?迷你洗衣机品牌推荐

相信不少人群为了方便清洗衣服&#xff0c;都会直接选择了大型的洗衣机。由于家里住的人多&#xff0c;所以对洗衣机的使用还是比较频繁&#xff0c;但内衣裤和其它衣服混合在一起清洗的话&#xff0c;或许大多数人都不太会接受的了&#xff0c;所以都是选择自己手工洗的&#…

【uniapp/uview1.x】u-upload 在 v-for 中的使用时, before-upload 如何传参

引入&#xff1a; 是这样一种情况&#xff0c;在接口获取数据之后&#xff0c;是一个数组列表&#xff0c;循环展示后&#xff0c;需要在每条数据中都要有图片上传&#xff0c;互不干扰。 分析&#xff1a; uview 官网中有说明&#xff0c;before-upload 是不加括号的&#xff…

springboot服务和python服务如何自定义启动banner

shigen日更文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 shigen最近在修改ruoyi的框架&#xff0c;看到了框架自带的banner图&#xff0c;就是一个不爽&#xff0c;于是…

AI大模型低成本快速定制法宝:RAG和向量数据库

文章目录 1. 前言2. RAG和向量数据库3. 论坛日程4. 购票方式 1. 前言 当今人工智能领域&#xff0c;最受关注的毋庸置疑是大模型。然而&#xff0c;高昂的训练成本、漫长的训练时间等都成为了制约大多数企业入局大模型的关键瓶颈。 这种背景下&#xff0c;向量数据库凭借其独特…

3.5 Windows驱动开发:应用层与内核层内存映射

在上一篇博文《内核通过PEB得到进程参数》中我们通过使用KeStackAttachProcess附加进程的方式得到了该进程的PEB结构信息&#xff0c;本篇文章同样需要使用进程附加功能&#xff0c;但这次我们将实现一个更加有趣的功能&#xff0c;在某些情况下应用层与内核层需要共享一片内存…

freertos源码下载和目录结构分析

1、源码下载 下载网址&#xff1a;https://www.freertos.org/zh-cn-cmn-s/&#xff1b; 2、源码目录结构 3、关键的代码文件

全国行政区划2023年最新版

全国行政区划包含以下字段&#xff0c;行政区划第五级&#xff0c;省、市、县、乡镇、村。文章末尾已整理成sql文件。 父级行政代码,行政代码,邮政编码,区号,名称,简称,组合名,拼音,经度,纬度, 获取方式 关键词“行政区划”获取文件。 免费获取行政区划

我们常说的网络资产,具体是如何定义的?

文章目录 什么叫网络资产&#xff1f;官方定义的网络资产网络资产数字化定义推荐阅读 什么叫网络资产&#xff1f; 通过百度查询搜索什么叫网络资产&#xff1f;大体上都将网络资产归类为计算机网络中的各类设备。 基本上会定义网络传输通信架构中用到的主机、网络设备、防火…

通过注释来埋点

目录 开始 插件编写 功能一 功能二 功能三 合并功能 运行代码 总结 这篇文章主要讲如何根据注释&#xff0c;通过babel插件自动地&#xff0c;给相应函数插入埋点代码&#xff0c;在实现埋点逻辑和业务逻辑分离的基础上&#xff0c;配置更加灵活 这篇文章想要达到的效…

010.cat、find

1、用cat进行拼接 cat命令能够显示或拼接文件内容&#xff0c;不过它的能力远不止如此。比如说&#xff0c;cat能够将标准输入数据与文件数据组合在一起。通常的做法是将stdin重定向到一个文件&#xff0c;然后再合并两个文件。而cat命令一次就能搞定这些操作。 用cat读取文件…

Go fsnotify简介

fsnotify是一个用Go编写的文件系统通知库。它提供了一种观察文件系统变化的机制&#xff0c;例如文件的创建、修改、删除、重命名和权限修改。它使用特定平台的事件通知API&#xff0c;例如Linux上的inotify&#xff0c;macOS上的FSEvents&#xff0c;以及Windows上的ReadDirec…

中小企业如何最大程度地利用CRM系统的潜力?

在当今竞争激烈的商业世界中&#xff0c;客户关系管理&#xff08;CRM&#xff09;数字化转型已经成为大企业成功的重要秘诀。大型跨国公司如亚马逊、苹果和微软等已经在CRM数字化方面走在了前列&#xff0c;实现了高度个性化的客户体验&#xff0c;加强了客户忠诚度。 然而&a…

手把手云开发一个小程序-(二)-uniclould的购买和默认库的使用

一,前言 因为平时喜欢记录一些文案,看小说或者上网冲浪的时候,遇到拍案叫绝的文字,就会截图保存下来,但是时间久了,手机里截图保留了很多,却不会再去看,想删除又舍不得,于是就想着自己开发个文案记录的小程序.自用的同时让有同样需求的人也能用. 目前已经把第一个版本开发完了…

【教3妹学编程-算法题】最长奇偶子数组

3妹&#xff1a;2哥&#xff0c;你有没有看到新闻&#xff0c; 网红快乐小赵去世了。 2哥 :啊&#xff1f; 这么突然 3妹&#xff1a;是啊&#xff0c; 伤心&#xff0c;以前还特别喜欢他的作品&#xff0c;幽默搞笑。 2哥&#xff1a;哎&#xff0c;人有悲欢离合&#xff0c; …