stringtranslate.com

Алгоритм замены страниц

В операционной системе компьютера , которая использует подкачку для управления виртуальной памятью , алгоритмы замены страниц решают, какие страницы памяти выгружать (иногда это называется выгрузкой) или записывать на диск, когда необходимо выделить страницу памяти. Замена страницы происходит, когда запрошенная страница отсутствует в памяти ( ошибка страницы ), а свободная страница не может быть использована для выполнения распределения либо потому, что ее нет, либо потому, что количество свободных страниц ниже некоторого порога.

Когда страница, которая была выбрана для замены и выгружена, обращается снова, ее необходимо выгрузить (прочитать с диска), и это включает ожидание завершения ввода-вывода. Это определяет качество алгоритма замены страниц: чем меньше время ожидания загрузки страниц, тем лучше алгоритм. Алгоритм замены страниц анализирует ограниченную информацию о доступе к страницам, предоставляемую аппаратным обеспечением, и пытается угадать, какие страницы следует заменить, чтобы минимизировать общее количество промахов страниц, балансируя это с затратами (основное хранилище и время процессора) на сам алгоритм.

Проблема замены страниц является типичной онлайн-проблемой с точки зрения конкурентного анализа в том смысле, что известен оптимальный детерминированный алгоритм.

История

Алгоритмы замены страниц были горячей темой исследований и дискуссий в 1960-х и 1970-х годах. В основном это закончилось разработкой сложных аппроксимаций LRU (наименее используемых в последнее время) и алгоритмов рабочего набора . С тех пор некоторые основные предположения, сделанные традиционными алгоритмами замены страниц, оказались недействительными, что привело к возобновлению исследований. В частности, на производительность алгоритмов замены страниц повлияли следующие тенденции в поведении базового оборудования и программного обеспечения пользовательского уровня:

Требования к алгоритмам замены страниц изменились из-за различий в архитектуре ядра операционной системы . В частности, большинство современных ядер ОС имеют унифицированные кэши виртуальной памяти и файловой системы, что требует от алгоритма замены страниц выбора страницы среди страниц как виртуальных адресных пространств пользовательских программ, так и кэшированных файлов. Последние страницы имеют специфические свойства. Например, они могут быть заблокированы или иметь требования к порядку записи, налагаемые журналированием . Более того, поскольку целью замены страниц является минимизация общего времени ожидания памяти, она должна учитывать требования к памяти, предъявляемые другими подсистемами ядра, которые выделяют память. В результате замена страниц в современных ядрах ( Linux , FreeBSD и Solaris ) имеет тенденцию работать на уровне распределителя памяти ядра общего назначения, а не на более высоком уровне подсистемы виртуальной памяти.

Локальная и глобальная замена

Алгоритмы замены могут быть локальными или глобальными.

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

Замена локальных страниц предполагает некоторую форму разделения памяти, которая определяет, сколько страниц должно быть назначено данному процессу или группе процессов. Наиболее популярными формами секционирования являются алгоритмы фиксированного секционирования и сбалансированного набора, основанные на модели рабочего набора . Преимущество локальной замены страниц заключается в ее масштабируемости: каждый процесс может обрабатывать ошибки своих страниц независимо, что приводит к более стабильной производительности этого процесса. Однако глобальная замена страниц более эффективна в целом по системе. [1]

Определение страниц, на которые ссылаются и которые изменяются.

Современные компьютеры общего назначения и некоторые встроенные процессоры поддерживают виртуальную память . Каждый процесс имеет собственное виртуальное адресное пространство. Таблица страниц сопоставляет подмножество виртуальных адресов процесса с физическими адресами. Кроме того, в большинстве архитектур таблица страниц содержит бит «доступа» и бит «грязи» для каждой страницы в таблице страниц. ЦП устанавливает бит доступа, когда процесс читает или записывает память на этой странице. ЦП устанавливает грязный бит, когда процесс записывает память на этой странице. Операционная система может изменять биты доступа и «грязные» биты. Операционная система может обнаруживать доступ к памяти и файлам следующими способами:

Предварительная очистка

