Die (R)Evolution der Rechenzentren; Teil 4

Die grundsätzliche Funktionsweise der Virtualisierung

28.02.2011 | Autor / Redakteur: Dr. Franz-Joachim Kauffels / Andreas Donner

Der Hypervisor ersetzt in virtuellen Systemen den alten Scheduler und wird damit zum zentralen Element in einer Systemumgebung; Bild: Dr. Franz-Joachim Kauffels
Der Hypervisor ersetzt in virtuellen Systemen den alten Scheduler und wird damit zum zentralen Element in einer Systemumgebung; Bild: Dr. Franz-Joachim Kauffels

Die Hersteller von Virtualisierungssoftware zeigen immer Bildchen mit kleinen virtuellen Maschinchen. Das ist mehr als ärgerlich, denn erstens ist es fundamentaler Unsinn und, als sei das noch nicht genug, verdeckt es problematische Stellen. Aus didaktischer Perspektive ist es viel günstiger, sich dem Thema über eine Prozesssicht zu nähern. Daran kann man alles erklären.

Betriebssysteme haben sich über mehrere Jahrzehnte entwickelt. Dadurch haben auch an und für sich gleiche oder ähnliche Dinge unterschiedliche Namen bekommen. Für diese Erklärung hier verwende ich eine abstrakte Nomenklatur. Sie werden verstehen, was ich meine, aber einzelne Aspekte können in Ihrem Betriebssystem anders heißen.

Beginnen wir also mit der Bauweise eines konventionellen Betriebssystems, siehe Abbildung 1

Wir sehen die Abstraktion grundsätzlicher Funktionen eines Betriebssystems, die bei allen realen Betriebssystemen von Windows über Unix bis hin zu Großrechner-Betriebssystemen ähnlich heißen und vergleichbar funktionieren. Unten haben wir die Hardware, die hier durch einen Prozessor, einen seitenorientierten Speicher, einen Massenspeicher und einen Host Bus Adapter für die Kommunikation vertreten ist. Diese zwei Sorten Speicher haben sich historisch entwickelt. In jedem Prozessor gibt es Register und elektronisch implementiertes RAM. Diese Speichertypen sind zwar von ihrer Zahl her begrenzt, aber dafür um so schneller. In jedem Rechner gibt es darüber hinaus Massenspeichersysteme wie Festplatten. Diese sind historisch auf magnetischer Basis realisiert und dementsprechend langsamer, aber wesentlich billiger.

Diese beiden Speichertypen werden durch die so genannte Seitenspeicherarchitektur verbunden. Eine laufende Anwendung benötigt zu einem Zeitpunkt nur einen relativ geringen Teil ihres Gesamt-Speichervolumens. Dieser kleine Teil wird sinnvoller weise in RAM bereitgestellt, die Adressierung kann durch die Register geschehen. Der Rest des Speicherbereiches kann auf der Festplatte bleiben. Während die Anwendung läuft, ändert sich der kleine Teil, auf den sie zugreifen möchte, laufend. Also müssen Daten von der Festplatte in das RAM nachgeladen werden. Es hat sich in diesem Zusammenhang eingebürgert, von Seiten zu sprechen, die einen zusammenhängenden kleinen Speicherbereich repräsentieren.

Diese Seiten müssen also laufend nach den Anforderungen der Anwendung ersetzt werden. Je reibungsloser das funktioniert, desto schneller kann die Anwendung laufen, bei einer ungeschickten Strategie müsste sie ja immer warten. Also ist die Qualität der sog. Seitenersetzungsstrategie (engl.: Paging) von zentraler Bedeutung. Natürlich sind auch die Größe des RAMs und die Qualität des Massenspeichermediums entscheidend. Sie können jetzt sagen, dass das doch eigentlich jeder weiß. Aber ich habe leider gelernt, dass das nicht so ist. Grade der Speicherzugriff ist aber auch ein wesentlicher Stolperstein für die Virtualisierung, sodass das klar sein muss.

Viele (nicht alle) Betriebssysteme verwenden einen Hardware Abstraction Layer (HAL). Dieser abstrahiert den Befehlssatz und man kann das Betriebssystem auf einem weiten Bereich von Systemen laufen lassen. Mit dem HAL muss man aber auch wieder aufpassen, es kann sein, dass ein Prozessor bestimmte wünschenswerte spezielle Eigenschaften hat. Diese könnten vom HAL verdeckt werden.

Die Anwendung / das Programm

Eine Anwendung ist grundsätzlich erst einmal ein Stück ausführbarer Code, der irgendwo auf dem Massenspeicher liegt. So würde sie nicht laufen können. In dem Moment, wo man eine Anwendung startet, wird für sie eine sog. Laufzeitumgebung geschaffen. Diese besteht aus einem oder mehreren anwendungsorientierten Prozessen, die den ausführfähigen Code repräsentieren, einer Zuordnung von Seiten, die für den Start der Anwendung sinnvoll sind und einer Startbelegung für die Register. Das alles läuft immer noch nicht, ist aber eine sehr wesentliche Vorbereitung.

