【发布时间】:2016-02-28 18:39:31
【问题描述】:
当一个进程正在执行并且发生中断时,该进程的当前状态保存在哪里?进程控制块是更新了还是刚刚推送到内核堆栈上?
【问题讨论】:
-
架构/操作系统相关。通常两者兼而有之。
标签: operating-system
当一个进程正在执行并且发生中断时,该进程的当前状态保存在哪里?进程控制块是更新了还是刚刚推送到内核堆栈上?
【问题讨论】:
标签: operating-system
这取决于硬件。通常,会切换到内核模式堆栈指针。一些系统对每个处理器模式都有一个专用的堆栈指针寄存器和一个中断堆栈指针。访问 SP 访问当前模式的寄存器。在这种情况下,无需保存和恢复 SP。
中断通常在某种专用中断堆栈上处理(可能是每个处理器,而不是每个进程)。
必须有某种硬件机制才能在中断时切换到受保护的堆栈。该机制通常会自动保存程序计数器和处理器状态寄存器。
因为中断不会引起上下文切换,所以只需要保存有限的一组数据。 中断处理程序通常会在堆栈中保存它将使用的其他寄存器。
在返回之前,中断处理程序恢复保存的寄存器。
然后中断处理程序通过执行某种类型的从中断返回指令来退出,该指令恢复 PC、PS 和切换堆栈。
【讨论】: