ARM架构Generic Interrupt Controller(GIC)详解之术语介绍
GIC的作用中断分组 interrupt grouping安全性扩展 Security Extensions中断处理模型 Models for handling interrupts虚假中断 Spurious interrupts中断复用 Banking。
在上一篇博文ARM通用中断控制器GIC(generic Interrupt Controller)简介中,笔者对GIC做了一个整体的简介,接下来笔者将对GIC中的一些细节问题进行研究学习,首先要介绍的是GIC中支持的一些技术特性,比如中断模型(1-N/ N-N)以及中断复用(banked)等概念。
GIC术语介绍
GIC的作用
首先回顾上文,GIC的作用可以总结为:
- 为与GIC相连的处理器处理中断源(handling all interrupt sources)
- 适用于单核或者多核的一个可编程、通用的中断控制器接口
下面将介绍中断的一些术语和特性。
中断分组 interrupt grouping
GIC将每个中断分为Group 0 或 Group 1:
- 对于Group 0 中断,GIC使用 IRQ 或者 FIQ的异常请求将中断转发到目标core中。
- 对于 Group1 中断,GIC只能使用IRQ异常请求。
- 对于中断优先级的处理,GIC对Group0 和 Group1使用同样的方案。
- 对于一些Group 0 的中断,可以将其配置锁定。
interrupt grouping在所有的GICv2中均已实现,对于GICv1,只在其安全扩展(GIC Security Extensions)下实现。
安全性扩展 Security Extensions
在ARMv7中,安全性扩展是可选的配置,ARM安全扩展通过以下方式促进安全应用程序的开发:
- 将硬件安全特性集成到体系结构中
- 提供安全的虚拟内存空间,由处于安全状态的内存访问访问
- 提供非安全的虚拟内存空间,由非安全状态的内存访问访问。
当实现GIC安全扩展的GIC连接到实现ARM的处理器时: - Group 0 中断是安全Secure中断,Group1是Non-Secure非安全的中断。
- 处理器访问GIC中的寄存器的行为取决于访问是安全的还是非安全的。非安全访问只能读写非安全中断对应的信息。安全访问可以读写与非安全中断和安全中断相对应的信息。
- 安全系统软件可以分别将每个实现的中断定义为安全的或非安全的。
- 非安全中断只能向目标处理器发出IRQ中断请求的信号。
- 安全中断可以向目标处理器发出IRQ或FIQ中断请求的信号。
- 安全的软件可以安全地管理中断源,而不会受到干扰不安全的软件。
中断处理模型 Models for handling interrupts
在ARM多处理器实现中,有两种中断处理模型:
- 1-N模型: 只有一个处理器能处理当前中断,当一个中断被编程为转发到多个目标core中时,系统必须实现一种机制来决定让其中一个core处理该中断。
- N-N模型:所有处理器都能单独接收中断。当某个core确认了中断时,该中断在该CPU interface的pending状态会被清除,但是其他core对应的CPU interface中该中断的pending状态将不受影响。
虚假中断 Spurious interrupts
当GIC已经给目标core发送中断信号,但是该中断已经不再被需要时,当目标core确认中断时,GIC将返回一个特殊的中断ID,比如1023,来表明当前中断是个虚假中断,以下情况可能会导致目标core收到虚假中断:
- 在处理器确认中断之前:
- 软件操作改变了中断的优先级
- 软件disable了该中断
- 软件改变了该中断的target处理器
- 对于1-N中断,若该中断指定了多个目标core,其中一个core确认了中断后,其余core将收到虚假中断。
中断复用 Banking
在ARM架构中Banking有特殊的含义,笔者理解为复用:
- 中断复用Interrupt banking:在多处理器系统中,对于PPI和SGI来讲,GIC可以处理多个带有相同中断ID的中断,这样的中断叫做** banked interrupt**,通过将中断ID和目标处理器的CPU ID结合在一起,从而可以被当做是独一无二的中断。
- 寄存器复用Register banking:在同一个地址上可以存在多个寄存器的备份,这个称为寄存器复用:
- 在多处理器系统中,同一个寄存器分别为每个处理器对应的 banked interrupts提供一个独立的备份
- GIC实现了安全扩展,同一个寄存器分别存在安全Secure和非安全Non-Secure的寄存器备份。
参考文档: ARM Generic Interrupt Controller Architecture
Specification
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)