异常向量和异常向量表

一、异常向量

1、定义

异常向量(Exception Vector)是处理器架构中用于识别和处理不同类型异常的一个机制。每个异常类型都有一个唯一的异常向量,处理器通过该向量确定如何处理特定的异常。

2、作用

  1. 识别异常类型:每种异常类型都有一个唯一的异常向量编号,这有助于处理器识别当前发生的异常是什么类型。
  2. 定位异常处理程序:处理器可以根据异常向量找到对应的异常处理程序的地址。异常处理程序是专门设计来处理特定类型异常的代码段。
  3. 异常优先级管理:某些架构中,异常向量还可以用于确定异常的优先级,以便在多个异常同时发生时,处理器可以优先处理更重要的异常。

二、异常向量表

异常发生时,处理器必须执行与异常相对应的处理程序代码。内存中存储处理程序的位置称为异常向量。在ARM架构中,异常向量存储在一个表中,称为异常向量表

每个异常级别都有自己的向量表,即EL3、EL2和EL1各有一个向量表。(EL0除外)该表包含要执行的指令,而不是一组地址。这些通常是将核心引导到完整异常处理程序的分支指令。

向量表中的每个条目有 16 个指令长(在 ARMv7-A 和 AArch32 中,每个条目只有 4 个字节)。这意味着在AArch64中,顶级处理程序可以直接写入向量表中。

基地址由 VBAR_EL n给出,每个条目都有一个距该基地址的定义偏移量。每个表有 16 个条目,每个条目的大小为 128 字节(32 条指令)。该表实际上由 4 组 4 个条目组成。使用哪个条目取决于几个因素:

·异常类型(SError、FIQ、IRQ 或同步)
·如果在同一异常级别发生异常,则要使用的堆栈指针(SP0 或 SPn)
·如果在较低的异常级别发生异常,则为下一个较低级别(AArch64 或 AArch32)的执行状态。

异常向量和异常向量表_第1张图片

你可能感兴趣的:(Arm架构,linux,arm)