匿名区域是可读/可写保护的,因此每当用户通过指针访问数据时,每个新页面都会导致段错误,我可以捕获它,然后透明地从映射的文件中转换数据并修复权限以允许访问继续进行。到目前为止,这部分工作很好。
然而,有时我会映射非常大的文件(数百GB),并且由于匿名内存代理访问它,很快就会开始占用交换空间,因为匿名页面被放到磁盘上。我的想法是,如果我在写入转换后的数据到匿名页面后能够显式地将其脏位设置为false,则操作系统将仅丢弃它们,并在以后重新访问时按需进行零填充。
但是,要使此方法生效,我认为我必须将脏位设置为false,并说服操作系统在将页面交换出去时将其设置为只读,以便我可以重新捕获随后的段错误并按需重新转换数据。经过一些研究,我认为除非进行内核编程,否则不可能做到这一点,但我想问问是否有更多了解虚拟内存系统的人知道可以实现这一点的方法。
mmap()
该文件,当访问mmap区域以按需创建文件内容时,将调用您的FUSE文件系统。 - caf