IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM64处理器缓存原理 -> 正文阅读

[嵌入式]ARM64处理器缓存原理

1. 处理器缓存(缓存和内存之间的区别)

? ? ? ? 缓存是静态随机访问存储器(SRAM),访问速度接近于处理器的速度,但是集成度低,和内存相比,在容量相同的情况下体积大。内存是动态随机访问存储器(DARM),访问速度慢,但是集成度高,和缓存相比,在容量相同的情况下体积小。

? ? ? ? 平时我们讲多级缓存:一级缓存(集成在处理器内部,离处理器最近,容量小,访问时间是1个时钟周期);二级缓存(可能在处理器内部或者外部,容量更大,访问时间是大约10个时钟周期);高端处理器有三级甚至四级缓存。在SMP系统中,处理器每个核都有独立一级缓存,所有核共享二级缓存。

2.缓存结构

? ? ? ? 我们平时所看到32KB四路组相连缓存(32K-4-way set associative cache),缓存结构如下:

? ? ? ? ? 32KB-4路组相连缓存:缓存由4个子缓存并联组成,四路并联,四路容量和32KB,每路容量是8KB。

缓存行的标签通常是从物理地址生成的,索引可能从物理地址或虚拟生成,根据索引的生成方式把缓存分为两类:

? ? ? ? a. 把从物理地址生成索引和标签的缓存称为物理索引物理标签缓存(PIPT,Physcally Indexed Physically Tagged)。

? ? ? ? b. 把 从虚拟地址生成索引、从物理地址生成标签的缓存称之为虚拟索引物理标签缓存(VIPT,Virtually Indexed Physically Tagged)。

? ? ? ? 比如2个进程共享一物理页,一个物理地址被映射到两虚拟地址。假设页长度为4KB,缓存中每路容量为8KB,缓存行长度为32字节。

? ? ? ? ?缓存行的字节偏移是虚拟地址的第0-4位,索引是虚拟地址的第5-12位。当缓存中每路的容量大于页长度的时候,会出现缓存别名问题。如果缓存中每路的容量小于或等于页长度,那么不会出现缓存别名问题。

? ? ? ? 对于可写的数据,缓存别名问题的危害性:如果修改一个缓存行中的数据,但另一个缓存行的数据依然是旧的,将导致两个虚拟地址读到数据不同,对于指令和只读数据,缓存别名问题没有危害。

? ? ? ? 软件可以规避缓存别名问题,把共享内存映射到进程的虚拟空间的时候,如果分配虚拟内存区域的起始地址是缓存中每路容量的整数倍,就可以规避缓存别名问题。

ARM64处理器架构的指令缓存有三种类型:PIPT缓存、VPIPT和VIPT

3.缓存策略(缓存分配策略)
?

a.写分配(weite allocation):假设处理器写数据的时候没有命中缓存行,那么分配一个缓存行,然后读取数据并填充缓存行,接着把数据写到缓存行。

b.读分配(read allocation):如果处理器读数据的时候没有命中缓存行,那么分配一个缓存行。

缓存更新有2种策略:

a.写回(write-back):处理器写数据的时候,只更新新缓存,把缓存行标记为脏,只在缓存行被替换或被程序清理时候更新内存。

b.写透(write-through):处理器写数据的时候,同时更新缓存和内存,但不会把缓存行标记为脏。

集成在处理器内部缓存使用内存属性,外部缓存使用外部属性,具体使用如下:

4.内核在什么环境下才需要维护缓存?

a.内核修改或者删除也表的时候,需要冲刷缓存;

b.内核使用内核虚拟地址修改进程的物理页,为路避免产生内核虚拟地址和用户虚拟地址之间的缓存别名问题,需要冲刷缓存。

c.和外围设备交互时,处理器写数据到DMA区域的内存块,然后通过设备外围设计的控制器上的控制寄存器发生命令,外围设备通过DMA控制器从物理内存读取数据。

5.ARM64处理器支持3种缓存操作

a.使缓存失效:清除缓存行的有效位。

b.清理缓存行:首先把标记为脏的缓存行里面的数据写到下一级缓存或内存,然后清楚缓存行的有效位。只适用于使用写回策略的数据缓存。

c.清零:把缓存里面的一个内存块清零,不需要先从内存读取数据到缓存,只适用数据缓存。

6.ARM64系统架构的内存如何flush_icache_range,此函数从指令缓存冲刷一个虚拟地址范围。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 23:10:33  更:2021-08-10 23:10:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:14:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码