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模型图,如下图所示:

TriCore处理器的上下文切换原理相关推荐

  1. 探秘:TriCore处理器中断机制

    1. TriCore与中断的简介 TriCore是德国英飞凌科技公司旗下的第一个为实时嵌入式系统而优化的统一的.32位的微控制器-DSP(Digital Signal Processing)处理器架构 ...

  2. 【转】多核处理器的工作原理及优缺点

    [转]多核处理器的工作原理及优缺点 <处理器关于多核概念与区别 多核处理器工作原理及优缺点>原文传送门 摘要:目前关于处理器的单核.双核和多核已经得到了普遍的运用,今天我们主要说说关于多核 ...

  3. libco协程库上下文切换原理详解

    缘起 libco 协程库在单个线程中实现了多个协程的创建和切换.按照我们通常的编程思路,单个线程中的程序执行流程通常是顺序的,调用函数同样也是 "调用--返回",每次都是从函数的入 ...

  4. MT6129射频处理器,MT6129芯片原理资料介绍

    MT6129是一块高度集成的56个引脚QFN封装的射频处理芯片,支持AMPS,GSM,DCS,PCS 四频:内部包括四个低杂讯放大器,两个射频正交混频器,一个信道滤波器,一个可编程增益调节放大器,一个 ...

  5. Linux下访问处理器硬件信息原理:图形化工具RWLinux的诞生

    大家好,这里是第五位面壁者.今天继续我们的学习之旅,同样视频会放在B站,PPT和视频录音的文字版本会在下面这些平台同步更新,欢迎各位大佬参观指导. 今天的这期内容,我给大家介绍一款我自己编写的可以在L ...

  6. Cortex M0下coos调度上下文切换原理

    2019独角兽企业重金招聘Python工程师标准>>> ###Coos上下文切换 Coos与上下文切换有关的文件主要是arch.c和port.c. Coos使用PendSV_Hand ...

  7. AUTOSAR实战教程 - 软件集成调试_程序跑飞一招解决

    工欲善其事必先利其器. AUTOSAR工程如此庞大的代码量,如果没有一个科学.程式化的方法来调试程序, 那么程序跑飞之后使用三板斧:打断点.看变量.对比正常代码和异常代码的变动,这显然是不能够胜任工作 ...

  8. Java线程上下文切换

    0 前言 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的"同一时间点",而是 多个 ...

  9. C语言预处理命令分类和工作原理

    C语言编程过程中,经常会用到如 #include.#define 等指令,这些标识开头的指令被称为预处理指令,预处理指令由预处理程序(预处理器)操作. 相比其他编程语言,C/C++ 语言更依赖预处理器 ...

最新文章

  1. 想学测试如何入门和学习软件测试?今天我就好好给你唠唠
  2. GPT-3和AlphaFold 2震撼2020,2021年AI最大看点在哪儿?
  3. Redis之父退出开源项目维护:人生苦短不想上班
  4. IE、FF的基本注意事项
  5. Linux学习 - 文件包处理命令
  6. ejb能调用另一个ejb吗_异步EJB只是一个Gi头吗?
  7. Mockito和Hamcrest的试驾制造商
  8. 工业控制系统专业术语(不断完善中)
  9. redis指定配置文件启动_redis基础知识整理-安装
  10. 【图像分割】基于matlab GUI类间方差阈值图像分割【含Matlab源码 583期】
  11. ubuntu虚拟机使用笔记——9、vmware卸载,重新安装ubuntu,重安后不能共享文件
  12. ShadowGun Shader学习
  13. FINAUNCE金融业增速反弹信贷投放创新高叠加股市回暖
  14. VBox 快照备份虚拟机
  15. 10000条txt数据转为excel表格数据
  16. mezzanine 历险记
  17. photon 服务器操作系统,[专栏作家] Photon Server之Photon Control服务器控制界面
  18. 删了 GPL 协议转闭源?法院判决:GPL 协议终身有效
  19. 追逐梦想,意味你要牺牲一切,这就是代价!!!----蔡赟
  20. 【删文说明】谁说本科妹纸不能拿 BAT SP Offer?

热门文章

  1. linux拷贝到新建文件夹命令行,Linux创建文件touch,复制文件cp,tab补全,链接文件ln命令...
  2. java stringbuffer数组_Java中字符数组、String类、StringBuffer三者之间相互转换
  3. Netty核心模块组件
  4. MATLAB 句柄函数记录——多变量
  5. .db怎么复制到java里_MongoDB如何复制collection里的数据到另一个collection方法总结...
  6. java字符串字节_Java中字符串与byte数组之间的相互转换
  7. 花音机器人_【扑杀花音攻略组】超弩级光机器人攻略
  8. java中常见的包类接口_Java中一些常用的类,包,接口
  9. mysql数据库新浪博客_4.MySQL数据库类的定义
  10. (五)Netty之Selector选择器