Vous êtes sur la page 1sur 16

08/02/2023

Systèmes d’exploitation2
1ère année Ingénieur en Génie Informatique

Chapitre1.
Les processus

Plan
1. Introduction
2. Appel Système
3. Notions de processus
4. Processus vs Thread
5. Création de processus

H.KRICHENE ZRIDA 2

1
08/02/2023

Interaction
1. Introduction utilisateur/système
❑ Un système d'exploitation SE est déjà défini comme un logiciel destiné à
faciliter l'utilisation d'un ordinateur, puis comme un programme dont la
fonction principale est de déclencher l'exécution d'autres programmes.
❑ Les bibliothèques des appels système sont des procédures mises à la
disposition des programmeurs. Par exemple, un programme C/C++ peut
utiliser des appels système d'Unix/Linux comme open(), write() et read()
pour effectuer des Entrées/Sorties de bas niveau.
❑ L'interpréteur de commandes constitue une interface
utilisateur/système qui est disponible dans tous les systèmes. Il est lancé
dès la connexion au système et invite l'utilisateur à introduire une
commande. Il récupère puis exécute la commande par combinaison
d'appels système et d'outils (compilateurs, éditeurs de lien, etc.)
❑ Nous allons le définir maintenant comme un programme qui permet à
un ordinateur de faire plusieurs choses à la fois => Multitâche
H.KRICHENE ZRIDA 3

1. Introduction Modes de fonctionnement

❑ En général, les processeurs ont deux modes de


fonctionnement :
– Le mode superviseur (noyau, privilégié ou maître) : pour le
système d'exploitation SE, où toutes les instructions sont
autorisées.
– Le mode utilisateur (esclave) : pour les programmes des
utilisateurs et les utilitaires, où certaines instructions ne sont
pas permises.
❑ Ces modes de fonctionnement assurent la protection du
SE contre les intrusions et les erreurs. Ce n'est pas le cas
avec des systèmes mono-utilisateur comme MS-DOS ou
MacOS qui ont un seul mode de fonctionnement: le mode
utilisateur. Ils ne sont pas protégés et donc peu fiables.
H.KRICHENE ZRIDA 4

2
08/02/2023

2. Appel Système Définition


❑ Un appel système ("SysCall") est une fonction ou primitive
fournie par le noyau d'un SE et utilisée par les programmes
s'exécutant dans l'espace utilisateur.
❑ Il consiste en une interruption logicielle (instruction TRAP)
qui a pour rôle d'activer le SE. Il a pour but de changer de
mode d'exécution pour passer du mode Utilisateur au mode
Noyau, de récupérer les paramètres et vérifier la validité de
l'appel, de lancer l'exécution de la fonction demandée, de
récupérer la (les) valeur(s) de retour et de retourner au
programme appelant avec retour au mode utilisateur.
❑ Les appels systèmes créent, détruisent et utilisent divers
objets logiciels gérés par le SE. Les processus et les fichiers
sont les plus importants de ces objets.
H.KRICHENE ZRIDA 5

2. Appel Système Exemples (1)

❑ Voici quelques appels système du système Unix conformes à la


norme POSIX. Ils manipulent divers objets gérés par le SE.

H.KRICHENE ZRIDA 6

3
08/02/2023

2. Appel Système Exemples (2)


❑ Exemple : l’appel système READ utilisé par UNIX possède trois
paramètres : le premier indique le fichier à lire, le second la mémoire
tampon où seront sauvegardés les données lues et le troisième le
nombre d’octets à lire.
❑ « read » est une fonction d’une bibliothèque appelée par un utilisateur
à partir d’un programme en C : nbre=read(fichier, tampon, nboctets).
❑ Alors que READ est un appel système effectué par read. L’appel de la
fonction read (introduisant l’appel système READ) provoque la recopie
des données de fichier dans la mémoire tampon où le programmeur
peut les récupérer. La fonction retourne le nombre d’octets réellement
lu dans la variable « nbre ». Cette valeur est normalement identique à
nboctets, mais si par exemple on rencontre un fin de fichier pendant la
lecture, ou si l’appel système ne se déroule pas correctement à cause
d’un paramètre incorrect ou d’une erreur disque, la valeur (-1) est
affectée à un « nbre » et un code d’erreur émis dans une variable
globale. H.KRICHENE ZRIDA 7

