TAG | OSDev
A while ago, I wrote some demo code to demonstrate various things you need to do to write your own operating system.
In May 2010 I held a lecture and workshop about this code and the concepts at SigInt conference in Cologne, Germany.
I just thought that this code may be interesting to other people who did not attend this conference. (weiterlesen…)
Sometimes, even if you don’t want to install a pirated Windows version, you may want to dump and modify the BIOS of a computer.
Especially if you are developing some kind of an ACPI subsystem for your own small operating system kernel.
Doing this with real hardware is kinda risky and complex.
But what about virtual machines like VMware? They have a BIOS, but how can we get our hands on it? (weiterlesen…)
Mein momentanes Interessenfeld bezieht sich ja sehr stark auf alles, was mit System- und Hardwarenaher Programmierung zu tun hat.
Da ich auf der Zugfahrt zum 26c3 nicht besonders viel zu tun hatte und die AMD und Intel Dokumentationen auf meinem Rechner hatte, habe ich mal angefangen mich um die Virtualisierungsfunktionen, die diese beiden Hersteller da so in ihre Prozessoren verpflanzen, zu kümmern. (weiterlesen…)
Irgendwann, im Laufe eines Informatikstudiums, hört man auch mal sowas ähnliches wie “Architektur von Rechnersystemen und Betriebsystemen”. Und da sich die dort vorgestellten Verfahren ja alle so einfach anhören und man sowas schon immer mal machen wollte, fängt man als Geek dann plötzlich an ein Betriebssystem zusammenzuhacken: Das GeexOS.
Wer jetzt schon heiß auf Code ist, kann ihn hier bekommen: github
Die Architektur, die dieser Kernel haben soll, ist ein Mikrokernel. Bisher ist davon allerdings nicht viel implementiert, da ich mir seit ein paar Monaten versuche Gedanken über die Speicherverwaltung im Kernel zu machen und sowieso nicht immer Lust habe an diesem Projekt weiterzuarbeiten.
Aktuell Implementierte Features:
- Ein-/Ausgabe von Text über einen 80×25 Zeichen Textmodus auf dem Monitor
- Ein-/Ausgabe von Text über eine serielle Schnittstelle
- Bootstrapping eines x86 Prozessors und Umgebung (Protected Mode, Interrupts, PIC, PIT)
- Interrupthandling, welches bisher noch sehr Plattformabhängig ist
- Ansätze eines HALs
- Paging
- Timer
- Das Buildsystem, basierend auf GNU make
Im master-Branch auf GitHub findet man noch einen implementierten Heap, den ich mitlerweile aber wieder weggeworfen habe, da ich ihn durch einen SLAB-Allocator mit etwas besserem Virtuellem Speichermanagement im Hintergrund ersetzen möchte.
Eine weitere Designentscheidung, die ich im Züge des neuen Speichermanagements getroffen habe, ist das der Kernel auf einem 32 Bit System die vollen 32 Bit an virtuellem Speicher bekommen wird und nicht in den virtuellen Speicher eines jeden Prozesses eingeblendet wird. Dies geht zwar mit einem Performanceverlust einher, da ich bei jedem Systemaufruf oder Interrupt das Page Directory wechseln muss und somit der TLB (Translation Lookaside Buffer) geleert werden muss. Wie hoch dieser Verlust sein wird, weiß ich allerdings nicht. Mac OS X macht das auch so und das ist auch noch schnell.
Alle diese Änderungen befinden sich momentan im Branch 4gbKernel auf github.
Weitere geplante Features sind:
- Ein Scheduler mit Interprozesskommunikation über Shared Memory
- Dieser Shared Memory kann auch auf anderen Rechnern liegen und das System kann somit verteilt werden
- Einige Userspace System-Daemons, die Sachen wie das Prozessmanagement, Userspace Speicherverwaltung, Netzwerk, Dateisysteme etc. übernehmen
- Einige Userspace Libs, die Posix implementieren, um GNU-Software ausführen zu können
- Evtl. einen DOS-Kompatiblitätslayer
Bis diese Sachen wirklich alle implementiert sind wird allerdings noch einiges an Zeit vergehen.

Screenshot des Aktuellen 4gbKernel-Branches in einem Qemu.

Screenshot mit kleinem Scheduler, der Kontextwechsel zwischen 2 Threads ausführt.