Uso un mmap anónimo para asignar una gran cantidad de memoria. Hay varias páginas contiguas en esto que me gustaría convertir en un búfer de anillo, usando la duplicación de memoria virtual.
Este ejemplo en Wikipedia muestra lo que quiero decir con duplicación de memoria virtual.
Digamos que los primeros 14 bloques a continuación son las páginas de mi trozo gigante. Me gustaría mapear virtualmente las páginas 6 y 7 a otras dos ubicaciones consecutivas.
[0][1][2][3][4][5][6][7][8][9][10][11][12][13].......[6][7][6][7]Mike Ash da un resumen de lo que quiero hacer, pero usando API específicas de mach.
¿Cómo se puede hacer esto en Linux?
Esto no es posible de lograr con mapeos anónimos. Sin embargo, puede usar memfd_create(2) o crear un archivo temporal en tmpfs (para que nunca se almacene en el disco, excepto "intercambiando") y hacer asignaciones compartidas en ese descriptor de archivo, uno al lado del otro.
remap_file_pages(2) es solo un truco de rendimiento y no es más poderoso que las clásicas llamadas mmap/mremap, y tampoco puede operar en mapeos anónimos.
Relacionado:¿Linux mremap sin liberar el mapeo anterior?