3. Notions de processus Définitions


❑ Un processus est un programme en cours d'exécution, ou
encore l’entité dynamique qui représente l’exécution d’un
programme sur un processeur. Il est composé d'un
programme exécutable (code), un compteur ordinal (co), un
ensemble de données, une pile d'exécution et autres registres
et informations nécessaires à l'exécution.
❑ Les appels systèmes permettent notamment la création et
l'arrêt des processus. Un processus peut créer un ou plusieurs
processus fils qui, à leur tour, peuvent créer des processus fils
dans une structure arborescente.
❑ Les processus peuvent se synchroniser et communiquer entre
eux. Actuellement, on utilise de plus en plus le concept de
processus légers qui sont un moyen de raffiner et de diviser le
travail normalement associé à un
H.KRICHENE ZRIDAprocessus. 8

4
08/02/2023

Contexte d’exécution d’un


3. Notions de processus processus
❑ Le contexte d’exécution d’un processus est l’ensemble des
ressources accessibles à ce processus pendant son exécution.
❑ On distingue entre deux types de contextes:
▪ Le contexte privé: propre au processus
▪ Le contexte global: partagé avec d’autres processus=> deux processus ne
peuvent interagir que si leurs contextes ont une partie commune.
❑ Les relations entre processus peuvent prendre deux formes:
▪ Compétition: pour l’utilisation d’une ressource partagée. L’exemple le
plus courant est de l’allocation de processeur. Une politique
d’allocation attribut le processeur par tranches de temps successives
aux processus qui en ont besoin
▪ Coopération: pour l’exécution coordonnée d’une tâches commune.
Un exemple simple est celui de la transmission de messages entre
deux processus à travers une zone mémoire partagée.
H.KRICHENE ZRIDA 9

Mode de fonctionnement
3. Notions de processus d’un processus

❑ Lorsqu'on lance une application, le processus qui


est créé par le système d'exploitation exécute les
instructions du programme en mode utilisateur.
❑ À certains moments, on fait des appels système
qui requièrent l'exécution d'instructions (et l'accès à
des données) qui appartiennent au système
d'exploitation.
❑ Pour ce faire, le même processus passe alors au
mode superviseur. Il est à noter qu'il s'agit bien du
même processus, même s'il exécute des instructions
du système d'exploitation. On peut considérer que
des routines du système d'exploitation sont
exécutées au nom du processus en question.

H.KRICHENE ZRIDA 10

5
08/02/2023

3. Notions de processus Processus d’UNIX (1)

Tout processus sous Linux a un espace d'adressage


constitué de trois segments : le texte, les données et la pile:
Pile (Stack)
❖ Le segment de texte contient les instructions en langage
machine (le code). Ce segment est inaccessible en écriture.
Il peut être partagé entre plusieurs processus. Il est de taille
fixe.
❖ Le segment de données contient l'espace de stockage
User Data
des variables du programme. (BSS)

❖ Le segment de pile sert à l'allocation des variables Data


locales, à la sauvegarde des adresses de retour des sous- System Data
programmes, à la sauvegarde des registres, etc. Il contient
aussi au départ, les variables d'environnement (shell) et la
ligne de commande envoyée pour demander l'exécution du Code (Text)

programme. Un programme peut connaître tous ses


paramètres. H.KRICHENE ZRIDA 11

3. Notions de processus Processus d’UNIX (2)


