Académique Documents
Professionnel Documents
Culture Documents
Le processus : vue utilisateur Les processus : principes dimpl ementation Le bloc de contr ole Le contexte dun processus Appels syst` emes POSIX Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Luigi Santocanale
Laboratoire dInformatique Fondamentale, Centre de Math ematiques et Informatique, 39, rue Joliot-Curie - F-13453 Marseille
3 octobre 2005
Luigi Santocanale
Le processus
Luigi Santocanale
Le processus
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
3188:emacs
2802:bash ?
son contexte.
?? ?? ??
3290:ps
Luigi Santocanale
Le processus
Luigi Santocanale
Le processus
(Revuz 1998)
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Luigi Santocanale
Le processus
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
La zone u
Structure user, voir sys/user.h : pointeur sur lentr ee dans la table des processus RUSER, EUSER, RGROUP, EGROUP consommation CPU masque des signaux terminal de contr ole errno . et / table des descripteurs ouverts masque cr eation . . .
[lsantoca@localhost lecture3]$ ps -eo > rgroup,egroup,s,ni | grep ps cupsd 2053 1 root cups-polld 193.5 2244 2053 lp cups-polld 193.5 2245 2053 lp cups-polld 192.1 2246 2053 lp kdeinit: dcopser 3254 1 lsantoca man ps 3664 3317 lsantoca ps -eo cmd,pid,p 3697 3329 lsantoca
cmd,pid,ppid,ruser,euser,\ root lp lp lp lsantoca lsantoca lsantoca root sys sys sys lsantoca lsantoca lsantoca root sys sys sys lsantoca lsantoca lsantoca S S S S S S R 0 0 0 0 0 0 0
Luigi Santocanale
Le processus
Luigi Santocanale
Le processus
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Il sav` ere ` a la r eception/acquittement dune interruption. Trois types dinterruptions : externe : horloge, disque, console, p eriph erique., d eroutement : erreur du processeur, division par z ero, page fault, appel syst` eme.
etat du processus, variables globales statiques dynamiques, entr ee dans la table du processus, zone u, piles user et system, zones de codes et de donn ees.
Luigi Santocanale Le processus 11
Luigi Santocanale
Le processus
12
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Luigi Santocanale
Le processus
15
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
D etails
Dans un appel ` a la primitive fork :
3890:commande ? TT
` LEXCEPTION de : A
la r egion texte peut etre partag e entre les deux processus, le PID et le PPID sont mis ` a jour.
Luigi Santocanale
Le processus
16
Luigi Santocanale
Le processus
17
Algorithme fork
(Bach 1989)
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
fork
#include <unistd.h> pid t fork(void ); Retourne : -1, si erreur, 0, au ls, pid du ls, retourn e au p` ere. Sommaire : Clonation du processus
Luigi Santocanale
Le processus
19
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Programme : exfork.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 : : : : : : : : : : : : : : : : : : : : : : : #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main(void) { pid_t pid; switch (pid = fork()) { case -1: perror("fork"); return -1; case 0: printf("Je suis le fils et mon pid est %d.\n", getpid()); return 0; default: printf("Je suis le p` ere, " "mon pid est %d, jai un fils avec pid %d.\n", getpid(), pid); return 0; } }
Luigi Santocanale Le processus 20
Programme : exfork2.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 : : : : : : : : : : : : : : : : : : : : #include #include #include #include <stdio.h> <stdlib.h> <unistd.h> <sys/types.h>
int main(void) { pid_t pid; if ((pid = fork()) == -1) { perror("fork"); exit(EXIT_FAILURE); } if (pid == 0) code_du_fils(); else code_du_pere(); }
Luigi Santocanale Le processus 21
/* Erreur */
/* Si fils */ /* Si p` ere */
Algorithme exit
(Bach 1989)
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
24
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Programme : exexit.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 : : : : : : : : : : : : : : : : : : #include <stdlib.h> #include <stdio.h> #include <unistd.h> void terminer(void) { printf("\nAppel a ` la fonction terminer "); } int main(int argc, char *argv[]) { atexit(terminer); printf("\nUtilisation de \"%s\" pour sortir :", argv[1]); printf("\nContenu du tampon a ` vider "); SORTIE; }
Luigi Santocanale Le processus 25
Session : exit
[lsantoca@localhost lecture4]$ for i in "exit(0)" \ > "abort()" "_exit(0)";\ > do gcc -Wall -pedantic -DSORTIE=$i exexit.c;\ > a.out $i; done Utilisation de "exit(0)" pour sortir : Contenu du tampon a ` vider Appel a ` la fonction terminer Utilisation de "abort()" pour sortir : Contenu du tampon a ` vider Aborted Utilisation de "_exit(0)" pour sortir :
Luigi Santocanale
Le processus
26
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Algorithme wait
(Bach 1989)
44 44 44 44 p` ere 44 44 44 44 44 44 44
gf 1
...
gf n
Luigi Santocanale
Le processus
28
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
wait, waitpid
#include <sys/types.h> #include <sys/wait.h.h> pid t wait(int * ptr ); ptr : un adresse ` a remplir avec le code renvoy e par le ls. Retourne : pid du ls, o` u -1 si echec. pid t waitpid(pid t pid , int * ptr , int opts ); pid : > 0 : un processus 0 : tous les processus du groupe -1 : tous les ls <-1 : tous les processus dans le groupe |pid| ptr : adresse ` a remplir opts : |de : WNOHANG : sans etre bloqu e WUNTRACED : si le processus est stopp e Retourne : pid du processus pris en compte, -1 erreur, 0 echec avec option WNOHANG
Luigi Santocanale Le processus 30
WIFSIGNALED(code): vrai si le processus sest termin e` a cause dun signal (par exemple, un CTRL-C)
WTERMSIG(code), le signal qui a provoqu e la terminaison.
WIFSTOPPED(code) : vrai si le processus est arr et e` a cause dun signal (primitive waitpid avec option WUNTRACED)
WSTOPSIG(code), le signal qui a provoqu e l arr et.
Luigi Santocanale Le processus 31
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Programme : exwait.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 : : : : : : : : : : : : : : : : : : : : : : : : : : #include #include #include #include #include <wait.h> <stdio.h> <unistd.h> <stdlib.h> <time.h>
Programme : exwait.c
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
Le processus 32
void fils(void); void pere(pid_t pid); int main(void) { pid_t pid; srand(time(NULL)); switch (pid = fork()) { case -1: exit(EXIT_FAILURE); case 0: fils(); default: pere(pid); } exit(EXIT_SUCCESS); }
/* Erreur */
: : : : : : : : : : : : : : : : : : : : : : : :
void fils(void) { int signum = rand() % (NSIG - 1) + 1; printf("Signal choisi : %d.\n", signum); kill(getpid(), signum); exit(signum); } void pere(pid_t pid1) { int codesortie; pid_t pid2 = waitpid(pid1, &codesortie, WUNTRACED); if (WIFSIGNALED(codesortie)) printf("Le fils %d sest termin e a ` cause du signal %d.\n", pid2, WTERMSIG(codesortie)); if (WIFEXITED(codesortie)) printf("Le fils %d sest termin e normalement" " avec code sortie %d.\n", pid2, WEXITSTATUS(codesortie)); if (WIFSTOPPED(codesortie)) printf("Le fils %d est stopp e" " avec code %d.\n", pid2, WSTOPSIG(codesortie)); exit(EXIT_SUCCESS); }
Luigi Santocanale Le processus 33
Luigi Santocanale
(Revuz 1998)
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Luigi Santocanale
Le processus
36
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus
IDs utilisateur
#include <unistd.h> uid t getuid(void ); Remarques : propri etaire r eel : utilisateur qui ex ecute le chier ex ecutable. uid t geteuid(void ); Retourne : Le uid, toujours succ` es. Remarques : propri etaire eectif : utilisateur qui poss` ede lex ecutable.
IDs groupe
#include <unistd.h> uid t getgid(void ); uid t getegid(void ); int setgid(uid t uit );
Le processus : vue utilisateur Les processus : principes dimpl ementation Appels syst` emes POSIX
Cr eation dun processus : la primitive fork Terminaison dun processus : exit Terminaison et synchronisation : wait Acc` es aux donn ees du bloc de contr ole du processus