操作系统(3.5)--死锁概述

简介: 系统中所拥有的不可抢占性资源其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局。

目录


资源问题


可重用性资源和消耗性资源


可抢占性资源和不可抢占性资源


计算机系统中的死锁


1.竞争不可抢占性资源


2.竞争可消耗资源产生死锁


3.进程推进顺序不当引发死锁


死锁的定义、必要条件和处理方法


死锁的定义


产生死锁的必要条件


处理死锁的基本方法


资源问题

可重用性资源和消耗性资源

可重用性资源,性质如下:


(1)不允许多个进程共享;

(2)必须按照一定的顺序:①请求资源;②使用资源;③释放资源。

(3)单元数目是相对固定的;

可消耗性资源,性质如下:


(1)单元数目是不断变化的;

(2)可动态增加;

(3)可动态消耗;

可抢占性资源和不可抢占性资源

可把系统中的资源分成两类,


1)一类是可抢占性资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统抢占。


2)一类是不可抢占性资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放。


CPU和主存均属于可抢占性资源。 磁带机、打印机等属于不可抢占性资源。


计算机系统中的死锁

1.竞争不可抢占性资源

系统中所拥有的不可抢占性资源其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局。


例如:系统中有两个进程P1和P2,它们都准备写两个文件F1和F2,而这两者都属于可重用和不可抢占性资源。进程P1先打开F1,然后再打开文件F2;进程P2先打开文件F2,后打开F1:


d9c6e34342fe07f6b5d9bab89e2bc427_4a43d32d135935a875513c9f8c2c474f.png


2.竞争可消耗资源产生死锁

m1,m2,m3是可消耗资源,P1一方面产生消息m1,利用send(p2, m1)原语将它发送给P2;另一方面,它又要求从P3接收消息m3。而进程P2一方面产生消息m2,利用send(p3, m2)原语将它发送给P3;另一方面,它又需要接收进程P1所产生的消息m1。类似地,进程P3也产生消息m3,利用send(p1, m3)原语将它发送给P1,而它又要求从进程P2接收其所产生的消息m2。


这三个进程都可以先将消息发送给下一个进程,相应地它们也都能够接收到从上一个进程发来的消息,因此三个进程可以顺利地运行下去,而不会发生死锁。但若改成三个进程都先执行receive 操作,后执行send操作则这三个进程就会永远阻塞在它们的receive操作上,等待一条永远不会 发出的消息,于是发生了死锁。


9fff5913d56c8fea72045b571f517bf6_8cd669787b87731c9525874e31822b39.png


3.进程推进顺序不当引发死锁

进程推进顺序合法


进程推进顺序非法


死锁的定义、必要条件和处理方法

死锁的定义

如果一组进程中的每个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的。


产生死锁的必要条件

虽然进程在运行过程中可能发生死锁,但死锁的发生也必须具备一定的条件。死锁的发生必须同时具备下列四个必要条件。


(1)互斥条件:指进程对所分配到的资源进行排它性使用即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求该资源,则请求者只能等待,直至占有该资源的进程用毕释放。


(2) 请求和保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。


(3) 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。


(4)环路等待条件:指在发生死锁时,必然存在一个进程一一资源的环形链,即进程集合{P0,P,P,... P.}中的Po正在等待一个P1占用的资源; P1 正在等待P2占用的资源,.... Pn正在等待已被P0占用的资源。


处理死锁的基本方法

(1)预防死锁。这是一种较简单和直观的事先预防的方法。该方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来预防发生死锁。


(2)避免死锁。该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方.法去防止系统进入不安全状态,从而避免发生死锁。这种方法只需事先施加较弱的限制条件,便可获得较高的资源利用率及系统吞吐量,但在实现.上有一定的难度。目前在较完善的系统中常用此方法来避免发生死锁。


(3)检测死锁。这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,而是允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源;然后,采取适当措施,从系统中将已发生的死锁清除掉。

目录
相关文章
|
6月前
|
Unix C语言
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
|
6月前
|
数据采集 存储 Ubuntu
Linux操作系统概述
【1月更文挑战第1天】Linux操作系统概述。
89 1
|
6月前
|
算法 安全
【操作系统】死锁处理-银行家算法
【操作系统】死锁处理-银行家算法
214 0
|
6月前
|
存储 调度
操作系统基础:内存管理概述【下】
操作系统基础:内存管理概述【下】
|
6月前
|
算法
操作系统基础:内存管理概述【上】
操作系统基础:内存管理概述【上】
|
3月前
|
算法 安全
操作系统中的死锁
【8月更文挑战第23天】
47 0
|
3月前
|
程序员 数据库
深入剖析操作系统死锁:不可不知的四大条件!
大家好,我是小米。今天探讨操作系统中的死锁问题——两个或更多进程因争夺资源陷入相互等待的状态。死锁有四个必要条件:互斥、请求与保持、非剥夺及循环等待。解决策略包括:使用乐观锁破坏互斥条件;资源一次性分配避免请求与保持;允许资源剥夺;以及采用资源有序分配法消除循环等待。通过这些方法,可以有效预防和解决死锁,提升系统稳定性和效率。希望本文能帮助你更好地理解并处理死锁问题!
140 4
|
3月前
|
算法 安全 调度
操作系统中的死锁、饥饿和优先级反转
【8月更文挑战第23天】
127 0
|
3月前
|
安全 算法 C++
操作系统---死锁相关
操作系统---死锁相关
32 0
|
6月前
|
算法 Shell Linux
操作系统概述
操作系统概述
60 0