一、介绍
ARM 的 GIC(Generic Interrupt Controller,通用中断控制器)是 ARM 架构中用于管理和处理中断的硬件组件,特别为多核处理器系统设计,确保中断请求能被高效、可靠地分发和处理。
下面这个表格汇总了 ARM GIC 各版本的主要特点:
二、 GIC 的关键组成部分
GIC 主要由以下两个核心逻辑单元构成,它们协同工作以高效管理中断:
1. 分发器 (Distributor):
* 作为中断的“总调度中心”,接收所有来自外部设备或内部模块的中断请求。
* 对所有这些中断进行优先级排序,确保高优先级中断优先处理。
* 根据预设配置,决定将中断分发给哪一个或哪几个目标CPU核心。
2. CPU 接口 (CPU Interface):
* 每个CPU核心都有自己专属的CPU接口,它负责接收来自分发器的中断信号。
* 与CPU核心直接交互,向核心报告需要处理的中断。
* 负责处理CPU核心对中断的确认(ACK) 和完成通知。
三、 GIC 支持的中断类型
GIC 将中断分为不同类型,以便进行精细化管理:
中断类型 全称 特点
SPI (Shared Peripheral Interrupt) 共享外设中断 可由任意CPU核心处理,适用于连接整个系统共享的设备。
PPI (Private Peripheral Interrupt) 私有外设中断 特定于某个CPU核心,通常用于每个核心独有的定时器或性能监视单元。
SGI (Software Generated Interrupt) 软件生成中断 由软件写入特定寄存器触发,主要用于多个CPU核心之间的通信与同步。
LPI (Locality-specific Peripheral Interrupt) 特定位置外设中断 基于消息的中断(类似PCIe MSI),在GICv3及以后版本引入,具有可重新分配的特性。
四、 GIC 的关键特性
GIC 的功能远不止简单的中断路由,它还提供了许多强大特性:
* 优先级管理与抢占:GIC 支持为每个中断源设置优先级。高优先级中断可以抢占正在处理的低优先级中断,确保紧急任务得到即时响应。
* 中断屏蔽:允许软件选择性屏蔽(禁用) 某些中断,这在处理关键代码段或防止中断嵌套时非常重要。
* 安全扩展:与 ARM TrustZone 技术集成,可以为每个中断标记安全或非安全状态。安全世界的中断不会被打入非安全世界的软件,增强了系统安全性。
* 虚拟化支持:从 GICv2 开始引入硬件虚拟化支持,GICv3 和 v4 大幅增强。允许虚拟机监控程序(Hypervisor)高效地将虚拟中断直接注入到虚拟机中,极大降低了虚拟化环境下的中断处理开销和复杂度。
五、 Linux 内核对 GIC 的适配方式
Linux 内核通过 设备树(Device Tree) 和 GIC 驱动 完成硬件适配,无需用户手动配置:
- 设备树描述:在设备树中定义 GIC 的基地址、中断范围、支持的版本(如 compatible = "arm,gic-v3" ),内核启动时通过设备树识别 GIC 硬件参数;
- 驱动层抽象:内核通过 drivers/irqchip/irq-gic.c 等文件实现 GIC 驱动,向上提供统一的中断操作接口(如 request_irq() 申请中断、 free_irq() 释放中断),屏蔽不同 GIC 版本的硬件差异,让上层驱动(如网卡驱动、串口驱动)可直接调用通用接口处理中断。
GIC 的所有功能都通过读写其内存映射寄存器来配置和控制。软件开发人员(特别是操作系统和驱动开发者)需要:
1. 初始化 GIC:上电后配置分发器和各CPU接口。
2. 设置中断路由:指定SPI中断的目标CPU列表。
3. 设置优先级和掩码:为特定中断配置优先级和使能状态。
4. 编写中断服务例程:在CPU接收到中断后,识别中断号并执行相应处理。
六、 GIC 的应用场景
GIC 对于现代计算系统至关重要:
* 嵌入式系统:实时性要求高的工业控制、汽车电子,依赖GIC的优先级和可预测性。
* 移动设备:智能手机、平板电脑,处理众多外设中断的同时优化功耗。
* 服务器与高性能计算:管理大量CPU核心间的中断与通信,确保系统可扩展性。
* 虚拟化平台:为云数据中心提供高效的中断虚拟化,保证客户机性能。
七、 总结
ARM GIC 是 ARM 生态系统中的核心基础设施,通过其可扩展的分布式架构、精细化的中断分类与管理策略以及强大的虚拟化与安全支持,满足了从嵌入式设备到数据中心服务器等各种场景对中断处理的严苛需求。