Cortex-A8存储器管理

一.ARM的基本数据类型

  1. 字节(Byte):8bit
  2. 半字(Halfword):16bit
  3. 字(Word):32bit
  4. 双字(Doubleword):64bit

无符号数据,二进制格式存储,范围:0~(2^N)-1,N为数据类型长度;

有符号,二进制补码格式,数据范围:-2^(N-1)~2^(N-1)-1,N为数据类型长度。

ARM的体系结构将存储器看作是从0x00000000地址开始的按字节编码的线性存储结构,每个字节都有对应的地址编码。

  1. 以字为单位,4字节对齐,地址最后俩位为00
  2. 以半字为单位,按2字节对齐,地址末位为0
  3. 以字节为单位,按1字节对齐

二.浮点数据类型

浮点运算使用在ARM硬件指令集中未定义的数据类型。在协处理器指令空间定义了一系列浮点指令,这些指令全部可以通过未定义指令异常在软件中实现。

三.大/小端存储模式

Cortex-A8处理器支持大端和小端模式,同时还支持混合大小端模式和非对齐数据访问。可以通过硬件的方法设置端模式。

大端:高字节存储在低地址,低字节存储在高地址;

小端:高字节存储在高地址 ,低字节存储在低地值

0x12345678

Cortex-A8存储器管理 

四.寄存器组

Cortex-A8处理器共有40个32位寄存器,33(16+7+2+2+2+2+2)个通用寄存器,7个状态寄存器。其中状态寄存器包括1个CPSR(Current Program Status Register 当前程序状态寄存器),6个SPSR(Saved Program Status Register 备份程序状态寄存器)

这些寄存器不能同时访问,在不同的寄存器工作模式下只能访问一组相应的寄存器组。

Cortex-A8存储器管理 

1.通用寄存器组

R0~R7是不分组的通用寄存器,R8~R15是分组的通用寄存器。在ARM状态下,任何时刻,16个数据寄存器R0~R15和1~2个状态寄存器是可访问的。在特权模式下,特定模式下的寄存器阵列才是有效的。

16位指令对某些寄存器的额访问存在限制。

未分组的通用寄存器R0~R7用于保存数据和地址,在处理器模式切换时,由于使用的是相同物理存储器,可能会破坏存储器中的数据。

分组的通用寄存器R8~R15具有不用不同的处理器工作模式决定访问的物理寄存器不同的特点。

  1. R8~R12寄存器分别对应俩个不同的物理寄存器,分别是快速中断模式下的相应存储器和快速中断模式下的相应存储器。
  2. R13、R14寄存器分别对应7个不同的物理存储器,用户和系统模式下共用一个,其他六个为:fiq(快速中断)、svc(管理模式)、abt(数据访问终止模式)、irq(外部中断模式)、und(未定义指令模式)、mon(安全监控模式)。R13常作堆栈指针;R14子程序链接寄存器(LR:LinkRegister),该寄存器由ARM编译器自动使用。在执行BL和BLX指令时,R14保存返回地址。同理,当处理器进入中断和异常,或者中断和异常子程序执行BL和BLX指令时,或者当系统中发生子程序调用时,相应的R14寄存器用来保存返回地址。如果返回地址已经保存在堆栈中,则该寄存器也可以用于其他用途。

B: 跳转。

BL: 带链接的跳转。 首先将当前指令的下一条指令地址保存在LR寄存器,然后跳转的lable。通常用于调用子程序,可通过在子程序的尾部添加mov  pc, lr 返回。

BX: 带状态切换的跳转。最低位为1时,切换到Thumb指令执行,为0时,解释为ARM指令执行。

BLX:  带链接和状态切换的跳转。结合了BX与BL功能。

  1. 程序计数器R15(PC),用于记录程序当前的运行地址。ARM处理器每执行一条指令都会把PC+4(Thumb模式下为2)。BL和BLX指令也会改变PC的值。

FIQ模式下有7个分组寄存器映射到R8~R14,很多快速中断不需要保存任何寄存器(疑问?是因为有自己的寄存器吗)。

每个模式下,分别有指定寄存器映射到R13和R14,使得每种模式下都有自己的堆栈指针和链接寄存器。

2.状态寄存器

ARM处理器有俩类程序状态寄存器:一个当前程序状态寄存器CPSR和6个备份程序状态寄存器SPSR。主要功能:

  1. 保存最近执行的算术或逻辑运算的信息;
  2. 控制中断的允许或禁止;
  3. 设置处理器的工作模式;

每一种处理器模式下使用专用的备份程序状态寄存器。当特定的终端或异常发生的时候,处理器切换到对应的工作模式,该模式下的备份程序状态寄存器保存当前程序状态寄存器的内容。(例如由用户切换到外部中断,则外部中断状态寄存器存放用户模式的状态寄存器)

Cortex-A8存储器管理 

状态寄存器分为四个域:标志位域f,PSR[31:24];状态域s,PSR[23:16];拓展域x,PSR[15:8];控制域c,PSR[7:0]。

(1)条件标志位(N、Z、C、V)

  1. N:N=1 表示运算结果为负数,N=0 表示结果为正数或者零。
  2. Z:Z=1 表示运算结果为零,Z=0 表示运算结果不为0。
  3. C:加法指令:C=1 产生进位;减法指令:C=1产生了借位;
  4. V:加减运算指令,当操作数和运算结果为二进制补码表示的带符号数,V=1表示符号位溢出。

(2)Q标志位

Q标志位用于指示增强的DSP指令是否发生了溢出。Q标志具有粘性,当因某条指令将其设为1时,它将一直保持为1直到通过MSR指令写CPSR明确的将该位清0.

