上一篇:ARM Cache 系列文章 2 – Cache Coherence及内存顺序模学习
下一篇:ARM Cache 系列文章 4 – Cache 与 CPU 乱序执行
MPU 全称"Memory Protection Unit",中文叫“存储保护单元”,它是 Cortex-M 处理器内部的一个模块(注意:并不是所有 Cortex-M 版本都支持 MPU,并且在一些支持 MPU 的 Cortex-M 版本上,MPU 也是可选组件)。
MPU 介于 Core 和 Bus matrix 中间。Bus matirx 是 ARM 系统总线大管家,用以实现系统内多主(Core,DMA等)、多从(内部RAM,APB外设,外部总线等)的交联和仲裁,Core 通过 Bus matirx 可以访问到系统空间内的所有存储/外设资源,现在 MPU 挡在了 Core 和 Bus matirx 中间,这意味着从此 Core 对系统存储资源的访问需要经过 MPU 的权限控制与审核。
MPU 对存储空间的访问权限控制主要包含:
不同的访问权限配置造就了系统里不同的存储空间类型与属性,这一切都是为了能够让存储资源被 CPU 高效且可靠地访问。
MPU 最多支持 8/16 个主空间划分(MPU_RNR[REGION],REGION取值 0-7 或者 0-15),每个主空间可以自由设置其属性。
Cortex-M7 默认有一套MPU配置,具体配置可以参考 ARM SPEC:
硬件的设计最好是根 ARM 默认配置空间保持一致,此外软件对MPU的配置也是如此
我们一定还经常看到Shareable属性,这个属性和其它memory的属性有什么关系呢?
Shareable: 对于总线上如果是只有一个cpu(master) 对 normal mem 和 device mem访问的话,这个S bit 是没有意义的。
如果存在两个或者两个以上master(常见的是单核系统中包含一个DMA),设置shareable属性表示该存储块可以被多个主设备访问。
在单核系统中当配置某块内存为 shareablel时,该区域的数据是不会使用 cache 的,效果跟 write through 一样。
下表为 ACE 协议中的 Shareability domains 和其它属性的关系。
在ACE协议中有四种级别的Shareability domain,如下:
domain | scope |
---|---|
Non-shareable | 该domain只包含一个master |
Inner Shareable | 该domain包含了几个master |
Outer Shareable | 该domain包含了Inner domain和其它master |
System | 该domain包含了系统中的所有domain |
Cachable 和 Bufferable 一个 Master 发出一个读写的 request,中间要经过很多Buffer,最后才能送到 memory。这些 Buffer 的添加是为了Outstanding,Timing,Performance等。
Buffer 有两种类型:
第一种: FIFO结构,仅仅就是保存发送 Request 给下一级或者返回 Response 给上一级。
第二种: Buffer, 在接受了上一级的 Request之后立刻给上一级回Response,告诉上一级这个操作已经做完了,而实际上这个操作并没有发到下一级 Buffer,也没有被送到 memory。
有的人可能就问,write 的时候这样可以,read 的时候则无法这么做。
其实 read一样有bufferable,如果此处 buffer 的 write data channel 有此 read 需要的数据,就可以直接返回,而不用去访问memory,如果没有,则要把Request发到下一级。
总之, 所有的访问都要经过这些 buffer,是否 bufferable 在于何时由谁回response,在于是否要把request送到最终的memory。
一般配置了cacheable 可以配置bufferable 也可以不配置bufferable,但是没有配置了bufferable而不配置cacheable的情况
内存是现代计算机最重要的组件之一。因此,它的内容不能被任何错误的应用所篡改。这个功能可以通过MMU(Memory Management Unit)或者MPU(Memory Protection Unit)来实现。
尽管这个两个东西有同样的基本功能,但是它们之间还是存在一些不同。MMU被认为是比MPU更先进的设备。MMU能完成MPU的所有工作,并且它还具备MPU没有的一些高级特性。
MMU 具备而 MPU 不具备的特性包括:
上一篇:ARM Cache 系列文章 2 – Cache Coherence及内存顺序模学习
下一篇:ARM Cache 系列文章 4 – Cache 与 CPU 乱序执行