Linux内核初始化高端内存的过程(代码分析)

本文深入解析Linux内核如何在start_kernel()调用mem_init()时,通过set_highmem_pages_init()初始化高端内存。文章详述了遍历zone,检查is_highmem(),使用add_highpages_with_active_regions()和work_with_active_regions()处理活动内存区域,以及add_highpages_work_fn()如何初始化有效页面并释放到伙伴系统的过程。
摘要由CSDN通过智能技术生成

Linux内核初始化高端内存的过程

 

         内核在start_kernel()函数中调用了mem_init()来做所有与内存初始化相关的工作。与初始化高端内存相关的工作在函数set_highmem_pages_init()中完成。下面我们来详细分析一下这个过程。

109 void __init set_highmem_pages_init(void)

110 {

111         struct zone *zone;

112         int nid;        

113

114         for_each_zone(zone) {

115                 unsigned long zone_start_pfn, zone_end_pfn;

116

117                 if (!is_highmem(zone))

118                         continue;

119

120                 zone_start_pfn = zone->zone_start_pfn;

121                 zone_end_pfn = zone_start_pfn + zone->spanned_pages;

122

123                 nid = zone_to_nid(zone);

124                 printk(KERN_INFO "Initializing %s for node %d(%08lx:%08lx)\n",

125                                 zone->name, nid, zone_star

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值