Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A_K_3.doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
286.72 Кб
Скачать

3.3.2 Отладочные регистры

Отладочные регистры имеют в своем составе 4 32-х битовых регистра DR0..DR3, в которые записываются линейные адреса точек останова – АДРЕСА ТРАССИРОВКИ.

Регистр управления отладкой – DR7 – используется для установки контрольных точек, а регистр DR6 – показывает текущее состояние МП при остановах.

Состав РЕГИСТРОВ ТЕСТИРОВАНИЯ (Test Registers) варьируется в зависимости от типа процессора.

Процессоры 386 имели два регистра – TR6 и TR7, которые применяются для управления проверкой ассоциативной памяти и запоминающего устройства с произвольной выборкой в буфере ассоциативной трансляции (кэша страниц). TR6 – является командным регистром тестирования, а TR7 – регистром данных, который содержит данные для тестирования буфера трансляции.

Процессор PENTIUM имеет 12 тестовых регистров TR1...TR12. Их назначение привязывается к архитектуре – они входят в группу модельно-специфичных регистров MSR (Model-Specific Register).

Существуют различия в доступности регистров в разных режимах работы МП (см. табл. 3.2)

Таблица 3.2 – Использование регистров МП 386+

Регистры

Использование в РРА

Использование в РВА

Использование в вирт. 8086

загр.

разгр.

загр.

Разгр.

загр.

разгр.

РОН

да

да

да

да

да

да

Сегментные регистры

да

да

да

да

да

да

Регистр флагов

да

да

да

да

IOPL

IOPL

Управляющие регистры

да

да

PL=0

PL=0

нет

да

GDTR

да

да

PL=0

да

нет

да

IDTR

да

да

PL=0

да

нет

да

LDTR

нет

нет

PL=0

да

нет

нет

TR

нет

нет

PL=0

да

нет

нет

Управление отладкой

да

да

PL=0

PL=0

нет

нет

Тестовые регистры

да

PL=0

PL=0

PL=0

нет

нет

PL=0 – регистры доступны только при уровне привилегированности, равном 0.

IOPL – команды PUSHF и POPF могут изменять IOPL.

ЗАМЕЧАНИЯ.

ДЛЯ ОБЕСПЕЧЕНИЯ СОВМЕСТИМОСТИ С БУДУЩИМИ ПРОЦЕССОРАМИ необходимо:

  • маскировать (исключать влияние) неопределенных (неиспользуемых) битов в соответствующих регистрах при их проверке;

  • обеспечить отсутствие влияния этих битов при записи их в память и другие регистры;

  • исключить запись информации в неопределенные биты;

  • обеспечивать запись «0» в неиспользуемые биты, когда загружаются соответствующие регистры.

3.4 Кольца защиты

Защита операционной системы требует наложения на обычные программы (не входящие в операционную систему) трех типов ограничений :

  • обычным программам запрещается выполнять некоторые команды;

  • обычным программам должны быть недоступны определенные сегменты, доступные операционной системе;

  • должно быть невозможным получение привилегий операционной системы кроме как входом в нее в разрешенной точке входа.

Для защиты сегментов в процессорах 286/386+ применяются четыре УРОВНЯ ПРИВИЛЕГИЙ с номерами 0, 1, 2, 3. Чем меньше номер уровня, тем более привилегирован этот уровень. Уровни привилегий находятся в трех различных местах:

  • Каждый дескриптор имеет УРОВЕНЬ ПРИВИЛЕГИЙ ДЕСКРИПТОРА – DPL. Для записываемых или считываемых сегментов поле DPL можно считать «классом» сегмента, а для исполняемых сегментов поле DPL оказывается «уровнем благонадежности» процедур в этом сегменте.

  • Каждый селектор содержит ЗАПРАШИВАЕМЫЙ УРОВЕНЬ ПРИВИЛЕГИЙ – RPL.

  • МП 286/386+ автоматически поддерживают ТЕКУЩИЙ УРОВЕНЬ ПРИВИЛЕГИЙ – CPL. Он показывает «уровень благонадежности» текущей выполняемой программы и равен содержимому поля DPL сегмента, который адресует регистр CS. МП хранит содержимое поля CPL в двух младших битах CS, замещая поле RPL хранимого там селектора.

Для предотвращения обращения к сегменту, более привиле-гированному, чем исполняемая программа, процессор генерирует особый случай защиты, если текущая программа (с полем CPL) менее привилегированна, чем вызываемый сегмент (с полем DPL), т.е. если «уровень благонадежности» программы меньше «класса» сегмента. Другими словами, доступ разрешается, если DPL ≥ CPL.

Уровень привилегий «0» предназначен для ЯДРА ОПЕРАЦИОННОЙ СИСТЕМЫ, которая осуществляет управление памятью, защиту и управление доступом. Эта часть называется ЯДРОМ БЕЗОПАСНОСТИ. Уровень привилегий «1» должен использоваться большей частью ОПЕРАЦИОННОЙ СИСТЕМЫ.

Прикладные программы

Системы управления базами данных

Операционная система

Ядро безопасности

Рис. 3.10 – Уровни привилегий микропроцессоров I80286+

Уровень привилегий «2» занимают СИСТЕМЫ УПРАВЛЕНИЯ базами данных, автоматизации управленческой деятельности и разработки программ. Уровень привилегий «3» предназначен для ПОЛЬЗОВАТЕЛЬСКИХ ПРОГРАММ (рис. 3.10).

Приведенные на рисунке уровни привилегий иногда называют КОЛЬЦАМИ ЗАЩИТЫ.

Для защиты операционной системы (и ее ядра) некоторые команды (см. табл. 3.3) могут выполняться только в кольце «0», а выполнение их в любом другом кольце вызывает особый случай защиты.

Таблица 3.3 – Привилегированные команды

Уровни команд

Мнемоники команд

Команды, недопустимые выше уровня 0

LIDT, LLDT, LGDT, LTR, LMSW, CLTS, HLT

Команды, недопустимые выше уровня ввода-вывода (IOPL)

INS, IN, OUTS, OUT, STI, CLI, LOCK

Команды, модифицируемые в соответствии с уровнем

IRET, POPF

К привилегированным относятся те команды, которые модифицируют состояние флага прерываний IF, изменяют сегментацию или влияют на сам механизм защиты. Такие команды разрешены только на уровне привилегий «0» (PL0-программы).

В регистре флагов FLAGS (EFLAGS) (см. рис. 1.4 и рис. 2.2) имеется поле уровня привилегий ввода-вывода IOPL, определяющее наименее привилегированное кольцо, в котором разрешены команды ввода-вывода. Если любая из этих команд (см. вторую строку в табл. 3.3) выполняется в кольце, менее привилегированном, чем IOPL, возникает особый случай защиты.

Прикладные программы в мультизадачной среде обычно совместно используют некоторые данные. Программам не разрешается считывание/ запись элементов данных, которые имеют более высокий уровень привилегий, т.е. «движение» к данным внутрь колец защиты (см. рис. 3.9) запрещается. Любая такая попытка приводит к формированию нарушения общей защиты. Однако программы могут использовать данные на своем уровне привилегий и на менее привилегированных уровнях.

Многие программы в мультизадачной среде используют совместные процедуры, например, библиотеки. Передача управления (с помощью команд FAR CALL и JMP) возможна только внутри своего кольца защиты.

Для вызова процедур из других колец защиты, чем выполняемая программа, можно использовать:

  • ПОДЧИНЕННЫЕ СЕГМЕНТЫ КОДА (см. две последние строки табл. 3.1);

  • специальные дескрипторы, называемые ШЛЮЗАМИ ВЫЗОВА.

С ПОДЧИНЕННЫМИ СЕГМЕНТАМИ КОДА не ассоциируется конкретный уровень привилегий, т.к. они подчиняются уровню привилегий того кода, который передает им управление с помощью команд CALL или JMP. Хотя с подчиненным сегментом кода не ассоциируется никакой конкретный уровень привилегий, применительно к нему действует одно ограничение: значение DPL дескриптора подчинен-ного сегмента кода всегда должно быть меньше или равно текущему значению CPL. То есть передача управления разрешается только во внутренние кольца (более защищенные).

ШЛЮЗЫ ВЫЗОВА идентифицируют разрешенные точки в более привилегированном сегменте кода, которым может быть передано управление, и являются единственным средством смены уровня привилегий.

ШЛЮЗ ВЫЗОВА имеет собственный дескриптор, в котором 48 бит определяют полный указатель (селектор : смещение) точки входа той процедуры, которой шлюз передает управление. Дескриптор шлюза вызова не определяет никакого адресного пространства, поэтому в нем нет полей базы и предела.

Селекторы, которые определяют ДЕСКРИПТОРЫ ШЛЮЗОВ ВЫЗОВА нельзя загружать в сегментные регистры данных (DS, ES, FS, GS, SS). Их необходимо загружать только в сегментный регистр кода CS для передачи управления сегменту кода на другом уровне привилегий.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]