Страничная модель
3.5. Страничная модель
Страничную организацию памяти легко представить как многосегментную модель с фиксированным размером сегмента. Такие сегменты называются страницами. Вся доступная реальная память разбивается на страничные кадры (page frame), причем границы кадров в реальной памяти фиксированы. Иными словами, реальная память представляется как массив страничных кадров. Виртуальный адрес состоит из номера страницы и смещения в странице, система поддерживает таблицу дескрипторов страниц для каждого процесса. Дескриптор страницы в основном подобен дескриптору сегмента, но в нем может быть сокращена разрядность поля base, так как в нем хранится не полный реальный адрес, а только номер страничного кадра, а необходимость в поле size вообще отпадает, так как размер страниц фиксирован. Проблема размещения значительно упрощается, так как любой страничный кадр подходит для размещения любой страницы, необходимо только вести учет свободных кадров. За счет этого страничная организация оказывается удобной даже при отсутствии свопинга, так как позволяет разместить непрерывное виртуальное адресное пространство в несмежных страничных кадрах. (Иногда для обозначения свопинга на уровне страниц применяют специальный термин "paging" - страничный обмен.) Внешние дыры в страничной модели отсутствуют, зато появляются внутренние дыры за счет недоиспользованных страниц. При наличии в системе свопинга нулевое значение бита present вызывает прерывание-ловушку "страничный отказ" (page falure) и подкачку страницы в реальную память. Для учета занятых/свободных страниц подходит техника битовой карты, но большинство ОС используют в качестве элементов карты (таблицы страничных кадров) не биты, а куда более сложные структуры, из которых могут составляться и многосвязные списки (в том числе и списки свободных кадров).
Какой размер страницы выгоднее - большой или малый? Соображения, которые могут повлиять на выбор размера следующие:
- при малых страницах получаются меньшие внутренние дыры;
- при малых страницах меньше вероятность страничного отказа (так как больше страниц помещаются в памяти);
- при больших страницах меньшие аппаратные затраты (так как разбиение памяти на большие блоки обойдется дешевле);
- при больших страницах меньшие заголовочные дыры и затраты на поиск и управление страницами (таблицы имеют меньший размер);
- при больших страницах выше эффективность обмена с внешней памятью.
Интересно, что публикации [8] и [27], приводя почти идентичные соображения по этому поводу, приходят к диаметрально противоположным выводам - о преимуществе малых [8] и больших [27] страниц. Вообще можно проследить, по большинству источников, что рекомендуемые размеры страниц растут с возрастанием года издания. По-видимому, решающим фактором здесь является вопрос стоимости памяти. Со временем стоимость этого ресурса уменьшается, а доступные объемы увеличиваются, поэтому более поздние авторы придают меньше значения потерям памяти.
Поскольку размер страницы обычно выбирается много меньшим, чем размера сегмента в предыдущей модели, страничная организация позволяет значительно увеличить уровень мультипрограммирования за счет того, что в реальную память могут в каждый момент отображаться только самые необходимые части виртуальных пространств процессов. Но при этом еще более возрастает интенсивность свопинга и, соответственно, роль стратегии вытеснения/подкачки страниц. При проектировании систем со страничным свопингом разработчики должны придерживаться двух основополагающих правил:
- процесс при большинстве своих обращений к памяти должен находить требуемую страницу уже в реальной памяти;
- если потери на свопинг превышают допустимую норму, то должен понижаться уровень мультипрограммирования.
Несоблюдение этих правил делает весьма вероятным возникновение такой ситуации, когда система будет занята только хаотичным перемещением страниц. (Например, выполнение команды процессора S/390: MVС память,память может потребовать трех страниц памяти: команды, первого и второго операндов. Если одной из страниц недостает, процесс блокируется в ожидании ее подкачки. Но при неудачной стратегии за время этого ожидания он может потерять другие необходимые страницы и повторная попытка выполнить команду вновь приведет к прерыванию-ловушке). В англоязычной литературе эту ситуацию называют trash - толкотня, в русскоязычной часто используется транскрипция - трэш.
При оценке эффективности стратегии свопинга показательной является зависимость частоты страничных отказов от числа доступных страничных кадров. Качественный вид этой зависимости, присущий всем стратегиям, показан на Рисунке 3.7. Как видно из рисунка, при уменьшении объема реальной памяти ниже некоторого ограниченного значения число страничных отказов начинает расти экспоненциально. Естественно, что показателем эффективности стратегии может служить степень близости колена этой кривой к оси ординат. Другой возможный критерий эффективности - площадь области, расположенной под этой кривой - чем она меньше, тем выше эффективность.