死锁死锁定义:死锁是指多个进程在竞争资源的作用下相互等待的僵局,如果没有外力作用,则无法前进这些进程,会引起死锁
产生原因:1、竞争资源2、进程请求和资源释放顺序不正确,发生死锁
死锁产生的必要条件
1、排他条件:一个资源只能同时从一个进程访问,其他进程请求该资源时,只能等待
2、不可剥夺条件:进程获得的资源在未使用过程中不得被其他进程强制剥夺,只有获得该资源的进程才能释放
3、要求和维持条件:流程已经至少维持了一项资源,但提出了新的资源要求。 如果新资源已经被占用,这只能等待,但不释放自己占用的资源
4、循环等待条件:在某些过程中,形成了临近结尾的循环等待资源
死锁的预防----破坏发生死锁的必要条件以预防死锁(主要避免发生3和4两个条件) )。
1、破坏排他条件:将只能排他使用的资源改为允许共享使用的资源,如spooLing技术,逻辑上将排他设备改造为共享设备
2、破坏不可剥夺的条件:如果某个进程请求新资源不能满足,需要立即释放所有保留的资源,以后重新申请
3、破坏要求和保留条件:加锁,不加锁即释放现有锁。 静态分配方法在进程运行之前申请所需的资源,并在资源未得到满足之前不让其运行。 一旦执行,所有这些资源都将被拥有,并且不会请求其他资源
4、破坏循环等待条件:保证上锁解锁顺序一致。 顺序资源分配法中,首先对系统内的资源进行编号,规定进程必须按照编号的增加顺序请求资源。 例如,只有当一个进程已经占用了编号较小的资源时,才能申请编号较大的资源
避免死锁经典算法:银行家算法、死锁检测算法