【系统架构师】操作系统知识⑨- 进程管理(信号量与PV操作|前趋图与PV操作|死锁)

一、信号量与PV操作

        1.基本概念

        2.PV操作原理

        1.P操作(申请资源)

        2.V操作(释放资源)

        3.信号量类型

        4.经典问题解决方案

二、前趋图与PV操作

        1.前趋图实例分析

        2.PV操作实现原理

        1.基本规则:

        2.实现步骤(以示例图为例)

        3.关键注意事项

三、死锁

        1.死锁的定义

        2.死锁产生的必要条件

        3.死锁处理方法

        (1)预防死锁

        (2) 避免死锁

        (3) 检测死锁

        (4) 解除死锁


一、信号量与PV操作

        1.基本概念

        临界资源:各个进程间需要互斥方式对其进行共享的资源,即在某一时刻只能被一个进程使用,该进程释放后又可以被其他进程使用

        临界区:每个进程中访问临界资源的那段代码。

        信号量机制:由荷兰学者Dijkstra提出,包含:一个整型变量(表示资源数量一个等待队列(存放等待资源的进程两个原子操作(P操作和V操作

        2.PV操作原理

        1.P操作(申请资源)

        a.信号量值减1

        b.如果结果小于0,则进程进入等待队列阻塞

        2.V操作(释放资源)

        a.信号量值加1

        b.若结果小于等于0,则唤醒一个等待进程

        3.信号量类型

类型初始值用途
互斥信号量1保护临界区,实现互斥
计数信号量N管理有限数量的同类资源
二进制信号量0或1简化版的互斥机制

        4.经典问题解决方案

        例如在生产者和消费者的问题中,生成者生产一个商品S,而后要申请互斥的使用该仓库,即首先需要执行互斥信号量P(S0),申请到仓库独立使用权后,再判断仓库是否有空闲(信号量S1),执行P(S1),若结果大于0,表示仓库有空闲,再将S放入仓库中,此时仓库数量(信号量S2)增加1,即执行V(S2)操作,使用完毕后,释放互斥信号量V(S0)。

        对于消费者,首先也需要执行互斥信号量P(S0),申请到仓库独立使用权后,再判断仓库在是否有商品,执行P(S2),若结果大于等于0,表示有商品,可以取出,此时造成了一个结果,即仓库空闲了一个,执行V(S1)操作,使用完毕后,释放互斥信号量V(S0).

        因此,执行P操作是主动的带有判断性质的-1,执行V操作是被动的因为某操作参数的+1


二、前趋图与PV操作

前趋图相关概念可查看上一篇文章。

        1.前趋图实例分析

                                                

       

        表示:

        P1必须在P2和P3之前执行

        P2和P3都必须在P4之前执行

        P2与P3之间没有顺序约束(可以并行)

        2.PV操作实现原理

        1.基本规则:

        1.为每个前趋边创建信号量:初始值为0

        2.前趋节点末尾执行V操作:释放信号量表示“已完成”

        3.后继节点开头执行P操作:等待信号量表示“等待前趋完成“

        2.实现步骤(以示例图为例)

        1.创建信号量:

        a(P1→P2)

        b(P1→P3)

        c(P2→P4)

        d(P3→P4)

        2.各进程操作:

        ​​P1​​:执行自身操作 → V(a) → V(b)

        ​​P2​​:P(a) → 执行操作 → V(c)

        ​​P3​​:P(b) → 执行操作 → V(d)

        ​​P4​​:P(c) → P(d) → 执行操作

        3.关键注意事项

        信号量初始化​​:

        所有信号量初始值为0(表示初始不可用)

        只有前驱完成V操作后,后继才能通过P操作


三、死锁

        1.死锁的定义

        死锁是指多个进程在执行过程中,因为争夺资源而造成的一种互相等待的现象,若无外力干涉,这些进程都无法继续执行下去。

        2.死锁产生的必要条件

           1.互斥条件:资源一次只能由一个进程占用

           2.占有并等待:进程持有至少一个资源,并等待获取其他被占用的资源

           3.非抢占式条件:已分配给进程的资源不能被其他进程强行夺取

           4.循环等待条件:存在一个进程等待的循环链

        3.死锁处理方法

        (1)预防死锁

          通过破坏死锁的四个必要条件之一来预防死锁:

           破坏互斥条件:使资源可共享(不总是科学)

           破坏占有并等待:要求进程一次性请求所有资源

           破坏非抢占式条件:允许抢占资源

           破坏循环等待条件:对资源进行排序,按序申请        

        (2) 避免死锁

​         银行家算法​:系统在分配资源前先计算分配的安全性,确保不会进入不安全状态。

         算法步骤:

         1.初始化:可用资源向量Available,最大需求矩阵Max,分配矩阵Allocation,需求矩阵Need

         2.安全性检查:寻找安全序列

         3.资源请求处理:检查请求是否合法,然后模拟分配并检查安全性

        (3) 检测死锁

         资源分配图法:将系统状态表示为有向图,检测图中是否存在环路

         等待图法:仅考虑进程间的等待关系,检测环路

        (4) 解除死锁

         检测到死锁后,可采用以下方法之一:

         资源抢占:从某些进程中抢占资源分配给其他进程

         终止进程:终止一个或多个死锁进程

                终止所有死锁进程

                一次终止一个进程直到死锁解除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值