В отличие от процедур задачи не являются реентрантными. Вызвать повторно задачу в цепочке вложенных задач нельзя, так как уничтожение старого поля LINK приведет к разрушению всей цепочки. Вызов задачи, уже находящейся в цепочке, приводит к исключению (особому случаю).
Необновляемая часть сегмента TSS содержит селектор дескриптора таблицы LDT (содержимое регистра LDTR), а также полные логические адреса трех стеков - по одному для каждого из трех колец защиты 0 - 2. Каждый адрес определяет нижнюю границу стека, т.е. его наибольший адрес. Указанные стеки используются в межкольцевых вызовах. Они устанавливается при создании задачи. Использование собственной таблицы LDT для каждой задачи обеспечивает дополнительную защиту, поскольку задачи в этом случае изолируются и их влияние друг от друга исключено.
Некоторые регистры процессора 80х86 при переключении задач не запоминаются в сегменте TSS. В число этих регистров входят регистры GDTR, TR и теневые регистры. Они либо остаются неизменными (GDTR), либо определяются вновь.
Одна из причин быстрого переключения задач заключается в том, что объем информации, подлежащей сохранению и повторному определению, сравнительно невелик.
Сегмент TSS может располагаться в любом месте пространстве линейных адресов процессора.
Процессор Pentium поддерживает как 16-битные сегменты TSS 16-разрядных процессоров х86, так 32- битные сегменты TSS 32-разрядных процессоров. Форматы 16- и 32-битных сегментов TSS представлены на рис.
Сегмент TSS процессора 80286 должен содержать минимум 44 байта. Если размер TSS меньше 44 байт, процессор фиксирует особый случай неверного сегмента TSS. Верхний предел размера TSS, как и других сегментов памяти процессора 80286, ограничен только адресным пространством 64 Кбайт. Дополнительные области в сегменте TSS полностью определяются пользователем и используются по его усмотрению (могут и не определяться, что чаще всего и делается). Например, в этой области сегмента TSS удобно хранит содержимое регистров арифметического сопроцессора для данной задачи. При переключении задачи процессор запоминает содержимое своих регистров в сегменте TSS старой задачи и перезагружает регистры значениями из TSS вызываемой задачи. При этом все данные, сверх аппаратно поддерживаемых 44 байт, размещенные в дополнительной области TSS, процессор игнорирует. Для использования этих данных необходимо программно вызывать алиасный сегмент данных.
15 0 обратная связь 0
начало стека SP0 2
кольца 0 SS0 4
начало стека SP1 6
кольца 1 SS1 8
начало стека SP2 10
кольца 2 SS2 12
IP 14
FLAGS 16
AX 18
CX 20
DX 22
BX 24
SP 26
BP 28
SI 30
DI 32
ES 34
CS 36
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.