【ARMv8/v9 GIC 系列 1.4 -- GIC 中断分类 SGI | PPI | SPI 及中断检测流程】


请阅读【ARM GICv3/v4 实战学习 】


GIC 中断分类

ARMv9架构继续支持ARMv8引入的中断管理机制,包括SPI(共享外设中断)、PPI(每处理器中断)和SGI(软件生成的中断)。这些中断类型为不同的应用场景提供了灵活性和高效的中断处理方式。此外,GIC V3中断控制器的组成部分包括:distributor,Redistributor,cpu interface,ITS。

GIC V3中断控制器和处理器核心之间的关系图如下:

在这里插入图片描述

图 1-1

SGI(Software Generated Interrupts)

  • 定义:SGIs是从015的中断编号,为软件生成的中断,主要用于处理器间的通信(IPC)。ARM架构允许软件触发这些中断,以便一个处理器可以向一个或多个处理器发送信号。
  • 应用举例
    • 操作系统调度:操作系统可以使用SGI来实现任务或线程的调度。例如,当一个处理器上的任务需要迁移到另一个处理器时,OS可以通过SGI来触发目标处理器的调度代码。
    • 同步机制:在多核处理器系统中,SGI可用于实现锁或屏障等同步机制。例如,当所有处理器都必须在继续之前达到某个执行点时,可以使用SGI来通知所有处理器。

在这里插入图片描述在这里插入图片描述

PPI(Per-Processor Interrupts)

  • 定义:PPIs是从1631的中断编号,这类中断是每个处理器专有的。这意味着每个处理器都有自己的一组 PPI,而这组PPI仅对该处理器可见。
  • 应用举例
    • 定时器中断:系统定时器会为每个处理器生成定时器中断,这类中断作为PPI处理,确保每个处理器可以基于自己的定时需求独立触发和处理定时器中断。
    • IPI(Inter-Processor Interrupts):当一个处理器需要与另一个处理器通信时(例如,通知它处理一些任务或数据),可以通过发送IPI来实现,IPI是一种特殊的PPI。

SPI(Shared Peripheral Interrupts)

  • 定义:SPIs是从32开始的中断编号,用于系统中的外设共享中断。这意味着SPI可以被系统中的任何处理器接收。
  • 应用举例
    • 网络控制器中断:当网络控制器接收到一个新的网络包并且需要处理器进行处理时,会触发一个SPI来通知处理器。
    • 磁盘I/O中断:在磁盘操作完成时,磁盘控制器会通过SPI通知处理器数据已经准备好。

中断检测流程

GICv3中断号分配对于每个中断,从产生到处理再到结束,是有一个完整的生命周期的。

在这里插入图片描述

图 1-2

物理中断生命周期

  • generate:外设或软件发起一个中断;
  • distribute:中断经过分组,优先级仲裁等,发送给对应的 CPU interface;
  • deliverCPU interface将中断发送给 core;
  • activate:当CPU core 开始响应中断,GIC将最高激活优先级的中断设置为激活;
  • priority drop: core发信号给GIC,通知最高优先级中断,GIC可以重置优先级;
  • deactivation:清除中断.

SPI 中断检测流程

  • 外设发起SPI中断,GIC检测到这个中断,并标记为 Pending状态
  • Distributor对所有处于Pending状态的中断确定目标CPU
  • 对每个CPU,Distributor会从众多Pending状态的中断中,选择优先级高的发送到对应的Redistributor
  • Redistributor将中断发送到目标CPU的CPU Interface上
  • CPU Interface将满足要求的中断发送给CPU
  • CPU进入中断异常后,内核中断处理程序读取GICC_IAR寄存器来响应该中断,寄存器返回硬件中断号
  • CPU处理完中断服务后,通过写GICC_EOIR寄存器,来给GIC发送一个EOI完成信号

PPI 和SGI中断检测流程

  • GIC检测到PPI或者SGI中断,并标记为Pending状态
  • Redistributor选择优先级高的中断发送到对应的CPU Interface
  • CPU Interface将满足要求的中断发送给CPU
  • CPU进入中断异常后,内核中断处理程序读取 GICC_IAR 寄存器来响应该中断,寄存器返回硬件中断号
  • CPU处理完中断服务后,通过写 GICC_EOIR 寄存器,来给GIC发送一个EOI完成信号

LPI中断检测流程:

forwarding方式,由以下寄存器实现

  • GICR_SERLPIR:将指定的LPI中断,设置为Pending状态
  • GICR_INVLPIR:将指定的LPI中断,清除Pending状态。寄存器内容和 GICR_SERLPIR一致
  • GICR_INVLPIR:将缓存中,指定LPI的缓存给无效掉,使GIC重新从memory中载入LPI的配置
  • GICR_INVALLR:将缓存中,所有LPI的缓存给无效掉,使GIC重新从memory中,载入LPI中断的配
  • GICR_SYNCR:对Redistributor的操作是否完成

中断小结

  • SPI 主要用于外设与处理器间的通信,是共享的,意呅着任何处理器都可以接收和处理SPI中断。
  • PPI 是处理器专用的中断,用于处理每个处理器独有的事件,如定时器中断。
  • SGI 用于处理器间直接的通信,支持软件触发,适合于实现快速的任务调度或同步机制。
    这些不同类型的中断为ARMv9架构提供了灵活而强大的中断管理能力,支持复杂的多核处理器系统和高效的硬件资源利用。

推荐阅读
https://blog.csdn.net/wyy4045/article/details/104827111
https://www.sohu.com/a/771753252_121124377

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
armv8armv9是英国ARM公司推出的两个处理器架构,用于移动设备、嵌入式设备和服务器等领域。在这两个架构中,异常中断GIC (Generic Interrupt Controller) 是非常重要的主题。 异常中断是指当系统发生某种事件时,处理器暂停当前任务,转而处理优先级较高的任务。异常中断包括两种类型:同步异常和中断异常。同步异常是由指令执行时产生的,如除零异常、非法指令异常等。中断异常是由外部事件触发的,如定时器中断、外设中断等。 在armv8armv9架构中,异常的处理是通过异常向量表实现的。异常向量表是一个固定大小的表格,其中包含不同类型异常的处理函数的地址。当发生异常时,处理器会根据异常类型在异常向量表中查找相应的处理函数,并跳转到该函数执行异常处理。 GIC是一个用于处理中断的控制器,它负责管理和分发中断信号给相应的处理器核心。在多核处理器中,GIC可以实现中断的负载均衡和处理器间的中断共享。GIC具有多个中断输入通道,每个通道对应一个中断引脚。当外部设备发生中断时,通过相应的中断引脚将中断信号发送给GIC,然后GIC中断信号分发给对应的处理器核心。 armv8armv9架构中的GIC支持多种中断处理模式,包括中断屏蔽、中断优先级配置和中断传递方式等。GIC还可以实现中断的共享和抢占,以提高中断的处理效率和可靠性。 总而言之,armv8armv9架构中的异常中断GIC是处理器架构中非常重要的专题。通过学习异常中断的处理和GIC的功能,可以更好地理解和掌握armv8armv9架构的中断处理机制,提高系统的可靠性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公CodingCos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值