【发布时间】:2012-03-05 15:27:32
【问题描述】:
如果我 mprotect 使用 PROT_NONE 的段并且如果由于写入而发生 SIGSEGV 由 sigaction 和 sa_sigaction 处理,我们将能够使用 @987654325 找到发生故障的地址@的si_addr。但是有没有办法找到试图写入的数据和数据的长度?
我正在尝试这样做,因为我正在为我的项目尝试一种写时复制机制。
【问题讨论】:
-
内核正在执行您在此处告诉它的所有操作,这就是
mprotect()的全部设计目的。如果您想实现 CoW(如答案中所暗示的那样),您可以使用它,但是 期望 频繁的 SEGV 可能不是一个好的设计决策。最好的办法是管理自己的池,不幸的是,这意味着编写自己的分配器。您仍然可以在其中使用malloc(),但孩子们需要使用您提供的那个(以及对应的mprotect())。 -
这不是硬件。我正在尝试将其作为学习过程的一部分并实施持续优化(或者它甚至可能去优化。我不知道。)。一旦我这样做了,我想再次对其进行基准测试 getcontext 和 setcontext
标签: linux copy-on-write mprotect