Multitasking


Multitasking

Der Begriff Multitasking [ˌmʌltiˈtɑːskɪŋ] (engl.) bzw. Mehrprozessbetrieb bezeichnet die Fähigkeit eines Betriebssystems, mehrere Aufgaben (Tasks) nebenläufig auszuführen. Dabei werden die verschiedenen Prozesse in so kurzen Abständen immer abwechselnd aktiviert, dass der Eindruck der Gleichzeitigkeit entsteht. Besitzt ein Computer mehrere CPU-Kerne, so dass er mehrere Aufgaben echt-gleichzeitig ausführen kann, so spricht man von Multiprocessing (siehe dort). In modernen Computern werden beide Verfahren kombiniert eingesetzt.

Inhaltsverzeichnis

Zweck des Multitasking

Multitasking kann bei verschiedenen Anforderungen nützlich sein, insbesondere bei der Optimierung der Auslastung und für eine je nach Zielsetzung ausgeglichene oder prioritätsbasierte Ressourcenverteilung.

Der Grundgedanke hinter ersterem ist der, dass in einem durchschnittlichen Rechner der absolut überwiegende Teil der Rechenzeit nicht genutzt werden kann, weil häufig auf verhältnismäßig langsame, externe Ereignisse gewartet werden muss (beispielsweise den nächsten Tastendruck des Benutzers). Würde nur ein Prozess laufen, ginge diese Wartezeit komplett ungenutzt verloren. Durch Multitasking kann jedoch die Wartezeit eines Prozesses von anderen Prozessen genutzt werden. Dies kommt insbesondere auch der Interaktivität zugute.

Ist ein Rechner bzw. seine Rechenzeit demgegenüber größtenteils ausgelastet, beispielsweise auf großen Mehrbenutzer-Rechnern oder durch einzelne rechenintensive Prozesse, so können dennoch mehrere Benutzer oder Prozesse anteilige Rechenzeit erhalten, anstatt auf das Ende eines anderen Prozesses warten zu müssen.

Vorläufer und Entwicklung

Multiprogrammierung und TSR-Programme

Vorläufer des Multitasking ist die Multiprogrammierung mit dem Ziel einer höheren CPU-Auslastung im Gegensatz zur sequenziellen Ausführung der Aufgaben bei Stapelverarbeitung. Bei der Multiprogrammierung findet der Kontextwechsel der Programme mit dem Zugriff auf periphere Geräte statt, da dabei zwangsläufig Wartezeit entsteht. Erste Ansätze basieren auf dem Konzept von Christopher Strachey aus dem Jahr 1959. Praktisch umsetzen ließen sich solche Konzepte aber erst mit leistungsfähiger Hardware, als mit der Interruptsteuerung die Entwicklung von TSR-Programmen möglich wurde.

Allgemeiner Ablauf

Der technische Ablauf beim Multitasking ist im Prinzip immer gleich. Beim kooperativen Multitasking ähnelt er stark dem Aufruf von Prozeduren bzw. Funktionen in der prozeduralen Programmierung.

Wichtige Grundvoraussetzung ist hier, dass ein Prozess, der zugunsten eines anderen unterbrochen wird, nichts über diesen anderen oder ggf. auch mehrere andere „wissen“ muss. Dies bedingt, dass dem Prozess bei der weiteren Ausführung nach der Unterbrechung wieder eine definierte Umgebung, der Prozesskontext, zur Verfügung gestellt wird, auch wenn diese in anderen Prozessen eine andere/veränderte ist.

In der Regel wird dies erreicht, indem der gesamte Zustand des Prozesses unmittelbar vor der Unterbrechung gespeichert wird, z. B. auf dem Stapelspeicher (engl. Stack). Er bleibt so lange gespeichert, bis der betreffende Prozess wieder Rechenzeit erhalten soll. Unmittelbar bevor dieser Prozess wieder aktiv wird, wird der gespeicherte Zustand wieder geladen, sodass es für den Prozess so erscheint, als sei er überhaupt nicht unterbrochen worden, unabhängig davon, ob, wie viele und was für Prozesse in der Zwischenzeit ausgeführt worden sind. Dieses Umschalten zwischen einzelnen Prozessen wird mit Taskwechsel bezeichnet.

