内存管理单元MMU


1.MMU是什么?
答:MMU是内存管理单元。如果MMU开启的话,它会把CPU发出的虚拟地址转化为物理地址,然后对实际的物理地址进行相应的读写操作。 当然,它还有其他的作用,包括内存权限检查、Cache等。
2.虚拟地址是什么?为什么会出现虚拟地址?
答:虚拟地址是CPU所“看到”的地址。它的所有与地址相关的操作用到的都是虚拟地址。那为什么会出现虚拟地址呢? 我想,可能是这个原因:以前,还没有操作系统的时候,只有一个程序在CPU上跑,它占据了所有的内存空间(和现在的裸板程序差不多), 只要程序所需要的的内存空间小于实际物理内存,那CPU就可以直接用物理地址操纵这个物理内存。但后来,随着多用户、多程序机制的出现, 所有程序所需要的内存空间大于实际的物理内存,这样虚拟内存出现了,理论上, 它使得每个程序可以具有同样大小的内存空间(理论上,最大可以为实际物理内存空间,具体的原理在此就不赘述了)。 虚拟内存对应的就是虚拟地址,每个进程的虚拟地址空间可以是相同的 (你可以在一个C语言中申请一个变量然后把它的地址打印出来,同时运行两次这个程序,你会发现这两个变量的地址是一样的), 然后再通过MMU的作用把每个进程的虚拟地址,转化到实际的物理地址空间中。
3.MMU的地址映射(虚拟地址->物理地址)功能是如何实现的?
答:其实总体上看很简单,一般来说采用的是类似与映射表的一种机制(专业上叫页表)。虚拟地址到物理地址的映射。 简单来说,CPU发出的虚拟地址,MMU通过查询这种映射表把这种虚拟地址转化为物理地址。 在ARM体系中,用的有段(一级页表)、大页、小页、极小页(二级页表)等页表类型。
4.运行地址和加载地址分别是什么意思,有什么区别?
答:在ARM中,当程序被烧写到FLASH中,用的就是加载地址。是烧写到FLASH中的某地址上。 当程序运行时,程序所处的地址就是运行地址,也叫做链接地址。在烧写ARM裸板程序时,如果在链接时,不指定链接地址的话,程序的加载地址就是链接地址。 当指定了某段的链接地址时,运行到此段时,此段必须处在所指定的链接地址上, 否则可能会出现程序崩溃(其实,如果指定段中不涉及到与位置相关的指令应该也没关系,因为与位置相关的指令使用的绝对地址, 而与位置无关的指令使用的是相对地址。绝对地址和链接地址有关系,相对地址和链接没关系)。
————————————————
版权声明:本文为CSDN博主「BLSxiaopanlaile」的编辑整理,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/plm199513100/article/details/76794348

相关阅读:
linux基础
linux怎么学
linux和GNU
GNU Free Documentation License
最受欢迎的linux发行版
initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读