|
|
Betriebssysteme I/II, WS 2006/07
Einführung
(Auszug aus Kapitel 1 des Skripts)
von Hans-Georg Eßer
Nicht genug freier
Speicher. Bitte schließen
Sie eines oder mehrere
Programmfenster ...
|
Erzeugt mit Error
Message Generator
|
Bei der Arbeit am Computer machen sich viele Anwender erst beim
Auftreten rätselhafter Fehlerneldungen Gedanken darüber, wer oder was
diese verursachen könnte -- liegt es nicht an einem Programm, fällt
schnell der Verdacht auf die Schicht unterhalb der Anwendungen: auf
das Betriebssystem.
Mit welchen Techniken moderne Betriebssysteme (wie Windows, Linux,
Mac OS, BSD ...) versuchen, Problemen aus dem Weg zu gehen, ist
Gegenstand der Vorlesungen Betriebssysteme I und II an der FH
München.
Motivation: Aufgaben eines Betriebssystems
Das Betriebssystem ist das erste "Programm", das ein Computer beim
Booten lädt.
Nachdem der Rechner es in den Hauptspeicher geladen und ihm die Kontrolle
übergeben hat, beginnt es mit der Initialisierung wichtiger Kernkomponenten
des Computers, wie z. B. des Hauptspeichers.
Die Hauptaufgabe ist dabei, eine Abstraktionsschicht zu schaffen, die es
Anwendungsprogrammen erlaubt, die Computerressourcen zu nutzen, ohne selbst
genau zu wissen, wie der Computer beschaffen ist; welche spezifischen
Einzelkomponenten vorhanden sind.
Beispiel: Grafikkarte |
Unter MS-DOS gab es in den 80er und frühen 90er Jahren verschiedene Programme, die eine grafische Ausgabe besaßen, beispielsweise das Textverarbeitungsprogramm Microsoft Word (nicht Word für Windows) und die grafische Arbeitsoberfläche GeoWorks. Beide Programme brachten Grafikkartentreiber für zahlreiche damals üblichen Grafikkarten mit; neue Grafikkarten wurden von beiden Programmen erst in neueren Programmversionen unterstützt -- weil MS-DOS keine Abstraktionsschicht für die Benutzung grafischer Kartenbetriebsarten enthielt, musste jedes grafische Programm seine eigenen Kartentreiber enthalten.
|
Die Abstraktion verschiedener Hardwarekomponenten durch das Betriebssystem
erleichtert nicht nur das Programmieren von Anwendungsprogrammen, es
verringert auch das Risiko eines Systemabsturzes, der durch fehlerhafte
Ansteuerung der Hardware verursacht wird. Erlaubt man Anwendungsprogrammen
den direkten Zugriff auf Hardware (im Beispiel
auf die Grafikkarte), stellt jedes neue Programm ein potenzielles Risiko
dar, weil es möglicherweise fehlerhaft oder gar zerstörerisch auf die
Hardware zugreift.
Moderne Betriebssysteme verhindern direkte Zugriffe auf die Hardware und
bieten stattdessen Betriebssystemschnittstellen an, über die die Anwendungen
auf die Hardware zugreifen. Ist in dieser Situation das Anwendungsprogramm
fehlerhaft programmiert und ruft diese Schnittstellen mit unsinnigen
Parametern auf, kann das Betriebssystem dies erkennen und den Zugriff
ablehnen.
Beispiel: Drucker |
Ist am Computer ein Drucker angeschlossen und wollen zwei Anwendungsprogramme gleichzeitig eine Seite Papier ausdrucken, käme es zu einem chaotischen Ergebnis, wenn beide Programme zur selben Zeit mit dem Ausdruck beginnen würden: Mit den abwechselnd von Programm A und B beim Drucker eintreffenden Datenfragmenten könnte das Gerät nichts anfangen.
Kontrolliert das Betriebssystem den Drucker, übergeben die Anwendungen ihre Druckaufträge dem Betriebssystem, und dieses sorgt dann dafür, dass die Druckdaten in einer vernünftigen Reihenfolge an den Drucker weiter geleitet werden. Dazu kommt der bereits bekannte Nutzen, dass nur an einer Stelle Wissen über die Ansteuerung der verschiedenen Druckermodelle gesammelt werden muss: im Betriebssystem. Die Anwendungen schicken ihre Druckdaten in einem standardisierten Format, und das Betriebssystem setzt sie mit einem Druckertreiber in die Sprache um, die das Gerät versteht, z. B. PostScript.
|
Das Beispiel zeigt einen zweiten Vorteil der
Hardware-Abstraktion: Sie schützt Geräte vor gleichzeitigem Zugriff durch
mehrere Anwendungen -- denn manche Dinge brauchen exklusiven Zugriff, wie
z. B. der Ausdruck zweier Dokumente aus zwei Programmen.
Voraussetzungen
Für die Teilnahme an der Vorlesung werden
Kenntnisse in den folgenden Bereichen vorausgesetzt:
- C -- Grundlagen der Programmierung in C, so dass Sie
kurze C-Programme lesen können
- Rechnerarchitekturen -- grober Aufbau eines Computers
(Prozessor, Hauptspeicher, Peripherie etc.), Zusammenwirken dieser
Komponenten (Bussysteme, Interrupts etc.)
Als Teil der Vorlesung wird ein kurzes Programmierpraktikum angeboten; für
die Teilnahme daran sind einige zusätzliche Kenntnisse nötig:
- Unix-Shell -- Benutzung der Standard-Shell bash
unter Linux (oder einem anderen Unix-System)
- Python -- Grundlagen der Programmierung in Python, so dass Sie
Python-Programme lesen können. Für das Praktikum sind auch "aktive"
Programmierkenntnisse in Python notwendig.
Aufbau und Inhalt von Vorlesung und Skript
Wir behandeln alle Themen nach folgendem Schema:
- Am Anfang stehen praktische Beispiele unter dem Betriebssystem
Linux (http://www.linux.org) --
z. B. finden Sie im nächsten
Kapitel über Prozesse zunächst eine Beschreibung, wie Sie Prozesse unter
Linux starten und manipulieren (anhalten, fortsetzen, abschießen etc.).
- Im zweiten Schritt lernen Sie die theoretischen Grundlagen kennen.
Da es für viele Probleme unterschiedliche Lösungsansätze gibt, erfahren
Sie hier einiges über die Gestaltungsmöglichkeiten, die ein
Betriebssystemprogrammierer hat.
- Danach wird es wieder praktisch: Anhand von Linux-Quellcode
zeigen wir Implementierungen der vorgestellten Theorie. So schließt sich
der Kreis, und Sie sehen, warum die Befehle und Vorgehensweisen aus dem
ersten Teil funktionieren.
- Jedes Kapitel endet mit einem kurzen Übungsblock: Anhand der
Selbsttestfragen (deren Antworten Sie im Anhang finden) können Sie
Ihr Wissen überprüfen.
Die Themen präsentieren wir in dieser Reihenfolge:
- Kapitel 2 führt in das Konzept der Prozesse und Threads
ein und beschreibt neben der Theorie auch Implementierungsdetails, etwa den
Aufbau von Prozesstabellen in echten Betriebssystemen.
- In Kapitel 3 geht es um Interrupts, also Unterbrechungen
des gerade laufenden Prozesses.
- Scheduler behandelt Kapitel 4: Sie sorgen dafür, dass
die Prozessorzeit gerecht unter den Prozessen verteilt wird.
- Kapitel 5 beschäftigt sich mit dem Thema
Synchronisation.
- Interprozess-Kommunikation (englisch: inter-process communication,
kurz IPC) ist Gegenstand des Kapitels 6.
- Generell zu vermeiden sind Deadlocks: Wie es zu Deadlocks kommt und mit welchen
Vorkehrungen man ihnen aus dem Weg geht, verrät Kapitel 7.
- Gegenstand der Vorlesung Betriebssysteme II sind die Themen
Speicherverwaltung (Kapitel 8) und Dateisysteme (Kapitel 9).
|