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

时间:2018-03-30 20:34:42

标签: assembly operating-system context-switch

我已经开始学习操作系统课程,并且在关于上下文切换的讲座中,提到当发生上下文切换时,操作系统会将所有寄存器的状态保存到PCB块,所以当操作系统选择重新访问时,可以恢复该过程的确切状态。

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

是否有硬件支持可以完成此任务?

3 个答案:

答案 0 :(得分:2)

以下是如何完成的示例:
1.将一个寄存器保存到堆栈中 2.将该寄存器加载到PCB的地址 3.保存PCB中的所有状态,包括检索堆栈中保存的寄存器值。

答案 1 :(得分:0)

我在这里省略了许多细节,但通常会发生上下文切换以响应定时器中断(或类似),这意味着CPU的状态已经在进入时由中断服务程序保存到堆栈中,所以将它永久地保存在其他地方是一个相对简单的操作。

答案 2 :(得分:0)

通常,处理器定义过程上下文块(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),但我所描述的是它通常如何在大多数处理器上运行。