char *p = (char*) mmap(...);
....; /* check if p is not -1 */
a = *p;
При выполнении последнего оператора возникает ошибка страницы. Обработчик ошибок в ядре выделит страницу в физической памяти и скопирует 4 КБ байта из файла на эту страницу, а затем изменит запись страницы. Инструкция, читающая *p
, будет выполнена снова, на этот раз успешно.
Но откуда обработчику ошибок известно имя файла и путь, связанные со страницей. Где хранится имя файла (или fd
)? И смещение в файле.
Что делать, если страница в сегменте данных процесса выгружается (я думаю, в файл подкачки)? Как ядро узнает, откуда копировать, когда страницу нужно будет подкачать позже?