什么是操作系统中的上下文切换?


上下文切换涉及存储进程的上下文或状态,以便在需要时可以重新加载它,并且可以从与之前相同的点恢复执行。这是多任务操作系统的功能,并允许单个CPU被多个进程共享。

演示上下文切换的图表如下所示:

在上图中,最初进程 1 正在运行。由于中断或系统调用,进程 1 被切换出去,进程 2 被切换进来。上下文切换涉及将进程 1 的状态保存到 PCB1 中,并从 PCB2 中加载进程 2 的状态。一段时间后,再次发生上下文切换,进程 2 被切换出去,进程 1 再次被切换进来。这涉及将进程 2 的状态保存到 PCB2 中,并从 PCB1 中加载进程 1 的状态。

上下文切换触发器

上下文切换有三个主要触发器。如下所示:

  • 多任务处理:在多任务环境中,进程从 CPU 中切换出去,以便可以运行另一个进程。旧进程的状态被保存,新进程的状态被加载。在抢占式系统中,进程可能会被调度程序切换出去。

  • 中断处理:当发生中断时,硬件会切换一部分上下文。这是自动发生的。仅更改部分上下文以最大程度地减少处理中断所需的时间。

  • 用户和内核模式切换:当操作系统需要在用户模式和内核模式之间进行转换时,可能会发生上下文切换。

上下文切换步骤

上下文切换涉及的步骤如下:

  • 保存当前在 CPU 上运行的进程的上下文。更新进程控制块和其他重要字段。
  • 将上述进程的进程控制块移动到相关的队列中,例如就绪队列、I/O 队列等。
  • 选择一个新的进程执行。
  • 更新所选进程的进程控制块。这包括将进程状态更新为正在运行。
  • 根据需要更新内存管理数据结构。
  • 恢复先前在处理器上加载时运行的进程的上下文。这是通过加载进程控制块和寄存器的先前值来完成的。

上下文切换成本

上下文切换会导致开销成本,因为 TLB 刷新、在多个任务之间共享缓存、运行任务调度程序等。在同一进程的两个线程之间进行上下文切换比在两个不同进程之间进行上下文切换更快,因为线程具有相同的虚拟内存映射。因此,不需要 TLB 刷新。

更新于: 2023年9月6日

40K+ 浏览量

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告