TSS

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

TSS (англ. Task State Segment — сегмент состояния задачи) — специальная структура в архитектуре x86, содержащая информацию о задаче (процессе). Может использоваться ОС для диспетчеризации задач, но обычно (например в Linux[1]) применяется только для переключения на стек ядра при обработке прерываний и исключений. В TSS содержится информация о:

Расположение TSS[править | править исходный текст]

Может находиться где угодно в памяти. Специальный сегментный регистр (Регистр Задачи — TR) содержит селектор сегмента, который указывает на действительный сегментный дескриптор TSS, постоянно хранящийся в GDT (может не храниться в LDT). Для использования TSS ядро ОС должно выполнить следующие шаги:

  • Создать дескриптор TSS в глобальной таблице дескрипторов;
  • Загрузить регистр процесса (TR) с селектором сегмента для этого сегмента;
  • При необходимости добавить информацию в TSS в памяти.

В целях безопасности TSS должен быть расположен в области памяти, доступной только для ядра.

Регистр задачи TR[править | править исходный текст]

TR — 16-битный регистр, содержащий селектор сегмента для TSS. Может быть загружен через инструкцию LTR. Состоит из двух частей: одна из них видима и доступна программисту, а другая, не видимая часть, автоматически подгружается из дескриптора TSS.


Примечания[править | править исходный текст]

  1. Understanding the Linux Kernel, 3rd Ed. Daniel P. Bovet; 2005 "3.3.2. Task State Segment": "Although Linux doesn't use hardware context switches, it is nonetheless forced to set up a TSS for each distinct CPU in the system.... 80×86 CPU switches from User Mode to Kernel Mode, it fetches the address of the Kernel Mode stack from the TSS."

Ссылки[править | править исходный текст]

  • wiki.osdev.org/Task_State_Segment
  • www.logix.cz/michal/doc/i386/chp07-01.htm
  • www.cs.umd.edu/~hollings/cs412/s02/proj1/ia32ch7.pdf