Предыдущий раздел РАБОТА С ОПЕРАТИВНОЙ ПАМЯТЬЮ В ЗАЩИЩЕННОМ РЕЖИМЕ Следующая глава

23.3.2. Распределение памяти

Как следует из п.6.2, аппаратура управления сегментами обеспечивает два свойства линейных виртуальных адресов: 1) каждый такой адрес не может быть больше 4Гбайт; 2) любой виртуальный сегмент отображается на непрерывный участок линейной памяти. С учетом этих свойств сохраняется большая свобода выбора начальных линейных адресов сегментов, записываемых ОС в дескрипторы сегментов (поле В на рис.34, 36). Эти адреса выбираются ОС следующим образом.

Во-первых, программа каждого процесса «загружается» в собственную линейную виртуальную память размером 4 Гбайт. Линейная виртуальная память (ЛВП) – абстракция, используемая не самой программой (она работает с сегментной виртуальной памятью), а используемая операционной системой.

Во-вторых, в эту ЛВП «загружается» и сама ОС. В UNIX используется распределение линейной виртуальной памяти процесса, изображенное на рис.43. При этом 3 Гбайта с меньшими адресами отводятся самой прикладной программе, а 1 Гбайт с большими адресами – для ядра ОС. Причем системные DLL, обычно,  располагаются вверху прикладной части ЛВП.

В-третьих, если в ходе выполнения процесса ему понадобится дополнительная ОП, то запрашиваемый объем будет выделен ОС из подходящей свободной области ЛВП динамически. (Всякое назначение памяти процессу, осуществляемое в ходе его выполнения, называется динамическим распределением памяти. Статическое распределение – память выделяется при создании процесса.)

 

 

Рис. 82. Отображение линейной виртуальной памяти на реальную ОП

 

В-четвертых, ОС выполняет «загрузку» сегментов процесса в ЛВП путем записи начального линейного виртуального адреса каждого сегмента в его дескриптор. При этом сегменты ядра (их дескрипторы находятся в GDT) всегда «загружены» в ЛВП по одним и тем же адресам.

В-пятых, содержимое ЛВП используется ОС для выполнения записей в каталог таблиц страниц и в сами таблицы страниц (инициализация таблиц). Один каталог страниц обычно используется для адресации памяти одного процесса. При этом из 1024 строк каталога 256 строк соответствуют ОС, а 768 строк – прикладной программе. (При смене на ЦП выполняемого процесса 256 строк в каталоге не меняются, а заменяются лишь 768 строк.) Если 4 Мбайта ЛВП, соответствующие данной строке каталога, содержат какую-то информацию, то в эту строку ОС помещает указатель на соответствующую таблицу страниц. Иначе строка каталога содержит пустой указатель.

Таблица страниц, соответствующая непустой строке каталога, может содержать до 1024 строк, каждая из которых содержит дескриптор одной  логической страницы программы. Так как объем одной страницы составляет 4096 байт, то максимальный объем ЛВП, соответствующий одной таблице страниц, составляет 4 Мбайта. Любая часть этого объема может соответствовать «пустым» страницам. Так как ОС ведет учет распределения ЛВП, то «пустые» страницы ей известны, и она не создает для них дескрипторы в таблице страниц.

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

Благодаря свопингу страниц число логических страниц процесса может быть значительно больше, чем выделенное ему число физических страниц. Для организации такого свопинга аппаратура процессора i80386 предоставляет в помощь ОС исключение отказ страницы, а также специальные биты в дескрипторах страниц, аналогичные соответствуюшим битам в дескрипторе таблицы страниц (см. рис.42):

1) P – бит присутствия страницы в памяти (1 – страница в ОП; 0 – нет);

2) бит D – устанавливается в 1, если была выполнена запись в страницу;

3) AVL – три бита, которые ОС может использовать по своему усмотрению.

Совместная работа аппаратуры и ядра ОС при реализации страничного свопинга заключается в следующем.  Выполнив разделение очередного виртуального линейного адреса, аппаратура ЦП проверяет бит P в искомом дескрипторе страницы. Если P=1, то выполнение программы продолжается, иначе возникает исключение «отказ страницы». Его обработчик подкачивает требуемую страницу из ВП.

Обычно страница загружается на место ранее загруженной страницы, которая или копируется из ОП на диск (если бит D=1) или нет (бит D=0). Для определения откачиваемой страницы могут использоваться различные критерии. Например, в качестве такой страницы может быть выбрана та, к которой было сделано наименьшее число обращений. В качестве счетчика числа обращений может быть использовано поле AVL дескриптора страницы.

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

Что касается защиты информации в ОП, то аппаратура управления страницами в i80386 предоставляет для этого единственное средство: при выполнении любой машинной команды, выполняющей запись в ОП, аппаратно проверяется бит W в дескрипторе той страницы, в которую выполняется запись. При W=1 команда записи производится, а при W=0 возникает исключение. Эффективность данного средства существенно ниже защитных действий, выполняемых аппаратурой управления сегментами (см. п.6.2.3).

 


Предыдущий раздел В начало Следующая глава