重载内存映射文件加载器(C ++)

时间:2015-02-20 04:03:07

标签: c++ linux

是否可以重载内存映射文件加载器?在页面错误的情况下,Linux内核不会从磁盘加载所请求的数据,而是会调用用户定义的函数,这将填充内存页面。

我想将它用于巨大的压缩光栅文件的内存映射。使用的压缩算法允许快速块解压缩。用户定义的加载函数可以在运行中逐页解压缩文件。

压缩文件是只读的。用户空间解决方案是首选。

1 个答案:

答案 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).
}