[Linux] - Présentation du processus

1. La gestion du processus par le système d'exploitation

1. Comprendre le processus

(1) Concept
Pour le comprendre en termes simples, un processus est un programme en cours d'exécution qui consiste à charger le programme du disque dans la mémoire.
Mais spécifiquement, le processus n'est pas limité à un code de programme exécutable (nous l'appelons un segment de code). Habituellement, le processus contient également d'autres ressources, telles que des fichiers ouverts, des signaux suspendus, des données internes du noyau, l'état de traitement, un ou plusieurs espaces d'adressage mémoire avec mappage mémoire et un ou plusieurs threads d'exécution, bien sûr Segment de données pour stocker des variables globales, etc. Le processus est donc un ensemble d'instructions ordonnées + données + ressources. En fait, le processus est le résultat en temps réel de l'exécution du code du programme

(2) Le
thread d' objet actif dans le processus est l'objet actif dans le processus. Chaque thread a un compteur de programme indépendant, une pile de processus et un ensemble de registres de processus. Le noyau planifie des objets au lieu de threads . Dans le système d'exploitation actuel, un processus peut contenir plusieurs threads. Pour Linux, un thread n'est qu'un processus spécial.

(3) Il existe deux ou plusieurs processus différents. Le processus exécute le même programme. Le
processus commence à survivre lorsqu'il est créé. Dans le système Linux, fork () est appelé pour copier un processus existant afin de créer un processus complètement nouveau. À la fin de l'appel, à la même position que le point de retour, le processus parent reprend l'exécution et le processus enfant commence l'exécution. L'appel système fork () renvoie deux fois depuis le noyau: une fois de retour au processus parent et une autre fois au processus enfant nouvellement créé. Normalement, de nouveaux processus sont créés pour exécuter immédiatement des programmes nouveaux et différents, puis appellent exec () pour créer un nouvel espace d'adressage.

2. Comment le système d'exploitation contrôle le processus

Le système d'exploitation enregistre les attributs pertinents du processus via le PCB
(1) La première connaissance du PCB
PCB est également appelée descripteur de processus, tous deux de type task_struct, qui est défini dans le fichier <linux / sched.h>. Le descripteur de processus contient toutes les informations sur un processus spécifique.
Le task_struct est relativement grand, sur une machine 32 bits, il a environ 1,7 Ko. Les données contenues dans le descripteur de processus peuvent décrire complètement un programme en cours d'exécution: le fichier qu'il a ouvert, l'espace d'adressage du processus, le signal suspendu, l'état du processus et d'autres informations supplémentaires, comme le montre la figure suivante:
Insérez la description de l'image ici
En outre, Le noyau stocke la liste des processus dans une liste liée doublement circulaire appelée file d'attente de tâches, comme illustré dans la figure ci-dessous. Linux distribue la structure task_struct via le distributeur de dalles.
Insérez la description de l'image ici

(2) Génération et recyclage de processus

Lorsque le processus est nouvellement généré, la structure PCB doit être allouée en premier, puis le corps du processus est généré. Le noyau identifie chaque processus par une valeur d'identification de processus unique ou PID. Le PID est un nombre. La valeur maximale est définie par défaut à 32 768 (la valeur maximale de short int). Le noyau stocke le PID de chaque processus dans son propre processus Dans le descripteur.
À la fin du processus, le corps principal est libéré en premier, puis la structure du PCB est libérée. Il y a certaines conditions requises pour libérer le PCB ici, comme les codes de sortie, etc., donc il y a ce que nous appelons le processus zombie et le processus orphelin.
Processus Zombie : le corps principal du processus est publié, mais le PCB reste. L'existence du processus zombie est nuisible. Comme nous l'avons décrit précédemment, PCB occupe 1,7k d'espace dans la mémoire. L'existence d'un grand nombre de processus zombie rendra la mémoire trop pleine.
Processus orphelin : le processus parent est terminé, mais le processus enfant n'est pas terminé. Le système monte tous les processus orphelins sous INIT.

Deuxièmement, l'état du processus

1. Trois états
Le processus le plus simple peut être divisé en trois états, y compris l'état en cours d'exécution, prêt et bloquant. L'exécution signifie que la CPU exécute des instructions dans le processus, prêt signifie attendre que la CPU exécute le processus et bloquer signifie attendre l'occurrence d'événements d'E / S. Leur relation est illustrée dans la figure suivante:
Insérez la description de l'image ici
2. Cinq états
(1) TASK_RUNNING (en cours d'exécution): indique qu'il est en cours d'exécution ou en attente d'exécution dans la file d'attente d'exécution. Il s'agit du seul état possible d'exécution de processus dans l'espace utilisateur, et cet état peut également être appliqué aux processus qui s'exécutent dans l'espace noyau.
(2) TASK_INTERRUPTIBLE (peut être interrompu): le processus est bloqué, en attendant que certaines conditions soient atteintes pour définir l'état du processus en cours d'exécution.
(3) TAK_UNINREREUPTIBLE (sans interruption): Même si le signal est reçu, il ne se réveillera pas ou ne sera pas prêt à être mis en service. Cet état est le même que l'état interruptible
(4) _TASK) TRACED: Processus suivi par d'autres processus
(5) _TASK_STOPPED ): Le processus ne peut pas être mis en service sans être mis en service.
Leurs diagrammes de transition spécifiques sont les suivants:
Insérez la description de l'image ici
3. Sept états
Insérer la description de l'image
Insérez la description de l'image ici
ici Ici, l'accent est mis sur l'état de sortie. Il existe quatre méthodes de sortie:
(1) Sortie normale (volontaire): Le processus a terminé son Travail et sortie, comme appeler exit.
(2) Sortie d'erreur (volontaire): généralement causée par une erreur dans le programme, comme l'exécution d'une instruction illégale, la citation de contenu inexistant ou le diviseur est nul. Dans ce type d'erreur, le processus recevra un signal à interrompre
(3) erreur grave (involontaire): par exemple, lorsque vous souhaitez compiler un programme qui n'existe pas.
(4) Tué par d'autres processus (involontaire): Dans le système Linux, le système appelle kill.

Publié 98 articles originaux · a gagné les éloges 9 · vues 3648

Je suppose que tu aimes

Origine blog.csdn.net/qq_43412060/article/details/105416698
conseillé
Classement