【问题标题】:Ways to invoke Linux kernel memory allocation?调用Linux内核内存分配的方法?
【发布时间】:2014-03-16 07:17:53
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: linux-kernel


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2021-10-29
      • 2013-11-06
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多