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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

Так же как и при сегментной организации памяти, виртуальное адресное про­странство процесса разделено на сегменты. Это позволяет определять разные права доступа к разным частям кодов и данных программы.

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

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

Координаты байта в виртуальном адресном пространстве при сегментно-стра­ничной организации можно задать двумя способами.

Во-первых, линейным вир­туальным адресом, который равен сдвигу данного байта относительно границы общего линейного виртуального пространства.

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

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

Для каждого процесса операционная система создает отдельную таблицу сегмен­тов, в которой содержатся описатели (дескрипторы) всех сегментов процесса. Описание сегмента включает назначенные ему права доступа и другие характе­ристики, подобные тем, которые содержатся в дескрипторах сегментов при сегментной организации памяти. Однако имеется и принципиальное отличие. В поле базового адреса указывается не начальный физический адрес сегмента, отведен­ный ему в результате загрузки в оперативную память, а начальный линейный виртуальный адрес сегмента в пространстве виртуальных адресов (на рис. 5.20 ба­зовые физические адреса обозначены S1, S2, S3, а базовые виртуальные адреса — f1, f2, f3).

Наличие базового виртуального адреса сегмента в дескрипторе позволяет одно­значно преобразовать адрес, заданный в виде пары (номер сегмента, смещение в сегменте), в линейный виртуальный адрес байта, который затем преобразуется в физический адрес страничным механизмом.

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

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

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

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

2. На втором этапе работает страничный механизм. Полученный линейный вирту­альный адрес преобразуется в искомый физический адрес. В результате пре­образования линейный виртуальный адрес представляется в том виде, в кото­ром он используется при страничной организации памяти, а именно в виде пары (номер страницы, смещение в странице). Благодаря тому что размер страницы выбран равным степени двойки, эта задача решается простым отде­лением некоторого количества младших двоичных разрядов. При этом в стар­ших разрядах содержится номер виртуальной страницы, а в младших — смещение искомого элемента относительно начала страницы. Так, если раз­мер страницы равен 2k то смещением является содержимое младших k разрядов, а остальные, старшие разряды содержат номер виртуальной страницы, которой принадлежит искомый адрес. Далее преобразование адреса проис­ходит так же, как при страничной организации: старшие разряды линейного виртуального адреса, содержащие номер виртуальной страницы, заменяются номером физической страницы, взятым из таблицы страниц, а младшие раз­ряды виртуального адреса, содержащие смещение, остаются без изменения.

Как видно, механизм сегментации и страничный механизм действуют достаточ­но независимо друг от друга. Поэтому нетрудно представить себе реализацию сегментно-страничного управления памятью, в которой механизм сегментации работает по вышеописанной схеме, а страничный механизм изменен. Он реали­зует двухуровневую схему, в которой виртуальное адресное пространство делит­ся сначала на разделы, а уж потом на страницы. В таком случае преобразование виртуального адреса в физический происходит в несколько этапов. Сначала ме­ханизм сегментации обычным образом, используя таблицу сегментов, вычисляет линейный виртуальный адрес. Затем из данного виртуального адреса вычленя­ются номер раздела, номер страницы и смещение. И далее по номеру раздела из таблицы разделов определяется адрес таблицы страниц, а затем по номеру виртуальной страницы из таблицы страниц определяется номер физической страницы, к которому пристыковывается смещение. Именно такой подход реа­лизован компанией Intel в процессорах i386, i486 и Pentium.

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

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

Таблица страниц содержит дескрипторы страниц, содержимое которых полно­стью аналогично содержимому ранее описанных дескрипторов страниц. А вот таблица сегментов состоит из дескрипторов сегментов, которые вместо инфор­мации о расположении сегментов в виртуальном адресном пространстве содер­жат описание расположения таблиц страниц в физической памяти. Это является вторым существенным отличием данного подхода от ранее рассмотренной схемы сегментно-страничной организации.

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

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

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

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

 

Разделяемые сегменты памяти

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

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

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

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

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

Возможно и более экономичное для ОС решение этой задачи — помещение един­ственного разделяемого виртуального сегмента в общую часть виртуального ад­ресного пространства процессов, то есть в ту часть, которая обычно используется для модулей ОС (рис. 5.23, б). В этом случае настройка дескриптора сегмента (и дескрипторов страниц) выполняется только один раз, а все процессы пользу­ются такой настройкой и совместно используют часть оперативной памяти.

При работе с разделяемыми сегментами памяти ОС должна выполнять некото­рые функции, общие для любых разделяемых между процессами ресурсов — файлов, семафоров и т. п. Эти функции состоят в поддержке схемы именования ресурсов, проверке прав доступа определенного процесса к ресурсу, а также в от­слеживании количества процессов, пользующихся данным ресурсом (чтобы уда­лить его в случае ненадобности). Для того чтобы отличать разделяемые сегменты памяти от индивидуальных, дескриптор сегмента должен содержать поле, имею­щее два значения: shared (разделяемый) или private (индивидуальный).

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

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

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

Кэширование данных



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 387; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.250.114 (0.015 с.)