Vous êtes sur la page 1sur 6

07/09/2020 Architecture des ordinateurs — documentation Cours Informatique L1 S1 0

Architecture des ordinateurs


dernière mise à jour : 25-11-2014

Objectifs

Architecture de Von Neumann


Langage d’assemblage miniature

Architecture matérielle et logicielle


Après avoir écrit des programmes, nous allons décrire comment ces programmes sont effectivement
exécutés dans un ordinateur. En informatique, le terme architecture désigne l’organisation des
éléments d’un système et les relations entre ces éléments. L’architecture logicielle concerne
l’organisation de différents programmes entre eux. L’architecture matérielle concerne l’organisation des
différents dispositifs physiques que l’on trouve dans un ordinateur. Dans les deux cas, cette
organisation se base sur le principe de décomposition.

Principe de décomposition

Il consiste à effectuer un découpage en couches de complexités croissantes. La Figure 1 présente un


tel découpage dans le cas général de machines au sens de “dispositifs capables d’effectuer un
ensemble d’opérations élémentaires”. Une opération élémentaire d’un niveau supérieur est ansi
décomposée en une suite d’opérations élémentaires du niveau inférieur. Le passage d’une suite
d’opérations (“programme”) d’un niveau n au niveau inférieur n-1 consistera en une traduction de
chaque opération de la suite du niveau n en la suite correspondante de niveau n-1. Vous avez déjà
utilisé le principe de décomposition pour la résolution de problèmes (algorithmique): le niveau inférieur
était le langage Python lui-même, le niveau supérieur était relatif au problème traité (exemple: tortue).
S’agissant des langages de programmation, ce principe est également utilisé dans la définition de
machines virtuelles de haut niveau: la définition d’un jeu d’instructions d’une machine fictive permet de
faire abstration des machines réélles et d’assurer simplement la portabilité des programmes (Java
Virtual Machine de Sun Microsystems, Common Language Interface de Microsoft .Net, ou encore
Python Virtual Machine de CPython). S’agissant de l’architecture des ordinateurs, la Figure 2 présente
la décomposition traditionnelle du fonctionnement d’un ordinateur. Le niveau supérieur est ici par
exemple le langage Python (et plus généralement les langages de programmation), le niveau le plus
bas est celui des circuits électroniques (transistors/portes logiques).

Fig 1 : Principe de décomposition


Fig 2 : Décomposition du fonctionnement d’un
ordinateur

niveau 5: langages de haut niveau - traduits en niveau 4 par des compilateurs


niveau 4: langage d’assemblage - langage symbolique du jeu d’instructions associé au
processeur

https://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/seq8_architecture.html 1/6
07/09/2020 Architecture des ordinateurs — documentation Cours Informatique L1 S1 0

niveau 3: système d’exploitation - la gestion des processus (programmes en cours d’exécution)


et des entrées/sorties est dévolue au système d’exploitation, on y accède par des suites
d’instructions spécifiques (appels systèmes)
niveau 2: langage machine - langage binaire du jeu d’instructions du processeur
niveau 1: microprogramme - une instruction machine est elle-même décomposée en une suite
de micro-instructions
niveau 0: circuits - circuits combinatoires, séquentiels, horloges, ..., pilotés par les micro-
instructions

Les 3 niveaux supérieurs de la Figure 2 concerne l’architecture logicielle, les 3 niveaux inférieurs
concerne l’architecture matérielle. Notez que matériel et logiciel sont conceptuellement équivalents:
toute opération effectuée par logiciel peut l’être directement par matériel et toute instruction exécutée
par matériel peut être simulée par logiciel. La frontière entre matériel et logiciel (symbolisée par le trait
rouge) est donc arbitraire, et son choix est essentiellement facteur de coût. C’est à cette frontière que
l’on définit un processeur par la spécification du jeu d’instructions du processeur, de la représentation
binaire de ces instructions et de leur sémantique (“ce qu’elles font”). S’y ajoute également la
spécification d’une représentation symbolique des instrucions, les mnémoniques, qui constitueront le
langage d’assemblage. Pour exprimer ces spécifications, il est nécessaire de disposer d’un modèle
formel de la structure d’un ordinateur et d’un processeur.

Modèle de Von Neumann

