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.





Начало  Назад  Вперед