
通过上图可以确定, 主要包含 部分:、 和 。 包含 。
- () - 软件触发中断:通常用于多核间通讯,最多支持 个 中断,硬件中断号从 。
- () - 私有外设中断:是每个 私有的中断。最多支持 个 中断,硬件中断号从 。
- ()- 公用外设中断:最多可以支持 个外设中断,硬件中断号从 。
主要作用为检测中断源、控制中断源行为和将中断源分发到指定 接口上(针对每个 将优先级最高的中断转发到该接口上)。
对中断的控制包括:
- 全局启用中断转发到 接口
- 开启或关闭每一个中断
- 为每个中断设置优先级
- 为每个中断设置目标处理器列表
- 设置每个外设中断触发方式(电平触发、边缘触发)
- 为每个中断设置组
- 将 转发到一个或多个处理器
- 每个中断状态可见
- 提供软件设置或清除外设中断的挂起状态的一种机制
使用 对中断源进行标识。每个 接口最多可以有 个中断。 和 中断为每个接口特定的, 为为所有接口共用,因此多处理器系统中实际中断数大于 个。
接口提供一个处理器连接到 的接口。每一个 接口都提供一个编程接口:
- 允许向处理器发送中断请求信号
- 确认中断
- 指示中断处理完成
- 为处理器设置中断优先级掩码
- 为处理器定义抢占策略
- 选择最高优先级挂起中断
为每个 接口上每个受支持的中断维护一个状态机。下图显示了此状态机的实例,以及可能的状态转换。

1、添加挂起状态()
- 对于一个 ,发生以下 种情况的 种:
- 软件写 寄存器,指定目标处理器
- 目标处理器上软件写 寄存器
- 对于一个 或 ,发生以下 种情况的 种:
- 外设发出一个中断请求信号
- 软件写 寄存器
2、删除挂起状态()
- 对于
- 目标处理器写 寄存器
- 对于一个 或 ,发生以下 种情况的 种:
- 电平触发类型中断,信号取消
- 边沿触发类型中断,软件写 寄存器
3、挂起到激活()
如果中断使能,并且高优先级,软件从 寄存器读取时发生状态改变。
4、挂起到激活和挂起()
- 对于 ,这种转变发生在以下任一情况下:
- 将 状态设置为挂起的写入操作与读取 几乎同时发生
- 当多个挂起的 具有相同 时,并且它们来自同一个源处理器并指向同一个处理器。其中一个 状态变为激活(),其他 状态变为激活和挂起()。
- 对于 或 ,满足以下所有条件,则发生这种转换
- 中断开启
- 软件读取 ,读操作将激活状态添加到中断中。
- 此外,还应满足以下条件之一:
- 对于电平触发中断,中断信号保持。通常都是这样,因为外设直到处理器处理完中断后才会取消触发信号。
- 对于边沿触发中断,是否发生此转换取决于读取 的时间(中断再次触发,上一次未处理),读取 可能会转换到 ,后面可能会转换到 。
5、删除激活状态()
- 软件写入 或 来停用中断,
本节描述了一个不使用中断分组的实现,也不包括GIC安全扩展。中断分组和 安全扩展扩展了 中断优先级的基本模型。
软件通过为每个中断源分配一个优先级值来配置中断优先级。优先级值为 位无符号二进制。一个GIC至少支持 个优先级,最多支持 个优先级。如果 实现的优先级少于 个,则优先级字段的低阶位为 。这意味着表示优先级的字段 ,详细信息见表 。

