在上下文切换期间,操作系统使用进程控制块(PCB)还是内核栈来恢复寄存器?

3
我目前正在阅读Remzi和Andrea的操作系统-三个简单部分,其中在上下文切换部分指出,在中断期间,正在运行进程的寄存器被保存到其内核栈中,然后从其PCB中加载下一个进程的寄存器,但随后又说它是从其内核栈中加载的。

enter image description here

我的问题是,为什么要从PCB加载寄存器,当你后来又从内核栈加载它们,而且当你在内核栈上保存所有信息时,PCB的意义是什么?

1
架构相关。它们可以保存在用户空间线程堆栈上。 - Martin James
@MartinJames,这本书为什么要在这里区分内核栈和PCB? - Saad Haider
1
不知道...如果是我,我会分配一个包含线程特定状态数据和内核堆栈空间的结构体,并将所有内容称为'TCB/PCB'。寄存器值(推送或未推送)将在该结构体中。 - Martin James
1个回答

5
我已经创建了一张图表来帮助更好地理解流程。我将其组织得类似于问题中的图形。

enter image description here

在上下文切换期间,操作系统同时使用PCB和内核栈来恢复寄存器。
为什么要从PCB加载寄存器,而后又从内核栈加载?
因为你只从PCB中加载内核栈的esp,而将其他寄存器从内核栈中加载。
当你把所有信息都保存在内核栈上时,PCB有什么作用?
因为你没有把所有信息都保存在内核栈上,大部分信息是保存在内核栈上的。内核栈的位置(即它的esp)存储在PCB中。
注意:请注意,图表仅用于说明目的(即专门回答OP的问题,即将用户空间寄存器和内核空间寄存器分别保存到内核栈和PCB中的原因)。从操作系统和其体系结构的角度来看,它并不完全准确。尽管如此,它准确地说明了OP的问题的答案。

非常感谢,这份解答详细清晰,完美地回答了我的问题! - Saad Haider
1
很高兴能帮助你!:) - Krayddan H Napier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接