Большинство алгоритмов замены просто возвращают целевую страницу в качестве результата. Это означает, что если целевая страница загрязнена (то есть содержит данные, которые необходимо записать в стабильное хранилище, прежде чем страницу можно будет вернуть), необходимо инициировать ввод-вывод для отправки этой страницы в стабильное хранилище (чтобы очистить страницу). ). На заре виртуальной памяти время, затрачиваемое на очистку, не вызывало особого беспокойства, поскольку виртуальная память впервые была реализована в системах с полнодуплексными каналами к стабильному хранилищу, и очистка обычно перекрывалась подкачкой. С другой стороны, современное аппаратное обеспечение не поддерживает полнодуплексную передачу, и очистка целевых страниц становится проблемой.

Чтобы справиться с этой ситуацией, применяются различные политики предварительной очистки . Предварительная очистка — это механизм, который запускает ввод-вывод на грязных страницах, которые (вероятно) скоро будут заменены. Идея состоит в том, что к тому моменту, когда предварительно очищенная страница действительно будет выбрана для замены, ввод-вывод завершится и страница станет чистой. Предварительная очистка предполагает, что можно определить страницы, которые будут заменены в дальнейшем . Слишком активная предварительная очистка может привести к потере пропускной способности ввода-вывода из-за записи страниц, которые успеют повторно загрязниться, прежде чем будут выбраны для замены.

Проблема (h,k)-страницы

Проблема (h,k)-пейджинга является обобщением модели проблемы пейджинга: пусть h,k — положительные целые числа такие, что . Мы измеряем производительность алгоритма с размером кэша относительно теоретически оптимального алгоритма замены страниц. Если , мы обеспечиваем оптимальный алгоритм замены страниц со строго меньшим ресурсом.

Проблема (h,k)-пейджинга — это способ измерения эффективности онлайн-алгоритма путем сравнения его с производительностью оптимального алгоритма, в частности, с отдельной параметризацией размера кэша онлайн-алгоритма и оптимального алгоритма.

Алгоритмы маркировки

Алгоритмы маркировки — это общий класс алгоритмов пейджинга. Для каждой страницы мы связываем ее с битом, называемым ее меткой. Изначально мы устанавливаем все страницы как немаркированные. На этапе (периоде работы или последовательности запросов) запросов страниц мы отмечаем страницу, когда она впервые запрашивается на этом этапе. Алгоритм маркировки — это такой алгоритм, который никогда не распечатывает отмеченную страницу.

Если ALG — алгоритм маркировки с кэшем размера k, а OPT — оптимальный алгоритм с кэшем размера h, где , то ALG -конкурентоспособен. Таким образом, каждый алгоритм маркировки достигает коэффициента -конкурентности.

LRU — это алгоритм маркировки, а FIFO — не алгоритм маркировки.

Консервативные алгоритмы

Алгоритм является консервативным, если в любой последовательной последовательности запросов, содержащей k или менее различных ссылок на страницы, алгоритм вызовет k или меньше ошибок страницы.

Если ALG — консервативный алгоритм с кешем размера k, а OPT — оптимальный алгоритм с кешем , то ALG является -конкурентным. Таким образом, каждый консервативный алгоритм достигает коэффициента -конкурентности.

LRU, FIFO и CLOCK — консервативные алгоритмы.

Алгоритмы замены страниц

Существует множество алгоритмов замены страниц: [2]

Теоретически оптимальный алгоритм замены страниц

Теоретически оптимальный алгоритм замены страниц (также известный как OPT, алгоритм ясновидения или оптимальная политика замены страниц Белади ) [3] [4] [2] представляет собой алгоритм, который работает следующим образом: когда страницу необходимо заменить, операционная система заменяет страницу, следующее использование которой произойдет в ближайшем будущем. Например, страница, которая не будет использоваться в течение следующих 6 секунд, будет заменена страницей, которая будет использоваться в течение следующих 0,4 секунды.

Этот алгоритм не может быть реализован в операционной системе общего назначения, поскольку невозможно надежно вычислить, сколько времени пройдет до того, как страница будет использована, за исключением случаев, когда все программное обеспечение, которое будет работать в системе, известно заранее и поддается использованию. статический анализ шаблонов ссылок на память или только класс приложений, допускающий анализ во время выполнения. Несмотря на это ограничение, существуют алгоритмы [5] , которые могут обеспечить почти оптимальную производительность — операционная система отслеживает все страницы, на которые ссылается программа, и использует эти данные, чтобы решить, какие страницы следует вставлять и вынимать при последующих запусках. Этот алгоритм может обеспечить почти оптимальную производительность, но не при первом запуске программы и только в том случае, если шаблон обращения к памяти программы относительно последователен при каждом запуске.

