以下内容是从官方文档翻译过来,仅为自己学习使用,如有错误欢迎指正!!!
TriCore保护系统提供了隔离错误的基本功能。该系统是不显眼的,较少的开销,并避免不确定的运行时行为。保护系统集成了硬件机制,保护用户指定的存储范围,防止未经授权的读、写或指令获取访问。保护硬件也可以方便应用程序调试。
如下的子系统和存储保护有关。
陷阱系统(The Trap System)
当出现不可屏蔽中断(NMI)、指令异常或非法访问等事件时,就会触发trap。
TriCore架构包含八类陷阱,并进一步分为同步或异步、硬件或软件。
更多信息请参见Trap System章节
I/O权限级别(The I/O Privilege Level)
I/O模式有三种:User-0模式、User-1模式和Supervisor模式。
User-1模式允许应用程序任务直接访问非关键的系统外设。这使得系统可以更有效地实现,而不会丧失在特权模式下运行时固有的安全性。(User-1模式的默认行为可能被系统控制寄存器覆盖)。
更多信息请参见Access Privilege Level Control章节
存储保护(Memory Proteciton)
提供任务访问权限控制,即允许访问哪些内存区域以及允许哪些类型的访问。
有效地址(Effective Address)
有效地址通过以下两种转换机制之一转换为物理地址:
对经过直接地址转换的地址进行内存保护,需使用本章描述的基于范围的内存保护系统(MPU)。
基于范围的内存保护系统是为小型和低成本的应用设计的,为不需要虚拟内存的系统提供内存保护。
本章描述了:
保护区间
保护区间是一段连续的地址空间,可以为其指定访问权限。
保护区间由下边界和上边界划定。一个地址在以下情况下属于这个区间:
保护区间分为两组:
代码和数据保护区间的数量取决于实现,限制为至少4个最多16个。
上下边界的粒度为8字节。
代码/数据保护上边界寄存器和下边界寄存器的三个最低有效位是不可写的,总是返回零。
访问权限
访问权限定义了对保护区间允许的访问类型。
访问类型有:
通过设置相应的访问标志,可以分别允许每种访问类型。
保护集
为所使用的整个地址空间定义的完整访问权限集称为保护集。
每个保护集由以下组成:
保护集定义了数据访问权限和指令获取权限。
在保护集中,每个数据保护区间都关联了读使能和写使能标志。每个代码保护区间都关联了执行使能标志。提供的内存保护集的数量是特定于每个TriCore实现,最少两个最多四个。
拥有多个保护集允许在User和Supervisor模式切换时或在不同的User任务之间切换时,快速更改整个访问权限保护集。
在任何给定的时间,所有保护集中的一个就是当前保护集,它决定当前任务访问存储区域的合法性。PSW.PRS字段决定了当前生效的保护集(以编号体现)。
交叉保护区间的实际访问权限是交叉保护区间访问权限设置的OR值。这意味着当两个区间相交时,相交的区间将拥有最大可能的权限。
例如:
区间的嵌套可用于允许对当前任务允许读访问的区间的子区间进行读/写访问。
存储器访问可以跨越由保护系统定义的两个区域。下图显示了跨越允许访问区域和不允许访问区域边界的存储器访问(代码或数据)。在这种情况下,是否触发存储保护陷阱是由实现定义的(而不是体系结构定义的)。
注意:在TriCore的所有实现中,为了确保确定性的行为,应该在每个内存保护区域之间留下一个至少是最大内存访问大小的两倍的区域,减去一个字节。一些实现可能需要更少的缓冲区间距,请参阅具体实现文档以了解详细信息。
当保护系统被使能,所有的存储访问(读、写、执行)都需要在存储访问执行之前进行合法性检查,其合法性由如下因素决定:
如果需要使能存储保护系统,则保护使能位必须被设置为1(SYSCON.PROTEN = 1)。
如果存储保护被关闭(SYSCON.PROTEN = 0),则允许任意地址的任意权限访问。
在任意给定时刻,在所有的保护集中只有一个生效,当前运行的任务或者中断服务程序根据该保护集进行合法性检查。
PSW.PRS字段指示了当前保护集的编号。
数据地址(读写权限)根据数据地址空间表来进行检查。
指令获取地址根据代码地址空间表来进行检查。
为了从程序空间读出数据,那么在数据地址空间表中必须有一个条目涵盖被读地址。同样的,在代码地址空间表中必须有一个条目涵盖被读指令。
保护系统不区分访问权限级别。无论当前权限级别为Supervisor、User-1还是User-0模式,数据保护设置和代码保护设置的效果相同。
对于指令的读取(instruction fetches),将根据当前保护集中启动执行权限的代码保护范围来检查PC值。当PC被发现在所有选择范围之外,那么访问权限被拒绝。当PC值被发现在一个启动的范围内,访问是允许的。
对于读取操作(load operations),将根据当前保护集中启动读权限的数据保护范围来检查读取数据的地址值。当该地址被发现在所有选择范围之外,那么访问的权限被拒绝。当该地址被发现在一个启用的范围内,访问是允许的。
对于写入操作(store operations),将根据当前保护集中已启用写权限的数据保护范围来检查写入数据的地址值。当该地址被发现在所有选择范围之外,那么访问的权限被拒绝。当该地址被发现在一个启用的范围内,访问是允许的。
特权模式(supervisor mode)不会自动禁用存储保护。为特权模式任务(Set-0)选择的保护集通常被设置为允许对被保护的用户模式访问的内存区域进行写访问。此外,特权模式任务可以执行指令来更改保护映射(protection maps)或完全禁用保护系统。由于Supervisor模式不会隐式改写存储保护,因此特权模式任务有可能触发内存保护陷阱(trap)。
将上下文保存或还原到上下文保存区(CSA)不需要保护系统的许可。
基于范围的存储保护系统(MPU)产生三个陷阱,每个陷阱对应三个保护模式寄存器位:
数据保护范围寄存器的名称如下:
代码保护范围寄存器的名称如下:
保护集使能寄存器的名称如下:
DPRx_U(x=0-31)
Data Protection Range Register x Upper Bound
DPRx_L(x=0-31)
Data Protection Range Register x Lower Bound
CPRx_U(x=0-31)
Code Protection Range Register x Upper Bound
CPRx_L(x=0-31)
Code Protection Range Register x Lower Bound
DPRE_x(x=0-7)
Data Protection Read Enable Set Configuration Register x
DPWE_x(x=0-7)
Data Protection Write Enable Set Configuration Register x
CPXE_x(x=0-7)
Code Protection Execute Enable Set Configuration Register x