我想知道是否有一种方法可以在我用 mmap() 打开的大型(多 GB)文件的开头附近插入空白页。显然,可以在末尾添加一两页,然后使用 memcpy() 将所有内容向前移动,但这会弄脏每一页,并且在最终刷新到磁盘时需要很长时间。
我猜测解决方案需要在自定义文件系统和页表的手动操作之间进行一些复杂的协调:向 inode 添加一个块,以某种方式更新 VMM 中的缓存页以反映这一点,然后以某种方式将页表调整为匹配。这听起来很重要,这让我想知道是否有更好的方法。
这是一个关于 Linux 上的内存和文件操作的有点深奥的问题,尽管我很高兴听到如何在其他系统中做到这一点。我对涉及使复制更有效的解决方法不是特别感兴趣,尽管需要重新映射但避免磁盘 IO 的技术将是一个好的开始。