Анализ проблемы пейджинга также проводился в области онлайн-алгоритмов . Эффективность рандомизированных онлайн-алгоритмов для решения проблемы пейджинга измеряется с помощью амортизированного анализа .

Недавно не использовался

Алгоритм замены недавно использованных страниц (NRU) — это алгоритм, который предпочитает сохранять в памяти страницы, которые недавно использовались. Этот алгоритм работает по следующему принципу: когда на страницу ссылаются, для этой страницы устанавливается бит ссылки, отмечая ее как ссылочную. Аналогично, когда страница модифицируется (записывается), устанавливается модифицированный бит. Установка битов обычно выполняется аппаратно, хотя это можно сделать и на программном уровне.

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

3. указанный, измененный
2. ссылка, не измененная
1. не упоминается, изменено
0. не упоминается, не изменяется

Хотя кажется невозможным, чтобы страница была изменена, но на нее не было ссылки, это происходит, когда на странице класса 3 бит ссылки очищается прерыванием таймера. Алгоритм NRU выбирает для удаления случайную страницу из самой низкой категории. Таким образом, из четырех вышеупомянутых категорий страниц алгоритм NRU заменит страницу, на которую нет ссылки и которые не будут изменены, если такая страница существует. Обратите внимание, что этот алгоритм подразумевает, что измененная, но не вызываемая ссылками (в пределах последнего интервала таймера) страница менее важна, чем неизмененная страница, на которую часто ссылаются.

НРУ — это алгоритм маркировки, поэтому он конкурентоспособен.

Первым прибыл, первым обслужен

Самый простой алгоритм замены страниц — это алгоритм FIFO. Алгоритм замены страниц в порядке очереди (FIFO) — это алгоритм с низкими издержками, который не требует особого учета со стороны операционной системы . Идея очевидна из названия — операционная система отслеживает все страницы в памяти в очереди, причем самые последние поступления располагаются сзади, а самые старые — впереди. Когда страницу необходимо заменить, выбирается страница в начале очереди (самая старая страница). Хотя метод FIFO дешев и интуитивно понятен, на практике он работает плохо. Таким образом, он редко используется в неизмененном виде. В этом алгоритме наблюдается аномалия Белади . Проще говоря, при страничном сбое заменяется кадр, который находился в памяти дольше всего.

Алгоритм замены страниц FIFO используется операционной системой OpenVMS с некоторыми изменениями. [6] Частичный второй шанс предоставляется за счет пропуска ограниченного числа записей с действительными ссылками на таблицу перевода, [7] и, кроме того, страницы перемещаются из рабочего набора процесса в общесистемный пул, из которого они могут быть восстановлены, если они еще не использовались повторно. .

FIFO — консервативный алгоритм, поэтому он конкурентоспособен.

Второй шанс

Модифицированная форма алгоритма замены страниц FIFO, известная как алгоритм замены страниц второго шанса, работает относительно лучше, чем FIFO, при небольших затратах на улучшение. Он работает, просматривая начало очереди, как это делает FIFO, но вместо немедленной выгрузки этой страницы по страницам он проверяет, установлен ли ее ссылочный бит. Если он не установлен, страница заменяется. В противном случае бит ссылки очищается, страница вставляется в конец очереди (как если бы это была новая страница), и этот процесс повторяется. Это также можно рассматривать как круговую очередь. Если на всех страницах установлен ссылочный бит, то при втором обнаружении первой страницы в списке эта страница будет заменена, так как теперь ссылочный бит сброшен. Если на всех страницах ссылочный бит очищен, то алгоритм второго шанса вырождается в чистый FIFO.

Как следует из названия, «Второй шанс» дает каждой странице «второй шанс» — старая страница, на которую была ссылка, вероятно, используется, и ее не следует заменять новой страницей, на которую не было ссылки.

Часы

Clock — более эффективная версия FIFO, чем Second-chance, поскольку страницы не нужно постоянно перемещать в конец списка, но он выполняет ту же общую функцию, что и Second-Chance. Алгоритм часов хранит в памяти круговой список страниц, при этом «рука» (итератор) указывает на последний просмотренный кадр страницы в списке. Когда происходит ошибка страницы и пустых кадров не существует, бит R (ссылка) проверяется в местоположении руки. Если R равен 0, новая страница помещается на место страницы, на которую указывает «рука», и стрелка перемещается на одну позицию. В противном случае бит R очищается, затем увеличивается стрелка часов, и процесс повторяется до тех пор, пока страница не будет заменена. [8] Этот алгоритм был впервые описан в 1969 году Фернандо Х. Корбато . [9]

