内存管理-page初始化,分配与回收

内存管理-page初始化,分配与回收
物理页面不一定就是物理内存页面,也可能是盘上物理页面
内核把叶作为内存管理的基本单位,物理内存和虚拟内存都分成大小相等的页(4K)

在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前正在使用的程序和数据块保留在内存中,而将内存容纳不了的信息保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换(怎么确定不用)程序和数据块

mm/init.c的作用:
内存布局:
内核被装载在2M(_text)开始处,结束_etext,紧接着是内核数据至_end
第0页用于保存BIOS检测的硬件信息
0x000a0000 to 0x000fffff保存BIOS例程,即640K到1M
ffff0000 BIOS rom 的首地址
machine_specific_memory_setup( ):内存状况表
检查
----------------------------------------------------------------------------物理
page_size
page_offset:0xC0000000
PMD_SHIFT 22   
内存管理单元(MMU,管理内存把虚拟地址转换为线性地址的硬件)以页为单位进行处理
内核用struct page---include/linux/mm.h结构的代表每个物理页,即每个物理页一个(一段连续地址)
全局指针mem_map指向page数组,在数组里分成三个区

建立块(在到分区)
pglist_date:include/linux/mmzone.h
typedef struct pglist_data {
    zone_t node_zones[MAX_NR_ZONES];指向三个zone分区
    zonelist_t node_zonelists[GFP_ZONEMASK+1];分配策略
        int nr_zones;  // Number of zones in the node
        struct page *node_mem_map;指向具体page节点
    unsigned long *valid_addr_bitmap;
    struct bootmem_data *bdata;
    unsigned long node_start_paddr;
    unsigned long node_start_mapnr;
    unsigned long node_size;
    int node_id;
    struct pglist_data *node_next;
} pg_data_t;
分区:内核为了管理叶而进行的一种逻辑分区struct zone(linux/mmzone.h)
由于外围器件很多,速度多不同,基本上每个空间都有分区,因为同一分区内访问速度相同,即介质均匀,所以在zone之上有个节点即pglist,每个pglist再有分区
zone_DMA(<16)DMA只能访问内存的前16M
 zone_NORMAL(16-896)
zone_HIGHMEM(>896)
typedef struct zone_struct {
    spinlock_t        lock;
    unsigned long       offset;该区在全局页表中的起始页号
    unsigned long        free_pages;
    unsigned long        pages_min, pages_low, pages_high;
    int            need_balance;
    free_area_t        free_area[MAX_ORDER];一组空闲区间队列,管理散的物理页面成块,保持伙伴系统的连续长度页面块  空闲,活跃
    struct pglist_data    *zone_pgdat;
    struct page            *zone_mem_map;
    unsigned long        zone

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值