[linux内存管理] 第 051 篇 内存回收核心 shrink_node 2小时前 评论
[linux内存管理] 第 051 篇 内存回收核心 shrink_node

shrink_node 是 Linux 内存回收路径的核心枢纽:无论是 kswapd 后台回收,还是 direct reclaim / node_reclaim 这种前台、同步回收,最终都汇聚到这个函数,在节点维度完成真实的页面回收调度。文中用结构化示意图清晰展开 shrink_node 的调用链:上游由 kswapd_shrink_node(后台回收)、shrink_zones(try_to_free_pages 路径的 direct reclaim)以及 __node_reclaim(快速 node_reclaim 同步回收)等入口触发;下游则分流到 shrink_node_memcgs、

[linux内存管理] 第 050 篇 深度分析 direct reclaim 机制 6日前 评论
[linux内存管理] 第 050 篇 深度分析 direct reclaim 机制

直接回收是 Linux 内存分配慢路径中的同步回收机制:当 kswapd 的后台回收跟不上分配需求、快路径已失败时,由分配线程“自己动手”回收页面,作为介于 kswapd 与 OOM 之间的第二道防线。整体流程发生在 __alloc_pages_slowpath 中:先尝试唤醒 kswapd 和常规分配,再进行内存压缩和预留内存使用,关键的第四阶段是 __alloc_pages_direct_reclaim,通过 __perform_reclaim 调用 try_to_free_pages 做实际回收,然后再用 get_page_from_freelist 重试分配;若仍失败,则一次性释放 H

[linux内存管理] 第 049 篇 深度分析 Linux kswapd 后台回收机制 1周前 评论
[linux内存管理] 第 049 篇 深度分析 Linux kswapd 后台回收机制

在上一节整体梳理内存回收机制之后,本篇聚焦“内脏细节”,系统性拆解 Linux 内核中实际扫描与释放页面的关键链路。文章围绕 kswapd 后台回收与直接回收两大路径展开:一条从 kswapd() → balance_pgdat() → shrink_node(),解析内核回收线程何时被唤醒、在何种回收程度下停止,以及它与页面分配器之间如何协同保持内存水位;

[linux内存管理] 第028篇 do_anonymous_page只处理私有映射吗? 2025-08-04 1 条
[linux内存管理] 第028篇 do_anonymous_page只处理私有映射吗?

文章摘要:本文探讨了Linux内核中do_anonymous_page()函数的作用,解释了它为什么只处理私有匿名映射。通过分析do_pte_missing()、vma_is_anonymous()、vma_set_anonymous()等函数,以及mmap_region()函数中的逻辑,文章得出结论:在mmap()流程中,只有私有匿名映射的vm_ops会被设置为NULL,从而被do_anonymous_page()处理。其他类型的映射,如共享匿名映射和文件映射,其vm_ops不为空,因此不会被该函数处理。

为什么需要虚拟内存 2024-11-21 评论
为什么需要虚拟内存

本文主要探讨了操作系统中虚拟内存的概念及其重要性。虚拟内存是一种内存管理技术,它为每个进程分配一套独立的虚拟地址空间,而操作系统负责将这些虚拟地址映射到物理内存地址。这样,进程之间的内存地址相互隔离,互不干扰,有效解决了多进程环境下的内存冲突问题。此外,虚拟内存还允许进程的运行内存超过物理内存大小,因为操作系统会将不常使用的内存页面换出到硬盘上,从而释放物理内存空间。虚拟内存的管理方式主要有内存分段和内存分页,两者各有优缺点。分段机制将程序划分为不同的逻辑段,但容易出现外部内存碎片和内存交换效率低的问题;而分页机制将内存空间划分为固定大小的页,解决了外部内存碎片问题,并提高了内存交换效率。为了解决简单分页产生的页表过大的问题,引入了多级页表和TLB技术。最后,本文还介绍了Linux操作系统的内存管理方式,主要采用分页管理,同时涉及分段机制。

linux源码解析07–缺页异常之架构相关部分(ARM64为例)分析 2024-11-20 评论
linux源码解析07–缺页异常之架构相关部分(ARM64为例)分析

本文详细介绍了缺页异常的原理和实现过程,涵盖了从异常向量表到通用代码处理的各个环节,并对主要缺页异常类型进行了分类说明。缺页异常是操作系统虚拟内存管理的重要机制,对于进程来说时透明的。文章中还涉及了匿名映射、文件映射、swap 缺页异常、写时复制缺页异常等概念,为理解虚拟内存管理提供了基础。