При прямом переключении задач проверяется уровень привилегии не дескриптора кодового сегмента, а дескриптора сегмента состояния задачи. Уровень привилегии дескриптора определяет не уровень привилегий целевого кодового сегмента, а уровень привилегий программ, которым разрешено производить переключение задач на целевой кодовый сегмент, т.е. уровень доступности процедуры переключения задач. Но по чтению и по записи TSS программно недоступен. Создание, модификацию и чтение TSS операционные системы могут производить путем отображения в тот же адрес памяти дескриптора сегмента данных. В условие корректности прямого переключения программ не входит проверка уровня привилегий (DPL дескриптора) целевого кодового сегмента. Следовательно, прямое переключение задач, даже по команде JMP типа FAR, может производиться и на программы с более низким уровнем привилегий. Возможно и переключение на задачи с более высоким уровнем привилегий. Но это - именно переключение программ, а не уменьшение или увеличение уровней привилегий программы. Старая задача сохранилась в старом TSS, и началось выполнение новой программы со своим уровнем привилегий. Тем не менее, для переключения на программу с более высоким уровнем привилегий предусмотрено использование шлюза задачи (защищенное переключение задач). Это, вероятно, связано не столько с проблемами защиты, сколько с унификацией форм сервисных процедур. Основное назначение переключения задач является организацией многозадачных режимов работы. Это прерогатива операционной системы. Дескрипторы TSS хранятся в глобальной таблице дескрипторов GDT и имеют высокий уровень привилегий. Поэтому прямое переключение задач производится, фактически, на меньший уровень привилегий. |