Voici une vidéo qui fait un excellent travail pédagogique pour faire comprendre plus ou moins en détail comment une architecture d’ordinateur fonctionne à l’intérieur. Plus précisément, et en suivant l’architecture de von Neumann (Illustré sur l’image en bas), la vidéo se focalise principalement sur l’interconnexion entre les 3 composantes des architectures de von Neumann, qui sont le processeur, la mémoire, et les unités d’entrée/sortie. Cela dit, il est important d’avoir une vue globale sur l’architecture et comment elle fonctionne d’une manière générale et théorique, il est aussi très important de comprendre le détail. Ainsi, la vidéo suivante démontre en détail comment le processeur arrive à communiquer avec la mémoire et les unités d’entrée/sortie.
Néanmoins, un point très important à prendre en considération. L’explication donnée dans cette vidéo concerne plus particulièrement les architectures anciennes, des architectures pratiquement des années 80. De nos jours, les ordinateurs et les PC ont totalement évolué et changé de manière de communiquer. C’est devenu beaucoup plus complexe pour que ça soit enseigné à des étudiants universitaires en première ou 2e année. La vidéo en question est celle de la chaîne YouTube de Ron Mattino, c’est une très bonne chaîne bien connue pour faire de la vulgarisation en informatique et en électronique.
Ça a été dit que le moment où l’humain a foulé le premier pied sur la lune, était un grand pas pour l’humanité. Et c’était vrai, c’était une révolution sans précédent. Dans la vidéo qui suit, on va voir une analyse croustillante sur l’ordinateur de bord qui a beaucoup aidé à la réalisation de cette mission. L’ordinateur en question s’appelle Apollo Guidance Computer (AGC), un ordinateur très faible techniquement en comparaison aux normes des ordinateurs des temps modernes. Historiquement, c’était un ordinateur qui a été développé par l’université du Massachusetts dans le début des années 60 avec des techniques, disons-le, ingénieuses et peu présentes dans les architectures modernes. On peut aussi mentionner des procédés obsolètes comme par exemple ; L’utilisation du complément-à-1 un pour représenter les entiers, alors que toutes les architectures modernes utilisent le complément-à-2. Ou l’utilisation de la technologie obsolète de mémoire dite mémoires à tores de ferrite. Ou l’utilisation des banques de mémoire lorsque l’architecture possède peu de bites pour adresser la mémoire dans sa totalité. Néanmoins, l’AGC utilise des techniques, à mon avis, qui sont révolutionnaires pour l’époque. Comme l’encodage de l’adressage indirect utilisant une technique pour hacker une instruction et la fusionner avec la suivante. Ou l’utilisation de l’adressage mémoire pour accéder aux différents registres, ce qui simplifie significativement la programmation. Ou l’instruction bizarre, jamais vu de ma part, appelée CCS “Count, Compare, and Skip”. Ce qui m’a aussi marqué c’est l’utilisation des portes discrètes universelles NAND pour construire toutes l’architecture.
Moi personnellement, ces voyages dans le passé sur les architectures de l’époque, j’en raffole. J’ai même développé une passion dans l’exploration et la compréhension des architectures des machines et des consoles du passé. Vous allez voir sur la vidéo beaucoup d’explication technique concernant l’architecture des ordinateurs et la conception hardware, du passé. À mon avis, c’est l’un des meilleurs endroits aux étudiants pour apprendre et se familiariser avec ce domaine du hardware. La vidéo a été conjointement présentée par Michael Steil (voici son blog) and Christian Hessmann, le premier est un nom bien connu dans ce spécifique domaine. Comme de coutume, ça a été présenté à la plus grande convention de hacker en Europe, le Chaos Computer Club, qui se déroule tous les ans en Allemagne (leur site web et chaine Youtube), dans laquelle Michael Steil est souvent invité.
Personnellement, je trouve la plateforme Aduino, l’un des meilleurs moyens pour permettre aux étudiants et aux initiés de faire une introduction aux systèmes embarqués. Pour faire simple, les systèmes embarqués sont des systèmes qui nécessitent des connaissances en électronique pour construire la plateforme physique, et en informatique pour programmer la plateforme. Ainsi, pour pouvoir faire du système embarqué, il faut au minimum avoir des connaissances dans les 2 disciplines.
J’ai déjà à plusieurs reprises écrit sur Arduino. Mais cette fois-ci, je suis tombé sur une vidéo très approfondie sur le sujet. Parce que, Premièrement, la vidéo ne nécessite de l’étudiant aucune connaissance préalable en informatique et en électronique. Et Deuxièmement, ce qui est le plus intéressant, c’est que l’étudiant n’est pas obligé d’avoir une carte Arduino matérielle pour pouvoir suivre ce cours. Car on retrouve sur la vidéo une référence à un simulateur qui arrive à faire la simulation d’Arduino et de l’électronique avec en plus une superbe interface bien agréable. C’est le simulateur online tinkercad.
La vidéo en question est celle de la chaîne YouTube du site web éducatif www.freecodecamp.org, et comme vu précédemment dans d’autres blogs, c’est un excellent site plein de nombreux cours et tutoriels en informatique.
Pour ceux qui ne le savent pas encore, Steve Wozniak avec Steve Jobs sont les cofondateurs de la célèbre firme technologique Apple. Avant la création de cette firme, Steve Wozniak à l’aide de son ami Steve Jobs, ont conçu dans un garage leur première machine Apple-1. Et on soupçonne que le premier code que Wozniak a développé pour cette machine soit son Monitor System. Au tout début, Apple-1 n’avait pas de système d’exploitation (même que Apple-1 officiellement n’a jamais reçu de Système d’Exploitation), ainsi Wozniak a imaginé le développement d’un petit moniteur pour cette machine, appelé Woz Monitor. Par principe, le moniteur est un outil de débogage et de configuration matérielle, en sachant que son principal rôle est de donner la capacité à l’utilisateur d’accéder et de modifier directement la mémoire et les périphériques de la machine. Le moniteur que Wozniak a développé est très simple, il se comporte que de 256 octets, écrit en assembleur 6502, et son code est entièrement disponible et bien expliqué sur Internet (sur cette page) et sur GitHub. Le code du moniteur est très populaire pour les machines faite maison.
La vidéo en haut et celle de Ben Eater. Personnellement, moi j’en raffole des vidéos de Ben Eater, parce qu’ils sont très académiques, bien clairs, et très bien expliquées. Sur la vidéo, il explique l’utilisation du moniteur pour sa propre machine faite maison.
Étant actuellement un enseignant en architecture des ordinateurs, et un enseignant de programmation et structures de données dans le passé. Je peux sereinement suggérer aux étudiants en informatique, que le meilleur exercice pour maitriser les 2 disciplines est de développer soi-même un émulateur. Alors c’est quoi un émulateur ? L’émulateur par définition est un logiciel qui va reproduire ou répliquer exactement le même comportement d’une machine donnée sur une machine hôte différente. Vous pouvez par exemple émuler une console du type Nintendo sur un PC de bureau. L’émulateur va se comporter exactement comme une console Nintendo le ferait réellement. Vous aurez ainsi l’équivalent d’une console installé sur un PC et vous pourrez jouer à cette console.
Le fait de programmer un émulateur est très enrichissant pour un étudiant. Ça va premièrement, le faire investir en programmation sur un projet relativement de grande envergure, à la différence des petits exercices et travaux pratiques qu’il a l’habitude de faire dans lequel il doit planifier au préalable et construire une architecture logicielle qu’il doit suivre et soutenir tout au long du projet. Et deuxièmement, il doit bien maîtriser l’architecture de la machine à émuler. Il doit effectivement reproduire en logiciel les composantes hardwares de la machine. Ainsi, il va reconstruire le processeur avec toutes ses instructions et ses caractéristiques, il doit aussi reproduire les mémoires de la machine, le système vidéo, le système de son, les entrées/sorties… etc. Sur la vidéo en bas de la chaîne YouTube Computerphile, un émulateur pour la célèbre machine Atari 2600 est grossièrement décrit par le docteur Steve Bagley.
Il faut savoir que les consoles de jeux sont principalement les émulateurs les plus connus parmi les émulateurs de toutes les machines. Pour la simple raison que ça va permettre aux utilisateurs de jouer à ces machines sur leurs propres ordinateurs. Malheureusement, ces consoles de jeux sont parmi les machines les plus dures à émuler, en raison de la complexité de leur système graphique. Cependant, pour un étudiant avec un bon niveau en programmation et en architecture des ordinateurs, Il lui est possible de développer des émulateurs jusqu’à la 4e génération des consoles de jeux, même si que pour faire tourner de simple démo ou homebrew, incluant ainsi des consoles comme la Nintendo NES, SNES, SegaMega Drive, Master System…etc. Ce qu’on appelle les consoles à 16 bits. À partir de la 5e génération, ou les consoles dites 32 bits, ça devient difficile pour un simple étudiant de développer tout seul un émulateur pour une machine de ce type, en raison que ces machines sont devenues beaucoup plus puissantes que les précédentes, principalement à cause de l’intégration de la technologie 3D. On peut compter parmi ces consoles, la SonyPlaystation 1, La Sega Saturn, La Nintendo 64. Jusqu’aux dernières générations de consoles.
Toute personne parcourant l’évolution historique des processeurs à travers le temps, serait sûrement appelée sur une période dans le début des années 80, concernant un débat dans la communauté scientifique et industrielle autour l’évolution des processeurs dans les années à venir. Il y avait pratiquement 2 camps, un camp qui pensait que les avancées en électronique permettraient de créer des processeurs plus évolués et plus capables et que les processeurs devraient être plus complexes et plus riches. Le 2-ième camp n’approuvait pas cette idée, et suggérait que les processeurs devraient rester plus simples, et que la complexité des applications doit être léguer au Software. Après plusieurs débats houleux, il s’est avéré que c’est le 2-ième camp malgré un nombre d’adhérents réduit et un raisonnement semblant contre intuitif, les années à la suite leur ont donné raison.
Ce 2-ième camp est principalement représenté par les 2 figures bien connu dans le domaine des architectures des ordinateurs, David Patterson et John L. Hennessy, ils sont actuellement désignés comme les parrains de l’architecture des ordinateurs. Ils sont très célèbres dans le domaine académique par leurs 2 livres références Computer Organization and Design et Computer Architecture: A Quantitative Approach. Ils ont eux aussi l’honneur d’avoir le prix équivalant au prix Nobel en informatique qui est le prix Turing en 2017. David Patterson se charge actuellement du développement du très prometteur nouveau processeur open source RISC-V, et John L. Hennessy est bien connu pour être le cofondateur du célèbre processeur MIPS. Sur la vidéo en haut, on a une partie de l’interview de David Patterson par le célèbre académicien Lex Fridman, sur laquelle David Patterson va relater les faits et les événements qui se sont déroulés à cette époque.
Ça m’a toujours fasciné le sentiment de comprendre des machines que j’ai personnellement utilisées quand j’étais plus petit, animé par cette curiosité que j’avais à l’époque pour comprendre comment ça fonctionnait mais stoppé par le manque de connaissances pour le faire. On n’est pas encore au point de comprendre à 100% comment les anciennes machines fonctionnent, mais disons qu’une grande partie du hardware de ces anciennes machines a été révélé. Et ça principalement grâce à de nombreux hackers qui ont réussi à faire un énorme travail de reverse engineering réussissant à explorer ces machines qui sont de pour des raisons de secret industriel souvent était toujours fermées.
Sur la vidéo en haut on peut voir Michael Steil (voici son blog), l’un des hackers qui ont beaucoup contribué au reverse engineering et à la documentation de nombreuses machines. Et dans cette vidéo il fait une intervention lors d’une conférence organisée par le Chaos Computer Club, la plus grande association de hackers en Europe.
Il est vrai que cette vidéo est relativement technique, il devient difficile pour un étudiant dans les premières années universitaires, ou même pour un informaticien n’ayant pas d’expérience de dans le domaine de suivre et de comprendre toute la vidéo. Mais le plus important est d’avoir un aperçu global sur l’architecture d’un matériel réel, et d’essayer d’assimiler les concepts utilisés et les mots clés du domaine, assimiler entre 20 et 30% de la vidéo c’est déjà pas mal. Delà on peut facilement constater le grand écart entre ce qui se fait en université dans les modules de la conception hardware et les architectures matérielles réelles qui de loin sont beaucoup plus complexes.
L’autre jour je voulais installer un disque dur SSD pour un peu augmenter les performances de mon PC de maison. Lorsque j’ai commencé à chercher les différents modèles SSD sur Internet j’ai constaté qu’il existait 3 différents types de disque dur, les disques durs SSD utilisant le bus SATA, le connecteur des anciens disques durs magnétiques HDD, les SSD utilisant le M.2NVMe, et surtout ce que je ne connaissais pas avant, c’est les SSD se branchant directement sur le port PCI Express. C’est vrai que le bus PCI Express et pratiquement le principal bus d’extension pour les cartes-mères des PC modernes. Je me rappelle très bien de l’évolution de ce bus, parce que ça a été toujours le seul moyen de rajouter des cartes d’extension aux PC, comme les cartes graphiques, les cartes réseau, les cartes son, les cartes TV, les cartes d’acquisition…etc. Les cartes-mères avant l’apparition du PCI Express utilisaient son grand frère le bus PCI qui avait exactement la même fonction et la même utilisation, mais contrairement aux cartes-mères modernes ces cartes-mères disposaient d’un port différent et spécifique que pour les cartes graphiques, appelé le port AGP. Et en revenant encore plus avant dans l’histoire de l’informatique, avant le port PCI il y avait son ancêtre le port ISA, que personnellement j’ai connu sur ma première carte-mère, mais que je n’ai jamais eu le besoin de l’utiliser.
Malgré que le bus PCI Express soit conçu principalement pour être facile à utiliser, mais aussi conçu pour être versatile pour s’adapter à tout type varié de cartes d’extension à rajouter la carte-mère. C’est pour cette raison qu’il n’est pas si simple à utiliser, ou plutôt il est préférable de connaître ses différentes variantes pour ne pas se tromper dans son utilisation, et de bien comprendre son utilisation. La vidéo en haut est une excellente démonstration qui englobe tous les cas d’utilisation de ce port qui est de nos jours indispensable pour nos PC.
Pour un informaticien il est important de comprendre ce qui se trouve dans les entrailles de sa machine. Et le sens du terme comprendre va au-delà de reconnaitre les principaux composants d’un PC, comme par exemple le processeur, la carte-mère, la carte graphique…etc. Mais plus spécifiquement de voir à l’intérieur comment ces composants fonctionnent. Il faut savoir que sur les 20 dernières années, l’architecture des PC a énormément évolué. Comme par exemple la disparition avec le temps du chipsetNorthbridge et son intégration à l’intérieur des processeurs. Ou aussi l’intégration des cartes graphiques à l’intérieur des processeurs. L’apparition du multicœur qui est devenu maintenant la norme des processeurs. L’apparition du cashe de niveau 3 commun pour tous les cœurs d’un processeur. Les nouvelles technologies de bus comme le PCI-express, l’USB 3, ou le NVMe pour les disques durs SSD…etc.
La vidéo en haut de la chaîne YouTube Computer Science Lessons, donne une explication relativement approfondie de la composition interne d’un PC. Personnellement je trouve que c’est important de comprendre comment se comporte notre PC et de pouvoir comprendre et suivre l’état des différents composants en suivant leurs profile par un logiciel comme CPU-Z par exemple.
Personnellement je suis un enseignant en architecture des ordinateurs, et j’essaye de parler le moins possible dans mes cours de la mémoire virtuelle. Pourquoi ? parce que ça va rajouter un degré de confusion pour la compréhension du fonctionnement de la mémoire pour les étudiants. Malgré ça dans le cas pratique, la mémoire virtuelle est quasiment implémentée dans toutes les machines modernes. Elle se peut qu’elle soit quad même absente dans les systèmes simplistes comme les microcontrôleurs et quelques systèmes embarqués. En tout cas il est très simple de reconnaître si un possesseur utilise la mémoire virtuelle ou non, il suffit de chercher s’il dispose d’un MMU, car c’est le composant en charge de cette technologie.
La vidéo en haut de la chaîne YouTube Computerphile expose très bien le concept de la ma mémoire virtuelle, malgré cela j’aimerais juste rajouter quelques observations personnelles. Comme par exemple le mécanisme de la mémoire virtuelle semble a priori apporter de la complexité superflue à la machine, mais en réalité il est très pratique. Car premièrement d’un point de vue technique, il est très simple à implémenter. Et deuxièmement, ça permet d’incorporer beaucoup d’autres mécanismes. Comme par exemple la protection de la mémoire, lorsqu’un programme est limité à son espace et ne peut pas accéder aux données d’un autre programme. Ou encore l’utilisation du swapping ou pagination avec le disque dur, utilisés principalement lorsque la RAM n’a pas d’espace suffisant pour contenir toutes les données d’un programme, ainsi le disque dur prend le rôle d’un approvisionneur de mémoire.
Un dernier point technique concernant l’utilisation de la mémoire virtuelle, c’est que cette dernière est réalisée par un composant interne au processeur appelez le MMU (Memory Management Unit). Dans l’utilisation réelle, le système d’exploitation sollicite le MMU pour gérer la mémoire virtuelle. Il important aussi de savoir que le MMU utilise une partie de la RAM pour sauvegarder ses tables de transition, en ayant en plus une minuscule mémoire cashe dans le processeur s’appelant TLB(Translation Lookaside Buffer), lui permettant d’accélérer les opérations de transition. Bien sûr j’aimerais rappeler que cette mémoire cashe est totalement différente du cache principal du processeur, lui aussi géré par le MMU.