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.
Wo befindet sich der Kernel auf einem Multi-Core-System?
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?
3 Antworten auf die Frage
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?
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.
Verwandte Probleme
-
8
Sollte ich 32 oder 64 Bit für Linux wählen?
-
12
CPU-Kerne: Je mehr, desto besser?
-
5
Warum sollte mein Computer starten und plötzlich ausschalten?
-
2
Maximale CPU-Temperatur für Core 2 Duo E6400
-
4
Wie schnell ist jeder Kern in einem Dual-Core-Prozessor?
-
7
Kann ich die CPU-Geschwindigkeit meines MacBook im Akkubetrieb reduzieren?
-
2
Bietet der Intel i7 eine echte Verbesserung gegenüber seinen Vorgängern?
-
4
Kann ein 32-Bit-Betriebssystem in einem 64-Bit-Prozessor ausgeführt werden?
-
3
Ist es möglich, eine Intel Q8400-CPU in meinem ASUS P5N-EM HDMI-Mobo zu verwenden?
-
3
Sinkt durch das Überlappen einer CPU / eines Kühlkörpers tatsächlich die Temperatur?