在 优先级方案中,数字越低,优先级越高。 始终为最高优先级,最低优先级取决于实现的优先级数量。
中断优先级值保存在 寄存器中。通过写 寄存器设置中断优先级。
确定优先级位数方法:先向 寄存器写入 ,再读取 寄存器。
支持更高优先级抢占目标处理器。当发生以下 中情况会发生目标处理器抢占:
- 当前中断信号的优先级高于该 接口的优先级掩码
- 当前中断信号所在组优先级高于处理器处理中断优先级组
抢占发生在处理器确认新的中断时,并开始优先服务于之前活动的中断或当前运行的进程。当这种情况发生时,就称最初的主动中断已被抢占。当另一个中断仍然处于活动状态时开始服务于一个中断,有时被描述为中断嵌套。
对于符合 体系结构的处理器:
- 寄存器中的 位或 位的值确定处理器是否通过启动中断确认过程来响应信号中断。
- 处理抢占中断时,处理器必须保存并稍后恢复以前活动的 的上下文。
优先级下降意味着中断的优先级不再影响 接口上的运行优先级,因此不会阻止中断抢占。在 实现中,仅当中断停用时才会发生优先级下降,但在 实现中,优先级下降和中断停用可以分开。
接口中 寄存器定义目标处理器优先级阈值。 仅向目标处理器发出优先级高于此阈值的挂起中断信号。值为零(寄存器复位值)会屏蔽所有中断,使其无法向关联的处理器发出信号。 在将挂起中断的优先级与优先级阈值进行比较时不使用优先级分组。
始终屏蔽具有最大支持优先级字段值的中断。这提供了一种额外的方法来防止中断被发送到任何处理器。
注:将 写入 寄存器,总是设置支持最大优先级字段值。表 显示了支持的最大字段值如何随实现的优先级位数而变化。
优先级分组使用二进制点寄存器()将优先级值拆分为两个字段:组优先级和子优先级。在确定抢占时,所有具有相同组优先级的中断都被认为具有相同的优先级,而不考虑其子优先级。这意味着每个组优先级上只能有一个处于活动状态的中断。活动组优先级也称为抢占级别。
使用组优先级字段来确定挂起的中断是否具有足够的优先级来抢占活动中断,如下所示:
- 一个挂起的中断要抢占一个活动中断,它的组优先级必须高于活动中断的组优先级。也就是说,新中断的组优先级字段的值必须小于"正在运行"优先级的组优先级字段的值。
- 如果 接口上没有活动中断,则可以向处理器发出最高优先级的等待中断信号,而不考虑组的优先级。
在每种情况下,挂起的中断优先级与优先级掩码进行比较,并且只有当中断高于掩码时才会发出中断信号。
二进制点寄存器()将优先级值拆分为两个字段,具体含义见表 :

带有 安全扩展的 实现和 实现有两个二进制点寄存器。用于计算优先级分组的二进制点寄存器取决于中断是组 中断还是组 中断,通过 寄存器定义,以及 位值。表 显示了用于不同 实现的二进制点寄存器。

本节介绍中断分组和 安全扩展插件对中断处理的影响。
包含 安全扩展的 实现,或任何 实现,为 和 异常请求提供两个中断输出信号:
- 接口始终对组 中断使用 异常请求
- 软件可以将 接口配置组 中断使用 或 异常请求。
上电时或复位后,任何 实现都配置为仅使用单个中断输出信号。
在 实现中,中断分组仅作为 安全扩展的一部分提供。
寄存器将每个中断配置为组 或组 。
在 接口中,在 实现中, 别名寄存器可以提供对组 和组 寄存器的独立控制,如表 所示:

