CPU 如何在上下文切换中保存其寄存器状态?

How can a CPU save its register state in a context switch?

我一直在上操作系统课程,在关于上下文切换的讲座中,提到当发生上下文切换时,OS 将所有寄存器的状态保存到一个PCB 块,以便在 OS 选择重新访问它时可以恢复此过程的确切状态。

在汇编中,如何编写代码来保存所有这些信息?据我了解,如果您想将任何信息写入内存,则需要将内存位置存储在您的一个寄存器中。所以,在将你的寄存器写入内存的过程中,至少你的一个寄存器必须被覆盖到PCB块中的一个位置,并且存储在该寄存器中的信息将丢失。

是否有使这项任务成为可能的硬件支持?

这是一个如何完成的例子:
1.将一个寄存器存入栈
2. 用 PCB 地址加载该寄存器。
3.保存PCB中的所有状态,包括取回栈中保存的寄存器值。

通常,处理器定义进程上下文块 (PCB)。这是一种数据结构,处理器在其中存储到寄存器并从中加载。大多数情况下操作系统并不真正需要知道PCB的内部结构,只需要知道大小。

处理器通常有加载进程上下文和保存进程上下文指令。为简单起见,假设您有带有标签 PROCESS_1 和 PROCESS_2 的进程上下文块,其中前者是当前的 运行 进程,要切换进程,您可以执行以下操作:

 SVPCTX  PROCESS_1
 LDPCTX  PROCESS_2 ; As soon as this instruction execute the context switch is complete.

这在某些具有多个寄存器集的系统(例如 "Hi" Intel)上可能会更复杂,但我所描述的是它在大多数处理器上的一般工作方式。