Сегментно-страничное распределение


Данный метод – попытка объединить достоинства обоих методов.

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

В большинстве современных реализаций сегментно-страничной организации

 

 

диапазонов адресов при сегментной организации все виртуальные сегменты образуют одно непрерывное линейное виртуальное адресное пространство.

 


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

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

Чаще всего используется второй способ, так как он позволяет непосредственно определить принадлежность адреса некоторому сегменту и проверить права доступа процесса к нему.

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

Однако есть отличия. В поле базового адреса указывается не начальный физический адрес сегмента, а начальный линейный виртуальный адрес сегмента в пространстве виртуальных адресов. Его наличие позволяет однозначно преобразовать адрес, заданный парой (g, s) в линейный виртуальный адрес байта, который затем преобразуется в физический адрес страничным механизмом.

Деление общего линейного виртуального адресного пространства процесса и физической памяти на страницы осуществляется так же, как это делается при страничной организации памяти.

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

Преобразование виртуального адреса в физический происходит в два этапа.

 

 

 


1. На первом этапе работает механизм сегментации. Исходный виртуальный адрес пары (g, s) преобразуется в линейный виртуальный адрес. Для этого на основании базового адреса сегментов и номера сегмента вычисляется поле дескриптора и выполняется проверка возможности выполнения заданной операции.

Если доступ к сегменту разрешен, то вычисляется линейный виртуальный адрес путем сложения базового адреса сегмента, извлеченного из дескриптора, и смещения, заданного в исходном виртуальном адресе.

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

Старшие разряды линейного виртуального адреса, содержащие номер виртуальной страницы, заменяются номером физической операции, взятым из таблицы страниц, а младшие разряды виртуального адреса, содержащие смещение, остаются без изменения.

Как следует из рассмотрения, механизм сегментации и страничный действуют достаточно независимо друг от друга.

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

В таком случае преобразование виртуального адреса в физический происходит в несколько этапов.

Сначала механизм сегментации обычным образом, используя таблицу сегментов, вычисляет линейный виртуальный адрес. Затем из этого адреса вычисляется номер раздела, номер страницы и смещение. По номеру раздела из таблицы разделов определяется адрес таблицы страниц, а затем по номеру виртуальной страницы из таблицы страниц определяется номер физической страницы, к которой приписывается смещение.

Именно этот подход реализован в процессорах i386, i486 и Pentium.

Рассмотрим еще одну схему управления памятью, основанную на сегментно-страничном подходе.

Отличие этого подхода состоит в том, что виртуальные страницы нумеруются не в пределах всего адресного пространства процесса, а пределах сегмента.

Виртуальный адрес в этом случае выражается тройкой (номер сегмента, номер страницы, смещение в странице).

Загрузки процесса выполняются постранично. Для каждого процесса создается своя таблица сегментов, а для каждого сегмента - своя таблица страниц.

Адрес таблицы сегментов загружается в специальный регистр процессора, когда .

Таблицы страниц полностью аналогичны таблице страниц в предыдущем случае.

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


 

 

 


1. По номеру сегмента, заданному в виртуальном адресе, из таблицы сегментов извлекается физический адрес соответствующей таблицы страниц.

2. По номеру виртуальной страницы, заданному в виртуальном адресе, из таблицы страниц извлекается дескриптор, в котором указан номер физической страницы.

3. К номеру физической страницы пристыковуется младшая часть виртуального адреса - смещение.

 

 



Дата добавления: 2016-06-15; просмотров: 3342;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.