如何调用Linux内核内存分配?

时间:2014-03-15 19:51:53

标签: linux-kernel

我正在研究内核内存分配器的工作原理(SLAB和SLUB)。为了欺骗它们,我需要通过用户域程序调用内核内存分配。

显而易见的方法是调用syscall.fork(),它将生成流程实例,内核必须维护PCB结构,这需要相当大的内存空间。

然后我出去了。我不会将我的实验限制为仅调用fork()并使用Systemtap跟踪它们。任何其他方便的方法来做类似的,但可能需要具有各种功能的内核对象(proc_t除外)(其中最重要的是:它们的大小)?

感谢。

1 个答案:

答案 0 :(得分:2)

SLUB只是管理缓存对象的一种有效方式(与SLAB相比)。它或多或少是一回事。您可以阅读here为什么引入SLUB和this链接谈论究竟什么是slab分配器。现在开始跟踪内核中究竟发生了什么以及如何跟踪它:

  1. 更简单但效率低下的方法是阅读源代码,但为此您需要知道从源头开始的位置。
  2. 另一种更准确的方法是编写一个使用kmem_cache_create()分配内存的驱动程序,然后从用户程序中调用它。现在您有一个定义明确的起点,使用kgdb并逐步完成整个序列。