trap是由于诸如不可屏蔽中断(NMI)、指令异常、内存管理异常或非法访问等事件而发生的。trap总是活跃的,它们不能通过软件操作禁用。本文描述了可能发生的不同trap和TriCore架构的trap处理机制。
一、 Trap 类型
TriCore体系结构为陷阱指定了8个通用类。每个类都有自己的trap处理程序,通过每个条目32字节的trap向量进行访问,并根据硬件定义的trap类号进行索引。在每个类中,通过陷阱识别码(TIN)来区分特定的陷阱,在执行陷阱处理程序的第一条指令之前,这个识别码由硬件加载到寄存器D[15]中。Trap处理程序必须对d[15]中的值进行测试和分支,以到达特定TIN的子处理程序。Trap可以进一步分为同步或异步,以及硬件或软件生成
1、 同步 Traps
同步陷阱与执行或尝试执行特定指令有关,或者与尝试访问需要内存管理系统干预的虚拟地址有关。引起陷阱的指令是已知的。在执行超出该指令之前,立即捕获并处理陷阱。
2 、异步 Traps
异步陷阱类似于中断,因为它们与外部检测到的硬件条件相关联,并向核心发送信号。有些结果是由先前执行的指令间接产生的,但与这些指令的直接联系已经丢失。其他的,如不可屏蔽中断(NMI),是外部事件。异步陷阱和中断之间的区别在于异步陷阱是通过陷阱向量而不是中断向量路由的。它们不能被屏蔽,也不会改变当前CPU中断优先级。
3 、硬件 Traps
硬件陷阱是为响应硬件检测到的异常情况而生成的。在大多数情况下,但不是所有情况下,异常条件都与尝试执行特定指令有关。
例如非法指令陷阱、内存保护陷阱和数据内存错位陷阱。在MMU trap (trap类0)的情况下,异常条件要么是无法找到由指令引用的虚拟页的TLB (Translation Lookaside Buffer)条目(VAF trap),要么是该页的访问冲突(VAP trap)。
4 、软件 Traps
软件陷阱是在执行系统调用或断言指令时故意产生的。支持的断言指令有TRAPV (Trap on overflow)和TRAPSV (Trap on sticky overflow)。系统调用由sycall指令生成。系统调用陷阱在第11页的“系统调用(陷阱6类)”中有进一步的描述。
5 、不可恢复 Traps
不可恢复的陷阱是指软件无法从中恢复的陷阱;也就是说,引发trap的任务不能简单地重新启动。在TriCore体系结构中,FCU(致命上下文陷阱)是一种不可恢复的错误。
二、 Trap Handling
陷阱处理机制对陷阱采取的操作与对外部或软件中断采取的操作略有不同。trap不会改变CPU的中断优先级,所以没有更新ICR.CCPN字段。
1 、Trap 矢量格式
陷阱处理程序向量存储在陷阱向量表中的代码内存中。BTV寄存器指定Trap向量表的基址。这些向量由许多短代码段组成,平均间隔8个单词。如果一个陷阱处理程序非常短,它可能完全适合在矢量代码段中可用的八个字。如果它不适合向量代码段,那么它应该包含一些初始指令,然后跳转到处理程序的其余部分。
2 访问 Trap 矢量表
当trap发生时,硬件会生成一个trap标识符。trap标识符有两个组成部分:Trap类号(TCN)用于索引Trap向量表。陷阱识别号(TIN),它被载入数据寄存器D[15]。Trap类号左移5位,与BTV寄存器中的地址对齐,生成Trap处理程序的入口地址。
3 返回地址 (RA)
返回地址保存在返回地址寄存器A[11]中。对于同步陷阱,返回地址是引起陷阱的指令所在的PC。只有SYS trap和FCD trap不同。在由SYSCALL指令触发的SYS陷阱中,返回地址指向紧跟在SYSCALL之后的指令。对于异步陷阱,返回地址是如果异步陷阱没有被捕获,下一个将被执行的指令的返回地址。中断的返回地址也遵循同样的规则。

本文详细描述了TriCore体系结构中的各种陷阱类型,包括同步、异步、硬件和软件生成的陷阱,以及陷阱处理机制,如向量表、初始状态和不同陷阱类的描述。
最低0.47元/天 解锁文章
2135






