仅仅是因为 EFLAGS 寄存器像开关一样工作吗?所以当它处于活动状态时,中断被启用,否则,它不是?
比如说,在 Java 程序中,它会是这样的,
while (switch != 0){
keepRunning;
}
Stop;
仅仅是因为 EFLAGS 寄存器像开关一样工作吗?所以当它处于活动状态时,中断被启用,否则,它不是?
比如说,在 Java 程序中,它会是这样的,
while (switch != 0){
keepRunning;
}
Stop;
内核将 EFLAGS 保存在中断堆栈帧中,以便稍后可以恢复中断的任务。EFLAGS 是内核在堆栈帧中保存的最低限度机器状态的一部分,它还包括指令指针 (EIP)、代码段 (CS),通常还有用户模式堆栈指针 (ESP)。当中断服务程序完成时(使用 IRET 指令),内核恢复 EFLAGS 和堆栈帧中的其余寄存器。
这里的基本理念是任务可以执行而不必担心任何随机中断会突然踩到寄存器。这是唯一理智的方法。
我认为原因很简单,寄存器是通过中断来修改的。即 IE(中断启用)标志将被清除。如果 CPU 没有推送标志,它就无法修改标志,并且需要额外的状态和额外的指令来获得这个隐藏状态。