Linux启动内存分配器是在伙伴系统、slab机制实现之前,为满足内核中内存的分配而建立的。本身的机制比较简单,使用位图来进行标志分配和释放。
一、数据结构介绍1,保留区间因为在建立启动内存分配器的时候,会涉及保留内存。也就是说,之前保留给页表、分配器本身(用于映射的位图)、io等得内存在分配器建立后,当用它来分配内存空间时,保留出来的那些部分就不能再分配了。linux中对保留内存空间的部分用下列数据结构表示
[cpp] - /*
- * Early reserved memory areas.
- */
- #define MAX_EARLY_RES 20/*保留空间最大块数*/
-
- struct early_res {/*保留空间结构*/
- u64 start, end;
- char name[16];
- char overlap_ok;
- };
- /*保留内存空间全局变量*/
- static struct early_res early_res[MAX_EARLY_RES] __initdata = {
- { 0, PAGE_SIZE, "BIOS data page" }, /* BIOS data page */
- {}
- };
2,bootmem分配器 [cpp] - /*
- * node_bootmem_map is a map pointer - the bits represent all physical
- * memory pages (including holes) on the node.
- */
- /*用于bootmem分配器的节点数据结构*/
- typedef struct bootmem_data {
- unsigned long node_min_pfn;/*存放bootmem位图的第一个页面(即内核映象结束处的第一个页面)。*/
- unsigned long node_low_pfn;/*物理内存的顶点,最高不超过896MB。*/
- void *node_bootmem_map;
- unsigned long last_end_off;/*用来存放在前一次分配中所分配的最后一个字节相对于last_pos的位移量*/
- unsigned long hint_idx;/*存放前一次分配的最后一个页面号*/
- struct list_head list;
- } bootmem_data_t;
全局链表
[cpp] - static struct list_head bdata_list __initdata = LIST_HEAD_INIT(bdata_list);
Linux高端内存管理之非连续内存区(分配和释放)Linux页表机制管理初始化相关资讯 Linux基础教程
- Linux基础教程:对文件打包压缩 (03月08日)
- 基础教程:Linux 新手应该知道的 (09/06/2015 21:17:20)
- Linux基础教程:find 与 xargs (04/05/2015 10:20:11)
| - Linux基础教程:tar 命令使用介绍 (12/03/2015 13:19:47)
- Linux基础教程(1)操作系统基础 (08/15/2015 20:44:01)
- Linux基础教程:从源码安装软件 (04/05/2015 10:14:45)
|
本文评论 查看全部评论 (0)