上下文切换
计划程序为每个优先级维护一个可执行线程队列。 这些线程称为 就绪线程。 当处理器可用时,系统会执行 上下文切换。 上下文切换中的步骤如下:
- 保存刚刚完成执行的线程的上下文。
- 将刚刚完成执行的线程置于队列末尾,作为其优先级。
- 查找包含就绪线程的最高优先级队列。
- 删除位于队列头部的线程,加载其上下文并执行它。
以下线程类不是就绪线程。
- 使用 CREATE_SUSPENDED 标志创建的线程
- 使用 SuspendThread 或 SwitchToThread 函数执行期间停止的线程
- 等待同步对象或输入的线程。
在挂起或阻塞的线程准备好运行之前,计划程序不会为其分配任何处理器时间,无论其优先级如何。
上下文切换的最常见原因包括:
- 时间片已过。
- 具有更高优先级的线程已准备好运行。
- 正在运行的线程需要等待。
当正在运行的线程需要等待时,它会放弃其剩余时间片。