Les processus et les threads dans les systèmes d’exploitation (OS) ont toujours fait partie de mes sujets préférés en informatique. Ils permettent de comprendre, de manière beaucoup plus approfondie, comment le SE gère les programmes au cours de leurs différentes étapes d’exécution, aborde les questions relatives à la mémoire et assure une sécurité isolée jusqu’au noyau. C’est juste sacrément intéressant !
L’idée de base
Un processus est simplement un programme en exécution. Un programme a strictement un processus qui lui est associé. Dans de très rares cas, ce n’est pas toujours vrai (Google Chrome par exemple), mais c’est vrai une majorité du temps.
Chaque processus possède différents composants qui lui permettent d’effectuer les tâches prévues. Notamment, la pile et le tas sont utilisés respectivement pour l’allocation de variables locales et de mémoire dynamique.
Il y a plus de composants mais il suffit de dire que chaque processus a besoin de ces composants pour s’exécuter en tant que programme.
Surveiller les processus dans le système
À tout moment, il peut y avoir quelques centaines ou moins de processus en cours d’exécution. Il est parfois utile de voir des informations détaillées à leur sujet, notamment si votre ordinateur fonctionne lentement : car certains processus peuvent monopoliser la mémoire de l’ordinateur ou le processeur. Pouvoir les localiser et ensuite les détruire est en effet très pratique et peut être réalisé assez facilement.
Si vous êtes sous Windows, vous pouvez ouvrir le Gestionnaire des tâches et cliquer sur l’onglet Processus pour voir ces informations. Si vous utilisez Linux ou une machine basée sur Unix, vous pouvez exécuter un certain nombre de commandes différentes :
ps aux // this will display a list of processestop // detailed information about all processes, threads, memory hoggers and network packets
Comment le système d’exploitation gère-t-il les processus
Un processus peut se trouver dans un état particulier à un moment donné. Il peut venir d’être créé, attendre de s’exécuter, attendre l’accès à un périphérique d’entrée/sortie, être interrompu par un autre processus, etc. Pour assurer une productivité maximale, le système d’exploitation doit comprendre l’état de tous ces processus et être capable d’en créer intelligemment de nouveaux, de passer de l’un à l’autre, de les mettre en pause, de les suspendre, etc. aux bons moments.
Pour faire cela efficacement, le système d’exploitation maintient ce qu’on appelle un bloc de contrôle de processus pour chaque processus. Il contient des informations utiles telles que l’état actuel du processus, la prochaine instruction à exécuter et les périphériques actuellement alloués au processus.
Cela permet au système d’exploitation de gérer efficacement différents processus, en sauvegardant l’état actuel dans le BPC, en passant de l’un à l’autre et en rechargeant certains processus ultérieurement.
Comment le système d’exploitation commute entre différents processus
Context switching fait référence à l’activité spécifique où un système d’exploitation sauvegarde l’état d’un processus en cours d’exécution et le met en pause afin d’en exécuter un autre. Il doit le faire de manière à ce que ces processus n’entrent pas en conflit et que le processus sauvegardé puisse être repris ultérieurement sans problème. Cela garantit une caractéristique essentielle des systèmes d’exploitation : le multitâche. Le diagramme montre comment le PCB est utilisé pour sauvegarder l’état du processus, en exécuter un autre, puis recharger et poursuivre le processus initial ultérieurement.