Wirtschaftsinformatik (Bachelor-Studiengang): Rechnerarchitketur & Betriebssysteme (1. Semester)

Sie sind hier: StartseiteWirtschaftsinformatikRechnerarchitektur/Betriebssysteme: Virtueller Speicher

BM / CM, Kurs vom 01.04.2002 - 30.09.2002

Rechnerarchitektur/Betriebssysteme: Virtueller Speicher: Einführung in Betriebssysteme (Begriff des Betriebssystems, Geschichte der Betriebssysteme, Betriebsarten, Grundlagen), Virtueller Speicher: Segmente (Memory Management Unit (MMU), Definitionen und Erläuterungen, Kernel und Prozess), Systemaufrufe (Idee der Systemaufrufe, CPU-Arbeitsmodi), Swapping und Paging (Idee des Swapping, Der Schritt zum Paging, Paging - Adressumsetzung).

  1. Einführung in Betriebssysteme
  2. Virtueller Speicher: Segmente
  3. Systemaufrufe
  4. Swapping und Paging

Einführung in Betriebssysteme

Begriff des Betriebssystems

Definition Betriebssystem: [DIN 44300]

Die Programme eines digitalen Rechensystems, die zusammen mit den Eigenschaften der Rechenanlage die Basis der möglichen Betriebsarten [..] bilden und insbesondere die Abwicklung von Programmen steuern und überwachen.

An operating system is a set of programs and routines which guide a computer in the performance of its tasks and assist the programs (and programmers) with certain supporting functions. A.P. Sayers (1971)

Aber auch: Ein Betriebssystem ist eine Sammlung von Dingen, die nicht in eine Programmiersprache passen. Deswegen sollte es keines geben. Daniel Ingalls (1981)

Aufgaben des Betriebssystems:

Geschichte der Betriebssysteme

Die Geschichte der Betriebssysteme ist eng gekoppelt mit der Hardware-Technologie, so dass die Geschichte beider Bereiche sich überlappt.

Experimentelle Betriebssysteme in Labors und Universitäten waren immer ca. 10-20 Jahre von der Leistungsfähigkeit her den kommerziellen Betriebssystemen voraus.

Hiervon gibt es nur zwei bekannte Ausnahmen: Multics und das Star-System. Beide entsprachen der jeweiligen (und teilweise heutigen) Forschung, waren kommerziell verfügbar und wurden vom Markt ignoriert.

Geschichte der Betriebssysteme (Auszug):

Phasen in der Betriebssystemgeschichte:

  1. Manuelle Bestückung des Rechners
    Lochkarten durch Programmierer/Operator
    50er/60er Jahre
  2. Automatisierte Bestückung des Rechners
    Batch-Betrieb mit Warteschlangen, jedoch nur 1 Job
    60er Jahre
  3. Batchbetrieb im Mehrprogrammbetrieb
    60er/70er Jahre
  4. Interaktive Benutzung
    70er/80er Jahre
  5. Vernetzte interaktive Benutzung
    80er/90er Jahre
  6. Mobil und multimedial integriert
    Ab 90er Jahre

Betriebsarten

Ein-Benutzer- versus Mehrbenutzer-Betrieb:

Beim Mehrbenutzerbetrieb können mehrere Personen getrennt dieselben Betriebsmittel benutzen. Nur bei widersprechender Benutzung derselben Mittel treten Störungen auf (Single/Multi User Mode).

Beispiele für Betriebssysteme:

Einprogramm- versus Mehrprogramm-Betrieb:

Beim Mehrprogrammbetrieb sind mehrere gleichzeitig parallel laufende Programme (Prozesse) möglich (englisch: Single/Multi Tasking).

Beispiele für Betriebssysteme:

Weitere kommerzielle Betriebssysteme:

Grundlagen

Ein Betriebssystem besteht aus:

Kernel = Kern = residenter Teil des Betriebssystems.

Prozess = eigenständiges laufendes Programm parallel zu anderen Programmen [nicht alle Betriebssysteme unterstützen Parallelität].

Mit diesen Definitionen kann gesagt werden:

Kommunikation mit I/O-Geräten:

Kommunikation mit I/O-Geräten

Bildbeschreibung "Kommunikation mit I/O-Geräten": Zugang zum Bus haben CPU, RAM und alle I/O-Geräte.

I/O-Geräte verhalten sich wie der RAM.
CPU kommuniziert mit I/O-Geräten wie mit dem RAM.

Physikalischer Adressraum:

Für die weiteren Betrachtungen wird Memory-Mapped-I/O zugrunde gelegt: Alle Geräteregister der I/O-Geräte erhalten eine über den Adressbus benutzbare Adresse und sind somit mit allen Instruktionen erreichbar.

Physikalischer Adressraum

