【OS操作系统】Operating System 第八章:处理机调度

OS操作系统系列文章目录

【OS操作系统】Operating System 第一章:操作系统的概述
【OS操作系统】Operating System 第二章:启动、中断、异常和系统调用
【OS操作系统】Operating System 第三章:连续内存分配
【OS操作系统】Operating System 第四章:非连续内容分配
【OS操作系统】Operating System 第五章:虚存技术
【OS操作系统】Operating System 第六章:页面置换算法
【OS操作系统】Operating System 第七章:进程与线程
【OS操作系统】Operating System 第八章:处理机调度
【OS操作系统】Operating System 第九章:同步互斥问题
【OS操作系统】Operating System 第十章:信号量与管程
【OS操作系统】Operating System 第十一章:死锁与进程通信
【OS操作系统】Operating System 第十二章:文件系统



第八章:处理机调度

背景

  • 上下文切换:
    • 切换CPU的当前任务,从一个进程/线程转换到另一个进程/线程;
    • 保存当前进程/线程在PCB/TCB中的执行上下文(也就是CPU的状态);
    • 切换任务,读取下一个进程/线程的上下文;

  • CPU调度:
    • 从就绪队列中挑选出一个进程/线程作为CPU将要执行的下一个进程/线程;
    • 需要调度程序(挑选进程/线程的内核函数);
    • 需要考虑调度的时机;

  • 在进程/线程的生命周期中,从一个状态到另一个状态的时候会发生调度;

    在这里插入图片描述

  • 内核运行调度程序的条件(满足其一即可)

    • 一个进程从运行状态切换到等待状态;
    • 一个进程被终结了;

  • CPU的调度方式:

    一般指用户态,内核态也可能会涉及到是否抢占

    • 不可抢占式:
      调度程序必须等待时间结束(效率低,不采用);
    • 可以抢占式:
      • 调度程序在中断被响应后执行;
      • 当前的程序从运行切换到就绪,或者一个进程从等待切换到就绪;
      • 当前运行的进程可以被换出;

调度原则

  • 程序执行模型:
    程序在CPU突发和I/O中交替
    • 每个调度决定都是关于在下一个CPU突发时,将哪个工作交给CPU;
    • 在时间分片机制下,线程可能在结束当前CPU突发前就被迫放弃CPU;

  • 调度算法的性能指标
    • CPU使用率:
      CPU处于忙状态所占时间的百分比;
    • 吞吐量:
      在单位时间内完成的进程数量;
    • 周转时间:
      一个进程从初始化到结束,包括所有等待时间所花费的时间;
    • 等待时间:
      进程在就绪队列中的总时间;
    • 响应时间:
      从一个请求被提交到产生第一次响应所花费的时间;

  • 各指标在操作系统中的表现:

    • 对“快”的评价指标:
      传输文件时的高带宽,玩游戏时的低延迟(这两点相互独立);
    • 减少响应时间:
      及时处理用户的输出,并尽快将输出提高给用户;
    • 减少平均响应时间的波动:
      在交互系统中,可预测性比高差异性、低平均性更重要;
    • 增加吞吐量:
      减少开支(操作系统开支/上下文切换);系统资源的高效利用(CPU,I/O设备);
    • 减少等待时间:
      减少每个进程的等待时间;
    • 低延迟调度增加了交互式表现:
      如果移动鼠标,希望屏幕迅速反馈光标的移动;
    • 操作系统保证吞吐量不受影响:
      若想结束长时间的编程,操作系统必须不时进行调度,即使存在许多交互任务;
  • 吞吐量是操作系统的计算带宽;

  • 响应时间是操作系统的计算延迟;

  • 公平的目标:
    举例:
    • 保证每个进程占用的相同的CPU时间(但是这并不公平,因为一个用户可能比其它用户运行更多的进程);
    • 保证每个进程都有相同的等待时间;
  • 公平通常指,增加平均响应时间;

调度算法

  • 调度算法:
    • FCFS:
      先来先服务,first come first served
    • SPN(SJF)SRT:
      短进程优先(短作业优先)短剩余时间优先,shortest process next (shortest job first) shortest remaining time
    • HRRN:
      最高响应比优先,highest response ratio next
    • Round robin:
      轮循,使用时间切片和抢占来轮流执行任务;
    • Multilevel feedback queues:
      多级反馈队列,优先级队列中的轮循;
    • Fail share scheduling:
      公平共享调度;

