1.MMU的存在意义:
MMU(Memory Manage Unit)的出现是为了解决以下这类问题的一种"硬件算法"或者说策略:16MB的程序运行于4MB内存空间的问题,实现内存的更高效地利用.类比于现实生活中的银行.银行无须要保障每时每刻都准备充足以备所有用户同时取钱--这种情况基本上不会发生.通过挖东墙补西墙,实现资金的更高效利用.从而达到一种"动态平衡",而使人表面上看到的是"静止"的.
1-1.虚拟地址:
虚拟地址是指CPU物理寻址能力的地址范围,通常是PC指针的大小.它是由CPU的位数决定的,比如32位的CPU,它的物理寻址能力为0x0000 0000 ~ 0xffff ffff(2^32 = 4G).
1-2.物理地址:
和虚拟地址相对立,和实际设备相对应.比如256MB的32位的CPU而言,它的有效的物理空间为0x000000000~0x0FFFFFFF(256MB).物理地址有效访问范围为:基地址 ~ 基地址 + 0x0fffffff.
物理地址是虚拟地址的一个子集.
1-3.虚拟地址到物理地址的投射:
我们实际的数据交互都没办法离开实质的物质存在作为载体.比如我们的物理地址范围为[BASE,BASE + 0x0FFFFFFF],如果代码操作在此区间之外的虚拟地址的话,必须要把这个虚拟地址投影到[BASE,BASE + 0x0FFFFFFF]这个范围之内.这工作由MMU完成.比如LINUX是一个虚拟内存的OS,操作的都是虚拟地址,因此必须要转化为物理地址去实现物理设备的操作.因此,它的宏观流程如下:
虚拟地址-->MMU-->物理地址
2.页和页框:
2-1.页(page):
任何东西都存在其最基本单元,而虚拟地址以"页"为其基本单元.对于内核而言,页大小大多数平台架构下都是4KB.
2-2.页框(frame):
页框是实质物理地址空间的基本单元.
虚拟地址和物理地址交互单元是"页<-->页框".就是说,虚拟地址上的"页"要和物理地址的"页框"相对应.因此,它们的大小必须相等.但是虚拟地址上的"页"和物理地址哪个"页框"关联,其过程是动态的,里面有硬件算法,而这种硬件算法的实现,就是由MMU去实现的.MMU一般是CPU里面的一个IP(内置外设).如下图所示:
虚拟地址上的页被投影到物理地址上的哪一个页框是不定的,因此,页必须知道一种"信息"用来获取页是否可以被投影?如果多个页框可以被投影,那么选哪一个页框比较好?因此,页至少包含两部分信息:页期望投影到哪页框上?期望投影到的页框是否有效?对应页的"Frame Index | P".下面给出几个实例描述这一过程: