Подтвердить что ты не робот

Почему Linux не использует коммутатор аппаратного контекста через TSS?

Я прочитал следующее утверждение:

Архитектура x86 включает в себя определенный тип сегмента, называемый Задачей Государственный сегмент (TSS) для хранения оборудования контексты. Хотя Linux не использует аппаратных контекстных переключателей, это тем не менее, вынудили создать TSS для каждый отдельный процессор в системе.

Мне интересно:

  • Почему Linux не использует аппаратную поддержку контекстного переключателя?
  • Разве аппаратный подход намного быстрее, чем программный подход?
  • Есть ли какая-либо ОС, которая использует коммутатор аппаратного контекста? Используют ли его окна?

Наконец, как всегда, спасибо за ваше терпение и ответ.

----------- Добавлена ​​--------------

http://wiki.osdev.org/Context_Switching получил некоторые объяснения.

Люди, которые меня смутили, могли взглянуть на это. 8 ^)

4b9b3361

Ответ 1

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 и, в конечном счете, тройной ошибке.

Ответ 2

Linux используется для переключения на основе HW в период до 1.3 периода iirc. Я считаю, что SW-контекстное переключение оказалось более быстрым, и оно более гибкое.

Еще одна причина, по-видимому, сводила к минимуму сводный код. Первым портом Linux для архитектуры, отличной от x86, был Alpha. У Alpha не было TSS, поэтому больше кода можно было бы использовать, если бы все арки использовали переключение SW. (Просто догадаться.) К сожалению, изменения в ядре ядра для периода ядра 1.2-1.3 не очень хорошо сохранились, поэтому я не могу быть более конкретным.

Ответ 3

Linux не использует сегментированную модель памяти, поэтому данная функция сегментации не используется.

x86 Процессоры имеют много разных видов аппаратной поддержки для переключения контекста, поэтому различие не является аппаратным и программным обеспечением, а скорее тем, как ОС использует различные аппаратные функции. Нет необходимости использовать их все.

Linux настолько эффективен, что вы можете поспорить, что кто-то профилировал каждый возможный вариант и что используемые в настоящее время варианты являются наилучшим доступным компромиссом.

Ответ 4

@Andy - Последнее ядро ​​с переключением аппаратных задач было 2.1.108.