点击上方蓝字谈思实验室
获取更多汽车网络安全资讯
01
AURIX的芯片手册
02
内存
内存在电脑中起着举足轻重的作用。内存一般采用半导体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。
RAM作为主存的主要部分,按其结构分为:
动态随机存取存储器 (Dynamic Random Access Memory,DRAM), 同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM), 静态随机存取存储器(Static Random-Access Memory,SRAM)。
可以理解为FLASH是一个静态的存储【也就是只读存储器(ROM)】,可以用来存储函数或者常量,也就是定义的这部分烧录到芯片里,执行内容不会有改变。即便掉电,里面的数据也不会丢失。
而RAM是一个动态的存储,可以读数据,也可以写数据。RAM可以在运行过程中,可以当flash用。但是如果掉电,RAM里的数据不会保存,一旦掉电,数据就全没了。
举例:一个手机里存着我们很多的数据,如果手机关机,这些数据或者图片是存放在FLASH里的,因为FLASH是存放静态数据的,而当手机重新上电的时候,flash里的数据会通过指令传输到RAM里,之后在被系统里的函数调用,从而开机后,手机可以看到关机前的数据。
03
缓存
高速缓冲存储器(Cache),是位于CPU与主内存间的一种容量较小但速度很高的存储器:
由于CPU的速度远高于主内存,CPU直接从内存【(RAM)、(ROM)】中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。
缓存需要把内存里的数据放进来。Cache 的数据放置的策略决定了内存中的数据块会拷贝到 CPU Cache 中的哪个位置上,因为 Cache 的大小远远小于内存,所以,需要有一种地址关联的算法,能够让内存中的数据可以被映射到 Cache 中来。这个有点像内存地址从逻辑地址向物理地址映射的方法,但不完全一样。
缓存的命中:
根据要寻址的地址的tag来逐一与cache中的tag字段比较,如果有与之匹配的cache line,也就是cache hit,如果遍历整个cache,也没有找到匹配的cache line,那就是cache miss了。
Cache的层次设计:
Cache设计采用了指令 Cache(简称I-Cache)和数据Cache (简称D-Cache) 分开的方式。
1.在 I-Cache中存储有微处理器需要的指令,在微处理器的取指阶段,通过程序计数器PC提供给I-Cache的地址,微处理器可以获取需要的指令。
2.而D-Cache则是作为一个数据的存储,并提供对于Load/Store指令所要操作地址的数据,它地址则来自于ALU运算的结果。
I-Cache和微处理器的接口以及I-Cache和L2 I-Cache的接口都是单向的。D-Cache和微处理器的接口以及D-Cache和L2 Cache的接口是双向的。这样处理的原因在于I-Cache存储的是指令,不需要更改所存储的数据的值。而D-Cache 中存储的是数据,其值会根据指令操作的不同而改变。比如:在运行 Store 指令的时候会对 D-Cache 中相应地址进行写入数据的操作。
04
AURIX中的Cache
在AURIX中,CPU分为Cache和Non-Cache,CPU0的PFlash访问方式如下图:
Cache使能的方式是配置下面这个寄存器:
(1)使能Cache以后,每个CPU各有一段PCache/DCache区域,以便于提前缓存指令和数据(例如访问8和9的 Segment,这是打开了P-Cache后,P-Flash和LMU对应的地址)。
当CPUx取指令时,会先去PCache空间查找指令,如果在PCache中查找到对应的指令,即:Cache Hit,则不必再去Physical Area搬运对应的数据,提高了指令读取的效率。如果没有找到对应的指令,即:Cache Miss,再去Physical Area搬运对应的数据到PCache空间(Program Cache refills),而搬运的过程需要额外的等待时间,等效于Non-Cached方式,指令读取时间延长;同理,当CPU取数据时,会先去DCache空间查找数据,如果在DCache中命中数据,则直接读取,如果没有命中,再去Physical Area搬运。
(2)对于Non-Cache方式读取指令和数据(例如访问10和11的 Segment,这是关闭了P-Cache后,P-Flash和LMU对应的地址),CPU需要直接访问Physical Area,而访问Physical Area区域所消耗的时间远比访问PCache/DCache区域慢的多。
P-Cache(P-Cache就是I-Cache)与D-Cache的区别
P-Cache的作用是缓存指令,D-Cache是缓存数据。指令一般不会被修改,所以P-Cache在硬件设计上是可以是只读的,这在一定程度上降低硬件设计的成本。D-Cache则是作为一个数据的存储,并提供对于Load/Store指令所要操作地址的数据,它地址则来自于ALU运算的结果。
在C语言中,内存主要分为5个区,分别为栈区、堆区、全局/静态存储区、常量存储区、代码区。其中代码区存放源程序的二进制代码,其余四个区都存储进程运行过程中需要的存储的变量。
一般,指令(P-Cache或者PSPR的内容)是放在代码区或者常量区,而数据(D-Cache或DSPR的内容)放在全局(静态)区。
举例:
我定义一个函数:
观察他的map文件里的地址:.o是他所属的C文件,下面是函数所属的地址。同样的我定义一个未初始化的全局变量,也可以找到他的地址。
上海众华律师事务所接受上海探偲商务信息咨询有限公司(以下称“委托人”的委托,指派本律师事务所胡晓光律师,就个别公司涉嫌不正当竞争,严重损害委托人合法权益事宜,作如下声明。
我定义一个全局变量:
他的map文件里的地址:.o是他所属的文件,下面是函数所属的地址。同样的我定义一个.bss或.data的全局变量,也可以找到他的地址。
linker file用来定义数据和代码具体存放在哪一块。比如它会规定存储在Flash的启动函数_START()的存储地址和BootROM里面reset vector内预设的地址匹配,这样复位以后就总会从启动函数_START()开始执行
如何在代码里将函数、变量、常量等由一个地址移到另一块地址:
举例:我想将代码里的函数从原来P-Cache的地址移到PSPR这个地址。要如何处理。原来P-Cache访问P-flash,现在改成PSPR访问P-flash
我在TASKING的.lsl文件中添加一个规则,这个规则的意思就是将代码中含有 PSPR_CORE2_CPULoad_Optimize 这个关键词的函数放到PSPR的地址里面。
代码中添加的内容是:
函数地址的变化:由801ea848变成50100004
上面是将某个函数换地址,也可以用上面的方式将整个文件的函数换地址,除此之外,还可以如下图将划线的内容改成CDD_SDH*,这样也可以将整个C文件的函数换个地址:
来源:本文为CSDN博主「梅尔文.古」的原创文章
原文链接:https://blog.csdn.net/xiandang8023/article/details/129752705
精品活动推荐
更多文章
关于涉嫌仿冒AutoSec会议品牌的律师声明
一文带你了解智能汽车车载网络通信安全架构
网络安全:TARA方法、工具与案例
汽车数据安全合规重点分析
浅析汽车芯片信息安全之安全启动
域集中式架构的汽车车载通信安全方案探究
系统安全架构之车辆网络安全架构
车联网中的隐私保护问题
智能网联汽车网络安全技术研究
AUTOSAR 信息安全框架和关键技术分析
AUTOSAR 信息安全机制有哪些?
信息安全的底层机制
汽车网络安全
Autosar硬件安全模块HSM的使用
首发!小米雷军两会上就汽车数据安全问题建言:关于构建完善汽车数据安全管理体系的建议