INF 2500 : Architecture des ordinateurs

Slides:



Advertisements
Présentations similaires
Le micro-ordinateur.
Advertisements

Module Systèmes d’exploitation
GEF 435 Principes des systèmes d’exploitation
GEF 435 Principes des systèmes dexploitation Le matériel des ordinateurs Revue Pt II (Tanenbaum 1.4)
Électronique de base du processeur
Architecture de machines Le microprocesseur
ARCHITECTURE INTERNE d’un MICROPROCESSEUR
Informatique Deug2 Sciences Eco S. Maabout 2004/2005.
GEF 435 Principes des systèmes d’exploitation
Performances 1 Évolution : Performance. Performances 2 Évolution : Mémoire.
A abstraction b assembleur c nombre binaire d bit e cache f UC g puce h compilateur i famille dordinateurs j contrôle k chemin de données l défaut m dé
Objectifs Nous allons concevoir une mise en œuvre contenant un noyau de jeu d’instructions. Nous verrons comment l’architecture de jeu d’instructions.
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
Mémoire & Processus Cours SE - SRC
2.Les différentes architectures (Louis)
TRANSMISSION DES DONNEES INFORMATIQUES
Architecture de machines La mémoire
Architecture de machines Principes généraux
Architecture de machines La mémoire
Cours d’initiation en Informatique
Système d’exploitation : Assembleur
Cours d’algorithme M. Boulakradeche
Chapitre 8 : L’architecture de base des ordinateurs
ARCHITECTURE GLOBALE CAPTAGE Traitement DES des données GRANDEURS
ARCHITECTURE DES ORDINATEURS
Architecture d’un ordinateur
ENTRETENIR son ORDINATEUR
Mémoire cache ou antémémoire
Architecture de base d’un ordinateur
Gestion des Périphériques
Initiation à la conception de systèmes d'information
LE MICROPROCESSEUR 8086/8088 Architecture externe du 8086
Architecture des Ordinateurs
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand.
Architecture d ’un système à MICROPROCESSEUR
LES SYSTEMES AUTOMATISES
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Hiérarchie de la mémoire
Module 1 : Généralités sur les systèmes informatiques
L'Unité centrale (CPU) Le CPU doit être rapide (mesuré en temps de CPU) UNITE DE CONTROLE Générer les signaux de control/temps Contrôler le décodage/exécution.
Cours de Structure et Technologie des composants d’ordinateurs
Cours de Systèmes d’exploitations
Un survol du language C.
Création d'un diaporama sous Open Office
Architecture d'un ordinateur
Structure de Base d’un ordinateur Matière : Informatique
Passer directement au Quiz
Construction d'une hiérarchie mémoire faible consommation
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. tél Fax Cours Architecture des.
INFOR 101 Chapitre 5 Marianne Morris.
Architecture matérielle Qu’est ce qu’un ordinateur ?
Introduction et Généralités sur l’Algorithmique
Architecture et technologie des ordinateurs II
Patricia Renault UPMC 2005/2006
Structures de données avancées : Arbres B+ avec expansion partielle D. E ZEGOUR Institut National d ’Informatique.
Architecture et technologie des ordinateurs II
Chapitre 4 La représentation des nombres.
Chapitre 3 L’accès aux données.
1.1: notions de bases de l’informatique
Un ordinateur est une machine électronique qui fonctionne par la lecture séquentielle d'un ensemble d'instructions, organisées en programmes, qui lui.
Memoire.
L3 Instrumentation Pétrolière S6
Raison d'être de la structure de fichiers : Les premiers travaux : Début des années 1960 : En 1963 : Près de 10 ans plus tard... (à peu près 1973) : Durant.
Architecture d’un ordinateur
Initiation à l'informatique
Les mémoires la préparation de: chaimaa hamdou.
ARCHITECTURE MATERIELLE D’UN SYSTEME A MICROPROCESSEUR
Systèmes à microprocesseur Les mémoires
Transcription de la présentation:

INF 2500 : Architecture des ordinateurs

Chapitre 1 : Introduction

1.1 Quelques faits Début 1970 : les ordinateurs étaient totalement dépendants de la technologie des circuits intégrés (C.I). Milieu des années 70 : Les performances augmentent de 25% à 30% par année. Fin des années 70 : L’arrivée des microprocesseurs augmente les taux de performances de 35 % par année. L’augmentation du nombre d’ordinateurs provoque la disparition du langage machine (Assembly language) au profit d’un langage orienté-objet (Object oriented programming) ainsi que la création de systèmes d’exploitation standards (ex: UNIX).

1.2 L’ordinateur moderne Carte Mère (Motherboard) Constitue le tronc commun de l’architecture. Tous les périphériques lui sont directement reliés. Malgré certaines normes ou certaines technologies spécifique, la plus part des architectures possèdent les mêmes composantes fondamentales (processeurs, mémoires, contrôleurs…).

1.2 L’ordinateur moderne (suite) Microprocesseur (CPU) Unité centrale de traitement (UCT) . Exécute l’ensemble des instructions à partir d’un langage de bas niveau (DLX,Z88,8085…). Est étroitement relié à l’architecture. Possède une hiérarchie de mémoire pour conserver les instructions (cache, cache L1, cache L2).

1.2 L’ordinateur moderne (suite) Mémoire vive (RAM Memory) Permet de conserver l’information à court terme (machine sous tension). Leur capacité et rapidité sont en constante évolution.

1.2 L’ordinateur moderne (suite) Les périphériques Permettent l’interaction entre la machine et l’usager (entrée, sortie et stockage des données). Sont reliés à la carte mère via divers connecteurs spécialisés (port série, port AGP, port parallèle, bus ISA, bus PCI…). Exemple : disque dur, souris, clavier, carte graphique, carte de son, moniteur.

1.3 Le rôle d’un concepteur d’ordinateur ‘Déterminer quels attributs sont importants pour une nouvelle machine et concevoir ensuite une machine pour obtenir la performance maximale tout en respectant les contraintes de coût’ Cela comporte plusieurs aspects: Design d’un répertoire d’instruction rapide et optimal Etude de l’organisation fonctionnelle: ce dont on a besoin pour que le tout soit en mesure d’interagir (un processeur sans bus de communication est inutile). Design logique Réalisation

1.3 Le rôle d’un concepteur d’ordinateur (suite) L’optimisation d’un design présent requiert une technologie en constante évolution aussi bien pour les systèmes d’exploitation que pour les compilateurs que la logique. Le jeu d’instruction utilisé dans les architectures modernes constitue la frontière entre le logiciel (software) et le matériel (hardware). En entend par ‘Architecture’, le regroupement des trois apects de la conception des ordinateurs : L’architecture du jeu d’instruction L’organisation La réalisation matérielle

1.3 Le rôle d’un concepteur d’ordinateur (suite) L’organisation inclut les aspects de haut niveau de la conception comme le système de mémorisation, la structure de bus et l’unité centrale de traitement (UCT) qui gère l’arithmétique, la logique, les branchements et les transferts de données. L’optimisation du design choisi peut se faire à l’aide d’applications et de programmes qui sont spécifiques au domaine à optimiser (débit mémoire, jeux d’instructions…) L’optimisation d’une architecture ne passe pas nécessairement par de hautes performances matérielle (haut débit, haute vitesse…). Il faut également considérer le temps de mise en marché et le coût final (un processeur ultra performant qui coût très cher n’est pas optimal)

1.4 L’évolution des technologies et de l’utilisation des ordinateurs Evolution de l’utilisation des ordinateurs. L’augmentation des logiciels force l’augmentation de la quantité de mémoire à raison de 1,5 à 2 par année. Ceci implique une croissance du nombre de bits d’adresse au rythme de 0.5 à 1 par année. Cette augmentation entraîne également la disparition du langage assembleur pour des langages de haut niveau. Les compilateurs ont donc eux aussi évolués en incluant de nouvelles fonctions et en augmentant l’efficacité d’exécution des programmes. Désormais, les programmeurs de compilateurs et les concepteurs d’ordinateurs doivent travailler ensemble.

1.4 L’évolution des technologies et de l’utilisation des ordinateurs (suite) Evolution des technologies d’implémentation. La technologie des circuits intégrés logiques. La densité des transistors (nombre de transistors par unité de surface) croit d’environ 50% par an. La taille des puces quant à elles croient d’environ 10% à 25% par année. En somme, la combinaison des deux nous donne une croissance en nombre de transistors entre 60% et 80% par an. La vitesse des composants croit aussi vite. Les temps de cycle quand à eux n’évoluent pas vraiment étant donné la faible évolution de la technologie de métalisation utilisée dans les interconnexions. Les DRAM en semi-conducteurs. La densité croit d’environ 60% par année et quadruple en trois ans. Le temps de cycle diminue lentement, soit un tiers en 10 ans.

1.4 L’évolution des technologies et de l’utilisation des ordinateurs (suite) Evolution des technologies d’implémentation (suite). La technologie des disques magnétiques La densité augmente de 50% par année Le temps d’accès croit d’un tiers en 10 ans

1.5 Le coût et l’évolution du coût Le coût d’un composant d’ordinateur décroît avec le temps. L’évolution du rendement (nombre de produits fabriqués ayant passés les tests par rapport au nombre initial) contribue à la baisse des coûts. Un rendement double entraînera inévitablement un coût diminué de moitié (c’est la maturité du produit).

1.5 Le coût et l’évolution du coût (suite) Le coût des circuits intégrés (suite).

1.5 Le coût et l’évolution du coût (suite) Le coût des circuits intégrés (suite). La distribution du coût dans un système (approximatif). DRAM 36 % Microprocesseur 49% Carte vidéo 14% Moniteur 22% Disque dur 7%

1.5 Le coût et l’évolution du coût (suite) Coût et prix. Le prix que l’usager paye, est différent du coût du système. Une modification de 1000$ au niveau d’un coût, se répercute en une différence de 4000$ à 5000$ au niveau du prix. On distingue: Les coûts directs qui sont directement liés avec la fabrication du produit (ajoutent environ 20% à 40% au coût des composants). La marge brute qui est un surcoût indirect du produit et qui englobe la recherche et développement, la publicité, le réseau commercial, la maintenance des équipements de fabrication, les locations de locaux, les coûts de financement, les profits avant impôts et les taxes (ce coût ajoute environ 20% à 55% au coût des composants).

1.5 Le coût et l’évolution du coût (suite) La stratégie est donc la baisse de la marge brute, ce qui augmente le volume et conduit donc à une baisse des prix. Le prix catalogue est différent du prix de vente moyen car les compagnies abaissent ce dernier lors d’un volume de vente suffisant. Ainsi le prix de vente moyen = 50% à 75% du prix de catalogue.

1.6 Mesurer et publier les performances Il existe plusieurs mesures de performance, elles sont souvent prises à témoin dans des spécifications techniques mais ne peuvent être interprétées séparément car elles ne reflètent qu’un seul aspect à la fois. Supposons deux systèmes A et B distincts en performance. A et n fois rapide que B si : On test de plus en plus les performances à l’aide de programmes test.

1.6 Mesurer et publier les performances Temps d’exécution total (Total execution time) Méthode simple et rapide pour comparer les performances relatives. Temps d’exécution pondéré.(Weighted execution time) Si la répartition des programmes est inégale dans la charge de travail, on introduit alors une pondération à chacun (la somme de celles-ci doit être égale à 1).

