Dies ist ein kleines Experiment, an dem ich arbeite, wo ich versuche, einen OS -Kernel in der Go -Programmiersprache zu erstellen.
Ziel ist es nicht, ein "vollständig" funktionales Betriebssystem (was auch immer dies bedeutet) zu erstellen, sondern mehr über Betriebssysteme und ihre Herstellung zu erfahren.
Ursprünglich hatte ich vor, ein Fat32-Filesystem umzusetzen. Ich habe einmal einen implementiert (in C), aber ich kann aufgrund fehlender Harware nicht weiter an Projekten arbeiten. Natürlich können Sie leicht ein Dateisystem in Linux implementieren, aber das ist ein bisschen langweilig.
Stattdessen habe ich angefangen, mein eigenes Betriebssystem für dieses Projekt zu schreiben. Es ist auch ein Weg, um zu lernen. Zumindest etwas.
Als ich die Idee hatte, ein Betriebssystem zu schreiben, wusste ich, dass ich C nicht C verwenden möchte, da ich bereits einige Erfahrung mit dem Schreiben eines Betriebssystems in C hatte. Der entscheidende Faktor am Ende war, dass Go die größere Herausforderung sein würde.
Jetzt denken Sie vielleicht, dass es keine so gute Idee ist, einen Kernel zu schreiben, und Sie hätten Recht. Die Runtime ist so konzipiert, dass sie im Benutzerspace eines Betriebssystems verwendet werden kann. Es gibt viele Annahmen, die dies impliziert, z. In einem Kernel können Sie sich nicht auf ein Betriebssystem verlassen, um dies für Sie zu bewältigen, da Sie das Betriebssystem sind. Mit sorgfältiger Programmierung und dem Aufgeben bestimmter Gu-Features können Sie es jedoch tun. Warum nicht? Es ist eine Herausforderung.
Ein Ziel dieses Projekts ist es, schnell Sachen zu erreichen, daher habe ich keine Zeit damit verbracht, das Betriebssystem zu entwerfen. Um den gesamten Vorgang zu beschleunigen, habe ich beschlossen, die Syskall -Schnittstelle von Linux zu verwenden. Auf diese Weise müsste ich nicht meine eigenen Benutzerspace -Bibliotheken schreiben und könnte jede Programmiersprache verwenden, die ich in meinem Benutzerspace wollte. Es hat jedoch einige Nachteile. Während ich die Systeme auf die gleiche Weise wie Linux mache, erfordert ich, dass ich auch alle Annahmen von Linux verwende. Zum Beispiel wird ich mit dem Starten eines Prozesses auf die gleiche Art und Weise eingerichtet, wie es in Linux es tun würde.
Ich bin mir noch nicht sicher, ob ich mich an dieses Design halte. Eine andere Idee, die ich hatte, ist, meine eigene ABI zu schreiben, aber auch eine Linux-Syscall-Wrapper-Bibliothek zu schreiben, die Linux-Syscalls abgefangen und sie in mein Betriebssystem übersetzen würde.