交换空间
现代操作系统通过交换空间(swap space)实现虚拟内存的扩展能力。当物理内存容量不足以容纳所有活跃进程的页时,操作系统会将低频访问的页换出(page out)到磁盘的专用交换区域,从而释放物理内存资源。这种机制使得程序能够使用远大于实际物理内存的地址空间。
存在位
在地址转换过程中,硬件通过页表项(PTE)中的**存在位(Present Bit)**判断目标页的物理状态:
- 存在位=1:页位于物理内存,可直接通过PFN访问
- 存在位=0:页已被换出到交换空间,触发页错误(Page Fault)
当发生页错误时,操作系统执行以下处理流程:
- 定位磁盘地址:从PTE中提取页的磁盘存储位置
- 发起换入操作:
- 选择待换出的物理页(若内存已满)
- 将目标页从交换空间载入物理内存
- 更新内存结构:
- 修改PTE的存在位为1
- 写入新的物理页帧号(PFN)
- 刷新TLB对应条目
- 恢复执行:重新执行触发页错误的指令
再看 TLB 未命中,现在 TLB 未命中有三种可能:
- 该页存在且有效,TLB 未命中处理程序得到虚拟地址到物理地址映射关系后写入 TLB 即可。
- 该页有效但不在物理内存中,触发页错误并从交换空间中读入物理内存。
- 该页无效,操作系统可能会直接杀死程序。
交换策略
物理内存被认为是虚拟内存的缓存,那么操作系统需要减小缓存未命中,提高缓存命中率。
LRU
需要注意区分 LFU 和 LRU:
- LFU:替换最不经常使用的页面。LFU算法基于页面的访问频率,即页面被访问的次数。它会优先替换那些在历史中被访问次数最少的页面。
- LRU:替换最近最少使用的页面。LRU算法基于页面的访问时间,即页面最后一次被访问的时间。它会优先替换那些在最近一段时间内没有被访问过的页面。