Варианты часов

CLOCK — консервативный алгоритм, поэтому он конкурентоспособен.

Последний раз использовался

Алгоритм замены наименее недавно использованных страниц (LRU), хотя и похож по названию на NRU, отличается тем, что LRU отслеживает использование страниц за короткий период времени, тогда как NRU просто просматривает использование за последний тактовый интервал. LRU исходит из того, что страницы, которые наиболее интенсивно использовались в последних нескольких инструкциях, скорее всего, будут активно использоваться и в следующих нескольких инструкциях. Хотя LRU в теории может обеспечить почти оптимальную производительность (почти такую ​​же, как адаптивный кэш замены ), его реализация на практике обходится довольно дорого. Существует несколько методов реализации этого алгоритма, которые пытаются снизить стоимость, сохраняя при этом как можно большую производительность.

Самым дорогим методом является метод связанного списка, который использует связанный список, содержащий все страницы в памяти. В конце этого списка находится страница, которая использовалась реже всего, а в начале — страница, которая использовалась в последний раз. Цена этой реализации заключается в том, что элементы списка придется перемещать при каждом обращении к памяти, а это очень трудоемкий процесс.

Другой метод, требующий аппаратной поддержки, заключается в следующем: предположим, что аппаратное обеспечение имеет 64-битный счетчик, который увеличивается при каждой инструкции. При каждом обращении к странице она получает значение, равное счетчику на момент доступа к странице. Всякий раз, когда страницу необходимо заменить, операционная система выбирает страницу с наименьшим счетчиком и заменяет ее.

Из-за затрат на реализацию можно рассмотреть алгоритмы (подобные приведенным ниже), похожие на LRU, но предлагающие более дешевую реализацию.

Одним из важных преимуществ алгоритма LRU является то, что он поддается полному статистическому анализу. Было доказано, например, что LRU никогда не может привести к увеличению количества ошибок страниц более чем в N раз, чем алгоритм OPT, где N пропорционально количеству страниц в управляемом пуле.

С другой стороны, слабость LRU заключается в том, что его производительность имеет тенденцию ухудшаться при многих довольно распространенных эталонных шаблонах. Например, если в пуле LRU имеется N страниц, приложение, выполняющее цикл над массивом из N + 1 страниц, будет вызывать ошибку страницы при каждом доступе. Поскольку циклы в больших массивах являются обычным явлением, было приложено много усилий для модификации LRU, чтобы он лучше работал в таких ситуациях. Многие из предлагаемых модификаций LRU пытаются обнаружить шаблоны зацикливания и переключиться на подходящий алгоритм замены, такой как «Самый последний использованный» (MRU).

Варианты LRU

  1. LRU-K [16] удаляет страницу, K-й последний доступ к которой находится дальше всего в прошлом. Например, LRU-1 — это просто LRU, тогда как LRU-2 удаляет страницы в соответствии со временем их предпоследнего доступа. LRU-K значительно превосходит LRU в отношении локальности во времени.
  2. Алгоритм ARC [17] расширяет LRU, сохраняя историю недавно удаленных страниц и использует ее для изменения предпочтения недавнего или частого доступа. Он особенно устойчив к последовательному сканированию.
  3. Алгоритм 2Q [18] совершенствует алгоритмы LRU и LRU/2. Имея две очереди: одну для элементов горячего пути, а другую для элементов медленного пути, элементы сначала помещаются в очередь медленного пути, а после второго доступа к элементам, помещенным в элементы горячего пути. Поскольку ссылки на добавленные элементы сохраняются дольше, чем в алгоритмах LRU и LRU/2, он имеет лучшую очередь горячего пути, что повышает скорость попадания в кеш.

Сравнение ARC с другими алгоритмами (LRU, MQ, 2Q, LRU-2, LRFU, LIRS ) можно найти в Megiddo & Modha 2004. [19]

LRU — это алгоритм маркировки, поэтому он конкурентоспособен.

Случайный

