×
单片机 > 单片机程序设计 > 详情

ARM学习之内存管理单元(MMU)

发布时间:2020-06-04 发布时间:
|

今天在学习MMU时,学到了不少知识。现总结如下,一是加深印象;二是写出来希望能和大家交流学习。

1.MMU是什么? 
答:MMU是内存管理单元。如果MMU开启的话,它会把CPU发出的虚拟地址转化为物理地址,然后对实际的物理地址进行相应的读写操作。当然,它还有其他的作用,包括内存权限检查、Cache等。

2.虚拟地址是什么?为什么会出现虚拟地址? 
答:虚拟地址是CPU所“看到”的地址。它的所有与地址相关的操作用到的都是虚拟地址。那为什么会出现虚拟地址呢?我想,可能是这个原因:以前,还没有操作系统的时候,只有一个程序在CPU上跑,它占据了所有的内存空间(和现在的裸板程序差不多),只要程序所需要的的内存空间小于实际物理内存,那CPU就可以直接用物理地址操纵这个物理内存。但后来,随着多用户、多程序机制的出现,所有程序所需要的内存空间大于实际的物理内存,这样虚拟内存出现了,理论上,它使得每个程序可以具有同样大小的内存空间(理论上,最大可以为实际物理内存空间,具体的原理在此就不赘述了)。虚拟内存对应的就是虚拟地址,每个进程的虚拟地址空间可以是相同的(你可以在一个C语言中申请一个变量然后把它的地址打印出来,同时运行两次这个程序,你会发现这两个变量的地址是一样的),然后再通过MMU的作用把每个进程的虚拟地址,转化到实际的物理地址空间中。

3.MMU的地址映射(虚拟地址->物理地址)功能是如何实现的? 
答:其实总体上看很简单,一般来说采用的是类似与映射表的一种机制(专业上叫页表)。虚拟地址到物理地址的映射。简单来说,CPU发出的虚拟地址,MMU通过查询这种映射表把这种虚拟地址转化为物理地址。在ARM体系中,用的有段(一级页表)、大页、小页、极小页(二级页表)等页表类型。

4.运行地址和加载地址分别是什么意思,有什么区别? 
答:在ARM中,当程序被烧写到FLASH中,用的就是加载地址。是烧写到FLASH中的某地址上。当程序运行时,程序所处的地址就是运行地址,也叫做链接地址。在烧写ARM裸板程序时,如果在链接时,不指定链接地址的话,程序的加载地址就是链接地址。当指定了某段的链接地址时,运行到此段时,此段必须处在所指定的链接地址上,否则可能会出现程序崩溃(其实,如果指定段中不涉及到与位置相关的指令应该也没关系,因为与位置相关的指令使用的绝对地址,而与位置无关的指令使用的是相对地址。绝对地址和链接地址有关系,相对地址和链接没关系)。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析