Когда система виртуальной памяти решила выселить страницу памяти на диск, это иногда упоминается, что в последний раз доступа этой страницы памяти используется для помощи решить, какая страницу выселила. Но какой механизм используется для отслеживания последнего времени доступа к странице памяти?
Я считаю, что TLB только хранит информацию о его текущем наборе страниц не все из них. Или это просто, что ничего нет в TLB игра для выселению в соответствии с этими критериями?
Алгоритм страничного блока регенерации ( PFRA ) в Linux ядре является acutally довольно сложным , и он использует несколько эвристик , чтобы решить , какую страницу выселить. Фактическое решение зависит от многих факторов, но следующие два выделяются.
1. Наименее Недавно использованные (LRU) Списки
Память Linux делится на различные зоны памяти , каждая зона имеет дескриптор зоны и этот дескриптор наряду с другими вещами хранят ссылки на два очень важные списки , а именно активных и неактивных .
Активный список включает в себя страницу, которые были недавно посещенной, в то время как неактивный список включает в себя страницу, которые не получили доступ в течение некоторого времени. Разные кадры страница переходить из одного списка в другой и из списков в зависимости от характера доступа.
2. Page дескрипторные флаги
следующие два флага в дескрипторе страницы позволяет ядру определить, если данная страница включена в один из вышеуказанных списков.
PG_lru - Страница находится в активном или неактивном списке страниц
PG_active -The страница находится в активном списке страниц
Понимание ядра Linux заявляет следующее , когда он описывает , как PFRA фактически использует выше информацию.
Основная идея алгоритма LRU состоит в связывании счетчик, хранящий возраст страницы с каждой страницы в оперативной памяти, то есть интервал времени, прошедшего с момента последнего доступа к странице. Этот счетчик позволяет ПФРЕ вернуть только самую старую страницу любого процесса. Некоторые компьютерные платформы обеспечивают сложную поддержку LRU алгоритмов; †, к сожалению, 80 × 86 процессоров не предлагают такую аппаратную функции, таким образом, ядро Linux не может полагаться на прилавке страницы, которая отслеживает возраст каждой страницы. Чтобы справиться с этим ограничением, Linux использует преимущества Accessed бит, включенные в каждой записи таблицы страниц, которая автоматически устанавливается аппаратно, когда доступ к странице; кроме того, возраст страницы представлен положение дескриптора страницы в одном из двух различных «первых использованных (LRU) списков».