❑ N.B. le segment de données est composé de deux parties :
▪ Le segment de données système appartient à Unix et inaccessible en mode
utilisateur. En mode kernel, les appels système y trouvent des informations du
type descripteurs de fichiers ouverts, zone de sauvegarde des registres,
informations de comptabilité. Il ne contient pas de buffers d'entrée sortie.
▪ Le segment de données utilisateur contient les données non initialisées
explicitement et celles initialisées (BSS). La taille de cet espace peut augmenter
ou diminuer durant l'exécution du processus.
❑ Chaque processus possède un numéro qui lui est propre, le pid
(ProcessIDentifier). C'est un numéro unique que l'on appelle
l'identifiant de processus. Bien qu'il s'agit d'un chiffre entier de 32 bits,
seulement sont utilisés des pid entre 0 et 32767, par raisons de
compatibilité.
❑ Si le nombre de processus dépasse 32767, le noyau doit alors
recycler des pid. Il existe un appel système qui retourne le pid du
processus en cours d'exécution : int getpid()
H.KRICHENE ZRIDA 12

6
08/02/2023

3. Notions de processus Etat d’un processus


❑ Lorsqu'un processus s'exécute. Il peut se trouver alors dans l'un des
états suivants :
✓ Élu : en cours d'exécution.
✓ Prêt : en attente du processeur.
✓ Bloqué : en attente d'un événement.
✓ Nouveau et Fin indiquent respectivement la création d'un processus dans le
système et son terminaison.
Nouveau Fin

E
Elu

n
at
(exécution)

te
nt
A

e
dm

d'
on

E
is

/S
si

cti

on

on
on

pti

s
éle

ai
rru

in
Inte

rm
Te
Prét Bloqué
Fin d
'E/S

H.KRICHENE
Les principaux ZRIDA
états d'un processus 13

Quand est ce que un


3. Notions de processus processus est dit bloqué?
❑ Si la prochaine instruction à exécuter se trouve dans une
page non chargée en mémoire centrale.
❑ Si pour un travail réalisé par coopération de processus, un
processus est dans l’attente d’un signal d’un autre
processus. Par exemple, un processus P fait un calcul et
range le résultat dans le tampon, le processus Q est chargé
d’imprimer le contenu du tampon : le processus Q ne peut
s’exécuter que lorsque P remplit le tampon.
❑ Si chaque processus Pi est bloqué en attente d'une
ressource détenue par un processus Pj différent.

H.KRICHENE ZRIDA 14

7
08/02/2023

Implémentation de
3. Notions de processus processus
❑ Pour gérer les processus, le SE sauvegarde plusieurs informations
dans des structures de données.
❑ Il existe une table pour contenir les informations concernant tous les
processus créés. Il y a une entrée par processus dans la table, appelée
le Bloc de Contrôle de Processus (PCB).
❑ Chaque PCB comporte des informations sur :
▪ Le PID du processus.
▪ L'état du processus.
▪ Son compteur ordinal (adresse de la prochaine instruction devant
être exécutée par ce processus).
▪ Son allocation mémoire.
▪ Les fichiers ouverts.
▪ Les valeurs contenues dans les registres du processeur,…
H.KRICHENE ZRIDA 15

3. Notions de processus Changement de contexte


❑ L’existence des PCB dans un système multitâche se justifie de fait qu’on a
souvent besoin de redonner le contrôle du CPU à un autre processus => Il faut
donc mémoriser toutes les informations nécessaires pour pouvoir éventuellement
relancer le processus courant dans le même état.

N.B. Le passage au mode kernel par un appel système n'implique pas nécessairement
un changement de contexte. On reste dans le même processus, sauf qu'on a accès à
des données et des instructions qui sont interdites en mode utilisateur.
H.KRICHENE ZRIDA 16

8
08/02/2023

Création et terminaison de
3. Notions de processus processus (1)
❑ Le SE fournit un ensemble d'appels système qui permettent la
création, la destruction, la communication et la synchronisation des
processus. Les processus sont créés et détruits dynamiquement.
❑ Un processus peut créer un ou plusieurs processus fils qui, à leur
tour, peuvent créer des processus fils sous une forme de structure
arborescente. Le processus créateur est appelé processus père.
❑ Dans certains systèmes, comme MS-DOS, lorsqu'un processus
crée un fils, l'exécution du processus père est suspendue jusqu'à la
terminaison du processus fils. C'est ce qu'on appelle l'exécution
séquentielle. Par contre dans les systèmes du type Unix, le père
continue à s'exécuter en concurrence avec ses fils. C'est ce qu'on
appelle exécution asynchrone.

