CH 2 INF2610 Hiv 19
CH 2 INF2610 Hiv 19
CH 2 INF2610 Hiv 19
INF2610
Chapitre 2 : Processus
Hiver 2019
Chapitre 2 - Processus
● Processus UNIX-Linux
– Création de processus
– Remplacement d’espace d’adressage
– Attente de la fin d’un processus fils
– Terminaison de processus
– Partage de fichiers entre processus
Tannenbaum
exécution
Charger état du PCB B
Tannenbaum
Accès (direct/indirect) à
partir d’un processeur,
via un registre, au PCB de
la tâche en cours
d’exécution.
!
http://flint.cs.yale.edu/cs422/doc/ELF_Format.pdf
Le fichier exécutable permet au noyau de
construire un processus (table des pages de son
espace d’adressage, adresse de la première
Génie informatique et génie logiciel
Noyau d'un système d'exploitation
instruction
Ecole à de
Polytechnique exécuter,
Montréal etc.). Chapitre 2 - 7 !
Qu’est ce qu’un processus ? (6)
Espace d’adressage virtuel
cat /proc/’’pid’’/maps
man 5 proc
Tannenbaum
Tannenbaum
Élection
Admission Terminaison
Nouveau Prêt Exécution Fin
Suspension
Bloqué
fork
Création
Préemption
Retour Mémoire
Mémoire
à usager insuffisante
suffisante
Exécution
suspension
Mode Hors mémoire
user Retour Prêt en Prêt hors
Élection mémoire mémoire
En mémoire
Interruption ou
Appel système Exécution
Mode
noyau Mise en attente
d’un evt
Arrivée de l’evt Arrivée de l’evt
terminaison
…
http://www.informit.com/articles/article.aspx?p=368650
États : R à Task_Running,
S (sleeping) à Task_Interruptible,
D à Task_Uninterruptible,
T (being traced or stopped) à Task_Stopped,
Z à Task_Zombie.
Génie informatique et génie logiciel
Noyau d'un système d'exploitation Chapitre 2 - 11
Ecole Polytechnique de Montréal
États d’un processus (4) : Windows
Exécutable
Veille
Changement
Élection de contexte
Préemption
Prêt Exécution
Non-exécutable
• MBR charge une partie du système d’exploitation puis lance son exécution.
Cette partie détermine les caractéristiques du matériel, effectue un certain
nombre d’initialisations et crée le processus 0.
a du fils
jupiter% gcc -o tfork tfork.c
jupiter% ./tfork
ici processus père, le PID 12339.
ici processus fils, le PID 12340.
Fin du Process 12340 avec a = 30. a du père
Fin du Process 12339 avec a = 120.
• Son PCB et son PID sont conservés jusqu’à ce que son processus
père ait récupéré cet état de terminaison. Il est alors détruit.
● Le système UNIX/Linux offre une famille d’appels système exec qui permettent
à un processus de remplacer son code exécutable par un autre spécifié par path
ou file :
#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg, …, /* (char *) NULL */);
int execlp(const char *file, const char *arg, …, /* (char *) NULL */);
int execle(const char *path, const char *arg, …, /*, (char *) NULL, char * const envp[]*/);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);
jupiter%./printfwrite
ici 1er write ici 2eme write ici 1er printf de 11243 ici 2eme printf de 11243 end of line printf de
11243
ici 3eme write
ici 2eme write ici 1er printf de 11243 ici 2eme printf de 11243 end of line printf de 11244
ici 3eme write Génie informatique et génie logiciel
Noyau d'un système d'exploitation
jupiter% Chapitre 2 - 39
Ecole Polytechnique de Montréal
Exemple 7’ : printf avant fork (2)
argv ß com
1 // programme test_exec.c
2 #include <unistd.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <errno.h>
7 int main ()
8 { char* arg[] = {"ps", "-f", NULL};
9 printf("Bonjour\n");
10 execvp("ps", arg);
11 printf("Echec de execvp\n");
12 printf("Erreur %s\n",strerror(errno));
13 return 0;
14 }