内存保护_2:RTA-OS内存保护逻辑及配置说明

news2024/9/29 17:32:01

上一篇 | 返回主目录 | 下一篇

内存保护_2:RTA-OS内存保护逻辑及配置说明

  • 3 OS配置说明
    • 3.1 OS一些基本概念及相互关系
      • 3.1.1 基本概念
      • 3.1.2 相互关系
    • 3.2 内存保护基本逻辑(RTA-OS)
      • 3.2.1 应用集的基本分类
      • 3.2.2 内存保护与应用集的关系
    • 3.3 OS等级相关概念
    • 3.4 一种可用的RTA-OS配置
      • 3.4.1 OS等级配置
      • 3.4.2 应用集参数设置
      • 3.4.3 生成的重要参数及Hook函数说明
        • 3.4.3.1 保护集参数说明
        • 3.4.3.2 内存保护范围修改Hook函数说明
        • 3.4.3.3 错误处理Hook函数说明
        • 3.4.3.4 内存访问权限检查Hook函数说明
      • 3.4.4 RTA-OS内存保护处理逻辑说明
        • 3.4.4.1 内存范围保护逻辑
        • 3.4.4.2 变量/地址访问权限检查逻辑

3 OS配置说明

3.1 OS一些基本概念及相互关系

3.1.1 基本概念

  • SWC(软件组件:Software Compont):一个以功能或者功能集合为基础的概念,比如说开关采样、行车、泊车等,具体取决于软件上层功能划分
  • Runnable(执行实体):软件组件的重要组成,功能实现的载体,比如说一个功能需要三种周期的任务去完成不同的任务,则至少需要三个不同的Runnable
  • Task(任务):由OS直接管理调度的实体,也是软件功能组件Runnable的载体(简单来说,就是Runnbale在Task中被调用,在基础任务中,Runnable的周期取决于Task周期)
  • ISR(二类中断):与传统意义上的中断类似,不过它由OS进行管理,可调用OS的部分服务
  • Application(应用集):资源组成的功能单元,由中断、调度表、Alarm、任务等构成。这是一个资源集合的概念,在应用集之间访问存在较多限制(此处与内存保护、服务保护等概念紧密相关)

3.1.2 相互关系

3.2 内存保护基本逻辑(RTA-OS)

3.2.1 应用集的基本分类

  • 可信应用集(Trust OS-Application):无内存访问限制、操作系统API以及可不必进行时间保护,可以在特权模式运行,并且假定不会发生内存保护错误(若发生此类错误,系统将会关闭OS或者跑飞)
  • 不可信应用集(Non-Trust OS-Application):不允许在没有监控及保护的情况下运行,存在内存访问限制、OS相关API访问限制以及时间行为限制,并且不允许运行在特权模式下

3.2.2 内存保护与应用集的关系

如上一章所说,应用集为内存保护处理的分块单位(即在此应用集中的中断、任务等在没有特殊访问设置的情况下,访问权限会受到应用集类型的限制)。如下图所示,为非可信应用集的访问许可情况。

3.3 OS等级相关概念

SC1SC2SC3SC4
支持多核支持支持支持支持
内存保护支持支持
时间保护支持支持
调度表支持支持支持支持
OSEK OS支持支持支持支持

备注:根据表格可知需要设定为SC3才可使用内存保护功能

3.4 一种可用的RTA-OS配置

3.4.1 OS等级配置

结合章节3.3知道,内存保护需要修改配置:

  • “OsScalabilityClass”设置为”SC3/SC4“(取决于是否配置时间保护)
  • “OsStatus”设置为“EXTENDED”
  • “OsProtectionHook”设置为“True”

3.4.2 应用集参数设置

根据图中两个参数可设置三种应用集(可信、不可信、可信带保护)

3.4.3 生成的重要参数及Hook函数说明

3.4.3.1 保护集参数说明

