现在我遇到了关于Linux NMI Watchdog的问题.我想使用Linux NMI看门狗来检测和恢复操作系统挂起.所以我将"nmi_watchdog = 1"添加到grub.cfg.然后检查/ proc/interrupt,每秒触发NMI.但是在我加载了一个带死锁的模块(双获取自旋锁)之后,系统完全挂起,什么也没发生(从不恐慌!).看起来nmi看门狗不起作用!
然后我读了Documantation/nmi_watchdog.txt,它说:
请注意,使用本地APIC时,它产生的NMI中断频率取决于系统负载.当地的APIC NMI监管机构缺乏更好的资源,使用" 周期无 ""事件.
什么是" 周期无恙 "事件?
它补充道
但是如果你的系统锁定了除"hlt"处理器指令之外的任何东西,监视器将很快触发,因为"循环无关"事件将在每个时钟滴答时发生...如果它锁定在"hlt",那么你就出局了好运 - 事件根本不会发生,看门狗不会触发.
似乎看门狗在处理器执行"hlt"指令时不会触发,然后我在" Intel 64和IA-32架构软件开发人员手册,Volumn 2A "中搜索"hlt ",它描述如下:
停止指令执行并将处理器置于HALT状态.启用的中断(包括NMI和SMI),调试异常,BINIT#信号,INIT#信号或RESET#信号将恢复 执行.
然后我输了......
我的问题是:
我的操作系统是Ubuntn 10.04 LTS,Linux-2.6.32.21,CPU Pentium 4双核3.20 GHz.
我没有阅读关于nmi看门狗的全部源代码(没时间),如果我无法理解nmi看门狗是如何工作的,我想用性能监控计数器中断和处理器间中断(由APIC提供)来代替发送NMI nmi看门狗.
有人能帮助我吗?谢谢.
如果一个进程持有一些自旋锁或信号量,并意外退出(例如,被linux杀死),linux会正确释放这些锁吗?如果linux没有做到这一点,为什么?
我想在谓词规则的主体中使用全称量词,例如
A(x,y) <- ?B(x,a), C(y,a)。
这意味着只有对于来自 C(y, a ) 的每个a,B(x, a ) 总是有 x 匹配 (x, a ),那么 A(x,y) 为真。
由于在 Datalog 中,规则体中的每个变量默认都是存在量词,因此a也将是存在量词。我应该怎么做才能在谓词规则的主体中表达全称量词?
谢谢你。
PS 我使用的 Datalog 引擎是 logicblox。
linux ×2
apic ×1
datalog ×1
kill-process ×1
process-exit ×1
semaphore ×1
spinlock ×1
watchdog ×1