如何在Linux中处理小于PAGE_SIZE的内存分配?

时间:2017-08-02 10:47:40

标签: linux linux-kernel operating-system

假设一个进程要求mmap只有50个字节的内存。是否会为此流程分配整个页面?剩下的只是浪费了吗?另外,如何在内核分配函数中处理这个问题,如kmalloc

1 个答案:

答案 0 :(得分:0)

来自man 3p mmap

  

实施在整页上执行映射操作。因此,虽然参数 len不需要满足大小或对齐约束,但实现应在任何映射操作中包括由范围[pa,pa+len)指定的任何部分页面。 / p>

所以,实际上,当你mmap 50个字节时,你实际上会映射整个页面。

关于内核情况,有一个页面分配器(get_free_pages()/alloc_pages()或类似的东西),但它们是低级函数,主要用于内存管理代码。

普通的kmalloc()函数有点类似于用户空间malloc():它将在内部分配整个页面,然后将它们分成较小的部分以供调用者使用。