本篇笔记承接《Linux 进程内存模型与虚拟内存、物理内存页映射》,重点解释交换内存(Swap)的定义、作用、工作原理,以及 Windows、Linux、macOS 三大操作系统的交换内存实现机制。
一、什么是交换内存(Swap)
1.1 交换内存的定义
交换内存(Swap)是操作系统使用磁盘或其他后备存储空间,保存部分暂时不需要常驻物理内存的页面内容的一种内存管理机制。
当物理内存(RAM)出现压力时,操作系统可以把部分符合条件的内存页面写入交换空间,从而释放物理页框,供其他页面使用。
当程序再次访问被换出的页面时,操作系统会将其恢复到物理内存,然后继续执行程序。
这一过程称为:
- Swap Out:页面换出。
- Swap In:页面换入。
- Swapping:交换。
- Paging:分页。
- Page Reclaim:页面回收。
现代操作系统通常以页面为单位进行换入换出,而不是简单地把整个进程一次性写入磁盘。
基本工作模型
CPU
|
v
Virtual Address
|
v
MMU / Page Table
|
v
Physical Memory
(RAM)
|
+-------+-------+
| |
v v
活跃页面 不活跃页面
|
v
Swap Out
|
v
Swap Storage
(SSD)
|
| 再次访问
v
Swap In
|
v
Physical RAM
需要注意:
Swap 不属于物理 RAM,也不是一块真正的内存芯片。
它通常由磁盘上的交换文件或交换分区提供。
部分系统也支持将压缩后的页面保存在 RAM 中,以减少实际磁盘交换。
1.2 Swap 与虚拟内存的区别
虚拟内存(Virtual Memory)是一套地址空间抽象和管理机制。
它主要负责:
- 为进程提供独立的虚拟地址空间。
- 通过页表实现虚拟地址到物理地址的映射。
- 进行访问权限控制。
- 支持按需分页。
- 支持共享页面和写时复制。
- 支持内存映射文件。
- 在需要时使用交换空间。
Swap 只是虚拟内存管理体系中的一种机制。
Virtual Memory
|
+------------+------------+
| | |
v v v
Page Table Demand Memory
Paging Mapping
| | |
+------------+------------+
|
v
Page Reclaim
|
+--------+--------+
| |
v v
File-backed Anonymous
Pages Pages
| |
v v
文件回收 Swap / 压缩
结论:虚拟内存不等于 Swap。即使没有配置 Swap,现代操作系统仍然可以正常使用虚拟内存。
二、交换内存有什么作用
2.1 缓解物理内存压力
假设计算机具有:
Physical RAM:8 GiB
Swap:8 GiB
当前运行:
浏览器:3 GiB
开发工具:2 GiB
数据库:2 GiB
其他程序及系统:若干
当物理内存压力增大时,操作系统可以将部分不活跃页面换出。
例如:
换出前:
RAM
+--------------------+
| Browser |
+--------------------+
| IDE |
+--------------------+
| Database |
+--------------------+
| System |
+--------------------+
换出后:
RAM Swap
+----------------+ +----------------+
| 活跃浏览器页面 | | 不活跃页面 A |
+----------------+ +----------------+
| 活跃 IDE 页面 | | 不活跃页面 B |
+----------------+ +----------------+
| Database |
+----------------+
| System |
+----------------+
操作系统由此可以将有限 RAM 优先用于当前活跃的工作负载。
但不能简单认为:
8 GiB RAM + 8 GiB Swap = 16 GiB RAM
因为 Swap 的速度通常远低于 RAM,而且并非所有内存都能换出。
2.2 减少程序因内存不足而终止的概率
没有 Swap 时,如果系统无法回收足够内存,可能出现内存分配失败。
在 Linux 中,严重内存不足时可能触发 OOM(Out Of Memory)处理机制。
内存申请
|
v
可用 RAM 不足
|
v
尝试回收页面
|
+-- 回收成功 --> 继续运行
|
+-- 回收失败
|
v
分配可能失败
|
v
可能触发 OOM
有 Swap 时,系统多了一种回收匿名页面的方式。
但 Swap 并不能保证永远不发生 OOM。
例如:
- RAM 与 Swap 均已耗尽。
- 系统存在不可回收页面。
- 内存分配受到资源限制。
- 内存碎片导致特定分配失败。
- Linux 内存 overcommit 策略或 cgroup 限制触发异常。
2.3 提高物理内存利用率
操作系统会根据页面活跃程度决定哪些页面适合留在 RAM 中。
例如一个程序分配了 1 GiB 内存,但只有其中 200 MiB 被频繁访问。
剩余页面如果长期不活跃,可能成为换出候选。
程序虚拟内存:1 GiB
|
+-- 活跃页面:200 MiB
|
+-- 不活跃页面:800 MiB
这些数字只是示例。
系统可以根据内存压力、访问历史、页面属性等因素,决定是否回收或换出其中部分页面。
Swap 的目的不是让所有内存尽可能写入磁盘,而是让物理 RAM 优先保存更有价值的页面。
2.4 为文件缓存腾出 RAM
Linux、Windows 和 macOS 都会利用空闲物理内存缓存文件数据。
假设:
RAM
|
+-- 程序匿名页面
|
+-- 文件缓存
|
+-- 内核页面
如果某些匿名页面长期不活跃,操作系统可以考虑将其换出,从而保留更多文件缓存。
这样可能减少后续文件读取时的磁盘 I/O。
但是是否换出,需要综合判断页面访问频率、存储性能、回收代价等因素。
2.5 支持休眠(Hibernate)
某些操作系统可以把运行状态保存到持久存储,之后关闭电源,再恢复原来的工作状态。
运行中的系统
|
v
保存休眠映像
|
v
关闭电源
|
v
重新启动
|
v
读取休眠映像
|
v
恢复系统状态
需要区分:
- Windows 可以使用专门的 hiberfil.sys 保存休眠映像。
- Linux 可以配置使用 Swap 作为休眠映像的保存位置。
- macOS 使用与自身电源管理体系集成的睡眠和休眠机制。
休眠与普通页面交换不是同一个过程,不能认为所有系统都直接把休眠数据写入 Swap。
三、Swap 的工作原理
3.1 交换的基本单位是页面
假设系统采用:
Page Size = 4 KiB
那么:
1 MiB = 256 Pages
1 GiB = 262144 Pages
现代操作系统通常围绕内存页面管理换入换出。
例如:
Virtual Page A
|
v
Physical Frame 20
当该页面被换出:
Virtual Page A
|
v
Swap Entry
|
v
Swap Storage
原物理页框可以被释放,用于其他用途。
3.2 Swap Out:页面换出
假设:
char *p = malloc(4096);
p[0] = 100;
程序首次写入后,相关虚拟页面可能已经映射到一个物理页框。
Virtual Address
|
v
Page Table
|
v
Physical Frame 10
|
v
Data = 100
当该页面长期不活跃且系统需要回收内存时,可能发生:
Linux Memory Reclaim
|
v
选择适合换出的页面
|
v
为页面安排 Swap 位置
|
v
写入 Swap
|
v
更新页面状态和映射信息
|
v
回收 Physical Frame 10
在 Linux 中,换出后相关页表项可以使用非 present 状态及编码信息表示交换条目。
不同操作系统的页表软件编码方式不同。
3.3 Swap In:页面换入
当程序再次访问原来的虚拟地址:
CPU 访问虚拟地址
|
v
MMU 检查地址转换
|
v
发现页面不在 RAM 中
|
v
Page Fault
|
v
进入操作系统内核
|
v
定位交换页面
|
v
获取可用物理页框
|
v
从 Swap 读取页面
|
v
更新页表
|
v
重新执行故障指令
程序通常不需要主动修改自己的指针。
例如:
int *p = malloc(sizeof(int));
*p = 100;
即使页面经历换出和换入,p 所保存的虚拟地址通常不需要变化。
这是虚拟内存的重要优势。
3.4 为什么 Swap 比 RAM 慢
RAM 的访问延迟通常处于纳秒量级。
SSD 的存储访问延迟通常明显高于 RAM,并且还存在:
- 存储设备排队。
- 页面读写。
- 内核调度。
- 缺页处理。
- I/O 等待。
典型性能关系:
CPU Register
|
v
CPU Cache
|
v
Physical RAM
|
v
NVMe SSD
|
v
SATA SSD
|
v
HDD
这是概念性层次,并非所有设备在所有工作负载下都严格按照该顺序表现。
当程序频繁访问已经换出的页面时,会产生大量 Page Fault 和存储 I/O,性能可能急剧下降。
3.5 什么是 Thrashing
Thrashing 通常称为页面抖动或颠簸。
假设系统 RAM 很小,但运行程序的活跃工作集很大。
程序需要页面 A
|
v
Swap In A
|
v
RAM 空间不足
|
v
Swap Out B
|
v
程序又需要页面 B
|
v
Swap In B
|
v
再次回收其他页面
|
v
不断重复
结果:
- 磁盘 I/O 持续繁忙。
- CPU 可能大量等待内存。
- 程序响应速度极慢。
- 系统出现明显卡顿。
因此:
Swap 是缓解内存压力的工具,不是可以无限替代 RAM 的扩容手段。
四、Linux 的交换内存机制
4.1 Linux Swap 的主要形式
Linux 主要支持两种传统 Swap 形式。
Swap Partition
交换分区。
SSD
+----------------------+
| EFI Partition |
+----------------------+
| Linux Root Partition |
+----------------------+
| Swap Partition |
+----------------------+
特点:
- 使用独立分区。
- 不依赖普通文件系统中的交换文件。
- 容量调整通常需要修改分区布局。
Swap File
交换文件。
例如:
/swapfile
特点:
- 不需要额外划分磁盘分区。
- 通常更容易创建和调整容量。
- 需要文件系统及内核支持相应交换文件机制。
在受支持的配置下,Swap File 和 Swap Partition 都可以提供有效的交换空间。
4.2 查看 Linux Swap
查看交换空间:
swapon --show
查看内存和交换空间:
free -h
查看交换信息:
cat /proc/swaps
查看内核统计:
cat /proc/meminfo
重点字段:
SwapTotal
SwapFree
SwapCached
4.3 创建 Linux Swap File
以下以常见 Linux 文件系统环境为例。
创建一个 4 GiB Swap File:
sudo fallocate -l 4G /swapfile
限制文件权限:
sudo chmod 600 /swapfile
初始化:
sudo mkswap /swapfile
启用:
sudo swapon /swapfile
验证:
swapon --show
free -h
注意:
- Btrfs 等文件系统对 Swap File 有额外要求。
- 某些文件系统不支持普通方式创建的 Swap File。
- 含空洞、写时复制或不稳定块映射的文件可能无法直接使用。
- 具体操作前应确认当前文件系统的支持情况。
4.4 开机自动启用 Swap
编辑:
sudo nano /etc/fstab
添加:
/swapfile none swap defaults 0 0
之后系统通常会在启动时自动启用交换文件。
4.5 关闭 Linux Swap
临时关闭:
sudo swapoff /swapfile
关闭全部交换空间:
sudo swapoff -a
注意:关闭 Swap 可能需要把已经换出的页面重新放回 RAM。
如果内存不足,操作可能失败,甚至导致严重内存压力。
4.6 vm.swappiness
Linux 提供:
vm.swappiness
用于影响内核在内存回收时,对交换匿名页面和回收文件页面之间的相对倾向。
查看:
cat /proc/sys/vm/swappiness
临时修改:
sudo sysctl vm.swappiness=60
持久化可以在:
/etc/sysctl.d/
中创建配置文件。
例如:
vm.swappiness=60
注意:
- swappiness 不是“RAM 使用到 60% 才开始 Swap”。
- 它不是简单的内存占用百分比阈值。
- 现代 Linux 通常支持 0~200 的取值范围。
- 具体行为还与内核版本、页面回收算法和存储成本有关。
4.7 Linux zswap
zswap 是 Linux 的压缩交换缓存机制。
基本过程:
匿名页面
|
v
准备 Swap Out
|
v
压缩页面
|
v
RAM 中的 zswap Pool
|
+-- 命中并换入
|
+-- 必要时写入后端 Swap
特点:
- 压缩部分待换出的页面。
- 可以减少磁盘交换 I/O。
- 使用 CPU 时间换取 RAM 和存储访问成本。
- 通常依赖实际的后端 Swap。
zswap 本身不等于普通 Swap File。
4.8 Linux zram
zram 可以创建基于 RAM 的压缩块设备。
常见用途之一是将其格式化为交换设备。
匿名页面
|
v
压缩
|
v
zram Device
|
v
压缩数据仍保存在 RAM 中
与传统磁盘 Swap 不同,zram 的交换数据通常保存在压缩后的内存中。
优点:
- 不需要为每次换入换出访问 SSD。
- 可以提高有限 RAM 的有效利用率。
- 适合部分低内存设备或特定工作负载。
缺点:
- 消耗 CPU 资源。
- 压缩数据仍占用物理 RAM。
- 压缩效果取决于数据内容。
zswap 与 zram 区别
| 项目 | zswap | zram |
|---|---|---|
| 主要形式 | 压缩交换缓存 | 压缩 RAM 块设备 |
| 数据存放 | RAM 压缩池 | RAM 压缩块设备 |
| 是否需要磁盘 Swap | 通常需要后端 Swap | 不一定 |
| 主要目标 | 减少后端交换 I/O | 提高 RAM 有效容量 |
五、Windows 的交换内存机制
5.1 Windows Page File
Windows 使用分页文件(Paging File)作为部分虚拟内存页面的后备存储。
典型文件:
C:\pagefile.sys
它通常是隐藏的受保护系统文件。
Windows 的相关机制包括:
- Virtual Memory。
- Page File。
- Working Set。
- Commit Charge。
- Commit Limit。
- Memory Compression。
5.2 Windows Page File 的作用
Windows 中的进程也使用虚拟地址空间。
Windows Process
|
v
Virtual Address Space
|
v
Memory Manager
|
v
Page Tables
|
v
Physical RAM
|
v
Page File
分页文件可以为部分私有已提交内存提供后备存储。
当页面不需要继续常驻 RAM 时,系统可以回收其物理页框,并在必要时使用分页文件保存页面内容。
5.3 Windows Commit Charge
Windows 内存管理中有一个非常重要的概念:
Commit。
可以理解为系统为已提交虚拟内存承担的后备存储承诺。
常见统计:
- Committed:当前提交量。
- Commit Limit:提交上限。
在常见配置下,系统 Commit Limit 大致受到物理 RAM 和分页文件容量等因素影响。
例如:
RAM:16 GiB
Page File:8 GiB
Commit Limit 可能接近两者之和,但还会受到系统保留和其他因素影响。
Commit Limit 不等于当前可用物理 RAM,也不等于当前实际已经写入分页文件的数据量。
即使 RAM 还有剩余,如果提交量达到限制,新的提交请求也可能失败。
5.4 Windows Working Set
Working Set 是当前驻留在物理内存中的进程页面集合。
Process Virtual Pages
|
+-- Resident Pages
| |
| v
| Working Set
|
+-- Nonresident Pages
|
v
可能位于 Page File
或其他后备存储
非驻留页面不一定都在 pagefile.sys 中。
例如文件映射页面可能由原始文件提供后备数据。
5.5 Windows Memory Compression
现代 Windows 还支持内存压缩。
当系统存在内存压力时,可以将部分页面压缩并保存在 RAM 中,以减少分页文件 I/O。
不活跃页面
|
v
Memory Compression
|
v
压缩后保存在 RAM
|
v
必要时再使用 Page File
内存压缩和分页文件是相互配合的机制。
5.6 Windows 休眠文件
Windows 常见:
C:\hiberfil.sys
该文件用于休眠及相关电源管理功能。
它与:
C:\pagefile.sys
不是同一个文件。
区别:
| 文件 | 作用 |
|---|---|
| pagefile.sys | 内存分页后备存储 |
| hiberfil.sys | 休眠映像及相关电源管理 |
| swapfile.sys | 某些 Windows 版本中的辅助交换文件 |
swapfile.sys 的具体用途取决于 Windows 版本及系统实现,不能简单把它视为唯一的 Windows Swap。
5.7 Windows 查看和配置分页文件
查看:
任务管理器
|
v
性能
|
v
内存
|
v
已提交
配置入口:
系统属性
|
v
高级
|
v
性能设置
|
v
高级
|
v
虚拟内存
Windows 通常支持自动管理分页文件大小。
对于普通用户,通常建议保留系统管理,除非有明确的容量、故障排查或性能需求。
六、macOS 的交换内存机制
6.1 macOS 的虚拟内存管理
macOS 基于 XNU 内核。
其内存管理系统涉及 Mach VM 等组件。
macOS 同样支持:
- 虚拟地址空间。
- 页面映射。
- 缺页处理。
- 内存压缩。
- Swap。
- 文件映射。
- 写时复制。
macOS Process
|
v
Virtual Memory
|
v
Mach VM / XNU
|
v
Page Tables
|
v
Physical RAM
|
+-- Memory Compression
|
+-- Swap Storage
6.2 macOS Swap 文件
macOS 通常由系统自动管理交换文件。
常见位置:
/private/var/vm/
可能存在:
swapfile0
swapfile1
swapfile2
...
实际文件数量、命名和行为可能随 macOS 版本及内存压力变化。
不应将某个固定文件数量或固定大小视为所有 macOS 的统一规则。
6.3 macOS Memory Compression
macOS 的内存压缩机制非常重要。
当物理 RAM 出现压力时,系统可能先压缩部分不活跃页面。
RAM
|
+-- 活跃页面
|
+-- 不活跃页面
|
v
压缩页面
|
v
压缩后留在 RAM
|
v
进一步内存压力
|
v
Swap
这样可以减少对 SSD 的访问。
需要注意:这只是简化的决策模型,不意味着所有页面都必须先经过压缩才能换出。
6.4 macOS Memory Pressure
macOS 提供 Memory Pressure(内存压力)指标。
可以通过:
Activity Monitor
|
v
Memory
|
v
Memory Pressure
查看系统内存状态。
常见颜色含义:
- 绿色:内存压力较低。
- 黄色:系统内存资源开始紧张。
- 红色:内存压力较高。
Memory Pressure 综合考虑多种因素,不是简单的 RAM 使用率。
6.5 macOS 查看 Swap
打开终端:
sysctl vm.swapusage
可能输出:
vm.swapusage: total = ... used = ... free = ...
查看虚拟内存统计:
vm_stat
查看物理内存:
sysctl hw.memsize
查看交换文件目录:
ls -lh /private/var/vm/
由于系统保护机制和版本差异,部分目录或统计信息可能受到访问限制。
macOS 的 Swap 通常由系统自动管理,不建议普通用户手动删除交换文件或关闭系统交换机制。
七、Windows、Linux、macOS 的 Swap 对比
7.1 三大系统的基本区别
| 对比 | Windows | Linux | macOS |
|---|---|---|---|
| 主要名称 | Paging File | Swap | Swap |
| 传统存储形式 | pagefile.sys | Swap File / Partition | 系统管理的 Swap Files |
| 是否支持虚拟内存 | 是 | 是 | 是 |
| 是否支持内存压缩 | 是 | 是,常见 zram/zswap 等 | 是 |
| 是否支持按需分页 | 是 | 是 | 是 |
| 是否支持 COW | 是 | 是 | 是 |
| Swap 管理方式 | 通常自动管理 | 可灵活手动配置 | 通常自动管理 |
| 典型配置工具 | 系统设置 | swapon、swapoff、mkswap | 系统自动管理 |
| 内存状态工具 | Task Manager | free、vmstat、top | Activity Monitor、vm_stat |
| 休眠存储 | 通常使用 hiberfil.sys | 可配置使用 Swap | 集成电源管理机制 |
7.2 三大系统的工作流程
Windows
Process Memory
|
v
Windows Memory Manager
|
+-- Working Set
|
+-- Memory Compression
|
+-- Page File
Linux
Process Memory
|
v
Linux Memory Management
|
+-- Page Reclaim
|
+-- Page Cache
|
+-- zswap / zram
|
+-- Swap File / Partition
macOS
Process Memory
|
v
XNU / Mach VM
|
+-- Resident Memory
|
+-- Memory Compression
|
+-- Swap Files
三者的共同点是:
通过虚拟内存管理,将活跃页面尽可能保留在物理 RAM 中,并通过压缩、回收和交换等方式缓解内存压力。
八、Swap 应该设置多大
不存在适用于所有计算机的固定公式。
Swap 容量取决于:
- 物理 RAM 大小。
- 工作负载。
- 是否使用休眠。
- 是否运行大型程序。
- 内存峰值。
- 是否使用容器或虚拟机。
- 是否使用 zram、zswap 等机制。
8.1 Linux 普通桌面参考
以下只是非休眠场景的初步规划参考:
| 物理 RAM | 可以考虑的磁盘 Swap |
|---|---|
| 4 GiB | 4~8 GiB |
| 8 GiB | 4~8 GiB |
| 16 GiB | 4~8 GiB |
| 32 GiB | 4~16 GiB |
| 64 GiB 以上 | 按实际负载决定 |
这些数值不是 Linux 内核规定的最佳值。
例如数据库服务器、虚拟化宿主机和低内存嵌入式设备可能需要完全不同的策略。
如果需要休眠,Swap 的容量及配置还需要根据实际休眠映像大小和恢复机制单独设计。
8.2 Windows
普通桌面环境通常优先考虑:
System Managed Size
即由 Windows 自动管理分页文件大小。
不要仅根据 RAM 容量机械设置为 1 倍、1.5 倍或 2 倍。
8.3 macOS
通常让 macOS 自动管理 Swap 和内存压缩即可。
用户更应该观察:
- Memory Pressure。
- Swap Used。
- 程序响应速度。
- 是否持续出现高内存压力。
九、Swap 对 SSD 寿命和性能的影响
9.1 Swap 会不会损坏 SSD
Swap 会产生写入,因此理论上会消耗 SSD 的写入寿命。
但现代 SSD 通常具备磨损均衡等机制。
是否产生明显寿命影响,取决于:
- 实际交换写入量。
- SSD 的耐久度。
- 交换频率。
- 工作负载。
- 设备健康状况。
少量正常 Swap 使用通常不必过度担心。
真正需要关注的是长期高频换入换出造成的性能下降及持续写入负担。
9.2 Swap 越大越好吗
不是。
增加 Swap 容量主要增加系统可使用的交换后备存储空间。
但它不会直接提高:
- RAM 带宽。
- CPU 性能。
- 内存访问速度。
- 物理内存容量。
如果活跃工作集长期超过 RAM,单纯增大 Swap 往往不能解决明显卡顿。
增加物理 RAM 或减少活跃工作集通常更有效。
十、最终完整知识模型
10.1 Swap 与物理页映射的关系
用户程序
|
v
虚拟地址
|
v
MMU
|
v
TLB / 页表
|
+----------+----------+
| |
v v
页面已驻留 页面未驻留
| |
v v
物理 RAM Page Fault
| |
| v
| 操作系统
| |
| +-------+-------+
| | |
| v v
| 文件后备 Swap 后备
| | |
| +-------+-------+
| |
| v
| 恢复物理页面
| |
+----------+----------+
|
v
继续执行
并非所有缺页都需要读取文件或 Swap:首次访问匿名页面时也可能直接建立零初始化页面。
10.2 必须掌握的概念
| 概念 | 含义 |
|---|---|
| Virtual Memory | 虚拟地址空间及其管理机制 |
| Physical Memory | 物理 RAM |
| Page | 虚拟页面 |
| Page Frame | 物理页框 |
| Page Table | 地址映射结构 |
| MMU | 硬件地址转换单元 |
| Page Fault | 页面转换或权限异常 |
| Swap Out | 页面换出 |
| Swap In | 页面换入 |
| Page Reclaim | 页面回收 |
| Anonymous Page | 匿名页面 |
| File-backed Page | 文件后备页面 |
| Working Set | 活跃或驻留页面集合,具体定义依系统而异 |
| Memory Compression | 内存页面压缩 |
| Thrashing | 频繁换页导致性能下降 |
| OOM | 内存不足状态 |
| zram | RAM 中的压缩块设备 |
| zswap | 压缩交换缓存 |
| Page File | Windows 分页文件 |
| Memory Pressure | 内存压力指标 |
十一、最终总结
- Swap 是操作系统使用后备存储保存部分可换出页面内容的机制。
- Swap 不是物理 RAM,也不等于虚拟内存。
- Swap 的核心作用是缓解 RAM 压力,提高有限物理内存的利用率。
- 现代系统通常按页面进行换入换出。
- 页面换出后,程序原有的虚拟地址通常不需要改变。
- 页面重新访问时,操作系统可以通过缺页异常完成换入。
- Swap 能缓解部分内存不足问题,但不能保证不会发生 OOM。
- Swap 比 RAM 慢得多,频繁换页会造成明显性能下降。
- Windows 主要使用 Page File,并配合内存压缩等机制。
- Linux 支持 Swap Partition、Swap File、zswap 和 zram 等机制。
- macOS 通常自动管理 Swap Files,并使用内存压缩减少交换 I/O。
- 三大操作系统都使用虚拟内存、分页和页面回收机制,但具体实现和管理策略不同。
一句话总结
虚拟内存负责为进程提供独立的地址空间,页表和 MMU 负责将虚拟地址映射到物理内存,而 Swap 则是在物理内存紧张时,为部分可换出页面提供后备存储,使操作系统能够回收物理页框,并在程序再次访问时恢复页面内容。
参考资料
-
Linux Kernel Documentation — Memory Management
https://docs.kernel.org/mm/index.html -
Linux Kernel Documentation — Swap
https://docs.kernel.org/mm/swap.html -
Linux Kernel Documentation — zswap
https://docs.kernel.org/admin-guide/mm/zswap.html -
Linux Kernel Documentation — zram
https://docs.kernel.org/admin-guide/blockdev/zram.html -
Linux man-pages — swapon(8)
https://man7.org/linux/man-pages/man8/swapon.8.html -
Microsoft Learn — Page File
https://learn.microsoft.com/en-us/troubleshoot/windows-client/performance/introduction-to-the-page-file -
Apple Support — Activity Monitor Memory
https://support.apple.com/guide/activity-monitor/view-memory-usage-actmntr1004/mac
浙公网安备 33010602011771号