管程&死锁

一、管程

1.管程是一种特殊的软件模块。包含:

                      A:局部于管程的共享数据结构说明。

                      B:对该数据结构进行操作的函数。

                      C:对A进行初始化的语句。

                      D:名称。

2.基本特征

                      A:共享数据只能由管程的过程(函数)访问。

                      B:进程只能通过调用 过程(函数)访问共享数据。

                      C:每次仅允许一个进程在使用过程执行内部过程。

                      D:可在管程中设置条件变量及 等待/唤醒 操作解决同步问题。让一个进线程在条件变量上等待。

二、死锁

1.死锁:进程等待其他进程占有资源,导致各进程(两个及两个以上)阻塞。

                      条件:互斥占用;不可剥夺;请求和保持;循环等待。

2.饥饿:长期无法获得资源,使进程无法推进。

                      条件:不可夺资源的竞争;信号量使用不当;进程推进顺序非法。

3.死循环:无法跳出循环。

三、预防死锁

1,破坏互斥条件:采用SPOOLing技术将独占设备在逻辑上该为共享设备;但很多时候无法破坏互斥性。

2, 破坏不剥夺条件:进程资源得不到满足,释放保持的所有资源;操作体统强行剥夺。

3,破坏请求和保持条件:采用静态分配,一次性请求完所有资源。

4,破坏循环等待:采用顺序资源分配法,给定资源编号,按递增顺序请求。

四、避免死锁

1,安全序列:系统按序列分配资源,每个进程可顺利完成,找出安全序列,则为安全状态。

2,处于安全状态,一定不会死锁,不进入安全状态,可能发生死锁。

3,银行家算法

           五大矩阵:最大需求Max;资源分配Allocation;进程需求Need=Max-Allocation;可用资源Avaliable;当前需求Requerst

           步骤:检查最大需求,检查可用资源是否满足需求,分配资源,检查是否进入不安全状态。

五、死锁的检测与解除

1,检测:在资源分配图中,找出既不阻塞、又不是孤点的进程,消去请求边和分配边,使之成为孤立的节点。

                释放后的资源可唤醒某些等待而阻塞的进程,若消去后能去出所有边,则图是可完全简化的。

2,解除

                      A:资源剥夺,挂起死锁进程,抢占进程持有的资源

                      B:终止进程,终止死锁进程,释放资源

                      C:进程回退:系统设置还原点,记录进程历史信息,回退到死锁前的状态。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值