![](media/image1.jpeg){width="5.733333333333333in" height="0.78125in"}

Institut Informatik und Wirtschaftsinformatik

Seminar

Grundlagen wissenschaftlichen Arbeitens

Betriebssysteme

Leitung: Dr. Wolfgang Hoschek

Christoph Friedl

Wien, 05.April, 2003

**Inhaltsverzeichnis**

[1 Einleitung 3](#einleitung)

[2 Prozesse 4](#prozesse)

[2.1 Prozessverwaltung 4](#prozessverwaltung)

[2.2 Prozesssynchronisation 5](#prozesssynchronisation)

[2.3 Prozesskomunikation 5](#prozesskomunikation)

[3 Ablaufplanung (Scheduling) 7](#ablaufplanung-scheduling)

[4 Speicherverwaltung 10](#speicherverwaltung)

[4.1 Virtueller Speicher 11](#virtueller-speicher)

[5 Ein-/Ausgabe 14](#ein-ausgabe)

[6 Dateisystem 16](#dateisystem)

[6.1 Logische Struktur von Dateisystemen
16](#logische-struktur-von-dateisystemen)

[7 Schutzmechanismen 18](#schutzmechanismen)

[8 Echtzeitbetriebssysteme 21](#echtzeitbetriebssysteme)

[9 Betriebssysteme für verteilte Rechensysteme
22](#betriebssysteme-für-verteilte-rechensysteme)

[9.1 Verteilte Dateisysteme 22](#verteilte-dateisysteme)

[9.2 Verteilte Benutzerverwaltung 23](#verteilte-benutzerverwaltung)

[9.3 Verteilter gemeinsamer Speicher
23](#verteilter-gemeinsamer-speicher)

[10 Betriebssysteme für parallele Rechensysteme
24](#betriebssysteme-für-parallele-rechensysteme)

[11 Architektur von Betriebssystemen
25](#architektur-von-betriebssystemen)

[12 Zusammenfassung 26](#zusammenfassung)

[13 Literaturverzeichnis 27](#__RefHeading___Toc39919466)

# Einleitung

Betriebssysteme erfüllen mindestens eine, meistens aber mehrere der
folgenden Aufgaben:

-   Abstraktion: Die Rechnerhardware wird vom Betriebssystem so
    abgekapselt, dass sie für den Benutzer bzw. dem
    Anwendungsprogrammierer nicht sichtbar ist. Ein Beispiel hierfür
    wären die Ein-/Ausgabe Einheiten.

-   Schnittstelle für Anwendungsprogramme: Mit dieser Schnittstelle,
    bekannt als API (Application Programming Interface), kann der
    Programmierer die Dienste des Betriebyssystems nutzen.

-   Verwaltung von Betriebsmitteln: Von Betriebssystemen mit
    Mehrprozessbetrieb, wird diese Aufgabe in den Mittelpunkt gestellt.
    Prozessorkapazität, Hauptspeicher und das Zugriffsrecht auf die
    Ein-/Ausgabe Einheiten sind die wichtigsten Betriebsmittel. Die
    Zuteilung der Prozessorkapazität zu den Prozessen wird als
    Ablaufplanung (Scheduling) bezeichnet. Dies wird in Kapitel 3
    genauer behandelt.

-   Schutz der Benutzer: Betriebssysteme mit Mehrbenutzerbetrieb müssen
    auch sicherstellen, dass die Systemintegrität nicht verletzt werden
    kann. Auch der Schutz von Benutzerdaten vor fremden Lesezugriffen
    ist zu gewerkstelligen.

-   Bedienschnittstelle: Diese Schnittstelle kann in Form einer
    grafischen Benutzeroberfläche oder auch als Kommando-Interpretierer
    realisiert sein. Näheres dazu in Kapitel 8.

# Prozesse

Ein Prozess ist der Ablauf eines sequenziellen Programms in einer
Rechenanlage. Der Unterschied zum Programm liegt in der zeitlichen
Ebene. Das Programm stellt eine statische Handlungsvorschrift dar, wobei
der Prozess von einem zeitlich veränderlichen Zustand gekennzeichnet
ist. Alle modernen Betriebssysteme sind in der Lage mehrere Prozesse zu
einem Zeitpunkt zu verwalten. Bei diesem sogenannten Mehrprozessbetrieb
(Multitasking) spielt es keine Rolle, ob nur eine oder mehrere
Verarbeitungseinheiten in der Rechenanlage vorhanden sind. Der Ursprung
des Multitasking liegt in der optimalen Maschinenauslastung.

## Prozessverwaltung

Auf einem Monoprozessor kann zu einem Zeitpunkt nur ein Prozess
bearbeitet werden. Dieser Zustand wird als *rechnend* bezeichnet,
während alle anderen Prozesse *blockiert* werden. Blockierte Prozesse
können *rechenbereit* sein, müssen aber nicht, wobei ein Prozess als
nicht rechenbereit bezeichnet wird, wenn dieser zur weiteren Ausführung
auf ein Ereignis wartet.

Insgesamt werden 6 Zustandsübergänge definiert:

1.  *Start:* Der Prozess wird im Betriebssystem aktiv. Er konkurriert
    mit dem Prozessor mit dem Zustand *bereit.*

2.  *Zuteilung:* Der Prozessor wird dem Prozess zugeteilt und bearbeitet

3.  *Verdrängung:* Ein anderer Prozess muss bearbeitet werden und das
    Betriebssystem entzieht dem vorherigen Prozess den Prozessor.
    Zuteilungsstrategien, welche diese Maßnahme umsetzen, heißen
    *verdrängend* oder *präemptiv.*

4.  *Wartebedingungen:* Ein Prozess wartet auf ein Ereignis und gibt
    somit den Prozessor frei. Eine Fortsetzung der Bearbeitung ist nicht
    möglich bevor das Ereignis eingetreten ist.

5.  *Wartebedingung erfüllt:* Das Ereignis ist eingetreten und der
    Prozess kann weiterlaufen, wobei er aber zunächst als *rechenbereit*
    eingestuft wird.

6.  *Beendigung:* Der Prozess hat die Ausführung des Programms beendet
    und meldet sich vom Betriebssystem ab.

## Prozesssynchronisation

Bei nebenläufigen Prozessen, welche miteinander kooperieren, gibt es
eine bestimmte Bearbeitungsreihenfolge. Ein Prozess gibt ein Ergebnis
aus, welches von anderen Prozessen benötigt wird, wobei auch zu beachten
ist, dass der Zugriff auf eine gemeinsame Datenstruktur koordiniert
werden muss. Falls nebenläufige Prozesse unkoordiniert auf die gleiche
Variable zugreifen, kann dies zu Fehlergebnissen kommen. Hier sind vor
allem Mechanismen zum *gegenseitigen Ausschluss (mutual exclusion)*
nötig.

## Prozesskomunikation

Wenn Prozesse in getrennten Adressräumen kooperieren sollten, ist ein
bestimmter Kommunikationsmechanismus notwendig:

-   Kummunikation über gemeinsame Dateien: Das Dateisystem muss mehreren
    Prozessen den Zugriff auf eine Datei erlauben.

-   Kommunikation über gemeinsame Speicherbereiche: Das Betriebssystem
    muss einen Mechanismus anbieten, der es erlaubt gemeinsame
    Speicherbereiche anzulegen. Die beteiligten Programme können
    gemeinsame Variablen, Pufferbereiche usw. anlegen. Hier wird ein
    Synchronisationsmechanismus benötigt.

-   Kommunikation über Pipes: Dies ist ein Kommunikationskanal zwischen
    zwei Prozessen. Ein solcher Kanal wird von den Prozessen wie eine
    Datei behandelt, was den Mechanismus sehr flexibel macht. Solche
    Pipes wurden von Unix eingeführt.

-   Kommunikation über Nachrichten: Hier wird der Datenaustausch mit der
    Syncronisation kombiniert.

-   Kommunikation über Prozedur-Fernaufrufe: Ein Prozeduraufruf über die
    Adressgrenzen hinweg, kann auf Basis von Nachrichten realisiert
    werden, wobei Einschränkungen in Kauf zu nehmen sind.

# Ablaufplanung (Scheduling)

Bei der Vergabe von Betriebsmitteln an Prozesse kann man verschiedene
Ziele der Optimiereung verfolgen:

-   Auslastung der Betriebsmittel: Die Zentraleinheit soll optimal
    ausgenutzt werden. Leerlauf-Zeiten wie sie durch Warten auf eine
    Ein-/Ausgabeoperation entstehen, sollen minimiert werden.

-   Antwortzeiten: Heutzutage soll die Arbeitszeit des Anwenders
    minimiert werden. Hierfür bietet sich Multitasking an. Dies
    ermöglicht dem Benutzer das Arbeiten, während im Hintergrund ein
    weiterer Prozess/Auftrag läuft.

-   Durchsatz: Die Anzahl der bearbeiteten Aufträge pro Zeiteinheit
    stehen hier im Vordergrund. Dieses Kriterium geht in die gleiche
    Richtung wie die Auslastung, jedoch ist das Augenmerk auf das
    Ergebnis gerichtet.

-   Termine: Falls Termine für die Bereitstellung bestimmter Ergebnisse
    vorhanden sind, sollen diese möglichst berücksichtigt werden.

Bekannte Zuteilungsstrategien für Prozesse sind:

**Eingangsreihenfolge (FCFS: first-come, first-served).** Die Prozesse
werden nach der Reihenfolge ihres Eingangs verarbeitet. Das System wird
hier gut ausgelastet, wobei aber kurz laufende Prozesse oft von längeren
behindert werden.

**Prioritätsbasierendes Verfahren.** Die Aufträge werden mit Prioritäten
versehen, wobei es verschiedene Verteilungsstrategien gibt. Eine
spezielle Variante wird „*shortest job first"* genannt. Kurz laufende
Prozesse werden längeren Vorgezogen, wobei die Laufzeit im Vorhinein
bekannt ist, oder vom System geschätzt wird. Prozesse mit gleicher
Priorität werden wiederum nach dem FCFS-Prinzip behandelt.

In Mehrbenutzersystemen muss ein gemischtes Verfahren angewandt werden.
Hier kann mit dynamischen Prioritäten gearbeitet werden. Je länger ein
Prozess aus seine Bearbeitung wartet, desto höher wird seine Priorität
eingestuft. Eine Weitere Variante ist es, für jede Prioritätsstufe eine
eigene Warteschlange zu bilden.

**Klassenbasierte Ablaufplanung (scheduling classes).** Die
Ablaufplanung mit dynamischen Prioritäten eignet sich für eine Trennung
von Vergabestrategie und Vergabemechanismus. Der Mechanismus wählt bei
jedem Aufruf des Schedulers den höchstpriorisierten rechenbereiten
Prozess aus.

**Terminabhängige Ablaufplanung (deadline scheduling).** In
Echtzeitsystemen, ist der späteste Fertigstellungstermin für einen
Prozess zu berücksichtigen, was zu Verfahren wie EDF (earliest deadline
first) führt.

**Ablaufplanung für mehrere abhängige Betriebsmittel.** Bei
Mehrbenutzersystemen ist das System für die Vergabe mehrerer
Betriebsmittel zuständig. Ein rechnender Prozess benötigt außer der
Zentraleinheit auch Arbeitsspeicher. Ein einfacher Lösungsansatz ist,
bei der Ablaufplanung nur die Vergabe der Zentraleinheit zu
berücksichtigen. Die Vergabe des Speichers erfolgt unabhängig davon.

**Besonderheiten von Multiprozessoren.** Auch wenn mehrere gekoppelte
Prozessoren vorhanden sind, können diese mit einer gemeinsamen
Ablaufplanungsstrategie behandelt werden. Rechenbereite Prozesse werden
in einer gemeinsamen Warteschlange aufgereiht und der Reihe nach dem
nächsten verfügbaren Prozessor übergeben werden. Dies setzt jedoch
voraus, dass jeder Prozessor jeden Auftrag gleichwertig durchführen
kann.

**Ablaufplanung für kooperierende Prozesse.** Alle vorherigen
beschriebenen Methoden setzen unabhängige Prozesse voraus. Diese Annahme
ist jedoch vereinfacht und trifft nicht immer zu. Sind die Prozesse
voneinander Abhängig, können folgende Besonderheiten auftreten:

-   Prozesse erzwingen durch eingebaute Synchronisationsmechanismen
    einen bestimmten Ablauf. Wenn dies dem Scheduler nicht bekannt ist,
    kann es zu ungünstigen Entscheidungen führen, welche den Verlauf
    unnötig verlangsamen.

-   Prozesse kooperieren mit einem Multiprozessor so, dass bestimmte
    Prozesse immer wieder Ergebnisse verwenden, welche von anderen
    Prozessen bereitgestellt werden. Falls diese Prozesse unabhängig
    voneinander mit anderen Prozessen verwaltet werden, kann das zu
    nicht gewollten Komplikationen führen. Abhilfe kann das die
    sogenannte *Gruppen-Ablaufplanung (gang scheduling)* schaffen.
    Kooperierende Prozesse werden in Gruppen verwaltet und gleichzeitig
    auf den Prozessoren eines Multiprozessors verarbeitet.

# Speicherverwaltung

Bei Betriebssystemen ohne Mehrprozessbetrieb ist die Vergabe von
Speicher einfach Handzuhaben. Der ganze freie Speicher steht dem aktiven
Prozess zur Verfügung. Doch auch hier können Probleme auftreten:

-   Ist ein eingeschränkter Adressbereich vorhanden, wie es speziell bei
    reinen 16-Bit-Systemen der Fall ist, reicht der vorhandene Bereich
    für komplexere Programme nicht aus. Bestimmte Teile des
    Adressbereichs müssen mehrfach belegt werden. Dies hat die Folge,
    dass die Bereiche bei Bedarf mit Hilfe des Betriebssystems
    umgeschaltet werden müssen, was wiederum Leistungseinbußen erzeugt.

-   Bei MS-DOS muss eine bestimmte Gestaltung des Adressbereichs
    eingehalten werden. Diese Gestaltung orientiert sich an Systemen mit
    geringem Speicher, so dass ebenfalls Probleme mit großen Programmen
    entsteht.

Ein schwieriges Problem ist aber die Speicherverwaltung in Systemen mit
Mehrprozessbetrieb, wo folgende Probleme auftreten können:

-   Dynamische Freispeicherverwaltung: Prozesse sind im Allgemeinen
    unterschiedlich groß, was die Aufteilung des Speichers zu einem
    Komplexen Optimierungsproblem macht. Oft ist es erforderlich ein
    Programm aus dem Arbeitsspeicher auszulagern, um anderen Prozessen
    Platz zu machen. Dieses Verfahren wird *swapping* genannt.

-   Adressierung: Bei dynamischer Adress- und Speicherverwaltung
    verändert sich der Adressbereich der Prozesse ständig, was besondere
    Maßnahmen erfordert:

> Heutzutage verwendet man eine *Adressübersetzungseinheit (MMU, memory
> management unit)*. Diese Einheit übersetzt dem Programm die sichtbaren
> *virtuellen Adressen* in *reale Adressen*. Genaueres wird im Kapitel
> *virtueller Speicher* behandelt.
>
> Es gibt auch den Ansatz, das Programm bei jedem Ladevorgang zu
> modifizieren, sodass es in einem begrenzten Speicherbereich ablaufen
> kann. Das Ladeprogramm muss hierzu alle absoluten Adressreferenzen
> erkennen und dementsprechend anpassen. Dieser Vorgang wird als
> *Relokation* bezeichnet.
>
> Auf der Ebene des Compilers ist es möglich, den Maschinencode so zu
> erzeugen, dass Adressreferenzen relativ zum Stand des Befehlszählers
> angegeben werden. Somit gibt es in diesem Programm keine absoluten
> Adressen. Für dieses Verfahren wird die Abkürzung *PIC (position
> independent code)* verwendet.

-   Schutz: Zum Schutz des Systems und der Prozesse untereinander darf
    jeder Prozess nur auf den ihm zugewiesenen Speicherbereich
    zugreifen. Hierfür wird Hardware-Unterstützung benötigt, um eine
    Prüfung bei jedem Zugriff durchführen zu können.

## Virtueller Speicher

Die vorhin beschriebenen Probleme können elegant mit der Einführung von
virtuellem Speicher beseitigt werden:

-   Der reale Speicher wird in gleich große Seiten unterteilt, welche
    üblicherweise eine Größe von 1Kbyte bis zu 32Kbyte besitzen. Der
    Adressraum, der virtuelle Speicherbereich des Prozesses wird
    ebenfalls in solche Seiten unterteilt. Die Freispeicherverwaltung
    erfolgt nunmehr auf Basis dieser Seiten. Jede Seite wird dabei aber
    unabhängig betrachtet.

-   Die Adressierung wird mittels der MMU ausgeführt. Virtuelle Adressen
    werden in reale Adressen umgewandelt. Diese Umsetzung erfolgt über
    ein bestimmtes Tabellenverfahren, welches später genauer erläutert
    wird.

-   Auch die Schutzmechanismen lassen sich mit diesem Verfahren leicht
    realisieren. Eine Adressübersetzungstabelle gilt nur für einen
    bestimmten Prozess. Allein das Betriebssystem entscheidet über die
    Zugriffsrechte von Prozessen auf reale Speicheseiten.

Die Zuteilung der realen Speicherseiten erfolgt auf Anforderung durch
einen Zugriff auf eine Virtuelle Adresse. Dieses Verfahren wird als
*Demand Paging* bezeichnet.

Bei einem solchen Zugriff wird die Speicherübersetzungseinheit
feststellen, dass für die gegebene virtuelle Adresse keine
Übersetzungsvorschrift existiert. Der Zugriff wird aus diesem Grund
nicht gestattet. Eine Ausnahmebehandlung muss im Betriebssystem
angestoßen werden. In dieser Ausnahmebehandlung wird eine reale
Speicherseite reserviert und mit der virtuellen Seite verknüpft.
Wiederholt sich dieser Zugriff, ist die Adressübersetzung erfolgreich
und der Prozess kann ausgeführt werden. Dieser Vorgang ist für die
betroffene Anwendung unsichtbar. Sind nicht genügend freie
Speicherseiten vorhanden, können welche freigemacht werden, indem ihr
Inhalt auf den Hintergrundspeicher ausgelagert werden. Werden diese
Daten wieder benötigt, werden sie wieder geladen und mit dem
Adressbereich der zugreifenden Operation verknüpft. Vorteile dieses
Verfahren sind:

-   Die Freispeicherverwaltung wird vereinfacht.

-   Nur die gerade benötigten Teile eines Programms müssen tatsächlich
    geladen sein und so belegen selten durchlaufene Prozesse keinen
    wertvollen Speicherplatz.

-   Der Speicherbedarf eines Programms kann größer sein als der wirklich
    vorhandene reale Speicher, da der virtuelle Speicher völlig
    unabhängig vom realen Speicher ist.

-   Zugriffe auf ungültige virtuelle Adressen können vom Betriebssystem
    als Fehler erkannt und behandelt werden. Dadurch ist auch ein
    gewisser Schutz der Adressräume gegeben.

-   Ein- und Auslagerungsvorgänge werden nur bedarfsweiße durchgeführt,
    was wiederum Bearbeitungszeit spart.

# Ein-/Ausgabe

Die Ein- bzw. Ausgabe spielt eine zentrale Rolle bei Betriebssystemen.
Für den Einbau dieser Funktionalität sprechen folgende Gründe:

-   Komplexität: Um dem Anwendungsprogrammierer nicht die Ansteuerung
    der E/A-Geräte zu überlassen wird dies Systemintern über ein
    zentrales E/A-System wie etwa dem BIOS gemacht.

-   Pufferung: E/A-Geräte und Programme verarbeiten E/A-Daten blockweise
    oder zeichenweise. So erwartet die Festplatte diese Daten in fester
    vorgegebener Größe, wobei das Programm Blöcke variabler Größe
    verwendet. Zur Anpassung dieser Ungleichheit, stellt das
    Betriebssystem eine Pufferungsfunktion zur Verfügung. So wird
    sichergestellt, dass benötigte Daten wirklich im Speicher
    bereitstehen und nicht etwa ausgelagert sind.

-   Schutz der Koordinierung: Verwenden mehrere Prozesse gemeinsam ein
    E/A-Gerät, muss dieser Zugriff vom Betriebssystem gesteuert werden.
    In Systemen mit mehreren Adressräumen (realer Speicher und
    virtueller Speicher) ist der Zugriff auf E/A-Geräte nur dem
    Betriebssystem erlaubt.

Einige E/A-Funktionen sind Geräteabhängig und deshalb nicht im Kern des
Betriebssystems integriert. Aus diesem Grund werden gerätespezifische
Treiberprogramme entwickelt. Die Schnittstelle zwischen dem
geräteunabhängigen E/A-System und dem Treiber stellt einen wichtigen
Punkt dar. Sie muss bidirektional arbeiten können, was bedeutet, dass
das Betriebssystem und auch das E/A-Gerät Funktionen auslösen kann.

Typische grundlegende Operationen eines Treibers sind:

-   Initialisierung des Geräts

-   Starten einer E/A-Operation

-   Abbrechen einer laufenden E/A-Operation

-   Fehlerbehandlung

# Dateisystem

Eine Datei ist eine Sammlung von Daten, welche auf einem
Permanentspeicher gehalten wird. Das Dateisystem stellt einen
Abstraktionsmechanismus dar, um diese Daten dem Anwender zugänglich zu
machen, ohne dass sich dieser genau mit den Details der Datenablage
befassen muss. Gleichzeitig muss es auch einen Schutzmechanismus bieten,
der sicherstellt, dass Daten nur von Benutzern gelesen/verändert werden,
welche auch die entsprechende Berechtigung dazu besitzen.

Die Daten einer Datei können in unterschiedlicher Form gespeichert sein.
Am einfachsten ist die weit verbreitete Form der linearen Folge von
Daten, was die Realisierung von komplexen Formaten erlaubt.

Außerdem ist es üblich, dass das Dateisystem Annahmen über die Semantik
der Enthaltenen Daten macht. Im Falle von Textdateien wird oft ein
bestimmter Zeichensatz vorrausgesetzt. Bei unterschiedlichen
Betriebssystemen kann dies zu Inkompatibilitäten führen. Auch wenn sie
die gleichen Zeichensätze verwenden, kann die benutzung von
Steuerzeichen unterschiedlich sein (End of File, Zeilenende, Tabulator,
\...).

Auf verschiedenen Systemen kann sich auch die *physische Struktur* des
Dateisystems unterscheiden. Dies ist die Art, wie das System auf die
gespeicherten Daten zugreift. Für den Anwender ist die *logische
Struktur* von Bedeutung. Sie stellt sich dem Benutzer dar und bezieht
sich auf die Anordnung von Dateien in Verzeichnissen und die zu einer
Datei gehaltenen Zusatzinformationen, wie z.B. Lese- und Schreibrechte.

## Logische Struktur von Dateisystemen

Die Dateien des Dateisystems werden in einem Inhaltsverzeichnis
vermerkt. Als Standart hat sich ein hierarchisches Schema Abgebildet.
Diese beruht darauf, dass ein Verzeichnis als Datei mit besonderer
Semantik gespeichert wird. Die Verzeichnisse werden in einem
*Verzeichnisbaum* gehalten. Die Datei wird nicht alleine durch ihren
Namen spezifiziert sondern auch durch den Pfad ihrer übergeordneten
Verzeichnisse. Bei der Bezeichnung von Dateien in Kommandos wird aber
eine relative Dateireferenz vorgezogen. Dies ist eine Angabe, welche
sich auf ein bestimmtes Verzeichnis bezieht (*current directory*).
Relative Angaben sind somit um ein Vielfaches kürzer als absolute. Aus
dem Namen des Bezugverzeichnisses und dem Dateinamen kann der
vollständige Pfadname der Datei erzeugt werden.

Oftmals werden die Dateinamen, welche in einem Verzeichnis benutzt
werden einem bestimmten Format untergeordnet, wie eine begrenzte Länge
oder einem reduzierten Zeichensatz.

# Schutzmechanismen

Um die Sicherheit der gespeicherten Daten vor unbefugtem Zugriff zu
schützen, sind Schutzmechanismen notwendig. Dieser Schutz ist unbedingt
erforderlich um beabsichtigte Bedrohungen wie Spionage oder
Computervieren, aber auch unbeabsichtigte Bedrohungen wie falsche
Bedienung oder auch fehlerhafte Programme zu beseitigen. Der
Schutzmechanismus orientiert sich am Einsatzgebiet des Betriebssystems.

Entwurfsprinzipien für Sicherheitsmaßnahmen sind:

-   Das Sicherheitskonzept muss übersichtlich sein, um nachvollziehbar
    zu machen und eventuell zu verbessern.

-   Das Sicherheitskonzept darf nicht umgangen werden können, indem
    Maßnahmen außerhalb dieses Konzeptes angewandt werden. Das heißt,
    dass Konzept geschlossen sein muss.

-   Die Arbeitsweise des Konzeptes darf nicht geheimgehalten werden.

-   Die Rechte eines Programms oder Nutzers zum Zugriff auf
    Betriebsmittel sollen so gering wie möglich gehalten werden.

-   Die Benutzbarkeit des Systems darf durch die Schutzmechanismen nicht
    unzumutbar eingeschränkt werden.

Sicherheitskonzepte in Betriebssystemen unterscheiden Subjekte
(Benutzer, Prozesse, \...), Objekte (Speicherbereiche, Dateien,\...) und
Operationen (Lesen, Schreiben,\...).

Die Subjekte dürfen bestimmte Operationen auf einer begrenzten Menge von
Objekten ausführen. Diese Menge der Operationen in Bezug auf Objekte
heißt Schutzbereich. In einfachen Mehrbenutzersystemen wie Unix besitzt
jeder Prozess genau zwei solcher Bereiche. Dies sind der Benutzerstatus
mit eingeschränkten Rechten und der Systemstatus mit uneingeschränkten
Rechten.

Subjekte und Operationen müssen natürlich eindeutig Identifiziert
werden. Bei Benutzern geschieht dies mit einem einzigartigen
Benutzernamen und einem Passwort. Operationen auf Objekten dürfen nur
unter Kontrolle des Betriebssystems erfolgen, da sonst die
Geschlossenheit des Systems verletzt wird. Des weiteren dürfen keine
versteckten Kanäle existieren, auf denen unbemerkt Daten gesendet werden
kann.

Wenn diese Bedingungen erfüllt sind, benötigt man ein Schema um die
Berechtigungen zu verwalten:

-   ACLs (*access control lists*): Das sind Listen, in denen bestimmt
    wird, für welches Objekt, welche Subjekte welche Operationen
    ausführen dürfen.

-   *Capabilities*: Hier wird die vorige Methode umgekehrt, indem
    festgehalten wird, welches Subjekt, auf welches Objekt zugreifen
    darf. Auch hier werden diese Informationen in einer Liste
    festgehalten. Es muss aber noch ausgeschlossen werden, dass die
    Liste selbst nicht vom Subjekt veränderbar ist. Zu diesem Zweck kann
    die Liste vom System geschützt, oder auch verschlüsselt werden, was
    sich bei verteilten Betriebssystemen gut eignet.

Lückenhafte Sicherheitssysteme können durch folgende Verfahren
angegriffen werden:

-   Auslesen von Informationen aus Speicherbereichen, die freigegeben,
    aber nicht gelöscht wurden.

-   Eine Unterbrechung der Identifizierungsprozedur kann dazu führen,
    dass die Anmeldung fälschlicherweise als erfolgreich gewertet wird.

-   Einige Programme weisen *Schlupflöcher* auf, die für spezielle
    Zwecke eingebaut wurden. Werden diese bekannt, kann man einfach
    durch solche *Backdoors* auf das system zugreifen.

-   *Trojanische Pferde* sind Programme, die das Verhalten eines
    bekannten vertrauenswürdigen Programm imitieren. Somit können viele
    Informationen über den Computer, wie etwa Passwörter ausspioniert
    werden.

-   *Würmer* sind Programme, die sich von Rechner zu Rechner
    fortpflanzen. Ein solcher Wurm liegt vor, wenn er sich unerwünscht
    verbreitet, was unter Ausnutzung von Sicherheitslücken passiert.

-   *Viren* verändern nach Eindringen ins System andere Programme um
    sich fortzupflanzen. Das Eindringen selbst geschieht durch das
    Aufrufen eines infizierten Programms.

# Echtzeitbetriebssysteme

Echtzeitbetriebssysteme werden zum Einsatz in technischen Systemen
vorgesehen. Folgende Anforderungen werden an das System gestellt:

-   Es muss Anwendungen ermöglichen, die mit einem technischen System
    kommunizieren. Die Reaktionszeit des Computers muss bekannt und nach
    oben begrenzt sein. Aktionen dürfen vom Betriebssystem nicht
    wesentlich verzögert werden.

-   Das Betriebssystem muss auf Rechnern mit beschränkten
    Betriebsmitteln arbeiten können.

-   Das System muss stabil im Dauerbetrieb arbeiten können ohne des
    öfteren gewartet zu werden.

Durch sehr unterschiedliche Anforderungsprofile entstehen auch viele
unterschiedliche Echtzeitbetriebssysteme mit jeweils spezifischen
Programmierschnittstellen.

Diese Vielfalt wird bei den Anwendern als Nachteil empfunden, da im
Sinne einer Rationalisierung Standard-Schnittstellen erwünscht sind.

# Betriebssysteme für verteilte Rechensysteme

Ein verteiltes System ist ein Rechensystem, welches aus mehreren
Computern besteht. Beispiele für verteilt organisierte Funktionen sind:

-   Verteiltes Dateisystem

-   Verteilte Benutzerverwaltung

-   Verteilte gemeinsame Daten

Im Idealfall verhält sich ein verteiltes System wie ein Einzelsystem,
wobei nicht festgelegt ist, welche Rechner dafür verwendet werden
müssen. Ein verteiltes System kann aus gleichartigen Rechnern bestehen
aber auch aus unterschiedlichen Systemen mit speziellen Funktionen.

## Verteilte Dateisysteme

Verteilte Dateisysteme ermöglichen den Zugriff auf Dateien, die nicht
auf einem lokalen Speicher, sondern auf anderen Computern im System
abgelegt sind. Der Zugriff selbst erfolgt mit den selben Operationen,
wie bei lokalen Zugriffen: Die Verteilung ist transparent. Dabei sind
folgende Probleme zu beachten:

-   Globaler Namensraum: Die im Kapitel 6 dargestellte Systematik zur
    Benennung von Dateien, muss so erfolgen, dass Dateien auf
    unterschiedlichen Rechnern benannt werden können. Möglichkeiten
    einer Realisierung sind die Erweiterung des Namensraums, welche den
    jeweiligen Server bezeichnet oder das Einbinden entfernter
    Dateisysteme in den lokalen Namensraum.

-   Effizienter Zugriff: Vor allem durch den Einsatz von Caches lässt
    sich eine höhere Effizienz erzielen. Bei konkurrierenden Zugriffen
    treten *Kohärenzprobleme* auf, da mehrere Kopien in
    unterschiedlichen Clients existieren können. Das Dateisystem muss
    also über ein geeignetes Protokoll sicherstellen, dass die Caches in
    den Clients konsistent gehalten werden. Ein solches
    Kohärenzprotokoll ist eines der wesentlichen Unterscheidungsmerkmale
    verteilter Dateisysteme.

-   Schutz: Der Zugriffschutz in verteilten Systemen ist schwieriger zu
    realisieren als in lokalen Systemen. In einem lokalen System ist es
    generell einfach feststellbar welches Subjekt (Benutzer, Prozess)
    auf ein bestimmtes Objekt zugreifen will. Verteilten Systemen
    hingegen muss die Identität des Subjekts über das Netzwerk
    mitgeteilt werden, was wiederum Sicherheitslücken auf dem Client und
    dem Server entstehen lässt. Sogenannte authentication protocols
    übertragen die Identität verschlüsselt und schaffen somit Abhilfe.

## Verteilte Benutzerverwaltung

Die Benutzer eines verteilten Systems sollen sich jedem Rechner beim
Betriebssystem anmelden können. Dies soll auch möglich sein, wenn
einzelne Komponenten des verteilten Systems ausgefallen sind oder der
Rechner, bei dem die Anmeldung erfolgt, vom restlichen System durch
einen Ausfall getrennt ist. Andererseits soll die Verwaltung der
Benutzer zentral erfolgen. Als Folge muss der Administrator einen neuen
Benutzer nur einmal einrichten. Aus diesem Grund wird eine zentrale
Datenbank mit Benutzerinformationen errichtet, hält aber Duplikate der
Daten für einen Ausfall bereit.

## Verteilter gemeinsamer Speicher

Im Allgemeinen wird gemeinsamer Speicher in verteilten Systemen nicht
zur Verfügung gestellt. Programme, die das für ihre Kommunikation
nutzen, können in verteilten Systemen nicht ohne weiteres ablaufen.
Jedoch lässt sich auf der Basis des Betriebssystems virtuell ein
gemeinsamer Speicher realisieren. Diese Realisierung erfolgt gleich wie
die Realisierung des gewöhnlichen Speichers.

# Betriebssysteme für parallele Rechensysteme

In parallelen Rechensystemen hängt die Architektur des Betriebssystems
stark von der Architektur des Rechensystems ab. Zwei Klassen sind
hierfür typisch:

-   Symmetrische Multiprozessoren: Bei symmetrischen Multiprozessoren
    liegt immer ein gemeinsamer Speicher vor, auf den alle Prozessoren
    zurückgreifen können. Dies eröffnet die Möglichkeit, solche Rechner
    mit einer einzelnen Instanz des Betriebssystems zu verwalten. Das
    bedeutet, dass der Code des Betriebssystems zwar von allen
    Prozessoren ausgeführt wird, jedoch die Zustandsinformation des
    Systems im gemeinsamen Speicher gehalten wird.

-   Parallelrechner mit ausschließlich lokalen Speichern: In diesen
    Rechenanlagen werden die Zustandsinformationen verteilt und die
    Betriebssysteme arbeiten unabhängig voneinander. Die Architektur
    eines solchen Systems, kommt der eines verteilten Systems gleich.

# Architektur von Betriebssystemen

Da völlig unterschiedliche Anforderungen gestellt werden, existieren
stark unterschiedliche Architekturen von Betriebssystemen.

**Das Betriebssystem als Programmbibliothek:** Einfache Betriebssysteme
stellen lediglich einen Satz von Funktionen für Anwenderprogramme zur
Verfügung, wie etwa Ein-/Ausgabe und Dateiverwaltung. Die Programme, die
zur Ausführung dieser Funktionen benötigt werden, befinden sich entweder
in einem Festwertspeicher oder werden beim Start des Betriebssystems
geladen. Programme und Daten sind in einem solchen System aber nicht
geschützt. Anwendungsprogramme können uneingeschränkt auf alle
Betriebsmittel zugreifen.

**Das Betriebssystem als Scheduler:** Dies ist die minimale
Funktionalität eines Rechensystems mit Mehrprozessbetrieb. Das
Betriebssystem besteht hier im wesentlichen aus der Prozessverwaltung.
Auch hier verfügen die Programme über alle Betriebsmittel, was auch ein
Risiko für die Sicherheit darstellt.

**Das Betriebssystem als privilegierte Instanz:** Das Betriebssystem
übernimmt die zentrale Kontrolle über die Betriebsmittel. Programme
haben nur eingeschränkten Zugriff auf die Betriebsmittel und bedienen
sich daher an Diensten des Betriebssystems. Dies ist die Grundlage von
Mehrbenutzersystemen und eine wesentliche Voraussetzung für die
Realisierung von Schutzmechanismen.

# Zusammenfassung

Im Allgemeinen stellt das Betriebssystem eine Schnittstelle zwischen
Rechner bzw. Hardware und dem Benutzer dar. Es regelt die
**Ressourcenaufteilung** an die verschieden Anwenderprogramme, welche
oft im Mehrprozessbetrieb ausgeführt werden. Die Hauptressourcen sind in
diesem Falle der Prozessor und der Hauptspeicher. Besteht ein Engpass an
Arbeitsmitteln, müssen spezielle Verfahren angewandt werden um den
Mangel auszugleichen. Ein Betriebssystem muss auch ein geeignetes
**Dateisystem** realisieren, über das der User auf die gespeicherten
Daten zugreifen, und sich auch über spezielle Einstellungen informieren
kann. Die **Ein-/Ausgabe** stellt einen weiteren Eckpfeiler in der Liste
der Aufgaben dar. Dem Anwender soll es möglich sein, die an das System
angeschlossene Hardware auch steuern zu können. Dies alles wird durch
die Ein-/Ausgabe bewerkstelligt. Um die vorangegangenen Themen auch
sicher durchführen zu können ist natürlich auch ein
**Sicherheitssystem** notwendig, welches das System und auch seine
Komponenten vor unbefugtem Zugriff schützt, ohne dabei den Benutzer und
seine Programme wesentlich einzuschränken. Nicht jedes System ist von
gleicher Bauart, weshalb auch verschiedene Betriebssysteme für solche
speziellen Systeme existieren müssen. **Echtzeitbetriebssysteme**,
**parallele Betriebssysteme** und auch Betriebssysteme für **verteilte
Systeme** werden benötigt. Als Folge der verschiedenen Bauarten,
variieren auch die **Architekturen** der Betriebssysteme.

# Literaturliste

Buch: Peter Rechberg, Gustav Pomberger, „Informatikhandbuch", 2.
aktualisierte und erweiterte Auflage, Carl Hanser Verlag, München/Wien
1999