La tâche inactive (A.K.A. Swaper Task) est choisie pour fonctionner lorsqu'il n'y a plus de tâches runnables dans la file d'attente d'exécution au point de planification des tâches. Mais quelle est l'utilisation de cette tâche si spéciale? Une autre question est pourquoi je ne trouve pas ce thread/processus dans la sortie "PS AUX" (PID = 0) de la zone UTILISATEUR?
La raison est historique et programmatique. La tâche inactive est la tâche en cours d'exécution, si aucune autre tâche n'est exécutable, comme si vous l'avez dit. Il a la plus faible priorité possible, c'est pourquoi il est courant d'aucune autre tâche n'est exécutable.
Raison programmatique: cela simplifie le processus de planification, car vous n'avez pas à vous soucier du cas spécial: "Que se passe-t-il si aucune tâche n'est exécutable?", Parce qu'il y ait toujours au moins une tâche runnable, la tâche oisif. De plus, vous pouvez compter la quantité de temps de processeur utilisé par tâche. Sans la tâche de ralenti, quelle tâche obtient la CPU-Time Compte-t-il, personne n'a besoin?
Raison historique: Avant d'avoir eu des processeurs qui sont capables de descendre ou d'aller dans des modes d'économie d'énergie, il devait courir à toute vitesse à tout moment. Il a dirigé une série d'instructions NOP, si aucune tâche n'a été courante. Aujourd'hui, la planification de la tâche inactive progresse généralement dans la CPU à l'aide des instructions HLT (HALT), la puissance est donc enregistrée. Il y a donc une fonctionnalité en quelque sorte dans la tâche oisif de nos jours.
Dans Windows, vous pouvez voir la tâche inactive dans la liste de processus, c'est le processus de veille.
Le noyau Linux conserve une liste d'attente de processus "bloqués" sur io/mutexes, etc. S'il n'y a pas de processus runnable, le processus d'inactivité est placé sur la file d'attente d'exécution jusqu'à ce qu'il soit préempté par une tâche sortant de la file d'attente.
La raison pour laquelle il a une tâche est de savoir que vous pouvez mesurer (environ) combien de temps le noyau gaspille en raison de blocs sur IO/serrures, etc., il rend le code beaucoup plus facile pour le Le noyau que la tâche inactive est la même que chaque tâche dont il a besoin de basculer, au lieu d'une tâche inactive "cas spéciale" qui pourrait modifier le comportement du noyau plus difficile.
Il y a en fait une tâche inactive par processeur, mais elle n'a pas lieu dans la liste des tâches principale, elle est à la place dans la structure runquante "struct" de la structure de la CPU, en tant que structure task_tructeur *.
Ceci est activé par le planificateur chaque fois qu'il n'y a rien de mieux à faire (sur cette CPU) et exécute du code spécifique à l'architecture pour inactiver la CPU dans un état d'alimentation bas.
Vous pouvez utiliser PS -EF et il indiquera le non de processus qui fonctionnent. Ensuite, dans le premier lien, il listera le premier PID - 0 qui est la tâche Swaper.