Встроенные средства защиты. Принципы модульности и перемещаемости. Проверка привилегированности сегмента, страница 22

Шлюзы задач не накладывают ограничений на точку входа, но их также можно использовать для обеспечения защиты. Например, конкретная задача выполняет обслуживание ограниченного числа пользователей уровня PL = 3. Если сегмент TSS задачи обслуживания разместить в более привилегированном кольце, то обратиться к этой задаче можно будет только через шлюз. Задачам, которым разрешено пользоваться обслуживанием, в их таблицах LDT задаются шлюзы задачи. Тогда задачи без шлюзов получить данное обслуживание не смогут. Таким образом, благодаря шлюзам ОС может ограничить переключение задач конкретными задачами. При использовании шлюза вызываемая задача (более привилегированная) должна использовать и более привилегированный сегмент стека.  

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

Итак, в многозадачной системе операционная система составляет расписание задач и обеспечивает их выполнение на основе устанавливаемых уровней приоритетов. Для переключения задачи операционная система выдает команду передачи управления Jmp  или CALL, операндом которых является селектор для сегмента TSS или селектор шлюза задачи. Процессор сначала проверяет возможность переключения текущей задачи на другую задачу: уровень привилегий DPL дескриптора  TSS или шлюза задачи должен быть больше или равен максимальному из значений уровня CPL текущей задачи  и уровня RPL селектора. Затем проверяется дескриптор  TSS с целью выяснить, является ли этот сегмент присутствующим и имеет ли он достоверные границы. Обнаруживаемые ошибки являются ошибками в прекращаемой задаче. После этих ошибок возможен рестарт, и они могут быть обработаны способом, который их делает прозрачными прикладным программам. При выполнении условий защиты процессор переключается на выполнение другой задачи, при этом :

1. Процессор сохраняет все видимые программе регистры (за исключением регистра GDTR) в сегменте состояния задачи TSS текущей задачи (на этот сегмент указывает регистр текущей задачи TR);

2. В регистр задачи TR загружается селектор нового сегмента TSS, указанный в команде перехода или шлюзе задачи. После этого процессор отмечает занятым дескриптор TSS новой задачи (устанавливает бит занятости В) и устанавливает бит переключения задачи TS в слове состояния процессора MSW (бит TS остается установленным в “1” до явного сброса командой CLTS;

3. Процессор загружает свои  регистры значениями из нового сегмента TSS;

4. Выполнение программы новой задачи продолжается с команды, на которую установлен указатель команд (Е)IP новой задачи. Любая ошибка, обнаруживаемая на этом шаге, возникает в новой задаче.

Для возобновления выполнения старой задачи ОС выдает команду JMP перехода к старой задаче. Процесс запоминания содержимого регистров процессора текущей задачи, загрузка регистров новым содержимым старой задачи и продолжение выполнения задачи повторяется при каждом переключении задач. Уровень привилегий, на котором осуществляется рестарт во включаемой задаче, не ограничен уровнем привилегий прекращаемой задачи. Задачи изолированы своими отдельными адресными пространствами и сегментами TSS, а для предотвращения неправильного доступа к сегментам  TSS используются правила привилегий доступа. Таким образом, для поддержания определенных отношений между уровнями CPL отдельных задач не требуется никаких специальных правил привилегий. Новая задача просто начинает выполнение на уровне привилегий, определенных значением RPL селектора кодового сегмента новой задачи.

Ограничение набора команд

Одним из назначений механизма защиты является предупреждение столкновений между прикладными программами и ОС. По этой причине некоторые регистры и команды не доступны прикладным программам. Отдельные команды могут повлиять на механизм защиты и вмешаться в обычный порядок работы системы. Эти команды могут исполняться только в процедурах с достаточным уровнем привилегий