IRQ与APIC

2019-04-15 17:57发布

博文开始前先说点废话,这两天脑仁疼,想早点休息,又怕睡早了凌晨醒了睡不着,干脆写写博文,莫名的心酸,多喝热水。下面进入正题: 总结BIOS学习的点点滴滴,由于水平有限,难免存在问题,望指正。同时感谢CSDN提供的平台。 IRQ 中断的诞生: 计算机早期工作方式为查询式的传输,它的优点是硬件开销小,使用起来比较简单。但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了主机的利用率。 为了解决这个矛盾,我们提出了中断传输方式。
中断处理的定义 :
当CPU执行一条现行指令的时候,如果外设向CPU发出中断请求,那么CPU在满足响应的情况下,将发出中断响应信号,与此同时关闭中断,表示CPU不在受理另外一个设备的中断。这时,CPU将寻找中断请求源是哪一个设备,并保存CPU自己的程序计数器(PC)的内容。然后,他将转移到处理该中断源的中断服务程序。CPU在保存现场信息,设备服务(如交换数据)以后,将恢复现场信息。在这些动作完成以后,开放中断,并返回到原来被中断的主程序的下一条指令。
中断源:中断源,中断是指由于某种事件的发生(硬件或者软件的),计算机暂停执行当前的程序,转而执行另一程序,以处理发生的事件,处理完毕后又返回原程序继续作业的过程。中断是处理器一种工作状态的描述。我们把引起中断的原因,或者能够发出中断请求信号的来源统称为中断源。
中断服务程序:中断服务程序,处理器处理“急件”,可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的,这种处理“急件”的程序被称为——中断服务程序。
相信接触过计算机或者是接触过单片机的对这些名词应该都不会陌生,下面会简单的介绍一下中断处理的过程


下面罗列一下中断的常用配置: IRQ编号 设备名称                   用途                                     IRQ编号        设备名称            用途
IRQ0 Time                           电脑系统计时器                     IRQ8                 CMOS Alert            即时时钟 IRQ1 KeyBoard                  键盘                                    IRQ9                Redirect IRQ2     与IRQ2相连
IRQ2 Redirect IRQ9          与IRQ9相连                           IRQ10              Reversed             建议网卡使用
IRQ3 COM2                           串口设备                             IRQ11          Reversed             建议显卡使用
IRQ4 COM1                           串口设备                             IRQ12                PS/2Mouse             接PS/2鼠标
IRQ5 LPT2                           建议声卡使用                     IRQ13         FPU                     协处理器
IRQ6 FDD                           软驱传输控制用                     IRQ14                Primary IDE             IDE0传输控制
IRQ7 LPT1                          打印机传输控制                     IRQ15                Secondary IDE     IDE1传输控制

早期计算机只有8个中断,但随着计算机的发展,外设的增加,8个中断已经不能满足我们的需求了,如上所罗列的,更是使用了15个中断,那么,这15个中断是如何实现连接的呢?
通过两个中断控制芯片的级联可以实现15个中断的使用。 中断的优先级:
一般配置的中断请求的优先级如图,优先级应是从0到15排序,但由于中断控制器的级联,使IRQ8-15占据了IRQ2的位置,
固实际的优先级如上表所示。
中断嵌套: 是指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就是中断嵌套。

这儿需要说明一下,在前面说到,进入中断后为避免紊乱,会有一个锁中断的动作,那么,又如何实现中断嵌套?实际上,在中断服务子程序中,第一个语句都是解除锁中断,这样就可以实现中断的嵌套使用了。

IRQ的配置:


在中断配置中涉及到了一部分的寄存器,下面就简单的提一下: 3CH,3DH:这两个寄存器分别用来存放的是中断使用的是IRQX, INT#A/B/C/D 。

如图,可以通过PCI的访问方式来查看这两个寄存器的值
Bus:25;function:0

DxxIP: Device xx Interrupt Pin Register

通过DxxIP这个寄存器可以配置设备使用哪一个pin。该寄存器的地址为base address +3118。
这个值对应的则是3CH当中的值。

DxxIR—Device xx Interrupt Route Register



通过DxxIR这个寄存器可以配置设备所用的PIN对应哪一个PIRQ(n)。

PIRQ[n]_ROUT—PIRQ[A,B,C,D] Routing Control Register




通过PIRQ这个寄存器可以配置PIRQ(n)分别对应的是哪一个IRQ。这个寄存器当中的值对应的则是3DH当中的值。
在之前的DxxIP,DxxIR,PIRQ(n)当中都涉及到了一个基地址,这个基地址在:

从上面顺下来发现,物理pin到PIRQ,再到IRQ,十分简单的一个传递配置过程。 我在学这个的时候,还根据实际的情况,在dos,ru已经OS下进行校验,结果也是正确无误的。

IRQ Routing Table
IRQ 的另外一种配置方式:
下面的这张表是最核心的内容,张表放在F segment中,可以通过搜索‘$PIR’找到。



APIC APIC(Advanced Programmable Interrupt Controller): “高级可编程中断控制器”。PIC在很早以前就被淘汰了,取而代之的是APIC。由于APIC可以兼容PIC,所以在很多单CPU电脑上,我们看到的实际是APIC的兼容PIC模式。APIC主要应用于多CPU电脑,是为了解决IRQ太少和处理器间中断而产生的。一个APCI最多可以提供24个IRQ。所以,当发现电脑有IRQ15以上时,说明电脑使用了APIC。当您发现电脑只有IRQ16以下时,电脑并不一定没使用过APIC。可能处于APIC的兼容PIC模式。当然,通过使用多个I/O APIC(最多8个),可以使IRQ达到上百个。
APIC的组成
APIC主要由两部分组成,一个叫LAPIC(Local APIC, 本地高级中断控制器),一个叫I/O APIC(输入/输出 高级中断控制器)。早期还有APIS串行总线控制器,后来被放到系统总线中了。 LAPIC位于CPU中。I/O APIC位于主板南桥芯片中。在一个典型的多CPU电脑中,通常有一个I/O APIC 和多个LAPIC,它们相互配合,形成一个中断的分发网络。 LAPIC能够智能的决定是否接受总线上传递过来的中断信息,还可以处理本地中断。CPU通过彼此的LAPIC发送中断,在某种程度上彼此进行控制。I/O APIC,主要是接收外设的中断信号,并翻译成消息,选择发给接收中断请求的CPU的LAPIC。



ACPI的中断映射:

APIC通过修改该单元的寄存器来实现控制,但APIC的相关寄存器被映射到了物理地址。
Local APIC默认映射到物理地址0xFEE0 0000
IO APIC     默认映射到物理地址0xFEC0 0000
APIC可以通过软件来设置每一个pin的中断向量、中断优先权、屏蔽位、触发方式、中断管脚的极性、传送方式、传送状态、目的地等,且每个都可以单独设定。

 APIC的优点
1、 信息传输方式不同。
2、 独特的优先级控制。中断优先级不是由连接在I/O APIC哪个管脚上来决定的。I/O APIC会使用内部的PRT(可编程重定向表) 把外设的中断请求变为中断请求信息,发送给一个或多个CPU的LAPIC。每个I/O APIC都对应一个重定向表项(RTE), 每一项都有可以被单独编程以指明中断向量和优先级、目标处理器以及选择处理器的方式。
3、中断数量为24个。
4、支持多个I/O APIC(最多8组)。
5、 分隔使用 IRQ。

热门文章