Почему Linux не использует аппаратное переключение контекста через TSS? - PullRequest
39 голосов
/ 26 апреля 2010

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

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

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

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

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

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

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

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

Ответы [ 3 ]

41 голосов
/ 04 мая 2010

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 и в конечном итоге к тройному отказу.

17 голосов
/ 04 мая 2010

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

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

6 голосов
/ 26 апреля 2010

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

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

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

...