WikiDer > Multitasking (Computer)

Multitasking (computer)

Multitasking ist eine Methode für einen Prozessor scheinbar mehrere Aufgaben (Programm's oder Teile davon) gleichzeitig auszuführen (siehe auch verteilte Programmierung). Es Betriebssystem schaltet sehr schnell zwischen den verschiedenen aktiven Programmen um. Diese Umschaltungen, Kontextwechsel, kann freiwillig durch den laufenden Prozess oder durch ein externes Ereignis wie z Hardware-unterbrechen (eine Anfrage, um Prozessorzeit zu erhalten).

Timeshare

In dem 60er Jahre Forscher machten die ersten Versuche, Multitasking-Systeme zu erstellen. Das hieß damals "Zeiteinteilung" weil das Ziel darin bestand, mehreren Benutzern die Nutzung eines zu ermöglichen Großrechner und erhöht so seine Nützlichkeit. Der Ausdruck "Zeitskalierung" ist zugunsten des allgemeineren "Multitasking" in Vergessenheit geraten.

Kooperatives und präventives Multitasking

Die allerersten Multitasking-Systeme bestanden aus einer Reihe verwandter Programme, die den Prozessor freiwillig gegenseitig freigaben. Dieser Ansatz, der letztendlich von mehreren Betriebssysteme verwendet wurde, kennen wir heute als kooperatives Multitasking. Obwohl es heute selten in größeren Systemen verwendet wird, ist die erste Version von version Amiga-Betriebssystem es im Jahr 1985 und auch RISC-Betriebssystem anno 1987 war Multitasking und auch Microsoft Windows in den Versionen davor Windows 95 und Mac OS in den Versionen vor Mac OS X.

Kooperatives Multitasking weist mehrere Mängel auf. Ein solches System ist darauf angewiesen, dass jedes Programm auf dem System den Prozessor regelmäßig freiwillig für andere Prozesse freigibt. Ein schlecht gestaltetes Programm oder ein Programm, das "hängt", kann das System zum Absturz bringen. Die Designanforderungen an ein kooperatives Multitasking-Programm können für bestimmte Anwendungen besonders anspruchsvoll sein und zu einer unregelmäßigen oder ineffizienten Nutzung der Systemressourcen.

Um dieses Problem zu lösen, setzten die meisten Time-Sharing-Systeme präemptives Multitasking ein, eine Technik, die in größeren (Mehrbenutzer-)Betriebssystemen wie z UNIX und VMS. Ein mit diesem Verfahren entworfenes System muss sich nicht mehr auf die freiwillige Freigabe des Prozessors verlassen, sondern verwendet stattdessen Hardware-Interrupts, um ein laufendes Programm zu unterbrechen und dem Betriebssystem zu ermöglichen, die Kontrolle über das System zurückzugewinnen. Zu einem späteren Zeitpunkt kann das Betriebssystem die Kontrolle an die Aufgabe zurückgeben, die genau dort wieder aufnimmt, wo sie unterbrochen wurde. Somit müssen Tasks nicht explizit Zeit für andere Tasks zuweisen und Programme können so geschrieben werden, als hätten sie ständigen Zugriff auf die CPU. Auf größeren Systemen ist dieser Ansatz unabdingbar, um zu verhindern, dass sich unterschiedliche Benutzer in die Quere kommen, aber auf persönliche Computer Dieser Ansatz wurde langsam eingeführt, insbesondere von UNIX-basierten Betriebssystemen wie z minix und Linux.

Preemptives Multitasking erleichtert es somit einem Betriebssystem, zu gewährleisten, dass jeder Task ein Teil der Prozessorzeit zugewiesen wird. Außerdem ist es möglich, schnell auf wichtige externe Ereignisse zu reagieren, wie zum Beispiel eingehende Daten, die möglicherweise sofort von einer Aufgabe verarbeitet werden müssen.

IO gebunden und CPU-gebunden

Aufgaben können in zwei Kategorien gruppiert werden: Aufgaben, die auf Eingabe oder Ausgabe warten (IO gebunden) und Aufgaben, die den Prozessor voll auslasten (CPU-gebunden). In älteren Systemen verwendete Tasks Umfragen und beschäftigt warten während sie auf neue Termine warteten. Sie benutzten den Prozessor, ohne nützliche Arbeit zu leisten. Mit der Ankunft von unterbrechen und präventiv Multitasking Prozesse können gesperrt werden, solange die angeforderten Daten nicht verfügbar sind. In der Zwischenzeit können andere Aufgaben den Prozessor noch nutzen. Nach dem Eintreffen der Daten macht das Betriebssystem die Task wieder aktiv, damit die Daten vom Programm verarbeitet werden können.

Multi-User und Multitasking

Multitasking war ursprünglich dazu gedacht, verschiedenen Benutzern die gemeinsame Nutzung eines Computers zu ermöglichen. Es stellte sich jedoch bald heraus, dass Multitasking unabhängig von der Anzahl der Benutzer nützlich war. Betriebssysteme vom Mainframe bis zum persönliche Computer unterstützen sie heute. Multitasking ermöglicht es einem einzelnen Benutzer, mehrere Anwendungen nebeneinander zu betreiben oder Aufgaben im „Hintergrund“ auszuführen und trotzdem den Rechner nutzen zu können.

Entwerfen eines Generals Echtzeit-Computersystem wird auch durch Multitasking ermöglicht. Eine Anzahl verschiedener externer Ereignisse müssen von einem einzigen Prozessorsystem gesteuert werden. In solchen Systemen priorisiert die Interrupt-Behandlung Aufgaben, um sicherzustellen, dass die wichtigsten Aufgaben die meiste Prozessorzeit erhalten.

Multitasking wurde im Laufe der Jahre ziemlich verfeinert. Moderne Betriebssysteme beinhalten Mechanismen zur Priorisierung von Aufgaben und unterstützen auch Aufgaben mit Faden. Threads sind unabhängige Unteraufgaben, die den Speicher mit anderen Threads teilen. Man unterscheidet zwischen Multitasking und Multithreading.

Neue Hardwarefunktionen (wie z SMP, NUMA, Mehrfachverarbeitung) neue Komplexitäten sowie neue Möglichkeiten einführen.

Priorität

Je nach Betriebssystem können Sie die Priorität für verschiedene Aufgaben angeben, die nebeneinander ausgeführt werden können. In weiter entwickelten Systemen wie VMS und MVS kann die Priorität einer Task während der Ausführung geändert werden, in primitiveren Systemen kann diese Priorität nur beim Start festgelegt werden.

Beispiel kooperatives Multitasking

Programm 1: Vorgang A1, A2, A3
Programm 2: B1, B2, B3

Das Planer des Betriebssystems könnte die Aufgaben wie folgt planen:

A1 B1 A2 B2 A3 B3

Aber auch folgendes ist möglich:

A1 A2 B1 B2 B3 A3

Da die Programme unterschiedliche Aufgaben ausführen, beeinflussen sie sich nicht gegenseitig. Anders ist es, wenn ein Programm etwas tun möchte, was ein anderes Programm bereits tut, zum Beispiel an a . schreiben Datei. Wenn zwei Programme in dieselbe Datei schreiben, geht immer eine Version verloren. Die Frage ist, welche Version. Dies sollte daher immer vermieden werden.

Programme werden zunächst so erstellt, als würden sie ohne Unterbrechung ausgeführt. Dann können keine Probleme auftreten.

Für unerfahrene Programmierer kann dies frustrierend sein. Das folgende Beispiel ist ein bekannter Anfängerfehler beim Multitasking:

Ball = grün
Ball ziehen
Warte 10 Sekunden
Kugel = rot
Ball ziehen

Die Ausgabe wäre: Das Programm scheint 10 Sekunden lang im Leerlauf zu sein, dann erscheint eine rote Kugel. Der grüne Ball wird nicht angezeigt.

Um dieses Problem zu lösen, muss das Programm anzeigen, dass es für eine Weile nichts tut. Dies geschieht mit dem Befehl ProcessMessages. Der verbesserte Code lautet nun:

Ball = grün
Ball ziehen
Prozessnachrichten
Warte 10 Sekunden
Kugel = rot
Ball ziehen

Jetzt erscheint die grüne Kugel, nach 10 Sekunden wird die Kugel rot. Während (d. h. unmittelbar danach) des ProcessMessages-Befehls wird nicht nur der Ball gezogen. Das Programm wird angehalten und es wird geprüft, ob weitere Programme angehalten sind. Das am längsten angehaltene Programm wird weiter ausgeführt, bis der ProcessMessages-Befehl erneut angetroffen wird.

Ein Nachteil, bezogen auf das vorherige Beispiel:

Der Ball ist grün und wird nach 10 Sekunden rot. Aber in diesen 10 Sekunden hört alles auf. Sie können klicken und tun, was Sie wollen, das Programm macht nichts, außer 10 Sekunden zu warten. Dies führt dazu, dass einige Programme "hängen". Die Ursache liegt in einem solchen Programmierfehler.

Wie geht das? Statt 10 Sekunden warten könntest du auch sagen:

Warte 5 Sekunden
Prozessnachrichten
Warte 5 Sekunden

Ergebnis: Das Programm hängt für 5 Sekunden. Das Programm wird für einen Moment lebendig, der Bildschirm wird aktualisiert und dann hängt das Programm wieder für fünf Sekunden.