00. 目录

01. 存储系统概述

ARM 存储系统有非常灵活的体系结构,可以适应不同的嵌入式应用系统的需要。ARM存储器系统可以使用简单的平板式地址映射机制

(就像一些简单的单片机一样,地址空间的分配方式是固定的,系统中各部分都使用物理地址),也可以使用其他技术提供功能更为强大

的存储系统。例如:
(1)系统可能提供多种类型的存储器件,如 Flash、ROM、SRAM 等。

(2)Cache 技术。

(3)写缓存技术(Write Buffers)。

(4)虚拟内存和 I/O 地址映射技术。

大多数系统通过下面的方法之一可实现对复杂存储系统的管理。

(1)使用 Cache,缩小处理器和存储系统速度差别,从而提高系统的整体性能。

(2)使用内存映射技术实现虚拟空间到物理空间的映射。这种映射机制对嵌入式系统非常重要。通常嵌入式系统程序存放在 ROM/Flash

中,这样系统断电后程序能够得到保存。但是,通常 ROM/Flash 与 SDRAM 相比,速度慢很多,而且基于 ARM 的嵌入式系统中通常把异

常中断向量表放在 RAM 中。利用内存映射机制可以满足这种需要。在系统加电时,将 ROM/Flash 映射为地址 0,这样可以进行一些初始

化处理;当这些初始化处理完成后将SDRAM 映射为地址 0,并把系统程序加载到 SDRAM 中运行,这样可以很好地满足嵌入式系统的需要。

(3)引入存储保护机制,增强系统的安全性。

(4)引入一些机制保证将 I/O 操作映射成内存操作后,各种 I/O 操作能够得到正确的结果。在简单存储系统中,不存在这样的问题。而

当系统引入了 Cache 和 write buffer 后,就需要一些特别的措施。

在 ARM 系统中,要实现对存储系统的管理通常使用协处理器 CP15,它通常也被称为系统控制协处理器(System Control

Coprocessor)。

ARM 的存储器系统是由多级构成的,可以分为内核级、芯片级、板卡级、外设级。下图 所示为存储器的层次结构。
【ARM】Cortex存储系统_MMU

每级都有特定的存储介质,下面对比各级系统中特定存储介质的存储性能。

(1)内核级的寄存器。处理器寄存器组可看做是存储器层次的顶层。这些寄存器被集成在处理器内核中,在系统中提供最快的存储器访

问。典型的 ARM 处理器有多个 32 位寄存器,其访问时间为 ns 量级。

(2)芯片级的紧耦合存储器(TCM)是为弥补 Cache 访问的不确定性增加的存储器。TCM 是一种快速 SDRAM,它紧挨内核,并且保证

取指和数据操作的时钟周期数,这一点对一些要求确定行为的实时算法是很重要的。TCM 位于存储器地址映射中,可作为快速存储器来

访问。

(3)芯片级的片上 Cache 存储器的容量在 8~32KB 之间,访问时间大约为 10ns。高性能的 ARM 结构中,可能存在第二级片外

Cache,容量为几百千字节(KB),访问时间为几十纳秒。

(4)板卡级的 DRAM。主存储器可能是几兆字节(MB)到几十兆字节(MB)的动态存储器,访问时间大约为 100ns。

(5)外设级的后援存储器,通常是硬盘,可能从几百兆字节(MB)到几个吉字节(GB),访问时间为几十毫秒。

02. 协处理器(CP15)

​ ARM 处理器支持 16 个协处理器。在程序执行过程中,每个协处理器忽略属于 ARM处理器和其他协处理器的指令。当一个协处理器硬

件不能执行属于它的协处理器指令时,将产生一个未定义指令异常中断,在该异常中断处理程序中,可以通过软件模拟该硬件操作。例

如,如果系统不包含向量浮点运算器,则可以选择浮点运算软件模拟包来支持向量浮点运算。CP15 即通常所说的系统控制协处理器

(System Control Coprocessor),它负责完成大部分的存储系统管理。除了 CP15 外,在具体的各种存储管理机制中可能还会用到其他

一些技术,如在 MMU 中除了 CP15 外,还使用了页表技术等。

在一些没有标准存储管理的系统中,CP15 是不存在的。在这种情况下,针对 CP15 的操作指令将被视为未定义指令,指令的执行结果不

可预知。CP15 包含 16 个 32 位寄存器,其编号为 0~15。实际上对于某些编号的寄存器可能对应多个物理寄存器,在指令中指定特定的

标志位来区分这些物理寄存器。这种机制有些类似于 ARM 中的寄存器,当处于不同的处理器模式时,某些相同编号的寄存器对应于不同

的物理寄存器。

CP15 中的寄存器可能是只读的,也可能是只写的,还有一些是可读/可写的。在对协处理器寄存器进行操作时,需要注意以下几个问题:

(1)寄存器的访问类型(只读/只写/可读可写)。

(2)不同的访问引发不同的功能。

(3)相同编号的寄存器是否对应不同的物理寄存器。

(4)寄存器的具体作用。

03. 存储管理单元(MMU)

​ 在创建多任务嵌入式系统时,最好用一个简单的方式来编写、装载及运行各自独立的任务。目前大多数的嵌入式系统不再使用自己定制

的控制系统,而使用操作系统来简化这个过程。较高级的操作系统采用基于硬件的存储管理单元(MMU)来实现上述操作。

​ MMU 提供的一个关键服务是使各个任务作为各自独立的程序在自己的私有存储空间中运行。在带 MMU 的操作系统控制下,运行的任

务无须知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计。

​ MMU 提供了一些资源以允许使用虚拟存储器(将系统物理存储器重新编址,可将其看成一个独立于系统物理存储器的存储空间)。

MMU 作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的物理地址,即在物理主存中的地址。这个转换过程允许

运行的多个程序使用相同的虚拟地址,而各自存储在物理存储器的不同位置。

​ 这样存储器就有两种类型的地址:虚拟地址和物理地址。虚拟地址由编译器和连接器在定位程序时分配;物理地址用来访问实际的主存

硬件模块(物理上程序存在的区域)。

04. 高速缓冲存储器(Cache)

​ Cache 是一个容量小但存取速度非常快的存储器,它保存最近用到的存储器数据副本。对于程序员来说,Cache 是透明的。它自动决定

保存哪些数据、覆盖哪些数据。现在 Cache通常与处理器在同一芯片上实现。Cache 能够发挥作用是因为程序具有局部性。所谓局部性就

是指在任何特定的时间,处理器趋于对相同区域的数据(如堆栈)多次执行相同的指令(如循环)。

​ Cache 经常与写缓存器(Write Buffer)一起使用。写缓存器是一个非常小的先进先出(FIFO)存储器,位于处理器核与主存之间。使

用写缓存的目的是,将处理器核和 Cache从较慢的主存写操作中解脱出来。当 CPU 向主存储器做写入操作时,它先将数据写入到写缓存

区中,由于写缓存器的速度很高,这种写入操作的速度也将很高。写缓存区在 CPU 空闲时,以较低的速度将数据写入到主存储器中相应

的位置。

​ 通过引入 Cache 和写缓存区,存储系统的性能得到了很大的提高,但同时也带来了一些问题。例如,由于数据将存在于系统中不同的

物理位置,可能造成数据的不一致性;由于写缓存区的优化作用,可能有些写操作的执行顺序不是用户期望的顺序,从而造成操作错误。

05. 附录

5.1 ARM处理器开发详解笔记