7.1 内存管理单元MMU介绍

  7.1.1 S3C2410/S3C2440 MMU特性

  负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查

  特性:

  与ARM V4兼容的映射长度、域、访问权限检查机制

  4种映射长度:段(1MB)、大页(64kb)、小页(4kb)、极小页(1kb)

  对每段都可以设置访问权限

  大页、小页的每个子页(被映射页的1/4)都可以单独设置访问权限

  硬件实现的16个域

  指令TLB(含64个条目)、数据TLB(含64个条目)

  硬件访问页表(地址映射、权限检查由硬件自动进行)

  TLB中条目的替换采用round-robin算法

  可以使无效整个TLB  

  可以单独使无效某个TLB条目

  可以在TLB中锁定某个条目,指令TLB、数据TLB互相独立

  7.1.2 S3C2410/S3C2440MMU地址变换过程

  地址变换原因:  

  (1)程序很大,不能一次全部装入内存

  (2)多道系统很多程序同时执行,不能全部装入内存

   

  ARM CPU上的地址转换过程涉及3个概念:虚拟地址(VA)、变换后的虚拟地址(MVA)、物理地址(PA)

  没启动MMU时,CPU核、cache、MMU、外设等使用的都是物理地址,启动MMU后使用的都是虚拟地址

  CPU核看到的只是虚拟地址VA,cache和MMUliyongMVA转换得到PA

  实际设备看不到VA、MVA,读写他们时使用物理地址PA

  如果VA<32M需要使用进程标识号PID(通过CP15的C13获得)来转换为MVA

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

  过程如下:

  (1)根据给定的虚拟地址找到一级页表中的条目

  (2)如果此页表是段描述符,则返回物理地址,转换结束

  (3)否则如果此条目是二级页表描述符,继续利用虚拟地址在此二级页表中找到下一个条目

  (4)如果这第二个条目是页描述符,责返回物理地址,转换结束

  (5)其他情况出错

页表基址寄存器:

  一级页表必须是16K[[14:0]位为0]对齐的

  根据一级描述符的最低两位,可分为以下4种:

  (1)0b00:无效,(2)0b01:粗页表(3)0b10:段,(4)0b11:细页表

  一级页表描述符格式:

  

  段的地址转换过程:

  

  

  按二级页表描述符的最低两位,可分为:

  (1)0b00:无效,0b01:大页描述符,(3):0b10:小页描述符,(4)极小页描述符

  二级页表的描述符格式:

  

  大页的地址转换过程:

  

  小页的地址转换过程:

  

  极小页的地址转换过程:

  

7.1.3 内存的访问权限检查

  由CP15寄存器C3(域访问控制)、描述符的域(Domain)、CP15寄存器C1的R/S/A位、描述符的AP位等联合作用

  CP15寄存器的C1中A位表示是否对地址进行对齐检查

  CPU读取指令时不进行对齐检查,以字节为单位访问时也不进行对齐检查。对齐在MMU的权限检查、地址映射前进行

  内存的访问权限检查可以概括为以下两点:

  (1)“域”决定是否对某块内存进行权限检查

  (2)“AP”决定如何对某块内存进行权限检查

  S3C2410/S3C2440有16个域,CP15寄存器C3中每两位对应一个域,用来表示这个域是否进行权限检查。

  

  

  Domain占4比特,用来表示这块内存属于16个域哪一个

  AP、ap3、ap2、ap1、ap0结合CP15寄存器C1的R\S位,决定如何进行权限检查

  AP控制整个段(1M)的访问权限;大页描述符中的每个apx(x为0~3)控制一个大页(64kb)中1/4内存的访问权限,小页描述符与大页描述符相似,每个apx(x为0~3)控制一个小页(4kb)中1/4内存的访问权限

  

7.1.4 TLB的作用

  存储近期用到的页表条目,避免每次地址转换时都到主存去查找。

7.1.5 Cache的作用

  CPU写数据时,有写穿式和回写式两种方式

  (1)写穿式:从CPU发出的信号送到Cache的同时,也写入主存

  (2)回写式:只用当Cache中的数据被换出或者强制进行清空操作时,才将原更新的数据写入主存相应单元中

  1、指令Cache

  系统刚上电或者复位时,ICache中的内容是无效的,并且ICaches功能是关闭着的

  ICache一般在MMU开启之后被使用,页表描述符的C位(Ctt)用来表示一段内存是否可以被Cache,Ctt=1时允许Cache否则不允许

  当MMU没有开启时,ICache也是可以被使用的,这时CPU读取指令时多设计的内存都被当做是允许Cache的

  不管ICache是否被开启,CPU每次取值时都会先在ICache中查找是否能找到所要的指令

  CPU取指的3种情况:

  (1)Cache命中且Ctt为1时,从ICaches中去除指令,返回CPU

  (2)Cache缺失且Ctt为1时,cPU从主存中读出指令,并把指令加入ICache中

  (3)Ctt为0时,CPU从主存中读出指令

  2、数据Cache

  系统刚上电或复位时,DCache中内容无效,DCache功能关闭,Write Buffer中的内容也飞起不用,Write Buffer与DCache紧密结合,没有专门的控制位来开启、停止它。

  DCache一般在MMU开启之后被使用

  

