死锁
#死锁的概念
各个进程互相等待对方手里的资源,导致各个进程都阻塞,无法正常推进
#死锁,饥饿,死循环的区别
共同点:
都是进程无法正常顺利推进的现象(故意设置的死循环除外)
区别
死锁:
“循环等待对方手里的资源”导致的
故至少有两个或两个以上的进程同时发生死锁
发生死锁的进程一定处于阻塞态
饥饿:
可能只有一个进程发生饥饿
饥饿进程可能阻塞态,如长期得不到需要的I/O设备
可能处于就绪态,如长期得不到调度(短作业优先中有出现)
死循环:
可能只有一个进程发生死循环
死循环的进程可以在处理机上运行
...不多赘述
*死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题*
#死锁产生的必要条件
产生死锁必须同时满足下四个条件
互斥条件:
只有对必须互斥使用的资源争抢才会导致死锁
不剥夺条件:
进程所获得的资源在未使用完之前,不能有其他进程强行夺走,只能主动释放
请求和保持条件:
进程已经至少保持了一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求的进程被阻塞,但又对自己已有的资源保持不放
循环等待条件:
存在一种进程资源的循环等待链,链中的每个进程已获得的资源同时被下一个进程所请求
发生死锁时一定有循环等待,但是发生循环等待时未必繁盛死锁
如果同类资源大于1,即使有循环等待也未必发生死锁。
#死锁处理策略
1.预防死锁
破坏死锁参审的四个必要条件中的一个或几个
2.避免死锁
用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
3.死锁的检测和解除
允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采用某种措施解除死锁