Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мои шпоры ОСиСП(1).doc
Скачиваний:
32
Добавлен:
26.09.2019
Размер:
1.63 Mб
Скачать

3. Организация защиты в процессорах ia32

Процессор поддерживает 4 механизма защиты:

1)Защита по размеру сегмента – предотвращает выход за пределы сегмента;

2)Привилегированные команды – есть группа команд, которые могут выполняться только на нулевом уровне привилегий. Команды, связанные с обращением к системным регистрам. Есть группа IOPL команд: команды работают с портами ввода/вывода и команды установки флага прерывания. Они выполняются только когда уровень привилегий больший или равен IOPL;

3)Защита по привилегиям – есть понятие CPL – текущий уровень привилегий процессора (Current Privilege Level). Это уровень, на котором работает процесс в данный момент. Значение в младших битах регистра CS. При обращении к данным или другим системным объектам сравнивает значение текущего уровня привилегий с уровнем привилегий дескриптора (DPL). По результату сравнения процессор выполняет/не выполняет действие. Более того, при обращении к памяти max(CPL,RPL)<=DPL;

4)Проверка на возможность выполнения действий – процессор проверяет возможность действий. Например, программа выполняет запись в сегмент данных, а сегмент только для чтения. Или попытка выполнить команду по отношению к невыполняемому сегменту.

Важным механизмом защиты является то, что передача управления возможна только на текущем уровне привилегий (команды FAR CALL и FAR IMP).

Но системные программы должны передавать пользователю программные права на управление.

Когда пользовательские программы взаимодействуют с операционной системой, возникает потребность передачи управления с низкого уровня привилегий на уровень привилегий операционной системы. Для таких передач есть два способа. Первый более простой и называется использование 1)подчиненных сегментов. Второй более сложный – использование специальных дескрипторов, названных 2)шлюзами вызовов.

  1. Сегмент кода определяется как подчиненный, если бит c в байте прав доступа дескриптора сегмента установлен в 1. при обращении к таким сегментам обычное правило защиты CPL = DPL не действует, действует только правило, что CPL >= DPL, т.е. можно передавать управление на более высокий или текущий уровень привилегий. При передаче управления на подчиненный сегмент два младших бита регистра CS не изменяются. Таким образом, выполнение программы будет производиться на том же уровне, на котором выполнялась вызывающая программа.

  2. Шлюзы вызова позволяют реализовать фактическое изменение уровня привилегий.

Шлюз вызова определяет точку входа программе. Дескриптор шлюза вызова определяет полный указатель (селектор + смещение) точки входа в процедуру назначения, которой передается управление. Дескриптор шлюза вызова – это своеобразный интерфейсный слой между сегментами кода, находящимися на различных уровнях привилегий. Шлюзы вызова определяют разрешенные точки входа в более привилегированный код и являются единственным средством смены уровня привилегии. Дескрипторы шлюзов вызова не определяют никакого адресного пространства, поэтому у них нет полей базы и предела. По своей сути это даже не дескрипторы, но их размещают либо в глобальной дескрипторной таблице, либо, при необходимости, в локальных дескрипторных таблицах. Селекторы для выбора дескрипторов шлюзов вызова необходимо загружать только в сегментный регистр CS и ни в какие другие сегментные регистры. Адресовать шлюз вызова можно только в команде межсегментного вызова far call, использование far jmp запрещено. Сама команда call должна адресовать шлюз вызова, а не сегмент кода назначения.

Реализованный в Intel процессорах косвенный вызов привилегированных процедур имеет несколько преимуществ:

1. Привилегированный код сильно защищен, и вызывающие его программы не могут его разрушить. При этом предполагается, что сам код такой процедуры тщательно отлажен и не содержит ошибок.

2. Шлюзы вызова делают привилегированные процедуры невидимыми для программ на внешних уровнях привилегий.

3. Так как вызывающая программа прямо адресует только шлюз, реализуемые процедурой функции можно изменить или переместить их в адресном пространстве, не затрагивая интерфейс со шлюзом.

Правила защиты при использовании шлюза вызова

1. ;

2. ;

3. .Это правило предотвращает передачу на более низкий уровень привилегий;

4. .

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