Assembler - язык неограниченных возможностей

         

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


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

TSS имеет следующую структуру:

+00h: 4 байта — селектор предыдущей задачи (старшее слово содержит нули — здесь и для всех остальных селекторов)

+04h: 4 байта — ESP для CPL = 0

+08h: 4 байта — SS для CPL = 0

+0Ch: 4 байта — ESP для CPL = 1

+10h: 4 байта — SS для CPL = 1

+14h: 4 байта — ESP для CPL = 2

+18h: 4 байта — SS для CPL = 2

+1Сh: 4 байта — CR3

+20h: 4 байта — EIP

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

+28h: 4 байта — ЕАХ

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

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

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

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

+3Ch: 4 байта — ЕВР

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

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

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

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

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

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

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



Содержание раздела