【我所认知的BIOS】->深入理解IRQ7

【我所认知的BIOS】->深入理解IRQ7

by lightseed

12/13/2010

这篇文章的线索是因为偶然间发现自爱DOS下面,IRQ7对应的中断服务程序(ISR)只有一个Iret.那我不经会问,这是为什么呢?因为在BIOS下面IRQ7是有对应的ISR的。

这个问题归根结底是由于8259的中断产生机制造成。

简单回顾一下8259中断的产生过程。共分了6步:

1. 一个或者多个中断请求产生的时候,8259把对应的IRRinterrupt request register)置起来。

2. 8259评估这些中断请求,如果是可以的话,发送INT信号给CPU

3. CPU收到INT后,回发INTA#8259

4. 在接收从CPU发来的INTA#的过程中优先级最高的IRR会被填入到ISR中去。同时IRR的对应位被8259清掉。(不过这这个INTA#的过程汇总,8259并不会把数据放到DATA bus上去。)

5. CPU触发第二个INTA#,在这个过程中,8259把数据放到data bus上去,CPU同时从bus上读取数据。

6. 数据传输完成,CPU解析数据并进入到对应的interrupt service routing处理,最后发EOIend of interrupt)给82598259于是清掉ISR

整个中断过程结束。

根据8259 datasheet的说明,有这样一种可能性。在第③步发生了一种特殊情况,从第③到第④步的时候,并没有interrupt request了。(比如说中断请求太短),这样的话两片8259均会把中断7填到data bus上去。看上去就想是触发了IRQ 7了一样。

我想也正是这个原因,BIOSDOS都对IRQ 7对应的ISR做了特殊的处理。比如说,BIOS的里面的IRQ7对应的ISR什么动作都没做。DOSIRQ7对应的ISR被直接替换成了IRET.

不过上面都只是我对8259 datasheet的研究的时候发现的,也纯粹是理论上的理解。真实原因也许不是这样个原因。

以上整个过程在后续的ICH和最新的南桥spec沿用了同样的规则。

你可能感兴趣的:(dos)