Espace d’adressage
Code (instructions du programme)
Pile
Compteur ordinal
Registres
Variables
…
Un programme peut être exécuté par plusieurs processus.
la norme UNIX :
norme UNIX :
Appel système description
de la norme UNIX :
Ordonnancement garanti
Ordonnancement équitable
…
Catégories de priorités
Le système définit plusieurs catégories de priorités
Regrouper les processus par catégorie
Les processus de la même catégorie ont le même niveau de
priorité.
L’ordonnancement adopté entre ces processus est celui de
type Tourniquet.
Les processus de la catégorie de priorité supérieure sont
toujours prioritaires par rapport aux autres processus des
autres catégories.
Moyenne arithmétique
Moyenne pondérée
Favoriser les plus récentes
Processus A
B est
T1 T2 bloqué T3 T4
temps
Le sommeil et l’activation
Les sémaphores
…
Si le verrou est déjà à 1, ce qui signifie qu’un autre processus se trouve dans la
peuvent se produire
Un processus qui a testé le verrou et le trouve à 0, perd le processeur avant
Processus 1 Processus 2
Enter_region :
TSL REGISTER, LOCK |copie lock dans le registre et
|la positionne à 1
CMP REGISTER, #0
JNE enter_region
RET
leave_region :
MOVE LOCK, #0
RET
LST Info, FSTF 2018-2019 78
InstructionTSL (Test and Set Lock: Tester et
définir le verrou)
Moniteurs
➔ L’échange de message
send(destination, &message)
Envoie un message vers une destination (porte d’un processus)
receive(source, &message)
Reçoit un message d’une source donnée.
En l’absence du message, le récepteur peut se bloquer jusqu’à
ce que celui-ci arrive.
Attendre le dernier
B B B
barrière
barrière
barrière
C C C
D D D
temps
Les processus A, B, C et D doivent tous atteindre la
barrière avant que le groupe puisse poursuivre la suite
de l’exécution
Un compteur ordinal,
Un ensemble de registres,
une mémoire ( données, code et pile ).
getty daemons
login
shell
Création d’un processus :
fork() :
– l’entrée standard,
– la sortie standard,
– la sortie d’erreurs standard.
A chacun des trois canaux est affecté un nom de
fichier et un numéro :
Processus
Shell
Processus
ls
fils
Code du processus 1
Processus Instruction 1
père ...
commande
...
Fichiers Fichiers
ouverts ouverts
Processus 0 Processus 0
père 1 fils 1
2 2
endormi
père
fork Sleep
bash
- Le temps pendant lequel le processus
fils est en état zombi, il n’a plus son
code ni ses données en mémoire;
Seules les informations utiles pour le
père sont conservées.
#include<stdio.h>
#include<unistd.h>
main()
{
int r;
printf(" Avant la création du nouveau processus \n");
r=fork();
if (r==0) {
printf(" Je suis le fils mon PID est %d et mon PPID est %d\n",getpid(),getppid());
sleep(3);
printf(" Fin du processus fils, je suis maintenant à l‘état zombie en attendant la fin du père \n");
}
else {
printf(" Je suis le père mon PID est %d et mon PPID est %d\n",getpid(),getppid());
sleep(50);
printf(" Fin du processus père\n");
}
}
En parallèle
L’ordonnanceur de bas niveau utilise plusieurs files, une priorité est associée à
chaque file (plusieurs niveaux de priorité).
Les processus prêts qui sont en mémoire, sont répartis dans les files selon leur
priorité.
Les priorités des processus s’exécutant en mode utilisateur sont positives ou nulles,
alors que celles des processus s’exécutant en mode noyau sont négatives.
Priorité
minimale
LST Info, FSTF 2018-2019 149
L’ordonnanceur cherche une file non vide en
commençant par la file de plus grande priorité (-20)
La CPU est attribuée pour un quantum au premier processus
de cette file.
Après, le processus s’il n’a pas terminé, il est replacé à la fin
de file.
Les processus de la même classe de priorité subissent un
ordonnancement de type tourniquet.
Si un processus débloqué ou un nouveau processus rejoint
une file de priorité supérieure à celle de la file du processus
en cours d’exécution, alors, l’ordonnanceur passera à la file
de priorité supérieure.
Si la file courante se vide (terminaison ou blocage du dernier
processus) l’ordonnanceur passera à la première file non vide
en-dessous.