Betriebssystementwicklung

Aus Wikibooks

Wechseln zu: Navigation, Suche

Dieses Buch steht im Regal EDV.

Hinweis: Dieses Buch ist gerade in einem ersten Aufbau bei Interesse schreibe dein Wissen gern ohne große Formatierungen hier hinein...

Inhaltsverzeichnis

[Bearbeiten] Vorwort

Dieses Buch ist als Fortsetzung zum Buch Betriebssystemtheorie zu verstehen. Es vermittelt spezielles Hintergrundwissen, welches du für die Entwicklung deines Betriebssystem benötigst.

[Bearbeiten] Voraussetzungen

Es ist sinnvoll, das Buch Betriebssystemtheorie bereits "studiert" zu haben. Um ein Betriebssystem programmieren zu können, sind des weiteren Kenntnisse einer Programmiersprache (Assembler oder eine höhere Programmiersprache) notwendig.
Bereits gelesene kleinere Tutorials oder auch nur Absätze zum Thema Betriebssystemprogrammierung werden dabei helfen, die Materie zu verstehen. Eine bewährte Methode ist "Learning by doing", also effektiv durch die Arbeit den Stoff zu erlernen.

[Bearbeiten] Der Bootvorgang

Den Vorgang, nachdem der Computer eingeschaltet wurde, nennt man Booten. Als erstes springt der Prozessor ins BIOS; dort werden anfangs BIOS-Routinen (der POST, Power On Self Test) ausgeführt, um zu garantieren, dass im System alles stimmt (Hardwaremäßig). Die nächste Aufgabe des BIOS ist es, von einer Diskette, Festplatte, USB oder andere bootbare Medien (z.B. auch Netzwerk) den sogenannten Bootsektor an die Adresse 7C00h zu laden und dort auszuführen.
Üblicherweise wird der Bootloader in Assembler geschrieben, da er nur 512 Bytes umfassen kann und Assembler sich dafür anbietet (klein, vollkommende Kontrolle, usw.). Der Bootloader ist dann ein Teil des Betriebssystems, und er hat die designtechnische Aufgabe, den Betriebssystem-Kernel zu laden.
Dies ist das Grundkonzept eines Bootloaders, ein weiteres Modul zu laden. In der Praxis kommen dazu aber noch andere wichtige Faktoren; etwa muss man das Dateisystem beachten, oder ob z.B. von erweiterten Partitionen gestartet wird.

[Bearbeiten] Entwicklung

Einige Teile eines Betriebssystems müssen in Assembler verfasst sein (u.A. der Bootloader und einige Teile der Gerätetreiber. Trotzdem lohnt es sich, den größten Teil des Codes in einer Hochsprache aufzusetzten. Prinzipiell eignet sich jede Programmiersprache, die zu einer Binärdatei compiliert werden kann (C/C++ wird am häufigsten verwendet). Ungeeigent sind interpretierte Sprachen (wie z.B. Java und C#), da zu deren Außführung ein Interpreter benötigt wird, der wiederum normalerweise auf ein Betriebssystem angewiesen ist. Doch genau das wollen wir ja schreiben. Es gibt allerdings Konzepte, einen solchen Interpreter in eine sehr tiefe Ebene des Systems einzubinden.

[Bearbeiten] Bootsektor

Der Bootsektor der Festplatte, der sogenannte MBR (Master Boot Record) durchsucht die Partitionstabelle, ob eine aktive Partition definiert ist. Wenn ja, wird aus dieser aktiven Partition der Bootsektor des jeweiligen Betriebssystems geladen, welcher dann den Betriebssystemkern (Kernel) aufruft.

[Bearbeiten] Kernel

Ein Kernel (kernel <engl.> = Betriebssystemkern) wird meist zumindest in großen Teilen heutzutage in einer höheren Programmiersprache wie C geschrieben. Es gibt jedoch auch Betriebssysteme, welche vollständig in Assembler geschrieben sind - bei diesen handelt es sich häufig um Echtzeitbetriebssysteme.

Der Kernel steuert die Hardware; entweder direkt (also eingebaute Fähigkeit) oder über Treiber (bzw. Kernelmodule). Der Kernel verwaltet Prozesse (laufende Programme) und deren Zugriff auf den Speicher. Die Programme rufen Kernelfunktionen (z.B. um Speicher anzufordern oder auf ein Gerät zuzugreifen) über Soft-Interrupts auf (gilt zumindest für x86).

Es gibt mehrere Arten von Kernel. In den gebräuchlichsten Betriebssystemen findet man u.a. monolithische Kernel (z.B. Linux, DOS, UNIX) und Mikrokernel (z.B. Windows NT Systeme wie 2000 oder XP).

[Bearbeiten] monolithische Kernel

In einem System mit monolithischen Kernel, sind alle Prozesse in zwei Ebenen eingeteilt: Benutzerebene und Systemebene. Beide haben unterschiediche Privilegien. In der Benutzerebene ist das Programm geladen und in der Systemebene der Kernel. In dem Kernel kann jede Prozedur jede andere aufrufen. Somit ist der monolithische Kernel relativ schnell. Das Programm in der Benutzerebene kann mit einem Systemaufruf die Systemebene aufrufen. Dann können Prozeduren in der Systemebene bestimmte Aufgaben erledigen.

[Bearbeiten] Mikrokernel

In einem System mit Mikrokernel gibt es eine Gruppe von Benutzerprozessen, die ein Benutzerprogramm enthalten, und Systemprozessen. Die Systemprozesse haben auch hier mehr Privilegien. Die einzelnen Prozesse kommunizieren über Botschaften. Die Systemprozesse können auch in mehrere Schichten eingeteilt werden. In diesem Fall steht der Benutzerprozess in der obersten Schicht und allen senden eine Anforderung immer an die nächste untere Schicht und eine Antwort an die nächste höhere Schicht bis der zuständige bzw. anfordernde Prozess erreicht ist.

Ein Beispiel: Ein Benutzerprozess (Schicht 3) will aus einer Datei lesen. Als erstes sendet er eine Botschaft an das Dateisystem (Schicht 2). Dieses kontaktiert den Plattentreiber (Schicht 1). Jetzt wird solange gewartet bis die Hardware (z.B. DMA-Baustein, Plattenkontroller) ein Signal sendet, dass der Auftrag abgeschlossen ist. Dieses Signal geht an die untersten Funktionen (Schicht 0), welche eine Botschaft an den Plattentreiber übermittelt. Jetzt kann auch der Plattentreiber dem Dateisystem antworten, das dem Benutzerprozess eine Statusmeldung und die Daten übergibt.

Somit ist das System sehr modular und abgestürzte Systemprozesse können leicht wieder geladen werden.

[Bearbeiten] Weiterführende Informationen

[Bearbeiten] Links

[Bearbeiten] Tutorials

[Bearbeiten] Open-Source-Betriebssysteme

[Bearbeiten] Microkernel

[Bearbeiten] L4

  • L4Hq - L4 Headquarters, Community-Seite für L4-Projekte
  • L4Ka - Implementierungen L4Ka::Pistachio und L4Ka::Hazelnut
  • Fiasco – Eine freie C++-Implementierung für x86- und ARM-Prozessoren
  • UNSW - Portierung auf die Architekturen wp:Alpha und wp:MIPS
  • L4Linux - Linux auf dem L4 Microkernel
  • DROPS - The Dresden Real-Time Operating System Project
  • VFiasco - Verified Fiasco Project
  • L3 - Vorgänger-System zu L4, beim TÜV Süd im Einsatz
Persönliche Werkzeuge