1.6 Mesurer et publier les performances (suite) Temps d’exécution pondéré (suite). Temps d’exécution normalisé (Normalized execution time) Il existe une autre méthode pour une charge de travail composée d’une répartition inégale de programmes. On normalise les temps d’exécution par rapport à une machine de référence et considérer les moyennes des temps d’exécution normalisés.

1.6 Mesurer et publier les performances (suite) Temps d’exécution normalisé (suite).

1.7 Les principes quantitatifs de la conception des ordinateurs Principe fondamental : favoriser le cas fréquent au détriment du cas rare. Ex: Une addition de deux nombres dans l’UC a plus de chance de ne pas provoquer un dépassement en mémoire. Il est donc préférable de favoriser le cas où il n’y a pas de dépassement. Soit ‘int X,Y,Z’, sachant qu’un entier est représenté sur 16 bits (variable selon l’architecture). Le plus grand nombre pouvant être représenté sur 32 bits : 2^(16)-1=65535. Ainsi si le résultat X+Y contient une valeur supérieur à 65535, il a dépassement de mémoire. Ce cas est cependant peu probable si la conception à été faite correctement. Loi d’Amdahl. Permet d’évaluer le gain de performance obtenu par l’amélioration d’un composant d’un ordinateur.

1.7 Les principes quantitatifs de la conception des ordinateurs (suite) Loi d’Amdahl. Permet d’évaluer le gain de performance obtenu par l’amélioration d’un composant d’un ordinateur.

1.7 Les principes quantitatifs de la conception des ordinateurs (suite) L’équation de performance UC. Les performances de l’unité centrale dépendent du temps de cycle, du nombre de cycles par instructions (CPI) et du nombre d’instructions.

1.7 Les principes quantitatifs de la conception des ordinateurs (suite) L’équation de performance UC (suite).

1.7 Les principes quantitatifs de la conception des ordinateurs (suite) Mesurer les composantes de la performance de l’UC. Construire et utiliser des outils pour mesurer les aspects d’un design est constitue une grande partie du travail d’un designer. Il est difficile d’évaluer le temps de cycle d’un design qui n’est pas complété. En revanche le nombre d’instructions est plus facile à déterminer à l’aide du compilateur. Le CPI quant à lui est également difficile à estimer car il dépend de l’organisation détaillée du Processeur et du flux d’instruction. Pour déterminer ce nombre, il convient de séparer les composantes mémoires et processeur. Pour chaque instruction i, on a : La vrai mesure de performance pour un ordinateur reste le temps.

1.7 Les principes quantitatifs de la conception des ordinateurs (suite) Localité de références. Une des plus importantes propriétés des programmes. Les programmes ont tendance à réutiliser les données et les instructions qu’ils ont utilisées récemment. On peut donc prédire avec une précision raisonnable quelles instructions et quelles données un programme utilisera dans le futur proche en se basant sur ses accès dans son passé proche. Deux types de localité pour les données existent: Localité temporelle (éléments accédés dans un passé proche le seront de nouveau dans un futur proche). Localité spatiale (éléments dont les adresses sont proches les unes des autres auront tendance à être référencés dans un temps rappoché).

1.8 Concept de la hiérarchie mémoire Axione simple : le plus petit est le plus rapide La propagation d’un signal est une cause de nombreux délais Dans plusieurs systèmes, on observe que les plus petites mémoires sont aussi les plus rapides Cette lois n’est pas valable lorsque l’on considère la consommation de puissance (ECC vs CMOS ou SRAM vs DRAM) Dans les systèmes courant, plus la mémoire est grandes et lente, plus elle se trouve éloignée du Processeur:

1.8 Concept de la hiérarchie mémoire (suite) La cache est une petite mémoire rapide, proche de l’UC qui contient les données et les instructions les plus récemment accédées. Si l’UC trouve l’information en cache : succès cache (cache hit) Si l’UC ne trouve pas l’information en cache : défaut de cache (cache miss) Le temps requis pour les défauts de cache dépend de la latence mémoire et du débit mémoire (mo/s) Certaines informations (données, code …) résident sur le disque dur. Pour y accéder l’espace d’adresse est coupé en blocs de taille fixe. En mémoire vive, l’espace d’adresse est coupé en blocs de taille variable que l’on appel page

1.8 Concept de la hiérarchie mémoire (suite) Lorsque le CPU référence une information dans une page (en mémoire vive) qui n’est pas présente, on a un défaut de page (page fault). La page contenant l’information sur le disque est envoyée en mémoire vive. Les défauts de page étant très coûteux en temps, ces derniers sont généralement pris en charge par le côté logiciel (Système d’exploitation) pour éviter de monopoliser et même bloquer le processeur. A un instant donné, une donnée réside en mémoire vive (RAM) ou sur le disque.

1.8 Concept de la hiérarchie mémoire (suite) Lorsque le CPU référence une information dans une page (en mémoire vive) qui n’est pas présente, on a un défaut de page (page fault). La page contenant l’information sur le disque est envoyée en mémoire vive.

1.8 Concept de la hiérarchie mémoire (suite) Performance des caches

Chapitre 2 : Jeu d’instructions, principes et exemples

2.1 La classification des jeux d’instructions Définition d’un jeu d’instruction: Portion visible de la machine pour les programmeurs ou les créateurs de compilateurs La principale différence entre les différents jeux d’instruction réside dans le type interne de stockage dans le CPU Sous forme d’une pile (stack) Sous forme d’un accumulateur (accumulator) Sous forme de registres (registers) Registre Mémoire (registers memory) Chargement Rangement ou registre registre (resister register)

2.1 La classification des jeux d’instructions (suite) Après les années 80, l’ensemble des systèmes ont été conçus suivant l’architecture chargement rangement car: Un registre est plus rapide qu’une mémoire. Il est plus facile et plus efficace de manipuler des registres pour un compilateur. Contrairement au système de pile, une expression avec l’emplois de registres peut s’évaluer dans n’importe quel ordre (a*b)-(c*d)-(e*f). Ce système réduit le trafic mémoire vu que les registres peuvent contenir des variables.

2.1 La classification des jeux d’instructions (suite) Le nombre de registres à utiliser dépend de leur usage par le compilateur: Evaluer des expression Passer des paramètres Conserver des variables

2.2 L’adressage mémoire La représentation de l’information en informatique se fait sur une base binaire (0 ou 1). L’unité de stockage est le bit. Ce stockage de l’information nécessite plusieurs bits que l’on classe suivant l’échelle suivante (celle-ci peut varier selon l’architecture). 1 octet (byte) = 8 bits 1 demi mot (half word) = 16 bits 1 mot (word) = 32 bits 1 double mot (double word) = 64 bits Il existe deux conventions pour l’ordre des octets: Little Endian : le bit le moins significatif se trouve à droite et le plus significatif à gauche dans un nombre binaire. Big Endian : le bit le moins significatif se trouve à gauche et le plus significatif à droite dans un nombre binaire.

2.2 L’adressage mémoire (suite) Modes d’adressage (addressing modes) Registre (Registers) Immédiat ou littéral (Immediate) (pour les constantes) Déplacement (Displacement)(pour les variables) Indirect par registre (Register referred) Indexé (Indexed) Direct ou absolu (Direct or absolute) Indirect via mémoire (Memory indirect) Auto-Incrémenté (Autoincrement) Auto-décrémenté (Autodecrement) Indexé étendu (Scaled) Malgré leur grand nombre les plus utilisés sont les modes déplacement, immédiat et indirect par registre (75% à 99% des modes utilisés dans les programmes).

2.2 L’adressage mémoire (suite) Pour ce qui est du nombre de bits pour le champ de déplacement, il convient d’avoir 12 à 16 bits et de 8 à 16 bits pour la taille du champ immédiat.

2.3 Les opérations dans le jeu d’instructions Il existe différents types d’opérateurs: Arithmétique et logique (ALU) (addition,soustraction) Transfert de données (Load and Store) (chargements et rangements) Contrôle (Branches and Jumps)(branchement, saut, appel de procédure) Système (appel au système d’exploitation) Flottant (Opérations flottantes : addition, multiplication) Décimal (Addition décimal, multiplication décimale, conversion décimal vers caractère) Chaînes (Transfert de chaînes, comparaisonde chaînes, recherche de chaînes) Graphique (Opérations sur pixels, opérations de compression/décompression)

2.3 Les opérations dans le jeu d’instructions (suite) Les instructions de contrôle Le branchement conditionnel (conditionnal branch) (très utilisés) Les sauts (jumps) (souvent utilisés) Les appels de procédure (procedure calls) (moins utilisés) Les retours de procédures (procedure returns) (moins utilisés) Les instructions les plus utilisées: 1) Chargement (22% des instructions totales exécutées) 2) Branchements conditionnels (20% des instructions totales exécutées) 3) Comparaisons (16% des instructions totales exécutées) 4) Rangement (12% des instructions totales exécutées) 5) Additions (8% des instructions totales exécutées)

2.3 Les opérations dans le jeu d’instructions (suite) Les sauts indirects sont utiles lorsque l’adresse de destination est inconnue à la compilation. Certaines structures de plus haut niveaux rencontrent justement ce besoin: Les opération de ‘case’ et ‘switch’ dans les langages de haut niveau. Les fonctions virtuelles, les méthodes. Les pointeurs de fonction. Les librairies dynamiques (DLLs) Les branchements et les sauts conditionnels, sont souvent optimisés au niveau des architectures en raison de la grande fréquence des tests simples (x=0?, x<y?).

2.4 Type et taille des opérandes Pour connaître le type d’une opérande, on peut regarder son codage dans le code opération (opcode). Il existe plusieurs types d’opérandes: Entier (Integer) Simple précision (Single precision) Flottant (Floating point) Double précision (Double precision) Caractère (Char)

Chapitre 3 : Le pipeline

3.1 Qu’est-ce que le pipeline? Technique moderne fondamentale pour réaliser des Unités Centrales (UC) rapides Semblable à une chaîne d’assemblage où chaque instruction passe à travers une série d’étapes (ou segments) fixes. Le nombre d’étapes dans un pipeline dépend de l’architecture (20 étapes pour un Pentium 4 contre 5 dans une architecture RISC) Le débit du pipeline est la fréquence à laquelle les instructions sortent de celui-ci. Le temps de passage d’une étape à une autre, s’appelle le cycle machine (machine cycle time). Elle correspond au temps le plus long entre deux étapes. En général, un cycle machine correspond à un cycle d’horloge.

3.1 Qu’est-ce que le pipeline? (suite) Le pipeline permet un parallélisme des instructions. Les 5 étages du pipeline RISC: Cycle de lecture (Instruction fetch cycle) (LI) Cycle de décodage (Instruction decode/register fetch cycle) (DI) Cycle d’exécution (Execution cycle) (EX) Cycle d’accès mémoire (Memory acces) (MEM) Cycle d’écriture du résultat (Write-back cycle) (ER) Entre chaque étage du pipeline, on retrouve un registre pipeline pour le stockage des données et l’envoie des données vers le prochain étage du pipeline.

3.2 Les obstacles du pipeline :les aléas Il existe des situations, appelées aléas, qui empêchent l’instruction suivante de flux d’instruction de s’exécuter au cycle d’horloge prévu. Il existe trois types d’aléas: Aléas structurels (structural hazards) Lorsque le matériel ne peut gérer toutes les combinaisons possibles de recouvrement d’instruction au moment de l’exécution. Aléas de données (data hazards) Lorsqu’une instruction dépend du résultat d’une instruction précédente. Aléas de contrôle (control hazards) Résultent de l’exécution en pipeline des branchements et des autres instructions qui modifient le compteur de programme (CP)

