Сегмент состояния задачи (TSS) — это структура данных, в которой сохраняется вся информация о задаче, если ее выполнение временно прерывается.
TSS имеет следующую структуру:
+00h: 4 байта — селектор предыдущей задачи (старшее слово содержит нули — здесь и для всех остальных селекторов)
+04h: 4 байта — ESP для CPL = 0
+08h: 4 байта — SS для CPL = 0
+0Ch: 4 байта — ESP для CPL = 1
+10h: 4 байта — SS для CPL = 1
+14h: 4 байта — ESP для CPL = 2
+18h: 4 байта — SS для CPL = 2
+1Сh: 4 байта — CR3
+20h: 4 байта — EIP
+24h: 4 байта — EFLAGS
+28h: 4 байта — ЕАХ
+2Ch: 4 байта — ЕСХ
+30h: 4 байта — EDX
+34h: 4 байта — ЕВХ
+38h: 4 байта — ESP
+3Ch: 4 байта — ЕВР
+40h: 4 байта — ESI
+44h: 4 байта — EDI
+48h: 4 байта — ES
+4Ch: 4 байта — CS
+50h: 4 байта — SS
+54h: 4 байта — DS
+58Н: 4 байта — FS
+5Ch: 4 байта — GS
+60h: 4 байта — LDTR
+64h: 2 байта — слово флагов задачи. Бит 0 — флаг Т: вызывает #DB при переключении на задачу остальные биты не определены и равны нулю
+66h: 2 байта — адрес битовой карты ввода-вывода. Это 16-битное смещение от начала TSS, по которому начинается битовая карта разрешения ввода-вывода (см. главы 10.7.4 и 10.9.2) и заканчивается битовая карта перенаправления прерываний (см. главу 10.9.1) данной задачи.
TSS является полноценным сегментом и описывается сегментным дескриптором, формат которого мы приводили раньше (в главе 10.4.3). Кроме того, лимит TSS не может быть меньше 67h — обращение к такому дескриптору приводит к исключению #TS. Размер TSS может быть больше, если в него входят битовые карты ввода-вывода и перенаправления прерываний и если операционная система хранит в нем дополнительную информацию. Дескриптор TSS способен находиться только в GDT — попытка загрузить его из LDT вызывает исключение #GP. Для передачи управления задачам удобнее использовать дескрипторы шлюза задачи, которые можно помещать как в GDT, так и в LDT или IDT.