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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM cache 结构与访问方式 -> 正文阅读

[嵌入式]ARM cache 结构与访问方式

组相连的cache 结构

cache 基本结构如下图。下图中,存在4路(way,黄框所示为一个way),每一路中有4Line(绿色填充的为一个cache line),每一Line有4个Wrod,假设每个Word有4个Byte。
四个绿色填充的位于不同Way 的Line,组成一个组(Set)。

在查找某个地址索对应的cache 时,使用地址中的index 位找到对应Line,offset 找到对应Word,bytes 位找到对应Word 中的某个Byte。然后使用地址中的tag 位(其实就是高位地址),与cache 中的tag 位对比,如果一致,则命中。

可以看出,具有相同index 的两个不同地址,会索引到相同的Cache Line。如果只有一个Way,在两个地址频繁交替访问的场景下,这两个地址势必频繁cache 未命中。多个way 相连则可以解决这个问题,组相连的意义就是在此。
在这里插入图片描述

PIPT 与VIVT 的访问方式

PIPT(physical index physical tag),物理高速缓存,即使用mmu 翻译过的物理地址来索引cache。因为mmu 翻译过程经常会读取main memory(一般就是DDR),因此必须承担这一项时间消耗。
VIVT(virtual index virtual tag),虚拟高速缓存,即直接使用虚拟地址来索引cache。优点是无需经过mmu 翻译,但是可以想象,由于虚拟地址与物理地址的复杂映射关系,势必存在问题:

  1. 重名问题,即不同的虚拟地址映射到相同的物理地址时,(比如对同一个物理地址mmap了两次这种情况)cache中将拥有两份该物理地址的缓存。如果都是读操作则只有浪费问题;但如果有一方存在写操作,那么还会带来一致性的问题
  2. 同名问题,即相同的虚拟地址映射到了不同的物理地址时,此时通常是不同的进程拥有相同的虚拟地址,但是对应的物理地址不同。此时的问题就是,虽然cache 命中了(cpu发出的虚拟地址一样),但是cache中的内容却是上一个进程的。

VIPT(virtual index physical tag),PIPT存在mmu 虚实转换耗时,VIVT存在重名和同名问题,有没有折中的办法?有,那就是VIPT 。cpu发出的地址中包含tag域和index,在VIPT中,index域直接送往cache进行索引,同时,tag域送往mmu 进行TLB和mmu进行转译。这样索引cache line 和mmu 转译的过程并行进行,节省了时间。但是同样存在问题:当高速缓存的way 的大小大于page 时,存在alias 问题。比如如下场景:
1、cache way 大小为8K,linux page大小为4K
2、两个虚拟地址VA1, VA2映射到了同一个物理地址(例如多次mmap 的情况)
3、两个虚拟地址只有bit12不一样
此时,由于cache way是8KB,所以索引域需要占用bit0-bit12(pow(2,13)/1024 = 8)。此时又由于VA1 VA2只有bit12不同,并且两者的tag域必然相同(因为tag就是物理地址,前述条件就是VA1/2映射到了同一个物理地址),因此两个虚拟地址VA1, VA2 映射到了不同的cache line。这就导致了重名问题。
在这里插入图片描述
现代处理器中,如ARM Cortex-A7, A9, A15, A53,数据cache 均采用了PIPT,指令cache采用了VIPT(可能是因为aliasing 问题只对写操作带来问题,而指令不需要修改?)
在这里插入图片描述
参考文献:
《奔跑吧linux内核(第2版)》笨叔 著

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:58:41  更:2021-12-08 14:01:08 
 
开发: 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/26 12:47:07-

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