3.2 Les obstacles du pipeline :les aléas (suite) Les aléas provoquent l’ajout d’une suspension de un ou plusieurs cycles dans le pipeline (pipeline bubble(s)). Les aléas structurels Elles interviennent lorsqu’une unité fonctionnelle n’est pas totalement pipelinée ou si une ressource n’a pas été dupliquée suffisamment pour permettre à toutes les combinaisons d’instructions de s’exécuter dans le pipeline. Ex: Si une machine possède un seul port d’écriture pour le banc de registrer, alors que dans certains cas, le pipeline peut vouloir effectuer deux écritures dans le même cycle d’horloge. Il y a alors un aléa structurel Supposant tous les autres facteurs égaux, une machine sans aléa structurel aura toujours un CPI plus petit. Il est même souhaitable parfois de conserver un tel aléa plutôt que de le régler car cela influe sur les coûts et la latence de l’unité.

3.2 Les obstacles du pipeline :les aléas (suite) Illustration d’un aléa structurel dans un pipeline

3.2 Les obstacles du pipeline :les aléas (suite) Résultat d’un aléa structurel dans un pipeline

3.2 Les obstacles du pipeline :les aléas (suite) On peut régler un aléa structurel en fournissant un accès mémoire séparé pour les instructions ou diviser le cache en caches séparés pour instructions et données ou encore, en utilisant un ensemble de tampons, habituellement appelés tampons d’instructions, pour contenir ces instructions.

3.2 Les obstacles du pipeline :les aléas (suite) Les aléas de données Un effet majeur du pipeline est de modifier les caractéristiques temporelles des instructions en recouvrant leurs exécutions. Cela introduit des aléas de données et de contrôle. Un aléa de données intervient lorsque le pipeline modifie l’ordre des accès lecture/écriture aux opérandes. Supposons: DADD R1,R2,R3 DSUB R4,R1,R5 AND R6,R1,R7 OR R8,R1,R9 XOR R10,R1,R11 Toutes les instructions après DADD utilisent le résultat de l’instruction DADD. La valeur de R1 est écrite à l’étage ER du pipeline, mais l’instruction DSUB lit sa valeur pendant l’étage DI, soit quelques cycles avant qu’elle ne soit écrite en mémoire.

3.2 Les obstacles du pipeline :les aléas (suite) Si aucune solution n’est apportée, l’instruction DSUB suivant DADD lira la mauvaise valeur de R1, tout comme AND. L’instruction OR en revanche peut s’exécuter dans provoquer d’aléa si on utilise une technique simple d’implémentation, qui est implicite les schémas de pipeline. Cela consiste à lire le banc de registres dans la seconde moitié du cycle, et à écrire dans la première moitié. En revanche, l’instruction XOR opère correctement parce que sa lecture de registres intervient dans le cycle 6, après l’écriture registre.

3.2 Les obstacles du pipeline :les aléas (suite)

3.2 Les obstacles du pipeline :les aléas (suite) Le problème vu dans la figure précédente peut être résolu par une technique qui s’appelle l’envoi (fowarding). Vu que la valeur de R1 de l’instruction DADD est évaluée dans l’étage d’exécution (EX) et est ensuite placée dans le registre de pipeline (EX/MEM), il suffit d’envoyer cette valeur à cet instant vers l’endroit où l’instruction DSUB en a besoin, soit dans le registre d’entrée de l’UAL (EX). Le résultat de l’UAL du registre EX/MEM est toujours renvoyé aux registres d’entrée de l’UAL. Si le matériel d’envoi détecte que l’opération UAL précédente à écrit dans le registre correspondant à la source de l’opération UAL en cours, la logique de contrôle sélectionne le résultat envoyé comme entrée de l’UAL plutôt que la valeur lue à partir du banc de registres. Cette solution peut et va probablement entraîner des délais dans le pipeline.

3.2 Les obstacles du pipeline :les aléas (suite) Illustration de la technique de l’envoi

3.2 Les obstacles du pipeline :les aléas (suite) Considérons deux instructions i et j avec i intervenant avant j. Il existe trois types d’aléa de données: LAE (lecture après écriture) (RAW) j essaye de lire une source avant que i l’écrive, j obtient alors par erreur l’ancienne valeur. EAE (écriture après écriture) (WAW) j essaye d’écrire une opérande avant qu’il ne soit écrit par i. Les écritures se font alors dans le mauvais ordre. Cela arrive dans les pipelines qui écrivent dans plus d’un étage de pipe. EAL (écriture après lecture) (WAR) j essaye d’écrire dans une destination avant qu’elle ne soit lue par i; j obtient alors par erreur la nouvelle valeur. Ceci ne peut intervenir dans un pipeline comme celui des exemples précédents car toutes les lectures se font tôt (dans DI) et toutes les écritures se font tard (dans ER). Ces aléas sont relativement rares.

3.2 Les obstacles du pipeline :les aléas (suite) Aléas de données nécessitant des suspensions. Tous les aléas de données ne peuvent pas être gérés par le mécanisme d’envoi. Supposons: LD R1,0(R2) DSUB R4,R1,R5 AND R6,R1,R7 OR R8,R1,R9 L’instruction LD n’a pas la donnée avant la fin du cycle 4 (son cycle MEM), alors que l’instruction DSUB a besoin de cette donnée au début de ce même cycle. Dans ce cas-ci, la technique d’envois est impossible. Un élément matériel de verrouillage de pipeline va alors insérer un délais au niveau de l’instruction DSUB.

3.2 Les obstacles du pipeline :les aléas (suite)

3.2 Les obstacles du pipeline :les aléas (suite) L’ordonnancement du compilateur pour les aléas de données Plusieurs types de suspensions sont tout à fait fréquents. Le schéma de génération de code typique pour une instruction telle que A=B+C produit une suspension pour le chargement de B. Au lieu de permettre au pipeline d’insérer une suspension, le compilateur peut essayer de réarranger la séquence de code pour éliminer l’aléa, c’est l’ordonnancement du pipeline (pipeline scheduling) Les aléas de contrôle Ils peuvent dégrader d’avantage la performance du pipeline que les aléas de données. Quand un branchement s’exécute, il peut modifier ou non la valeur courante du CP (Compteur de Programme) en y mettant autre chose que CP+4 (passage à la ligne de code suivante)

3.2 Les obstacles du pipeline :les aléas (suite) Si un branchement modifie l’adresse du CP pour y mettre l’adresse destination, il s’agit d’un branchement pris, sinon il est non pris. Si un branchement est pris, le CP de l’instruction n’est pas modifié avant la fin de l’étage MEM. Pour résoudre ce problème, il existe 4 solutions: 1) On suspend donc le pipeline jusqu’à l’étage MEM, qui détermine le nouveau CP. Cette décision doit cependant se faire après que l’instruction soit décodée est reconnue comme un branchement. Il faut alors suspendre le pipeline pendant trois cycle (un cycle est une répétition de LI, et deux cycles ne font rien). Cette méthode est coûteuse en nombre de cycle et la performance du pipeline tombe de moitié. 2) Une autre méthode un peu plus complexe consiste à traiter chaque branchement comme non pris. Si il y effectivement un branchement, on procède comme en 1), en transformant l’instruction lue en NOP (aucune instruction).

3.2 Les obstacles du pipeline :les aléas (suite) 3) On peut également considérer le branchement comme toujours pris. Vu qu’il est impossible de connaître l’adresse de destination du branchement avant le décodage, cette approche n’offre aucun avantage pour une architecture comme RISC. 4)Certaines machines utilisent un schéma appelé le branchement différé (delayed branch). Cette technique est aussi utilisée dans beaucoup d’unités de contrôle microprogrammées. Dans un tel concept, on retrouve un certain nombre d’instructions après l’instruction de branchement qui sont exécutées que le branchement soit pris ou non. Celles-ci constituent des délais de branchement. Le compilateur tente alors d’optimiser ces délais, de plusieurs façons. Instruction avant (from before):le délai est rempli par uns instruction indépendante provenant d’avant le branchement. Les autres solutions sont utilisées uniquement si celle-ci est impossible.

3.2 Les obstacles du pipeline :les aléas (suite) Instruction cible (from target):le délai est remplacé par l’instruction cible du branchement. Instruction après (from fall-through):le délai est remplacé par une instruction du chemin non pris. La prédiction de branchement statique: utiliser la technologie des compilateurs. Considérons: LW R1,0(R2) DSUB R1,R1,R3 BEQZ R1,L OR R4,R5,R6 ……… L : ADD R7,R8,R9

3.2 Les obstacles du pipeline :les aléas (suite) La présence d’une instruction de chargement rangement suivi d’une instruction ALU utilisant le registre R1 nécessite une suspension. Supposons que le branchement (BEZQ) est presque toujours pris et que la valeur de R7 ne soit pas critique dans le chemin en séquence. On pourrait accélérer le code en déplaçant l’instruction ADD R7,R8,R9 juste derrière LW Pour effectuer de tel changements, on doit connaître la statistique de branchement à la compilation. Il existe deux méthodes: Examiner la structure du programme Utiliser des informations collectées sur des exécutions précédentes du programme (plus précis).

3.3 Ce qui rend le pipeline difficile à implémenter Il existe des situations exceptionnelles qui forcent la machine à annuler des instructions dans le pipeline avant qu’elles ne soient terminées. Les types d’exception Requête de composant entrée/sortie. Appel système par un programme utilisateur. Tracer l’exécution d’un programme. Point d’arrêt. Dépassement de capacité arithmétique, par excès ou par défaut, pour les entiers. Anomalie arithmétique en flottant Défaut de page Accès mémoire non aligné Violation de protection mémoire Utilisation d’une instruction non définie

3.3 Ce qui rend le pipeline difficile à implémenter Les types d’exception (suite) : Problème matériel. Défaillance de l’alimentation. Chaque exception possède des caractéristiques importantes qui déterminent quelle action est nécessaire par matériel. Les contraintes sur les exceptions peuvent se caractérises selon cinq axes en partie indépendants (voire livre de référence): Synchrone ou asynchrone (synchronous or a asynchronous). Requête utilisateur ou imposée. Masquable par l’utilisateur ou non masquable. Pendant ou entre des instructions. Reprise ou fin

3.3 Ce qui rend le pipeline difficile à implémenter Les exceptions les plus difficiles ont deux propriétés Elle interviennent au cours de l’instruction (dans le milieu de l’exécution de l’instruction en EX ou MEM) Elle doivent pouvoir être redémarrées. Le pipeline doit donc s’arrêter correctement et l’état doit être sauvegardé de façon à ce que l’instruction puisse être relancée avec un état correct. Lorsqu’une instruction survient, on peut suivre les étapes suivantes pour sauvegarder l’état du pipeline correctement: Insérer une instruction de trappe dans le pipeline sur le LI suivant On interdit les écritures pour l’instruction fautive et les suivantes jusqu’à ce que la trappe s’exécute.

3.3 Ce qui rend le pipeline difficile à implémenter Quand la routine de traitement de l’exception (handler) dans l’OS à reçu le contrôle, elle sauvegarde immédiatement le CP de l’instruction fautive.