Cache、Write buffer的内容和主存内容保持一致,需要遵循如下两个原则:

  (1)清空DCaches,是的主存数据得到更新

  (2)使无效ICaches,是的CPU取指时重新读取主存

编写程序时,要注意如下几点:

  1、开启MMU前,使无效ICaches、DCaches和Write Buffer

  2、关闭MMU前,清空ICaches、DCaches,将脏数据写入主存中

  3、如果代码右边,使无效ICaches

  4、使用DMA操作可以被Cache的内存时:将内存的数据发送出去时,要清空Cache;将内存的数据读入时,要使无效Cache。

  5、改变页表中的地址映射关系时也要慎重考虑

  6、开启ICache/DCache时,要考虑他们中的内容是否与主存保持一致

  7、对于I/O地址空间,不适用Cache和Write buffer。每次读写操作必须直接访问设备

7.1.6 S3C2410/S3C2440 MMU、TLB、Cache的控制指令

CPU核与协处理器间的传输指令:

7.2 MMU使用实例:地址映射

将开启MMU,并将虚拟地址空间0xA0000000~0xA0100000映射到物理地址空间0x56000000~0x56100000,可以操作地址0xA0000010、0xA0000014达到驱动4个LED的效果

  

第七章 内存管理单元MMU介绍的更多相关文章

  1. JZ2440 裸机驱动 第7章 内存管理单元MMU

    本章目标:     了解虚拟地址和物理地址的关系:     掌握如何通过设置MMU来控制虚拟地址到物理地址的转化:     了解MMU的内存访问权限机制:     了解TLB.Cache.Write ...

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

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

  3. 内存管理单元--MMU

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

  4. 三、内存管理单元---MMU

    3.1 MMU介绍 3.1.1 MMU 特性 内存管理单元(Memory Management Unit)简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.现在的多用户多进 ...

  5. linux内核(四)内存管理单元MMU

    1,基本概念 一个程序运行时没必要全部都同时装入内存,只需要把当前需要运行的部分装入内存即可,这样就使得一个大程序可以在较小的内存中运行,也使得内存中可以同时装入更多的程序并发执行,从用户角度看,该系 ...

  6. 重读金典------高质量C编程指南(林锐)-------第七章 内存管理

    2015/12/10补充: 当我们需要给一个数组返回所赋的值的时候,我们需要传入指针的指针.当我们只需要一个值的时候,传入指针即可,或者引用也可以. 结构大致如下: char* p = (char*) ...

  7. MMU内存管理单元

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

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

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

  9. 内存管理单元(MMU)和协处理器CP15介绍(转)

    内存管理单元(MMU)和协处理器CP15介绍内存管理单元(MMU)介绍嵌入式系统中,存储系统差别很大,可包含多种类型的存储器件,如FLASH,SRAM,SDRAM,ROM等,这些不同类型的存储器件速度 ...

随机推荐

  1. 解决 Gnome3 窗口背景是黑色的问题

    . . . . . Gnome3 在 Ubuntu 上窗口背景颜色经常是黑色的,终于找到了解决办法,其实很简单: >$ gsettings set com.canonical.desktop.i ...

  2. 枚举全排列(包括数列中有重复数)的C语言实现

    据说是用了DFS的思想--然鹅并不知道这是DFS. 主要就是选取一个数放到数组相应位置上,然后递归的排列剩下的数组,将剩下的数组递归排列完了之后再把数放回去,然后这一层递归就返回了-- 有重复数的话遇 ...

  3. PostGIS ShapeFile 导入数据

    系统环境:WIN10 相关软件:PostgresSQL+PostGIS+QGIS 1.添加postGIS数据扩展 (1).打开PostgresSQL 客户端pgAdmin,在需要导入shp数据的数据库 ...

  4. deep learning on object detection

    回归工作一周,忙的头晕,看了两三篇文章,主要在写各种文档和走各种办事流程了-- 这次来写写object detection最近看的三篇文章吧.都不是最近的文章,但是是今年的文章,我也想借此让自己赶快熟 ...

  5. notepad++的CoolFormat代码格式化插件使用

    因为notepad++的NppAStyle插件只支持格式化C.C++.C#.Java这四种编程语言的代码,所以本人推荐使用这个CoolFormat的插件,相比于NPPAStyle,CoolFormat ...

  6. 使用 Date 和 SimpleDateFormat 类表示时间、Calendar类和Math类

    一. Date 和 SimpleDateFormat类表示时间 在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类.这个类最主要的作用就是获取当 ...

  7. js 创建 JSON对象

    //定义变量 var Type = [{}]; Type.push({ label: "labelname", value: "value" });

  8. KinectV1+Ubuntu 14.04安装教程

    前言      个人理解错误的地方还请不吝赐教,转载请标明出处,内容如有改动更新,请看原博:http://www.cnblogs.com/hitcm/      如有任何问题,feel free to ...

  9. Linux 内核通知链随笔【中】

    关于内核通知链不像Netlink那样,既可以用于内核与用户空间的通信,还能用于内核不同子系统之间的通信,通知链只能用于内核不同子系统之间的通信.那么内核通知链到底是怎么工作的?我们如何才能用好通知链? ...

  10. ORACLE RAC 11G 更改 /etc/hosts文件

    来自官方文档:()Can I change the public hostname in my Oracle Database 10g Cluster using Oracle Clusterware ...