Bildbeschreibung "Physikalischer Adressraum": Die niedrigen Adressen des physikalischen Adressraumes werden vom Betriebssystem und Prozessen belegt, die hohen von den I/O-Geräten.

Der Bereich der Adressen, der über den Adressbus benutzbar ist, wird Physikalischer Adressraum genannt.

In der Regel ist dieser Adressraum in folgende Teile von den niedrigen zu den hohen Adressen aufgeteilt:

Bei Windows NT ist z.B. die Reihenfolge der Teile anders.

Zum Menü Wirtschaftsinformatik | Zum Seitenanfang

Virtueller Speicher: Segmente

Memory Management Unit (MMU)

Memory Management Unit

Bildbeschreibung "Memory Management Unit (MMU)": Filter und Umrechnungseinheit zwischen virtuellen Adressen der CPU und realen Adressen des Busses.

Funktionsweise der Memory Management Unit (MMU):

Funktionsweise der Memory Management Unit

Bildbeschreibung "Funktionsweise der Memory Management Unit": Eingehende virtuelle Adressen werden auf Richtigkeit überprüft (ob eine Adresse in dem zulässigen Bereich zwischen 0 und einem definierten Maximum liegt). Bei negativem Prüfungsausgang erfolgt eine Rückmeldung an die CPU, bei positivem Prüfungsausgang wird die virtuelle Adresse durch die Zugabe einer Basisadresse in eine reale Adresse gewandelt und an den Bus weitergegeben.

Die MMU ist ein Filter zwischen CPU und Bus, das folgende Aufgaben hat:

Alle Programme beginnen damit mit der virtuellen Adresse 0 und enden mit ihrer höchsten Adresse. Adressen dazwischen sind gültig, alle anderen ungültig.

Adressen der CPU, die von der MMU verarbeitet werden, werden virtuelle Adressen genannt.

Die umgerechneten Adressen werden physikalische oder reale Adressen genannt.

Virtueller Adressraum:

Virtueller Adressraum

Bildbeschreibung "Virtueller Adressraum": Der virtuelle Adressraum (der CPU) wird eingebettet in zwei für den Prozess nicht-zugreifbare Bereiche und bildet so den physikalische Adressraum (des Busses).

Die MMU baut einen "Käfig" auf, der jeden Zugriff nach außen unterbindet. Versucht ein Prozess außerhalb zuzugreifen, wird die Instruktion aufgrund eines Signals von der MMU abgebrochen. Das Programm terminiert (in der Regel).

Virtualisierung

Bildbeschreibung "Virtualisierung": Drei virtuelle Adressräume: Prozess 3, Prozess 3, und noch einmal Prozess 3. Aber nur ein physikalischer Adressraum, der sich wie folgt zusammensetzt: Betriebssystem + Prozess 2 (entspricht dem zweiten Prozess 3) + Lücke + Prozess 1 (entspricht dem ersten Prozess 3) + Lücke + Prozess 3 (entspricht dem dritten Prozess 3) + Lücke + I/O.

Diese Virtualisierung gilt für jedes Programm. Daher können unabhängig voneinander mehrere jeweils mit der Adresse 0 beginnenden und verschieden lange Programme gleichzeitig im Arbeitsspeicher liegen.

Der Kern wird von der MMU wie ein Prozess mit einem virtuellen Adressraum behandelt. Damit der Kern an alle Geräte und Prozesse heran kann, hat sein Bereich die Basisadresse 0 und die maximal mögliche Länge.

Durch das Addieren der Basisadresse sind die Segmente unabhängig von der Position im RAM, d.h. sie können während einer Programmunterbrechung verschoben werden. Dies ist zur Beseitigung von Lücken zwischen den Segmenten erforderlich.

Alle Segmente müssen zusammen gleichzeitig in den RAM passen. Ist dieser voll, so kann weder ein neues Segment (Programm) geschaffen noch ein bestehendes vergrößert werden.

Definitionen und Erläuterungen

Ein Bereich eines Arbeitsspeichers, der virtuell bei 0 beginnt, wird Segment genannt.

In der Praxis können Programme gleichzeitig mehrere Segmente besitzen (wird hier aus Gründen der Vereinfachung weggelassen). Jedem Segment wird ein Deskriptor (MMU-Registersatz) zugeordnet, der folgendes enthält:

Wenn ein Programm ausgeführt wird, ist dessen MMU-Deskriptor aktiv. Wechselt die Ausführung zu einem anderen Programm, wird dessen MMU-Deskriptor aktiviert, der vorherige ist inaktiv.

Kernel und Prozess

Kernel und Prozess

Bildbeschreibung "Kernel und Prozess": MMU-Deskriptor 1 = Einbettung des Prozesses in physikalischen Adressraum. MMU-Deskriptor 2 = Code und Daten des Kernel (abgelegt im Betriebssystem, welches sich im ersten für den Prozess nicht-zugreifbare Bereich befindet) + Zugriffsrechte des Kernel (umschließt die verbleibenden Bereiche).