3.4 Extension du pipeline MIPS pour traiter les opérations multicycles Pour traiter les opérations flottantes, on utilise un pipeline spécifique, semblable à celui étudié mais avec quelques nuances: L’étage EX peut se répéter autant de fois que nécessaire pour terminer l’opération. Il peut exister plusieurs unités fonctionnelles flottantes. Dans l’implémentation du MIPS, on en dénombre quatre: L’unité principale de traitement des entiers qui gère les chargements et les rangements ainsi que les opérations UAL. Le multiplieur flottant et entier. L’additionneur flottant qui gère les additions, soustractions et conversions flottantes. Le diviseur flottant et entier.

3.4 Extension du pipeline MIPS pour traiter les opérations multicycles Exemple de pipeline à plusieurs opérations simultanées

Chapitre 4 : Réalisation d’une hiérarchie mémoire

4.1 Introduction Les programmeurs veulent une quantité infinie de mémoire rapide. Le principe de localité dit la plus part des programmes d’accèdent pas tout le code ou toutes les données uniformément. La solution: une hiérarchie mémoire à plusieurs niveaux. Chaque niveau étant plus petit, plus rapide et plus coûteux que le précédent. Cette hiérarchie est imbriquée, toute donnée d’un niveau se retrouve dans le niveau inférieur.

4.2 Le B.A.-B.A des caches Cache est le nom généralement donné au premier niveau de hiérarchie mémoire que l’on rencontre en quittant l’UC. Il existe trois types d’organisation de cache: Si chaque bloc a uniquement un seule place possible dans le cache, c’est un cache à correspondance directe (direct mapped). Si un bloc peut être placé n’importe où dans le cache, c’est un cache totalement associatif (fully associative). Si un bloc peut être placé dans un ensemble restreint de places, c’ est un cache associatif par ensemble de blocs (set associative). L’ensemble est choisi par sélection de bits :

4.2 Le B.A.-B.A des caches Les trois types de cache précédent peuvent tous être considérés comme associatif par ensemble si on considère qu’un cache à correspondance directe possède 1 bloc par ensemble et un cache totalement associatif de m blocs peut être appelé associatif par ensemble de m blocs.

4.2 Le B.A.-B.A des caches Chaque bloc des caches a une étiquette adresse qui donne le numéro de bloc présent. Pour savoir si un bloc est en cache: One examine l’étiquette pour voir si elle correspond au numéro de bloc provenant de l’UC. Toutes les étiquettes sont examinées en parallèle. Pour savoir si l’information dans un bloc est valide, on ajoute un bit de validité (checksum) à l’étiquette. Si le bit n’est pas positionné, il n’y a pas d’accès valide sur cette adresse. Les 3 parties d’une adresse dans un cache associatif par ensemble ou à correspondance directe:

4.2 Le B.A.-B.A des caches Le déplacement dans le bloc sélectionne la donnée dans le bloc, le champ index est utilisé pour sélectionner l’ensemble et le champ étiquette est utilisé pour la comparaison. L’augmentation de l’associativité augmente le nombre de blocs par ensemble, ce qui diminue la taille de l’index et augmente la taille de l’étiquette. Quand échec intervient (cache miss), le contrôleur doit choisir un bloc à remplacer par la donnée désirée. Dans le cas de la correspondance directe, un seul bloc est testé pour déterminer s’il y a succès, et seul ce bloc est remplacé. Pour l’associativité totale ou par ensemble, il y a deux stratégies de remplacement du bloc: Le hasard: Les blocs candidats sont choisis de façon alétoire. Le plus ancient (Least Recently Used –LRU-): le bloc remplacé est celui qui n’a pas été utilisé depuis le plus longtemps.

4.2 Le B.A.-B.A des caches Les écritures dominent les accès cache (25% du trafic du cache de données pour les écritures). Il faut donc que celles-ci soit optimiser à fin de diminuer l’attente des processeurs. Il est possible de lire le bloc pendant que l’étiquette est lue et comparée. Ce n’est pas le cas pour l’écriture. Les écritures prennent plus de temps que les lectures. Il existe deux options pour écrire dans le cache: L’écriture simultanée (write through): L’information est écrite à la fois dans le bloc du cache et dans le bloc de la mémoire de niveau inférieur. La réécriture (write back): L’information est écrite uniquement dans le bloc du cache. Le bloc modifié du cache est recopié en mémoire principale uniquement quand il est remplacé.

4.2 Le B.A.-B.A des caches Pour diminuer le nombre de remplacements, on ajoute un bit modifié (dirty bit). Ce bit indique si le bloc a été modifié on non. S’il ne l’a pas été, le bloc n’est pas écrit lors d’un défaut de cache puisque l’information est la même au niveau inférieur. L’UC doit attendre la fin des écritures lors d’écritures simultanées. On dit alors que l’UC est en suspension d’écriture (write stall). Un tampon d’écriture (write buffer) permet à l’UC de continuer son traitement une fois que la donnée est écrite dans le tampon. Il y a deux options sur un échec d’écriture (write miss): Écriture allouée (write allocate): Chargement du bloc et écriture. Écriture non allouée (No-write allocate): Le bloc est modifié dans le niveau inférieur et non chargé dans le cache.

4.2 Le B.A.-B.A des caches Performance des caches Une bonne mesure de la performance de la hiérarchie mémoire est le temps d’accès mémoire moyen: Cette mesure est indirecte et n’est pas aussi évocatrice que le temps d’exécution.

4.2 Le B.A.-B.A des caches Améliorer les performances des caches implique: Réduire le taux d’échec Réduire la pénalité d’échec Réduire le temps d’accès réussi au cache

4.3 Réduire les défauts de cache Il existe trois types d’échecs: Obligatoire (compulsory):Le premier accès à un bloc n’est pas dans le cache, et il doit être transféré dans le cache; ils sont aussi appelés échecs de démarrage à froid. Capacité (capacity): Si le cache ne peut contenir tous les blocs nécessaires pendant l’exécution d’un programme, des échecs de capacité interviendront à cause de blocs écartés puis rappelés plus tard. Conflit (conflict): Si la stratégie de placement des blocs est associative par ensemble ou à correspondance directe, les échecs de conflit interviennent parce qu’un bloc peut être écarté et rappelé plus tard si trop de blocs doivent être placés dans son ensemble. Les différentes solutions possibles face à ces échecs sont présentés dans les pages suivantes.

4.3 Réduire les défauts de cache Première solution: Une taille de bloc plus grande. (Ancienne méthode) L’augmentation du la taille du bloc, diminue les échecs obligatoires en raison de la localité spatiale. Elle augmente aussi la pénalité d’échec (moins de blocs dans le cache, plus d’échecs de conflit). Seconde solution: Une associativité plus élevée. (Ancienne méthode) Une associativité élevée améliore les taux d’échec L’associativité à 8 blocs par ensemble est aussi efficace que l’associativité totale. Loi empirique 2:1 (un cache de taille N a environ le même taux d’échec qu’un cache associatif à deux blocs par ensemble de taille N/2). Une associativité élevée augmente le temps d’accès réussi

4.3 Réduire les défauts de cache Troisième solution: Les caches victimes (technique moderne). N’influence pas la fréquence d’horloge. Consiste à ajouter un petit cache totalement associatif entre le cache et le chemin de rechargement. Ce cache contient uniquement les blocs qui sont rejetés du cache à cause d’un échec et qui sont examinés lors d’un échez pour voir s’ils contiennent l’information désirée avant d’aller vers le niveau inférieur. Quatrième solution: des caches pseudo-associatifs (technique moderne). Les succès cache se comportent comme dans un cache à correspondance directe. Lors d’un échec, avant d’aller vers le niveau inférieur, une autre entrée cache est vérifiée (inversion du bit le plus significatif de l’index pour trouver l’autre bloc)

4.3 Réduire les défauts de cache Quatrième solution: des caches pseudo-associatifs (technique moderne). (suite) Ces caches ont un temps d’accès reussi rapide si l’accès est effectivement réussi et un temps d’accès réussi lent qui correspond à un temps d’accès réussi en plus d’un pseudo accès réussi et de la pénalité d’échec. Le danger: trop de pseudo accès réussis baisse la performance. De plus, un temps d’accès réussi peut compliquer le pipeline de l’UC. Cinquième solution: la lecture anticipée par matériel des instructions et des données (Hardware prefetching of instructions and data) Il s’agit d’une lecture anticipée dans le cache ou dans un tampon externe avant que la donnée soit réquisitionnée par l’UC Cela accélère l’accès à la mémoire principale.

4.3 Réduire les défauts de cache Cinquième solution: la lecture anticipée par matériel des instructions et des données (Hardware prefetching of instructions and data) (suite). Cette technique est faite par le matériel à l’extérieur du cache. Utilise la bande passante de la mémoire qui serait autrement inutilisée. Cette technique peut diminuer les performances si elle interfère avec le traitement des échecs. Les compilateurs peuvent aider à réduire les lectures anticipées inutiles.

4.3 Réduire les défauts de cache Sixième solution: la lecture anticipée contrôlée par le compilateur (compiler controlled prefetching). Le compilateur introduit des instructions de préchargement pour aller chercher la données avant qu’elle ne soit nécessaire. Il y a deux principaux types de lectures anticipées: La lecture anticipée de registre : charge la valeur dans un registre La lecture anticipée du cache: charge la valeur uniquement dans le cache et pas dans le registre. Chacune de ces options peut être fautive ou non fautive, c’est-à-dire que l’adresse peut ou non provoquer une exception pour des fautes d’adresses virtuelles et des violations de protection. Les prélectures fautives se transforment en NOP si elles provoqueraient normalement une exception. Les caches doivent être non bloquant : ils continuent à fournir des instructions et des données pendant qu’ils attendent l’arrivée de la donnée anticipée.

4.3 Réduire les défauts de cache Sixième solution: la lecture anticipée contrôlée par le compilateur (compiler controlled prefetching) (suite). Les instructions de prélecture provoquent un surcoût d’instructions, il faut donc s’assurer que ces surcoûts n’excèdent pas les avantages. Ex: For(i=0;i<3;i=i+1) For(j=0;j <100;j=j+1) a[i][j]=b[j][0]*b[j+1][0] Le tableau a est écrit dans l’ordre de chargement en mémoire, il bénéficie donc d’une localité spatiale contrairement au tableau b.

4.3 Réduire les défauts de cache Septième solution: les optimisations du compilateur. Aucune modification matérielle nécessaire. Tente d’améliorer la localité spatiale et temporelle des données. Quatre techniques connues: La fusion de tableaux (augmente la localité spatiale) Combiner des tableaux indépendants en un seul tableau composé de telle sorte qu’un seul bloc de cache contiennent les éléments voulus Avant: int val [size] int key[size] Après : struct merge{ int val; int key; }; Struct merge merged_array[size]

4.3 Réduire les défauts de cache L’échange de boucles Changer l’ordre d’imbrication des boucles peut faire correspondre l’ordre d’accès à l’ordre de rangement. Avant for(j=0; j<100; j=j+1) for(i=0;i<5000;i=i+1) x[i][j]=2*x[i][j]; Après for(i=0; i<5000; i=i+1) for(j=0;j<100;j=j+1)

4.3 Réduire les défauts de cache La fusion de boucles Fusionner de sections de code séparées accédant à certains tableaux en une même boucle. Les données qui sont amenées dans le cache peuvent être utilisées de nombreuses fois avant d’être rejetées. Avant for(i=0;i<N;i=i+1) for(j=0;j<N;j=j+1) a[i][j]=1/b[i][j]*c[i][j]; for(i=0;i<N; i=i+1) d[i][j]=a[i][j]+c[i][j] Après for(j=0;j<N;j=j+1){ d[i][j]=a[i][j]+c[i][j]; }