Le modèle d’architecture de la plupart des ordinateurs actuels provient d’un travail effectué par John
Von Neumann pendant le seconde guerre mondiale. L’objectif était la mise au point de calculateurs
pour établir les tables de tirs de pièces d’artillerie. D’un point de vue théorique, Alan Turing proposait à
la même époque un modèle de machine (machine de Turing) utilisant un ruban infini contenant des
données, capable de traiter ces données et d’en réécrire d’autres sur le ruban. Turing a démontré qu’il
existe une machine de Turing universelle capable de simuler toutes les autres. Pour cela on dispose
sur le ruban une description de la machine à simuler sous forme d’une table d’action, ainsi que les
données d’entrèe de la machine à simuler. La machine de Turing universelle calculera alors le même
résultat que la machine à simuler. Ce concept de tables d’action correspond aux instructions machine
de nos ordinateurs et le ruban à leur mémoire. Von Neumann a également utilisé ce principe de
stocker données et instructions dans la même mémoire, pour concevoir son premier ordinateur. La
Figure 3 présente un schéma du modèle de Von Neumann.

Fig 3 : Modèle de Von Neumann

Une machine suivant le modèle de Von Neumann est constituée de:

une unité centrale composée d’une unité de calcul (Unité Arithmétique et logique - UAL) et d’une
unité de contrôle
une mémoire centrale composée d’un ensemble de cellules stockant des nombres binaires
représentant les programmes et les données
un ensemble de périphériques permettant à la machine d’interagir avec le monde extérieur
un canal de communications entre ces trois entités, appelé Bus, communément composé de
simples fils

Mémoire centrale

https://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/seq8_architecture.html 2/6
07/09/2020 Architecture des ordinateurs — documentation Cours Informatique L1 S1 0

La mémoire centrale de l’ordinateur est constituée d’un ensemble ordonné de \(2^m\) cellules, chaque
cellule contenant un mot de \(n\) bits. Ces mots permettent de conserver indifféremment programmes
et données. On accède à n’importe laquelle de ces cellules au moyen de son adresse, nombre entier
compris dans l’intervalle \([0, 2^m - 1]\). Cet accès est en temps constant quelle que soit la valeur de
l’adresse (accès direct). Pour communiquer avec la mémoire, le bus est subdivisé en un bus d’adresse
et un bus de données. Il existe deux types d’accès:

la lecture transfère sur le bus de données le mot contenu dans la cellule dont l’adresse est
située sur le bus d’adresse.
l’écriture transfère dans la cellule dont l’adresse est sur le bus d’adresse, le mot contenu sur le
bus de données

Fig 4 : Mémoire de 32 mots de 8 bits

Périphériques

Les périphériques, ou organes d’Entrée/Sortie(E/S), permettent à l’ordinateur de communiquer avec


l’homme ou d’autres machines, et de mémoriser massivement des données ou des programmes dans
des fichiers. Ils se présentent à l’unité centrale le plus souvent sous la forme de plages d’adresses
mémoire dans lesquelles sont accessibles les registres de contrôle et d’état des contrôleurs de
périphériques. L’unité centrale peut par exemple demander la lecture d’un bloc sur un disque dur en
écrivant des valeurs prédeterminées aux adresses mémoires qui correspondent aux registres du
contrôleur disque. Le contrôleur disque écrira ensuite chaque octet du bloc demandé directement en
mémoire centrale en “volant” des accès mémoire à l’unité centrale (Direct Memory Access). Quand le
contrôleur aura terminé la lecture du bloc, il signalera à l’unité centrale que le bloc est lu en utilisant un
signal de demande d’interruption: ce mécanisme permet d’interrompre le flot courant d’exécution de
l’unité centrale pour qu’elle exécute une séquence d’instructions prédeterminées. Une fois la séquence
d’interruption exécutée, l’unité centrale reprend le flot courant d’exécution où il avait été interrompu.
Ces séquences d’instructions particulières font partie des systèmes d’exploitation et correspondent aux
appels systèmes. Les signaux de demande d’interruption font partie du bus, plus spécifiquement du
bus de contrôle.

Fig 5 : Entrées/Sorties, DMA, Interruptions

Unité centrale

L’unité centrale (ou processeur) est responsable de l’exécution du programme de l’ordinateur: elle
exécute séquentiellement les instructions stockées en mémoire centrale sous forme de code binaire.
Elle regroupe:

