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

主要参考资料是2440官方的PDF资料以及韦东山嵌入式linux应用开发手册,用的开发板是FL2440.

由于用的是64位的服务器编译,所以采用的交叉编译工具链是用openwrt-dreambox编译出来的基于S3C2440的交叉编译工具链进行编译。

韦东山的前几章节阅读起来较为容易上手,因此决定从第7章内存管理单元MMU开始总结有关S3C2440使用以及软硬件处理方式。后续会深入到uboot以及内核,以及文件系统等等。

发现扯了一堆,还是直接入正题吧。

本文主要参考ar920t的technical reference manual,以及韦东山嵌入式linux应用开发手册。有电子版可供下载。

MMU的主要工作是虚拟地址到物理地址的映射。

arm920T MMU的特性

我总结比较重要的几点:

  1. 4种映射长度,段(1MB)、大页(64KB)、小页(4KB)、极小页
  2. 对每段都可以设置访问权限。
  3. 大页、小页的每个子页(sub-page,即被映射页的1/4)都可以单独设置访问权限。
  4. 硬件访问页表。硬件实现16个域。
  5. 指令TLB(64个), 数据TLB(64个)。
  6. TLB条目采用round-bin算法。

虚拟地址大家都知道32位的cpu为4GB,物理地址由于一般外存芯片的大小有8M 16M 32M 等等。FL2440的外存SDRAM大小为64M由2片32M的级联组成。

VA MVA PA

ARM和cpu地址之间的转换涉及3个概念。VA MVA PA,韦东山讲的很清楚。我这里简单说明,cpu核发出VA, VA被转换成MVA供cache和mmu使用。在这里MVA被转换成PA,最后使用PA读写内部寄存器或者外部设备。

VA与MVA关系图如下:

如果VA<32M,那么 MVA的值需要使用进程标识号PID(读取CP15的寄存器13) 来转换,MVA = VA +  (PID x 32MB). 即 MVA = VA | (PID << 25), 这里,如果PID = 0,则MVA = VA.

如果VA>=32M,那么 MVA=VA.

虚拟地址到物理地址的转换过程

这里主要理解几张关系图,就能明白转换过程是怎样的。

首先是页转换表,也是最主要的一张:

第一级转换,根据TTB的base以及MVM[31-20] 得到第一级页表描述符,根据描述符的不同,可以分为是段,粗页,还是细页。如果是段,则在第一级转换后,段基址加MVM偏移量即可得到实际物理地址,转换结束。

如果是粗页或者细页方式,那么需要进行第二级转换,第二级转换后,粗页表又可分为大页方式或者小页方式进行地址映射。 而细页表可以分为大页,小页,以及极细页方式地址映射。

这里提个问题:在第二级转换中,以粗页表进行二级地址映射时,为什么只能以大页方式或者小页方式进行地址映射,而不能以极细页方式呢?这个问题后续解答。

根据以上转换图总结有几点:

  1. TTB base 页表基址寄存器,其结构如图:

其中[13:0]为零。

在第一级取址时,是这样的过程:TTB中的[31-14],加上MVA中的[31-20],加上末位2位填零,组成第一级地址。通过第一级地址去取一级页表描述符。

见下图

2. 一级页表描述符

一级页表描述符中的低2位决定是段基址还是粗页基址还是细页基址。

如果是段基址,可以看到表3-4中用31-20位表示段基址,MVA的[19-0]表示段index。 一级页表描述符[31-20] + MVA [19-0] 组成一个实际的PA.此时,一级转换已完成,直接得到实际物理地址,转换结束。

如果一级页表中是粗页地址或者细页地址,则要进行二级转换,才能得到PA。

3. 二级页表描述符

二级页表描述符中最后2bits决定是大页,小页,极细页方式地址映射。其余位是访问控制位,后续详解。

4. 我们来看下粗页表的大页方式地址转换过程:

首先TTB[31-14] + MVA[31-20] 得到第一级页表描述符。如果是粗页表,第二级页表地址是如下构成: L1[31-10] + MVM[19-12] + BIT[1-0] ,其中低2位为零。根据第二级页表地址找到第二级页表描述符,那么实际的物理地址组成:

L2[31-16] + MVA[15-0]。

表3-10中有个trick,L2 table index 和 page index有重合位,韦东山讲的很清楚,当位[15-12] 从0b0000变化到0b1111时, 第二级页表地址有16个不同地址,但其中存储的大页描述符是相同的。所以每连续16个地址保存相同的大页描述符。

这里很明白,因为第一级转换后,得到粗页表的总大小是1MB,而粗页表的entry有256条(MVM[19-12]),每个entry的大小为64KB(MVM[15-0]),256×64KB = 16348KB 恰好是16MB, 因此必然每16个二级页表地址对应一个大页描述符。

说到这里,上面的问题,也很容易想明白了,如果粗页表以极细页方式进行映射,那么页表大小变为:256×1KB=256KB,这样根本无法映射完1MB,所以只能是INVALID。

5.  粗页表小页方式地址转换

和粗页表大页方式地址转换类似,一级页表描述符地址 = TTB[31-14] + MVA[31-20] + bit[1-0] ;二级页表描述符地址 = L1[31-10] + MVA[19-12]  + bit[1-0]; 物理地址 = L2[31-12] + MVA[11-0]; 这里就没有重叠部分了,因为以小页方式映射,页表大小 = 256 × 4KB = 1MB,大小刚好。

