- 操作系统教程
- OS - 首页
- OS - 需要
- OS - 概述
- OS - 历史
- OS - 组件
- OS - 结构
- OS - 架构
- OS - 服务
- OS - 属性
- OS - TAT & WAT
- OS 进程
- OS - 进程
- OS - 进程调度
- OS - 调度算法
- 先来先服务调度算法
- 最短作业优先调度算法
- 循环调度算法
- 最高响应比优先调度算法
- 优先级调度算法
- 多级队列调度
- 上下文切换
- 进程操作
- 彩票进程调度
- 预测突发时间最短作业优先调度
- 竞争条件漏洞
- 临界区同步
- 互斥同步
- 进程控制块
- 进程间通信
- 抢占式和非抢占式调度
- OS 同步
- 进程同步
- OS 内存管理
- OS - 内存管理
- OS - 虚拟内存
- OS 存储管理
- OS - 文件系统
- OS 类型
- OS - 类型
- OS 杂项
- OS - 多线程
- OS - I/O 硬件
- OS - I/O 软件
- OS - 安全
- OS - Linux
- 考试题库及答案
- 考试题库及答案
操作系统中的上下文切换
在抢占式多道程序设计系统中,正在执行的进程通常必须在完成之前停止执行,以允许其他进程执行。CPU 中执行进程的切换会导致一种称为上下文切换的现象。这里值得注意的是,进程的上下文指的是进程的属性以及分配给它的资源。上下文包括进程堆栈、内存地址空间、虚拟内存地址空间、寄存器中的值以及堆栈指针 (SP)。
什么是上下文切换?
上下文切换是存储进程上下文或状态的过程,以便在需要时可以重新加载它,并且可以从与之前相同的点恢复执行。这是多任务操作系统的功能,允许单个CPU被多个进程共享。
上下文切换触发器
上下文切换有三个主要的触发器。如下所示:
1. 多任务处理
在多任务环境中,进程从 CPU 中切换出来,以便可以运行另一个进程。旧进程的状态被保存,新进程的状态被加载。在抢占式系统中,进程可能会被调度程序切换出去。
2. 中断处理
当发生中断时,硬件会切换一部分上下文。这是自动发生的。只更改部分上下文以最大程度地减少处理中断所需的时间。
3. 用户和内核模式切换
当操作系统需要在用户模式和内核模式之间进行转换时,可能会发生上下文切换。
上下文切换步骤
上下文切换涉及的步骤如下:
- 保存当前正在 CPU 上运行的进程的上下文。更新进程控制块和其他重要字段。
- 将上述进程的进程控制块移动到相关的队列,例如就绪队列、I/O 队列等。
- 选择一个新的进程执行。
- 更新所选进程的进程控制块。这包括将进程状态更新为运行状态。
- 根据需要更新内存管理数据结构。
- 恢复之前在处理器上加载时运行的进程的上下文。这是通过加载进程控制块和寄存器的先前值来完成的。
上下文切换示例
让我们考虑一个从进程 P0 切换到进程 P1 的上下文切换场景。发生的步骤如下图所示:
从图中可以看出,这里发生了两次上下文切换。第一次上下文切换导致从进程 P0 切换到 P1。我们可以看到进程 P0 最初正在执行。发生系统调用或中断,请求 P0 从其执行状态抢占,以便进程 P1 可以执行。为此,发生上下文切换。为了保留 P0 执行的部分结果,P0 的状态保存在其进程控制块 PCB0 中。进程 P1 的状态从其 PCB1 重新加载到 CPU。因此,P0 进入空闲状态,而 P1 开始执行。在第二次上下文切换中,发生相反的过程,其中进程 P1 的状态保存在 PCB1 中,并且 P0 的保存状态从 PCB0 加载。
成本和性能评估
上下文切换的过程在计算上是密集型的。上下文切换会消耗大量的 CPU 周期,因为它需要保存和重新加载参与切换过程的两个进程的整个上下文。因此,在设计操作系统和选择调度算法时,主要目标之一仍然是优化上下文切换的数量。
进程之间的切换需要相当长的时间。涉及许多任务,例如将部分值保存到寄存器和内存映射以及从它们加载;更新表、堆栈和文件中的值;以及保存共享资源中的值。此外,还有其他其他操作取决于底层计算机体系结构和操作系统选择。在两个单独进程之间切换所需的时间称为进程切换延迟。
上下文切换对进程管理系统的整体性能有深远的影响。如果每次上下文切换都以最少的资源利用和最少的时间完成,则 CPU 可以主要用于执行进程,从而提高整体性能。另一方面,详细的上下文切换可能是万无一失的,但可能会消耗大量的时间和资源,从而降低整体性能。为用户进程提供单个地址空间的操作系统比为每个进程提供专用地址空间的操作系统具有更快的上下文切换。
如果进程调度程序优化上下文切换的数量,使得用于进程执行的 CPU 周期数大大高于用于上下文切换的 CPU 周期数,则可以提高性能。
