Chapitre 9 : Architecture des ordinateurs

L'objectif de ce chapitre est de distinguer les rôles et les caractéristiques des différents constituants d'une machine et de dérouler l'exécution d'une séquence d'instructions simples en langage machine.

Architecture de Von Neumann

Le mathématicien John Von Neumann a élaboré en 1944 la première description d'un ordinateur dont le programme est stocké dans sa mémoire. Son architecture comporte 4 éléments :

  • L'UAL ou unité de traitement effectue les opérations de base ;
  • L'unité de contrôle est chargée du séquençage des opérations ;
  • La mémoire contient les données et les instructions ;
  • Les périphériques (entrées-sorties) communiquent avec l'extérieur.

Les constituants d'une tour d'ordinateur

Constituant et rôle Caractéristiques Photo
Le boitier d'alimentation convertit le 230 V alternatif en 12V ou 5V ou 3,3V ou 2,5V ou 1,8 V pour alimenter tous les composants de l'unité centrale.
  • Puissance (Watt)
La carte mère centralise tous les périphériques de l'unité centrale et la connectique. Le processeur y est directement rattaché.
  • Socket processeur
  • Format (ATX, mini-ITX, ...)
  • Connectique (SATA, USB, PCI, ...)
Le processeur est le cerveau de l'ordinateur. Il traite plusieurs milliards d'opérations par seconde.
  • Nombre de cœurs
  • Fréquence (GHz)
La mémoire RAM, très rapide mais volatile (provisoire), stocke les informations en cours de traitement par le processeur.
  • Capacité (Go)
  • Type (DDR, ...)
  • Fréquence (MHz)
Le disque dur stocke le système d'exploitation, les logiciels et les données de l'utilisateur.
  • Capacité (Go ou To)
  • Type (HDD, SSD, ...)
  • Fréquence (MHz)
La carte graphique (optionnelle) aide le processeur pour le calcul de l'image affichée à l'écran.
  • Mémoire (Mo ou Go)
Le lecteur ou graveur de disque (optionnel) peut lire ou écrire les données stockées sur un CD, un DVD ou un Blu-Ray.
  • Format supportés
  • Vitesse de lecture
  • Vitesse de gravure
Associer chacun des constituants à une partie de l'architecture de Von Neumann.
  1. Processeur :
  2. Mémoire RAM :
  3. Disque dur :
  4. Carte graphique :
  5. Lecteur ou graveur de disque : .

La carte mère

La carte mère est une carte de circuit imprimé qui est essentielle pour connecter tous les composants d'un ordinateur, aussi bien les composants internes que les périphériques externes via des ports spécifiques.

Les connecteurs internes

Les connecteurs externes

Les périphériques permettent d'assurer la communication de l'ordinateur avec l'extérieur (clavier, écran, imprimante, réseau, carte d'acquisition, etc...).

Il existe également d'autres ports moins courants que l'on peut trouver sur certaines cartes mères, tels que des ports FireWire, des ports PS/2 pour les claviers et souris plus anciens, des ports Thunderbolt, etc.


Associer aux périphériques d'entrée ou de sortie les ports concernés :
  1. Écran :
  2. Enceintes avec amplificateur :
  3. Box internet :
  4. Disque dur externe :
Quel port permet de connecter des cartes d'extensions à une carte mère ?

La mémoire

Une mémoire peut être vue comme une armoire où chaque tiroir contient une et une seule donnée.
Chaque tiroir est repéré par une adresse.
Elle contient les instructions du ou des programmes en cours d'exécution et les données associées à ce programme.

Les types de mémoires :

Hiérarchie des mémoires

Les bus

Les différents organes du système sont reliés par des voies de communication appelées bus.

Un bus est un ensemble de fils qui assure la transmission du même type d'information. Trois types de bus véhiculent des informations en parallèle dans un système de traitement programmé de l'information :

Le processeur

Les composants d'un processeur

Le microprocesseur (Central Processing Unit : CPU) est chargé d'interpréter et d'exécuter les instructions d'un programme, de lire et de sauvegarder les résultats dans la mémoire. Il est composé par :

Chaque opération que peut effectuer un processeur est le résultat d'un circuit logique (circuit combinatoire) fait de portes logiques qui réalisent les fonctions élémentaires définies en algèbre de Boole : NON, ET et OU.

Les transistors sont des composants électroniques essentiels au fonctionnement d'un processeur. Plus un processeur possèdent de transistors, plus il sera capable d'effectuer des calculs.

Loi de Moore

La loi de Moore est une loi empirique qui décrit que le nombre de transistors sur une puce électronique double environ tous les deux ans, ce qui entraîne une augmentation exponentielle de la performance et une diminution du coût des ordinateurs. Elle a été formulée par Gordon E. Moore, cofondateur d'Intel, en 1965.

Exécution d'une instruction par le processeur

Recherche de l'instruction à traiter dans la mémoire :
  1. Le PC (Program Counter) contient l'adresse de la première instruction du programme. Cette valeur est placée sur le bus d'adresses pour émettre un ordre de lecture.
  2. Au bout d'un certain temps (temps d'accès à la mémoire), le contenu de la case mémoire demandée est disponible sur le bus des données.
  3. L'instruction est stockée dans le RI (Registre Instruction) du processeur qui contient maintenant l'opération à effectuer (addition, ...) et les opérandes nécessaires.
