zoukankan      html  css  js  c++  java
  • struct pglist_data(pg_data_t)

      1 struct pglist_data pg_data_t

    typedef struct pglist_data {
            struct zone node_zones[MAX_NR_ZONES];
            struct zonelist node_zonelists[MAX_ZONELISTS];
            int nr_zones;
    #ifdef CONFIG_FLAT_NODE_MEM_MAP /* means !SPARSEMEM */
            struct page *node_mem_map;
    #ifdef CONFIG_CGROUP_MEM_RES_CTLR
            struct page_cgroup *node_page_cgroup;
    #endif
    #endif
    #ifndef CONFIG_NO_BOOTMEM
            struct bootmem_data *bdata;
    #endif
    #ifdef CONFIG_MEMORY_HOTPLUG
            /*
             * Must be held any time you expect node_start_pfn, node_present_pages
             * or node_spanned_pages stay constant.  Holding this will also
             * guarantee that any pfn_valid() stays that way.
             *
             * Nests above zone->lock and zone->size_seqlock.
             */
            spinlock_t node_size_lock;
    #endif
            unsigned long node_start_pfn;
            unsigned 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;

      2 struct zonenode_zones[MAX_NE_ZONES]

    struct zone node_zones[MAX_NR_ZONES];
    //每个内存节点最多包含3个内存页区
    //DMA最低位,normal中间位置,HighMem最高位置
    //MAX_NR_ZONES枚举在include/linux/mmzone.h的struct zone_type中

      3 struct zonelist node_zonelists[MAX_ZONELISTS]

    struct zonelist node_zonelists[MAX_ZONELISTS];
    //上一行的struct node_zone[]数组中 0-DMA,1-normal,2-HighMem
    //这里的node_zonelists[]数组中 0-normal,1-DMA,2-HighMem
    //故其对应关系为node_zonelists[0/1/2]->zone[0] = &node_zones[1/0/2]

      3 int nr_zones

    int nr_zones;        //内存页区数量

      4 struct page *node_mem_map

       struct page_cgroup *node_page_cgroup

    #ifdef CONFIG_FLAT_NODE_MEM_MAP /* means !SPARSEMEM */
            struct page *node_mem_map;
    #ifdef CONFIG_CGROUP_MEM_RES_CTLR
            struct page_cgroup *node_page_cgroup;
    #endif
    #endif
    //struct page *node_mem_map 表示该节点内存所有页描述结构变量空间的起始地址
    //struct bootmem_data *bdata内存节点启动阶段内存管理数据结构指针,具体如下
    typedef struct bootmem_data {
            unsigned long node_min_pfn;    //内存node空间的物理基址
            unsigned long node_low_pfn;    //.....物理终址
            void *node_bootmem_map;       //.....虚拟起始地址,mem_init()可将其清除为NULL
            unsigned long last_end_off;    //上次分配结束时的地址偏移量
            unsigned long hint_idx;        //上一次从本内存节点中的物理起始地址的的相对偏移量
            struct list_head list;                     
    } bootmem_data_t;
  • 相关阅读:
    求逆序对的解法
    关于宽搜BFS广度优先搜索的那点事
    大数乘法 poj2389
    二分求幂(快速求幂,二进制求幂)
    2n皇后问题
    poj2406 Power Strings (kmp 求最小循环字串)
    poj1050查找最大子矩阵和
    二叉树的建立和遍历
    已知二叉树前序和中序,求二叉树。
    c/c++连接mysql数据库设置及乱码问题(vs2013连接mysql数据库,使用Mysql API操作数据库)
  • 原文地址:https://www.cnblogs.com/plinx/p/2862312.html
Copyright © 2011-2022 走看看