AURIX CSA(上下文存储)介绍(续写中...)

news2024/12/23 4:40:32

1.CSA概述

        CSA(Context Save Areas)上下文存储区域,每次函数调用、进入中断、进入Trap都会存CSA对象,便于退出时候恢复。每个CSA对象的大小为固定的64字节。最大可以支持分配为2^16=4M。

2.GPRs寄存器

  • 32个通用寄存器(GPRs)
    • 16个32位地址寄存器A[0] - A[15]。
    • 16个32位数据寄存器D[0] - D[15]。
    • 其中[0] - [7]为“lower registers”
    • 其中[8] - [15]为“upper registers”
  • 1个PC - 程序计数器。
  • 1个PCXI - 先前上下文信息寄存器。
  • 1个PSW - 程序状态字寄存器。
  • PCXI、PSW和PC寄存器对于存储和恢复任务上下文至关重要。
  • 其中4个通用寄存器
    • D[15]用作隐式数据寄存器
    • A[10]是栈指针(SP)寄存器
    • A[11]是返回地址(RA)寄存器
    • A[15]是隐式地址寄存器

3.CSA内容

3-1.上下文类型

任务是一个独立的控制线程。任务的状态由其上下文定义。当一个任务被中断时,处理器使用该任务的上下文来重新启用该任务的继续执行。

上下文类型包括:

  • Upper context:由上层地址寄存器A[10] ~ A[15]和上层数据寄存器D[8] ~ D[15]组成。上层环境还包括PCXI和PSW。为了函数调用的目的,这些寄存器被指定为非易失性(它们的内容在调用期间被保留)。
  • Lower context:由下地址寄存器A[2] ~ A[7]、下数据寄存器D[0] ~ D[7]、A[11]和PCXI组成。
  • 上下文保存到内存时,占用16个字块的存储空间,称为上下文保存区(csa)。
  • PCXI.UL == 1为Lower context;PCXI.UL == 0为Upper context。

PCXI寄存器:先前上下文信息寄存器

PCXI寄存器包含到前一个执行上下文的链接信息,支持中断和自动上下文切换。PCXI是任务状态信息的一部分。前一个上下文指针(PCX)保存前一个任务的CSA的地址。

3-2.任务切换操作

当遇到如表7这些事件或指令,将保存或恢复任务的upper or lower context。

    • Upper context 会在外部中断、Trap或函数调用时自动保存。
    • Lower context 通过指令显式保存。在表7中,“保存”是从链接字中读取FCX的下一个值后,通过Free CSA表头指针寄存器(FCX)进行存储。Store是通过指令的有效地址进行存储,不改变CSA列表或FCX寄存器。

在upper and lower contexts 中寄存器的处理有本质的区别

  • lower context寄存器与全局寄存器类似,因为中断处理程序、Trap处理程序或被调用函数看到的值与中断、Trap或调用之前寄存器中的值相同。在中断、Trap处理程序或被调用函数中对这些寄存器所做的任何更改,在事件返回后仍然存在,因为它们不会自动恢复为return from Call (RET)或return from Exception (RFE)。
  • lower context寄存器可以用来向被调用函数传递参数,并传递这些函数的返回值。中断和Trap处理程序必须在使用这些寄存器之前保存它们在这些寄存器中找到的原始值,并在退出之前恢复原始值。
  • upper context寄存器不能保证是静态硬件寄存器。从概念上讲,函数调用或中断处理程序总是从它自己私有的upper context寄存器集开始执行。被中断函数或调用函数的upper context寄存器不继承。

        只有A[10]、A[11]、PSW、PCXI和(在trap的情况下)D[15]寄存器以被调用函数、trap处理程序或中断处理程序中体系结构定义的值开始。如果一个函数、Trap处理程序或中断处理程序在写入值之前读取任何其他 upper context registers,那么它正在执行一个未定义的操作。

3-3.上下文保存区域和上下文列表

该体系结构使用了固定长度的上下文保存区域的链表。CSA是16 word的内存存储,与16 word的边界对齐。每个CSA只能保存一个one upper or one lower context。csa通过一个LinkWord连接在一起。

LinkWord包括两个字段,它们将给定的CSA链接到链表中的下一个CSA。字段是一个4位的段和一个16位的偏移量。段号和偏移量用于生成链接CSA的有效地址(Effective Address, EA)。参见图13。

指针偏移量每增加1,EA就会增加到比前一个位置高16 word的地址。csa的每个地址段的总可用范围为4MByte,即2^16 csa的存储空间。

