Archi M10

Identification

Infoforall

1 - Un vrai ordinateur en papier


Bon, alors, c'est quoi un ordinateur ?

Et bien, c'est à cette question que nous allons répondre aujourd'hui.

Cette activité est basée en grande partie sur le travail de Philippe Marquet et Martin Quinson. Nous l'utiliserons à nouveau en Terminale et nous irons alors plus loin. Source : M10 / M999 disponible ici sous la licence CC-BY 4.0.

Evaluation ✎ : questions 3-4.

Documents de cours :

1 - Un peu d'histoire

De quand date le premier ordinateur de l'histoire ?

Tout dépend de ce qu'on considère être un ordinateur.

1.1 Le premier ordinateur de l'Histoire ?

L'idée

En 1834, le mathématicien anglais Charles Babbage fut l'un des précurseurs de l'informatique.

https://commons.wikimedia.org/wiki/File:Charles_Babbage_-_1860.jpg
Charles Babbage - Image du domaine public USA

Son idée était de produire des tables nautiques, astronomiques et mathématiques exactes : à l'époque, les tables sont écrites ou tapées à la main et comportent donc des erreurs de recopies ou de calculs.

La machine mécanique

Babagge fut le premier à énoncer le principe d'un ordinateur. Il s'est inspiré de la machine à tisser Jacquard (inventées en 1801 par le lyonnais Joseph Marie Jacquard) qui utilise des cartes perforées pour encoder les informations.

https://commons.wikimedia.org/wiki/File:Jacquard_loom_p1040320.jpg
Métier Jacquard Musée des Arts et Métiers [CC BY-SA]

Partant de ce principe, Charles Babbage imagine un calculateur mécanique qui recevrait instructions et données à partir de la lecture des perforations sur les fiches.

Données et instructions sur des cartes un peu différentes
Les instructions sont sur les cartes du premier plan et les données à l'arrière plan.
Cette image, publiée initialement sur Flickr, a été stockée sur WikiCommons avec Flickr upload bot le 20 Octobre 2010, 14:34 par Liftarn. Cette image est sous licence [CC BY-SA]

Il passa le reste de sa vie à travailler sur les détails de cette machine analytique, tentant de la faire fonctionner... sans succès.

Modèle d'essai d'une partie de la machine analytique, construit par Charles Babbage, exposée au Science Museum de Londres.
Une partie de la machine analytique, construit par Charles Babbage, exposée au Science Museum de Londres.
Musée des Arts et Métiers (photo Bruno Barral) [CC BY-SA]
Un échec ?

Même s'il ne parvint pas à la construire de son vivant, elle n'a été réellement opérationnelle qu'en 1991 (avec l'équivalent des technologies d'époque) lorsque des universitaires ont cherché à la construire à l'aide des plans de Baggage. Avec un peu plus de chance (il avait commis quelques petites erreurs de conception), il aurait pu réussir à construire sa machine. La théorie était bonne et fonctionnelle.

L'Histoire aurait sans doute été bien différente si la machine avait vu le jour. La Machine à différences, un roman de science-fiction est construit autour de cette uchronie : que ce serait-il passé si Charles Babbage était parvenu à faire fonctionner sa machine analytique ?

Couverture La machine à différences J'ai Lu
Couverture de la Machine à Différences de William Gibson et Bruce Sterling
1.2 Le premier programme de l'Histoire ?

Pendant ces nombreuses années de recherche, Charles Babbage entre en contact avec de nombreuses personnes.

Parmi elles figure Ada Lovelace, de son nom complet Augusta Ada King, comtesse de Lovelace, née Ada Byron. Il s'agit de la fille du poète Lord Byron, un poète anglais très connu.

Elle ne connut pas son père puisqu'il quitta l'Angleterre pour toujours alors qu'elle n'avait qu'un an. Sa mère demanda la séparation et la garde de l'enfant : Byron était régulièrement saoul, violent et tenta au moins par quatre fois de la violer. Encore un exemple de la différence entre image publique et réalité de l'individu...

Eduquée par sa mère, elle-même cultivée et intelligente, Ada Lovelace parvient à devenir une jeune fille particulièrement douée et éduquée en mathématiques, ce qui est très inhabituel à l'époque : la maîtrise des sciences étant un symbole de puissance et de contrôle, on écartait les femmes de cette connaissance. A l'heure actuelle, les raisons sont plus indirectes mais lorsqu'on fouille, on trouve encore les mêmes causes...

.

Lors de ses premières correspondances avec Charles Babbage, elle est à l'époque une jeune fille de 17 ans.

Ada Lovelace
Ada Lovelace, née Ada Byron

Ada Lovelace est immédiatement fascinée par la machine théorique de Charles Babbage. Même après son mariage, elle continuera ses études de mathématiques, parvenant même à obtenir comme tuteur le célèbre mathématicien Auguste De Morgan.

Elle étudiera la machine avec passion et parviendra à créer le premier programme de l'histoire ! En collaboration avec Charles Babbage, elle mettra au point un algorithme permettant de lancer un calcul très complexe sur la machine.

Elle est aujourd'hui considérée comme la première programmeuse de l'histoire. Aucun humain avant elle n'avait conçu de programme potentiellement exécutable sur une machine réelle. Son programme comportait d'ailleurs la première boucle non bornée (TANT QUE) non purement théorique de l'histoire.

Une autre idée révolutionnaire qu'on lui attribue : l'idée d'encoder autre chose que des nombres avec des nombres ! Maintenant que vous avez vu qu'on pouvait encoder un texte, une image ou une relation à l'aide d'une suite de nombres, cela vous parait peut-être évident, mais comme toujours, tant que personne n'en a eu l'idée, une invention n'existe pas. Elle aurait ainsi eu l'idée d'utiliser la machine pour créer des morceaux de musique.

Alternant entre haut et bas, elle tentera de créer des algorithmes permettant de gagner aux courses hippiques (pour subventionner la machine !) mais dilapida malheureusement son argent. Elle mourut jeune, à l'age de 36 ans. Encore une fois, l'histoire aurait (peut-être) pu être différente sinon.

