node与zone

node

  • 内核使用结构体pglist_data ,管理node中的内存资源
  • 所有node的pglist_data结构地址都放在数组node_data

    • struct pglist_data *node_data[MAX_NUMNODES];//64
    • #define MAX_NUMNODES (1 << CONFIG_NODES_SHIFT)
  • node中的内存资源,被划分成若干zone
    • ZONE_DMA:物理地址16MB以下(ISA设备)
    • ZONE_DMA32:物理地址4GB以下(只能在4GB范围内进行DMA的32位设备)
    • ZONE_NORMAL:物理地址4GB以上的空间
    • ZONE_MOVABLE:虚拟内存域,可移动
    • x64中并没有所谓的ZONE_HIGHMEM 高端内存
typedef struct pglist_data pg_data_t;
struct pglist_data{
    struct zone node_zones[MAX_NR_ZONES];
    //分别对应4种zone类型ZONE_DMA、ZONE_DMA32、ZONE_NORMAL、ZONE_MOVABLE

    struct zonelist node_zonelists[MAX_ZONELISTS];
    //用于分配页框时,查找从哪个zone分配

    int nr_zones;//node_zones中有效zone的个数

    unsigned long node_start_pfn;//node的第一个页框号

    unsigned long node_present_pages;//node内的页框数,不包含洞

    unsigned long node_spanned_pages;//node内的页框数,包含洞

    int node_id;//当前node的编号
};

zone

struct zone {
    int node;//当前zone所属的node编号

    struct per_cpu_pageset __percpu *pageset;//针对每个cpu的,页分配高速缓存

    spinlock_t lock;//保护当前zone结构的自旋锁

    struct free_area free_area[MAX_ORDER];//空闲页框的组织结构

    unsigned long *pageblock_flags;
    //在SPARSEMEM中,实际存储在mem_section的pageblock_flags中

    struct pg_data_t *zone_pgdat;//当前zone所属node结构的指针

    unsigned long zone_start_pfn;//zone的第一个页框号

    unsigned long spanned_pages;//zone中的页框数,包括洞

    unsigned long present_pages;//zone中的页框数,不包括洞

    unsigned long managed_pages;//managed_pages = present_pages - reserved_pages;

    const char *name;//Zone的名称:"DMA", "DMA32", "Normal", "Movable"
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值