Introduction aux Systèmes d'Exploitation
Introduction aux Systèmes d'Exploitation
Systèmes d’Exploitation
Plan
1. Définition
2. Les différents types de système d’exploitation.
3. Rôles du système d’exploitation
4. Historique
5. Structure des systèmes d’exploitation
2
Système d’exploitation
Déftnition
Un système d’exploitation (SE) en anglais (operating system) est un
ensemble de programmes responsables de la liaison entre les ressources
matérielles d’un ordinateur et les applications informatiques de l’utilisateur
Multi processeurs
Système avec plusieurs processeurs en parallèle.
vrai multitâches ( Exécution de plusieurs processus en même temps).
Puissance de calcul plus importante.
Disponibilité du système (en cas de panne d'un processeur)
Systèmes temps réel
prévus pour traiter des informations de manière fiable dans un temps donnés :
• Applications industrielles,
• Robotique,
• Transports, …
Systèmes embarqués
prévus pour fonctionner sur :
• des machines de petite taille ( , téléphone, …)
• des appareils électroniques autonomes (sondes spatiales, robot,
ordinateur de bord de véhicule, …)
Autonomie réduite = gestion avancée de l'énergie
Rôles du système d’exploitation
La gestion du processeur: le système d’exploitation est chargé de gérer l’allocation du
processeur entre les différents programmes grâce à un algorithme d’ordonnancement .
Gestion de la mémoire : le système d’exploitation est chargé de gérer l’espace mémoire
alloué à chaque application.
Gestion des entrées/sorties: le système d’exploitation permet de contrôler l’accès des
programmes aux ressources matérielle par l’intermédiaire des pilotes.
Gestion des fichiers : le système d’exploitation gère la lecture et l’écriture dan le système
de fichier et des droits d’accès aux fichiers par les utilisateurs et les applications.
Historique
8
Historique: La première génération (1945-1955).
9
Historique: La quatrième génération (après les années 1980)
• Ordinateurs personnels
• Circuits intégrés à haute densité (Puces
contenant des milliers de transistors sur
1mm2 de silicium).
• Micro-ordinateurs, très peu onéreux comparés
aux mini-ordinateurs de type PDP-11
• Systèmes d’Exploitation CP/M, MS-DOS, MAC
OS X, Windows, UNIX, Linux…
10
Structure des systèmes d’exploitation
12
Les machines virtuelles
13
Les systèmes en couches:
14
L’architecture client/serveur
• La plupart des fonctionnalités d'un SE sont reportées dans des processus utilisateurs.
• Pour demander un service comme la lecture d'un bloc de fichier, le processus client
envoie une requête à un processus serveur qui effectue le travail et envoie une
réponse.
15
Chapitre1:La gestion des processus
SYSTÈMES D’EXPLOITATION
AVANCÉES
16
Plan
1. Définition
a. Processus
2. Le modèle des processus
a. L’arborescence
b. Le PCB
c. Les états d’un processus
d. Commutation de contexte
3. Ordonnancement des processus
17
Définition : processus
18
Définition : processus
19
Programme vs processus
Programme
Base de comparaison Processus
La nature
statique Dynamique
Durée de vie
Plus long Limité
20
Image mémoire d’un processus
4. Tas (Heap) :
zone de la mémoire allouée dynamiquement.
21
Bloc de contrôle de processus
Chaque processus est représenté dans le système d’exploitation par une structure de
données contenant toute les informations décrivant le contexte d’un processus appelé
bloc de contrôle (Process Control Bloc: PCB).
23 8
Arborescence des processus
init
Login:
Mot de passe:
Login:
Mot de passe:
… Login:
Mot de passe:
shell
ls
24 9
Arborescence des processus unix
25
états d’un processus
Élu (Running) : les instructions sont Prêt Élu
encours d’exécution.
Bloqué
Bloqué (Sleep) : le processus bloqué
en attente d’événement: signal, E/S,
… Graphe des états d’un processus
26
Transitions
1. Création du processus
2. Allocation du processeur Nouveau Terminé
3. Fin du temps alloué sur le
processeur, l’exécution du Prêt Élu
processus n’est pas terminée
4. Opération E/S
Bloqué
5. Fin opération E/S
6. Exécution terminée Graphe des états d’un
processus
27
Commutation de contexte
Sur un système P0 P1
multiprogrammé, le SE doit
redonner le contrôle du Élu
Inactif
processeur d’un processus à
un autre en effectuant des Sauvegarde PCB0
28
Commutation de contexte
• Suspendre le processus P0
• Mettre à jour le PCB de P0
• Restaurer le PCB de P1
P0 P1
• Reconfigurer l'espace mémoire
Élu
Inactif
• Démarrer P1
Sauvegarde PCB0
Recharge PCB1
Inactif Élu
Sauvegarde PCB1
Recharge PCB0
Inactif
Élu
29
table de processus :
30
Ordonnancement
A qui allouer?
P3 P2 P1 CPU
31
Ordonnancement des processus
• RR: Round-Robin
32
Les entités responsables de l’ordonnancement
Preemption
Scheduler
(Ordonnanceur)
CPU1
File des
Processeurs
Election de
Sortie du Dispatcher Process prêts
système CPU2 (répartiteur)
Election de
PCB PCB PCB PCB
processus
CPU4
File des
bloques
Blocage PCB PCB Réveil
• Utilisation du CPU
• Débit (Throughput): le nombre moyen de processus traités par unité de temps.
• Temps d’attente
• Temps de réponse
Critères d’optimisation: max/min
• Les critères d’ordonnancement peuvent être ramenés à des
problèmes d’optimisation. Chaque critère devra être maximisé
ou minimisé.
• Utilisation du CPU
même temps??
Peuvent-ils tous être optimisés en
– Maximiser
• Débit (Throughput)
– Maximiser
• Temps de rotation (Turnaround time)
– Minimiser
• Temps d’attente
– Minimiser
• Temps de réponse
– Minimiser
35
Avec/Sans réquisition
• Ordonnancement sans réquisition (non préemptif):
– Une fois que le CPU a été allouée à un processus, ce dernier le
garde jusqu'à ce qu’il le libère, soit parce qu’il a terminé, soit
parce qu’il commute à l’état en attente.
– Algorithmes simples et faciles à mettre en œuvre mais pas
adaptés pour le temps partagé et seulement pour les système
de traitement par lots.
• Ordonnancement avec réquisition (préemptif):
– Un processus peut être suspendu à n’importe quel instant,
sans avoir été prévenu, pour laisser la place à un autre
processus.
– Implémentation plus couteuse à cause de la commutation de
processus, utilisée dans les systèmes à temps partagé et
systèmes temps-réels.
– Nécessité d’un mécanisme de synchronisation.
36
1 Cas : FCFS (Premier arrivé, premier servi )
l'unité centrale est allouée selon l'ordre de soumission des processus.
On suppose que les processus arrivent en meme temps à l’instant 0 et admis dans
l’ordre : P1 , P3 , P2 , P4
On considère l’ensemble des processus
suivants :
P1 P3 P2 P4
0 3 8 17 24
Temps d’attente moyen = (0 + 8 + 3 + 17) / 4 = 7 37
2èmeCas : FCFS (Premier arrivé, premier servi )
On considère l’ensemble de processus suivant :
P1 P3 P2 P4
0 20 24 36 45
T=0 T=2 T=3 T=4 T=7 T=8 T=12 T=1 T= T=1 T=1 T=1 T=2 T=2 T=3
3 14 5 6 9 3 9 0
A B B B C C C D D A B B C D A
c c D D D A A B C C D A
A A B B C D D A
39
3èmeCas : FCFS (Premier arrivé, premier servi )
40
3èmeCas : FCFS (Premier arrivé, premier servi )
41
3èmeCas : FCFS (Premier arrivé, premier
servi )
• Response time:
rtA = 0 – 0 = 0
rtB = 4 – 2 = 2
rtC = 12 – 3 = 9
rtD = 14 – 7 = 7
rtAVG = (0 + 2 + 9 + 7) / 4 = 4.5
42
Inconvénients FIFO
43
SJF (Travail le plus court d’abord ) non-Préemptif
Le plus court d’abord: On exécute le processus le plus court d’abord.
On considère l’ensemble de processus suivant :
Temps Temps Temps d’attente : début d’exécution– temps d’arrivée
Processus
d’éxécution d’arrivée P1 = 30 – 10 = 20
P2 12 0 P2 = 0 – 0 = 0
P3 8 3 P3 = 22 – 3 = 19
P4 4 5 P4 = 12 – 5 = 7
P5 = 16 – 12 = 4
P1 10 10
P5 6 12
Le diagramme de Gantt avec SJF est :
P2 P4 P5 P3 P1
0 12 16 22 30 40
s d‘exécution d’arrivée P1 = 30 – 10 = 20
P2 = (0 – 0) + (21 - 3) = 18
P2 12 9 0
P3 = (3 – 3) + (9 - 5) = 4
P3 8 65 3
P4 = (5 – 5) = 0
P4 4 5 P5 = 15 – 12 = 3
P1 10 10
P5 6 12
P2 P3 P4 P3 P5 P2 P1
0 3 5 9 15 21 30 40
A A 2 A1 B8 B8 B7 B7 B7 B7 B7 B7 B7 B7 B3 A4 A3 B8
B 8 B8 C2 D1 A4 A3 A3 A3 A2 A2 A4 B8
C2 C2 D1 D1
46
SRTF (temps restant le plus court d'abord)
p p p
• Processor utilization(occupation de
processus) = (35 / 35) * 100 = 100 %
• Throughput(débit) = 4 / 35 = 0.11
47
SRTF (temps restant le plus court d'abord)
p p p
48
SRTF (temps restant le plus court d'abord)
p p p
• Waiting time:
wtA = (0 – 0) + (8 – 8) + (12 - 9) + (14 – 13) + (23 - 20) = 7
wtB = (6 – 2) + (16 – 7) + (27-24) = 16
wtC = (4 – 3) + (9 – 9) = 1
wtD = (7 – 7) + (11 – 10) + (13 – 13) = 1
wtAVG = (7 + 16 + 1 + 1) / 4 = 6.25
49
SRTF (temps restant le plus court d'abord)
p p p
• Response time:
rtA = 0 – 0 =0
rtB = 6 – 2 =4
rtC = 4 – 3 =1
rtD = 7 – 7 =0
rtAVG = (0 + 4 + 1 + 0) / 4 = 1.25
50
Algorithme du Tourniquet (Round Robin)
• Algorithme conçu spécialement pour le temps
partagé
• Les processus accèdent au processeur, chacun à
leur tour, pour un temps maximal déterminé à
l’avance (le quantum noté q= en général 10-100
millisecondes),
• Lorsqu’il a épuisé ce temps, ou qu’il se bloque : le
processus suivant est élu et le remplace.
• Le processus suspendu est mis en queue du
tourniquet (file FIFO circulaire).
51
Algorithme du Tourniquet (Round Robin)
Le tourniquet (round-robin): On exécute les processus à tour de rôle.
On considère l’ensemble des processus suivant avec un Quantum de temps = 5 UT
Processus Temps
d‘exécution Temps d’attente :
P1 12 7 2 P1 = 0 + (24 - 5) + (37 - 29) = 27
P2 = 5 + (29 - 10) = 24
P2 8 3
P3 = 10
P3 4
P4 = 14 + (32 - 19) = 27
P4 10 5 P5 = 19
P5 5
P1 P2 P3 P4 P5 P1 P2 P4 P1
0 5 10 14 19 24 29 32 37 39
Temps d’attente moyen = (27 + 24 + 10 + 27 + 19) / 5 = 107 / 5 = 21.4
52
Algorithme du Tourniquet (Round Robin)
Process Arrival 1st exec 1st I/O 2nd exec 2nd I/O 3rd exec
time
A 0 4 4 4 4 4
B 2 8 1 8 - -
C 3 2 1 2 - -
D 7 1 1 1 1 1
T= T=2 T=3 T=6 T=8 T=9 T=1 T=1 T=1 T=1 T=1 T=2 T=2 T=2 T=2 T=2
0 2 3 5 7 8 0 1 2 4 5
A B B C A B D C B A D D B A A D
C A B D C B A D B B A D D B
A B D C B A D A B
53
Algorithme du Tourniquet (Round Robin)
I/O 2 I/O
completed requested
WAITING
54
Algorithme du Tourniquet (Round Robin)
p p p p p p p
55
Algorithme du Tourniquet (Round Robin)
p p p p p p p
56
Algorithme du Tourniquet (Round Robin)
p p p p p p p
• Waiting time:
wtA = (0 – 0)+(8 – 3)+(17 – 13)+(24 – 20)+(29 – 29)+(34 – 32)=15
wtB = (3 – 2)+(9 – 6)+ (15 -12)+(21 – 18)+(26 – 24)+(32 – 29) =15
wtC = (6 – 3) + (13 – 9) = 7
wtD = (12 – 7) + (20 – 14) + (25 – 22) = 14
57
Algorithme du Tourniquet (Round Robin)
p p p p p p p
• Response time:
rtA = 0 – 0 = 0
rtB = 3 – 2 = 1
rtC = 6 – 3 = 3
rtD = 12 – 7 = 5
rtAVG = (0 + 1 + 3 + 5) / 4 = 2.25
58
Ordonnancement avec priorité
• Le système d’exploitation ordonne les processus prêts selon l’ordre décroissant de
leurs priorités et le processus à élire est celui avec la plus haute priorité
• Tous les processus ont la même priorité c'est la politique FIFO qui est appliquée.
• Ordonnancement
– non-préemptif ou préemptif
59 43
Ordonancement avec priorité non-préemptif
Priorité: On exécute les processus selon leur priorité.
On considère l’ensemble de processus suivant :
Temps Temps Temps d’attente :
Processus Priorité
d’exécution d’arrivée début d’exécution– temps d’arrivée
P1 10 3 Tous les P1 = 6
P2 1 1 Processus
Arrivent
P2 = 0
P3 2 4 au meme P3 = 16
P4 1 5 temps
P4 = 18
P5 5 2
P5 = 1
Le diagramme de Gantt avec un ordonnancement avec priorité est comme suit :
P2 P5 P1 P3 P4
0 1 6 16 18 19
Le diagramme de Gantt avec un ordonnancement avec priorité préemptif est comme suit :
P1 P2 P1 P5 P1 P3 P4
0 1 2 4 9 16 18 19
62
Chapitre 2
Communication Interprocessus
Les processus
Différence entre programme et processus
Image
Image
•La mémoire d’un programme est divisée en les parties suivantes :
- Segment de données (données + BSS + tas binaire (heap en
anglais)) ;
- Pile d'exécution, souvent abrégée en la pile (stack en anglais) ;
- Segment de code.
Le segment de données contient les variables globales et statiques
utilisées par le programme et qui sont initialisées.
Le segment BSS aussi connu comme zone de données non initialisées commence
à la fin du segment de données et contient toutes les variables globales et toutes
les variables statiques qui sont initialisées à zéro ou n’ont pas d’initialisation
explicite dans le code source. Par exemple, une variable déclarée static int i; sera
« contenue » dans le segment BSS. le segment bss se résume alors aux variables
locales de la fonction main().
tas : allocation dynamique (malloc, calloc, realloc)
Processus en mémoire
Processus en mémoire
Les processus
Propriétaire d’un processus
Etats d’un processus
Création de processus
Création de processus
Clonage
Création de processus
• Un signal pendant est un signal qui a été envoyé un processus mais qui n'a pas encore été
pris en compte
• En informatique, la réentrance est la propriété pour une fonction d'être
utilisable simultanément par plusieurs tâches utilisatrices. La réentrance permet d'éviter la
duplication en mémoire vive d'un programme utilisé simultanément par plusieurs
utilisateurs.
Création de processus Déroulement de
l’exécution
Création de processus
Arborescence
Création de processus
Différence fils-pére
Indéterminisme du déroulement
Terminaison de processus
● Un processus se termine par une demande d’arrêt volontaire (exit) ou par un
arrêt forcé provoqué par un autre processus (appel système kill) ou une erreur.
void exit(int vstatus);
• Lorsqu’un processus fils se termine :
– son état de terminaison est enregistré dans son PCB,
Partie 2
Les entrées-sorties
Descripteurs
Descripteurs
Les tubes anonymes
Les tubes anonymes
Les tubes anonymes
Les tubes anonymes
Les tubes anonymes
Les tubes anonymes
Les tubes anonymes
Les tubes anonymes
Exemple 1
#include <stdio.h>
$ ./tube_exo1
#include <unistd.h>
$ bonjour bien reçu
int tube[2];
$
char buf[20];
main() {
pipe(tube);
if (fork()==0) { /* fils */
close(tube[0]);
write(tube[1], "bonjour", 8);
}
else { /* pere */
wait(NULL);
close(tube[1]);
read(tube[0], buf, 8);
printf("%s bien reçu\n", buf);
}
}
Exemple 2
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define R 0
#define W 1
int main()
{
int pid;
int fd[2];
char message[100];
int Nboctects;
char* phrase="VOICI MON MESSAGE POUR TOI PERE";
system("clear");
Exemple 2
printf("_____________________________________________\n");
printf("\t\tProcessus Courant:: %d\n",(int)getpid());
printf("_____________________________________________\n");
if (pipe(fd) == -1)
{
perror ("Creation du pipe a échoué ");
exit(1);
}
pid=fork();
if(!pid)
{
close(fd[R]);//fermeture du fichier de lecture par le fils
printf("\t\t\t\t\t\t+++++++++++++++++++++++++++++++++++++++\e[m\n");
printf("\t\t\t\t\t\t\t Processus FILS:: %d\n",(int)getpid());
printf("\t\t\t\t\t\t+++++++++++++++++++++++++++++++++++++++\n");
printf("\t\t\t\t\t\t FILS::PERE JE T'ENVOIE UN MESSAGE\n");
Exemple 2
if (write(fd[W],phrase,strlen(phrase)+1)== -1)
{
perror("write : Ecriture dans le pipe à échoué ");
exit(4);
}
close(fd[W]);//fermeture du fichier d'écriture par le fils
//sleep(2);
exit(3);
}
printf("J'attends la terminaison du fils");
wait(NULL);
close(fd[W]);//fermeture du descripteur d’écriture par le père
Exemple 2