Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать
  1. Cpl (текущий уровень привилегий);

  1. Rpl (уровень привилегий источника обращений к сегменту) из селектора, используе­мый для спецификации сегмента назначения;

3)Dpl дескриптора сегмента назначения.

Команды могут загрузить сегментный регистр данных (и затем использовать целевой сегмент), лишь если DPL целевого сегмента численно больше или равен максимальному из значений CPL и RPL селектора. Другими словами, процедура может иметь доступ к данным того же самого или менее привилегированного уровня.

Разрешенная для адресации область задачи изменяется, когда изменяется CPL. Если CPL - нулевое, сегменты данных всех уровней привилегий доступны. Когда CPL = 1, доступ­ны только данные с уровнями привилегий от 1 до 3. Когда CPL равно 3, доступны только сегменты данных с уровнем привилегий 3. Это свойство может быть использовано, напри­мер, чтобы предотвратить возможность чтения или изменения таблиц операционной систе­мы прикладной программой.

Рис. 3.26. Проверка привилегий доступа к данным (CPL - текущий уровень привилегий; RPL—запрашиваемый уровень привилегий; DPL - уровень привилегий дескриптора)

Доступность данных в кодовых сегментах. Менее общий характер, чем использова­ние сегментов данных, носит работа с данными, сохраняемыми в кодовых сегментах. Ко­довые сегменты могут на совершенно законном основании содержать константы, нельзя только что-либо писать в кодовый сегмент. Возможны следующие варианты доступа к дан­ным в кодовом сегменте:

  1. Загрузить регистр сегмента данных селектором несогласованного, с разрешением чтения кодового сегмента;

  2. Загрузить регистр сегмента данных селектором кодового сегмента, который являет­ся согласованным и разрешенным для чтения;

  3. Использовать префикс переопределения cs, чтобы прочитать разрешенный для чте­ния кодовый сегмент, селектор которого уже загружен в cs регистр.

В 1-м случае используются те же самые правила доступа, как и для доступа к сегментам данных. Во 2-м случае доступ корректен, так как уровень привилегий согласованных сегментов , является, по существу, тем же самым, что и CPL независимо от DPL. В 3-м случае обращение I правильное, так как DPL кодового сегмента в CS является при переопределении равным CPL. |

Ограничения передач управления. Передачи управления осуществляются МП по командам JMP, CALL, INT и RET, а также при прерываниях и исключениях. В этой главе I обсуждаются передачи управления по командам JMP, CALL, и RET.

Так называемые «близкие» передачи управления по командам JMP, CALL, и RET предполагают передачи управления в пределах исполняемого (текущего) кодового сегмента, и поэтому проверяются только на границу сегмента. Процессор реализует только те передачи управления, которые не превышают границу исполняемого сегмента. Предел сегмента находится в скрытом CS-регистре, а потому проверка защиты для «близких» передач уп­равления не требует дополнительных тактовых циклов.

Операнды так называемых «дальних» передач управления, осуществляемых по коман­дам JMP и CALL, находятся в других сегментах. Возможны два варианта передач управле­ния другому сегменту по командам JMP и CALL;

  1. операнд команды - это дескриптор другого кодового сегмента;

  2. операнд команды -это дескриптор вентиля вызова.

Векторизация передач управления через вентили вызова будет рассматриваться позднее. Рис. 3.27 показывает, что при проверке привилегий для передач управления, которые не используют вентиль вызова, контролируются два различных уровня привилегий:

1)CPL (текущий уровень привилегий);

2) DPL дескриптора вызываемого сегмента

Обычно CPL равен DPL сегмента, который в данный момент выполняет процессор, CPL может, однако, быть больше (по величине), чем DPL, если в дескрипторе выполняемо­го сегмента установлен бит согласования (С = 1).

Процессор разрешает обращения непосредственно к другому сегменту, если удовлет­воряется одно из двух правил привилегий:

  1. DPL целевого сегмента равен CPL

  2. разряд согласования дескриптора целевого кодового сегмента установлен (С = 1), a DPL целевого сегмента меньше или равен CPL.

Кодовый сегмент, разряд согласования дескриптора которого установлен, называется согласованным сегментом.

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

Основные правила привилегий, описанные выше, означают, что для несогласованных сегментов управление может быть передано без использования вентиля вызова лишь ко­довым сегментам на том же уровне привилегий. Нужно, однако, передавать управление и сегментам с (численно) меньшим уровнем привилегий, это обеспечивается передачей уп­равления по команде CALL через дескрипторы вентилей вызова. Команды JMP никогда не передают управление несогласованному сегменту, DPL которых не равен CPL.

Дескрипторы вентилей «охраняют» точки входа в процедуру. Для обеспечения защиты передач управления между исполняемыми сегментами с разными уровнями приви­легий МП фирмы «Intel» используют дескрипторы вентилей (шлюзов). Существует четыре вида вентилей:

1) вызова;

2) ловушек;

3) прерываний,

4) задач.

В этой главе рассматриваются вентили вызова. Вентили задач используются для пере­ключения задач. Вентили ловушек и вентили прерываний используются в механизмах пре­рываний и исключений. Рис. 3.28. иллюстрирует формат вентиля вызова.

Вентиль вызова может быть размещен в GDT или в LTD.

Вентиль вызова имеет две главные функции:

1) задать точку входа процедуры;

2) специфицировать уровень привилегий точки входа.

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

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

На рис. 3.30. показано, что для проверки правильности передач управления через вен­тиль вызова используются 4 уровня привилегий:

1) CPL (текущий уровень привилегий);

  1. RPL (запрашиваемый уровень привилегий) селектора, используемого для указания вентиля вызова;

  2. DPL дескриптора вентиля;

  3. DPL дескриптора кодового сегмента назначения.

Поле DPL дескриптора вентиля определяет, какие уровни привилегий может использо­вать вентиль. Кодовый сегмент может содержать несколько процедур, которые предпола­гается использовать на разных уровнях привилегий, например, ОС может содержать неко­торые утилиты, которые могут использоваться прикладными программами, в то время как другие утилиты могут использоваться только системными программами.

Вентили позволяют передавать управление численно меньшим уровням привилегий или тому же самому уровню привилегий (хотя они и не нужны для передач тому же уровню при­вилегий). Использовать вентили вызова для передач управления (численно) меньшим уров­ням привилегий могут только команды CALL. JMP-команды предназначены для передач управления исполняемому сегменту с тем же самым уровнем привилегий для согласован­ного сегмента.

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