|
< Back | Wikipedia | Home | Dark Mode MultitaskingDieser Artikel erlautert den Informatik-Begriff. Zur Bedeutung in Bezug auf Menschen siehe Multitasking (Psychologie). Der Begriff Multitasking [,m^lti'ta:skIng] (engl.) bzw. Mehrprozessbetrieb bezeichnet die Fahigkeit eines Betriebssystems, mehrere Aufgaben (Tasks) (quasi-) nebenlaufig auszufuhren. Im Allgemeinen bietet der Prozessor hierzu auch unterstutzende Hardware-Strukturen. Die verschiedenen Prozesse werden in so kurzen Abstanden immer abwechselnd aktiviert, dass der Eindruck der Gleichzeitigkeit entsteht. Multitasking ist somit eine Variante eines Zeit-Multiplexverfahrens. Besitzt ein Computer mehrere CPU-Kerne, so dass er mehrere Aufgaben echt-gleichzeitig ausfuhren kann, so spricht man von Multiprocessing. In modernen Computern werden beide Verfahren kombiniert eingesetzt. Multitasking kann bei verschiedenen Anforderungen nutzlich sein, insbesondere bei der Optimierung der Auslastung und fur eine je nach Zielsetzung ausgeglichene oder prioritatsbasierte Ressourcenverteilung. Der Grundgedanke hinter der ,,Optimierung der Auslastung" ist der, dass in einem durchschnittlichen Rechner der uberwiegende Teil der Rechenzeit nicht genutzt werden kann, weil haufig auf verhaltnismassig langsame, externe Ereignisse gewartet werden muss (beispielsweise auf den nachsten Tastendruck des Benutzers). Wurde nur ein Prozess laufen (zum Beispiel die wartende Textverarbeitung), so ginge diese Wartezeit komplett ungenutzt verloren (siehe ,, aktives Warten"). Durch Multitasking kann jedoch die Wartezeit eines Prozesses von anderen Prozessen genutzt werden. Ist ein Rechner bzw. seine Rechenzeit demgegenuber grosstenteils ausgelastet, beispielsweise durch einzelne rechenintensive Prozesse, so konnen dennoch mehrere Benutzer oder Prozesse anteilige Rechenzeit erhalten, anstatt auf das Ende eines anderen Prozesses warten zu mussen. Dies kommt insbesondere auch der Interaktivitat zugute. Da das System zugleich fur die verschiedenen Prozesse Prioritaten berucksichtigen kann, ist eine entsprechende Gewichtung moglich, je nach Zielsetzung. Ein Server kann zum Beispiel die Dienste bevorzugen, welche er anbieten soll, jedoch direkte Benutzer-Interaktionen niedrig priorisieren. Ein Desktop-PC wird umgekehrt vor allem die Ein- und Ausgaben von/an den Benutzer bevorzugen, und dafur Hintergrund-Prozesse etwas zuruckstellen. Vorlaufer des Multitasking ist die Multiprogrammierung mit dem Ziel einer hoheren CPU-Auslastung im Gegensatz zur sequenziellen Ausfuhrung der Aufgaben bei Stapelverarbeitung. Bei der Multiprogrammierung findet der Kontextwechsel der Programme mit dem Zugriff auf periphere Gerate statt, da dabei zwangslaufig Wartezeit entsteht. Erste Ansatze basieren auf dem Konzept von Christopher Strachey aus dem Jahr 1959. Praktisch umsetzen liessen sich solche Konzepte aber erst mit leistungsfahiger Hardware, bei der mit der Interruptsteuerung die Entwicklung von TSR-Programmen moglich wurde. Der technische Ablauf beim Multitasking ist im Prinzip immer gleich. Als wichtige Grundvoraussetzung des Multitaskings gilt im Allgemeinen, dass ein Prozess, der zugunsten eines anderen unterbrochen wird, nichts uber diesen anderen (oder ggf. auch mehrere andere) ,,wissen" muss. Dies wird meist erreicht, indem jeder Prozess einen eigenen sogenannten Prozesskontext besitzt, der seinen Zustand beschreibt. Ein Prozess andert immer nur seinen eigenen Prozesskontext, niemals den eines anderen Prozesses. In der Regel wird der gesamte Prozesskontext (der Zustand des Prozesses) beim Unterbrechen gespeichert, z. B. auf dem Stapelspeicher (englisch 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 fur den Prozess so erscheint, als sei er uberhaupt nicht unterbrochen worden; unabhangig davon, ob, wie viele und was fur Prozesse in der Zwischenzeit ausgefuhrt worden sind. Dieses Umschalten zwischen einzelnen Prozessen wird als ,, Taskwechsel" bezeichnet. So kann ein Prozess bei der weiteren Ausfuhrung nach der Unterbrechung wieder seine definierte Umgebung vorfinden, auch wenn zwischenzeitlich andere Prozesse ausgefuhrt wurden. Beim kooperativen Multitasking ahnelt der Taskwechsel stark dem Aufruf von Prozeduren bzw. Funktionen in der prozeduralen Programmierung. Beim ,,kooperativen Multitasking" wird das Multitasking durch eine zentrale Prozessverwaltung im Systemkernel realisiert: ein einfacher sogenannter Scheduler. Der Scheduler sichert den Prozesskontext des gerade unterbrochenen Tasks, wahlt den nachsten Prozess aus, der Rechenzeit erhalten soll, stellt dessen Prozesskontext her und gibt den Prozessor dann an diesen neuen Prozess ab. Der Scheduler kann Listen mit verschieden priorisierten Tasks fuhren, und niedrig priorisierte entsprechend selten aufrufen. Dabei kann auch die bereits verbrauchte Rechenzeit eines Tasks berucksichtigt werden. In der Regel werden Betriebssystem-interne Aufgaben zuerst erledigt, bevor ein neuer Task den Prozessor erhalt. Es ist jedem Prozess selbst uberlassen, wann er die Kontrolle an den Kern zuruckgibt; in der Regel wird zumindest jede Dienst-Anforderung an das Betriebssystem mit einem Taskwechsel verbunden. Vorteil dieser Methode ist, dass viele Systemfunktionen (z. B. die Ausgabe) nicht wiedereintrittsfahig sein mussen und daher nicht synchronisiert sein mussen, was eine erhebliche Vereinfachung fur den Hersteller bedeutet. (Unterbrechungsroutinen mussen jedoch stets dieses Problem losen.) Diese Form des Multitasking hat ebenso wie das TSR-Konzept den Nachteil, dass Programme, die nicht kooperieren, das restliche System zum Stillstand bringen. Grunde fur solches Programmverhalten konnen sein:
Das Konzept wurde zum Beispiel eingesetzt
Diese Form des Multitasking ist prinzipiell schnell und ressourcenschonend sowie technisch verhaltnismassig einfach realisierbar. Fur multiuserfahige Grossrechner war es nie eine praktikable Alternative und wurde z. B. unter Unix nie eingesetzt, da ja ein Benutzer mittels unkooperativen Programms alle anderen blockieren konnte. Auch in den neueren Windows-Betriebssystemen der NT-Linie und in Mac OS X wird diese inzwischen als veraltet geltende Technik nicht eingesetzt. Teilweise unterstutzen sie ahnliche Funktionalitat begrenzt zum Beispiel als User Mode Threads, jedoch in jedem Fall nur eingebettet in praemptives Multitasking. Basis der heutzutage standardmassig angewendeten Methode ist das praemptive Multitasking: Der gerade laufende Prozess wird nach einer bestimmten Abarbeitungszeit (seinem ,, Zeitschlitz", auch Zeitscheibe, engl. time slice) durch den Interrupt eines Hardware-Timers unterbrochen. Die Interrupt Service Routine (Teil des Betriebssystems) unterbricht den Prozess und sichert seinen Prozesskontext - der Prozess wird ,,schlafen gelegt"; dann ubergibt sie an den Scheduler - das Betriebssystem hat (wieder) die Kontrolle erlangt. Sofern kein Betriebssystem-eigener Ablauf ansteht, wahlt der Scheduler nun einen rechenbereiten Prozess aus (ggf. denselben, der gerade unterbrochen wurde), stellt dessen Prozesskontext wieder her, startet den Hardware-Timer und ubergibt dann an den Prozess. Meist wird jedem Prozess eine ,,absolute" Zeitscheibe zugewiesen (alle Zeitscheiben haben dieselbe feste Dauer, ublicherweise wenige Millisekunden); alternativ wird ihm pro definierter Zeiteinheit ein bestimmter Prozentteil dieser Zeiteinheit zugewiesen (z. B. abhangig von seiner Prioritat), den er hochstens nutzen kann (die Lange der Zeitscheibe wird also jedes Mal neu bestimmt). Sollte er bereits vor Ablauf seiner Zeitscheibe eine Funktion des Betriebssystems benotigen, so wird er sogleich angehalten und als ,,nicht rechenbereit" markiert, bis das Betriebssystem den gewunschten Dienst erbracht hat. Nur als ,,rechenbereit" markierte Prozesse erhalten Prozessorzeit-Zuteilungen. Eine beliebte Umsetzung des praemptiven Multitaskings ist die Verwendung einer Vorrangwarteschlange in Verbindung mit der Round-Robin-Scheduling-Strategie. Es gibt auch die Prozessorzuteilung abhangig von der Taskprioritat, vor allem bei Echtzeitsystemen z. B. MicroC/OS-II. Fur das Multitasking spielt das nur eine untergeordnete Rolle, da praemptives Multitasking die Kernel- bzw. Prozessorkontrolle uber die Prozesse beschreibt. Hardwareseitig benotigt praemptives Multitasking im Gegensatz zur kooperativen Variante (vergl. TSR-Programm als Vorlaufer) zwingend einen Interrupterzeuger (meist ein Zeitgeber) im geeigneten Prozessor, da das System softwareseitig keine Moglichkeit hat, Prozessen die Kontrolle uber den Prozessor zu entziehen. Der Zeitgeber sendet regelmassig oder nach Ablauf einer eingestellten Zeit ein Signal (Interrupt) an die CPU, was sie zur Unterbrechung des aktuell laufenden Tasks und zur Ausfuhrung der Betriebssystem-Interrupt-Service-Routine veranlasst. Moderne Betriebssysteme arbeiten daruber hinaus mit einem Speicherschutz, der verhindert, dass verschiedene Prozesse sich im Speicher gegenseitig beeinflussen oder gar uberschreiben. Diese Schutzfunktion ubernimmt im PC die Memory Management Unit (MMU), welche die Virtualisierung des Hauptspeichers und verschiedene Berechtigungslevel (Ringe) oder auch Modi (Kernel-Mode versus User-Mode) ermoglicht und so dem Betriebssystem erlaubt, verschiedene parallele Prozesse innerhalb des Rechners voneinander strikt abzukapseln. Im PC kam die MMU erstmals in Rechnern mit i286-Prozessoren von Intel zum Einsatz. Diese Technik ist aber fur Multitasking im engeren Sinne nicht zwingend notwendig. Die ersten weit verbreiteten Computersysteme, die praemptives Multitasking beherrschten, waren der Sinclair QL (1984) und der Commodore Amiga (1985) im Heimbereich (beim Amiga ohne Speicherschutz/Privilegierung und somit ,,aushebelbar") sowie zuvor die unter Unix betriebenen Grossrechenanlagen. Windows beherrscht erstmals in den 3.x-Versionen teilweise praemptives Multitasking, dort allerdings nur fur DOS-Programme und das auch nur dann, wenn sie auf einem System mit einem i386-kompatiblen Prozessor ausgefuhrt werden, da dieser in solchen Fallen hardwareseitige Virtualisierung ermoglicht. Moderne Betriebssysteme, die praemptives Multitasking vollstandig unterstutzen, sind Windows NT (und alle Nachfolger), QNX, BeOS und alle auf Unix basierenden Systeme wie Linux, HP-UX, Solaris, macOS u. v. m. Ausserdem muss man zwischen Time slicing (Zeitscheiben-Verfahren) und Time-Sharing unterscheiden, letzteres gestattet mehreren Benutzern bzw. deren Prozessen (z. B. auf Datenbankservern oder Grossrechnern mit Terminalzugriff) sich automatisch anteilig die verfugbare Rechenzeit zu teilen. Wahrend sich also beim Multitasking mehrere Prozesse eines einzelnen Users die Rechenzeit teilen konnen, wird beim Time-Sharing die Zeit eines Prozesses auf mehrere Benutzer verteilt. Eine Sonderform des praemptiven Multitasking ist das weniger bekannte Praemptible Multitasking (englische Schreibweise Preemptible Multitasking), das erstmals im Betriebssystem OS/2 implementiert wurde. Viele Betriebssystem-eigene Kernel-Routinen werden als Scheduler-Threads gefuhrt; somit konnen Anwendungsprozesse auch Zeitschlitze erhalten, wahrend eigentlich eine Betriebssystem-Aktion ausgefuhrt wird (mit Ausnahmen fur atomare OS-Prozesse). Das Konzept ermoglicht schnellere Reaktionszeiten. Mit Version 2.6 hat es in den Linux-Kernel Eingang gefunden, wo zwischen praemptiblen und praemptiven Multitasking gewahlt werden kann.
Source: de.wikipedia.org |