CPU如何找到ISR并区分设备

时间:2010-04-10 02:21:44

标签: interrupt irq isr apic

我应该先分享我所知道的一切 - 那就是完全混乱。关于这个主题有几个不同的问题,所以请不要生气:)。

1)为了找到ISR,CPU被提供一个中断号。在x86机器(286/386及以上)中,有一个带有ISR的IVT;每个4字节大小的条目。所以我们需要将中断数乘以4才能找到ISR。所以第一堆问题是 - 我完全混淆了CPU接收中断的机制。为了引发中断,首先设备应该探测IRQ - 然后是什么?中断号在“IRQ”上向CPU传输?我还读过像数据总线上设置ISR地址的设备;什么呢?覆盖ISR的设备的概念是什么?有人可以告诉我几个CPU轮询中断的示例设备吗?它在哪里找到它们的ISR?

2)如果两个设备共享一个IRQ(这是非常可能的),它们之间的CPU有何不同?如果两个设备同时引发相同优先级的中断怎么办我知道会有相同类型和低优先级中断的屏蔽 - 但这种通信是如何在CPU和设备控制器之间发生的?我研究了PIC和APIC在这个问题上的作用,但是无法理解。

感谢阅读。 非常感谢您的回答。

2 个答案:

答案 0 :(得分:13)

答案 1 :(得分:4)

我在3年后遇到了这个问题。希望我能帮忙;)

Intel 8259A或简称“PIC”有8个引脚,IRQ0-IRQ7,每个引脚连接到一个器件..

让我们假设您按下键盘上的一个按钮..连接到KBD的IRQ1引脚的电压为高..所以在CPU中断后,确认中断bla bla bla ... PIC只是将IRQ线的数量加8,因此IRQ1表示1 + 8,这意味着9

所以CPU在向量表的第9个条目上设置它的CS和IP ..因为IVT是一个长数组,它只是将单元格数乘以4;)

CPU.CS = IVT [9] .CS CPU.IP = IVT [9] .I​​P

ESR通过I / O端口处理设备;) 抱歉我的英语不好..虽然我是阿拉伯人:)