- C’est quoi, un semi-conducteur ?
- C’est quoi un transistor ? Comment ça marche ?
- Comment fonctionne la mémoire flash d’un lecteur SSD ?
L’informatique, c’est un tas de puces électroniques, de circuits imprimés et de câbles qui permettent à chacun de nous de communiquer avec d’autres personnes, de réaliser des graphiques ou de l’imagerie 3D, de jouer et créer de la musique et une infinité d’autres choses. Il n’en reste que ce n’est qu’une machine purement électronique : un assemblage de composants.
S’il est assez intuitif de se remémorer ou de comprendre les lois physiques comme la loi d’Ohm ou les lois de Norton ou Thévenin sur les circuits électriques d’une part, et qu’on peut également arriver à créer ses propres programmes basiques (comme un « hello world ») dans un IDE tout fait d’autre part, ce qui est longtemps resté mystérieux pour moi, c’est le passage d’un monde électronique (un tas de composants électroniques) à un monde logiciel remplis de programmes (une suite de lignes de code). Le mystère tient en fait en une simple ligne : comment un circuit électrique est-il capable de calculer en binaire et de faire en temps réel ce qu’on lui demande ?
Si vous voulez partir de zéro en ce qui concerne le fonctionnement de votre PC, je vous conseille de lire les articles précédents dans cette série d’articles. Dans le cas contraire, je supposerai que le transistor est un composant que vous connaissez.
Introduction
Expliquer un PC contenant cent milliards de transistors, des fils partout et des centaines de millions de lignes de code est — vous l’aurez compris — beaucoup trop compliqué. On va plutôt commencer par étudier un système électronique et un programme simplistes.
Pour cela, quelques rappels.
Le transistor
Comme suggéré dans l’introduction, je vous propose de lire cet article qui explique son fonctionnement.
Pour le résumer, il s’agit d’un composant électronique à trois bornes où l’état électrique (allumée ou éteinte) de la borne de sortie « E » dépend de l’état électrique (allumées ou éteintes) des deux autres bornes d’entrée « C » et « B ».
Les deux entrées contrôlent donc la borne de sortie :
L’ensemble se fait en appliquant des tensions électriques (généralement on parle de 5 V) aux différentes bornes d’entrée.
Le binaire
Le binaire est un mode de calcul qui au lieu d’utiliser dix chiffres comme on a l’habitude, n’en utilise que deux : $0$ et $1$.
Vous pouvez apprendre à compter en binaire si vous voulez, j’ai un joli cours pour ça, mais ce n’est pas ce qui nous intéresse ici.
Plutôt que de parler d’appliquer 5 V à une borne et 0 V à une autre borne, on dit qu’on met les bornes à $1$ et à $0$ respectivement. Mathématiquement, on pourrait dire qu’il s’agit d’un changement de variable. Utiliser une notation avec des 0 et des 1 est plus rapide, c’est pour ça qu’on utilise ce système dans l’électronique et donc dans l’informatique en général.
Un programme
Dans la vie de tous les jours, par exemple lors d’un festival ou un concert, vous pouvez obtenir un « programme » : il s’agit de la liste des représentations ou des activités qui seront données ce jour là. Chaque ligne du programme correspond à un événement, chaque événement suit le précédent.
Une recette de cuisine, c’est également un programme : chaque ligne correspond à une instruction à opérer, et l’ensemble des des instructions doivent être effectuées dans l’ordre si on veut obtenir le résultat attendu.
Un dernier exemple, les instructions données sur un distributeur automatique constituent également un programme : il faut insérer la carte, puis taper son code, puis reprendre sa carte, puis prendre les billets. Chaque instruction appelle une action de la part de l’utilisateur. Si l’utilisateur n’agit pas, alors le distributeur automatique reste bloqué sur l’étape en cours.
En informatique, c’est plus ou moins la même chose : un programme représente une suite de tâches à effectuer pour l’ordinateur : l’ordinateur accomplit les tâches les unes à la suite des autres, dans l’ordre où elles sont écrites.
Notre ordinateur simpliste
Connaissant le fonctionnement d’un transistor et sachant que l’on peut brancher les transistors les uns à la suite des autres (tout ceci est expliqué dans mon article sur le transistor) pour former des portes logiques (portes ET, portes OU…), on va utiliser le branchement électrique composé de plusieurs portes logiques suivant :
Les entrées sont A et B, les sorties sont S et Rs (on ignore Re, il n’est pas essentiel ici).
Notre programme simpliste
Je l’ai dit, un programme c’est une suite d’instructions. Notre suite d’instructions à appliquer sur notre ordinateur est ceci :
- Brancher la borne A à du 5 V ;
- Brancher la borne B à du 5 V.
Ou, en terme binaires :
- Mettre la borne A à 1 ;
- Mettre la borne B à 1.
Et c’est tout.
Lors de l’exécution de ces tâches (de ce programme) on va laisser faire le circuit électrique et regarder ce qui se passe sur les bornes S et Rs. Il ne s’agit ici que de physique : loi d’Ohm, effet transistor, circulation du courant, etc.
Exécution du programme
Maintenant que l’on dispose du matériel et du logiciel, on va pouvoir mettre tout ça en route.
Initialement, on n’a encore rien branché : les bornes A et B sont à 0 et 0. Les sorties, elles, sont ici à 0 et 0 aussi.
On peut tout mettre ça dans un tableau :
A | B | Rs | S |
---|---|---|---|
0 | 0 | 0 | 0 |
Mettons la sortie A à 1. On obtient ceci :
A | B | Rs | S |
---|---|---|---|
1 | 0 | 0 | 1 |
Mettons la sortie B à 1 (notons qu’il est dit nul part de remettre A à 0, donc on n’y touche pas et on laisse A à 1) :
A | B | Rs | S |
---|---|---|---|
1 | 1 | 1 | 0 |
On peut regrouper les trois lignes successives dans un même tableau. Ce tableau représentant l’ensemble des états d’entrée possibles avec les sorties correspondantes, porte le nom de table de vérité :
A | B | Rs | S |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |
Ajoutons deux colonnes :
- une qui juxtapose les valeurs de Rs et de S en « RsS », formant donc des nombres à deux chiffres en binaire ;
- une où je convertis la valeur binaire de RsS en décimal.
A | B | Rs | S | RsS(bin) | RsS(déc) |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 00 | 0 |
1 | 0 | 0 | 1 | 01 | 1 |
1 | 1 | 1 | 0 | 10 | 2 |
Qu’est ce qu’on observe ? On observe que pour chaque ligne du tableau, quand on fait A+B on obtient RsS !
- 0+0 = 0
- 0+1 = 1
- 1+1 = 2
Le montage utilisé ici, avec les portes logiques branchées telles qu’elles le sont là est un montage additionneur : il affiche en binaire sur les sorties Rs et S la somme des valeurs en entrée sur A et B.
Ce type de montage est un vrai montage qui est réellement utilisé en électronique.
Exécution du programme sur l’ordinateur un peu moins simpliste
Dans les PC, à la place d’un additionneur sur deux entrées, on utilise un montage similaire mais beaucoup plus gros, avec 5, 10, 1000 entrées et plein de sorties également.
Le montage, correctement branché permettra alors de faire l’addition (en binaire) des entrées. La suite de 1 ou 0 sur les sorties correspondra au nombre d’entrées qui seront à 1, en binaire.
Pour aller plus loin, maintenant, si on allume successivement les entrées l’une après l’autre, le montage va « afficher » sur les sorties les nombres en binaire correspondant à 1, 2, 3, 4… On aura alors réalisé un montage qui compte tout seul !
Or électriquement, on peut faire en sorte que nous n’ayons qu’à appuyer une seule fois sur un bouton et les entrées s’allumeront de façon séquentielle. Ajoutons une petite LED à chaque sortie et on aura un compteur en binaire avec des LED : les LED afficheront (en binaire) le nombre d’entrées actives.
Voilà notre premier ordinateur capable de réaliser de façon autonome une opération « compliquée »
Et un vrai ordinateur ?
Les vrais ordinateurs fonctionnent comment ? C’est simple : on appuie sur « On » et il nous ouvre le système d’exploitation, récupère nos e-mails, nous affiche le bureau, se met à jour, le tout sans que nous n’ayons encore touché à quoi que ce soit.
Le principe est exactement celui de notre ordinateur compteur : une fois qu’on l’a allumé, il effectue des actions dictées par un circuit électrique capable d’activer les entrées séquentiellement dans le temps.
En pratique, quand on appuie sur le bouton « On » de l’ordinateur, un petit programme très basique (le BIOS et/ou le POST, similaires dans l’idée à ce qu’on a vu au dessus) va mettre sous tension les différents composants et commencer à détecter les données qui sont inscrites dessus, sous forme binaire.
Ensuite, ce sont les données du disque dur qui sont envoyées au CPU, un assemblage de milliards de transistors et de portes logiques qui va utiliser ces données comme données d’entrée. La sortie est quant à elle branchée sur votre écran ou chaque pixel est ainsi allumé et colorée : c’est comme ça que des programmes présentes sur votre disque dur vont aller afficher votre bureau et vos icônes.
Vous avez sûrement déjà entendu parler de la fréquence du processeur (les « 2,3 GHz » du processeur, ou le « 1 333 MHz » de la mémoire). Il s’agit ici de la fréquence d’horloge du processeur. Les opérations sont effectuées les unes à la suite des autres, séquentiellement, et « 2,3 GHz » signifie que le processeur est capable d’effectuer jusqu’à 2,3 milliards de cycles de calculs par seconde.
Et les programmes ?
Pour qu’un ordinateur puisse afficher votre bureau, il suffit que le système d’exploitation (Windows, Linux, ou OS-X…) soit installé sur votre disque dur. Si c’est fait correctement, alors le système d’exploitation s’ouvrira tout seul après l’allumage de l’ordinateur.
Ceci dit, un système d’exploitation (SE) seul ne permet pas de faire grand chose : il ne permet ni de surfer (c’est Firefox ou Chrome qui font ça) ni de taper une lettre (comme Word ou Writer). Ceci est le rôle des programmes. Ces programmes sont accessibles quand on clique sur leur icônes.
Les icônes sont un moyen facile de lancer des programmes, mais là-aussi tout se fait de façon binaire au niveau de transistors : en bougeant la souris sur une partie de l’écran, la position de la souris est calculée par une sous-partie du SE appelé le « pilote ». Les coordonnées sont mises en relation avec les données servant à afficher l’image du bureau et les coordonnées correspondant à l’image d’une icône sont retenues : à ce moment là, une liste d’instructions correspondant à l’icône sont envoyées au processeur et l’ordinateur exécute le programme sur lequel on vient de cliquer.
En fait, quoi qu’on fasse, que ce soit déplacer la souris, presser une touche du clavier ou cliquer sur la souris, l’ordinateur effectue des calculs binaires et réagit en conséquence (appuyer sur la touche « A » provoque la modification des pixels de l’écran qui vont aller vous afficher la forme d’une lettre « A »).
Bien-sûr, chaque programme étant différent, un clic n’aura pas le même effet partout : dans le navigateur, il peut signifier « changer de page web », alors que dans un jeu vidéo c’est plutôt « donner un coup d’épée ».
Et programmer ?
Programmer, c’est imaginer, inventer, écrire puis donner une suite d’instructions à l’ordinateur.
C’est faire un programme informatique : quand on sait comment fonctionne l’ordinateur et qu’on a commencé à apprendre son langage (un langage de programmation), on peut lui faire faire ce qu’on veut. Ainsi, quand on cliquera sur l’icône de son propre programme, ce seront vos instructions à vous qui seront exécutées par l’ordinateur.
Choisir convenablement les bonnes instructions et le bon ordre dans lequel exécuter ces instructions, ainsi que savoir comment écrire ces instructions dans une autre langue (celle de l’ordinateur), ça correspond au travail du programmeur. Non seulement écrire des programmes demande des connaissances dans le langage informatique donnée, mais il faut également savoir comment interpréter les actions de l’utilisateur (clic de la souris, touche du clavier…). Mieux encore, il s’agit aussi de créer une interface graphique pour le programme : créer des menus, dessiner des icônes, gérer les transitions et les animations.
Pour les suites logiciels plus imposants, il s’agit parfois de découper le programme en plusieurs sous-programmes qui vont chacun être responsables d’une tâche. Généralement il y a alors différentes personnes travaillant sur les différentes parties du programme. Il convient alors au chef de projet de faire en sorte que tout le monde utilise bien les mêmes spécifications, dans le but de pouvoir à la fin « assembler » chaque partie du programme.
Le plus souvent même, les différents programmes sont écrits et créés par des entreprises ou des groupes de personnes différentes : le logiciel The GIMP est édité par la fondation Gnome, mais peut fonctionner sur Windows (édité par Microsoft), le tout avec du matériel créé par Intel.
Toutes ces choses spécialisées : architecture d’un programme, codage, design, 3D, interaction avec l’utilisateur… font partie des métiers de l’informatique, et généralement chaque personne est spécialisée dans un domaine précis (avec tout de même des capacités ou des connaissances dans les autres domaines).