在以前使用单片机过程中,没有涉及过MMU,所以知道是内存管理,但是还是不知道这个东东到底有什么作用。接下来一起来学习吧。
它负责虚拟地址到硬件地址的映射,并提供硬件机制的内存访问权限检查。现在多用户进程的操作系统通过MMU 使得各个用户进程都拥有自己独立的地址空间:而内存访问权限检查可以保护每个进程所用的内存不会被其他进程破坏。
MMU主要解决的问题:(1)就是程序大的时候,所要求的内存空间超过内存总量。(2)带操作系统中许多程序需要同时执行,要求的内存空间超过内存总容量。
意思也就是说:鱼,跟熊掌我都想要,反正我不管,你想办法去吧。那我就整个障眼法来达到最终目的,只要最后达到目的就行了。
1.没启动MMU时,用的都是物理地址(实实在在的)
2.启动MMU后,CPU发出虚拟地址—》变化后的虚拟地址-》物理地址(变通了一下)
虽然我们不用理会是怎么转换的,但是现在理解这个过程还是有好处的。分析一下吧。
(1)虚拟地址—》变换的虚拟地址。
之所以加了个变换的虚拟地址是为了方便进程切换,反正就是为了省事,知道就得了。
(2)虚拟地址到物理地址一般用特定的数学公式转换或者用表格存储虚拟地址对应物理地址。
注:表格转换过程
3.MMU另一大组成部分,内存访问检查。
就是决定一块内存是否允许读,写。由CP15寄存器C3,描述符的域(对哪一块),CP15寄存器C1的R/S/A位,AP位(如何检查)联合作用。
4.TLB
提高 利用表格确定物理地址方法的效率。
5.Cache
提高运行速度
实例流程:用虚拟地址点亮LED
关闭看门狗 设置堆栈指针 初始化SDRAM 复制代码到 SDRAM 设置页表
启动MMU 重设堆栈指针 跳到SDRAM 执行主函数
要想完成映射(1)建表格(建立虚拟地址映射物理地址)(2)表格地址告诉MMU(把内存首地址告诉MMU)(3)启动MMU
学完了一遍,意思大概明白了,但是感觉映射这用程序实现起来感觉并不容易,其实这个东西并不难,只是现在对ARM的存储架构不够清晰,再加上对汇编指令应用不够熟练,所以觉得难。、再仔细看看启动文件调用过程吧。。