Как ядро узнает, какие страницы в виртуальном адресном пространстве соответствуют выгруженному физическому фрейму страницы?

Рассмотрим следующую ситуацию: ядро исчерпало физическую оперативную память и нуждается в обмене страницей. Он выбирает наименее недавно использованный фрейм страницы и хочет перенести его содержимое на диск и выделить этот фрейм другому процессу.

Что меня беспокоит, так это то, что этот фрейм страницы уже был отображен, вообще говоря, на несколько (идентичных) страниц нескольких процессов. Ядро должно как-то найти все эти процессы и пометить страницу как выгруженную. Как это осуществить?

Спасибо.

РЕДАКТИРОВАТЬ: Иллюстрации к вопросу:

Перед процессами обмена 1 и 2 была общая страница 1, которая находилась в кадре физической памяти 1:

Теперь память в системе исчерпана, и ядро выделяет память для процесса 3, выгрузив страницу 1 из кадра 1 и заменив ее страницей 2. Для этого ему необходимо

1) найти все процессы, ссылаясь на страницу 1 (Процесс 1 и Процесс 2 в нашем случае)

2) изменить их записи в таблице страниц, установив "Настоящее время" бит в 0 и установка местоположения Page 1 в Swap

Итак, я неt получить, как выполняется шаг 1. Ядро не моглоне просто итеративно изучать каждый процессs Таблицы страниц, чтобы найти запись таблицы страниц, указывающую на фрейм 1. Должно быть какое-то обратное отображение между фреймами страницы и записями таблицы страниц.

ОТВЕТ:"

Наиболее значительным и важным изменением в управлении таблицей страниц является введение обратного сопоставления (rmap). Ссылаясь на это какrmap» является преднамеренным, так как это обычное использованиеакроним" и его не следует путать с деревом -rmap, разработанным Риком ван Риелем, которое имеет гораздо больше изменений в стандартной виртуальной машине, чем просто обратное отображение.

В одном предложении rmap предоставляет возможность найти все PTE, которые отображают конкретную страницу, заданную только структурной страницей. В версии 2.4 единственный способ найти все PTE, которые отображают общую страницу, например общую библиотеку с отображением в памяти, - это линейный поиск всех таблиц страниц, принадлежащих всем процессам. Это слишком дорого, и Linux пытается избежать этой проблемы, используя кэш подкачки (см. Раздел 11.4). Это означает, что со многими общими страницами Linux, возможно, придется выгружать целые процессы независимо от возраста страницы и моделей использования. 2.6 вместо этого имеет цепочку PTE, связанную с каждой структурной страницей, которую можно пройти, чтобы удалить страницу из всех таблиц страниц, которые на нее ссылаются. Таким образом, страницы в LRU могут быть заменены интеллектуальным способом, не прибегая к обмену целыми процессами ».

отПонимание управления памятью в Linux "какие'Новое в Linux2.6 "

Ответы на вопрос(1)

Ваш ответ на вопрос