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

news/2024/4/26 11:32:02/文章来源:https://blog.csdn.net/u012406840/article/details/129247420

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

内存保护_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.luyixian.cn/news_show_74871.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】条件语句,简单理解

嗨害大家好鸭!我是小熊猫~ Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: 更多python资料获取:点击此处跳转文末名片获取 Python程序语言…

“华为杯”研究生数学建模竞赛2006年-【华为杯】A题:Ad Hoc 网络中的区域划分和资源分配问题(附获奖论文)

赛题描述 Ad Hoc网络是当前网络和通信技术研究的热点之一,对于诸如军队和在野外作业的大型公司和集团来说,Ad Hoc网络有着无需基站、无需特定交换和路由节点、随机组建、灵活接入、移动方便等特点,因而具有极大的吸引力。 在Ad Hoc网络中,节点之间的通信均通过无线传输来完…

【Yolov5】保姆级别源码讲解之-推理部分yolo.py文件

yolo.py文件讲解1.参数部分2.创建模型2.1 第一部分 加载配置文件YOLOv5 detection model2.2 第二部分 是通过加载的配置文件进行网络搭建,每一层Define model2.3 第三部分 对网络的步长进行了处理 Build strides, anchors2.4 第四部分对网络进行初始化 Init weights…

Java还值得选择吗?

自1995年Java问世,到2023年已经差不多存在了28年。作为高级编程语言,他的生命周期相比很多编程语言都长,也见证了很多编程语言的辉煌时刻,不过Java始终都是名列前茅。 Java的主要优势在于其一次编写、随处运行。简单来讲&#xf…

Windows10 把两张图片合并成一张图片

Windows10把两张图片合并成一张图片 文章目录Windows10把两张图片合并成一张图片1. 背景2. "画图"实现多图拼接1. 背景 相比截图功能,在 Google 的 Chrome 浏览器上,整页截屏功能仍需要安装额外的插件才能完成,这一点 微软的 bing…

只会手工测试,裸辞后怎么才能找到工作

我们可以从以下几个方面来具体分析下,想通了,理解透了,才能更好的利用资源提升自己。 一、我会什么? 先说第一个我会什么?第一反应:我只会功能测试,在之前的4年的中我只做了功能测试。内心存在…

Qt5的不同IDE的编码支持中文的问题记录

目录 1. IDE环境设置 1.1 IDE是Qt Creator 1.2 IDE是Visual Studio 1.3 编译器是MSVC 2. 源码文件main函数入口设置中文编码: 1. IDE环境设置 1.1 IDE是Qt Creator 环境设置为“UTF8Bom”编码。 1.2 IDE是Visual Studio 下载插件,名称是ForceUTF…

【C语言】自定义类型:结构体、枚举、联合

目录 1.结构体 1.1结构体类型 1.2结构体的自引用 1.3结构体的初始化 1.4结构体内存对齐 //对齐 //offsetof //修改默认对齐数 1.5结构体传参 2.位段 2.1位段的内存开辟 2.2位段的内存分配 3.枚举 4.联合(共用体) //判断大小端 1.结构体…

广泛运用在工业、轨道交通、监狱的ip对讲终端

ip网络对讲系统是不同于传统广播、调频寻址广播和数控广播的产品,它是基于IP数据网络,将音频信号经过数字编码以数据包形式按TCP\IP协议在局域网或广域网上传送,再由终端解码的纯数字化单向,双向及多向音频扩声系统。 本产品是新一…

2023前端二面经典手写面试题

实现一个call call做了什么: 将函数设为对象的属性执行&删除这个函数指定this到函数并传入给定参数执行函数如果不传入参数,默认指向为 window // 模拟 call bar.mycall(null); //实现一个call方法: Function.prototype.myCall function(context…

LLaMA-META发布单卡就能跑的大模型

2023年2月25日,Meta使用2048张A100 GPU,花费21天训练的Transformer大模型LLaMA开源了。 1.4T tokenstakes approximately 21 days 以下是觉得论文中重要的一些要点 1)相对较小的模型也可以获得不错的性能 研究者发现在给定计算能力限制的情…

《高性能MySQL》读书笔记(下)

目录 Mysql查询性能的优化 慢查询基础 优化数据访问 是否向数据库请求了不需要的数据 查询了不需要的记录 多表联查中返回全部列 MySQL是否在扫描额外的记录 重写查询的方式 切分查询(重点) 分解连接查询(重点) MySQL如…

史上最全的大数据开发八股文【自己的吐血总结】

自我介绍 我本硕都是双非计算机专业,从研一下开始学习大数据开发的相关知识,从找实习到秋招,我投递过100公司,拿到过10的offer,包括滴滴、字节、蚂蚁、携程、蔚来、去哪儿等大厂(岗位都是大数据开发&#…

算法练习(七)数据分类处理

一、数据分类处理 1、题目描述: 信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出…

喜讯!华秋电子荣获第六届“蓝点奖”十佳分销商奖

2 月 25 日,由深圳市电子商会主办的2023 中国电子信息产业创新发展交流大会暨第六届蓝点奖颁奖盛典在深圳隆重举行。 图:华秋商城渠道总监杨阳(右三) 深圳市电子商会连续六年举办“蓝点奖”评选活动,旨在表彰对电子信…

高端电器新十年,求解「竞速突围」

竞争激烈的高端电器品牌们,平时王不见王,但也有例外。海尔、博西、海信、创维、方太、老板等等近乎中国电器行业所有一线品牌副总裁级别以上高层,2月22日都现身于上海,来参加一场由红星美凯龙攒起来的高端电器局,2023中…

能在软路由docker给部署搭建teamsperk服务器么?并且设置好ddns

参考链接(4条消息) 【个人学习总结】使用docker搭建Teamspeak服务器_blcurtain的博客-CSDN博客_teamspeak3 docker(⊙﹏⊙)哎呀,崩溃啦! (tdeh.top)TeamSpeak服务器搭建与使用 - 缘梦の镇 (cmsboy.cn)Openwrt X86 docker运行甜糖-软路由,x86系统,openwrt…

虚拟数字人直播带货相比人工有哪些优势?

新经济时代的到来,彻底改变了传统的消费方式。虚拟数字人的出现,标志着新一波的消费升级到来。虚拟数字人直播带货,不仅降低了商家的带货成本,拉近了商家与消费者的距离,也给消费者带来全新的消费方式。 花西子虚拟形象…

如何查看Spring Boot各版本的变化

目录 1.版本 2.基础特性和使用 3.新增特性和Bug修复 1.版本 打开Spring官网,点进Spring Boot项目我们会发现在不同版本后面会跟着不同的标签: 这些标签对应不同的版本,其意思如下: GA正式版本,通常意味着该版本已…

k8s学习之路 | Day16 k8s 中的容器初探

文章目录容器镜像镜像名称镜像拉取策略私有仓库的拉取策略容器的环境变量和启动命令容器的环境变量容器的启动命令容器的生命周期钩子postStartpreStop容器的探针startupProbelivenessProbereadinessProbek8s 集群中最小的管理单元就是一个Pod,而Pod里面才是容器&am…