内存映射内存是否可能

Is memory-mapped memory possible?

本文关键字:内存 是否 映射      更新时间:2023-10-16

我知道可以使用内存映射文件,即磁盘上的真实文件透明地映射到内存。据我所知(我还没有使用过这些),映射立即发生,文件在第一次内存访问时被部分读取,而操作系统开始在后台"缓存"整个文件。

现在:是否有可能滥用这个概念并将内存映射到另一块内存?假设操作系统提供了这种间接方式,我们可以创建一种compressed_malloc(),它返回从内存到内存的映射。返回给调用者的内存很简单,即在内存中透明压缩并最终保存在内存中的内存映射范围。因此,对于大的缓冲区,有可能只对其中的一部分(在访问时)进行实时解压缩,而其余的块则保持压缩。

这个概念目前在技术上可行吗?或者——如果已经实现了(在软件中)——需要关注什么?

更新1:我或多或少在寻找一些技术上可以实现的东西,而不需要修改操作系统内核本身或需要虚拟化平台。

更新2:我希望有一些东西允许我在我自己的用户空间代码中实现压缩和相关逻辑。我只会使用操作系统的功能来创建内存映射。

确实如此。VM(虚拟内存)系统被设计用来处理可以映射的不同类型的对象。实际上,有一个叫做cramfs的文件系统,它做了类似的事情,它将压缩的数据保存在存储中,但支持透明的、未压缩的访问。

您不需要修改内核本身,但是您必须在内核空间中工作,为这种新的内存映射对象实现VM处理程序。

这是可能的,例如:http://pubs.vmware.com/vsphere-4-esx-vcenter/index.jsp?topic=/com.vmware.vsphere.resourcemanagement.doc_41/managing_memory_resources/c_memory_compression.html

在Linux的内核空间中不能正确地实现,但是在用户空间中可以实现类似的功能。