В ОС, использующей виртуальную память, каждый процесс имеет таблицу страниц. Каждая таблица страниц сопоставляет страницы виртуальной памяти процесса со страницами физической памяти системы и указывает, действительна ли данная страница в данный момент (загружена в память) или нет.
Предположим, что памяти не хватает, и ОС нужно выбрать страницу для удаления из физической памяти. Для этого есть разные алгоритмы. Например, ФИФО, ЛРУ. Как только ОС выбирает страницу для удаления, как она делает недействительными любые существующие ссылки на страницу?
Если страница-жертва в настоящее время используется активным процессом, то ОС должна аннулировать сопоставление в таблице страниц текущего процесса. Если страница-жертва в настоящее время используется другим процессом, ОС должна аннулировать сопоставление в таблице страниц другого процесса. В любом случае, как ОС определяет, какую таблицу страниц нужно обновить (если она есть), и как она узнает, где находится отображение в этой таблице страниц, не выполняя линейный поиск?
Подробное описание структуры таблицы страниц x86 начинается на слайде 22 этой презентации:
http://www.scs.stanford.edu/12au-cs140/notes/l8.pdf
Я также нашел несколько полезных обзоров виртуальной памяти:
http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/9_VirtualMemory.html http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html
Аналогичный вопрос о переполнении стека без ответа:
как Linux обновляет таблицу страниц после переключения контекста