Hi,
nach vielen Monaten Entwicklungsarbeit befinden sich der Kernel und einige grundlegende Bestandteile meines Betriebssystems jetzt endlich auf einem halbwegs benutzbarem Niveu. Ich poste diesen Thread in der Kategorie "OS Design" da mein OS ein relativ exotisches Design besitzt, das ich hier vorstellen möchte.
Mein OS baut nämlich auf einer virtuellen Maschine auf; alle Anwendungen und Treiber sind in einer Programmiersprache geschrieben, die zu Bytecode kompiliert wird. Der Bytecode wird dann von der virtuellen Maschine just-in-time (unmittelbar vor dem Ausführen) zu nativem x86 Code kompiliert. Das hat den Vorteil, das Speicherheitslücken wie z.B. Buffer Overflows auf dem OS nicht auftreten können: Die virtuelle Maschine verhindert, dass auf nicht vorhandene Arrayelemente zugegriffen werden kann. Der "unsichere" Code der auf dem Computer läufen muss ist also viel kleiner als bei einem monolithischen Kernel, nur die virtuelle Maschine und der Kernel können potentiell Fehler und Kernelpanics auslösen. Anders als bei monolithischen Kernels können die Treiber
keine Panics auslösen. Anders als bei einem Microkernel können sie trotzdem in Ring 0 laufen - ihre Sicherheit ist ja bereits durch die VM garantiert. Im Idealfall ist das Betriebsystem also so schnell wie ein monolithischer Kernel (oder sogar noch schneller, da Anwendungen auch in Ring 0 laufen) und hat die Sicherheit eines Microkernels.
Als Sprache verwende ich dabei nicht eine der herkömmlichen Sprachen Java oder C# bzw. Microsoft's .NET sondern eine für diesen Zweck entwickelte Sprache (namens Korona). Java kann mit einigen wichtigen und nützlichen Sachen nicht umgehen, die für Treiber benötigt werden (etwa vorzeichenlose Datentypen), .NET ist recht kompliziert und intern sehr unschön.
Ein Diskettenimage zum Testen sowie den Sourcecode gibts auf:
http://code.google.com/p/managarm/EDIT: Als Programme sind im Moment nur cat, echo und ls vorhanden. (und natürlich cd)
EDIT: Es wird im Moment nur das QWERTY Tastaturlayout unterstützt. Wer damit nicht vertraut ist:
y = z
z = y
ö = ;
ö + shift = :
ä + shift = "
- = /
? = -
Das OS hat allerdings noch einige Grenzen:
- Es benötigt über 128 MB Speicher, im schlimmsten Fall etwa 150 MB. Das liegt weniger am Design als an der Implementierung: Der Memory Manager gibt im Moment überhaupt keinen Speicher frei (ich hatte zwischenzeitlich einen Slaballocator eingebaut, der wurde aber irgentwann wieder entfernt). Garbage Collection ist zwar implementiert aber deaktiviert. In den nächsten zwei Wochen werde ich daher einen vernünftigen Speichermanager schreiben.
- Auf Bochs und VirtualBox (auf einer CPU ohne VM Extensions; falls jemand eine mit VM Extensions hat wäre es sehr nett wenn er das testen würde =)) ist das OS recht langsam. Auf QEmu ist die Geschwindigkeit akzeptabel, auf VMWare ist sie am besten.
EDIT: Auf QEmu kann es schon bis zu einer Minute dauern, bis die Shell startet und man etwas auf dem Bildschirm sieht.
Mittlerweile ist das Projekt sehr groß geworden und die Todo-List wird eher größer als kleiner. Als eine einzige Person kann ich es kaum schaffen alle meine Vorstellungen (TCP/IP Stack, ATAPI, verschiedene Dateisysteme, einen Usermanager, SMP, VESA und einen Windowmanager, einen Packetmanager, Java Support, .NET Support und vieles mehr) zu verwirklichen. Falls also jemand Interesse an dem Projekt hat und schon etwas Erfahrung mit der OS Entwicklung hat würde ich mich freuen, wenn er sich bei mir melden würde. =)