Защита программ и данных в процессоре i286

11/04/94 09:56am zr_zash.lek
А.В.Фролов, Г.В.Фролов "Защищенный режим процессоров Intel 80286/80386/80486. Практическое руководство по использованию защищенного режима" БСП том 6 М "Диалог-МИФИ" 1993
В.Б.Бродин, И.И.Шагурин "Микропоцессор i486. Архитектура, программирование, интерфейс" М "Диалог-МИФИ" 1993

Защита программ и данных в процессоре i286.

Взаимная защита программ и данных в MS DOS основана на "джентельменском" соглашении о неиспользовании чужих областей. Но проблема заключается в том, что соглашение может быть нарушенно непреднамеренно всвязи с ошибкой в программе или из-за того что ОС не всегда может учесть требования всех загруженных потребителей адресного пространства.

Для организации защиты информации необходимо обеспечить:

  1. Запретить пользовательским программам обращаться к областям, содержащим системную информацию (таблици устройств, системные переменные);

  2. Закрыть доступ пользовательских программ к памяти и устройствам, распределенным для других программых модулей (пользовательских и ОС);

  3. Исключить влияние программ друг на друга через систему комманд и исполняющую систему (зависание или программный останов одной задачи не должен влиять на ход выполнения другой);

  4. Определить привила и очередность доступа к общим ресусам (устройству печати, дисплею и дискам).

Для решения этих задач используется:

1 Схема "супервизор-пользователь":

2 Система ключей:

3 Система привелигированных и чувствительных команд;

ПРИМЕЧАНИЕ: В реальных системах используются комбинации описанных схем защиты.

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

Процессор i286 имеет четырехуровневую систему привилегий, и связанную с ней

систему защиты, называемую КОЛЬЦАМИ ЗАЩИТЫ.

Когда программа загружается в память ей присваивается текущий уровень привилегий CPL (Current Privilege Level). Это значение записывается в поля DPL записей, образующих ее таблицу дескрипторов и в поле RPL регистра сегмента кода CS. Программа может проанализировать предоставленный уровень привилегий, но не может его изменить. Однако возможно изменение полей RPL сегментных регистров данных.

Правила доступа к сегментам программ и данных:

  1. Данные из сегмента, имеющего уровень защиты PL, могут быть выбраны программой, имеющей такой же или более высокий уровень привилегий;

  2. При выборке данных вычисляется ЭФФЕКТИВНЫЙ уровень привилегий определяемый как максимальное значение (что соответствует наименьшему уровню привилегий) CPL (из регистра CS) и RPL (из используемого сегментного регистра).

  3. Сегмент программы (процедура), имеющий уровень защиты PL, может быть вызван программой, имеющий такой же или более низкий уровень привилегий, если используется "согласованный" сегмент. Такая процедура будет выполняться с уровнем привилегий вызвавшей ее программы!

  4. Сегмент программы (процедура), имеющего уровень защиты PL, может быть вызван программой имеющей такой же или более высокий уровень привилегий вне зависимости от согласованности сегмента.

ПРИМЕЧАНИЕ: Нарушение правил доступа вызывает прерывание "нарушение общей защиты памяти" (Dh). Не следует забывать о возможности отсутствия сегмента в памяти.

Привелигированные и чувствительные команды.

Сушествуют команды, выполнение которых возможно только в нулевом приоритетном кольце:

Команды ввода/вывода также являются привелигированными, но кольцо из которого можно к ним обратиться не фиксированно. Значение наименее привелигированного кольца в котором они доступны указано в поле IOPL регистра флагов микропроцессора FLAGS (биты 12-13). Это поле не модифицируется при загрузке регистра флагов не в нулевом кольце.

Межсегментная передача управления.

При передаче управления командами CALL и JMP необходимо изменить значение сегментного регистра CS (передача межсегментная!). Если правила доступа не нарушаются (см. выше), то передача управления эквивалентна передаче в реальном режиме. При нарушении правил (несогласованность более привилегированного сегмента) передача "напрямую" не возможна. В этом случае управление передается через шлюз (вентиль) вызова. Шлюз гарантирует, что передача управления будет осуществлена именно в точку входа, а не в произвольное место. Значение сегмента в команде игнорируется; используется полько селектор.

Структура дескриптора типа "шлюз вызова":

  1. СМЕЩЕНИЕ (16 бит) - смешение точки входа от сегмента памяти;

  2. СЕЛЕКТОР (16 бит) - значение селектора для вызова;

  3. СЧЕТЧИК СЛОВ (8 бит) - количество 16-ти битовых слов (для i386+ слова 32-х битовые), подлежащих передаче в вызываемый модуль. ВНИМАНИЕ: используются только пять младших битов этого поля, старшие три бита должны быть равны нулю;

  4. ДОСТУП (8 бит) - поле доступа должно соответствовать шлюзу вызова, а его поле DPL указывать минимальный уровень привилегий необходимых для прохода через вентиль;

  5. РЕЗЕРВ (16 бит).

При вызове указанное количество параметров копируется из стека вызывающей программы в стек вызываемой (который специально создается вновь). При возврате сохраненнная информация восстанавливается из стека вызывающей программы. Место для создатия стека определяется при помощи TSS вызывающей задачи.

Режим ВИРТУАЛЬНОЙ ПАМЯТИ в процессоре i286 реализован недостаточно эффективно, основтой недостаток - отсутствие аппаратной борьбы с фрагментацией памяти. Дефрагментация осуществляется перемещением информации с последующей перестройкой таблиц дескрипторов.


Stay-at-home