随着计算机技术的发展,应用程序的规模也随之越来越大,这也就造成了应用程序太大以至于内存容纳不下程序,因此引进了所谓的虚拟内存。对于虚拟内存,其基本思想就是程序、数据、堆栈的总大小可以超过物理内存的大小,操作系统把当前使用的程序段存放在内存中,而未被使用的部分保存在磁盘中。为了有效地对内存进行管理,ARM应用了内存管理单元MMU,它将虚拟地址映射为物理地址,完成虚拟地址到物理地址的重定位。
ARM存储管理器(MMU)将物理地址和虚拟地址都划分为一块一块的小空间,将虚拟地址的这种划分称为页,物理地址的划分称为页框,页和页框的大小必须相同;CPU访问的地址空间为虚拟地址空间,而存储器对应的是物理地址空间。当CPU去访问一个虚拟地址空间的时候,MMU会找到该虚拟地址空间对应的所属页,然后再根据预先设置好的对应规则去寻找相应的物理地址所属的页,最后在物理页的基础上加上偏移量就完成了虚拟地址向物理地址的映射。
如下图所示,当一条指令将0号地址的值传递进寄存器时,其执行过程如下:
首先,虚拟地址0将被送往MMU,MMU看到该虚拟地址落在页0范围(0~4095)内,从上图看出页0所对应的页框为2(页框2的范围为8192~12287),因此MMU将该虚拟地址转换为物理地址8192,并把地址8192送到地址总线上,从而完成了把0~4096的虚拟地址映射到8192~12287的物理地址。