Analyse hardware de la Gameboy

Ç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.

Le hardware de la Nintendo Gameboy

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. 

La complexité d’un algorithme

Pour concevoir des logiciels bien optimisés, il est souvent nécessaire de pouvoir distinguer les algorithmes optimaux des algorithmes trop gourmands en ressources. D’où l’entrée en jeu de l’étude de la complexité d’un algorithme, qui devient primordiale pour reconnaître son optimalité dans le monde réel. En d’autres mots, ça permet de prédire le comportement d’un algorithme avec un nombre très élevé de données.

Pour avoir une compréhension de c’est quoi la complexité d’un algorithme, appelez aussi le grand-O (Big-O en anglais), on va imaginer un exemple simple, supposons qu’un algorithme nécessite une seconde pour calculer 10 données, sa complexité est monotone (O(n)) s’il lui faudrait 10 secondes pour finir 100 données. Par contre si c’est un algorithme optimal il lui faudrait moins de temps. Ou inversement si c’est un algorithme gourmand il lui faudrait plus. La complexité permet plus ou moins de prédire ce temps. 

Notion du Big-O (par www.geeksforgeeks.org)

À vrai dire, l’étude de la complexité est une méthode mathématique relativement difficile à appréhender à première vue. La principale raison est que cette méthode ne ressemble à aucun domaine mathématique vu auparavant dans le cursus de l’étudiant. On peut grossièrement la qualifier comme un point d’intersection entre le calcul arithmétique et le calcul des limites dans l’analyse mathématique. D’une part, malgré que le but de la méthode soit le calcul du temps nécessaire pour l’exécution en rapport avec les données exercées sur l’algorithme, elle ne va pas faire un calcul arithmétique exacte de ce temps comme on avait vu sur l’exemple, mais elle va plutôt nous fournir une approximation. Et d’autre part la méthode tend à évaluer le temps pour un nombre très grand de données, et s’appuyer sur des procédés mathématiques qui sont similaires au calcul des limites, comme par exemple négliger les fonctions les moins rapides (comme par exemple : 2X2 + 4X +1 tend vers X2). Mais en même temps, ce n’est pas un calcul de limite. La complexité va réellement nous retourner une fonction parmi les fonctions illustrées sur le graphe en haut. Cette fonction va nous donner une estimation de la rapidité en complexité de l’algorithme en rapport avec le nombre de données. La vidéo en bas de la chaîne YouTube du site web éducatif www.freecodecamp.org illustre cette notion de complexité sous format d’un cours de courte durée pour appréhender plus ou moins cette notion du Big-O. 

Cours sur la complexité d’algorithme

La théorie des graphes en informatique

Pour dire vrai, la vie d’un informaticien se résume en grande partie au processus sans cesse de résolution de problèmes. Des problèmes de type de pratique, technique, qui concerne généralement la technologie. Trop souvent les outils mathématiques formels et précis sont souvent utilisés dans ce processus de résolution. Dans cet article on va parler d’un modèle mathématique très connus par les informaticiens, à savoir les graphes. Les graphes appartiennent aux mathématiques dites discrètes. On peut les définir d’une manière simpliste comme un ensemble de sommets ou de nœuds, interreliés par des liens souvent appelés arêtes. Avec ce modèle simple on peut modéliser énormément de systèmes réels, comme par exemple les réseaux routiers, les réseaux informatiques, les groupes d’amis dans les réseaux sociaux…etc. Le principal avantage de la modélisation avec les graphes c’est qu’ils possèdent énormément de théorème, de postulat, et de formule que l’informaticien peut exploiter pour améliorer, corriger, ou vérifier son système. Par exemple l’un des plus célèbres théorèmes sur les graphes est le théorème de coloration. C’est un théorème ancien de 2 siècles qui stipule que quel que soit un graphe, il suffit de 4 couleurs pour colorier tous les nœuds du graphe avec une couleur différente pour chaque pair de nœuds voisins. Ce théorème a été récemment prouvé mathématiquement correct, et il est très utilisé en cartographie comme preuve qu’on peut colorier tous les états sur une carte géographique avec seulement 4 couleurs avec des couleurs différentes pour tous les états voisins.

