我知道可以使用内存映射文件,即磁盘上透明地映射到内存的真实文件。据我所知(我还没有用过这些)映射是立即发生的,当操作系统在后台开始“缓存”整个文件时,文件在第一次内存访问时被读取了一部分。
现在:有没有可能在某种程度上滥用这个概念并将内存映射到另一个内存块?假设操作系统提供了这种间接性,那么就可以创建一种返回从内存到内存的映射的compressed_malloc()。返回给调用者的内存很简单,即内存映射范围,它被透明地压缩在内存中,并最终保存在内存中。因此,对于较大的缓冲区,可能只有一部分在运行时(在访问时)被解压缩,而其余的块保持压缩。
这个概念目前在技术上是可行的吗?或者--如果已经(在软件中)实现了--有什么值得关注的东西?
更新1:我或多或少在寻找一些技术上可以实现的东西,而不需要修改操作系统内核本身,或者需要一个虚拟化平台。
更新2:我希望有一些东西可以让我在自己的用户空间代码中实现压缩和相关逻辑。我将只使用操作系统的工具来创建内存映射。
发布于 2013-06-11 05:21:14
完全是这样的。VM (虚拟内存)系统被设计为处理可以映射的不同类型的对象。实际上,有一个名为cramfs的文件系统,它的作用与此类似,它将压缩数据保存在存储中,但支持透明的、未压缩的访问。
您不需要修改内核本身,但必须在内核空间中工作,为这种新的内存映射对象实现VM处理程序。
发布于 2013-06-11 05:10:14
这是可能的,例如。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的内核空间中正确实现,但是类似这样的东西可以在用户空间中实现。
https://stackoverflow.com/questions/17032831
复制相似问题