(亚嵌)ARM920T的MMU与Cache之MMU
MMU 我们已经简单了解了一下查页表的过程,实际上ARM920T支持多种尺寸规格的页表,图 9 “Translation Table Walk”所示的只是其中一种情况。下图示意了所有可能的情况(本节的图表均摘自[S3C2410用户手册])。 图 11. 查页表的过程 回顾一下查表的过程,首先从CP15的TTB寄存器找到一级页表的基地址,再把VA[31:20]作为索引从表中找出一项,这个表项称为一级页描述符(Level 1 Descriptor),一个这样的表项占4个字节,可以是以下四种格式之一: 图 12. 一级页描述符 如果描述符的最低两位是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]是索引),二级描述符可以是以下四种格式之一: 图 13. 二级页描述符 描述符最低两位是00属于Fault格式,其它三种情况分别对应三种不同规格的物理页面。Large Page和Small Page有四组AP权限位,每组两个bit,这样可以为每1/4个物理页面分别设置不同的权限,也就是说,Large Page可以为每16K设置不同的权限,Small Page可以为每1K设置不同的权限。 ARM920T提供了多种页表和页面规格,但操作系统只采用其中一种,Linux采用的就是图 9 “Translation Table Walk”所示的规格,一级描述符是Coarse Page Table格式,二级描述符是Small Page格式,每个物理页面4K。我们以此为例,结合前面的的解释和页描述符的格式,再看一下Translation Table Walk的详细过程: 图 14. 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访问控制寄存器(见表 1 “CP15协处理器的寄存器列表”寄存器3)表示了16个Domain,每两位表示一个Domain的访问权限,以下是该寄存器的格式: <Palign=center> 图 15. 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的控制寄存器(见表 1 “CP15协处理器的寄存器列表”寄存器1)中的S和R位与页描述符的AP位合在一起决定访问权限,如下所示: 图 16. 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芯片,或者其它硬件故障。 思考与练习 1 从VA到PA的映射为什么要采用多级页表的方式?如果只有一级页表,那么一次寻址就只需两次访问物理内存的操作(一次是页表,一次是物理页面),不是比多级页表更快吗? 2 多个进程可以共享同一段物理内存,比如两个bash进程共享同一个bash代码段,比如所有进程共享libc代码段,这是怎么实现的? 3 用户进程不能访问属于内核的地址空间,否则会出段错误,这是怎么实现的? |
|
上 |
(亚嵌)ARM920T的MMU与Cache之MMU相关推荐
- [国嵌笔记][036][关闭MMU和CACHE]
关闭MMU和CACHE 1.Cache是一种容量小,但存取速度非常快的存储器,它保存最近用到的存储器中数据的拷贝.按功能分为ICache(指令Cache)和DCache(数据Cache) 2.虚拟地址 ...
- c语言fscanf 发生段错误,亚嵌教育
亚嵌教育 46期C语言复习串讲课堂笔记 (2012-2-20) 知识点汇总 (以下知识点内容基本按照<一站式编程>章节顺序) 程序概念 指令 (代码段) 函数调用 printf() 运算( ...
- MMU和cache学习
1. MMU MMU:memory management unit,称为内存管理单元,或者是存储器管理单元,MMU是硬件设备,它被保存在主存(main memory)的两级也表控制,并且是由 ...
- ARM处理器之MMU和Cache
ARM处理器之MMU和Cache ARM920T的MMU和Cache都集成在CP15协处理器中,MMU和Cache的联系非常密切,以下是CP15协处理器的寄存器列表(摘自[S3C2410用户手册]), ...
- (18)FPGA面试技能提升篇(CACHE、MMU、DMA)
1.1 FPGA面试技能提升篇18(CACHE.MMU.DMA) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试技能提升篇18(CACHE.MMU.DMA) ...
- AKA传奇和亚嵌那些事
AKA传奇和亚嵌那些事 akaer(akaer@sina.com) 2011-01-2025 亚嵌发源于2003年3月1日成立的AKA嵌入式小组(AKA Embedded),AKA 嵌入式小组又隶属1 ...
- cache与MMU与总线仲裁
为了以合理的价格,设计容量和速度满足计算机系统的需求,计算机体系结构设计者设计出了存储器的层次结构. "Cache-主存"和"主存-辅存"是最常见的两种层次结构 ...
- ARM协处理器CP15(设置MMU,cache等)学习
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 作者:w ...
- [mmu/cache]-ARM MMU的学习笔记-一篇就够了
★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM cache的学习笔记-一 ...
最新文章
- SAP MM 物料主数据的Document Data
- 程序员你为什么这么累【续】:编码习惯之工具类规范
- 我的日常工具——gdb篇
- SpringBoot的基础
- php调用webservice报错Class 'SoapClient' not found
- 《大数据》2015年第2期“动态”——大数据发现银行贷款风险
- 金融科技:中国农行研发中心DevOps规划与实践
- pythonmatplotlib刷新_matplotlib:如何刷新figure.canvas
- Visual Studio 2019 v16.6 和 v16.7 Preview 1 发布
- ie检查服务器证书吊销,浏览器弹出“该站点安全证书吊销信息不可用是否继续”解决方法...
- cacti 监控添加插件
- Git 工具之TortoiseGit小乌龟安装配置及使用
- linux如何删除tree命令,误删tree命令如何恢复
- Guice依赖注入(Provider)
- 小红书口碑营销怎么做?小红书笔记结构剖析及场景营销
- 键盘上打出省略号的方法
- Python 常用模块简介
- SQL SERVER学习记录
- YUV图片查看器以及测试文件(YUV420)
- hive 传递外部变量的方式