Linux内核页框回收机制与虚拟内存子系统

需积分: 0 2 下载量 136 浏览量 更新于2024-07-26 收藏 13.49MB PDF 举报
深入理解 Linux 内核(中文第三版)第 17 章 - 回收页框 资源摘要信息的详细内容如下: 在前面的章节中,我们讨论了 Linux 内核如何处理动态内存,包括记录空闲和占用的页框、用户态进程的线性地址空间、动态内存实现内存与磁盘高速缓存等概念。在本章中,我们将讨论页框的回收完成对虚拟内存子系统的描述。 页框回收算法是 Linux 内核回收页框的原因和策略。Linux 中有一点很有意思,在为用户态进程与内核分配动态内存时,所作的检查是马马虎虎的。比如,对单个用户所创建进程的 RAM 使用总量并不作严格检查,对内核使用的许多磁盘高速缓存和内存高速缓存大小也同样不作限制。这使内核以最好的可行方式使用可用的 RAM。 减少控制是一种设计选择,这使内核以最好的可行方式使用可用的 RAM。当系统负载较低时,RAM的大部分由磁盘高速缓存占用,很少正在运行的进程可以从中获益。但是,当系统负载增加时,RAM的大部分则由进程页占用,高速缓存就会缩小从而给后来的进程让出空闹。 我们在前面的章节中看到,内存及磁盘高速缓存抓取了那么多的页框,但从来择放任何页框。这是合理的,因为高速缓存系统并不知道进程是否(什么时候)会重新使用某些缓存的数据,因此不能确定高速缓存的哪些部分应该释放。此外,正是有了第九章描述的请求调页机制,只要用户态进程继续执行,它们就能在得页框,然而,请求调页没有办法强制进程释放不再使用的页框。 因此,迟早所有空闲内存将被分配给进程和高速缓存。Linux 内核的页框回收算法(page frame reclaiming algorithm, PFRA)采取从用户态进程和内核高速缓存“窃取”页框的办法补充伙伴系统的空闲块列表。 实际上,在用完所有空闲内存之前,就必须执行页框回收算峰。否则,内核很可能陆入一种内存请求的僵局中,并导致系统崩捕。 在“反向映射”一节中,我们介绍了内核使用的一种数据结构,借助这个结构,内核可以快速定位指向一个页框的所有页表项。这种数据结构对于页框回收非常重要,因为它可以帮助内核快速找到可以回收的页框。 在“PFRA 实现”一节中,我们介绍了 Linux 使用的页框回收算法的实现细节,包括如何从用户态进程和内核高速缓存“窃取”页框,如何补充伙伴系统的空闲块列表等。 最后,在“交换”一节中,我们讨论了交换子系统,它是将匿名页(并非文件的映射数据)保存到磁盘的内核部件。交换子系统对于 Linux 内核的虚拟内存子系统非常重要,因为它可以帮助内核释放不再使用的页框,避免系统崩捕。 本章讨论了 Linux 内核的页框回收算法和策略,包括页框回收算法的原因和策略、反向映射、PFRA 实现和交换子系统等概念。这些概念对于理解 Linux 内核的虚拟内存子系统非常重要。