La plupart des éléments d’un ordinateur sont relativement simples à comprendre: la RAM, le stockage, les périphériques et le logiciel fonctionnent tous ensemble pour faire fonctionner un ordinateur. Mais le cœur de votre système, le processeur, semble magique même pour de nombreux techniciens. Ici, nous ferons de notre mieux pour le décomposer.
La plupart des recherches pour cet article proviennent de «Mais comment le sait-il?» par J. Clark Scott. C’est une lecture fantastique, va beaucoup plus loin que cet article et vaut bien les quelques dollars sur Amazon.
Une note avant de commencer: les processeurs modernes sont des ordres de grandeur plus complexes que ce que nous décrivons ici. Il est presque impossible pour une seule personne de comprendre toutes les nuances d’une puce avec plus d’un milliard de transistors. Cependant, les principes de base de la façon dont tout cela s’articule restent les mêmes, et la compréhension des bases vous donnera une meilleure compréhension des systèmes modernes.
Commencer petit
Les ordinateurs fonctionnent en binaire. Ils ne comprennent que deux états: activé et désactivé. Pour effectuer des calculs en binaire, ils utilisent ce qu’on appelle un transistor. Le transistor ne permet au courant source de le traverser vers le drain que s’il y a du courant à travers la grille. Essentiellement, cela forme un commutateur binaire, qui coupe le fil en fonction d’un deuxième signal d’entrée.
Les ordinateurs modernes utilisent des milliards de transistors pour effectuer des calculs, mais aux niveaux les plus bas, vous n’en avez besoin que d’une poignée pour former les composants les plus basiques, appelés portes.
Des portes logiques
Empilez correctement quelques transistors et vous obtenez ce que l’on appelle une porte logique. Les portes logiques prennent deux entrées binaires, effectuent une opération sur elles et renvoient une sortie. La porte OU, par exemple, retourne true si l’une des entrées est vraie. La porte ET vérifie si les deux entrées sont vraies, XOR vérifie si une seule des entrées est vraie et les N-variantes (NOR, NAND et XNOR) sont des versions inversées de leurs portes de base.
Faire des maths avec des portes
Avec seulement deux portes, vous pouvez faire une addition binaire de base. Ce diagramme ci-dessus montre un demi-additionneur, créé en utilisant Logiquement, un terrain de jeu en ligne gratuit pour les portes logiques. La porte XOR s’activera ici si une seule des entrées est activée, mais pas les deux. La porte ET s’allumera si les deux entrées sont activées, mais restera désactivée s’il n’y a pas d’entrée. Donc, si les deux sont allumés, le XOR reste éteint et la porte ET s’allume, pour arriver à la bonne réponse de deux:
Cela nous donne une configuration simple avec trois sorties distinctes: zéro, un et deux. Mais un bit ne peut rien stocker de plus de 1, et cette machine n’est pas trop utile car elle ne résout qu’un des problèmes mathématiques les plus simples possibles. Mais ce n’est qu’un demi-additionneur, et si vous en connectez deux avec une autre entrée, vous obtenez un additionneur complet:
L’additionneur complet a trois entrées: les deux nombres à ajouter et un «report». Le report est utilisé lorsque le nombre final dépasse ce qui peut être stocké dans un seul bit. Les additionneurs complets seront liés dans une chaîne, et le report est passé d’un additionneur à l’autre. Le report est ajouté au résultat de la porte XOR dans l’additionneur de la première moitié, et il y a une porte OU supplémentaire pour gérer les deux cas où cela devrait être activé.
Lorsque les deux entrées sont activées, le report s’active et l’envoie à l’additionneur complet suivant de la chaîne:
Et c’est à peu près aussi complexe que l’addition devient. Passer à plus de bits signifie essentiellement plus d’additionneurs complets dans une chaîne plus longue.
La plupart des autres opérations mathématiques peuvent être effectuées avec l’addition; la multiplication est juste une addition répétée, la soustraction peut être faite avec une certaine inversion de bits fantaisie, et la division est juste une soustraction répétée. Et bien que tous les ordinateurs modernes disposent de solutions matérielles pour accélérer les opérations plus complexes, vous pouvez techniquement tout faire avec l’additionneur complet.
Le bus et la mémoire
À l’heure actuelle, notre ordinateur n’est rien de plus qu’une mauvaise calculatrice. C’est parce qu’il ne se souvient de rien et ne fait rien avec ses sorties. Ci-dessus, une cellule mémoire, qui peut faire tout cela. Sous le capot, il utilise beaucoup de portails NAND, et dans la vraie vie peut être assez différent selon la technique de stockage, mais sa fonction est la même. Vous lui donnez des entrées, activez le bit «écriture» et il stockera les entrées à l’intérieur de la cellule. Ce n’est pas seulement une cellule mémoire, car nous avons également besoin d’un moyen de lire les informations à partir de celle-ci. Ceci est fait avec un activateur, qui est une collection de portes ET pour chaque bit de la mémoire, toutes liées à une autre entrée, le bit «lecture». Les bits d’écriture et de lecture sont souvent également appelés «set» et «enable».
L’ensemble de ce paquet est enveloppé dans ce qu’on appelle un registre. Ces registres sont connectés au bus, qui est un faisceau de fils qui parcourent tout le système, connectés à chaque composant. Même les ordinateurs modernes ont un bus, bien qu’ils puissent avoir plusieurs bus pour améliorer les performances multitâches.
Chaque registre a toujours un bit d’écriture et de lecture, mais dans cette configuration, l’entrée et la sortie sont la même chose. C’est vraiment bien. Par example. Si vous vouliez copier le contenu de R1 dans R2, vous activeriez le bit de lecture pour R1, ce qui pousserait le contenu de R1 sur le bus. Lorsque le bit de lecture est activé, vous activez le bit d’écriture pour R2, ce qui copie le contenu du bus dans R2.
Les registres sont également utilisés pour créer de la RAM. La RAM est souvent disposée dans une grille, avec des fils allant dans deux directions:
Les décodeurs prennent une entrée binaire et activent le fil numéroté correspondant. Par exemple, «11» est 3 en binaire, le nombre de 2 bits le plus élevé, de sorte que le décodeur allume le fil le plus élevé. A chaque intersection, il y a un registre. Tous ces éléments sont connectés au bus central et à une entrée centrale d’écriture et de lecture. Les entrées de lecture et d’écriture ne seront activées que si les deux fils qui traversent le registre sont également activés, ce qui vous permet de sélectionner le registre à partir duquel écrire et lire. Encore une fois, la RAM moderne est beaucoup plus compliquée, mais cette configuration fonctionne toujours.
L’horloge, le stepper et le décodeur
Les registres sont utilisés partout et constituent l’outil de base pour déplacer des données et stocker des informations dans le CPU. Alors, qu’est-ce qui leur dit de déplacer les choses?
L’horloge est le premier composant du cœur du processeur et s’éteint et se rallume à un intervalle défini, mesuré en hertz ou en cycles par seconde. C’est la vitesse que vous voyez annoncée à côté des processeurs; une puce de 5 GHz peut effectuer 5 milliards de cycles par seconde. La vitesse d’horloge est souvent une très bonne mesure de la vitesse d’un processeur.
L’horloge a trois états différents: l’horloge de base, l’horloge d’activation et l’horloge réglée. L’horloge de base sera activée pendant un demi-cycle et désactivée pendant l’autre moitié. L’horloge d’activation est utilisée pour activer les registres et devra être allumée plus longtemps pour s’assurer que les données sont activées. L’horloge réglée doit toujours être activée en même temps que l’horloge d’activation, sinon des données incorrectes pourraient être écrites.
L’horloge est connectée au stepper, qui comptera de un au pas maximum, et se réinitialisera à un une fois terminé. L’horloge est également connectée aux portes ET pour chaque registre dans lequel le CPU peut écrire:
Ces portes ET sont également connectées à la sortie d’un autre composant, le décodeur d’instructions. Le décodeur d’instructions prend une instruction telle que «SET R2 TO R1» et la décode en quelque chose que le CPU peut comprendre. Il possède son propre registre interne, appelé «registre d’instructions», dans lequel l’opération en cours est stockée. La façon dont cela se produit exactement dépend du système sur lequel vous utilisez, mais une fois décodé, il activera le jeu correct et activera les bits pour les registres corrects, qui se déclencheront en fonction de l’horloge.
Les instructions du programme sont stockées dans la RAM (ou cache L1 sur les systèmes modernes, plus près du CPU). Puisque les données du programme sont stockées dans des registres, comme toutes les autres variables, elles peuvent être manipulées à la volée pour parcourir le programme. C’est ainsi que les programmes obtiennent leur structure, avec des boucles et des instructions if. Une instruction de saut définit l’emplacement actuel en mémoire que le décodeur d’instructions lit à un emplacement différent.
Comment tout se déroule
Maintenant, notre simplification exagérée du fonctionnement d’un processeur est terminée. Le bus principal couvre tout le système et se connecte à tous les registres. Les additionneurs complets, avec un tas d’autres opérations, sont emballés dans l’unité logique arithmétique, ou l’ALU. Cette ALU aura des connexions au bus, et aura également ses propres registres pour stocker le deuxième numéro sur lequel elle fonctionne.
Pour effectuer un calcul, les données du programme sont chargées à partir de la RAM système dans la section de commande. La section de contrôle lit deux nombres de la RAM, charge le premier dans le registre d’instructions de l’ALU, puis charge le second sur le bus. Pendant ce temps, il envoie à l’ALU un code d’instruction lui indiquant ce qu’il doit faire. L’ALU effectue ensuite tous les calculs et stocke le résultat dans un registre différent, dans lequel la CPU peut lire et continuer le processus.
Crédit d’image: Rost9/ Shutterstock