ARM MMU中虚拟地址到物理地址转换的研究

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AR M MMU中虚拟地址到物理地址转换的研究

王宏宇*

(华北电力大学计算机科学与技术学院,北京102206)

摘要:根据ARM中内存管理单元MM U部件提供的功能,分析了ARM MM U中所创建的页和页表的特点、类型,给出页表中不同描述符的类型格式以及使用一级页表和二级页表将虚拟地址转换为物理地址的方法和过程。

关键词:ARM;MM U;虚拟地址;页表

嵌入式系统中,存储系统差别很大,可包含多种类型的存储器件,如FLA S H、SRAM、S DRAM、ROM等,这些不同类型的存储器件速度和宽度等各不相同;在访问存储单元时,可能采取平板式的地址映射机制对其操作,或需要使用虚拟地址对其进行读写;系统中,需引入存储保护机制,增强系统的安全性。为适应如此复杂的存储体系要求,ARM处理器中引入了存储管理单元来管理存储系统。因此,对AR M MM U中虚拟地址到物理地址转换的研究对以后学习和开发嵌入式系统是很必要的。

一、AR M MMU和页表介绍

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

MMU的实现过程,实际上就是一个查表映射的过程。建立页表(translate tab le)是实现MMU功能不可缺少的一步。页表是位于系统的内存中,页表的每一项对应于一个虚拟地址到物理地址的映射。每一项的长度即是一个字的长度(在ARM中,一个字的长度被定义为4字节)。页表项除完成虚拟地址到物理地址的映射功能之外,还定义了访问权限和缓冲特性等。

MMU的映射分为两种,一级页表的变换和二级页表的变换。两者的不同之处就是所实现的变换地址空间大小不同。一级页表变换支持1M大小的存储空间的映射,而二级可以支持64K B、4KB和1K B大小地址空间的映射。

二、AR M MMU地址转换过程

在ARM中对地址空间的寻址大小为4G b,而且虚拟存储空间到物理存储空间的映射是以内存块为单位进行的。根据存储块大小,可以有多种地址变换。ARM中存储块大小可分为:段(1M b)、大页(64kb)、小页(4kb)、微页(1kb)。从虚拟地址到物理地址的变换过程其实就是查询页表的过程,由于页表存放在内存中,系统通常有一个寄存器来保存页表的基地址。在ARM中系统使用协处理器CP15的C2寄存器来保存页表的基地址。

在一级页表中将4G b的地址空间划分为4096个1M b的段,即包含4096个页表项,它占用16kb(4096*4b)的主存空间。它可以作为二级页表的页目录,此时其页表项描述的是粗粒度或细粒度的二级页表的物理地址,以及1M b 虚拟存储空间对应的映射关系;它也可以用于转换1M b (一段)的普通页表,此时,页表项描述的是物理存储空间中1M b存储块的首地址。

每个二级页表定义了1M b存储空间的映射关系,所以在二级粗页表中有256个页表项(1M b/4kb),每个页表项将一个4kb的虚拟存储块映射成一个4kb的物理存储块,由于页表项的大小为4b,所以每个粗页表占用1kb(256*

4b)的主存空间。同理,在二级细页表中有1024个页表项(1M b/1kb),每个页表项将一个1kb的虚拟存储块映射成一

343

中国电力教育2008年研究综述与技术论坛专刊*作者简介:王宏宇,女,华北电力大学计算机科学与技术学院硕士研究生。

个1kb 的物理存储块,由于页表项的大小为4b ,所以每个细页表占用4kb (1024*4b)的主存空间。

要实现从虚拟地址到物理地址的映射,必然会遇到一个问题,如何找到这个页表。对于表的查找,要知道这个表的基地址和偏移地址,在具有MMU 功能的处理器中,集成了一个被称为CP15的协处理器,该协处理器的C2寄存器中用于保存页表的基地址。

11一级页表地址的转换过程和方法

使用协处理器CP15的寄存器C2存放内存中页表的基地址,其中位[31B 14]为内存中页表的基地址,位[13B 0]为0。当处理器访问一个虚拟地址时,该虚拟地址的[31B 20]作为偏移地址与页表基地址结合(基地址必须是64kb 对齐的),寄存器C2中位[31B 14]与虚拟地址的位[31B 20]和两个0位连接得到一个32位的页表项地址(因为页表项为4字节对齐,

[1B 0]两位为0),这个地址

是一级描述符(页表中描述虚页的地址影射关系)或是指向二级页表的指针。通过这个页表项地址可以检索到该页表项,见图1

