是否可以重载内存映射文件加载器?在页面错误的情况下,Linux内核不会从磁盘加载所请求的数据,而是会调用用户定义的函数,这将填充内存页面。
我想将它用于巨大的压缩光栅文件的内存映射。使用的压缩算法允许快速块解压缩。用户定义的加载函数可以在运行中逐页解压缩文件。
压缩文件是只读的。用户空间解决方案是首选。
答案 0 :(得分:5)
是否可以重载内存映射文件加载器?在页面错误的情况下,Linux内核不会从磁盘加载所请求的数据,而是会调用用户定义的函数,这将填充内存页面。
有可能和一些图书馆这样做。请参阅libsigsegv。
使用以下签名为SIGSEGV
安装sigaction
的信号处理程序:
void sigsegv_handler(int, siginfo_t* si, void*) {
si->si_addr; // Memory location which caused the page fault.
// mmap the missing page and return here
// On error alternatives:
// * restore the previous SIGSEGV handler and return (the default one dumps core), or
// * abort() (dumps core), or
// * _exit(EXIT_FAILURE).
}