内存分配全解析:多种方法深度剖析
1. 内存分配风险与注意事项
在进行内存分配时,若以 GFP_KERNEL 优先级调用 kmalloc 或底层的 get_free_pages ,不能想当然地认为它们绝对不会失败。尽管大多数情况下如此,但对于内存受限的小型系统,仍可能出现问题。驱动开发者若忽视分配失败的可能性,将给自身或用户带来风险。
kmalloc(GFP_KERNEL) 在内存不足时可能分配失败,不过内核会尽力满足分配请求。然而,过度分配内存会降低系统响应能力。例如,向 scull 设备写入过多数据,会使系统为满足 kmalloc 请求而频繁进行内存交换,导致系统运行缓慢,最终可能使计算机无法使用,甚至无法启动新进程解决问题。虽然 scull 只是示例模块,不用于多用户系统,但开发者仍需谨慎,因为模块属于特权代码,可能会引入新的安全漏洞,如拒绝服务漏洞。
2. 整页分配模块:scullp
为了实际测试页面分配, scullp 模块与其他示例代码一同发布。它是简化版的 scull 模块。 scullp 分配的内存量子是整页或页集, scullp_order 变量默认值为 0,可在编译或加载时指定。
以下是 scullp 分配内存的代码:
超级会员免费看
订阅专栏 解锁全文
985

被折叠的 条评论
为什么被折叠?



