我有大量数据存储在文件中。这个文件是mmap,但我随时只访问少量数据。我想了解我的程序的访问模式,以便我可以优化数据的排序(以便频繁访问数据被分组到相同的页面中)。目标是减少mmaped文件的工作集。
所以,我正在考虑使用禁用的R / W映射文件。每次读/写尝试都会导致SEGV。在我的SEGV处理程序中,我将记录访问地址并允许程序继续。
我可以在错误地址处解码指令,并模拟其操作(通过相应地修改目标寄存器和存储器位置)。
但是,我读到Linux无法从SEGV恢复的地方。这是真的?当我的信号处理程序被调用时,我如何向操作系统表明“一切都很好,请在错误指令后立即继续”?
请注意,我不希望它重做故障指令,因为我会模拟它。
我现在只关心x86 / x64架构。
谢谢!