4.3 Réduire les défauts de cache Le blocage Améliore la localité temporelle. Faire le maximum d’accès aux données dans le cache avant que les données soient remplacées. Avant for(i=0;i<N;i=i+1) for(j=0;j<N;j=j+1) {r=0; for (k=0; k<N; k=k+1) r=r+y[i][k]*z[k][j]; x[i][j]=r; }; Les deux boucles internes lisent toutes N par N éléments de z, accèdent de manière répétitive aux mêmes N éléments d’une ligne de y, et écrivent une ligne de N éléments de x. Voici les accès aux trois tableaux, la zone sombre indiquant un accès restreint, la zone claire indiquant un accès plus ancien et la zone blanche indiquant l’absence d’accès.

4.3 Réduire les défauts de cache Le blocage (suite)

4.3 Réduire les défauts de cache Le blocage (suite) Le code original est changé pour calculer sur une sous matrice de taille B par B de telle sorte que les deux boucles internent calculent par étapes de taille B plutôt que de calculer du début à la fin de x et z. B est appellé le facteur de blocage. Après for(jj=0;jj<N;jj=j+B) for(kk=0;kk<N;kk=kk+B) for(i=0;i<N;i=i+1) for(j=jj; j<min(jj+B-1,N);j=j+1) { r =0; for (k=kk; k<min(kk+B-1,N); k=k+1) r=r+y[i][k]*z[k][j]; x[i][j]=r; };

4.3 Réduire les défauts de cache Le blocage (suite)

4.4 Réduire la pénalité d’échec cache L’objectif est de diminuer le temps moyen d’accès mémoire. Les tendances technologiques ont amélioré la vitesse des processeurs plus rapidement que les DRAM, ce qui a augmenté le coût relatif des pénalités d’échec avec les années. Voici cinq optimisations possibles pour répondre au problème. Première technique: Donner la priorité aux échecs lecture sur les écritures. Avec un cache à écriture simultanée, l’amélioration la plus importante est un tampon d’écriture de taille adéquate. Ces derniers compliquent cependant les choses car ils peuvent contenir des valeurs modifiées d’une case qui fait l’objet d’un échec en lecture. Il faut vérifier le contenu du tampon sur un échec lecture, et, s’il n’y a pas de conflit et si le système mémoire est disponible, de laisser continuer le traitement de l’échec lecture.

4.4 Réduire la pénalité d’échec cache Première technique: Donner la priorité aux échecs lecture sur les écritures. Les tampons d’écriture compliquent les choses car ils peuvent contenir des valeurs modifiées d’une case qui fait l’objet d’un échec en lecture. Solution la plus simple: les échec en lecture attendent jusqu’à ce que le tampon d’écriture soit vide L’augmentation du tampon d’écriture provoque cependant également l’augmentation la pénalité d’échecs en lecture. Une alternative: Vérifier le contenu du tampon d’écriture sur un échec en lecture, si n’y a aucun conflit et que la mémoire est disponible, laisser l’échec en lecture se poursuivre.

4.4 Réduire la pénalité d’échec cache Première technique: Donner la priorité aux échecs lecture sur les écritures (suite). On peut également baisser le coût des écritures dans un cache à réécriture. Supposons qu’un échec en lecture provoque un remplacement d’un bloc modifié. Au lieu d’écrire le bloc modifié en mémoire, et d’effectuer ensuite la lecture, on peut copier le bloc modifié dans un tampon, puis faire la lecture, puis l’écriture. De cette manière, la lecture que l’UC est probablement en train d’attendre, finira plus tôt. Seconde technique: Le placement par sous bloc. Si il y a trop d’étiquette pour tenir dans la puce, on peut choisir de plus gros blocs, ce qui réduit le stockage des étiquettes dans décroître la quantité d’information que l’on peut ranger dans le cache. Cela baisser le taux d’échec mais augmentera la pénalité d’échec.

4.4 Réduire la pénalité d’échec cache Seconde technique: Le placement par sous bloc (suite). Un alternative: le placement en sous-blocs. Un bit valide est ajouté à des unités plus petites que le bloc entier, appelées sous-blocs. Ce bit spécifie la validité de certaines parties su bloc. En plus de l’égalité de l’étiquette, le bit de validité doit également être positionné pour que le mot soit dans le cache. La pénalité d’échec des sous-blocs est alors réduite.

4.4 Réduire la pénalité d’échec cache Troisième technique:le redémarrage précoce et le mot critique en premier. Les deux première techniques nécessitent du matériel supplémentaire. Principe: l’UC a juste besoin d’un mot d’un bloc à la fois. On n’attend pas que le bloc complet soit chargé avant d’envoyer le mot demandé à l’UC et redémarrer. Deux stratégies existent: Redémarrage précoce: Aussitôt qu’arrive le mot demandé du bloc, l’envoyer à l’UC et laisser l’UC continuer l’exécution. Le mot critique en premier: Aller chercher d’abord en mémoire le mot manquant et l’envoyer à l’UC dès qu’il arrive; laisser l’UC continuer l’exécution pendant qu’on remplit le reste des mots du bloc.

4.4 Réduire la pénalité d’échec cache Quatrième technique:les caches non bloquants pour réduire les suspensions sur les défauts de cache (non blocking caches to reduce stalls on cache misses). Un cache non bloquant permet au cache de données de continuer à fournir des accès réussis pendant le traitement d’un échec. Cette optimisation ‘accès réussis pendant le traitement d’un échec’ réduit la pénalité d’échec effective en utilisant le cache pendant le traitement d’un échec au lieu d’ignorer les requêtes de l’UC.

4.4 Réduire la pénalité d’échec cache Cinquième technique: les caches de second niveau. Solution indépendante de l’UC. Met l’accent sur l’interface entre le cache et la mémoire principale. L’ajout d’un autre niveau de cache entre le cache originel et la mémoire permet au premier niveau de cache d’être assez petit pour atteindre le temps de cycle de l’UC alors que le second niveau de cache peut être assez grand pour capturer beaucoup d’accès qui iraient à la mémoire principale, en réduisant ainsi la pénalité d’échec effective.

4.5 Réduire le temps de l’accès réussi Première technique: des caches petits et simples. Une partie importante du temps d’accès réussi au cache es l’utilisation de la partie index de l’adresse pour lire la mémoire d’étiquettes et ensuite de la comparer à l’adresse. Garder un cache petit pour qu’il tienne dans le même circuit que le processeur pour éviter la pénalité temporelle liée à la sortie du boîtier. Seconde technique: éviter la traduction d’adresse durant l’indexation du cache. Un adresse virtuelle sur disque doit être transcrite en adresse physique pour accéder au contenu mémoire par le processeur. Les accès réussis sont beaucoup plus courants avec les adresses virtuelles sur le cache.

4.5 Réduire le temps de l’accès réussi Seconde technique: éviter la traduction d’adresse durant l’indexation du cache (suite). L’adressage virtuel élimine le temps de traduction de l’adresse du temps de l’accès réussi. Il ne serait cependant pas judicieux de construire que des caches adressés virtuellement car à chaque fois qu’un processus (programme) est commuté, les adresses virtuelles réfèrent des adresses physiques différentes, ce qui nécessite une purge du cache. Une purge du cache trop fréquente augmente énormément les taux d’échec. De plus, les systèmes d’exploitation et les programmes utilisateurs peuvent utiliser deux adresses virtuelles différentes pour la même adresse physique (synonymes) peuvent conduire à deux copies de la même donnée dans un cache virtuel.

4.5 Réduire le temps de l’accès réussi Seconde technique: éviter la traduction d’adresse durant l’indexation du cache (suite). De manière à obtenir le meilleur des deux types de caches, est d’utiliser le déplacement dans la page, qui est la partie non affectée par la traduction d’adresses, pour indexer le cache pendant que l’on envoie la partie virtuelle à traduire. Cependant, le cache à correspondance directe ne peut pas être plus gros que la taille de la page. Troisième technique: pipeliner les écritures pour des écritures réussies rapides. Les écritures réussies prennent plus longtemps que les lectures réussies parce que les étiquettes doivent être vérifiées avant d’écrire la donnée.

4.5 Réduire le temps de l’accès réussi Troisième technique: pipeliner les écritures pour des écritures réussies rapides (suite) L’étiquette et les données sont séparées pour qu’elles puissent être adressées indépendamment. Sur une écriture, la cache compare l’étiquette avec l’adresse courante de l’écriture. La différence concerne l’écriture de la partie données du cache qui intervient durant la comparaison d’étiquettes. Elle doit utiliser une autre adresse, puisque l’adresse d’écriture courante est encore en cours de vérification. Le cache utilise l’adresse et la donnée de la précédente écriture, qui a déjà été reconnue comme un succès. Le pipeline logique est entre les écritures: la seconde étape de l’écriture intervient durant la première étape de l’écriture suivante.

4.5 Réduire le temps de l’accès réussi Troisième technique: pipeliner les écritures pour des écritures réussies rapides (suite). Les écritures peuvent donc être effectuées de manière continue au rythme d’une par cycle parce que l’UC n’a pas à attendre la comparaison d’étiquettes avant d’écrire.

4.6 Le B.A.-BA. sur la mémoire principale. La latence des mémoires se mesure principalement avec le temps d’accès et le temps de cycle. Le temps d’accès est le temps écoulé entre une demande de lecture et le moment où le mot demandé arrive. Le temps de cycle est le temps minimum entre deux requêtes successives à la mémoire. La moitié de l’adresse est d’abord envoyée, pendant le signal d’écriture des accès (RAS). L’autre moitié de l’adresse est envoyée pendant le signal d’écriture des accès colonnes (CAS). Les DRAM utilisent un seul transistor pour stocker un bit. Pour empêcher la perte d’information, chaque bit doit être rafraîchi périodiquement (Dynamic Random Acces Memory)

4.6 Le B.A.-BA. sur la mémoire principale. La technologie mémoire. Les SRAM (Static Random Access Memory) utilisent 4 à 6 transistors par bit pour éviter un rafraîchissement. Contrairement au DRAM, il n’y pas de différence entre le temps d’accès et le temps de cycle. La plus part de ordinateurs vendus depuis 1975 est composée de DRAM. Seules les caches utilisent de la SRAM. Au fur et à mesure que les DRAM augmentaient en capacité, le coût de mémoires avec l’ensemble des lignes d’adresses devenait un problème. La solution: multiplexer les lignes d’adresses.

4.6 Le B.A.-BA. sur la mémoire principale. Organisation pour améliorer les performances de la mémoire principale. Augmenter le débit des mémoires. Première technique: une mémoire principale élargie L’augmentation de largeur de la mémoire, diminue généralement la pénalité d’échec. Il y a un coût à l’élargissement : la bus mémoire. L’UC accèdera encore mot par mot et un multiplexeur est maintenant nécessaire entre le cache et l’UC. Également, si un utilisateur veut étendre sa mémoire, l’incrément minimum est doublé ou quadruplé quand la largeur est doublée ou quadruplée.

