2.4.1死锁的概念
死锁、饥饿、死循环区别
死锁和饥饿是操作系统需要考虑的,死循环一般是程序员写的代码逻辑有问题,需要被管理者程序员考虑,三者都是一种无法向前推进的现象
死锁是因为进程之间互相得不到对方的资源而导致的,进程最少有2个,即发生死锁的进程一定处于阻塞态,饥饿可能是只有一个进程发生饥饿现象,发生饥饿的进程可能处于就绪态或阻塞态,死循环可能一直上处理机运行,即可能是运行态
死锁产生的必要条件
1.资源是互斥的:这个资源必须同一时刻只能被一个进程使用
2.不剥夺:别的进程已经拿上的资源,你不能直接抢
3.请求和保持:自己已经拿上的不放,然后又去请求别的资源,别人也不能用已经拿上的
4.循环等待:我等你你等它又等我的环路(发生死锁一定有循环等待,但是有循环等待不代表一定发生死锁,比如下图中的白爷爷,1、2、3、4、5号和白爷爷之间有循环等待,而3号等的4号的资源和白爷爷拿的资源是一个可替代同类资源,则如果现在白爷爷释放了手中的资源,3号拿到了,那循环等待将被打破,故当是循环等待时+资源无可替代资源即唯一时,必定会发生死锁)
什么时候会发生死锁
当不可剥夺的资源发生不合理分配时,可能会导致死锁
1.对不可资源资源的竞争可能引起死锁
2.进程请求和释放资源的顺序不当可能导致死锁
3.信号量的使用不当可能也会造成死锁
死锁的处理策略
知识汇总