写在前面:
在多道程序系统中,虽可借助于多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace)。在前面介绍把信号量作为同步工具时已提及到,若多个 wait 和 signal 操作顺序不当,会产生进程死锁,关于信号量的知识可参考: 操作系统学习-6. 信号量。
死锁的原因:
产生死锁的原因有如下两点:
- 竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。
- 进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生进程死锁。
竞争资源引起进程死锁
(1)可剥夺和非剥夺性资源
可把系统中的资源分成两类:
一类是可剥夺性资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺。
一类是不可剥夺性资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。
可剥夺性资源如,优先权高的进程可以剥夺优先权低的进程的处理机。内存区可由存储器管理程序把一个进程从一个存储区移到另一个存储区,此即剥夺了该进程原来占有的存储区。注意:CPU和主存均属于可剥夺性资源。
(2)竞争