4.6 Le B.A.-BA. sur la mémoire principale. Seconde technique: la mémoire entrelacée simple Accroître la largeur de bande augmente la bande passante. Un autre façon est d’exploiter le parallélisme potentiel en ayant beaucoup de DRAM dans un système mémoire. Utiliser la bande passante de toutes les DRAM dans le système. Les bancs ont souvent une largeur d’un mot. L’envoi d’adresses à plusieurs bancs leur permet à tous de lire simultanément. Une mémoire entrelacée est une mémoire avec bancs, dont les mots sont entrelacés. Ceci optimise les accès mémoires seéquentiels.

4.6 Le B.A.-BA. sur la mémoire principale. Troisième technique: des bancs mémoires indépendants. Les bancs mémoires permettaient une bande passante élevée en entrelaçant des accès séquentiels. Une généralisation des bancs est de permettre plusieurs accès indépendants, avec plusieurs contrôleurs mémoires pour permettre aux banc d’opérer indépendamment. Quatrième technique: éviter le conflits de bancs mémoire. L’augmentation du nombre de bancs entraînent quand même plusieurs conflits. Uns solution serait d’utiliser un compilateur pour éviter d’accèder au même banc et réduire ainsi les conflits.

4.6 Le B.A.-BA. sur la mémoire principale. Entrelacement spécifique aux DRAM pour améliorer les performances des mémoires principales. Le temps d’accès des DRAM se divise en accès ligne et accès colonne. Les DRAM mémorisent une ligne de bits dans un registre tampon du circuit pour l’accès colonne. Cette ligne est généralement la racine carrée de la taille de la DRAM. Trois modes d’optimisation: Le mode ‘nibble’ : La DRAM peut fournir trois bits supplémentaires depuis des cases séquentielles pour chaque RAS. Le mode page : Le tampon agit comme une SRAM; en changeant l’adresse colonne, on peut accéder à n’importe quel bit du tampon jusqu’au prochain accès ligne ou jusqu’au moment du rafraîchissement. Colonne statique : Très semblables au mode page, sauf qu’il n’est pas nécessaire d’agir sur la ligne d’échantillonnage de l’accés colonne à chaque fois que les adresses colonne changent.

4.6 Le B.A.-BA. sur la mémoire principale. Entrelacement spécifique aux DRAM pour améliorer les performances des mémoires principales (suite). De nouveaux types de DRAM on vu le jour, optimisant l’interface entre la DRAM et l’UC. RAMBUS supprime RAS et CAS, les remplaçant par un bus qui permet d’autres accès sur le bus entre l’envoi de l’adresse de retour de la donnée. VRAM est un DRAM avec une ligne de sortie série rapide, utilisée pour piloter les consoles.

4.7 Mémoire virtuelle Chaque processus (programme qui tourne sur une machine) possède un espace d’adressage. On ne peut pas attribuer à chaque processus un espace d’adressage mémoire complet. On doit répartir une quantité beaucoup plus petite de mémoire physique entre plusieurs processus. La mémoire virtuelle divise la mémoire physique en blocs qu’elle alloue à différents processus. Cette approche implique un système de protection qui confine un processus aux blocs qui lui appartiennent effectivement. La mémoire virtuelle fut inventée pour décharger les programmeurs.

4.7 Mémoire virtuelle Elle gère automatiquement les deux niveaux de hiérarchie mémoire (mémoire principale et secondaire). La mémoire virtuelle simplifie le chargement et le déchargement du programme pour l’exécution (relogeabiblité). Un bloc de mémoire physique est l’équivalent d’une page de mémoire virtuelle. L’UC fournit des adresses virtuelles qui sont traduites, par une combinaison matérielle et logicielle, en adresses physiques, utilisées pour accéder à la mémoire principale. C’est la correspondance mémoire ou traduction d’adresse (memory mapping or address translation).

4.7 Mémoire virtuelle

4.7 Mémoire virtuelle Il existe quelque différences quantitatives entre la mémoire virtuelle et les caches: Le remplacement, lors de défauts de cache, est contrôlé essentiellement par matériel, alors que le remplacement dans la mémoire virtuelle est contrôlé essentiellement par le système d’exploitation. La taille de l’adresse du processeur détermine la taille de la mémoire virtuelle alors que la taille du cache est normalement indépendante de l’adresse du processeur. Il existe deux catégories de mémoire virtuelle: Blocs de taille fixe : pages (entre 4096 et 65536 octets). Blocs de taille variable : segments (entre 1 octet et 2^32 octets).

4.7 Mémoire virtuelle L’adressage paginé a une seule adresse, de taille fixe, divisée en numéro de page et adresse dans la page, comme pour l’adressage du cache. Pour l’adressage segmenté, nécessite un mot pour le numéro de segment et un mot pour le déplacement dans le segment, soit un total de deux mots. Un espace d’adressage segmenté est plus simple pour le compilateur. Aujourd'hui, quelques machines utilisent une approche hybride : la segmentation paginée, où un segment correspond à un nombre entier de pages, ce qui simplifie le remplacement des pages.

4.7 Mémoire virtuelle Une autre approche hybride plus récente correspond aux machines qui offrent plusieurs tailles de page, les tailles les plus grandes étant une puissance de deux fois la plus petite taille de page. La pénalité d’échec pour une mémoire virtuelle correspond à l’accès à un disque magnétique tournant. Celle-ci est donc relativement importante. Les systèmes d’exploitation permettent aux blocs d’être situés n’importe où en mémoire principale.

4.7 Mémoire virtuelle La pagination et la segmentation sont basées sur une structure de données qui est indexée par le numéro de page ou de segment. Cette structure contient l’adresse physique du bloc. Pour la segmentation, l’adresse dans la page est ajoutée à l’adresse physique du segment pour obtenir l’adresse virtuelle finale.

4.7 Mémoire virtuelle Pour la pagination, l’adresse dans la page est simplement concaténée au numéro de page physique. La structure de données contenant les numéros de page physique se retrouve sous une table des pages. Pour réduire la taille de cette structure, certaines machines appliquent une fonction de hachage à l’adresse virtuelle. Pour réduire le temps de traduction d’adresse, ont utilise un cache dédié à ces traductions, le tampon de traduction anticipé (translation lookaside bufferi) TLB. L’OS est responsable de minimiser les défauts de page. Ces derniers utilisent la technique LRU avec un bit de référence pour effectuer ce remplacement.

4.7 Mémoire virtuelle Durant une écriture la stratégie est toujours une réécriture. Le coût d’un accès inutile est très grand, on utilise donc un bit modifié, de telle sorte que les seuls blocs écrits sur disque sont ceux qui ont été modifiés depuis leur chargement à partir du disque. Les techniques de traduction rapide d’adresse. Les tables de pages sont rangées en mémoire principale (très grande taille) Les accès mémoires sont donc au moins deux fois plus long (1 accès pour l’adresse physique et un autre pour la donnée) Ce coût est trop grand. Un solution: mémoriser la dernière traduction pour que le processus de correspondance n’intervienne pas si l’adresse courante correspond à la même page que l’adresse précédente.

4.7 Mémoire virtuelle Une autre solution générale consiste à localiser les traductions d’adresses, comme les accès. En conservant les traductions d’adresses dans un cache spécial, un accès mémoire utilise rarement un second accès pour obtenir la donnée: c’est le TLB. Une entrée TLB contient une étiquette avec des parties de l’adresse virtuelle et une données qui contient un numéro de page physique, le champ de protection, le bit de valide et généralement le bit d’utilisation et le bit modifié. Les étapes de traductions sont: Envoi de l’adresse virtuelles à toutes les étiquette. On s’assure que l’étiquette est marquée comme valide. On s’assure qu’il n’y a pas de violation de la protection mémoire. L’étiquette qui coïncide envoie l’adresse physique à travers le multiplexeur 32:1.

4.7 Mémoire virtuelle La sélection d’une taille de page Le déplacement dans la page est alors combiné avec le numéro de page physique pour constituer une adresse physique complète sur 34 bits. La sélection d’une taille de page Arguments pour une grande taille sur une petite taille: La taille de la table des pages est inversement proportionnelle à la taille de la page. La taille de la mémoire peut ainsi être réduite avec des pages plus grandes. Une taille de page plus grande facilite des temps de succès cache rapides. Le transfert de plus grandes pages vers ou depuis la mémoire secondaire, éventuellement à travers le réseau, est plus efficace que le transfert de petites pages. Le nombre d’entrées du TLB est limitée.

4.7 Mémoire virtuelle La motivation principale pour une taille de page plus petite est la minimisation de l’espace mémoire. Une taille de page plus petite conduira à moins de pertes quand une région contïgue de mémoire virtuelle n’est pas gale en taille à un multiple de la taille des pages. Cette mémoire inutilisée se nomme la fragmentation interne.

Chapitre 5 : Les systémes de stockage

5.1 Les types de composants de stockage Les disques magnétiques. Haute capacité Mémoire à long terme non volatile 1 à 20 plateaux rotatifs avec des disques métalliques recouverts avec un matériel d’enregistrement magnétique des deux côtés. La surface des disques est divisé en cercles concentriques (pistes). Il y a entre 500 et 2500 pistes sur chaque surface. Chaque piste est divisée en secteurs qui contiennent les informations. Un secteur est la plus petite unité qui peut être écrite ou lue. Il y environ 64 secteurs par piste. Généralement toutes les pistes ont le même nombre de secteurs. Les pistes extérieures sont plus longues et enregistrent l’information à une densité plus faible que les pistes intérieures.

5.1 Les types de composants de stockage Avec l’arrivé d’interfaces ‘intelligentes’ comme SCSI, il est possible d’enregistrer plus de secteurs par piste. Pour lire ou écrire, un bras mobile avec une tête de lecture/écriture est situé au-dessus de chaque surface. Les bras se déplacent ensemble au dessus de la même piste de toutes les surfaces. Un cylindre est l’ensemble des pistes sous le bras en un point donné de toutes les surfaces. Lors d’un lecture ou d’une écriture, le contrôleur de disque envoie une commande pour déplacer le bras sur la bonne piste (seek). Le temps nécessaire à cette opération est le temps de recherche. Le temps pour que le secteur désiré atteigne la tête est appelé délais de rotation. Les nouveaux disques atteignent des vitesses de 7200 tours par minute (RPM).

5.1 Les types de composants de stockage Le temps pour que le secteur désiré atteigne la tête est appelé délais de rotation. Les nouveaux disques atteignent des vitesses de 7200 tours par minute (RPM). Le temps de transfert est le temps nécessaire pour transférer un bloc de bits, typiquement un secteur. Cette variable dépend de la taille du bloc, de la vitesse de rotation, de la densité d’enregistrement d’une piste et de la vitesse de l’électronique interconnectant le disque à l’ordinateur. Le temps contrôleur est le surcoût que le contrôleur impose pour effectuer l’accès E/S.

5.1 Les types de composants de stockage L’avenir des disques magnétiques. L’amélioration de la capacité des disques s’exprime par la densité par unité de surface. L’utilisation de DRAM en tant que disques. Solid state disks (SSD). Ce sont des DRAMs avec une batterie pour rendre le système non volatile. Il fait appel au système d’exploitation pour le transferts. Une autre technologie est le stockage étendu (Extended Storage). C’est une grande mémoire qui autorise uniquement des transferts de blocs depuis et vers la mémoire principale. Les deux techniques ont des temps de recherche courts et un grand débit de transfert.

