ARM学习笔记(四)--ARM体系的存储系统

ARM体系结构中的存储系统

ARM 存储系统的体系结构适应不同的嵌入式应用系统的需要差别很大。最简单的存储系统使用平办事的地址映射机制,就像一些简单的弹片机系统中一样,地址空间的分 配方式是固定的,系统各部分都使用物理地址。而一些复杂系统可能包括下面的一种或几种技术,从而提供更为强大的存储系统。

**系统中可能包含多种类型的存储器,如FLASH,ROM,RAM,EEPROM等,不同类型的存储器的速度和宽度等各不相同。

**通过使用CACHE及WRITE BUFFER技术缩小处理器和存储系统速度差别,从而提高系统的整体性能。

**内存管理部件通过内存映射技术实现虚拟空间到物理空间的映射。在系统加电时,将ROM/FLASH影射为地址0,这样可以进行一些初始化处理;当这些初始化完成后将RAM地址影射为0,并把系统程序加载到RAM中运行,这样很好地解决了嵌入式系统的需要。

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

**引入一些机制保证I/O操作应设成内存操作后,各种I/O操作能够得到正确的结果。

**与存储系统相关的程序设计指南**

1.地址空间

ARM 体系使用单一的和平板地址空间。该地址空间大小为2^32个8位字节,这些字节的单元地址是一个无符号的32位数值,其取值范围为0~2^32- 1。ARM地址空间也可以看作是2^30个32位的字单元。这些字单元的地址可以被4整除,也就是说该地址低两位为0b00。地址为A的字数据包括地址为 A、A+1、A+3、A+3 4个字节单元的内容。

各存储单元的地址作为32为无符号数,可以进行常规的整数运算。这些运算的结果进行2^32取模。

程序正常执行时,每执行一条ARM指令,当前指令计数器加4个字节;每执行一条Thumb指令,当前指令计数器加2个字节。但是,当地址上发生溢出时,执行结果将是不可预知的。

2.存储器格式

在ARM中,如果地址A是字对齐的,有下面几种:

**地址为A的字单元包括字节单元A,A+1,A+2,A+3。

**地址为A的班子单元包括字节单元A,A+1。

**地址为A+2的半字单元包括字节单元A+2,A=3.

**地址为A的字单元包括半字节单元A,A+2。

在ARM体系结构中,每个字单元包含4字节单元或者2个半字单元,1个半字单元包含2字节单元。但是在字单元中,4字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式,通常称为大端格式或者小端格式,也就是big-endian格式和little-endian格式。大/小端的选择对于不同的芯片来说有一些不同的选择方式,一般都可以通过外部的引脚或内部的寄存器来选择。具体要参见处理器的数据手册。

大端模式下的存储格式如下所示。

31 24 23 16 15 8 7 0

字单元A

半字单元A

半字单元A2

字节单元A

字节单元A1

字节单元A2

字节单元A3

而在小端模式下的存储格式如下所示。

31 24 23 16 15 8 7 0

字单元A

半字单元A2

半字单元A

字节单元A3

字节单元A2

字节单元A1

字节单元A

在ARM 系统中没有提供指令来选择存储器格式。如果系统中包含标准的ARM控制协处理器CP15,则CP15的寄存器C1的位[7]决定系统中存储器的格式。当系 统复位时,寄存器C1的[7]值为零,这时系统中存储器格式为little-endian格式。如果系统中采用的是big-endian格式,则复位异常 中断处理程序中必须设置c1寄存器的[7]位。

非对齐的存储访问操作:在ARM体系结构中通常希望字单元的地址是字对齐的(地址的低两位是0b00),半字单元的地址是半字对齐的(地址的最低位为0b0),但在存储单元中地址没有遵守上述的对齐规则,称为非对齐的存储访问操作,在ARM体系结构的伪指令集中有专门的align指令来指定对齐格式。

在ARM体系结构中允许指令预取,在CPU执行当前代码的同时,可以从存储器中预取其后若干条指令,具体预取多少条指令则由不同的ARM处理器内核的实现来决定。

非对齐的指令预取操作

如果系统中指定当发生非对齐的指令预取操作时,忽略地址中相应的位,则由存储系统实现这种忽略。

非对齐的数据访问操作

对于LOAD/STORE操作,系统定义了下面3中可能的结果:

***执行结果不可预知

***忽略字单元地址低两位的值,即访问地址为字单元;忽略半字单元最低位的值,即访问地址为半字单元。

***由存储系统忽略字单元地址中低两位的值,半字单元地址最低位的值。

指令预取和自修改代码

当用户读取PC计数器的值时,返回的是当前指令下面的第二条指令的地址。对于ARM指令来说,返回当前指令地址值加8个字节;对于Thumb指令来说,返回值为当前指令地址值加4个字节。

自修改代码指的是代码在执行过程中修改自身。应尽量避免使用。

存储器映射的I/O空间

在ARM中,I/O操作通常被影射为存储器操作。通常需要将存储器映射的I/O空间设置成非缓冲的。

3.ARM体系结构中的MMU

另外一个重要的概念就是MMU(Memory Manager Unit)。ARM存储系统的体系结构适应不同的嵌入式系统应用,它的差别很大。最简单的存储系统使用平板式的地址映射机制,地址空间的分配是固定的,系统中各部分都使用物理地址,这样的处理器不带MMU。而一些复杂的系统可能包含一种或多种下面提到的技术,从而提供功能更为强大的存储系统。

(1)系统中可能包含多种类型的存储器件,一般都有Flash、SRAM、SDRAM等接口。

(2)使用指令/数据cache及Write Buffer技术缩小处理器和存储系统速度差别,从而提高系统的整体性能。

(3)系统中包含有MMU单元。

MMU使用内存映射技术实现虚拟空间到物理空间的映射,这种映射机制对于嵌入式系统尤其重要。通常程序放在ROM/Flash中,这样系统掉电后程序能够保存。但是ROM/Flash比SDRAM速度慢很多,而且在嵌入式系统中,中断向量表存放在RAM中,不过利用内存映射就可以解决这种问题。在系统加电时将ROM/Flash地址映射到

0x00000000,在0x00000000地址处存放启动代码,来完成系统设备的初始化,之后再把内核程序加载到SDRAM,然后把地址映射到SDRAM的地址,跳转到SDRAM地址运行就可以了。

针对具有MMU的ARM处理器可以移植Linux for ARM操作系统,针对没有MMU的处理器,一般都是移植uClinux for ARM。比如说Samsung公司的S3C4510、S3C2510都是不带MMU的处理器,只能移植uClinux,而针对S3C2410、PXA27x、OMAP591x等带有MMU单元的ARM处理器通常都可以移植Linux操作系统。带有MMU的处理器内部都有用于存储管理的系统控制协处理器CP15,在移植嵌入式操作系统的Boot Loader时,必须要对存储管理单元进行初始化设置。

4.快速上下文切换技术

FCSE(Fast Context Switch Extension)技术通过修改系统中不同进程的虚拟地址,避免在进程间切换时造成的虚拟地址到物理地址的重映射,从而提高系统的性能。通常FCSE位于CPU和MMU之间,其责任就是将不同进程使用的相同虚拟地址映射为不同的虚拟空间,使得在上下文切换时无须重建TLB等。

相信通过对ARM处理器架构的简单介绍,读者可以对ARM处理器有大体地了解,如果要继续深化研究,可以到ARM公司的网站去下载对于每个体系结构的详细技术说明文档。对于MMU部分更为详细的介绍,推荐参考《ARM体系结构与编程》(杜春雷编著)一书。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值