Fondements théoriques

Ce document explique le fonctionnement d'un ordinateur au niveau binaire.

Bits et octets

[1100011001] Les ordinateurs sont des machines purement binaires. Autrement dit, les informations qu'ils traitent sont faites uniquement de bits. Un bit est une variable à deux états. Ces états peuvent être appelés vrai et faux, fermé et ouvert, 0 et 1… Dans la réalité physique, il s'agit de tensions électriques, par exemple 0 volt et 5 volts.

Contrairement aux apparences, avoir à disposition uniquement des 0 et des 1 n'est pas limitatif. Tout nombre entier peut être représenté en base 2 uniquement avec des 0 et des 1. Les bits peuvent aussi représenter des informations sans rapport avec les nombres. Par exemple la lettre `A' peut être représentée par 1, `B' par 10, jusqu'à `Z' représenté par 11010 (26 en base 2).

Les ordinateurs actuels manipulent les bits par groupes de huit, appelés octets. Ainsi l'octet 11000110 peut représenter des informations de types variés, comme :

  • les nombres 1, 1, 0, 0, 0, 1, 1 et 0 ;
  • le nombre 198 (11000110 en base 2 vaut 198 car 198 = 1×27 + 1×26 + 0×25 + 0×24 + 0×23 + 1×22 + 1×21 + 0×20 = 198) ;
  • le nombre -58 = (-1)×27 + 1×26 + 0×25 + 0×24 + 0×23 + 1×22 + 1×21 + 0×20 ;
  • le nombre 12,375 = 1×23 + 1×22 + 0×21 + 0×20 + 0×2-1 + 1×2-2 + 1×2-3 + 0×2-4 ;
  • le caractère Æ (convention d'encodage de caractères) ;
  • un pixel violet (convention d'encodage de couleurs).

Hors contexte, il n'est pas possible de savoir ce que l'octet 11000110 représente. S'il vient du clavier, il sera sans doute utilisé comme caractère. S'il est dans la carte graphique, alors il représente des pixels.

Les bus

Les bits circulent d'un composant à l'autre de l'ordinateur en passant par des bus. Un bus est une collection de fils électriques parallèles reliant des composants. Certains bus sont à sens unique, d'autres peuvent être utilisés dans les deux sens, mais pas en même temps afin d'éviter les collisions. Vu d'un composant, un bus par lequel les bits arrivent est une entrée ; un bus par lequel les bits sortent est une sortie ; et un bus par lequel les bits peuvent soit entrer, soit sortir, est une entrée-sortie.

[A __1 __1 __0 __0 __0 __1 __1 __0 B] La figure ci-contre montre un composant A relié par un bus de 8 fils à un composant B. Les flèches indiquent que ce bus est une sortie du composant A et une entrée du composant B.

Ce bus ayant 8 fils, il permet de transmettre 8 bits simultanément du composant A au composant B ; il s'agit d'un bus 8 bits. Avec un seul fil électrique il faudrait transmettre un bit après l'autre en série, ce qui prendrait 8 fois plus de temps. Dans cet exemple l'octet 11000110 est transmis. Dans la réalité physique, de l'électricité passe dans les fils correpondant aux bits 1.

La mémoire

Une mémoire d'ordinateur est un composant très simple. C'est une table d'octets qui peuvent être lus ou écrits. Chaque octet est rangé dans un emplacement numéroté appelé adresse. Si les octets d'une mémoire ne peuvent être que lus, alors il s'agit d'une mémoire morte. S'ils peuvent être lus et écrits alors il s'agit d'une mémoire vive. Voici le schéma d'un composant de mémoire vive : [Schéma de mémoire vive]

  • L'entrée A (8 bits) permet de sélectionner l'adresse, c'est un bus d'adresse.
  • L'entrée LE (1 bit) permet d'indiquer si l'octet est lu ou écrit, c'est un bus de contrôle.
  • L'entrée-sortie D (8 bits) permet de faire entrer ou sortir l'octet lu ou écrit, c'est un bus de donnée.
  • L'entrée H est l'horloge. Une impulsion sur cette entrée cause l'opération (lecture ou écriture) correspondant à l'état des autres entrées.

Pour lire par exemple l'octet à l'adresse 5, il faut envoyer 5 (00000101 en binaire) sur l'entrée A et 1 (qui signifie L pour « Lire ») sur l'entrée LE. Au coup d'horloge H, la mémoire envoie l'octet stocké à l'adresse 5 par l'entrée-sortie D, qui est alors utilisée comme sortie.

Pour écrire, il faut envoyer 0 au lieu de 1 sur LE. Il faut aussi envoyer l'octet à écrire sur D. Lors d'une écriture, l'ancien octet est remplacé par le nouveau. Il n'est pas utile, ni même possible d'effacer un octet. En effet, la mémoire ne contient que des 0 ou des 1 et pour effacer il faudrait enregistrer du « rien », ce qui ferait un troisième état, qui n'existe pas.

Le bus d'adresse de 8 bits de cette mémoire permet de sélectionner 28 = 256 adresses différentes. Cette mémoire peut donc contenir 256 octets au plus.

Le microprocesseur

Vue matérielle du microprocesseur

Le microprocesseur est relié à chaque puce mémoire par trois bus : [Schéma de microprocesseur relié à une mémoire vive]

  • Le bus d'adresses A permet de sélectionner l'adresse d'une donnée ou d'une instruction.
  • Le bus de contrôle LE permet d'indiquer si l'octet à l'adresse sélectionnée doit être lu ou écrit.
  • Le bus de donnée D permet de lire les données et les instructions ainsi que d'écrire des données à l'adresse sélectionnée.
  • L'entrée H du microprocesseur est le signal d'horloge. Ce signal donne le rythme des opérations du microprocesseur. Ce rythme est mesuré en hertz.

C'est en décodant les instructions que le microprocesseur trouve les informations qu'il doit envoyer et recevoir sur les bus. Les instructions lui indiquent également quelle opération (addition, soustraction…) il doit effectuer avec les données.

Vue logicielle du microprocesseur

Le travail du microprocesseur est répétitif :

  • lire une instruction en mémoire ;
  • traiter des données selon l'instruction ;
  • lire l'instruction suivante ;
  • traiter des données selon l'instruction suivante ;
  • et ainsi de suite…

Dans l'ordinateur, les instructions sont évidemment représentées par des bits dans la mémoire, c'est le langage machine. Les programmes sont formés d'instructions un peu comme les phrases sont formées de mots. Le fonctionnement de l'ordinateur est dirigé par les programmes exécutés par le microprocesseur.

Les données sont aussi des octets qui peuvent représenter des nombres, du texte, une image, voire même d'autres instructions.

Si par exemple une instruction demande au microprocesseur d'addionner 3 à 4, alors additionner est l'instruction tandis que 3 et 4 sont les données.

Langage de programmation

Le langage machine n'étant pas très lisible (000000010110001000000101), les informaticiens utilisent des langages de programmation afin de pouvoir écrire les programmes sous une forme plus compréhensible. Ils utilisent ensuite des programmes capables de traduire en langage machine le texte en langage de programmation.

L'assembleur est le langage de programmation le plus basique. Il représente par du texte les instructions du langage machine. À chaque instruction en assembleur correspond une instruction en langage machine et réciproquement. Comprendre l'assembleur d'un microprocesseur permet donc de comprendre son langage machine et de là son fonctionnement logiciel.

Périphériques de sortie

[Schéma avec contrôleur graphique] Un microprocesseur et de la mémoire vive constituent déjà un ordinateur en état de marche, mais complètement inutile. Pour pouvoir faire sortir des résultats, les rendre visibles, audibles ou autre, il faut un périphérique de sortie. C'est-à-dire un appareil capable de faire sortir des informations : écran, imprimante, modem, lecteur de disquette, haut-parleur…

Un périphérique très commun est l'écran. L'écran ci-contre n'a que 8×8 = 64 pixels. C'est tout de même suffisant pour afficher un chiffre ou un caractère. Nous voyons par exemple le chiffre 9.

Un écran affiche des signaux électriques que ni le microprocesseur ni la mémoire ne produisent. C'est pour cela qu'un contrôleur graphique se trouve entre la mémoire et l'écran.

La tâche de ce contrôleur graphique est de lire la mémoire et transformer cela en signal vidéo. Comme le microprocesseur, il est branché aux bus A et D. Il n'utilise le bus D que pour lire la mémoire. Le contrôleur envoie un signal « noir » pour les bits à 0 et un signal « blanc » pour les bits à 1.

Une portion de la mémoire contient les bits correspondant à ce qui est affiché. Comme notre écran est composé de 8 lignes de 8 pixels noirs et blancs, 8×8 bits, soit 8 octets suffisent. À la première ligne correspond l'octet 11100111, ce qui donne un signal ressemblant à |¯¯¯|__|¯¯¯|.

Périphériques d'entrée

[Schéma avec contrôleur clavier] Il ne manque qu'un seul composant important pour rendre notre ordinateur réellement utilisable : un périphérique d'entrée. En effet, l'ordinateur que nous avons construit jusqu'ici peut calculer, mémoriser des résultats et les afficher. Mais nous n'avons aucun moyen de lui donner des informations. Nous allons donc le doter d'un clavier.

Pour notre schéma, doter notre ordinateur d'un clavier est presque identique à le doter d'un écran, sauf que le sens des données est inversé. On tape une touche sur le clavier, un signal est envoyé au contrôleur clavier qui génère un octet correspondant à cette touche. Finalement cet octet est enregistré en mémoire à une adresse prédéterminée qui pourra être lue par le microprocesseur.


© 2003 Marc Mongenet. Ce document peut être redistribué selon les conditions de la GNU General Public License.