Ядро Linux в комментариях

Handle_pte_fault


Функция handle_pte_fault пытается выбрать или создать отсутствующую таблицу РТЕ.

Данный вход не был связан ни с одной страницей в физической памяти (строка ) и в действительности даже не был установлен (строка ). Поэтому вызывается функция do_no_page (строка ) для создания нового отображения страницы.

Страница не присутствовала в памяти, но имела отображение, поэтому она должна находиться в пространстве свопинга. Для ее чтения обратно в память вызывается функция do_swap_page (строка ).

Страница присутствовала в памяти, поэтому проблема, вероятно, была связана с тем, что ядро обработало ситуацию нарушения защиты страницы. Вначале функция handle_pte_fault отмечает, что к странице было выполнено обращение, с помощью pte_mkyoung (строка ).

Если это был доступ для записи, а запись на странице не разрешена, функция handle_pte_fault вызывает функцию do_wp_page (строка ). Это именно та функция, которая выполняет копирование при записи, поэтому далее мы ее рассмотрим вкратце.

Это был доступ для записи к странице, предназначенной для записи. Функция handle_pte_fault устанавливает бит страницы «dirty» (грязная), указывая, что она должна быть снова скопирована в пространство свопинга перед ее уничтожением.

Затребованная страница теперь доступна вызвавшей программе для использования, поэтому функция handle_pte_fault возвращает ненулевое значение (а именно 1) для обозначения успешного выполнения.



Содержание раздела