Linux物理内存描述三个层级

来源:互联网 发布:康宏爱飞 知乎 编辑:程序博客网 时间:2024/05/20 23:31

Linux物理内存描述三个层级的struct:

pglist_data//描述内存节点

zone//描述节点内的分区,有normal、DMA、highmem

page//描述一页,通常为4K大小

各结构体成员的具体含义,详见下面代码中的注释,英文注释清晰处请直接参考

/* * The pg_data_t structure is used in machines with CONFIG_DISCONTIGMEM * (mostly NUMA machines?) to denote a higher-level memory zone than the * zone denotes. * * On NUMA machines, each NUMA node would have a pg_data_t to describe * it's memory layout. * * Memory statistics and page replacement data structures are maintained on a * per-zone basis. */struct bootmem_data;typedef struct pglist_data {        struct zone node_zones[MAX_NR_ZONES];//该节点内的内存区struct zonelist node_zonelists[MAX_ZONELISTS];//节点的备用内存区,也就是所有节点的内存区链表,当该节点没有可用的内存时,就从备用内存区分配;事实上,除非分配内存时指定了GFP_THISNODE标志,否则均从备用内存区内存区分配,选择的优先顺序是Highmem>Normal>DMA/*可用内存区数目*/        int nr_zones;#ifdef CONFIG_FLAT_NODE_MEM_MAP/* means !SPARSEMEM */struct page *node_mem_map;//本节点第一个页面的描述符指针#endif#ifndef CONFIG_NO_BOOTMEMstruct bootmem_data *bdata;//内核启动阶段Bootmem分配器用来管理内存的struct,其成员node_bootmem_map是bit map指针,每一个bit描述一个页是否已经被使用#endifunsigned long node_start_pfn;//该节点内起始页面的帧号,即该节点在全局mem_map中的indexunsigned long node_present_pages; /* total number of physical pages */unsigned long node_spanned_pages; /* total size of physical page     range, including holes */int node_id;wait_queue_head_t kswapd_wait;//该节点的页交换守护进程的等待队列,在节点中的页需要换出时使用struct task_struct *kswapd;//负该节点的页交换的守护进程int kswapd_max_order;//最大可交换的页数} pg_data_t;



                                             
0 0
原创粉丝点击