Я хочу установить обработчик сигнала в своем приложении, чтобы ядро отправляло сигнал всякий раз, когда оно обрабатывает ловушку ошибки страницы. Конечно, я могу использовать обработчик сигнала SIGSEGV
, но меня больше всего интересует обнаружение ошибок страницы, возникающих при копировании при записи. Например, после разветвления (за которым не следует exec) исходный процесс получит ошибку страницы, если попытается записать на какую-либо страницу. Я хочу получать уведомления о таких ошибках страницы. Как я могу этого добиться?
Получайте сигнал о каждой ошибке страницы
Ответы (1)
ошибки страницы — это прерывания, обрабатываемые do_page_fault()
http://www.stillhq.com/pdfdb/000446/data.pdf
Сигналы также генерируют прерывание. Разница в том, что прерывание по ошибке страницы передается коду. Есть объяснение того, что делает код. ИМО, всегда генерировать другое прерывание в обработчике прерываний - плохая идея.
Расскажите нам: чего вы пытаетесь достичь? Не так, как вы думаете, это должно быть сделано.
person
jim mcnamara
schedule
21.04.2012
Итак, у процесса Linux нет способа узнать, когда произошла ошибка страницы? Я хотел бы напечатать на стандартный вывод адрес, вызвавший ошибку каждой страницы. Это возможно?
- person JohnTortugo; 05.02.2014
Нет. Ошибка страницы — это что-то другое; это не проблема, это действительно ожидаемая функция нормальной обработки: прерывание - ОС вызывается, чтобы что-то сделать - в то время как процесс заблокирован от каких-либо действий - может быть, на несколько микросекунд.
- person jim mcnamara; 06.02.2014
perf stat
/perf record -e page-faults
также может подсчитывать/записывать события ошибки страницы. - person Peter Cordes   schedule 20.02.2019