Конспект лекций для специальностей 23020165 Информационные системы и технологии, 08080165 Прикладная информатика в экономике Шахты 2011г
Вид материала | Конспект |
- Учебно-методический комплекс для студентов специальностей 080801 «Прикладная информатика, 455.9kb.
- Рабочая программа по дисциплине "алгоритмизация и программирование" для специальности, 136.39kb.
- Конспект лекций по дисциплине «Информационные системы в экономике», 1286.5kb.
- Конспект лекций по дисциплине «информационные технологии» для студентов направления, 912.74kb.
- Рабочая программа дисциплины: интеллектуальные информационные системы для специальностей:, 369.71kb.
- Методические рекомендации по выполнению курсовых работ по дисциплинам «Моделирование, 276.48kb.
- Методические рекомендации по изучению дисциплины для студентов специальностей 080801, 180.47kb.
- Учебно-методический комплекс по дисциплине "информационные технологии финансового анализа, 108.22kb.
- Рабочая программа по курсу «Мировые информационные ресурсы» 351400 «Прикладная информатика, 315.91kb.
- Магистерская программа «Информационные технологии и информационные системы» по направлению, 34.28kb.
ЛЕКЦИЯ 7
Защищенный режим работы процессора.
Появление этого режима работы процессора привело к появлению новых фундаментальных качеств и свойств ЭВМ [4,8,9]. Первым микропроцессором, способным работать в этом режиме, является микропроцессор 80286 фирмы Intel. В следующих поколениях микропроцессоров получило дальнейшее развитие этого режима, однако фундаментальные свойства МП286 остались неизменными.
1. Особенности микропроцессора МП286.
Микропроцессор 80286 представляет второе поколение 16-разрядных процессоров [4]. Именно с этим процессором связан настоящий "бум" на рынке персональных компьютеров. Его основные особенности по сравнению с МП86 следующие.
1. Адресация больше 1 Мб (до 16Мб). Выполняется защита памяти.
2. Многозадачность.
3. МП может работать как в старом - реальном, так и в новом - защищенном режимах.
4. Возможность работы с виртуальной памятью.
5. Шина адреса и данных разделены.
6. Быстродействие увеличено в 2 раза за счет того, что МП разделен на 4 самостоятельно работающих блока, вместо двух блоков, которые были у МП86. Увеличение тактовой частоты с 5 МГц до 12.5 МГц позволило увеличить общую производительность в 6 раз.
2. Структура и система команд.
Система команд МП286 включает все команды МП86 и имеет ряд дополнительных. Среди них особо следует отметить команды управления защитой памяти, которые будут рассмотрены ниже. Расширение системы команд потребовало ввести дополнительный байт СОР2 в код операции. У МП386 может появляться дополнительный байт SIB, расширяющий систему методов адресации. Расширенная структура команды приведена ниже.

Префикс, как и у МП86, является байтом уникального кода операции, который не входит в систему основных команд и который модифицирует действие основной команды. Например, если первый байт команды равен F0h, то это – префикс. Он обозначается как LOCK и запрещает обмен на время выполнения команды.
COP 1 - это первый байт кода операции, где W указывает размер операнда, а d - направление записи результата. Он не должен совпадать ни с каким кодом префикса. Если COP 1 оказывается резервным и равным 0Fh, то за ним следует COP 2. SIB-байт расширяет таблицу методов адресации. Если в таблице основных методов адресации r/m = 100, md 11, то вводится дополнительная таблица методов адресации.

