在ARM中,MMU几个主要作用:

1. I/D Cache 管理      -> 大幅提高代码运行效率.
2. PA/VA 重映射        -> 实现多进程内存空间映射.
3. 内存权限/读写保护   -> 保护某段内存空间数据,使不能非法访问.

----------------------------------

MMU和虚拟内存????

---------------------------------

- 自己写的裸奔程序否用mmu可自行决定。高兴就用,否则就关。
- 对arm,运行在外部dram上的代码而言,开启mmu后,使能dcache,能令数据io性能显著提升。
  由于icache可以不依赖mmu而使能,故mmu是否开启对指令部分而言,益处不多。
- 开mmu,经过配置之后,主要程序代码和裸奔时可以一致。
  最大的好处是内存访问不合规格会直接有异常,比如访问0地址,访问非法地址,etc。
- 开mmu,对于使能dma操作的情况而言,需要额外处理,否则会有内存一致性问题。
- 如果要动态加载程序,且程序不是position independent的,那么需要mmu进行地址映射。如果是pi的,则可以不用。
- 因为arm有tlb,所以转换表miss的开销不是太大,而且可以考虑转换表放内部内存,如果有地方的话。
总之,开与否mmu具体情况具体分析。应用中遇到的大部分问题,......

------------------------------------------

1 Cache对高延迟外部总线上的存储器是有价值的,同时也提出程序数据访问局部性的要求。否则,开了Cache不一定获得更大的好处。
  反例,如内部全速RAM,不一定值得开Cache。

2 开MMU不意味着IO性能的提升。
  只是在ARMv4前后的架构下(如ARM920T/ARM926EJ-S),DCache的开启要求MMU必须开启,这是内核设定的要求;而ICache的开启和MMU开启否无关。
  本来MMU和Cache就是松耦合的东西。一个管缓冲,一个管映射和权限。

3 地址映射主要是为了多进程,不同特权级,这些方面准备的,我认为。
  Page Fault可以用于交换那是副产品了。

------------------------------------------------

历史原因是:
应用软件不停的膨胀,硬件(主要指内存容量)根不上软件膨胀的速度。
早期intel 8086是采用基址寄存器和界限寄存器来管理不同软件的地址映射,
后来这种方法还是无法管理大量的应用软件,于是从386开始就有了MMU。

至于你的程序用不用MMU,你若裸奔就完全不用,你若跑简单的RTOS也不必用。
除非你跑windows,linux这样的系统才有必要开MMU。

MMU(why)的更多相关文章

  1. MMU工作原理

    MMU的工作原理就是把虚拟地址转换成物理地址. 虚拟地址:由编译器和连接器在定位程序时分配. 物理地址:用来访问实际的主存硬件模块. 使用虚拟存储器的系统都使用一种称为分页(paging).虚拟地址空 ...

  2. cache与MMU与总线仲裁

    为了以合理的价格,设计容量和速度满足计算机系统的需求,计算机体系结构设计者设计出了存储器的层次结构. "Cache-主存"和"主存-辅存"是最常见的两种层次结构 ...

  3. MMU内存管理单元相关知识点总结

    1.MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件 ...

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

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

  5. 为什么没有MMU的处理器无法安装操作系统?

    所谓的处理器就是计算机的核心运算硬件,现在使用windows操作系统的用户使用的机器之中的处理器多数都是X86内核,而实际之上很多时候我们用户都是会在心目之中把一个处理器和其运行的特定操作系统挂钩,之 ...

  6. ok6410,mmu,内存管理

    MMU 一.MMU学习 MMU其实就是一个页表.将虚拟地址通过查表的方式,对应到物理地址去他由一个或一组芯片组成,一般存在与协处理器中. 1.将虚拟地址转化为物理地址 2.访问权限管理 1.1得出mm ...

  7. 关闭缓存和mmu(转)

    当设置完时钟分频以后,uboot就会执行cpu_init_crit汇编函数,这个函数的主要作用就是关闭缓存和mmu,然后调用lowlevel_init函数进行系统总线的初始化. 为什么启动的时候,需要 ...

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

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

  9. Linux学习 : 裸板调试 之 使用MMU

    MMU(Memory Management Unit,内存管理单元),操作系统通过使用处理器的MMU功能实现以下:1)虚拟内存.有了虚拟内存,可以在处理器上运行比实际物理内存大的应用程序.为了使用虚拟 ...

  10. MMU

    1.MMU功能 将虚拟地址转化为物理地址:访问权限管理. 2.地址转化 2.1 总体分析 2.2 一级转换格式 位解释:(段设置) B:表示是否使能write buffer: C:  表示是否开启ca ...

随机推荐

  1. 开扒本地存储—localStorage

    .localStorage是什么狂点查看demo localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期 的. 2.localStorage有哪些优点 1). 存储空间 ...

  2. [转载]Unity3D 访问Access数据库

    在开始这个小教程之前呢,其实在网上你已经可以找到相关的资料了,但是我还是要把我自己做练习的一点东西分享出来.写这个教程的主要原因呢,是一个朋友在u3d的官网论坛里,找到了这个demo,但是在他使用的过 ...

  3. Ehcache详细解读(转载)

    Ehcache 是现在最流行的纯Java开源缓存框架,配置简单.结构清晰.功能强大,最初知道它,是从Hibernate的缓存开始的.网上中文的EhCache材料以简单介绍和配置方法居多,如果你有这方面 ...

  4. fill 函数

    fill函数的作用是:将一个区间的元素都赋予val值.函数参数:fill(first,last,val);//first为容器的首迭代器,last为容器的末迭代器,val为将要替换的值. 例题:给你n ...

  5. 谈谈怎么实现Oracle数据库分区表

    谈谈怎么实现Oracle数据库分区表 数据库的读写分离 SQLSERVER性能监控级别步骤 Oracle索引问题诊断与优化(1)

  6. 关于Spark中RDD的设计的一些分析

    RDD, Resilient Distributed Dataset,弹性分布式数据集, 是Spark的核心概念. 对于RDD的原理性的知识,可以参阅Resilient Distributed Dat ...

  7. NIO的Selector

    参考自 Java NIO系列教程(六) Selector Java-NIO-Selector java.nio.channels.Selector NIO新功能Top 10(下) 出发点: 如何管理多 ...

  8. 使用Data Annotations进行手动数据验证

    Data Annotations是在Asp.Net中用于表单验证的 它通过Attribute直接标记字段的有效性,简单且直观.在非Asp.Net程序中(如控制台程序),我们也可以使用Data Anno ...

  9. Qt:QT右键菜单

    Qt QTableView 上加右键弹出菜单, 并复制选中的单元格内容到剪贴板中 http://wenku.baidu.com/view/c51cfb63cf84b9d528ea7a29.html h ...

  10. POJ2533——Longest Ordered Subsequence(简单的DP)

    Longest Ordered Subsequence DescriptionA numeric sequence of ai is ordered if a1 < a2 < ... &l ...