(3)IT块???

IT块用于对Thumb指令集中if-then-else这一类语句块的控制。

(4)J标志位

用于表示处理器是否处于ThumbEE状态。(T=0,J=0为ARM状态)T=1时:

  1. J=0,表示处理器处于Thumb状态;
  2. J=1,表示处理器处于ThumbEE状态;

【注】T=0时不能设置J为1,T=0的时候,J只能为0。不能通过MSR指令来改变CPSR的J位。

(5)GE[3:0]位

该位用于表示在SIMD指令集(一条之指令操作多个数据,而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。)中大于、等于的标志,在任何模式下可读可写。

(6)E标志位

控制存取操作字节顺序,0为小端,1为大端。ARM和Thumb指令集都提供指令用于设置和清除E标志位。

(7)A标志位

表示异步异常禁止,该位自动置1,用于禁止不精确的数据终止。

(8)控制位

程序状态寄存器的低8位是控制位,异常发生时,这些位的值将发生改变。在特权模式下,可通过软件编程来修改这些标志位的值。

  1. 中断屏蔽位:I=1,IRQ中断被屏蔽(外部中断);F=1,FIQ中断被屏蔽(快速中断)。
  2. 状态控制位:T=0,处理器处于ARM状态;T=1,处理器处于Thumb状态。
  3. 模式控制位:M[4:0]决定处理器的工作模式。

Cortex-A8存储器管理 

五.Cortex-A8存储系统

Cortex-A8存储器管理

寄存器位于CPU内部,用于指令执行时的数据存放。Cache高速缓存,存正在使用的指令和数据。主存储器是程序执行代码和数据存放区,DDR2 SDRAM。辅助存储器类似PC的磁盘,嵌入式系统中通常采用Flash芯片。

1.协处理器CP15

ARM系统中实现对存储系统的管理通常使用的是协处理器CP15,ARM处理器支持16个协处理器。程序执行过程中,每个协处理器忽略属于ARM处理器和其他协处理器的指令。当一个协处理器不能执行属于它的的协处理器指令时,产生一个未定义指令异常,在该异常中断处理程序中,可以用软件模拟硬件。

CP15负责完成大部分的存储器管理,CP15有16个32bit寄存器,编号0~15。

Cortex-A8存储器管理 

(1)CP15寄存器C1(控制寄存器)

  1. 禁止或者使能MMU以及其他与存储系统相关的功能;
  2. 配置存储系统以及ARM处理器中相关部分的功能。

对该寄存器使用的指令

mrc p15, 0, r0, c1, c0{, 0};   //将CP15的寄存器C1的值读到r0 mcr p15, 0, r0, c1, c0{, 0};   //将r0的值写到CP15的寄存器C1中

Cortex-A8存储器管理

Cortex-A8存储器管理

Cortex-A8存储器管理

(2)CP15的寄存器C3(ARM16个域的访问权限)

每个与域由俩个bit构成

  1. 00:该内存区域不允许访问,任何访问都会引起错误
  2. 01:当前级别下,该内存区域的访问必须配合该内存区域描述符中AP位进行权检查
  3. 10:保留状态
  4. 11:对该内存区域的访问不进行权限检查

(3)CP15的寄存器C6(失效地址寄存器)

保存了引起存储访问失效的地址,分为数据失效地址寄存器和指令失效地址寄存器

MRC p15, 0, <Rd>, c6, c2, 0;    //访问数据失效地址寄存器 MRC p15, 0, <Rd>, c6, c0, 2;    //访问指令失效地址寄存器

2.内存管理单元MMU

(1)MMU让每个任务都运行在各自的虚拟存储空间。MMU完成虚拟地址到物理地址的映射。

(2)MMU提供存储器访问权限的控制,提供硬件机制的内存访问授权。

MMU利用映射,将在指令调用或数据读/写过程中使用的逻辑地址转换为物理地址。MMU还标记对非法逻辑地址逻辑地址进行的访问,这些非法逻辑地址并没有映射到任何物理地址。

(3)设置虚拟存储空间缓存的特性

MMU中的虚拟地址转换为物理地址是通过二级页表实现的。

  1. 一级页表中包含有以段为单位的地址变换条目以及指向二级页表的指针。
  2. 二级页表中包含以大页和小页为单位的地址变换条目。

对内存区域的描述一般是通过一个叫描述符的结构来说明的,该描述符可以是段描述符,也可以是页描述符或者其他内存单位的描述符。段描述符的组成结构为:

  1. Section base address: 段基地址,
  2. AP:访问控制位Access Permission,
  3. Domain:访问控制寄存器的索引,Domain和AP配合使用,对访问权限进行检查。
  4. C:当C被置为1时为write-through(写直通:每次修改都写入内存)模式。
  5. B:当B被置为1时为write-back(写回:页面换出的时候才写入内存)模式(C、B俩个位同一时刻只能有一个被置1)。

对某个内存区域的访问是否需要进行权限检查是由该内存区域的描述符中的Domain域决定的。而某个内存区域的访问权限是由该内存区域的描述符中的AP位和协处理器CP15中控制寄存器C1的S bit和R bit所决定的。

3.高速缓存存储器Cache

1.直接映射

主存数据块只能装入Cache中的唯一位置。

 Cortex-A8存储器管理

2.全相联映射

可以把主存数据块装入Cache的任何位置。

 Cortex-A8存储器管理

3.组相联映射

组间采取直接映射,组内采取全相联映射

 Cortex-A8存储器管理

Cortex-A8存储器管理

上一篇:GBase 8s 图形化管理工具


下一篇:使用 synchronized 将整个方法锁住,这样在多线程下效率不会触及到线程安全