<<
>>

Структура дескриптора сегмента

Значения или коды атрибутов сегмента оперативной памяти помещаются в спе- циальное восьмибайтовое поле памяти, которое называется дескриптором (от describe — описывать) сегмента. Структура дескриптора сегмента памяти приве- дена на рис.
6.1.

Рис. 6.1. Структура дескриптора сегмента

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

Их суммарная длина равна 32 разрядам, что соответствует адресному простран- ству объемом 4 Гбайт.

В отличие от реального режима, сегменты защищенного режима могут иметь лю- бую длину от одного байта до 4 Гбайт.

Длина сегмента, так же как и его адрес, записывается в дескриптор. Включение информации о фактическом размере сегмента в дескриптор обеспечивает возможность аппаратно контролировать ра- боту программы с памятью, предотвращать ее обращение к несуществующим ад- ресам либо по адресам, находящимся вне сегмента. Значение длины сегмента за- нимает участки Lt и L2 дескриптора, суммарная длина которых равна 20 бит. Длина сегмента может измеряться в байтах или страницах, длина которых всегда равна 4 Кбайт. Выбор единицы измерения длины сегмента зависит от значения бита гранулярности G (от лат. granulum — зернышко). При значении G = 0 дли- на сегмента измеряется в байтах, при этом 20-битовое поле длиной L (Lj + L2) обеспечивает возможность задания длины сегмента в пределах от 1 байта до 220 байт = 1 Мбайт.
При значении G = 1 длина сегмента измеряется в страницах. В этом случае она может изменяться в пределах от одной страницы (4 Кбайт) до 220 страниц (220 ∙ 4 Кбайт = 4 Гбайт).

В связи с необходимостью поддерживать совместимость с предшествующими 16-битовыми моделями в дескрипторе сегмента предусмотрен бит разрядности D (от Dimension — измерение), значение которого определяет используемую в сег- менте разрядность операндов и адресов. Если значение D = 0, то используется 16-битовая, а при D = 1 — 32-битовая разрядность адресов и операндов.

В отличие от реального режима, в защищенном режиме возможны только два принципиально разных типа сегментов: сегмент кода и сегмент данных. Тип сег- мента определяется значением бита назначения сегмента I (от Intending — пред- назначение). Если значение I = 0, то дескриптор описывает сегмент данных; если же I = 1, то это сегмент кода.

Сегмент стека считается самостоятельной разновидностью сегмента данных с осо- бым способом изменения его длины. Стек растет в направлении уменьшения адресов оперативной памяти, в то время как у обычной разновидности сегмен- та данных рост происходит в направлении увеличения адресов памяти. В связи с этим разновидность сегмента данных уточняется с помощью бита направления расширения ЕD (от Expand Down — расширение вниз). Если значение ЕD = 0, то сегмент расширяется вниз, то есть в направлении увеличения адресов памяти (обычный сегмент данных). В противном случае, при ЕD = 1, сегмент растет в на- правлении убывания адресов памяти (стек). В дальнейшем изложении вместо оборота «сегмент данных с расширением в направлении убывания адресов» ис- пользуется устоявшееся простое название «сегмент стека».

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

Разновидность сегмента кода определяется значением подчиненного бита С (от Conforming — подчиненный). Если значение С = 0, то сегмент кода считается подчиненным, а при С = 1 сегмент считается обычным. На самом деле биты ЕD и С — это не два разных бита в дескрипторе, а один и тот же бит, который при- нято обозначать С/ЕD и трактовать его смысл и значение в зависимости от зна- чения бита I.

Программа, занимающая сегмент кода, всегда может быть выполнена. Запись в сегмент кода запрещена, а возможность чтения программного кода из этого сегмента, например с целью его копирования, регулируется битом чтения/записи R/W (от RеаdаЫе/Writеаblе — читаемый/записываемый). Значение R/W = О запрещает чтение, а R/W = 1 — разрешает.

Чтение из сегмента данных разрешено всегда. Возможность записи в этот сег- мент регулируется этим же битом R/W. Значение R/W = 0 запрещает запись, а значение R/W = 1 разрешает ее.

Таким образом, тройка битов I, С/ЕD и R/W определяет тип сегмента и до- пустимые операции с его содержимым. Все возможные комбинации этих битов и их смысл сведены в табл. 6.1. Отметим, что комбинация битов I = О, С/ЕD = 1 и R/W = 0 определяет сегмент стека с запрещением в него записи. Организация такого стека, очевидно, смысла не имеет, поэтому код типа сегмента 0102 счита- ется не определенным.

Таблица 6.1. Типы сегментов памяти в защищенном режиме

Код типа сегмента I, С/ЕD, R/W является составной частью байта прав доступа АR (от Access Right), входящего в дескриптор сегмента. В этот байт также входят (рис. 6.1) бит присутствия Р (от Present), код уровня привилегий дескриптора DРL (от Descriptor Privilege Level), бит система/сегмент S (от Sуstеm/Sеgmепt) и бит доступа А (от Accessed).

Бит присутствия Р аппаратно получает значение 0, если в текущий момент време- ни сегмент отсутствует в оперативной памяти, и значение 1, если сегмент нахо- дится в ней.

Бит доступа А также аппаратно получает значение 1 при обращении к сегменту (для чтения или записи), в противном случае его значение устанавли- вается в 0. Эти два бита используются механизмами виртуальной памяти.

Управляющая работой компьютера операционная система использует для вы- полнения своих функций различные объекты и структуры, которые так же, как и сегменты оперативной памяти, должны быть описаны. Удобно так организовы- вать работу системы, чтобы все эти описания имели единообразную структуру. В связи с этим разработчиками процессоров Intel было принято решение ис- пользовать для описания различных системных объектов те же самые дескрип- торы, что и для описания сегментов памяти. Разумеется, внутренняя структура дескриптора в этом случае отличается от структуры дескриптора сегмента памя- ти. Для определения роли дескриптора служит бит система/сегмент S, который принимает значение 0, если дескриптор служит для описания системного объек- та, и значение 1, если дескриптор используется для описания сегмента памяти.

В защищенном режиме любая программа не может обращаться к любому сегмен- ту памяти, она должна иметь соответствующие права. Чтобы разграничить воз- можности программ по доступу к сегментам, введено четыре уровня привилегий. Закрепленный за сегментом уровень привилегий отображается в дескрипторе с помощью двухбитового кода уровня привилегий DРL. Наивысший приоритет имеют сегменты нулевого уровня, у которых код DРL равен 002, а минимальный уровень имеют сегменты с кодом DРL, равным 112.

Выполняющаяся программа имеет приоритет, совпадающий с приоритетом сег- мента памяти, в котором она находится. Когда программа обращается к какому- либо сегменту для чтения или записи, то ее приоритет сравнивается с уровнем приоритета сегмента. Если приоритет программы больше приоритета сегмента или равен ему, то обращение разрешается, в противном случае обращение бло- кируется. Например, программа, имеющая DРL = 012, может обращаться за данными к сегментам памяти с DРL = 012, 102 и 112.

Программа с приоритетом DРL = 002 может обращаться к любым сегментам, а программа с DРL = 112 — только к сегментам с таким же приоритетом.

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

Кроме рассмотренных полей и битов в дескрипторе имеется не используемый бит О и используемый программистом по своему усмотрению бит пользовате- ля U (от User). Подробная побитовая структура дескриптора сегмента памяти приведена на рис. 6.1. Инициализация (то есть заполнение разрядов поля значе- ниями) дескриптора сегмента памяти выполняется операционной системой или программой или совместно операционной системой и программой.

6.1.2.

<< | >>
Источник: Степанов А. Н.. Архитектура вычислительных систем и компьютерных сетей. 2007

Еще по теме Структура дескриптора сегмента:

  1. СТРУКТУРА
  2. Структура
  3. § 3. О структуре сознания
  4. § 2. Структура парламентов
  5. Функциональные структуры.
  6. Свободные структуры
  7. Структура преступной группы
  8. § 2. Психологическая структура личности
  9. ИНТЕЛЛЕКТ: СТРУКТУРА
  10. Линейно-функциональные структуры.