Сегментно-страничное распределение памяти
Представляет собой комбинацию сегментного и страничного распределений, и совмещает достоинства обоих подходов. Как и при чисто сегментном распределении, ВАП процесса делится на неравные части, называемые сегментами, или в некоторых реализациях – разделами. Это позволяет устанавливать различные права доступа к программным частям процесса и областям его данных.
Каждый виртуальный сегмент, или все ВАП, и физическая память делятся на страницы, что позволяет эффективнее использовать память и до минимума сократить потери от фрагментации.
Перемещение данных между ОП и внешней памятью осуществляется в этом случае страницами.
Существует несколько разновидностей сегментно-страничного распределения, которые отличаются, в основном, способом структурирования ВАП процесса.
В одном из них, который чаще используется на практике, ВАП делится на сегменты, а все ВАП и ФП – на страницы. Начальные адреса каждого сегмента Vs каждого сегмента задаются с помощью таблицы сегментов для каждого процесса.
Каждый сегмент описывается с помощью своего дескриптора, который включает параметры, аналогичные тем, которые используются в дескрипторах сегментов при обычной сегментной организации. Вместе с тем имеется отличие в содержании дескриптора. В поле базового адреса дескриптора указывается не начальный ФА сегмента, а начальный линейный ВА (ЛВА) в ВАП процесса.
Эта информация позволяет однозначно преобразовать ВА (S, ds) в ЛВА Av = (P, dv) элемента информации, который затем преобразуется в ФА методами страничного преобразования.
Размер страницы, на которые делятся сегменты, выбирается равным 2k, что упрощает преобразование ЛВА в ФА.
Виртуальные страницы нумеруются в пределах всего ВАП процесса, а физические – в пределах ФАП.
При создании процесса в ОП загружается только часть страниц, необходимых в текущий момент. Остальные, по мере необходимости, подгружаются в внешней памяти. Кроме того, система периодически выгружает временно ненужные страницы в ФВП и замещает их новыми страницами из этого же файла. Тем самым реализуется подход к управлению памятью, который называется режимом виртуальной памяти.
Для каждого процесса, помимо таблицы сегментов, создается таблица страниц, в которой указывается соответствие виртуальных страниц физическим. Если таблицы сегментов и страниц хранятся непосредственно в ОП, то их базовые адреса загружаются в специальные регистры процессора, и используются в ходе преобразования ВА в ФА. Эти же адреса являются частью контекста процесса, и при смене активного процесса сохраняются в системных таблицах.
Схема показывает отображение ВА в ФА прямым способом. Преобразование осуществляется в два этапа.
На первом этапе выполняется сегментное преобразование ВА (S, ds) в ЛВА. Для этого, на основании начального адреса B0 таблицы сегментов и номера виртуального сегмента S вычисляется адрес (B0 + S) дескриптора таблицы сегментов. Дескриптор читается, осуществляется анализ его полей. В результате проверяется возможность обращения к сегменту. Если доступ к сегменту разрешен, то из дескриптора извлекается базовый адрес Vs сегмента в ВАП, который складывается со смещением ds элемента информации из ВА. В результате формируется ЛВА элемента информации.
На втором этапе осуществляется страничное преобразование. Полученный ЛВА преобразуется в ФА ОП. При этом, ЛВА представляется в том виде, в каком он используется при страничном распределении, а именно в виде сочетания номера страницы P и смещения на странице dp. В ходе страничного преобразования номер страницы P складывается с базовым адресом Bs таблицы страниц, и по полученному адресу из ОП считывается дескриптор страницы с номером P. В дескрипторе хранится базовый адрес Bp данной страницы в ФП. Для получения ФА элемента информации к этому адресу с помощью конкатенации добавляется смещение на странице dp.
Первый и второй этапы преобразования относительно независимы друг от друга, поэтому существует несколько вариантов сегментно-страничного распределения, в которых сегментное преобразование выполняется также как в рассмотренном случае, а страничное реализуется иначе.
В одном из этих вариантов сегментно-страничное преобразование включает следующие операции:
· Вначале всё ВАП делится на страницы.
· Затем в этом пространстве выделяются участки, называемые разделами. Информация о разделах хранится в создаваемой ОС таблице разделов.
· С использованием этой таблицы и информации из ВА вычисляется ЛВА элемента информации. В нем выделяется три поля:
1. Номер раздела.
2. Номер виртуальной страницы в разделе.
3. Смещение на странице.
· Далее, по номеру раздела из таблицы разделов находится адрес таблицы страниц, создаваемой ОС.
· По номеру виртуальной страницы из таблицы страниц определяется базовый физический адрес страницы в ОП.
· Для получения ФА элемента информации к нему добавляется смещение на странице.
Такой способ преобразования используется для всех процессоров модели Intel, работающих в защищенном режиме.
Во всех случаях, если преобразование осуществляется прямым отображением, с использованием полного набора таблиц сегментов и страниц, хранящихся в ОП, то одно обращение к памяти по ВА в процессе требует выполнения трех циклов ОП:
1. Для доступа к таблице сегментов.
2. Для доступа к таблице страниц.
3. Для доступа по адресу физического элемента.
Это означает, что реальное быстродействие процессора будет составлять ~1/3 от номинального значения. Поэтому при сегментно-страничном преобразовании используются различные способы уменьшения времени преобразования адресов. Они сводятся к использованию ассоциативной памяти, кэш-памяти, а также к применению комбинированного ассоциативно-прямого отображения.
В последнем, наиболее часто используемом случае, в ассоциативную или кэш-память помещаются дескрипторы наиболее часто используемых страниц.
Обращение к этой памяти осуществляется с использованием номера сегмента и номера страницы.
Применение дополнительной быстродействующей памяти относительно небольшого объема позволяет достигнуть скорости преобразования ~90% от максимальной скорости, которая могла бы быть получена при условии, что таблицы сегментов и страниц целиком хранятся в быстродействующей памяти.