标签:导致 cpu高 复杂 一个 swa 管理 链接 max nbsp
伙伴系统经典的内存管理方法,有效的解决了内存外部碎片问题,分配一组连续的页而建立的高效分配策略,结合2的幂次方个分配器和空闲缓冲区合并的技术。内存被分成含有若干个(2^0,2^1,2^2...2^11)页面的块。
伙伴系统的分配器维护空闲页面所组成的块, 这里每一块都是2的方幂个页面, 方幂的指数称为阶.
概述:
系统内存中的每个物理内存页(页帧),都对应于一个struct page实例, 每个内存域都关联了一个struct zone的实例,其中保存了用于管理伙伴数据的主要数数组
struct zone { /* free areas of different sizes */ struct free_area free_area[MAX_ORDER]; }; //伙伴系统的辅助数据结构 struct free_area { struct list_head free_list[MIGRATE_TYPES];//是用于连接空闲页的链表. 页链表包含大小相同的连续内存区 unsigned long nr_free;//指定了当前内存区中空闲页块的数目(对0阶内存区逐页计算,对1阶内存区计算页对的数目,对2阶内存区计算4页集合的数目,依次类推 };
阶是伙伴系统中一个非常重要的术语. 它描述了内存分配的数量单位. 内存块的长度是2^0,order , 其中order的范围从0到MAX_ORDER
zone->free_area[MAX_ORDER]数组中阶作为各个元素的索引, 用于指定对应链表中的连续内存区包含多少个页帧.
内存区中第1页内的链表元素, 可用于将内存区维持在链表中
内核将已分配页分为以下三种不同的类型:
此时内核的策略是分配一个尽可能大的连续内存块,将其从可移动列表转换到不可移动列表。
由于页无法移动, 导致在原本几乎全空的内存区中无法进行连续分配. 根据页的可移动性, 将其分配到不同的列表中, 即可防止这种情形。
标签:导致 cpu高 复杂 一个 swa 管理 链接 max nbsp
原文地址:https://www.cnblogs.com/tianzeng/p/12430959.html