深入理解内存交换机制:原理、操作与优化
1. 交换机制概述
交换机制的引入是为未映射页面提供磁盘备份。有三种类型的页面需要交换子系统处理:
- 属于进程匿名内存区域的页面(用户模式栈或堆)
- 属于进程私有内存映射的脏页面
- 属于 IPC 共享内存区域的页面
交换必须对程序透明,内核利用页表条目中的存在标志来表示页面已被交换出去,并利用其余位存储“交换出页面标识符”,以记录页面在磁盘上的位置。当发生页面错误异常时,异常处理程序会检测到页面不在 RAM 中,并调用函数从磁盘交换回缺失的页面。
交换子系统的主要特点如下:
- 在磁盘上设置“交换区”,以存储没有磁盘映像的页面。
- 根据需要分配和释放交换区的“页面槽”,管理交换区空间。
- 提供将页面从 RAM“交换出”到交换区,以及将页面从交换区“交换入”到 RAM 的功能。
- 利用页表条目中的“交换出页面标识符”,跟踪交换区中数据的位置。
交换是页面帧回收的重要特性。若要确保进程获得的所有页面帧都能被页面帧回收算法(PFRA)随意回收,就需要使用交换机制。不过,交换会降低性能,因此在性能至关重要的情况下,应仅将其作为最后手段,增加 RAM 芯片仍是应对计算需求增长的最佳解决方案。
2. 交换区
从内存交换出的页面存储在交换区中,交换区可以是独立的磁盘分区,也可以是包含在更大分区中的文件。最多可定义由MAX_SWAPFILES宏指定数量(通常为 32)的不同交换区。多个交换区允许系统管理员将大量交换空间分布在多个磁盘上,从而使硬件能够并发操作,还能在不重启系统的情况下增加交换