(注:这是观看韦东山老师视频之后的总结)
首先百度一下MMU的概念:MMU(Memory Management Unit)即内存管理单元,是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权、多用户多进程操作系统MMU。
再说一下权限管理:
很简单,假设在一个时间轴上会执行内核程序,A程序,B程序,这几段程序的地址空间是互不相同的,A程序无法访问内核,也无法访问B程序,如果强行要访问的话,就会出现崩溃。
再说MMU:1.CPU可以直接访问储存管理器,再通过储存管理器访问硬件,这是直接通过物理地址来访问硬件。
2.令一种方法就是CPU通过虚拟地址——MMU——物理地址——储存管理器——硬件。MMU起到的作用就是将虚拟地址映射成物理地址。
那么如何完成映射,也就是说怎么样将虚拟地址变成物理地址呢?
通过看《嵌入式Linux应用完全开发手册——韦东山》可知道一共有四种映射长度:段(1MB),大页(64KB),小页(4KB),极小页(1KB),在这里我们用的是段,要注意段是以1MB为单位的。本实例使用SDRAM的开始16KB来存放一级页表,所以剩下的内存开始物理地址就为0x30004000。
下面开始建立页表,ARM的总取址空间是4GB,又是以1MB 为单位,那么在这个表格中表项=4GB/MB =4096。
开发板SDAM的物理地址