我们已经简单了解了一下查页表的过程,实际上ARM920T支持多种尺寸规格的页表,下图示意了所有可能的情况(本节的图表均摘自[S3C2410用户手册])。

图 1. 查页表的过程

回顾一下查表的过程,首先从CP15的TTB寄存器找到一级页表的基地址,再把VA[31:20]作为索引从表中找出一项,这个表项称为一级页描述符(Level 1 Descriptor),一个这样的表项占4个字节,可以是以下四种格式之一:

图 2. 一级页描述符

如果描述符的最低两位是00,属于Fault格式,表示该范围的VA没有映射到PA。如果描述符的最低两位是10,属于Section格式,这种格式没有二级页表而是直接映射到物理页面,一个Section是1M的大页面,描述符中[31:20]位就是这个页面的基地址,基地址的[19:0]低位全为0,对齐到1M地址边界,描述符中的Domain和AP位控制访问权限,C、B两位控制缓存,后面再详细解释每个位的含义。如果描述符的最低两位是01或11,则分别对应两种不同规格的二级页表。根据地址对齐的规律想一下,这两种页表分别是多大?从一级描述符中取出二级页表的基地址,再把VA的一部分作为索引去查二级描述符(Level 2 Descriptor)(如果是Coarse Page Table则VA[19:12]是索引,如果是Fine Page Table则VA[19:10]是索引),二级描述符可以是以下四种格式之一:

图 3. 二级页描述符

描述符最低两位是00属于Fault格式,其它三种情况分别对应三种不同规格的物理页面。Large Page和Small Page有四组AP权限位,每组两个bit,这样可以为每1/4个物理页面分别设置不同的权限,也就是说,Large Page可以为每16K设置不同的权限,Small Page可以为每1K设置不同的权限。

ARM920T提供了多种页表和页面规格,但操作系统只采用其中一种,一级描述符是Coarse Page Table格式,二级描述符是Small Page格式,每个物理页面4K。我们以此为例,结合前面的的解释和页描述符的格式,再看一下Translation Table Walk的详细过程:

图 4. Translation Table Walk的详细过程

从上到下依次解释如下:

1 VA被划分为三段用于地址映射过程,各段的长度取决于页描述符的格式。

2 TTB寄存器中只有[31:14]位有效,低14位全为0,因此一级页表的基地址对齐到16K地址边界,而一级页表的大小也是16K。

3一级页表的基地址加上VA[31:20]左移两位组装成一个物理地址。想一想为什么VA[31:20]要左移两位占据[13:2]的位置,而空出[1:0]两位呢?

4 用这个组装的物理地址从物理内存中读取一级页描述符,这是一个Coarse Page Table格式的描述符。

5 通过Domain权限检查后,Coarse Page Table的基地址再加上VA[19:12]左移两位组装成一个物理地址。

6 用这个组装的物理地址从物理内存中读取二级页描述符,这是一个Small Page格式的描述符。

7 通过AP权限检查后,Small Page的基地址再加上VA[11:0]就是最终的物理地址。想一想为什么这次不左移两位了呢?

下面解释一下Domain和AP位。CP15的Domain访问控制寄存器表示了16个Domain,每两位表示一个Domain的访问权限,以下是该寄存器的格式:

图 5. Domain Access Control Register

每个Domain的两个位可以取值为00、01、10或11,如果取值为00或10则表示该Domain不可访问,如果取值为01则表示访问该Domain需要进一步检查AP位,如果取值为11则表示可以直接访问该Domain而无需检查AP位。回想一下,一级页描述符中的Domain字段由4个位组成,可以有16个不同的取值,就表示该描述符所描述的二级页表或Section属于这16个Domain中的哪一个。快速上下文切换、Domain和多种规格的页表是ARM特有的机制,是针对嵌入式系统软件的特点而设计的,其它处理器不一定有类似的机制,例如也许没有Domain和快速上下文切换的概念,也许只有一种规格的页表。为了能够在多种不同的平台上移植,Linux内核代码不会利用ARM特有的这些机制。除了这些特例之外,我们在这里介绍的其它机制都具有普遍性,读者应重点把握具有普遍意义的基本原理和基本概念。

CP15的控制寄存器中的S和R位与页描述符的AP位合在一起决定访问权限,如下所示:

图 6. AP权限检查

可见,同样的AP、S、R位对用户模式和特权模式来说具有不同的意义,特权模式的权限都不低于用户模式的权限。最后将各种由内存访问产生的异常总结如下:

Alignment Fault——以Word为单位的数据访问指令地址未对齐到4字节边界,或者以Half Word为单位的数据访问指令地址未对齐到2字节边界。

Translation Fault——页描述符的[1:0]为00,属于Fault格式,无效表项。

Domain Fault——一级页描述符或Section所属Domain的权限位为00或10。

Permission Fault——根据AP位和CP15寄存器1的S、R位检查访问权限,若所属Domain的权限位为11则跳过这一步检查。

External Abort——总线异常,例如此物理地址上没有挂RAM芯片,或者其它硬件故障。

