根据程序的局部性原理,在主存与CPU之间设置的一个高速的容量较小的存储器,叫做cache。

ARM cache架构由cache存储器和写缓冲器(write-buffer)组成。其中Write_buffer是cache按照FIFO原则向主存写的缓冲器。

cache可以分为Dcache,Icache。分别cache data和 instruction。其中Dcache必须在MMU开启后才能在CP15寄存器中使能,Icache在MMU未使能的情

况下,也是可以使能的。

在armv6版本之前的memory attribute:

一般会在使能MMU的过程中,规定MMU page table的definition。其中20bit表示每一page的memory attributes。12位表示每一page的基地址。一共32

位。每一page都会设置两个属性,cacheable,bufferable。其中每一page的memory attribute有

strong ordered,

Outer and inner write-back, write allocate,

Outer and inner write-through, no write allocate,

Outer and inner write-through, no write allocate,shared Device.

Shared Device.

non-cacheable.

MMU_CACHE:

.word            0x5000_0000|strong ordered;(其中strong order由20bit来表示)

其中arm的基本memory attribute有四种:

NCNB(Non-cacheable,non-bufferable,Strongly-ordered),

NCB(Non-cacheable,bufferable,Device),

Write-Through Cacheable bufferable,

Write-Back Cacheable bufferable

Write-Through方式:CPU向cache写入数据时,同时也向memory写一份,使得cache和memory的数据保持一致,缺点是每次都要访问memory,速度较

慢。

Write-Back方式:CPU更新cache时,只是把更新的cache区标记一下,并不同步更新memory,只有在cache区被新进入的数据取代时,才更新memory。

会引起memory和cache的一致性问题。

Write-allocate方式:在cache miss的情况下,先对存储器进行read操作,将操作数读入cache,在进行读写,这样便cache hit。

Bufferable与non-bufferable的区别,主要表现在ack信号的返回上,bufferable--将结果写入buffer(某个component)便返回ack,

non-bufferable等到结果写入外存,返回ack。

在AMBA3---AXI中,有四位的arcache/awcache信号,来表示transaction的这种属性。

arcache/awcache[0]表示,bufferable信号,表示interconnect或其他compnonent可以先返回ack,之后再写向final distination,只用在write操作。

arcache/awcache[1]表示,cacheable信号,对写操作,表示可以有不同的write megered together。

对读操作,表示该地址的数据可以pre-fetched,可被用在多个read transaction中。

arcache/awcache[2]表示,Read Allocate信号,如果一个transfer 读操作cache miss,它会allocated后再读。

arcache/awcache[3]表示,Write Allocate信号,如果一个write transfer cache miss,它会allocated,后读外存,在write-back方式的写回。

      这两bit的信号在AXI3中主要是Cache的互联中,会进行设置,通过smmu出来之后的transaction,之间简单的加载外存的值。

在armv7及其之后的版本,Bus AXI4中的memory attribute:

主要的基点改动,

  1) AxCache[1]表示modified的意思;

  2) AXI4对non-modified的transaction有order的限制;

  3) RA,WA变为了对memory attribute的编码。

modifiable transaction表示,

  1)一个大的transaction,可以被分割为多个小的transaction;

  2)多个小的transaction,可以被merge为一个大的transaction;

  3)一个read operation,可以读取超过需要的数据,prefetch数据,这样之后可能可以少发送一些read transaction;

  4)一个write operation,也可以访问一个更大的地址空间,不合理的地址对应的数据,使用strb信号关闭;

  5)所以一个transaction,从源到目的地,AxAddr,AxSize,AxLen,AxBurst信号的值,都可以改动。

对于non-modifiable transaction,这些信号在传输过程中,是不能被修改的,transaction也就是不能被merge和split

  但是AxCache信号,从Bufferable转换为Non-Bufferable是可以的,

  一个burst length大于16的transaction,也可以被split为几个小的burst length的transaction。这是个例外可以改length的地方

