转自:http://blog.chinaunix.net/uid-23193900-id-3187782.html

1.MMU简介

   MMU(Memory Management Unit),内存管理单元,主要职责:将虚拟地址映射为物理地址,提供硬件机制的内存访问权限检查。
 

2.基本概念

  虚拟地址(Virtual Address,VA),修改后的虚拟地址(Modified VA),物理地址(Phisical Address)
 VA是CPU使用的地址,MVA是MMU、Caches使用的,PA是内存设备使用,他们的映射关系:
  
 
(1)cpu看到的是VA
(2)caches和MMU使用的是MVA,
(3)实际物理设设备使用的是PA。
 

3.地址转换中的基本概念

地址的转换就像是数学中映射,利用函数公式,多对1,就是多个虚拟地址对应同一个物理地址。
这里地址转换用的是页表的方式:
  • 页表
   页表是由一个个表项(Entry,又称作描述符)组成的物理表,每个页表项或是一个物理页(一块物理内存,大小为1k,4k不等)的起始地址,或是一个二级页表的地址(当是一个二级页表的地址时,又可以称该页表为页描述符)。所有的页表都用物理地址访问。
  • 表项(描述符)的分类
  依据描述符保存的内容,可以分为两类。
  一类保存的是直接的物理页或段的起始地址,如段描述符、大页、小页、极小页描述符。
  另一类保存的是二级页表的物理地址,如粗页表描述符,细页表描述符。
  • 一级映射与二级映射
   一级映射,是指以段(Section,大小1MB)的方式进行转换。
   二级映射,是以页的方式进行转换。ARM页大小由三种:1k,4k,64k。
 

4.地址转换的过程

  • VA->MVA:CPU发出一个VA,是怎么转换为MVA的
   这在上图可以看到,是通过一个硬件电路转换的。
 在ARM9里面,如果VA<32M,利用进程标识号PID转换得到MVA
过程如下:
if(VA < 32M)
     MVA = VA | ( PID<<25 )
else
     MVA = VA
只是上面的过程是由硬件实现的。
  这样为VA进行了一级映射,为什么呢?在linux系统里,每个进程的地址空间0-4G,0-3G是进程独有的,称为用户空间,3G-4G是系统的,称为内核空间,所有进程共享。如果两个进程所用的VA有重叠,在切换进程时,为了把重叠的VA映射到不同的PA上,需要重建页表、使无效caches和TLBS。使用了MVA,使进程在VA相同的情况下,使用不同的MVA,进而PA也不同。这就是在VA与PA之间加上一次到MVA的映射的意义。
 
  • MVA->PA:MVA到PA的转换
上面说了,虚拟地址到物理地址的转换有两种方式:公式映射+页表转换。
概念上面也介绍过了。
这里就进行实际的转换说明。
首先,给定一个MVA,要进行转换,先要找到一级页表,怎么找?
有一个寄存器,TTB寄存器,页表基地址寄存器,负责保存一级页表的基地址,当然是物理地址。
 
TTB寄存器是集成在CP15协处理器中的,
 
TTB的格式:
因此,一级页表的地址是16k对齐的,因为[14:0]要求为0.
 
一级页表的描述符格式:
 
 
一级页表的表项,可以是个段描述符,粗页表描述符或细页表描述符。
共同点是,每个描述符都代表1MB的物理地址空间。
不同点:段描述符直接指向一个1MB地址空间,可以直接访问;而页表描述符,顾名思义,就是指向一个二级页表,还需要另一次映射。
 
二级页表的描述符格式:
 
 
二级页表有两种:粗页表(Coarse Page Table )+细页表( Fine Page Table)
粗页表与细页表的异同:粗页表有最多256个表项,每个表项可表示4kb空间,如果表项是个大页页表描述符,则连续16个表项都表示同一个大页描述符。
细页表中每个表项代表1kb,指向一个极小页;也可扩展成4k的小页,64k的大页。
 
页表的结构与格式就是这些了。。下面看转换的具体过程
 
 
段地址转换
 
大页地址转换
小页的地址转换
 
极小页的地址转换
 
 