Aufgaben der MMU:

Die wesentliche Aufgabe der MMU besteht darin, die einzelnen Programme gegenüber einem versehentlichen gegenseitigen Überschreiben zu schützen. Jedes Segment ist dadurch wie ein Gehege, aus dem das Programm nicht ausbrechen kann. So sind die anderen sowie der Kernel selbst geschützt.

Eine andere Aufgabe besteht in der Herstellung der Ortsunabhängigkeit der Segmente, daher können die Segmente an verschiedenen Stellen im physikalischen RAM stehen.

Die Realisierung von virtuellen Adressen mit einem unüberwindbaren Schutzmechanismus wie die MMU ist eines der wichtigsten Schutzkonzepte in Computern.

Zugriff auf die MMU-Register:

Zugriff auf die Memory Management Unit-Register

Bildbeschreibung "Zugriff auf die MMU-Register": MMU-Registersätze sind besondere Adressbereiche zugreifbar. MMU nimmt einen Bereich zwischen der dem letzten Prozess folgenden Lücke und dem Bereich I/O ein. Ein MMU-Registersatz besteht aus den drei Bereichen Länge, Erlaubnis und Basis-Adresse.

Zum Menü Wirtschaftsinformatik | Zum Seitenanfang

Systemaufrufe

Idee der Systemaufrufe

Bestimmte Routinen, die immer wieder gebraucht werden, werden aus den Programmen entfernt und als Betriebssystem zusammengefasst.

Jede dieser Routinen hat eine Schnittstelle: Name, Parameter samt Resultat.

Die Routinen im Kernel werden wie über ein Call angesprungen, wobei allerdings das User-Programm verlassen und das Betriebssystem betreten wird.

Dieser Wechsel erfolgt durch eine Trap-Instruktion; diese wird manchmal Software-Interrupt bezeichnet, was allerdings falsch ist, da es sich um keine Unterbrechung handelt.

Im Kernel wird dann die Routine ausgeführt.

Wechsel zum Kernel mittels Trap-Instruktion:

Wechsel zum Kernel mittels Trap-Instruktion

Bildbeschreibung "Wechsel zum Kernel mittels Trap-Instruktion": Zwei Modes. User-Mode mit User-Programm und Systemaufruf und Kernel-Mode mit Systemaufruf-Verteilung (I/O-System, File-System, Netzwerk-Dienste, Fehlerbehandlung). Der Trap-Bereich bildet die Schnittstelle zwischen diesen beiden Modes.

Mittels einer Return-from-trap-Instruktion wird wieder in das User-Programm zurückgekehrt.

Wenn von dem Wechsel ins Betriebssystem abgesehen wird, ist ein Systemaufruf (Syscall) vollkommen einem Aufruf einer Subroutine gleich. [Es gibt Betriebssysteme, bei denen das nicht so ist - aus Gründen der Vereinfachung wird dies hier weggelassen.]

Systemaufruf = Supervisorcall = Syscall = Aufruf einer Routine im Kernel aus einem Benutzerprogramm heraus.

CPU-Arbeitsmodi

Im Status-Register der CPU befindet sich ein Bit (manchmal sind es auch mehrere) zum Vermerken des globalen Arbeitsmodus der CPU:

Die Einschränkungen betreffen:

Was passiert beim Trap

  1. Status-Register wird auf den Stack gebracht
  2. PC wird (wie bei jsr) auf den Stack gebracht
  3. CPU-Modus wechselt in den Kernel-Mode
  4. Daher wird ein anderer MMU-Deskriptor benutzt
  5. Sprung an einer vorher festgelegte Adresse im Kernel

Da der Kernel selbst auch Programm mit Routinen usw. ist, benutzt er einen eigenen Stack, d.h. es findet noch ein Stack-Wechsel statt.

Weiterhin werden noch (fast) alle Register gerettet.

Was passiert beim Return-from-Trap?

  1. Wechsel in den User-Mode
  2. Benutzen des alten MMU-Deskriptors
  3. Wiederherstellen des alten PC-Wertes
  4. Wiederherstellen des alten SR-Wertes

Analog zum Trap muss auch der Stack gewechselt werden. Weiterhin werden noch (fast) alle Register wieder hergestellt.

Bei jedem Syscall findet ein Wechsel des Virtuellen Adressraums einschließlich Änderungen des Arbeitsmodus und Stacks statt.

Beispiel: Syscall read()

Syscall read()

Bildbeschreibung "Syscall read()": Erstens = Absetzen des Lese-Kommandos (Betriebssystem an I/O). Zweitens = Kopieren der Daten ins Programm (I/O an Prozess).