Алгоритм случайной замены заменяет случайную страницу в памяти. Это устраняет накладные расходы на отслеживание ссылок на страницы. Обычно он работает лучше, чем FIFO, а для циклических обращений к памяти он лучше, чем LRU, хотя на практике LRU обычно работает лучше. OS/390 использует глобальную аппроксимацию LRU и возвращается к случайной замене, когда производительность LRU ухудшается, а процессор Intel i860 использовал политику случайной замены (Rhodehamel 1989 [20] ).

Не часто используется (NFU)

Для редко используемого алгоритма замены страниц (NFU) требуется счетчик, и каждая страница имеет один собственный счетчик, который изначально установлен на 0. В каждом тактовом интервале счетчик всех страниц, на которые ссылались в этом интервале, будет увеличиваться на 1. По сути, счетчики отслеживают, как часто использовалась страница. Таким образом, страницу с наименьшим счетчиком можно при необходимости заменить.

Основная проблема NFU заключается в том, что он отслеживает частоту использования без учета продолжительности использования. Таким образом, в многопроходном компиляторе страницы, которые интенсивно использовались во время первого прохода, но не нужны во втором проходе, будут иметь преимущество над страницами, которые сравнительно мало используются во втором проходе, поскольку у них более высокие счетчики частоты. Это приводит к плохой производительности. Существуют и другие распространенные сценарии, в которых NFU будет работать аналогичным образом, например, при загрузке ОС. К счастью, существует аналогичный и лучший алгоритм, и его описание приведено ниже.

Редко используемый алгоритм замены страниц генерирует меньше ошибок страниц, чем наименее используемый алгоритм замены страниц, когда таблица страниц содержит значения нулевого указателя.

Старение

Алгоритм старения является потомком алгоритма NFU с модификациями, позволяющими учитывать временной интервал использования. Вместо того, чтобы просто увеличивать счетчики страниц, на которые имеются ссылки, уделяя одинаковое внимание ссылкам на страницы независимо от времени, счетчик ссылок на странице сначала сдвигается вправо (делится на 2), а затем добавляется бит ссылки слева от этого двоичного числа. Например, если страница ссылалась на биты 1,0,0,1,1,0 за последние 6 тактов, ее счетчик ссылок будет выглядеть следующим образом в хронологическом порядке: 10000000, 01000000, 00100000, 10010000, 11001000, 01100100. Ссылки на страницы, сделанные ближе к настоящему времени, имеют большее влияние, чем ссылки на страницы давным-давно. Это гарантирует, что страницы, на которые ссылаются позже, хотя и реже, будут иметь более высокий приоритет по сравнению со страницами, на которые чаще ссылались в прошлом. Таким образом, когда страницу необходимо заменить, будет выбрана страница с наименьшим счетчиком.

Следующий код Python имитирует алгоритм старения. Счетчики инициализируются с помощью0 и обновляется, как описано выше , с помощью операторов арифметического сдвига .

из  коллекции.abc  Импортировать  последовательностьdef  Simulate_aging ( Rs :  Sequence ,  k :  int )  ->  None :  # Имитировать старение  print ( " t | R-bits (0- {length} ) | Счетчики для страниц 0- {length} " . format ( length = len ( Rs )))  Vs  =  [ 0 ]  *  len ( Rs [ 0 ])  для  t ,  R  в  перечислении ( Rs ):  Vs [:]  =  [ R [ i ]  <<  ( k  -  1 )  |  V  >>  1  для  i ,  V  в  перечислении ( Vs )]  print ( " {:02d}  | {}  | [ {} ]" . format ( t ,  R ,  ", " . join ([ "{:0 {} b}" . формат ( V ,  k )  для  V  в  Vs ])))

В данном примере R-битов для 6 страниц за 5 тактов функция печатает следующий вывод, в котором перечислены R-биты для каждого такта t и отдельные значения счетчика для каждой страницы в двоичном представлении. [21]

