在上下文切换期间,OS 是使用 PCB 还是内核堆栈来恢复寄存器?

During a context switch, does the OS use PCB or kernel stack to restore registers?

我目前正在阅读 Remzi 和 Andrea 的《操作系统——三篇简单的文章》,在关于上下文切换的部分,它指出在中断期间,运行 进程的寄存器被保存到它的内核堆栈,然后下一个进程的寄存器从它的 PCB 加载,但后来它说它从它的内核堆栈加载

我的问题是,为什么稍后从内核堆栈加载寄存器时从 PCB 加载寄存器,当您将所有信息保存在内核堆栈上时,PCB 的意义何在?

我创建了一个图表来帮助更好地理解流程。我已经按照问题中的图组织了它。

During a context switch, does the OS use PCB or kernel stack to restore registers?

两者都用。

why load the registers from the PCB when you later load them from the kernel stack

因为你只从PCB加载了Kernel Stack的esp,其余的寄存器都从Kernel Stack加载。

what even is the point of a PCB when you save all the info on the kernel stack

因为您没有在内核堆栈上保存所有信息,所以您在内核堆栈上保存了 MOST 个信息。内核堆栈(又名其 esp)的位置存储在 PCB 中。

注意:请注意,该图仅用于说明目的(即具体且仅回答 OP 关于单独保存用户的意义所在的问题-space 寄存器和 kernel-space 分别寄存器到内核堆栈和 PCB 中)。从某种意义上说,根据 OS 及其体系结构,还有一堆其他寄存器可以保存和恢复,这并不完全准确。尽管如此,它还是准确地说明了 OP 问题的答案。