Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 当发生中断或进程调度时,是否需要保存标志寄存器?_Linux_Assembly_Linux Kernel_X86 - Fatal编程技术网

Linux 当发生中断或进程调度时,是否需要保存标志寄存器?

Linux 当发生中断或进程调度时,是否需要保存标志寄存器?,linux,assembly,linux-kernel,x86,Linux,Assembly,Linux Kernel,X86,我知道当A中断发生时,所有的通用寄存器都被推到堆栈上,但我看不到任何标志寄存器被保存的代码。像setl这样依赖于标志寄存器的汇编指令,如果标志寄存器损坏,从中断恢复时很容易产生错误的结果。是的,(e/r)标志寄存器需要像这样跨上下文开关保存 所有中断(硬件和软件,包括异常)都会自动将其保存在堆栈上,ISR结束时的iret指令会将其恢复 系统调用使用相同或类似的机制并保留寄存器 调度由中断或系统调用触发。所以,一切都涵盖了。如果不发生这种情况,几乎所有的代码都会被破坏。你是说标志寄存器被硬件本身推

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

是的,
(e/r)标志寄存器需要像这样跨上下文开关保存

所有中断(硬件和软件,包括异常)都会自动将其保存在堆栈上,ISR结束时的
iret
指令会将其恢复

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


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

如果不发生这种情况,几乎所有的代码都会被破坏。你是说标志寄存器被硬件本身推到堆栈上,我们不需要做任何工作吗?