中断:进程上下文保存在PCB或内核堆栈中



我已经搜索并阅读了几个类似的问题,但仍然不理解:

  1. PSW是一组处理器标志(进位、溢出等(。我的书中说,当生成中断时,PSW和PC被保存在控制堆栈上,中断处理程序启动,最终CPU状态恢复:所有剩余的寄存器,例如用户寄存器?作者是简单地忘记了它们,还是它们根本没有被拯救?

  2. 为什么PSW和PC保存在控制堆栈上,而不是PCB上(所有处理器寄存器都保存在PCB上(?

我可以理解系统调用何时执行(它是一个同步中断(:处理器切换到内核模式并在内核堆栈上工作。但是,时钟中断何时发生,操作系统决定切换到另一个进程?在这种情况下,必须使用PCB而不是正确的堆栈?

我的结论是,一些中断可以在内核区域使用单独的堆栈进行管理,但其他中断则要求PSW和PC保存在PCB中,而不是与其他寄存器一起保存在堆栈中。不过,我想请各位专家回答我的问题=(提前感谢!

中断/IRQ与任务切换关系不大。

当CPU启动一个中断处理程序时,它需要更改一些东西(例如PC(来启动中断处理程序,因此它需要存储旧值,以便在中断处理程序返回时可以恢复这些值。中断处理程序可以存储额外的东西(例如,用户寄存器(,但可能不会(如果它本身不将它们用于任何事情(;在某些情况下(例如,只增加计数器的IRQ(,中断处理程序可以几乎不节省任何额外的东西,几乎不使用,几乎不恢复,然后返回。

取决于哪个操作系统以及它应该如何工作;如果中断处理程序感觉像是在切换任务,那么中断处理程序的一些东西(例如PC(需要保存在某个地方"某处";可以直接在PCB中,但可以在内核的堆栈上(只有堆栈指针保存在PCB中(。注意,大多数操作系统使用高级语言的调用约定;被呼叫者保留";其他东西可以被调用者丢弃,因此在任务切换期间不需要保存在任何地方,因为调用者希望它们无论如何都会被丢弃。

最新更新