【内存管理】重要数据结构

结构体:init_mm  位置:mm/Init-mm.c
1  struct mm_struct init_mm = {
2  .mm_rb     =RB_ROOT,        /*红黑树根节点*/
3  .pgd       =swapper_pg_dir,    /*内核页全局目录地址*/
4  .mm_users  =ATOMIC_INIT(2),    /*用户空间用户数*/
5  .mm_count  =ATOMIC_INIT(1),    /*引用数*/
6  .mmap_sem  =__RWSEM_INITIALIZER(init_mm.mmap_sem),                    /*信号量*/
7 .page_table_lock=__SPIN_LOCK_UNLOCKED(init_mm.page_table_lock),     /*保护锁*/
8   .mmlist       = LIST_HEAD_INIT(init_mm.mmlist),      /*所活动mm的链表*/
    9   INIT_MM_CONTEXT(init_mm)    /*处理器相关上下文*/
};
结构体:memblock_region  位置:arch/arm/mm/mmu.c:1170
1  struct memblock_region {
2  phys_addr_tbase; /*基地址*/
3  phys_addr_tsize; /*大小*/
4  #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
5  int nid; /*noid id*/
6  #endif
7  };
结构体:memblock_type  位置:include/linux/memblock.h
1  struct memblock_type {
2  unsignedlong cnt;   /* regions 个数 */
3  unsignedlong max;   /* 已分配数组大小 */
4  phys_addr_t total_size;  /* 所有regions总大小 */
5  structmemblock_region *regions;
6  };
结构体:    memblock 位置:linux/include/asm/setup.h
1  struct memblock {
2  phys_addr_t current_limit; /*内存限制 */
3  structmemblock_type memory;    /*可用内存*/
4  structmemblock_type reserved;  /*保留内存*/
5  };
 
结构体:map_desc  位置:arch/arm/mm/mmu.c:1176
1  structmap_desc {
2  unsignedlong virtual;  /*要映射到的虚拟地址*/
3  unsignedlong pfn;       /*要映射的物理页帧号*/
4  unsignedlong length;       /*映射长度*/
5  unsignedint type;       /*映射内存类型*/
6  };
 
结构体:mem_type  位置:arch/arm/mm/mmu.c:716
1  struct mem_type {
2      pteval_t prot_pte;       /*二层页式flags */
3      pmdval_t prot_l1;        /*二层页式flags*/
4      pmdval_t prot_sect;      /*单层段式flags*/
5      unsigned int domain;     /*内存所属域*/
6  };
结构体:    membank 位置:linux/include/asm/setup.h
1  struct membank {
2  phys_addr_t start;   /*Bank起始地址*/
3  unsignedlong size;  /*Bank大小*/
4  unsignedint highmem;    /*高端内存标记*/
5  };
结构体:    meminfo 位置:linux/include/asm/setup.h
1  struct meminfo {
2  intnr_banks;        /*Bank的数量*/
3  structmembank bank[NR_BANKS];     /*Bank数组*/
4  };
1  typedefstruct{ pteval_t pte; } pte_t;     /*页表项结构*/
2  typedefstruct{ pmdval_t pmd; } pmd_t;    /*页中间目录结构*/
3  typedefstruct{ pmdval_t pgd[2]; } pgd_t; /*页全局目录结构*/
4  typedefstruct{ pteval_t pgprot; } pgprot_t;/*页保护目录结构*/
  结构体: pg_data_t 位置:include/linux/Mmzone.h
2  typedef struct pglist_data{
3  struct zonenode_zones[MAX_NR_ZONES];     /*zone节点数组*/
4  struct zonelistnode_zonelists[MAX_ZONELISTS];   /*zonelist数组*/
5  int nr_zones;        /*zone个数*/
6  spinlock_tnode_size_lock;  /*锁*/
7  unsigned long node_start_pfn;   /*节点开始页帧号*/
8   unsigned long node_present_pages; /* 物理页总数 */
9  unsigned long node_spanned_pages; /* 包含洞在内的所有页帧数*/
10 int node_id;  /*node编号*/
11 } pg_data_t;
结构体:    bootmem_data位置:include/linux/Mmzone.h
1  typedefstructbootmem_data {
2  unsignedlong node_min_pfn;     /*存放bootmem位图的第一个页面 */
3  unsignedlong node_low_pfn;     /*低端物理内存顶点,最大896MB*/
4  void*node_bootmem_map;         /*指向bootmem位图*/
5   unsigned long last_end_off       /*用来存放在前一次分配中所分配的最后一个字节相对于hint_idx的位移量*/
6   unsigned long hint_idx;     /*前一次分配的最后一个页面的页面号 */
7   struct list_headlist;          /*链表结构*/
} bootmem_data_t;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值