Willkommen bei unix.stackexchange.com!
Es gibt keine einfache Antwort auf Ihre Frage, und weitaus bessere Leute als ich haben ganze Bücher zum Thema Linux-Kernel und Betriebssysteme im Allgemeinen geschrieben.
Über den Umfang des Projekts: Das Schreiben eines Betriebssystems ist keine einfache Aufgabe! Selbst ein bewusst minimales Betriebssystem wie Minix ist eine ziemlich komplexe Sache! Um Ihnen eine Vorstellung von Linux zu geben, denken Sie an die C-Programme, die Sie bisher geschrieben haben. Die durchschnittliche Studienleistung beträgt in der Regel höchstens einige tausend C-Zeilen. Ich glaube, mein letztes Projektjahr umfasste ungefähr 30–35.000 Zeilen C ++. Der Linux-Kernel besteht aus ungefähr 13 Millionen Zeilen C-Code.
Warum ist alles in separaten Dateien? Aus logistischen und praktischen Gründen werden umfangreiche Projekte in separaten Dateien gespeichert. Laden Sie einfach eine 13.000.000-Zeilen-Datei in einen Editor! Bevor Sie ein großes Projekt wie Linux in Angriff nehmen, sollten Sie Ihre C-Kenntnisse auf jeden Fall so weit verbessern, dass sich die Frage „Warum mehrere Dateien?“ Von selbst beantwortet. Sie sollten auch in der Lage sein, C-Code zu lesen und nicht nur zu schreiben. (schwieriger als es zunächst scheint)
Sie sollten auf jeden Fall sehr gut mit C umgehen können. Der Kernel wird von Tausenden von Leuten gewartet, und Sie werden aufgefordert, die persönlichen C-Idiome jedes einzelnen von ihnen zu verstehen (selbstverständlich im Rahmen der ziemlich strengen Kernel-Codierungsstandards, aber immer noch - jeder hat ihren eigenen Problemlösungsstil).
Stellen Sie sicher, dass Sie die Betriebssysteme verstehen, nachdem Sie Ihr C fu erhalten haben. Dies wird Ihnen helfen, den Code zu verstehen. Nicht alles von Linux ist wesentlich. Der eigentliche Kernel ist ziemlich klein! Was ist das für eine Blähung?
- Tausende Hardwaretreiber für verschiedene Geräte.
- Abstraktionsschichten für verschiedene Geräteklassen, um APIs und das Schreiben von Treibern zu vereinfachen. ZB haben wir das VFS für Dateisysteme, die Event-Ebene für Eingabegeräte und so weiter.
- Erschreckende Mengen an bedingt kompiliertem Code und Dateien, die den verschiedenen Architekturen gerecht werden, auf denen Linux ausgeführt wird (nicht jeder Linux-Computer ist ein Intel-PC, und einige unterscheiden sich unglaublich von den Erwartungen). Der Kernel muss sich mit diesen Unterschieden auseinandersetzen, und das bedeutet mehr Code.
Ein Problem, das Sie sofort feststellen werden, ist, dass sich diese Komponenten nicht so einfach trennen, austauschen und wieder zusammenstecken lassen. Es gibt zahlreiche Zusammenhänge. Kurz gesagt, es ist schwierig, Teile des Kernels zu ändern.
Der Grund, warum die Leute Minix für Sie vorgeschlagen haben, ist einfach: Es ist ein vollständiges Betriebssystem, aber es wird nicht durch die Anforderungen eines Systems belastet, das so komplex ist wie Linux. Der Code ist klein, bietet aber dennoch die volle Funktionalität. Immerhin waren die ersten Versionen von Linux von Minix inspiriert.
Sicher, Minix hat heutzutage weniger Hardware-Support. Na und? Das ist ein Segen! Moderne Computer lassen sich sehr gut virtualisieren. Nutzen Sie dies zu Ihrem Vorteil: Eine VM zum Ausführen von Minix ist so leicht, dass die Entwicklung zum Kinderspiel wird.
Wenn Ihr Projekt ein Betriebssystem erstellen soll, können Sie es schlechter machen, als mit dem Studium von Minix zu beginnen. Vielleicht möchten Sie auch das Buch kaufen und lesen, das Minix zusammen mit " Andrew Tanenbaums modernen Betriebssystemen " geschrieben hat.
Sie sollten auch Ihre Ziele festlegen und Ihre Begriffe genau definieren . Wenn Sie Microsoft als Betriebssystem definieren (ein Betriebssystem mit einer grafischen Benutzeroberfläche und einer vollständigen Softwaresuite), haben Sie möglicherweise ein sehr langes Projekt vor sich! Hunderttausende Menschen haben seit den 1960er Jahren daran gearbeitet, uns dorthin zu bringen, wo wir jetzt sind.
Erinnern Sie sich schließlich an den Schlachtruf des Informatikers: ' Niemals das Rad neu erfinden! '(Ausnahmen machen wir natürlich gerne beim Lernen. Und zum Spaß :))