标签: nmi

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

我读过,为了根据英特尔的系统编程指南(第3卷第9.9章)暂时关闭分页,我应该先禁用中断,然后再执行其他操作。我可以使用cli轻松禁用可屏蔽中断,但是所有有关禁用NMI的手册都说

NMI中断可以通过外部电路禁用(软件必须保证在模式切换操作期间不会产生异常或中断。)

我在此OSDEV页面上找到了类似于C代码的用于禁用NMI的代码,但我不太明白它的含义。

void NMI_enable() {
    outb(0x70, inb(0x70) & 0x7F);
 }

 void NMI_disable() {
    outb(0x70, inb(0x70) | 0x80);
 }
Run Code Online (Sandbox Code Playgroud)

感觉代码没有上下文并且在不知道outb和inb函数做什么的情况下是没有意义的。

c x86-64 interrupt osdev nmi

5
推荐指数
2
解决办法
239
查看次数

Vagrant Virtualbox VM 出现“内核:NMI 看门狗:BUG:软锁定 - CPU#1 卡住了 23 秒”

我在 Windows PC 上使用 Vagrant 在 Virtualbox 中运行 CentOS VM。我已经这样做了 2 年,没有出现任何问题(最初是 CentOS 6,然后是 CentOS 7),但在过去的几个月里,我注意到我的虚拟机开始频繁锁定。并在再次启动时输出这些类型的消息

Message from syslogd@node1 at Jan 25 17:51:55 ...
 kernel:NMI watchdog: BUG: soft lockup - CPU#1 stuck for 23s! [C1 CompilerThre:7243]
Run Code Online (Sandbox Code Playgroud)

重复多次。

我认为发生的情况是 NMI 看门狗正在等待中断,并且有一个设定的接收时间,但是如果一个进程正在阻止事情并且它没有得到这个中断,它会假设出现了问题并引发内核恐慌,暂时锁定一些东西。

我遇到过增加NMIkernel.watchdog_thresh=30看门狗/etc/sysctl.conf或完全禁用 NMI 看门狗的选项。我应该考虑尝试其中之一吗?看门狗是否太急切了,或者我可能有一些潜在的问题?发生这种情况时,我的虚拟机上没有太多内容。

watchdog linux-kernel centos7 nmi

5
推荐指数
0
解决办法
2548
查看次数

标签 统计

nmi ×2

c ×1

centos7 ×1

interrupt ×1

linux-kernel ×1

osdev ×1

watchdog ×1

x86-64 ×1