ver0.1
前言
我们已经讲了GIC的系统架构、GIC支持的中断类型、GIC的核心组件的系统架构,相信大家对GIC的硬件框架已经有了起码的了解。到这一站,我们要向GIC的深水区挺近。我们在介绍GIC核心组件的编程接口的时候提过一个观点,GIC各个组件编程的过程其实就是配置的过程,配置的核心目的就是为了解决:中断信号的路由问题、中断信号的优先级问题、中断信号的处理状态问题。本文我们先来聊聊第一个课题中断的路由这个课题。
本文涉及到的一些背景知识,关于ARM的Exception机制我们是做过专门讨论的,但是关于ARM的安全机制,我们还没有成文,只在部分文章中作为背景知识做过简要介绍。这里洗完大家能够谅解,毕竟我们是票友,不是专业写课件做培训的大神,精力实在是有限,不过后面我们会慢慢都会研究成文的,这里可以先看下前序文章顶一顶:
(1) [V-05] 虚拟化基础-异常模型(Exception)(AArch64)
(2) [A-09]ARMv8/ARMv9-Memory-内存地址空间(Translation Regimes) .
(3) [A-26]ARMv8/v9-GIC的中断类型
(4) [A-27]ARMv8/v9-GIC的核心组件(中断编程的基础组件)
正文
1.1 路由的概念
路由(routing)这个概念在计算机网络中比较常见,一般是指将数据从一个网络节点传输到另一个网络节点的过程。路由机制主要用于在不同的网络(如局域网、广域网)或者子网之间转发数据包,使得数据能够准确地到达目的地。就像现实生活中在一个复杂的交通网络中,车辆(数据包)需要通过一系列的道路(网络链路)和交叉路口(路由器等网络设备)才能到达目的地,路由就是规划这些车辆行驶路线的过程。
GIC也一样要面对这个问题,一方面要介绍大量来自外设和系统内部产生的中断信号,另外一方面也要思考如何最大效率而又不影响系统性能的情况下将这些中断信号进行妥善的处理。现代处理器CPU微架构,基于功耗、基于性能、基于工作场景的考虑已经变得越来越复杂,但是无论怎么呢变化都有一个共同的特点,那就是他们都是PE-Cores(如图1-1),每个PE-Core都可以完成独立的任务,最终实现并发的效果。
中断的路由配置就是要为每一个中断信号找到合适的PE-Core进行相应中断的处理,这个过程就是配置一条PATH(Distributor->Redistributor->CPU-Interfaces),如图1-2所示。