>>> Rs  =  [[ 1 , 0 , 1 , 0 , 1 , 1 ],  [ 1 , 1 , 0 , 0 , 1 , 0 ], [ 1 , 1 , 0 , 1 , 0 , 1 ], [ 1 , 0 , 0 , 0 , 1 , 0 ], [ 0 , 1 , 1 , 0 , 0 , 0 ]] >>> k = 8 >>> моделирования_старения ( Rs , k ) t | R-биты (0-5) | Счетчики страниц 0-5 00 | [1, 0, 1, 0, 1, 1] | [10000000, 00000000, 10000000, 00000000, 10000000, 10000000] 01 | [1, 1, 0, 0, 1, 0] | [11000000, 10000000, 01000000, 00000000, 11000000, 01000000] 02 | [1, 1, 0, 1, 0, 1] | [11100000, 11000000, 00100000, 10000000, 01100000, 10100000] 03 | [1, 0, 0, 0, 1, 0] | [11110000, 01100000, 00010000, 01000000, 10110000, 01010000] 04 | [0, 1, 1, 0, 0, 0] | [01111000, 10110000, 10001000, 00100000, 01011000, 00101000]      

Обратите внимание, что старение отличается от LRU в том смысле, что старение может отслеживать только ссылки в самых последних версиях.16/32 (в зависимости от разрядности целых чисел процессора) временных интервалов. Следовательно, две страницы могут ссылаться на счетчики 00000000, даже если к одной странице обращались 9 интервалов назад, а к другой — 1000 интервалов назад. Вообще говоря, знания использования в течение последних 16 интервалов достаточно для принятия правильного решения о том, какую страницу заменить. Таким образом, старение может обеспечить почти оптимальную производительность за умеренную цену.

Алгоритм замены страниц наибольшего расстояния (LDF)

Основная идея этого алгоритма — это локальность ссылки, используемая в LRU, но разница в том, что в LDF локализация основана на расстоянии, а не на используемых ссылках. В LDF замените страницу, которая находится на самом большом расстоянии от текущей страницы. Если две страницы находятся на одинаковом расстоянии, то страница, следующая за текущей при вращении против часовой стрелки, будет заменена. [ нужна цитата ]

Детали реализации

Методы для аппаратного обеспечения без ссылочного бита

Многие из рассмотренных выше методов предполагают наличие ссылочного бита, связанного с каждой страницей. Некоторое оборудование не имеет такого бита, поэтому его эффективное использование требует методов, которые хорошо работают без него.

Одним из ярких примеров является оборудование VAX под управлением OpenVMS . Эта система знает, была ли страница изменена, но не обязательно, была ли она прочитана. Этот подход известен как кэширование вторичных страниц. Страницы, удаленные из рабочих наборов (обычно из частной памяти процесса), помещаются в списки специального назначения, оставаясь в физической памяти в течение некоторого времени. Удаление страницы из рабочего набора технически не является операцией замены страницы, но фактически идентифицирует эту страницу как кандидата. Страница, резервное хранилище которой все еще действует (содержимое которой не загрязнено и не нуждается в сохранении иным образом), помещается в конец списка свободных страниц. Страница, требующая записи в резервное хранилище, будет помещена в список измененных страниц. Эти действия обычно запускаются, когда размер списка свободных страниц падает ниже регулируемого порога.

Страницы для удаления из рабочего набора могут выбираться по существу случайным образом, с ожиданием, что в случае неудачного выбора будущая ссылка может извлечь эту страницу из списка свободных или измененных до того, как она будет удалена из физической памяти. Страница, на которую ссылаются таким образом, будет удалена из списка «Свободные» или «Измененные» и возвращена в рабочий набор процесса. Модифицированный список страниц дополнительно предоставляет возможность записывать страницы во резервное хранилище группами по несколько страниц, что повышает эффективность. Эти страницы затем можно будет поместить в список бесплатных страниц. Последовательность страниц, которая попадает в начало списка свободных страниц, напоминает результаты работы механизма LRU или NRU, а общий эффект имеет сходство с алгоритмом второго шанса, описанным ранее.

Другой пример используется ядром Linux на ARM . Недостаток аппаратной функциональности компенсируется предоставлением двух таблиц страниц — таблиц страниц, собственных для процессора, без ссылочных и «грязных» битов , и таблиц страниц, поддерживаемых программным обеспечением с наличием необходимых битов. Эмулируемые биты в поддерживаемой программным обеспечением таблице устанавливаются в результате ошибок страницы. Чтобы получить ошибки страницы, очистка эмулируемых битов во второй таблице отменяет некоторые права доступа к соответствующей странице, что реализуется путем изменения собственной таблицы.

Кэш страниц в Linux

Linux использует единый страничный кеш для