如下,在"Os_Cfg.h"文件中生成三个配置参数

  • 可信应用集默认值在此处无参数说明
  • 不可信应用集掩码(0x1000),对比备注中的参数可知PRS = 1,IO = 0。即此时设置的保护集为“Protection Set 1”,用户模式为“ User-0 Mode”
  • 可信带保护应用集掩码(0x2800),对比备注中的参数可知PRS = 2,IO = 2。即此时设置的保护集为“Protection Set 2”,用户模式为“Supervisor Mode”

从生成的参数可以看出来,不可信应用集使用保护集“Protection Set 1”,可信带保护应用集使用保护集“Protection Set 2”,因此在进行内存保护集选择时需要根据相应应用集配置的属性进行选择

#define OS_TARGET_TRICORETASKING
#define OS_TRICORE_UNTRUSTED_MASK 0x1000U
#define OS_TRICORE_TRUSTEDWITHPROTECTION_MASK 0x2800U

备注: 1)、IO——[11: 10];
2)、PRS[2]——[15];
3)、PRS[1: 0]——[13: 12];

3.4.3.2 内存保护范围修改Hook函数说明

此函数调用的位置

  • 在调用访问受限的应用集之前
  • 在调用属于访问受限的应用集的二类中断之前
  • 在调用访问受限的应用集中的“Startup”、“Shutdown”、“ErrorHook”之前
  • 调用访问受限的应用集中的“TrustedFunction”之前

在此函数中可根据传入的参数“ApplicationContext”对内存范围区域进行适当设置,“ApplicationContext”包含如下信息:

  • Application:应用集ID
  • CoreID:内核ID
  • TaskID:任务ID(当为二类中断时,此处为INVALID_TASK)
  • ISRID: 中断ID(当为任务时,此处为INVALID_ISR)
  • Address:将分配的栈指针
  • Size:用于设置栈溢出阈值(未见效果)
  • Trusted:是否为可信应用集
FUNC(void, OS_CALLOUT_CODE) Os_Cbk_SetMemoryAccess(Os_UntrustedContextRefType ApplicationContext)
{
/* Set memory protection */
}

3.4.3.3 错误处理Hook函数说明

在出现错误时,会进入该函数,可根据传入的参数分别是否为内存保护错误(E_OS_PROTECTION_MEMORY)。可通过API获取核ID、应用集ID、中断ID或任务ID、Trap数据等信息,可根据这些数据进行不同的处理。

FUNC(ProtectionReturnType, OS_CALLOUT_CODE) ProtectionHook(StatusType FatalError)
{
/* Deal with error*/
}

3.4.3.4 内存访问权限检查Hook函数说明

在函数中可对变量、地址等的访问权限进行检查,可通过“Os_CheckTaskMemoryAccess”、“Os_CheckISRMemoryAccess”(根据所在函数的位置进行选择)进行检查。在调用这两个API后,OS会进入“Os_Cbk_CheckMemoryAccess”回调函数,在此函数中,可根据传入的参数进行相应地址权限检查,并返回相应的访问权限。

FUNC(AccessType, OS_CALLOUT_CODE) Os_Cbk_CheckMemoryAccess(ApplicationType Application, TaskType TaskID, ISRType ISRID, MemoryStartAddressType Address, MemorySizeType Size)
{
/* Judge  memory range*/
}
FUNC(AccessType, OS_CODE) Os_CheckTaskMemoryAccess(TaskType TaskID, MemoryStartAddressType Address, MemorySizeType Size)
FUNC(AccessType, OS_CODE) Os_CheckISRMemoryAccess(ISRType ISRID, MemoryStartAddressType Address, MemorySizeType Size)

3.4.4 RTA-OS内存保护处理逻辑说明

3.4.4.1 内存范围保护逻辑

Task/Isr调度过程如下:

  • 设置内存保护范围
  • 根据应用集属性,设置保护集Id以及用户模式(IO模式)
  • 进入Task/Isr

