【发布时间】:2017-10-13 05:42:47
【问题描述】:
我读过一个操作系统使用以下方法实现调度:
- CPU 必须有一个硬件定时器,每隔 X 触发一次中断 毫秒。
- 一旦定时器中断触发,定时器中断处理程序将执行 使 CPU 开始执行另一个进程的指令 (或另一个线程我想我应该说)。
我的问题是:我刚才描述的方法是实现调度的唯一方法吗?
【问题讨论】:
标签: linux windows macos operating-system scheduling
我读过一个操作系统使用以下方法实现调度:
我的问题是:我刚才描述的方法是实现调度的唯一方法吗?
【问题讨论】:
标签: linux windows macos operating-system scheduling
没有。基本上有两种在操作系统中实现多线程的基本方法:
1) 抢先式多任务处理
通过抢占式多任务,您可以使用中断源来触发您的任务切换。大多数情况下,如果执行了长时间运行的任务并且没有发生其他硬件事件,则会在定时器 ISR(中断服务程序)内进行任务切换。万一发生了其他硬件事件,也可以将任务切换到具有更高优先级的阻塞线程以允许处理硬件事件。
2) 协作式多任务处理
在协作多任务处理中,每当执行系统调用时,操作系统都会切换线程。这可以是允许应用程序显式触发任务切换的特殊系统调用(如早期多任务系统(如 Windows 3.11、经典 Mac OS 等)中使用的 Yield)。也可以完全在用户模式下实现协同多任务。
今天,大多数操作系统采用混合方法 - 它们对硬件事件做出反应(如果长时间运行的线程从不调用系统例程并且没有其他 I/O 发生,这将是计时器),但它们也可以在每当应用程序执行系统调用或调用系统提供的库时的协作方式。
【讨论】:
在相同优先级的线程或进程之间进行时间片上下文切换需要定时器中断。一些多线程抢占式嵌入式操作系统的替代方案是使每个线程具有不同的优先级,这消除了时间片或定时器中断的需要。中断仍可用于触发上下文切换(除了线程使用系统调用向其他线程发出信号),但不需要定时器中断。
【讨论】: