Frage

Also ich habe in ein bisschen Montag immer in letzter Zeit und ich bin ein Anfänger, so dass ich mich gefragt, ob jemand etwas klären konnte. Ich nehme an jedem Prozess seinen eigenen Satz von Registern hat, und jeder Thread kann diese Register rechts ändern ?. Wie dann verwenden mehrere Threads die gleichen Register ohne Konflikte zu verursachen? Oder hat jeder Thread seinen eigenen Satz von Registern haben?

War es hilfreich?

Lösung

Ein Thread Kontextwechsel beinhaltet die Register des aktuellen Ausführungskontext zu speichern, und die Register mit gespeicherten Werten von Ausführungskontext Laden beginnen geschaltet. (unter anderem). Also jeder Thread effektiv hat seinen eigenen Satz von Registern. Auch sein eigener Stack, da ESP ist eines des Registers.

Ein Weg, um dies zu denken, ist, dass Sie Threads erhalten, indem den aktuellen Registersparzustand ab, und die Register mit einem neuen Zustand geladen werden. Wenn das nicht geschieht, dann ist es kein Threadwechsel. Wenn Sie auch zu einem anderen Satz von virtuellen Adresstabellen werden die Schalen, dann, was Sie haben, ist ein Prozess Schalter eher als ein Thread-Wechsel.

Sie sagen:

  

Ich nehme an jeder Prozess hat seinen eigenen Satz von Registern ist, und jeder Thread können diese Register rechts ändern?

Aber das ist nicht ganz richtig. Jeder CPU-Kern hat einen einzigen Satz von Registern. Diese Register werden verändert, wenn das Betriebssystem schaltet in einem anderen Thread. Aber es gibt nur einen Thread zu einem bestimmten Zeitpunkt in einem CPU-Kern ausgeführt wird. Prozesse haben nicht wirklich ihre eigenen Register, Prozesse eigene Threads (oder zumindest einen Faden) und Threads Register oder vielmehr einen Ort, um die Werte für die Register zu halten, während der Thread wartet auf einen CPU-Kern zu Verfügung steht laufen.

Andere Tipps

Hardware, gibt es nur einen Satz von Registern für jeden Prozessorkern. Aus diesem Grund kann nur ein Thread zu einem Zeitpunkt die Register verwenden. Mehrere Threads werden durch schnelles Umschalten von einem Thread zu einem anderen in der gleichen Zeit auf einem einzelnen Kern ausgeführt werden. Scheduling, den Thread ausgeführt wird, wenn der Job des Betriebssystem.

Wenn von einem Thread zum anderen umgeschaltet wird, werden die Inhalte der Register zu einem speziellen Speicherbereich gespeichert, und die Register für den nächsten Thread zurück in den Prozessor kopiert. Dies schließt den Befehlszeiger, so dass der Faden weiß, wo die Ausführung fortzusetzen, wenn es die Steuerung zurück erhält. Dieser Vorgang wird als Kontextwechsel bezeichnet.

Da der Scheduler des Betriebssystems in noch einem anderen Thread ist, kann es nur Prozesse Zeitplan, wenn es ausgeführt wird. Dies bedeutet, dass ein spezielles Hardware-Feature - ein Interrupt - ist notwendig, Kontextwechsel zu steuern. Nur das Betriebssystem Kontextwechsel Interrupts planen.

Der Faden wird durch einen Kern oder ein O getan, so dass das Programm sollte darüber nicht. Wenn keine Kernel oder OS verfügbar ist, dann müssen Sie es selbst implementieren. dafür benötigen Sie:

  • eine Funktion, die die sate sparen alle in Ihren CPU (SP registrieren: Stapel Zeiger, interner Registerwert, PC: Programmzähler etc ...) in einem andere Speicherplatz zu einem neuen wechseln Gewinde.
  • eine Funktion, um eine Thread-Umgebung auf Ihre CPU-Umgebung zu laden, stellen Sie die zuvor gespeicherten internen Register den Wert Ihrer CPU-Register.

Je nach Prozessor, gibt es nur einen Satz von Registern. Nicht ein einziger Satz pro Faden.

Es gibt Möglichkeiten, den Status aller Register zu speichern, so dass ein Faden aufnehmen kann, wo er unterbrochen wurde.

Einige Prozessoren erleichtern diese .

Sie haben

  • gesetzt von Prozessen das ist das eine Ihres Betriebssystem
  • jeder Prozess hat einen Speicherraum, der dynamisch zugewiesenen Speicher enthält, statische Daten und Code-Anordnung ,
  • alle Prozess hat eine Liste von Fäden
  • alle Thread hat seine eigenen Satz von Registern , Programmzähler und Stapel

mit Kontextschalter Ihre Scheduler-Thread Daten austauscht, die Ausführung zu einem anderen zu übergeben.

Normalerweise wird ein Prozess ist schwerer als ein Faden und verschiedene Planungsansätze existieren:

  • Kontext tun schaltet nur intern ( grüne Fäden ) zu Ihrem Programm (Ihr Betriebssystem wird es für nur einen einzigen Prozess so: hart Multi-Core)
  • Sie können eine Reihe von realen Prozessen zuweisen einen hybriden Ansatz ermöglicht einfache Multi-Core-Optimierung haben.

Jeder Thread hat seinen eigenen Kontext , die den Satz von Registern umfasst, CPU-Flags, Stapel, etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top