处理机调度

内核运行调度程序的条件:

  • 进程从运行状态切换到阻塞状态,这种情况下当前进程不再占用CPU,此时可以从就绪队列中调度一个进程放到cpu上运行。
  • 进程退出了,CPU空闲出来,又可以加载一个进程。
  • 以上两种情况是针对非抢占系统,当把CPU资源分配给了一个进程,操作系统不会主动的剥夺
  • 对于抢占系统,当存在中断请求或者系统调用时,有可能把当前运行的进程转成就绪状态。
    • 当前进程被抢占的情况:
      • 进程时间片用完
      • 进程从等待切换到就绪

调度策略

进程通常在CPU计算和IO操作之间交替进行。
度量指标:

  • CPU使用率:CPU处于忙状态的时间百分比
  • 吞吐量:单位时间内完成的进程数量
  • 周转时间:进程从初始化到结束(包括等待)的总时间
  • 等待时间:进程在就绪队列的总时间
  • 响应时间:从提交请求到产生响应的时间

目标:

  • 减少响应时间:及时处理用户的输入请求,尽快将输出反馈给用户。
  • 减少平均响应时间的波动:在交互系统中,可预测性比高差异低平均更重要。
  • 增加吞吐量
    • 减少开销(操作系统开销,提升上下文切换的速度)
    • 提高系统的利用率(CPU的利用率,IO设备的利用率)
  • 减少等待时间:减少每个进程的等待时间

调度算法

先来先服务
  • 依据进程进入就绪状态的先后顺序排列
    • 进程进入等待或结束状态时,就绪队列中的下一个进程占用CPU
      -处理机调度
  • 缺点:
    • 平均等待时间波动较大,短进程如果排在长进程后面,那么短进程的等待时间会很长,比如上述例子中的p2和p3。
    • IO资源和CPU资源利用率较低
      • CPU密集型进程会导致IO设备闲置时,后序的IO密集型任务只能等待,不能提前执行。这样IO设备的利用率降低。
短进程优先
  • 选择就绪队列中执行时间最短进程占用CPU进入运行状态。就绪队列按预期的执行时间来排序。
  • 如果一个新的进程到达,比当前正在执行的进程还短,就考虑短剩余时间优先算法。
  • 短剩余时间优先:
    • 一个进程正在执行,它预期的执行时间很长,又来了一个新的进程,它预期的执行时间比当前正在已经执行了一半的这个进程剩下那个时间还要短,那这时候允许新来的进程抢先。
    • 具有最优平均周转时间特征
    • 可能导致饥饿:连续的短进程流会使长进程无法获得CPU资源
  • 处理机调度
最高响应比优先
  • 选择就绪队列中响应比R值最高的进程
  • R=(等待时间+执行时间)/执行时间
  • 在短进程优先算法的基础上改进,避免陷入漫长的等待
  • 不可抢占
  • 关注进程的等待时间
时间片轮转
  • 时间片结束时,按照FCFS算法切换到下一个就绪队列中的进程,结束的进程排到就绪队列的最后
  • 如果有n个进程,每个进程占一个时间片,那么每隔n-1个时间片,进程占用一个时间片来执行
  • 每个进程分到了1/n的时间
  • 处理机调度
  • 强制终止进程所以有额外的上下文切换开销
  • 处理机调度
多级队列

处理机调度

多级反馈队列

处理机调度

  • CPU密集型的进程的优先级下降很快
  • IO密集型的进程停留在高优先级
公平共享调度