Welcome 微信登录

首页 / 操作系统 / Linux / Linux启动内存分配器

Linux启动内存分配器是在伙伴系统、slab机制实现之前,为满足内核中内存的分配而建立的。本身的机制比较简单,使用位图来进行标志分配和释放。一、数据结构介绍1,保留区间因为在建立启动内存分配器的时候,会涉及保留内存。也就是说,之前保留给页表、分配器本身(用于映射的位图)、io等得内存在分配器建立后,当用它来分配内存空间时,保留出来的那些部分就不能再分配了。linux中对保留内存空间的部分用下列数据结构表示[cpp]
  1. /* 
  2.  * Early reserved memory areas. 
  3.  */  
  4. #define MAX_EARLY_RES 20/*保留空间最大块数*/   
  5.   
  6. struct early_res {/*保留空间结构*/  
  7.     u64 start, end;  
  8.     char name[16];  
  9.     char overlap_ok;  
  10. };  
  11. /*保留内存空间全局变量*/  
  12. static struct early_res early_res[MAX_EARLY_RES] __initdata = {  
  13.     { 0, PAGE_SIZE, "BIOS data page" }, /* BIOS data page */  
  14.     {}  
  15. };  
2,bootmem分配器 [cpp]
  1. /* 
  2.  * node_bootmem_map is a map pointer - the bits represent all physical  
  3.  * memory pages (including holes) on the node. 
  4.  */  
  5.  /*用于bootmem分配器的节点数据结构*/  
  6. typedef struct bootmem_data {  
  7.     unsigned long node_min_pfn;/*存放bootmem位图的第一个页面(即内核映象结束处的第一个页面)。*/  
  8.     unsigned long node_low_pfn;/*物理内存的顶点,最高不超过896MB。*/  
  9.     void *node_bootmem_map;  
  10.     unsigned long last_end_off;/*用来存放在前一次分配中所分配的最后一个字节相对于last_pos的位移量*/  
  11.     unsigned long hint_idx;/*存放前一次分配的最后一个页面号*/  
  12.     struct list_head list;  
  13. } bootmem_data_t;  
全局链表 [cpp]
  1. static struct list_head bdata_list __initdata = LIST_HEAD_INIT(bdata_list);  
  • 1
  • 2
  • 3
  • 下一页
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)
表情: 姓名: 字数