Voici une illustration de son programme : image du programme (Cette œuvre est dans le domaine public dans tous les pays pour lesquels le copyright a une durée de vie de 100 ans ou moins après la mort de l'auteur).

Pour l'anecdote, on peut voir son portrait sur les hologrammes d'authentification des produits Microsoft (les vieux produits, ceux où il y avait encore une trace papier de l'acquisition du produit !).

C'est comment la France de 1830 ?

La France est dans un état politique assez instable à cette époque.

  • Après la Révolution Française de 1789,
  • le coup d'Etat du 18 brumaire de Napoléon Bonaparte (début du Consulat),
  • la création du Premier Empire en 1804,
  • l'abdication de Napoléon en 1814, le retour de Napoléon et les Cent-Jours en 1815,
  • la Seconde Restauration (monarchie conservatrice) de 1815 à 1830 (Louis XVIII puis son frère Charles X),
  • la seconde révolution de 1830 avec la Monarchie de Juillet et le régime de Louis-Philippe Ier (une Monarchie constitutionnelle à régime parlementaire)

Cette période est complexe, pleine de complots, d'insurrections et de manipulations politiques. Elle aboutit à l'instauration de la IIe République, une période plus que troublée également !

2 - Présentation M10

Aujourd'hui, nous allons vous offrir un ordinateur. Un vrai. Mais en papier.

2.1 La machine M10 : version 1

M-10 est une petite machine informatique constituée

  • d'une mémoire centrale qui contient des données (à droite, 10 cases uniquement),
  • d'un processeur qui contient 
    • d'une unité arithmétique et logique (UAL) capable de réaliser une opération telle une addition,
    • d'une toute petite mémoire nommé registre qui porte ici le nom d'accumulateur car ce registre unique recevra le résultat des opérations réalisées par l'UAL.

Les 10 cases de la mémoire centrale (la "RAM") sont numérotées de 0 à 9. Ce numéro est donc l'adresse de la case.

La communication entre mémoire centrale - UAL est moins rapide que la communication registre - UAL puisque l'UAL et le registre font partie du même composant : le processeur.

https://gitlab-fil.univ-lille.fr/diu-eil-lil/portail/raw/master/bloc3/archi/m10-0.png
La structure de la machine M10

2.2 Les premières instructions sur M10

Identification des registres et des cases de la mémoire centrale.

Une adresse commençant par R fait référence à un registre.

RA pour le registre A, qu'on considère être l'accumulateur dans M10.

RB pour le registre B....

Une adresse commençant par @ fait référence à une case de la mémoire centrale.

@0 pour la case 0.

@9 pour la case 9.

Jeux d'instructions

Notre machine M10 possède deux jeux d'instructions :

  1. les instructions de transfert.
  2. Une instruction MOV DST SRC permet de placer le contenu de la source SRC dans la destination DST.

    DST peut être un registre ou une case de la mémoire centrale.

    SRC peut être un registre, une case de la mémoire centrale ou une valeur.

    Exemples :

    MOV RA #3 : place la valeur 3 dans le registre RA.

    MOV RA @3 : place le contenu de la case 3 de la mémoire centrale dans le registre RA.

    MOV @3 RA : place le contenu du registre RA. dans la case 3 de la mémoire centrale

    MOV RA RB : place le contenu du registre RB dans le registre RA.

    Plus fort, les crochets peuvent indiquer d'aller lire le contenu de la case mémoire dont l'adresse est contenue dans un registre.

    MOV RA #1 : place la valeur 1 dans le registre RA.
    MOV RB [RA] : ramène dans le registre RB le contenu de la case mémoire pointée par le registre RA. Sur notre exemple, cela revient à aller lire la case mémoire d'adresse 1, puisque [RA] = @1.

  3. les instructions arithmétiques et logiques réalisées par l'UAL (+, , -, *, ET, OU ... ) à partir des deux données reçues,
  4. L'instruction ADD YY XX additionne les contenus liées à YY et XX et place le résultat dans le registre accumulateur.

    Schématiquement RA <-- YY + XX.

    YY XX peuvent être des cases-mémoires ou des valeurs.

    ADD @1 @3 : l'équivalent de RA = @1 + @3.

    ADD @2 #5 : l'équivalent de RA = @2 + 5.

    L'instruction SUB YY XX réalise la soustraction de YY et XX et place le résultat dans le registre accumulateur.

    Schématiquement RA <-- YY - XX.

    XX peut être un case de la mémoire centrale ou une valeur.

    SUB @5 #3 : l'équivalent de RA = @5 - 3.

Un tout petit rikiki programme

Imaginons que la mémoire centrale contienne ceci :

Adresse 00 01 02
Valeur  05 15 30

Addition avec 5 à @0, 15 à @1 et 30 à @2

Voici un programme dans lequel RA indique l'Accumulateur :

ADD @0 @2
MOV @0 RA

Que fait-il  ?

  1. ADD @0 @2 place dans le registre RA la somme des contenus de @0 et @2.
  2. MOV @0 RA place alors 35 dans la case mémoire 0.

01° Que contient la mémoire centrale après exécution du programme ?

La mémoire centrale initialement :

Adresse 00 01 02
Valeur  05 15 30

Le programme :

ADD @1 @2

MOV @1 RA

...CORRECTION...

ADD @1 @2

Equivalent Python de RA = @1 + @2 : on additionne 15 et 30 et on place 45 dans le registre RA.

Addition avec 5 à @0, 15 à @1 et 30 à @2

La dernière ligne va alors écrasé le 15 de la case 1 pour y placer 45.

02° Exécuter le programme suivant en utilisant la mémoire initiale représentée ci-dessous.

  • Que contiennent les mémoires à la fin ?
  • Traduire les lignes 1-2 par une ligne de code Python, en attribuant les variables a b c d e f aux cases-mémoires 0 à 5.
  • Adresse 0 1 2 3 4 5
    Nommée  a b c d e f

  • Faire de même avec les lignes 3-4.
Enoncé de l'exerice : les mémoires contiennent @0(5)-@1(15)-@2(30)-@3(50)
01 ADD @2 @3 02 MOV @4 RA 03 ADD @3 @4 04 MOV @5 RA

...CORRECTION...

  1. ADD @2 @3 : on additionne 30 et 50 et on place 80 dans RA
  2. MOV @4 RA : on range ce 80 dans la case d'adresse 4.
  3. Addition avec 5 à @0, 15 à @1 et 30 à @2

Ces lignes pourraient être l'équivalent de cette unique ligne en Python :

e = c + d

On passe aux instructions suivantes :

  1. ADD @3 @4 : on additionne 50 et 80 et on place 130 dans RA
  2. MOV @5 RA : on range ce 130 dans la case d'adresse 5.
  3. Addition avec 5 à @0, 15 à @1 et 30 à @2

Ces lignes pourraient être l'équivalent à cette ligne Python :

f = d + e

03° Exécuter le programme suivant en utilisant la mémoire initiale représentée ci-dessous.

Questions :

  1. Que contiennent les mémoires à la fin ?
  2. Quelle serait l'unique ligne équivalente Python (a est la case 0 et b la case 1) 
Enoncé de l'exerice : les mémoires contiennent @0(5)-@1(1)
SUB @0 @1 MOV @0 RA SUB @0 @1 MOV @0 RA SUB @0 @1 MOV @0 RA

...CORRECTION...

Ces lignes pourrait être l'équivalent de a = a - 3 * b en Python.

Le problème est que l'accès à la mémoire centrale est lent. Si on devait faire 2000 fois SUB @0 @1 et MOV @0 RA ,nous partirions lire 2000 fois les case 0 et 1 en mémoire centrale et partirions 2000 fois modifier la mémoire centrale . C'est long.

Comment faire mieux ?

En rajoutant des registres et en permettant à l'UAL d'agir directement à partir de ces mémoires plutôt que de la mémoire centrale.

Lorsqu'on veut réaliser nos 2000 calculs, il est plus efficace de faire ceci :

  • placer avec MOV les contenus de la mémoire centrale utiles dans des registres (long mais une fois)
  • faire les calculs uniquement à partir des registres (2000 fois mais rapides)
  • placer avec MOV uniquement le résultat final en mémoire (long mais une seule fois)

✎ 04° Exécuter ce nouveau programme qui intégre maintenant un second registre nommé B. Le schéma de principe intègre les sens possibles lors des transferts. Que contiennent les mémoires à la fin ?

Enoncé de l'exerice : les mémoires contiennent @0(5)-@1(1)
MOV RA @0 MOV RB @1 SUB RA RB SUB RA RB SUB RA RB MOV @0 RA

Pourquoi ce nouveau programme est-il plus rapide ?

2.3 La machine M10 : version 2

M-10 est une petite machine informatique constituée

  • d'une mémoire centrale qui contient des données (à droite, 10 cases uniquement),
  • d'un processeur qui contient 
    • d'une unité arithmétique et logique (UAL) capable de réaliser une opération telle une addition,
    • d'un registre RA. Ce registre recevra le résultat des opérations réalisées par l'UAL.
    • d'un ensemble d'autres registres RB RC RD. Ils sont parfois nommés registre de base/basic (B), registre compteur/counter (C) et registre de données/data (D). Leur rôle n'est pas imposé mais on utilisera plutôt celui dont le nom convient le mieux par habitude. Ils sont interchangeables en réalité.

Les 10 cases de la mémoire centrale (la "RAM") sont numérotées de 0 à 9. Ce numéro est donc l'adresse de la case.

La communication entre mémoire centrale - UAL est moins rapide que la communication registre - UAL puisque l'UAL et le registre font partie du même composant : le processeur.

Enoncé de l'exerice : les mémoires contiennent @0(5)-@1(1)
La structure de la machine M10

2.4 Registres

Un registre est une zone-mémoire interne au processeur. L'accés à cette mémoire est donc très rapide puisqu'elle est physiquement très proche du processeur.

Dans les architectures qualifiées de load-store, les programmes

  1. transfèrent d'abord des données de la mémoire centrale ("RAM", grand stockage mais peu rapide) vers des registres (faible stockage mais rapide) avec LDR
  2. puis effectuent des opérations sur ces registres, et
  3. enfin transfèrent le résultat en mémoire centrale avec STR.
les différents types de mémoire
Par Original téléversé par Poil sur Wikipédia français. — Auteur : Stéphane 3 avr 2005 à 03:54 (CEST)Source PPT disponible sur demande., CC BY-SA 3.0, Lien

Il existe plusieurs zones de stockage différentes :

  • Registres : les fameuses mémoires proches du processeur. Très rapides mais petites.
  • Caches on-chip : des zones mémoires assez rapides situées directement sur la carte à puce (chip) du microprocesseur. On y stocke les résultats précédents de façon à pouvoir les retrouver sans avoir à tout recalculer.
  • Caches off-chip : des zones mémoires assez rapides situées en dehors de la carte du processeur lui-même.
  • Mémoire centrale : une mémoire bien plus grande mais également beaucoup plus longue en terme d'accés (votre RAM).
  • Système de stockage : disque dur, clé USB... Encore plus grande mais encore plus lente.
  • Système d'archivage : des bandes magnétiques, très gros espace mais leeeeeent.
2.5 Assembleur

Assembleur ?

L'assembleur est le nom usuel donné aux programmes ci-dessus. Il s'agit de jeux d'instructions qui communiquent directement avec le processeur. Chaque famille de processeurs a donc son propre langage d'assemblage.

Un programme réalisé pour un processeur particulier ne peut donc pas être exécuté par un processeur d'une autre famille. Il s'agit donc d'un langage de très bas niveau ! Par contre, il est très rapide.

Langage machine

En réalité, le langage machine est constitué uniquement des octets reçus par le processeur qui ne sait lire que des bits bien entendu.

La différence est mince avec l'assembleur en réalité. Pourquoi ?

Simplement car l'assembleur est une sorte de traduction directe du langage machine en utilisant des symboles textuels.

Imaginons que le processeur comprenne que lorsqu'il reçoit l'octet  0000 1111 , on désire lui faire faire l'addition des contenus des registres R1 et R2, comme  0001  et  0010 .

Le processeur reçoit donc :

 0000 1111 0001 0010 

Ceci est du langage machine.

Et comme c'est compliqué à comprendre par un humain, les humains ont inventé l'assembleur qui est juste une sorte de traduction entre octet et chaînes de caractères.

Plutôt que de noter

  •  0000 1111  pourrait coder ADD entre deux registres;
  •  0001 , qui correspond à R1 ou RA;
  •  0010 , qui correspond à R2 ou RB.

On obtient alors les instructions du langage d'assemblage qu'on va pouvoir transmettre à un programme nommé... l'assembleur. Et c'est lui qui va transformer le langage d'assemblage en langage machine.

 ⇒   Assembleur   ⇒ 
String "ADD R1 R2"  0000 1111 0001 0010 

Comme cela, tout le monde est content.

  • L'humain comprend ce qu'il veut dire.
  • Le processeur reçoit l'unique langage qu'il comprend.
Assembleur, langage d'assemblage

Normalement :

  • Le langage machine est la suite d'octets
  • Le langage d'assemblage où on transforme juste certaines suites d'octets en bouts de texte
  • L'assembleur est le nom du programme qui traduit le langage d'assemblage en langage machine

Mais, tout le monde parle d'assembleur plutôt que de langage d'assemblage.

Il reste toujours pas mal de questions en suspens. Quatre exemples :

  1. Où sont stockés les programmes là-dedans ?
  2. Comment fait la machine pour faire une addition ?
  3. Si on veut récupérer des données externes (clavier ?), on récupère à partir de quelle provenance ?
  4. Si on veut envoyer des informations vers l'extérieur (écran ?), on envoie vers quelle destination ?

3 - Machine de Turing

3.1 Algorithme

Pendant très longtemps, la notion d'algorithme a été une notion floue. On le définissait comme un nombre fini d'instructions menant à un résultat sur certaines entrées, instructions opérées sur une "machine".

La théorie de la calculabilité est un domaine de la logique mathématique et de l'informatique théorique. Elle permet d'identifier et classifier les fonctions qui peuvent être calculées à l'aide d'un algorithme (c'est à dire en utilisant un nombre fini d'instructions et un nombre fini de zones mémoires).

Elle n'existait pas réellement jusqu'à ce qu'on définisse précisement ce qu'est une "machine".

3.2 Le créateur de l'informatique théorique ?

Alan Turing

Alan Turing (1912-1954) est un mathématicien et cryptologue britannique. Nous allons voir que ses recherches fondent la science informatique.

Photo d'Alan Turing
Alan Turing
La machine de Turing

Alan Turing présente en 1936 une machine imaginaire, pure création de l'esprit, nommée depuis machine de Turing.

Une machine de Turing est une machine mécanique virtuelle, un mécanisme simple qui S'IL ETAIT CONCU REELLEMENT permettrait d'exécuter des algorithmes. Elle fut inventée avant le premier ordinateur.

Même sans existence réelle, la machine constitue le modèle de ce qui peut être calculé ou pas. Si un calcul est théoriquement possible sur une machine de Turing, c'est qu'on pourrait la faire calculer par une machine automatique. Avec cette machine de l'esprit, Turing est parvenu à définir ce qui sera calculable un jour sur un ordinateur, une machine qui n'existait même pas encore.

La machine de Turing se compose :

  1. d'un ruban infini divisé en cases consécutives qui peuvent contenir un ensemble fini de symboles.
  2. d'une tête de lecture-écriture qui permet de lire l'une des cases à la fois ou d'y écrire un nouveau contenu.
  3. d'un registre d'état enregistrant un nombre fini d'états (au départ, il contient "ETAT DE DEPART").
  4. Une table d'actions. C'est un tableau à deux entrées qui indique ce qu'on doit faire lorsque la machine lit un symbole sur une case et étant dans.un état précis.
https://fr.wikipedia.org/wiki/Machine_de_Turing#/media/Fichier:Maquina.png
Vue d'artiste de la machine de Turing (domaine public, publié sur Wikipedia)
Décidable ou indécidable ?

Une catégorie particulière de problèmes est la catégorie des problèmes décidables. Il s'agit des problèmes pour lequel la machine finit toujours par s'arrêter et fournir une réponse OUI si la réponse est OUI sur les entrées fournies, et NON si la réponse est NON.

Les problèmes indécidables sont différents : la machine s'arrête et répond OUI si c'est OUI avec les entrées fournies mais peut parfois tourner en boucle sinon. En conséquence, tant que la machine n'a pas répondu, on ne peut pas distinguer ces deux cas :

  • Elle va répondre OUI un jour, il faut juste lui laisser du temps
  • Elle va répondre NON un jour, il faut juste lui laisser du temps.
  • Elle est partie sur une boucle infinie et ne rendra plus jamais la main...

C'est pourquoi on parle de problème indécidable : lorsqu'on considère que ça devient long, on ne sait pas si ca vaut la peine d'attendre encore un peu, ou pas...

Un exemple ?

A l'aide de la machine de Turing, on peut notamment répondre à l'une des questions fondamentales de la théorie de la décidabilité : peut-on créer un programme A qui lit le code-source d'un autre programme B et les données que devra traiter le programme B et décider si B va s'arrêter et répondre, ou si B va tourner en boucle.

Code de B  ⇒   Programme A   ⇒ 
et Arrêt de B : OUI ou NON ?
Données de B

On nomme cela le problème de l'arrêt (et il sera étudié en Terminale NSI).

A l'aide de la machine de Turing, on peut prouver formellement que le problème de l'arrêt est indécidable : un programme ne peut pas déterminer à coup sur que n'importe quel autre programme va s'arrêter même en disposant de son code source et des données sur lesquels il doit travailler.

Alan Turing est donc vu comme l'un des pères de l'informatique.

Alan Turing et l'Histoire

Ceci fut classé secret defense pendant de nombreuses années après la 2nd Guerre Mondiale : Alan Turing a joué un rôle majeur dans la cryptanalyse de la machine Enigma utilisée par l'armée allemande.

Sans la découverte du moyen de comprendre les communications cryptées par Enigma, la guerre aurait sans doute duré plus longtemps. Et comme les Nazis recherchaient également à produire la bombe atomique, l'enjeu de la rapidité était considérable.

Après la guerre, Alan Turing participa

  • à l'élaboration des premiers ordinateurs,
  • aux études initiales sur l'intelligence artificielle et
  • à certaines études liant informatique et biologie.

Le rôle fondamental d'Alan Turing lors de la guerre ne sera révélé qu'en 1970. Jusqu'à cette date, son implication dans l'effort de guerre était classifiée secret-defense. Pourtant, il sera poursuivi en justice pour son homosexualité en 1952 et fut retrouvé mort, empoisonné au cyanure, chez lui en 1954. Il n'avait alors que 41 ans. Rien ne prouve qu'il s'agisse d'un suicide, d'un simple accident ou d'un meutre discret.

4 - Architecture de von Neumann

John von Neumann (1903-1957) est un mathématicien et physicien américano-hongrois.

Il a apporté de nombreux travaux autant en physique quantique, en mathématiques qu'en économie.

Sa contribution à l'informatique est immense puisque tous les ordinateurs utilisent l'architecture qu'il a établi.

https://commons.wikimedia.org/wiki/File:JohnvonNeumann-LosAlamos.jpg
Cette image appartient à Los Alamos National Laboratory. La société permet l'utilisation de cette photo sous condition d'en préciser le propriétaire

Nous nous étions demandé où stocker les instructions de la machine M10. La réponse de von Neumann est de placer les données et les programmes au même endroit. Il s'agit d'une structure inspirée des machines de Turing dites universelles. La puissance de von Neumann fut néanmoins de parvenir à passer de l'idée de cette machine à sa concrétisation.

C'est pourquoi ce type d'ordinateur se nomme parfois aussi ordinateur à programme enregistré.

Voici donc un premier schéma de principe :

Memoire UDC UAL Accumulateur Accumulateur Entrée Sortie

On voit donc que les zones-mémoires peuvent envoyer ou recevoir des informations à destination

  1. de l'Unité Arithmétique Logique (UAL), comme avec notre M10
  2. mais également vers une Unité de Contrôle (UDC) qui va servir à interpréter les ordres.

L'une des premières actions à faire est donc de charger dans l'Unité de Contrôle la première instruction en allant la lire... en mémoire.

Il reste donc à compléter le schéma en rajoutant de quoi permettre aux deux unités de se transmettre des informations.

Mémoire vive et processeur

Notre ordinateur dispose donc maintenant :

  1. D'une zone mémoire dite mémoire vive (RAM) qui permet de stocker temporairement les données et les instructions. On dit qu'il s'agit d'une mémoire volatile (qui disparait lorsqu'on coupe l'alimentation)
  2. Le processeur également nommé UDT (Unité de Traitement) ou CPU (central processing unit) en anglais. Il est composé de
    • l'UDC (unité de contrôle) qui lit et interprète les instructions
    • l'UAL (unité arithmétique et logique)
    • des registres
  3. Les flèches représentent, elles, ce qu'on nomme les bus parallèles : un bus de 64 bits est constitué de 64 "fils électriques" qui permettent de faire transiter 64 bits simultanément. Si on doit transporter 128 bits avec des bus de 64 bits, il faudra donc faire 2 opérations de transport, là où un seul transport suffit avec un bus de 128 bits. On dispose d'ailleurs de 3 types de bus :
    • Les bus d'adresses permettent de transmettre les adresses mémoires voulues
    • Les bus de données permettent de transférer les données situées qu'on trouve à partir de l'adresse fournie
    • Les bus de contrôle permettent de transférer les bits correspondants aux informations nécessaires à la gestion des instructions

05° Si on part du principe que le système doit pouvoir transporter en une seule opération une adresse via son bus d'adresses, combien d'adresses-mémoires RAM différentes peut-on avoir dans un ordinateur dont le bus d'adresse est un bus 16 bits ? Si on considère que chaque case mémoire correspond à un octet, quelle est la mémoire vive maximale disponible sur ce système s'il ne disposant pas d'autres manières d'adresser sa mémoire ?

...CORRECTION...

Il faut calculer à chaque fois 216 pour avoir le nombre d'adresses différentes.

216 = 65536.

On dispose donc de 65536 adresses différentes uniquement.

Si le bus de données est un bus de 8 bits, cela veut dire qu'on ne peut stocker qu'un octet par case mémoire : on dispose donc de 65536 octets, soit un peu plus de 65 ko de mémoire vive.

06° Faire de même pour un ordinateur muni d'un processeur 32 bits, et de bus d'adresses de 32 bits.

...CORRECTION...

Il faut calculer à chaque fois 232 pour avoir le nombre d'adresses différentes.

232 = 4294967296.

On dispose donc de 4294967296 adresses différentes.

En prenant des cases de 1 octet, on aura donc au maximum un peu plus de 4 Go de mémoire vive disponible.

07° Votre disque dur ou votre carte SD correspondent-t-ils à la mémoire vive ?

...CORRECTION...

Non, ils correspondent à une mémoire de masse non volatile : la capacité mémoire est beaucoup plus grande mais le temps d'accès également.

08° Combien d'opérations pour stocker ou lire un grand entier stocké sur 4 octets avec un bus de données de 8 bits connaissant l'adresse mémoire du premier octet ?

...CORRECTION...

On va devoir transférer les 4 octets en quatre étapes : 8 bits à la fois !

09° Combien d'opérations pour stocker ou lire un grand entier stocké sur 4 octets avec un bus de données de 32 bits connaissant l'adresse mémoire du premier octet ?

...CORRECTION...

Cette fois, on peut ramener 4 octets à la fois directement (4 octets = 32 bits). On va donc parvenir à lire l'entier en une seule opération à l'aide de l'adresse-mémoire du premier octet.

10° La même lecture d'un entier sur 4 octets va-t-elle être plus rapide avec un bus de données 64 bits ?

...CORRECTION...

Non : cette fois, nous n'allons en réalité utiliser que 32 bits sur les 64 bits. On ne gagne donc pas de temps par rapport à un bus de 32 bus.

11° Dans quel cas le bus de données 64 bits va-t-il alors être plus efficace ?

...CORRECTION...

Lorsqu'on aura besoin de ramener des données stockées sur 5 octets ou plus.

Il nous reste à placer notre accumulateur : il va permettre par exemple de stocker le résultat de l'UAL. Ou d'interagir en ENTREE ou en SORTIE avec l'extérieur. Il peut y en avoir 1 ou 4. C'est juste un choix de construction.

Voici le schéma de principe final d'une machine de von Neumann, du moins tel qu'on vous demande de la comprendre cette année :

Machine de von Neumann

On a donc :

  1. Le processeur également nommé UDT (Unité de Traitement) ou CPU (central processing unit) en anglais. Il est composé de l'UDC (unité de contrôle) et l'UAL (unité arithmétique et logique, qui contient au moins un registre nommé accumulateur)
  2. Quelques registres si on le désire
  3. Les 3 bus dont :
    1. Les bus d'adresses dont le nombre de bits permet de trouver le nombre de cases mémoires adressables
    2. Les bus de données dont le nombre de bits permet de savoir combien d'octets de données on peut transférer en une opération à partir de l'adresse fournie via le bus d'adresses
    3. Les bus de contrôle qui permettent de transférer les ordres et les informations permettant leurs exécutions
  4. Entrée peut correspondre à des capteurs (on envoie des données vers l'ordinateur depuis la souris, le clavier...)
  5. Sortie peut correspondre à des actionneurs (on agit sur l'environnement à l'aide de l'écran, d'un buzzer...)
  6. Une mémoire permettant de stocker les programmes et les données.

Il reste bien entendu encore bien des composants importants que nous n'avez pas vu. Par exemple :

  • l'horloge : c'est le composant qui envoie un signal permettant à tous les composants d'agir en cadence. Plus l'horloge est rapide, plus on peut faire d'instructions par seconde.
  • les processeurs annexes comme le processeur grahique ou GPU (Graphics processing unit ): c'est un processeur esclave du processeur principal et qui est optimisé pour faire du calcul sur les objets 3D par exemple. Le processeur lui sous-traite une partie des calculs lors de l'utilisation de 3D par exemple
  • Même principe pour la carte son
  • La carte réseau qui se charge des interactions de type communication
  • ...

5 - L'année prochaine : M999

Reste que pour l'instant, nous avons dit que le programme et les données étaient dans la même mémoire mais nous ne l'avons pas montré.

Vous le verrez en Terminale avec la machine M999.

Structure de M99
Sur la base de ressources cc-by-sa Philippe Marquet, Martin Quinson «M999, le processeur débranché» : github.com/InfoSansOrdi/M999<

Mais on ne peut pas non plus tout découvrir aujourd'hui. Le but n'est pas ici de faire un cours d'assembleur.

Retenons donc :

Qu'on peut concevoir des ordinateurs comportant :

  • Une mémoire centrale (rapide ou non, volatile ou non) contenant à la fois les données et les programmes. Le tout sous forme d'octets.
  • D'un processeur (CPU) composé principalement d'une unité de commande (UDC, gérant les instructions lues en mémoire), d'une unité arithmétique et logique (UAL), de plusieurs registres (un accumulateur de réponse, un pointeur de commande...)
  • et les bus permettant de faire communiquer tout cela.

6 - FAQ

Rien pour le moment

Voilà pour l'introduction. Vous venez donc de voir ce qu'est l'assembleur. Et pourquoi l'Amiral Grace Hopper a mis tant d'énergie dans la création du premier langage haut niveau !

Dans la prochaine activité, nous verrons d'abord comment les ordinateurs parviennent à réaliser des opérations basiques comme l'addition ou comme l'utilisation de ET ou du OU.

Activité publiée le 09 02 2020
Dernière modification : 14 02 2021
Auteur : ows. h.