- 论坛徽章:
- 4
|
zylthinking 发表于 2013-01-31 16:43
汗, 我刚想明白, 结果发现你已经回了。。。。。。。。。
我正在那边拍砖呢,你把我call这边来了。
8259那个我看不明白你在疑虑什么,多个中断并成一个是完全有可能发生的。
因为8259有个保存中断的寄存器,所以边沿触发的引脚,想关就关,不会来N个中断,一个都不响应,造成硬件瘫那。
但是IO APIC没有这个保存中断的寄存器,所以对于边沿触发的引脚,不是马上就关的,它的逻辑是:
1)disable intr只是找个变量做个标记就返回了,没有任何硬件操作
2)硬件中断第一次。记录下来在disable intr和enable intr之间,发生过中断这个事实,记录于软件还是local APIC忘了。
并且在看到1)中已做的标记后,将真正关闭这条中断线。
3)硬件中断第二,三,四...次。由于已经关闭了中断线,所以软件,硬件都将永远不会知道。
4)enable intr开中断时:若没有发生2)3),则操作为简单的取消这个标记;若发生了2)3),则除取消标记外,还将响应2)中记录下来的那一次中断。
这样保证了关中断期间,能知道发没发生过中断,至于中断多少次倒不是关键。
kernel害怕的是磁盘那种驱动,在intr的响应函数中将下达下一个IO命令。如果关中断期间的中断全部丢失,一个都不响应的话,磁盘就将挂那瘫掉很长时间,直到IO request超时。 |
|