【问题标题】:Intterupts - context-switcht to stack or PCB中断 - 上下文切换到堆栈或 PCB
【发布时间】:2015-12-20 23:45:05
【问题描述】:

我发现这个链接描述了中断以及 CPU 如何管理它们。

http://www.ni.com/white-paper/2874/en/

我记得我在计算机科学的研究中,当中断发生时,cpu 会将其保存在其寄存器中的内容并将其存储在属于实际进程的 PCB(进程控制块)中。

但在这篇文章中,人们可以阅读以下内容:

中断是处理器的特殊输入。当处理器收到中断发生的信号时,处理器完成当前正在执行的指令并将指令指针和状态字保存到堆栈中。堆栈是一个特殊的内存块,用于在函数调用和中断期间跟踪信息。处理器使用一个称为堆栈指针的特殊寄存器来跟踪堆栈顶部的位置,也就是最后一项添加到堆栈的位置。

所以这里的上下文似乎被保存到堆栈中,而不是 PCB。

那么 - 这个问题的答案是什么?它只是在不同的系统和架构之间有所不同吗?

(在下注或关闭此问题之前 - 让我有机会将问题迁移到另一个论坛。我选择了 stackoverflow,因为其他人似乎错过了问题的适当标签)

【问题讨论】:

    标签: stack cpu-registers context-switch


    【解决方案1】:

    虽然它取决于操作系统/处理器(架构)的类型,但设计/机制有些相似。

    通常,PCB(过程控制块)是一种数据结构,其中包含用于跟踪过程的数据。它将包含进程状态、程序计数器、优先级、fd 列表和 CPU 寄存器信息(如进程状态字、堆栈和帧指针等)。请注意,这些 PCB 可以存储在内核内存的堆栈中。每当调度程序要进行进程切换时,应保存第一个进程的PCB(暂停第一个进程的执行)并加载第二个进程的PCB(尤其是PC)和上下文,从而继续执行第二个过程。 (即在上下文切换期间,内核停止执行正在运行的进程,将 CPU 寄存器中的值复制到 PCB,并用应调度的新进程的 PCB 值更新 CPU 寄存器。)

    大多数情况下,当处理器收到中断发生的信号时,硬件通过保存指令指针(PC)和相关寄存器(这里是状态字)来完成上下文切换的一部分,堆栈指针指向堆栈,即有点相当于PCB的内容。在内核服务(处理)上下文中建立的中断后,它将加载PCB等效内容(尤其是PC)并恢复中断发生前的上下文并恢复执行。

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 2021-08-29
      • 2019-05-19
      • 1970-01-01
      • 2017-11-19
      • 2017-06-01
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      相关资源
      最近更新 更多