【发布时间】:2019-08-19 01:08:29
【问题描述】:
我已经读过,为了根据英特尔的系统编程指南(第 3 卷第 9.9 章)暂时关闭分页,我应该在执行其他任何操作之前禁用中断。我可以很容易地用 cli 禁用可屏蔽中断,但是所有关于禁用 NMI 的手册都是
可以通过外部电路禁用 NMI 中断。(软件必须保证在运行期间不会产生异常或中断 模式切换操作。)
我在this OSDEV page 找到了类似于 C 代码的用于禁用 NMI 的代码,但我不太明白它应该是什么意思
void NMI_enable() {
outb(0x70, inb(0x70) & 0x7F);
}
void NMI_disable() {
outb(0x70, inb(0x70) | 0x80);
}
感觉代码没有上下文,不知道函数 outb 和 inb 的作用就没有意义。
【问题讨论】:
-
这完全是硬件特定的。
-
Inb 和 outb 是 CPU 指令,在处理器的文档中进行了描述。 (实际上,一个精简的函数包装器可以方便地从 c 中使用)
-
英特尔...什么? x64? 8051?
-
具体是 Intel i7 8700K
标签: c x86-64 interrupt osdev nmi