上下文切换

计划程序为每个优先级维护单独的可执行线程队列。 这些线程称为 就绪线程。 当处理器可用时,系统将执行 上下文切换。 上下文切换中的步骤包括:

  1. 保存被处理器抢占或自愿生成的线程的上下文。
  2. 如果线程保持就绪状态,请将其置于队列末尾,使其处于优先级级别。
  3. 查找包含就绪线程的最高优先级队列。
  4. 删除队列头上的线程、还原其上下文并恢复执行。

以下线程类不是就绪线程。

  • 使用CREATE_SUSPENDED标志创建的线程
  • 使用 SuspendThreadSwitchToThread 函数在执行期间停止的线程
  • 等待同步对象或输入的线程。

在挂起或阻止的线程准备好运行之前,计划程序不会向其分配任何处理器时间,而不考虑其优先级。

上下文切换的最常见原因是:

  • 时间切片已过。
  • 优先级较高的线程已准备好运行。
  • 正在运行的线程需要等待。

当正在运行的线程需要等待时,它会放弃其剩余的时间切片。