linux物理内存的管理

数据结构:

typedef struct pglist_data {
    struct zone node_zones[MAX_NR_ZONES];
    struct zonelist node_zonelists[MAX_ZONELISTS];
    int nr_zones;
    struct page *node_mem_map;
    struct bootmem_data *bdata;
    unsigned long node_start_pfn;
    unsigned long node_present_pages;   
        unsigned long node_spanned_pages;
    ...
    ...
} pg_data_t;
struct zone {
    unsigned long       pages_min, pages_low, pages_high;
    unsigned long       lowmem_reserve[MAX_NR_ZONES];
    struct per_cpu_pageset  pageset[NR_CPUS];
    struct free_area    free_area[MAX_ORDER];
    struct list_head    active_list;
    struct list_head    inactive_list;
    unsigned long       nr_scan_active;
    unsigned long       nr_scan_inactive;
    unsigned long       pages_scanned;
    unsigned long       flags;
    ...
    ...
};

这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述

物理内存的管理分三层:

  1. 每个page对象对应一个4K大小的物理内存页,page对象存在于mem_map全局数组中,通过page在全局数组中的位置可以找到其关联的物理内存页的位置。

  2. zone管理着page对象,主要通过四个字段结构管理page对象:

    a.      pageset:如图3,管理着为各个cpu预先分配好的内存页。
    
    b.      free_area:如图4,管理者空闲内存页,用于实现伙伴系统。
    
    c.      active:保存活动页集合
    
    d.      inactive:保存不活动页集合
    
  3. pg_data_t管理者zone对象,主要通过两个字段管理:

    a. node_zones:zone数组,保存本结点的所有zone对象
    
    b. node_zonelists:zonelist数组,保存所有节点的所有zone对象
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值