0% ont trouvé ce document utile (0 vote)
21 vues28 pages

Comprendre les processus en programmation

Le document traite des processus en programmation système, définissant un processus comme l'exécution dynamique d'un programme sur un processeur. Il explique les différents états d'un processus, la création et la destruction de processus, ainsi que les commandes associées pour gérer ces processus dans un système Unix. Des exemples de code illustrent les concepts de clonage de processus et de gestion des signaux.

Transféré par

Mohamed Azzam
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
21 vues28 pages

Comprendre les processus en programmation

Le document traite des processus en programmation système, définissant un processus comme l'exécution dynamique d'un programme sur un processeur. Il explique les différents états d'un processus, la création et la destruction de processus, ainsi que les commandes associées pour gérer ces processus dans un système Unix. Des exemples de code illustrent les concepts de clonage de processus et de gestion des signaux.

Transféré par

Mohamed Azzam
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

“ Programmation Système


2- Processus

Pr. Abdelhay HAQIQ (ahaqiq@[Link])


2
Définition des processus

 Entité dynamique représentant l'exécution d'un programme sur un


processeur
 Du point de vue du système :
 Espace d'adressage (mémoire, contient données + code)
 Etat interne (compteur d'exécution, fichiers ouverts, etc.)
 Un même programme lancé deux fois génère deux processus différents. Un
processus peut créer d’autres processus, on les appelle ses « fils ».
 Un processus est identifié en mémoire par un numéro unique défini par le
système d’exploitation appelé le PID (Processus IDentifier).

Pr. Abdelhay HAQIQ ESI Programmation Système


3
Programme vs Processus

 Programme :
Code + données (passif)

 Processus :
Programme en cours d’exécution

Pr. Abdelhay HAQIQ ESI Programmation Système


4
Etats d'un processus

 Initialement, un processus est à l’état prêt. Il passe à l’état en cours d’exécution,


lorsque le processeur entame son exécution.
 Un processus passe de l’état en cours d’exécution à l’état prêt, lorsqu’il est
suspendu provisoirement afin de permettre l’exécution d’un autre processus.
 Un processus passe de l’état en cours d’exécution à l’état bloqué, lorsqu’il est
attendu d’un événement de l’E/S. Lorsque l’événement survient, il passe à l’état
prêt.
 En plus des trois états principaux, le processus peut se trouver dans l’un des états
suivants :
 Stopped: N’utilise pas le CPU, mais il consomme la RAM.
 Zombie: processus qui a été achevé, mais il consomme des ressources.

Pr. Abdelhay HAQIQ ESI Programmation Système


5
Etats d'un processus

Pr. Abdelhay HAQIQ ESI Programmation Système


6
Processus

 Processus père et processus fils: le processus fils est un processus qui a été créé
par un autre processus qui prend le nom de processus père.
 Il est possible de distinguer deux types de processus: les processus système et les
processus utilisateurs:
 Les processus système (daemons: ils ne sont sous le contrôle d’aucun terminal
et ont propriétaire l’administrateur du système. Ils assurent des tâches d’ordre
général et ne sont d’habitude stoppés qu’à l’arrêt du système d’exploitation.
 Exemple: init (le processus numéro 1)
 Les processus utilisateurs: ils correspondant à chaque exécution d’un
programme par l’utilisateur.

Pr. Abdelhay HAQIQ ESI Programmation Système


7
Création d’un processus

 Les processus des utilisateurs sont lancés par un


interprète de commande (shell). Ils peuvent eux
même lancer ensuite d’autres processus
 Ces processus doivent ensuite pouvoir
communiquer entre eux
 Le processus créateur = le père
 Les processus crées = les fils
 Les processus peuvent se structurer sous la forme
d’une arborescence

Pr. Abdelhay HAQIQ ESI Programmation Système


8
Arbre des processus d'un système Unix

$ pstree

Pr. Abdelhay HAQIQ ESI Programmation Système


9
Destruction d’un processus

 3 possibilités pour l’arrêt d’un processus


 Normal : par lui même en ayant terminé ses opérations
 Autorisé : par son père qui exécute une commande appropriée
 Anormal : par le système
 temps d’exécution dépassé
 mémoire demandée non disponible
 instruction invalide
 etc.
 Le processus créateur est le seul à pouvoir exécuter l’arrêt de ses fils
 Dans plusieurs systèmes, la destruction d’un processus père entraîne la destruction de tous
ses fils

Pr. Abdelhay HAQIQ ESI Programmation Système


10
Mise en œuvre

 Pour mettre en œuvre le modèle des processus, le système d’exploitation construit une
table, appelé table des processus, dont chaque entrée correspond à un processus
particulier
 Chaque entrée comporte des informations sur:
 l’état du processus
 son compteur ordinal : contient l’adresse de la prochaine instruction à extraire de la
mémoire
 son pointeur de pile : contient l’adresse courante du sommet de pile en mémoire
 son allocation mémoire
 l’état de ses fichiers ouverts
 tous ce qui peut être sauvegardé lorsqu’un processus passe de l’état élu à l’état prêt

Pr. Abdelhay HAQIQ ESI Programmation Système


11
Structure d’un processus

L’environnement d’un processus comprend :


 un numéro d’identification unique appelé PID(Process IDentifier)
 le numéro d’identification de l’utilisateur qui a lancé ce processus, appelé UID(User
IDentifier), et le numéro du groupe auquel appartient cet utilisateur, appelé GID(Group
IDentifier)
 le répertoire courant
 les fichiers ouverts par ce processus
 le masque de création de fichier, appelé umask
 la taille maximale des fichiers que ce processus peut créer, appelé ulimit
 la priorité
 les temps d’exécution
 le terminal de contrôle, c’est à dire le terminal à partir duquel la commande a été lancée,
appelé TTY

Pr. Abdelhay HAQIQ ESI Programmation Système


12
Un exemple : schéma d’un processus Unix

 Ce processus a le numéro 36.


 Il a été lancé par l’utilisateur qui a 106 pour UID.
 Il est en train d’exécuter le programme ‘cmd1’.
 Il a consommé 0.3 seconde, avec une priorité de 19.
 Son masque de création est 027.
 Son terminal de contrôle est /dev/term/c4.
 Son répertoire courant est /usr/c1.
 Il a 4 fichiers ouverts : 0, 1, 2, et 3.

Pr. Abdelhay HAQIQ ESI Programmation Système


13
Structure d’un processus Unix

 Le PPID est le PID du processus père

 Le processus fils hérite de tout


l’environnement du processus père,
sauf bien sûr du PID, du PPID et des
temps d’exécution

 Le père du processus 36 est le


processus 27, et celui de 27 est le
processus 1

 Seul le fils 36 a ouvert le fichier


/tmp/toto

Pr. Abdelhay HAQIQ ESI Programmation


Système
14
Les processus : la commande ps

 La commande ps donne un ensemble de renseignements sur les processus en court


d’exécution
 Syntaxe : ps options
 Options :
 -a: affiche des renseignement sur tous les processus attachés à un terminal
 -l: donne, pour chaque processus, le nom de l’utilisateur (user), le pourcentage de cpu
(%cpu), la taille totale du processus dans la mémoire (size), la mémoire réservée (rss)
en Ko …
 -x: affiche également des informations sur les processus non liés au terminal
 -w: affiche sur 132 colonnes, utile pour voir le nom complet de la commande associée
à chaque processus

Pr. Abdelhay HAQIQ ESI Programmation Système


15
Les processus : la commande ps

$ ps man

Pr. Abdelhay HAQIQ ESI Programmation Système


16
Les processus : la commande ps

 PID : le numéro d’identification du processus


 TTY : le terminal depuis lequel le processus a été
lancé $ ps
 STAT : l’état du processus au moment du
lancement de la commande
 R : le processus est en cours d’exécution
 T : le processus est stoppé
 S : le processus dort depuis moins de 20
secondes
 Z : le processus en attente d’un message du
noyau (zombie)
 TIME : le temps d ’exécution de la commande
 CMD : le libellé de la commande lancée

Pr. Abdelhay HAQIQ ESI Programmation


Système
17
Arrêt d’un processus : kill

 La commande kill permet d’envoyer un signal au processus


 Syntaxes :
 kill -signal pid
 kill -l
 Options :
 -9: demande l’arrêt du processus désigné par son pid
 -l: affiche la liste des signaux disponibles
 $ kill -l
1) HUP 2) INT 3) QUIT …
7) EMT 8) FPE 9) KILL …
 $ kill -9 1635
