Структура дескриптора сегмента
Рис. 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.
Еще по теме Структура дескриптора сегмента:
- СТРУКТУРА
- Структура
- § 3. О структуре сознания
- § 2. Структура парламентов
- Функциональные структуры.
- Свободные структуры
- Структура преступной группы
- § 2. Психологическая структура личности
- ИНТЕЛЛЕКТ: СТРУКТУРА
- Линейно-функциональные структуры.