【操作系统】CPU调度

  • 吞吐率:吞吐率原指一个业务系统在单位时间内提供的产量(或服务量)。在计算机或数据通信系统,指的是单位时间内通过某通信信道(a communication channel)或某个节点成功交付数据的平均速率,通常以每秒比特数(bps, bits per second )为单位。

5.1基本概念

  • 包括CPU区间(使用CPU计算的时间),IO区间(CPU等待IO完成的时间)。
    一个程序一般是CPU区间和IO区间交替的。且大部分程序时大量短时间CPU时间,少量长时间CPU区间。
  • CPU调度程序:就是选择进程在CPU上运行。
  • 抢占式调度:

    • CPU调度决策可能在以下四种情况下发生:
      当一个进程从运行状态切换到等待状态。
      当一个进程从运行状态切换到就绪状态。(被其他进程抢了)
      当一个进程从等待状态切换到就绪状态。
      当一个进程终止。
      对于上面第一和第四个是没有抢夺的,是自己让出来,所以只有调度,称为非抢占式调度 ,其余则为抢占式调度
      windows95开始都使用抢占式调度。
  • 分派程序(dispatcher):用来将CPU的控制权交给调度程序调进来的进程。

5.2调度准则

  • CPU使用率:正真系统CPU使用率应该是40%~90%
  • 吞吐量:每个单位时间内完成进程的数量。
  • 周转时间:从进程提交到进程完成所用时间。周转时间为所有时间段之和,包括等待进入内存、在就绪队列中等待、在 CPU 上执行和 IO 执行。
  • 等待时间:在就绪队列中等待所花的时间之和。不包括IO时间。
  • 响应时间:从提交请求到产生第一响应所花的时间。不包括输出结果的时间。避免受到输出设备性能的影响。周转时间包括输出结果的时间。

5.3调度算法

5.3.1先到先服务调度

  • CPU最简单的调度算法(FCFS,first-come, first-served)。
  • 可以用FIFO队列实现,当有新的进程来的时候,直接把PCB连接到队尾。
  • 使用FCFS策略,平均等待时间较长。
  • 护航效果:让其他进程等待一个大进程释放CPU.
  • 当一个CPU区间很大的进程先使用CPU,那么后面很小的CPU区间的进程就得等待很长时间,导致平均等待时间变长,所以想到了以下最短作业优先调度。

5.3.2最短作业优先调度


  • shortest-job-first(SJF)
  • 当CPU空闲时,会选择一个CPU区间最短的进程来使用CPU,当两个进程CPU时间一样长的时候,会用FCFS原则。
  • 上述CPU区间指的是下一个CPU区间(就是如果得到CPU,将要执行的那个CPU区间),而不是总的CPU区间。
  • 该算法的精明之处在于:通过将短进程移到长进程之前,短进程等待时间的减少大于长进程等待时间的增加。
  • SJF经常用于长期调度。
  • 在短期调度中,由于不知道下一个CPU区间的长度,所以需要我们去预测:

预测公式为 tn+1=atn+(1a)Tn t n + 1 = a t n + ( 1 − a ) T n ,其中a>= 0,且a<=1。 tn t n 为上一次的真正CPU区间, Tn T n 为上上次预测上次的CPU区间。

抢占式SJF

  • 有时也称为最短剩余CPU区间优先调度。
  • 就是说,一个进程在执行,而来了一个新的进程其下一个CPU区间要比当前这个进程的CPU区间还要短,所以马上执行这个新的进程。

5.3.3优先级调度

  • SJF算法属于简单优先级调度算法。
  • 每个进程会有一个优先级与其关联,具有最高优先级的进程会首先分配到CPU,如果优先级相同,那么用FCFS策略解决。
  • 优先级调度可以是抢占式或者非抢占式的,如果一个新来的进程,其优先级比当前执行的进程优先级高,那么马上执行这个新的进程,为抢占式,否则为非抢占式。
  • 这种调度存在的问题是,一个低优先级的进程可能永远得不到执行称为饥饿(starvation)。最终可能导致系统崩溃。
  • 解决上述问题的办法是老化(aging),就是说,随着他等待时间的增长,它的优先级升高,这样就算一个优先级很低的进程,最终还是可以得到执行。

