русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Механизм шлюзов для передачи управления на сегменты кода с другими уровнями привилегий


Дата добавления: 2014-11-28; просмотров: 2202; Нарушение авторских прав


Поскольку межсегментные переходы контролируются с использованием уровней привилегий, а потребность в передаче управления с одного уровня привилегий на другой уровень имеется, в микропроцессорах i80x86 реализован механизм шлюзов, который мы поясним с помощью рис. 4.9. Шлюзование позволяет организовать обращение к так называемым подчиненным сегментам кода, которые выполняют часто встречающиеся функции и должны быть доступны многим задачам, распо­лагающимся на том же или нижележащем уровне привилегий. Часто уровни при­вилегий называют кольцами защиты, поскольку это иногда помогает объяснить принцип действия самого механизма. Часто говорят, что некоторый программный модуль «исполняется в кольце защиты с номером ...».

Помимо дескрипторов сегментов системными объектами, с которыми работает микропроцессор, являются специальные системные дескрипторы, названные шлю­зами (gates). Главное различие между дескриптором сегмента и шлюзом вызова подчиненного сегмента кода заключается в том, что содержимое дескриптора ука­зывает на сегмент в памяти, а шлюз обращается к дескриптору. Другими словами, если дескриптор служит механизмом отображения памяти, то шлюз служит меха­низмом перенаправления вычислений.

Для доступа к более привилегированному коду задача должна обратиться к нему не непосредственно (путем указания дескриптора этого кода), а через шлюз этого сегмента (рис. 4.10).

В этом дескрипторе вместо адреса сегмента указываются селектор, позволяю­щий найти дескриптор искомого сегмента кода, и адрес (смещение назначения), с которого будет выполняться подчиненный сегмент, то есть полный 32-разряд­ный адрес. Формат дескриптора шлюза приведен на рис. 4.11. Адресовать шлюз вызова можно с помощью команды CALL или FAR CALL (межсегментный вызов про­цедуры). По существу, дескрипторы шлюзов вызова не являются дескрипторами сегментов, но могут располагаться среди обычных дескрипторов (в дескриптор-ных таблицах) процесса. Смещение, указываемое в команде перехода на другой сегмент (FAR CALL), игнорируется, и фактически осуществляется переход на ко­манду, адрес которой определяется через смещение из шлюза вызова. Этим га­рантируется попадание только на разрешенные точки входа в подчиненные сег­менты.




Защита адресного пространства задач_________________________________ 119

Рис. 4.9. Механизм шлюзов для перехода на другой уровень привилегий

Введены следующие правила использования шлюзов:

- значение DPL шлюза вызова должно быть больше или равно значению текуще­го уровня привилегий CPL;

- значение DPL шлюза вызова должно быть больше или равно значению поля RPL селектора шлюза;

- значение DPL шлюза вызова должно быть больше или равно значению DPL целевого сегмента кода;

- значение DPL целевого сегмента кода должно быть меньше или равно значе­нию текущего уровня привилегий CPL.

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


120________________ Глава 4. Особенности архитектуры микропроцессоров j80x86

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

- Шлюзы межсегментных переходов для вызова системных функций делают эти
самые системные функции невидимыми для программных модулей, располо­
женных на внешних (более низких) уровнях привилегий.

- Поскольку вызывающая программа непосредственно адресует только шлюз вызо­
ва, реализуемые вызываемым модулем (сегментным кодом) функции можно изме­
нить или переместить в адресном пространстве, не затрагивая интерфейс со шлюзом.

- Легко реализуется вызов программных модулей с более привилегированного
уровня.

Рис. 4.10. Переход на сегмент более привилегированного кода

Рис. 4.11. Формат дескриптора шлюза


Защита адресного пространства задач____________________________________ 121

Изложенный вкратце аппаратный механизм защиты по привилегиям оказывается довольно сложным и жестким. Однако поскольку все практические ситуации учесть в схемах микропроцессора невозможно, то при разработке процедур операцион­ных систем и иного привилегированного кода следует придерживаться приведен­ных ниже рекомендаций, заимствованных из [8].

Основной риск связан с передачей управления через шлюз вызова более привиле­гированной процедуре. Нельзя предоставлять вызывающей программе никаких преимуществ, вытекающих из-за временного повышения привилегий. Это особенно важно для процедур нулевого уровня привилегий (PLO-процедур).

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

- Следует проверять счетчики циклов и повторений на минимальные и макси­
мальные значения.

- Необходимо проверить 8- и 16-разрядные параметры, передаваемые в 32-раз­
рядных регистрах. Когда процедуре передается короткий параметр, его следует
расширить знаковым разрядом или нулем для заполнения всего 32-разрядного
регистра.

- Следует стремиться свести к минимуму время работы процессора с запрещен­
ными прерываниями. Если процедуре требуется запрещать прерывания, необ­
ходимо, чтобы вызывающая программа не могла влиять на время нахождения
процессора с запрещенными прерываниями (флаг IF = 0).

- Процедура никогда не должна воспринимать как параметр код или указатель на код.

- В операциях процессора следует явно задавать состояние флага направления DF для цепочечных команд.

- Заключительная команда RET или RET n в процедуре должна точно соответ­ствовать полю WC (Word Counter — счетчик слов) шлюза вызова; при этом n = 4 х WC, так как счетчик задает число двойных слов, а n соответствует байтам.

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

- Функции не могут возвращать значения в стеке (см. предыдущую рекоменда­
цию), так как после возврата стеки процедуры и вызывающей программы нахо­
дятся точно в таком состоянии, в каком они были до вызова.

- В процедуре следует сохранять и восстанавливать все сегментные регистры. Без этого, если какой-либо сегментный регистр привлекался для адресации дан­ных, недоступных вызывающей программе, процессор автоматически загрузит . в него пустой селектор.


122_______________ Глава 4. Особенности архитектуры микропроцессоров i80x86

Рекомендуется контролировать все обращения к памяти. Нетрудно представить себе ситуацию, когда РЬЗ-программа1 передает PLO-процедуре указатель селектор: сме­щение и запрашивает считать или записать несколько байтов по этому адресу. Ти­пичным примером может служить процедура дискового ввода-вывода, которая вос­принимает как параметр системный номер файла, счетчик байтов и адрес, по которому записываются данные с диска. Хотя PLO-процедура имеет привилегии для произ­водства такой операции, у РЬЗ-программы разрешения на это может не быть.



<== предыдущая лекция | следующая лекция ==>
Моделирование с помощью НЛП | Работа системы прерываний в реальном режиме


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.413 сек.