Ratschläge für einen ehrgeizigen Studenten beim Erstellen eines eigenen Kernels [geschlossen]


18

Ich bin ein sehr ehrgeiziger Universitätsstudent, der so ziemlich alles lernen möchte, was man über Computer wissen muss. Kürzlich dachte ich, es wäre ein lustiges Projekt (wenn auch ein langwieriges), meinen eigenen Kernel zu entwerfen und zu bauen.

Ich habe einige grundlegende Informationen und ich habe festgestellt, dass ich Assembly und C / C ++ beherrschen muss, damit dies wirklich funktioniert. Während ich daran arbeite, möchte ich lernen, wie ein Kernel aus der Perspektive der Programmierung funktioniert. Ich habe Stunden damit verbracht, den Code des Linux-Kernels zu durchsuchen, aber das kann dich nur so weit bringen.

Was sind die grundlegenden Schritte beim Erstellen eines Kernels? Dinge, die Sie ansprechen müssen? Bestellen oder Dinge tun? Ich weiß, dass ich viel abbeiße, aber ich bin entschlossen genug, damit umzugehen.


12
Sie müssen nicht geschlagen werden, um alles zu lernen. Aber wenn Sie es tatsächlich versuchen

2
Ich erwarte all das! Nicht wirklich, ich habe nur einen überwältigenden Drang zu lernen.
16.

@delnan Mögliche paranoide Schizophrenie ist ein Plus zu: templeos.org
DanteTheEgregore

@DanteTheEgregore Was zum?
Panzercrisis

Antworten:


34

Sie müssen lediglich das Betriebssystem entwerfen. Auch wenn Sie zum Beispiel entscheiden, dass es sich um ein UNIX-ähnliches System handeln soll, sind noch viele Entscheidungen zu treffen. Wie sehr soll es UNIX ähneln? Welche Teile von UNIX gefallen Ihnen und welche sind Ihrer Meinung nach verbesserungswürdig?

Wenn Sie nicht darauf festgelegt sind, UNIX-artig zu sein, müssen Sie am Ende noch weitere Fragen beantworten: Sollten Prozesse einen Baum bilden oder sind sie "flach"? Welche Art von prozessübergreifender Kommunikation möchten Sie unterstützen? Möchten Sie, dass es sich um ein Mehrbenutzer- oder nur ein Multitasking-Verfahren (oder möglicherweise ein Single-Tasking-Verfahren) handelt? Möchten Sie, dass es sich um ein Echtzeitsystem handelt? Welchen Grad an Isolation möchten Sie zwischen den Aufgaben erreichen? Wo soll es im monolithischen Vergleich zum Mikrokern liegen? Inwieweit (falls vorhanden) soll der verteilte Betrieb unterstützt werden?

Ich würde generell raten gegen den Linux - Kernel für Ihre Inspiration zu studieren. Das ist nichts gegen den Linux-Kernel selbst, aber eine einfache Tatsache, dass Linux in erster Linie für die Produktion gedacht ist, nicht für die Ausbildung. Es hat viele Optimierungen, Abwärtskompatibilitäts-Hacks usw., die für die Produktion äußerst nützlich sind, aber eher ablenken als erziehen.

Wenn Sie es finden, ist ein Exemplar von Lion's Book ( Lions-Kommentar zur 6. UNIX-Edition mit Quellcode von John Lions) ein viel einfacherer Ausgangspunkt. Die 6. Edition von UNIX war noch klein und einfach genug, um relativ schnell gelesen und verstanden zu werden, ohne dass es sich dabei um ein stark vereinfachtes Spielzeugsystem handelte.

Wenn Sie vorhaben, auf x86 (zumindest in erster Linie) zuzugreifen, sollten Sie sich auch MMURTL V 1.0 von Richard Burgess ansehen . Dies stellt ein System für x86 dar, das die x86-Hardware viel stärker als ursprünglich von den CPU-Designern beabsichtigt nutzt - etwas, das die meisten realen Systeme zugunsten der Portabilität auf andere CPUs meiden. Wie Sie sich vorstellen können, ist dies in der Regel viel stärker auf das Hardware-Ende der Dinge ausgerichtet. Gedruckte Exemplare scheinen teuer und schwer zu finden zu sein, aber Sie können den Text und den Code kostenlos herunterladen .

Zum Glück gibt es noch einige weitere Möglichkeiten - das Design und die Implementierung von Betriebssystemen , zum Beispiel von Andrew Tanenbaum und Albert Woodhull.


Wow danke für die nette Antwort. Ich werde in all diese Bücher schauen.
Nr.

