我目前正在阅读Remzi和Andrea的操作系统-三个简单部分,其中在上下文切换部分指出,在中断期间,正在运行进程的寄存器被保存到其内核栈中,然后从其PCB中加载下一个进程的寄存器,但随后又说它是从其内核栈中加载的。 我的问题是,为什么要从PCB加载寄存器,当你后来又从内核栈加载它们,而且当你在内核栈上保存所有信息时,PCB的意义是什么?
我已经创建了一张图表来帮助更好地理解流程。我将其组织得类似于问题中的图形。 在上下文切换期间,操作系统同时使用PCB和内核栈来恢复寄存器。为什么要从PCB加载寄存器,而后又从内核栈加载?因为你只从PCB中加载内核栈的esp,而将其他寄存器从内核栈中加载。当你把所有信息都保存在内核栈上时,PCB有什么作用?因为你没有把所有信息都保存在内核栈上,大部分信息是保存在内核栈上的。内核栈的位置(即它的esp)存储在PCB中。注意:请注意,图表仅用于说明目的(即专门回答OP的问题,即将用户空间寄存器和内核空间寄存器分别保存到内核栈和PCB中的原因)。从操作系统和其体系结构的角度来看,它并不完全准确。尽管如此,它准确地说明了OP的问题的答案。