H.KRICHENE ZRIDA 17

Création et terminaison de
3. Notions de processus processus (2)
❑ Le processus père peut :
▪ contrôler l'usage des ressources partagées et peut avoir une certaine
autorité sur ses processus fils.
▪ suspendre ou détruire ses processus fils.
▪ se mettre en attente de la fin de l'exécution de ses fils.
❑ L'espace d'adressage du processus fils est obtenu par duplication
de celui du père. Il peut exécuter le même programme que son père
ou charger un autre programme.
❑ Un processus se termine par une demande d'arrêt volontaire
(appel système: exit()) ou par un arrêt forcé provoqué par un autre
processus (appel système: kill()).
❑ Lorsqu'un processus se termine, toutes les ressources systèmes
qui lui ont été allouées sont libérées par le système d'exploitation.
H.KRICHENE ZRIDA 18

9
08/02/2023

4. Processus vs Thread Exemple

❑ Cas d’un serveur WEB : l’objectif est de


répondre aux requêtes de clients distants
❑ A chaque requête, un nouveau processus est
créé.
❑ Cela implique que des copies du même code
sont donc placées en mémoire, il y a donc
perte d’efficacité dans la gestion des
ressources.
➔Il est donc nécessaire d’utiliser un nouveau
modèle pour définir une entité d’exécution : le
thread
H.KRICHENE ZRIDA 19

Pkoi un modèle de programmation


4. Processus vs Thread avec des threads??

❑ Le partage des ressources est important : pas de


duplication de l’espace d’adressage pour des
copies multiples d’une même activité (tel que le
serveur WEB)
❑ Gestion plus simple : car moins de ressources
associées et donc à gérer
❑ Dans un logiciel de traitement de texte, on utilise
des threads pour les activités différentes
(enregistrement, vérification orthographe,
formatage à l’écran,…)

H.KRICHENE ZRIDA 20

10
08/02/2023

4. Processus vs Thread Définitions (1)


❑ Le multithread a été introduit dans les systèmes afin de permettre la
mise en œuvre du parallélisme à l'intérieur des processus lourds.
La multiprogrammation, à l'aide de processus légers ou threads,
fournit un parallélisme plus fin et permet de détailler l'exécution
d'un processus lourd.

H.KRICHENE ZRIDA 21

4. Processus vs Thread Définitions (2)


❑ Un processus = activité utilisant certaines ressources.
❑ Conservons le principe de mise en commun des ressources, mais
divisons l’activité en entités d’exécution: des threads.
▪ Un thread correspond donc un programme.
▪ A un thread correspond des ressources définies dans un processus.
▪ Plusieurs threads peuvent correspondre la même section de code en
mémoire principale.
▪ Au thread est associé moins d’informations, parce qu’à un thread
correspond un processus.

H.KRICHENE ZRIDA 22

11
08/02/2023

5. Création de processus Création avec fork()


❑ Dans le cas d'Unix, l'appel système fork() est la seule véritable façon qui
permet de créer des processus fils. #include <unistd.h>
int fork();
❑ fork() est le seul moyen de créer des processus fils, par duplication d'un
processus existant. L'appel système fork() crée une copie exacte du
processus original. Mais maintenant il se pose un problème, car les deux
processus père et fils exécutent le même code.

▪ Processus père et son fils cloné.


▪ i=27 après l'appel fork() pour le
père et i=0 pour le fils.
▪ L'image mémoire est la même
pour tous les deux, notamment
le compteur ordinal co.

H.KRICHENE ZRIDA 23

Comment distinguer le processus


5. Création de processus père du processus fils??
Pour résoudre ce problème, on regarde la valeur de retour de fork(),
qui peut être :
▪ 0 pour le processus fils.
▪ Strictement positive pour le processus père et qui correspond au pid du
processus fils
▪ Négative si la création de processus a échoué, s'il n'y a pas
suffisamment d'espace mémoire ou si bien le nombre maximal de
créations autorisées est atteint.

