4.3.5. Межсегментные переключения задач.Межсегментные переключения задач - это переходы с использованием механизма переключения задач. Возможны две модели переключения задач:
Отсутствие прямого взаимодействия программ при переходах с использованием механизма переключения задач позволяет значительно смягчить требования к доступности программ по условиям корректности переходов с изменением уровня привилегий. Но все проверки, непосредственно не связанные с уровнями привилегий, выполняются в том же объеме. Прямое переключение задач. Прямое переключение задач - это переключение задач без использования шлюза задач.Прямое переключение задач производится командами JMP и CALL типа FAR . В случае использования команд JMP и CALL типа FAR селекторы этих команд должны выбирать дескриптор TSS и должно выполняться условие доступа прямого переключения: уровень привилегий TSS программы цели должен быть не выше уровня привилегий текущей программы и запроса, т.е.: (CPL <= DPLTSS) & (RPL <= DPLTSS) где DPLTSS - уровень привилегий сегмента TSS (берется из поля уровня привилегий дескриптора TSS). Со схемой основных проверок при прямом переключении задач по командам
JMP и CALL типа FAR можно ознакомиться Переключение задач с использованием шлюза задач. Любое переключение задач на программы более высокого уровня привилегий допускается только при помощи команд CALL типа Far, IRET, INT n, а также в результате прерываний и ловушек. При этом использование шлюза задачи (шлюза TSS) - обязательно. Со схемой проверок по соответствию уровней привилегий и с процедурой выбора целевого TSS при переключении задач c использованием шлюза задачи по командам прерывания Int n и ловушкам, а также по командам возврата из прерываний IRET можно ознакомиться по схеме или по экранной модели (мод. 8). Со схемой проверок по соответствию уровней привилегий и с процедурой выбора целевого TSS при переключении задач c использованием шлюза задачи можно ознакомиться по схеме (рис. 13) или по экранной модели (мод. 9). Условия доступа здесь аналогичны условиям доступа при прямых переключениях задач, но вместо сегментов задачи (TSS) используются шлюзы задачи (ШлTSS). (CPL <= DPLШЛTSS) & (RPL <= DPLШЛTSS) Проверки соответствия уровней CPL, RPL и DPLTSS не требуется. Операционная система, создавая шлюзы задач в глобальной или локальных таблицах дескрипторов с низкими уровнями привилегий, может допускать программы нижнего уровня привилегий к разрешенным сервисным процедурам. При переключении задач с использованием шлюза дескриптор TSS целевой задачи определяется селектором шлюза задачи. При этом, уровни привилегий шлюза TSS и дескриптора TSS могут не совпадать. Следовательно, использование шлюзов TSS допускает любые межуровневые переключения задач. При использовании команд IRET, команды вызова прерываний, например, INT n или в случаях прерываний и ловушек, как прямое переключение задач, так и переключение задач с использованием шлюзов задач производится вне зависимости от значений, соответственно, DPLTSS или DPLШлTSS, т.е. без проверок условий доступа по уровням привилегий. Но здесь вполне контролируемая ситуация. Кроме проверок по уровням привилегий, процедура переключения задач, особенно с использованием шлюза содержит множество стандартных проверок процедур загрузки селекторов. Переключение задач предполагает перезагрузку всех шести сегментных регистров и селектора локальной таблицы дескрипторов, а также двойное обращение к таблице дескрипторов. Переключение задач с использованием шлюза занимает около 200 тактов работы процессора.
|