Linux上的环形缓冲区的内存镜像

时间:2014-01-14 11:41:25

标签: linux virtual-memory circular-buffer

我使用匿名mmap来分配一大块内存。在这里有几个连续的页面,我想使用虚拟内存镜像变成一个环形缓冲区。

This example on Wikipedia通过虚拟内存镜像显示了我的意思。

说下面的前14个街区是我巨大的块中的页面。我想将第6页和第7页虚拟地映射到另外两个连续的位置。

[0][1][2][3][4][5][6][7][8][9][10][11][12][13].......[6][7][6][7]

Mike Ash给出了我想做的a rundown,但是使用了特定于机器的API。

如何在Linux上完成?

1 个答案:

答案 0 :(得分:0)

使用匿名映射无法实现。但是,您可以使用memfd_create(2)或在tmpfs上创建一个临时文件(这样就不会将它存储到磁盘上,除非通过“交换”),并且在该文件描述符上彼此相邻地进行共享映射。

remap_file_pages(2)只是一个性能漏洞,没有比传统的mmap / mremap调用强大的功能,它也不能在匿名映射上运行。

相关:Linux mremap without freeing the old mapping?