4.CSA的保存和恢复

每个CSA对象通过Linkword地址来链接,Linkword的地址内容都是指向下一个链接的地址。

在执行上下文保存操作后,会更新A[11]的返回地址:

  • 对于调用,用函数返回地址更新A[11](RA)。
  • 对于同步Trap,A[11](RA)更新为引发trap的指令的PC。
  • 对于一个系统调用和一个异步Trap或一个中断,一个A[11](RA)被更新为下一个要执行的指令的PC。

PCX、FCX、LCX:这三个上下文管理寄存器是指针,在上下文保存和恢复操作期间使用。

PCX(Previous Context List):PCX寄存器保存了前一个进程的CSA地址。PCX是PCXI寄存器的一部分。

LCX:释放CSA链表限制指针寄存器。

FCX(Free Context List):未使用的CSA表头指针(FCX)寄存器保存了未使用的CSA表头指针,总是指向一个可用的CSA。

5.带有中断和Trap的下文切换

当中断或Trap(例如NMI或SYSTRAP)发生时,处理器将当前任务的上层上下文保存在内存中,暂停当前任务的执行,然后开始执行中断或Trap处理程序。

6.函数调用的上下文切换

在进行函数调用时(执行call指令),必须保存调用例程的上下文,然后恢复调用者从函数返回后的执行。

在函数调用时,硬件保存了整个上层上下文寄存器集。此外,调用指令对上层上下文的保存与调用跳转并行进行。此外,恢复upper context是由RET (Return)指令执行的,与返回跳转并行进行。被调用函数不需要保存和恢复调用者的上下文,并且不需要限制对上层上下文寄存器的使用。被调用函数和被调用函数必须在低层上下文寄存器的使用上相互配合。

7.CSA初始化代码

启动代码初始化CSA主要是建立链表关系,设置链表头(PCX)和尾(LCX),如下图示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1489581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis缓存【重点】

参考链接 https://xiaolincoding.com/redis/cluster/cache_problem.html#%E7%BC%93%E5%AD%98%E9%9B%AA%E5%B4%A9 目录 缓存雪崩大量数据同时过期Redis 故障宕机 缓存击穿第一种方案,非法请求的限制第二种方案,缓存空值或者默认值第三种方案,使…

回溯算法套路②组合型回溯+剪枝【基础算法精讲 15】

学习地址 : 回溯算法套路②组合型回溯剪枝【基础算法精讲 15】_哔哩哔哩_bilibili 回顾 : 从n 个数中选出k个数的组合 , 可以看成是长度固定的子集 ; 剪枝技巧 : 77 . 组合 链接 : . - 力扣(LeetCode) 枚举下一个元素选…

嵌入式中volatile关键字的使用方法

Hi,大家好! 今天我们来学习一下volatile关键字,volatile关键字想必大家在平时编程中都见过或用过。可是小伙伴们有没有想过什么时候需要使用volatile关键字吗? 在C语言中,volatile是一个关键字,用于告诉编译器不要优化…

【MATLAB第97期】基于MATLAB的贝叶斯Bayes算法优化BiGRU双向门控循环单元的多输入单输出回归预测模型,含GRU与BiGRU多层结构优化选择

【MATLAB第97期】基于MATLAB的贝叶斯Bayes算法优化BiGRU双向门控循环单元的多输入单输出回归预测模型,含GRU与BiGRU结构层数优化 前言 前面在【MATLAB第10期】讲解了基于贝叶斯Bayes算法优化LSTM长短期记忆网络的多输入单输出回归预测模型。 本次模型难点包括&am…

ChatGPT数据分析应用——热力图分析

ChatGPT数据分析应用——热力图分析 ​ 热力图分析既可以算作一种可视化方法,也可以算作一种分析方法,主要用于直观地展示数据的分布情况。接下来我们让ChatGPT解释这个方法的概念并提供相应的案例。发送如下内容给ChatGPT。 ​ ChatGPT收到上述内容后&…

[linux]shell脚本语言:变量、测试、控制语句以及函数的全面详解

一、shell的概述 1、shell本质是脚本文件:完成批处理。 shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行。shell 脚本主要用于帮助开…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:无障碍属性)

组件可以设置相应的无障碍属性和事件来更好地使用无障碍能力。 说明: 从API Version 10 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 accessibilityGroup accessibilityGroup(value: boolean) 无障碍组。 系统能力&#…

机器学习:主成分分析笔记

