Тема №6. Режимы работы процессора

advertisement
Тема №6. Режимы работы процессора
Впервые о различных режимах работы процессоров Intel x86 стали говорить с появлением
процессора 80286. Это был первый представитель данного семейства процессоров, в
котором были реализованы многозадачность и защищенная архитектура. Чтобы
обеспечить совместимость с предыдущими представителями этого семейства
(8086,8088,80186) в процессоре 80286 было реализовано два режима функционирования:
режим эмуляции 8086 (режим реального адреса) и защищенный режим, в котором
используются все возможности процессора. В последующих поколениях процессоров
этого семейства защищенный режим становится основным режимом работы. Для
процессоров, начиная с 80386, иногда говорят еще об одном режиме работы виртуальном режиме (режим виртуального 8086).
В новых поколениях процессоров Intel появился еще один режим работы - режим
системного управления (System Management Mode). Впервые он был реализован в
процессоре 386SL и 486SL. Начиная с расширенных моделей 486х процессоров, этот
режим стал обязательным элементом архитектуры x86-совместимых процессоров. С его
помощью прозрачно даже для операционной системы на уровне BIOS реализуются
функции энергосбережения.
Режимы рассматриваются для 32-разрядных процессоров семейства Intel: 80386, i486,
Pentium, а также процессоров с архитектурой P6 (Pentium Pro, Pentium II, Celeron, Xeon,
Pentium III).
Real Mode (RМ) – режим реальной адресации, соответствующий работе системы
с CPU 8086, используется только в MS DOS. Область адресов, доступных системе (1
Мбайт),
не
защищена.
Реализованы
двадцать
адресных
линий,
режим
однопользовательский. Однако при этом работают 32-битовые регистры CPU. По
умолчанию используются все имеющиеся команды, длина операндов 16 бит. Для
работы с 32-разрядными операндами и использования дополнительных режимов
адресации применяют специальный префикс переадресации. 32-разрядный адрес не
превышает границы сегмента 64 Кбайт (0000H-FFFFH), в противном случае
констатируется особая ситуация - 13Н. Для обеспечения доступа к адресному
пространству шириной до 1 Мбайт в работе участвуют линии А [19/02], BEO#-BE3#.
Исполнительный адрес всегда соответствует физическому, страничный механизм
отключен. Все сегменты могут находиться в состоянии записи, считывания или
выполнения.
Protected
Mode (РМ) – режим виртуальной адресации (защищенный
режим).
Виртуальная адресация – это способ организации доступа к информации, при котором
большая ее часть располагаются не в физическом ОЗУ, а в устройствах внешней памяти
(УВП), откуда она периодически подкачивается в ОЗУ (swapping), что создает иллюзию
расширения его размеров.
При включении ПЭВМ первоначально принимает RM. Для перевода в РМ используют
системные команды LMSW, SMSW. При установке бита PF=1 в MSW CPU переходит в
РМ, в котором реализуется доступ к 4 Гбайт ОЗУ в 32-битовом адресном физическом
пространстве исполнительных адресов. Доступ к 64 Тбайт памяти реализуется в
виртуальном (логическом) адресном пространстве.
Предусмотрена защита по многоуровневому принципу операционной системы и
прикладных задач. Реализуется мультипрограммность.
Для обратного перевода из РМ в RM команды LMSW, SMSW не используются. Система
должна быть перезагружена либо аппаратно («холодный» старт), либо программноаппаратно – через порты 60Н, 64Н контроллера 8042 командой вывода out и далее
через внутренний сигнал RC и узел Shut down ко входу Reset I386 («теплый» старт
осуществляется нажатием клавиш).
Для осуществления программного перехода из РМ в RM может быть использована
команда MOV CR0 (LCR0).
Protected
Mode 86 (VM 8б) – режим виртуальной адресации 86 устанавливает исполнительную среду I86 внутри защищенной многозадачной среды PM
CPU I386. При этом поддерживается исполнение всех программ, написанных для
предыдущих поколений. Первоначально в рамках VM 86 оборудование формирует 20разрядный линейный адрес по системе, аналогичной RM. Однако, благодаря
включению механизма страничной адресации и системе двухуровневой защиты,
линейный адрес шириной в 1 Мбайт может быть разбит на 256 страниц по 4 Кбайт
каждая, и размещен в физическом адресном пространстве до 4 Гбайт. В этом объеме
физической памяти можно в окнах по 1 Мбайт расположить множество копий MS DOS
или других операционных систем и их программ, представляющих отдельные
виртуальные машины, работающие в мультизадачном режиме. Вход и выход в режим
VM86 возможен посредством перезагрузки регистра флагов (бит 17), либо при
переключении с задачи на задачу с привлечением сегмента состояния задачи (TSS),
либо в процедуре прерывания (команда IRET), либо при использовании команды POPF.
Page Protected Mode – режим страничной адресации.
Это альтернативный режим управления памятью, позволяющий разделить крупные
массивы информации на более компактные блоки размером по 4 Кбайт. Аппаратно для
реализации режима в CPU I386 дополнительно включается страничный механизм,
транслирующий линейный адрес в физический. Переход из RM в Page М программный:
командами LMSW, SMSW, MOV CR0, MOV CR3. Обратный переход осуществляется либо
перезагрузкой, либо программным путем (манипуляция битом 31 регистра CR0).
ПЕРЕКЛЮЧЕНИЕ МЕЖДУ РЕЖИМАМИ
После
инициализации
процессор находится в режиме
реального адреса. Процессор
может
быть
переведен
в
защищенный
режим
установкой бита
0
(Protect
Enable) в регистре CR0:
MOV EAX,00000001h
MOV AX,0001h
или
MOV CR0,EAX
LMSW AX
Второй вариант "достался в наследство" от 16-тиразрядной архитектуры 80286, для
совместимости с которой ее регистр MSW (Machine Status Word) отображается на
младшее слово регистра CR0.
Вернуться в режим реального адреса процессор может по сигналу RESET или (в
отличие от 80286) сбросив бит PE:
MOV EAX,00000000h
MOV CR0,EAX
Для совместимости с 80286 инструкция LMSW бит PE не сбрасывает.
Режим системного управления изолирован от других режимов. Процессор переходит в
этот режим только аппаратно: по низкому уровню на контакте SMI# или (для Pentium и
выше) по команде с шины APIC. Никакой программный способ не предусмотрен для
перехода в этот режим. Процессор возвращается из режима системного управления в тот
режим, при работе в котором был получен сигнал SMI#. Возврат происходит по
команде RSM. Эта команда работает только в режиме системного управления и в других
режимах не распознается, генерирую исключение #6 (недействительный код операции).
ФОРМИРОВАНИЕ ФИЗИЧЕСКОГО АДРЕСА
В различных режимах процессор по-разному формирует физический адрес. Существует
три этапа формирования физического адреса:
1. Формирование эффективного адреса: из логического адреса (база-индекссмещение) процессор вычисляет эффективный адрес - расстояние от базового
адреса текущего сегмента памяти.
2. Формирование линейного адреса: эффективный адрес складывается с базовым
адресом сегмента, полученное значение является адресом в плоском (линейном)
4Гбайтном виртуальном пространстве.
3. Страничная трансляция адресов: линейное 4Гбайтное адресное пространство с
помощью 4Кбайтных страниц отображается на физически присутствующие блоки
памяти (физическое пространство).
Первый этап во всех режимах проходит одинаково. Различия начинаются со второго
этапа. В различных режимах по-разному определяется базовый адрес сегмента. Третий
этап присутствует только в защищенном режиме - в режиме реального адреса и в режиме
системного управления страничное преобразование адресов запрещено, полученный
линейный адрес считается физическим адресом. Однако и в защищенном режиме
страничной трансляции может не быть. Страничная трансляция включается программно
установкой бита 31 (Paging) в регистре CR0:
MOV EAX,80000001h
MOV CR0,EAX
Формирование линейного адреса без участия селекторов.
В режиме реального адреса и в режиме системного управления используется упрощенная
схема формирования линейного адреса. Эта же схема используется для вычисления
адресов задачи защищенного режима, находящейся в состоянии эмуляции 8086 (Virtual
8086 Mode). В этом случае базовый адрес сегмента берется из сегментного регистра.
Значение в сегментном регистре представляет собой биты 4-19 базового адреса сегмента.
Из этого следует, что сегменты в этих режимах выравнены по 16-байтной границе и все
сегменты начинаются в пределах нижнего мегабайта линейного адресного пространства.
Предел для всех сегментов одинаков. В режиме реального адреса и для задачи в состоянии
VM86 предел сегмента - 64Кбайт, а в режиме системного управления - 4Гбайт.
Формирование линейного адреса в защищенном режиме
Особенностью защищенного режима является использование селекторов и
дескрипторов для обращения к памяти.
Дескриптор - это 8-байтная единица описательной информации, распознаваемая
устройством управления памятью в защищенном режиме, хранящаяся в дескрипторной
таблице.Дескриптор сегмента содержит базовый адрес описываемого сегмента, предел
сегмента и права доступа к сегменту. Дескрипторы являются основой защиты и
мультизадачности. В защищенном режиме сегменты могут начинаться с любого
линейного адреса и иметь любой предел вплоть до 4Гбайт. Существуют две
обязательных дескрипторных таблицы - глобальная (GDT) и дескрипторная таблица
прерывания (IDT),- а также множество (до 8192) локальных дескрипторных таблиц (LDT),
из которых в один момент времени процессору доступна только одна. Дескрипторы
сегментов могут находиться в GDT или LDT. Расположение дескрипторных таблиц
определяется регистрами процессора GDTR, IDTR, LDTR. Регистры GDTR и IDTR - 6байтные, они содержат 32 бита линейного базового адреса дескрипторной таблицы и 16
бит предела таблицы. Программно доступная часть регистра LDTR - 16 бит, которые
являются селектором LDT. Дескрипторы LDT находятся в GDT. Однако чтобы не
обращаться каждый раз к GDT в процессоре имеется теневая (программно недоступная)
часть регистра LDTR, в которую процессор помещает дескриптор LDT при каждой
перегрузке селектора в регистре LDTR.
Значения, помещаемые в сегментные регистры, называются селекторами. Селектор
содержит индекс дескриптора в дескрипторной таблице, бит определяющий, к какой
дескрипторной таблице производится обращение (LDT или GDT), а также запрашиваемые
права доступа к сегменту. Таким образом, селектор выбирает дескрипторную таблицу,
выбирает дескриптор из таблицы, а по дескриптору определяется положение сегмента в
линейном пространстве памяти. Однако обращение к дескрипторным таблицам
происходит только при загрузке селектора в сегментный регистр. При этом процессор
помещает дескриптор в теневую (программно недоступную) часть сегментного регистра.
При формировании линейного адреса дескриптор сегмента процессору уже известен.
Страничное преобразование адресов
Механизм сегментации обеспечивает превосходную защиту, но он не очень удобен для
реализации свопинга (подкачки). В дескрипторе сегмента есть бит присутствия, по нему
процессор определяет, находится ли данный сегмент в физической памяти или он
находится в ВЗУ (на винчестере). В последнем случае генерируется исключение #11,
обработчик которого может подгрузить сегмент в память. Неудобство заключается в том,
что различные сегменты могут иметь различную длину. Этого можно избежать, если
механизм подкачки реализовывать на основе страничного преобразования. Особенностью
этого преобразования является то, что процессор в этом случае оперирует с блоками
равной длины (4Кбайт) - страницами.
В страничном преобразовании участвуют два типа структур: каталоги таблиц и таблицы
страниц. Эти структуры состоят из 1024 32-битных элементов. Элементы содержат
старшие 20 бит физического адреса адресуемых объектов. Элементы таблицы страниц
адресуют страницы, а элементы каталога таблиц адресуют таблицы страниц. Старшие 20
бит физического адреса каталога таблиц хранится в регистре CR3 (Page Directory Base
Register). (Это единственный регистр процессора, который содержит физический адрес
памяти). Все структуры выравнены по границе страницы.
В процессе страничной трансляции адресов полученный линейный адрес разбивается на
три части. Старшие десять бит линейного адреса являются индексом элемента из каталога
таблиц. По этому элементу определяется физический адрес таблицы страниц. Биты 21-12
линейного адреса выбирают элемент из этой таблицы страниц. Выбранный элемент
определяет физический адрес страницы. Младшие 12 бит линейного адреса определяют
смещение от начала страницы.
В процессорах, начиная с Pentium, страницы могут иметь размер 4Кбайт или 4Мбайт
(эта возможность называется расширением размера страниц), а в процессорах с
архитектурой P6 при включенном расширении физического адреса - 4Кбайт или 2Мбайт.
(Расширение физического адреса заключается в использовании 36-битного физического
адреса вместо 32-битного.) Расширение размера страниц включается установкой бита 4
(Page Size Extension) в регистре CR4, а расширение физического адреса - установкой бита
5 (Physical Address Extension) в регистре CR4. Обе возможности работают только в
защищенном режиме при включенной страничной трансляции адресов. В таблице
показаны возможные сочетания управляющих битов и их совокупный результат.
PG
(CR0)
PAE
(CR4)
PSE
(CR4)
PS
(PDE)
Размер
страницы
Разрядность физического
адреса
0
x
x
x
-
32 бит
1
0
0
x
4K
32 бит
1
0
1
0
4K
32 бит
1
0
1
1
4M
32 бит
1
1
x
0
4K
36 бит
1
1
x
1
2M
36 бит
Для страниц размером 4Мбайт действует упрощенная (одноуровневая) схема
формирования физического адреса. В этом случае физический адрес (старшие 10 бит)
страницы хранится непосредственно в каталоге таблиц. Младшие 22 бита линейного
адреса задают смещение от начала страницы. Конечно, страницы большого размера
неудобны для подкачки при работе с маленькими приложениями, но тот факт, что при
включенном PSE (или PAE) в системе можно использовать страницы обоих размеров
позволяет повысить эффективность работы: на страницах большого размера можно
разместить код операционной системы, к которому часто обращаются все приложения и
который не следует выгружать из памяти, при этом экономится место - не нужны
промежуточные таблицы страниц.
В процессорах с архитектурой P6 шина адреса 36-разрядная, однако для того, чтобы
процессор генерировал 36-битные адреса необходимо включить PAE. Для того, чтобы
хранить физический адрес большей разрядности размер элементов каталогов таблиц и
таблиц страниц увеличен до 64 бит, а число элементов сокращено до 512 (чтобы каждая
структура занимала ровно 4Кбайт - одну страницу памяти). Сокращение числа элементов
привело к уменьшению размеров индексов, в результате высвободилось два старших бита
в линейном адресе. Они используются для индексации еще одной структуры - таблицы
указателей на каталоги таблиц страниц (PDPT). Эта таблица содержит четыре 64-битных
элемента, задающих физические адреса каталогов таблиц. Если при 32-битной адресации
активен только один каталог таблиц, старшие 20 бит адреса которого хранятся в регистре
CR3(PDBR), то при 36-битной адресации активных каталогов 4. Их адреса хранятся в
PDPT, а регистр CR3 в этом случае хранит адрес PDPT (старшие 27 бит физического
адреса в битах 5-31 регистра CR3) и называется Page-Directory-Pointer Table Register.
Таким образом, формирование физического адреса для 4Кбайтных страниц
трехуровневое, а для 2Мбайтных страниц - двухуровневое.
ЗАЩИТА ПО ПРИВИЛЕГИЯМ
Специфической особенностью защищенного режима является защита по привилегиям.
В процессоре имеется два уровня защиты: защита на уровне сегментов и защита на уровне
страниц.
Защита на уровне сегментов
Защита на уровне сегментов представлена четырьмя уровнями привилегий. Наиболее
привилегирован нулевой уровень, наименее привилегирован - третий. В реальных
операционных системах обычно не используются все четыре уровня. UNIX и Windows,
например, используют только два уровня привилегий - 0 (для ядра системы) и 3 (для всего
остального), а OS/2 использует уровни 0 (для ядра системы), 2 (для процедур вводавывода) и 3 (для прикладных программ).
Для описания механизма защиты пользуются следующими понятиями:
Уровень привилегий дескриптора (Descriptor Privilege Level: DPL) - уровень привилегий,
на который помещен описываемый дескриптором объект. Поле DPL хранится в байте
прав доступадескриптора.
Текущий уровень привилегий (Current Privilege Level: CPL) - уровень привилегий
выполняемого сегмента кода. Это значение соответствует DPL сегмента кода (кроме
подчиняемых сегментов кода). Значение CPL хранится в поле RPL селектора сегмента
кода, который помещен в регистр CS.
Запрашиваемый уровень привилегий (Requested Privilege Level: RPL) - используется для
временного понижения своего уровня привилегий при обращении к памяти. RPL заносится
в младшие биты селектора.
Уровень привилегий ввода-вывода (Input/Output Privilege Level: IOPL) - указывает какой
уровень привилегирован для работы с портами ввода-вывода. Это значение хранится
в регистре
EFLAGS и может быть различным для разных задач (см.
"Мультизадачность").
Защита на уровне сегментов состоит в защите от выполнения привилегированных
команд,
защите
доступа
к
данным
и
защите
сегментов
кода.
В процессоре есть команды, которые могут кардинально изменить состояние всей
системы. Такие команды выполняются только на нулевом уровне привилегий, а на всех
других уровнях вызывают нарушение общей защиты (исключение #13). К этим командам
относятся:







HLT - останов процессора;
CLTS - сброс флажка Task Switched (исп. при управлении
мультизадачностью);
LIDT, LGDT, LLDT - загрузка регистров дескрипторных таблиц;
LTR - загрузка регистра задачи;
LMSW - загрузка младшего слова регистра CR0;
MOV CRx,reg32 - работа с управляющими регистрами;
MOV DRx,reg32 - работа с регистрами отладки;
а также команды работы со специфическими регистрами (TRx - для 386,486;
MCRs - для Pentium и P6; MTRRs - для P6). Следует отметить, что
команда POPFD также чувствительна к уровню привилегий. Она не изменяет
состояние управляющих флажков IOPL, IF и др., если выполняется на уровне
привилегий, отличном от нулевого.
Кроме безусловно привилегированных команд есть команды чувствительные
к уровню привилегий ввода-вывода. Это команды работы с портами (IN, INS,
OUT, OUTS) и команды сброса/установки флажка разрешения прерываний ( CLI,
STI). Эти команды выполняются только в том случае, если CPL<=IOPL. Если это
условие не выполняется, то для команд ввода-вывода производится
дополнительная сверка с картой разрешения портов ввода-вывода (см.
"Мультизадачность"). Если код не имеет привилегий на выполнение команды,
то возникает нарушение общей защиты (исключение #13).
Второй аспект защиты - защита доступа к данным. Код имеет право
обратиться к данным, которые находятся на том же или на более низком уровне
привилегий. При этом учитывается не только CPL, но и RPL. Данные доступны,
если дескриптор сегмента данных имеет
DPL>=max(CPL,RPL).
Такой контроль производится при загрузке селекторов в сегментные регистры
(DS,ES,FS,GS). В сегментный регистр можно загрузить только селектор
доступного с текущего уровня привилегий сегмента данных или, если
сегментный регистр не будет использоваться, пустой селектор. Попытка
нарушить правило привилегий или загрузить селектор системного дескриптора
или дескриптора сегмента кода только для выполнения в сегментный регистр
данных приведет к нарушению общей защиты (исключение #13). Кроме того, в
командах изменения данных в памяти производится проверка на возможность
записи в сегмент.
Особое правило привилегий для сегментов стека. Стек должен находиться
строго на том же уровне привилегий, что и код программы (DPL=CPL). При
этом сегмент стека обязательно должен быть присутствующим (P=1) и для него
должны быть доступны операции и чтения, и записи (типы Data ReadWrite или Stack Read-Write).
Для защиты сегментов кода используется жесткое правило привилегий:
DPL=CPL.
Т.е. межсегментные команды FAR JMP и FAR CALL могут передавать
управление сегментам кода в пределах того же уровня привилегий.
Исключением являются подчиненные сегменты кода. При передаче управления
подчиненному сегменту действует правило:
DPL>=max(CPL,RPL).
Однако при этом подчиненный код будет выполняться на том же уровне
привилегий, что и вызвавший его код (CPL не изменится).
Для передачи управления между уровнями привилегий используются
системные дескрипторы, называемые шлюзами вызова. Дескриптор шлюза
вызова содержит точку входа в привилегированную процедуру
(селектор:смещение) и число передаваемых ей через стек параметров. Для
передачи управления привилегированной процедуре адресуется не сама
процедура, а шлюз к ней. Шлюзы можно адресовать только в команде FAR
CALL, т.е. "насовсем" сменить уровень привилегий таким способом нельзя,
всегда предполагается возврат на более низкий уровень привилегий. Правило
разрешения вызова через шлюз выглядит так:
DPLцели<=max(CPL,RPL)<=DPLшлюза.
Примеры разрешенных переходов показаны на картинке.
При переключении уровней привилегий происходит переключение стека. При
этом из внешнего (менее привилегированного) стека происходит копирование
указанного в шлюзе числа параметров во внутренний стек. Перед этим во
внутреннем стеке сохраняется указатель вершины внешнего стека. После
копирования параметров во внутренний стек заносится адрес возврата.
Привилегированная процедура должна заканчиваться инструкциейRETF n, где
n
число
байт,
занимаемых
параметрами
в
стеке.
(Таким образом, при смене уровней привилегий в процессорах Intel x86 реализовано соглашение о связях языка Pascal.)
На картинке показан пример переключения стека PL3->PL0 с передачей трех
параметров.
Защита
на
уровне
страниц
Защита страниц обеспечивается двумя уровнями привилегий: супервизор и
пользователь. Уровню супервизора соответствуют 0-й, 1-й, 2-й уровни
привилегий сегментов, а уровню пользователя - 3-й. Для каждой страницы
указывается (в PDE/PTE), с какого уровня привилегий она доступна. Правило
привилегий таково: с уровня супервизора доступны все страницы, а с уровня
пользователя - только страницы с битом U/S=1. Кроме того, в PDE/PTE
указывается тип доступа к странице (доступна ли страница для записи): R/W=0 только чтение, R/W=1 - доступны чтение и запись. Следует отметить
действие бита 16 (Write Protect) в регистре CR0. Когда этот бит выставлен,
страницы уровня пользователя с пометкой "read-only" защищены от записи при
обращениях с уровня супервизора.
СРАВНИТЕЛЬНЫЕ ХАРАКТЕРИСТИКИ РЕЖИМОВ ПРОЦЕССОРА
Характеристика
RM
PM, VM=0
PM, VM=1
SMM
Формирование
линейного адреса
без участия через селекторы без
участия без
участия
селекторов и дескрипторы селекторов
селекторов
Предел сегментов
64К
определяется
дескриптором
64К
4Г
Размер адреса/данных
16 бит
по умолчанию
определяется
дескриптором
16 бит
16 бит
Максимальный объем
доступной
памяти 1M+64K-16
(виртуальной)
64T-2х4Г
1M+64K-16
4Г
Защита
Нет
Да
Только
на
Нет
уровне страниц
Страничное
преобразование (в т.ч. Нет
PAE)
Да
Да
Нет
Мультизадачность
Да
Да
Нет
Обработка
прерываний
Нет
IDT
таблица
векторов
IDT
таблица
- IDT
- IDT
- векторов,
дескрипторная дескрипторная необходима
таблица
таблица
специальная
инициализация
Download