Linux内核6.6 内存管理(13)匿名页面的生命周期(坑没填完)
0.匿名页面和paga cache
维度 | 匿名页面 | page cache |
磁盘文件关联 | 无,“凭空” 分配的内存 | 有,是文件数据的内存缓存 |
数据持久化 | 进程退出 / 断电后丢失 | 可写回磁盘,文件内容持久保存 |
内存回收策略 | 优先被换出到 swap(因无文件备份) | 优先写回磁盘,若磁盘繁忙才换出到 swap |
典型场景 | 程序运行时的临时数据(变量、栈) | 文件读写操作(如日志读取、文件修改) |
内核管理模块 | 由内存分配器(如 slab、伙伴系统)管理 | 由文件系统(如 ext4)和页缓存机制管理 |
1.匿名页面的诞生
- malloc/mmap 接口分配的内存 -> do_anonymous_page ()
- 写时复制:当缺页中断出现写保护错误时,新分配的页面是匿名页面
- (1)do_wp_page ()
- 只读的 special 映射的页,例如映射到 zero page 的页面。
- 非单身匿名页面(有多个映射的匿名页面,即 page->_mapcount > 0)
- 只读的私用映射的 page cache。
- KSM 页面。
- (2)do_cow_page ()
- 共享的匿名页面(shared anonymous mapping,shmm)
- 上述这些情况在发生写时复制时会新分配匿名页面。
- do_swap_page (),从 swap 分区读回数据时会新分配匿名页面。
- 迁移页面。
2.匿名页面的使用
匿名页面在缺页中断中分配完成之后,就建立了进程虚拟地址空间VMA和物理页面的映射关系,用户进程访问虚拟地址即访问到匿名页面的内容
3.匿名页面的换出