4.3.3. Межсегментные передачи управления без изменения или с увеличением уровня привилегий.Необходимость и проблемы межсегментных переходов без изменения или с увеличением уровня привилегий. В процессоре Intel запрещена передача управления обычными средствами сегменту кода, находящемуся на другом уровне привилегий. Это самый важный и самый сложный момент механизма защиты по привилегиям. Ограничивая передачу управления в пределах одного кольца защиты, процессор предотвращает произвольное изменение уровней привилегий. Если бы значение CPL можно было легко изменять, все остальные средства защиты оказались бы бессмысленными. Но передача управления на программы операционной системы необходима. Для реализации фактического увеличения уровня привилегий при межсегментных переходах в МП корпорации Intel предусмотрены:
Шлюзы. Шлюзы являются ключевыми объектами для организации межсегментных переходов с увеличением уровня привилегий. Любые переходы с увеличением уровня привилегий производятся только с использованием шлюзов. Как альтернативный вариант с большим уровнем защиты, шлюзы могут использоваться и при межсегментных переходах без изменения уровня привилегий. Шлюзы имеют свои уровни привилегий. Уровень привилегий шлюза может отличаться от уровня привилегий как вызываемой программы, так и вызывающей. При вызове шлюза проверяется его доступность по соотношению уровней привилегий вызывающей программы и уровня привилегии шлюза. Кроме этого, проверяется соотношение уровней привилегии вызывающей и вызываемой программы. Используемые средства переходов. Межсегментный переход с увеличением уровня привилегий может быть задан:
В соответствии с этим используются шлюзы:
Кроме этого, для переключения задач с изменением уровня
привилегий используется шлюз задач (task gates). Межсегментные переходы
с использованием переключения задач рассматриваются ниже в п.
4.3.5.
Как системные объекты шлюзы имеют собственные дескрипторы, которые размещаются в дескрипторных таблицах:
Стратегия проверок уровней привилегий при межсегментных переходах с увеличением уровней привилегий. При реализации межсегментных переходов с увеличением уровня привилегий производятся две проверки:
На рис. 10 представлена схема допустимых вызовов процедур с использованием шлюзов.
Доступность шлюза. Доступность шлюза аналогична доступности данных. Шлюз доступен, если его уровень привилегий (DPLШЛ) не выше текущего уровня привилегий (CPLПР) и уровня привилегий запроса (RPLСК). Для команды вызова проверка заключается в определении выполнения условия: (CPLПР <= DPLШЛ) & (RPLСК <= DPLШЛ) При использовании команды INT n, прерывания или ловушки отсутствует уровень запроса и проверка сводится к определению выполнения условия: CPLПР <= DPLШЛ. Доступность кодового сегмента. Межсегментная передача управления допустима только на программы своего или более высоких уровней привилегий. В соответствии с этим доступность кодового сегмента определяется выполнением условия: DPLЦКС <= CPLПР Таким образом, условиями допустимости передач управления с использованием шлюзов по уровням привилегий являются:
Процедура межсегментных переходов с увеличением уровня привилегий. Со схемой взаимодействия программ без изменения или с увеличением уровня привилегий по команде CALL типа FAR можно ознакомится или по схеме (рис. 11) или по экранной модели (мод. 4). В защищенном режиме для каждого уровня привилегий имеется свой стек. Смена стека сопровождается стандартными проверками на действительность селектора сегмента стека и доступность сегмента стека по уровням привилегий перед его загрузкой в сегментный регистр стека SS. Дополнительно проверяется достаточность выделенного объема стека для размещения следующих элементов:
Передачи управления по прерываниям и ловушкам. Передачи управления по прерываниям и ловушкам являются так же передачами без изменения или с увеличением уровня привилегий. Это тоже передачи управления с обязательным использованием шлюзов прерывания или ловушки (прерывания с использованием шлюза задачи рассматриваются в п 4.3.5). Отличиями этих переходов от вызовов процедур командой CALL типа FAR являются следующие:
Использование типа прерывания, вместо селектора дескриптора шлюза, изменяет условие доступа. Команды прерывания, прерывания и ловушки для определения целевого кодового сегмента используют не селектор, а тип прерывания. Для прерываний и ловушек дескриптор шлюза доступен, если его уровень привилегий не превышает текущего, т. е.: CPL <= DPLШЛ Условие доступа целевого кодового сегмента остается прежним. Целевой кодовый сегмент доступен программам, если его уровень не меньше текущего: DPLЦКС <= CPL Со схемой взаимодействия программ с увеличением уровня привилегий по команде INT n, прерываниям или ловушкам можно ознакомится по экранной модели (мод. 5).
|