Сборка Часть2 / АВМиС / Лекции / Сегмент состояния задачи
.docСегмент состояния задачи
Состояние процессора, необходимое для восстановления задачи, хранится в системном сегменте, называемом сегментом состояния задачи (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" вызывает исключение.