6.2. Сегмент состояния задачи
Состояние процессора, необходимое для восстановления задачи, хранится в системном сегменте, называемом сегментом состояния задачи (Task State Segment - TSS).
| Формат 32-битного TSS | Формат 16-битного TSS | ||||
31  | 
15  | 
0 | 15  | 
0 | |
Адрес карты вв-выв  | 
  
T  | 
100 | Селектор LDT  | 
42 | |
Селектор LDT  | 
96 | DS  | 
40 | ||
GS  | 
92 | SS  | 
38 | ||
FS  | 
88 | CS  | 
36 | ||
DS  | 
84 | ES  | 
34 | ||
SS  | 
80 | DI  | 
32 | ||
CS  | 
76 | SI  | 
30 | ||
ES  | 
72 | BP  | 
28 | ||
EDI  | 
68 | SP  | 
26 | ||
ESI  | 
64 | BX  | 
24 | ||
EBP  | 
60 | DX  | 
22 | ||
ESP  | 
56 | CX  | 
20 | ||
EBX  | 
52 | AX  | 
18 | ||
EDX  | 
48 | FLAGS  | 
16 | ||
ECX  | 
44 | IP  | 
14 | ||
EAX  | 
40 | SS2  | 
12 | ||
EFLAGS  | 
36 | SP2  | 
10 | ||
EIP  | 
32 | SS1  | 
8 | ||
CR3 (PDBR)  | 
28 | SP1  | 
6 | ||
SS2  | 
24 | SS0  | 
4 | ||
ESP2  | 
20 | SP0  | 
2 | ||
SS1  | 
16 | Связь TSS  | 
0 | ||
ESP1  | 
12 | ||||
SS0  | 
8 | ||||
ESP0  | 
4 | ||||
Связь TSS  | 
0 | ||||
Назначение специальных полей:
- Связь TSS (Link TSS) - содержит селектор TSS предыдущей задачи (обновляется при вызове новой задачи или обработчика исключения/прерывания в новой задаче). Это поле обеспечивает обратное переключение по команде IRET.
 - Флаг отладки (Debug Trap flag - T) - если выставлен, при переключении на задачу вызывается особый случай отладки.
 - Базовый адрес карты ввода-вывода (I/O Permission Map Base Address) - содержит 16-битное смещение двоичной карты разрешения ввода-вывода от начала TSS. Эта карта используется в случае выполнения операции ввода-вывода, когда IOPL<CPL или задача находится в состоянии VM86. Если бит соответствующий запрашиваемому порту равен 0, операция ввода-вывода проходит успешно, в противном случае генерируется нарушение общей защиты.
 
Сегмент состояния задачи содержит динамические (обновляемые) и статические (необновляемые) поля. К динамическим относятся поля, соответствующие регистрам общего назначения, сегментным регистрам, регистру флагов, указателю команд EIP, и поле "Связь TSS". Динамические поля автоматически обновляются процессором при сохранении контекста задачи во время переключения на другую задачу. К статическим относятся все остальные поля: селектор LDT, адрес каталога таблиц (PDBR), указатели привилегированных стеков (SS0:SP0, SS1:SP1, SS2:SP2), флаг отладки (T) и базовый адрес карты разрешения ввода-вывода (I/O Permission Map Base Address). Статические поля заполняются системным ПО при создании задачи (при создании TSS) и не изменяются процессором при переключении задач.
Дескриптор TSS должен находиться в GDT. Процессор генерирует нарушение общей защиты при попытке переключиться на задачу, селектор TSS которой содержит бит TI=1. Для запущенной в данный момент задачи (или приостановленной) дескриптор TSS имеет тип "занятый TSS" (S=0, типы 3 и 11). Процессор не поддерживает рекурсию задач, поэтому попытка переключения задач при помощи селектора "занятого TSS" вызывает исключение.