主成分分析(Principal Component Analysis,PCA)是一种无监督的机器学习算法,通常用于高维数据的降维、提取主要特征、数据降噪和可视化。PCA的基本思想是将原始数据的多个变量转换为少数几个相互独立的变量(即主成分&a…

【Web前端入门学习】——HTML

目录 HTML简介HTML文件结构常用文本标签标题标签段落标签有序列表和无序列表表格标签 HTML属性a标签—超链接标签图片标签 HTML区块块元素与行内元素 HTML表单 HTML简介 HTML全称是Hypertext Markup Language超文本标记语言。 HTML的作用: 为网页提供结构&#xff…

Stream流(Java)

目录 一、介绍 二、Stream流的使用步骤 三、Stream流常见的中间方法 四、Stream流常见的终结方法 一、介绍 Stream也叫Stream流,是JDK8开始新增的一套API,可以用于操作集合或者数组的数据。 优势:Stream流大量的结合了Lambda的语法风格来…

SpringCloud远程调用为啥要采用HTTP

关于SpringCloud远程调用采用HTTP而非RPC。 首先SpringCloud开启Web服务依赖于内部封装的Tomcat容器,而今信息飞速发展,适应大流量的微服务,采用Tomcat处理HTTP请求,开发者编写Json作为资源传输,服务器做出相应的响应&…

解决uni-app中使用webview键盘弹起遮挡input输入框问题

这个平平无奇的回答&#xff0c;可能是全网最靠谱的解决方案。 这里我用的是vue3 setup .vue文件的方式 <view> <web-view :fullscreen"false" :webview-styles"{top: statusBarHeight40,height:height,progress: {color: green,height:1px } }"…

软考57-上午题-【数据库】-数据库的控制功能

一、事务管理 1-1、事务的定义 事务是一个操作序列&#xff0c;这些操作&#xff0c;要么都做&#xff0c;要么都不做。 事务和程序是两个不同的概念&#xff0c;一般一个程序可以包含多个事务。 1-2、事务定义的语句 1、事务开始&#xff1a;BEGIN TRANSACTION 2、事务提…

Vue.js 实用技巧:深入理解 Vue.set 方法

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

交友盲盒系统PHP开源的盲盒源码

源码介绍&#xff1a; 交友盲盒系统是一款基于PHP开发的开源免费盲盒系统&#xff0c;旨在为用户提供一个充满乐趣和惊喜的社交体验。该系统具有丰富的功能和灵活的扩展性&#xff0c;可以轻松地满足各种线上交友、抽奖活动等场景的需求。 安装说明&#xff1a; PHP版本&…

算法沉淀——动态规划之完全背包问题(leetcode真题剖析)

算法沉淀——动态规划之完全背包问题 01.【模板】完全背包02.零钱兑换03.零钱兑换 II04.完全平方数 完全背包问题是背包问题的一种变体&#xff0c;与01背包问题不同&#xff0c;它允许你对每种物品进行多次选择。具体来说&#xff0c;给定一个固定容量的背包&#xff0c;一组物…

IDEA自带 .http 请求工具文档

基础语法 请求格式 基础格式 Method Request-URI HTTP-Version Header-field: Header-valueRequest-Body其中&#xff0c;GET 请求可以省略 Method 不写&#xff1b;HTTP-Version 可以省略不写&#xff0c;默认使用 1.1 版本。 示例&#xff1a; GET https://www.baidu.co…

Kubernetes基础(二十七)-nodePort/targetPort/port/containerPort/hostPort

1 nodePort/targetPort/port/containerPort 1.1 实现层级 1.2 配置方式 ########service########### apiVersion: v1 kind: Service metadata: labels: name: app1 name: app1 namespace: default spec: type: NodePort ports: - <strong>port: 8080 t…

C语言文件操作,linux文件操作,文件描述符,linux下一切皆文件,缓冲区,重定向

目录 C语言文件操作 如何打开文件以及打开文件方式 读写文件 关闭文件 Linux系统下的文件操作 open 宏标志位 write&#xff0c;read&#xff0c;close&#xff0c;lseek接口 什么是当前路径&#xff1f; linux下一切皆文件 文件描述符 文件描述符排序 C语言文件操…

Linux 操作系统概述

GNU计划 GNU --"GNUs Not UNIX" 建立一个自由、开放的UNIX操作系统&#xff08;Free UNIX&#xff09; GNU 通用公共许可证&#xff08;General Public License&#xff0c;GPL&#xff09; ”四项基本自由“ 按照自己的意愿自由地运行该软件自由地学习并根据…