Мониторинг страниц памяти в Windows / Linux Platform - PullRequest
0 голосов
/ 05 марта 2010

Есть ли способ в Windows / Linux или любой другой операционной системе узнать на уровне команд, вызвал ли доступ к памяти ошибку страницы? Код, который я представляю себе, будет выглядеть примерно так:

    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 ]

1 голос
/ 05 марта 2010

Для Linux самая близкая вещь, которую вы получите, это чтение / proc / self / stat и анализирование нет. ошибок страниц до и после ваших звонков - формат описан здесь: http://linux.die.net/man/5/proc

Имейте в виду, что чтение / разбор этого файла может сам по себе вызвать сбои страниц - по крайней мере, 1 раз, когда вы делаете это, если вы выделяете память для его чтения (например, вызов fopen)

0 голосов
/ 05 марта 2010

В соответствии с документацией Intel для процессора x86 - сбой страницы - прерывание 14. Ядро на низком уровне будет иметь обработчик прерываний, настроенный на перехват этой страницы. Когда это происходит, обработчик прерываний ядра соответствующим образом обрабатывает ситуацию.

Теперь, так как это на уровне гаек и болтов и находится в коде кольца 0, я бы не подумал, что вы действительно можете это контролировать ... вы можете обойти это, создав драйвер, который просто следит за ошибкой страницы (опять же, в зависимости от привилегий ОС и внутренних структур данных, занимаемых ядром), и передачи информации обратно в пространство пользователя ... Я сомневаюсь, что это будет легко раскрыто ...

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...