6. Многозадачность    
 СОДЕРЖАНИЕ
 Введение
 1. Развитие архитектуры
 2. Структура МП
 3. Ресурсы МП
 4. Управление памятью
 5. Защита
 6. Многозадачность
 7. Прерывания и исключения
 8. Инициализация МП
 9. Эмуляция 8086
 Глоссарий
 ПРАКТИКА
 1. Семантический разрыв
 2. CPUID
 3. Защищенный режим
 Вопросы и задания

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

Назначение специальных полей:

Сегмент состояния задачи содержит динамические (обновляемые) и статические (необновляемые) поля. К динамическим относятся поля, соответствующие регистрам общего назначения, сегментным регистрам, регистру флагов, указателю команд 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" вызывает исключение.