Cette commande tue le processus dont le numéro PID est 1635

Pr. Abdelhay HAQIQ ESI Programmation Système


18
Les signaux

 Chaque processus peut recevoir des


signaux
 Chaque signal a une signification
particulière
 Pour envoyer un signal on utilise la
commande kill
 Exemple kill -9 2345

Pr. Abdelhay HAQIQ ESI Programmation


Système
19
Clonage de processus

 Appel système fork()


#include <unistd.h>
pid_t fork();
 duplique le processus courant
 retourne le pid du processus fils créé dans le processus père
 retourne 0 dans le processus fils
 retourne -1 en cas d’erreur

Pr. Abdelhay HAQIQ ESI Programmation Système


20
Récupérer des informations

 #include <unistd.h>
 getpid(); retourne le PID du processus appelant
 getppid(); retourne le PID du père de processus
 getgid(); retourne le GID réel du processus appelant.
 getpgid(); renvoie l'ID du groupe de processus auquel appartient le
processus indiqué par pid. Si pid vaut zéro, le PID du processus
appelant est utilisé.

Pr. Abdelhay HAQIQ ESI Programmation Système


21
exit()

 La primitive exit() est une fonction qui ne retourne aucune valeur, puisqu’elle
termine le processus qui l’appelle
#include <stdlib.h>
void exit(int status)
 L’argument status est un entier qui indique au shell (ou au père de façon
générale) qu’une erreur s’est produite. On laisse à zéro pour indiquer une fin
normale

