MMU内存管理单元
1简介与相关概念
它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统;
针对各种CPU, MMU是个可选的配件. MMU负责的是虚拟地址 &O1663;&O1664; 物理地址的转换. 提供硬件机制的内存访问授权.
https://www.cnblogs.com/alantu2018/p/9002309.html 博客园
2.与操作系统的关系
操作系统有两种 用MMU的 和 不用MMU的
用MMU的是Windows MacOS Linux Android
不用MMU的是FreeRTOS VxWorks ucOS...
CPU有两种 带MMU的 和 不带MMU的
带MMU的有 Cortex-A系列 ARM9 ARM11系列
不带MMU的有 Cortex-M系列
3.关于MMU与各种地址的理解
转自 https://blog.csdn.net/u013562393/article/details/51817911
目的(功能):对于程序而言,为了将程序分割成一张张的卡片(页面),然后再运行的时候将需要的部分嵌入到物理内存的卡槽(页框)里面。MMU就是为了完成操作系统的这个功能而设计的。MMU可以在被初始化后,形成的一个个虚拟地址对应到物理地址,将一张张的卡片分别映射到相应的物理内存中。举个例子:在linux中的每个进程都维护着自己的页表,在切换进程上下文的时候须要将页表首地址也记录下来( 即记录页表基地址寄存器的值,再将要被切换到的进程的页表基地址还原到这个寄存器中 )。这个时候不同进程的同一个虚拟地址都会对应着不同的页表项,从而对应着不同的物理地址了。
还有另外的一个功能是MPU的功能Memory Protecting Unit 对内存内容进行保护。这里也是通过寄存器设置可达到。
本身机制可以做的事情以及程序员编程时候需要做的事情:
本身机制 :
输入:虚拟地址
输出:物理地址
原理:虚拟地址根据页表基地址寄存器找到页表,通过虚拟地址对应的部分找到条目。。根据本身的不同设置决定是否需要寻找第二页表或者直接得出物理地址。
程序员编程所需要做的事情:
初始化MMU,设置MMU参数:比较主要的是要设置好页表基地址。页(段:1M 或16M,页:4K 2K 16K )大小。段通常一级页表即可完成地址转换,页地址的转换则需要二级页表。
建立页表:将需要映射的内存都在相应的内存位置设置好页表
开启MMU:此时就可以开启MMU,以后在对CPU发送的地址都会通过MMU转换,得到对应的物理地址。
____________________________________________________________________________________
接下来是各种地址。
虚拟地址:未经过MMU的地址,范围应该跟CPU地址线数目相关。32位CPU应该寻址范围为4G
物理地址:真正对应实际内存的地址,如2440的内存地址从0x30000000开始 若为256M 则0x30800000为范围结束的地址
链接地址:程序链接的地址,即程序运行时候应该存在的位置。除了b bl,等一些进行“相对”处理的操作之外,用到绝对地址操作的时候,如果程序在内存运行的地址不对应于链接地址就会发生不可预知的错误。
装载地址:一直都误解了装载地址,现在的理解,装载地址应该是代码块在二进制程序代码文件中的位置,如链接脚本中AT(4096)就是在文件4K处开始放置这个segment