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" вызывает исключение.