Pr. Abdelhay HAQIQ ESI Programmation Système


22
sleep()

 La primitive sleep() bloque le processus durant le nombre de secondes


spécifié, sauf s’il reçoit entre temps un signal.
#include <unistd.h>
int sleep(int secondes)

Pr. Abdelhay HAQIQ ESI Programmation Système


23
Wait()

 La primitive wait() permet de récupérer les informations de terminaison et de


supprimer les processus zombie.
 Si l'appelant possède au moins un fils non zombie l'appel est bloquant
 Si l'appelant ne possède aucun fils (ni en exécution ni zombie) le retour
est immédiat et vaut –1
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int * status);
 Le retour est le PID du processus fils qui a été récupéré.

Pr. Abdelhay HAQIQ ESI Programmation Système


24
Clonage de processus : Fork()

Pr. Abdelhay HAQIQ ESI Programmation Système


#include <stdio.h> 25
#include <stdlib.h>
#include <unistd.h>

int main()
{
pid_t mon_pid;

mon_pid = fork();
printf("%d ", mon_pid);

if (mon_pid) Fork()
printf("Je suis le père\n");
else
printf("Je suis le fils\n");

return 0;
}

Pr. Abdelhay HAQIQ ESI


ESI Programmation Système
#include <stdio.h>
#include
#include
<stdlib.h>
<unistd.h>
26
#include <errno.h>

int main()
{
pid_t status;
printf("debut\n");
status = fork();
switch (status)
{
case -1:
perror("Creation processus");
exit(EXIT_FAILURE); Exemple
case 0:
printf("[%d] fils\n", getpid());
break;
default:
printf("[%d] pere\n", getpid());
}
printf("[%d] fin\n", getpid());
exit(EXIT_SUCCESS);
}

Pr. Abdelhay HAQIQ ESI


ESI Programmation Système
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> 27
#include <errno.h>

int main()
{
pid_t status;
printf("[%d] Je vais engendrer\n", getpid());
status = fork();
switch (status)
{
case -1:
perror("Creation processus");
exit(EXIT_FAILURE);
case 0:
Exemple
printf("[%d] Je viens de naitre\n", getpid());
printf("[%d] Mon pere est %d\n", getpid(), getppid());
break;
default:
printf("[%d] J’ai engendre\n", getpid());
printf("[%d] Mon fils est %d\n", getpid(), status);
}
printf("[%d] Je termine\n", getpid());
exit(EXIT_SUCCESS);
} ESI
Pr. Abdelhay HAQIQ ESI Programmation Système
28
switch(fork())
{
case -1: // Erreur
// Gestion de l'erreur
break;

case 0: // Fils
// Code du fils
/* Eventuellement "exit()" pour que le processus fils
se termine (impératif si le "fork()"
est dans une boucle)*/
Exemple
break;

default: // Père
// Code du père
}

Pr. Abdelhay HAQIQ ESI


ESI Programmation Système

Vous aimerez peut-être aussi