IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    lightseed发表于 2010-12-13 20:24:00
    love 0

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

    by lightseed

    12/13/2010

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

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

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

    1. 一个或者多个中断请求产生的时候,8259把对应的IRR(interrupt 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处理,最后发EOI(end of interrupt)给8259。8259于是清掉ISR。

    整个中断过程结束。

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

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

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

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



沪ICP备19023445号-2号
友情链接