Après l'appel système fork():


✓ la valeur de retour reçoit la
valeur 0 dans le processus fils,
✓ mais elle est égale à
l'identifiant du processus fils
dans le processus père.
H.KRICHENE ZRIDA 24

12
08/02/2023

5. Création de processus Identifiant d’un processus??

❑ Tous les processus sauf le processus d'identifiant 0, sont créés par


un appel à fork.
❑ Tout processus a un seul processus père.
❑ Tout processus peut avoir zéro ou plusieurs processus fils.
❑ Chaque processus est identifié par un numéro unique, son PID.
❑ Le processus de PID=0 est créé «manuellement» au démarrage de
la machine, ce processus a toujours un rôle système, de plus pour
le bon fonctionnement des programmes utilisant fork() il faut que
le PID zéro reste toujours utilisé.
❑ Le processus zéro crée, grâce à un appel de fork, le processus init
de PID=1.
❑ Le processus de PID=1 de nom init est l'ancêtre de tous les autres
processus (le processus 0 ne réalisant plus de fork()), c'est lui qui
accueille tous les processus orphelins de père (ceci afin de collecter
les informations à la mort de chaque processus).
H.KRICHENE ZRIDA 25

5. Création de processus Exemple1

H.KRICHENE ZRIDA 26

13
08/02/2023

5. Création de processus Exemple1


Plusieurs résultats d'exécution sont possibles :
1. Je suis le pere avec pid 1901
Je suis le fils avec pid 1902
le père a précédé le fils dans l'exécution puis le fils s'est exécuté
(cette exécution est la plus répandue).
2. Sur un système lent, on peut avoir l'exécution suivante :
Je suis le pere avec pid 1901
user@ubuntu:~$ Je suis le fils avec pid 1902
La console a réaffiché l’invite (user@ubuntu:~$) avant l’affichage du
second message. Ceci s’explique par le fait que le processus père,
qui a été lancé à partir de la console, s’est terminé avant le
processus fils, et a donc redonné le contrôle à la console avant que
le fils ne puisse afficher son message.
H.KRICHENE ZRIDA 27

5. Création de processus Exemple2

H.KRICHENE ZRIDA 28

14
08/02/2023

5. Création de processus Exemple2


user@ubuntu:~$ gcc -o test2 test2.c
Si on enlève les boucles finales, on aura :
user@ubuntu:~$ ./test2
Processus 2136 avec pere 2135
Processus 2137 avec pere 2136
Processus 2138 avec pere 2137
Processus 2139 avec pere 2138
Le problème ici est que dans tous les cas le processus père se termine
avant le processus fils. Comme tout processus doit avoir un parent, le
processus orphelin est donc «adopté» par le processus 1 (le processus
init). user@ubuntu:~$ gcc -o test2 test2.c
user@ubuntu:~$ ./test2
Ainsi, on peut remarquer qu’au Processus 2159 avec pere 2158
moment où les processus Processus 2160 avec pere 1
affichent le numéro de leur user@ubuntu:~$ Processus 2161 avec pere 2160
père, ils ont déjà été adoptés Processus 2162 avec pere 1
par le processus init. ^C
user@ubuntu:~$
H.KRICHENE ZRIDA 29

Terminaison et
5. Création de processus Synchronisation

❑ Un processus père peut se mettre en attente


de la mort d’un de ses fils par le biais des
primitives wait() et waitpid().
❑ Lorsque le processus père prend
connaissance de la mort d’un de ses fils (il est
devenu « zombie »), il cumule le temps
d’exécution avec ceux des fils précédemment
décédés puis détruit le bloc de contrôle du fils.

H.KRICHENE ZRIDA 30

15
08/02/2023

Terminaison et
5. Création de processus Synchronisation

H.KRICHENE ZRIDA 31

16

Vous aimerez peut-être aussi