Je veux modifier le noyau Linux de sorte que chaque fois que le PID actuel change, c'est-à-dire qu'un nouveau processus soit activé, un code de diagnostic est exécuté (explication détaillée ci-dessous, si curieux). J'ai fait quelques recherches, et il semble que chaque fois que le planificateur choisit un nouveau processus, la fonction context_switch()
est appelée, ce qui est logique (c'est juste une analyse superficielle de sched.c/schedule()
). Le problème est que le planificateur Linux est fondamentalement noir pour moi en ce moment, donc j'aimerais savoir si cette hypothèse est correcte. Est-il garanti que, chaque fois qu'un nouveau processus est sélectionné pour avoir du temps sur le CPU, la fonction context_switch() est appelée? Ou y a-t-il d'autres endroits dans la source du noyau où l'ordonnancement pourrait être géré dans d'autres situations? (Ou suis-je totalement malentendu tout cela?)Est-ce que kernel/sched.c/context_switch() est garanti pour être invoqué chaque fois qu'un processus est activé?
Pour donner un peu de contexte, je travaille avec le simulateur MARSS x86 en essayant de faire de l'instrumentation et de mesurer certains programmes. Le problème est que mon instrumentation doit savoir à quel processus d'exécution correspondent certains événements de code, afin d'éviter une mauvaise interprétation des données. L'idée est d'utiliser des systèmes intégrés de passage de messages dans MARSS pour passer le PID du nouveau processus sur chaque commutateur de contexte, de sorte qu'il sache toujours quel PID est en cours d'exécution. Si quelqu'un peut penser à un moyen plus simple d'accomplir cela, cela serait également grandement apprécié.