配有TLB的系统中页面置换策略的工作原理是什么?
配有TLB的系统页面置换相关问题解答
页面置换的执行流程
页面置换的决策和执行主体是操作系统内核,TLB只是页表项(PTE)的硬件高速缓存,不参与置换决策,也不会直接触发内存页的逐出,完整执行逻辑如下:
- 当物理内存不足时,内核会基于当前使用的置换算法(如时钟算法、LRU近似算法等)扫描所有物理页对应的PTE,通过引用位、修改位等元数据筛选出适合回收的页面。
- 确定要回收某页后,内核首先修改对应PTE的有效位,标记该页已经不在物理内存中。
- 接下来内核会执行TLB击落(TLB Shootdown)操作:向所有CPU核心发送IPI(处理器间中断),要求所有核心清除自己TLB中该PTE对应的缓存条目。如果TLB支持ASID(地址空间标识符),只需要清除对应进程ASID下的条目即可,不需要全局刷新。
- 等到所有核心的TLB都完成刷新后,内核才会处理该物理页的后续操作:如果是已修改的脏页,先写回对应的后端存储(磁盘、交换分区等),最后将该物理页标记为空闲,纳入内存分配池供后续使用。
TLB与页表的一致性保障
不存在直接替换TLB条目就逐出内存的情况:
- TLB的条目替换是硬件自动执行的,当TLB满了又有新的PTE需要缓存时,硬件会按照自己的替换策略(一般是LRU)淘汰旧的TLB条目,但这个操作完全不会影响对应的物理页和页表项,只是删除了缓存副本而已。
- TLB和页表的一致性完全由内核主动维护:所有修改PTE的操作之后,内核必须主动刷新对应TLB条目,避免后续访问命中过时的缓存导致访存错误。
TLB缓存的PTE是否会被特殊保留
不会因为PTE缓存在TLB中就被特殊避免置换:
- 绝大多数CPU架构的设计是:当TLB命中、页面被访问时,硬件会自动将对应PTE的引用位置为1,所以只要该页近期被访问过,置换算法扫描到它时引用位不会是0,自然会被判定为活跃页,不会被优先回收。
- 如果真的出现某个在TLB中的PTE引用位为0的情况,说明该页已经很久没被访问过了,内核还是会按照正常流程置换:先清理TLB对应条目,再回收物理页,没有专门针对TLB缓存PTE的保留规则。
内容的提问来源于stack exchange,提问作者Zheping Yin
相关产品推荐
相关产品推荐