SS задает коэффициент умножения индексной константы, находящейся в регистрах si, di.
Если SS=0, то коэффициент=1. Если SS=1, то коэффициент=2.
Если SS=2, то коэффициент=4. Если SS=3, то коэффициент=8.
Поле IND указывает номер регистра, который используется в качестве индексного. Поле BASE указывает номер РОНа, который используется в качестве базового. Таким образом, регистр АХ (номер 000) может быть базовым.
3. Особенность сегментной организации памяти.
Регистры МП286 имеют то же назначение, что и у МП86, за исключением сегментных регистров, содержимое которых называется селектором. Это связано с тем, что МП286 может работать в двух режимах: в старом, который называется реальным, и в новом режиме, который называется защищенным. В реальном режиме в сегментном регистре по прежнему находится базовый адрес сегмента, а в защищенном – путь поиска базового адреса сегмента в дескрипторной таблице. В дескрипторной таблице для каждого сегмента указывается не только его базовый адрес, но и размер сегмента, а также байт прав доступа к этому сегменту. Дескриптор имеет длину 8 байт. Дескрипторы сегментов находятся в дескрипторной таблице, которая размещается в ОП. Чтобы не замедлять процесс образования адреса, базовый адрес сегмента дублируется внутрь процессора в соответствующий регистр. Загрузка дескриптора из таблицы внутрь процессора выполняется каждый раз, когда в программе встречается команда загрузки сегментного регистра. Однако загрузка дескриптора выполняется, если код прав программы соответствует коду защиты сегмента. Более подробно этот вопрос рассматривается ниже.
4. Структура адресного пространства
Поскольку МП286 допускает многозадачный режим, то для каждой задачи выделяется собственное адресное пространство. Адресное пространство каждой задачи подразделяется на глобальное и локальное. Глобальное адресное пространство (ГАП) – это та часть ОП, в которой размещаются программное обеспечение и данные общие для всех задач. Локальное адресное пространство (ЛАП) – это та часть ОП, где размещаются программы, данные только этой задачи. Сегменты ГАП описываются глобальной дескрипторной таблицей (ГДТ), а сегменты ЛАП описывается локальной дескрипторной таблицей (ЛДТ). ВАП – это виртуальное адресное

5. Защищенный режим
.5.1. Структура сегментного регистра и селектора в защищенном режиме
В отличие от реального режима, когда в сегментном регистре находится базовый адрес сегмента, в защищенном режиме [8,9] в нем находится более сложная информация, которая называется селектором. Селектор служит для поиска дескриптора (описателя) сегмента в таблице. Относительный номер дескриптора в таблице называется INDEX. Его значение указывается в селекторе с 3 по 15 разряд. Остальные разряды используются следующим образом.

RPL – уровень прав доступа вызывающей программы. TI – тип дескрипторной таблицы: 0 - глобальная дескрипторная таблица, 1 - локальная дескрипторная таблица.
.5.2. Дополнительные регистры процессора
Для осуществления защищенного режима процессор имеет следующие дополнительные регистры.
GDTR - регистр глобальной дескрипторной таблицы.
Регистр имеет 6 байт. Младшие два байта регистра содержат размер сегмента памяти с таблицей, а старшие четыре байта - его базовый адрес. Для работы с GDTR используются команды: LGDT - команда загрузки регистра, SGDT - команда чтения содержимого этого регистра.
LDTR – регистр локальной дескрипторной таблицы.
Так как дескриптор этой таблицы приводится в глобальной дескрипторной таблице, то его поиск осуществляется также как и для любого сегмента, то есть с помощью селектора. Отсюда следует, что структура LDTR cовпадает со структурой сегментных регистров и имеет в своем составе INDEX, RPL и TI. Для работы с LDTR используются команды. LLDT - команда загрузки регистра. SLDT - команда чтения содержимого этого регистра.
TR – регистр задач.
Этот регистр используется в многозадачном режиме. В этом режиме для описания каждой задачи используется сегмент состояния задачи TSS. Дескриптор этого сегмента находится в глобальной дескрипторной таблице, поэтому структура TR, также как и структура LDTR, совпадает со структурой селектора. Для работы с регистром TR используются команды LTR и STR.
IDTR – регистр таблицы прерываний.
Его структура позволяет размещать таблицу векторов прерывания в любом месте памяти, а не только в начале, как это в реальном режиме. Для размещения таблицы используется сегмент памяти, описание которого аналогично описанию сегмента глобальной дескрипторной таблицы. Отсюда следует, что структура IDTR совпадает со структурой GDTR и содержит базовый адрес и размер сегмента, где размещается таблица векторов прерывания. Для работы с регистром IDTR используются команды: LIDT – команда загрузки регистра, SIDT – команда чтения регистра.
MSW – регистр слова состояния машины. Отдельные разряды этого слова позволяют не только узнать состояние машины, но и управлять ею. Например, нулевой разряд ( PE ) позволяет переключить схему процессора в защищенный режим, т.е. если PE : =1, то процессор переключится в защищенный режим. В исходном состоянии процессора PE=0, что соответствует реальному режиму. Для работы с регистром MSW используются команды: LMSW - команда загрузки регистра, SMSW - команда чтения регистра. В частности, команда LMSW используется для инициализации (разрешения) перевода процессора в защищенный режим. Перейти обратно в реальный режим этой командой нельзя - нужна последовательность команд. После команды LMSW нужна команда межсегментного перехода (JMP FAR), чтобы сбросить старую очередь команд в буфере процессора и загрузить селектор кодового сегмента, то есть того участка программы, который будет выполняться уже в защищенном режиме. Более полно процедура переключения режимов рассмотрена в методическом пособии соответствующей лабораторной работе.
.3. Структура дескрипторов.
Общая структура дескриптора.
Каждый дескриптор в таблице занимает 8 байт. В них размещается следующая информация.

