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相关推荐

  1. [国嵌笔记][036][关闭MMU和CACHE]

    关闭MMU和CACHE 1.Cache是一种容量小,但存取速度非常快的存储器,它保存最近用到的存储器中数据的拷贝.按功能分为ICache(指令Cache)和DCache(数据Cache) 2.虚拟地址 ...

  2. c语言fscanf 发生段错误,亚嵌教育

    亚嵌教育 46期C语言复习串讲课堂笔记 (2012-2-20) 知识点汇总 (以下知识点内容基本按照<一站式编程>章节顺序) 程序概念 指令 (代码段) 函数调用 printf() 运算( ...

  3. MMU和cache学习

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

  4. ARM处理器之MMU和Cache

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

  5. (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) ...

  6. AKA传奇和亚嵌那些事

    AKA传奇和亚嵌那些事 akaer(akaer@sina.com) 2011-01-2025 亚嵌发源于2003年3月1日成立的AKA嵌入式小组(AKA Embedded),AKA 嵌入式小组又隶属1 ...

  7. cache与MMU与总线仲裁

    为了以合理的价格,设计容量和速度满足计算机系统的需求,计算机体系结构设计者设计出了存储器的层次结构. "Cache-主存"和"主存-辅存"是最常见的两种层次结构 ...

  8. ARM协处理器CP15(设置MMU,cache等)学习

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 作者:w ...

  9. [mmu/cache]-ARM MMU的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM cache的学习笔记-一 ...

最新文章

  1. SAP MM 物料主数据的Document Data
  2. 程序员你为什么这么累【续】:编码习惯之工具类规范
  3. 我的日常工具——gdb篇
  4. SpringBoot的基础
  5. php调用webservice报错Class 'SoapClient' not found
  6. 《大数据》2015年第2期“动态”——大数据发现银行贷款风险
  7. 金融科技:中国农行研发中心DevOps规划与实践
  8. pythonmatplotlib刷新_matplotlib:如何刷新figure.canvas
  9. Visual Studio 2019 v16.6 和 v16.7 Preview 1 发布
  10. ie检查服务器证书吊销,浏览器弹出“该站点安全证书吊销信息不可用是否继续”解决方法...
  11. cacti 监控添加插件
  12. Git 工具之TortoiseGit小乌龟安装配置及使用
  13. linux如何删除tree命令,误删tree命令如何恢复
  14. Guice依赖注入(Provider)
  15. 小红书口碑营销怎么做?小红书笔记结构剖析及场景营销
  16. 键盘上打出省略号的方法
  17. Python 常用模块简介
  18. SQL SERVER学习记录
  19. YUV图片查看器以及测试文件(YUV420)
  20. hive 传递外部变量的方式

热门文章

  1. Android开发的未来发展方向
  2. 浏览器安装查看原型插件
  3. 昆仑通态触摸屏通讯6台abb变频器
  4. 【MySQL基本学习】
  5. 毕业设计 开源物联网系统设计(源码+论文)
  6. 两人小团队开发了一款与谷歌竞争的产品
  7. C 语言网络编程 — 内核协议栈收包/发包流程
  8. 国标GB28181协议视频平台EasyGBS大并发下SIP消息出现重复SN号的解决办法
  9. UWB技术主要应用在哪些领域
  10. 单点登录原理和java实现简单的单点登录