Quel est le but principal du processus de swapper dans Unix?

Quel est le but principal du processus de swapper dans Unix?

Swapper processus a le PID 0 et je suppose que c'est le premier processus qui charge. Quelqu'un peut-il jeter plus de lumière sur ce sujet?

Il n'y a pas eu de processus de swapper depuis les années 1990, et les échanges n'ont pas vraiment été utilisés depuis les années 1970.

Unice a cessé d'utiliser le swap il y a longtemps. Ils ont été des systèmes d'exploitation basés sur la demande pendant quelques décennies – depuis System V R2V5 et 4.0BSD. Le processus de balayage, tel quel, utilisé pour effectuer des opérations de swap de processus . Il a été utilisé pour échanger des processus entiers – y compris toutes les structures de données de l' espace noyau pour le traitement – sur le disque et les renvoyer à nouveau. Il serait réveillé, régulièrement, par le noyau, et analyserait la table des processus afin de déterminer les processus échangés et prêts à exécuter et les processus échangés dans les processus endormis. Pourrait être échangé. Tout manuel sur Unix à partir des années 1980 sera abordé plus en détail, y compris l'algorithme de swap. Mais il est largement non pertinent pour les Unices à la demande, bien qu'ils aient conservé l'ancien mécanisme de swap depuis plusieurs années. (Les BSD ont essayé assez dur pour éviter les échanges, en faveur de la pagination, par exemple).

Le processus # 0 est le premier processus du système, fabriqué à la main par le noyau. Le processus 1 de fork() s, le premier processus utilisateur. Ce que cela fait autrement que cela dépend de ce que le système d'exploitation de Unix est réellement . Comme mentionné, les BSD avant FreeBSD 5.0 ​​ont conservé l'ancien mécanisme de balayage, et le processus # 0 a simplement été transféré dans le code du swapper dans le noyau, la fonction scheduler() , après avoir terminé l'initialisation du système. Le système V était à peu près le même, sauf que la procédure # 0 était classiquement nommée sched plutôt que swapper . (Les noms sont plutôt des choix arbitraires). En fait, la plupart – peut-être tous – Unices avait un ancien mécanisme de swapper (en grande partie inutilisé) qui se trouvait comme processus n ° 0.

Linux, en particulier, a été quelque peu différent des Unices, dans ce processus # 0 est le processus inactif , exécutant cpu_idle() . Il ne fait tout simplement rien, dans une boucle infinie. Il existe pour qu'il y ait toujours une tâche prête à être programmée.

Même ceci est une description périmée. À la fin des années 1980 et au début des années 1990, c'était l'avènement des systèmes d'exploitation multi-threading, de sorte que le processus # 0 est devenu simplement le processus du système . Dans le monde des anciens Unices à fil unique, on pourrait seulement obtenir un flux d'exécution distinct pour effectuer une tâche de noyau continu par fork() un processus. Ainsi, toutes les tâches du noyau ( vmdaemon , pagedaemon , pagezero , bufdaemon , syncer , ktrace , etc.) étaient des processus à faible nombre, fork() ed par le processus # 0 après la fork() ed ìnit . Dans Unices à thread multiples, il n'est pas logique de créer un contexte de processus entièrement nouveau pour tout ce qui s'exécute entièrement dans l'espace du noyau et n'a pas besoin d'un espace d'adresse, d'une table de descripteurs de fichiers et de tout ce qui ne l'est pas. Donc, toutes ces tâches sont devenues (essentiellement) des threads, partageant l'espace d'adressage d'un processus système unique.

En cours de route, plusieurs Unices ont complètement perdu l'ancien mécanisme de balayage, qu'ils essayaient tout le possible pour éviter d'utiliser de toute façon. Le code d'initialisation d'OpenBSD tombe maintenant dans un while(1) tsleep(…); Boucle, par exemple, sans mécanisme d'échange partout.

Donc, aujourd'hui, le processus # 0 sur Unix est le processus du système , qui détient effectivement un certain nombre de threads du noyau qui font un certain nombre de choses, allant des opérations de sortie de page, à travers les bouffées de cache du système de fichiers et la mise à zéro du tampon, au ralenti quand il n'y a rien d'autre à exécuter .

Process 0 est un processus spécial (appelé swapper ou ralenti) qui s'exécute lorsque le système est inactif, c'est-à-dire qu'aucun autre processus n'est planifié. C'est le seul processus qui peut invoquer l'appel système idle() .

C'est le premier processus à engendrer, qui crée ensuite init (PID 1) qui démarre d'autres processus.

 root 1 0 /sbin/init 

Vous pouvez également vérifier l' man idle .

Voir aussi: Comprendre le noyau Linux – Planification des processus

La raison en est historique et programmée. La tâche inactive est la tâche en cours d'exécution, si aucune autre tâche n'est exécutable, comme vous l'avez dit. Il a la priorité la plus basse possible, alors c'est pourquoi il n'existe aucune autre tâche qui peut être exécutée.

Cause programmatique: cela simplifie beaucoup la planification des processus, car il ne faut pas se soucier du cas spécial: "Que se passe-t-il si aucune tâche ne peut être exécutée?", Car il existe toujours au moins une tâche exécutable, la tâche inactive. De plus, vous pouvez compter la quantité de temps de CPU utilisé par tâche. Sans la tâche inactive, quelle tâche obtient le cpu-time comptabilisé, personne ne le faut?

Raison historique: avant que nous ayons un cpus capables de descendre ou de passer en mode d'économie d'énergie, il a dû fonctionner à toute vitesse à tout moment. Il a fonctionné une série d'instructions NOP, si aucune tâche ne pouvait être exécutée. Aujourd'hui, la planification de la tâche inactive détruit généralement le processeur en utilisant les instructions HLT (arrêt), de sorte que l'alimentation est enregistrée. Il y a donc une fonctionnalité dans la tâche au ralenti de nos jours.

Dans Windows, vous pouvez voir la tâche inactive dans la liste des processus, c'est le processus inactif.