6

我有大量数据存储在一个文件中。此文件已映射,但在任何时候我都只能访问少量数据。我想了解我的程序的访问模式,以便我可以优化数据的顺序(以便将频繁访问的数据分组到相同的页面中)。目标是减少 mmaped 文件的工作集。

所以,我正在考虑在禁用 R/W 的情况下映射文件。每次读/写尝试都会导致 SEGV。在我的 SEGV 处理程序中,我将记录访问地址并允许程序继续运行。

我可以解码错误地址处的指令,并模拟它的动作(通过相应地修改目标寄存器和内存位置)。

但是,我在某处读到 Linux 无法从 SEGV 中恢复。这是真的?当我的信号处理程序被调用时,我如何向操作系统指示“一切都很好,请在错误指令之后立即继续”?

请注意,我不希望它重做错误指令,因为我会模拟它。

我现在只关心 x86/x64 架构。

谢谢!

4

0 回答 0