【原创】(七)Linux内存管理
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 本文将分析 Buddy System 。 Buddy System 伙伴系统,是通过将物理内存划分为页面来进行管理的系统,支持连续的物理页面分配和释放。此外,使用与碎片相关的算法来确保最大的连续页面。 先通过一个例子大体介绍一下原理吧: 空闲的物理页框按大小分组成 0~MAX_ORDER 个链表,每个链表存放页框的大小为2的n次幂,其中n在 0 ~ MAX_ORDER-1 中取值。 假设请求分配 2^8 = 256 个页框块: 检查 n = 8 的链表,检查是否有空闲块,找到了则直接返回; 没有找到满足需求的,则查找 n = 9 的链表,找到 512大小 空闲块,拆分成两个 256大小 块,将其中一个 256大小 块返回,另一个 256大小 块添加到 n = 8 的链表中; 在 n = 9 的链表中没有找到合适的块,则查找 n = 10 的链表,找到1024大小空闲块,将其拆分成 512 + 256 + 256 大小的块,返回需要获取的 256大小 的块