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

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

x86 архитектура включает определенный тип сегмента, названный Сегментом состояния задачи (TSS), для хранения аппаратных контекстов. Хотя Linux не использует аппаратные контекстные переключения, он, тем не менее, вынужден настроить TSS для каждого отличного ЦП в системе.

Я задаюсь вопросом:

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

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

-----------Добавленный--------------

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

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

39
задан smwikipedia 17 April 2014 в 07:43
поделиться

3 ответа

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 не было бы известного стека кольца 0, что, конечно, привело бы к GPF и, в конечном счете, к тройной ошибке.

42
ответ дан 27 November 2019 в 02:39
поделиться

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

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

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

6
ответ дан 27 November 2019 в 02:39
поделиться

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

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

17
ответ дан 27 November 2019 в 02:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: