PrettyOS

Aus Lowlevel
Wechseln zu: Navigation, Suche
PrettyOS
Entwickler: ehenkes et. al.
Akt. Version: 0.0.5.123 (August 2016)
Lizenz: 2-Klausel-BSD
OS-Eigenschaften
Plattform: i386
Kernelart: Monolith
Sprache: C, Assembler
API: Nativ
Binärformat: ELF, PE (Userprogramme)
IPC-Methode: -
Homepage
[1]

PrettyOS ist das Betriebssystem der Projektgruppe OS-Development bei http://www.c-plusplus.net/forum/. Es entstand als Idee im März 2009, führte zu einem vierteiligen Tutorial, das für Einsteiger in die Materie beginnend beim ersten Boot-Vorgang gedacht war, und wird seit Mitte Oktober 2009 von interessierten Entwicklern diskutiert, umgebaut, gepflegt und erweitert. Zielsetzung ist, verständlich zum Lernen und zum Experimentieren verwendbar zu sein. Das ist bisher weitgehend gelungen. Mit zunehmender Komplexität stellt sich die Frage der Didaktik immer wieder neu.

Ziel

PrettyOS soll Einsteiger in die Betriebssystementwicklung dabei unterstützen, den gesamten Prozess des Bootens, Startens eines C-Kernels, einer Shell sowie Applikationen (C oder C++) an einem noch überschaubaren praktischen Beispiel zu verstehen. Als Entwicklungs-Plattform ist Linux, MacOS und MS Windows einsetzbar.

Genereller Aufbau

PrettyOS besteht momentan aus den Bereichen Bootloader (Stage 1 und 2, Assembler), Kernel (C) und User-Space (C/C++).

Bootloader

Der Bootloader ist in Assembler (NASM) geschrieben und besteht aus zwei Stufen. BL1 (in Sektor 1) lädt BL2 (Datei boot2.bin). Dieser wiederum startet den Kernel (kernel.bin). Als Dateisystem für das Bootlaufwerk wird FAT12 vorausgesetzt. Der Bootloader verwendet Multiboot-Strukturen zur Datenübergabe an den Kernel. Als Alternative zum nativen Bootloader können daher mit Einschränkungen GRUB oder iPXE verwendet werden.

Kernel

Der monolithische Kernel ist in der Programmiersprache C mit wenigen Teilen Assembler (NASM und GCCs Inline-Assembler) gehalten. Er verfügt über grundlegende Fähigkeiten wie Interrupt-Handling, Paging, Kernel- und User-Heap, Multitasking, Multithreading, Syscalls, VM86 und enthält unter anderem Treiber für PCspeaker, Serielle Schnittstelle, Diskettenlaufwerke, xHCI (USB 3), EHCI (USB 2), OHCI und UHCI (USB 1.1 und USB 2.0), VESA BIOS Extensions und die Netzwerkkarten RTL8139, RTL8168/RTL8169 und AMD PCnet. Mittels CDI werden auch andere Treiber eingebunden, z.B. e1000. Die Netzwerkprotokolle ethernet, ip, arp, icmp, dhcp, udp und tcp werden unterstützt. Als Dateisysteme werden gegenwärtig FAT12, FAT16 und FAT32 auf Floppydisk und USB-Stick eingesetzt. Das System enthält ferner Treiber für USB-MSDs, USB-Diskettenlaufwerke (UFI), USB-Webcams und USB-HIDs (Maus und Tastatur).

Userprogramme

Der User-Space dient bisher vorwiegend als Demonstration für die API (syscalls). Bisher sind nur eine einfache Shell sowie ein paar simple Programme vorhanden, die u.a. zum Test neuer Features dienen. Programme für den Userspace können in diversen Sprachen geschrieben werden. Als Hilfe stehen die Dummy-makefiles, eine C-Userlib (Syscalls sowie einige wenige Funktionen der C-Standardlib) und eine C++-Userlib, die die C-Userlib als Untermenge hat und zudem ein paar C++-spezifische Funktionen bietet (new, delete) zur Verfügung.

Userprogramme können auf zwei verschiedenen Wegen eingebunden werden: Mittels incbin direkt in den Kernel, von wo es dann über die vom Linker generierte Adresse gestartet werden kann (derzeit für die VM86-Programme für VBE und APM genutzt), ggf. mit Einbindung in die Ramdisk (für die Shell genutzt), oder auf dem herkömmlichen Weg als Executable im ELF- oder PE-Format auf einem von PrettyOS unterstützten Speichermedium, wodurch das Programm für den Nutzer von der Shell aus aufrufbar wird.

Entwicklung

PrettyOS ist als freie Experimentierbasis für Ideen der OS-Projektgruppe bei c-plusplus.net gedacht und wird von einer aktiven Community gepflegt und erweitert. IRC Channel: #PrettyOS auf euirc.net und im Forum (siehe Links). Konstruktive Tester, Beobachter und Entwickler sind immer gerne gesehen.

Links