Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Механизмы аппаратной поддержки операционных систем. Учебное пособие
.pdf
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
7 0
0000: 0000
0001
0002 Вектор прерывания 0
0003 (адрес вектора – 0000:0000 )
0004
0005 Вектор прерывания 1
0006 (адрес вектора - 0000:0004 )
0007
. . . .
4*n
4*n+1 Вектор прерывания N
4*n+2 (адрес вектора - 0000: 4*n )
4*n+3
. . .
03fe
03ff
Смещение
Указ. сегмента
Смещение
Указ. сегмента
. . .
Смещение
Указ. сегмента
. . .
Организация прерываний
Все аппаратные и программные источники прерываний в системе
получают свой закрепленный номер в диапазоне от 0 до 255.
Для каждого источника прерываний в операционной системе
предусмотрена соответствующая подпрограмма его обработки –
«обработчик прерывания». Адреса всех обработчиков прерываний
(«указатель сегмента» и «смещение») операционная система сводит в
единую таблицу – Таблицу векторов прерываний.
Вектором прерывания называют один 4-байтный элемент таблицы,
где записан адрес обработчика прерывания, то есть значения «указатель
сегмента» и «смещение».
Таблица векторов прерываний создается в 0-м сегменте памяти и
занимает 1024 байта (256 векторов по 4 байта каждый).
Рис.22 - Таблица векторов прерываний в реальном режиме
При появлении запроса прерывания по его номеру (N) процессор
аппаратно определяет адрес соответствующего вектора прерывания -
0000: 4 *N и считывает значения из него в регистры CS и IP:
41

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
CS [0000:4*N]
IP [0000:4*N+2]
Таким образом, начнется исполнение обработчика прерывания,
который обязательно должен заканчиваться командой возврата IRET.
Структура исполняемых программ
В реальном режиме операционные системы позволяют загружать
на исполнение программы следующих форматов:
- одно- и многосегментные программы типа .exe
- односегментные программы типа .com, в которых команды и
данные размещаются в кодовом сегменте, начиная с адреса 100h.
На рисунке 23 приведен протокол трансляции двухсегментной 16-
разрядной исходной программы, предназначенной для компоновки в
исполняемый EXE-модуль.
Рис. 23 – Протокол трансляции двухсегментной исходной программы
42

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Служебный заголовок в будущем .exe-файле содержит
информацию о размещении в файле кодов каждого программного
сегмента, что увеличивает размер исполняемого файла.
Для получения односегментного исполняемого файла com-
формата исходная программа должна соответствовать следующим
требованиям:
- состоять только из одного кодового сегмент;
- размещение команд и возможно данных в сегменте должно
начинаться с внутрисегментного адреса 100h;
- вызов в операционную систему для завершения исполнения
делается прерыванием INT 20h.
На рисунке 24 показан пример протокола трансляции такой
программы. Исполняемый файл .com содержит только коды для
загрузки в память в «чистом виде». Поэтому, размер исполняемых com
–файлов минимален.
Рис.24 - Протокол трансляции исходной программы com-структуры
43

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Защищенный режим
Защищенный режим процессоров разрабатывался специально для
поддержки многозадачных операционных систем. В защищенный
режим из режима реальных адресов процессор переводится
операционной системой программно.
В защищенном режиме процессор оказывает необходимую
аппаратную поддержку операционной системе для организации
многозадачного режима исполнения программ и защиты памяти.
Основные аспекты аппаратной поддержки операционной системе
заключаются в следующем:
1. Сегментная и страничная адресация памяти. Поддержка
динамического размещения процессов в памяти (виртуальной
памяти).
2. Организация многозадачности - аппаратное переключение
контекстов процессов при смене процессов операционной
системой.
3. Защита памяти и программ:
- контроль обращения программ к памяти и портам ввода-вывода
в соответствии с назначенным им операционной системой «уровнем
привилегий»;
- контроль недопустимости использования в прикладных
программах «привилегированных команд», разрешенных только для
операционной системы;
- разделение адресных пространств загруженных процессов
- контроль попыток прикладных программ выйти за пределы
своего сегмента;
- контроль попыток чтения или записи в запрещенные
операционной системой сегменты памяти.
При работе в защищенном режиме процессор контролирует
практически все действия программ, позволяя «развести»
операционную систему и прикладные программы по разным уровням
привилегий.
При реализации защиты активно используется механизм
прерываний. Обнаружив недопустимые действия в исполняемой
программе, процессор вырабатывает внутреннее системное прерывание
- «исключение» с определенным номером. Оперируя этими
прерываниями, операционная система может соответствующим образом
отреагировать на обнаруженную процессором ситуацию.
44

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Благодаря поддержке процессора операционная система теперь
может эффективно организовать многозадачность, реализовать
«виртуальную память», контролировать действия любой загруженной в
память программы.
Система команд
В защищенном режиме система команд расширена так
называемыми «привилегированными» командами.
Этими командами может пользоваться только операционная
система. В частности, это команды для работы с системными и
управляющими регистрами.
Адресация памяти
В защищенном режиме поддерживается сегментная и страничная
адресация.
Программный адрес при сегментной адресации также задается
парой значений: «селектор (указатель) сегмента» и «внутрисегментное
смещение». В качестве селектора сегмента используются сегментные
регистры. Внутрисегментное смещение 32-разрядное. Поэтому и
программы защищенного режима называют «32-разрядные».
При сегментной адресации размер одного программного сегмента
ограничен величиной 2
20
байт (1 Мбайт).
Страничная адресация реализована аппаратно - программно,
программисту она не видна, поэтому программист пишет программу как
один сегмент. Это называют «плоская модель памяти» для
программиста. При страничной адресации программный сегмент может
достигать размера до 2
32
байт(4 Гбайт).
При этом максимальный объем всей логически (программно)
адресуемой памяти может доходить до 64 Тбайт.
Физическая адресация памяти
Объем физически адресуемой памяти ограничен 2
32
байтов (4
Гбайт), так как шина адреса процессора в защищенном режиме
стандартно 32-х разрядная. Начиная с модели Pentium, есть
возможность использования 36- разрядной адресной шины.
Поскольку объем программных адресов существенно может
превышать физическое пространство, процессором поддерживается
механизм виртуальной памяти.
45

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Преобразование программных адресов в физические
(«отображение» адресов) выполняется процессором аппаратно при
участии операционной системы, которая готовит необходимые таблицы
преобразования.
Организация прерываний
Используется тот же диапазон номеров прерываний: от 0 до 255.
Однако, расширено количество внутренних системных прерываний.
Они называются «исключения». Это разнообразные реакции процессора
на нарушения правил защиты.
Таблица векторов прерываний в защищенном режиме называется
Таблицей дескрипторов прерываний. Ее размещение в памяти
определяет операционная система при загрузке в память и помещает ее
адрес в регистр IDTR процессора.
Структура исполняемой программы
Используются следующие структуры программ: односегментная
или многосегментная структура программы формата .exe.
Структуры программ типа .com многозадачные операционные
системы не поддерживают из-за процессорного механизма защиты
кодовых сегментов от записи.
Режим виртуального процессора 8086
Программы, написанные для реального режима, в операционных
системах, работающих в защищенном режиме процессора,
непосредственно исполняться не могут по следующим причинам:
1. В защищенном режиме физические адреса памяти вычисляются
процессором иначе, чем в реальном режиме. Следовательно, они не
будут совпадать.
2. В защищенном режиме процессор контролирует программное
обращение к памяти, портам и программные прерывания по
привилегиям.
Прикладные программы не имеют необходимых привилегий для
использования команд для прямого обращения к памяти (команды
MOV, CALL, JMP), портам контроллеров внешних устройств (команды
IN, OUT) и использовать системные прерывания (команда INT), как это
они делали в реальном режиме
46

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Прикладной код может только запросить подобное обращение
через вызовы соответствующих функций интерфейса прикладного
программирования операционной системы.
Для выполнения 16-разрядных программ, написанных для
реального режима, в защищенном режиме существует специальный
подрежим V- mode (виртуальный реальный режим), в котором с
аппаратной поддержкой процессора эмулируется программная среда
реального режима.
V- mode является отдельным процессом, который исполняется в
защищенном режиме. Он имитирует:
- 1-Мбайтное адресное пространство реального режима,
- 16-разрядную программную адресацию в сегментах,
- способ вычисления процессором физических адресов из
программных компонент, как в реальном режиме;
- систему прерываний реального режима.
При этом процессор сохраняет все свои контролирующие
функции защищенного режима.
Степень «разрешенности» действий 16-разрядной программы в
защищенном режиме определяет операционная система. Как правило,
эти возможности ею ограничиваются, чтобы не нарушать идеологию
защищенного режима и не подвергать себя опасности.
Программная модель процессоров в защищенном режиме
Программно-доступные регистры:
32-разрядные EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP
16-разрядные AX, BX, CX, DX, SI, DI, SP, BP (младшие половины
32-разрядных)
8-разрядные AH, BH, CH, DH, AL, BL, CL, DL (старшие и младшие
половины 16-разрядных)
16-разрядные сегментные регистры: CS, DS, ES, SS, FS, GS
32-разрядный указатель команд – EIP
32-разрядный регистр флагов
регистры арифметического сопроцессора при выполнении
операций с плавающей точкой: 80-битные регистры ST0, ..ST7;
47

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
64-битные MMX-регистры ММ0-ММ7; 128-битные ХММрегистры
системные регистры для операционной системы:
- 32-разрядные регистры управления CR0 – CR4;
- 48-разрядные регистры дескрипторных таблиц GDTR, IDTR
- 16-разрядные регистры-указатели системных сегментов - LDTR
и TR;
- 32-разрядные регистры отладки DR0-DR3, DR6, DR7
Принципиальное в программной модели защищенного режима –
это ее различие для программ разного уровня привилегий: для
прикладных программ и для системных программ (операционной
системы).
Для прикладных программ доступны те же регистры и команды,
что и в реальном режиме (с некоторыми дополнительными
возможностями косвенной адресации в командах).
Сегментные регистры CS, DS, ES, SS, GS и FS так же указывают
на программные сегменты, но называются теперь «селекторы
сегментов». Для каждого из них есть программно-недоступные
(«теневые») 64-битовые регистры, куда процессор загружает
дескрипторы соответствующих сегментов.
Регистр – указатель команд EIP теперь может использоваться
полностью, поскольку возможна 32-разрядная внутрисегментная
адресация команд.
Для операционной системы программная модель существенно
расширена. В регистре флагов добавились флаги защищенного режима,
которые доступны только операционной системе.
Появились дополнительные системные, управляющие регистры и
регистры отладки, к которым может обращаться только программы
уровня операционной системы.
32-разрядный регистр флагов
Младшая половина 32-разрядного регистра флагов в защищенном
режиме содержит арифметические и управляющие флаги, аналогичные
реальному режиму.
Старшая половина регистра флагов содержит новые системные
флаги защищенного режима.
48

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
31 . . . 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
-
VM
RF
-
NT
IOPL
O
D
I
T
S
Z
-
A
-
P
-
С
Флаги 8086
IOPL (Input/Output Privilege Level) - двухбитное поле кода
привилегий для операций ввода-вывода. Поле задает минимальный
уровень привилегий исполняемой задачи для выполнения в ней команд
обращения к портам ввода/ вывода ( команды IN, INS, OUT, OUTS ).
NT (Nested Task) – флаг вложенной задачи. NT=1 показывает, что
текущая задача является вложенной в выполнение другой задачи. Флаг
устанавливается процессором в 1 при переключении задач. Значение
флага используется командой IRET при определении способа возврата в
вызвавшую задачу.
RF (Restart Flag) – флаг рестарта. Используется для отладки
совместно с отладочными регистрами. Если RF=1, то ошибки,
возникшие при исполнении команды, будут игнорироваться до начала
исполнения следующей команды.
VM (Virtual Mode) – флаг виртуального реального режима.
Устанавливается для перехода в режим «виртуального 8086» внутри
защищенного режима. При этом создается самостоятельная задача в
защищенном режиме, эмулирующая ресурсы реального режима.
Процессор функционирует, как процессор 8086, но реализует
механизмы защиты памяти, страничной адресации и другие
возможности защищенного режима процессоров.
Системные регистры
Системные регистры доступны только программам операционной
системы. Они используются:
- для работы с дескрипторными таблицами программных и
системных сегментов - регистры GDTR и LDTR;
- для работы с дескрипторной таблицей прерываний - регистр
IDTR;
- для организации переключения задач - регистр TR.
Для обращения к системным регистрам есть специальные команды
защищенного режима, недоступные для исполнения прикладным
программам.
49

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
47 15 0
GD
ТR
Адрес
GDT
Предел
47 15 0
IDTR
Адрес IDT
Предел
15 0
LDTR
Селектор
15 0
TR
Селектор
Регистр GDTR - 48-разрядный регистр адреса глобальной
дескрипторной таблицы (Global Descriptor Table). Содержит полный 32разрядный адрес начала размещения сегмента глобальной
дескрипторной таблицы в памяти и ее размер.
Размер таблицы задан в виде максимального смещения в ней в
байтах, то есть на 1 меньше размера сегмента таблицы. Поэтому, поле
называют «предел смещения».
Регистр IDTR - 48-разрядный регистр адреса таблицы
дескрипторов прерываний (Interrupt Descriptor Table). Содержит 32-
разрядный адрес сегмента таблицы дескрипторов прерываний в памяти
и предел смещения в ней.
Регистр LDTR - 16-разрядный регистр – селектор сегмента
локальной дескрипторной таблицы (Local Descriptor Table).
Используется для определения адреса размещения в памяти локальной
дескрипторной таблицы.
Регистр TR - 16-разрядный регистр – селектор сегмента состояния
задачи (Task State Segment). Используется при переключении задач.
Регистры управления
32-разрядные регистры управления CR0, CR1, CR2, CR3 . . . .
используются операционной системой. Количество этих регистров
постоянно увеличивается для линейки процессоров х86. Рассмотрим
назначение только основных управляющих регистров.
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
