Autor Thema: Mein Os: managarm  (Gelesen 7062 mal)

Korona

  • Beiträge: 94
    • Profil anzeigen
Gespeichert
« am: 01. August 2008, 19:24 »
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. =)
« Letzte Änderung: 01. August 2008, 20:09 von Korona »

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 01. August 2008, 23:44 »
Ich finde den Ansatz ziemlich cool. Und im zweiten Versuch habe ich sogar eine Shell bekommen - kann es sein, daß du bei zu wenig Speicher einfach irgendwo hängen bleibst anstatt eine Fehlermeldung zu liefern?

An der Geschwindigkeit gibt es freilich noch einiges zu tun.  Die Startzeit ist mit inakzeptabel recht genau beschrieben und auch die Shell läuft eher gemächlich. Interessant ist, daß ich auf der Shell fast schneller tippen (und die Buchstaben auf den Bildschirm bringen) kann als sie den Prompt zeichnet - oder zumindest bin ich nicht viel langsamer. ;)

Aber wenn das tatsächlich alles Managed Code ist, und das auch noch in einer eigenen Sprache, dann sind das im Vergleich dazu, was du schon geschafft hast, eigentlich alles nur Detailprobleme. Halt uns auf dem Laufenden, was sich bei dir tut - ich finde es beeindruckend!
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Korona

  • Beiträge: 94
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 02. August 2008, 11:52 »
Falls zu wenig Speicher vorhanden ist wird einfach eine Meldung auf die serielle Schittstelle ausgegeben. Das sollte ich auf jeden Fall noch ändern und eine Meldung auf den Bildschirm ausgeben.

An der Geschwindigkeit gibt es natürlich allgemein noch einiges zu tun. Nachdem ich eine vernünftige Speicherverwaltung implementiert habe werde ich da mal einige Optimierungen vornehmen.

Ansonsten vielen Dank fürs Testen. :) Welchen Emulator oder welche Hardware hast du eigentlich dazu benutzt?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 02. August 2008, 13:57 »
Irgendeine halbwegs aktuelle SVN-Version von qemu. Und die serielle Schnittstelle habe ich natürlich nicht angeschaut. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

DeepDancer

  • Beiträge: 58
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 22. September 2008, 13:47 »
Sowas,

hat sich da jemand die Ideen von Microsoft abgeschaut?  :-D

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 am: 22. September 2008, 18:42 »
Stimmt, Microsoft waren auch die ersten der auf so eine Idee kamen :roll:
* Inferno (OS) (das früheste komplette OS das ich finden konnte, 1995)
* O-Code machine (die früheste VM die ich finden konnte, späte 60er)

edit: Korona, mich würde interessieren ob sich in den letzten 1,5 Monaten was getan hat :-)
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen