在现在的工作项目中虽然没有使用到MMU功能,但MMU是较复杂的嵌入式操作系统运行的基础。例如Linux就不能够运行在没有MMU的ARM7处理器上,ucLinux就是为了适应没有MMU的处理器而对Linux进行的裁剪和修改。了解MMU基础知识,对理解编译链接,OS多进程,嵌入式系统架构等有很好的帮助。由于该部分内容涉及到MMU硬件、CPU架构、编译链接、OS等知识,学习难度较大。
关键字 MMU、TLB、多任务OS、地址空间、虚拟内存、虚拟地址/物理地址
学习顺序 问题的引出、虚拟地址和物理地址、虚拟内存、OS进程和MMU,MMU运行
引子
早期的计算机PC,或者现在使用8位/16位MCU(单片机)的嵌入式设备,程序是直接运行在物理内存上的(SDRAM或者NOR Flash)。所谓直接运行在物理内存上,是指程序在运行时所访问的地址都是物理地址。例如,程序计数器PC中的值就是预取指令所在的物理内存的地址值。
这种程序直接运行在物理内存上的方式简单,但是并不适应于复杂的系统,尤其是拥有多任务的OS。我们首先看看原来的方式有哪些不足和缺陷。
- 物理内存不足。例如,某个程序运行需要64K的内存,而机器上只有32K的物理内存。
- 程序运行的地址不确定。同一个程序,每次被装载到内存的地址可能不一