【发布时间】:2013-12-19 17:53:14
【问题描述】:
我试图劫持定时器中断。一位同事告诉我,IDT(Interrupt Descriptor Table)上的中断0x08就是定时器。诅咒我检查并看到两个可能的答案:this 说 8 是 real clock timer 和 this 说这是 Double Fault 中断 - 我决定相信他,而不是浪费时间进一步检查。在终于控制了 IDT 并替换了中断 8 之后,什么都没有发生。
- 那么发生了什么?
- 此中断是否随着时间的推移从定时器更改为双重故障?
- 此中断在 ARM/Intel/etc. 上是否有不同的用途?
我的代码是一个内核模块,它劫持中断 8 并在每次中断到达时简单地执行printk 命令。我运行了大约 25 分钟 - dmesg 没有输出。
以防万一:我在 VM 上运行带有内核 3.8 的 Linux Mint。主机有 Intel i5。
【问题讨论】:
-
内核不是已经在使用它来进行进程调度了吗?
-
可能 - 我现在期待内核崩溃,然后从我的函数调用原始函数(代理原始处理程序)。但现在似乎什么都没有发生。
-
@roe:在大多数现代内核上,APIC timer 用于此目的。更加灵活和精确,而且它是针对每个 CPU 而不是全局的。
-
@duskwuff,看,这就是我做内核调度工作已经有多久了... :) 我太老了 ;)
标签: c timer linux-kernel x86-64