Информация о состоянии процессора, необходимая для восстановления контекста задачи, хранится в типе сегмента, называемом сегментом состояния задачи, или TSS. Поля TSS делятся на две основные категории:
1. Динамические поля, обновляемые процессором при каждом переключении задачи. В число этих полей входят:
— Регистры общего назначения (EAX, ECX, EDX, EBX, ESP, EBP, ESI и EDI).
— Сегментные регистры (ES, CS, SS, DS, FS и GS).
— Регистр флагов (EFLAGS).
— Указатель команд (EIP),
— Селектор для TSS предыдущей задачи (обновляется только когда ожидается возврат).
2. Статические поля, которые процессор считывает, но не изменяет. Эти поля устанавливаются при создании задачи. Эти поля:
— Селектор для LDT задачи.
— Логический адрес для стеков привилегированных уровней 0, 1 и 2.
— Бит T (бит отладочной ловушки), который, будучи установленным, заставляет процессор устанавливать при переключении задачи отладочное исключение.
— Базовый адрес битового массива разрешения ввода/вывода. При наличии, данный массив всегда хранится в TSS по старшим адресам. Базовый адрес указывает на начало массива.
При использовании механизма подкачки страниц важно избегать помещения границы страницы в пределах части TSS, считываемой процессором при переключении задачи (первые 108 байтов). Если граница страницы находится в пределах этой части TSS, то страницы по обеим сторонам границы должны присутствовать в памяти одновременно. При отсутствии страницы или генерации исключения общей защиты после того, как процессор начал чтение TSS, возникает состояние невосстановимой ошибки.
Сегмент состояния задачи
05 Мар, 2009
