zoukankan      html  css  js  c++  java
  • MMU(why)

    在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。

  • 相关阅读:
    多对多关系表的创建方式、forms组件
    SweetAler弹框插件与分页器插件
    Django数据库查询优化与AJAX
    django orm(2)
    Django orm(1)
    Django之视图层与模板层
    Django之路由层
    初识Django之前端后端与数据库的配置
    面试题49
    web框架之初识Django
  • 原文地址:https://www.cnblogs.com/0822vaj/p/4110117.html
Copyright © 2011-2022 走看看