arm9处理器的虚拟内存管理单元(MMU).docxVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
arm9处理器的虚拟内存管理单元(MMU)

arm9处理器的虚拟内存管理单元(MMU) arm9处理器的虚拟内存管理单元(MMU) 收藏 Linux与ulinux的主要区别其中一点就是有没有mmu。所以我想在这里记录一下我对它的理解。文章分2个部分来记录,第一部分就是讲述当虚拟地址传递给cpu后,cpu是如何解析它,把它装换成物理地址,再把这个地址送到内存总线上;第二部分就是要讨论MMU是如何控制存储空间的访问权限的。 这里我先述说第一部分: 我先在这里述说一下一些基本概念,页表,页表项。表是用来干什么的?其实就是反应虚拟地址和物理地址的映射关系。具体来说就是当一个虚拟地址穿给cpu后,cpu就会根据这个地址找到对应页表,再找到页表项。然后只要访问页表项的内容,你就知道这个虚拟地址是对应哪个物理地址了。ARM可以通过一级表就可以完成目的,但是也可以通过二级表来完成任务。linux是选择后者来实现的,所以我只是讨论后者的情况。页表项就是页表里面的每一项咯。 虚拟存储空间到物理存储空间的映射是以块为单位的,ARM支持的存储块的大小有以下几种: 1.段,大小为1MB 2.大页,大小为64KB 3.小页,大小为4KB 4.极小页,大小为1KB 对于一级页表来说,它的基址是存放在cp15的c2寄存器里面的。一级页表的页表项的结构是这样的: 31位~10位细粒度二级页表基址;(其实这只是其中的一种变换方法,一共有6种变换方法,我这里只说linux里面常用的粗粒度小页地址变换方法。这里说的小页就是我们上面刚说的存储块的大小中的一种。) 1位~0位:这两位数可以有4种组合,对于这种方法,我们用的是01。 对于中间的几位与访问权限和cache有关。这里以免弄混,用到时我们再来讨论。 好了现在了解了一级页表项里面的结构了。 我们现在来说说二级页表,和它的页表项结构。但是在说这个之前,我先要说说一个规则。当以二级分页管理某段存储空间时,要同时设置一级页表项和二级页表项,一个一级页表项对应1段(1MB)虚拟存储空间的映射关系,一个一级页表项对应一张二级页表,这张二级页表中的所有页表项对应的虚拟空间映射关系的总和,就是一级页表的页表项虚拟存储空间的映射了。举个例子,假设物理存储空间一页的大小设置为4kb,0~4kb这个地址空间就有一页的大小了。刚才不是说了,一级页表的一个页表项对应1段大小的虚拟存储空间的映射。再加上两个两个限制:二级页表的大小为1KB;每个页表项占4个字节(4byte)。这样就可以知道二级页表一共有256项,也就是有256个页表项。现在如果一个页表项映射0~4kb的物理存储空间。那么256个页表项就一共映射了0~1024kb的物理存储空间了。很明显这个空间的 大小为1M。就是一级页表一个页表项对应的虚拟存储空间映射关系的范围。 好了,说了那么多,大家应该明白了吧,如果还是不明白就画画图吧。 其实刚才打的例子就是粗粒度小页地址变换方法的具体规则,我再叙述一遍:一级页表的每个页表项对应的虚拟存储空间映射关系的范围是1MB,其页表项结构告诉我们31位~10位是粗粒度二级页表的基址;二级页表的大小为1KB;每个页表项占4个字节,它对应的虚拟存储空间映射关系的范围是4kb。 接下来,我们来看看二级页表的页表项的结构: 31位~12位存放着小页基地址。 这样就把整个页表结构说了一遍了。好了,现在我们来讨论虚拟地址是如何转换成物理地址的。 传给cpu的虚拟地址的结构如下: 31位~20位存放着一级页表内偏移序号; 19位~16位存放着二级页表内偏移序号; 15位~0位存放着页内偏移序号; 首先会提取31位~20位的一级页表内偏移序号,再去访问CP15的C2寄存器,把一级页表的页表基址提取出来。页表基址加上页表偏移序号就可以找到一级页表里面相应的页表项。访问这项可以得到二级页表的基址。 然后会再提取19位~16位的二级页表内偏移序号,加上刚才获得的二级页表的基址。这样就可以得到二级页表的页表项了。访问其内容,可以得到物理地址的基址。 最后提取15位到0位的页内偏移序号,加上刚才的物理地址基址。就可以得到物理地址了。 这就是整个转换过程了。 接下来,我要讨论的是MMU的访问控制基址(就是内存保护机制) 先要说说这个方面涉及到几个元素: CP15的C3、C5、C6、还有C1的S和R位。还有就是各级页表的页表项结构中的某些位,这些位构成了AP和DOMAIN。(以后我们把页表项的结构称为描述符) 我们先来说说C3吧,这个寄存器记录了D0~D15这十六个域,每个域用2位来表示。什么是域?MMU把整个存储空间划分成16个域,每个域都有对应的存储区域的。那么用这两位来表示什么呢?是权限,是访问这个域的权限。这2位有4种组合,每个的具体意义如下: 00:没有访问权限 01:客户(client)根据CP15

您可能关注的文档

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档