Chapitre II : La gestion des processus - ESEN

Post on 23-Jun-2022

16 views 1 download

Transcript of Chapitre II : La gestion des processus - ESEN

Systèmes d’Exploitation I

Chapitre II :

La gestion des processusAmine DHRAIEF

1ère année Licence LFIGESEN, Université De La Manouba

Définitionsource#1 : Dictionnaire Larousse

● Processus nom masculin , latin processus, de procedere, progresser– Enchaînement ordonné de faits ou de phénomènes,

répondant à un certain schéma et aboutissant à quelque chose : Le processus d'une crise.

– Suite continue d'opérations, d'actions constituant la manière de faire, de fabriquer quelque chose : Les processus de fabrication doivent être revus.

Définitionsource#2 : ISO 9000

● Processus : ensemble d'activités corrélées ou interactives qui transforme des éléments d'entrée en éléments de sortie.

Définitionsource#3 : Dictionnaire de l'informatique de Pierre

Yves Morvan

● Processus : – Suite d'actions élémentaires dont le résultat est

équivalent à l'action principale dont elles sont la décomposition.

– La notion de processus permet de décrire le comportement d'un système d'exploitation

Définitionsource#4 :

Définitionsource#5 : wikipedia

● Un processus est un programme en cours d'exécution par un ordinateur. De façon plus précise, il peut être défini comme :– Un ensemble d'instructions à exécuter, pouvant être

dans la mémoire morte, mais le plus souvent chargé depuis la mémoire de masse vers la mémoire vive ;

– un espace d'adressage en mémoire vive pour stocker la pile, les données de travail, etc. ;

– des ressources telles que les ports réseau.

Chaîne de production d’un programme exécutable

La chaîne de production est l'ensemble des opérations de fabrication nécessaires, à la réalisation d'un produit manufacturé, des matières premières jusqu'à la mise

sur le marché

Chaîne de production d’un programme exécutable

Chaîne de production

Programme écrit dans un langage de haut niveau

Programme dit exécutable, écrit en langage machine

Chaîne de production d’un programme exécutable

(1) Éditeur de texte

(2) Compilateur :$gcc -c monprog.c

(3) Éditeur de lien$gcc monprog.o -o monprog

(4) Chargeur

Source : monprog.c

objet: monprog.o

Bibliothèque

Ficher exécutable sur le disque : monprog

monprog : Exécutable en mémoireprocessus

Chaîne de production d’un programme exécutable

● (1) Le programme est saisie à l'aide de l'éditeur de texte → création un fichier sur le disque que l'on appelle le fichier source (monprog.c).

● (2) le fichier source (monprog.c) est ensuite compilé à l'aide d'un compilateur (gcc) dépendant du langage de programmation utilisé . – Le compilateur vérifie que la syntaxe du langage est respectée – Le compilateur génère ensuite l'équivalent du programme source en langage machine – On obtient le fichier objet (monprog.o)

● (3) le fichier objet est ensuite soumis à l'éditeur de liens (ld invoqué via gcc -o) dont le rôle est de résoudre les références externes, c'est-à-dire par exemple, d'associer les appels système inclus dans le programme à leur adresse dans le système. – L'éditeur de liens produit sur disque le fichier exécutable (monprog)

● (4) Lorsque l'utilisateur demande l'exécution de son programme, le fichier

exécutable est alors monté en mémoire centrale : c'est l'étape de chargement. Le système alloue de la place mémoire pour placer le code et les données du programme.

05/02/18 OS I 11

Du monotâche vers le multitâche● Les premiers OS autorisaient un seul programme à

être exécuter à la fois. – Un tel programme avait un contrôle complet du système et

un accès à toutes les ressources du système

● Les OS actuels permettent à plusieurs programmes d'être charger en mémoire et exécuter en même temps.– Cette évolution a nécessité un contrôle plus strict et un

cloisonnement plus rigoureux des différents programmes.

05/02/18 OS I 12

Du monotâche vers le multitâche● Ces besoins ont conduit à la création de la notion de

processus, qui est « un programme en exécution ». – Un processus est l'unité fondamental dans le cadre d’un OS moderne

temps partagé.

● Un système se compose d'un ensemble de processus: – les processus du OS exécutent le code du OS– et des processus utilisateurs exécutent le code de l'utilisateur.

● Tous ces processus s'exécutent en même temps.

→ En commutant le processeur entre les processus, le système d‘exploitation peut rendre l'ordinateur plus productif.

05/02/18 OS I 13

Définition d’un processus● Un processus est souvent définit comme étant un programme en

exécution. – Un processus est plus que le code du programme (text section)

● Un processus inclus une représentation de l'activité en cours du programme :– Le contenu des registres du processeur tel qur le program counter (PC) (un

registre qui contient l’adresse mémoire de l’instruction en cours/prochaine selon les architectures des CPUs)

– une pile d’exécution qui contient des données provisoires (tels que la fonction, les paramètres, des adresses de retour, et les variables locales),

– une section de données (data section), qui contient les variables globales. – un tas (heap) qui est un mémoire allouée dynamiquement lors de l'exécution

processus.

05/02/18 OS I 14

Définition d’un processus

● Un processus est un programme en cours d'exécution auquel est associé : (i) un environnement processeur (les registres, compteurs,...)) et (ii) un environnement mémoire appelés contexte du processus.

● Un processus est l'instance dynamique d'un programme et incarne le fil d'exécution de celui-ci dans un espace d'adressage protégé

05/02/18 OS I 15

Définition d’un processus

(1) Programme en coursd’exécution

(2) Environnement CPU

(3) Environnement Mémoire

PROCESSUS

05/02/18 OS I 16

Programme vs. Processus● Le programme n'est pas en soi un processus !

– un programme est une entité passive, comme un fichier contenant une liste d'instructions

– alors qu'un processus est une entité active avec un ensemble de ressources associées.

→ Un programme devient un processus lorsqu'un fichier exécutable est chargé en mémoire.

● Même si deux processus peuvent être associés à un même programme, ils sont néanmoins considérés comme deux séquences d'exécution séparées. – Chacune d'elles est un processus distinct, et bien que les sections de

texte sont équivalentes, les data section, la pile, le tas sont différents.

05/02/18 OS I 17

Les états d’un processus● Lors de son exécution,

un processus est caractérisé par un état

● Lorsque le processus obtient le processeur et s'exécute, il est dans l'état élu. – L'état élu est l'état

d'exécution du processus.

ÉLUPRÊT

BLOQUÉ

Élection

BlocageDéblocage

MortNaissance

En attente du processeur

En exécution

En attente des

ressources

05/02/18 OS I 18

Les états d’un processus● lors de cette exécution, le

processus peut demander à accéder à une ressource qui n'est pas immédiatement disponible – le processus ne peut pas

poursuivre son exécution tant qu'il n'a pas obtenu la ressource

● le processus quitte alors le processeur et passe dans l'état bloqué.– L'état bloqué est l'état d'attente

d'une ressource autre que le processeur.

ÉLUPRÊT

BLOQUÉ

Élection

BlocageDéblocage

MortNaissance

En attente du processeur

En exécution

En attente des

ressources

05/02/18 OS I 19

Les états d’un processus● Lorsque le processus a enfin

obtenu la ressource qu'il attendait, celui-ci peut potentiellement reprendre son exécution.

● Or, lorsque le processus est passé dans l'état bloqué, le processeur a été alloué à un autre processus. – Le processeur n'est donc pas

forcément libre.

● Le processus passe alors dans l'état Prêt.– L'état Prêt est l'état d'attente du

processeur.

ÉLUPRÊT

BLOQUÉ

Élection

BlocageDéblocage

MortNaissance

En attente du processeur

En exécution

En attente des

ressources

05/02/18 OS I 20

Process Control Block (PCB)● Chaque processus est

représenté dans le système d'exploitation par un bloc de contrôle de processus (Process Control Block - PCB) appelé aussi un task-control block

● Le système d’exploitation maintient dans une table appelée «table des processus»– les informations sur tous les

processus créés (une entrée par processus : PCB).

05/02/18 OS I 21

Process Control Block (PCB)● Le bloc de contrôle d'un processus (PCB) contient les

informations suivantes :– un identificateur unique du processus (un ‘entier’) : le PID (process identifier)– l'état courant du processus (élu, prêt, bloqué)– le contexte processeur du processus : la valeur du CO, la valeur des autres

registres du processeur– le contexte mémoire : ce sont des informations mémoire qui permettent de

trouver le code et les données du processus en mémoire centrale– des informations diverses de comptabilisation pour les statistiques sur les

performances système– des informations liées à l' ordonnancement du processus. Le PCB permet

la sauvegarde et la restauration du contexte mémoire et du contexte processeur lors des opérations de commutations de contexte .

05/02/18 OS I 22

Process Control Block (PCB)

05/02/18 OS I 23

Commutation de contextes de processus

05/02/18 OS I 24

La mémoire associée à un processusAllocation de la mémoire

● Au cours de son exécution, un processus alloue de la mémoire. Il existe trois types d’allocations :

1)allocation statique