图1 一级描述符或指向二级页表的地址

一级描述符定义了与之相应的M l b 存储空间是如何映射的。一级描述符的位[1B 0]定义了该一级描述符的类型,其有四种可能:

(1)如果位[1B 0]=0b00,所关联的

地址没有被映射,试图访问它们将产生错误;

(2)如果位

[1B 0]=0b10,所关联地址的段描述符直接形成物理地址;(3)如果位[1B 0]=0b01,入口地址指向粗粒度二级页表;(4)如果位[1B 0]=0b11,入口地址指向细粒度二级页表。每一种类型的表描述了它所关联的1M b 存储区域的映射。粗粒度二级页表较小,每个表1kb ,每个细粒度二级页表4kb 。但是粗粒度二级页表只能映射大页和小页,细粒度二级页表可以映射大页、小页和微页。

一级页表的实际编程过程主要是确定如何编写页表中的内容并确定页表项地址。假设物理地址为0x30B00000-0x30B fffff (1M b 空间)的一块连续空间需映射为虚地址0x01000000-0x010fffff 的一块连续空间,那么首先确定页表项中的内容:把物理地址的基地址作为页表项的高12位

(31b it-20bit),填写访问属性(假设可以读写,可以读缓存、写缓冲),这样该页表项内容可以为0x30B0C00E ;其次,确定页表基地址,填写页表基地址到CP15寄存器的C2中。页表的基地址要为64kb 对齐;然后,计算出偏移地址,把内容填写到页表项地址中。页表项地址=页表基地址+

(物理地址基地址m 20),如页表基地址为0xB1000000,则页表项地址=0xB1000DAC ;最后,将页表项数值写到对应的页表项地址中,如向地址0xB1000DAC 中写入

0x30B0C00E 。

21二级页表地址的转换过程和方法

在二级页表中有4种页表项:64kb 的大页表项、4kb 的小页表项、1kb 的微页表项和产生错误的页表项。大页表项包含了64kb 的物理存储块的基地址,在粗二级页表中有16个页描述符,在细二级页表中有64个页描述符;小页表项包含了4kb 的物理存储块基地址,在粗二级页表中有1个页描述符,在细二级页表中有4个页描述符;微页表项包含了1kb 物理存储块的基地址。

对于一个二级描述符,有四种可能,由描述符的位[1B 0]选择:

(1)如果位[1B 0]=0b00,即关联的虚拟地

址没有被映射,任何对这些虚拟地址的访问将会导致错误;(2)如果位[1B 0]=0b01,此时入口是大页描述符,描述64kb 的虚拟地址,一个大页描述符在细二级表中必须被重复64次,在粗二级表中必须被重复16次,以保证所有的虚拟地址都被描述;

(3)如果位[1B 0]=0b10,此时该入口

是小页描述符,描述4kb 的虚拟地址,一个小页描述符在细二级表中必须被重复4次,以保证所有的虚拟地址都被描述;

(4)如果位[1B 0]=0b11,该入口是微页描述符,描述1kb 的虚拟地址,在细二级表中只需要一个微页描述符,微页描述符不能在粗二级表中出现,否则将产生错误的结果。

在运用ARM 中一级页表转换原理的基础上,一级描述

符为指向二级页表的地址,由一级描述符和虚地址中的二级页表索引结合形成二级描述符的地址,从而获得二级描述符(包含了大页、小页或微页的基地址),根据二级描述符和虚拟地址中的页内偏移量结合形成物理地址。

三、总结

在ARM 中使用MM U 部件提供的功能进行虚拟地址转换时,一般用到两级页表操作即可,其页表原理和操作系统的页表类似。当然MM U 还有其它存储管理的功能和方法,在此没有论述。本文主要是通过以上过程了解MMU 部件在虚拟地址转换过程中页表的描述、使用方法和地址转换过程,在以后的嵌入式操作系统的学习和使用中对虚拟地址的转换过程有所了解,使用时更加方便。

参考文献:

[1]李佳.AR M 系列处理器应用技术完全手册[M ].北京:人民邮电出版社,2006.

[2]And re w N S l oss ,Dom i n ic S y m es .ARM 嵌入式系统开发软件设计与优化.沈建华,译.北京:北京航空航天大学出版社,2005.

[3]杜春雷.AR M 体系结构与编程[M ].北京:清华大学出版社,2003.

[4]马忠梅,等.AR M 嵌入式处理器结构与应用基础[M ].北京:北京航空航天大学出版社,2006.

344

ARM MMU 中虚拟地址到物理地址转换的研究

相关文档
最新文档