c - Linux 内核的 free_list 如何初始化为指向空闲页面?

标签 c memory-management linux-kernel

我想了解如何free_list (of free_area of​​ zone) 指向 Linux 内核中的不同空闲页面。任何人都可以解释内核代码中的方式和位置以及它们是如何初始化的吗?
看内核代码好像只有free_list的初始化代码在 zone_init_free_lists() kernel/mm/page_alloc.c 的功能:

for_each_migratetype_order(order, t) { 
INIT_LIST_HEAD(&zone->free_area[order].free_list[t]);
                          zone->free_area[order].nr_free = 0; 
}   

从这个代码 free_list不是指向 free_pages 块 ??**
任何帮助将不胜感激 。**

最佳答案

我知道页面是如何添加到空闲列表中的,这里是 start_kernel() 的函数流。

       start_kernel();
       mm_init()
       mem_init()
       free_all_bootmem()
       free_all_bootmem_core()
       free_all_bootmem_core()
       __free_pages()
       __free_pages_ok()
       free_one_page()
       __free_one_page()

谢谢。

关于c - Linux 内核的 free_list 如何初始化为指向空闲页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25162372/

相关文章:

c++ - 有没有包含 Wii Motion Plus 的好的 Wiimote API (C/C++)?

ios - 对象可能在被释放后被修改

memory-management - 对象类和伴随对象的Kotlin内存分配行为

c - Ubuntu 16.04 是否正式支持 SCHED_DEADLINE?

c - C语言的套接字编程-从服务器向客户端发送文件

c++ - Node.js 6 插件将 Buffer.from() 转换为 const UInt8*

c - 在函数中重新分配后出现段错误

c++ - 哪种内存分配算法最适合性能和时间要求严格的 C++ 应用程序?

linux - 移动 x86_64 linux 程序的虚拟内存空间以方便 ROP 探索

linux - linux内核如何知道在系统调用中作为参数传递的地址无效?