2

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

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

这个概念目前在技术上是否可行,或者 - 如果已经实现(在软件中) - 有什么值得关注的?

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

更新 2:我希望能够在我自己的用户空间代码中实现压缩和相关逻辑。我只会使用操作系统的工具来创建内存映射。

4

2 回答 2

2

非常如此。VM(虚拟内存)系统旨在处理可以映射的不同类型的对象。事实上,有一个名为cramfs的文件系统,在将压缩数据保存在存储中的意义上做类似的事情,但支持透明的、未压缩的访问。

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

于 2013-06-10T21:21:14.480 回答
1

这是可能的,例如。 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 的内核空间中没有正确实现,但是可以在用户空间中实现类似的东西。

于 2013-06-10T21:10:13.657 回答