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

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

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

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

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

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

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

Но системные программы должны передавать пользователю программные права на управление. Существует 2 механизма передачи управления на более высокий уровень привилегий:

1) подчиненные сегменты;

2) шлюзы вызова.

Подчиненные сегменты

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: