Operating system 在没有硬件支持的情况下实现抢占式调度的实用方法?

Operating system 在没有硬件支持的情况下实现抢占式调度的实用方法?,operating-system,scheduling,preemption,Operating System,Scheduling,Preemption,我知道使用硬件支持实现抢占式调度对于提高效率非常重要 我想知道,在不需要硬件支持的情况下,我们可以采用哪些实用的方法来进行抢占式调度?我认为其中一种方法是软件定时器 另外,在多处理器系统中,另一种方法是使用一个处理器作为主处理器,并始终查看从处理器的处理器 考虑一下,我对非效率的方式没意见 请详细说明你认为/知道的所有可行方法。此外,最好但不一定适用于单处理器系统。为了抢占进程,操作系统必须以某种方式获得CPU控制,而不需要进程的配合。或者从另一个角度来看:CPU必须以某种方式决定停止运行进程的

我知道使用硬件支持实现抢占式调度对于提高效率非常重要

我想知道,在不需要硬件支持的情况下,我们可以采用哪些实用的方法来进行抢占式调度?我认为其中一种方法是软件定时器

另外,在多处理器系统中,另一种方法是使用一个处理器作为主处理器,并始终查看从处理器的处理器

考虑一下,我对非效率的方式没意见


请详细说明你认为/知道的所有可行方法。此外,最好但不一定适用于单处理器系统。

为了抢占进程,操作系统必须以某种方式获得CPU控制,而不需要进程的配合。或者从另一个角度来看:CPU必须以某种方式决定停止运行进程的代码,并开始运行操作系统的代码

正如进程不能与其他进程同时运行一样,它们也不能与操作系统同时运行。CPU只知道按顺序执行指令。它不会同时运行两件事情

因此,以下是CPU切换到执行操作系统代码而不是进程代码的一些原因:

  • 硬件设备向CPU发送一个中断,例如定时器、按键、网络数据包或硬盘驱动器完成其操作
  • 在不同CPU上运行的软件向该CPU发送处理器间中断
  • 正在运行的进程决定调用操作系统中的函数。根据CPU架构的不同,它可以像正常调用一样工作,也可以像假中断一样工作
  • 正在运行的进程执行导致异常的指令,如访问未映射内存或除以零
  • 某种硬件调试接口用于覆盖指令指针,导致CPU突然执行不同的代码
  • CPU实际上是一个模拟,操作系统正在解释过程代码,在这种情况下,操作系统可以决定随时停止解释
如果上述情况都没有发生,操作系统代码就不会运行。当发生硬件事件导致进程被唤醒时,大多数操作系统将重新评估哪个进程应该运行,并且还将使用计时器中断作为最后手段,以防止一个程序占用所有CPU时间


通常,当操作系统代码运行时,它没有义务返回到调用它的位置。“抢占”是指操作系统决定跳转到调用它的位置以外的某个地方。

为了抢占进程,操作系统必须在没有进程合作的情况下以某种方式控制CPU。或者从另一个角度来看:CPU必须以某种方式决定停止运行进程的代码,并开始运行操作系统的代码

正如进程不能与其他进程同时运行一样,它们也不能与操作系统同时运行。CPU只知道按顺序执行指令。它不会同时运行两件事情

因此,以下是CPU切换到执行操作系统代码而不是进程代码的一些原因:

  • 硬件设备向CPU发送一个中断,例如定时器、按键、网络数据包或硬盘驱动器完成其操作
  • 在不同CPU上运行的软件向该CPU发送处理器间中断
  • 正在运行的进程决定调用操作系统中的函数。根据CPU架构的不同,它可以像正常调用一样工作,也可以像假中断一样工作
  • 正在运行的进程执行导致异常的指令,如访问未映射内存或除以零
  • 某种硬件调试接口用于覆盖指令指针,导致CPU突然执行不同的代码
  • CPU实际上是一个模拟,操作系统正在解释过程代码,在这种情况下,操作系统可以决定随时停止解释
如果上述情况都没有发生,操作系统代码就不会运行。当发生硬件事件导致进程被唤醒时,大多数操作系统将重新评估哪个进程应该运行,并且还将使用计时器中断作为最后手段,以防止一个程序占用所有CPU时间


通常,当操作系统代码运行时,它没有义务返回到调用它的位置。“抢占”只是指操作系统决定跳转到调用它的位置以外的地方。

我能看到抢占式调度有用的唯一方法是当它由硬件中断驱动时,因此允许高性能I/O。我无法想象任何其他有效的系统-I/O完成需要触发线程到内核的调度/分派,而这意味着中断。@MartinJames,先生,我对非高效方式也很满意。我同意,但是中断也可以基于软件实现。就像我们对编程I/O所做的那样……但只有硬件知道I/O请求已完成。@MartinJames,先生,硬件先生?。我认为可以通过微编程之类的软件设置标志和检查标志。此外,我的意思是,我们是否需要特定的硬件支持来执行抢占式调度,先生?。好像没有硬件支持是不可能的?但是…为什么?这种标志检查不允许以有效的方式管理CPU资源。操作系统主要是一个资源管理器,轮询I/O标志会阻止CPU管理。我不明白你的概念,没有硬件中断的抢占式调度器。如何在没有内核硬件中断的情况下从内核中删除线程?我能看到抢占式调度有用的唯一方法是当它由硬件中断驱动时,这样就允许高性能I/O。我无法想象任何其他有效的系统—I/O comp