对ARM-MMU的理解

嵌入式系统的基本构成和运行方式着手。系统上电时,处理器的程序指针从 0x0 (或者是由 0Xffff_0000 处高端启动)处启动,顺序执行程序,在程序指针( PC )启动地址,属于非易失性存储器空间范围,如 ROM 、 FLASH 等。然而与上百兆的嵌入式处理器相比, FLASH 、 ROM 等存储器响应速度慢,已成为提高系统性能的一个瓶颈。而 SDRAM 具有很高的响应速度,为何不使用 SDRAM 来执行程序呢?为了提高系统整体速度,可以这样设想,利用 FLASH 、 ROM 对系统进行配置,把真正的应用程序下载到 SDRAM 中运行,这样就可以提高系统的性能。然而这种想法又遇到了另外一个问题,当 ARM 处理器响应异常事件时,程序指针将要跳转到一个确定的位置,假设发生了 IRQ 中断, PC 将指向 0x18( 如果为高端启动,则相应指向 0vxffff_0018 处 ) ,而此时 0x18 处仍为非易失性存储器所占据的位置,则程序的执行还是有一部分要在 FLASH 或者 ROM 中来执行的。那么我们可不可以使程序完全都 SDRAM 中运行那?答案是肯定的,这就引入了 MMU ,利用 MMU ,可把 SDRAM 的地址完全映射到 0x0 起始的一片连续地址空间,而把原来占据这片空间的 FLASH 或者 ROM 映射到其它不相冲突的存储空间位置。例如, FLASH 的地址从 0x0000_0000 - 0x00ff_ffff, 而 SDRAM 的地址范围是 0x3000_0000 - 0x31ff_ffff ,则可把 SDRAM 地址映射为 0x0000_0000 - 0x1fff_ffff 而 FLASH 的地址可以映射到 0x9000_0000 - 0x90ff_ffff (此处地址空间为空闲,未被占用)。映射完成后,如果处理器发生异常,假设依然为 IRQ 中断, PC 指针指向 0x18 处的地址,而这个时候 PC 实际上是从位于物理地址的 0x3000_0018 处读取指令。通过 MMU 的映射,则可实现程序完全运行在 SDRAM 之中。

在实际的应用中,可能会把两片不连续的物理地址空间分配给 SDRAM 。而在操作系统中,习惯于把 SDRAM 的空间连续起来,方便内存管理,且应用程序申请大块的内存时,操作系统内核也可方便地分配。通过 MMU 可实现不连续的物理地址空间映射为连续的虚拟地址空间。

操作系统内核或者一些比较关键的代码,一般是不希望被用户应用程序所访问的。通过 MMU 可以控制地址空间的访问权限,从而保护这些代码不被破坏。

1 、映射存储块的分类 
MMU 支持基于节或页的存储器访问, MMU 可以用下面四种大小进行映射:

节 ( Section ) 构成 1MB 的存储器块 支持 3 中不同的页尺寸:

微页 ( Tiny page ) 构成 1KB 的存储器块
小页 ( Small page ) 构成 4KB 的存储器块
大页 ( Large page ) 构成 64KB 的存储器块
其中对于节映射使用一级转换表就可以了,而对于微页、小页、大页则需要使用两级转换表。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值