【问题标题】:Does the flag register need to be saved when an interrupt occurs, or a process scheduling happens?发生中断或进程调度时是否需要保存标志寄存器?
【发布时间】:2012-07-10 09:37:35
【问题描述】:

我知道当中断发生时所有通用寄存器都被压入堆栈,但我看不到标志寄存器保存的任何代码。像setl这样依赖于标志寄存器的汇编指令,如果标志寄存器损坏,在中断恢复时很容易产生错误结果。

【问题讨论】:

  • 如果不这样,几乎所有的代码都会被破坏。

标签: linux assembly linux-kernel x86


【解决方案1】:

是的,(e/r)flags 寄存器需要像这样跨上下文切换保存。

所有中断(硬件和软件,包括异常)都会自动将其保存在堆栈中,并且 ISR 末尾的 iret 指令将其恢复。

系统调用使用相同或相似的机制并保留寄存器。

调度由中断或系统调用触发。所以,一切都涵盖了。

【讨论】:

  • 你的意思是标志寄存器是硬件自己压栈的,我们不需要做任何工作?
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 2015-04-18
  • 1970-01-01
  • 2012-07-22
相关资源
最近更新 更多