Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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




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


Дата добавления: 2014-01-20; Просмотров: 674; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.