操作系统-进程-下

管程——封装思想
  • 引入:信号量机制存在问题——编程程序困难,易出错——比如互斥信号量设置时,如果PV顺序不当,会导致"死锁问题"
  • 管程时一种特殊的软件模块,有这些部分组成:
    • 局部于管程的共享数据结构说明
    • 对之前数据结构进行操作的一组过程(函数)
    • 对局部于管程的共享数据设置初始值的语句
    • 管程有一个名字
  • 管程的基本特征
    • 局部于管程的数据只能被局部于管程的过程所访问
    • 一次进程只有通过调用管程内的过程才能进入管程访问共享数据
    • 每次仅允许一个进程在管程内执行某个内部过程
    • 生产消费者管程问题:
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VuqUEqzW-1595644346740)(http://cdn.comewei.xyz/qiuniuimg/管程.PNG)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6iCtDIBF-1595644346742)(http://cdn.comewei.xyz/qiuniuimg/管程1.PNG)]

特点:

  • 目的:更加方便实现进程互斥和同步
  • 在管程中定义共享数据——生产消费者问题的缓冲区
  • 需要在管程中定义用于访问这些共享数据的入口
  • 只有通过这些特定的"入口"才能访问共享变量
  • 管程中有很多"入口",但是每次只能开放其中一个"入口",并且只能让一个进程或则线程进入——这种互斥特性是由编译器负责实现的,程序员不用关心
  • 可在管程中设置条件变量等待/唤醒操作以解决同步问题。可以让一个进程或线程在条件变量下等待

Java中类似管程机制

  • 如果使用synchronized来描述一个函数,那么这个函数同一时间段只能被一个线程调用Java中管程synchronized

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c73DBKvb-1595644346748)(http://cdn.comewei.xyz/qiuniuimg/管程整体.PNG)]

死锁
  • 概念:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象

  • 死锁、饥饿、死循环

  • 必要条件

    • 互斥条件:只有必须互斥使用的资源的争抢才会导致死锁,不用内存、扬声器这样可以同时让多个进程使用的资源不会导致死锁的(因为进程不用阻塞等待这种资源)
    • 不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放
    • 请求和保持条件:进程已经保持了至少一个资源,但是又提出新的资源请求,而该资源又被其他进程占有。此时进行阻塞,但又对自己已有的资源保持不放
    • 循环等待条件:存在一种资源的循环等待,联众的每一个进程已获得资源同时被下一个进程所请求——死锁的必要不充分条件。如果同类资源大于1,即使有循环等待,也未必发生死锁。但是只有一个,则循环等待是发生死锁的充分必要条件
  • 死锁的处理策略

    • 预防死锁——破坏死锁产生的四个必要条件之一
    • 避免死锁,用某个方法防止系统进入不安全状态,从而避免死锁——银行家算法
    • 死锁的检测和解除。与性能死锁的发生,不过OS会负责检测出死锁的发生,然后采取某种措施解除死锁

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bnQ0gP9J-1595644346751)(http://cdn.comewei.xyz/qiuniuimg/死锁.PNG)]

预防死锁
  • 互斥条件死锁-互斥条件破坏

  • 破坏不可剥夺条件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9Mrsh1B-1595644346752)(http://cdn.comewei.xyz/qiuniuimg/破坏不可剥夺资源.PNG)]

  • 破坏请求和保持条件

    • 破坏请求和保持条件
  • 破坏循环等待条件

    破坏循环等待条件

预防死锁

避免死锁

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

系统处于安全状态、就一定不会发生死锁。但是如果系统处于不安全状态,可能会发生死锁

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

死锁的检测
  • 在资源分配图中,找出既不阻塞又不是孤点的进程 P i P_i Pi。消除他所有的请求边和分配边,设其称为孤点
  • 进程 P i P_i Pi所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来阻塞进程可能变成非阻塞进程。如果最后不存在边,则称该图为可简化图
  • 简化后如果还存在边,就应该立即解除死锁
    • 资源剥夺法
    • 撤销进程法(终止进程法)
    • 进程回退法
      • 进程优先级
      • 已执行时间
      • 还需要多久完成
      • 进程已经使用了多少资源
      • 进程是交互式的还是批处理的
  • 死锁检测算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值