Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Multitasking

Der Begriff Multitasking [ˌmʌltiˈtɑːskɪŋ] (engl.) bzw. Mehrprozessbetrieb bezeichnet die Fähigkeit eines Betriebssystems, mehrere Aufgaben (Tasks) …

Inhalt5 Abschnitte
  1. 1. Grundidee und Bedeutung
  2. 2. Prozesskontext und Taskwechsel
  3. 3. Kooperative Steuerung und Vorläufer
  4. 4. Erzwungene Zeitscheiben und Prozessauswahl
  5. 5. Hardware, Schutz und besondere Formen

Grundidee und Bedeutung

Multitasking, auch Mehrprozessbetrieb, ist die Fähigkeit eines Betriebssystems, mehrere Aufgaben beziehungsweise Prozesse quasi nebenläufig auszuführen. Dazu aktiviert es die Prozesse in so kurzen Abständen abwechselnd, dass für den Benutzer der Eindruck gleichzeitiger Ausführung entsteht. Multitasking ist damit eine Form des Zeit-Multiplexverfahrens. Ein Task ist dabei eine vom System zu bearbeitende Aufgabe.

Besitzt ein Computer mehrere CPU-Kerne und kann dadurch mehrere Aufgaben tatsächlich gleichzeitig ausführen, heißt dies Multiprocessing. Moderne Computer kombinieren Multitasking und Multiprocessing.

Multitasking verbessert vor allem die Auslastung des Rechners. Prozesse warten häufig auf langsame externe Ereignisse, etwa eine Textverarbeitung auf den nächsten Tastendruck. Ohne Multitasking bliebe die Rechenzeit während dieses Wartens ungenutzt. Mit Multitasking kann die CPU in dieser Zeit andere Prozesse bearbeiten. Auch bei starker Auslastung können mehrere Prozesse oder Benutzer anteilig Rechenzeit erhalten, statt bis zum vollständigen Ende eines rechenintensiven Prozesses warten zu müssen. Das verbessert besonders die Interaktivität.

Das Betriebssystem kann die verfügbaren Ressourcen außerdem nach Prioritäten verteilen. Ein Server kann seine angebotenen Dienste bevorzugen und direkte Benutzerinteraktionen niedriger einstufen. Ein Desktop-PC priorisiert dagegen meist Ein- und Ausgaben des Benutzers und stellt Hintergrundprozesse etwas zurück.

Prozesskontext und Taskwechsel

Die technische Grundlage besteht darin, einen laufenden Prozess zu unterbrechen und später genau an derselben Stelle fortzusetzen. Der Prozess muss dabei nichts über die anderen Prozesse wissen, die während seiner Unterbrechung ausgeführt werden.

Jeder Prozess besitzt dazu einen eigenen Prozesskontext. Dieser beschreibt seinen aktuellen Zustand und bildet seine Ausführungsumgebung. Ein Prozess verändert nur seinen eigenen Kontext, nicht den eines anderen Prozesses. Wird er unterbrochen, speichert das System in der Regel seinen gesamten Prozesskontext, beispielsweise auf dem Stapelspeicher, dem sogenannten Stack. Bevor der Prozess später erneut Rechenzeit erhält, wird dieser Zustand wiederhergestellt. Für den Prozess wirkt es dadurch so, als sei er nie unterbrochen worden.

Das Umschalten von einem Prozess zu einem anderen heißt Taskwechsel. Es umfasst das Sichern des bisherigen Prozesskontexts, die Auswahl eines anderen Prozesses und das Laden von dessen Kontext. So findet jeder Prozess bei seiner Fortsetzung wieder seine definierte Umgebung vor. Beim kooperativen Verfahren ähnelt dieser Wechsel dem Aufruf von Prozeduren oder Funktionen in der prozeduralen Programmierung.

Kooperative Steuerung und Vorläufer

Ein Vorläufer des Multitaskings ist die Multiprogrammierung. Ihr Ziel war eine höhere CPU-Auslastung gegenüber der rein sequenziellen Bearbeitung bei der Stapelverarbeitung. Der Programmwechsel erfolgte insbesondere beim Zugriff auf Peripheriegeräte, weil dabei Wartezeit entstand. Erste Ansätze beruhten auf einem Konzept von Christopher Strachey aus dem Jahr 1959. Praktisch umsetzbar wurden sie erst mit leistungsfähigerer Hardware und Interruptsteuerung, die auch TSR-Programme ermöglichte.

Beim kooperativen Multitasking organisiert eine zentrale Prozessverwaltung im Systemkernel den Wechsel. Ein Scheduler – die Komponente zur Zuteilung von Rechenzeit – sichert den Kontext des unterbrochenen Tasks, wählt den nächsten Prozess, stellt dessen Kontext wieder her und übergibt ihm den Prozessor. Er kann Prozesse mit unterschiedlichen Prioritäten verwalten und auch ihre bisher verbrauchte Rechenzeit berücksichtigen. Betriebssysteminterne Aufgaben werden normalerweise vor dem Start eines neuen Tasks erledigt.

Entscheidend ist, dass jeder Prozess selbst bestimmt, wann er die Kontrolle an den Betriebssystemkern zurückgibt. Häufig ist eine Anforderung an einen Betriebssystemdienst mit einem Taskwechsel verbunden. Weil ein Wechsel nicht an beliebigen Stellen erzwungen wird, müssen viele Systemfunktionen, etwa die Ausgabe, nicht wiedereintrittsfähig und daher nicht synchronisiert sein. Unterbrechungsroutinen müssen dieses Problem allerdings immer lösen.

Das Verfahren ist schnell, ressourcenschonend und vergleichsweise einfach umzusetzen. Sein großer Nachteil besteht darin, dass ein fehlerhaftes oder absichtlich nicht kooperierendes Programm das gesamte übrige System anhalten kann. Auch eine beabsichtigte Alleinherrschaft, etwa für eine zeitkritische Anwendung wie ein Computerspiel, kann dazu führen. Deshalb eignete sich diese Technik nicht für Mehrbenutzersysteme: Ein einzelner Benutzer könnte durch ein unkooperatives Programm alle anderen blockieren.

Eingesetzt wurde kooperatives Multitasking unter anderem beim Apollo Guidance Computer, beim Atari ST, in grafischen Oberflächen für MS-DOS und kompatibles DOS sowie von System 5 bis Mac OS 9. Windows 3.x unterstützte es nur teilweise: Die Speicherbereiche der Anwendungen bestanden nebeneinander, während Hintergrundanwendungen zugunsten des aktiven Programms angehalten wurden. Moderne Systeme der Windows-NT-Linie und Mac OS X verwenden diese inzwischen als veraltet geltende Technik nicht als Grundlage. Ähnliche Funktionen wie User Mode Threads können dort nur begrenzt und eingebettet in ein präemptives System auftreten.

Erzwungene Zeitscheiben und Prozessauswahl

Das heute übliche präemptive Multitasking überlässt einem Prozess nicht selbst die Entscheidung, wann er die CPU freigibt. Nach einer bestimmten Abarbeitungszeit, dem Zeitschlitz oder der Zeitscheibe (englisch time slice), löst ein Hardware-Timer einen Interrupt aus. Ein Interrupt ist ein Signal, das die CPU zur Unterbrechung des laufenden Programms und zur Bearbeitung einer Betriebssystemroutine veranlasst.

Die Interrupt Service Routine des Betriebssystems unterbricht den Prozess, speichert seinen Kontext und legt ihn „schlafen“. Anschließend übernimmt der Scheduler. Falls keine betriebssysteminterne Aufgabe ansteht, wählt er einen rechenbereiten Prozess aus; dies kann auch der gerade unterbrochene sein. Dann stellt er dessen Kontext wieder her, startet den Hardware-Timer und übergibt die CPU an den ausgewählten Prozess.

Meist erhält jeder Prozess eine feste Zeitscheibe; alle Zeitscheiben haben dann dieselbe Dauer von üblicherweise wenigen Millisekunden. Alternativ kann ein Prozess pro festgelegter Zeiteinheit einen bestimmten prozentualen Anteil erhalten, beispielsweise abhängig von seiner Priorität. In diesem Fall wird die Länge der Zeitscheibe jeweils neu berechnet. Fordert ein Prozess schon vor ihrem Ablauf einen Betriebssystemdienst an, wird er sofort angehalten und als „nicht rechenbereit“ markiert, bis der Dienst ausgeführt wurde. Nur rechenbereite Prozesse erhalten Prozessorzeit.

Eine verbreitete Auswahlmethode kombiniert eine Vorrangwarteschlange mit Round-Robin-Scheduling, bei dem bereite Prozesse reihum Rechenzeit erhalten. Besonders in Echtzeitsystemen wie MicroC/OS-II kann die Prozessorzuteilung von der Priorität eines Tasks abhängen. Für den Begriff des präemptiven Multitaskings ist diese konkrete Auswahlmethode jedoch zweitrangig; entscheidend ist, dass der Kernel den Prozessen die Kontrolle über den Prozessor entziehen kann.

Hardware, Schutz und besondere Formen

Präemptives Multitasking benötigt zwingend einen geeigneten Interrupterzeuger, meistens einen Zeitgeber. Ohne diese Hardware könnte das Betriebssystem einem Prozess die Kontrolle über die CPU nicht allein durch Software entziehen. Der Zeitgeber sendet regelmäßig oder nach Ablauf einer eingestellten Zeit einen Interrupt. Daraufhin unterbricht die CPU den aktuellen Task und führt die Interrupt Service Routine des Betriebssystems aus.

Moderne Betriebssysteme ergänzen dies durch Speicherschutz. Er verhindert, dass Prozesse den Speicher anderer Prozesse beeinflussen oder überschreiben. Im PC übernimmt diese Aufgabe die Memory Management Unit (MMU). Sie ermöglicht die Virtualisierung des Hauptspeichers sowie verschiedene Berechtigungslevel, sogenannte Ringe, beziehungsweise die Trennung von Kernel-Mode und User-Mode. Dadurch kann das Betriebssystem gleichzeitig laufende Prozesse strikt voneinander abkapseln. Bei PCs wurde die MMU erstmals in Rechnern mit Intels i286-Prozessor eingesetzt. Für Multitasking im engeren Sinn ist sie jedoch nicht zwingend erforderlich.

Zu den ersten weit verbreiteten Heimsystemen mit präemptivem Multitasking gehörten der Sinclair QL von 1984 und der Commodore Amiga von 1985; beim Amiga fehlten Speicherschutz und Privilegierung, weshalb der Mechanismus ausgehebelt werden konnte. Zuvor war das Verfahren bereits auf Großrechnern unter Unix vorhanden. Windows 3.x beherrschte teilweise präemptives Multitasking, jedoch nur für DOS-Programme auf Systemen mit einem i386-kompatiblen Prozessor. Vollständige Unterstützung bieten unter anderem Windows NT und seine Nachfolger, QNX, BeOS sowie Unix-basierte Systeme wie Linux, HP-UX, Solaris und macOS.

Vom Zeitscheiben-Verfahren ist Time-Sharing zu unterscheiden. Beim Multitasking können sich mehrere Prozesse eines einzelnen Benutzers die Rechenzeit teilen. Beim Time-Sharing wird dagegen die Zeit eines Prozesses auf mehrere Benutzer verteilt, etwa auf Datenbankservern oder Großrechnern mit Terminalzugriff.

Eine Sonderform ist das erstmals in OS/2 eingesetzte präemptible Multitasking. Dabei werden viele Kernel-Routinen des Betriebssystems als Scheduler-Threads ausgeführt. Deshalb können Anwendungsprozesse selbst während einer Betriebssystemaktion Zeitschlitze erhalten; atomare Betriebssystemprozesse bilden Ausnahmen. Das ermöglicht schnellere Reaktionszeiten. Mit Version 2.6 wurde dieses Konzept in den Linux-Kernel aufgenommen, wo zwischen präemptiblem und präemptivem Multitasking gewählt werden kann.

Weiterlesen

Englische Sprache Die englische Sprache (Eigenbezeichnung: [ˈɪŋɡlɪʃ]) ist eine ursprünglich in England beheimatete germanische Sprache, die zum westgermanischen Zweig gehört. Betriebssystem Betriebssysteme bestehen in der Regel aus einem Kernel (deutsch: Kern), der die Hardware des Computers verwaltet, sowie speziellen Programmen, die beim Start … Thread (Informatik) Kritischer Abschnitt · Nebenläufigkeit · Parallele Programmierung · Prozess · Threadsicherheit. Literatur. Bearbeiten. Peter Ziesche: Nebenläufige & verteilte … Nebenläufigkeit Die Nebenläufigkeit, mitunter auch Parallelität (englisch concurrency) genannt, ist in der Informatik die Eigenschaft eines Systems, mehrere Aufgaben, … Prozessor Aufbau und Funktionale Einheiten · Hauptprozessor (CPU) und Mehrprozessorkerne · Steuer- bzw. Leitwerk · Rechenwerk und Register · Datenleitungen · Caches und MMU. Hardware Unterteilung · Ausgabegeräte (Drucker, Bildschirm, Beamer, Lautsprecher …) · Eingabegeräte (Tastatur, Maus, Joystick …) · Einlesegeräte (Mikrofone, … Prozess (Informatik) Ein Prozess ist die Ablaufumgebung für ein Programm auf einem Rechnersystem sowie der darin eingebettete Binärcode des Programmes während der Ausführung. Ein … Multiplexverfahren Die zunehmende Komplexität des Signals muss dabei entweder in Übertragungszeit oder Frequenz bzw. Bandbreite ausgeglichen werden. Die Übertragung erfolgt … Betriebsmittel (Informatik) Bei wechselseitiger Abhängigkeit von Ressourcen führt ein Versagen der Zugriffsregelung zu einer sogenannten Verklemmung (deadlock). Manche Ressourcen wie z … Stapelspeicher Abstrakter Datentyp. Bearbeiten. Bei der Implementierung eines Stapelspeichers als abstrakter Datentyp in einer einfach verketteten Liste wird der Zeiger auf … User-Thread Thread (Informatik)) bezeichnet und ein User-Thread schlicht thread genannt. Ein Solaris-Thread kann auch anderen lightweight processes desselben Prozesses … Interrupt Interrupts (genauer: Hardware-Interrupts) werden durch asynchrone externe Ereignisse ausgelöst. Asynchron bedeutet in diesem Zusammenhang, dass die laufende …