P DPL 0 0/1 1 1 1 Шлюз ловушки 80286/80386
здесь обозначение 80286/80386 практически означает 16-/32-битовые процессоры, в том числе 80486 и Pentium.
P DPL 1 1 C R A Байт доступа дескриптора кодового сегмента
P DPL 1 0 ED W A Байт доступа дескриптора сегмента данных
Назначение бита b3 зависит от типа дескриптора - является он системным или нет.
В системных дескрипторах в большинстве случаев бит b3 определяет тип используемого процессора 80х86. Если вызываемая программа написана для 16-разрядного процессора 80286, b3 = 0, если для 32-разрядного, b3 = 1. Этот бит определяет механизм формирования физического адреса операнда в памяти, который зависит от типа процессора. (32-разрядные процессоры х86 могут использовать страничную адресацию памяти, при которой формирование физического адреса выполняется способом, отличным от 16-разрядного процессора 80286).
В несистемных дескрипторах бит b3 имеет собственное название и обозначение - бит выполняемости Е (Executable). Значение Е = 1 определяет кодовый сегмент, а значение Е = 0 указывает на сегмент данных.
Оставшиеся три бита (поле TYPE) доопределяют тип дескриптора. Назначение и кодирование различных типов системных дескрипторов представлено в таблице.
Разделение сегментов на типы позволяет защититься от случайного или преднамеренного использования сегментов не по назначению.
Сегменты кода и данных - это структуры памяти с байтовой организацией. Процессор обменивается с памятью n-байтными словами (2-байтными - 80286, 4-байтными - i386, i486, 8-байтными - Pentium) из которых он в соответствии с выполняемой командой выбирает операнды требуемого формата.
Дескрипторы сегментов кода и данных в поле TYPE содержат бит обращения А (бит 0), который совместно с битом присутствия Р помогает операционной системе реализовать виртуальную память, и по два дополнительных бита-признака, ограничивающих выполнение некоторых операций с операндами этих сегментов.
Байты доступа системных дескрипторов не содержит бита обращения А. Предполагается, что для повышения производительности процессора системные сегменты всегда должны находиться в памяти и нет необходимости в их виртуальном использовании. Поле TYPE байта доступа системных дескрипторов не содержит и бит, определяющих дополнительные параметры защиты. Сам тип дескриптора накладывает определенные ограничения на возможность использования дескриптора.
Кодовый сегмент.
Операндами кодового сегмента в большинстве случаев являются команды программы, поэтому кодовый сегмент можно только выполнять, в него нельзя записывать. Любая попытка записи в кодовый сегмент вызывает особый случай защиты.
Поле TYPE дескриптора кодового сегмента дополнительно кодирует бит разрешения чтения R (Readable) и бит подчинения С(Conforming). Назначение указанных битов-признаков следующее.
Сегмент кода может содержать константы, в частности, таблицы, которые могут использоваться (считываться) программой при ее выполнении. Разрешение чтения данных из кодового сегмента кодируется битом R (бит 1) байта доступа. Если R = 1, то такой сегмент можно не только выполнять, но и, используя префикс замены сегмента, считывать из него данные. Если R = 0, любая попытка считать данные из кодового сегмента вызывает особый случай защиты. Заметим, что из считываемого сегмента можно считать данные только программой, имеющей такой же или более привилегированный уровень, что и считываемый сегмент.
Бит подчинения С в байте доступа дескриптора кодового сегмента кодирует подчиненный или согласованный сегмент. Для того чтобы пояснить назначение бита С (согласованных сегментов), рассмотрим организацию передач управления в защищенном режиме.
Передачи управления в защищенном режиме
Передача управления в защищенном режиме осуществляется командами CALL, JMP, INT, RET и IRET, а также механизмами исключений и прерываний.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.