5.1 Les types de composants de stockage Les disques optiques. CD-ROM. Ils sont peu chers à fabriquer. Lecture seule (Les données sont non modifiables). Il existe des CD réinscriptibles (plus lents que le CD-ROM) oú l’information peut être inscrite un nombre limité de fois. Les bandes magnétiques. Même technologie que les disques magnétiques mais beaucoup moins chère en raison la géométrie de la bande qui ne permet pas un accès aléatoire. Accès séquentiel Utilisé principalement pour les sauvegardes. Les bibliothèques automatiques de bandes. Couplage de plusieurs bandes magnétiques gérées par un robot. Enorme quantité d’information peut y être stockée.

5.2 Les bus – la connexion de composants d’E/S à l’UC et la mémoire. Un bus permet la communication entre les interfaces (UC, mémoires, périphériques…). Les bus sont très souples et peu chers. Inconvénient: crée un goulot d’étranglement pouvant limiter le débit maximal d’E/S. Le design des bus est difficile car la vitesse maximale du bus est limitée par des facteurs physiques (longueur du bus et le nombre de composants). Ces limites empêchent d’accélérer à volonté le bus. On veut des bus à E/S fréquentes et des débits d’E/S élevés, ce qui pose des contraintes de conception contradictoires. Il y a deux types de bus: Bus UC-mémoire (courts,très rapide) Bus E/S (longs,moins rapide)

5.2 Les bus – la connexion de composants d’E/S à l’UC et la mémoire. Une transaction typique: Envoyer l’adresse. Recevoir/envoyer la donnée. Les termes lecture et écriture se font par rapport à la mémoire. Une lecture transfert les données depuis la mémoire vers sa destination Une écriture, écrit des données en mémoire. Les décisions pour concevoir un bus Largeur du bus Largeur de données Taille du transfert Transaction éclatée Horloges

5.2 Les bus – la connexion de composants d’E/S à l’UC et la mémoire. Seules les maîtres du bus peuvent peuvent démarrer une transaction lecture ou écriture. Un bus a plusieurs maîtres quand il y a plusieurs UC ou quand les composants d’E/S peuvent initialiser une transaction sur le bus. Un système d’arbitrage permet de gérer les différents maîtres. Avec plusieurs maîtres, un bus peut offrir une bande passante plus élevée en manipulant des paquets, par opposition à l’utilisation bloquée du bus pour une transaction complète. Cela se nomme les transactions éclatées. Un bus utilisant ce système possède une plus grande bande passante mais possède également une latence plus importante qu ’un bus qui est conservé pendant la totalité de la transaction. Un bus peut être synchrone (possède une horloge et un protocole pour les données et les adresses par rapport à l’horloge) ou asynchrone.

5.2 Les bus – la connexion de composants d’E/S à l’UC et la mémoire. Les bus synchrones sont généralement rapides et peu chers mais en contrepartie, tout le bus doit fonctionner à la même fréquence d’horloge. Un bus asynchrone n’a pas d’horloge, il possède des protocoles de poignée de main (hand shaking). Ce type de bus permet l’allongement du bus sans se préoccuper de dispersions d’horloge. L’interface des composants de stockage avec l’UC. Le bus E/S peut être connecté à la mémoire ou au cache Dans le cas où il est connecté à la mémoire: Une commande E/S sur le bus peut interférer avec une autre lecture d’instruction par l’UC. La méthode la plus courante d’adressage d’un composant d’E/S par l’UC est nommée ‘Les E/S mappées en mémoire’ Des parties de l’espace adressable sont affectées aux composants d’E/S

5.2 Les bus – la connexion de composants d’E/S à l’UC et la mémoire. Une autre méthode consiste à utiliser des codes opérations dédiés aux E/S dans l’UC. L’UC envoie un signal indiquant qu’une adresse est pour des composants E/S. Quelle que soit la technique d’adressage choisie, chaque composant E/S a des registres pour fournir des informations d’état et de contrôle. Ces registres d’état sont continuellement testés par l’UC pour savoir si la prochaine opération d’E/S est prête. C’est l’interrogation (polling). Cette interrogation gaspille une grande quantité de temps UC. Pour cette raison, les architectures modernes utilisent un système de d’interruptions qui permet de décharger l’UC, lui donnant plus de temps pour l’exécution des processus. Cette technique est la clé des systèmes d’exploitation multitâches.

5.2 Les bus – la connexion de composants d’E/S à l’UC et la mémoire. Cette technique provoque cependant un surcoût pour les OS. Dans certains cas où il y a des centaines d’opération d’E/S par seconde (temps réel), cela devient insupportable pour l’OS. Retirer à l’UC la responsabilité des E/S. Les interruptions libérent l’UC de l’attente de chaque événement d’E/S mais il y encore beaucoup de cycles UC passés en transferts de données. Des dispositifs d’accès direct mémoire (DMA) sont ajoutés à beaucoup d’ordinateurs pour permettrent des transferts d’un grand nombre de mots sans intervention de l’UC. Le DMA est un processeur spécialisé qui transfère des données entre la mémoire et un composant E/S pendant que l’UC s’occupe d’autres tâches. Il est extérieur à l’UC et doit agir comme un maître du bus.

5.2 Les bus – la connexion de composants d’E/S à l’UC et la mémoire. Il est extérieur à l’UC et doit agir comme un maître du bus. L’UC initialise d’abord les registres du DMA, qui contiennent une adresse mémoire et le nombre d’octets à transférer. Une fois le transfert DMA terminé, le contrôleur interrompt l’UC. Il peut y avoir plusieurs composants DMA dans un ordinateur Il est possible d’accroître la performance DMA et donc décharger d’avantage l’UC: des composants appelés processeurs d’E/S (I/O processor controller) opèrent à partir de programmes fixes ou de programmes chargés par l’OS. Celui-ci établit généralement une file d’attente de blocs de contrôle E/S qui contiennent des informations telles que la localisation de données et la taille des données. Le processeur d’E/S prend alors les informations dans la file, fait tout ce qui est demandé et envoie une interruption seulement lorsque la tâche spécifiée dans les blocs de contrôle des E/S est terminée.

5.3 Mesures des performances des E/S. Deux mesures : Bande passante E/S Latence E/S Modèle client-serveur: Le client crée des tâches à réaliser et les place dans un tampon; le serveur les prend dans un tampon de type FIFO (premier entré, premier sorti) et les exécute. Le temps de réponse est défini comme le temps qui s’écoule entre le moment où une tâche est placée dans le tampon et le moment où le serveur termine son exécution.

5.3 Mesures des performances des E/S. Le débit est le nombre moyen de tâches effectuées par le serveur pendant une période donnée.

5.4 Fiabilité, disponibilité et RAID La fiabilité peut seulement être accrue par l’amélioration de l’environnement, en construisant des composants plus fiables. La disponibilité détermine s’il un système donné est encore en mesure de performer malgré une contrainte donnée. Une innovation qui améliore à la fois la disponibilité et la performance d’un système de stockage correspond aux matrices de disques. Puisque le prix par méga octet est indépendant de la taille du disque, le débit potentiel peut être augmenté en ayant beaucoup de contrôleurs de disques, et donc beaucoup de bras de disques. L’inconvénient : avec trop de composants, la fiabilité chute : N composants ont généralement 1/N fois la fiabilité d’un seul composant.

5.4 Fiabilité, disponibilité et RAID Une matrice de disque ne peut jamais être plus fiable qu’un petit nombre de disques de plus grande capacité si chaque disque a le même taux de pannes. La disponibilité peut cependant être améliorée en ajoutant des disques redondants. Si un disque tombe en panne, l’information perdue peut être reconstituée à partir de l’information redondante. Le seul danger: avoir une nouvelle panne disque entre le moment où un disque tombe en panne et le moment où il est remplacé, c’est le temps moyen jusqu’à réparation (mean time to repair – MTTR). Ces systèmes de disques redondants porte le nom de RAID (Redundant Array of Inexpensive Disks).

5.4 Fiabilité, disponibilité et RAID RAID 1: Disques miroir. Utilise le double du nombre de disques. Chaque données est écrite sur le deux disques. Il y constamment deux copies de l’information. Si un disque tombe en panne, le système s’adresse au ‘miroir’ pour obtenir l’information. RAID 3: La parité entrelacée au niveau du bit. Au lieu d’avoir une copie complète de toute l’information, on a juste besoin de suffisamment d’information redondante pour reconstituer l’information perdue en cas de défaillance. Les lectures et les écritures vont vers tous les disques du groupe, avec un disque supplémentaire pour contenir l’information de vérification au cas où il y ait une défaillance.

5.4 Fiabilité, disponibilité et RAID RAID 3: La parité entrelacée au niveau du bit (suite). Quand un disque tombe en panne, on soustrait alors toutes les données des bons disques des données du disque de parité. L’information résultante est l’information manquante. La parité est simplement la somme modulo 2. RAID 5: La parité distribuée entrelacée par bloc. Même organisation des disques mais les données sont accèdées différemment. De petites écritures peuvent être faites en parallèle La parité associée à chaque ligne de blocs de données n’est plus restreinte à un seul disque. Cela permet plusieurs écritures simultanées si les unité de découpage ne sont pas situées sur les mêmes disques.

Chapitre 6 : Réseaux d’interconnexion

6.1: Introduction Utilité : connecter un ensemble d’ordinateurs pour former une communauté. Une communauté est composée de: Nœuds (node) Interface logicielle (software interface) Interface matérielle (hardware interface) Lien (link) Réseau d’interconnexion (interconnection network)

6.1: Introduction En fonction de nombre de nœuds et de leur proximité, les réseaux ont plusieurs noms: Réseau de machine massivement parallèle (massively parallel network processor) Peut connecter des milliers de nœuds Distance maximale généralement de moins de 25 mètres Réseau local (local area network LAN) Peut connecter des centaines à des milliers d’ordinateurs La distance peut atteindre quelques kilomètres Réseau longue distance (wide area network) Connexion de milliers d’ordinateurs Connexion à travers le monde

6.2: Un réseau simple Réseau de 2 ordinateurs: Les machines communiquent par messages C’est une partie logicielle du système d’exploitation qui permet de traduire les requêtes (messages) L’envoie du message se déroule comme ci-dessous: L’application copie la donnée à envoyer dans un tampon du système d’exploitation

6.2: Un réseau simple La réception du message suit alors: Le système d’exploitation calcule le code de redondance, l’incluse dans l’en-tête ou la queue du message, et démarre alors le chronomètre Le système d’exploitation envoie la donnée dans le matériel d’interface réseau et indique au matériel d’envoyer le message. La réception du message suit alors: Le système copie la donnée depuis le matériel de l’interface réseau dans le tampon du système d’exploitation. Le système calcule le code de redondance sur les données. Si ce code correspond au code de redondance de l’émetteur, le récepteur renvoie un accusé de réception à l’émetteur. Sinon, il supprime le message,,en supposant que l’émetteur l’expédiera à nouveau quand le temps associé à l’envoi sera écoulé. Si la donnée passe le test, le système copie la donnée dans l’espace d’adressage de l’utilisateur et indique à l’application de continuer.

6.2: Un réseau simple Format de message Cette suite de règles que suit le logiciel se nomme un protocole Ex: UDP/IP, TCP/IP

