x86 TSS очень медленный для аппаратной многозадачности и практически не дает преимуществ по сравнению с программным переключением задач. (На самом деле, я думаю, что выполнение этого вручную много раз превосходит TSS)
TSS известен также тем, что с ним надоедает и утомительно работать, и он не переносим даже x86-64. Linux нацелен на работу с несколькими архитектурами, поэтому они, вероятно, решили использовать программную коммутацию задач, потому что она может быть написана машинно-независимым способом. Кроме того, переключение между программными задачами дает гораздо больше возможностей по сравнению с тем, что может быть сделано, и, как правило, его легче настроить, чем TSS.
Я считаю, что Windows 3.1 использовала TSS, но, по крайней мере, ядро NT> 5 - нет. Я не знаю ни одной Unix-подобной ОС, которая использует TSS.
Обратите внимание, что TSS является обязательным. Хотя операционные системы создают единственную запись TSS (на процессор), и каждый раз, когда им нужно переключать задачи, они просто меняют эту единственную TSS. А также единственными полями, используемыми в TSS при переключении программных задач, являются ESP0
и SS0
. Это используется для получения звонка 0 из кода звонка 3 для прерываний. Без TSS не было бы известного стека Ring 0, который, конечно, приводил бы к GPF и в конечном итоге к тройному отказу.