Сегмент состояния задачи, как и все прочие сегменты, определяется дескриптором. Формат дескриптора TSS показан на Рисунке 7-2.
31 15 0--------------------------------------------------|Базовый адрес массива | 000000000000000 |T| 64| ввода/вывода | | ||------------------------------------------------|| 0000000000000000 |Селектор для LDT задачи||------------------------------------------------|| 0000000000000000 | GS ||------------------------------------------------|| 0000000000000000 | FS ||------------------------------------------------|| 0000000000000000 | DS ||------------------------------------------------|| 0000000000000000 | SS ||------------------------------------------------|| 0000000000000000 | CS ||------------------------------------------------|| 0000000000000000 | ES ||------------------------------------------------|| EDI ||------------------------------------------------|| ESI ||------------------------------------------------|| EBP ||------------------------------------------------|| ESP ||------------------------------------------------|| EBX ||------------------------------------------------|| EDX ||------------------------------------------------|| ECX ||------------------------------------------------|| EAX ||------------------------------------------------|| EFLAGS ||------------------------------------------------|| EIP ||------------------------------------------------|| Резервируется ||------------------------------------------------|| 0000000000000000 | SS2 ||------------------------------------------------|| ESP2 ||------------------------------------------------|| 0000000000000000 | SS1 ||------------------------------------------------|| ESP1 ||------------------------------------------------|| 0000000000000000 | SS0 ||------------------------------------------------|| ESP0 ||------------------------------------------------|| 0000000000000000 |Компоновка задач || |(старый селектор TSS) |--------------------------------------------------Адреса показаны в шестнадцатиричном формате ПРИМЕЧАНИЕ: Биты, помеченные как 0, резервируются. Не используйте их.Рисунок 7-1. Сегмент состояния задачи
Бит "Занят" в поле Типа указывает на то, что задача занята. Занятой задачей называется текущая выполняемая или ожидающая выполнения задача. Поле Типа со значением 9 указывает на не-активную задачу; значение 11 (десятичное) указывает на занятую задачу. Задачи не-реентерабельны. Процессор i486 использует бит Занятости для обнаружения попыток вызова задачи, выполнение которой прервано.
Дескриптор TSS 2 2 2 2 2 1 1 1 1 1 1 1 1 1 131 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 0---------------------------------------------------------------| | | | |A| | | D | | | || BASE 31:24 |G|D|0|V|LIMIT |P| P | | TYPE | BASE 23:16 |+4| | | | |L|19:16 | | L |0|1|1|B|1| ||-------------------------------------------------------------|| Базовый адрес 15:00 | Граница сегмента 15:00 |+0--------------------------------------------------------------- AVL Доступно для использования системным программным обеспечениемB Бит "Занятости"BASE Базовый адрес сегментаDPL Уровень привилегированности дескриптораG ГрануляцияГраница Граница сегментаP Присутствие сегментаTYPE Тип сегмента Рисунок 7-2. Дескриптор TSS
Поля Базового адреса сегмента, Границы и DPL, а также биты Грануляции и Присутствия выполняют функции, аналогичные тем, что были у них в дескрипторах сегментов данных. Поле Границы должно иметь значение, равное или больше чем 67H, на один байт меньше минимального размера сегмента состояния задачи. Попытка выполнить переключение на задачу, дескриптор TSS которой имеет границу меньше чем 67H, генерирует исключение. При использовании битового массива разрешения ввода/вывода требуется большее значение Границы. Большее значение Границы может также понадобиться для самой операционной системы, если система хранит в TSS дополнительные данные.
Процедура с доступом к дескриптору TSS может вызвать переключение задачи. В большинстве систем поля DPL дескрипторов TSS должны быть очищены, чтобы только привилегированное программное обеспечение могло выполнить переключение задачи.
Доступ к дескриптору TSS не дает процедуре возможности читать или модифицировать дескриптор. Чтение и модификация его возможны только путем отображения в тот же адрес памяти дескриптора данных. Загрузка дескриптора TSS в сегментный регистр вызывает исключение. Дескрипторы TSS могут находиться только в таблице GDT. Попытка доступа к TSS при помощи селектора с установленным битом TI (который обозначает текущую LDT) генерирует исключение.