• 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;
  • 相关阅读:
    关于 No buffer space available (maximum connections reached?): connect 的处理
    Cron 表达式
    Hudson 打包部署到Was上特别慢
    JAVA jar 参数
    CentOS 6 UNEXPECTED INCONSISTENCY RUN fsck MANUALLY
    SSH 连接很慢
    解决libc.so.6: version `GLIBC_2.14' not found问题
    Maven 基本参数
    Shc 应用
    JAVA 关于JNI本地库加载
  • 原文地址:https://www.cnblogs.com/plinx/p/2862312.html
Copyright © 2020-2023  润新知