Оглавление Об учебном пособии
Использованные источники1 Использованные источники2 Использованные источники3 Использованные источники4 Использованные источники5 Использованные источники6

4.3.2. Межсегментные передачи управления без изменения уровня привилегий.

Эти переходы предусматривают использование команд CALL и JMP.

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

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

  • переходы на программы подчиненных сегментов,
  • переходы на программы сегмента того же уровня привилегий.

Переходы на программы подчиненных сегментов.

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

Для таких ситуаций в процессоре Intel предусмотрено альтернативное решение - использование подчинённых кодовых сегментов.

Кодовый сегмент определяется как подчиненный установкой бита С - Conforming в байте прав доступа AR дескриптора кодового сегмента. Обычные правила защиты по значениям CPL и DPL не действуют, если бит С = 1. В этом случае вводятся другие правила.

С подчиненными сегментами кода не ассоциируется конкретный уровень привилегий, так как они подчиняются уровню привилегий того кода, который передает им управление с помощью команд CALL или JMP. Если, например, PL3-программа передает управление подчиненному сегменту кода, то он работает с CPL = 3; если же этот сегмент вызывает PLO-программа, то он выполняется с CPL=0. Из-за такой "подвижности" уровня привилегий подчиненного кодового сегмента в нем не должны содержаться привилегированные команды, например, команды ввода-вывода.

Когда управление передается подчиненному сегменту кода, биты поля CPL регистра CS не принимают значение поля DPL дескриптора нового сегмента кода, как это обычно бывает, а сохраняют значение DPL последнего выполнявшегося неподчиненного сегмента кода. Таким образом, переход на программы подчиненного кодового сегмента является переходом без изменения текущего уровня привилегий.

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

Передавать управление подчиненному сегменту может программа, уровень привилегий которой не выше уровня привилегий целевого кодового сегмента, т.е. если DPL <= CPL. Чтобы программа подчиненного сегмента была доступна на всех уровнях привилегий, она должна иметь высший уровень привилегий (DPLЦКС = 0). Это вполне соответствует общему правилу использования сервисных программ: любая программа может быть сервисом только для программ более низкого уровня иерархии.

Механизм защиты при использовании команд межсегментных переходов проверяет бит C прав доступа дескриптора целевого кодового сегмента. При обнаружении признака подчиненности сегмента производится проверка на соответствие уровням привилегий: DPL <= CPL.

При выполнении команд межсегментных передач управления изменяются регистры CS и EIP, поэтому, кроме проверки подчиненности целевого кодового сегмента, производится проверка достоверности селектора, загружаемого в регистр CS.

Переходы на программы кодовых сегментов того же уровня привилегий.

Условием использования этой модели взаимодействия программ является (CPL = DPL) & (RPL <= CPL).

Кроме проверки по уровням привилегий, как и при использовании подчиненных сегментов, делаются "штатные" проверки достоверности селектора целевого кодового сегмента, загружаемого в регистр CS.

Со схемой взаимодействия программ без изменения уровня привилегий можно ознакомится или по рисунку (рис. 9) или по экранным моделям (мод. 2 (переход на подчиненные сегменты), мод. 3 (переход на не подчиненные сегменты)).

 

Вопросы для самопроверки:

  1. Какие команды допустимы для межсегментных передач управления без применения шлюзов. Возможны ли при этом изменения уровней привилегий.
  2. Какие программные ошибки исключают применение шлюзов.
  3. Для использования каких программ применяются подчиненные сегменты.
  4. Как задаются подчиненные сегменты.
  5. Какое условие проверки по уровням привилегий определяет доступность подчиненного сегмента.
  6. Какое условие проверки по уровням привилегий определяет доступность межсегментных передач управления без изменения уровней привилегий.
  7. Какими проверками, кроме соответствия уровней привилегий, сопровождается процедура межсегментной передачи управления.
<< Предыдущая страница Следущая страница >>