Bus memory attribute的更多相关文章

  1. Bus,Exclusive access,memory attribute

    指令LDREX,STREX是在armv6中新加的指令,配合AMBA3--AXI中的lock[1:0]信号. 在Atomic Access一节中是这么规定的:ARLOCK[1:0]/AWLOCK[1:0 ...

  2. armv8 memory translation

    AArch32,arm的32bit架构: AArch64,arm的64bit架构: ARMv8.2-LPA,是armv8.2中的新feature,扩大了IPA和PA的支持范围,从48bit扩展到52b ...

  3. armv8 memory system

    在armv8中,由于processor的预取,流水线, 以及多线程并行的执行方式,而且armv8-a中,使用的是一种weakly-ordered memory model, 不保证program or ...

  4. memory consistency

    目前的计算机系统中,都是shared memory结构,提供统一的控制接口给软件, shared memory结构中,为了memory correctness,可以将问题分为:memory consi ...

  5. Memory Ordering in Modern Microprocessors

    Linux has supported a large number of SMP systems based on a variety of CPUs since the 2.0 kernel. L ...

  6. Interrupt distribution scheme for a computer bus

    A method of handling processor to processor interrupt requests in a multiprocessing computer bus env ...

  7. arm-cache coherency

    提高一个系统的performance,有两种办法: 1) 不断提高一个core的performance,手段就是不断提高freq,减小Vt,这样都会在增加power(dynamic,leakage) ...

  8. Linux内存初始化(二)identity mapping和kernel image mapping

    一.前言 本文没有什么框架性的东西,就是按照__create_page_tables代码的执行路径走读一遍,记录在初始化阶段,内核是如何创建内核运行需要的页表过程.想要了解一些概述性的.框架性的东西可 ...

  9. Method, apparatus, and system for speculative abort control mechanisms

    An apparatus and method is described herein for providing robust speculative code section abort cont ...

随机推荐

  1. 【咸鱼教程】TextureMerger1.6.6 二:Sprite Sheet的制作和使用

    Sprite Sheet主要用于将零碎的小图合并成一张整图.减少加载图片时http的请求次数. 1 打开TextureMerger,选择Sprite Sheet 2  添加纹理(未创建项目时,会先弹出 ...

  2. Java-01-问题解答

    问题一:Java类文件是否只能有一个公有类? 1测试代码: //信1603 李敦岳 20163520 //测试Java是否只能有一个公有类 //2017.10.2 public class Test ...

  3. numpy.ndarray的赋值操作

    mat=zeros((3,4)) #生成一个3行4列全部元素为0的矩阵 mat[1,:]=111 #从第1行第0列开始,一直到最后一列,赋值为1,效果与mat[1,0:3]相同,前置0可以省略,最后的 ...

  4. SHU 第15届上海大学程序设计联赛夏季赛[热身赛] 第三题(G题) - 英语成绩

    看完题目就觉得是个图论题…… 每个人的成绩就是vertice,两个人的分数差就是edge,那么肯定类似于一种relax的方式,不断将每个人的成绩的min往上提, 当然,单纯的遍历一遍G.E肯定不可能就 ...

  5. Linux:获取当前进程的执行文件的绝对路径

    摘要:本文介绍Linux的应用程序和内核模块获取当前进程执行文件绝对路径的实现方法. 注意:使用此方法时,如果执行一个指向执行文件的链接文件,则获得的不是链接文件的绝对路径,而是执行文件的绝对路径. ...

  6. POJ - 1088 滑雪 dp

    http://bailian.openjudge.cn/practice/1088?lang=en_US 题解: 设一个dp[N][N]数组代表从(i,j)坐标开始能滑到的最远距离.更新的方法为 遍历 ...

  7. FZU - 2150 Fire Game bfs+双起点枚举

    题意,10*10的地图,有若干块草地“#”,草地可以点燃,并在一秒后点燃相邻的草地.有墙壁‘·‘阻挡.初始可以从任意两点点火.问烧完最短的时间.若烧不完输出-1. 题解:由于100的数据量,直接暴力. ...

  8. cocoapods卸载与安装

    引用自:https://www.aliyun.com/jiaocheng/389907.html 一.首先卸载pod which pod 得到pod的路径 sudo rm -rf <pod的路径 ...

  9. iOS服务器证书不受信任的解决版本

    参考文章链接: https://www.cnblogs.com/v-jing/p/6008964.html http://www.cocoachina.com/ios/20151021/13722.h ...

  10. socket 中午吃的啥 socket 并发服务器 fork

    http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html zh.wikipedia.org/wiki/網路插座 在作業系統中,通 ...