Chinaunix首页 | 论坛 | 博客
  • 博客访问: 375552
  • 博文数量: 44
  • 博客积分: 2060
  • 博客等级: 上尉
  • 技术积分: 528
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-17 20:50
文章分类
文章存档

2011年(1)

2010年(28)

2008年(15)

分类:

2010-03-08 11:06:59

收到来自IOAPIC的中断消息后,LAPIC会将该中断交由CPU处理。和IOAPIC比较,LAPIC具有更多的寄存器以及更复杂的机制。但对于处理来自IOAPIC的中断消息,最重要的寄存器还是IRRISR以及EOI

1-4显示了x86平台上,IRRISR的格式:

1-4 IRRISR构成

PIC中的IRRISR不同的是,LAPICISRIRR均为256bit寄存器,对应x86平台上的256个中断vector,其中0~15为架构预留。

u  IRR:功能和PIC的类似,代表LAPIC已接收中断,但还未交CPU处理。

u  ISR:功能和PIC类似,代表CPU已开始处理中断,但还未完成。与PIC有所不同的是,当CPU正在处理某中断时,同类型中断如果发生,相应的IRR bit会再次置一(PIC模式下,同类型的中断被屏蔽);如果某中断被pendingIRR中,同类型的中断发生,则ISR中相应的bit被置一。这说明在APIC系统中,同一类型中断最多可以被计数两次(想不通什么意思?想不通就联想一下Linux可信信号)。超过两次时,不同架构处理不一样。对于Pentium系列CPUP6架构,中断消息被LAPIC拒绝;对于Pentium4Xeon系列,新来的中断和IRR中对应的bit重叠。

笔者:上图还有个TMR寄存器,即Trigger Mode Register,用于表示当前正在处理中断的触发模式。1level0edge。对于level触发的中断,当软件写EOI时,会被广播到所有IOAPIC,消息中含有中断的vectorIOAPIC收到后检查自己的PRT表,把相应RTERemote IRR位清零。

对于IRRx86 spec说:CPU准备处理中断时,IRR中最高优先级的bit被清零,ISR中对应bit被置一。这样说不能算错,但至少不准确。根据《Multi-Processor Computer System With Interrupt Controllers Providing Remote Reading》一文中APIC的实现,只有对于edge触发的中断,ISR对应bit置一时IRR相应 bit才清零。对于level触发,IRR中的bit保留到软件写EOILAPIC收到IOAPIC发出的Level-deassert消息后才清零。

如果你仔细看了前面关于Remote IRR的介绍,此时一定会产生一个疑问。这里说同类型中断发生两次,会同时PendingISRIRR的对应bit中。问题是,前面Remote IRR的异或逻辑保证了在写EOI前,新的中断不会发过来啊?呵呵,或许你想到答案了,这种pending两次的机制,只对edge触发中断有效。

PIC一样,LAPIC同样需要软件写EOI来知会中断处理的完成,不同的是,LAPIC中的EOI是一个32bit寄存器,如下图:

1-5 EOI寄存器格式

X86架构中,对EOI0表示中断处理完成。由上述几个寄存器相互配合,一个典型的LAPIC中断处理流程是:

对于Pentium4Xeon系列:

1.         通过中断消息的destination field字段,确定该中断是否是发送给自己的。

2.         如果该中断的delivery modeNMISMIINITExtINTSIPI,直接交由CPU处理。

3.         如果不为2)中所列的中断,置一IRR中相应的bit

4.         当中断被pendingIRRISR中后,根据TPRPPR寄存器,判断当前最高优先级的中断是否能发送给CPU处理。

5.         软件写EOI通知中断处理完成。如果中断为level触发,该EOI广播到所有IOAPIC(见前)。NMISMIINITExtINTSIPI类型中断无需写EOI

 

对于Pentium系列和P6架构:

1.         确定该中断是否由自己接收。如果是一个IPI,且delivery modelowest priorityLAPIC与其它LAPIC一起仲裁该IPI由谁接收。

2.         若该中断由自己接收,且类型为NMISMIINITExtINITINIT-deassert、或MP协议中的IPI中断(BIPIFIPISIPI),直接交由CPU处理。

3.         将中断pendingIRRISR,若该已有相同的的中断pendingIRRISR上,拒绝该中断消息,并通知IOAPIC “retry”

4.         Pentium4Xeon系列流程。

5.         Pentium4Xeon系列流程。

阅读(2108) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~