我已经开始学习操作系统课程,并且在关于上下文切换的讲座中,提到当发生上下文切换时,操作系统会将所有寄存器的状态保存到PCB块,所以当操作系统选择重新访问时,可以恢复该过程的确切状态。
在汇编中,如何编写代码来保存所有这些信息?据我所知,如果要将任何信息写入内存,则需要将内存位置存储在其中一个寄存器中。因此,在将寄存器写入存储器的过程中,必须至少将一个寄存器覆盖到PCB块中的某个位置,并且存储在该寄存器中的信息将丢失。
是否有硬件支持可以完成此任务?
答案 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),但我所描述的是它通常如何在大多数处理器上运行。