文档介绍:现代操作系统
第3章死锁
死锁例子:
一个由于申请不同类型资源而产生死锁的例子
设系统有一台打印机(R1)一台扫描仪(R2),两进程共享这两台设备。
用信号量S1表示R1是否可用,用信号量S2表示R2是否可用, S1、 S2初值为1。
死锁例子:
这两个进程在并发执行过程中,可能会发生死锁。
思考:如何修改,进程才不会发生死锁。
死锁(Deadlock)的定义:
所谓死锁,是指多个进程因竞争资源而造成的一种僵局(永久阻塞状态),若无外力作用,这些进程都将不能再向前推进。
关于死锁的一些结论
参与死锁的进程最少是两个
参与死锁的进程至少有两个已经占有资源
参与死锁的所有进程都在等待资源
注:如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。
3. 1 死锁概述
1. 资源分类
可抢占资源—指资源占有进程虽然需要使用该资源,但另一个进程却能强行把资源从占有者进程处抢来。
不可抢占资源—指只有占用者进程不再需要使用该资源而主动释放资源外,其它进程不得在占有者进程使用资源过程中强行抢占。
资源
可抢占:CPU、主存,该资源可为几个进程共同使用。
不可抢占:打印机、读卡机、磁带驱动器,该资源为某个进程独享。
资源分类
总的来说,死锁和不可抢占资源有关,有关可抢占资源的死锁通常可以通过在进程之间重新分配资源而化解。我们讨论的重点放在不可抢占资源。
概念引入
资源分配图
用来描述系统资源及资源的申请和分配情况的有向图。定义为:二元组G=(V,E)其中:
V:结点集,分为P(进程集合),R(资源集合)两部分。即 P={p1,p2,…,pn} ;R={r1,r2,…,rm}。
E:边的集合,其元素为有序二元组(pi,rj) 或(rj,pi) 。
资源分配图
资源请求边:e={ pi, rj }
进程资源的一条有向边
表示进程pi申请rj类资源中的一个资源。
资源分配边:e={ rj, pi }
资源进程的一条有向边
表示rj类中的一个资源已被进程pi占用。