6.  细页表极细页方式映射

细页表以大页或小页方式和粗页表类似,不再赘述。

细页表以极细页方式映射图如下:

内存的访问权限检查

参考韦东山,没什么难点。

TLB

起因: 使用一级页表进行映射, 每次读写需要访问2次内存,第一次访问一级页表获得物理地址,第二次才是真正的读写数据;使用两级页表进行映射,则需要3次访问内存(访问2次页表,第3次读写数据)。

地址转换过程大大降低了cpu性能,需要一个类似cache的机制来缓存页表条目(段,大页,小页,极小页的描述符),因此TLB出来了,(Translation Lookaside Buffers).称为 “转译查找缓存”

工作过程见韦东山。

注意点: 必须保证TLB中的内容与页表一致。

方法:  在启动MMU之前,使无效整个TLB,改变页表时,使无效所涉及的虚拟地址对应的TLB的条目。

CACHE

指令cache

数据cache

详见韦东山。

ARM920T内存管理单元MMU相关推荐

  1. 操作系统 内存管理单元MMU TLB

    前言 在了解操作系统 内存管理 分页/分段/段页式管理.操作系统 虚拟内存技术两篇文章后,接下来继续看看现代操作系统基本内存管理方式,本文详细介绍Linux操作系统下的内存管理单元MMU和TLB. d ...

  2. 内存管理单元--MMU

    现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元)提供支持,本节简要介绍M ...

  3. 内存管理单元MMU学习

    MMU MMU是Memory Management Unit的缩写,中文名是内存管理单元,有时称作分页内存管理单元(英语:paged memory management unit,缩写为PMMU). ...

  4. Linux 中的内存管理单元MMU

    MMU (内存管理单元) 基础概念 1.TLB – 转换旁路缓存,里面存放着少量的虚拟内存与实际物理内存之间的对应关系,被称为快表. 2.TTW – 漫游转换表,当TLB中没有对应的转换关系,通过对内 ...

  5. 内存管理单元MMU - ARM内核扩展(一)

    了解物理地址和虚拟地址的关系 掌握如何通过设置MMU来控制虚拟地址到物理地址的转化 了解MMU的内存访问权限机制 了解TLB.Cache.Writebuffer的原理,使用时的注意事项 在计算机开始阶 ...

  6. 内存管理单元——MMU

    一.基本概念介绍 MMU是Memory Management Unit的缩写,中文名是内存管理单元,有时称作分页内存管理单元(英语:paged memory management unit,缩写为PM ...

  7. 内存管理单元MMU简介

    1. MMU MMU在CPU的配合下(通过页异常触发),实现了线性地址到物理地址的动态映射,为正在CPU上运行的应用程序(进程)提供了一个独立的连续内存空间(线性地址空间,或称虚拟内存空间,其中放置了 ...

  8. 【软件开发底层知识修炼】三 深入浅出处理器之三 内存管理与内存管理单元(MMU)

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章学习了中断的概念与意义,以及中断的应用-断点调试原理.点击 ...

  9. 内存管理单元(MMU)介绍

    MMU是存储器管理单元的缩写,是用来管理虚拟内存系统的器件.MMU通常是CPU的一部分,本身有少量存储空间存放从虚拟地址到物理地址的匹配表.此表称作TLB(转换旁置缓冲区).所有数据请求都送往MMU, ...

最新文章

  1. 各种光学仪器成像技术(上)
  2. usaco2.1.2(frac1)
  3. BAT 批处理命令 - 获取时间并进行自定义年月日、时分秒格式实例演示
  4. 用串口模拟printf函数输出
  5. 求1+2+……+N的和
  6. 反向传播算法最全解读,机器学习进阶必看!
  7. 靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...
  8. hibernate 插入 效率_美信半导体:打开工厂边缘智能化新思路,助力工厂效率提升...
  9. MVC学习Day01
  10. 使用JSONObject toString后,会增加反斜杠转义符
  11. 【三维路径规划】基于matlab蚁群算法水下潜器三维路径规划【含Matlab源码 043期】
  12. c语言程序设计输出函数,输出函数C语言程序设计.pdf
  13. axure不能导出图片_axure怎么导出图片 如何将原型另存为图片?
  14. 3dmax2014 uv用法_3dmax中UV贴图的使用方法
  15. 国内网络游戏企业的困境和出路
  16. 制作加载从模糊到清晰的图片
  17. Prometheus(四)——Alertmanager
  18. 水泊梁山迎圣诞,Python 抽奖助好汉
  19. PA1.3 代码+笔记
  20. MSBUILD : error MSB4132: The tools version “2.0“ is unrecognized. Available tools versions are “4.0“

热门文章

  1. 笔记本使用wifi链接外网,同时有线链接内网详细设置,最后有bat文件,方便随时切换
  2. C语言实现物品竞拍管理系统
  3. ggsurvplot的p值到底是如何计算的
  4. html制作过程总结经验,网页基础制作教程:学习HTML经验总结
  5. EMOTET,URSNIF,DRIDEXBitPaymer之间的关联性分析
  6. php 环比计算公式,详情
  7. DB2数据库如何修改字段名称
  8. 三种求平方根的算法——C/C++
  9. Perseus-BERT——业内性能极致优化的BERT训练方案 1
  10. 某些厂商防火墙存在硬编码漏洞复现