6 Punkte von GN⁺ 2023-08-10 | 1 Kommentare | Auf WhatsApp teilen
  • Eine technische Erklärung darüber, wie ein Computer Programme von Anfang bis Ende ausführt, mit dem Fokus darauf zu verstehen, wie ein Computer vom Start bis zur Programmausführung arbeitet
  • Ausgangspunkt sind Fragen dazu, was bei der Programmausführung tatsächlich passiert, ob Programme direkt auf der CPU ausgeführt werden, was syscalls sind und wie sie funktionieren und wie mehrere Programme gleichzeitig ausgeführt werden
  • Im Hintergrund steht die Erfahrung, dass es abseits eines Hochschulstudiums nicht viele umfassende Systemressourcen gibt, sodass man viele Quellen unterschiedlicher Qualität heranziehen muss, die sich teils widersprechen
  • Basierend auf mehreren Wochen Recherche und fast 40 Seiten Notizen soll das Gelernte in einem einzigen fundierten Text zusammengefasst werden
  • Für Leser, die es schnell lesen möchten oder das Gefühl haben, den Stoff bereits zu kennen, wird zusätzlich der Link Chapter 3: How to Run a Program bereitgestellt

1 Kommentare

 
GN⁺ 2023-08-10
Hacker-News-Kommentare
  • Hallo! Ich bin Lexi, die diesen Artikel/dieses Minibuch geschrieben hat.
    Es gibt die klassische Frage „Was passiert, wenn man eine Website öffnet?“, aber ich habe mich immer mehr gefragt: „Was passiert, wenn man ein Programm ausführt?“ Vor etwa drei Monaten war ich so frustriert darüber, dass ich diese Frage nicht beantworten konnte, dass ich beschloss, es selbst zu lernen.
    Alles, was ich über Programmierung weiß, habe ich mir selbst beigebracht, also dachte ich, das hier würde auch einfach werden. War es ganz und gar nicht. Die Online-Materialien dazu, wie Betriebssysteme und CPUs funktionieren, waren größtenteils miserabel, und es gab überhaupt nur sehr wenig Material. Also dachte ich mir beim Lernen, ich sollte selbst gutes Material erstellen. Als ich das Gelernte zusammenfasste, wurde daraus ein 60-seitiges Google Doc, und daraus begann ich zu schreiben.
    Während des Schreibens stellte ich jedoch fest, dass ein großer Teil dieses riesigen Dokuments falsch war, also musste ich weiter recherchieren. Ich korrigierte immer wieder, die Qualität der Internetquellen blieb schlecht, und der Text musste besser werden. Ich brauchte auch Illustrationen und Diagramme, konnte aber nicht zeichnen, also öffnete ich Figma und experimentierte damit; einiges zeichnete ich mit einem Wacom-Tablet, das ich bei einem Hackathon bekommen hatte.
    Jetzt, nach etwa drei Monaten, ist etwas entstanden, auf das ich wirklich stolz bin. Ich freue mich, die endgültige Fassung von Putting the "You" in CPU zu teilen, inklusive der etwas unbeholfenen Illustrationen. Entstanden ist das Ganze im Rahmen von Hack Club (https://hackclub.com), einer Community von Highschool-Schülern, die Computer mögen.
    Vor ein paar Wochen fand eine damals noch unfertige Version zufällig Anklang auf HN, und ich war für das Feedback wirklich dankbar. Seitdem habe ich ziemlich viel aufgeräumt, und jetzt bin ich endlich zufrieden genug, sie selbst mit der Welt zu teilen.
    Die Website ist ein statisches HTML/CSS-Projekt, und ich habe alles von Grund auf selbst geschrieben. Besonders mag ich die Navigationskomponente. Ich hoffe, ihr habt Spaß beim Lesen, und ich hoffe, dass es eine Ressource wird, mit der jeder lernen kann.

    • Ich habe es nur überflogen, aber es sieht nach einer ziemlich guten Einführung aus, und der Stil gefällt mir ebenfalls.
      Solche Materialien zu schreiben, wenn man sich etwas Neues selbst beibringt, ist eine sehr gute Methode. Es klärt den eigenen Denkprozess und hilft, Stellen zu finden, bei denen man anfangs glaubte, sie verstanden zu haben, die aber noch unscharf sind.
      Auch diesen Satz am Ende mochte ich: „Während ich diesen Text schrieb, habe ich ziemlich viel mit GPT-3.5 und GPT-4 gesprochen. Sie haben viel gelogen, und die meisten Informationen waren nutzlos, aber gelegentlich waren sie beim Lösen von Problemen eine große Hilfe. Wenn man die Grenzen von LLMs kennt und alles, was sie sagen, extrem skeptisch betrachtet, kann die Gesamthilfe positiv ausfallen. Schreiben können sie allerdings miserabel. Lasst sie nicht für euch schreiben.“ Tolles Projekt.
    • Nachdem ich die ersten paar Seiten gelesen habe, ist mein einziges Feedback, dass du die niedlichen Formulierungen etwas zurückfahren könntest.
      In einem Kontext wie „Die CPU ist für alle Berechnungen zuständig. Sie ist der große Boss. Shazam Alakablam …“ liest es sich zum Beispiel deutlich besser, die scherzhaften Sätze wegzulassen und etwa zu schreiben: „Die CPU ist für alle Berechnungen zuständig. Sobald der Computer eingeschaltet wird, beginnt sie, eine Anweisung nach der anderen auszuführen.“
      Ich bin technisch nicht extrem tief drin, aber aus der Sicht von jemandem, der fürs Schreiben bezahlt wird, wirkt es so. Die Arbeit selbst ist großartig, also mach bitte weiter.
    • Ich habe nicht selbst recherchiert, aber zumindest wenn man weiß, wo man suchen muss, fällt es mir schwer zu glauben, dass die meisten Informationen dazu so schwer zu finden oder falsch waren.
      Solche Themen werden normalerweise in Bachelor-Kursen zu Computerarchitektur und Betriebssystemen gut behandelt. Heutzutage sind sie etwas aus der Mode gekommen und daher meist Wahlfächer geworden.
      Mehrere Universitäten haben kostenlose Vorlesungen veröffentlicht, und es gibt auch Bücher von Professoren auf diesem Gebiet. Wenn man näher an neueren Entwicklungen bleiben möchte, sind auch Vorträge auf einschlägigen Technikkonferenzen ziemlich nützlich.
      Trotzdem ist Lehren eine unterschätzte Kunst, und Informationen zugänglicher zu machen oder sie interessanter und interaktiver zu vermitteln, ist eindeutig sehr wertvoll.
    • Ich möchte unbedingt darauf hinweisen, dass LWN (https://lwn.net/) sich seit Langem darauf konzentriert, Betriebssystem-Informationen zu produzieren, die nicht miserabel sind. Schau es dir an und mach, wenn möglich, mit :)
    • Ich habe den Text bisher nur grob überflogen, aber er sieht großartig aus. Glückwunsch, und bitte mach mit solcher Arbeit weiter.
      Ich habe früher als Research Engineer gearbeitet; in meinem Fall war ich Software Engineer in einem Universitätslabor, das Forschung zu Computersicherheit betrieb. Wie in einem anderen Kommentar erwähnt wurde, dass Betriebssystemvorlesungen Wahlfächer sind, gibt es selbst unter Doktoranden Leute, die kein derartiges Verständnis von Betriebssystemen haben.
      Gute Informationen sind schwer zu finden, aber es gibt sie definitiv. Dass du schwer auffindbare Informationen zusammengetragen und in eine bessere Form gebracht hast, ist der Beweis dafür. Mein Abschluss ist in Mathematik, aber mein Computing-Wissen habe ich mir selbst beigebracht. So zu lernen und hochgradig technische Informationen zugänglich zu vermitteln, ist wirklich wichtig und sollte nicht unterschätzt werden.
      Ich teile nur zwei Links, sonst könnte das endlos weitergehen. Erstens https://git.lain.faith/sys64738/airs-notes.git und das Inhaltsverzeichnis zum Linker-Teil https://lwn.net/Articles/276782/. Wenn man bei ELF und Linking nur an der Oberfläche gekratzt hat, enthält Ian Lance Taylors 20-teilige Blogserie samt zusätzlichen Themen alles, was man je über ELF wissen wollte, und sogar Dinge, die einen daran zweifeln lassen, wie Befehle überhaupt funktionieren. Kurz behandelt wird auch DWARF, der Begleiter von ELF, der zugleich eine virtuelle Maschine ist, die jedes Mal verwendet wird, wenn eine C++-Exception auftritt.
      Zweitens ist https://0xax.gitbooks.io/linux-insides/content/ ebenfalls ein hervorragendes Projekt. Es verfolgt auf gut lesbare Weise, wie der Linux-Kernel verschiedene Dinge erledigt. Es wurde mit ziemlicher Sicherheit schon einmal auf HN geteilt.
  • Sehr gut geschrieben, und Glückwunsch, dass du dich so tief in dieses Thema eingegraben hast
    Heutzutage kann man mit 17 ein Stück weit damit durchkommen, Dinge zusammenzustecken und das „Programmieren“ zu nennen, auch wenn man sie nicht versteht, aber ich denke, irgendwann stößt man damit an Grenzen. Deshalb ist das, was du gerade tust, wirklich wertvoll – nicht nur für dich, sondern für alle, die mit diesem Material lernen werden
    Gute Arbeit :) Falls du es noch nicht getan hast: Probier als Nächstes einen Emulator aus. Das macht unglaublich viel Spaß

    • „Heutzutage kann man mit 17 auch dann programmieren, wenn man Dinge zusammensteckt, die man nicht versteht“ – das trifft auch auf mich zu. Ich mache das seit 26 Jahren so
      Wenn ich „irgendwann an Grenzen stoßen“ werde, bin ich gespannt, ob das bald passiert
    • Die Zeit von etwa 17 bis 21 war in meinem Programmierleben eher die Phase, in der ich am wenigsten einfach Dinge zusammengesteckt habe
      Ich habe ein MVC-Framework von Grund auf gebaut, Interpreter und Compiler geschrieben und versehentlich versucht, Machine Learning und Natural Language Processing von Grund auf neu zu erfinden. Ich habe lauter coole und spaßige Dinge gemacht
      Dann entdeckte ich Geld und den Stand der Technik. Wenn man akzeptiert, dass andere einem sagen: „Nimm einfach das hier“, kann man viel schneller bauen. Auch Frameworks. Es war erstaunlich, wie sehr jQuery das Leben erleichtert hat
      Einige Jahre später erscheinen mir Dinge, die früher wie „einfach zusammenstecken“ wirkten, jetzt als „sehr Low-Level-High-Level-Arbeit“. Denn auf diesen Abstraktionen wurden wieder neue Abstraktionen aufgebaut
      Dinge, die Anfänger heute „irgendwie hinbekommen“, werden für die nächste Generation Low-Level-Zonen mit Drachenwarnung sein. In dieser Hinsicht ist Programmieren großartig
    • Ich stimme entschieden nicht zu. Wenn man nicht auf eine Stelle abzielt, in der man in einem sehr engen Bereich nur bestimmte technische Aufgaben erledigt, wird am Ende die Fähigkeit wirklich wichtig, Dokumentation zu lesen und Cloud-Services mit JavaScript-Bibliotheken zu verbinden
      Gerade jemand, der Programmieren akademisch angeht, dürfte eher völlig überfordert sein, wenn er vor Aufgaben steht, bei denen man mehrere Technologien auf Grundniveau verstehen und dann weiterziehen muss
      Anders wäre es, wenn man in einem Großunternehmen arbeitet, wo Projektmanager und Designer die Spezifikationen eingrenzen und man sich nur auf die Umsetzung konzentrieren kann, aber für die meisten Menschen ist das eine seltene Situation
    • Genau so war ich, als ich vor 10 Jahren mit 30 als Entwickler frisch in die Branche kam. Manche Dinge ändern sich wohl nicht
    • Oder man könnte es auch mit einem Betriebssystem versuchen. Ich erinnere mich, dass ich vor langer Zeit mit dem Buch Operating System Concepts viele ähnliche Themen durchgearbeitet habe
      Ich musste den Titel wieder nachschlagen, weil ich mich nur noch an den Dinosaurier auf dem Cover erinnerte
  • Glückwunsch zur Fertigstellung dieses Guides
    Wenn man nicht an die Uni geht, scheint es so zu sein, dass man sich durch jede Menge umfassender Systemmaterialien wühlen muss, deren Qualität sehr unterschiedlich ist und die sich manchmal gegenseitig widersprechen
    Das beste Material, das man finden kann, ist Code: The Hidden Language of Computer Hardware and Software von Charles Petzold. Die 2. Auflage ist gerade erschienen
    https://codehiddenlanguage.com/

    • The Elements of Computing Systems von Noam Nisan und Shimon Schocken und das zugehörige nand2tetris-Projekt halte ich für ebenso gut oder besser. Es ist deutlich stärker hands-on
      https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
      https://www.nand2tetris.org/
    • Ich habe das Buch gelesen und wirklich geliebt, aber heutzutage empfehle ich stattdessen nachdrücklich das Spiel Turing Complete
      Es führt einen hervorragend von NAND-Gates bis zu Funktionsaufrufen und tut das auf sehr unterhaltsame, interaktive Weise. Statt beim Lesen im Kopf zu imaginieren, wie etwas funktionieren würde, baut man es selbst
      Ich habe sogar eine kleine SIMD/GPU gebaut, die mit meiner eigenen CPU-Assembly und einer programmierbaren Shader-Sprache eine LED-Matrix ansteuert
    • Danke! Es wirkt hardware-nah und sieht sehr interessant aus. Ich denke, ich werde es irgendwann lesen
    • Beim Blick auf die Website musste ich an dieses Buch denken
      Als ich es vor 15 Jahren gekauft habe, sind mir beim Teil zur CPU-Architektur die Augen glasig geworden, aber vielleicht bin ich jetzt bereit dafür. Die neue 2. Auflage habe ich auch gekauft
  • Das ist ein Artikel, den ich mir auf die Leseliste gesetzt habe. Früher hat mich dieses kleine Detail überzeugt
    „Am unteren Rand jeder Seite haben wir Leerraum eingefügt, damit Leser eine konsistente Blickhöhe beibehalten können.“
    Ein wirklich kleines und im Rückblick offensichtliches Detail. Aber es ist überraschend angenehm. Als ich das bemerkte, wusste ich, dass es ein Herzensprojekt ist

    • Es gibt ziemlich viele sehr gute UI-Details. Dass der Autor 17 ist, scheint damit auch zusammenzuhängen
      Er hat sich offenbar viele Gedanken darüber gemacht, wie man ein Buch im Web darstellt, und scheint neue Konventionen geschaffen zu haben, wie man sie von einer neuen Generation erwarten würde. Zum Beispiel habe ich noch nie gesehen, dass im Kapitel-Navigationswidget oben das vorherige/nächste Kapitel leicht transparent angezeigt wird
  • Ich bin fast 40 und habe so etwas nie hinbekommen. Ich war gerade dabei, mein Impostor-Syndrom zu beruhigen, jetzt muss ich wohl noch mehr beruhigen
    Wirklich gute Arbeit :p

    • Es ist nie zu spät, etwas anzufangen, das einem voraussichtlich ein Gefühl von Erfüllung gibt. Ob man 17, 40 oder 80 ist
      Es bleibt noch genug Zeit, und es gibt kaum einen Grund zur Eile. Such dir eine inspirierende Idee aus und arbeite in den kleinen freien Zeitfenstern, die du hast, langsam daran weiter
      Entscheidend ist wohl, dass du stolz auf dich bist, weil du es tust. Das Endergebnis wird am Ende schon folgen
  • OP, nimm dein Alter nicht als Entschuldigung für deine Arbeit. Dieser Text ist besser als das, was die meisten Menschen in ihrem ganzen Leben schaffen könnten. Großartige Arbeit

    • Wenn das Alter nicht erwähnt worden wäre, hätte das hier überhaupt keine Aufmerksamkeit bekommen. Es gibt haufenweise hervorragendes Material, das unter new untergeht. Er hat beschlossen, sein Alter als Marketingfaktor zu nutzen, und es hat eindeutig funktioniert
    • Das Alter vor Eigenwerbung zu setzen, ob jung oder alt, ist seit sehr langer Zeit ein funktionierender Marketing-Ansatz. Ich möchte ihm nicht vorwerfen, dass er ihn genutzt hat
    • Hätte der Autor nicht gesagt, dass er 17 ist, hätte sich sehr wahrscheinlich niemand für diese CPU-Zusammenfassung auf ChatGPT-Niveau interessiert
  • Wenn man mit 17 solche Inhalte erstellt, kann ich mir gar nicht vorstellen, was für erstaunliche Dinge diese Person noch leisten wird, wenn sie dieses Feld zum Beruf macht. Wirklich großartig.

    • Nachdem ich den Artikel gelesen und mir die Repositories angesehen habe, dachte ich eher das Gegenteil. Ich hoffe, dass sie nicht beruflich in die Tech-Branche einsteigt, sondern einen Weg findet, das weiterzumachen, was sie jetzt tut.
      Ich hoffe, ihre Seele wird nicht von banalem Management, noch banaleren Unternehmenszielen und sinnlosem Karrierewachstum erdrückt. Sie leistet schon jetzt hervorragende Arbeit; es wäre schön, wenn es so etwas wie ein Fellowship gäbe, das ihr ermöglicht, weiterzumachen, ohne ihre Seele im Hamsterrad der Tech-Branche aufzureiben.
  • OP sollte sich einmal Casey Muratoris Kurs auf computerenhance.com ansehen.
    Die Aufgabe im ersten Teil des Kurses besteht darin, einen Simulator für den Intel 8086 von 1978 zu bauen. Moderne x86_64-Assembly sieht dem immer noch ziemlich ähnlich. Man lernt dort viel Computerwissen, das man anderswo wirklich schwer findet.

  • Als jemand, der auch fast 17 ist: gut gemacht! :^)
    Noch vor nur 20 Minuten habe ich herauszufinden versucht, wie man das erste Byte eines 16-Bit-Integer extrahiert, und bin dabei auf Endianness gestoßen, während du gerade ein ganzes Buch über CPUs schreibst.
    Wenn ich mit Crafting Interpreters fertig bin, werde ich es auf jeden Fall lesen. Allerdings hat sich das Tempo dort, wie bei vielen anderen Projekten, deutlich verlangsamt, daher kann es eine Weile dauern lol

  • Sehr guter Artikel, und der Stil gefällt mir auch. Die Kombination aus Text und Illustrationen/Memes hat mir wirklich Spaß gemacht.
    Bei den RISC/CISC-Begriffen bin ich etwas zurückhaltend, aber das ist vielleicht auch einfach Geschmackssache >.>
    Als jemand, der Zeit damit verbracht hat herauszufinden, wie Teile des Kernels funktionieren, kann ich nachvollziehen, wie schmerzhaft der Entstehungsprozess dieses Artikels gewesen sein muss. Wenn man den Artikel liest, war es die Mühe aber eindeutig wert.
    Auf der NT-Seite behandelt Windows Internals vieles von dem, was man wissen möchte, und die Microsoft-Dokumentation ist auch nicht schlecht. Nach meinem Maßstab ist sie definitiv besser als die Linux-Kernel-Dokumentation und ein sehr guter Ausgangspunkt.
    Wenn du mehr über Windows erfahren möchtest, empfehle ich auch Game-Hacking-Foren/-Materialien. Man muss viel herausfiltern, aber bei Nischenthemen können sie manchmal eine ziemlich gute Informationsquelle sein.
    Abschließend: Auf dem Smartphone war die Schrift einiger Codeblöcke ziemlich groß und dadurch schwer zu lesen. Zum Beispiel main.c in Kapitel 6.
    Außerdem erinnert mich der Satz „Wenn du ein Teenager bist, der Computer mag, und noch nicht im Hack Club Slack bist, tritt jetzt bei“ viel zu deutlich daran, dass ich alt werde lol