标签: kmalloc

vmalloc和kmalloc有什么区别?

我已经google了一下,发现大多数人都主张使用kmalloc,因为你可以保证获得连续的物理内存块.但是,kmalloc如果找不到您想要的连续物理块,它似乎也会失败.
拥有一块连续的内存块有什么好处?具体来说,为什么我需要在系统调用中拥有连续的物理内存块?我有什么理由不能使用吗? 最后,如果我在处理系统调用期间分配内存,我应该指定吗?系统调用是在原​​子上下文中执行的吗?vmalloc
GFP_ATOMIC

GFP_ATOMIC
分配是高优先级的,不会睡眠.这是在中断处理程序,下半部分和其他无法睡眠的情况下使用的标志.

GFP_KERNEL 这是正常分配,可能会阻止.这是在安全睡眠时在进程上下文代码中使用的标志.

c linux-kernel vmalloc kmalloc

107
推荐指数
5
解决办法
10万
查看次数

GFP在kmalloc标志中的含义是什么?

GFPflags in 是什么意思kmalloc?例如GFP_KERNEL,GFP_ATOMIC

linux-kernel kmalloc

14
推荐指数
1
解决办法
9997
查看次数

用于多个进程的内核驱动程序中的内存池

假设我们想要在设备驱动程序或模块中维护一个内存池.如何创建该池并使其可用于多个进程,可以说4个进程,访问此驱动程序/模块.

假设池中有1 MB内存.

当我读LDD时,我遇到了api的mempool_create(),但之后还有kmalloc.

如果有人做了这样的事情,请分享知识.

我最初的方法是使用kmalloc()进行分配,然后为打开模块的每个进程维护私有对象中的开始和结束指针.

编辑:谢谢@kikigood花了一些时间在这上面.所以基于你的评论,我做了这样的事情.

假设我在初始化期间分配了1MB的mempool.我想将进程数限制为4,所以我保持计数.每次都增加这个数量

atomic_t count =0;
    open()
    { 
        if(count >4) 
            return -ENOMEM;
        count++; 
    } 
Run Code Online (Sandbox Code Playgroud)

我还在每个进程的私有设备结构中维护一个缓冲区.

如何将池中的某些内存分配给此缓冲区.

memory-management kernel-module linux-device-driver linux-kernel kmalloc

10
推荐指数
1
解决办法
742
查看次数

来自 kzalloc 的 memset 中的 Linux 内核空指针取消引用

很偶然地在内核丛林中偶然发现了一些代码并且有点困惑。有两种实现kzalloc():在tools/virtio/linux/kernel.h 中,主要的在linux/slab.h 中。显然,在大多数情况下,使用第二个。但有时使用“virtio” kzalloc()

“virtio”kzalloc()看起来像这样:

static inline void *kzalloc(size_t s, gfp_t gfp)
{
    void *p = kmalloc(s, gfp);

    memset(p, 0, s);
    return p;
}
Run Code Online (Sandbox Code Playgroud)

我的困惑是kmalloc()在“tools”目录中使用的“fake”会返回 NULL 指针。此外,该memset()实现似乎不检查 NULL 指针,因此可能存在 NULL 指针取消引用。这是一个错误还是我错过了什么?

c linux memset linux-kernel kmalloc

7
推荐指数
1
解决办法
485
查看次数

由kmalloc()分配的内存是否自动释放?

我正在编写一个设备驱动程序,除其他外,它分配一块内存kmalloc.用户程序关闭文件时释放此内存.在我的一个实验中,用户程序在没有关闭文件的情况下崩溃.

有什么东西可以释放这段记忆吗?

在另一个实验中,我将函数kfree()close()函数移动到module_exit()函数.当我连续两次运行用户程序时,我kmalloc再次使用与之前相同的指针进行调用,而不是先将其释放.因此,我丢失了指向该内存的指针,并且无法释放它.

在我重新启动之前,这个内存是否会丢失到系统中,或者在我卸载驱动程序时它是否会被释放?

linux kernel device-driver linux-kernel kmalloc

6
推荐指数
2
解决办法
2612
查看次数

kmalloc 中 GFP_USER 标志的用途是什么?

据我了解,GFP_USER标志中的使用(在对 的调用中kmalloc)用于为用户空间分配内存。这是否意味着分配的页面位于用户可以访问的内核空间中?这些页面是否需要mmapp在用户空间中编辑,或者用户可以直接访问该地址。如果他们需要,mmapp那么GFP_USER和之间有什么区别GFP_KERNEL

linux linux-kernel embedded-linux kmalloc

4
推荐指数
1
解决办法
3437
查看次数