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