ARM920T的MMU相关推荐

  1. (亚嵌)ARM920T的MMU与Cache之MMU

    MMU 我们已经简单了解了一下查页表的过程,实际上ARM920T支持多种尺寸规格的页表,图 9 "Translation Table Walk"所示的只是其中一种情况.下图示意了所 ...

  2. ARM处理器之MMU和Cache

    ARM处理器之MMU和Cache ARM920T的MMU和Cache都集成在CP15协处理器中,MMU和Cache的联系非常密切,以下是CP15协处理器的寄存器列表(摘自[S3C2410用户手册]), ...

  3. 常见架构TLB miss处理方法(转)

    转自网站:http://blog.sina.com.cn/s/blog_633f462901018reb.html 0.       综述 总的来说TLB miss处理分为硬件处理和软件处理两种,硬件 ...

  4. SkyEye硬件模拟平台:硬件仿真实现之一

    本系列文章主要介绍了SkyEye硬件模拟平台的实现细节.主要内容包括SkyEye的总体设计.SkyEye的可扩展框架.SkyEye的关键数据结构.SkyEye对各种CPU的模拟实现.SkyEye对各种 ...

  5. Mirco2440核心板设计思考

    S3C2440的Nand Flash控制器有一个特殊的功能,在S3C2440上电后,Nand Flash控制器会自动的把Nand Flash上的前4K数据搬移到4K内部SRAM中,系统会从起始地址是0 ...

  6. ARM920T内存管理单元MMU

    作为程序员已经有4-5个年头了,发现学的知识杂且乱,很多学习过的东西,有时也会忘记.索性开始整理,由于是电子专业出身,于是想把之前玩过的2440开发板,重新再玩一遍.顺便对各个知识点进行较全面的总结. ...

  7. 嵌入式Linux之我行——ARM MMU工作原理剖析

    一.MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程 ...

  8. ARM9学习笔记之——MMU

    我记得有一次我去应聘ARM-Linux软件工程师.结果被问到ARM中的虚拟内存是怎么管理的.由于我只对X86平台下的MMU了解,所以我被问倒了.原来我所学的只是皮毛.还有很多东西值得我去深入.要做AR ...

  9. MMU和cache学习

    1.      MMU MMU:memory management unit,称为内存管理单元,或者是存储器管理单元,MMU是硬件设备,它被保存在主存(main memory)的两级也表控制,并且是由 ...

  10. ARM之MMU工作原理分析

    本文系转载,侵删,原文地址 http://blog.ednchina.com/LHDDSHL/292841/message.aspx 一.MMU的产生       许多年以前,当人们还在使用DOS或是 ...

最新文章

  1. PHP - .htaccess设置显示PHP错误 (转)
  2. mysql是逻辑库吗_mycat是一种比较简单的中间件产品,可以帮助mysql进行分库,同时统一在一个逻辑库。硬件环境:系统:centos 7.6数据库版本:5.7.19mycat:...
  3. KubeCon 、 CloudNativeCon、Open Source Summit 2019三会交融,看点不断!
  4. d3js mysql_D3js技术文档 可视化展现
  5. 16-elasticsearch6.x {“error“:“Content-Type header [application/x-www-form-urlencoded] is not support
  6. 如果数组最后一项为空删除最后一项和去前面的逗号_手写数组方法
  7. 俱乐部通知[即日起启用微软Live Meeting]
  8. 网络爬虫与HTTP协议
  9. VS2015各版本的区别
  10. 【Dll调试】DLL调试方法
  11. [教程] 写号+上3G成功,附个人经验补充,写号看此一贴即可,二楼附上radio恢复方法和recovery (来源于http://www.in189.com/thread-94957-1-1.htm)
  12. gmx solvate命令
  13. C++二叉排序树代码实现
  14. 项目管理办公室——PMO
  15. 警醒篇:如何做人?(转载)
  16. 制作流程图用什么软件比较好?这些简单好用的制作软件推荐给你
  17. idea根据路径找控制器的插件(推荐)
  18. android百度地图设置logo,缩放按钮,指南针的位置
  19. 从零开始学数据分析之——《笨办法学Python》(习题27-36)
  20. linux每个磁盘大小,linux磁盘占用跟每个文件夹大小总和不符

热门文章

  1. 20 分钟教你量化自己的资产
  2. word技巧-分节符和连续页码,页眉页脚加线
  3. APS高级计划排程系统的基本原理和排程步骤
  4. 解决Mac系统读写NTFS格式移动硬盘
  5. 【单位换算】存储单位(bit Byte KB MB GB TB PB EB ZB YB BB)时间单位(ms μs ns ps)长度单位(dm cm mm μm nm pm fm am zm ym)
  6. Nature communications
  7. HTML5游戏引擎(二)01-egret引擎的安装与hello world
  8. 引用 八卦象数疗法--配方1
  9. Java使用ucanaccess连接Access数据库,报错:UCAExc:::4.0.0 user lacks privilege or object not found: XXXXXX
  10. R语言入门:使用函数sample进行抽样