5.3.4轮转法调度(round-robin, RR)

  • 这个算法是专门为分时系统设计的,他与FCFS非常相似,只不过多了一个时间片,增加抢战以切换进程。
  • 时间片通常为10~100ms,并且时间片的长度通常大于80%的CPU区间,也就是说,80%的·CPU区间可以在一个时间片内完成。
  • 处理器共享将一个处理器通过时间片,当做好多个慢处理器来使用。
  • 这种算法是:规定一个时间片,然后按照就绪队列的顺序,给进程分配CPU,得到CPU的进程,执行到一个时间片结束,马上上下文切换,把CPU让给下一个进程。

5.3.5 多级队列调度

  • 如果进程可以很容易的分成不同组的情况下,可以建立另一类调度算法。并且这些组用不同的响应要求和调度需要。
  • 多级队列调度(multilevel queue scheduling algorithm):将就绪队列分成多个独立的队列。
  • 每个队列又有自己的调度算法。

个人理解

就绪队列分成多个队列。
各个队列之间有一种调度算法,比如优先级调度,优先级高的队列为空以后,优先级低的队列才能调度。
然后在各个队列内部又有自己的调度算法,比如轮转法调度。

5.3.6多级反馈队列调度

  • 多级反馈队列调度允许进程在不同队列之间移动。
  • 如果进程使用CPU时间过长那么他将会被移到优先级更低的队列。
  • 如果进程在优先级更低的队列等待时间过长,那么他将会被移到优先级更高的队列。
  • 这里写图片描述
    如上图:当一个新的进程进入时,首先会在队列0,如果在这个队列得到8ms的时间片后它没有完成工作,那么会被降级到队列1。在队列1得到16ms时间片后仍然不能完成那么降级到队列2。队列2用的是FCFS算法。等队列0和队列1都空了的时候,队列2中的进程才可能被分配CPU。
    当一个进程完成CPU区间然后去IO,IO结束后它应该放在比原先更高一级的队列

5.4多处理器调度

处理器亲和性:努力使同一个进程在同一个处理器上运行。
负载平衡:使每个处理器具有平等的工作任务,这个会破坏处理器亲和性。

5.5线程调度

  • 进程竞争范围(pcs):同一级进程下的不同线程之间
  • 系统竞争范围(scs):决定将哪个内核线程调度到CPU上执行,发生在所有进程之间。

5.7算法评估

5.7.1确定模型

一种主要类型的评估方法称为分析评估法,分析评估法使用给定算法和系统负荷,产生一个公式或数字,以评估对于该负荷算法的性能。
一种类型的分析评估是确定模型法 (deterministic modeling) 。这种方法采用特殊预先确定的负荷,计算在给定负荷下每个算法的性能。
确定模型不但简单而且快速。它给出了数字,以允许人们对算法进行比较。然而,它要求输入为精确数字,而且其答案只适用于这些情况。
确定模型的主要用途在于描述调度算法和提供例子。

5.7.2排队模型

在许多系统上运行的进程每天都在变化,因此没有静态的进程集合用于确定模型。然而CPU和IO区间的分布是可以确定的。这些分布可以被测量,然后近似或简单估计。
计算机系统可以描述为网络服务器。每个服务器都有一个等大进程队列。CPU是具有就绪队列的服务器,而io是具有设备队列的服务器。知道了到达率和服务率,可计算使用率、平均队列长度、平均等待时间等。这种研究称为排队网络分析
n为平均队列长度,k为新进程到达队列的平均到达率(如每秒钟3个)。W为队列平均队列等待时间。那么在进程等待W的时间内,则有k*W个进程到达。如果系统处于稳定状态,那么离开队列的进程数量必须等于到达对列的数量。因此:
n=kW n = k ∗ W 这一公式称为Little公式。它适用于任何调度算法和到达分布。

5.7.3模拟

驱动模拟的数据可以由许多方法产生。最普通的事随机数生成器,根据概率分布生成进程,CPU区间时间,到达时间,离开时间等。也可以经验的加以定义。如果经验的加以定义,那么要对所研究的真实系统进行测量。其结果可用来定义真实系统事件的真实分布,该分部用来驱动模拟。
这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值