Скачиваний:
131
Добавлен:
04.04.2013
Размер:
774.66 Кб
Скачать

9.6. Сегментная организация

9.6.1. Основные концепции

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

Рис. 9.13 Распределение памяти несмежными блоками.

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

Виртуальный адрес в сегментной системе - это упорядоченная пара = (s, d), где s - номер сегмента виртуальной памяти, a d - смещение в рамках этого сегмента, где находится адресуемый элемент (рис. 9.14). Процесс может выполняться только в случае, если его текущий сегмент (как минимум) размещается в первичной памяти. Сегменты передаются из внешней памяти в первичную целиком. Все ячейки, относящиеся к сегменту, занимают смежные адреса первичной памяти. Поступающий из внешней памяти сегмент может

Рис. 9.14 Формат виртуального адреса в чисто сегментной системе.

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

Рис. 9.15 Преобразование виртуального адреса в чисто сегментной системе.

Динамическое преобразование адресов осуществляется следующим образом (рис. 9.15). Выполняющийся процесс выдает адрес виртуальной памяти = (s, d). Механизм отображения сегментов ищет сегмент s в таблице сегментов и определяет, что этот сегмент находится в реальной памяти, начиная с ячейки s'. Адрес реальной памяти, соответствующий виртуальному адресу = (s, d), формируется затем путем добавления s' к d.

Преобразование имени сегмента в его порядковый номер осуществит система программирования, а операционная система будет размещать сегменты в память и для каждого сегмента получит информацию о его начале. Таким образом, виртуальный адрес для этого способа будет состоять из двух полей — номер сегмента и смещение относительно начала сегмента. Соответствующая иллюстрация приведена на рис. 9.16. На этом рисунке изображен случай обращения к ячейке, виртуальный адрес которой равен сегменту с номером 11 и смещением от начала этого сегмента, равным 612. Как мы видим, операционная система разместила данный сегмент в памяти, начиная с ячейки с номером 19 700.

Рис. 9.16. Сегментный способ организации виртуальной памяти

Каждый сегмент, размещаемый в памяти, имеет соответствующую информационную структуру, часто называемую дескриптором сегмента. Именно операционная система строит для каждого исполняемого процесса соответствующую таблицу дескрипторов сегментов и при размещении каждого из сегментов в оперативной или внешней памяти в дескрипторе отмечает его текущее местоположение. Если сегмент задачи в данный момент находится в оперативной памяти, то об этом делается пометка в дескрипторе. Как правило, для этого используется «бит присутствия» (present). В этом случае в поле «адрес» диспетчер памяти записывает адрес физической памяти, с которого сегмент начинается, а в поле «длина сегмента» (limit) указывается количество адресуемых ячеек памяти. Это поле используется не только для того, чтобы размещать сегменты без наложения один на другой, но и для того, чтобы проконтролировать, не обращается ли код исполняющейся задачи за пределы текущего сегмента. В случае превышения длины сегмента вследствие ошибок программирования мы можем говорить о на­рушении адресации и с помощью введения специальных аппаратных средств генерировать сигналы прерывания, которые позволят фиксировать (обнаруживать) такого рода ошибки.

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

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

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

Соседние файлы в папке Лекции 9-12rar