从形式上来说,地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS),下图展示了MMU如何利用页表来实现这样的映射,CPU中的一个控制寄存器,页表基址寄存器指向当前页表,n位的虚拟地址包含两部分;一个p位的虚拟页面偏移和一个(n-p)位的虚拟页号.MMU利用虚拟地址(VPN)来选择适当的PTE,将页表条目中物理页号和虚拟地址中VPO串联起来,就得到了相应的物理地址,注意,因为物理页面和虚拟页面都是p字节的, 所以物理页面偏移和(VPO)是一样的.
当页面命中时.CPU硬件的执行步骤:
第一步:处理器生成了一个虚拟地址,并把它传给MMU.
第二步:MMU生成PET地址,并从高速缓存/主存中得到它.
第三步:高速缓存/主存向MMU返回PTE.
第四步:MMU构造物理地址,并把它传送高速缓存/主存.
第五步:高速缓存/主存返回所请求的数据字给处理器.
页面命中完全是由硬件来处理的,与之不同的是,处理缺页要求硬件和操作系统内核协同来完成,
第一到第三如上;
第四:PTE中的有效位为0,所以MMU触发了一次异常,传递cpu中的控制到操作系统内核中的缺页异常处理程序.
第五步:缺页处理程序确定出物理存储器中的牺牲页,如果这个页面已经被修改了,则把它换出到磁盘.
第六步:缺页处理程序页面调入新的页面,并更新存储器中的PTE.
第七步:缺页处理程序返回到原来的进程,再次执行导致缺页的指令,CPU将引起缺页的虚拟地址重新发送给MMU,因为虚拟页面现在缓存在物理存储器中,所以会命中.
上面我们提到如果缺页,缺页异常处理程序将确定一个牺牲页,那么这个牺牲页是怎样确定的呢?
当MMU 翻译每一个虚拟地址时,他还会更新另外两个内核缺页处理程序会用到的位,每次访问一个页时,MMU都会设置A位,称为引用位,内核可以用这个引用位来实现它的页替换算法,每次对一个页进行写了之后,MMU都会设置D位,又称脏位,脏位告诉内核在拷贝替换页之前是否必须写回牺牲页,内核可以通过调用一条特殊的内核模式指令来清除引用位或脏位.