Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асвт, никитин сука.docx
Скачиваний:
11
Добавлен:
25.09.2019
Размер:
266.34 Кб
Скачать
  1. Механизм защиты в защищённом режиме (уровни привилегий, какие биты и поля используются механизмом защиты, какие проверки выполняются)

Защита может действовать как на уровне сегментов, так и на уровне страниц, ограничивая доступ в зависимости от уровня привилегий (4 уровня привилегий для сегментов и два для страниц). Защита предотвращает возможность для программ вносить изменения в области памяти, занятые операционной системой или более привилегированной программой. Процессор проверяет привилегии непосредственно перед каждым обращением к памяти и, если происходит нарушение защиты, вызывает исключение #GP.

Если процессор находится в защищенном режиме, проверки привилегий выполняются всегда и их нельзя отключить, но можно использовать во всех дескрипторах и селекторах один и тот же максимальный уровень привилегий — нулевой, и создастся видимость отсутствия защиты (DPL и RPL инициализируются нулями).

За механизм защиты отвечают следующие биты и поля:

  1. В дескрипторах сегментов:

    1. Бит S (означает, что бит системный)

    2. Поле типа

    3. Поле лимита (размер сегмента)

    4. Поле DPL (уровень привилегий сегмента)

  2. В селекторах сегментов:

    1. RPL (уровень запрашиваемых привилегий)

    2. поле RPL селектора, загруженного в CS, называется CPL и является текущим уровнем привилегий программы

  3. В элементах таблиц страниц:

    1. Бит U (определяет уровень привилегий страниц)

    2. Бит W (разрешает запись в страницу)

Уровни привилегий в процессорах Intel определены как:

0 — максимальный (для операционной системы);

1 и 2 — промежуточные (для вспомогательных программ);

3 — минимальный (для пользовательских приложений).

Процессор выполняет несколько типов защиты

  1. Проверка лимита (необходима для запрета выхода за рамки)

  2. Проверка типа сегмента

  3. Проверка привилегий

  4. Защита на уровне страниц

  5. Выполнение привигилированных команд

  1. Прерывания и исключения

В архитектуре процессора х86 предусмотрены следующие случаи , когда процессор прекращает выполнение текущей программы и немедленно передает управление программе обработчику, специально написанному для подобной ситуации. Эти ситуации делятся на 2 типа: прерывания и исключения, в зависимости от того, что вызвало эту ситуацию, внешнее устройство или программа. Исключения делятся на 3 типа:

  • Ошибки

  • Ловушки

  • Остановы

В зависимости от того, когда по отношению к вызываемой команде они происходят. Ошибки появляются перед выполнением команды, поэтому обработчик такого исключения получит в качестве возврата адрес ошибочной команды.

Ловушки происходят после выполнения команды, и обработчик получает в качестве адреса возврата адрес следующей команды.

Остановы могут возникнуть в любой момент, и не предусматривает средств возврата.

Когда в реальном режиме выполняется команда int, управление передается по адресу, который считывается из массива, начинающегося в памяти с 0го адреса. Этот массив по-другому называется таблицы векторов прерывания.

Каждый элемент массива имеет размер 4Кб, если обработчика нет, то в массив 4е нулевых байта.

Стандартные исключения реального режима:

  1. #DE int 0 – Деление на 0 (ошибка)

  2. #DB int – прерывание трассировки (ловушка, возникающая после выполнения каждой команды, если флаг TF=1)

  3. #OF int 4 – прерывание переполнения (ловушка, возникающая после выполнения команды INTO, если флаг OF=1)

  4. #BR int 5 – прерывание для проверки границ

  5. #UD int 6 – недопустимая команда (ошибка)

  6. #NM int 7 – сопроцессор отсутствует (ошибка)

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