在包含 安全扩展的实现中,寄存器别名:
- 通常表示组 寄存器的非安全副本的别名,例如, 寄存器是 寄存器非安全副本的别名
- 只能通过安全访问进行访问。
在包含 安全扩展的 实现中:
- 唯一实现的别名寄存器是
- 组 中断的其他控制仅由组 控制寄存器的非安全副本提供,如图 所示:
在包含 安全扩展的 实现中,在 和 中, 接口对组 中断的非安全控制是相同的。这意味着,在 实现中,表 显示了提供对组 中断进行非安全控制的 寄存器。
在支持中断分组的实现中, 包含其他字段,包括用于控制分组中断处理的字段:
- 独立的使能位控制组 和组 中断到连接的处理器的信号
- 是不支持中断分组的 中的 位,它成为 位,并控制是否向处理器发送组 中断信号
- 增加了 位,以控制是否向处理器发送组 中断信号。
- 位,它控制接口信号组 是否使用 或 中断请求中断到处理器。
- 位,控制是否使用 或 来确定可能被组1中断抢占的中断
- 位,用于控制是否读取 ,或实现安全扩展的 安全读取 ,来确认组 中断。
- 在 实现中:
- 和 旁路禁用位,用于控制是否将旁路 和 信号转发到处理器
- 位,用于控制优先级下降是否与中断停用分开。如果 GIC 实现了安全扩展,则会为非安全访问和安全性访问实现单独的 和 位。这为非安全和安全中断处理提供了结束中断模式的独立控制。
架构为特殊用途保留的中断 号的完整列表如下:
- :保留
- :仅当 支持中断分组时才使用。
- :如果没有足够优先级的等待中断向处理器发出信号,这个值将被返回给处理器,作为中断确认的响应。
在不支持中断分组的 实现中,当处理器接受中断时,它通过读取 来确认该中断。 的读取用于查询确认执行读取的处理器的最高优先级挂起中断。
在支持中断分组的 实现中, 强烈建议将 设置为 ,这意味着:
对于 实现:
- 组 中断通过读取 ,或安全读取 (如果实现包括 安全扩展)
- 组 中断通过读取 ,或非安全读取 (如果实现包括 安全扩展)
对于 实现:
- 组 中断必须通过读取安全
- 组 中断必须通过读取不安全
在各种情况下,读取都必须是对 接口上挂起中断的最高优先级的确认。
如果中断确认寄存器访问与 接口上优先级最高的挂起中断不对应,则:
- 当优先级最高的挂起中断是组 中断时,读取 返回虚假中断值 。
- 当优先级最高的挂起中断是组 中断时,读取 将返回虚假中断值 。
当 位设置为 时,为确保系统正确性,每个组 中断的优先级必须高于任何组 中断。
当 位设置为 时,读取 确认 接口上优先级最高的挂起中断,无论它是组 还是组 中断。但是, 弃用了 的这种用法,并强烈建议使用 设置为 的软件模型。
使用 安全扩展插件进行中断确认
本小节介绍当实现 处理器安全扩展的处理器连接到包含 安全扩展的 接口时,确认分组中断的要求如何应用于中断处理。在此配置中:
- 组 中断是安全中断
- 组 中断是非安全中断
该小节仅描述 设置为 (建议的配置)的操作。
如果最高优先级的挂起中断是安全中断,则处理器必须对 进行安全读取以确认它。
要确认非安全中断,处理器可以:
- 对 寄存器执行非安全读取
- 在 实现中,对 寄存器执行安全读取。
这意味着,当非安全软件正在处理非安全中断时,处理器会对 进行非安全读取以确认非安全中断。
如果 的读取与中断的安全性不匹配,则读取 不会确认任何中断并返回以下值:
- 用于在最高优先级中断为"不安全"时进行安全读取
- 表示最高优先级中断为"安全"时的非安全读取。
上电时或复位后,支持中断分组的 实现配置为:
- 分配给组 的所有中断
- 已禁用 异常请求。
这意味着使用 中断请求向组 中断发出信号。图 展示这种配置:

许多系统实现要求任何组 中断都不会抢占任何组 中断。对于这样的实现, 强烈建议:
- 组 中断始终在支持的优先级值范围的下半部分分配优先级值。这些值对应于优先级较高的中断。
- 组 中断始终在支持的优先级值范围的上半部分分配优先级值。这些值对应于较低优先级的中断。
这可确保每个组 中断的优先级都低于任何组 中断。
如果 支持 安全扩展:
- 提供中断优先级设置的安全和非安全视图。
- 支持的最小优先级值数从 增加到 。
- 非安全访问只能看到支持的优先级值的一半。因此,如果 实现了 个优先级值,则非安全访问只能看到 个优先级值。
1、包括安全扩展的GIC中中断优先级的软件视图
当处理器读取组 中断的优先级值时, 将返回该值的安全视图或非安全视图,具体取决于访问是"安全"还是"不安全"。本节介绍中断优先级的两种视图以及它们之间的关系。
至少实现 个优先级,最多 个优先级。这意味着它实现了 寄存器中8位优先级值字段的 位。所有实现的优先级位都可以通过安全访问进行访问,并且优先级字段的未实现的低阶位是 。图 显示中断的优先级值字段的安全视图。存储在分发服务器中的优先级值等效于"安全"视图。

- 位 是 必须实现的位,对应于 个优先级。
- 位 是 可能实现的位,如果未实现,则为 。
- 必须实现位 以提供最多 个优先级。
- 建议,对于组1中断, 设置为 。
非安全访问只能看到与中断优先级的非安全视图对应的优先级值字段。对于非安全访问, 支持的优先级是其支持的安全访问的一半。图 显示组 中断的优先级值字段的非安全视图。

- 位 是 必须实现的位,对应于 个优先级。
- 位 是 可能实现的位,如果未实现,则为 。
- 必须实现位 以提供最多 个优先级。
- 是 。
优先级值的非安全视图不显示该值在分发服务器中的存储方式。在存储该值之前,将该值从非安全写入到优先级字段:
- 值右移 位。
- 被设置为 。
此转换意味着组 中断的优先级值位于可能值范围的上半部分,这意味着中断优先级位于优先级范围的下半部分。
对中断的优先级值的安全读取将返回存储在分发服务器中的值。图 显示了组 的优先级值字段的安全视图,该组 的优先级值字段由非安全访问设置,或者由安全访问设置 的优先级值。