3.4.4.2 变量/地址访问权限检查逻辑

内存访问权限检查过程如下:

  • 软件模块调用"Os_CheckTaskMemoryAccess/Os_CheckISRMemoryAccess"
  • 将会进入“Os_Cbk_CheckMemoryAccess”,在此函数内检查地址的合法性,并返回相应的权限
  • 返回软件调用模块,并得到相应的权限数据

上一篇 | 返回主目录 | 下一篇

#实现代码设计公司需求及设计,不方便展示

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

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

相关文章

七大排序(Java)

目录 一、插入排序 1. 直接插入排序 2. 希尔排序 二、选择排序 1. 直接选择排序 2. 堆排序 三、交换排序 1. 冒泡排序 2. 快速排序 四、归并排序 五、总结 一、插入排序 1. 直接插入排序 抓一张牌,在有序的牌中,找到合适的位置并且插入。 时间…

三战阿里测试岗,成功上岸,面试才是测试员涨薪真正的拦路虎...

第一次面试阿里记得是挂在技术面上,当时也是技术不扎实,准备的不充分,面试官出的面试题确实把我问的一头雾水,还没结束我就已经知道我挂了这次面试。 第二次面试,我准备的特别充分,提前刷了半个月的面试题…

防止jar被反编译 不安装jdk运行jar

防止jar被反编译1.pom.xml<repositories><repository><id>jitpack</id><url>https://jitpack.io</url></repository> </repositories><dependencies><dependency><groupId>org.openjfx</groupId><…

RabbitMQ死信队列

目录 一、概念 二、出现死信的原因 三、实战 &#xff08;一&#xff09;代码架构图 &#xff08;二&#xff09;消息被拒 &#xff08;三&#xff09;消息TTL过期 &#xff08;四&#xff09;队列达到最大长度 一、概念 先从概念解释上搞清楚这个定义&#xff0c;死信&…

Spark 3.3.x 读取 HBase 2.x 异常(无法正常连接或读取数据)

无法连接 1. 先检查集群中的 HBase 服务、ZooKeeper 服务是否正常启动&#xff0c;有没有挂掉。 2. Spark 中的 HBase 版本是否与集群一致&#xff0c;代码中的相关包是否导入正确。 3. 连接参数&#xff08;地址、端口&#xff09;是否设置正确&#xff0c;如下所示&#x…

pyqt 制作exe步骤

之前的博客记录 使用pycharmpyqt 编写一个桌面端&#xff08;mac&#xff09;_python开发桌面工具mac_Y_Hungry的博客-CSDN博客 python开发exe程序界面及打包环境配置_Y_Hungry的博客-CSDN博客 1.编写代码 2.打包 pyinstaller -w --add-data "logo.ico;." --add…

Redis常见的数据类型命令

文章目录Redis 常见的数据类型及命令一、常见的NoSQL二、Redis 简介三、key 键的一些操作命令四、Redis的五种基本数据结构1、String&#xff08;字符串&#xff09;介绍常用命令1.1 set/get1.2 append1.3 strlen1.4 setex1.5 mset/mget1.6 setrange/getrange1.7 setnx1.8 incr…

数据库管理工具的使用

目录 摘要 一、Navicat是什么&#xff1f; 二、使用步骤 1.如何下载与安装 2.如何连接远程数据库 总结 摘要 本文主要介绍数据库管理工具的使用 一、Navicat是什么&#xff1f; 它是一款数据库管理工具&#xff0c;将此工具连接数据库,你可以从中看到各种数据库的详细…

JavaScript 面向对象【快速掌握知识点】

目录 类和对象 属性和方法 继承 多态 封装 类和对象 类是用于定义对象的模板或蓝图&#xff1b;它包含对象的属性和方法&#xff0c;我们可以使用class关键字来定义类。 class Person {constructor(name, age) {this.name name;this.age age;}sayHello() {console.log(H…

