10.8.1. Сегмент состояния задачи

Сегмент состояния задачи (TSS) - это структура данных, в которой сохраня­ется вся информация о задаче, если ее выполнение временно прерывается.

TSS имеет следующую

4 байта - селектор предыдущей задачи (старшее слово содержит нули -

здесь и для всех остальных селекторов) +04h: 4 байта - ESP для CPL = О +08h: 4 байта - SS для CPL = О +0Ch: 4 байта - ESP для CPL = 1 +10h: 4 байта - SS для CPL = 1 +14h: 4 байта - ESP для CPL= 2 + 18h: 4 байта - SS для CPL= 2 +lCh: 4 байта - CR3 +20h: 4 байта - EIP

+24h: 4 байта - EFLAGS

+28h: 4 байта - EAX

+2Ch: 4 байта - ЕСХ

+30h: 4 байта - EDX

+34h: 4байта-ЕВХ

+38h: 4 байта - ESP

+3Ch: 4 байта - EBP

+40h: 4 байта - ESI

+44h: 4 байта - EDI

+48h: 4 байта - ES

+4Ch: 4 байта - CS

+50h: 4 байта - SS

+54h: 4 байта - DS

+58h: 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 не может быть меньше - обращение к такому дескриптору приво­дит к исключению #TS. Размер TSS может быть больше, если в него входят бито­вые карты ввода-вывода и перенаправления прерываний и если операционная система хранит в нем дополнительную информацию. Дескриптор TSS способен находиться только в GDT - попытка загрузить его из LDT вызывает исключение #GP. Для передачи управления задачам удобнее использовать дескрипторы шлю­за задачи, которые можно помещать как в GDT, так и в LDT или IDT.

Управление задачами