Windows / Linux平台中的内存页面监控

时间:2010-03-05 11:03:12

标签: memory-management monitoring

在Windows / Linux或任何其他操作系统中是否有办法在指令级知道,如果内存访问产生了Page Fault?我想象的代码看起来像这样:

    Buffer *buffer = new Buffer();

    ...Do something with the buffer...            
    if(thisProcess.generatedPageFault) {
       ...Do something...
    }

    ...Do something else with the buffer...            
    if(thisProcess.generatedPageFault) {
       ...Do something...
    }

2 个答案:

答案 0 :(得分:1)

对于linux,你最接近的是读取/ proc / self / stat并解析出来 没有。调用之前和之后的页面故障 - 格式如下所述:http://linux.die.net/man/5/proc

请记住,读取/解析该文件本身可能导致页面故障 - 至少是你执行此操作的时间,如果你分配内存来读取它(比如调用fopen

答案 1 :(得分:0)

相应于x86处理器的英特尔documentation - 页面错误是中断14.低级别的内核将设置一个中断处理程序来捕获该页面错误。发生这种情况时,内核的中断处理程序会相应地处理这种情况。

现在,因为这是在螺母和螺栓级别,并且驻留在0环代码中,我不认为你可以实际监控...你可以通过创建一个驱动程序来简单地查看页面错误(再次,取决于内核占用的操作系统权限和内部数据结构),并将信息传递回用户空间......我怀疑这是否容易暴露...

希望这有帮助, 最好的祝福, 汤姆。