操作系统在很多情况下,需要进行原子操作,此时是不可以进行中断响应的。
根据需要此时需要关闭中断,在原子操作完了之后再进行开中断。
中断相关的操作有:
1 知道EFFLAG的中断位
2 中断开、关的指令
3 如果进行C语言设置时的参数传递
下面给出部分伪码:
原子操作() {
开始原子操作();
操作;
结束原子操作();
}
开始原子操作() {
1 检查中断是否允许
{
获取EFLAGS寄存器值查看中断位值判断是否允许 为1是开中断 0为关中断;
}
2 允许的话关闭中断
{
cli;
}
}
汇编代码如下: GLOB