Единый страничный кэш работает с блоками страниц наименьшего размера, поддерживаемыми ЦП (4 КиБ в ARMv8 , x86 и x86-64 ), при этом некоторые страницы следующего большего размера (2 МБ в x86-64 ) называются «огромными страницами». Линукс. Страницы в страничном кэше разделены на «активный» и «неактивный» набор. Оба набора хранят список страниц LRU. В основном случае, когда к странице обращается программа пользовательского пространства, она помещается в заголовок неактивного набора. При повторном доступе к нему он перемещается в активный список. Linux перемещает страницы из активного набора в неактивный набор по мере необходимости, чтобы активный набор был меньше неактивного набора. Когда страница перемещается в неактивный набор, она удаляется из таблицы страниц любого адресного пространства процесса без выгрузки из физической памяти. [22] [23] Когда страница удаляется из неактивного набора, она выгружается из физической памяти. Размер списка «активных» и «неактивных» можно запросить из /proc/meminfoполей «Активный», «Неактивный», «Активный(анон)», «Неактивный(анон)», «Активный(файл)» и «Неактивный». (файл)".

Рабочий набор

Рабочий набор процесса — это набор страниц, которые, как ожидается, будут использоваться этим процессом в течение некоторого интервала времени.

«Модель рабочего набора» не является алгоритмом замены страниц в строгом смысле этого слова (на самом деле это своего рода среднесрочный планировщик ) [ необходимы пояснения ]

