页命中时,硬件执行操作的步骤:
- 处理器生成虚拟地址,并传送给MMU。
- MMU生成PTE地址,并向高速缓存或主存请求得到PTE。
- 高速缓存或主存向MMU返回PTE。
- MMU利用PTE构造物理地址,并传送给高速缓存或主存。
- 高速缓存或主存返回所请求的数据段给处理器。
缺页时,硬件执行操作的流程:
- 1-3步与上述相同。
- MMU触发缺页异常,把控制流传递给内核的缺页异常处理程序。
- 该程序确定牺牲页,并执行可能的拷出到磁盘操作。
- 程序调入请求的页面,更新内存中的PTE。
- 返回控制流到触发缺页异常的指令并重新执行它。
高速缓存和虚拟内存的结合:
- 大多数系统的高速缓存都是直接使用物理寻址。
- 高速缓存无需处理地址保护的问题,因为地址翻译过程中顺便已经完成了访问权限的检查。
TLB缓存:
TLB,Table Lookaside Buffer,称为翻译后备缓冲器。位于MMU,用于缓存最常用到的PTE。
TLB每一行都保存一个由单个PTE组成的块。TLB给虚拟地址值另一种诠释方式:从低位算起,0~p – 1位,还是VPO。p~p + t – 1位。对应TLB索引。p + t~n – 1,对应TLB标记。TLB标记和TLB索引简单地字符串合并,就是虚拟地址的VPN。TLB索引用于TLB的组选择,TLB标记用于行匹配。
多级页表:
结构:从2级页表进行讨论。第一级页表的每个PTE保存的是映射到虚拟地址空间的一个较大数据片。而一级页表中的地址字段保存的是负责再次映射这个数据片的二级页表的基址。二级页表的每个PTE对应到虚拟空间的每一页。
重点特点:如果片i的每个页面都是未被分配的,则一级页表的对应PTE i就完全为空。如果片I里至少存在一个页面被分配,那么一级页表的对应PTE i就指向一个二级页表的基址。
为什么这种组织结构能节省内存空间:
- 如果一个一级页表的一个PTE为空,则对应的二级页表是根本不存在的,相当于节省了上百上千个PTE的空间。而对一个较大的内存,虚拟内存的大部分空间都会是未分配状态。
- 只有一级页表需要常驻在主存中。二级页表可以按需构造、调入或调出。所以主存只需要存储最常用的二级页表。
k级页表:即第j级页表的每个PTE都指向一个第j + 1级页表的基址。最后一级页表的每个PTE包含某个物理页面的PPN,或是一个磁盘块的地址。