Кто-нибудь может пояснить, почему в GDT целых 4 дескриптора TSS? Я почему то думал что он должен быть там в единственном экземпляре.
Туплю, если бы был только один дескриптор, то отсутствовала бы многозадачность. Осталось разобраться почему дескрипторов там именно четыре...
В GDT столько TSS, сколько пожелает программист -- в пределах разумного, конечно. Может быть именно один (собственно, в нормальных системах именно так и есть, поскольку аппаратная многозадачность оказалась никому ненужной, и в конце концов -- в 64-разрядных процессорах -- её упразднили).
Один используется при обработке двойной ошибки #DF, KiTrap08(). Один используется при обработке NMI(KiTrap02). Один рабочий используется планировщиком. Зачем нужен есчо один не знаю.
SII В виндовс используется програмное переключение задач, TSS используется не полностью, точнее всего несколько полей из неё(Ss, Esp). Аппаратное переключение задач не используется. Еслибы процессор не требовал этого например для обработки прерываний разработчики виндовс вообще отказались бы от использования TSS.
TSS На 80386 аппаратное переключение было ТОЧНО медленнее программного. Скорей всего, так и в последующих процессорах. Ну и гибкость, о чём уже сказал Clerk. Архитектура ИА-32 -- это сплошной "навязчивый сервис", очень многие вещи в ней, в том числе и многозадачность, спроектированы безобразно, а поэтому неудобны в практическом использовании.