转自: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. 高效而轻松的sed命令

    sed(stream editor)是一款高效的流编辑器,它一次只处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的 ...

  2. Sprint第二个冲刺(第三天)

    一.Sprint 计划会议:        今天我们召开了第二个Sprint的第三次会议,会议上我们把各自完成的情况进行了一次总结,现在主界面和美化按钮.增添图片的功能已经完成了,Doing里面的其他 ...

  3. Cortana 在安装语言包后失灵 | 解决

    http://windows.microsoft.com/zh-cn/windows-10/cortanas-regions-and-languages 适用于 Windows 10 Currentl ...

  4. 单页web应用(SPA)的简单介绍

    单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用.它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML.J ...

  5. VGG_19 train_vali.prototxt file

    name: "VGG_ILSVRC_19_layer" layer {  name: "data"  type: "ImageData"  ...

  6. JSBinding + SharpKit / 实战:转换 Survival Shooter

    从 asset store 下载 Survival Shooter (商店里有2个版本,一种是给Unity5用的,一个是给Unity4.6用的,我们这个实验用的是后者,版本是2.2.如果) 1 删除多 ...

  7. CUDA中的流与事件

    流:CUDA流很像CPU的线程,一个CUDA流中的操作按顺序进行,粗粒度管理多个处理单元的并发执行. 通俗的讲,流用于并行运算,比如处理同一副图,你用一个流处理左边半张图片,再用第二个流处理右边半张图 ...

  8. Unity3D研究院编辑器之脚本设置ToolBar

    Unity版本5.3.2 如下图所示,ToolBar就是Unity顶部的那一横条.这里的所有按钮一般情况下都得我们手动的用鼠标去点击.这篇文章我们说说如果自动操作它们 1.自动点击左边四个按钮 (拖动 ...

  9. python--flask使用

    Flask是一个使用 Python 编写的轻量级 Web 应用框架.下面我将使用Flask框架,创建一个简单的html页面示例. 1.项目的目录结构如下所示:exweb\  uniqueenv\  a ...

  10. unity, Graphics.Blit (null, null, mat,0);

    我使用 Graphics.Blit (null, finalRT, mat); 合成出一张finalRT,然后将finalRT用在editor脚本的OnInspector中使用 Graphics.Dr ...