【操作系统】2.4进程管理(调度算法)

调度算法的评价指标

  1. CPU利用率

    由于CPU造价十分昂贵,因此人们会希望CPU尽可能多的工作做

    • CPU利用率:指CPU忙碌的时间占总时间的比例
    • 利用率 = 忙碌的时间 / 总时间
  2. 系统吞吐量

    对于计算机来说,希望能用尽可能少的时间处理完尽可能多的作业

    • 系统吞吐量:单位时间内完成的作业的数量
    • 系统吞吐量 = 总共完成了多少道作业 / 总共花了多少时间
  3. 周转时间

    对于计算机用户来说,很关心自己的作业从提交到完成花了多少时间

    • 周转时间:从用户作业提交到系统开始,到作业执行完成为止这段时间间隔
    • 它包括四个部分:(后三项在一个作业的整个处理过程中,可能发生多次)
      1. 作业在外存后备队列上的等在作业调度的时间
      2. 进程在就绪队列上等待进程调度的时间
      3. 进程在CPU上的执行时间
      4. 进程等待I/O操作完成的时间
    • 周转时间=作业完成时间 - 作业提交时间 (对于用户来说更关心自己的单位作业周转时间)
    • 平均周转时间 = 各作业周转时间之和 / 作业数 (对于操作系统来说更关心系统的整体表现)

      思考:有的作业运行时间短,有的长,因此在周转时间相同的情况下,运行时间不同的作业,给用户的体验是不同的
      例如:A运行需要1min,B运行需要10min,若先A后B,则B需要等待1min相比起运行所需的10min相对可以接受;如果先B后A,则A需要等待10min,相比起运行需要的1min,A用户的体验就比较差了
      故引入带权周转时间的概念:
      带权周转时间 = 作业周转时间 / 作业实际运行的时间 = (作业完成时间 - 作业提交时间)/ 作业实际运行的时间
      平均带权周转时间 = 各个作业的带权周转时间之和 / 作业数

      1. 带权周转时间必然 > 1
      2. 带权周转时间与周转时间都是越小越好(周转时间相同时,实际运行时间越大,用户满意度越高;实际运行时间相同时,周转时间越小,用户满意度越高)
  4. 等待时间

    计算机用户希望自己的做作业尽可能少的等待处理机

    • 等待时间:指进程/作业处于等待处理机或I/O设备为其服务的状态时间之和,等待时间越长,用户满意度越低
    • 区分:
      1. 对于进程来说:等待时间就是指进程建立后等待被服务的时间之和,在等待I/O完成的期间其实进程也是在被服务的,所以不计入等待时间
      2. 对于作业来说:不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列上等待调入内存的时间
    • 一个作业总共需要被CPU服务多久,被I/O设备服务多久其实是固定不变的,调度算法真正影响的只有作业/进程的等待时间
  5. 响应时间

    对于计算机用户来说,希望自己提交的请求(比如通过键盘输入了一个调试指令)尽早的被系统服务、回应

    • 响应时间:从用户提交请求,到首次产生响应所用的时间

调度算法

1. 先来先服务(FCFS)

  1. 算法思想:主要从“公平”的角度考虑(排队买东西)
  2. 算法规则:按照作业/进程到达的先后顺序进行服务
  3. 用于作业/进程调度:用于作业调度时,考虑哪个作业先到达后备队列;用于进程调度时,考虑哪个进程先到达就绪队列
  4. 是否可以抢占? 非抢占式
  5. 优点:公平、算法实现简单
  6. 缺点:排在长作业/进程后面的短作业/进程需要等待很长时间,带权周转时间很大(如例子中的P3进程,带权周转时间为8,需要运行的时间少,但要等很长时间,体验差),对短作业来说用户体验很不好,带权周转时间很大,对于短作业来说用户体验不好,即先来先服务算法⭐对长作业有利,对短作业不利
  7. 是否会导致饥饿(某作业/进程长时间得不到服务):不会
    在这里插入图片描述
    注意 本例子中的进程都是纯计算的进程,一个进程要么在等待,要么在运行。如果是又有计算、又有I/O操作的进程,其等待时间 = 周转时间 - 运行时间 - I/O操作的时间

2. 短作业优先(SJF)

  1. 算法思想:追求最短的平均等待时间,最少的平均周转时间、最少的平均带权周转时间
  2. 算法规则:每次调度时选择当前已经到达运行时间最短 的作业/进程
  3. 用于作业/进程调度:可用于作业调度,也可以用于进程调度。用于进程调度时称为“短进程优先(SPF)算法”
  4. 是否可以抢占?SJF与SPF都是非抢占式算法,但也有抢占式的———最短剩余时间优先算法(SRTN)
  5. 优点:“最短”的平均等待时间、平均周转时间
  6. 缺点:不公平,⭐对短作业有利,对长作业不利。另外,作业运行时间是由用户提供的,并不一定真实,不一定能真正做到短作业优先
  7. 是否会导致饥饿:⭐可能导致饥饿现象,长作业可能长时间得不到服务,如果一直的得不到服务,则称为“饿死”
  • 2.1 非抢占式
    在这里插入图片描述

  • 2.2 抢占式
    又称“最短剩余时间优先算法”(SRTN):每当有进程加入到就绪队列改变时就需要调度,如果新到达的基础剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列 。另外,当一个进程完成时也需要调度
    在这里插入图片描述
    在这里插入图片描述

  • 注意

    1. 如果题目为说明,默认“短作业/进程优先”为非抢占式的
    2. “SJF调度算法的平均等待时间、平均周转时间最少 ”,严格来说,这种说法是错误的,上面的例子中最短剩余时间优先算法(SRTN)得到的平均等待时间、平均周转时间还要更少
      1. 应该加一个条件:
        在所有进程同时可运行时,SJF调度算法的平均等待时间、平均周转时间最少
        在所有进程几乎同时到达时,SJF调度算法的平均等待时间、平均周转时间最少
      2. 如果不加前提条件,则应说:
        抢占式的短作业优先调度算法(最短剩余时间优先算法)的平均等待时间、平均周转时间最少
    3. 虽然严格来说,“SJF调度算法的平均等待时间、平均周转时间最少 ”,说法不严谨,但是,相比于其他算法(如FCFS),SFJ依然可以获得较少的平均等待时间、平均周转时间,故出现在选项中时,如可以排除其他选项,则该选项可以选

3. 高响应比优先(HRRN)

  1. 算法思想:要综合考虑作业/进程的等待时间要求服务的时间(运行时间)
  2. 算法规则: 在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务响应比 = (等待时间 + 要求服务时间)/ 要求服务时间响应比 > 1
  3. 用于作业/进程调度:既可用于作业调度,也可用于进程调度
  4. 是否可以抢占?非抢占式算法。因为 只有当前运行的作业/进程主动放弃处理机时(正常/异常完成,或主动阻塞),才需要调度,也才需要计算响应比
  5. 优点:综合考虑的等待时间与运行时间(要求服务时间)
    1. 等待时间相同时:要求服务时间短的优先(SJF的优点)
    2. 要求服务时间相同时:等待时间长的优先(FCFS的优先)
    3. 对于长作业来说,随着等待时间的边长,其响应比也会变大,从而避免了饥饿现象的问题
  6. 缺点:
  7. 是否会导致饥饿:不会
    在这里插入图片描述

⭐小结

在这里插入图片描述

  • 注意
    这几种算法关注的是用户的公平性、平均周转时间、平均等待时间的评价系统整体性能的指标,但是不关心响应时间,也不区分任务的紧急程度,因此对于用户来说交互性很糟糕 。故这三种算法适合早期的批处理系统。当然,FCFS算法业常结合其他算法使用

4.时间片轮转调度算法(RR)

  1. 算法思想:公平地、流转地为各个进程服务,让每一各进程在一定的时间间隔内都可以得到响应
  2. 算法规则:按照各进程到达就绪队列的顺序,轮流让各进程执行一个时间片(如 100ms)若进程在一个时间片内没有执行完,则剥夺其处理机,将该进程重新放到就绪队列的队尾处,重新排队
  3. 用于作业/进程调度:只用于进程调度(只有作业放入内存中,建立相应的进程后,才能被分配处理机时间片
  4. 是否可以抢占?抢占式的算法。若一个时间片内没执行完,则剥夺其处理机。由时钟装置发出时钟中断来通知CPU时间片已到
  5. 优点:公平、响应快,适用于分时系统
  6. 缺点:由于高频率的进程切换,因此有一定时间开销;不区分进程的任务紧急程度
  7. 是否会导致饥饿:不会
  • :常用于分时操作系统更注重“响应时间”,因此不计算周转时间
  • 时间片大小为2时:
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 时间片大小为5时:

在这里插入图片描述

  • ⭐⭐注意:
    1. 如果时间片太大,使得所有进程在一个时间片内就都可以完成,则时间片轮转调度算法就 退化成先来先服务 调度算法,并且会 增大进程响应时间(比如:系统中有10个并发执行的进程,如果时间片为1秒,则一个进程被响应可能需要等待9秒…举例:如果用户在自己进程的时间片之外的时间通过键盘发出调试指令,则可能需要等待9秒该指令才能被系统响应)。因此时间片不可以设置得太大
    2. 如果时间片太小,对 导致进程切换频繁系统会花费大量的时间保存、恢复运行环境需要时间代价) 来处理进程切换,从而 导致实际用于进程执行的时间比例减少 。因此时间片也不能太小