Kooperatives Multitasking

Eine Weiterentwicklung der TSR-Konzeption ist das „kooperative Multitasking“, das ebenfalls auf dem Konzept der synchronen Interrupts aufsetzt. Hierbei wird das Multitasking durch eine zentrale Prozessverwaltung im Systemkernel realisiert, die im Innenverhältnis des Betriebssystems als eine Art weiterentwickeltes TSR-Programm arbeitet und die Rechenleistung nacheinander an die gestarteten Prozesse abgibt. Von hier aus werden natürlich auch die Treiber gesteuert. Dabei ist es jedem Prozess selbst überlassen, wann er die Kontrolle an den Kern zurückgibt. Eine Prioritätszuweisung nach Wichtigkeit ist damit systembedingt ausgeschlossen. Vorteil dieser Methode ist, dass Systemfunktionen (z. B. Ein-/Ausgabe) nicht wiedereintrittsfähig sein müssen und daher nicht synchronisiert sein müssen, was eine erhebliche Vereinfachung für den Hersteller bedeutet. Diese Form des Multitasking hat allerdings vom TSR-Konzept den Nachteil übernommen, dass Programme, die ihre Kooperation abbrechen, das gesamte System zum Stillstand bringen können. Ein Grund für ein Abbrechen durch das Programm können enthaltene Fehler oder auch eine durch den Programmierer gewollte Fehlfunktion eines Systems sein.

Eingesetzt wurde das Konzept eingeschränkt bereits in erweiterten TSR-Programmen für MS-DOS und Kompatible und in zahlreichen grafischen Oberflächen für diese Betriebssysteme. So wendete unter anderem Windows 3.x dieses Konzept an. Unter diesem System wird Multitasking nicht unterstützt, da nur die jeweiligen Speicherbereiche nebeneinander existieren und die Anwendungen im Hintergrund zugunsten des aktiven Programms einfach angehalten werden.

Bis Windows 3.x gab es sogar Systemprogramme, die einen Prozess erst vollständig beendeten, bevor sie die Steuerung endlich an das System zurückgaben. Bei umfangreichen Kopieroperationen mit dem Dateimanager wurde dies eine zeitraubende Geduldsprobe. Diese Form des Multitasking war allerdings prinzipiell schnell und ressourcenschonend, da es technisch verhältnismäßig einfach realisierbar ist. Für multiuserfähige Großrechner war es nie eine praktikable Alternative und wurde z. B. unter UNIX (und ähnlichen Betriebssystemen wie Linux) nie eingesetzt. Auch in den neueren Windows-Betriebssystemen der NT-Linie und Mac OS X wird diese inzwischen als veraltet geltende Technik nicht mehr eingesetzt, obwohl ähnliche Funktionalität in diesen Systemen noch begrenzt unterstützt wird (s. User Mode Threads), jedoch in jedem Fall nur eingebettet in präemptivem Multitasking.

Präemptives Multitasking

