c - 没有物理内存分配的虚拟内存分配

标签 c linux memory virtual kernel

我正在开发一个 Linux 内核项目,我需要找到一种在不分配物理内存的情况下分配虚拟内存的方法。例如,如果我使用这个:

char* buffer = my_virtual_mem_malloc(sizeof(char) * 512);

my_virtual_mem_malloc 是我的内核模块实现的新 SYSCALL。写入此缓冲区的所有数据都通过使用套接字存储在文件或其他服务器上(而不是存储在物理内存上)。因此,为了完成这项工作,我需要请求虚拟内存并访问 vm_area_struct 结构以重新定义 vm_ops 结构。

对此你有什么想法吗?

谢谢

最佳答案

这在架构上是不可能的。您可以创建具有写回例程的虚拟机区域,该例程将数据复制到某处,但在某种程度上,您必须分配要写入的物理页。

如果您同意,您可以简单地写一个 FUSE driver ,将其挂载到某处,并从中映射一个文件。如果不是,那么您只需 write(),因为 x86 根本不支持在不分配物理页的情况下重定向写入,在至少。

关于c - 没有物理内存分配的虚拟内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6540253/

相关文章:

c++ - Shmem vs tmpfs vs mmap

python - Gunicorn 没有使用正确的设置文件 Django?

java - 如何获取 Netty 4 应用程序的直接内存快照

python - python 中的多线程 I/O 减慢

c++ - 理解 C++ 指针(当它们指向指针时)

ios - SSL_connect 返回 SSL_ERROR_SYSCALL ,errno == ESRCH

c++ - 解码字符数组

c - 如何使用 C 中的整数对带有字符串的结构进行排序?

c - 一些 "weird"C 代码

linux - 在 bash 中解析文件夹名称