Académique Documents
Professionnel Documents
Culture Documents
I. Introduction
V. Ordonnancement
2
Introduction
• Chapitre 1
3
Concepts importants du Chapitre 1
• Un système peut être définit comme un ensemble de programmes qui contrôle et dirige l’utilisation d’un
• En autres, c’est un système qui exploite les ressources matérielles d’un ordinateur et assure la liaison entre
5
Vue abstraite d’un SE
6
Ressources et leur gestion
• Ressources:
•les ressources logiques sont bâties par le logiciel sur les ressources physiques
• Allocation de ressources: gestion de ressources, leur affectation aux usagers qui les
demandent, suivant certains critères
7
Pourquoi étudier les SE?
8
Développement de la théorie des SE
• La théorie des SE a été développée surtout dans les années 1960 (!!)
• A cette époque, il y avait des machines très peu puissantes avec lesquelles on cherchait à faire
des applications comparables à celles d’aujourd’hui (mémoire typique)
• Dont le besoin de développer des principes pour optimiser l’utilisation d’un ordinateur.
9
Évolution historique des SE
1. Aperçu Historique:
• Les débuts (1946-1955): Premiers systèmes, Tubes à vide
• 1955-1965: Systèmes de traitement par lot, transistors
• 1965-1980: Systèmes multiprogrammés et à temps partagé, Circuits intégrés
• 1980-1990: Systèmes des ordinateurs personnels, LSI
• VLSI (1990…) Systèmes « micro-noyau » .
10
Premiers systèmes (1945−1955)
11
Systèmes de traitement par lots (1955−1965)
• Machines à transistors fiables mais coûteuses
12
Systèmes de traitement par lots
13
Les cartes perforées
Une ligne de données ou de programme était codée dans des trous qui pouvaient être
lus par la machine
14
Opérateur lisant un paquet de cartes perforées
Source:
http://www.tietokonemuseo.saunalahti.fi/eng/kuva_32_eng.htm
Finnish Data Processing Museum Association
15
• Le chargement successif
• Ralentir le temps d’exécution
• Diminuer et automatiser les chargements
• Traitement par lots
• Moniteur d’enchainement
• Chaque instruction d’E/S dans pgm usager invoque une routine d’E/S dans le
moniteur:
18
Le moniteur par lots
19
Traitement par lots : Inconvénients
20
Systèmes multiprogrammés et à temps partagé
(1965−1980)
21
Traitement par lots multiprogrammé
• Les opérations E/S sont extrêmement lentes (comparé aux autres instructions)
Même avec peu d’E/S, un programme passe la majorité de son temps à attendre
• Donc: pauvre utilisation de l’UCT lorsqu’un seul pgm usager se trouve en mémoire
22
Traitement par lots multiprogrammé
• Si la mémoire peut contenir plusieurs programmes, l’UCT peut exécuter un
autre programme lorsqu’un programme attend après E/S
• C’est la multiprogrammation
23
Plusieurs programmes en mémoire pour la
multiprogrammation
24
Exigences pour multiprogrammation
• Interruptions
afin de pouvoir exécuter d’autres jobs lorsqu’un job attend après E/S
• Protection de la mémoire: isole les jobs
• Gestion du matériel
plusieurs jobs prêts à être exécutées demandent des ressources:
UCT, mémoire, unités E/S
• Langage pour gérer l’exécution des travaux: interface entre usager et OS
jadis JCL, maintenant shell, command prompt ou semblables
25
Systèmes à temps partagé (time sharing)
26
Systèmes temps partagé (TSS)
27
Chaque terminal a sa propre partition de mémoire
28
Systèmes à temps partagé (TSS)
• Le traitement par lots multiprogrammé ne supporte pas l’interaction avec les usagers
29
MULTICS et UNIX
MULTICS a été un système TSS des années 60, très sophistiqué pour son époque
30
Ordinateurs Personnels ( PCs)
multiprogrammation
31
Aujourd’hui
32
Retour aux concepts de TSS
• Plusieurs PC (clients) peuvent être desservis par un ordi plus puissant (serveur)
pour des services qui sont trop complexes pour eux (clients/serveurs, bases de
données, telecom)
• Les grands serveurs utilisent beaucoup des concepts développés pour les
systèmes TSS
33
Notions de parallélisme, de coopération et de compétition
34
Processus séquentiels
35
Processus séquentiels
36
Exemple1
37
Systèmes de taches et graphes de précédence
38
Systèmes de taches et graphes de précédence
39
Systèmes de taches et graphes de précédence
40
Systèmes de taches et graphes de précédence
41
Comportement d’un systèmes de tâches
42
Comportement d’un systèmes de tâches
43
Comportement d’un systèmes de tâches
44
Déterminisme d’un système de tâches
45
Déterminisme d’un système de tâches
46
Déterminisme d’un système de tâches
47
Parallélisme et langages parallèles
48
Parallélisme et langages parallèles
49
Parallélisme et langages parallèles
La tâche de
Rendez vous
50
Parallélisme et langages parallèles
51
Parallélisme et langages parallèles
52
Parallélisme et langages parallèles
53
Parallélisme et langages parallèles
54
Parallélisme et langages parallèles
55
Systèmes parallèles (tightly coupled)
• Le petit coût des puces rend possible leur composition dans systèmes multiprocesseurs
Avantages:
56
Systèmes parallèles
• Symétriques
•Tous les UCTs exécutent le même SE
•Elles sont fonctionnellement identiques
• Asymétrique
•Les UCT sont des fonctionnalités différentes, par exemple il y a un maître et des esclaves.
• Aujourd’hui, tout ordinateur puissant est un système parallèle.
57
Systèmes des ordinateurs personnels (1980-1990)
58
SE en réseaux et SE répartis
59
Systèmes à temps réel
• Doivent réagir à ou contrôler des événements externes (p.ex. contrôler une usine). Les délais de
réaction doivent être bornés
•les échéances sont importantes, mais ne sont pas critiques (p.ex. systèmes téléphoniques)
61
Classes des systèmes
Selon les contraintes d'utilisation
62
Classes des systèmes
Selon les services
63
Classes des systèmes
Selon l'architecture matérielle
64
Modes d'exécution
65
Calculs parallèles et Distribués
• Introduction
66
Introduction
67
Architectures parallèles Pourquoi?
Solutions :
• Approche classique: diminuer le temps de calcul
– Matériels plus rapides: évolution processeurs et mémoire
• En calcul parallèle: Exécution simultané de plusieurs opérations (Tâches).
– Meilleurs algorithmes
– Machines parallèles
68
Architectures parallèles Pourquoi?
• Avantages :
– Amélioration des performances de calcul
– Accroissement de la taille des problèmes à résoudre
– Résolution de nouveaux problèmes
• Problèmes
– La remise en question des concepts d'algorithmique classique basés sur le principe de
la machine séquentielle.
– Diversité des modèles d'architectures parallèles
– Difficulté de la programmation des machines parallèles
69
Algorithmique Parallèle Pourquoi?
70
Définitions
• Un programme séquentiel se caractérise par l’exécution de plusieurs tâches l’un après l’autre avec un ordre
prédéfini.
• Un programme parallèle se caractérise par l’exécution de plusieurs tâches distinctes ou non en même temps.
• Un ordinateur parallèle : est une machine composée de plusieurs processeurs qui coopèrent à la solution de
même problème.
• Un système distribué (ou réparti) est un système de plusieurs processeurs impliqués dans la résolution d’un ou
plusieurs problèmes.
71
Définitions
72
Définitions
– Le parallélisme physique
: Exécution de plusieurs tâches distincts ou égales.
73
Architectures parallèles
74
Classification de Flynn
75
Classification de Flynn : SISD
SISD ou encore single instruction on single data est un terme désignant une architecture matérielle
dans laquelle un seul processeur exécute un seul flot d'instruction sur des données résidant dans une
seule mémoire. De ce fait, il n'y aucune parallélisation. On retrouve là l'architecture de von
Neumann.
76
Classification de Flynn : SIMD
77
Classification de Flynn : MISD
79
Classification de Flynn : MIMD
80
Parallélisme : Mémoire partagé vs Mémoire Distribuée
• Bas niveau de la programmation des abstractions qui sont utilisés avec certaines types de programmation
parallèle.
• En informatique, le concept d'abstraction identifie et regroupe des caractéristiques et traitements communs
applicables à des entités ou concepts variés ; une représentation abstraite commune de tels objets permet d'en
simplifier et d'en unifier la manipulation.
• Mémoire partagée:
Les systèmes communiquent les uns avec les autres et avec partage de la mémoire principale sur un
bus partagé (UMA: Uniform Memory Access)
81
Parallélisme : Mémoire partagé vs Mémoire Distribuée
82
Parallélisme : Mémoire partagé vs Mémoire Distribuée
• Mémoire Distribuée
• La mémoire d'un système informatique multiprocesseur est dite distribuée lorsque la mémoire est répartie en
plusieurs nœuds, chaque portion n'étant accessible qu'à certains processeurs. Un réseau de communication
relie les différents nœuds, et l'échange de données doit se faire explicitement par « passage de messages »
83
Parallélisme : Mémoire partagé vs Mémoire Distribuée
84
Programmation parallèle vs Programmation distribuée
• Programmation parallèle
–Programmation dans un langage permettant d’exprimer le parallélisme dans une application réelle
85
Programmation parallèle vs Programmation distribuée
• La programmation distribuée :
– Chaque composant s'exécute sur un matériel interconnecté par un réseau local ou global.
– Les processus envoient entre eux des messages. Exemple :
• un serveur de fichiers dans un réseau ;
• une base de données
• Les serveurs Web
• Le modèle de programmation est souvent celui du client/serveur.
• Souvent les composants distribués sont eux même multi programmés
86
Programmation parallèle vs Programmation distribuée
• Calcul distribué & Calcul parallèle
87
Programmation parallèle vs Programmation distribuée
88
Calcul parallèle & Calcul concurrent
89
Parallélisation sur mémoire distribuée en utilisant MPI
90
MPI : Objectifs
• Objectifs :
– Portabilité
– Performance
– Fiabilité
– Simplicité
– Spécification indépendante du langage.
91
MPI : Modèle de programmation
• Une application MPI est un ensemble de processus exécutant chacun son propre code (modèle SPMD) et communiquant
• Le modèle d'exécution d'une application MPI est le SPMD (Single Program Multiple Data), soit l'exécution du même
programme pour tous les processus. Les paramètres et les données sont privés à chaque processus, la synchronisation des
92
MPI : Modèle de programmation
• groupes et communicateurs.
• communications collectives,
93
Exemple
94
MPI : Communicateur
95
MPI : Communicateur
• Communicateur constitué :
– une propriété des communicateurs qui permet de partager l'espace de communication, gérer les
communications point-à-point et collectives.
96
Communication Point à point
97
Communication collective
98
Opération collective
Broadcast: Diffusion
• Le modèle de diffusion est utilisé pour distribuer des données d'une unité de traitement à toutes les unités de
traitement, ce qui est souvent nécessaire dans les programmes parallèles SPMD pour distribuer des valeurs
d'entrée ou globales. La diffusion peut être interprétée comme une version inverse du modèle de réduction.
Scatter: La disperssion
• Le modèle de communication dispersé est utilisé pour distribuer des données d'une unité de traitement à
toutes les unités de traitement. Il diffère de la diffusion en ce qu'il n'envoie pas le même message à toutes les
unités de traitement. Au lieu de cela, il divise le message et en délivre une partie à chaque unité de traitement.
Gather: Rassembler
• Le modèle de communication de collecte est utilisé pour stocker les données de toutes les unités de traitement
sur une seule unité de traitement.
All-Gather
• Le modèle de communication tout rassemblé est utilisé pour collecter des données de toutes les unités de
traitement et pour stocker les données collectées sur toutes les unités de traitement
99
Rappels sur l’architecture des ordinateurs
l’architecture élémentaire d’un ordinateur se compose d’un microprocesseur, d’une horloge, de contrôleurs de
périphériques, d’une unité de mémoire principale, d’une unité de mémoire cache et de plusieurs bus de
communication.
Le microprocesseur
Le microprocesseur est lui-même composé de nombreux éléments. Nous citerons ici les principaux.
- Les registres : ce sont des éléments de mémorisation temporaire. Ils sont utilisés directement par les
instructions et par les compilateurs pour le calcul des valeurs des expressions et pour la manipulation des
variables.
- L’unité arithmétique et logique : généralement nommée ALU (Arithmetic and Logic Unit), elle effectue
toutes les opérations élémentaires de calcul.
- L’unité de gestion de la mémoire : généralement nommée MMU (Memory Management Unit), elle contrôle
les opérations sur la mémoire et permet d’utiliser des adresses virtuelles pour accéder à une donnée en mémoire
- Le cache primaire : cette unité de mémorisation temporaire fonctionne sur le même principe que le cache
secondaire .
Représentation fonctionnelle d’un ordinateur
Représentation fonctionnelle d’un ordinateur
- Le bus interne : il permet aux différents éléments du processeur de communiquer entre eux .
Représentation fonctionnelle d’un ordinateur
• L’horloge
• Le processeur est un composant synchrone, c’est-à-dire qu’il a besoin d’une horloge pour contrôler la
cadence des opérations qu’il exécute. L’horloge contraint donc la vitesse de fonctionnement du processeur et
il est fréquent que le processeur fonctionne moins vite qu’il ne le pourrait.
• La mémoire principale
• DRAM
• SRAM
• La mémoire cache
est une zone de mémoire de petite taille, plus rapide que la mémoire principale et située plus près du processeur.
Cette mémoire cache est utilisée comme intermédiaire pour tous les accès à la mémoire principale.
• Les périphériques d entrées et de sorties
Représentation fonctionnelle d’un ordinateur
Le terme d’interruption est à rapprocher du mot interrupteur, car c’est par le biais d’une liaison
électrique que la communication s’établit : lorsqu’un périphérique, par exemple, veut déclencher une
interruption du processeur, il applique une tension sur une ligne électrique les reliant.
Les interruptions sont utilisées pour informer de l’arrivée d’événements importants, comme par
exemple lors d’accès mémoire impossibles ou lorsqu’un périphérique a terminé le travail qui lui était
demandé. Généralement, on distingue les interruptions matérielles, effectivement produites par le
matériel, et les interruptions logicielles que le processeur s’applique à lui-même.
108
Les interruptions
Les interruptions matérielles ne sont habituellement pas
transmises directement au processeur et elles transitent par
divers contrôleurs. Il se peut alors que l’un de ces
contrôleurs décide de ne pas transmettre certaines demandes
d’interruptions (souvent appelées IRQ pour Interruption
ReQuest) et, donc, qu’une demande d’interruption déclenchée
par un périphérique ne provoque pas l’interruption de la tâche
en cours. Le terme d’interruption est donc assez mal choisi, ce
qui explique l’apparition d’autres termes : exceptions, trappes
(trap en anglais). Certains contrôleurs d’interruption
autorisent les utilisateurs à masquer des interruptions, ce qui
Les composants des ordinateurs communiquent
représente une sorte de « programmation bas-niveau » du
en appliquant des tensions sur des lignes
matériel
électriques
Les interruptions
110
Les interruptions
Généralement, des niveaux de priorité différents ont été affectés aux interruptions et le choix
dans de telles situations dépend de la priorité des interruptions traitées.
111
Mode noyau versus mode utilisateur
• Le système d’exploitation (au moins une partie) d’un ordinateur est généralement exécuté en mode noyau
alors que les autres programmes fonctionnant sur la machine sont exécutés en mode utilisateur.
Le jeu d’instructions
• Le jeu d’instructions est l’ultime frontière entre le logiciel et le matériel. C’est la partie de la machine vue par
le programmeur et c’est le langage dans lequel les compilateurs doivent transformer les codes sources de plus
haut niveau.
114
Le passage du mode utilisateur au mode noyau
En fait, il existe une instruction spéciale qui déclenche une interruption logicielle et, donc,
l’exécution de la routine d’interruption correspondante. Cette routine fait généralement partie du
système d’exploitation, c’est-à-dire qu’elle s’exécute en mode noyau, et elle permet donc de
contrôler que rien d’illégal n’est demandé. Lorsque la routine est terminée, le processeur repasse en
mode utilisateur.
115
Le passage du mode utilisateur au mode noyau
Le passage du mode utilisateur au mode noyau fait nécessairement appel au système d’exploitation :
les appels système provoquent une interruption logicielle qui déclenche une routine d’interruption
correspondant au système d’exploitation. Le principe est similaire à celui mis en oeuvre avec les
interruptions de l’horloge.
RISC (Reduced Instruction Set Computer)
117
RISC (Reduced Instruction Set Computer)
Le principe qui consiste à décomposer une instruction complexe, comme l’addition du modèle
registre (aussi appelé chargement-rangement), a donné naissance à des jeux d’instructions appelés
RISC (Reduced Instruction Set Computer). Les autres jeux d’instructions sont alors nommés CISC
118
RISC (Reduced Instruction Set Computer)
A= B+C
119
Le principe du pipeline
Le système d’exploitation est un gestionnaire de ressources, c’est-à-dire qu’il contrôle l’accès à toutes les
ressources de la machine, l’attribution de ces ressources aux différents utilisateurs de la machine et la libération
Le système d’exploitation peut utiliser cette propriété pour faciliter le contrôle qu’il exerce : il s’exécute en
mode noyau alors que tous les autres programmes sont exécutés en mode utilisateur
Les appels système
• Les appels système sont l’interface proposée par le système d’exploitation pour accéder aux différentes
ressources de la machine.
Interpréteur de commandes
125
Des appels système très nombreux
• Le nombre d’appels système proposés varie suivant les systèmes d’exploitation et, pour un même type de
système d’exploitation (Unix par exemple), ce nombre diffère suivant les versions (4.4BSD, Linux, Irix, etc.).
• Le cas d’Unix
les périphériques sont gérés comme de simples fichiers
• Exécution d’un appel système
Un appel système provoque en fait une interruption logicielle et il suffit alors de programmer la machine pour
que la routine correspondant à l’interruption fasse partie du système d’exploitation
Compilation et édition de liens
• Des programmes écrits dans des langages de haut niveau doivent ensuite être traduits en langage machine :
Les fichiers
• Un fichier est une zone physique de taille limitée contenant des données
• Du point de vue de l’ordinateur, un fichier est un ensemble de 0 et de 1 stockés de façon contigüe.
Les fichiers sont arbitrairement rangés en deux catégories : les fichiers texte et les fichiers binaires. Un fichier
texte est un fichier contenant des caractères de l’alphabet étendu (comme #, e ou 1) codés sur un octet ou
plusieurs octets. Chaque donnée est en fait un entier (variant entre 0 et 232 pour l’UTF-8 par exemple) et une
table de correspondances permet de faire le lien entre chaque entier et le caractère qu’il représente.
• Les fichiers exécutables sont des fichiers binaires particuliers qui sont compréhensibles directement par la
machine. Plus exactement, ils sont directement compréhensibles par le système d’exploitation qui saura
• Les processus
• Un processus est donc un objet actif, contrairement aux fichiers qui sont des objets passifs.
Vocabulaire et définitions
• Les programmes
• le terme de programme est parfois employé pour désigner le processus obtenu par l’exécution du
fichier exécutable « mon programme s’est arrêté »
Vocabulaire et définitions
• La compilation
• Un compilateur est un programme qui lit un fichier contenant du code écrit dans un langage donné, appelé
programme source, et qui produit un fichier contenant du code dans un autre langage, appelé programme
cible. Lors de cette traduction, le compilateur indique les erreurs présentes dans le programme source.
Les phases de compilation
• Édition du fichier source : fichier texte contenant le programme — nécessite un éditeur
de texte (emacs, vi).
• Traitement par le préprocesseur : le fichier source est traité par un préprocesseur qui
fait des transformations purement textuelles (remplacement de chaînes de caractères,
inclusion d’autres fichiers source, etc).
• La compilation : le fichier engendré par le préprocesseur est traduit en assembleur i.e. en
une suite d’instructions associées aux fonctionnalités du microprocesseur (faire une
addition, etc).
• L’assemblage : transforme le code assembleur en un fichier objet i.e. compréhensible par
le processeur.
• L’édition de liens : afin d’utiliser des librairies de fonctions déjà écrites, un programme
est séparé en plusieurs fichiers source. Une fois le code source assemblé, il faut lier entre
eux les fichiers objets. L’édition de liens produit un fichier exécutable.
133
La compilation
134
L’édition de liens
135
Résolution des références internes
Il arrive que des programmes soient obligés de faire des sauts en avant ou des sauts en arrière. Par
exemple, lorsqu’une instruction du type « goto » ou « while » est exécutée, le programme doit
ensuite exécuter une instruction qui n’est pas l’instruction située juste après, mais qui est située avant
ou après dans le texte du programme.
Les sauts en arrière ne posent pas de problème car le compilateur connaît déjà l’endroit où se situe la
prochaine instruction à exécuter.
En revanche, lorsque le compilateur se trouve face à un saut en avant, il ne connaît pas encore la
prochaine instruction à exécuter. Lorsqu’il arrive à l’endroit du fichier où se trouve cette instruction,
il ne peut plus indiquer son adresse à l’instruction effectuant le saut en avant
136
Résolution des références externes
Les références externes sont les références faites à des variables externes ou à des fonctions qui ne
sont pas définies dans le fichier C traité. Par exemple, dans principal.c, myfonc() et printf() sont des
références externes. Même si apparemment, nous n’utilisons pas de variables externes dans
principal.c, il est fort probable que des déclarations de variables externes soient faites dans les
fichiers d’en-tête inclus.
137
Structure des fichiers produits par compilation
• Les trois types de fichiers qui nous intéressent ont la même forme et, structurellement, il n’y a pas
de différence entre un fichier objet, un fichier de bibliothèque et un fichier exécutable.
• Les fichiers objet et les fichiers de bibliothèques au format ELF sont donc très proches d’un
exécutable et il ne reste pas grand chose à faire pour les transformer en exécutable.
138
Structure commune
• Les fichiers au format ELF sont constitués d’un en-tête, de plusieurs sections de structure
identique et d’une section contenant des informations optionnelles.
Les fichiers objet ne contiennent généralement qu’une seule section et prennent donc la forme
suivante :
– un en-tête ;
– la table des symboles connus ;
– la table des symboles inconnus ;
– la table des chaînes de caractères ;
– le segment de texte ;
– le segment des données initialisées ;
– la section optionnelle des informations de débogage. Structure des blocs des fichiers objet
140
Les fichiers exécutables
141
Les fichiers de bibliothèques
Les fichiers de bibliothèques ressemblent beaucoup aux fichiers exécutables, mais ils ne possèdent
pas de fonction main(). Il se composent de plusieurs sections correspondant aux différents fichiers
142
Les problèmes d’adresses
143
Les problèmes d’adresses
Problématique!!!!
Il ne serait pas très intéressant qu’un fichier exécutable contienne des adresses physiques absolues
pour les différents éléments qu’il faudra copier en mémoire au moment de l’exécution. Supposons,
en effet, qu’un programme pense utiliser une zone mémoire déterminée. D’une part, rien ne lui
assure que cette zone sera libre au moment de l’exécution et, d’autre part, rien ne lui assure que cette
144
Les problèmes d’adresses
• les exécutables ne contiennent pas les adresses physiques du code et des données qu’il faudra copier en
mémoire au moment de l’exécution,
• la prochaine instruction à exécuter ne se trouve pas sur la ligne suivante, il faut disposer d’un moyen pour la
retrouver,
• L’éditeur de liens utilise pour cela des adresses relatives : il suppose qu’effectivement le processus
correspondant dispose de tout l’espace mémoire et que donc il peut commencer à copier le code à l’adresse 0,
• Au moment de l’exécution, il est donc nécessaire d’effectuer une translation d’adresse, c’est-à-dire qu’il faut
ajouter à chaque adresse de l’exécutable l’adresse (physique ou virtuelle) correspondant au début de la zone
mémoire effectivement utilisée.
145
Résolution des symboles inconnus par l’édition de liens
146
II. Gestion des Processus
147