2)allocation sur la pile (« stack allocation »)

3)allocation sur le tas (« heap allocation »)

05/02/18 OS I 25

La mémoire associée à un processusAllocation de la mémoire

● Rappel : variable statique

– Les variables statiques sont allouées au début de l'exécution du programme, et ne sont libérées qu'à la fin de l'exécution du programme.

– Permet de donner une variable locale une durée de vie égale à celle du processus

05/02/18 OS I 26

La mémoire associée à un processusAllocation de la mémoire

● Exemple

05/02/18 OS I 27

La mémoire associée à un processusAllocation de la mémoire

● Allocation statique :– Exemple : static int exemple=1 ; – Espace mémoire nécessaire précisé dans le code avant

l’exécution– Espace réservé au moment de la compilation dans le

fichier binaire résultant– Espace accessible lors du chargement du binaire avant

l’exécution

→ Pas d’allocation lors de l’exécution

05/02/18 OS I 28

La mémoire associée à un processusAllocation de la mémoire

● Allocation statique :– La mémoire allouée statiquement placée dans le segment de données ou

le segment bss

– Segment de données: ● variables globales ● variables statiques initialisées

– Segment BSS : ● zone de données non initialisées ● les variables globales et statiques qui sont initialisées à zéro ou non initialisées

05/02/18 OS I 29

La mémoire associée à un processusAllocation de la mémoire

● Allocation dynamique de mémoire du processus

– Se fait pendant l’exécution du programme

– Espace non prévue dans le binaire du programme

– Demande d’allocation se fait durant l’exécution

● Deux segments de processus concernés :

– Segment de pile

– Segment de tas

05/02/18 OS I 30

La mémoire associée à un processusAllocation de la mémoire

● Allocation sur la pile (stack allocation)

– Programme : routines (fonctions/procédures) + variables locales (lexicales)

– Variables locales (lexicales) : sa portée est définie par le texte du programme

● Mémoire allouée à l’entrée de la routine

● Mémoire libérée au retour de la routine

● → Le segment de pile est utilisé pour ces allocations/dés-allocations

05/02/18 OS I 31

La mémoire associée à un processusAllocation de la mémoire

● Allocation sur le tas (heap allocation)– Selon l’exécution, un programme peut allouer de la

mémoire (malloc) et la libérer par la suite– l’allocation se fait alors dans le segment de tas.– Un tas : est une structure de données de type

arbre qui permet de retrouver rapidement un élément.

05/02/18 OS I 32

Exemple : Anatomie d’un processus sous Linux

05/02/18 OS I 33

Exemple : Anatomie d’un processus sous Linux

05/02/18 OS I 34

Exemple : Anatomie d’un processus sous Linux

05/02/18 OS I 35

Processus Sous UNIX

05/02/18 OS I 36

Contexte : la division cellulaire

05/02/18 OS I 37

Contexte : UNIX est multitâche

● La qualité du fonctionnement multitâche d’Unix représente l’un des points les plus attractifs de ce système d’exploitation.

● On peut faire exécuter simultanément plusieurs programmes sans qu’aucun d’eux ne ressente la présence des autres, ou à l’inverse en leur permettant de dialoguer entre eux.

05/02/18 OS I 38

Appel systéme fork()

● Le parallélisme Unix bas niveau est fourni par le noyau qui duplique un processus lorsqu’on invoque l’appel-système fork() .

● Les deux processus sont alors strictement identiques, et seule la valeur de retour de fork() permet de les distinguer.

05/02/18 OS I 39

Comment faire un processus ?● Un nouveau processus est créé par fork() du système appelant.

● Le nouveau processus comprend une copie de l'espace d'adressage du processus original.– Ce mécanisme permet au processus parent de communiquer facilement avec

son processus enfant.