JSP+SQL电量监视系统设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;电脑界常有一股又一股的风潮&#xff0c;在这风潮中&#xff0c;JBuilder 是使用最广泛的工具之一。JBuilder6 提供了可视化集成开发工具&#xff0c;支持开发人员构建标准的爪哇应用系统。其开放的环境、基于组建的开发方式和丰富…

【软件测试面试题】2023年测试人面试专属,最全接口测试面试题大全(附回答)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 1、HTTP和HTTPS协议…

2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A(9)

目录 竞赛内容 模块A 基础设施设置与安全加固 一、项目和任务描述&#xff1a; 二、服务器环境说明 三、具体任务&#xff08;每个任务得分以电子答题卡为准&#xff09; A-1任务一 登录安全加固&#xff08;Windows&#xff09; 1.密码策略 a.更改或创建密码时执行复杂…

17- TensorFlow实现手写数字识别 (tensorflow系列) (项目十七)

项目要点 模型创建: model Sequential()添加卷积层: model.add(Dense(32, activationrelu, input_dim100)) # 第一层需要 input_dim添加dropout: model.add(Dropout(0.2))添加第二次网络: model.add(Dense(512, activationrelu)) # 除了first, 其他层不要输入shape添加输出…

这是一款值得开发人员认真研究的软件,数据库优化,应用服务器安全优化...

1.查询数据库死锁相关信息2.查看数据库的链接情况3.当前实例上的所有用户4.创建数据库独立密码5.查看数据库使用的端口号6.当前数据库设置的最大连接数7.当前数据库最大的理论可连接数8.当前数据库实例的连接数9.当前数据库连接数10.当前数据库连接超时设置11.当前sqlserver 超…

SMART系统—考试监控及阅卷模块的设计与开发

技术&#xff1a;Java、JSP等摘要&#xff1a;Smart在线考试评估系统(简称“SMART系统”)&#xff0c;是基于Browser/Server&#xff08;简称B/S&#xff09;结构的数据库访问模式&#xff0c;采用Struts Spring Hibernate作为平台搭建的框架开发的一套新型智能的远程教育软件…

伺服三环控制深层原理解析

我们平时使用的工业伺服,通常是成套伺服,即驱动器和电机型号存在配对关系。 但有些时候,我们要用电机定转子和编码器制作非成套电机,这种时候,我们需要对驱动器进行各种设置才能驱动电机。 此篇文章将通过介绍伺服控制的三环控制原理入手来说明我们调试非成套伺服时需要…

2023年微信小程序获取手机号授权登录注册详细教程,包含服务端教程

前言 小程序中有很多地方都会用到用户的手机号&#xff0c;比如登陆注册&#xff0c;填写收货地址等等。有了这个组件可以快速获取微信绑定手机号码&#xff0c;无须用户填写。网上大多数教程还是往年的&#xff0c;而微信官方的api已做了修改。本篇文章将使用最新的方法获取手…

【unity学习记录】Canvas Group组件

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Canvas Group组件 Canvas Group画布组介绍详解1. Alpha2. Interactable3. Blocks Raycasts4. Ignore Parent Groups介绍 画布组…

用反射模拟IOC模拟getBean

IOC就是spring的核心思想之一&#xff1a;控制反转。这里不再赘述&#xff0c;看我的文章即可了解&#xff1a;spring基础思想IOC其次就是java的反射&#xff0c;反射机制是spring的重要实现核心&#xff0c;今天我看spring的三级缓存解决循坏引用的问题时&#xff0c;发现一个…

机器学习——模型评估

在学习得到的模型投放使用之前&#xff0c;通常需要对其进行性能评估。为此&#xff0c;需使用一个“测试集”(testing set&#xff09;来测试模型对新样本的泛化能力&#xff0c;然后以测试集上的“测试误差( tootino error)作为泛化误差的近似。我们假设测试集是从样本真实分…