死锁的原理
当一组进程中的每个进程都在等待某个事件(如等待所请求的资源释放),而只有在这组进程中的其他被阻塞的进程才可以触发该事件,这是就称这组进程发生死锁。因为没有事件能够被触发,故死锁是永久性的。
可重用资源
指一次只能供一个进程安全地使用,并且不会由于使用而耗尽的资源。如处理器、I/O通道、内存和外存、设备以及诸如文件、数据库和信号量之类的数据结构。
可消耗资源
指可以被创建和销毁的资源。如中断、信号、消息和I/O缓冲区中的消息。
死锁的条件
必要条件:
1)互斥:一次只有一个进程可以使用一个资源。
2)占有且等待:当一个进程等待其他进程时,继续占有已经分配的资源。
3)不可抢占:不能强行抢占进程已占有的资源。
充分条件:
4)循环等待。
死锁预防:
死锁预防方法分为两类:一类是防止必要条件中的三个其中一个发生;第二类是直接防止充分条件中的循环等待发生。
互斥:不可能禁止。
占有且等待:要求进程一次性地请求所有需要的资源,并且阻塞这个进程直到所有请求都满足。
不可抢占:占有某些资源的一个进程进行进一步资源请求被拒绝时,该进程必须释放它最初占有的资源或者操作系统抢占另外一个进程要求它释放资源。
循环等待:通过定义资源类型的线性顺序来预防。
死锁避免:
他允许三个必要条件发生,但通过明智的选择,确保永远不会到达死锁点。
死锁检测:
不限制资源访问或约束进程行为,操作系统周期性地执行一个算法检测循环等待。
自旋锁:
在同一时刻,只有一个线程能够获得自旋锁,其他企图获得自旋锁的任何县城将一直进行尝试(即自选),直到获得了该锁。自旋锁适合在获得锁所需的等待时间较短时。