6.2: Un réseau simple Pour quantifier les performances des réseaux, on utilise plusieurs mesures: La bande passante (bandwith): Délai maximal avec lequel le réseau d’interconnexion peut propager l’information une fois que le message est entré dans le réseau. Le temps de transmission (transmission time): Temps pour que le message qui passe à travers le réseau soit égal à la taille du message divisé par la bande passante. Le temps de transit (time of flight): temps pour que le premier bit du message arrive au récepteur. Cela comprend les délais dûs aux répéteurs ou autres éléments matériels dans le réseau. La latence de transport (transport latency): La somme du temps de transit et du temps de transmission. Surcoût émetteur (sender overhead): temps pour que le processeur injecte le message dans le réseau d’interconnexion.

6.2: Un réseau simple Surcoût récepteur (receiver overhead): Temps pour que le processeur retire le message du réseau d’interconnexion.

6.3: Connecter le réseau d’interconnexion à l’ordinateur Les machines massivement parallèle utilisent typiquement le bus mémoire alors que les réseaux locaux et logue distance se connectent sur le bus d’E/S En général, les gros messages sont envoyés plus efficacement par un DMA. Pour la réception, de message, il faut faire en sorte d’éviter de faire appel au système d’exploitation.

6.4: Les supports des réseaux d’interconnexion Il existe plusieurs supports pour permettre aux machines de communiquer entre elles: Paire torsadée (twisted pair):peut transférer quelques megabits/s sur plusieurs kilomètres sans amplification. Câble coaxial :un câble de 50 ohms peut délivrer 10 mégabits/s sur 1 kilomètre. Fibre optique (fiber optic): Transmettent l’information sous forme d’impulsion de lumière. Elle sont unidirectionnelles. Fibre multimode : permet à la lumière de se disperser et utilise comme source de lumière des LED bon marché. Permet de transporter l’information à 1000M bits/s sur quelques centaines de mètres ou à 100 M bits/s sur quelques kilomètres. La fibre monomode: possède une seule longueur d’onde. Transporte des gigabits d’information par seconde sur des centaines de kilométres.

6.4: Les supports des réseaux d’interconnexion Connecter des fibres monomodes est beaucoup plus difficile que de connecter des fibres multimodes.

6.5: Connecter plus de deux ordinateurs Support partagé ou commuté La manière la plus simple de connecter plusieurs ordinateurs est de les faire partager un seul support d’interconnexion. Le réseau local le plus populaire est ethernet. Si le support est partagé, il doit y avoir un mécanisme pour coordonner l’utilisation du support partagé, pour qu’un seul message soit envoyé à la fois. Si le réseau contient un grand nombre de nœuds sur un plusieurs kilomètres, il faut alors un arbitrage distribué. Un nœud écoute d’abord pour être sûr qu’il n’envoie pas un message pendant qu’un autre message est sur le réseau. Si par hasard, deux messages se trouvent sur le réseau en même temps, il y a collision (deux nœuds envoient un message en même temps)

6.5: Connecter plus de deux ordinateurs L’interface réseau peut essayer de détecter ces collisions en regardant si plusieurs messages ont été mélangés. C’est la détection de collision. Les supports partagés sont bon marché mais ils ont une bande passante limitée Un alternative au partage du support est d’avoir une ligne dédiée vers un commutateur (switch) qui fournit à son tour une ligne dédiée vers d’autres destinations. La bande passante est grandement améliorée. Les commutateurs permettent une communication directe de la source vers la destination, sans que des nœuds intermédiaires interfèrent avec cette communication (point to point communication)

6.5: Connecter plus de deux ordinateurs Topologie de commutateur Plusieurs topologies théoriques, mais très peu sont implantées dans l’industrie. On en nomme deux: Topologie des machines massivement parallèles (MMP) Topologie des réseaux locaux et longue distance Un réseau crossbar permet à tout nœud de communiquer avec tout nœud avec une seule traversée du réseau. Un réseau Oméga utilise moins de matériel que le réseau crossbar (n log2 n au lieu de n2). On appelle contention les différents blocages possibles entre les nœuds. Une autre topologie consiste en un arbre avec une augmentation de la bande passante dans l’arbre pour répondre aux besoins des configurations courantes de communication.

6.5: Connecter plus de deux ordinateurs Une autre solution pour un commutateur distribué est un réseau qui connecte une suite de noeuds. C’est la topologie de l’anneau. Un anneau set capable de plusieurs transferts simultanés, contrairement aux lignes partagées. Une variante des anneaux qui est utilisée dans les réseaux locaux est appelée anneau à jetons (token ring). Un seul emplacement (le jeton) est passé le long de l’anneau pour déterminer que nœud peut envoyer un message. Un nœud ne peut envoyer un message que s’il obtient le jeton. Routage: délivrer les messages Le support commuté utilise trois solutions de routage Le routage à partir de la source: le message spécifie le chemin vers la destination. Le circuit virtuel: Un circuit est établi entre la source et la destination. Le message ensuite le chemin qu’il suit.

6.5: Connecter plus de deux ordinateurs Le routage fondé sur la destination: un message contient une adresse destination et le commutateur doit choisir un chemin pour délivrer le message. Dans les réseaux longue distance, les commutateurs routent les message avec la politique ranger et propager (store and forward). Chaque commutateur attend que le message complet arrive au commutateur avant de l’envoyer au commutateur suivant. Le contrôle de congestion Lorsque la bande passante diminue, l’interconnexion peut devenir engorgée avec trop de paquets. La solution de base: éviter de faire entrer de nouveaux paquets avant que le trafic soit réduit. Pour ce faire, trois méthodes existent: Suppression de paquets : si un paquet arrive à un commutateur et qu’il n’y a pas de place dans le tampon, le paquet est supprimé.

6.5: Connecter plus de deux ordinateurs Contrôle de flux: Utiliser une contre réaction pour indiquer à l’émetteur quand il est autorisé à envoyer le paquet suivant. Paquets de notification de congestion: c’est à chaque commutateur de voir son niveau d’occupation et d’entrer dans un état d’avertissement quand il dépasse un certain seuil. Chaque paquet reçu dans un état d’avertissement sera renvoyé à la source via un paquet de notification de congestion qui comprend la destination voulue.

6.6: Les questions pratiques pour les réseaux d’interconnexion commerciaux La normalisation les standards populaires sont peu chers et très stable. Une norme permet à beaucoup de sociétés de fabriquer de produits avec des interfaces pour la norme, et le client n’a pas à attendre d’une seule compagnie qu’elle développe le interfaces pour tous les produits qui peuvent l’intéresser. Il faut cependant un temps important avant qu’une norme voit le jour en raison de la latence des comités à se mettre d’accord. Les réseaux d’interconnexion des MMP sont propriétaires alors que les réseaux locaux et longue distance sont normalisés. La tolérance aux pannes Savoir si tous les nœuds de l’interconnexion sont opérationnels pour fonctionner correctement. Cependant, aucun réseau comportant un grand nombre de nœuds peut espérer aucune défaillance

6.7: Exemple de réseaux d’interconnexion Ethernet Standard 10 mb/s proposé en 1978 Utilisé pratiquement partout Utilise la détection de paquets avec une loi exponentielle pour arbitrer l’accès au réseau Codifié sous la norme IEEE 802.3 Selon la manière dont les composants passent le trafic et les types de réseaux d’interconnexion qu’ils peuvent relier, ils ont des noms différents: Ponts: connectent des réseaux locaux entre eux, passant le trafic d’un côté à l’autre selon l’adresse du paquet. Routeurs: Connectent des réseaux locaux à des réseaux longue distance ou des réseaux longue distance entre eux et résolvent les problèmes d’adresses incompatibles.

6.7: Exemple de réseaux d’interconnexion Un successeur potentiel d’Ethernet est FDDI (Interface Données Distribuées par Fibre ) (Fiber Distributed Data Interface). Ce réseau est fondé sur l’optique à 100 Mb/s et pourrait utiliser des câbles beaucoup plus longs.

6.8: Questions transversales pour les réseaux d’interconnexion Une interface efficace à la hiérarchie mémoire ou au réseau d’interconnexion Processeurs optimisés pour le traitement et surcoût récepteur Où tracer la frontière matériel/logiciel pour les fonctions d’interconnexion Protection est accès utilisateur au réseau

6.9: L’interconnexion de réseaux Une des inventions les plus importantes dans le domaine de communications a été la connexion des réseaux. Les technologies nécessaires pour la connexion de réseaux sont des normes logicielles qui permettent une communication fiable sans nécessiter des réseaux fiables. Chaque ordinateur, réseau et commutateur implémente sa couche de normes, s’appuyant sur les autres composants pour remplis fidèlement ses obligations (OSI). La norme la plus populaire est TCP/IP . Une famille de protocoles permet de simplifier la norme en divisant de manière hiérarchique la responsabilité entre les couches. Chaque niveau fournit les services nécessaires à la couche supérieure.

6.9: L’interconnexion de réseaux Les différentes couches OSI

Chapitre 7 : Les multiprocesseurs

7.1 Introduction Une taxinomie des architectures parallèles Un seul flot d’instruction, un seul flot de données (single instruction, single datum - SISD) : c’est le monoprocesseur commun. Un seul flot d’instructions, plusieurs flots de données (single instructions, multiple data - SIMD): La même instruction est exécutée par plusieurs processeurs utilisant différents flots de données. Chaque processeur a sa propre mémoire données, mais il y a une seule mémoire d’instructions et un seul processeur de contrôle qui lance les instructions. Plusieurs flots d’instructions, un seul flot de données (multiple instructions, single datum - MISD): aucune machine commerciale de ce type n’a été construite à ce jour. Plusieurs flots d’instructions, plusieurs flots de données (multiple instructions, multiple data – MIMD): Chaque processeur lit ses propres instructions et opère sur ses propres données.

7.1 Introduction Les premiers multiprocesseurs étaient SIMD. De nos jours, le modèle MIMD a surgit comme l’architecture évidente à choisir pour le multiprocesseurs d’usage général: Flexible : peut fonctionner comme une machine simple utilisateur destinée à la haute performance pour une application, comme une machine avec multiprogrammation exécutant beaucoup de tâches simultanément, ou selon une certaine combinaison de ces fonctions. Un MIMD peut être construit en s’appuyant sur les avantages coût performance des microprocesseurs standard. Les machine MIMD actuelles sont classables en deux groupes, selon le nombre de processeurs. Architectures à mémoire partagée centralisée Au plus quelques douzaines de processeurs en1990 Se partagent la même mémoire physique

7.1 Introduction La connexion est typiquement réalisée par un bus Temps d’accès uniforme pour chaque processeur

7.1 Introduction Architectures à mémoire physiquement distribuée Pour avoir un plus grand nombre de processeur, il faut avoir une mémoire distribuée entre ces derniers. Dans le cas contraire, le système mémoire serait incapable de fournir les besoins en bande passage d’un grand nombre de processeurs. C’est une manière économique d’étendre le débit mémoire, si beaucoup des accès concernent la mémoire locale au nœud. La latence des accès mémoire est réduite. En revanche, la communication des données entre processeurs devient plus complexe et a un latence plus élevée.

7.1 Introduction Modèles de communication et architecture mémoire Deux méthodes pour communiquer entre plusieurs processeurs et des mémoires physiquement distribuées: Mémoire partagée distribuée : une référence mémoire peut être faite par tout processeur à toute case mémoire Machine à passage de messages: des messages sont envoyés pour commander des actions ou envoyer des données. C’est un appel de procédure lointain (Remote procedure call - RPC). Quand le processeur destination reçoit le message, que ce soit pas interrogation ou par interruption, il réalise l’opération et renvoie le résultat par un message en retour.