Hi,
ich habe vor ca 1-2 jahren mal ein os angefangen VertaOS was ich allerdings aus Zeitgründen einstellen musste. Nun wollte ich wieder anfangen und habe gravierende Fehler im Design festgestellt, so dass es besser währe nochmal neu anzufangen.
Den Aufbau hab ich mir folgend gedacht:
Bootloader FAT12 lädt kernel im RM
Der Kernel switcht in den PM nachdem er die nötigen Treiber geladen hat
Im Kernel enthalten sind folgende Funktionen:
Protectedmode (GDT, TSS etc)
Interrupts (IDT, PIC etc)
Memorymanager
Video Treiber (Nur für Kernelmeldungen)
Module (PL0):
Taskmanager
VFS
FDD/HDD
... (kommt später)
Treiber-Tasks (PL2):
Usermanager (Als System, kann nicht beendet werden und wird versteckt
Da der Usermanager als Task läuft, kann er den Kernel nicht direkt beeinflussen und greift nur über eine API auf den Kernel zu.
Normale tasks und Anwendungen laufen auf PL3
Der ganze Rest wird dann Nachgeladen.
Entweder als Modul oder als Task (beides soll möglich sein).
Die Treiber können untereinander Kommunizieren über "Briefkästen", also ein Treiber schickt eine Anfrage/Befehl an einen anderen. Dieser wiederum kann ihn dann annehmen und antworten oder auch ablehnen, muss hier aber eine Nachricht an den Kernel schicken. Sollte der Befehl abgelehnt und keine Nachricht an den Kernel geschickt werden, wird es als Nichtausführung der Aufgabe gewertet und der Treiber wird als defekt angesehen und wieder entladen (unload - weiß kein vergleichbahr deutsches wort).
Das Paging etc will ich etwas abändern, so dass ich eine art "Dateisystem" im Ram habe. Das hat den vorteil, dass wenn ein Fehler auftreten sollte das Debuggen um etliches erleichtert wird (als Zusatzfunktion).
Die Geräte werden wie bei Linux über DevFS angesprochen.
Es wird die möglichkeit geben, dass ein Programm eine Anfrage an den Kernel schickt (ev. mit bestätigung des users), damit die Anwendung dann z.B. direkt auf die Grafikkarte zugreifen kann ohne auf die verhälltnissmäßig langsame API zurückzugreifen.
Für kompatibilität werde ich mich so gut ich kann an den POSIX standard (IEEE Std 1003.1) halten.
Die Ordnerstruktur werde ich an FHS anlehnen (nur anlehnen ^^):
/ Hauptverzeichnis
/bin Programme (Nur Verzeichnis)
|- /sys Systemprogramme
|- /programm Programme installieren in separate Ordner
/boot Bootloader
/doc Dokumentationen (Nur Verzeichnis)
|- /sys Dokumentationen über das System
|- /programm Dokumentationen über ein Programm
/etc Konfigurationen (Nur Verzeichnis)
|- /sys Systemkonfigurationsdateien
|- /programm Konfigurationen der einzelnen Programme
/home Heimatsverzeichnis (Nur Verzeichnis)
|- /benutzer Heimatsverzeichnis eines Benutzers
|- /root Heimatsverzeichnis des Administrators
/lib Bibliotheken (Nur Verzeichnis)
|- /lib-name Bibliotheken liegen in separaten Ordnern
/sbin Programme für Admin (Nur Verzeichnis)
|- /programm Programme die vom Administrator ausgeführt werden können
/tmp Temporärer Ordner
Was haltet ihr davon und habt Ihr Vorschläge, was man besser machen könnte? (es soll aber realisierbahr bleiben ^^)