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

news/2024/5/20 11:36:17 标签: linux, 运维, 服务器, 死锁

《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 进程管理

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.niftyadmin.cn/n/5185028.html

相关文章

高性能面试八股文之编译流程程序调度

1. C的编译流程 C语言程序的编译过程通常包括预处理&#xff08;Preprocessing&#xff09;、编译&#xff08;Compilation&#xff09;、汇编&#xff08;Assembly&#xff09;、链接&#xff08;Linking&#xff09;四个主要阶段。下面是这些阶段的详细说明&#xff1a; 1.…

linux高级篇基础理论一(详细文档、Apache,网站,MySQL、MySQL备份工具)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…

工作记录-------java文件的JVM之旅(学习篇)---好理解

一个java文件&#xff0c;如何实现功能呢&#xff1f;需要去JVM这个地方。 java文件高高兴兴的来到JVM&#xff0c;想要开始JVM之旅&#xff0c;它确说&#xff1a;“现在的我还不能进去&#xff0c;需要做一次转换&#xff0c;生成class文件才行”。为什么这样呢&#xff1f;…

http的几种方法

http的几种方法在 rfc2616 中进行了定义&#xff1a; https://www.rfc-editor.org/rfc/rfc2616.html#page-51 HEAD方法&#xff1a;HEAD方法和GET方法相同&#xff0c;只不过服务端只返回头&#xff0c;不返回消息体。GET方法&#xff1a;用于获取资源POST方法&#xff1a;用于…

[Jenkins] 物理机 安装 Jenkins

这里介绍Linux CentOS系统直接Yum 安装 Jenkins&#xff0c;不同系统之间类似&#xff0c;操作命令差异&#xff0c;如&#xff1a;Ubuntu用apt&#xff1b; 0、安装 Jenkins Jenkins是一个基于Java语言开发的持续构建工具平台&#xff0c;主要用于持续、自动的构建/测试你的软…

python如何批量创建文件与文件夹

目录 一、引言 二、批量创建文件 1、使用os模块 2、使用pathlib模块 三、批量创建文件夹 1、使用os模块 2、使用pathlib模块 四、注意事项 五、总结与展望 一、引言 在Python中&#xff0c;我们经常需要创建文件和文件夹来存储和管理数据。批量创建文件和文件夹可以大…

【Vue-Demo】倒计时3秒后返回首页

首页path:/ 倒计时结束后要清除计时器&#xff0c;防止内存泄漏&#xff1a; if (this.count 0) {clearInterval(this.timer); }<!-- ErrorJump.vue --> <template><h2>Error&#xff1a;找不到页面&#xff01;</h2><h4>{{ count }}S后<R…

【Python语言】字典的使用方法总结

目录 1、基本知识 1.1 定义 1.2 定义字典变量 1.3 定义空字典 2、字典的常用方法介绍 2.1 基于key获取value 2.2 嵌套字典 2.3 新增元素 2.4 更新元素 2.5 删除元素 2.6 清空字典 2.7 获取全部的key 2.8 遍历字典 2.9 统计字典内的元素数量 3、 字典常用操作总结…