Таблицы страниц

Материал далее в том числе и из книги Э. Таненбаума "Современные операционные системы".

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

Например, при 16-разрядных адресах и размере страницы 4 Кбайт старшие 4 бита могут указывать одну из
16 виртуальных страниц, а нижние 12 бит могут определять байт смещения (от О
до 4095) внутри выбранной страницы. Однако разбиение страницы на 3,5 или какое-
нибудь другое число битов также возможно. Разные части подразумевают различ-
ные размеры страниц.
aergrher

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

Несмотря на столь простое описание, нам придется столкнуться с двумя важ-
ными проблемами:

  • 1. Таблица страниц может быть слишком большой.
  • 2. Отображение должно быть быстрым.

Первый пункт следует из того факта, что современные компьютеры исполь-
зуют по крайней мере 32-разрядные виртуальные адреса. При размере страницы,
скажем, 4 Кбайт, 32-разрядное адресное пространство будет состоять из одного
миллиона страниц, а 64-разрядное адресное пространство будет включать в себя
намного больше страниц, чем то количество, с которым вы захотите иметь дело.
При одном миллионе страниц в виртуальном адресном пространстве таблица
страниц должна состоять из одного миллиона записей. И помните, что каждый
процесс нуждается в своей собственной таблице страниц (потому что у него есть
свое собственное виртуальное адресное пространство).

Второй пункт — это вывод из того факта, что преобразование виртуальных адре-
сов в физические должно быть выполнено для каждого обращения к ячейке памя-
ти. Типичная команда процессора включает в себя слово-команду и часто также
операнд памяти. В результате необходимо сделать 1,2 или иногда больше обраще-
ний к таблице страниц за команду. Если выполнение команды занимает, скажем,
4 не, то поиск в таблице страниц должен быть сделан меньше, чем за 1 не, чтобы
преобразование виртуальных адресов не стало главным узким местом системы.
Потребность в огромном, но при этом быстром страничном отображении на-
кладывает существенные ограничения на способы построения компьютеров. Хотя
проблема наиболее серьезно встает для старших моделей семейства, она также
появляется и для младших моделей, когда стоимость и соотношение цена/произ-
водительность имеют критическое значение. В этом и следующих разделах мы рас-
смотрим устройство таблицы страниц в деталях и покажем несколько аппаратных
решений, которые использовались в реальных компьютерах.

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

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