死锁
死锁定义:死锁指多个进程因竞争资源而造成的一种互相等待的僵局,若无外力作用,这些进程都无法向前推进,就造成了死锁。
产生原因:1、竞争资源 2、进程请求和释放资源的顺序不当,导致死锁
死锁产生的必要条件
1、互斥条件:一个资源同一时间只能被一个进程访问,若其他进程请求该资源,则只能等待
2、不可剥夺条件:进程获得资源在未使用完之前,不能被其他进程强行夺走,只能由获得该资源的进程来释放
3、请求与保持条件:进程已经保持了至少一个资源,但是又提出了新的资源请求,如果新资源已被占有,这只能进行等待,但对自己以占有的资源保持不释放
4、循环等待条件:若干个进程间形成了收尾相接循环等待资源的情况
死锁的预防----破坏死锁产生的必要条件从而预防死锁(主要是避免3和4两个条件的产生)
1、破坏互斥条件:把只能互斥使用的资源改成允许共享使用的资源,例如spooLing技术,将独占设备在逻辑上改造成共享设备
2、破坏不可剥夺条件:当某个进程请求新资源无法得到满足时,就立即释放保持的所有资源,待以后需要再重新申请
3、破坏请求和保持条件:非阻塞加锁,加不上锁则释放已有的锁。采用静态分配方法,即进程在运行前一次申请完它所需要的的资源,在它资源未满足前,不让他运行,一旦运行,这些资源都归它所有,此时不会在请求其他资源
4、破坏循环等待条件:保证加锁解锁顺序一致。采用顺序资源分配法,首先给系统中的资源进行编号,规定进程必须按编号递增的顺序请求资源。例如一个进程只有已占有小编号资源时,才可以申请更大编号的资源
避免死锁经典算法:银行家算法,死锁检测算法