FCFS 先来先服务

  • FCFS规定,如果进程在执行中阻塞,队列中的下一个进程会得到CPU
  • 优点:
    简单;
  • 缺点:
    • 平均等待时间波动较大(没有抢占);
    • 花费时间少的任务可能排在花费时间长的任务后面;
    • 可能会导致IO和CPU之间的重叠处理(CPU密集型进程会导致IO设备闲置时,IO密集型进程也在等待);

      在这里插入图片描述

SRT 短剩余时间优先

  • SPN(SJF)规定下一个最短的进程(短任务优先),即按照预测的完成时间排序将任务入列;
  • SRT是针对SPN增加了抢占机制的版本:
    如果一个进程较长,在这期间所有进程都要等待,如果将其中断,先执行短的进程,运行效率会有显著的提升;
  • 优点:
    平均周转时间最少;
  • 缺点:
    • 可能会导致饥饿:
      • 连续的短任务会使长任务饥饿;
      • 短任务可用时的任何长任务的CPU时间都会增加平均等待时间;

        在这里插入图片描述


在这里插入图片描述

  • 需要预测进程的执行时间
    • 解决方法:询问用户;
      如果用户欺骗就杀死进程;
    • 或,根据历史事件分配预估未来时间的分配;

      在这里插入图片描述

HRRN 最高响应比优先

  • 在SPN调度的基础上进行改进,考虑了等待时间,改善饥饿现象;
  • 不可抢占式;
  • 关注进程等待时间,防止无限期被推迟;
    R = (W + S) / S,选择R值最高的进程执行,其中W为等待时间,S是执行时间;

Round robin 轮循

  • RR调度使用时间切片和抢占来轮流执行任务,在叫量子(或时间切片)的离散单元中分配处理器;如果时间片结束了,那么就切换到下一个准备好的进程;

    在这里插入图片描述

  • 优点:
    公平;
  • 缺点:
    • 额外的上下文切换花销;
    • 如果时间量子太大,则等待时间过长,极限情况下退化成FCFS;
    • 如果时间量子太小,虽然反映迅速,但是开销大,吞吐量由于大量的上下文切换开销而受到影响;
  • 目标:
    选择一个合适的时间量子;
  • 仅验规则:
    维持上下文切换开销处于1%以内;

  • 实例:

    在这里插入图片描述

Multilevel feedback queues 多级反馈队列

  • 多级队列:
    • 为了兼顾搭配多个调度算法的优点,就绪队列可用被划分为多个独立的队列;
      且每个队列可以有自己的调度策略;
      实例:
      分为两个队列,前台队列负责交互的进程,使用RR调度,后台队列是负责批处理的进程,使用FCFS调度;
    • 需注意的是,调度必须在队列间进行;
      实例:
      固定优先级:先处理前台进程,后处理后台进程,可能会引发饥饿;
      时间切片:每个队列都得到一个确定的能够调度其进程的CPU总时间,如前台占80%,后台20%;

  • 进程是一个动态的,同一个进程的不同时刻可能适用的调度算法不一样,因此希望进程能够在不同的队列中移动
  • 多级反馈队列:
    • 对于IO密集型的任务,即交互较多的进程,放在高优先级队列中,这里的时间切片较短;
    • 对于CPU密集型的任务,即占用计算资源的进程,放在低优先级队列中,这里的时间切片较长;
    • 实例:
      时间切片的大小随着优先级的提升而减少;如果当前的时间切片中,任务没有完成,则会降到下一个优先级中;

      在这里插入图片描述

Fair share scheduling 公平共享调度

  • 站在用户的角度实现公平共享CPU资源;
  • 因为有的用户可能开的进程多,有的用户进程少;
  • 考虑了以下的情况:
    • 一些用户组比其它用户组更重要;
    • 保证不重要的组无法垄断资源;
    • 未使用的资源按照每个组所分配的资源的比例来分配;
    • 没有达到资源使用目标的组获得更高的优先级;

不同调度模型的评价准则

  • 确定性建模:
    确定一个工作量,然后计算每个调度算法的表现;
  • 队列模型:
    用来处理随机工作负载的数学方法;
  • 实现/模拟:
    建立一个允许算法运行实际数据的系统;最灵活,最具一般性;

各调度算法的比较

  • FCFS,先来先服务:
    • 不公平,平均等待时间较差;
  • SPN、SRT,短剩余时间优先:
    • 不公平,但是平均等待时间较小;
    • 需要精确预测计算时间;
    • 可能会导致饥饿;
  • HRRN,最高响应比优先:
    • 基于SPN调度的改进;
    • 不可抢占式;
  • Round robin,轮循:
    • 公平,但是平均等待时间较差;
  • MLFQ,多级反馈队列:
    • 和SPN类似;
  • Fair share scheduling,公平共享调度:
    • 公平是第一要素;

