Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Механизмы аппаратной поддержки операционных систем. Учебное пособие
.pdf
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
PG
…………………………
ET
TS
EM
MP
PE
Регистр CR0 содержит флаги управления режимами работы
процессора. Среди них есть флаги, устанавливаемые аппаратно, и
флаги, программно устанавливаемые операционной системой.
Рассмотрим назначение наиболее важных флагов.
31 4 3 2 1 0
РЕ (Protection Enable) – программная установка режима работы
процессора: 0 – реальный режим , 1 – защищенный. При включении
процессора РЕ всегда устанавливается в 0. Установка защищенного
режима выполняется операционной системой, например, командой:
OR CR0, 1.
PG (Paging Enable) - программное включение механизма
страничного преобразования адресов: 0 – выключено, 1 – включено.
Включить механизм страничного преобразования адреса можно
одной командой: OR CR0, 8000h
TS (Task Switched) - флаг переключения задач. Устанавливается
процессором при каждом переключении задач. Сбрасывается
программно командой CLTS с уровня операционной системы.
ЕМ (Emulate) - эмуляция арифметического сопроцессора. При
значении 1 выполнение команд арифметического сопроцессора
производится программно (в ранних моделях процессоров).
ЕТ (Extention Type) - тип арифметического сопроцессора: 16
разрядный – 0, 32-разрядный - 1. В современных процессорах всегда
равен 1;
МР (Math Present) - бит присутствия арифметического
сопроцессора. Устанавливается операционной системой программно,
если сопроцессор есть.
Регистры CR2 и CR3 используются процессором и операционной
системой при страничной адресации.
Регистры отладки
Это 32-разрядные регистры DR0, DR1,..DR7. Они предназначены
для аппаратной отладки. Позволяют выполнять трассировку команд и
устанавливать контрольные точки.
Отладочный регистр может быть исходным операндом или
операндом назначения этих команд. Доступ к этим регистрам
выполняется с помощью разновидностей команды MOV.
51

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Отладочные регистры относятся к привилегированным
ресурсам и доступны только операционной системе.
64-разрядный режим
64-разрядный режим процессора полностью аналогичен
защищенному режиму по основным аспектам аппаратной поддержки
операционной системы. Все новые механизмы, появившиеся в
защищенном режиме, также присутствуют в 64-разрядном режиме.
Поэтому, в дальнейшем изложении все механизмы
рассматриваются применительно к защищенному режиму.
Основными отличиями режима является увеличение разрядности
процессоров и внутрисегментной адресации до 64-разрядов и
физической адресации памяти процессором. Это дает возможность
- использования 64-битных операндов в командах процессора;
- исполнения 64-разрядных программы;
- адресации пространства физической памяти до 4 Петабайт (252
байт).
В 64-разрядный режим процессор можно перевести только
программно из защищенного режима.
64-разрядный режим содержит под-режим, эмулирующий 32разрядную программную среду защищенного режима. Называется он
под-режим «совместимости» и предназначен для исполнения 32разрядных программ в 64-разрядном режиме.
Программная модель процессоров в 64-разрядном режиме
Процессор содержит следующие программно-доступные регистры:
- 64- разрядные: RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP -
расширенные из 32-разрядных и R8 - R15 – новые 64-разрядные
регистры;
- 32-разрядные: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP и
новые R8D -R15D (младшие половины новых 64-разрядных R8 - R15);
- 16-разрядные регистры: старые AX, BX, CX, DX, SI, DI, SP, BP и
новые R8W - R15W (младшие половины 32-разрядных R8D -R15D );
- 8 -разрядные регистры: старые AH, BH, CH, DH, AL, BL, CL, DL
и SIL, DIL, SPL, BPL, R8L, …R15L (старшие и младшие половины 16-
разрядных)
52

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
- 16-разрядные сегментные регистры: CS, DS, ES, SS, FS, GS
- 64-разрядный указатель команд RIP
- 64-разрядный регистр флагов
- регистры, используемые арифметическим сопроцессором при
операциях с плавающей точкой: 80-битные ST0, ..ST7; 64-битные
MMX-регистры ММ0-ММ7; 128-битные ХММ-регистры
- системные регистры, используемые ОС: 64-разрядные реестры
управления CR0 –CR4, CR8; регистры-указатели системных таблиц
GDTR, IDTR, LDTR и регистр исполняемой задачи TR. 64-разрядные
регистры отладки DR0-DR3, DR6, DR7.
Общая схема регистровых структур показана на рис.23.
Существующие 32-разрядные регистры расширены до 64регистров и остались их младшими половинами. Например, 64разрядный RAX своей младшей половиной имеет существующий 32разрядный регистр EAX.
Добавлено еще восемь новых 64-разрядных регистров.
Рис.25 - Регистровые структуры в 64-разрядном режиме
53

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
6. Управление памятью в защищенном режиме
Сегментное управление памятью
В защищенном режиме сохраняется принцип сегментации
памяти, когда загружаемой в память программе (задаче) выделяется
один или несколько независимых участков (сегментов) памяти.
В защищенном режиме программными компонентами адреса
памяти, как и в реальном режиме, являются: указатель сегмента
(селектор сегмента) и внутрисегментное смещение.
Внутрисегментное смещение в защищенном режиме может быть
32-разрядным. Таким образом, размер сегмента может достигать
максимального объема физической памяти - 4 Гб.
В реальном режиме сегментная адресация была вынужденной
мерой, так как на 16-разрядном смещении невозможно программно
прямо адресовать физическую память размером в 1 Мб.
В защищенном режиме сегментация памяти – это идеологический
подход «виртуальной памяти», позволяющий рассматривать любой
программный сегмент памяти, как объект загруженной задачи с
определенными свойствами.
Теперь операционная система может вести информацию о
характеристиках каждого загруженного в память сегмента - его адресе,
размере и типе, устанавливать ограничения на доступ к нему, назначать
привилегии сегмента и многое другое.
Программная служебная структура, создаваемая операционной
системой в этих целях, называется Таблицей дескрипторов сегментов
(Descriptor Table).
Дескрипторные таблицы
Таблица дескрипторов сегментов представляет собой массив 8-ми
байтовых дескрипторов. Когда операционная система загружает в
память очередной программный сегмент, она создает соответствующий
дескриптор в дескрипторной таблице.
Каждый дескриптор содержит информацию об одном сегменте,
размещенном в памяти: адрес сегмента, размер сегмента, тип сегмента,
ограничения на доступ к нему, привилегии сегмента и другие
характеристики.
Все дескрипторы в дескрипторной таблице пронумерованы.
Первый дескриптор в таблице имеет номер 0, следующий – 1 и т.д.
54

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
смещение от начала
Дескрипторной
таблицы (в байтах)
7 0
0
Дескриптор 0
8
Дескриптор 1
16
Дескриптор 2
. . .
. . . . . .
8*N
Дескриптор N
. . . . .
7 0
0
Предел сегмента
1
(младшие 16 бит)
2 3
Базовый адрес сегмента
4
5
Байт доступа
6
G
D
L
0
Предел сегмента
(старшие 4 бита)
7
Базовый адрес
(старший байт)
Размещение дескрипторов в дескрипторной таблице однозначно связано
с номером: 0-й дескриптор имеет смещение 0 (в байтах) от начала
таблицы, 1-й дескриптор – смещение 8, 2-й дескриптор – смещение 16 и
т.д.
Максимальное количество дескрипторов в одной дескрипторной
таблице - 2
13
. Это ограничение определяется форматом номера
дескриптора – 13 бит.
Формат дескриптора сегмента
8-байтовый дескриптор сегмента содержит (начиная с младших
байтов структуры):
- Предел смещения в сегменте - 2 байта;
- Базовый адрес сегмента – 3 байта;
- Байт доступа сегмента ;
- Предел смещения (старшие биты) и признаки – 1 байт;
- Базовый адрес сегмента (старшие биты) – 1 байт.
55

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Программное описание формата дескриптора:
Desc_N: dw ? ; 2 младших байта предела сегмента
dw ? ; 2 младших байта базового адреса
db ? ; 3-й байт базового адреса
db ? ; байт доступа
db ? ; флаги и предел сегмента (биты 19-16)
db ? ; базовый адрес ( 4-й старший байт)
Базовый адрес сегмента (base address) – это 32-разрядный адрес
сегмента. В соответствии с концепцией виртуальной памяти, этот адрес
не обязательно будет окончательным физическим адресом. Поэтому,
адрес носит условное название «базовый».
Странное разорванное размещение адреса - это следствие того,
что защищенный режим впервые появился в 16-разрядном процессоре
80286.
Он имел 24-разрядную адресную шину и для базового адреса в
дескрипторе использовались только 3 байта. Для процессоров с 32разрядной шиной адреса добавлен еще один свободный байт в
дескрипторе.
Предел сегмента (limit) – это 20-разрядное максимальное
смещение в сегменте в байтах. Максимальное смещение на 1 байт
меньше размера сегмента.
Поле предела сегмента также разорванное. Поле со старшими 4-мя
битами добавлено в дескриптор для 32-разрядных процессоров.
Значение предела сегмента находится в диапазоне от 0 до 2
20
-1.
Таким образом, максимальный размер сегмента ограничен величиной
220 байтов или страниц - в зависимости от установленного
операционной системой бита гранулярности - G.
Байт доступа (access field) - содержит характеристику типа
сегмента, ограничения на доступ к нему, привилегии сегмента и другие
свойства, накладываемые на сегмент операционной системой в целях
защиты.
Биты D (разрядность сегмента) и L(режим) сообщают
процессору размер внутрисегментных адресов в данном сегменте.
L D
0 0 – 16-разрядный сегмент в защищенном режиме,
0 1 – 32-разрядный сегмент в защищенном режиме,
56

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
1 0 – 32-разрядный сегмент в 64-разрядном режиме,
1 1 - 64-разрядный сегмент в 64-разрядном режиме
В дескрипторе нет возможности сообщить процессору о 16разрядном сегменте при работе в 64 – разрядном режиме. Поэтому
в 64-разрядном режиме 16-разрядные программы не будут грузиться
операционной системой в память для исполнения.
Бит G - единица измерения размера сегмента (гранулярность):
0 - сегмент измеряется в байтах; 1– в страницах. В зависимости от
этого бита, процессор интерпретирует значение в поле предела
сегмента.
В страницах предел сегмента задается операционной системой при
сегментно-страничной адресации. Размер страницы обычно составляет
212 байт (4Кб = 4096 байт).
Например:
• бит G=0 и предел=15 означает, что размер сегмента – 16 байт;
• бит G=1 и предел=15 означает, что размер сегмента – 16 страниц,
то есть 2
4
* 212 байт = 216 байт (64 Кб)
Таким образом, максимальный размер сегмента составит:
- при измерении в байтах - 1Мб ( 2
- при измерении в страницах - 4Гб (2
20
байт );
20
страниц = 220 *212 = 232 байт)
При измерении сегмента в байтах сегмент может размещаться в
памяти с любого адреса. При измерении в страницах сегменты
размещаются в памяти с адресов, кратных 4096, то есть размеру
страницы.
Пример
Описание дескриптора сегмента в защищенном режиме, имеющего
размер 64 байта и 32-разрядную внутрисегментную адресацию.
Остальные поля дескриптора опущены.
descriptor_n dw 63 ; предел сегмента
dw ?
db ?
db ?
db 01000000b ; бит G=0, D=1, L=0
db ?
57

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
47 16 15 0
GDTR
Адрес GDT Предел
Типы дескрипторных таблиц
Операционная система может создавать два типа дескрипторных
таблиц - Глобальную таблицу дескрипторов (обязательно) и Локальные
таблицы дескрипторов (не обязательные).
Глобальная таблица дескрипторов (Global Descriptor Table GDT)
В Глобальную таблицу дескрипторов операционная система
записывает дескрипторы программных и служебных сегментов самой
операционной системы. В дальнейшем, в GDT могут быть включены
дескрипторы других сегментов, которые должны быть доступны всем
загруженным в память процессам.
Таблица GDT занимает отдельный сегмент памяти.
Операционная система создает Глобальную таблицу дескрипторов
еще в реальном режиме до перевода процессора в защищенный режим.
Поэтому размещение сегмента GDT в памяти находится в пределах
первого 1 Мб, а размер GDT – в пределах 64 Кб.
Число дескрипторов в GDT может быть любым - от 0 до 2
13
-1
(8192). Нулевой дескриптор – первый в таблице GDT, по своему
назначению не используется. При программной работе с дескрипторной
таблицей он может быть использован, как шаблон для создания новых
дескрипторов.
После создания GDT ее 32-разрядный физический адрес и 16разрядный предел смещения (т.е. размер -1) операционная система
заносит в 48-разрядный системный регистр GDTR.
Формат регистра GDTR:
Для обращения к регистру GDTR используются специальные
системные команды:
- LGDT adres ; загрузить в регистр GDTR 8 байт из памяти
- SGDT adres ; сохранить значение регистра GDTR в памяти
Процессор пользуется адресом GDT при вычислении адресов в
защищенном режиме.
58

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Локальные таблицы дескрипторов (Local Descriptor Table –
LDT)
Локальные таблицы дескрипторов операционная система создает
уже в защищенном режиме для некоторых или для каждого
загружаемого в память процесса.
В LDT операционная система будет записывать дескрипторы
сегментов, которые должны быть доступны только этому процессу.
Создание Локальных таблиц дескрипторов преследует две цели:
защиту адресных пространств процессов и увеличение объема
поддерживаемого процессором виртуального адресного пространства
(об этом позже).
Каждая LDT занимает отдельный сегмент памяти.
Сегменты с локальными таблицами дескрипторов, как и любые
другие сегменты, описываются соответствующими дескрипторами в
Глобальной дескрипторной таблице.
Селекторы сегментов
Чтобы в защищенном режиме процессор нашел в Таблице
дескрипторов сегментов информацию о нужном сегменте, ему нужен
номер дескриптора сегмента.
Селекторами сегментов называют 16-разрядные регистры, которые
используются для задания номера дескриптора сегмента в
дескрипторной таблице.
Селекторами сегментов являются: все сегментные регистры,
регистр LDTR и регистр TR.
Сегментные регистры используются по своему традиционному
назначению – как указатели на программные сегменты: кода, данных
или стека. Только изменилась интерпретация процессором содержимого
сегментного регистра. В реальном режиме это был «неполный» адрес
сегмента, в защищенном режиме – это номер дескриптора сегмента.
Во время исполнения текущего процесса регистр CS содержит
селектор сегмента кода, а регистр DS – селектор сегмента данных.
Регистр LDTR является селектором сегмента, содержащего
Локальную дескрипторную таблицу. Он всегда содержит номер
дескриптора сегмента LDT текущей исполняемой задачи в глобальной
дескрипторной таблице
59

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
15 3 2 1 0
Номер дескриптора - i TI RPL
Регистр TR. является селектором системного сегмента состояния
задачи (TSS), содержащего «контекст процесса». Он используется при
переключении задач.
Формат информации во всех селекторах сегментов одинаков:
- i - номер дескриптора сегмента в дескрипторной таблице (от 0
13
до 2
-1 );
- бит TI – тип дескрипторной таблицы, где находится дескриптор:
0 - GDT; 1 - LDT .
- поле RPL (биты 1-0) - используется при организации защиты
памяти.
Механизм вычисления процессором физических адресов при
сегментной адресации
Программно при обращении к памяти адрес памяти задается в
виде двух координат - «селектор сегмента»: «внутрисегментное
смещение». Например: mov ax, ds:[2f00h] .
Селектор сегмента (т.е. сегментный регистр) содержит номер
дескриптора сегмента в дескрипторной таблице ( i ).
Получив эти две координат, процессор:
1) по номеру дескриптора вычисляет его смещение в
дескрипторной таблице,
2) извлекает из дескриптора базовый адрес сегмента;
3) складывает его с программно заданным внутрисегментным
смещением.
Получаемый адрес ячейки памяти называется линейным и пока не
является окончательным.
Если не включено страничное преобразование (бит регистра CR031
равен 0), полученный линейный адрес станет физическим адресом.
В противном случае, будет выполнено дополнительное аппаратное
преобразование линейного адреса.
Таким образом, при отключенном страничном преобразовании мы
имеем чистую «сегментную» организацию виртуальной памяти и ее
отображения в физическую память.
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
