进程调度

从理论上来说,有很多种调度策略。

第一种是先来先服务,也就是按照到达就绪队列的顺序来调度。优点是简单易实现,缺点就是就绪队列尾部的进程可能会出现饥饿。

第二种是短作业优先。也就是优先调度预计执行时间最短的。优点是可以减少平均等待时间,但是缺点是长作业会饥饿。

第三种是优先级调度,也就是优先级高的先调度,显然缺点是优先级低的任务可能会饥饿。

第四种是时间片轮转,也就是说每个进程轮流运行一段时间,到点之后不管有没有结束,都要让出 CPU,显然这种算法公平性比较好。

第五种是多级反馈队列。简单来说就是分成多个队列,每个队列代表一个优先级。操作系统会动态调整进程的优先级,保证进程都能得到调度。这个算法是一个综合性的算法,综合考虑了非常多的因素,所以总体来说调度效率和公平性都比较好。缺点就是实现会比较复杂。

第六种是最短时间优先,也就是优先调度剩余执行时间最短的任务。它和短作业优先的区别是,短作业优先考虑的是整个任务的执行时间,而这个算法考虑的是剩余执行时间。

第七种是保证公平调度,也就是每个用户或者用户组的 CPU 时间是相同的。

第八种事基于需求调度,也就是根据进程需要的资源来执行调度。

大多数操作系统并不会使用单一的调度策略,而是多种策略混合使用。

比如说 Linux 使用的就是所谓的 CFS,完全公平调度策略。它的核心在于确保每个进程都能公平地分享CPU时间。它通过一个叫做虚拟运行时间的东西来决定哪个进程该运行,并且用一个红黑树来管理这些进程。重要的是,它能够动态地调整每个进程的运行时间,确保系统既高效又公平。

简而言之,CFS让每个进程都有机会得到CPU的运行时间,而且还能根据实际情况灵活调整