Fonctionnement d'un processeur

Le processeur est le coeur de l'ordinateur. C'est lui qui lit les instructions des programmes dans la mémoire et les éxécute.

Il ne comprend et ne manipule que des données en langage machine : du binaire. Toutefois, afin de pouvoir interagir avec le processeur sans écrire directement en binaire, l'humain peut utiliser un langage de bas niveau : le langage assembleur.

Nous allons voir ci-dessous comment cela fonctionne.

I. Architecture de von Neumann :

John von Neumann (mathématicien et physicien américano-hongrois, 1903-1957) a mis au point en 1945 un modèle de fonctionnement d'un processeur qui décrit encore aujourd'hui le fonctionnement de nos machines.

von Neumann

von Neumann n'a pas laissé son nom qu'en informatique : il a aussi travaillé en mathématiques, économie, physique quantique et a participé au programme Manhattan qui devait créer la bombe atomique américaine (https://fr.wikipedia.org/wiki/John_von_Neumann).

L'architecture de von Neumann est décrite sur la figure ci-dessous :

arichitecture de von Neumann

Les éléments sont les suivants :

  • la mémoire :

    Elle contient les données du programme, que ce soient les instructions ou les valeurs des variables

    C'est l'une des idées majeures de von Neumann : les instructions d'un programme sont des variables comme les autres

  • l'unité de contrôle :

    Cette zone est en charge de gérer la succession des instructions

  • l'unité arithmétique et logique ou UAL (ALU en anglais) :

    C'est ici que sont effectuées les calculs. Un accumulateur est une petite zone de mémoire stockant la valeur de la donnée en cours de traitement

  • entrées et sorties :

    Ces deux zones permettent des interactions avec l'utilisateur. Il peut ainsi saisir des valeurs en entrée (input) et lire les résultats des calculs (output)

  • les bus :

    Les flèches représentent les liasons entre les éléments. Elles permmetent le transfert d'informations. ON distingue deux types de bus :

    1. les bus d'adresses : lorsque l'unité de contrôle souhaite accéder à une donnée de la mémoire, elle envoie son adresse (en binaire) sur ce bus
    2. les bus de données : ceux-ci transportent les valeurs.

BUS

Remarque : en réalité on trouve aussi un bus de commande indiquant le type d'opération que le CPU souhaite effectuer sur la mémoire.

Dans nos ordinateurs, un processeur comprend bien :

  • de la mémoire :
    1. les registres : petites zones de mémoires très rapides, directement implantées sur le processeur. Elles sont chères à fabriquées aussi sont-elles de petite taille
    2. la mémoire vive (RAM) : mémoire rapide (moins que les registres tout de même) mais de taille moyenne qui sert de tamon entre les registres et la mémoire morte. Lorsque l'on éteint l'ordinateur, la RAM est vidée (elle nécessite du courant pour fonctionner)
    3. la mémoire morte : le disque dur. Très gros stockage mais relativement lent
  • une UAL : C'est sur celle-ci que sont implantés les circuits électroniques vus dans la partie sur les portes logiques

Intel 8008, l'un des premiers microprocesseurs conçus et construits par Intel et présenté en avril 1972

Diagramme Processeur

Les bus ont une certaine taille, ils peuvent transporter au maximum un certain nombre de bits.

Un bus d'adresse de $32$ bits ne pourra donc désigner que $2^32 = 4\:294\:967\:296$ adresses différentes. Cela correspond à $4$ milliards d'addresses différentes, chacune d'entre elles occcupant un octet. On peut donc avec un bus de $32$ bits accéder au maximum à une RAM de $4$ Gio (des méthodes permettent tout de même de dépasser cette limitation).

Une fois une l'adresse désignée, les données sont envoyées sur le bus de données. Si on est en $32$ bits ($4$ octets), le bus de données envoie les informations sur les $4$ octets consécutifs en commençant par celui désigné par le bus d'adresse.

Les nombres manipulés par le processeur et ceux stockés sur les registres seront donc aussi de $32$ bits.

On parle alors d'architecture $32$ bits.

Si le bus d'adresse en de $64$ bits, l'idée est identique. On peut accéder à $2^32=18\:446\:744\:073\:709\:551\:616$ ! On est moins limité... C'est une architecture $64$ bits.

Dernier point : la miniaturisation des transistors et donc le nombre que l'on peut en placer sur un microprocesseur a atteint une limite pour des raisons physique (température).

De nos jours on augmente donc la puissance des ordinateurs en ajoutant non pas des transistors sur les processeurs mais de nouveaux processeurs.

On parle d'ordinateurs multi-coeurs.

Multi-coeurs

II. Instructions machine et langage assembleur :

Un processeur ne comprend qu'un jeu limité d'instructions. Par exemple, un processeur Intel comprend un peu plus d'un millier d'instructions : tous les programmes que l'on peut faire tourner sur une machine (de l'OS à un jeu vidéo en passant par un traitement de texte et python) ne s'exprime qu'avec un millier de "mots" ! Voir https://www.felixcloutier.com/x86/

Afin de permettre au programmeur d'agir directement au niveau du processeur, on a créé des langages assembleur qui reprennent le jeu d'instructions que comprend le processeur mais les présentent sous une forme plus compréhensible par l'homme.

Par exemple, le code machine $001000\:00001\:00010\:0000000101011110$ signifie que l'on additionne les valeurs des registres &r1 et &r2 et le nombre $350$.

Instruction

On le voit, une instruction en langage assembleur (addi $r1 $r2 350) se présente sous la forme d'un code d'opération suivi d'opérandes indiquant sur quelles données effectuer cette instruction.

Ces opérandes, sont soit :

  • des valeurs immédiates(comme le nombre $350$ ci-dessus)
  • des adresses de registres
  • des adresses sur la mémoire vive

III. Cycle d'opération :

Comment tout cela s'organise-t-il ? En cycle !

Un cycle d’exécution machine consiste à (en bleu les bus d'adresses et en rouge les bus de données) :

  1. Charger l’instruction

Etape 1

  1. Charger ses données

Etape 2

  1. Faire un traitement sur ces données

Etape 3

  1. Ranger le résultat du traitement en mémoire

Etape 4

  1. Désigner la prochaine instruction

Etape 5

IV. L'odinateur du petit bonhomme !

Le Little Man Computer (LMC) est un ordinateur simplifié, créé par le Dr. Stuart Madnick en 1965 afin de faire comprendre le fonctionnement réel d'un ordinateur.

On peut en trouver une version en ligne en suivant ce lien : https://peterhigginson.co.uk/lmc/

La figure ci-dessous présente les différentes zones du LMC :

LMC

On trouve : * sur la gauche :

une zone de saisie des programmes (deux colonnes, une pour l'humain et l'autre pour la version machine)


  • au centre :

    le processeur (zone de contrôle, accumulateur, ALU)

  • sur la droite :

    la mémoire. $100$ cases pouvant contenir des nombres de $000$ à $999$

  • en haut et en bas :

    les sorties/output et entrées/input

  • en bas à gauche :

    l'interface utilisateur permettant de charger des programmes, de les faire fonctionner (y compris étape par étape avec step)

Le jeu d'instructions du LMC est simple :

LMC Instruction Set

Si l'on veut par exemple :

  • Lire une donnée en entrée, on tape $901$
  • Stocker la valeur de l'accumulateur dans la case $99$, on tape $399$ (comme $3\times\times$ avec $99$ à la place des $\times\times$)
  • Additionner la valeur de la case mémoire $52$ à celle de l'accumulateur, on tape $152$. Le résultat est placé dans l'accumulateur.