Décodage de l'instruction :
  1. L'instruction est découpée en une suite de commandes élémentaires par l'unité de commande qui les transmet à l'unité de calcul (UAL).
  2. Si l'instruction nécessite une donnée en provenance de la mémoire, sa valeur est ordonnée sur le bus d'adresses et récupérée sur le bus de données.
  3. L'opérande est stockée dans un registre.
Exécution de l'instruction :
  1. L'instruction est exécutée par l'unité de calcul (UAL) et le résultat est stocké dans un registre.
  2. L'unité de commande inscrit l'adresse de la prochaine instruction à traiter dans le PC.

Un jeu d'instruction est un ensemble d'opérations élémentaires que le microprocesseur exécute. Il est capable de réaliser seulement trois types d'instruction :

Chaque instruction nécessite un certain nombre de cycles d'horloges pour s'effectuer : c'est le temps d'exécution. Il est dépendant de la complexité de l'instruction.

Langage machine et langage assembleur

Le langage machine (binaire) est le langage compris par le microprocesseur.
Le langage assembleur est le langage le plus « proche » du langage machine. Il est composé par des instructions en général assez rudimentaires que l'on appelle des mnémoniques.


Python est un langage : .
Le binaire est un langage : .

Pour comprendre le principe de l'exécution d'un programme par un processeur écrit en langage d'assemblage (Assembleur), nous allons utiliser un logiciel de simulation développé en JavaScript par Pierre Boudes : AMIL et modifié par nos soins.

Accéder au simulateur

Le code source du simulateur est disponible ici : AMIL.7z

Prise en main du simulateur
Ouvrir le simulateur.
Décrire l'action de chacune des lignes d'instruction du programme suivant en vous aidant de l'aide mise à disposition et présentant toutes les mnémoniques :

JMP 3      ; saute à la ligne 3
7          ; donnée de l'utilisateur
?          ; espace réservé pour le résultat
WR 5 r1    ; 1er instruction du programme
MOV 1 r0   ; ...
SUB r1 r0
WR 1 r2
JP r0 9
WR 0 r2
MOV r2 2   ; ...
STOP       ; fin du programme
  

JMP 3      ; saute à la ligne 3
7          ; donnée de l'utilisateur
?          ; espace réservé pour le résultat
WR 5 r1    ; écrit l'entier 5 dans le registre 1
MOV 1 r0   ; déplace la valeur ligne 1 de la mémoire dans le registre 0
SUB r1 r0  ; soustrait la valeur du registre 1 à celle du registre 0
WR 1 r2    ; écrit l'entier 1 dans le registre 1
JP r0 9    ; saute à la ligne 9 si la valeur du registre 0 est positive
WR 0 r2    ; écrit l'entier 0 dans le registre 1
MOV r2 2   ; déplace la valeur du registre 2 dans la ligne 2 de la mémoire
STOP       ; fin du programme
  

Modifier la valeur de la donnée de l'utilisateur (ligne 1) de la mémoire et trouver à quelle question répond ce programme sachant que le résultat « 0 » code pour FAUX et « 1 » code pour VRAI. Ce programme répond à la question : Est-ce plus grand ou égal à 5 ?
Conversion
Écrire un programme qui convertit des degrés Fahrenheit (c'est une donnée) en degré Celsius : °C = (°F-32)×5/9

JMP 3
68
?
MOV 1 r0
WR 32 r1
SUB r1 r0
WR 5 r1
MUL r1 r0
WR 9 r1
DIV r1 r0
MOV r0 2
STOP      

JMP 3       ; Saute à la ligne 3
68          ; Donnée (Température en Fahrenheit)
?           ; Place mémoire pour le résultat
MOV 1 r0    ; Copie la donnée dans le registre r0
WR 32 r1    ; Écrit la valeur 32 dans le registre r1
SUB r1 r0   ; Soustrait la valeur dans r1 à celle dans r0 et écrit le résultat dans r0
WR 5 r1     ; Écrit la valeur 5 dans le registre r1
MUL r1 r0   ; Multiplie la valeur dans r0 par celle dans r1 et écrit le résultat dans r0
WR 9 r1     ; Écrit la valeur 9 dans le registre r1
DIV r1 r0   ; Divise la valeur dans r0 par celle dans r1 et écrit le résultat dans r0
MOV r0 2    ; Écrit la valeur du registre r0 dans la mémoire ligne 2
STOP	    ; Fin du programme    
Valeur maximale
Écrire un programme qui renvoie la valeur maximale parmi trois données.

JMP 5
1
7
3
?
MOV 1 r0
MOV 2 r1
SUB r1 r0
JP r0 11
MOV 2 r2
JMP 12 
MOV 1 r2
MOV r2 r0
MOV 3 r1
SUB r1 r0
JP r0 17
MOV 3 r2
MOV r2 4
STOP
Suite de Fibonacci
Écrire un programme qui calcule le nième terme (donnée) de la suite de Fibonacci : 1 1 2 3 5 8 …

JMP 3
3
?
WR 1 r1
WR 1 r2
MOV 1 r3
SUB 1 r3
NEG r3
JP r3 15
ADD r1 r0
MOV r0 r2
MOV r1 r0
MOV r2 r1
ADD 1 r3
JMP 8
MOV r2 2
STOP