首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有物理内存分配的虚拟内存分配

没有物理内存分配的虚拟内存分配
EN

Stack Overflow用户
提问于 2011-06-30 19:45:33
回答 2查看 1.7K关注 0票数 2

我正在处理一个Linux内核项目,我需要找到一种方法来分配虚拟内存,而不需要分配物理内存。例如,如果我使用这个:

代码语言:javascript
复制
char* buffer = my_virtual_mem_malloc(sizeof(char) * 512);

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

你对此有什么想法吗?

thx

EN

回答 2

Stack Overflow用户

发布于 2011-06-30 20:56:11

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

如果您对此没有意见,您可以简单地编写一个保险丝驱动器,将它挂载到某个地方,然后从它映射一个文件。如果不是,那么您只能使用write(),因为x86至少不支持重定向写入而不分配物理页面。

票数 3
EN

Stack Overflow用户

发布于 2017-05-10 09:21:57

有几种方法可以解决这个问题,但大多数方法都要求您首先写入中间内存。

网络文件系统(NFS)

最简单的方法就是让服务器打开某种共享文件系统,如NFS,并使用mmap()将远程文件映射到内存地址。然后,写入该地址实际上将写入OS的页缓存,在页面缓存已满或预定义的系统超时之后,将最终写入远程文件。

分布式共享存储器(DSM)

另一种方法是使用缓存大小非常小的DSM

在计算机科学中,分布式共享内存(DSM)是一种存储体系结构,其中物理分离的内存可以作为一个逻辑上共享的地址空间来处理。 ..。软件DSM系统可以在操作系统中实现,也可以作为编程库来实现,并且可以被认为是底层虚拟内存体系结构的扩展。在操作系统中实现时,这些系统对开发人员是透明的;这意味着底层分布式内存对用户完全隐藏。

这意味着每个虚拟地址在逻辑上映射到远程机器上的虚拟地址,并向其写入将执行以下操作:(a)从远程计算机接收页面并获得独占访问。(b)更新网页数据。(c)释放该页,并在它再次读取该页时将其发送回远程计算机。

在典型的DSM实现中,(c)只会在远程计算机再次读取数据时发生,但您可以从现有的DSM实现开始,并更改行为,以便在本地机器页缓存已满后发送数据。

I/O MMU

..。IOMMU将设备-可见虚拟地址(在此上下文中也称为设备地址或I/O地址)映射到物理地址。

这基本上意味着直接写入网络设备缓冲区,它实际上是为该设备实现另一个驱动程序。这种方法似乎是最复杂的,我看不出这种方法有什么好处。

这种方法实际上不使用任何中间内存,但肯定不建议使用,除非系统有很大的实时需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6540253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档