2010-04-26 7 views
34

las ich folgende Erklärung ab:Warum verwendet Linux den Hardware-Kontextwechsel nicht über den TSS?

Die x86-Architektur einen spezifischen Segmenttyp der Aufgabe Staat Segment (TSS), speichern Hardware Kontexte genannt enthält. Obwohl Linux Hardware-Kontext-Schalter nicht verwendet, ist es dennoch gezwungen, ein TSS für jede einzelne CPU im System einzurichten.

Ich frage mich:

  • Warum Linux verwendet nicht die Hardware-Unterstützung für Kontextwechsel?
  • Ist der Hardware-Ansatz nicht viel schneller als der Software-Ansatz?
  • Gibt es ein Betriebssystem, das den Hardware-Kontextwechsel nutzt? Werden sie von Windows verwendet?

Endlich und wie immer, danke für Ihre Geduld und Antwort.

----------- Hinzugefügt --------------

http://wiki.osdev.org/Context_Switching bekam eine Erklärung.

Menschen, die so verwirrt sind wie ich, könnten einen Blick darauf werfen. 8 ^)

+1

Ich hätte schwören können, dass ich gerade die OSDev-Foren gelesen habe und das gelesen habe;) – Earlz

Antwort

37

Das x86 TSS ist sehr langsam für Hardware-Multitasking und bietet fast keine Vorteile im Vergleich zu Software-Task-Switching. (In der Tat, ich denke, es manuell zu tun schlägt die TSS sehr oft)

Die TSS ist auch bekannt für sein lästig und mühsam zu arbeiten, und es ist nicht tragbar, auch auf x86-64. Linux zielt darauf ab, an mehreren Architekturen zu arbeiten, so dass sie sich wahrscheinlich dafür entschieden haben, Software-Task-Switching zu verwenden, da es maschinenunabhängig geschrieben werden kann. Darüber hinaus bietet das Umschalten zwischen Software-Tasks viel mehr Möglichkeiten und ist im Allgemeinen einfacher einzurichten als das TSS.

Ich glaube, Windows 3.1 verwendet die TSS, aber zumindest der NT> 5 Kernel nicht. Ich kenne kein Unix-ähnliches Betriebssystem, das den TSS verwendet.

Beachten Sie, dass die TSS obligatorisch ist. Die Sache, die OSs tun, ist das Erstellen eines einzelnen TSS-Eintrags (pro Prozessor) und jedes Mal, wenn sie Aufgaben wechseln müssen, ändern sie einfach diese einzelne TSS. Und auch die einzigen Felder, die in der TSS durch Softwaretaskumschaltung verwendet werden, sind ESP0 und SS0. Dies wird verwendet, um für Interrupts von Ring 3-Code zu 0 zu klingeln. Ohne ein TSS wäre kein Ring 0-Stack bekannt, der natürlich zu einem GPF und schließlich zu einem Dreifachfehler führen würde.

+0

Danke Earlz. Ich markiere deine Antwort als Antwort. Danke auch an die anderen Leute. : D – smwikipedia

+2

TSS-basiertes Switching bietet Hardware-Level-State-Management (lesen: Sicherheit), die ein Software-Switch nicht hat. Das in den 80er Jahren in die IA eingeführte TSS- und Privilegsystem spielt eine Rolle bei der Sicherung von Prozessen voneinander. Um es kurz zusammenzufassen: "Einige Betriebssysteme verwenden kein hardwarebasiertes Task-Switching, da sie Leistung und Portabilität der Sicherheit vorziehen." Klingt plausibel. –

+1

Nebenbei verwendet NT ein M: N-Threading-Modell, im Gegensatz zu "anderen Systemen" gibt es keine 1: 1-Beziehung zwischen Hardware- und Software-Threads, dies löst mehr als nur das "Task-Switch-Leistungsproblem". Nicht alle Systeme können ein M: N-Modell implementieren (zum Beispiel aufgrund ihrer engen Kopplung von Hardware-Threads mit einer bestimmten CPU und einem bestimmten Prozess) und stattdessen Leistungseinbußen erleiden (da solchen Systemen eine geeignete Hardware fehlt) Benutzermodus-Signalisierungsmechanismus, der nicht auch den ursprünglichen Ausführungs-Thread bindet.) –

6

Linux verwendet kein segmentiertes Speichermodell, daher wird diese segmentierungsspezifische Funktion nicht verwendet.

x86 CPUs haben viele verschiedene Arten von Hardware-Unterstützung für Kontextwechsel, so dass die Unterscheidung nicht Hardware vs Software ist, sondern mehr, wie ein Betriebssystem die verschiedenen verfügbaren Hardwarefunktionen verwendet. Es ist nicht notwendig, sie alle zu verwenden.

Linux ist so auf Effizienz ausgerichtet, dass Sie darauf wetten können, dass jemand jede Option, die möglich ist, profiliert hat und dass die derzeit verwendeten Optionen die besten verfügbaren Kompromisse sind.

+0

Danke Andrew. Können Sie mir sagen, was andere Hardware für den Kontextwechsel einer x86-CPU unterstützt? Ich habe nur von der TSS gehört. – smwikipedia

+0

Die meisten MMU-Funktionen sind beispielsweise nur in einer Multithread-Umgebung sinnvoll. Es scheint, dass ich nicht ganz richtig war: Die CPU zwingt Linux, ein TSS für das ESP-Register zu verwenden, obwohl keines der anderen Felder verwendet wird. Ich schätze, der Abschnitt über das Umschalten von Software-Tasks enthält Hinweise zu den meisten Dingen, die Sie benötigen: http://wiki.osdev.org/Task_State_Segment –

+0

Aufbauend auf Andrews letztem Kommentar: Das TSS wird für Dinge wie Ring3 -> Ring0-Übergänge benötigt es nimmt den ESP0-Wert auf. Dies verhindert, dass der Kernel den Ring3-Stack beim Eingeben von ring0 verwendet - ein Sicherheitsmerkmal. Linux verwendet für diesen Übergang ein TSS pro CPU. –

17

Linux verwendet, um HW-basierte Switching, in der Pre-1.3 Zeitrahmen Iirc zu verwenden. Ich glaube, sw-basierte Kontextwechsel erwies sich als schneller, und es ist flexibler.

Ein weiterer Grund könnte die Minimierung des arch-spezifischen Codes gewesen sein. Der erste Linux-Port zu einer Nicht-x86-Architektur war Alpha. Alpha hatte kein TSS, so dass mehr Code geteilt werden konnte, wenn alle Archs SW-Switching verwendeten. (Nur eine Vermutung.) Leider sind die Kernel-Änderungsprotokolle für den 1.2-1.3-Kernel-Zeitraum nicht gut erhalten, daher kann ich nicht genauer sein.

+0

Danke Andy für die Geschichtsinfo. : D – smwikipedia

3

@Andy - Der letzte Kernel mit Hardware Task Switching war 2.1.108.

+1

Downvoted weil sollte ein Kommentar sein (zu Andys Antwort), keine eigene Antwort. – amn

Verwandte Themen