1 思索地概念和产生原因
1.1 死锁的基本概念
1.所谓死锁,是指一组并发执行的进程彼此等待对方释放资源,而在没有得到对方占有的资源之前不释放自己占有的资源,导致彼此都不能向前推进,称该组进程发生了死锁。
2.死锁产生后,在无外力干预下,陷入死锁的各个进程都永远不能向前推进,导致这些进程不能正常结束。同时,要求共享使用死锁进程所占资源的其他进程、或者需要与死锁进行某种合作的其他进程也会受到牵连,不能正常结束。最终可能导致系统瘫痪,给系统和用户带来极大损失。因此,操作系统设计者必须对死锁现象给予充分重视。
通过上面介绍的例子可以发现,死锁具有以下特点:
① 陷入死锁的进程是系统并发进程中的一部分,且至少要有2个进程,单个进程不能形成死锁。
② 陷入死锁的进程彼此都在等待对方释放资源,形成一个循环等待链。
③ 死锁形成后,在没有外力干预下,陷入死锁的进程不能自己解除死锁,死锁进程无法正常结束。
④ 如不及时解除死锁,死锁进程占有的资源不能被其他进程所使用,导致系统中更多进程阻塞,造成资源利用率下降
1.2 产生死锁的原因
-
资源竞争
死锁产生的根本原因是资源竞争其分配不当。因为多道程序并发执行,造成多个进程在执行中所需的资源数远远大于系统能提供的资源数
计算机系统中有很多种资源,按照占用方式来分,可分为可剥夺资源与不可剥夺资源。
(1)可剥夺资源
某进程在获得这类资源后,即使该进程没有使用完,该类资源也可以被其他进程剥夺使用。例如:CPU、内存、磁盘等
(2)不可剥夺资源
当系统把这类资源分配给某进程后,不能强行收回,只能在进程使用完后自行释放,然后其他进程才能使用。这类资源众多,例如:打印机、刻录机、CD-ROM驱动器等 -
推进顺序不当
并发执行的诸进程在运行中存在异步性,彼此间相对执行速度不定,存在着多种推进顺序。并发进程间推进顺序不当时会引起死锁。
不可剥夺资源少未必一定产生死锁。死锁在一种很巧合的推进顺序中才会发生。在不能增加不可剥夺资源数量的前提下,我们要采取各种措施,尽量避免产生死锁的不合理推进顺序出现.
由以上分析我们得出以下两个结论:
(1)用户编写应用程序时或操作系统进行资源分配时应采取相应措施,避免导致死锁发生的进程间的推进顺序出现。
为避免死锁现象的产生,用户在编写应用