6 points par GN⁺ 2023-08-10 | 1 commentaires | Partager sur WhatsApp
  • Une explication technique sur la manière dont un ordinateur exécute un programme du début à la fin, avec pour objectif de comprendre comment il fonctionne depuis le démarrage jusqu’à l’exécution du programme
  • Le texte part de questions comme ce qui se passe réellement quand un programme s’exécute, si un programme est exécuté directement par le CPU, ce que sont les syscalls et comment ils fonctionnent, ainsi que la manière dont plusieurs programmes s’exécutent en même temps
  • En toile de fond, il y a le constat que lorsqu’on ne passe pas par l’université, il existe peu de ressources système vraiment complètes, ce qui oblige à consulter de nombreuses sources de qualité inégale et parfois contradictoires
  • Basé sur plusieurs semaines de recherche et près de 40 pages de notes, ce document vise à rassembler ce qui a été appris dans un article solide
  • Pour les lecteurs qui veulent aller vite ou pensent déjà connaître le sujet, un lien séparé vers Chapter 3: How to Run a Program est également fourni

1 commentaires

 
GN⁺ 2023-08-10
Avis sur Hacker News
  • Bonjour ! Je suis Lexi, l’autrice de cet article/mini-livre.
    Il y a la question classique « que se passe-t-il quand on ouvre un site web ? », mais je me suis toujours davantage demandé : « que se passe-t-il quand on exécute un programme ? » Il y a environ trois mois, j’étais tellement frustrée de ne pas pouvoir répondre à cette question que j’ai décidé de l’étudier moi-même.
    Tout ce que je sais en programmation, je l’ai appris en autodidacte, donc je pensais que ce serait facile aussi, mais pas du tout. La plupart des ressources en ligne sur le fonctionnement des systèmes d’exploitation et des CPU étaient franchement mauvaises, et il y en avait très peu. Alors, en étudiant, je me suis dit qu’il fallait que je crée moi-même une bonne ressource ; en organisant ce que j’apprenais, je me suis retrouvée avec un Google Doc de 60 pages, et c’est à partir de là que j’ai commencé à écrire.
    Mais en écrivant, je me suis rendu compte qu’une grande partie de cet énorme document était fausse, et qu’il fallait enquêter davantage. À force de corriger encore et encore, la qualité des ressources sur Internet restait mauvaise, et il fallait améliorer le texte. Il me fallait aussi des illustrations et des diagrammes, mais comme je ne savais pas dessiner, j’ai ouvert Figma et expérimenté ; j’en ai dessiné une partie avec une tablette Wacom reçue lors d’un hackathon.
    Environ trois mois plus tard, j’ai maintenant un résultat dont je suis vraiment fière. Je suis heureuse de partager la version finale de Putting the "You" in CPU, avec ses illustrations un peu bancales. Ce travail a été réalisé dans le cadre de Hack Club (https://hackclub.com), une communauté de lycéens passionnés d’informatique.
    Il y a quelques semaines, une version encore en cours de rédaction a par hasard suscité des réactions sur HN, et les retours reçus m’ont été très précieux. Depuis, j’ai pas mal nettoyé le tout, et je suis enfin assez satisfaite pour le partager moi-même avec le monde.
    Le site web est un projet HTML/CSS statique, entièrement écrit à partir de zéro. J’aime particulièrement le composant de navigation. J’espère que la lecture vous plaira, et que ce sera une ressource dont tout le monde pourra apprendre quelque chose.

    • Je n’ai fait que le parcourir, mais ça ressemble à un très bon guide d’introduction, et j’aime aussi le style.
      Écrire ce genre de ressource quand on apprend quelque chose de nouveau en autodidacte est une très bonne méthode. Cela clarifie le raisonnement et permet de repérer les zones qu’on pensait avoir comprises au départ, mais qui restent encore floues.
      J’ai aussi aimé cette phrase à la fin : « Pendant l’écriture de cet article, j’ai pas mal discuté avec GPT-3.5 et GPT-4. Ils ont beaucoup menti et la plupart des informations étaient inutiles, mais ils m’ont parfois beaucoup aidée à résoudre des problèmes. Si vous connaissez les limites des LLM et que vous doutez extrêmement de tout ce qu’ils disent, le bilan peut être positif. En revanche, leur écriture est affreuse. Ne les laissez pas écrire à votre place. » Beau projet.
    • Après avoir lu les premières pages, mon seul retour serait de réduire les tournures mignonnes.
      Par exemple, dans un passage comme « Le CPU est responsable de tous les calculs. C’est le grand frère. Shazam alakablam… », il est bien plus lisible d’enlever la phrase plaisante et d’écrire plutôt quelque chose comme : « Le CPU est responsable de tous les calculs. Dès que l’ordinateur est allumé, il commence à exécuter les instructions une par une. »
      Je ne suis pas quelqu’un de très pointu techniquement, mais du point de vue de quelqu’un qui est payé pour écrire, c’est l’impression que j’en ai. Le travail lui-même est excellent, continuez.
    • Je n’ai pas fait la recherche moi-même, mais si l’on sait au moins où regarder, j’ai du mal à croire que la plupart de ces informations soient si difficiles à trouver ou si erronées.
      Ce genre de sujet est généralement bien traité dans les cours de premier cycle en architecture des ordinateurs et en systèmes d’exploitation. De nos jours, ce n’est plus très à la mode et c’est souvent devenu optionnel, cela dit.
      Plusieurs universités publient des cours gratuits, et il existe aussi des livres écrits par des professeurs du domaine. Si l’on veut quelque chose de plus proche des tendances récentes, les présentations de conférences techniques liées au sujet sont également assez utiles.
      Cela dit, l’enseignement est un art sous-estimé, et rendre l’information plus accessible ou plus agréable à explorer de manière interactive a clairement beaucoup de valeur.
    • Je tiens à souligner que LWN (https://lwn.net/) se consacre depuis longtemps à produire des informations sur les systèmes d’exploitation qui ne sont pas mauvaises. Jetez-y un œil et, si possible, participez :)
    • Je n’ai encore fait que survoler l’article, mais il a l’air excellent. Félicitations, et continuez ce genre de travail.
      J’ai autrefois travaillé comme ingénieur de recherche ; dans mon cas, j’étais ingénieur logiciel dans un laboratoire universitaire travaillant sur la recherche en sécurité informatique. Comme le dit un autre commentaire à propos des cours de systèmes d’exploitation devenus optionnels, même parmi les doctorants, certains n’ont pas ce niveau de compréhension des OS.
      Les bonnes informations sont difficiles à trouver, mais elles existent bel et bien. Le fait que vous ayez synthétisé des informations difficiles à dénicher pour en faire une forme meilleure en est la preuve. Mon diplôme est en mathématiques, mais j’ai appris l’informatique en autodidacte. Savoir apprendre de cette manière et rendre accessible une information très technique est vraiment important, et il ne faut pas le sous-estimer.
      Je ne partagerai que deux liens, sinon cela pourrait continuer indéfiniment. D’abord, https://git.lain.faith/sys64738/airs-notes.git et la table des matières de la partie sur les linkers : https://lwn.net/Articles/276782/. Si vous n’avez fait qu’effleurer ELF et le linking, la série de 20 billets de blog d’Ian Lance Taylor, ainsi que les sujets supplémentaires, couvrent tout ce que vous avez toujours voulu savoir sur ELF, jusqu’à vous faire douter du fonctionnement réel des commandes. On y évoque aussi brièvement DWARF, le compagnon d’ELF, qui est également une machine virtuelle utilisée chaque fois qu’une exception C++ se produit.
      Deuxièmement, https://0xax.gitbooks.io/linux-insides/content/ est aussi un excellent projet. Il suit, d’une manière lisible par des humains, comment le noyau Linux accomplit diverses tâches. Il a presque certainement déjà été partagé sur HN.
  • Très bien écrit, et bravo d’avoir creusé en profondeur un tel sujet.
    De nos jours, à 17 ans, on peut dans une certaine mesure s’en sortir en « programmant » en assemblant des choses qu’on ne comprend pas, mais je pense qu’on finit par atteindre une limite. Donc ce que tu fais maintenant a vraiment beaucoup de valeur, non seulement pour toi, mais aussi pour tous ceux qui apprendront avec cette ressource.
    Beau travail :) Si ce n’est pas déjà fait, essaie maintenant un émulateur. C’est extrêmement amusant.

    • « De nos jours, à 17 ans, on peut programmer en assemblant des choses qu’on ne comprend pas », ça parle aussi de moi. Ça fait 26 ans que je fais comme ça.
      Si « on finit un jour par atteindre une limite », je me demande si ça va bientôt m’arriver.
    • Entre 17 et 21 ans environ, c’est au contraire la période de ma vie de programmeur où j’assemblais le moins de choses toutes faites.
      J’ai créé un framework MVC à partir de zéro, des interpréteurs et des compilateurs, et j’ai même essayé, par accident, de réinventer le machine learning et le traitement du langage naturel depuis zéro. J’ai fait toutes sortes de choses géniales et amusantes.
      Puis j’ai découvert l’argent et l’état de l’art. Accepter que d’autres me disent « utilise juste ça » permettait de construire beaucoup plus vite. Les frameworks aussi. J’ai été stupéfait de voir à quel point jQuery rendait la vie facile.
      Quelques années plus tard, ce qui me semblait autrefois être du « simple assemblage » m’apparaît désormais comme un « travail avancé de très bas niveau ». Parce qu’on a empilé de nouvelles abstractions par-dessus ces abstractions.
      Ce que les débutants peuvent aujourd’hui « à peu près réussir » deviendra, pour la prochaine génération, une zone dangereuse de bas niveau. La programmation est formidable à cet égard.
    • Je ne suis absolument pas d’accord. À moins de viser un poste très spécialisé où l’on ne fait qu’un type précis de tâche technique, la capacité à lire la documentation et à assembler des services cloud avec des bibliothèques JavaScript finit par devenir vraiment importante.
      Au contraire, quelqu’un qui aborde la programmation de manière académique risque davantage d’être complètement dépassé lorsqu’il rencontre des tâches où il faut comprendre plusieurs technologies à un niveau de base, puis passer à autre chose.
      C’est différent si, dans une grande entreprise, des chefs de projet et des designers resserrent les spécifications pour qu’on puisse se concentrer uniquement sur l’exécution, mais pour la plupart des gens, c’est une situation rare.
    • C’était exactement moi il y a 10 ans, quand je suis entré dans le secteur comme développeur de 30 ans. Certaines choses ne changent pas.
    • Ou bien essayer un système d’exploitation peut aussi être une bonne idée. Je me souviens avoir abordé beaucoup de sujets similaires il y a longtemps en suivant le livre Operating System Concepts.
      Je ne me souvenais que du dinosaure sur la couverture, j’ai dû rechercher le titre.
  • Bravo pour avoir terminé ce guide.
    Si l’on ne va pas à l’université, on voit bien qu’il faut fouiller dans une masse de ressources système généralistes, de qualité très variable et parfois contradictoires.
    La meilleure ressource que l’on puisse trouver est Code: The Hidden Language of Computer Hardware and Software de Charles Petzold. La 2e édition vient tout juste de sortir.
    https://codehiddenlanguage.com/

    • The Elements of Computing Systems de Noam Nisan et Shimon Schocken, ainsi que le projet nand2tetris associé, me semblent tout aussi bons, voire meilleurs. C’est beaucoup plus orienté construction pratique.
      https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
      https://www.nand2tetris.org/
    • J’ai lu ce livre et je l’ai vraiment adoré, mais aujourd’hui je recommande plutôt très fortement le jeu Turing Complete.
      Il vous accompagne très bien depuis les portes NAND jusqu’aux appels de fonction, dans un format interactif très agréable. Au lieu de lire et d’imaginer dans sa tête comment les choses fonctionnent, on les construit directement.
      J’ai même créé mon propre assembleur CPU et un petit SIMD/GPU pilotant une matrice de LED avec un langage de shaders programmable.
    • Merci ! Ça a un côté matériel et ça a l’air très intéressant. Je pense que je le lirai un jour.
    • Le site web m’a fait penser à ce livre.
      Quand je l’ai acheté il y a 15 ans, mes yeux se sont voilés à la partie sur l’architecture CPU, mais peut-être que je suis prêt maintenant. J’ai aussi acheté récemment la 2e édition.
  • C’est un article que j’ai mis dans ma liste de lecture. À l’époque, ce petit détail m’avait conquis :
    « Nous avons ajouté une marge en bas de chaque page pour permettre au lecteur de conserver une hauteur de regard constante. »
    C’est un détail vraiment minuscule et, avec le recul, évident. Mais il rend la lecture étonnamment confortable. Quand je l’ai remarqué, j’ai compris que c’était un projet passion.

    • Il y a pas mal de très bons détails d’UI. Le fait que l’auteur ait 17 ans semble aussi jouer un rôle.
      Il a beaucoup réfléchi à la manière de représenter un livre sur le web, et semble avoir créé de nouvelles conventions auxquelles on pourrait s’attendre de la part d’une nouvelle génération. Par exemple, c’est la première fois que je vois les chapitres précédent/suivant apparaître légèrement opaques dans le widget de navigation de chapitre en haut.
  • J’ai presque 40 ans et je n’ai jamais réussi à faire quelque chose comme ça. J’étais justement en train d’apaiser mon syndrome de l’imposteur, il va falloir que je l’apaise encore davantage.
    Vraiment beau travail :p

    • Il n’est jamais trop tard pour commencer quelque chose qui pourrait vous donner un sentiment d’accomplissement. Que vous ayez 17 ans, 40 ans ou 80 ans.
      Il reste encore largement du temps, et il y a peu de raisons de se presser. Choisissez une idée qui vous inspire, puis avancez lentement dessus pendant les petits moments de temps libre dont vous disposez.
      L’essentiel, je pense, est de se sentir fier de soi en le faisant. Le résultat final finira par suivre.
  • OP, ne mets pas ton âge en avant pour justifier ton travail. Cet article est meilleur que ce que la plupart des gens pourraient produire de toute leur vie. Super boulot.

    • S’il n’avait pas mentionné son âge, il n’aurait reçu aucune attention ici. Il y a des tas d’excellentes ressources qui meurent dans new. Il a choisi d’utiliser son âge comme argument marketing, et ça a clairement marché.
    • Mettre son âge en avant devant un contenu d’autopromotion, qu’on soit jeune ou vieux, est un angle marketing qui fonctionne depuis très longtemps. Je ne lui reprocherais pas de l’avoir exploité.
    • Si l’auteur n’avait pas dit qu’il avait 17 ans, il est très peu probable que quiconque se soit intéressé à ce résumé de CPU de niveau ChatGPT.
  • Si l’on crée ce genre de contenu à 17 ans, je n’imagine même pas les choses incroyables qu’on pourra accomplir si l’on choisit d’en faire son métier. Vraiment impressionnant.

    • En lisant cet article et en parcourant les dépôts, j’ai plutôt pensé l’inverse. J’espère qu’il trouvera un moyen de continuer ce qu’il fait aujourd’hui sans entrer dans l’industrie tech comme métier.
      J’espère que son âme ne sera pas écrasée par de petites tâches de gestion, des objectifs d’entreprise encore plus dérisoires et une progression de carrière dénuée de sens. Il fait déjà un travail remarquable ; j’aimerais qu’il existe quelque chose comme une bourse qui lui permette de continuer sans que son âme soit broyée dans la roue de hamster de l’industrie tech.
  • OP devrait jeter un œil au cours de Casey Muratori sur computerenhance.com.
    Le devoir de la première partie du cours consiste à créer un simulateur de l’Intel 8086 de 1978. L’assembleur x86_64 moderne lui ressemble encore pas mal. On y apprend beaucoup de choses sur l’informatique qu’il est vraiment difficile de trouver ailleurs.

  • De mon point de vue de quasi-17 ans, bravo ! :^)
    Il y a à peine 20 minutes, je cherchais comment extraire le premier octet d’un entier 16 bits et j’ai découvert l’endianness, pendant que toi, tu es en train d’écrire un livre sur les CPU.
    Je le lirai dès que j’aurai terminé Crafting Interpreters. Cela dit, comme beaucoup d’autres projets, mon rythme a clairement ralenti, donc ça pourrait prendre un moment lol.

  • Très bon article, et j’aime aussi le style. Le mélange entre le texte et les illustrations/mèmes était vraiment agréable.
    Je suis un peu réservé sur les termes RISC/CISC, mais c’est peut-être une question de goût personnel >.>
    Pour avoir passé du temps à comprendre comment fonctionnent certaines parties du noyau, j’imagine à quel point la création de cet article a dû être pénible. Mais à la lecture, ça en valait clairement la peine.
    Côté NT, Windows Internals couvre beaucoup de choses qu’on a envie de savoir, et la documentation Microsoft n’est pas mauvaise non plus. À mon avis, elle est clairement meilleure que la documentation du noyau Linux, et c’est un très bon point de départ.
    Si vous voulez en savoir plus sur Windows, je recommande aussi les forums/ressources de game hacking. Il y a beaucoup de tri à faire, mais sur des sujets de niche, ça peut parfois être une très bonne source d’informations.
    Enfin, sur smartphone, la police de certains blocs de code est assez grande et rend la lecture difficile. C’est le cas par exemple de main.c au chapitre 6.
    Au passage, la phrase « si vous êtes un ado qui aime les ordinateurs et que vous n’êtes pas encore sur le Slack de Hack Club, rejoignez-le tout de suite » me rappelle un peu trop bien que je vieillis lol.