实时调度

  • 实时系统:
    • 定义:
      正确性依赖于其时间和功能两方面的一作操作系统;
    • 性能指标:
      时间约束的及时性(deadlines);速度和平均性能相对不重要;
    • 主要特性:
      时间约束的可预测性;
    • 分类:
      • 强实时系统:
        需要在保证的时间内完成重要的任务,必须完成;
      • 弱实时系统:
        要求重要的进程的优先级更高,尽量完成,本非必须;

  • 专业术语
    • 任务(工作单元job):
      一次计算,一次文件读取,一次信息传递等;

    • 属性:
      取得进程所需资源,定时参数;

      在这里插入图片描述

    • 周期任务:
      任务有规律地重复执行;

    • 周期:
      p = inter - release time (0 < p);(两个红箭头内)

    • 执行时间:
      E = 最大执行时间 (0 < e < p);(蓝色区域)

    • 使用率:
      U = e / p

      在这里插入图片描述

    • 硬时限:

      • 如果错过了最后期限,可能会发生灾难性或非常严重的后果;
      • 必须验证:在最坏的情况下,也能够满足时间;
      • 保证确定性;
    • 软时限:

      • 理想情况下,时限应该被最大满足;
      • 如果有时限没有被满足,那么就响应地降低要求;
      • 尽最大努力去保证;

  • 可调度性:
    表示一个实时系统是否可以满足deadline要求,决定实时任务执行的顺序;
    • 静态优先级调度:
      运行之前优先级已经得到确定;
    • 动态优先级调度:
      优先级在运行中是动态变化的;

      在这里插入图片描述

  • 实时调度算法:
    • RM(Rate Monotonic)速率单调调度:
      • 最佳静态优先级调度;
      • 通过周期安排优先级;
      • 周期越短,优先级越高;
      • 先执行周期最短的任务;
    • EDF(Earliest Deadline First)最早期限调度:
      • 最佳的动态优先级调度;
      • Deadline越早,优先级越高;
      • 先执行Deadline最早的任务;

多处理器调度与优先级反转

多处理器调度

  • 多处理器的CPU调度更复杂:

    • 多个相同的单处理器组成一个多处理器;
    • 优点:负载共享;
  • 对称多处理器(SMP):

    • 每个处理器运行自己的调度程序;
    • 需要在调度程序中同步;

优先级反转

  • 优先级反转可以发生在任何基于优先级的可抢占的调度机制;
    当系统内的环境强制使高优先级任务等待低优先级任务时,发生;

  • 优先级反转反例
    优先级反转的持续时间取决于其它不相关任务的不可预测的行为,在这种情况下,高优先级可能比低优先级任务晚完成;
    假设优先级 T 1 > T 2 > T 3 T_1 > T_2 > T_3 T1>T2>T3

    在这里插入图片描述

  • 首先时间轴上,只有T3有任务,所以在t1-t3是T3在执行;
  • 到t2时刻,T3访问了一个蓝色的共享资源(T1在t4时也会用到);
  • 到t3时刻,T1出现,它的优先级较高,所以T3被中断,T1开始执行;
  • 直到t4时刻,T1需要使用T3所占用的蓝色共享资源,故先等待共享资源释放后才能继续执行,所以将CPU让给T3;
  • t4-t5是T3在执行,到t5时刻,此时T2出现,优先级比T3高,所以T3又被中断,开始执行T2;
  • 当T2执行完后,T3在时间t6-t7中释放了蓝色共享资源,T1在能继续执行(继t3时刻到t7时刻,T1才得到执行);
  • 故此出现了奇怪的现象,优先级最高的T1,实际上是等T2运行完后才得到了执行;

  • 优先级继承:
    低优先级任务可以继承高优先级任务的优先级,这个依赖于它们共享的资源;
    故此时,T3的优先级会动态地提升,即T2无法抢占T3;

    在这里插入图片描述

  • 优先级天花板:
    拥有资源的任务的优先级,和所有可以也拥有该资源的任务中,优先级最高的那个任务的优先级是相同的;
    即T3拥有了T1的资源,则T3的优先级会被提升到T1的优先级别;
    • 除非当前进程的优先级,高于系统中所有拥有该资源的任务的最高优先级,否则任务尝试执行临界区的时候,将会被阻塞;
    • 持有最高优先级上限信号量锁的任务,也会继承被该锁所阻塞的任务的优先级;
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值