русс | укр

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

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

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

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


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

Шлюзовые дескрипторы


Дата добавления: 2015-06-12; просмотров: 1135; Нарушение авторских прав


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

  • Шлюзы вызова
  • Шлюзы ловушки
  • Шлюзы прерываний
  • Шлюзы задач

Шлюзы задач используются для переключения задач и описываются в Главе 7. В Главе 9 объясняется, как шлюзы ловушек и прерываний используются для обработки исключений и прерываний. В данной главе рассматриваются только шлюзы вызова. Шлюзы вызовов представляют собой некоторую форму защищенной передачи управления. Они используются для передачи управления между различными уровнями привилегированности. Их использование необходимо только в системах, где имеется более одного уровня привилегированности. На Рисунок 6-5 показан формат шлюза вызова.

Шлюз вызова имеет две основные функции:

  1. Определение точки входа в процедуру.
  2. Задание уровня привилегированности, требуемого для входа в процедуру.
32-битовый шлюз вызова 31 6 5 4 3 2 1 0 9 8 7 6 5 4 3 3----------------------------------------------------------------| | | D | | | | | | | | | |Счетчик || Смещение в сегменте 31:16 |P| P |0|1|1|0|0|0|0|0|0|двойных |+4| | | L | | | | | | | | | |слов || | | | | | | | | | | | | |----------------------------------------------------------------| Селектор сегмента | Смещение в сегменте 15:00 |+0---------------------------------------------------------------- DPL Уровень привилегированности дескриптораP Присутствие сегмента Рисунок 6-5. Шлюз вызова

Дескрипторы шлюзов вызова используются командами CALL и JUMP используются аналогичным способом, что и дескрипторы кодовых сегментов. Когда аппаратная часть распознает, что селектор сегмента назначения ссылается к шлюзовому дескриптору, выполнение команды определяется содержимым шлюза вызова. Дескриптор шлюза вызова может находиться в GDT или в LDT, но не в таблице дескрипторов прерывания (IDT).



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

|<---------------- Адрес назначения --------------->| 15 0 31 0--------------- ----------------------------------| Селектор | | Смещение в сегменте |--------------- ---------------------------------- \ | \ \/ \ Не используется \ \ \ Таблица дескрипторов \ ---------------------------------- \ | | | | | \ |--------------------------------| \| | | |--------------------------------| -----------------| Смещение | DPL |Счетчик| Дескриптор | |--------------------------------| шлюза | ----------| Селектор | Смещение | | | |--------------------------------| | | | | | | | | | |--------------------------------| | | | | | | |----- |--------------------------------| | \ | | | | | | \ |--------------------------------| | \ | | | | \|--------------------------------| Дескриптор | | База | | DPL | База | кодового----- |--------------------------------| сегмента| + |<------------ | База | |----- |--------------------------------| | | | | | | | |--------------------------------| \/ | | |Точка входа ----------------------------------в процедуру Рисунок 6-6. Механизм шлюза вызова

Как показано на Рисунке 6-7, для проверки допустимости передачи управления через шлюз вызова используется четыре различных уровня привилегированности.

Уровни привилегированности, проверяемые при передаче управления шерез шлюз вызова, это:

  1. CPL (текущий уровень привилегированности).
  2. RPL (уровень привилегированности источника запроса) селектора сегмента, который был использован для задания шлюза вызова.
  3. DPL (уровень привилегированности дескриптора) дескриптора шлюза.
  4. DPL дескриптора сегмента кодового сегмента назначения перехода.

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

Шлюзы могут использоваться для передачи управления как на более привилегированные уровни, так и на тот же уровень привилегированности (хотя в последнем случае их использование не обязательно). Для передачи управления на менее привилегированные уровни шлюзы могут использоваться только командами CALL. Команда JMP может использовать шлюз только для передачи управления либо кодовому сегменту с тем же уровнем привилегированности, либо конформному кодовому сегменту с тем же или более высоким уровнем привилегированности.

Для команды перехода JMP к неконформному сегменту должны удовлетворяться следующие два правила привилегированности (в противном случае генерируется исключение общей защиты):

MAX(CPL,RPL) <= DPL шлюза DPL кодового сегмента назначения = CPL

Для команды CALL (или команды перехода JMP к конформному сегменту) должны удовлетворяться следующие два правила привилегированности (в противном случае генерируется исключение общей защиты):

MAX(CPL,RPL) <= DPL шлюза DPL кодового сегмента назначения <= CPL


<== предыдущая лекция | следующая лекция ==>
Ограничения передачи управления | Переключение стека


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


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

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

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


 


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

 
 

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

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