L'ordinateur expliqué aux enfants

…, aux grands parents et aux personnes effrayées par la technologie.

microprocesseurCe nouveau billet aurait logiquement dû précéder l’article destiné à expliquer Internet. En fait je ne pensais pas aborder ce sujet parce que l’on trouve déjà beaucoup de très bonnes documentations en ligne, en particulier sur Wikipedia. Mais suite aux premiers commentaires du précédent billet, je me suis décidé à écrire cet article en essayant de conserver les mêmes objectifs : faire apparaître uniquement les idées générales et les informations nécessaires à la compréhension des problèmes techniques les plus courants.

J’ai déjà abordé la notation binaire dans le billet précédent. Je vais me contenter d’un rapide rappel: l’ordinateur est stupide et ne sais manipuler que de petits interrupteurs. L’interrupteur est ouvert : le courant ne passe pas : on a la valeur ‘zéro’. L’interrupteur est fermé : le courant passe : on a la valeur ‘un’. On associe ces ‘0’ et ‘1’ par groupe de 4. Cette astuce permet d’utiliser une écriture hexadécimale (0 à 9 plus A,B,C,D,E,F) ainsi ‘2’ en décimal devient ‘2’ en hexadécimal et ‘0010’ en binaire. ‘10’ en décimal devient ‘A’ en hexadécimal et ‘1010’ en binaire. ‘15’ en décimal devient ‘F’ en hexadécimal et ‘1111’ en binaire. En pratique on utilise plutôt des groupes de 8 chiffres binaires (les octets), ou deux chiffres hexadécimaux.

Observons les valeurs suivantes : ‘0010’, ‘0100’ et ‘1000’, elles correspondent respectivement à 2, 4, 8 en décimal, ou encore : ‘0011’, ‘0110’, ‘1100’ qui correspondent à 3, 6, 12 en décimal. Les plus astucieux remarquent alors qu’un décalage vers la gauche produit une multiplication par 2, le décalage vers la droite produit une division par 2. On va alors très tôt créer des circuits électroniques qui permettent d’enregistrer les valeurs de travail dans des registres et d’effectuer les opérations de décalage et addition : les instructions. Ces circuits sont constitués essentiellement de micro interrupteurs : les transistors. Aujourd’hui (en 2012) ces circuits sont tellement miniaturisés qu’on peut mettre jusqu’à 1 milliard de transistors sur 1cm2. L’élément essentiel qui regroupe ces circuits électroniques est le microprocesseur.

La vitesse à laquelle il peut traiter les instructions dépend de la fréquence et du nombre d’instructions qu’il peut traiter en parallèle.

Le microprocesseur traite des valeurs à l’aide d’instructions.

Voici un exemple

Pour la machine, le code ressemble à cette ligne de 0 et 1 et j’ai ajouté les espaces pour que cela soit un peu lisible

   10111000 00000001 00000000 00000000 00000000
   11000001 11100000 00000010

Pour que cela soit un peu plus lisible pour les humains voici la transformation hexadécimale

   b8 01 00 00 00
   c1 e0 02

Un tableau de correspondance permet de convertir ces codes en instructions machine (ici pour un microprocesseur Intel):

   mov    $0x1,%eax
   shl    $0x2,%eax

En langage humain, on obtient :

   on met la valeur 1 dans le registre "eax",
   on effectue deux décalages à gauche.

En conclusion :

  le registre eax contient alors la valeur 4.

Cette suite d’instructions est un programme.

Ces instructions indiquent les circuits à utiliser. Elles sont alors spécifiques à chaque microprocesseur. Certains microprocesseurs privilégient la puissance, d’autres la vitesse de calcul mais la consommation électrique ou la taille peuvent également être importantes. Intel, PowerPC, AMD, ARM sont des marques ou des types de microprocesseurs.

Le programme ci-dessus est très simpliste : c’est une simple multiplication par 4. La première valeur pourrait être variable : c’est une donnée. On contraire d’une calculatrice, le programme permet d’exécuter une très longue succession d’opération plus ou moins complexes.

RAMPour traiter ce programme on va enregistrer sa suite d’instruction dans une mémoire rapidement accessible par le microprocesseur : la RAM. Un ensemble de données peut également être enregistré en RAM. Le programme ira chercher les données à traiter, pour les trouver et les enregistrer chaque donnée a une adresse dans la RAM. Il s’agit encore une fois d’un nombre binaire.

Ainsi à l’adresse ‘1’ on enregistre l’entrée ‘b8’, on termine à l’adresse ‘8’ avec l’entrée ‘02’.