Die heutzutage standardmäßig angewendete Methode ist das präemptive Multitasking, bei dem der Betriebssystemkern die Abarbeitung der einzelnen Prozesse steuert (siehe unten) und jeden Prozess nach einer bestimmten Abarbeitungszeit zu Gunsten anderer Prozesse anhält. Dann „schläft“ der Prozess (ist inaktiv) und andere Prozesse werden bearbeitet. Erhält er wieder eine Prozessorzuteilung, so setzt er seine Arbeit fort (ist aktiv). Eine beliebte Umsetzung des präemptiven Multitaskings ist die Verwendung einer Vorrangwarteschlange in Verbindung mit der Round-Robin-Scheduling-Strategie. Dabei spricht man auch von so genannten Zeitschlitzen (bzw. Zeitscheiben, engl. time slicing). Damit wird jedem Prozess eine „absolute“ Zeitscheibe zugewiesen (alle Zeitscheiben haben die gleiche, feste Dauer), oder pro definierter Zeiteinheit abhängig von dessen Rechenaufwand ein bestimmter Prozentteil dieser Zeiteinheit, die er höchstens nutzen kann. Endet seine Zeitscheibe („seine Prozessorzuteilung ist zu Ende“), dann unterbricht ihn das Betriebssystem, und er wird wieder „schlafen gelegt“. Sollte er bereits vor Ablauf seiner Zeitscheibe eine Funktion des Betriebssystems benötigen, so wird er sogleich angehalten und als „nicht rechenbereit“ markiert, bis das Betriebssystem den gewünschten Dienst erbracht hat. Nur als „rechenbereit“ markierte Prozesse erhalten Prozessorzeit-Zuteilungen.

Es gibt auch die Prozessorzuteilung abhängig von der Taskpriorität, vor allem bei Echtzeitsystemen z. B. MicroC/OS-II. Für das Multitasking spielt das nur eine untergeordnete Rolle, da präemptives Multitasking die Kernel- bzw. Prozessorkontrolle über die Prozesse beschreibt. Bei vielen heutigen Betriebssystemen lassen sich diese Konzepte kombinieren, vor allem um den Serverbetrieb zu optimieren. Außerdem muss man zwischen Time slicing (Zeitscheiben-Verfahren) und Time-Sharing unterscheiden, letzteres gestattet mehreren Benutzern bzw. deren Prozessen (z. B. auf Datenbankservern oder Großrechnern mit Terminalzugriff) sich automatisch anteilig die verfügbare Rechenzeit zu teilen.[1]

Hardwareseitig benötigt präemptives Multitasking im Gegensatz zur kooperativen Variante (vergl. TSR-Programm als Vorläufer) zwingend einen Zeitgeber in Verbindung mit einem geeigneten Prozessor, da das System softwareseitig sonst keine Möglichkeit hat, Prozessen die Kontrolle über den Prozessor zu entziehen. Der Zeitgeber sendet regelmäßig ein Signal (Interrupt) an die CPU, was sie zur Ausführung eines Schedulers veranlasst. Dieser unterbricht den gerade aktiven Prozess, übernimmt nötige Verwaltungsaufgaben und aktiviert dann wieder einen (anderen) Prozess.

Moderne Betriebssysteme arbeiten darüber hinaus mit einem Speicherschutz, der verhindert, dass verschiedene Prozesse sich im Speicher gegenseitig überschreiben. Diese Aufgabe übernimmt im PC die Memory Management Unit (MMU), welche die Virtualisierung des Hauptspeichers und verschiedene Berechtigungslevel (Ringe) oder auch Modi (Kernel-Mode versus User-Mode) ermöglicht und so dem Betriebssystem erlaubt, verschiedene parallele Prozesse innerhalb des Rechners voneinander strikt abzukapseln. Im PC kam die MMU erstmals in Rechnern mit 80286 Prozessoren von Intel zum Einsatz. Diese Technik ist aber für Multitasking im engeren Sinne nicht zwingend notwendig.

Die ersten weit verbreiteten Computersysteme, die präemptives Multitasking beherrschten, waren der Sinclair QL (1984), der Amiga von Commodore International (1985), sowie zuvor die unter UNIX betriebenen Großrechenanlagen. Windows beherrscht erstmals in den 3.x-Versionen teilweise präemptives Multitasking, dort allerdings nur für DOS-Programme und das auch nur dann, wenn sie auf einem System mit einem 80386-kompatiblen Prozessor ausgeführt werden. Moderne Betriebssysteme, die präemptives Multitasking vollständig unterstützen, sind Windows NT (und alle Nachfolger), QNX und alle auf UNIX basierenden Systeme wie Linux, HP-UX, Solaris, Mac OS X u. v. m.

Präemptibles Multitasking

