在 linux 内核中分配可交换内存

qbt937

Linux 内核中的内存通常是不可交换的内核页面会被换出吗?)。但是,有时允许换出内存很有用。是否可以在 Linux 内核中显式分配可交换内存?我想到的一种方法是创建一个用户空间进程并使用它的内存。有更好的吗?

暂时的

您可以在内部shm共享内存文件系统中创建一个文件

const char *name = "example";
loff_t size = PAGE_SIZE;
unsigned long flags = 0;
struct file *filp = shmem_file_setup(name, size, flags);
/* assert(!IS_ERR(filp)); */

该文件实际上并未链接,因此名称不可见。这些标志可能包括VM_NORESERVE预先跳过记帐,而不是在分配页面时记帐。现在你有一个shmem文件。您可以像这样映射页面:

struct address_space *mapping = filp->f_mapping;
pgoff_t index = 0;
struct page *p = shmem_read_mapping_page(mapping, index);
/* assert(!IS_ERR(filp)); */
void *data = page_to_virt(p);
memset(data, 0, PAGE_SIZE);

还有就是shmem_read_mapping_page_gfp(..., gfp_t)指定页面是如何分配的。完成后不要忘记将页面放回原处。

put_page(p);

同上文件。

fput(filp);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章