GIC Partitioning
The GIC logical components
GICv3体系结构由一组逻辑组件组成:
- A Distributor.
- A Redistributor for each PE that is supported.
- A CPU interface for each PE that is supported.
- Interrupt Translation Service components (ITS), to support the optional translation of
events into LPIs.
Distributor、Redistributor和ITS统称为IRI
CPU interface 在所有实现的异常级别处理物理中断如下:
- 转换为LPI的中断可选择通过ITS路由到Redistributor 和CPU interface.
- PPI直接从源路由到本地Redistributor。
- SPIs通过Distributor路由到目标Redistributor和相关的CPU interface。
- SGI由软件通过CPU interface和Redistributor生成。然后,它们通过 Distributor到一个或多个目标Redistributor和相关联的CPU interfaces。
在GICv3中,ITS是一个可选组件,它将事件转换为物理LPI。
- 通过访问Redistributors中的寄存器支持直接LPI。
- LPI支持由ITS提供。
一个实现只能支持其中一种方法。
在GICv4中,必须包含至少一个ITS,以支持虚拟LPI的直接注入。
包含ITS的实现中的GI:
不包含ITS且支持直接LPI的实现中的GIC:
Distributor
Distributor执行中断优先级排序,并将SPI和SGI分发到连接到系统中PE的Redistributors和CPU interfaces。Distributor寄存器由GICD_前缀标识。
GICD_CTLR为以下各项提供全局设置:
- 启用affinity routing
- 禁用security
- 启用Secure and Non-secure Group 1中断.
- 启用Group 0中断
对于SPIs,Redistributors提供了一个编程接口,用于:
- 启用或禁用SPI。
- 设置每个SPI的优先级。
- 每个SPI的路由信息。
- 将每个SPI设置为电平敏感或边缘触发。
- 生成基于消息的SPI。
- 将每个SPI分配给中断组。
- 控制SPI的pending和actiive状态。
Interrupt translation service, ITS
ITS是GICv3体系结构中的一种可选硬件机制,它将LPI路由到适当的Redistributor。软件使用命令队列配置ITS。内存中与ITS关联的表结构将与设备关联的EventID转换为PE的挂起INTID。
ITS在GICv4中不是可选的,所有GICv4的实现必须至少包含一个ITS。
Redistributor
Redistributor是IRI的一部分,连接到PE的CPU interface。Redistributor使用内存中的数据结构保存所有物理LPI的控制、优先级和pending信息。Redistributor中的两个寄存器指向这些数据结构:
- GICR_PROPBASER.
- GICR_PENDBASER.
在GICv4中,Redistributor还包括用于处理虚拟LPI的寄存器,这些虚拟LPI由ITS转发到Redistributer并直接转发到VM,而不涉及管理程序。这被称为将虚拟中断直接注入VM。
在GICv4中,Redistributor使用内存中保存的数据结构共同托管所有虚拟LPI的控制、优先级和pending信息。两个寄存器在Redistributor中指向以下数据结构:
- GICR_VPROPBASER.
- GICR_VPENDBASER.
在支持LPI但不包括ITS的实现中,GICR_*寄存器包含一个简单的内存映射接口,用于发送和控制物理LPI。
Redistributor为由GICR_前缀标识。 Redistributor为以下各项提供了编程接口:
- 识别、控制和配置支持的功能,以实现中断和中断路由。
- 启用或禁用SGI和PPI。
- 设置SGI和PPI的优先级。
- 将每个PPI设置为水平敏感或边缘触发。
- 将每个SGI和PPI分配给中断组。
- 控制SGI和PPI的pending状态。
- 控制SGI和PPI的active状态。
- 所连接PE的电源管理支持。
- 在支持LPI的情况下,内存中支持相关中断属性及其pending状态的数据结构的基址控制。
在支持GICv4的情况下,内存中支持相关虚拟中断属性及其pending状态的数据结构的基址控制。
CPU interface
GIC体系结构支持CPU interface,该接口为系统中的PE提供寄存器接口。每个CPU interface提供一个编程接口,用于:
- 根据实施的安全状态,实现中断处理的一般控制和配置。
- Acknowledging 中断。
- 执行优先级下降。
- 中断停用。
- 为PE设置中断优先级掩码。
- 定义PE的抢占策略。
- 确定PE的最高优先级pending中断。
CPU interface有几个组件:
- 允许软件的监督级别控制物理中断的处理的组件。与此相关的寄存器由ICC_前缀标识。
- 允许软件的监督级别控制虚拟中断的处理的组件。与此相关的寄存器由ICV_前缀标识。
- 允许hypervisor控制pending中断设置的组件。与此相关的寄存器由ICH_前缀标识。
在EL2处可访问的系统寄存器用于控制PE的活动、挂起、活动和挂起虚拟中断列表,这些寄存器由ICH_前缀标识。
GIC Partitioning相关推荐
- imx6ull中断体系之GICV2
本文不研究中断虚拟化相关内容,部分内容来自于百问网手册 一.中断类型 Peripheral interrupt :其包含以下两种类型的外围中断,它们可以边缘触发或者高低电平触发 Private P ...
- GICv2知识点总结
安全扩展: ARM处理器安全扩展是ARMv7-A架构配置文件的可选扩展.这意味着ARMv7-A实现是否包括安全扩展是实现定义的.ARM安全扩展通过以下方式促进安全应用程序的开发: 将硬件安全功能集成到 ...
- 【LeetCode】Palindrome Partitioning 解题报告
[题目] Given a string s, partition s such that every substring of the partition is a palindrome. Retur ...
- 【C++】C++11 STL算法(三):分隔操作(Partitioning operations)、排序操作(Sorting operations)
目录 分隔操作(Partitioning operations) 一.is_partitioned 1.原型: 2.说明: 3.官网demo 二.partition 1.原型: 2.说明: 3.官方d ...
- Lintcode108 Palindrome Partitioning || solution 题解
[题目描述] Given a strings, cutsinto some substrings such that every substring is a palindrome. Return t ...
- 在线作图丨高级的微生物分析——在线做Variance Partitioning Analysis(VPA分析)
今天小编给大家分享点厉害的干货~ Question 1:什么是VPA? 群落分析中常见的环境因子分析包括CCA典范对应分析(canonical correspondence analysis)和RDA ...
- 【leetcode】132. Palindrome Partitioning II
题目如下: 解题思路:本题是[leetcode]131. Palindrome Partitioning的升级版,要求的是求出最小cuts,如果用[leetcode]131. Palindrome P ...
- 1503 - A PRIMARY KEY must include all columns in the table's partitioning function
1503 - A PRIMARY KEY must include all columns in the table's partitioning function 错误的原因:表的主键字段必须包含分 ...
- Palindrome Partitioning
题目:Given a string s, partition s such that every substring of the partition is a palindrome. Return ...
最新文章
- YARN-2.7.3-源码分析系列2:启动脚本原理的分析
- 情感分析——深入snownlp原理和实践
- xnio java_java基础篇---新I/O技术(NIO)
- ui设计卡片阴影_UI设计形状和对象基础知识:阴影和模糊
- 【SSH网上商城项目实战11】查询和删除商品功能的实现
- 判断当前浏览器是不是微信浏览器
- sqlalchemy学习
- 高速计算机的应用领域概括,[其它课程]计算机基础教案第一篇第一、二章.doc
- EXTASP.Net几天使用总结
- Struts2基本的执行过程
- html div区域划分、居中各种前端技巧笔记
- js对象数组中的某属性值,拼接成字符串形式
- 滤波器相关知识(更新中)
- 外部无法连接部署在linux上的MongoDB
- xlinx芯片JTAG烧录
- Missing parentheses in call to 'print'
- kubelet源码分析(一)之 NewKubeletCommand
- Android项目实战——菜鸟商城
- 域名注册需要云服务器吗,说明申请域名的方法步骤有哪些?域名注册需要云服务器吗?...
- 什么是repo文件?
热门文章
- 一年200多天不上网 看远望7号船员怎么玩抖音
- 求一元二次方程的根 OpenJ_Bailian - 2707
- chrome 本地文件 翻译工具
- VSCode按ctrl与鼠标左键无法实现跳转的解决办法
- 1.19(Cake Baking)
- AppOps 命令大全
- ssh连接报错“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED“问题原因及解决方法
- math.h里的数学计算公式
- Java导出超大Excel文件,防止内存溢出
- 微信昵称乱码 mysql_微信昵称乱码及mysql编码格式设立(utf8mb4)_mysql