2010-10-12 6 views
7

Beim Kontextwechsel bei einem Single-Core-Prozessor wird der verantwortliche Code auf der einzigen CPU ausgeführt, die für das Umschalten der Threads zuständig ist.Wie erfolgt die Kontextumschaltung von Threads auf einem Multicore-Prozessor?

Aber wie ist das gemacht, wenn wir mehrere CPUs haben? Gibt es eine Master-CPU, die alle Kontextwechsel aller Slave-CPUs übernimmt? Ist jede CPU für ihren eigenen Kontextwechsel verantwortlich? Wenn ja, wie ist die Umschaltung synchronisiert, so dass zwei CPUs nicht denselben Thread ausführen? Oder gibt es einen anderen Mechanismus?

Antwort

6

Der Kernel ist multi-threaded. Es kann auf jedem Kern ausgeführt werden. Wenn ein Kern benötigt wird, um Threads zu tauschen, ruft er den Teil des Kernels auf, der für die Auswahl des nächsten Threads zuständig ist, der ausgeführt werden soll.

Der Kernel ist multi-threaded; Das heißt, es wird geschrieben, um gleichzeitig auf mehreren Kernen sicher ausgeführt zu werden. Daher läuft nur eine CPU mit einem bestimmten Thread, da der Code so konstruiert ist, dass das korrekte Ergebnis auftritt, wenn mehrere CPUs gleichzeitig neu planen.

+0

Vielen Dank für diese kurze, aber informative Antwort. – gablin

4

CPUs tun nicht Kontextwechsel. Betriebssysteme tun.

Im Wesentlichen führt ein Betriebssystem einen Kontextwechsel aus, indem es einen neuen Kontext (Register, Speicherzuordnungen usw.) in einen CPU-Kern lädt. Threads sind eine Betriebssystemstruktur, in der solche Kontexte gespeichert werden können. Daher ist das OS auch dafür verantwortlich, einen nicht laufenden Thread auszuwählen, von dem der CPU-Kontext geladen werden soll.

Wenn das Betriebssystem einen laufenden Thread auswählen würde, würden zwei Kerne versuchen, denselben Thread auszuführen. Das führt zu Verwirrung, da sie denselben Speicher teilen, und dieser einzelne Thread wird nicht erwarten, parallel mit sich selbst ausgeführt zu werden (!). Also würde kein Betriebssystem so etwas tun.

+2

Ich habe nie gesagt, dass die CPU den Kontext wechselt. Ich sagte, dass der verantwortliche Code (d. H. Das OS) zum Ausführen des Kontextwechsels auf einer CPU ausgeführt wird. Aber wie wird das gehandhabt, wenn wir mehr als eine CPU haben? Wird der Kontextwechselcode auf allen CPUs ausgeführt? – gablin

0

Angenommen, wir haben zwei Prozesse P1 und P2 Die ungefähre Abfolge der Schritte sollte wie folgt aussehen.

The current registers are stored into the process structure for P1. 
The stored register values from the process structure for P2 are loaded into the CPU's registers. 
CPU returns the User mode 
P1 is context switched out and P2 is context switched in and running 

Hinweis: CPU sendet nur die Intterupts an das Betriebssystem, um den Context Switch auszuführen.