1 中断术语
1.中断状态
n Inactive中断尚未激活或挂起
n Pending中断已经由硬件或者软件产生,正等待目标CPU处理
n ActiveCPU已经应答(Acknowledge)来自GIC的中断,该中断正在被CPU处理但尚未完成。
n Active& Pending CPU正在处理该中断,此时GIC又收到来自该中断源的中断。
2.中断类型
n PeripheralInterrupt
外设中断是通过一个物理信号发送到GIC。外设中断可以是电平中断或边沿中断。
u Privateperipheral interrupt
针对某一个CPU的中断
u Sharedperipheral interrupt
masturbate for life任意CPU组合的中断
n Software-GeneratedInterrupt(SGI)
软件产生的中断是通过软件写GICD_SGIR产生的。SGI一般被用作IPI核间中断(Inter-processorInterrupt),用于核间通讯。
SGI具有边沿中断的特性。
GICC_IAR中的CPUID被用来标识哪个CPU发出的中断请求。
n VirtualInterrupt
n MaintenanceInterrupt
3. 中断处理模型
n 1-N模型
只有一个CPU处理该中断。系统需要实现一种机制决定哪个CPU处理该中断。
n 1-1模型
所有的CPU都收到该中断。当一个处理器应答该中断,只是当前CPU上的该中断挂起状态被清除。其他CPU上的中断挂起状态仍然不变。
4.伪中断 (SpuriousInterrupt)
可能存在GIC通知一个处理器这个中断不在需要的情况。在这种情况下,处理器去应答该中断时,GIC返回一个特殊的中断号,我们称之为伪中断。可能发生这种情况的原因如下:在处理器应答该中断之前,软件改变了该中断的优先级、软件禁用该中断或者改变了目标处理器;1-N中断也是一种情况。
5.处理器安全状态和安全及非安全的GIC访问
6. Banking
Interrupt Banking
在多处理器系统中,对于PPI和SGI,GIC可以有多个中断使用同一个中断号。这样的中断成为bankedinterrupt,该类中断通过中断号和相关联的CPUinterface可以唯一标识。
Register Banking
是指在同一个地址实现多个寄存器,即多个寄存器拥有相同的地址。在多处理器系统中,为bankedinterrupt的相关寄存器在每个处理器上提供一个独立的copy。
在ARM结构中最常见的Register Banking是R8~R12,在不同模式下,使用不同的物理寄存器
GIC架构可以分为Distributor,CPUinterface和VirtualCPU interface三大部分。VirtualCPU interface只在支持VirtualizationExtensions的系统存在。
Ø Distributor
Distributor主要完成中断优先级处理(interrupt prioritization)和分配(distribution)中断
到相应的CPU interface。
Ø CPU interface
主要完成中断优先级屏蔽(prioritymasking)和抢占处理(preemptionhandling)。
Distributor管理所有的中断源,决定每个中断优先级,并为每个CPUinterface选择出最高优先级的中断。一个Distributor可以支持8个CPUinterface。
Distributor提供如下编程接口:
Ø 使能挂起中断是否传递(forward)到CPUinterface
DistributorControl Register
2020高考真题试卷
Ø 使能和禁用任意中断
InterruptSet-Enable Registers/ Interrupt Clear-Enable Registers
Ø 设定任意中断优先级
Interrupt PriorityRegisters
Ø 设置任意中断的目标处理器(target processor list)
InterruptProcessor Targets Registers
Ø 设置中断为电平触发(level-nsitive)或者边沿触发(edge-triggered)英语学习光盘
Interrupt ConfigurationRegisters
Ø 设置中断为0组或者1组
Interrupt GroupRegisters
Ø 传递(Forwarding)任意SGI到一个或者多个目标处理器(target processor)
Software GeneratedInterrupt Register
Ø 查看任意中断的状态
Ø 提供软件方式设置或清除任意PI(peripheral)的挂起状态
InterruptSet-Pending Registers/ Interrupt Clear-Pending Registers
SGI Clear-PendingRegisters/ SGI Set-Pending Registers
daum
中断使用中断号(Interrupt ID)来标识。每个CPUinterface可以处理多达1020个中断。The Banking of SPI and PPI增加了Distributor支持的中断数目。
GIC将ID_0~ID_1019分为:
Ø SPI的中断号为ID_32~ID_1019
英语广播在线收听Ø Banking interrupt 的中断号ID_0 ~ ID_31
poemsn SGI 中断号为ID_0 ~ ID_15
一般被用来作为核间中断IPI(Inter-ProcessorInterrupt)。accordingly
n PPI 中断号ID_16 ~ ID_31
2.3 CPU interface
每个CPU interface为连接到GIC上的一个processor提供接口。每个CPU interface提供如下编程接口:
Ø 使能通知processor中断请求
CPU InterfaceControl Register
Ø 应答中断
InterruptAcknowledge Register
Ø 指示中断处理完成
End of InterruptRegister
Ø 设置processor的中断优先级屏蔽(Interruptpriority mask)
Interrupt PriorityMask Register
Ø 定义processor中断抢占策略
Ø 为processor决定最高优先级的挂起中断
Highest PriorityPending Interrupt Register
CPU interface根据中断优先级屏蔽和中断抢占策略决定将最高优先级的挂起中断的中断请求发给processor。
3 中断处理及优先化(Prioritization)
概述
本章的主要内容如下:
Ø 中断处理(interrupthandling)主要描述
n GIC如何识别中断
n 软件如何通过编程GIC来配置和控制中断
n GIC处理任意CPU interface中断的状态机
n CPU的异常模式下如何与GIC交互
Ø 优先化(prioritization)
n 配置和控制每个中断的优先级
n 挂起中断的执行顺序
n 中断是否对目标CPU可见的决定因素:
u 中断优先级屏蔽
u 优先级分组
u 抢占当前activeinterrupt
3.1.1 多处理器(MP)系统中处理不同类型的中断
GIC支持外设中断(硬件中断)PI和SGI中断。在MP系统中的处理方式不同:SGI使用N-N模型,PI使用1-N模型。
3.1.2 识别GIC支持的中断
软件获取支持的中断信息:
Ø 读GICD_TYPERn。GICD_TYPER中的ITLinesNumber决定GICD_ISENABLERn的数目,因此决定了GIC支持的最大SPI的数目。所以,GIC支持的中断总数(ITLinesNumber+1)。
Ø 写0到GICD_CTLR禁止GICDistributor将中断传递给CPU interface。
Ø 对于GICD_ISENABLERn,从GICD_ISENABLE0开始。
n 写0xffffffff到GICD_ISENABLERn
n 然后读GICD_ISENABLERn,相应位为1代表支持该中断ID。
类似的软件也可以通过读取GICD_ICENABLEn来获取相应中断信息。
Ø 对于GICD_ICENABLERn,从GICD_ISENABLE0开始。
n 写0xffffffff到GICD_ICENABLERn,禁用所有中断。成考英语作文
n 然后读GICD_ISENABLERn,相应位为1表示中断被永久使能了。
n 写1到GICD_ISENABLERn,则相应位重新被使能。
3.2 通用中断处理
当GIC接收一个中断,将其状态置为pending。重新产生挂起中断不影响该中断状态。中断处理的顺序:
prince edward island1. GIC决定该中断是否被使能,若没有被使能对GIC没有影响。
2. 对于每个pending中断,GIC决定目标处理器。
3. 对于每个处理器,Distributor根据他拥有的每个中断优先级信息决定最高优先级的挂起中断,将该中断传递给目标CPU interface。
4. GIC Distributor将一个中断传递给CPUinterface后,该CPU interface决定该中断是否有足够的优先级将中断请求发送给CPU。
5. 当CPU开始处理该异常中断,它读取GICC_IAR应答该中断。读取的GICC_IAR获取到中断ID,对于SGI,还有源处理器ID。中断ID被用来查找正确的中断处理函数。GIC识别读过程后,将改变该中断的状态:
a) 如果该中断在pending状态时,产生了另一次中断,中断状态将从pending转化为pending &active。
interesting