Théorie des graphes

La vidéo haut est celle de la chaîne YouTube Zach Star, c’est une très bonne chaîne que je conseille aux étudiants. La vidéo n’est pas spécifique aux graphes en particulier mais elle en traite quand même une bonne partie. C’est une vidéo qui traite en général le raisonnement mathématique utiliser en informatique. 

Le bus PCI Express

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.2 NVMe, 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.

Introduction à PCI Express

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.

La commande réseau Ping

Le réseau informatique fait désormais partie intégrante de notre vie quotidienne, qu’il soit utilisé avec PC, tablette, téléviseur, téléphone portable, console de jeux …etc. Parce qu’on a besoin que tous ces appareils soient connectés à internet. Malheureusement notre réseau informatique à domicile ou au travail n’est pas totalement protégé des pannes et de mal fonctionnement. La détection des erreurs dans les réseaux informatiques n’est pas une tâche aisée, dans la majorité des cas il faut effectuer plusieurs tests, et mener une sorte d’enquête en appliquant la déduction pour essayer de connaître la source exacte de l’erreur. Pour effectuer les tests sur les réseaux usuellement vous aurez à utiliser 2 types d’outils ; les outils matériels comme par exemple les testeurs câbles réseau, ou le Time Domain Reflectometer (dont on a déjà parlé dans cet article). Ou les outils logiciels, il y en a beaucoup, comme par exemple, ping, traceroute, ipconfig (ou ifconfig sur linux), nslookup, netstat. Dans la vidéo en bas de la chaîne PowerCert Animated Videos on va se concentrer sur le plus simple mais le premier à utiliser, c’est la commande Ping. Elle est très simple à utiliser et surtout très efficace pour trouver la source d’erreurs. 

La commande Ping

Comprendre le fonctionnement de son propre 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 chipset Northbridge 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.

Architecture d’un PC

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.

Motifs géométriques de l’architecture islamique

Concernant notre culture arabo-musulmane, on peut dire que nos ancêtres avaient vraiment excellé dans deux domaines artistiques particuliers, qui sont les motifs géométriques utilisés dans la décoration architecturale, et l’art de la calligraphie arabe. Ça m’a toujours fasciné de connaître comment ces motifs géométriques qui semblent à première vue complexes, étaient façonnés. La chaîne Youtube de TEDEd donne quelques techniques basiques utilisées géométriquement pour créer ces motifs. Le procédé est assez simple mais le résultat est majestueux. La première pensée qui m’est venu après avoir vu cette vidéo était de créer un petit programme qui peut générer automatiquement avec peu de configuration ce genre de motif. Ça doit probablement exister, mais personnellement je n’ai jamais croisé un programme qui peut réaliser cette tâche. À mon sens ça présage un fort potentiel et des possibilités infinies. Ça pourrait même faire le sujet d’un projet pour étudiants, avec probablement la bibliothèque graphique C++ RayLib.

Géométrie des motifs islamiques

Le concept de la mémoire virtuelle

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 mémoire virtuelle

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. 

Monter un PC en 2022 

C’est presque nostalgique pour moi ce type de contenu. Lorsque j’étais étudiant au début des années 2000 j’étais très branché dans le domaine du matériel informatique, ou ce qu’on appelle maintenant en argot le “matos informatique”. Et je me rappelle qu’à l’époque internet n’était pas aussi prolifique qu’aujourd’hui, il y avait peu de sites internet et pas du tout de YouTube spécialiste dans ce domaine. Malgré cela, il y avait une alternative qui me manque aujourd’hui et qui était tout aussi attrayante, c’était les magazines. À l’époque en Algérie, était disponible un magazine que j’appréciais particulièrement, c’était le magazine PC expert. Un magazine mensuel qui à force de le lire va vraiment renforcez vos connaissances dans ce domaine pour devenir un féru en matos.

Montage PC en 2022

