在操作系统中,谁安排调度程序 - 这不是一个先有鸡还是先有蛋的情况吗?

14

谁来安排调度器的时间表?

第一个任务是由谁创建的,它是如何创建的?是否需要任何资源或内存?这不是一个鸡生蛋的问题吗?

调度器本身是一个任务吗?它在每个时间片的末尾获取CPU以检查哪个任务需要被分配CPU吗?

有没有好的链接可以让人们深入思考并深刻理解所有这些概念,而不是倾泻出一些需要背诵的理论?


没有通用答案。您需要查看特定的操作系统实现。但是,@Ira的回答可能适用于大多数操作系统。 - Benoit
2个回答

16

调度程序由以下事件触发:

  • 外部事件,例如中断(磁盘操作完成、鼠标点击、定时器滴答)
  • 或内部事件(例如线程完成、线程需要等待某物的信号、线程释放资源的信号或线程执行非法操作(如除零)而导致的陷阱)

简单来说,任何可能需要重新评估要运行的任务集和/或这些任务的优先级的事件都会触发它。调度程序决定接下来运行哪个任务,并将控制权传递给下一个任务。

通常,调度程序的“调度”是由与硬件中断相关联的代码或系统调用相关联的代码引起的。

虽然您可以将调度程序视为实际的线程,但在实践中并不需要这样实现...因为它比任何其他任务都具有更高的优先级。复杂的操作系统实际上可能会设置一个特殊的线程作为调度程序,并在调度程序获得控制时标记它为忙碌状态。这使它看起来很漂亮,但是虚假的线程并不是由调度程序调度的。

可以拥有多个调度程序:最高优先级的调度程序(例如我们刚才描述的调度程序)和其他真正作为线程运行的调度程序,像其他用户任务一样运行。这种较低优先级的调度程序往往用于管理发生在更长时间间隔内的操作,例如后台作业。


5
同意:调度器不是一个任务,它是在“调度点”处被调用的过程。 - Clifford
我曾经将硬件定时器中断作为触发调度器函数的主要来源。调度器函数负责所有任务切换的细节,如上下文切换和优先级调整。但现在我发现这意味着任务切换的时间是可预测的。Ira的答案非常好。 - smwikipedia

2

它通常被定时的CPU中断周期性调用。


1
我不确定这是否真正回答了问题...已经有一个提到中断的答案,而且这个问题是来自2010年的。 - Thomas Flinkow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接