un ensemble de registres R1, R2,..., Rk: un registre est une mémoire de travail pour le
processeur, en général de même largeur qu’un mot mémoire. Leur accès est directement codé
dans les instructions machine. Ils sont utilisés comme opérandes et résultats de calculs, ou
encore pour stocker des adresses en mémoire. Leur présence est indispensable en raison de la
relative lenteur de la mémoire centrale par rapport à la vitesse du processeur.
une unité de calcul: elle réalise les opérations arithmétiques (addition, soustraction,
multiplication, division) et logiques (et logique, ou logique, non logique, opérations bit-à-bit,
décalages/rotations). Les opérations flottantes sont souvent réalisées par une seconde unité de

https://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/seq8_architecture.html 3/6
07/09/2020 Architecture des ordinateurs — documentation Cours Informatique L1 S1 0

calcul spécialisée. En plus du résultat en lui-même, ces unités calculent également des
indicateurs booléens (drapeaux): résultat nul, résultat non nul, retenue, dépassement de
capacité. Ces unités ont en général deux opérandes en entrée et fournissent un résultat en
sortie. Par construction elles calculent en permanence, fournissant un nouveau résultat presque
immédiatemment après la modification d’une des opérandes.
un ensemble de bus internes au processeur: ils relient entre eux les registres, les entrées des
unités de calcul et leurs sorties. Des interrupteurs permettent de commander le passage des
données entre les registres et les bus. L’ensemble registres, UAL et bus internes constituent le
chemin de données. Les commandes (interrupteurs, UAL, mémoire, ...) s’appelent des signaux
de contrôle.
une unité de contrôle: elle contrôle dans le temps les unités de calcul et les interrupteurs pour
exécuter effectivement chaque instruction machine. Elle a en charge également l’exécution
séquentielle du programme: le programme étant stocké en mémoire centrale, l’unité de contrôle
dispose d’un registre spécial CP appelé compteur de programme, qui contient l’adresse de la
prochaine instruction à exécuter. L’unité de contrôle répète indéfiniment le cycle instruction
donné par l’algorithme suivant:
Lire le mot stocké à l’adresse mémoire donnée par le registre CP et le stocker dans un
second registre spécial RI, appelé registre instruction
incrémenter le compteur de programme CP
décoder l’instruction stockée dans RI, aller chercher les opérandes éventuelles en
mémoire, faire réaliser le calcul éventuel par l’unité de calcul et stocker le résultat dans un
registre ou en mémoire

Cette séquence implique bien une exécution séquentielle du programme car le compteur de
programme est incrémenté à chaque cycle instruction. En l’état l’unité de contrôle parcourerait donc
l’intégralité de la mémoire centrale, considérant son contenu binaire comme autant d’instructions
machine. Nous disposons donc bien d’une implémentation de la première des structures de contrôle
des langages de haut niveau, la séquence. Concernant la structure conditionnelle, il suffit de
remarquer que ne pas exécuter la branche d’un if (dans le cas où la condition du if est fausse) revient
à ajouter une valeur plus grande que 1 au compteur de programme. Concernant l’itération
conditionnelle, passer à l’itération suivante revient à retrancher une valeur (supérieure à 1 également)
au compteur de programme. Ces deux structures de contrôle s’implémentent donc en modifiant
directement la valeur du compteur de programme. Et cette modification doit pouvoir être conditionnelle:
l’unité de contrôle dispose de circuits logiques capables d’évaluer des expressions conditionnelles
(prédéterminées) formées à partir des valeurs des drapeaux de l’UAL. Cette nouvelle fonctionnalité de
l’unité de contrôle sera exprimée au niveau supérieur des langages d’assemblage par la présence
d’instructions de branchement et de saut conditionnel.

On peut se demander à ce point si la description de l’unité de contrôle n’est pas récursive en ce sens
où elle est donnée sous la forme d’un algorithme, qui implique l’exécution d’un programme. Cette
remarque est tout à fait pertinente car l’unité de contrôle peut-être vue comme un processeur dans le
processeur: la différence fondamentale est que l’unité de contrôle exécute toujours le même
programme, elle n’est pas capable d’exécuter n’importe quel programme. Cependant, et en vertu du
principe de décomposition, les unités de contrôle sont implémentées dans les processeurs suivant un
modèle similaire à l’unité centrale, que l’on appelle micro-architecture:

l’unité de contrôle dispose d’une mémoire contenant des micro-instructions: une micro-
instruction contient une valeur prédéterminée pour chaque signal de contrôle.
l’unité de contrôle dispose de 2 registres:

https://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/seq8_architecture.html 4/6
07/09/2020 Architecture des ordinateurs — documentation Cours Informatique L1 S1 0

le compteur de microprogramme contient l’adresse dans la mémoire de microprogramme