Zum Menü Wirtschaftsinformatik | Zum Seitenanfang

Swapping und Paging

Idee des Swapping

Eigenschaften der Segmente:

  1. Alle Segmente müssen zusammen in den Arbeitsspeicher passen.
  2. Das größte Segment (längste Programm) ist auch durch die Größe des Arbeitsspeichers begrenzt.

Um die 1. Eigenschaft zu beseitigen, wird ein Stück Plattenspeicher als Arbeitsspeichererweiterung benutzt. Dieser Plattenbereich ist um ein Vielfaches größer als der Arbeitsspeicher, so dass nun alle Segmente zusammen auf die Platten passen müssen, aber nicht zusammen in den Arbeitsspeicher.

Wenn ein Programm ausgeführt werden soll, wird es in den RAM gebracht (swap in), wenn es pausiert, wird es aus dem RAM ausgelagert (swap out). Dieses Verlagern wird Swapping genannt.

Swapping

Bildbeschreibung "Swapping": Grafische Darstellung der Verlagerung.

Der Schritt zum Paging

Beim Segmentieren muss immer noch der gesamte Prozess in den RAM passen. Um nur die wichtigen Teile in den RAM einzulagern und alles andere auf dem Swap-Gerät zu lassen,

Typische Seitengrößen liegen bei 4 bis 8 KB (Seite = Page = Kachel).

Jetzt brauchen nur noch die tatsächlich benötigten Seiten - das können 2-3 Stück sein - eines Prozesses im RAM liegen. Je weniger es sind, desto langsamer ist das Programm, da dann sehr häufig Seiten nachgeladen werden müssen.

Paging - Swapping:

Paging - Swapping

Bildbeschreibung "Paging - Swapping": Grafische Darstellung des im vorangegangenen Absatz beschriebenen Verfahrens.

Paging - Adressumsetzung

Der virtuelle Adressraum wird durch Aufteilung der virtuellen Adresse in zwei Bitfelder in gleich großer Seiten eingeteilt.

Jede Seite erhält von der MMU einen eigenen Deskriptor, der jetzt ohne ein Längenfeld auskommen kann, d.h. es gibt jetzt sehr viele Deskriptoren.

Ist die Basisadresse im Deskriptor 0, dann ist die Seite ausgelagert, was bei einem Zugriff zum Abbruch der Instruktion führt, ansonsten liegt die Seite an der angegebenen Stelle.

Alle Zugriffe auf eingelagerte Seiten passieren ohne Probleme die MMU.

Beispiel für 32 bit-Addressraum, Seitengröße ist 4 KB:

Paging - Adressumsetzung

Bildbeschreibung "Paging - Adressumsetzung": Virtuelle Adresse = Page-ID (20 bit) + Adresse innerhalb der Seite (12 bit). Page-ID: Indizierung und Auswahl des Registersatzes. Zusammen erfolgt die Adressumsetzung und dann die Bildung der realen Adresse.

Zugriff auf ausgelagerte Seite:

  1. Die MMU zeigt eine Speicherverletzung an, die den Abbruch der Instruktion bewirkt.
  2. Es wird eine (nicht programmierte) Trap-Instruktion ausgeführt, wobei alles das, was beim Syscall erfolgt, durchgeführt wird (Kernel-Mode).
  3. Im Kernel wird die fehlende Seite nachgeladen.
  4. Der korrespondierende MMU-Deskriptor wird verändert.
  5. Anschließend wird in den User-Mode zurückgekehrt und die abgebrochene Instruktion wiederholt.

Damit ist das Einlagern von Seiten aus der Sicht des Programms vollkommen transparent.

Seitenaustauschverfahren:

Bei jedem Schreibzugriff durch die CPU wird eine Seite als modifiziert markiert (Setzen des dirty-Bits).

Seiten ohne gesetztes dirty-Bit brauchen beim Auslagern nicht auf das Swap-Gerät geschrieben werden.

Seiten, die am längsten nicht mehr benutzt wurden, sind gute Kandidaten zum Auslagern. Die Verfahren zur Bestimmung, welche Seite ausgelagert und welche eingelagert wird, beeinflussen entscheidend die Performance.

Prozesse und Threads:

Jeder Prozess erhält einen eigenen virtuellen Adressraum, der normalerweise getrennt von allen anderen ist. Ausnahme: Speicherbereiche zur Interprozess-Kommunikation.

Wenn mehrere "Prozesse" denselben virtuellen Adressraum benutzen, werden sie Threads (Pfäden) genannt.

Threads haben den großen Vorteil, dass ein Prozesswechsel ohne einen Wechsel des Virtuellen Adressraums auskommt, was viel schneller geht.

Sie haben den Nachteil des geringen Speicherschutzes, da die einzelnen Threads sich jederzeit überschreiben können.