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

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

Другой способ структуризации ВАП выполняется не по формальному, а по смысловому признаку, в котором учитывается характер информации, например коды программ, данные или промежуточные результаты, хранящиеся в отдельных частях ВАП. Такая структуризация создает возможности для совместного использования частей одних и тех же программ в разных процессах. Участки ВАП, на которые оно делится, называются сегментами. Деление на сегменты выполняется автоматически либо компилятором на основе указаний, то есть директив программиста, либо по умолчанию, в соответствии с принятыми в ОС и системе программирования соглашениями. В этом случае, максимальный размер сегмента определяется разрядностью виртуального адреса, и например, при 32-разрядной организации процессора, он равен 4 ГБ.

ВАП всего процесса в предельном случае представляет собой набор из нескольких n сегментов максимальным размером по 4 ГБ. ВА любого элемента информации в этом случае задается в виде пары чисел (s, dv) – номера сегмента и смещения относительно начала сегмента.

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

Как и при страничной организации памяти, одна из задач которой решается подсистемой управления памятью, является отображение ВАП на ФАП. Эта процедура может быть реализована способами, аналогичными страничному распределению, то есть методами прямого, ассоциативного или комбинированного отображения.

Процедуры преобразования адресов при сегментной организации имеет некоторые особенности:

Сегментное распределение памяти - student2.ru

При выполнении преобразования используется один из регистров процессора, в который записывается B0. Таблица сегментов формируется ОС. Она состоит из записей, называемых дескрипторами сегментов. Каждый дескриптор описывает сегмент, и включает размер сегмента (Ls), начальный адрес Bs сегмента в ОП, и другую информацию, в частности, информацию о правах доступа к сегменту. Когда в процессе формируется виртуальный адрес (s, dv), то по номеру s формируется адрес (b0+s), по которому осуществляется обращение к таблице сегментов. Из нее извлекается дескриптор сегмента, поля которого анализируются. Проверяется признак присутствия сегмента в ОП. Если сегмент присутствует в ОП, то проверяется условие dv<Ls того, что адресуемый элемент не выходит за пределы сегмента. При его выполнении из дескриптора извлекается адрес Bs, к которому прибавляется dv из виртуального адреса. Формируется адрес (Bs+dv), по которому выполняется обращение к физической памяти. Если указанные выше условия не выполняются, то в системе генерируются прерывания, которые обрабатываются соответствующим образом.

Как и в случае страничного преобразования, прямое сегментное преобразование требует двух циклов обращения к ОП.

Особенностью формирования ФА при сегментном распределении памяти, в отличие от страничного распределения, является то, что смещение dv не просто присоединяется к адресу Bs сегмента с помощью конкатенации, а арифметически складывается с ним. Это объясняется тем, что сегменты, в отличие от страниц памяти, имеют произвольные размеры, и могут располагаться в ФП начиная с любого адреса. Поэтому для задания местоположения сегмента в ОП, адрес Bs должен представляться как полный физический адрес. Необходимость выполнения операции сложения ведет к замедлению процедуры преобразования ВА в ФА.

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

Еще один недостаток – это возможность возникновения фрагментации памяти на уровне сегментов, которая появляется вследствие непредсказуемости размеров сегментов.

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

Наши рекомендации