ARM920T的MMU
我们已经简单了解了一下查页表的过程,实际上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相关推荐
- (亚嵌)ARM920T的MMU与Cache之MMU
MMU 我们已经简单了解了一下查页表的过程,实际上ARM920T支持多种尺寸规格的页表,图 9 "Translation Table Walk"所示的只是其中一种情况.下图示意了所 ...
- ARM处理器之MMU和Cache
ARM处理器之MMU和Cache ARM920T的MMU和Cache都集成在CP15协处理器中,MMU和Cache的联系非常密切,以下是CP15协处理器的寄存器列表(摘自[S3C2410用户手册]), ...
- 常见架构TLB miss处理方法(转)
转自网站:http://blog.sina.com.cn/s/blog_633f462901018reb.html 0. 综述 总的来说TLB miss处理分为硬件处理和软件处理两种,硬件 ...
- SkyEye硬件模拟平台:硬件仿真实现之一
本系列文章主要介绍了SkyEye硬件模拟平台的实现细节.主要内容包括SkyEye的总体设计.SkyEye的可扩展框架.SkyEye的关键数据结构.SkyEye对各种CPU的模拟实现.SkyEye对各种 ...
- Mirco2440核心板设计思考
S3C2440的Nand Flash控制器有一个特殊的功能,在S3C2440上电后,Nand Flash控制器会自动的把Nand Flash上的前4K数据搬移到4K内部SRAM中,系统会从起始地址是0 ...
- ARM920T内存管理单元MMU
作为程序员已经有4-5个年头了,发现学的知识杂且乱,很多学习过的东西,有时也会忘记.索性开始整理,由于是电子专业出身,于是想把之前玩过的2440开发板,重新再玩一遍.顺便对各个知识点进行较全面的总结. ...
- 嵌入式Linux之我行——ARM MMU工作原理剖析
一.MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程 ...
- ARM9学习笔记之——MMU
我记得有一次我去应聘ARM-Linux软件工程师.结果被问到ARM中的虚拟内存是怎么管理的.由于我只对X86平台下的MMU了解,所以我被问倒了.原来我所学的只是皮毛.还有很多东西值得我去深入.要做AR ...
- MMU和cache学习
1. MMU MMU:memory management unit,称为内存管理单元,或者是存储器管理单元,MMU是硬件设备,它被保存在主存(main memory)的两级也表控制,并且是由 ...
- ARM之MMU工作原理分析
本文系转载,侵删,原文地址 http://blog.ednchina.com/LHDDSHL/292841/message.aspx 一.MMU的产生 许多年以前,当人们还在使用DOS或是 ...
最新文章
- PHP - .htaccess设置显示PHP错误 (转)
- mysql是逻辑库吗_mycat是一种比较简单的中间件产品,可以帮助mysql进行分库,同时统一在一个逻辑库。硬件环境:系统:centos 7.6数据库版本:5.7.19mycat:...
- KubeCon 、 CloudNativeCon、Open Source Summit 2019三会交融,看点不断!
- d3js mysql_D3js技术文档 可视化展现
- 16-elasticsearch6.x {“error“:“Content-Type header [application/x-www-form-urlencoded] is not support
- 如果数组最后一项为空删除最后一项和去前面的逗号_手写数组方法
- 俱乐部通知[即日起启用微软Live Meeting]
- 网络爬虫与HTTP协议
- VS2015各版本的区别
- 【Dll调试】DLL调试方法
- [教程] 写号+上3G成功,附个人经验补充,写号看此一贴即可,二楼附上radio恢复方法和recovery (来源于http://www.in189.com/thread-94957-1-1.htm)
- gmx solvate命令
- C++二叉排序树代码实现
- 项目管理办公室——PMO
- 警醒篇:如何做人?(转载)
- 制作流程图用什么软件比较好?这些简单好用的制作软件推荐给你
- idea根据路径找控制器的插件(推荐)
- android百度地图设置logo,缩放按钮,指南针的位置
- 从零开始学数据分析之——《笨办法学Python》(习题27-36)
- linux每个磁盘大小,linux磁盘占用跟每个文件夹大小总和不符
热门文章
- 20 分钟教你量化自己的资产
- word技巧-分节符和连续页码,页眉页脚加线
- APS高级计划排程系统的基本原理和排程步骤
- 解决Mac系统读写NTFS格式移动硬盘
- 【单位换算】存储单位(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)
- Nature communications
- HTML5游戏引擎(二)01-egret引擎的安装与hello world
- 引用 八卦象数疗法--配方1
- Java使用ucanaccess连接Access数据库,报错:UCAExc:::4.0.0 user lacks privilege or object not found: XXXXXX
- R语言入门:使用函数sample进行抽样