Serena ist ein experimentelles Betriebssystem, das auf modernen Designprinzipien basiert und die von vorbeugende präventive Parallelität und mehrere Benutzer unterstützt. Der Kernel ist objektorientiert und so konzipiert, dass er plattformübergreifend und zukünftiger Beweise ist. Es läuft auf Amiga -Systemen mit einer 68030 oder einer besseren CPU.
Ein Aspekt, der es von der traditionellen OSS-basierten OSS unterscheidet, ist, dass es sich nur um Versandwarteschlangen basiert, die dem Grand Central-Versand von Apple etwas ähnlich sind. Es gibt weder Unterstützung für das Erstellen von Themen im Benutzerbereich oder im Kernel -Bereich. Stattdessen implementiert der Kernel ein virtuelles Prozessorkonzept, bei dem ein Pool virtueller Prozessoren dynamisch verwaltet wird. Die Größe des Pools wird automatisch anhand der Anforderungen der Versandwarteschlangen angepasst, und virtuelle Prozessoren werden nach Bedarf den Prozessen zugeordnet. Der gesamte Kernel- und Benutzerbereich wird durch das Erstellen von Versandwarteschlangen und die Übermittlung von Arbeitselementen an Versandwarteschlangen erreicht. Arbeitselemente sind einfach Schließungen (eine Funktion mit dem zugehörigen Status) aus Sicht des Benutzers.
Ein weiterer interessanter Aspekt ist das Interrupt -Handling. Code, der auf einen Interrupt reagieren möchte, kann ein Zählsemaphor mit dem Interrupt -Controller für den Interrupt registrieren, den es tun möchte. Der Interrupt -Controller signalisiert dann das Semaphor jedes Mal, wenn der Interrupt auftritt. Die Verwendung eines Zählsemaphors stellt sicher, dass der Code, der an dem Interrupt interessiert ist, das Auftreten eines Interrupts nicht verpasst. Der Vorteil der Übersetzung von Interrupts in Signale auf einem Semaphor besteht darin, dass der Interrupt-Handling-Code in einem gut definierten Kontext ausgeführt wird, der den gleichen Kontext ist, in dem jede andere Art von Code ausgeführt wird. Er gibt dem Interrupt-Handling-Code auch mehr Flexibilität, da er nicht sofort auf einen Interrupt reagieren muss. Die Informationen, die ein Interrupt aufgetreten ist, gehen nie verloren, unabhängig davon, ob der Interrupt -Handler -Code zum Zeitpunkt des Interrupts mit anderen Dingen beschäftigt war oder nicht.
Der Kernel ist im Allgemeinen wieder eingetragen. Dies bedeutet, dass virtuelle Prozessoren weiterhin geplant sind und der Kontext präventiv geändert werden, selbst wenn die CPU im Kernel ausführt. Zusätzlich sind im Kernel ein vollständiges Kompliment für das Zählen von Semaphoren, Bedingungsvariablen und Sperren -APIs erhältlich. Die API dieser Objekte ähnelt stark dem, was Sie in einer Implementierung eines traditionellen Betriebssystems im Benutzerraum finden würden.
Serena implementiert eine hierarchische Prozessstruktur, die POSIX ähnelt. Ein Prozess kann eine Reihe von Kinderprozessen hervorbringen und eine Befehlszeile und Umgebungsvariablen an seine Kinder übergeben. Ein Prozess greift über E/A -Kanäle auf E/A -Ressourcen zu, die den Dateideskriptoren in POSIX ähneln.
Es gibt jedoch zwei bemerkenswerte Unterschiede zwischen dem POSIX -Prozessmodell und dem Serena -Modell: Erstens verwenden Sie Fork (), gefolgt von exec (), um einen neuen Prozess zu erzeugen, und verwenden Sie eine einzige Funktion in Serena namens Process_Spawn (). Dies macht das Laichen eines Prozesses viel schneller und erheblich weniger fehleranfälliger.
Zweitens erbt ein untergeordneter Prozess standardmäßig die Dateideskriptoren seines übergeordneten Elternteils. Die einzige Ausnahme sind die Dateideskriptoren 0, 1 und 2, die die terminalen Eingangs- und Ausgabestreams darstellen. Dieses Modell ist viel weniger fehleranfällig als das POSIX -Modell, bei dem ein Prozess darauf achten muss, Dateideskriptoren zu schließen, dass es nicht an einen untergeordneten Prozess weitergeben möchte, bevor es ein Kind hervorbringt. Dies zu tun war in den frühen Tagen der Unix einfach, als die Anwendungen so ziemlich selbsthaltig waren und wenn es keine Unterstützung für dynamische Bibliotheken gab. Es ist heute das Gegenteil, da Anwendungen weitaus komplexer sind und von vielen Bibliotheken der Drittanbieter abhängen.
Das ausführbare Dateiformat zu diesem Zeitpunkt ist das Atari -St -Gemdos -Dateiformat, das relativ zum AOUT -ausführbaren Format ist. Dieses Dateiformat wird schließlich durch ein Dateiformat ersetzt, das dynamische Bibliotheken unterstützen kann. Im Moment ist es jedoch gut genug, die Arbeit zu erledigen.
Der Kernel implementiert Serenafs, ein hierarchisches Dateisystem mit Berechtigungen sowie Benutzer- und Gruppeninformationen. Ein Dateisystem kann oben in einem Verzeichnis in einem anderen Dateisystem montiert werden, um den Dateinamenspace zu erweitern. All dies funktioniert ähnlich wie es in POSIX -Systemen funktioniert. Ein Prozess, der einen untergeordneten Prozess hervorbringen möchte, kann angeben, dass der untergeordnete Prozess auf einen Unterbaum des globalen Dateisystem-Namespace beschränkt sein sollte.
Das Startdateisystem ist derzeit RAM-basiert. Das ROM enthält ein Festplattenbild, das mit dem Festplattenwerkzeug erstellt wird und als Vorlage für die RAM -Festplatte dient. Dieses ROM -Festplattenbild wird zur Startzeit in RAM kopiert.
Der Benutzerraum unterstützt LIBC, LibSystem, Libclap und die Anfänge von Libm. Libsystem ist eine Bibliothek, die die Benutzerraumseite der Kernel -Schnittstelle implementiert. Libclap ist eine Bibliothek, die Argument -Parsen für Befehlszeilenschnittstellenprogramme implementiert.
Serena OS wird mit einer Shell geliefert, die eine formal definierte Shell -Sprache implementiert. Hier finden Sie das Shell -Dokument.
Die folgenden Kernel -Dienste werden zu diesem Zeitpunkt implementiert:
Die folgenden Benutzerraumdienste sind zu diesem Zeitpunkt verfügbar:
Die folgenden User Space -Programme sind derzeit verfügbar:
Die Vollständigkeit und Korrektheit der verschiedenen Module variiert zu diesem Zeitpunkt sehr. Die Dinge sind allgemein geplant, sich im Laufe der Zeit zu verbessern :)
Die folgende Hardware wird zu diesem Zeitpunkt unterstützt:
Das Einstellen des Projekts für die Entwicklung und das Ausführen des Betriebssystems ist etwas involviert. Die folgenden Anweisungen gelten für Windows, aber sie sollten unter Linux und MacOS so ziemlich gleich funktionieren.
Das erste, was Sie brauchen, ist ein Amiga -Computer -Emulator. Ich verwende Winuae, die Sie von https://www.winuae.net/download herunterladen können
Laden Sie das Winuae -Installateur herunter und führen Sie es aus. Dadurch wird der Emulator in das Verzeichnis "Programmdateien" auf Ihrem Startlaufwerk gelegt.
Download und installieren Sie den VBCC -Compiler und der Assembler, der für den Bau des Betriebssystems benötigt wird. Die Projekt -Homepage finden Sie unter http://www.compilers.de/vbcc.html und die Download -Seite für die Tools unter http://sun.hasenbraten.de/vbcc.
Die Version, die ich für meine Entwicklung verwende und von der ich weiß, dass sie korrekt unter Windows 11 funktioniert, beträgt 0,9 Stunden. Fügen Sie unbedingt eine Umgebungsvariable mit dem Namen VBCC hinzu, der den Ordner VBCC auf Ihrer Festplatte verweist, und fügen Sie den Ordner vbccbin zur PATH hinzu.
Beachten Sie, dass Microsoft Visual Studio und Befehlszeilen -Tools installiert werden müssen, da der Microsoft C -Compiler benötigt wird, um die Build -Tools unter Windows zu erstellen.
Installieren Sie schließlich GNU für Windows und stellen Sie sicher, dass es sich in der PATH befindet. Eine einfache Möglichkeit, dies zu tun, besteht darin, den folgenden Winget-Befehl in einem Shell-Fenster auszuführen: winget install GnuWin32.Make .
Sie müssen diesen Schritt nur einmal ausführen, bevor Sie versuchen, das Betriebssystem zu erstellen. Der Zweck dieses Schritts ist es, einige Tools zu erstellen, die zum Erstellen des Kernels und der Benutzerraumbibliotheken erforderlich sind. Hier finden Sie Dokumentation für diese Tools.
Öffnen Sie zuerst eine Entwicklereingabeaufforderung in Windows Terminal und dann CD in den Ordner Serena/Tools . Geben Sie make und Treffer zurück. Dadurch werden alle erforderlichen Werkzeuge aufgebaut und in einen Serena/build/tools -Ordner gelegt. Die Tools werden an diesem Ort aufbewahrt, auch wenn Sie eine vollständige Reinigung des Betriebssystemprojekts durchführen.
Öffnen Sie den Serena -Projektordner im Visual Studio -Code und wählen Build All aus dem Menü Run Build Task... aus. Dadurch werden Kern, Libsystem, LIBC, LIBM und Shell aufgebaut und eine einzelne Datei Serena.rom in der Serena/product/Kernel/ Ordner erzeugt. Diese ROM -Datei enthält den Kernel, die Benutzerraumbibliotheken und die Shell.
Zuerst müssen Sie eine Amiga -Konfiguration mit mindestens 68030 CPU (dh Amiga 3000 oder 4000) in Winuae erstellen, wenn Sie es noch nicht getan haben. Der einfachste Weg, dies zu tun, besteht darin, zu QuickStart zu gehen und A4000 als Modell auszuwählen. Gehen Sie dann zur Hardware/ROM -Seite und aktualisieren Sie das Textfeld "Haupt -ROM -Datei", sodass es auf die Datei Serena.rom in der Serena/build/product/ Ordner auf Ihrer Festplatte hinweist. Geben Sie Ihrem virtuellen Amiga schließlich mindestens 1 MB Fast RAM, indem Sie zur Hardware/RAM -Seite gehen und den "langsamen" Eintrag auf 1 MB festlegen. Speichern Sie diese Konfiguration, damit Sie sie das nächste Mal nicht neu erstellen müssen, wenn Sie das Betriebssystem ausführen möchten.
Laden Sie die Konfiguration und klicken Sie dann auf die Startschaltfläche oder doppelklicken Sie einfach auf die Konfiguration auf der Seite Konfigurationen, um das Betriebssystem auszuführen. Der Emulator sollte einen Bildschirm öffnen, der eine Startnachricht und dann eine Shell -Eingabeaufforderung anzeigt. Eine Liste der Befehle, die von der Shell unterstützt werden, finden Sie auf der Shell -Seite.
Unter der MIT -Lizenz verteilt. Weitere Informationen finden Sie LICENSE.txt .
Dietmar Planitzer - @linkedin
Projektlink: https://github.com/dplanitzer/sena