TriCore处理器的上下文切换原理

01.上下文切换介绍

我们通常说的上下文又叫CPU上下文,是CPU运行任何任务前,必须依赖的环境,包括CPU 寄存器和程序计数器。

上下文切换就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。

02.TriCore 硬件上下文处理机制

2.1 TriCore 硬件上下文介绍

TriCore 与以往嵌入式处理器不同,TriCore提供了一种硬件的上下文机制,这种机制是专为嵌入式实时操作系统设计的。

TriCore上下文类型分为2种:

上层上下文:由上地址寄存器A[10]到A[15]和上数据寄存器D[8]到D[15]组成。上层上下文还包括PCXI和PSW。为了进行函数调用,这些寄存器被指定为非易失性(它们的内容在调用之间保存)。

下层上下文:由较低的地址寄存器A[2]到A[7],较低的数据寄存器D[0]到D[7],A[11](返回地址)和PCXI组成。

上层上下文与下层上下文分布框图如下图1所示

▲图 1

上层上下文:外部中断;陷阱;函数调用;会自动保存恢复上下文。

下层上下文:如果要改变内容,需要显式的使用代码指令去读写寄存器。

下层上下文寄存器类似于全局寄存器。在外部中断;陷阱;函数调用;中对这些寄存器做修改后,事件返回后值仍然会存在。

2.2 TriCore 上下文保护区CSAs

TriCore上下文保存到内存时,会占用16个字的存储块,称为上下文保存区域(CSAs)。该体系结构使用固定大小的上下文保存区域的链接表。CSA是16个字对齐的内存存储器。每个CSA只包含一个上层上下文或一个下层上下文。CSAS通过一个LinkWord连接在一起。LinkWord包括两个字段,它们将给定的CSA链接到链中的下一个字段。这些字段是一个4位的线段和一个16位的偏移量。段号和偏移量用于生成链接CSA的有效地址(EA)。将指针偏移值增加1,总是使EA增加到比前一个位置高16个字的地址。详见下图2。

▲图2

2.3 TriCore CSAs访问

TriCore 内核有三个寄存器用来操作访问 CSA 的信息:

1. FCX: 这个寄存器的值用来指向全局的空闲的 CSA 列表头指针地址信息。(总是指向可用的 CSA 列表头指针)

2. PCX:这个寄存器的值用来保存前一个任务的 CSA 列表头指针地址信息。PCX 同时也是 PCXI 寄存器的一部分。

3. LCX: 如果 LCX 寄存器的值与 PCX 的值一致,那么就会触发一个 FCD 陷阱。(FCD:空闲上下文空间消耗殆尽的异常)

上下层上下文保存在上下文保存区域(CSA)中。未使用的CSA在空闲上下文列表(FCX)中链接在一起。包含保存的上下层上下文的CSA在上一个上下文列表(PCX)中链接在一起。下图3显示了两个上下文列表中的CSAs的简单配置。

▲图3

03.TriCore 仿真芯片模型

由迪捷软件自主研发的SkyEye全数字实时仿真软件,是基于可视化建模的硬件行为级仿真平台,利用拖拽的方式快速搭建任意的虚拟硬件平台,保证虚拟嵌入式系统的可靠性和实时性,进行嵌入式软件的开发和调试。SkyEye目前支持主流的嵌入式硬件平台,可以运行主流的操作系统,此外还能适配国内自主研发的操作系统天脉。通过利用基于LLVM的动态二进制翻译技术,使虚拟处理器在典型的桌面计算机上运行速度可以达到2000MIPS以上。对标产品为美国风河公司的Simics。

在SkyEye 实时仿真软件中实现了TriCore CPU内部所有寄存器在内的数据结构,内存访问接口和内存设备。在SkyEye中,通过将寄存器PCXI,寄存器PSW等上层上下文内容存入FCX寄存器所指向的CSA区域,仿真TriCore真实硬件保存上层上下文操作。通过访问PCXI寄存器所对应的CSA区域获取之前存储在内存中的上层上下文内容来仿真TriCore真实硬件恢复上层上下文操作。

SkyEye中 TriCore 简单模块实现gp模型图,如下图所示:

  • 0
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值