Искам да настроя манипулатор на сигнали в моето приложение, така че ядрото да изпраща сигнал всеки път, когато обработва прихващане на грешка на страницата. Разбира се, мога да използвам манипулатора на сигнали SIGSEGV
, но това, което наистина ме интересува, е да уловя грешките на страницата, които възникват при копиране при запис. Например след разклонение (не последвано от exec), оригиналният процес ще получи грешка на страницата, ако се опита да пише на някоя страница. Искам да получавам известия за такива грешки в страницата. Как мога да постигна това?
Получавайте сигнал за всяка грешка на страницата
Отговори (1)
грешките на страницата са прекъсвания, обработвани от do_page_fault()
http://www.stillhq.com/pdfdb/000446/data.pdf
Сигналите също генерират прекъсване. Разликата е, че прекъсването на грешката на страницата е векторизирано към кода. Има обяснение какво прави кодът. IMO, винаги генерирането на друго прекъсване в манипулатор на прекъсване е лоша идея.
Кажете ни: Какво се опитвате да постигнете? Не както смятате, че трябва да се направи.
person
jim mcnamara
schedule
21.04.2012
Така че процесът на Linux няма начин да знае кога е възникнала грешка в страницата? Бих искал да отпечатам на stdout адреса, който е причинил всяка грешка на страницата. Това възможно ли е?
- 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