Beruflich Dokumente
Kultur Dokumente
Avertissements
● Ce support de cours ne peut en aucune façon se substituer au cours magistral du chargé de cours.
● Ce support ne représente pas l'intégralité du cours magistral (notamment il ne comprend pas les
chapitres sur les systèmes transactionnels et la tolérance aux fautes).
● Ce support est destiné aux étudiants de 4ème année (eq. maîtrise) qui souhaitent recevoir un
complément d'information sur certaines partie du cours.
● Des exercices, et leur correction, seront ajoutés ultérieurement.
● Certaines figures illustrant le cours sont "cliquables" et renvoient à des animations (dessins au
format GIF 89a).
● Toutes les remarques sont les bienvenues à : David.Billard@cui.unige.ch.
ci-dessus.
● L'URL originale de ce cours est http://cuiwww.unige.ch/~billard/systemeII/
Sommaire
1. Processus
■ Les processus, à quoi ça sert ?
■ Une définition d'un processus
■ La vie intime des processus
■ Quelques caractéristiques des processus
■ Le contexte et la commutation de contexte
■ Les processus sous Unix
■ La communication entre processus
■ Les threads
2. Les problèmes liés à la concurrence
■ Le maintien de la cohérence
■ Section Critique & Exclusion mutuelle
■ Solutions logicielles à l'exclusion mutuelle
■ Le problème majeur des solutions logicielles : l'attente active
■ Solutions matérielles à l'exclusion mutuelle
3. Les Sémaphores
■ Définition
■ Sémaphores d'Exclusion Mutuelle
■ Sémaphores de Synchronisation
■ Autres utilisations des sémaphores - le Rendez-vous
■ Interblocages
4. Le modèle Producteur - Consommateur
■ Définition
■ Solution à une case
■ Solution à n cases
■ Solution à p producteurs et c consommateurs
5. Le problème des Philosophes
■ Définition
■ Solution (fausse)
■ Solution (juste)
6. Les Moniteurs
■ Définition
■ Un exemple simple de moniteur
■ Les instructions spéciales des moniteurs
■ Rendez-vous entre N processus
■ À l'intérieur des moniteurs
■ Problème des producteurs-consommateurs
■ Problème des lecteurs-rédacteurs
7. La mémoire virtuelle
■ Définition
■ Les problèmes de l'allocation mémoire
■ Correspondance adresses virtuelles - adresses physiques
■ Principes et mécanismes de base de la pagination
■ La mémoire virtuelle linéaire
■ Le défaut de page
■ Le choix d'une victime - remplacement
■ Le préchargement - La localité
■ Pagination à deux niveaux
■ Structure d'un programme
■ Avantages / Inconvénients de la pagination
■ La mémoire virtuelle segmentée
■ Les segments
■ Problèmes
■ Le partage de l'information en mémoire virtuelle linéaire
■ Le partage de l'information en mémoire segmentée
8. Les systèmes répartis
■ Qu'est-ce qu'un système réparti ?
■ Structure centralisée
■ Structure répartie
■ Structure mixte
■ La notion du temps
■ Exemple
■ L'ordre partiel
■ Utilisation de l'ordre partiel
■ Ordre Total Strict
■ Exemple
■ Ordonancement au moyen d'estampilles
■ L'exclusion mutuelle - Algorithme
9. Ordonnancement des évènements
■ Ordonnancement par séquenceur
■ Le privilège
■ Séquenceur circulant - Anneau virtuel
■ Séquenceur circulant - Variables d'état
■ Séquenceur circulant - Panne d'un processus
■ Séquenceur circulant - Réinsertion d'un processus
■ Séquenceur circulant - Le jeton
■ Séquenceur sur une voie à diffusion
■ En cas de panne du site i
10. Le Network File System de Sun (NFS)
■ Le Network File System de Sun (NFS)
■ Architecture
■ Protocoles
■ Mounting
■ Automounting vs Static mounting
■ Directory et accès aux fichiers
■ Problèmes
■ Implémentation
■ MOUNT
■ OPEN
■ READ
■ WRITE
■ Cohérence du cache
11. Le Distributed Computing Environment de OSF
■ Définition
■ L'architecture de DCE
■ L'organisation en cellules
■ Comment former une cellule
■ Les RPC sous DCE
■ Le "stub" client
■ Le RPCRuntime
■ Le "stub" serveur
■ Génération des stubs
■ Distributed File System
■ L'accès aux fichiers DFS
■ La gestion de la cohérence
■ Un peu de curiosité
12. La mémoire partagée distribuée
■ Pourquoi une mémoire partagée distribuée ?
■ Tightly coupled shared-memory multiprocessors
■ Distributed-memory multiprocessors
■ Avantages / inconvénients de la mémoire distribuée
■ Implémentation d'une mémoire distribuée
■ Granularité des pages
■ Partage des objets
■ Solution centralisée
■ Autres solutions
■ Site propriétaire
13. Amoeba
■ Définition
■ Architecture matérielle
■ Architecture logicielle
■ Fonctionalités du micro-kernel
■ Serveurs
■ Objets
■ Serveur de fichiers
■ Objets et capabilities
■ Protection des objets
Processus
● Les processus, à quoi ça sert ?
● Une définition d'un processus
● La vie intime des processus
● Quelques caractéristiques des processus
● Le contexte et la commutation de contexte
● Les processus sous Unix
● La communication entre processus
● Les threads
● si le quantum est très petit, les processus n'auront pas le temps d'être exécuté en partie avant d'être
réinsérés dans la file.
Méthode du tourniquet multiniveaux
Avant d'accéder au processeur, les processus sont rangés dans les files correspondant à leur niveau de
priorité. Un processus ne peut accéder au processeur que s'il n'existe plus de processus dans les files de plus
haute priorité.
● mixtes.
Un processus peut être rangé (swapped) sur disque s'il reste trop longtemps dans la file des bloqués.
STAT Signification
S Sleeping <= 20s
I Idle > 20s
W Swapped
D Non-interruptible
Action de fork()
● duplication du processus père ;
La mémoire partagée
1 mémoire partagée 1 espace d'adressage commun à plusieurs processus.
Un processus peut lire et écrire en mémoire partagée, comme s'il s'agissait de ses propres variables.
Message Queues:
T ID KEY MODE OWNER GROUP
q 28050 19466732 --rw-rw-rw- cbronner sys2
Shared Memory:
T ID KEY MODE OWNER GROUP
m 10601 4353 --rw-rw-rw- marchal sys2
Semaphores:
T ID KEY MODE OWNER GROUP
s 811 8765 --ra-ra-ra- marchal sys2
Les IPC font partie du système d'exploitation.
Chaque opération sur un IPC implique donc un appel système, très couteux, i.e. lent.
1 thread =
Une thread qui interagit avec une autre au sein du même processus n'utilise pas le système d'exploitation.
une thread est plus légère à gérer et sa gestion peut être personalisée.
La commutation de contexte est plus simple entre threads.
États uniques pour chaque thread :
● identificateur de thread ;
● pile ;
● priorité ;
Attention : par défaut, la méthode d'allocation du processeur est NON-préemptive dans les anciens
systèmes, et préemptive dans tous les sytèmes récents.
Retour au sommaire.
Le maintien de la cohérence
La mise à jour concurrente des données peut se dérouler sans problème, comme dans la figure suivante,
où la variable cpt, initialement à 2000, a comme valeur finale 1000 (2000 + 1000 - 2000).
Malheureusement, la mise à jour concurrente peut aussi générer des incohérences, comme dans la
figure suivante, où la variable cpt, initialement à 2000, a comme valeur finale 0 après l'exécution du
même code.
int c[2];
int tour;
c[0] = FALSE;
c[1] = FALSE;
tour = 0;
algorithme :
c[i] = TRUE;
tour = j;
while ((c[j]) && (tour == j)) {};
< SC >
c[i] = FALSE;
L'instruction Test&Set.
Test&Set(test_i, verrou);
tant que test_i = 1 faire
Test&Set(test_i, verrou);
< SC >
verrou := 0;
Problème = attente active !
Retour au sommaire.
Les Sémaphores
● Définition
● Sémaphores d'Exclusion Mutuelle
● Sémaphores de Synchronisation
● Autres utilisations des sémaphores - le Rendez-vous
● Interblocages
Définition
Introduits par Dijkstra en 1965.
Les sémaphores sont un outil élémentaire de synchronisation qui évitent l'attente active.
Un sémaphore s =
● un entier e(s) ;
Sémaphores de Synchronisation
But : un processus doit en attendre un autre pour continuer (ou commencer) son exécution.
e(s) est initialisée à 0.
Utilisation :
Processus 1 Processus 2
1er travail P(s) // attente processus 1
V(s) // réveil processus 2 2ème travail
● un entier nb initialisé à 0.
Interblocage
SemA et SemB sont deux sémaphores d'exclusion mutuelle.
Processus i Processus j
... ...
P(semA); P(semB);
P(semB); P(semA);
< SC > < SC >
V(semB); V(semA);
V(semA); V(semB);
... ...
● utiliser un algorithme tel que l'algorithme du banquier et déclarer quelles sont les ressources que
l'on va utiliser.
Détection--Guérison :
1. construire le graphe des conflits (périodiquement) ;
2. si un circuit interblocage ;
3. tuer un processus effectuer les V() manquants.
Retour au sommaire.
Définition
Le producteur et le consommateur sont deux processus cycliques.
Producteur Consommateur
... ...
produire(messageP); retirer(case, messageC);
déposer(case, messageP); consommer(messageC);
... ...
Problèmes : déposer un message alors que le consommateur n'a pas retiré le prédent ou retirer un
message alors que le producteur n'a rien déposé.
Amélioration :
Producteur Consommateur
produire(messageP); P(plein)
P(vide) retirer(case, messageC);
déposer(case, messageP); V(vide)
V(plein) consommer(messageC);
Solution à n cases
Hypothèse : tampon à n cases.
● le tampon est circulaire, il faut empêcher que les indices tête et queue se chevauchent.
produire(messageP); P(plein);
P(vide); P(mutexcons);
P(mutexprod); messageC = tampon[queue];
tampon[tête] = messageP; queue = (queue + 1) mod n;
tête = (tête + 1) mod n; V(mutexcons);
V(mutexprod); V(vide);
V(plein); consommer(messageC);
Retour au sommaire.
Philosophe i
penser();
manger();
5 philosophes sont réunis autour d'une table pour manger des spaghetti. Chaque philosophe doit utiliser 2
fourchettes pour manger.
Problème : modéliser le comportement de chaque philosophe pour éviter les privations et les blocages.
Solution (fausse)
Philosophe i
penser();
P(fourchette i);
P(fourchette (i+1) mod 5);
manger();
V(fourchette i);
V(fourchette (i+1) mod 5);
Solution (juste)
Philosophe i prendre_fourchette(i) poser_fourchette(i)
penser(); P(mutex); P(mutex);
prendre_fourchette(i); état[i] = FAIM; état[i] = PENSE;
manger(); test(i); test(GAUCHE);
poser_fourchette(i); V(mutex); test(DROITE);
P(s[i]); V(mutex);
test(i)
si (état[i] == FAIM && état[GAUCHE] != MANGE && état[DROITE] != MANGE) alors
. état[i] = MANGE;
. V(s[i]);
Retour au sommaire.
Les Moniteurs
● Définition
● Un exemple simple de moniteur
● Les instructions spéciales des moniteurs
● Rendez-vous entre N processus
● À l'intérieur des moniteurs
● Problème des producteurs-consommateurs
● Problème des lecteurs-rédacteurs
Définition
Un moniteur est un outil évolué de synchronisation.
Introduits par Brinch & Hansen en 1972-73 et Hoare en 1974. Un moniteur =
● des variables d'état ;
● des conditions ;
Les variables d'état sont manipulables par les procédures externes seulement (encapsulation).
var i : entier ;
procédure incrémente ;
début
i := i + 1 ;
fin ;
procédure décrémente ;
début
i := i - 1 ;
fin ;
début
i := 0 ;
fin
fin incr_decr.
. var n : entier ;
. tous_là : condition ;
procédure arriver ;
début
n := n + 1 ;
si n < N alors
. tous_là.attendre ;
tous_là.signaler ;
fin ;
début
n := 0 ;
fin
fin rendez_vous.
. var n : 0..N ;
. non_plein, non_vide : condition ;
début
n := 0 ;
tête := 0 ;
queue := 0 ;
fin
fin tampon.
Moniteur lecteur_rédacteur
lecteur_rédacteur : moniteur ;
procédure début_lire ;
début
nl := nl + 1;
si ecr alors
. c_lect.attendre ;
. c_lect.signaler ;
fin ;
procédure fin_lire ;
début
nl := nl - 1;
si nl = 0 alors
. c_ecr.signaler ;
fin ;
procédure début_écrire ;
début
si ecr ou nl > 0 alors
. c_ecr.attendre ;
ecr := vrai ;
fin ;
procédure fin_écrire ;
début
ecr := faux ;
si nl > 0 alors
. c_lect.signaler ;
sinon
. c_ecr.signaler ;
fin ;
début
ecr := faux ;
nl := 0 ;
fin
fin lecteur_rédacteur.
Critiques :
La priorité est donnée aux lecteurs.
Questions :
1. comment donner la priorité aux rédacteurs ?
2. comment équitablement gérer la priorité (mais est-ce souhaitable ?) ?
Retour au sommaire.
La mémoire virtuelle
● Définition
● Les problèmes de l'allocation mémoire
● Correspondance adresses virtuelles - adresses physiques
● Principes et mécanismes de base de la pagination
● La mémoire virtuelle linéaire
● Le défaut de page
● Le choix d'une victime - remplacement
● Le préchargement - La localité
● Pagination à deux niveaux
● Structure d'un programme
● Avantages / Inconvénients de la pagination
● La mémoire virtuelle segmentée
● Les segments
● Problèmes
● Le partage de l'information en mémoire virtuelle linéaire
● Le partage de l'information en mémoire segmentée
Définition
Mémoire virtuelle = support de l'ensemble des informations potentiellement accessibles.
Ensemble des emplacements dont l'adresse peut être engendrée par le processeur.
Mémoire physique = Ensemble des emplacements RAM physiquement présents dans l'ordinateur.
Idée générale
Il s'agit de conserver en mémoire une "partie" des programmes en cours d'exécution. Si un programme A
veut s'exécuter alors qu'il n'y a plus de place en mémoire, un "bout" d'un autre programme est "viré" en
mémoire secondaire et remplacé par un "bout" de A.
Donc, un programme est decoupé en bouts que l'on nomme pages, de taille fixe. La mémoire physique est
elle aussi découpée en pages, de même taille, ainsi que la mémoire secondaire.
Et si multi-processus :
● partage de l'information ;
● protection mutuelle.
La mémoire virtuelle, avec sa table des pages, est une implémentation possible de la fonction
topographique.
La table des pages virtuelles est une implémentation particulière d'une fonction de pagination (il en existe
d'autres).
En général, c'est un bit dans le PSW (Program Status Word) qui indique si l'on utilise ou non la mémoire
virtuelle.
● si la page virtuelle n'est pas présente en mémoire physique, alors il se produit un défaut de page.
Pour accélérer le processus, on utilise des mémoires associatives qui recencent les dernières pages utilisées :
Le défaut de page
L'adresse virtuelle référence une page qui n'est pas présente en mémoire physique. Le mécanisme
d'adressage génère un défaut de page.
Si la mémoire physique est pleine :
● virer de la mémoire physique une page (remplacement) :
● FINUFO - First In Not Used, First Out (algorithme de l'horloge ou Clock) : approximation du LRU ;
● Random : au hasard ;
Le préchargement - La localité
Optimisation du système : tenir compte de la localité en préchargeant des pages avant d'en avoir besoin.
Localité : à un instant donné, les références observées dans un passé récent sont (en général) une bonne
estimation des prochaines références.
En moyenne, 75% des références intéressent moins de 20% des pages. C'est la non-uniformité.
● Table de couplage :
❍ < page_virtuelle, nombre_de_pages, texte > (texte est en général une référence à un secteur
disque qui contient le code)
❍ < page_virtuelle', nombre_de_pages', texte' >
❍ ...
❍ ...
Problème : le code d'un programme est "absolu", c'est à dire qu'on ne peut pas le déplacer dans la mémoire
virtuelle (il a une adresse fixe).
Solution : posséder une fonction de couplage dynamique et un vecteur de translation. Mais celà coûte cher
en performance.
Pour éviter les conflits d'implantation en mémoire virtuelle et la fragmentation, on associe une mémoire
virtuelle à chaque utilisateur.
Inconvénients :
● Fragmentation interne (toutes les pages ne sont pas remplies).
● Impossibilité de lier deux (ouo plusieurs) procédures liées aux mêmes adresses dans l'espace virtuel.
Les segments
Problèmes
Un segment = des zone de mémoire contigües, d'où une gestion difficile de la mémoire (utilisation de
"ramasse-miettes" - garbage collector).
Idée : Paginer les segments !
On a une TPV par segment.
Une adresse segmentée = numéro de segment + déplacement dans le segment.
Un déplacement dans le segment = numéro de page virtuelle + déplacement dans la page.
Retour au sommaire.
● ...
Soit un système informatique constitué d'un ensemble de stations reliées entres elles par un moyen de
communication.
On veut implémenter un système de messagerie.
Un usager doit pouvoir émettre ou retirer des messages de n'importe quelle station.
Plusieurs implémentations possibles.
● structure centralisée ;
● structure mixte.
Structure centralisée
Structure répartie
1 usager = 1 boîte aux lettres = 1 station de rattachement
dictionnaire Usager/Station-de-rattachement.
Disponibilité du système accrue.
Panne d'une station = empêche la réception des messages pour les usagers de cette station.
Structure mixte
La notion du temps
Un processus P_1 sur une station A veut coopérer avec un processus P_2 sur une station B.
Comment faire pour savoir qu'un evènement e de P_1 s'est déroulé avant (ou après) un evènement e' de
P_1 ?
Exemple
Soit un parking. Les usagers sont en compétition pour l'utilisation des places.
1. Parking avec un accès unique, surveillé par un seul gardien : connaissance partielle de la situation
L'ordre partiel
Producteur - Concommateur
Le producteur P et le concommateur C sont sur des sites différents (S_1 et S_2).
NP = nombre de productions et NC = nombre de consommations.
C peut consommer ssi NP-NC > 0.
P peut produire ssi NP-NC < N.
Implémentation :
● sur S_1, NP = le nombre de productions faîtes et NC', image de NC, incrémenté à chaque reception
d'un message de C.
● sur S_2, NC = le nombre de consommations faîtes et NP', image de NP, incrémenté à chaque
reception d'un message de P.
Utilisation des compteurs d'évènements 1 compteur = variable entière non-décroissante, associée à une
classe E.
Primitives :
● avancer(E) : augmente de 1 la valeur du compteur (arrivée d'un évènement de classe E) ;
● si plusieurs messages arrivent en même temps, il faut les ranger en EM dans une file locale ;
● si on veut conserver ordre de réception = ordre d'émission, il faut pouvoir ordonner globalement
l'émission des messages.
Exemple
Parking avec 3 gardiens G1, G2 et G3. état initial = 100 places libres.
Les trois gardiens diffusent les messages suivants :
● M1 : 20 places de plus sont libres ;
Résultat (exemples) :
Ordre Séquence 1 Séquence 2 Séquence 3 Séquence 4
d'envoi (msg, valeur) (msg, valeur) (msg, valeur) (msg, valeur)
init -, 100 -, 100 -, 100 -, 100
1 M1, 120 M1, 120 M3, 90 M2, 90
2 M3, 108 M2, 110 M1, 110 M3, 81
3 M2, 98 M3, 99 M2, 100 M1, 101
final -, 98 -, 99 -, 100 -, 101
Retour au sommaire.
Le privilège
Mise en oeuvre générale d'un séquenceur = faire circuler un privilège entre les sites.
Privilège = valeur courante du séquenceur.
Quand site i possède le privilège, il peut faire ticket(S).
Séquenceur circulant.
anneau virtuel.
suiv[i]=i+1 mod N
pred[i]=i-1 mod N
En cas de panne d'un site reconstruction de l'anneau reconfiguration (mise à jour des variables suiv
et pred).
Lorsque P_i possède le privilège il doit l'abandonner au bout d'un temps fini :
S[i] := S[i-1] pour i 0
S[0] := S[0] + 1 mod K pour i = 0
si (pred[i] > i)
alors
<< Comportement selon P_0 >>
sinon
<< Comportement selon P_i >>
si (j < i) alors
S[i] := S[j]-1 mod K
sinon
S[i] := S[j]
ordonnancement global.
● i:
❍ conserve tous les messages qui suivent (sans les traiter) jusqu'à la valeur de cpt_j,
Retour au sommaire.
Architecture
Un client qui veut accéder à une directory distante doit la monter dans sa propre hierarchie.
Une station cliente sans disque (diskless) peut faire "comme si" elle avait un disque en montant des
systèmes distants.
Une station avec un disque local aura une hierarchie en partie locale et distante.
Pour les programmes du client pas de différence entre fichiers locaux ou distants.
Si deux clients ont monté la même directory, ils en partagent les fichiers.
simplicité de NFS.
Protocoles
NFS doit supporter des systèmes hétérogènes (clients DOS utilisant des processeurs Intel, serveurs
tournant sur Sun Sparc, ...).
Mounting
Soit C le client et S le serveur.
C envoie à S un chemin d'accès (le nom de la directory à monter) et demande la permission de monter la
directory chez lui.
L'endroit où C va monter la directory n'est pas important pour S.
Si le chemin d'accès est correct et si la directory se trouve dans /etc/exports, S renvoie un file
handle à C.
Le handle est composé :
● du type du système de fichiers ;
● du disque ;
Si le serveur crashe aucune info sur les fichiers ouvert est perdue (puisqu'il n'y en a pas).
Un serveur NFS est stateless.
Problèmes
Un fichier Unix peut être ouvert et verrouillé (locked) pour empêcher les autres processus de l'utiliser.
NFS utilise quand même le système de protection Unix (bits rwx pour le owner, group et world).
MAIS : le serveur NFS croit toujours le client pour valider un accès.
Que faire si le client ment ?
Utilisation de la cryptographie pour valider les requêtes.
Problème : les données, elles, ne sont pas cryptées.
Les clés sont gérées par le NIS ( Network Information Service, ou yellow pages)
Implémentation
MOUNT
MOUNT :
● le sysop envoie mount + remote directory + local directory + other ;
● le programme mount parcours le nom de la remote dir et trouve le nom de la machine distante
associée ;
● mount contacte la machine et demande un handle pour cette directory ;
Le kernel a la main :
● il construit un v-node pour la remote dir ;
● demande au client NFS de créer un r-node (remote i-node) dans sa table pour le file handle ;
OPEN
OPEN :
● le kernel parcours le nom du chemin d'accès, trouve la directory, voit qu'elle est distante et dans le
v-node de la directory trouve le pointeur sur le r-node ;
● le kernel demande au client NFS d'ouvrir le fichier ;
● le client NFS récupère le nom du serveur dans le nom du chemin d'accès et un handle ;
● le client crée un r-node et averti la VFS qui crée un v-node pointant sur le r-node ;
READ
READ :
● la VFS trouve le v-node correspondant ;
● la VFS détermine si c'est local ou distant et quel est le i-node ou r-node à utiliser ;
Les transferts se font normalement 8ko / 8ko, même si moins d'octets sont demandés.
Automatiquement, dès que le client a reçu les 8ko demandés, une nouvelle requête de 8ko est envoyée.
C'est le read ahead.
WRITE
Les transferts se font aussi 8ko / 8ko.
Tant que les données écrites sont < 8ko, elles sont accumulées localement.
Dès que le client a écrit 8ko, les 8ko sont envoyé au serveur.
Quand un fichier est fermé, ce qui reste à écrire est envoyé au serveur.
Utilisation du caching :
les clients ont 2 caches : attributs et données.
problèmes de cohérences.
Cohérence du cache
Pas de solution "propre" : on essaie de réduire le risque au maximum, mais sans l'éviter tout à fait.
● Un timer est associé à chaque entrée du cache. Quand le timer expire, l'entrée est annulée.
Normallement 3s pour les données et 30s pour les attributs.
● Quand un fichier "caché" est ouvert, le serveur est contacté pour savoir la date de la dernière
mise-à-jour. Si MAJ plus récente que la copie, l'entrée est annulée.
● Chaque 30s un timer expire et toutes les entrées sales sont envoyées au serveur.
Retour au sommaire.
Définition
DCE = Distributed Computing Environment, de l'OSF (Open Software Foundation).
OSF est un consortium de fabricants d'ordinateurs (IBM, DEC, HP, ...).
DCE n'est PAS un OS. C'est un ensemble de services et d'outils, qui tournent sur un OS existant, qui
servent à la création et au déroulement d'applications distribuées.
DCE est indépendant des machines et des OS. On peut l'utiliser sur AIX, SunOS, Unix System V,
Windows, OS/2, ...
DCE supporte aussi de nombreux matériels et logiciels réseaux (TCP/IP, X.25, ...).
L'approche DCE est l'inverse de l'approche micro-kernel.
Historique : DCE n'a pas été écrit "from scratch" (à partir de rien), il a été conçu à partir d'un "call for
technology", pour obtenir les meilleures solutions aux problèmes de distribution.
L'architecture de DCE
Il y a 6 composants :
1. Threads package, la gestion des threads ;
2. Remote Procedure Call facility, la gestion des RPCs et du paradigme client/serveur ;
3. Distributed Time Service, la notion de temps global ;
4. Name services, la gestion des noms :
❍ Cell Directory Service,
L'organisation en cellules
DCE est un système qui peut être fortement étendu (il est "highly scalable").
On peut rajouter des machines et des utilisateurs sans (trop) nuire aux performances.
Organisation en cellules, qui sont des unités manageables de taille raisonnable.
Une cellule = un ensemble d'utilisateurs, de machines ou autres qui ont un but en commun et partagent
des services DCE communs.
Chaque cellule comprend au minimum : un server de répertoires de cellules, un serveur de sécurité et un
serveur de temps global + des machines clientes.
Chaque client DCE a des processus clients pour gérer les facilités DCE.
Le "stub" client
Deux tâches :
1. CALL REQUEST.
❍ reçoit un "call request" du client,
❍ forme un message (pack) avec les spécifications de la procédure distante et les paramètres,
2. RESULT.
❍ reçoit le résultat de l'exécution de la procédure du RPCRuntime,
Le RPCRuntime
Gère la transmission des messages entre le client et le serveur.
Responsable des retransmissions, acknowledges, etc.
Reçoit les messages du stub client et les envoie au stub serveur.
Reçoit les résultats du stub serveur et les envoie au stub client.
Le "stub" serveur
Deux tâches :
1. CALL REQUEST.
❍ reçoit un "call request" du RPCRuntime,
2. RESULT.
❍ reçoit le résultat de l'exécution de la procédure du serveur,
[uuid (bfsdfw345-345-3245-qwef-356-we45-ew54w-e4-5w-345)
version (1.0)]
interface stateless_fs
{
const long FILE_NAME_SIZE = 16
const long BUFFER_SIZE = 1024
typedef char FileName[FILE_NAME_SIZE];
void read (
[in] FileName filename;
[in] long position;
[in,out] long nbytes;
[out] Buffer buffer;
);
void write (
[in] FileName filename;
[in] long position;
[in,out] long nbytes;
[in] Buffer buffer;
);
}
Facilite la gestion des fichiers (un fileset = tous les fichiers d'un utilisateur ou d'un groupe d'utilisateurs,
...).
Lorsqu'une partition devient pleine, on peut dynamiquement faire migrer un fileset de cette partition vers
une autre (avec plus d'espace).
La gestion de la cohérence
Caractéristique principale de DFS : chaque opération "read" voit les effets des précédentes opérations
write.
Retour au sommaire.
● distributed-memory multiprocessors.
Distributed-memory multiprocessors
● coût moindre.
Inconvénients :
● Topologie du réseau très importante.
● Gestion du réseau.
Aucun processeur ne peut directement accèder à la mémoire d'un autre processeur NORMA (NO
Remote Memory Access) systems.
Les processeurs référencent leur propre mémoire locale. Il faut rajouter du software pour que lorsqu'un
processeur référence une page distante, cette page soit récupérée.
L'espace d'adressage commun est découpé en morceaux.
Chaque morceau est situé sur une station.
Quand un processeur référence une page non-locale "trap" (page fault) DSM va récupérer la
page.
● propriété de localité.
Inconvénient :
Problème du false sharing :
● le récupérer.
Solution centralisée
On a un serveur central qui garde trace de tous les déplacements d'objets.
Autres solutions
Diffuser des messages de "Data Location".
Problème : la diffusion ne se prête pas à la scalability.
De plus, la latence du réseau peut engendrer des délais de transmission importants.
Site propriétaire
1 objet = 1 site propriétaire (qui possède la copie primaire de l'objet).
Le propriétaire change quand l'objet se déplace.
Au départ, les propriétaires sont connus (broadcast). Quand un site a besoin d'un objet requête au
propriétaire. Si le propriétaire n'a plus l'objet, il fait suivre la requête.
Retour au sommaire.
Amoeba
● Définition
● Architecture matérielle
● Architecture logicielle
● Fonctionalités du micro-kernel
● Serveurs
● Objets
● Serveur de fichiers
● Objets et capabilities
● Protection des objets
● Opérations standards sur les objets
● Gestion des processus
● Exécution des processus
Définition
Amoeba = Système d'exploitation distribué.
Projet commencé en 1981 a l'Université de Vrije (Pays-Bas).
But du projet = OS distribué pour le calcul parallèle (plusieurs processeurs) et distribué.
L'utilisateur se logge, édite des programme, les compile, lit son mail, etc.
Ces actions font intervenir différentes machines.
L'utilisateur ne le voit pas.
Un utilisateur ne se logge pas sur une machine particulière, mais au système entier.
Il n'y a pas de "home machine".
Le shell s'exécute sur une machine quelconque.
Les commandes s'exécutent sur des machines quelconques (en général différente de celle du shell).
C'est le système qui détermine les compilations qui peuvent s'exécuter en parallèle ou en série et sur
quelle(s) machine(s).
Un langage spécifique qui tient compte du parallélisme et de la distribution a été créé : Orca.
Architecture matérielle
Architecture logicielle
2 parties distinctes :
1. un micro-noyau (1 par processeur) ;
2. un ensemble de serveurs qui implémentent les opérations classiques d'un SE.
Fonctionalités du micro-kernel :
1. gestion des processus et threads ;
Fonctionalités du micro-kernel
Notion de processus : x processus = x espaces d'adressage distincts.
Notion de threads : x threads dans 1 processus = 1 seul espace d'adressage.
Gestion basique de la mémoire : les threads peuvent allouer et libérer des segments de mémoire.
Gestion des communications : paradigme client / serveur et diffusion. Le protocole de communication est
FLIP.
Gestion des E/S : pour chaque chaque périphérique est associé un pilote (driver) dans le noyau.
Serveurs
Tout ce qui n'est pass fait par le kernel est fait par des serveurs.
Objets
Objet = Abstract Data Type pour Amoeba.
Données encapsulées + Opérations.
Un processus crée un objet le serveur qui gère cela retourne une capacité ( capability) protégée par
cryptage.
Touts les objets du système (objets physiques ou logiques) sont : nommés, protégés et gérés par des
capabilities.
Exemple : fichiers, directories, segments mémoire, fenêtres, processeurs, disques, etc.
Serveur de fichiers
C'est le bullet server (bullet car il doit être rapide).
Une fois créé, un fichier ne peut pas être modifié.
Duplication facilitée.
Il y a le directory server qui gère les directories et le replication server.
L'utilisateur est libre d'utiliser les serveurs d'origine ou de créer ses propres serveurs.
Objets et capabilities
Une opération sur un objet = RPC sur le serveur qui le gère.
Adresse des objets non-importante (même machine ou a l'autre bout du pays, ...).
Capacité =
Quand le serveur reçoit une capability XOR avec les nouveaux droits fonction one-way.
y = f(x) avec x facile de trouver y. Avec y, parcours exhaustif de toutes les valeurs possibles de x.
● la capability ;
Retour au sommaire.
Bibliographie
En Français
Titre
Principes des Systèmes d'Exploitation des Ordinateurs
Auteur
Sacha Krakowiak
Éditeur
DUNOD informatique
Année
1985
ISBN
2-04-016416-2
Titre
Systèmes Informatiques Répartis
Auteurs
CORNAFION
Nom collectif de : Françoise André, Jean-Serge Banino, Claude Bétourné, Jean Ferrié, Daniel Herman,
Claude Kaiser, Sacha Krakowiak, Guy Mazaré, Jacques Mossière, Xavier Rousset de Pina, Jean Seguin,
Jean-Pierre Verjus.
Éditeur
DUNOD informatique
Année
1984
ISBN
2-04-012135-8
En Anglois
Titre
Distributed Operating Systems
Auteur
Andrew S. Tanenbaum
Éditeur
Prentice Hall International Editions
Année
1995
ISBN
0-13-143934-0
Titre
Distributed Operating Systems, Concepts and Design
Auteur
Pradeep K. Sinha
Éditeur
IEEE Press
Année
1997
ISBN
0-7803-1119-1
Retour au sommaire.
Remerciements
Pour ce support de cours, j'ai largement utilisé des extraits du cours du Professeur Jean Ferrié et du Dr.
Jean-François Pons, du Laboratoire de Systèmes Informatiques de l'Université de Montpellier II.
...
Retour au sommaire.