7
Ich habe Links zu PDFs des Buches und der Quelle hinzugefügt. Das Erstaunliche an der Quelle für v6 UNIX ist, dass sie 100 Seiten lang ist und 100 Zeilen pro Seite enthält. Und in 10.000 Codezeilen haben Sie ein vollständiges Multitasking-Betriebssystem . Wenn Sie den Code, der den berühmten Kommentar in Zeile 2238 umgibt, wirklich verstehen, können Sie sich selbst einen goldenen Stern und einen Ehrenmeister geben. Genießen!
Peter Rowell

Danke für die Links! Jetzt muss ich herausfinden , wo diese drucken ....
n0pe

1
Minix (das Tannenbaum-Buch) ist für den Unterricht gedacht und kann genau das sein, was hier gebraucht wird.

@PeterRowell, dmr gab an, es sei ein Fehler in cm.bell-labs.com/who/dmr/odd.html

12

Ich würde vorschlagen, mit einer winzigen, sehr konzentrierten Aufgabe zu beginnen: Schreiben Sie mithilfe von Assembly ein Spielzeug-Bootstrap-Programm. Es muss nicht viel tun. Sie möchten lediglich, dass der Computer das Programm beim Start automatisch lädt, eine Meldung druckt, in der bestätigt wird, dass es ausgeführt wird, Eingaben von der Tastatur liest, eine weitere Meldung druckt und dann den Computer herunterfährt.

Dies hätte mehrere Vorteile:

  1. Sie werden irgendwann einen Bootstrap-Prozess für Ihren Kernel benötigen, es wird also keine sinnlose Übung.
  2. Sie erhalten schriftliche Übung in der Montage.
  3. Es wird Ihnen die Übung geben, Low-Level-IO-Routinen zu schreiben. Wie schreibe ich eine Nachricht auf den Bildschirm oder lese einen Tastendruck, wenn ich kein Betriebssystem zum Aufrufen habe?
  4. Sie erhalten Erfahrung in der Erforschung der technischen Details der CPU und der Hauptplatine. (Erste Frage: Wie findet Ihr Motherboard / Ihre CPU beim Start ein bootfähiges Programm?)
  5. Das Schreiben von Kerneln ist zu einer sehr anspruchsvollen Aufgabe mit einer Menge Feinheiten geworden. Diese Aufgabe gibt Ihnen etwas, womit Sie sich vielleicht nicht im Unkraut verirren können, bevor Sie überhaupt anfangen.

Sobald Sie dies tun können, haben Sie eine viel bessere Vorstellung davon, worauf Sie sich einlassen.


Vielen Dank dafür, ich denke, genau das werde ich versuchen und tun. Weitere Lektüre in meiner Zukunft.
Nr.

7

Das Erlernen des Programmierens in Assembler ist ein guter erster Start, und dies kann auch unter MSDOS 6.0 hilfreich sein, da es an integrierten Funktionen mangelt.

Ein gutes Buch wie Operating System Concepts zu lesen, wäre ein guter Anfang, um einen eigenen Kernel zu entwerfen. Sie müssen das Booten, die Verwaltung von Gerätetreibern, die Schnittstelle zum BIOS, die Erstellung und Verwaltung von Dateisystemen, die Programmplanung, das Laden und Entladen von Programmen und die Implementierung von mindestens einer Art Shell übernehmen (viel einfacher als das Erstellen eines Fenstersystems).

C / C ++ funktioniert nur, wenn Ihr Kernel mit den Standardbibliotheken für diese Sprachen kompatibel ist. Andernfalls müssen Sie auch eine Kopie dieser Bibliotheken schreiben.

An Multithreading, Systemsicherheit und Vernetzung wird noch gar nicht gedacht.


7

Minix ist ein netter Unix-Klon (der Linux inspiriert hat), der für den Unterricht geschrieben wurde.

Andrew S. Tannenbaum ist ein ausgezeichneter Autor und Lehrer und hat ein ganzes Buch über Betriebssysteme am Beispiel von Minix geschrieben (und den folgenden Quellcode beigefügt): http://en.wikipedia.org/wiki/Operating_Systems:_Design_and_Implementation

Persönlich finde ich, dass er ein etwas besserer Schriftsteller ist als ein Programmierer, daher sind einige Dinge nicht so klar, wie ich persönlich möchte, aber - hey - es funktioniert!

Ich kann nur empfehlen, dies als Lernressource zu betrachten. Außerdem erhalten Sie eine Vorstellung davon, wie viel Arbeit erforderlich ist, um tatsächlich etwas zu produzieren, das tatsächlich nützlich sein kann.


Ich würde empfehlen, das physische Buch zu bekommen. Einfachere Notizen.

Eigentlich denke ich mal darüber nach, dass ich das Buch bei Amazon günstig gesehen habe. Ich könnte es dort bekommen. Danke
nein

Beachten Sie auch, dass dies die dritte Ausgabe ist. Ich glaube, wir haben die erste Ausgabe verwendet, als ich den Kurs hatte.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.