我如何以编程方式禁用不可屏蔽的中断?

问题描述 投票:5回答:2

我已经读过,为了根据英特尔的系统编程指南(第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函数做什么的情况下是没有意义的。

我已经读过,为了根据英特尔的系统编程指南(第3卷第9.9章)暂时关闭分页,我应该先禁用中断,然后再执行其他操作。我可以轻松禁用...

c x86-64 interrupt osdev nmi
2个回答
4
投票

CPU具有不可触发的中断(NMI)引脚(或等效硬件),用于触发NMI。有外部电路(或等效硬件)可防止NMI到达CPU。从80286开始,使用的机制是通过与CMOS/Realtime Clock(RTC)控制器关联的IO端口进行的。如今,这种相同的机制仍在硬件中被模仿。


6
投票

“具有外部电路”是指板上的处理器芯片的NMI引脚之前有门,如果这些门被关闭(关闭),则不会有中断信号到达处理器芯片的NMI引脚。

© www.soinside.com 2019 - 2024. All rights reserved.