内核sanitize_e820_map函数详解(征服内存管理模块的起点)

 

原理:
bios探测到的内存段信息可能是以下的情况,内核需要重新整理内存段信息:
*        Sample memory map (w/overlaps):
*           ____22__________________
*           ______________________4_
*           ____1111________________
*           _44_____________________
*           11111111________________
*           ____________________33__
*           ___________44___________
*           __________33333_________
*           ______________22________
*           ___________________2222_
*           _________111111111______
*           _____________________11_
*           _________________4______
*

整理后的内存段信息应该如下:
*        Sanitized equivalent (no overlap):
*           1_______________________
*           _44_____________________
*           ___1____________________
*           ____22__________________
*           ______11________________
*           _________1______________
*           __________3_____________
*           ___________44___________
*           _____________33_________
*           _______________2________
*           ________________1_______
*           _________________4______
*           ___________________2____
*           ____________________33__
*           ______________________4_

所以sanitize_e820_map的主要功能还是内存段排序,还有就是对于重叠的内存段的处理如下:

111111---内存段类型1
  333   ---内存段类型3

由于333的内存类型为3 大于内存类型1,所以覆盖后内存如下:
133311

//下面的函数只介绍核心的几个处理过程:
假设Bios探测到的内存信息如下:
        333
1111111111111
    22222222

int __init sanitize_e820_map(struct e820entry *biosmap, int max_nr_map,
                             u32 *pnr_map)
{

       
        //记录内存段的改变点:即每个内存段的(开始地址:结束地址)
        chgidx = 0;
        for (i = 0; i < old_nr; i++)        {
                if (biosmap.size != 0) {
                        //开始地址              
                        change_point[chgidx]->addr = biosmap.addr;
           

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值