Eine Sonderform des präemptiven Multitasking ist das bisher wenig bekannte Präemptible Multitasking (englische Schreibweise Preemptible Multitasking), das offenbar erstmals im Betriebssystem OS/2 implementiert wurde. Es ermöglicht, dass Anwendungen hoher Priorität weniger wichtige Anwendungen unterbrechen können.[2] Das Konzept ermöglicht schnellere Reaktionszeiten. Mit Version 2.6 hat es auch in den Linux-Kernel Eingang gefunden.[3]

Einzelnachweise

  1. aus Artikel Timesharing, in: Meyers Taschenlexikon in 24 Bänden (B. I. Taschenbuchverlag) – Meyer nennt auch hier ausdrücklich Zeitscheiben im Mehrbenutzerbetrieb (auch MS Encarta Weltatlas verweist beim „Time-Sharing“ auf Mehrbenutzerbetrieb)
  2. Glossar eines Softwareherstellers auf www.ingentis.de
  3. Informationen auf jakoxx.de

Literatur

  • C. Strachey, Time Sharing in Large Fast Computers, Proceedings of the International Conference on Information Processing, UNESCO, 1959
  • Multitasking Schwerpunkt Interaktive Systeme. TFH Berlin 2005

Siehe auch


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • multitasking — mul‧ti‧task‧ing [ˈmʌltɪˌtɑːskɪŋ ǁ ˌtæs ] also multi tasking noun [uncountable] 1. COMPUTING when a computer runs more than one program at the same time on a single processor (= the central most important part of the computer); = MULTIPROCESSING …   Financial and business terms

  • Multitasking — may refer to any of the following: Computer multitasking the apparent simultaneous performance of two or more tasks by a computer s central processing unit Media multitasking could involve using a computer, mp3, or any other form of media in… …   Wikipedia

  • multitasking — (izg. multitásking) ž DEFINICIJA term. višezadaćnost, v. ETIMOLOGIJA engl …   Hrvatski jezični portal

  • multitasking — also multi tasking, 1966, originally in computing, from MULTI (Cf. multi ) + tasking (see TASK (Cf. task)). Of humans, by 1998. Related: Multitask (v.). As an adjective, multi task is recorded from 1954 in a non computer mechanical context …   Etymology dictionary

  • multitasking — /multiˈtaskin(g), ingl. ˌmʌltɪˈt2ːskɪŋ/ [vc. ingl., comp. di multi «multi » e tasking, dal v. to task «assegnare un compito» o, più precisamente, un «programma»] s. m. inv. (elab.) multiprogrammazione …   Sinonimi e Contrari. Terza edizione

  • multitasking — ► NOUN Computing ▪ the execution of more than one program or task simultaneously …   English terms dictionary

  • Multitasking — Mụl|ti|tas|king […ta:s… , mʊlti ta:s…, auch: maltɪ ta:skɪŋ ], das; [s] [engl. multitasking, zu: task = Aufgabe] (EDV): 1. gleichzeitiges Abarbeiten mehrerer Tasks in einem Computer. 2. gleichzeitiges Verrichten mehrerer Tätigkeiten. * * *… …   Universal-Lexikon

  • multitasking — /mul tee tas king, tah sking, mul tuy /, n. Computers. the concurrent or interleaved execution of two or more jobs by a single CPU. Also, multi tasking. [MULTI + TASKING] * * * Mode of computer operation in which the computer works on multiple… …   Universalium

  • multitasking — mul|ti|task|ing [ˈmʌltiˌta:skıŋ US ˌtæs ] n [U] 1.) a computer s ability to do more than one job at a time 2.) when a person does more than one thing at a time ▪ Women are traditionally supposed to be good at multitasking …   Dictionary of contemporary English

  • Multitasking — Mul|ti|tas|king [mʌlti tɑ:skiŋ] das; [s] <aus gleichbed. engl. multitasking, zu task »Auftrag«> das gleichzeitige Abarbeiten mehrerer ↑Tasks in einem Computer (EDV) …   Das große Fremdwörterbuch