Normalerweise wird ein einzelner Prozessor zu einem multitaskingfähigen System organisiert. Das bedeutet, dass er scheinbar mehrere Dinge gleichzeitig verrichten kann. In Wahrheit kann er zu einer Zeit aber nur eine Aufgabe erledigen, was sich erst bei den Multi-Core-Systemen ändert, dazu gleich mehr.

Der Scheduler

Hier kommt der Scheduler ins Spiel. Der Scheduler erzeugt auf einem Prozessor ein System mit mehreren sog. Elementarprozessen, die abwechselnd vom Prozessor bearbeitet werden können. Diese Anzahl ist endlich, normalerweise einige Dutzend. Es kann immer nur einen sog. aktuellen Elementarprozess geben, der dann auch tatsächlich läuft.

Der Scheduler hat eine sog. Scheduling-Strategie, davon gibt es Unmengen, für die Zwecke dieser Darstellung reicht Round Robin: jeder der Elementarprozesse kommt für eine kurze Zeit an die Reihe, entweder bis seine Zeit abgelaufen ist oder ein Unterbrechungsereignis passiert. Ein typisches Unterbrechungsereignis wäre eine Ein- oder Ausgabe. Kommt der aktuell laufende Elementarprozess an einer Stelle, an der er z.B. eine Eingabe erwartet, wird er sofort stillgelegt und der nächste Elementarprozess ist dran. Man kann ihn in dieser Umgebung nicht solange warten lassen, bis die Eingabe tatsächlich erfolgt ist, das dauert zu lange. Er kommt erst dann wieder an die Reihe, wenn er nach Round Robin dran ist. Ist für die Eingabe dann z.B. immer noch kein Wert da, wird er sofort wieder schlafen gelegt.

In jedem Betriebssystem gibt es auf dieser Ebene zwei verschiedene Arten von Elementarprozessen, die einander abwechseln müssen:

  • Anwendungsunterstützende Elementarprozesse
  • System (unterstützende) Elementarprozesse

Jede Ein- und Ausgabe auf oder von einem externen Element (Speicher, Netzwerk, …) benötigt Rechenleistung. Diese wird von den System-unterstützenden Elementarprozessen erbracht. Der Scheduler oder auch das Paging-Verfahren sowie viele andere, hier nicht genannte Funktionen zur Systemsteuerung- und Verwaltung sind System-unterstützende Elementarprozesse.

Sie benötigen einen nennenswerten Anteil an der Prozessorleistung. Nur der „Rest“ steht dann tatsächlich für die Anwendungen zur Verfügung.

Möchte man eine Anwendung laufen lassen, so muss also ihre Laufzeitumgebung an einen oder mehrere anwendungsunterstützende Elementarprozesse gebunden werden. Das macht der sog. Dispatcher. Wie wir wissen, arbeiten diese immer nur sehr kurz. Der Sinn der Laufzeitumgebung ist es also vor allem, den jeweiligen Zwischenstatus der Anwendung bei einem Prozesswechsel festzuhalten. Dies geschieht normalerweise in den assoziierten Registern. Das sind auch bei einem normalen System virtuelle Register, denn in dem Moment , wo der aktuelle anwendungsunterstützende Elementarprozess aufhören muss, übernehmen sie den Zustand der tatsächlichen Register im Prozessor. Kann der anwendungsunterstützende Prozess dann weitermachen, werden die Registerinhalte aus der Laufzeitumgebung auf den physikalischen Prozessor übertragen.

Fassen wir zusammen:

Eine Anwendung muss in eine Laufzeitumgebung überführt werden. Die Laufzeitumgebung muss an einen oder mehrere anwendungsunterstützende Elementarprozesse gebunden werden. Der anwendungsunterstützende Elementarprozess kann dann immer nur kurz laufen, weil der Scheduler viele Elementarprozesse verwalten muss

Dadurch gibt es mindestens folgende Sorten von Prozessen in einer Betriebssystem-Umgebung:

  • Anwendungsprozesse, die eine Anwendung im Rahmen einer Laufzeitumgebung unterstützen
  • Anwendungsunterstützende Elementarprozesse, die die Anwendungsprozesse unterstützen
  • Systemunterstützende Elementarprozesse, die alle Systemfunktionen unterstützen, die nicht Anwendungsprozesse sind.

Dieses Prozessmodell ist didaktisch vereinfacht, weil es innerhalb der o.g. Sorten von Prozessen noch jeweils Abstufungen gibt, die aber nicht weiter zum Verständnis beitragen.

weiter mit: Die elementare Prozesskommunikation

 

ComConsult Netzwerk-Redesign Forum 2011

Inhalt des Artikels:

Kommentare werden geladen....

Was meinen Sie zu diesem Thema?

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 2050026 / Grundlagen)