● Les deux processus (le parent et l'enfant) poursuivre l'exécution à l'instruction après le fork(), avec une différence: – le code retour du fork() est égal à zéro pour le nouveau (enfant)

processus,– alors que le PID (non nulle) de l'enfant est retourné au processus père.

05/02/18 OS I 40

Comment faire un processus ?● L'appel-système fork() est déclaré dans <unistd.h> : pid_t fork(void);

● DEUX valeurs de retour en cas de succès:– Dans le processus père : valeur de retour = le PID du fils,– Dans le processus fils : valeur de retour = zéro.

● Sinon– erreur : valeur de retour = -1.

● Afin d'obtenir le numéro du processus, il suffit de faire l'appel système getpid(), ou getppid() pour obtenir le numéro du père.– PID (Process IDentifier) – PPID : numéro du processus père (Parent Process Identifier)

05/02/18 OS I 41

Naissance d’un processusexemple

05/02/18 OS I 42

Naissance d’un processusprincipe du copy-on-write

● Le copy-on-write ou copie sur écriture est une stratégie d'optimisation utilisée en programmation informatique.

● L'idée fondamentale : si de multiples appelants demandent des ressources initialement impossibles à distinguer, vous pouvez leur donner des pointeurs vers la même ressource.

● Ceci est maintenue jusqu'à ce qu'un appelant modifie sa « copie » de la ressource. – À ce moment-là, une copie privée est créée. – Cela évite que le changement soit visible ailleurs. – Ceci se produit de manière transparente pour les appelants. – L'avantage principal est que si un appelant ne fait jamais de modifications, la copie

privée n'est jamais créée

05/02/18 OS I 43

Naissance d’un processuscopy-on-write et fork()

● Lorsqu'un processus crée une copie de lui-même, les pages de la mémoire qui doivent être modifiées soit par le processus soit par sa copie sont marquées copy-on-write.

● Lorsque le processus modifie une page mémoire, le noyau du système d'exploitation intercepte l'opération et copie la page mémoire pour que les changements de la mémoire d'un processus n'affectent pas celle d'un autre.

05/02/18 OS I 44

Naissance d’un processus -exemple 2

05/02/18 OS I 45

Naissance d’un processus -exemple 2

05/02/18 OS I 46

Mort naturelle et Zombie● Un processus peut se terminer normalement ou

anormalement.

● Dans le premier cas, l'application est abandonnée à la demande de l'utilisateur, ou la tâche à accomplir est finie.

● Dans le second cas, un dysfonctionnement est découvert, qui est si sérieux qu'il ne permet pas au programme de continuer son travail

05/02/18 OS I 47

Mort naturelle d’un processus● Un programme peut se finir de plusieurs manières. La plus simple est de

revenir de la fonction main( ) en renvoyant un compte rendu d'exécution sous forme de valeur entière.

● Cette valeur est lue par le processus père, qui peut en tirer les conséquences adéquates. – Par convention, un programme qui réussit à effectuer son travail renvoie une valeur

nulle, tandis que les cas d'échec sont indiqués par des codes de retour non nuls (et qui peuvent être documentés avec l'application).

● Il est possible d'employer les constantes symboliques EXIT_SUCCESS ou EXIT_FAILURE définies dans <stdlib.h>. – Ceci a l'avantage d'adapter automatiquement le comportement du programme, même

sur les systèmes non-Posix, où ces constantes ne sont pas nécessairement 0 et 1.

05/02/18 OS I 48

Orphelin et Zombie● Processus orphelins

– si un processus père meurt avant son fils ce dernier devient orphelin.

● Processus zombie– Si un fils se termine tout en disposant toujours d'un PID

celui-ci devient un processus zombie– Le cas le plus fréquent : le processus s’est terminé mais

son père n’a pas (encore) lu son code de retour.

05/02/18 OS I 49

Orphelin et Zombie● Un processus fils peut devenir orphelin si son

père termine avant lui, auquel cas le noyau s'arrange pour le « faire adopter » par un processus système (INIT), le processus fils peut donc lui transmettre son statut de terminaison.

● Un processus est dit zombie s’il s'est achevé, mais qui dispose toujours d'un identifiant de processus (PID) et reste donc encore visible dans la table des processus. On parle aussi de processus défunt.

05/02/18 OS I 50

Orphelin et Zombie● Au moment de la terminaison d'un processus, le système désalloue

les ressources que possède encore celui-ci mais ne détruit pas son bloc de contrôle.

● Le système passe ensuite l'état du processus à la valeur TASK_ZOMBIE (représenté généralement par un Z dans la colonne « statut » lors du listage des processus par la commande ps).

● Le signal SIGCHLD est alors envoyé au processus père du processus qui s'est terminé, afin de l'informer de ce changement. – Dès que le processus père a obtenu le code de fin du processus achevé au

moyen des appels systèmes wait ou waitpid, le processus terminé est définitivement supprimé de la table des processus.

05/02/18 OS I 51

Orphelin et Zombie● Il est primordial dans les scripts de pouvoir déterminer si une commande a

réussi à effectuer son travail correctement ou non.

● On imagine donc l'importance qui peut être portée à la lecture du code de retour d'un processus. Cette importance est telle qu'un processus qui se termine passe automatiquement par un état spécial, zombie, en attendant que le processus père ait lu son code de retour.

● Si le processus père ne lit pas le code de retour de son fils, celui-ci peut rester indéfiniment à l'état zombie.

