CPU如何在上下文开关中保存其寄存器状态



我一直在操作系统上学习课程,在上下文切换的讲座中,有人提到,当发生上下文开关时,操作系统保存了所有寄存器的状态到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(,但是我描述的是它通常在大多数处理器上工作。

最新更新