S3C2440之MMU的更多相关文章

  1. MMU内存管理单元

    arm-linux学习-(MMU内存管理单元) 什么是MMU MMU(Memory Management Unit)主要用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及 ...

  2. [转帖]MMU内存管理单元

    MMU内存管理单元 https://www.cnblogs.com/alantu2018/p/9002309.html 之前对这一块一直不理解 最近学习了点 CPU time slice 以及 con ...

  3. S3C2440—9.复制程序到SDRAM中执行

    文章目录 一.S3C2440的启动方式 二.代码 一.S3C2440的启动方式 S3C2440的MMU有一种"steppingstone".技术,是协助MCU从无法执行程序的NAN ...

  4. buildroot构建项目(一)---buildroot介绍

    1.1 什么是buildroot Buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Li ...

  5. 学了5天Arm,今天谈谈初学感受 (转)

    一.初探      4月1日入手友善mini2440.先看了下板子,感觉没什么稀奇的,s3c2440总线上外挂SDRAM(对这个不是很感冒,之前搞过一个FPGA的SDRAM控制器),NOR    .  ...

  6. 转 s3c2440硬件学习----内存管理单元MMU

    本篇基本是韦东山书上的 一.内存管理单元MMU介绍 内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.MMU使得每个用户进程拥有自己独立的地址空间,并通过内存访 ...

  7. 十三、S3C2440 裸机 — 初始化代码及MMU

    13.1 NOR FLASH 搬运 把程序从 nor flash 上搬运到 SDRAM 中 程序存储在 nor flash 上,运行时将程序搬运到 SDRAM 中运行 nor flash 启动:nor ...

  8. S3C2440的Linux启动过程分析(一)——SC2440处理器结构

    1.1.     S3C2440处理器结构 S3C2440处理器的结构如下图所示,其核心单元为ARM9TDMI处理器核,主要包括16K的指令Cache和16K的数据Cache,以及分开的指令和数据MM ...

  9. 第七章 内存管理单元MMU介绍

    7.1 内存管理单元MMU介绍 7.1.1 S3C2410/S3C2440 MMU特性 负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查 特性: 与ARM V4兼容的映射长度.域.访问权 ...

随机推荐

  1. Java--常用类

    1.方法中参数传递:值传递 基本数类型:具体的实际值 引用数据类型:对象的地址值 2.继承:关键字:extends单继承继承父类的非私有成员多重继承 2.权限的修饰符:private 只能在当前类的内 ...

  2. 精美的HTML5 Loadding页面

    以前我们大部分的Loading动画都是利用gif图片实现的,这种图片实现Loading动画的方法虽然也很不错,但是作为HTML5开发者来说,如果能利用HTML5和CSS3实现这些超酷的Loading动 ...

  3. magic矩阵 分类: 数学 2015-07-31 22:56 2人阅读 评论(0) 收藏

    魔方矩阵 魔方矩阵是有相同的行数和列数,并在每行每列.对角线上的和都相等.你能构造任何大小(除了2x2)的魔方矩阵. 1.历史       魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说 ...

  4. html5中新的标准属性

    属性                                        值                                  描述accesskey             ...

  5. 共享内存+互斥量实现linux进程间通信 分类: Linux C/C++ 2015-03-26 17:14 67人阅读 评论(0) 收藏

    一.共享内存简介 共享内存是进程间通信中高效方便的方式之一.共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针,两个进程可以对一块共享 ...

  6. Andorid面试问题整理

    Acitivty的四中启动模式与特点. standard:默认的启动模式 singleTop:适合那种接受通知启动的页面,比如新闻客户端之类的,可能会给你推送好几次 ,但是每次都是打开同一张页面调用o ...

  7. 通过 Javacore 诊断线程挂起等性能问题

    http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuzy_jav ...

  8. 二十四种设计模式:装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern) 介绍动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活.示例有一个Message实体类,某个对象对它的操作有Insert()和 ...

  9. javascript encode或者decode html

    function myHTMLEnCode(str) { var s = ""; if (str.length == 0) return ""; s = str ...

  10. SpringMVC常用注解,返回方式,路径匹配形式,验证

    常用注解元素 @Controller 标注在Bean的类定义处 @RequestMapping 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping ...