操作系统之死锁

概念

各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进。

产生的必要条件

互斥

对必须互斥使用的资源的争抢才会导致死锁。

不剥夺

进程保持的资源只能主动释放,不可强行剥夺。

请求和保持

保持着某些资源不放的同时,请求别的资源。

循环等待

存在一种进程资源的循环等待链。

什么时候会发生死锁

对不可剥夺资源的不合理分配,可能导致死锁。

处理策略

预防死锁

破坏互斥条件

将临界资源改造成可共享使用的资源。

可行性不高,很多时候无法破坏互斥条件。

破坏不剥夺条件

申请的资源得不到满足时,立即释放拥有的所有资源;

申请的资源被其他进程占用时,由操作系统协助剥夺。

实现复杂;剥夺资源可能导致部分工作失效;反复申请和释放导致系统开销大;可能导致饥饿。

破坏请求和保持条件

运行前分配好所有需要的资源,之后一直保持。

资源利用率低,可能导致死锁。

破坏循环等待条件

给资源编号,必须按从小到大的顺序申请资源。

不方便增加新设备;会导致资源浪费;用户编程麻烦。

避免死锁

避免系统进入不安全状态(银行家算法)。

死锁的检测和解除

如何检测

数据结构:资源分配图

包括进程结点、资源结点、请求边、分配边。

死锁检测算法

依次消除与不阻塞进程相连的边,直到无边可消。

如何解除

资源剥夺、撤销进程、进程回退。

你可能感兴趣的:(java,开发语言)