内核空间中的malloc函数

时间:2016-09-02 14:14:47

标签: kernel malloc driver

我可以在内核空间中使用malloc吗?当我在内存的哪一部分使用kmalloc函数时,会发生分配吗?如果我正在编写驱动程序,那么我在该程序中获取的变量将以与用户空间相同的方式分配,如堆栈中的普通变量函数和初始化和未初始化数据部分中的静态,或者它将位于内存的不同部分,如果它以不同的方式存储,然后存储在哪个存储器中?

请澄清以上事项,我在使用设备驱动程序时遇到问题。

1 个答案:

答案 0 :(得分:1)

好吧,我有使用Windows驱动程序的经验,可能对您不感兴趣。但是,我希望两种操作系统上的情况都相似。

  • 局部变量在堆栈上分配,

  • 内核驱动程序映像的数据部分中的全局/静态数据。

换句话说,与用户空间中的规则相同。在Windows世界中,整个驱动程序映像被放置在所谓的驻留内存块中 - 该块永远不会被分页到磁盘,也不会被移动到另一个物理内存位置。

kmalloc(在WIndows中为ExAllocatePoolXxx)相当于malloc例程,用于分配内存块(通常小于一页)。与用户空间malloc不同,kenrel变体允许您指定其他选项。

例如,ExAllocatePoolXxx例程允许您指定分配的内存块是否需要驻留。 Linux内核变体(kmalloc)似乎提供了更多选项:http://www.makelinux.net/books/lkd2/ch11lev1sec4

如果需要分配大于页面大小的内存块,最好使用其他内核内存分配方法。