- •Предисловие
- •Введение
- •1. Системный анализ задачи - выделяются процессы и функции, реализация которых будет возложена на мк или ип.
- •Алгоритмизация процессов и функций - разрабатываются алгоритмы решения задачи.
- •Области использования мк
- •Глава 1основы микропроцессорной техники
- •1.1. Классификация микропроцессоров, основные варианты их архитектуры и структуры
- •1.2. Общая структура и принципы функционирования микропроцессорных систем
- •1.3. Система команд и способы адресации операндов
- •Начиная с младшего байта («Little-Endian»);
- •Начиная со старшего байта («Big-Endian»).
- •1.4. Интерфейсы микропроцессорных систем
- •1.4.1. Основные понятия
- •1.4.2. Магистраль vme
- •Verbs находит широкое применение в:
- •VmEbus обеспечивает наилучшее соотношение цена - производительность для системы в целом и предоставляет практически неограниченные возможности наращивания всех ресурсов.
- •1.5. Шина usb
- •На их основе
- •2.1. Структура и функционирование процессоров intel p6
- •2.1.1. Суперскалярная архитектура и организация конвейера команд
- •2.1.2. Режимы работы процессора и организация памяти
- •2.1.3. Регистровая модель
- •1. Функциональные основные регистры:
- •Iopl -уровень привилегий ввода/вывода, задает максимальную величину уровня привилегий текущей программы, при котором разрешается выполнение команд ввода/вывода;
- •2.3 Режимы работы процессора
- •2.1.4. Внутренняя кэш-память
- •8 Зон по 64 Кбайт, занимающих диапазон адресов 0-7fffFh (512 Кбайт);
- •16 Зон по 16 Кбайт, занимающих диапазон адресов 80000h-8ffffh (256 Кбайт);
- •8 Зон размером от 4 Кбайт до максимального размера физической памяти, которые могут размещаться в любой позиции адресного пространства.
- •2.1.5. Форматы команд и способы адресации
- •Содержимого базового регистра евр (вр) или евх (вх);
- •Содержимого индексного регистра esi (si) или edi (di);
- •Disp команды (см. Рис. 2.11).
- •2.2. Система команд: операции над целыми числами
- •Пересылка данных и адресов
- •Xchg - Обмен между регистрами или памятью и регистром
- •Xlat-Преобразование кодов
- •Imul-Знаковое (целочисленное) умножение аам- ascii-коррекция результата умножения
- •Idiv-Знаковое (целочисленное) деление
- •2.2.1. Команды пересылки
- •2.2.2. Команды арифметических операций
- •2.2.3. Команды логических операций и сдвигов
- •2.2.4. Команды битовых и байтовых операций
- •2.2.5. Команды операций со строками символов
- •2.3. Система команд: операции управления
- •Управление программой
- •Прерывания
- •Int3 - Прерывание в контрольной точке
- •Iret-Возврат из подпрограммы обслуживания прерывания
- •2.3.1. Команды управления программой
- •2.3.3. Команды организации защиты памяти
- •2.3.4. Команды управления процессором
- •2.3.5. Префиксные байты
- •2.4. Система команд: операции над числами с плавающей точкой
- •2.4.3. Команды пересылки данных
- •2.4.4. Команды арифметических операций
- •2.4.6. Команды специальных операций
- •2.4.7. Команды управления fpu
- •Команды преобразования
- •Арифметические команды
- •Inub'- Нахождение меньшего значения (беззнаковые байты) Команды сравнения
- •Команды логических операций
- •2.5.1. Форматы представления данных и выполнение операций
- •2.5.2. Команды пересылки и преобразования данных
- •1 2.5.3. Команды арифметических операций '
- •2.5.4. Команды логических операций и сдвигов
- •2.5.5. Команды сравнения и нахождения максимума/минимума
- •2.6. Система команд: операции sse
- •Команды пересылки данных
- •Команды преобразования данных
- •Арифметические команды
- •Команды нахождения максимума и минимума.
- •Команды преобразования формата чисел.
- •Команды управления
- •2.6.1. Форматы представления данных и выполнение операций
- •2.6.2. Команды пересылки и преобразования данных
- •2.6.3. Команды арифметических операций
- •2.6.6. Команды преобразования формата чисел
- •2.6.7. Команды управления
- •2.6.8. Команды пересылки данных с управлением кэшированием
- •2.7. Работа процессора в защищенном и реальном режимах
- •2.7.1. Сегментация памяти в защищенном режиме
- •2.7.2. Страничная организация памяти
- •2.7.3. Защита памяти
- •2.7.4. Поддержка многозадачного режима
- •2.7.5. Реализация режима виртуального 8086 (v86)
- •2.7.6. Функционирование процессора в реальном режиме
- •2.8. Реализация прерываний и исключений. Обеспечение тестирования и отладки
- •2.8.1. Виды прерываний и исключений, реализация их обслуживания
- •2.8.2. Причины возникновения исключений
- •2.8.3. Средства обеспечения отладки
- •2.8.4. Реализация тестирования и контроля функционирования
- •2.9. Risc-микропроцессоры и risc-микроконтроллеры семейств powerpc (мрс60х, мрс50х)
- •2.9.1. Risc-микропроцессоры семейства мрс60х (powerpc)
- •I (invalid) - недостоверное (аннулированное) содержимое строки.
- •2.9.2. Risc-микроконтроллеры семейства мрс5хх ( power pc)
- •3.1. Общие принципы организации кэш-памяти
- •3.1.1. Понятия тега, индекса и блока
- •3.1.2. Механизм кэш-памяти с прямым отображением данных
- •3.1.3. Механизм кэш-памяти
- •3.1.4. Обновление информации в кэш-памяти
- •1.5. Согласованность кэш-памяти
- •3.2.2. Внутренние кэш-памяти команд и данных
- •3.2.3. Алгоритм кэш-замещений
- •3.2 4. Состояния кэш-памяти данных
- •1.При блокированном чтении:
- •3.2.5. Согласованность внутренних кэш-памятей
- •1) Хранить таблицы страниц и директорий в не копируемой в кэш-память области основной памяти или использовать режим сквозной записи страниц;
- •Процессор может быть заменен (возможен upgraded) без изменения памяти и других подсистем мп вс;
- •Без особого снижения общих характеристик системы могут быть использованы более медленные и менее емкие устройства памяти и устройства ввода/вывода.
- •3.3. Функционирование памяти
- •1) Трансляция сегмента, при которой логический адрес, состоящий из селектора сегмента и смещения (относительного адреса внутри сегмента), преобразуется в линейный адрес.
- •3.3.1. Трансляция сегментов
- •Глобальной таблице дескрипторов (gdt);
- •Локальной таблице дескрипторов (ldt).
- •3.3.2. Адресация физической памяти
- •3.3.4. Комбинирование сегментной и страничной трансляции
- •3.4. Защита памяти
- •3.4.1. Зачем нужна защита?
- •Устанавливает различие между разными форматами дескрипторов;
- •Специфицирует функциональное назначение сегмента.
- •1 Поле предела называют также полем границы.
- •2 Байты сегмента размещены в оп в порядке возрастания адресов памяти или в обратном порядке. Такое размещение также называют соответственно по принципу «младший» и «старший крайний».
- •Cpl (текущий уровень привилегий);
- •Rpl (уровень привилегий источника обращений к сегменту) из селектора, используемый для спецификации сегмента назначения;
- •3)Dpl дескриптора сегмента назначения.
- •Загрузить регистр сегмента данных селектором несогласованного, с разрешением чтения кодового сегмента;
- •Загрузить регистр сегмента данных селектором кодового сегмента, который является согласованным и разрешенным для чтения;
- •Использовать префикс переопределения cs, чтобы прочитать разрешенный для чтения кодовый сегмент, селектор которого уже загружен в cs регистр.
- •Для команды call (или для команды jmp для согласованного сегмента) должны быть выполнены следующие правила привилегий:
- •Привилегированные команды, которые нужны для систем управления вычислительным процессом;
- •Чувствительные команды (Sensitive Instructions), которые используются для ввода/вы вода и для действий, связанных с вводом/выводом.
- •1) Проверка того, имеет ли назначение, специфицированное указателем право доступа к
- •Проверка того, соответствует ли тип сегмента заданному использованию;
- •Проверка указателя на соответствие границе сегмента.
- •Verw (Verify for Writing) - проверка доступности по записи обеспечивает те же самые возможности, что и verr для проверки доступности по чтению.
- •3.4.4. Уровень защиты страниц
- •1) Ограничение адресуемой области; 2) проверка типа страницы.
- •3.4.5. Комбинирование защиты сегментов и страниц
- •Глава 4
- •4.1. Структура современных 8-разрядных микроконтроллеров
- •4.1.1. Модульный принцип построения
- •Tiny avr - mk в 8-выводном корпусе низкой стоимости;
- •Classic avr - основная линия мк с производительностью до 16 mips, Flash память программ объемом до 8 Кбайт и статическим озу данных 128. ..512 байт;
- •Mega avr - мк для сложных приложений, требующих большого объема памяти (Flash пзу до 128 Кбайт), озу до 4 Кбайт, производительностью до 6 mips.
- •4.1.4. Резидентная память мк
- •4.1.5. Порты ввода/вывода
- •Однонаправленные порты, предназначенные в соответствие со спецификацией мк только для ввода или только для вывода информации.
- •Двунаправленные порты, направление передачи которых (ввод или вывод) определяется в процессе инициализации системы.
- •4.1.6. Таймеры и процессоры событий
- •Импульсную последовательность с выхода управляемого делителя частоты fBijs;
- •Внешнюю импульсную последовательность, поступающую на один из входов мк.
- •Простое увеличение числа модулей таймеров; этот путь характерен для части мк компаний «Pfilips» и «Atmel» со структурой msc-51, для мк компаний «Mitsubishi» и «Hitachi».
- •Изменение логического уровня с 0 на 1 (нарастающий фронт сигнала);
- •Изменение логического уровня с 1 на 0 (падающий фронт сигнала);
- •Любое изменение логического уровня сигнала.
2.7. Работа процессора в защищенном и реальном режимах
Процессоры семейства Р6, как и другие микропроцессоры 80x86, имеют два основных рабочих режима: защищенный и реальный.
Наиболее полно возможности процессора реализуются при работе в защищенном режиме. При этом обеспечивается физическая адресация памяти объемом до 2 32 = 4 Гбайт и доступ к виртуальной памяти объемом до 2 46 = 64 Гбайт. Помимо сегментации памяти в защищенном режиме может быть реализована страничная организация. Этот режим позволяет использовать дополнительные команды, введенные для поддержки многозадачных операционных систем. Кроме того, обеспечивается защита пользовательских программ друг от друга и от операционной системы, предотвращающая возможное взаимное вмешательство в их работу.
При работе в реальном режиме возможности микропроцессора существенно ограничиваются: сокращается до 1 Мбайт объем адресуемой памяти, исключаются основные механизмы защиты, не реализуется страничная организация памяти и многозадачное функционирование систем. Этот режим обычно используется либо как промежуточный для перехода в защищенный режим после инициализации микропроцессорной системы, либо для более быстрого выполнения программ, написанных для микропроцессоров 8086,80186. По сравнению с ними процессоры Р6 в реальном режиме имеют более широкий набор выполняемых команд и обеспечивают обработку 32-разрядных операндов.
Быстрое выполнение программ, написанных для микропроцессоров 8086, вместе с обеспечением защиты памяти, страничной организации и многозадачности достигается при работе процессора в режиме виртуального 8086, который является вариантом защищенного режима.
В настоящей главе подробно рассматривается функционирование процессоров Р6 в защищенном режиме (сегментация, страничная организация памяти, многозадачность), особенности реализации реального режима и режима виртуального 8086.
2.7.1. Сегментация памяти в защищенном режиме
При работе процессора в защищенном режиме каждый из сегментов команд, данных, стека характеризуется соответствующими параметрами, которые определяют локализацию данного сегмента в общем пространстве адресуемой памяти и правила обращения к нему. Параметры сегмента представляются в виде 8-байтной структуры данных, называемой дескриптором. При адресации памяти процессор использует дескриптор для того, чтобы определить разрешено ли обращение к данному сегменту, вычислить адрес ячейки памяти и проверить, находится ли этот адрес в пределах выбранного сегмента.
Дескрипторы сегментов хранятся в памяти в виде массивов данных, которые сформированы в виде таблиц. Таблицы могут иметь размеры от 8 байт до 64 Кбайт, т. е. содержать до 8192 дескрипторов. Имеется три типа таблиц дескрипторов:
GDT - глобальная таблица дескрипторов; LDT-локальная таблица дескрипторов; ЮТ-таблица дескрипторов прерываний.
Таблица GDT содержит дескрипторы, которые могут использоваться системой при выполнении различных задач. Таблицы LDT содержат дескрипторы сегментов, используемых при решении данной задачи. Количество создаваемых таблиц LDT определяется операционной системой и зависит от числа выполняемых задач. Общее количество таблиц LDT может достигать 8192. В принципе, каждая задача может иметь отдельную LDT, которая включает дескрипторы сегментов, используемых при ее решении. В случае совместного использования сегментов таблицы LDT могут полностью или частично перекрывать друг друга. Таблица ЮТ обеспечивает выполнение процедур обслуживания исключений (прерываний), которые будут рассмотрены в гл. 8. В данной главе описывается адресация памяти в защищенном режиме, которая обеспечивается с помощью таблиц GDT и LDT.
Обращение к необходимому дескриптору в таблице осуществляется с помощью селектора, загружаемого в соответствующий сегментный регистр: OS, DS, SS, ES, FS или GS. Селектор представляет собой 16-разрядный указатель, который имеет три поля (рис. 2.39).
Поле RPL (биты 0-1) определяет уровень привилегий запроса (request privilege level). Это двухразрядный код, указывающий допустимый уровень защиты сегмента, который может быть выбран с помощью данного селектора.
Поле TI (бит 2) служит индикатором таблицы. Его значение указывает выбираемую таблицу: GDT при TI = О, LDT при TI = 1.
Поле INDEX (биты 3-15) служит индексом для выбора одного из 8192 дескрипторов, содержащихся в таблице.
Регистр LDTR (см. рис. 2.6) содержит 16-разрядный селектор, определяющий размещение в GDT дескриптора используемой таблицы LDT. Поле INDEX в этом указателе содержит смещение, которое используется для формирования адреса дескриптора таблицы LDT, выбираемого из GDT. Дескриптор LDT содержит 32-разрядный базовый адрес используемой LDT, ее 16-разрядную границу и атрибуты, определяющие права доступа к таблице. При загрузке в LDTR селектора таблицы LDT соответствующий дескриптор выбирается из GDT и хранится во внутреннем программно недоступном регистре процессора — «теневом» регистре LDTR (рис. 2.40).
Загрузка регистров GDTR, LDTR из памяти, а также сохранение в памяти их содержимого реализуется с помощью команд LGDT, LLDT и SGDT, SLDT. Загрузка селекторов в регистры сегментов данных DS, ES, FS, GS, SS производится командами LDS, LES, LFS, LGS, LSS. Регистр CS является программно недоступным, поэтому прямая загрузка в него (или выгрузка) селекторов для выбора сегментов программ невозможна. Начальное содержимое CS устанавливается при инициализации системы и затем изменяется программно при выполнении команд межсегментных вызовов и переходов CALL, JUMP и при переключении задач.
Если селектор, загруженный в сегментный регистр CS, SS, DS, ES, FS или GS, обращается к таблице GDT (бит TI = 0) или LDT (бит TI -1), то его индекс, сдвинутый на три разряда влево
(т. е. умноженный на 8 - число байтов в дескрипторе), служит в качестве относительного адреса (смещения) для формирования адреса дескриптора в данной таблице (рис. 2.40). Это смещение сравнивается с границей таблицы, хранящейся в GDTR или «теневом» регистре LDTR. Если смещение превышает границу, т. е. выходит за пределы таблицы GDT, то вырабатывается прерывание типа #GP («нарушение защиты»). Если нарушения границы нет, то смещение прибавляется к содержащемуся в GDTR базовому адресу, в результате чего образуется адрес младшего байта выбираемого дескриптора. При обращении к таблице LDT проверяются также права доступа к данной таблице, которые устанавливаются также, как для выбираемых сегментов.
Селектор с нулевым значением полей INDEX и TI (разряды 2-15, рис. 2.39) называется • нуль-индикатором. Он обеспечивает обращение к первому дескриптору в таблице GDT (нуль-дескриптор). Загрузка такого селектора в регистр CS или SS для выборки сегмента команд или стека вызывает исключение типа #GP («нарушение общей защиты»). Так как при инициализации системы обычно производится установка нулевых начальных значений дескрипторов и селекторов, то данное исключение предотвращает возможность запуска рабочих программ до загрузки операционной системой необходимых сегментов и дескрипторов.
Таким образом, в защищенном режиме программно задается логический адрес ячеек памяти, хранящих команды или данные, который состоит из селектора и относительного адреса. С помощью селектора и таблиц GDT, LDT процессор производит выборку соответствующего дескриптора. Затем формируется линейный адрес ячейки памяти путем сложения базового адреса, содержащегося в дескрипторе, и относительного адреса, образуемого в соответствии с используемым способом адресации (рис. 2.41). Линейный адрес определяет местоположение ячейки в линейном адресном пространстве, которое может быть разбито на отдельные страницы при введении страничной организации памяти.
Если при работе процессора не используется страничная организация памяти (бит 32 в регистре управления CRO сброшен: PG = 0), то полученный линейный адрес является физическим адресом для выбора требуемой ячейки памяти.
При выполнении программ, написанных для процессоров 80386,80486, Pentium, P6, базовый и относительный адреса содержат по 32 разряда. При работе в режиме виртуального 8086 в качестве базового адреса используется селектор, сдвинутый влево на 4 разряда. Таким образом, базовый адрес имеет 20 разрядов. В этом режиме используется 16-разрядный относительный адрес, а формируемый линейный адрес содержит 20 разрядов.
Иногда при работе микропроцессорной системы сегментации памяти не требуется. В этом случае необходимо загрузить все регистры сегментов селекторами дескрипторов, ' имеющих нулевые базовые адреса и задающие размеры сегментов по 4 Гбайт. В результате каждый из сегментов использует полное адресное пространство, т. е. сегментация подавляется. При этом может быть реализована страничная организация памяти.
В таблицах GOT, LDT могут размещаться следующие виды дескрипторов:
дескрипторы сегментов команд;
дескрипторы сегментов данных;
системные дескрипторы.
В общем, виде формат дескриптора представлен на рис. 2.42, где 32-разрядный базовый адрес сегмента (база ВА31-0) и 20-разрядная граница сегмента (L19-0) размещены по частям в различных байтах дескриптора.
Граница сегмента L указывает максимальное допустимое значение относительного адреса, которое может использоваться при обращении к сегменту. Величина (L+1) определяет размер сегмента в байтах или страницах. Обращение к ячейке памяти, находящейся за границей данного сегмента, вызывает исключение типа #GP.
Помимо базового адреса и границы сегмента дескрипторы задают ряд других важных его атрибутов, состав которых зависит от вида сегмента. Отдельные биты байта 6 дескриптора определяют следующие атрибуты сегмента.
Бит дробности G указывает, в каких единицах задан размер сегмента: в байтах при G = 0 или страницах объемом по 4 Кбайт при G = 1. Таким образом, сегмент может иметь размер до 220 = 1 Мбайт при G = 0 или до 232 = 4 Гбайта при G = 1.
Бит разрядности по умолчанию D/B для сегментов команд определяет разрядность формируемого относительного адреса и выбираемого операнда: 16 разрядов при D/B = О, 32 разряда при D/B = 1. Если производится обращение к сегменту стека (при выполнении команд типа PUSH, POP, CALL), то при D/B = 0 используется регистр SP и 16-разрядные, а при D/B= 1 -регистр ESP и 32-разрядные данные. Для расширяемых вниз сегментов данных (сегменты со стековой адресацией) бит D/B определяет их верхнюю границу: М = FFFFh при D/B = 0 или М = FFFFFFFFh при D/B = 1. Для системных дескрипторов этот бит должен иметь нулевое значение.
Бит 5 в байте 6 всегда должен иметь нулевое значение, а бит 4 (AVL) может принимать значение, устанавливаемое пользователем или операционной системой.
Байт 5 дескриптора определяет права доступа к выбираемому сегменту. В зависимости от вида сегмента байт доступа имеет различные форматы (рис. 2.43), хотя назначение ряда полей (битов) остается одинаковым. Одинаковое назначение имеют следующие биты и поля.
Бит присутствия Р определяет наличие соответствующего сегмента в памяти. Если Р = 0 (сегмент отсутствует), то данный дескриптор не используется для формирования адресов, т. е. соответствующие байты дескриптора не загружаются в регистры, хранящие базовый адрес и размер сегмента. Поэтому содержимое этих байтов может быть установлено произвольно. Если в регистр сегмента поступает селектор дескриптора, имеющего Р = 0, то процессор переходит к обработке соответствующего исключения #NP («отсутствие сегмента»).
Поле DPL (биты 6-5) указывает уровень защиты сегмента (уровень привилегий дескриптора). В зависимости от соотношения значений DPL и RPL, задаваемого в младших битах селектора (см. рис. 2.39), разрешается или запрещается обращение к данному сегменту. Таким образом, обеспечивается требуемый уровень защиты сегмента.
Системный бит S определяет вид выбираемого сегмента. При 8=1 дескриптор обеспечивает обращение к сегментам программ (кодов) или данных (включая стек). Системные дескрипторы, имеющие значение 8 = 0, служат для обращения к таблицам LDT, сегментам состояния задачи TSS или шлюзам для входа в другие задачи или программы, включая программы обслуживания исключений и прерываний.
Форматы байта доступа для дескрипторов сегментов программ и данных (рис. 2.43, а, б) отличаются значениями бита 3, который имеет значение «1» для сегментов программ и «О» для сегментов данных.
Бит обращения А устанавливается в единицу при обращении к сегменту, т. е. при загрузке соответствующего селектора в сегментный регистр. Этот бит периодически проверяется операционной системой, реализующей виртуальную память, которая таким образом выявляет невостребованные сегменты, имеющие А = 0. Сегменты, долгое время остающиеся невостребованными, выводятся из оперативной памяти на магнитный диск, освобождая место для других сегментов.
Назначение битов 1 и 2 байта доступа зависит от типа сегмента.
Бит разрешения считывания R вводится для сегмента программ и разрешает при R=1 производить считывание его содержимого. При R = 0 допускается только выборка содержимого этого сегмента для выполнения через регистр CS. Попытка считывания сегмента в этом случае вызовет исключение типа #GP. Отметим, что прерывание этого типа возникает также при попытке записи в сегмент программ независимо от значения бита R. Таким образом, запись в сегмент программ запрещена. Если возникает необходимость внести изменение в этот сегмент, то можно создать сегмент данных с разрешением записи (W = 1), занимающий то же адресное пространство, что и модифицируемый сегмент программ. После внесения изменений в созданный сегмент данных можно обратиться к нему как к сегменту программ, загрузив селектор этого сегмента в регистр CS.
Бит подчиненности С определяет дополнительные правила обращения, которые обеспечивают защиту сегментов программ: при С = 0 обращение к данному сегменту разрешается только программам, имеющим уровень привилегии CPL (значение поля RPL в регистре CS) такой же, как значение поля DPL в дескрипторе сегмента; при С = 1 допускается обращение к данному сегменту программ, имеющих CPL>=DPL :
Бит разрешения записи W вводится для сегментов данных. Разрешает (при W = 1) или запрещает (при W = 0) изменение содержимого этих сегментов. При W - 0 разрешается только считывание данных, а при попытке записи реализуется исключение типа #GP.
Бит направления расширения Е определяет размещение сегмента данных относительно заданной границы сегмента. При Е = 0 (расширение вверх) данные в сегменте размещаются от базового адреса ВА, задающего нижний предел сегмента до верхнего предела, определяемого суммой базового адреса и границы сегмента: (BA+L). Таким образом, сегмент размещается вниз от границы - в направлении уменьшения адресов до базового.
При Е = 1 (расширение вниз) данные располагаются, начиная с адреса (BA+L+1), определяющего нижний предел сегмента. Остальные ячейки размещаются в направлении возрастания адресов (вниз от границы) до верхнего предела, задаваемого адресом (ВА+М). Верхний предел сегмента в этом случае равен базовому адресу, увеличенному на М = FFFFh (размер сегмента до 64 Кбайт) или на М = FFFFFFFFh (размер сегмента до 4 Гбайт) в зависимости от значения бита разрядности D/B в байте 6 дескриптора (см. рис. 2.42). Размер сегмента будет равен (M-L), и его максимальное значение достигается, когда заданная граница L = 0. Отметим, что для сегментов с расширением вниз значения битов дробности и разрядности должны быть равными: G = D/B.
Таким образом, при расширении вверх (бит Е = 0) относительный адрес выбираемой ячейки должен быть меньше или равен границе сегмента, при расширении вниз (бит Е -1) относительный адрес должен быть больше границы сегмента.
Формат байта доступа для системных дескрипторов (S = 0) приведен на рис. 2.43, в. Поле TYPE определяет тип системного дескриптора в соответствии с табл. 2.58. Можно выделить три основных класса системных дескрипторов.
Таблица 2.58
Дескрипторы таблиц LD 7" обеспечивают обращение к локальной таблице дескрипторов для выбора сегментов, используемых при выполнении текущей программы.
Дескрипторы сегментов TSS используются при переключении задач в многозадачном режиме. При этом бит 3 поля TYPE байта доступа указывает, решается ли вызываемая задача с использованием 16- или 32-разрядных адресов и данных. Бит В в байте доступа сегмента TSS называется битом занятости и указывает, является ли вызываемый сегмент занятым (соответствующая задача находится в процессе выполнения) или доступным (задача еще не поступила на выполнение). Переключение на занятую задачу вызывает исключение типа #GP («нарушение защиты»). Отметим, что дескрипторы LDT и TSS всегда должны иметь значение бита разрядности D/B = 0 (см. рис. 2.42).
Дескрипторы шлюзов используются для реализации специальных правил доступа при обращении к программам и задачам, а также при обработке прерываний и ловушек.
Дескрипторы сегментов, использующих 16-разрядные адреса и операнды при размере сегментов до 1 Мбайт (значения битов G - D/B = 0), имеют нулевые значения байтов 5 и 6 дескриптора (см. рис. 2.42). Такие дескрипторы использовались в 16-разрядных микропро-цесорах 80286. Остальные биты и поля дескрипторов для процессоров 80286 полностью соответствуют форматам, приведенным на рис. 2.42, 2.43. Поэтому процессоры семейства Р6, как и более ранние модели, обеспечивают полную программную совместимость с 16-разрядным микропроцессором 80286, выполняя сегменты команд (программы), написанные для 80286, без какой-либо модификации. Отличие состоит только в разрядности базового адреса, которая для 80286 равна 24 битам (ВА23-0 в байтах 2,3,4 дескриптора), и границе сегмента, которая не должна превышать 64 Кбайт (L15-0 в байтах 0,1 дескриптора). Дробность и разрядность для этих сегментов устанавливается байтами G, D/B дескриптора, которые имеют нулевое значение.
Если системные дескрипторы имеют нулевые значения старших байтов 6,7 дескриптора (дескрипторы, аналогичные используемым для процессора 80286), то старший бит в поле TYPE байта доступа (см. рис. 2.43, в) всегда должен иметь нулевое значение. При этом допускается использование только тех типов системных дескрипторов, которые указаны в восьми верхних строках табл. 2.58.