从一个状态切换到另一个状态时,会触发一次 调度

  • 内核运行调度程序的条件 (满足一条即可):
    (1)一个进程从运行状态切换到等待状态。
    (2)一个进程终止了。

     早期是非抢占式策略,就是说 调度程序必须等待事件结束。另一种是 抢占式策略,当前运行的进程可以被换出。
    
     如下图所示,进程会让 CPU 进行计算,这是个波动的图像,某个时刻可能占用 CPU 百分比很高,有时候又很低(可能去做 IO 操作了,CPU处于等待状态)。
操作系统【6】处理机调度
     现在要考虑的是如何选择进程来执行,即 调度算法,可以使得 CPU 的利用率变得合理。

一、调度准则

  • 比较调度算法的准则

(1) CPU 利用率:
     CPU 处于忙状态所占事件的百分比。
    (认为 CPU 利用率越高,调度算法效率越高。)

(2)吞吐量:
     在单位时间内完成的进程数量。

(3)周转时间:
     一个进程从初始化到结束,包括所有等待时间所花费的时间。

(4)等待时间:
     进程在就绪队列里的总时间。

(5)响应时间:
     从一个请求被提交 到 产生第一次响应所花费的总时间。

     人们需要 “更快” 的服务:比如 传输文件时的高带宽;玩游戏时的低延迟。所以希望能减少响应时间【是操作系统的计算延迟】(及时处理用户的输出并尽快将输出提供给用户);减少平均响应时间的波动(在交互系统中,可预测性比高差异低平均更重要);增加吞吐量【是操作系统的计算带宽】——减少开销(操作系统开销、上下文切换)、系统资源的高效利用(CPU、I/O设备);减少等待时间。

“公平” ???? 是很重要的调度指标。
公平是指:
保证每个进程占用相同的CPU时间
保证每个进程的等待时间相同

二、调度算法

先来先服务算法(First Come First Served, FCFS)

     依据进程进入就绪状态的先后顺序排列。
特点:简单。
缺点:
(1)平均等待时间波动较大,花费时间少的任务可能排在花费时间长的任务后面。
(2)可能导致 I/O 和 CPU 之间的重叠处理。CPU密集型进程会导致I/O设备闲置时,I/O密集型进程也等待。

短进程优先算法(SPN)

     选择就绪队列中执行时间最短进程占用CPU进入运行状态。
缺点:
(1)可能导致饥饿,连续的短进程流会使长进程无法获得CPU资源。
(2)需要预知未来,如何预估下一个CPU计算的持续时间?有一种方法——用历史的执行时间来预估未来的执行时间,公式如下:
操作系统【6】处理机调度

最高响应比优先算法(HRRN)

选择就绪队列中响应比R值最高的进程。

  • R=(w+s)/s 。
         其中 w:是 等待时间(waiting time),s 是执行时间(service time)。选择R值最高的进程。

     该算法是在短进程优先算法的基础上改进的,关注进程等待的时间,且只考虑不可抢占的情况;
    

时间片轮转算法(RR, Round-Robin)

     在时间片的离散单元中分配处理器,时间片结束时,切换到下一个准备好的进程。(即 让各个进程轮流占用 CPU 执行。)
操作系统【6】处理机调度
    这个算法的花销主要是额外的上下文切换,而且需要设置合理的时间片(如果时间片太大,会导致等待时间过长,极限情况退化成 PCFS;如果时间片太小,吞吐量会由于大量的上下文切换开销受到影响。)根据经验:维持上下文切换开销处于 1% s 以内。 (最近的系统可以是 0.1% s) 。
    

多级反馈队列算法(MLFQ)

  • 多级队列(MQ):
        把就绪队列划分成独立的队列,每个队列拥有自己的调度策略;比如最高级的队列采取短进程优先,低优先级的队列采取批处理。

    不同阶段的进程的特点可能是不同的,所以需要动态地调整进程在不同队列中的级别 。——进程可在不同队列间移动的多级队列算法:时间片大小随优先级级别增加而增加;如进程在当前的时间片没有完成,则降到下一个优先级;I/O密集型进程停留在高优先级。
    
MLFQ算法的特点:CPU密集型进程的优先级下降很快。

公平共享调度算法(FSS, Fair Share Scheduling)

     多用户共享计算机时,希望能在 ”用户“级别 实现资源共享。每个用户拥有的进程可能是不同的,最新的 Linux 采用的就是这种公平调度机制。

三、实时调度

    面向实时系统,如火车、机床等,需要确保任务在规定时间内完成。

  • 实时系统的定义:
        正确性依赖于其时间和功能两方面的一种操作系统。
  • 实时系统的分类:
    (1)强实时系统:需要在保证的时间内完成重要的任务,否则会引起灾难性后果。
    (2)弱实时系统:尽量完成,并非必须。
    操作系统【6】处理机调度

一些概念:
(1)任务(工作单元):
一次计算,一次文件读取,一次信息传递等等。

(2)周期实时任务:一系列相似的任务,任务有规律地重复。
操作系统【6】处理机调度
(3)硬时限(Hard deadline):
错过任务时限会导致灾难性或非常严重的后果,必须验证,在最坏情况下能够满足时限。

(4)软时限(soft deadline):
通常能满足任务时限,如有时不能满足,则降低要求。尽力保证满足任务时限。

    静态优先级调度是说 任务执行之前,任务的优先级已经确定;而 动态优先级是说随着任务的执行,优先级可能会变化。

  • 速率单调调度算法(RM, Rate Monotonic)
    最佳静态优先级调度;通过周期安排优先级,周期越短,优先级越高,执行周期最短的任务。

  • 最早截止时间优先算法 (EDF, Earliest Deadline First)
    最佳的动态优先级调度,Deadline越早,优先级越高,执行 Deadline最早的任务。

相关文章: