gpt4 book ai didi

c - 内存区域中每个顺序的空闲页数的初始化

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:36 25 4
gpt4 key购买 nike

我正在通过linux内核中的内存初始化代码,我可以看到空闲的数量内存节点中每个内存区域的每个顺序和迁移类型的页面设置为0。

static void __meminit zone_init_free_lists(struct zone *zone)
{
int order, t;
for_each_migratetype_order(order, t) {
INIT_LIST_HEAD(&zone->free_area[order].free_list[t]);
zone->free_area[order].nr_free = 0;
}
}

我无法弄清楚列表是如何设置为正确状态的,因为哪个顺序有多少个默认值页开始,或者我们从最高顺序的所有条目开始。

在这本书中,我读到了以下内容:

The number of free pages (nr_free) is still currently defined as 0, and this obviously does not reflect the true situation. The correct value is not set until the bootmem allocator is disabled and normal buddy allocation comes into effect.

谁能指出这部分设置为默认起始值​​的实际位置?

非常感谢

最佳答案

有一个调用mem_init(),它标记了mem_map中的空闲区域,并告诉我们有多少内存是空闲的。这是在系统的各个部分在内核镜像之后声明了它们的内存之后完成的。

它进一步调用 free_unused_memmap()free_all_bootmem() api 来释放内存(以页面为单位)并将空闲内存块(以页面为单位)添加到不同的顺序中free_lists

您可以使用 show_free_areas() 打印区域(Normal、Highmem 等)相关信息。

show_free_areas() 在释放所有启动和其他 mem_map 相关内存之前/之后的结果。

之前:

正常免费:0kB ... 目前:778240kB 托管:772160kB ... 等

HighMem free:0kB ... present:270336kB managed:270336kB ... etc

正常:0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 0kB

高内存:0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 0kB

之后:

正常免费:542868kB ... 目前:778240kB 托管:542868kB ... 等

HighMem free:270336kB ... present:270336kB managed:270336kB ... etc

正常: 5*4kB (M) 2*8kB (M) 3*16kB (M) 4*32kB (M) 3*64kB (M) 4*128kB (M) 3*256kB (M) 7*512kB (M) 7*1024kB (M) 9*2048kB (M) 125*4096kB (M) = 542868kB

HighMem: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 66*4096kB (M) = 270336kB

关于c - 内存区域中每个顺序的空闲页数的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21800238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com