操作系统第三章:处理机调度与死锁

1.基本概念
  • 在多道程序系统中,一个作业被提交后,必须经过处理机调度后,方能获得处理及而执行
  • 调度对象:进程
  • 分类:
    1. 高级调度:(作业调度或长程调度)——把外存上处于后被队列中的哪些作业调入内存,创建进程,分配资源,插入就绪队列,等待低级调度
      需决定:
      1. 接纳多少个作业
      2. 接纳哪些作业(FIFO,短作业优先,优先权等等)

    2. 低级调度:(进程调度或短程调度)决定就绪队列中的哪个进程应获得处理机

      功能:
      1. 保存上下文到PCB
      2. 按某种算法选取进程
      3. 又分派程序把处理器分配给进程,恢复进程处理机现场

      两种方式:
      1. 非抢占式:
      ————引起调度的原因:执行完毕——I/O请求——某种源语操作
      2. 抢占式
      ————抢占的原则:优先权原则——短作业原则——时间片原则

    3. 中级调度——>目的是提高内存利用率和系统吞吐量(就绪状态<----->挂起状态)

      • 挂起状态:使那些暂时不能运行的进程不再占用内存资源,而将它们调至外存上去等待。

在这里插入图片描述

调度算法
  1. 先来先服务:

    • 有利于长作业,不利于短作业
  2. 短进程/作业优先:

    • 对长作业不利
    • 不能保证紧迫性作业(进程)会被及时处理
    • 估计不一定准确
  3. 时间片轮转

    • 短时间片有利于短作业,使其较快完成,但会频繁发生中断、进程上下文切换,增加系统开销;
    • 长时间片未有效利用系统资源,退化为FCFS,无法满足交互式用户需求。
  4. 基于优先级的调度算法

    • 非抢占式优先权算法
    • 抢占式优先权调度算法:能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。
    • 优先权的类型
      1. 静态优先权:创建进程时确立,在整个运行期间保持不变
      2. 动态优先权:可随着进程的推进或随其等待时间的增加而改变,以便获得更好的调度性能
    • 决定优先权的原则:
      1. 进程类型:系统进程的优先权高于一般用户进程的优先权。
      2. 进程对资源的需求:对执行时间和内存要求少的进程应赋予较高的优先权。
      3. 用户要求:按照各进程的执行流程和进程的紧迫程度来指定进程的优先权。
  5. 剩余时间最短者优先:必须记录各进程过去的服务时间,才能求出剩余的时间

  6. 高响应比优先调度算法:
    在这里插入图片描述在这里插入图片描述即等待得越久,优先权越高,

    • 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业
    • 实现的是先来先服务
    • 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高, 从而也可获得处理机。

    优点:该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。

    缺点:利用该算法时,每次调度之前,都须先做响应比的计算,会增加系统开销。

  7. 多级反馈队列调度法:

    • 设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低
    • 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。若在第一队列中的一个时间片中没有完成则插入第二队列,依次。。
    • 先调度第一队列,然后依次
      在这里插入图片描述
实时系统与实时任务调度
实时调度算法的分类
  1. 最早截止时间优先算法(EDF):有最早截止时间的任务排在队列的最前面
  2. 最低松弛度优先算法(LLF):松弛度值最小的任务排在队列最前面
    • 当有任务执行时,只有等待任务的松弛度值为0才会发生任务的调度,其他情况不发生调度。
    • 任务执行结束后或无任务执行时,再比较等待任务的松弛度值,较小的先执行。

在这里插入图片描述

实时任务分类

周期性来划分
1. (周期性)实时任务。
2. (非周期性)实时任务

截止时间的要求来划分
1. 硬实时任务:广泛采用抢占式调度机制
2. 软实时任务

进程死锁
产生死锁的原因和必要条件

死锁:多个进程因竞争资源而造成的一种僵局,若无外力作用,他们都无法向前推进

原因:

  • 竞争资源——竞争非剥夺性资源和临时性资源
  • 进程间推进顺序非法。

死锁发生的四个必要条件

  1. 互斥:进程对所分配到的资源进行排它性使用
  2. 请求和保持:进程已经保持了至少一个资源,但又提出了新的资源请求
  3. 不剥夺:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
  4. 环路等待:发生死锁时,必然存在一个进程——资源的环形链

解决死锁的方法

  • 预防死锁:是通过设置某些限 制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来预防发生死锁

    1. 摒弃请求和保持——必须一次性地申请其在整个运行过程所需的全部资源
      —— 优点:简单、易于实现且很安全。
      —— 缺点:资源被严重浪费
    2. 摒弃不剥夺——当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源。待以后需要时再重新申请
      —— 缺点:实现起来比较复杂且要付出很大代价
    3. 摒弃环路等待——系统将所有资源按类型进行线性排队,并赋予不同的序号。 所有进程对资源的请求必须严格按照资源序号递增的次序提出
      ——缺点:序号必须相对稳定,资源浪费
  • 避免死锁:资源分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。

    1. 安全状态 :系统能按某种进程顺序,如<P1,P2,…,Pn>,依次为n个进程分配其所需资源,直至其最大需求,使每个进程都可顺利地完成,eg:在这里插入图片描述 2.银行家算法(Dijkstra)
      1. 可利用资源向量Available
      2. 最大需求矩阵Max
      3. 分配矩阵Allocation
      4. 需求矩阵Need
        在这里插入图片描述 其中的系统安全性检查的算法如下
        在这里插入图片描述
  • 检测死锁:通过系统所设置的检测机构,及时地检测出死锁的发生

  • 解除死锁:当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤消或挂起一些进程。

    1. 剥夺资源。从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态。
    2. 撤消进程。最简单的撤消进程的方法,是使全部死锁进程都夭折掉;或者按照某种顺序逐个地撤消进程,直至有足够的资源可用,使死锁状态消除为止。(常用)
    • 哲学家就餐问题 :另一种有效的方法是,增加一位服务员,让他安排其中的四位哲学家先入座,四位哲学家竞争五只筷子,必然有一位哲学家能同时获得两只筷子,当他进餐完毕,再安排剩下的那位哲学家入座,参与五只筷子的竞争。这样,五位哲学家都能顺利进餐。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值