管程和死锁

2.16 管程

(为实现进程的互斥同步的对资源的访问)【解决信号量机制编程麻烦、易出错的问题】

管程的定义和基本特征

  • 管程是一种特殊的软件模块,有这些部分组成:
  1. 局部于管程的共享数据结构说明;
  2. 对该数据结构进行操作的一组过程;(过程->函数)
  3. 对局部于管程的共享数据设置初始值的语句;
  4. 管程有一个名字.
  • 管程的基本特征:
  1. 局部于管程的数据只能被局部于管程的过程所访问;
  2. 一个进程只有通过调用管程内的过程才能进入管程访问共享数据;
  3. 每次仅允许一个进程在管程内执行某个内部过程

2.17 死锁

在并发环境下,各进程因竞争资源而造成的一种互相等 待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”。 发生死锁后若无外力干涉, 这些进程都将无法向前推进。

死锁发生的条件

  • 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁

  • 不剥夺条件

  • 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。

  • 循环等待条件:存在一种进程资源的循环等待链,链中的 每一个进程已获得的资源同时被下一个进程所请求。

:发生死锁时一定有循环等待,但是发生循环等 待时未必死锁

对系统资源的竞争、进程推进顺序非法、信号量使用不当都会导致死锁。

死锁的处理策略

预防死锁

请添加图片描述

避免死锁
安全序列

指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态

系统在安全状态一定不会出现死锁,在不安全状态可能出现死锁。

银行家算法

在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求(银行家算法核心思想)

  • 数据结构: (系统中有n个进程,m种资源)

    • 长度为 m 的一维数组 Available 表示还有多少可用资源

    • n*m 矩阵 Max 表示各进程对资源的最大需求数

    • n*m 矩阵 Allocation 表示已经给各进程分配了多少资源

    • Max – Allocation = Need 矩阵表示各进程最多还需要多少资源

    • 用长度为 m 的一位数组 Request 表示进程此次申请的各种资源数

  • 银行家算法步骤:

    • 检查此次申请是否超过了之前声明的最大需求数

    • 检查此时系统剩余的可用资源是否还能满足这次请求

    • 试探着分配,更改各数据结构

    • 用安全性算法检查此次分配是否会导致系统进入不安全状态

  • 安全性算法步骤:

    • 检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列, 并把该进程持有的资源全部回收。

    • 不断重复上述过程,看最终是否能让所有进程都加入安全序列

检测和解除

请添加图片描述

死锁的检测算法

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

  1. 在资源分配图中,找出既不阻塞又不是孤点的进程 Pi消去它所有的请求边和分配边,使之称为孤立的结点。
  2. 进程 Pi 所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来的阻塞进程可能变 为非阻塞进程。根据 1 中的方法进行一系列简化后,若能消去图中所有的边,则称该图是可完全简化的

注:不阻塞进程指其申请的资源数还足够的进程(例如上图的P1为不阻塞进程,P2为阻塞进程)

死锁定理:若资源分配图是不可简化的,说明发生了死锁

死锁的解除算法

用死锁检测算法化简资源分配图后,还连着边的 那些进程就是死锁进程

  1. 资源剥夺法。挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给 其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饥饿。
  2. 撤销进程法(或称终止进程法)。强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资 源。这种方式的优点是实现简单,但所付出的代价可能会很大。因为有些进程可能已经运行 了很长时间,已经接近结束了,一旦被终止可谓功亏一篑,以后还得从头再来。
  3. 进程回退法。让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程 的历史信息,设置还原点。

(决定对“谁”动手)判断依据:

  1. 进程优先级
  2. 已执行多长时间
  3. 还要多久能完成
  4. 进程已经使用了多少资源
  5. 进程是交互式的还是批处 理式的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值