对组 1 中断的优先级值字段的安全写入可以将 设置为 。如果安全写设置 为 。
- 非安全读取返回值 。
- 非安全写可以更改字段的值,只能修改分发器视图中 设置为 。
此非安全访问行为仅适用于 中的"优先级"值字段:
- 如果 中的"优先级"字段包含 的值,则该字段为"非安全访问"的 。
- 如果 中的"优先级"字段包含 的值,则该字段为"非安全访问"的 。
图 显示了"优先级"值字段的视图之间的关系。

图 显示来自安全访问和非安全访问的中断优先级的软件视图如何与分发服务器中持有的优先级值相关,以及安全访问和非安全访问可见的中断值。这适用于实现优先级值最大范围的 。

表 显示了 实现的优先级值位数如何影响组 中断优先级的安全和非安全视图。
不安全的软件无法查看组 中断的优先级设置。

这种优先级值表示的模型确保了编写的软件能够按照预期的实现这种 架构功能,而不管 是否实现了 安全扩展。但是,程序员必须确保软件为第 组和第 组中断分配适当的优先级。
有关管理优先级值的建议
强烈建议:
- 对于组 中断,软件将优先级值字段的 设置为 。
- 如果使用安全写入来设置组 中断的优先级,软件会将优先级值字段的 设置为 。
这可确保所有组 中断的优先级值都低于所有组 中断,因此优先级较高。但是,系统可能具有此方案无法满足的要求。
- 当 和连接的处理器都包含安全扩展时,组 中断是安全中断,组 中断是非安全中断。
- 软件可能不了解 安全扩展,因此可能不知道它是否对 寄存器进行安全访问或非安全访问。但是,对于任何实现的中断,软件可以将 写入相应的 优先级值字段,然后读回存储在该字段中的值以确定支持的中断优先级范围。 建议,在以这种方式检查优先级范围之前:
- 对于外设中断,软件首先禁用中断。
- 对于 ,软件首先检查中断是否处于非活动状态。
2、通过组 1 中断控制抢占
当 实现支持中断分组时, 始终用于确定组 中断是否向处理器发出信号,以便进行可能的抢占。默认情况下, 用于确定是否向组 中断发出信号以进行可能的抢占。但是,当 设置为 时, 用于确定组 和组 中断的可能抢占。
安全扩展对控制组 中断抢占的影响
如果 实现包括安全扩展:
- 位仅在 的安全副本中实现。
- 它是 的安全副本,即:
- 始终用于确定组 中断是否向处理器发出信号。
- 当 设置为 时,也用于确定组 中断是否发出信号。
- 是 的非安全副本的别名。
- 是一个安全寄存器,只能通过安全软件访问来访问。
3、中断分组对优先级分组的影响
当中断使用 时,有效二进制点值比寄存器中存储的值少一个,如表 所示。这意味着,如果软件不知道中断分组和 安全扩展的影响,则无论它是在处于安全还是非安全状态的处理器上运行,都会看到相同的优先级分组机制。
- 在 中,有效的二进制点值调整也发生在不包含安全扩展的 实现中。
- 优先级分组始终基于分发服务器中保存的优先级值,而不是对非安全中断对应的优先级值的非安全读取可见的值。
寄存器支持的最小二进制点值为:
- 具体定义实现。
- 在 范围内。
- 一个大于 寄存器的安全副本支持的最小值。
当 时,组1中断的优先级分组结果如表 所示。

在包含安全扩展的 实现中,当 时:
- 对 的非安全读取将返回安全 的值,该值递增 并饱和为 。
- 对 的非安全写入将被忽略。
- 寄存器是多余的。
4、当 GIC 支持中断分组时生成中断
见文档
见文档
实现 或 体系结构配置文件的 处理器支持两个中断请求信号 和 ,每个信号都有一个关联的异常和处理器模式:
- 触发 请求会生成 异常。默认情况下,这是在 模式下执行的,并且采用异常会屏蔽后续的 异常。
- 触发 请求会生成 异常。默认情况下,这是在 模式下进行的,并且采用异常会屏蔽 和 异常。
所有这些使用模型示例都使用图 中所示的硬件实现,以及支持组 和组 中断的 。

