【ARM Cache 系列文章 3 – Cache 与 MPU关系学习】

文章目录

  • Cache 与 MPU
    • 1.1. Cortex-M MPU 简介
      • 1.1.1 存储空间类型与属性
      • 1.1.2 MPU 功能配置
    • 1.2 MPU 区域属性及空间大小配置
      • 1.2.1 Shareable 属性
      • 1.2.2 Bufferable 属性
      • 1.2.3 属性组合
      • 1.2.4 AP 访问权限
      • 1.2.3 MPU 与 MMU

上一篇:ARM Cache 系列文章 2 – Cache Coherence及内存顺序模学习
下一篇:ARM Cache 系列文章 4 – Cache 与 CPU 乱序执行

Cache 与 MPU

1.1. Cortex-M MPU 简介

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 的权限控制与审核。

1.1.1 存储空间类型与属性

MPU 对存储空间的访问权限控制主要包含:

  • Strongly-ordered(是否严格有序);
  • Shareable(是否共享);
  • Cacheable(是否缓存);
  • Execute Never(是否可执行)等方面。

不同的访问权限配置造就了系统里不同的存储空间类型与属性,这一切都是为了能够让存储资源被 CPU 高效且可靠地访问。

1.1.2 MPU 功能配置

MPU 最多支持 8/16 个主空间划分(MPU_RNR[REGION],REGION取值 0-7 或者 0-15),每个主空间可以自由设置其属性。

Cortex-M7 默认有一套MPU配置,具体配置可以参考 ARM SPEC:
【ARM Cache 系列文章 3 – Cache 与 MPU关系学习】_第1张图片

硬件的设计最好是根 ARM 默认配置空间保持一致,此外软件对MPU的配置也是如此

1.2 MPU 区域属性及空间大小配置

MPU的配置主要包含下面表格的几部分:
【ARM Cache 系列文章 3 – Cache 与 MPU关系学习】_第2张图片
字段的解释如下:
【ARM Cache 系列文章 3 – Cache 与 MPU关系学习】_第3张图片

1.2.1 Shareable 属性

我们一定还经常看到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

1.2.2 Bufferable 属性

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的情况

1.2.3 属性组合

【ARM Cache 系列文章 3 – Cache 与 MPU关系学习】_第4张图片
【ARM Cache 系列文章 3 – Cache 与 MPU关系学习】_第5张图片

1.2.4 AP 访问权限

【ARM Cache 系列文章 3 – Cache 与 MPU关系学习】_第6张图片

1.2.3 MPU 与 MMU

内存是现代计算机最重要的组件之一。因此,它的内容不能被任何错误的应用所篡改。这个功能可以通过MMU(Memory Management Unit)或者MPU(Memory Protection Unit)来实现。

尽管这个两个东西有同样的基本功能,但是它们之间还是存在一些不同。MMU被认为是比MPU更先进的设备。MMU能完成MPU的所有工作,并且它还具备MPU没有的一些高级特性。

MMU 具备而 MPU 不具备的特性包括:

  • 缓存控制;
  • 总线仲裁;
  • bank切换。

上一篇:ARM Cache 系列文章 2 – Cache Coherence及内存顺序模学习
下一篇:ARM Cache 系列文章 4 – Cache 与 CPU 乱序执行

你可能感兴趣的:(#,ARM,CPU,Cache,系列,MMU,Cacheable,Strongly-ordere,bufferable,Execute,Never)