5.优先级调度算法

  1. 算法思想:随着计算机发展,特别是实时操作系统的时间,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序
  2. 算法规则:每个作业/进程有各自的优先级,调度时选择优先级高的作业/进程
  3. 用于作业/进程调度:用于作业、进程调度都可以,甚至,还会用于I/O调度中
  4. 是否可以抢占?抢占式、非抢占式都可以;
    1. 非抢占式:只需要在进程主动放弃处理机时进行调度
    2. 抢占式: 还需要在就绪队列变化时,检查是否会发生抢占。
  5. 优点:用优先级来区分任务的紧急程度,适用于分时操作系统。可灵活地调整各种作业/进程的偏好程度
  6. 缺点:若有源源不断的高优先级的进程到来,则可能会导致低优先级的进程发生饥饿
  7. 是否会导致饥饿:会
  • 抢占式:
    在这里插入图片描述

  • 非抢占式:
    在这里插入图片描述

  • 补充:

    1. 就绪队列未必只有一个,可以按照不同的优先级来组织。另外,也可以把优先级高的进程安排在更靠近队头的位置
    2. 根据优先级是否可以动态改变,可将优先级分类:
      1. 静态优先级:创建进程式确定,之后一直不变
      2. 动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级
    3. 思考一: 如何设置各类进程的优先级?
      1. 系统进程的优先级高于用户进程
      2. 前台进程的优先级高于后台进程
      3. 操作系统更偏好I/O型进程(或称CPU繁忙型进程)(与之相对的是计算型进程)

        I/O设备与CPU可以并行工作。如果优先让I/O繁忙型进程优先运行,则越有可能让I/O设备尽早地投入工作,则资源利用率、系统吞吐量都会得到提升

    4. 思考二: 如果采用的是动态优先级,什么时候应该调整
      1. 可以从追求公平、提升资源利用率的角度考虑
      2. 如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级
      3. 如果某进程占用了处理机很长时间,则可以适当降低其优先级

6.多级反馈队列调度算法

思考:
FCFS算法的优点是公平
SJF算法优点是能尽快的处理完短作业,平均等待时间/平均周转时间等参数都很优秀
时间片轮转调度算法可以让每个进程都及时得到响应
优先级调度算法可以灵活地调整各个进程被服务的机会
问题:
是否可以找到一个算法可以折中权衡,得到一个表现优秀的平衡算法?

  1. 算法思想:对其他算法的折中权衡
  2. 算法规则:
    1. 设置多级优先队列,各级队列优先级从高到低,时间片从小到大
    2. 新进程到达时,先进入一级队列,按FCFS的原则排队等待分配时间片
    3. 若用完时间片后,进程还未执行完成,则转入下一级队列的队尾(如果此时已经在最下一级的队列中,则重新放回当前队列的队尾
    4. 只有第k级队列为空时,才会给第k+1级队列的进程分配时间片
    5. 被抢占处理机的进程,重新挂到当前队列的队尾
  3. 用于作业/进程调度:用于进程调度
  4. 是否可以抢占?抢占式算法——在k级队列进程运行过程中,若更上级的队列(1~k-1级)中进入了一个新的进程,由于新进程处于更高级别的队列,因此新进程会抢占处理机,被抢占处理机的进程,则重新挂到当前队列(k级) 的队尾
  5. 优点:
    1. 对各进程相对公平(FCFS的优点)
    2. 每个新到达的进程都可以很快得到响应(RR的优点)
    3. 短进程只用较少的时间就可以完成(SPF的优点)
    4. 不必实现估计进程的运行时间(避免用户作假)
    5. 可以灵活地调整各个进程被服务的机会(比如:设置I/O型进程偏好:可以将I/O而阻塞的进程,重新放回当前队列队尾,这样就可以保持其较高的优先级)
  6. 缺点:
  7. 是否会导致饥饿:(源源不断的有短进程到达,短进程不断在高级队列执行,那些被调到低级队列上的进程,可能会长时间得不到时间片)
    在这里插入图片描述
    在这里插入图片描述

⭐小结

在这里插入图片描述

  • 注意
    相比早期的批处理系统计算机,由于计算机的造价大幅度降低,因此之后出现的交互式操作系统(包括分时、实时操作系统)更注重系统的响应时间、公平性、平衡性的指标。因此这三种算法适合交互式操作系统。(比如UNIX使用的就是多级反馈队列调度算法)
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值