在每个使用模型中,软件使用 寄存器将中断分配给两组,并使用 和 中断请求向处理器发出信号。
图 显示了一个实现 安全扩展的系统,连接到一个实现 处理器安全扩展的处理器。此实现:
- 使用组 中断作为安全中断,以 信号。
- 将组 中断用作非安全中断,以 为信号。
这意味着,在处理器上, 中断永远不会路由到非安全软件, 中断也永远不会路由到安全软件。

使用组 和组 中断将安全中断作为 发出信号,将非安全中断作为 发出信号,要求处理器:
- 路由要在安全监视器模式下获取的 。
- 防止不安全的软件屏蔽 。
- 确保 在安全状态下运行时被屏蔽。
独立控制安全和非安全中断
图 所示的系统满足一般安全要求,即非安全操作不得干扰安全操作。安全软件通过将 路由到安全软件而不允许非安全软件屏蔽它们来完全控制 。
在 复位时,所有中断都分配给组 ,使其成为安全中断。处理器上的安全软件:
- 对 寄存器进行编程,以指示哪些中断是组 ,非安全中断。
- 将安全 位设置为 ,以将 接口配置为对组 中断使用 。
- 必须在分发服务器中独立启用组 中断和第 组中断:
- 开启组 中断。
- 开启组 中断。
- 必须在 接口中独立启用组 中断和组 中断:
- 开启组 中断。
- 开启组 中断。
图 显示了处理器未实现或未使用处理器安全扩展的系统。该系统可以使用 寄存器提供的中断分组来控制 和 ,基于:
- 将 分配给中断组 。
- 将 分配给中断组 。
本节适用于包含 安全扩展的任何 实现或任何 实现。

在 复位时,对于支持中断分组的 实现,所有中断都分配给组 。
因此,要使用此配置,在处理器上执行的软件必须:
- 对 寄存器进行编程,以将 中断分配给组 。
对于不包含安全扩展的 实现, 重置值是由具体实现定义的。
- 将 设置为 ,以将组 中断分配给 。
- 将 设置为 ,这样 和 中断都可以从单个地址空间中被确认,使用
- 确认组 中断。
- 确认组 中断。
- 指示组 中断完成。
- 指示组 中断完成。
然而, 和 仅在 实现中实现。使用 实现运行的处理器可能必须使用已弃用的操作模式,并将 设置为 。
- 通过以下任意一种方式配置所需的二进制点支持模型:
- 将 设置为 ,以便组 使用 ,组 使用 。
- 将 设置为 ,以便组 和组 使用公共二进制点寄存器,。
图 3-11 显示了一个支持处理器虚拟化的系统,该系统在虚拟机上执行旧版软件。处理器使用模型的基础是:
- 安全软件分配:
- 对组 的安全中断,作为 信号发送到处理器。
- 对组 的非安全中断,作为 向处理器发出信号。
- 虚拟机管理程序:
- 使用 上的虚拟化扩展的功能实现虚拟分发服务器。此虚拟分发服务器可以将来自 的 中断虚拟化为虚拟 和虚拟 中断,并将其路由到相应的虚拟机。
- 将物理 路由到 模式,以便虚拟分发服务器可以为其提供服务。
- 在虚拟机上运行的客户机操作系统将中断分配给组 或组 ,以将其分配为 或 。对 分发服务器寄存器的访问将捕获到虚拟机管理程序,因此可以访问虚拟分发服务器。
虚拟 接口将这些中断作为虚拟 或虚拟 发出信号。此虚拟化受虚拟机管理程序控制,对来宾操作系统不可见。
当 向处理器发送 信号时,中断将路由到 模式。虚拟机管理程序确定中断是针对自身还是针对来宾操作系统。如果是针对来宾操作系统,它将确定: - 哪个客户机操作系统必须处理中断。
- 该来宾操作系统是否已将中断配置为 或 。
- 中断优先级,基于目标来宾操作系统的优先级配置。
如果中断以当前客户机操作系统为目标,则虚拟机管理程序将更新 寄存器,以将中断添加到当前虚拟机的挂起中断列表中。
- 在收到当前来宾操作系统无法处理的 时,虚拟机管理程序可以:
- 将控制权转移到可以处理中断的客户机操作系统。
- 将中断标记为挂起,作为相应来宾操作系统的已保存上下文的一部分。
- 一个系统可以有一些中断,这些中断可以由多个来宾操作系统处理,而其他中断必须路由到特定的来宾操作系统。
客户机操作系统处理虚拟中断的方式与处理相应物理中断的方式完全相同。来宾操作系统无法检测到它正在处理虚拟中断而不是物理中断。
见文档
到此这篇ldr指令什么意思(ldrsb指令)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/22859.html