内存管理 – 多进程内核驱动程序中的内存池
假设我们想在设备驱动程序或模块中维护一个内存池.如何创建该池并可用于多个进程,可以说4个进程,访问此驱动程序/模块.
假设池中有1 MB的内存 当我阅读LDD时,我遇到了api的mempool_create(),但是还有kmalloc. 如果有人做了这样的事情,请分享知识. 我的初始方法是使用kmalloc()分配,然后在打开模块的每个进程的私有对象中维护起始和结束指针. 编辑:谢谢@kikigood花了一些时间.所以根据你的意见,我做这样的事情. 假设我在初始化期间分配了1MB的mempool. atomic_t count =0; open() { if(count >4) return -ENOMEM; count++; } 另外,我在每个进程的私有设备结构中保留一个缓冲区. 如何从池分配一些内存到这个缓冲区. 解决方法
为了创建一个内存池,你需要使用
>内核的slab分配器 要么 通过使用内核的slab分配器,您可以使用: > kmem_cache_create()/ kmem_cache_create(). 要么 > mempool_create() 我认为你自己维护一个池的关键问题是存在创建内存碎片问题的风险,这个问题会很快耗尽内存,即使有大量可用内存,也不能分配大内存块. 使用内核的slab分配器的另一个好处是您可以通过查看/ proc / slab条目来轻松监视内存使用情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |