Multitasking

Scheinbar gleichzeitiges Ausführen von zwei oder mehr Anwendungsprogrammen (genauer: Tasks). Dabei läuft eine Anwendung im Vordergrundbetrieb, für die andere(n) gilt Hintergrundbetrieb. Dabei werden die verschiedenen Prozesse in so kurzen Abständen immer abwechselnd aktiviert, dass der Eindruck der Gleichzeitigkeit entsteht. Bei Echtzeit-Systemen ist das Multitasking besonders auf die geforderten Reaktionszeiten hin optimiert.

Unterschieden wird zwischen kooperativem Multitasking, welches so lange nur einen Prozess bedient, bis dieser von sich aus die Bedienung anderer Prozesse erlaubt, und präemptivem Multitasking, bei welchem die Systemressourcen von Betriebssystem kontrolliert und nach dem Zeitscheiben - Verfahren auf die laufenden Anwendungen verteilt. (so z.B. UNIX, OS-2, Windows NT). Probleme im Ablauf eines Programms berühren das übrige System nicht oder kaum.

Windows ab 95 verwenden bei 32-Bit-Anwendungen das präemptive Multitasking, bei den älteren 16-Bit Anwendungen (für Windows 3.x und DOS) müssen sie das kooperative Multitasking benutzen.


Präemptives Multitasking

Präemptives Multitasking ist ein Multitasking-Verfahren moderner Betriebssysteme.

Beim präemptiven Multitasking wird der Zeitraum in Scheiben definierter Länge unterteilt. Den einzelnen Prozessen werden durch den Scheduler eigene Zeitscheiben zugewiesen. Läuft ihre Zeitscheibe ab, so werden sie unterbrochen und ein anderer Prozess erhält eine Zeitscheibe.

Das kooperative (nicht-präemptive / non-preemtive) Multitasking arbeitet ohne Zeitscheiben. Hier blockiert ein Prozess die CPU solange bis er sie freiwillig abgibt.

Ältere Ansätze von Multitasking basierten u. a. auf der Nutzung des Timer-Interrupt-Systems. Dabei wurde beim Interrupt-Aufruf der entsprechende Prozesskontext gewechselt und eine neue Zeitscheibe zugeteilt. Der gravierende Nachteil bestand in der fehlenden Berechtigungs-Differenzierung von Nutzer- und Scheduler-Prozess: Der Nutzerprozess konnte jederzeit dem Scheduler verbieten, die Applikation zu unterbrechen.

Daher ist eine wesentliche Voraussetzung für echtes präemptives Multitasking eine CPU, die verschiedene Berechtigungs-Modi beherrscht und ein Betriebssystemkern, der in der Lage ist, die verschiedenen Modi dahingehend zu nutzen, Anwendungs-Software mit unterschiedlichen Berechtigungen auszuführen.

Ein Beispiel:

  • Eine Anwendungssoftware ist meist „unterprivilegiert“. Sie muss von einem Prozess mit höherer Berechtigungsstufe unterbrechbar sein. Das ist die Grundvoraussetzung dafür, dass der Kernel – wie oben beschrieben – ihr

    1. eine Zeitscheibe zuteilen und den Prozess aufrufen kann,

    2. bei Ablauf der Zeitscheibe den Prozess einfrieren („schlafen legen“) kann und

    3. bei Zuteilung einer neuen Zeitscheibe den Prozess wieder so starten kann, dass der Prozess nicht merkt, dass er unterbrochen wurde

  • Der Systemkern selbst läuft in einem Modus mit maximaler Berechtigungsstufe.

    1. Bei Linux unterscheidet man hier zwischen Kernel-Mode und User-Mode,

    2. bei Windows NT und Nachfolgern spricht man von „Ring 0“ als Kernel-Modus und Ringen höherer Nummerierung für „unterprivilegierte“ Prozesse.

Auf x386-kompatiblen CPUs erfüllen die Betriebssysteme DR-DOS, Novell DOS, FreeDOS, ROM DOS, OpenDOS sowie deren DOS-Bedienoberfläche PC/GEOS die Bedingungen an präemptivem Multitasking.

Nicht in der Lage diese Bedingungen zu erfüllen sind unter anderem Microsoft-Produkte wie Windows 3.0, Windows-9x bis -ME und MS-DOS, sowie Apples Mac OS (bis 9).

Prozessoren, die die obengenannten. Anforderungen erstmalig vollständig erfüllten, waren unter anderem der 80386-Prozessor von Intel samt seiner kompatiblen Nachbauten sowie die 68030-CPU von Motorola aus der Reihe der 68k CPU's.