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. I/O流——字符流

    字符流 字节流提供处理任何类型输入/输出操作的足够功能,但不能直接操作Unicode字符,因而需要字符流. 字符流层次结构的顶层是Reader和Writer抽象类. 实际上,字符流的底层就是字节流. ...

  2. linux whoami命令

    whoami显示的是当前"操作用户"的用户名.

  3. python中的告警处理

    在Python中,遇到异常时,一类是直接抛出异常,exception:另一类直接告警warning. 对于后者,通常是打印一句话.前者则或中断程序执行. 考虑到避免由于告警导致后续的不可预知的错误,可 ...

  4. 利用bootstrap写图片轮播

    利用bootstrap写图片轮播 缺点是轮播没有固定样式图片样式会改变外框的大小,所以要再设置 以及左右按钮的style也要从新设置 <div class="carousel slid ...

  5. Mina传输大数组,多路解码,粘包问题的处理

    我的实际情况: 1,传递的业务数据种类很多,这就决定了我们要用多路解码器,MINA的中文手册提供的是DemuxingProtocolCodecFactory; 2,,有的数据长度达到8K,网上有资料说 ...

  6. SQL Server 数据库 'xxx' 正处于转换状态。请稍后再尝试该语句。

    问题是这样的,最近因义务需要,公司更换了数据库服务器.数据库随之切换到新的服务器上. 服务器是 Windows Server 2012系统,数据库是SQL Server 2012 .上面有 多个数据库 ...

  7. java 学习写架构必会几大技术点

    java 学习写架构必会几大技术点 关于学习架构,必须会的几点技术 1. java反射技术 2. xml文件处理 3. properties属性文件处理 4. 线程安全机制 5. annocation ...

  8. 第二章 Mybatis代码生成工具

    1.mybatis-generator作用 1).生成pojo 与 数据库结构对应 2).如果有主键,能匹配主键 3).如果没有主键,可以用其他字段去匹配 4).动态select,update,del ...

  9. 【CodeVS1076】排序

    Description 给出n和n个整数,希望你从小到大给他们排序 Input 第一行一个正整数n 第二行n个用空格隔开的整数 Output 输出仅一行,从小到大输出n个用空格隔开的整数 Sample ...

  10. Android框架之AndroidAnnotations详细讲解

    一: (1)一个activity如过使用AndroidAnnotions注入时, 那么它在 AndroidManifest.xml注册时,应该加入_ 比如: MainActivity的注册时 < ...