Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Механизмы аппаратной поддержки операционных систем. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]