操作系统中的一些调度算法

180 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

一、批处理系统中的调度算法

1、先来先服务

  • 使用该算法的进程会按照它们请求 CPU 的顺序使用 CPU。我们可以把每个请求 CPU 资源的进程当作一个从队列队尾进队的元素。CPU 会从队头逐个分配资源,进程使用完毕之后就会从队头出队。
  • 该算法也有一些缺陷,如果在队头的进程请求 CPU 分配的资源非常多,就会让其他在队列中的进程等待时间过长造成阻塞问题。

2、最短作业优先

  • 最短作业优先顾名思义,会优先分配资源给需要时间更少的请求进程任务。如果同时来了很多请求资源的进程,该算法就会根据每个进程请求的时间大小按升序排列。然后会由小到大依次分配资源,该顺序一旦确定进程获得资源的顺序就不再发生变化。

3、最短剩余时间优先

  • 该算法与第二种算法有一些相似,但是该算法是会抢占 CPU 资源的(抢占式)。不同的是每当有新的进程进来时,该算法就会重新根据每个进程请求的时间片大小按升序排列。
  • 此算法对于短作业进程十分有利。

二、交互式系统中的调度算法

1、轮转调度

  • 轮转调度算法是最古老、最简单、最公平而使用最广泛的调度算法。分配的时间片段称为时间片,会逐个分配一个一样的时间片,如果在这个时间片内运行没有完成就会继续加入队尾等待下次分配时间片。
  • 进程之间的切换有时也称为上下文切换。
  • 但是该算法也是有缺点的,当进程切换的次数很多,花销的时间就会增长,造成时间的浪费。最终会影响到 CPU 的效率。

2、优先级调度

  • 这里的话,就可以理解为有多个轮转调度而且它们都有不同的优先级,优先级高的分配的时间片就会多,优先级低的分配的时间片就会少。只有当高优先级的进程都运行完毕时,下一优先级的进程才可能分配到时间片。
  • 高优先级的进程没有结束时,就造成低优先级进程饥饿的现象。

3、多级队列

  • 与优先级调度十分相似,唯一不同的是当一个进程得到时间片运行到时间结束时,如果该进程没有运行完毕。它不会重新加入当前优先级的等待队列,而是加入下一个优先级的等待队列。

4、最短进程优先

  • 类似于在批处理系统中的最短作业优调度,而这是在交互式系统中。它会根据进程过去的行为预测推测,然后运行预计时间最短的一个进程。如果一个终端每一条指令运行时间为 t0t0,预计下一次运行时间为 t1t1 ,则估计时间为 aT0+(1a)T1aT0 + (1 - a)T1aa 决定忘记老的时间。

5、保证调度

  • 是一个看上去很公平的算法,如果一个系统有 mm 个用户,每一个用户有 nn 个进程,则每个进程会分到 1/(mn)1/(m * n) 的CPU处理能力。

6、彩票调度

  • 很容易理解,就是买的彩票越多中奖的概率就越大。假设系统一共分配 FF 份额,若一个进程分配到 ff 份额,则它获得 CPU 处理能力的概率为 f/Ff / F

总结

  • 调度分为批处理系统调度和交互式系统调度,而在调度的过程中会涉及到进程或者线程的切换。对于线程的切换,用户级的线程切换性能要优于内核级线程切换。