【问题标题】:During a context switch, does the OS use PCB or kernel stack to restore registers?在上下文切换期间,操作系统是否使用 PCB 或内核堆栈来恢复寄存器?
【发布时间】:2021-08-29 12:13:37
【问题描述】:

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

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

【问题讨论】:

  • 架构相关。它们可以保存在用户空间线程堆栈中。
  • @MartinJames 这本书决定在这里区分内核堆栈和 PCB 是有原因的
  • 不知道......如果是我,我会在一个块中分配一个包含线程特定状态数据和内核堆栈空间的结构,并调用很多“TCB/PCB”。然后,无论是否推送,寄存器值都将位于该结构中。

标签: operating-system


【解决方案1】:

我创建了一个图表来帮助更好地理解流程。我把它组织成类似于问题中的图。

在上下文切换期间,操作系统是否使用 PCB 或内核堆栈来恢复寄存器?

两者都用。

为什么要在以后从内核堆栈加载寄存器时从 PCB 加载寄存器

因为您只从 PCB 加载内核堆栈的 esp,而从内核堆栈加载其余寄存器。

当您将所有信息保存在内核堆栈上时,PCB 的意义何在

因为您没有将所有信息保存在内核堆栈中,所以您将大多数信息保存在内核堆栈中。内核堆栈(也称为 esp)的位置存储在 PCB 中。

注意:请注意,该图仅用于说明目的(即专门且仅回答 OP 关于分别保存用户空间寄存器和内核空间的意义的问题分别注册到内核堆栈和PCB)。从某种意义上说,根据操作系统及其体系结构,还有许多其他寄存器可以保存和恢复,这并不完全准确。尽管如此,它准确地说明了OP问题的答案。

【讨论】:

  • 非常感谢,写的很详细很清楚,完美回答了我的问题!
  • 很高兴能帮上忙! :)
猜你喜欢
  • 2015-12-20
  • 2012-04-24
  • 1970-01-01
  • 2022-01-05
  • 2014-10-15
  • 2014-05-27
  • 2023-04-11
  • 2015-09-05
  • 2015-08-26
相关资源
最近更新 更多