● Voici un exemple, dans lequel le processus fils attend deux secondes avant de se terminer. Tandis que le processus père affiche régulièrement l'état de son fils en invoquant la commande ps.

05/02/18 OS I 52

Exemple Zombie

05/02/18 OS I 53

Exemple Zombie

05/02/18 OS I 54

Applications

05/02/2018 55

Exercice #1

1)Répondre par OUI ou NON en justifiant vos réponses.1) Un processus est une enttt proouite après compilaton

2) Un processus est une enttt proouite après chargement o’un binaire en mtmoire

3) Le pseuoo-paralltlisme impose aux processus oe se connaître mutuellement

05/02/2018 56

Correction Exercice #1● 1. Un processus est une entité produite après

compilation– Non, car un processus est une image d’un programme en exécuton

● 2. Un processus est une entté produite après chargement d’un binaire en mémoire– Oui, car une fois termint le chargement o’un programme en mtmoire un processus

est crtt

● 3. Le pseudo-parallélisme impose aux processus de se connaître mutuellement– Non, car en pseuoo-paralltlisme les processus peroent la main au proft ou système

o’exploitaton qui allouera le CPU pour un processus tligible

05/02/18 57

Exercice #2

● Préciser le nombre de processus créer par les programmes ci-dessous :Code1 Code 2 Code 3

int main() {fork();fork();fork();}

int main() {if (fork() > 0)fork();

}

int main() {int cpt=0;while (cpt < 3) {if (fork() > 0)cpt++;

elsecpt=3;

}

05/02/18 58

Correction Exercice #2code 1

● 8 processus sont crées :– L'exécution du programme crée un

processus P1. – A la lecture de la première instruction

fork() , P1 se duplique et crée alors P2. Les deux processus continuent l'exécution à partir de la ligne incluse ;

– A la lecture de la seconde instruction fork(), P1 se duplique et crée P3 tandis que P2 crée P4.

– Les quatre processus continuent l’exécution a partir de la ligne incluse ;

– A la lecture de la troisième instruction fork(), P1 se duplique et crée P5, P2 crée P6, P3 crée P7 et P4 crée P8

P1

P2 P3

P4

P5

P6

P8

P7

05/02/18 59

Correction Exercice #2code 2

● 3 processus sont crées: – L'exécution du programme crée un

processus P1.– A la lecture de la première instruction fork(),

P1 se duplique et crée alors P2. P1 est le processus parent, P2 le processus enfant.

– Les deux processus continuent l'exécution a partir de la ligne incluse ; Le résultat de l'appel précédent est supérieur à 0 pour P1. Ce dernier rentre donc dans la suite d'instructions conditionnée et exécute l'instruction fork().

– P1 se duplique et crée donc P3. – En revanche, le résultat de l'appel précédent

est égale a 0 pour P2, qui ne rentre donc pas dans la suite d'instructions conditionnée.

P1

P2 P3

05/02/18 60

Correction Exercice #2code 3

● 4 processus sont crées :– L'exécution du programme crée un processus P1, qui initialise

la variable cpt a 0.– P1 rentre dans la boucle while() et se duplique lors de

l'exécution de fork(). Il crée alors P2.– Le résultat de l'appel précédent est supérieur à 0 pour P1. Ce

dernier rentre donc dans la suite d'instructions conditionné par "if" et incrémente son compteur cpt qui passe a 1.

– En revanche, le résultat de l'appel précédent est égale a 0 pour P2, qui rentre donc dans la suite d'instructions conditionnée par else et affecte cpt à 3. Des lors P2 sort de la boucle et n’exécutera plus d'instruction.

– Seul P1 ré-exécute la séquence d'instruction de la boucle while(), et le même schéma ce reproduit : a chaque entrée dans la boucle, P1 se duplique, tandis que le processus dupliqué n'exécute aucune instruction.

– P1 aura ainsi exécuté 3 fois l'instruction fork() jusqu'a ce que sa variable cpt atteigne 3.

– Il aura donc engendréé P2, P3 et P4

P1

P2 P3 P4

05/02/18 61

Exercice #3● Soit le code ci-dessous :

05/02/18 62

Exercice #3

● 1- Lancer le programme ci-dessous avec les arguments 10 20. Que constatez-vous ? Donnez une explication.

● 2- Lancer le programme ci-dessous avec les arguments 10 0. Que constatez-vous ? Donnez une explication.

05/02/18 63

Correction Exercice #3

● 1- Le père meurt avant son fils, le fils devient orphelin

● 2- Le fils meurt avant son père, le père est en sommeil, il ne lit pas le code de retour de son fils. Le fils devient zombie.