Ich möchte den Linux-Kernel so ändern, dass jedes Mal, wenn sich die aktuelle PID ändert - d. H. Ein neuer Prozess eingeschaltet wird - irgendein Diagnosecode ausgeführt wird (detaillierte Erklärung unten, falls neugierig). Ich habe etwas gegraben, und es scheint, dass jedes Mal, wenn der Scheduler einen neuen Prozess auswählt, die Funktion context_switch()
aufgerufen wird, was sinnvoll ist (dies ist nur eine flüchtige Analyse von sched.c/schedule()
).Wird Kernel/sched.c/context_switch() garantiert jedes Mal aufgerufen, wenn ein Prozess eingeschaltet wird?
Das Problem ist, der Linux-Scheduler ist im Grunde schwarze Magie, also würde ich gerne wissen, ob diese Annahme richtig ist. Ist es garantiert, dass jedes Mal, wenn ein neuer Prozess ausgewählt wird, um etwas Zeit auf der CPU zu bekommen, die Funktion context_switch() aufgerufen wird? Oder gibt es andere Stellen in der Kernel-Quelle, in denen die Terminplanung in anderen Situationen gehandhabt werden könnte? (Oder irre ich das alles?)
Um etwas Kontext zu geben, arbeite ich mit dem MARSS x86 Simulator, der versucht, einige Instrumente und Messungen bestimmter Programme zu machen. Das Problem ist, dass meine Instrumentierung wissen muss, welchem Ausführungsprozess bestimmte Code-Ereignisse entsprechen, um eine Fehlinterpretation der Daten zu vermeiden. Die Idee besteht darin, einige eingebaute Nachrichtenübergabesysteme in MARSS zu verwenden, um die PID des neuen Prozesses bei jedem Kontextwechsel zu übergeben, so dass es immer weiß, welche PID gerade ausgeführt wird. Wenn sich jemand einen einfacheren Weg vorstellen könnte, würde dies auch sehr geschätzt werden.