Putting the „You“ in die CPU – Leitfaden eines 17-Jährigen dazu, wie eine CPU Programme ausführt
(github.com/hackclub)- 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
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.
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.
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.
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 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ß
Wenn ich „irgendwann an Grenzen stoßen“ werde, bin ich gespannt, ob das bald passiert
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
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
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/
https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
https://www.nand2tetris.org/
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
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
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 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
newuntergeht. Er hat beschlossen, sein Alter als Marketingfaktor zu nutzen, und es hat eindeutig funktioniertWenn 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.
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.cin 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