Сегментно-страничное распределение
Данный метод – попытка объединить достоинства обоих методов.
Здесь, как и при сегментной организации памяти, виртуальное адресное пространство процесса разделено на сегменты. Это позволяет определять разные права доступа к разным данным. Перемещение данных между памятью и диском осуществляется не сегментами, а страницами. Для этого каждый сегмент и физическая память делятся на страницы равного размера, что позволяет минимизировать фрагментацию.
В большинстве современных реализаций сегментно-страничной организации
диапазонов адресов при сегментной организации все виртуальные сегменты образуют одно непрерывное линейное виртуальное адресное пространство.
Координаты байта при этом можно задать двумя способами. Во-первых, линейным виртуальным адресом, который равен сдвигу данного байта относительно границы общего линейного виртуального пространства, во вторых, парой чисел, одно из которых является номером сегмента, а другое – смещением относительно сегмента.
При этом в отличие от сегментной модели для однозначного задания виртуального адреса вторым способом необходимо указать также начальный виртуальный адрес сегмента с данным номером.
Чаще всего используется второй способ, так как он позволяет непосредственно определить принадлежность адреса некоторому сегменту и проверить права доступа процесса к нему.
Для каждого процесса ОС создает отдельную таблицу сегментов, в которой содержатся дескрипторы (описатели ) всех сегментов процесса. Описание сегмента включает назначенные ему права доступа и другие характеристики, подобные тем, которые содержатся в дескрипторах сегментов при сегментной организации памяти.
Однако есть отличия. В поле базового адреса указывается не начальный физический адрес сегмента, а начальный линейный виртуальный адрес сегмента в пространстве виртуальных адресов. Его наличие позволяет однозначно преобразовать адрес, заданный парой (g, s) в линейный виртуальный адрес байта, который затем преобразуется в физический адрес страничным механизмом.
Деление общего линейного виртуального адресного пространства процесса и физической памяти на страницы осуществляется так же, как это делается при страничной организации памяти.
Базовые адреса таблицы сегментов и таблицы страниц процесса являются частью его контекста. При активизации процесса эти адреса загружаются в специальные регистры процессов и используются механизмы преобразования адресов.
Преобразование виртуального адреса в физический происходит в два этапа.
1. На первом этапе работает механизм сегментации. Исходный виртуальный адрес пары (g, s) преобразуется в линейный виртуальный адрес. Для этого на основании базового адреса сегментов и номера сегмента вычисляется поле дескриптора и выполняется проверка возможности выполнения заданной операции.
Если доступ к сегменту разрешен, то вычисляется линейный виртуальный адрес путем сложения базового адреса сегмента, извлеченного из дескриптора, и смещения, заданного в исходном виртуальном адресе.
2. Второй этап использует страничный механизм. Линейный виртуальный адрес преобразуется в физический. В результате преобразования линейный виртуальный адрес представляется в том виде, в котором он используется при страничной организации памяти (пара: номер страницы, смещение в странице). Далее как уже изучали ранее.
Старшие разряды линейного виртуального адреса, содержащие номер виртуальной страницы, заменяются номером физической операции, взятым из таблицы страниц, а младшие разряды виртуального адреса, содержащие смещение, остаются без изменения.
Как следует из рассмотрения, механизм сегментации и страничный действуют достаточно независимо друг от друга.
Поэтому не трудно представить себе реализацию памяти, когда механизм сегментации выполняется, как было показано, а страничный механизм реализуется по двухуровневой схеме: виртуальное адресное пространство делится сначала на разделы, а уж потом на страницы.
В таком случае преобразование виртуального адреса в физический происходит в несколько этапов.
Сначала механизм сегментации обычным образом, используя таблицу сегментов, вычисляет линейный виртуальный адрес. Затем из этого адреса вычисляется номер раздела, номер страницы и смещение. По номеру раздела из таблицы разделов определяется адрес таблицы страниц, а затем по номеру виртуальной страницы из таблицы страниц определяется номер физической страницы, к которой приписывается смещение.
Именно этот подход реализован в процессорах i386, i486 и Pentium.
Рассмотрим еще одну схему управления памятью, основанную на сегментно-страничном подходе.
Отличие этого подхода состоит в том, что виртуальные страницы нумеруются не в пределах всего адресного пространства процесса, а пределах сегмента.
Виртуальный адрес в этом случае выражается тройкой (номер сегмента, номер страницы, смещение в странице).
Загрузки процесса выполняются постранично. Для каждого процесса создается своя таблица сегментов, а для каждого сегмента - своя таблица страниц.
Адрес таблицы сегментов загружается в специальный регистр процессора, когда .
Таблицы страниц полностью аналогичны таблице страниц в предыдущем случае.
В таблице сегментов имеются существенные отличия. Она состоит из дескрипторов сегментов, которые вместо информации о расположении сегментов в виртуальном адресном пространстве содержит описание расположения таблиц страниц в физической памяти.
1. По номеру сегмента, заданному в виртуальном адресе, из таблицы сегментов извлекается физический адрес соответствующей таблицы страниц.
2. По номеру виртуальной страницы, заданному в виртуальном адресе, из таблицы страниц извлекается дескриптор, в котором указан номер физической страницы.
3. К номеру физической страницы пристыковуется младшая часть виртуального адреса - смещение.
Дата добавления: 2016-06-15; просмотров: 3489;