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.
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