de la prochaine micro-instruction à exécuter
le registre de micro-instruction contient la micro-instruction en cours d’exécution
l’unité de contrôle peut lire le contenu du registre instruction RI du processeur: au début de
l’exécution du cycle instruction, la valeur contenue dans ce registre déterminera la prochaine
micro-instruction à exécuter (il y a une correspondance entre le code opération de l’instruction
machine et l’adresse de début de la séquence correspondante dans le microprogramme).
l’unité de contrôle dispose d’un circuit incrémenteur pour calculer l’adresse de la prochaine
micro-instruction
l’unité de contrôle peut être capable de réaliser des sauts dans le microprogramme grâce à une
logique simple de contrôle et à la présence d’une addresse de microprogramme dans les micro-
instructions.

Fig 6 : Exemple d’unité centrale: le chemin de données (à gauche), l’unité de contrôle (à droite)

La Figure 6 présente un exemple d’unité centrale comportant 4 registres généraux R0, R1, R2, R3, un
registre CP, un registre RI, un registre AM pour fournir une adresse mémoire à la mémoire centrale, un
registre DM pour contenir la donnée lue ou écrite en mémoire centrale et un registre SP contenant
l’adresse du sommet de pile (voir dans la suite l’intérêt d’utiliser une pile dans les langages
d’assemblage). Elle comporte par ailleurs 2 bus A et B en entrée de l’UAL, et un bus C en sortie de
l’UAL qui contiendra donc les résultats des calculs. Le contenu de la plupart des registres peut être
transféré indifféremment sur les bus A et B, et le contenu du bus C peut être transféré dans la plupart
des regsitres également. Le figure contient deux exemples de traduction d’instruction machine en suite
de microinstructions. Ainsi pour exécuter une instruction machine d’addition R2<-R1+R0, il suffit
d’exécuter 2 micro-instructions sur cet exemple de processeur:

transférer le contenu de R0 sur le bus A (A<-R0), transférer le contenu de R1 sur le bus B (B<-
R1), ordonner à l’UAL d’effectuer une addition (UAL<-add)
transférer le contenu du bus C dans le regsitre R2 (R2<-C)

La première micro-instruction positione simultanément les signaux de contrôle R0 sur BusA, R1 sur
BusB, et la commande d’addition pour l’UAL. L’unité de contrôle est cadencée de sorte que l’UAL aura
effectué son calcul avant le début de la prochaine microinstruction. La seconde micro-instruction peut
donc stocker le résultat dans le registre R2 en positionnant le signal BusC dans R2.

Note: Pour aller plus loin, voici deux références de simulateurs illustrant ces principes:

Prima est un simulateur en ligne d’un processeur 8 bits avec une unité de
contrôle entièrement cablée

Johnny est un simulateur d’un processeur 5 bits avec une unité de contrôle
microprogrammée. Le microprogramme est modifiable. Johnny est écrit en Free
Pascal et est disponible sous Windows.

Langage d’assemblage

https://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/seq8_architecture.html 5/6
07/09/2020 Architecture des ordinateurs — documentation Cours Informatique L1 S1 0

Comme évoqué précédemment, le langage d’assemblage se situe à (est) la frontière entre matériel et
logiciel. Au dessous se trouvent la couche micro-programmée, semblable sur tous les processeurs,
puis les circuits eux-mêmes, et qui concernent essentiellement les électroniciens. Au dessus se
trouvent les langages de programmation et les systèmes d’exploitation, qui concernent les
développeurs (vous jusqu’à présent). Se situer à cette frontière implique de ce point de vue que
n’importe quel programme écrit dans n’importe quel langage de programmation sur n’importe quel
système d’exploitation est toujours traduit en un programme écrit en langage d’assemblage. Nous ne
ferons plus la différence entre langage d’assemblage et langage binaire puisqu’il y a en fait une
bijection entre ces deux langages, le second étant un codage arbitraire du premier. L’objectif est
dorénavant de comprendre comment cette traduction peut être réalisée. Nous présentons dans un
premier temps les caractéristiques des langages d’assemblage ainsi que les instructions machine
couramment utilisées sur les processeurs actuels. Nous décrirons ensuite comment traduire les
structures des langages de haut niveau à l’aide de ces instructions.

Format des instructions

Pour rappel, les instructions du langage d’assemblage sont représentées par des mnémoniques: une
mnémonique est une abbréviation du mot

https://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/seq8_architecture.html 6/6

Vous aimerez peut-être aussi