Расшифровка байта атрибутов и дополнительных разрядов дескриптора дана ниже.
Типы дескрипторов
Тип сегмента и его свойства отражаются в байте атрибутов дескриптора. Дескрипторы подразделяются на системные и несистемные. К несистемным дескрипторам относятся дескрипторы сегментов кода, данных и стека. Системные дескрипторы описывают состояние задачи и способ перехода от одной задачи к другой, от одной программы к другой.
Структура несистемного дескриптора.

Поля байта атрибутов имеют следующее назначение.
P – бит присутствия сегмента в ОП.
DPL – уровень права доступа к сегменту. Если DPL=0, то уровень защиты самый высокий. Если DPL=3, то уровень защиты самый низкий.
S – разряд системности. В данном примере S=1, то есть дескриптор сегмента.
A – бит доступа к сегменту. Если A=0, то к сегменту не было обращения. Если A=1, то к сегменту было обращение.
Тип – тип сегмента.
GD0U – расширение байта атрибута.
G – единица измерения сегмента. Если G=0, то единица измерения – байты. Если G=1, то единица измерения - страница.
D – размер операнда. Если D=0, то операнд 16-разрядный. Если D=1, то операнд 32-разрядный.
0 – резервный бит.
U – разряд используется программистом по своему усмотрению.
Структура системных дескрипторов.
Системные дескрипторы бывают двух типов: сегментные и шлюзовые.
Сегментные дескрипторы описывают сегменты, в которых размещаются таблицы состояния задач TSS и локальные дескрипторные таблицы LDT. Структура этих дескрипторов совпадает со структурой несистемных дескрипторов и описана выше. Особенность заключается в кодировке поля Тип и описана ниже.
Системный дескриптор шлюза не описывает сегмент памяти, а используется для обращения (запуска) задачи, программы, находящихся на другом уровне привилегии. Это - аналог косвенной адресации (запуска) кодового сегмента. Структура дескриптора типа шлюза приведена ниже.

Назначение полей данного дескриптора следующее.
Р - бит присутствия сегмента в ОП.
DPL – уровень прав косвенного доступа.
S=0 признак отличия рассматриваемой структуры от предыдущей.
Счетчик – количество параметров, которые передаются (копируются) из стека вызывающей задачи (программы) в стек вызываемой задачи (программы).
Тип - код назначения дескриптора. Описан ниже.
ЛЕКЦИЯ 8
1.Структура сегмента состояния задачи.
При запуске процедуры в обычной программе в стеке автоматически сохраняется адрес возврата. При запуске обработчика прерывания в стеке дополнительно сохраняются флаги последней выполненной операции. В многозадачном режиме, когда одна задача (программа) прерывается и запускает другую задачу (программу), необходимо запомнить значительно больше информации как о состоянии прерванной программы, так и о состоянии процессора в момент переключения задачи. Эта информация нужна для того, чтобы можно было вернуться и запустить предыдущую задачу. Запоминаемая информация размещается в специальном сегменте, который называется сегментом состояния задачи и обозначается TSS. У 286МП TSS упрощен, имеет объем 44 байта и структуру приведенную ниже.
В TSS приняты следующие обозначения.
SP для CLP0, SP – 1, SP – 2, SS - 0, SS – 1, SS - 2 – это начальное состояние стека при запуске задач для каждого из уровней привилегии. В зависимости от того, с каким уровнем приоритета запускается задача, стековый сегмент выбирается разным.
-
Селектор LDT
Селектор DS
Селектор CS
Селектор SS
Селектор ES
DI
SI
BP
SP
BX
DX
CX
AX
FLAG
IP
SS – 2
SP – 2
SS – 1
SP - 1
SS уровня 0
SP для CPL0
Селектор TSS возврата
SI, SP, DX, AX, IP, DI, BP, BX, CX, FLAG – при первоначальном запуске задачи содержимое этих регистров обычно равно нулю. Для запуска задачи необходимо в сегментные регистры процессора загрузить селекторы этой задачи, а также загрузить селектор локальной дескрипторной таблицы, если задача использует локальное адресное пространство; значение этих селекторов указывается в TSS.
При первоначальном запуске задачи операционная система распределяет сегменты задачи в памяти, а в TSS указывает селекторы, с помощью которых становятся доступными дескрипторы этих сегментов.
2. Схема формирования полного адреса в защищенном режиме
Формирование адреса в однозадачном режиме
В однозадачном режиме все программы размещаются в глобальном адресном пространстве. Следовательно необходимо формирование только одной дескрипторной таблицы, а именно - глобальной (ГДТ). В ГДТ размещаются дескрипторы всех сегментов задачи (программы). Число и назначение сегментов определяется программистом в соответствии с характером программы.
сформированы и размещены селекторы и дескрипторы всех сегментов, сформирована и загружена ГДТ и ее базовый адрес указан в регистре GDTR. После выполнения в программе команд LGDT и LMSW, которые на спортивном языке означают "На старт! Внимание!", должна следовать команда JPM загрузки селектора кодового сегмента. Она играет роль команды "Марш!". С этого момента процессор начнет формирование адресов команд по правилам защищенного режима..
Формирование адреса в многозадачном режиме
Как было указано выше, каждая задача описывается сегментом состояния задач. При переключениях внутри задачи (программы) происходит вызов подпрограммы или обработчика и для выполнения этого достаточно запомнить минимум информации : состояние регистра флагов и адрес возврата.
При переключениях задач нужно запоминать состояние всех регистров микропроцессора, для чего отводится специальный сегмент в памяти - сегмент состояния задачи TSS. Для использования многозадачного режима процессор должен быть переведен в защищенный режим, как было описано выше. Дополнительно в регистре флагов должен быть установлен разряд NT, разрешающий использование и переключение задач. До запуска или переключения задач должны быть сформированы и загружены в память сегменты состояния задач, глобальная и локальные дескрипторные таблицы.

В процессе выполнения задачи способ образования физического адреса команды или операнда такой же , как описан выше для однозадачного режима. Особенности возникают как при первоначальном запуске задачи, так и при их переключении. На рисунке выше показаны все элементы, участвующие в запуске защищенного режима и новой задачи.
Для того, чтобы запустить новую задачу, надо обратиться к дескриптору TSS этой задачи. Это можно сделать разными способами. Если исключить прерывания, то естественным представляется запуск задачи с помощью команды CALL FAR, в адресной части которой указан селектор с индексом, указывающим на дескриптор TSS в глобальной дескрипторной таблице. Процессор выполняет ряд проверок, разрешающих запуск задачи, включая проверку вызываемого дескриптора на принадлежность к дескриптору именно TSS. Если перед этим выполнялась какая-то задача и она не была завершена, то ее состояние и состояние процессора продублируется в TSS этой задачи. Из TSS новой (входящей) задачи в регистры процессора загружается новая информация (контекст входящей задачи). Запуск задачи завершается установкой в единицу разряда TS (задача переключена) в регистре состояния машины. Как видно из схемы, дескрипторы рабочих сегментов задачи размещаются в локальной дескрипторной таблице ЛДТ этой задачи. Местоположение ЛДТ указывается в TSS в виде селектора
3. Защита уровней привилегий.
3.1. Общие правила защиты. Защита сегментов и задач выполняется по уровням привилегий. В осуществлении защиты принимают участие следующие типы уровней: RPL, DPL, CPL.
RPL - это уровень прав сегмента запрашивающей (запускающей) программы (задачи). Его значение указывается в заготовке селектора перед загрузкой последнего в регистр CS.
DPL - это уровень, который присвоен сегменту или задаче. Он указывается в дескрипторе сегмента или задачи, которые будут запущены или будут выполняться.
CPL – это текущий уровень привилегии выполняемой программы (задачи), который находится в регистре CS в момент переключения задачи (программы).
Поскольку в селекторе и в дескрипторе для указания числового значения уровня привилегии выделено два разряда, то уровней может быть четыре : 0, 1, 2, 3. Поэтому говорят, что в защищенном режиме процессора существует 4 уровня (кольца) защиты работы с памятью.
Ниже приведена схема распределения уровней защиты среди программных объектов разного назначения и упрощенная схема их взаимодействия.

На схеме используются общепринятые обозначения объектов операционной системы. СП – это системные программы. Пользователь - это программы пользователя.
Формальные правила доступа к различным сегментам приведены ниже.
Доступ из одного кодового сегмента к другому кодовому сегменту разрешен, если:
(DPLназнач=CPLкодов) и (RPLзапроса=CPLкодов).
Использовать в селекторе для CS RPL
Доступ из кодового сегмента к данным в сегменте данных разрешен, если:
DPLназн max(CPL, RPL) и CPL RPL.
Здесь DPL является уровнем защиты сегмента данных, указанным в его дескрипторе. RPL - это уровень прав программы на пользование данными из этого сегмента. Он указывается в селекторе при его загрузке в сегментный регистр данных (DS, ES). То есть основным правилом доступа из кодового сегмента к сегменту данных является наличие у кодового сегмента больших или равных прав по сравнению с правами сегмента данных.
3.2. Расширение прав доступа к кодовым сегментам
Для расширения переходов между уровнями, например, доступ программы пользователя (PL3) к использованию (PL1), имеется два пути: применение подчиненных сегментов кода (простой способ) и использование специальных дескрипторов – шлюзов вызова.
1. Подчиненные сегменты.
Если имеется процедура, которая должна быть доступна на каждом уровне привилегии, то ее кодовый сегмент должен быть подчиненным всем. Для этого в байте атрибутов этого сегмента необходимо установить C=1. При этом обычные правила защиты по CPL и DPL не действуют. Например, если программа (PL3) через CALL или JMP передает управление подчиненному сегменту кода, то он будет работать с CPL=3, хотя DPL3. Однако, такой переход возможен, если он осуществляется к более приоритетному сегменту. На команду возврата RET это условие не распространяется.
2.2. Шлюзы.
Шлюзы (вентили) используются для переходов между кодовыми сегментами разных уровней через специальные дескрипторы. Переходы через шлюзы изменяют уровни привилегий. Существуют 4 типа шлюзов: шлюз вызова, шлюз задачи, шлюз прерывания, шлюз ловушки.
Шлюзы не определяют адресное пространство, поэтому в их дескрипторах нет базовых адресов и пределов. Селекторы шлюзов загружаются только в регистр CS, потому что они связаны с передачей управления. Адресовать шлюз вызова разрешается только команде межсегментного перехода:
FAR CALL CS: метка
или
FAR CALL сегмент: смещение.
При этом в команде в поле сегмента указывается селектор шлюза, смещение игнорируется, полагается равным нулю.
Через шлюз вызова реализуется косвенный вызов более привилегированных процедур. Такой вызов процедуры делает независимым ее кодовый сегмент от местоположения сегмента вызывающей программы, требует много синхротактов и повышает опасность порчи ОС, т.к. DPL сегмента изменяется.