Nous avons vu dans le billet précédent qu’avec 16 bits nous pouvons avoir 65535 données. On peut alors avoir 65Koctets de données en RAM. Avec 32 bits la valeur maximale est 4 294 967 295 on peut alors adresser 4Goctets de données.


disque durPour transmettre ces instructions au microprocesseur, il nous faut au minimum un clavier. Il faut ensuite également un écran pour afficher le résultat. Pour ne pas saisir un programme à chaque allumage, il faut un disque dur. Tous ces éléments complémentaires au microprocesseur et la RAM sont les périphériques.

Un mini programme, enregistré dans une mémoire morte (ROM) qui ne s’efface pas en l’absence de courant, est lancé au démarrage de l’ordinateur et détecte les périphériques. Il permet à ces périphériques d’écrire des données dans une zone mémoire qui sera traitée par le microprocesseur. Ce mini programme est le BIOS Basic Input Output System ou encore firmware.

Ce BIOS est un programme vraiment élémentaire et permet juste le démarrage de l’ordinateur. Pour effectuer des opérations plus complexes comme aller chercher les données sur le disque dur et contrôler leur envoi au microprocesseur il faut un ensemble de programmes plus complexes : un système d’exploitation. Windows, Mac OS, Linux ou Android sont des systèmes d’exploitation.

Si à première vue on distingue surtout ces systèmes par ce qu’ils affichent à l’écran nous allons voir qu’en réalité ils ont beaucoup de points commun et que cet affichage est assez secondaire.

Tous ces systèmes disposent d’un programme principal appelé noyau ou kernel. C’est ce noyau qui organise les tâches de lecture, de lancement de programme ou d’affichage. Il gère l’accès aux périphériques au travers de programmes spécifiques : les pilotes ou drivers ou modules. Ainsi de nos jours, le microprocesseur n’écrit plus directement sur l’écran mais il envoie des instructions à une carte électronique spécifique qui dispose elle-même d’un microprocesseur spécialisé : c’est une carte graphique.

La carte mère est la carte électronique principale qui connecte le microprocesseur à la RAM et aux cartes électroniques annexes. Toutes ces cartes peuvent être intégrés directement sur la carte mère si on dispose d’un espace réduit.

L’exemple d’instructions que j’ai présenté précédemment n’est en réalité pas directement utilisable sur le microprocesseur. Le système d’exploitation doit savoir qu’il s’agit d’un programme : une suite d’instructions à utiliser et non pas de simples données. Les programmes et les données sont enregistrés dans des fichiers. On trouve également des bibliothèques qui sont des fichiers d’instructions utilisés par des programmes. Les drivers sont en général des bibliothèques utilisées par le programme noyau. Chaque système d’exploitation utilise sa propre stratégie pour identifier les fichier de données, de programme ou de bibliothèque. Il s’agit souvent d’extension ‘.exe’, ‘.dll’, ‘.png’ mais également d’informations incluses au début du fichier. Ces fichiers contiennent généralement des données binaires.

Nous avons vu que les données binaires dépendent de chaque microprocesseur. Il serait particulièrement long d’écrire en données binaires l’ensemble des instructions du programme (ou logiciel, ou application) qui vous permet de lire ce billet. En pratique on utilise un langage de programmation.

Voici ci-dessous notre programme simpliste écrit en langage C.

main()
{
   int a = 1;
   a = 4 * a;
}

microprocesseurC’est un fichier de données. Ces données sont un simple texte. On utilise ensuite un programme spécifique : un compilateur, pour transformer ce fichier en instructions machine (assembleur). C’est un fichier source.

Le compilateur ajoutera également les éléments nécessaires au système d’exploitation.

Ainsi un logiciel complexe comme un traitement de texte, un tableur, un navigateur web ou un lecteur de mail est écrit à partir de fichiers sources sans que le développeur n’ai à s’occuper spécifiquement du microprocesseur ou des drivers.

Nous pouvons maintenant retenir que tous les ordinateurs fonctionnent suivant les mêmes principes : un firmware permet de lancer le noyau du système d’exploitation enregistré sur un périphérique de stockage qui gèrera les fichiers de programmes qui utiliserons des fichiers de données.

De nos jours, grâce à la miniaturisation des composants, les téléphones, téléviseurs ou autre appareils un peu sophistiqués sont également des ordinateurs.

Vous pouvez également noter qu’un programme n’est utilisable que pour un système d’exploitation spécifique et pour un microprocesseur donné.

Je vous propose, dans un futur billet, d’aborder ce qui fait les différences entre les principaux systèmes d’exploitation existant. Vous verrez que l’histoire de leur conception est encore un fois fondamentale dans leurs capacités et limitations actuelles.