预计阅读本页时间:-
6.9 小结
死锁是任何操作系统的潜在问题。在一组进程中,每个进程都因等待由该组进程中的另一进程所占有的资源而导致阻塞,死锁就发生了。这种情况会使所有的进程都处于无限等待的状态。一般来讲,这是进程一直等待被其他进程占用的某些资源释放的事件。死锁的另外一种可能的情况是一组通信进程都在等待一个消息,而通信信道却是空的,并且也没有采用超时机制。
通过跟踪哪一个状态是安全状态,哪一个状态是不安全状态,可以避免死锁。安全状态就是这样一个状态:存在一个事件序列,保证所有的进程都能完成。不安全状态就不存在这样的保证。银行家算法可以通过拒绝可能引起不安全状态的请求来避免死锁。
也可以在设计系统时就不允许死锁发生,从而在系统结构上预防死锁的发生。例如,只允许进程在任何时刻最多占有一个资源,这就破坏了循环等待环路。也可以将所有的资源编号,规定进程按严格的升序请求资源,这样也能预防死锁。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
资源死锁并不是惟一的一种死锁。尽管我们可以通过设置适当的超时机制来解决通信死锁,但它依然是某些系统中潜在的问题。
活锁和死锁的问题有些相似,那就是它也可以停止所有的转发进程,但是二者在技术上不同,由于活锁包含了一些实际上并没有锁住的进程,因此可以通过先来先服务的分配策略来避免饥饿。