欢迎来到天天文库
浏览记录
ID:33751829
大小:769.94 KB
页数:25页
时间:2019-02-28
《mmu与cache详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ARM920T的MMU与Cache目录虚拟地址和物理地址的概念虚拟内存管理ARM920T的CP15协处理器MMUCache操作MMU和Cache的内核启动代码参考资料索引虚拟地址和物理地址的概念CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(MemoryManagementUnit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(PhysicalAddress,以下简称
2、PA),如下图所示。图1.物理地址示意图如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(VirtualAddress,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址,如下图所示[1]。图2.虚拟地址示意图MMU将虚拟地址映射到物理地址是以页(Page)为单位的,对于32位CPU通常一页为4K。例如,虚拟地址0xb7001000~0xb7001fff是一个页,可能被MMU映射到物理地址0x2000~0x2fff,物理内存中的一个物理页面也称
3、为一个页框(PageFrame)。虚拟内存管理现代操作系统充分利用MMU提供的VA到PA的映射机制来做内存管理,以下称为虚拟内存管理(VirtualMemoryManagement)。首先看下面的例子:例1.进程的地址空间这是bash进程的虚拟地址空间,32位CPU的虚拟地址空间是4GB,也就是0x00000000-0xffffffff,该进程占用的地址范围近似为0x00000000-0xbfffffff,地址范围0xc0000000-0xffffffff由内核占用,用户进程不允许访问。在这个bash进程的地址空间中,从0x08048000开始的6
4、68K的权限为r-x--,表示代码段,从0x080ef000开始的24K的权限是rw---,表示数据段,从0x080f5000开始的2056K的权限也是rw---,但是没有对应任何磁盘文件,而是用[anon](anonymous,匿名)来表示,这是堆所占的空间,从0xb7c6d000开始是共享库和资源文件的映射空间,每个共享库也分为代码段和数据段,用不同的权限表示,可以看到,从堆空间到下面的共享库映射空间之间有很大的地址空洞,最末从0xbfad4000开始的84K是栈空间。为什么需要虚拟内存管理呢?可以从以下几个方面来理解。第一,让每个进程有独立的
5、地址空间是引入虚拟内存管理的最主要目的。所谓独立的地址空间是指,不同进程中的同一个VA被MMU映射到不同的PA,并且在某一个进程中访问任何地址都不可能访问到另外一个进程的数据,这样使得任何一个进程由于程序BUG或恶意代码所导致的非法内存访问都不会意外改写其它进程的数据,不会影响其它进程的运行,从而保证了整个系统的稳定性。另一方面,每个进程都认为自己独占4GB的地址空间,编写程序会比较方便,不必为每个进程分配一个地址范围,而是每个进程都可以使用一个完整的地址空间中的任何地址。我们继续用上面的例子来理解,再打开一个shell窗口,用pmap命令看一下这
6、个新的bash进程的地址空间,可以发现和刚才的地址空间布局差不多:该进程也占用了0x00000000-0xbfffffff的地址空间,代码段也是从0x08048000开始的668K,数据段也是从0x080ef000开始的24K,共享库的内存布局也差不多。这个进程和刚才的例子是同一个系统中同时运行着的两个进程,它们都认为自己占有0x00000000-0xbfffffff的地址空间,并且它们的数据段的地址范围是重合的,但是两个进程各自干各自的事情,显然数据段中的数据是不同的,正是因为不同进程中的同一个VA被映射到了不同的PA,所以两个进程的数据段其实是
7、在不同的物理地址上,如下图所示。图4.进程地址空间是独立的从图中还可以看到,两个进程都是bash进程,代码段是一样的,并且代码段是只读的,不会被改写,因此操作系统会安排两个进程的代码段共享相同的物理内存。由于每个进程都有自己的一套VA到PA的映射表,整个地址空间中的任何VA都在每个进程自己的映射表中查找相应的物理地址,因此不可能访问到其它进程的地址,也就没有可能意外改写其它进程的数据。第二,引入VA到PA的映射也会给分配和释放内存带来方便,物理上不连续的空间可以映射为逻辑上连续的虚拟地址空间。比如要malloc一块很大的内存空间,而物理内存虽然有足
8、够的空闲内存,却没有足够大的连续空闲内存,这时就可以分配多个不连续的物理页面,而映射为连续的虚拟地址范围。如下图所示。图5
此文档下载收益归作者所有