Для возврата выполнения на предыдущую задачу используются поле Компоновки в TSS и флаг NT. Флаг NT указывает на то, является ли текущая выполняемая задача вложенной в выполнение другой задачи, а поле Компоновки в TSS текущей задачи содержит селектор TSS для задачи более старшего уровня, если таковая имеется (см. Рисунок 7-6).
Когда прерывание, исключение, переход или вызов вызывают переключение задачи, процессор i486 копирует селектор сегмента состояния текущей задачи в TSS для новой задачи и устанавливает флаг NT. Флаг NT указывает на то, что поле Компоновки TSS было загружено селектором сохраненного TSS. Новая задача возвращает управление командой IRET. При выполнении команды IRET происходит проверка флага NT. Если он установлен, то процессор выполняет переключение на предыдущую задачу. В Таблице 7-2 показано использование полей TSS, на которые воздействует переключение задачи.
Отметим, что флаг NT может быть модифицирован программным обеспечением, выполняемым на любом уровне привилегированности. Программа может установить свой бит NT и выполнить команду IRET, что будет иметь эффект запуска задачи, заданной в поле Компоновки TSS текущей задачи. Для предотвращения непредусмотренных переключений задачи операционная система должна инициализировать поле Компоновки каждого создаваемого ей TSS.
Задача Вложенная Задача самого Текущая старшего задача глубокого выполняемая уровня уровня задача вложенности TSS TSS TSS EFLAGS------------ ------------ ------------ ------------| | | | | | | NT=1 || | | | | | ------------| | | | | || NT=0 | | NT=0 | | NT=0 || | | | | || | | | | || | | | | || -----| | -----| | -----| ------------| |LINK| | |LINK| | |LINK| |Регистр TR|------------ ------------ ------------ ------------ \ | \ | \ | \__________| \_________| \_______| LINK = Поле Компоновки задач Рисунок 7-6. Вложенные задачи Таблица 7-2. Воздействие переключения задачи на поля Занятости, NT и Компоновки----------------------------------------------------------------- Поле Воздействие JUMP Воздействие Воздействие команды CALL команды IRET или прерывания-----------------------------------------------------------------Бит Занятости Бит установлен. Бит установлен. Изменений нетновой задачи Перед этим должен Перед этим должен Должен быть быть очищен быть очищен установлен Бит Занятости Бит очищен Изменений нет. Бит очищенстарой задачи В текущий момент бит установлен Флаг NT Флаг очищен Флаг установлен Изменений нетновой задачи Флаг NT Изменений нет Изменений нет Флаг очищенстарой задачи Поле Изменений нет Загружено Изменений нетКомпоновки селектором для TSSновой задачи старой задачи Поле Изменений нет Изменений нет Изменений нетКомпоновкистарой задачи-----------------------------------------------------------------