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

4646
Varun Kulkarni

Angenommen, ich habe ein Multi-Core-System, beispielsweise 4 Kerne, und in diesem Fall stelle ich 3 Benutzerprozess an eine 3 CPU an.

Wo wird sich der Kernel befinden?

Angenommen, ein Benutzerprozess führt einen Systemaufruf aus dem Kernel aus, oder sagen Sie ein IOCT1. Wird diese IOCTL auf einer vierten CPU ausgeführt, in der sich der Kernel befindet?

6

3 Antworten auf die Frage

3
Patrick Schlüter

Der Kernel befindet sich nirgends oder besser gesagt überall. Der Prozess, der den Syscall durchführt, wird in der CPU fortgesetzt, die den Aufruf durchführt, und kopiert den Code aus dem Kernel-Image in seinen Cache. Da der Code nur lesbar ist, hat jede CPU eine Kopie davon in den Caches. Die Cache-Zeilen werden auf die gleiche Weise entfernt wie jeder andere Code Ihres Systems. Dies bedeutet, dass Teile, die häufig aufgerufen werden, häufig im Cache gespeichert werden. Teile, die dies nicht tun, werden von höheren Cache-Zeilen, RAM, Festplatte usw. übernommen.

Thanks for your quick response.This means the user process pinned on CPU3 making a syscall will not use any resources from the 4th CPU ? Varun Kulkarni vor 11 Jahren 0
3
Ярослав Рахматуллин

The kernel lives in the system main memory. It is loaded there (RAM) when the system boots. Some parts of the kernel will be executed by the CPU at various times. While executing, the code (CPU instructions) will be in the internal memory of a specific CPU or core.

Exactly which core in a multi-core CPU, or which core in a multi-CPU system is impossible to answer without some knowledge about kernel design and the abstractions used by operating systems for communicating with a CPU or CPUs.

All I know is that the kernel will follow a set of rules for accessing one or several CPUS. Until someone more experienced comes along with a better explanation, you could dig into SMP design.

Chapters 5 and 6 of Structured Computer Organization scratch the surface of the technical aspects involved in commanding a CPU to execute some action and how that action is managed. Perhaps that would be an interesting read?

3
Mikhail Kupchik

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

ioctl (2) oder read (2) wird entweder sofort zurückkehren (wie ein Funktionsaufruf in Ihrem eigenen Programm) oder einen Thread blockieren. "Einen Thread blockieren" bedeutet, dass der Kernel-Scheduler Ihren Thread unterbricht und einen anderen Thread auf dieser CPU / diesem Kern ausführt. Ihr Thread bleibt solange blockiert, bis der Interrupt-Handler ihn freigibt (als lauffähig gekennzeichnet). Der Interrupt-Handler wird im Kernelmodus ausgeführt, normalerweise auf der ersten physischen CPU. Er wird von der Hardware aufgerufen, nachdem die E / A-Vorgänge abgeschlossen sind. Nachdem der Thread als lauffähig 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 Core.