Wo befindet sich der Kernel auf einem Multi-Core-System?

9

Angenommen, ich habe ein Multi-Core-System, z. B. 4 Kerne, und in diesem stecke ich 3 Benutzerprozesse an 3 CPUs.

Wo befindet sich in einem solchen Fall der Kernel?

Angenommen, einer der Benutzerprozesse führt einen Systemaufruf oder eine IOCTl für den Kernel durch. Wird diese IOCTL auf einer 4. CPU ausgeführt, auf der sich der Kernel befindet?

Varun Kulkarni
quelle

Antworten:

6

Der Kernel befindet sich im Speicher und wird auf allen CPUs und Kernen gleichzeitig ausgeführt.

ioctl (2) oder read (2) kehren entweder sofort zurück (wie ein Funktionsaufruf in Ihrem eigenen Programm) oder blockieren einen Thread. 'Einen Thread blockieren' bedeutet, dass der Kernel-Scheduler Ihren Thread anhält und einen anderen Thread auf dieser CPU / diesem Kern ausführt. Ihr Thread bleibt blockiert, bis der Interrupt-Handler ihn entsperrt (als lauffähig markiert). Der Interrupt-Handler wird im Kernel-Modus ausgeführt, normalerweise auf der ersten physischen CPU. Er wird von der Hardware aufgerufen, nachdem die E / A abgeschlossen ist. Nachdem Ihr Thread als ausführbar markiert wurde, hat er die Möglichkeit, seine Ausführung fortzusetzen, wenn der Kernel-Scheduler das nächste Mal ausgeführt wird, möglicherweise auf einer anderen CPU / einem anderen Kern.

Mikhail Kupchik
quelle
4

Der Kernel an sich befindet sich nirgendwo oder besser gesagt überall. Der Prozess, der den Syscall ausführt, wird auf der CPU fortgesetzt, die den Aufruf ausführt, und kopiert den Code aus dem Kernel-Image in den Cache. Da der Code schreibgeschützt ist, hat jede CPU eine Kopie davon in ihren Caches. Die Cache-Zeilen werden auf die gleiche Weise wie jeder andere Code Ihres Systems entfernt. Dies bedeutet, dass Teile, die sehr oft aufgerufen werden, sich häufig im Cache befinden, Teile, die nicht aufgerufen werden, von höheren Cache-Zeilen, RAM, Festplatte usw. übernommen werden.

Patrick Schlüter
quelle
Vielen Dank für Ihre schnelle Antwort. Dies bedeutet, dass der Benutzerprozess, der an CPU3 angeheftet ist und einen Systemaufruf ausführt, keine Ressourcen von der 4. CPU verwendet.
Varun Kulkarni
4

Der Kernel befindet sich im Hauptspeicher des Systems. Es wird dort geladen (RAM), wenn das System startet. Einige Teile des Kernels werden zu verschiedenen Zeiten von der CPU ausgeführt. Während der Ausführung befindet sich der Code (CPU-Anweisungen) im internen Speicher einer bestimmten CPU oder eines bestimmten Kerns.

Welcher Kern in einer Multi-Core-CPU oder welcher Core in einem Multi-CPU-System genau zu beantworten ist, kann ohne Kenntnisse über das Kernel-Design und die Abstraktionen, die Betriebssysteme für die Kommunikation mit einer CPU oder CPUs verwenden, nicht beantwortet werden.

Ich weiß nur, dass der Kernel eine Reihe von Regeln für den Zugriff auf einen oder mehrere CPUS befolgt. Bis jemand, der mehr Erfahrung hat, eine bessere Erklärung findet, können Sie sich mit dem SMP-Design befassen .

In den Kapiteln 5 und 6 der Strukturierten Computerorganisation werden die technischen Aspekte beschrieben, die mit dem Befehl an eine CPU verbunden sind, eine Aktion auszuführen, und wie diese Aktion verwaltet wird. Vielleicht wäre das eine interessante Lektüre?

Ярослав Рахматуллин
quelle