Linux内存管理:交换与页面帧回收机制解析
1. 交换机制概述
交换机制主要有两个目的:一是扩展进程实际可用的地址空间,二是增加动态随机存取存储器(DRAM)的容量,以便加载更多进程。
1.1 交换的益处与弊端
交换机制对用户有诸多益处。例如,当程序的数据结构占用空间超过可用内存时,交换区可使程序正常加载和运行。此外,当用户同时运行多个需要大量内存的大型应用程序时,交换区能让内核启动新应用程序,通过释放部分现有进程的内存来满足需求。
然而,交换机制也存在弊端。模拟内存的性能远不如实际内存,进程访问已交换出去的页面会显著增加执行时间。因此,若对性能要求较高,应尽量避免使用交换机制,增加物理内存仍是解决内存需求增长的最佳方案。不过,在某些情况下,交换机制对整个系统有益。例如,长时间运行的进程通常只访问所获取页面帧的一半,此时将未使用的页面交换出去,将内存用于磁盘缓存,可提高系统整体性能。
1.2 交换机制的发展
早期的Unix系统内核会持续监控可用内存量,当低于某个固定阈值时,会将整个进程的地址空间复制到磁盘。当调度算法选择已交换出去的进程时,再将整个进程从磁盘交换回内存。但现代Unix内核(如Linux)已摒弃这种方法,因为进程交换的成本较高,调度算法需非常复杂,以平衡内存中进程和已交换出去进程的执行。
1.3 Linux的页面级交换
在Linux中,交换操作在页面级别进行,这得益于CPU中的硬件分页单元。每个页表项包含一个存在标志(Present flag),内核可利用该标志向硬件表明属于进程地址空间的页面已被交换出去。此外,Linux还利用页表项的其余位存储已交换页