
- •3. Работа процессоров в защищенном и реальном режимах
- •3.1 Сегментация памяти в защищенном режиме
- •3.2. Страничная организация памяти
- •3.3. Защита памяти
- •3.4. Многозадачность
- •3.13. Структура сегмента tss
- •3.5. Реализация режима виртуального 8086 (v86)
- •3.6. Функционирование процессора в реальном режиме
- •4. Реализация прерываний и исключений. Обеспечение тестирования и
- •4.1. Виды прерываний и исключений, реализация их обслуживания
- •4.2. Обработка прерываний в реальном и защищенном режимах
- •4.3. Причины возникновения исключений [1,4]
- •4.4. Реализация и обслуживание виртуальных прерываний
- •4.5. Реализация прерываний в мультипроцессорных системах
- •4.6. Средства обеспечения отладки
- •4.7. Реализация тестирования и контроля функционирования
- •5. Режим системного управления работой процессора. Инициализация, мониторинг производительности и обмен по системной шине
- •5.1. Режим системного управления (smm)
- •5.2. Инициализация и реализация энергосберегающих режимов
- •5.3. Метки реального времени и мониторинг производительности
- •Оглавление
3.6. Функционирование процессора в реальном режиме
В реальном режиме процессор выполняет программы, написанные для микропроцессоров 8086 (или 8088) и для реального режима других микропроцессоров семейства. С точки зрения программиста процессор Р6 в реальном режиме представляет собой более быстрый процессор 8086 с расширенным набором команд и регистров. При работе в реальном режиме все процедуры выполняются с наиболее высоким уровнем привилегий (CPL=0), в отличие от процедур в режиме V86, для которых устанавливаются низший уровень привилегий (CPL=3).
В реальном режиме процессор выполняет весь набор команд за исключением команд управления ARPL, LAR, LSL, LTR, STR, SLDT, LLDT, VERR, VERW. При поступлении этих команд, которые оперируют с дескрипторами сегментов, реализуется исключение типа #UD ("неправильный код операции").
При работе в данном режиме процессор не обращается для формирования адресов к дескрипторам сегментов, а использует для образования базового адреса сегмента значение селектора, расположенного в соответствующем регистре CS, SS, DS, ES, FS или GS. Формирование физического адреса в реальном режиме иллюстрирует рис. 3.17. Базовый адрес сегмента имеет 20 разрядов и образуется путем сдвига 16-разрядного селектора (содержимого регистра CS, SS, DS, ES, FS или GS) влево на 4 разряда. Размеры сегментов фиксированы и составляют 64 Кбайт. Допускается взаимное наложение сегментов. Линейный адрес, образованный в результате суммирования базового адреса и селектора, служит физическим адресом для выбора байта, так как в реальном режиме страничная организация не реализуется. Если полученный физический адрес выходит за границу адресуемой в реальном режиме память (1 Мбайт), то выполняется исключение типа #GP.
По умолчанию в реальном режиме используются 16-разрядные операнды и адреса. При использовании префиксов можно обрабатывать 32-разрядные операнды и формировать 32-разрядные адреса. Однако если эти адреса выходят за пределы границ сегмента (64 Кбайт) или адресуемой памяти (1 Мбайт), то реализуется исключение типа #GP.
Отметим, что в памяти системы должны быть зарезервированы две области, необходимые для обеспечения реального режима. Первые 1024 ячейки памяти (адреса от 0000h до 03FFh) резервируются в реальном режиме для размещения векторов прерываний. Последние 16 ячеек памяти (адреса от FFFFFFFOh до FFFFFFFFh) резервируются для программы инициализации системы. После включения процессора программа инициализации автоматически вводит его в реальный режим. Аналогичная процедура выполняется и после поступления сигнала сброса. Перейти из реального в защищенный режим можно с помощью команд MOV или LMSW, загружающих в регистр CRO слово состояния с установленным битом защиты РЕ=1. Перед этим в реальном режиме должна быть проведена загрузка необходимых регистров (GDTR, LDTR, и др.) и таблиц (GDT, LDT и др.), используемых в защищенном режиме.
Рис. 3.17. Формирование физического адреса в реальном режиме
Обратное переключение из защищенного в реальный режим выполняется только командой MOV, загружающей в регистр CRO слово, которое имеет значение бита РЕ=0 (команда LMSW не может устанавливать значение РЕ=0). Предварительно необходимо провести некоторые подготовительные процедуры, обеспечивающие сохранение правильного функционирования процессора при переходе к реальному режиму: отключить механизм страничной трансляции, перейдя к использованию линейных адресов, равных физическим; установить для всех сегментов размер 64 Кбайт и ряд других. После выполнения команды MOV, устанавливающей в регистре CRO бит РЕ=0, следует перейти к программе, выполняемой в реальном режиме, с помощью команды межсегментного перехода JMP, которая очищает очередь команд. Затем в сегментные регистры загружается новое содержимое, обеспечивающее формирование физических адресов в реальном режиме (рис. 3.17).