<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.hqwc.cn/news/192428.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flink入门

1.安装flink&#xff0c;启动flink 文档地址&#xff1a;Apache Flink 1.3-SNAPSHOT 中文文档: Apache Flink 中文文档 代码&#xff1a;GitHub - apache/flink: Apache Flink 2. 打开端口 端口号&#xff0c; 启动jar ### 切换到flink 目录bin下 [rootlocalhost ~]# cd /…

Vue3 toRef函数和toRefs函数

当我们在setup 中的以读取对象属性单独交出去时&#xff0c;我们会发现这样会丢失响应式&#xff1a; setup() {let person reactive({name: "张三",age: 18,job: {type: "前端",salary:10}})return {name: person.name,age: person.age,type: person.jo…

2023最新最全【CUDA Toolkit 12.3】下载安装零基础教程【附安装包】

官网地址&#xff1a;这里 CUDA是英伟达公司开发的一种并行计算平台和编程模型。它利用GPU的强大计算能力&#xff0c;加速各种数学和科学计算、数据分析、机器学习、计算机视觉等任务。CUDA包括CUDA编程语言、CUDA运行时库、NVIDIA显卡等组件。 CUDA的编写方式分为两种&…

Python aiohttp 完全指南:快速入门

aiohttp 就是 Python 中一款优秀的异步 Web 框架&#xff0c;它能够帮助我们构建高效的异步 Web 应用和异步 HTTP 客户端。在本文中&#xff0c;我们将深入探讨 aiohttp 是什么以及如何使用它&#xff0c;通过简单易懂的案例带领你理解异步编程&#xff0c;以及如何处理异步请求…

OpenGL 的学习之路-4(变换)

三大变换&#xff1a;平移、缩放、旋转&#xff08;通过这三种变换&#xff0c;可以将图像移动到任意位置&#xff09; 其实&#xff0c;这背后对应的数学在 闫令琪 图形学课程 中有过一些了解&#xff0c;所以&#xff0c;理解起来也不觉得很困难。看程序吧。 1.画三角形&am…

FISCO BCOS 3.0【02】配置和使用系统自带的控制台

官方技术文档&#xff1a;https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/index.html 我们在官方技术文档的基础上&#xff0c;进行&#xff0c;对文档中一些不清楚的地方进行修正 控制台提供了向FISCO BCOS节点部署合约、发起合约调用、查询链状态等功能。 第一步. 安…

Spring对事务的实现

Spring对事务的支持 事务概述事务的四个处理过程事务的四个特性 引入事务场景Spring实现事务的两种方式声明式事务之注解实现方式 事务概述 在一个业务流程当中&#xff0c;通常需要多条DML&#xff08;insert delete update&#xff09;语句共同联合才能完成&#xff0c;这多…

YOLOv8-Seg改进:渐近特征金字塔网络(AFPN)

🚀🚀🚀本文改进:AFPN通过融合两个相邻的Low-Level特征来启动的,并渐进地将High-Level特征纳入融合过程,提升分割能力。 🚀🚀🚀AFPN小目标分割首选,暴力涨点 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻…

口袋参谋:一键下载任意买家秀图片、视频,是怎么做到的!

​对于淘宝商家来说&#xff0c;淘宝买家秀是非常的重要的。买家秀特别好看的话&#xff0c;对于提升商品的销量来说&#xff0c;会有一定的帮助&#xff0c;如何下载别人的买家秀图片&#xff0c;然后用到自己的店铺中呢&#xff1f; 这里我可以教叫你们一个办法&#xff01;那…

C语言之for while语句详解

C语言之for while语句详解 文章目录 C语言之for while语句详解简介1 while语句1.1while语句的格式1.2 while语句的实践 2 for2.1 for语句格式2.2 for循环的实践 3 do while3.1 do while语句格式3.2 do while循环的实践 3 循环中break和continue3.1 while语句中的break和continu…

DGL如何表征一张图

有关于DGL中图的构建 DGL 将有向图表示为一个 DGL 图对象。图中的节点编号连续&#xff0c;从0开始。我们一般通过指定图中的节点数&#xff0c;以及源节点和目标节点的列表&#xff0c;来构建这么一个图。 下面的代码构造了一个图&#xff0c;这个图有五个叶子节点。中心节点…

java并发编程JUC:一、专栏配置+进程与线程+并行和并发+同步和异步+线程的创建、调用、查看、运行原理和相关API

专栏配置 pom.xml <properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies><dependency><groupId>org.projectlombok<…