C’est une nouvelle époque, les médias ont changé, mais le sentiment d’engouement pour ces nouvelles technologies reste le même. La vidéo en haut de la chaîne YouTube PCBuilderChannel est une excellente vidéo d’introduction au montage PC. Pour ma part, un informaticien doit connaître plus ou moins le processus de construction de sa propre machine, même si c’est un développeur ou un administrateur de base de données et que le hardware l’intéresse peu. 

John Carmack le meilleur programmeur au monde !

On va présenter là l’un des meilleurs programmeurs au monde, en tout cas selon les dires de nombreux acteurs de l’industrie du software. John Carmack est un développeur qui a su affirmer sa notoriété au fil du temps sur différents projets. Tout observateur de la carrière de John Carmack peut constater que John avait toujours un pas en avance en technologie par rapport à tout le monde, c’était ce qu’on appelle un précurseur dans son domaine.

La carrière de John avait commencé dans l’industrie des jeux vidéo, avec la société Id Software, cofondé entre autres, avec un très grand nom de l’industrie aussi nommé John Romero. Leur premier grand hit était le jeu vidéo Commander Keen, dans lequel la première fois où les PC implémentaient les jeux en side scrolling 2D (semblable au jeu comme Super Mario Bros), réservé auparavant aux consoles de jeux vidéo équipées du hardware spécifique pour le faire. John Carmack a réussi par des petits hacks à implémenter la même technique sur PC. Le 2-ième hit est Wolfenstein 3D, là encore John Carmack réussit à introduire et à populariser une technologie jusque-là très marginale, et qui va bouleverser le monde vidéoludique après, “la 3D”. À la base, le PC dans les débuts des années 90 n’avait ni la puissance suffisante ni le hardware spécifique pour implémenter la 3D. Pour cela, il fallait aussi utiliser des techniques précises pour le réaliser, car le moteur du jeu Wolfenstein 3D est très particulier, ça permettait de rendre la 3D, mais avec beaucoup de restrictions. Par exemple, tous les murs de l’environnement doivent être construits avec des ongles de 90° suivant le schéma d’une matrice. C’était le prix à payer pour afficher de la 3D sur des machines à quelques mégahertz de puissance. Le 3-ème hit est Doom, et là encore c’est une grande révolution, puisque historiquement c’est le jeu qui a lancé le genre des FPS (First Person Shooter), et toujours avec des restrictions sur le moteur pour pouvoir afficher de la 3D avec quelques dizaines de mégahertz maintenant sur les machines et sans utiliser de l’accélération hardware 3D. Le 4-ème hit et le jeu Quake, est encore une fois une nouvelle révolution dans le domaine vidéoludique, c’est l’apparition du multijoueur online.

John Romero le cofondateur de Id Software, travaillant sur Doom (1993)

En 2013 Carmack rejoint la société d’Oculus VR pour entamer une nouvelle orientation dans sa carrière. Pour rappel la société Oculus VR est une société spécialiste dans la réalité virtuelle et la réalité augmentée. C’est une société qui a été acquise par Meta (anciennement Facebook) et ces produits représentent maintenant le fer de lance de Meta pour son projet de réalité virtuelle appelée Metaverse. Entre-temps Carmack a aussi l’occasion de toucher diverses technologies dans sa carrière, dont la technologie aérospatiale des diffusés, l’énergie de la fusion nucléaire, et récemment la technologie de l’intelligence artificielle. Plus précisément, de l’Intelligence Artificielle Générale (ou AGI). C’est de l’intelligence artificielle pour la création d’agent autonome qui a la capacité d’apprendre ce que peut apprendre un humain normal. C’est le genre d’intelligence artificielle qu’on voit dans les films de science-fiction. Apparemment c’est la technologie que Carmack consacre le plus de temps actuellement.

John Carmack reçu dans le Podcast de Lex Fridman

Sur la vidéo en haut, on peut voir un podcast ou interview de 5h de Camark fait par Lex Fridman (voici sa chaîne YouTube et le lien de son site web), un enseignant-chercheur dans l’université d’MIT, et une figure bien connue dans le domaine de l’intelligence artificielle. La discussion est très enrichissante, ça permet de mettre en lumière la manière de penser de l’un des meilleurs programmeurs au monde, et aussi avoir un aperçu sur l’univers de la haute technologie.