Рекомендации

  1. ^ Белл, Джон. «Примечания к курсу операционных систем: виртуальная память». Университет Иллинойса в Чикагском инженерном колледже . Архивировано из оригинала 23 сентября 2018 года . Проверено 21 июля 2017 г.
  2. ^ Аб Джонс, Дуглас В. «22C:116 Конспект лекций». Факультет компьютерных наук Университета Айовы . Архивировано из оригинала 30 июня 2012 года . Проверено 18 марта 2008 г.
  3. ^ Торрес, Пол; и другие. «CS111 Примечания к лекции 11». Департамент компьютерных наук Калифорнийского университета в Лос-Анджелесе . Архивировано из оригинала 9 января 2009 года.
  4. ^ Бан, Хёкён; Но, Сэм Х. (12–14 февраля 2003 г.). Еще раз о характеристике поведения веб-ссылок: доказательства управления дихотомическим кэшем . Международная конференция по информационным сетям, 2003 г. Чеджу, Южная Корея: Springer-Verlag. стр. 1018–1027. дои : 10.1007/978-3-540-45235-5_100. ISBN 978-3-540-40827-7.
  5. ^ Джайн, Аканкша; Лин, Кальвин (2016). Назад в будущее: использование алгоритма Белади для улучшенной замены кэша (PDF) . Международный симпозиум по компьютерной архитектуре (ISCA). Сеул, Южная Корея: IEEE. дои : 10.1109/ISCA.2016.17.
  6. ^ Зильбершац, Авраам; Гэлвин, Питер Баер; Ганье, Грег (14 декабря 2004 г.). Концепции операционной системы (7-е изд.). Хобокен, Нью-Джерси, США: John Wiley & Sons. п. 339. ИСБН 0-47169-466-5. ОСЛК  56913661.
  7. ^ Справка VMS — Системные параметры, TBSKIPWSL
  8. ^ Таненбаум, Эндрю С. (2001). Современные операционные системы (2-е изд.). Река Аппер-Сэддл, Нью-Джерси, США: Прентис-Холл. п. 218 (4.4.5). ISBN 978-0-13-031358-4. LCCN  00051666. OCLC  45284637. OL  24214243M.
  9. ^ Корбато, Фернандо Дж. (1969). «Эксперимент по поиску сообщений с системой Multics» (PDF) . Festschrift: В честь премьер-министра Морса . МТИ Пресс . стр. 217–228.
  10. ^ Смит, Алан Джей (сентябрь 1978 г.). «Последовательность и предварительная выборка в системах баз данных». Транзакции ACM в системах баз данных . 3 (3). Нью-Йорк, штат Нью-Йорк, США: ACM: 223–247. дои : 10.1145/320263.320276 . S2CID  11611563.
  11. ^ Цзян, Сун; Чен, Фэн; Чжан, Сяодун (10–15 апреля 2005 г.). CLOCK-Pro: эффективное улучшение замены CLOCK (PDF) . 2005 Ежегодная техническая конференция USENIX. Анахайм, Калифорния, США: Ассоциация USENIX. п. 35. Архивировано (PDF) из оригинала 12 июня 2019 года . Проверено 24 марта 2009 г.
  12. ^ Карр, Ричард В.; Хеннесси, Джон Л. (14–16 декабря 1981 г.). WSCLOCK — простой и эффективный алгоритм управления виртуальной памятью (gzip PDF) . Восьмой симпозиум ACM по принципам операционных систем. Пасифик Гроув, Калифорния, США: ACM. стр. 87–95. дои : 10.1145/800216.806596. ISBN 0-89791-062-1. Архивировано из оригинала 10 июня 2007 года.
  13. ^ Готлиб, Аллан. «WSClock». Факультет компьютерных наук Нью-Йоркского университета . Архивировано из оригинала 30 июля 2012 года . Проверено 12 июня 2019 г.
  14. ^ Таненбаум, Эндрю С. «Алгоритмы замены страниц». ИнформИТ . Архивировано из оригинала 10 сентября 2012 года . Проверено 12 июня 2019 г.
  15. ^ Бансал, Сорав и Модха, Дхармендра С. (31 марта - 2 апреля 2004 г.). АВТОМОБИЛЬ: Часы с адаптивной заменой (PDF) . 3-я конференция USENIX по файловым технологиям и технологиям хранения (FAST '04). Сан-Франциско, Калифорния, США: Ассоциация USENIX. стр. 187–200. CiteSeerX 10.1.1.105.6057 . Архивировано (PDF) из оригинала 31 июля 2004 г. 
  16. ^ О'Нил, Элизабет Дж.; и другие. (25–28 мая 1993 г.). Алгоритм замены страниц LRU-K для буферизации диска базы данных (PDF) . 1993 Международная конференция ACM SIGMOD по управлению данными. Вашингтон, округ Колумбия, США: ACM. стр. 297–306. CiteSeerX 10.1.1.18.1434 . дои : 10.1145/170035.170081. ISBN  0-89791-592-5. Архивировано (PDF) из оригинала 6 сентября 2019 года.
  17. ^ Мегиддо, Нимрод и Модха, Дхармендра С. (31 марта - 2 апреля 2003 г.). ARC: самонастраивающийся замещающий кэш с низкими затратами (PDF) . 2-я конференция USENIX по файловым технологиям и технологиям хранения (FAST '03). Сан-Франциско, Калифорния, США: Ассоциация USENIX. стр. 115–130. Архивировано (PDF) из оригинала 8 февраля 2010 года.
  18. ^ Джонсон, Теодор; Шаша, Деннис (12–15 сентября 1994 г.). 2Q: Алгоритм замены высокопроизводительного управления буфером с низкими накладными расходами (PDF) . 20-я Международная конференция по очень большим базам данных. Сантьяго-де-Чили, Чили: Морган Кауфманн. стр. 439–450. ISBN 1-55860-153-8. Архивировано (PDF) из оригинала 17 марта 2020 г. Проверено 31 июля 2005 г.
  19. ^ Мегиддо, Нимрод и Модха, Дхармендра С. (2004). «Превосходство LRU с алгоритмом адаптивного замещающего кэша» (PDF) . Компьютер . 37 (4). Компьютерное общество IEEE: 58. CiteSeerX 10.1.1.231.498 . дои : 10.1109/MC.2004.1297303. S2CID  5507282. Архивировано (PDF) из оригинала 21 октября 2012 года . Проверено 20 сентября 2013 г. 
  20. ^ Родамель, Майкл В. (2–4 октября 1989 г.). Интерфейс шины и блоки пейджинга микропроцессора i860 . 1989 Международная конференция IEEE по компьютерному дизайну: СБИС в компьютерах и процессорах. Кембридж, Массачусетс, США: IEEE. стр. 380–384. дои : 10.1109/ICCD.1989.63392. ISBN 0-8186-1971-6. Регистрационный номер INSPEC 3719504.
  21. ^ Таненбаум, Эндрю С.; Бос, Герберт (2015). Современные операционные системы (4-е изд.). Бостон, Массачусетс, США: Пирсон. п. 215. ИСБН 978-0-13-359162-0. ОЛ  25620855М.
  22. ^ См. объяснение в начале /mm/workingset.c в исходном коде Linux.
  23. Корбет, Джонатан Корбет (2 мая 2012 г.). «Улучшенная балансировка активных/неактивных списков». LWN.net .

дальнейшее чтение