Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТОС_2013 / ТОС_6_2_проц_слайды1.doc
Скачиваний:
8
Добавлен:
03.03.2016
Размер:
1.17 Mб
Скачать

Сегменты

Семейство процессоров Intel позволяет разделить память на несколько логических частей, называемых сегментами.

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

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

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

Селектор (точнее, поле селектора INDEX) указывает на т.н. дескриптор сегмента, содержащий такие параметры, как его расположение в памяти, размер и права доступа.

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

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

Дескрипторы сегментов расположены в двух системных таблицах — локальной таблице дескрипторов (Local Descriptor Table - LDT) и глобаль-ной таблице дескрипторов (Global Descriptor Table - GDT).

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

GDT обслуживает адресное пространство ядра (например, при обработке системного вызова или прерывания).

Для каждого процесса создается собственная LDT

GDT разделяется всеми процессами.

Информация о таблице, на которую указывает селектор, находится в самом селекторе, вид которого представлен на рис. 3.5.

Если бит TI равен 0, то селектор указывает на GDT, в противном случае используется LDT.

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

Каждая запись LDT или GDT является дескриптором сегмента.

Типы дескрипторов:

  • сегментов кода,

  • сегментов данных

  • стека,

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

Дескрипторы, используемые в последнем случае, называются шлюзами

.

ПОЛЯ дескриптора сегментов (кода, данных, стека):

  • Базовый адрес. В этом поле хранится 32-битный адрес начала сегмента. Процессор добавляет к нему смещение и получает 32-битный линейный адрес.

  • Предел. Это поле определяет размер сегмента.

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

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

  • Привилегии. Это поле, имеющее название Descriptor Privilege Level (DPL), определяет уровень привилегий сегмента и используется совместно с полем RPL селектора для разрешения или запрещения доступа к сегменту.

Для получения доступа к сегменту задача должна иметь по крайней мере такой же уровень привилегий, как и сегмент, т. е. RPL >= DPL.

  • Признак присутствия. Этот бит обеспечивает один из механизмов реализации виртуальной памяти.

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

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

  • Тип. Это поле определяет тип сегмента.

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

  • Права доступа. Это поле определяет права доступа, ограничивающие множество операций, которые можно производить с сегментом (чт. и/или запись …).

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

Комбинация селектора и смещения образует логический адрес.

Блок управ­ления памятью процессора использует селектор для определения соответст­вующего ему дескриптора. Складывая базовый адрес сегмента, хранящийся в дескрипторе, со смещением, процессор создает линейный адрес (рис. 3.6).

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

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

Управление памятью в большинстве систем основано на страничном механизме.

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