Was ist der Unterschied zwischen Multiprogramming und Multitasking?

10

Ich finde es schwierig, klar zwischen Multiprogramming und Multitasking zu unterscheiden.

Meine Hauptquelle war Wikipedia , aber der WP-Artikel scheint ein wenig im Widerspruch zu einigen weniger seriösen Quellen zu stehen (wie meinem College-Professor).

Während ich WP lese, ist Multiprogramming eine rudimentäre Methode zur Erhöhung des CPU-Durchsatzes durch Kontextwechsel, wenn ein Prozess auf E / A wartet.

Multiprogramming gibt keine Garantie dafür, dass ein Programm rechtzeitig ausgeführt wird. In der Tat kann das allererste Programm sehr gut stundenlang laufen, ohne dass ein Zugriff auf ein Peripheriegerät erforderlich ist.

Cooperative Time-Sharing , synonym mit Cooperative Multitasking , ist eine Verbesserung des Multiprogramming (mit dem es nicht gleichbedeutend ist). Der CPU-Kontext wechselt regelmäßig, um den Eindruck einer gleichzeitigen Ausführung zu erwecken, aber es sind immer noch Prozesse erforderlich, um nachzugeben - und schlecht gestaltete Programme können den Rest des Systems aushungern lassen.

Preemptive Multitasking übernimmt eine aggressivere Kontrolle der Zeitplanung, wobei einigen Prozessen Vorrang vor anderen usw. eingeräumt wird.

  1. Ist diese Übersicht korrekt? Wenn nicht, liegt das daran, dass WP falsch ist oder weil ich WP falsch gelesen habe?
  2. Warum scheinen einige Quellen Multiprogramming und Multitasking miteinander zu verbinden?
jsj
quelle
1
"mit einigen weniger seriösen Quellen (wie meinem College-Professor)" - oh je. Ich hoffe, dass er seriöser ist als Wikipedia, das viele halbherzige Inhalte auf CS enthält.
Raphael
"Multiprogramming" scheint eher ein historischer Ansatz zu sein. Modernes Multitasking hängt zwar mit dem Blockieren von E / A zusammen, ist jedoch nur einer der Faktoren, die zum Jonglieren von Prozessen verwendet werden. Darüber hinaus ist fast jedes moderne Multitasking mit Unterstützung durch die CPU präventiv (die diese Unterstützung vor Jahren nicht immer hatte und gut erzogene Prozesse sollten OS-basierte Wartemethoden aufrufen, die die Zusammenarbeit unterstützten).
VZN
2
@ Raphael, du kannst der ganzen Welt einen Gefallen tun, indem du sie perfekt backst.
vonbrand
1
@vonbrand Ich habe es versucht, aber leider gibt es genug halbherzige Experten, um solche Versuche durchzuführen.
Raphael
@ Raphael, und diese Menge taucht auch hier nicht auf?
vonbrand

Antworten:

9

Sie sind mehr oder weniger synonym. Multiprogramming wird häufiger verwendet, wenn eine CPU beteiligt ist, dh von einem Prozess auf den anderen umgeschaltet wird, Prozesse, die gleichzeitig im Speicher neu gespeichert werden. Es kamen Threads und es wurde nicht mehr zwischen Programmen gewechselt ...

Prozessoren, insbesondere die Intel-Leitung, verfügten seit mindestens dem 80286 über die Mechanismen für echtes Multitasking (Timer-Interrupt, privilegierte Anweisungen). Der im allerersten Mac verwendete M68000 war ein Prozessor mit vollwertigen Multitaking-Kapazitäten. Dies ist keine neuere Entwicklung in Architekturen. Beachten Sie, dass beim allerersten Mal gemeinsam genutzte Systeme die Programme des Benutzers ein- und auslagerten und daher nicht wirklich mehrprogrammiert wurden, da mehrere Programme gleichzeitig im Speicher waren.

Die Idee ist, mehrere Programme gleichzeitig im Speicher zu haben, so dass, wenn eines die CPU liefert (durch Beenden oder Warten), andere bereit sind, die CPU zu verwenden, wodurch die CPU-Auslastung erhöht wird (und wie Sie jeden CPU-Burst betrachten können) Vorbereitung auf die Verwendung von E / A, Erhöhung der Gesamtnutzung). Dies ergibt einen besseren Durchsatz (wichtig in Batch-Systemen).

Mit der Zeitteilung kamen mehrere interaktive Benutzer, die mit dem Computer verbunden waren. Dieselbe Idee: Behalten Sie ihre Programme bei, wechseln Sie jedoch schnell genug zwischen ihnen, damit sie die Illusion haben, "einen Computer für sich zu haben". Benötigt einen Timer, der die CPU unterbricht, um eine Monopolisierung zu vermeiden.

Auf Personalcomputern gab es zumindest anfangs keinen großen Anreiz, mehrere Programme gleichzeitig auszuführen (ein Benutzer vor einem stark eingeschränkten Gerät erwartete nicht viel). Als die Maschinen wuchsen, konnte man dies umgehen und mehrere Programme gleichzeitig zulassen, ohne das Betriebssystem wesentlich zu verändernwar "kooperatives Multitasking", da jedes Programm dem Betriebssystem regelmäßig nachgeben soll, um ein anderes auszuführen. Da das Programm, das dies tut, die volle Kontrolle hat, kann es dies auswählen, wenn nichts von anderen durcheinander gebracht werden kann. Unnötig zu erwähnen, dass ein Programm, das "vergisst", seine Ertragspflicht zu erfüllen, eine interessante Leistungssteigerung erzielt ... frühe Mac-Systeme funktionierten auf diese Weise, und aus den oben genannten Gründen hielt dies nicht allzu lange an. Auf eingebetteten Systemen ohne oder nur mit einem rudimentären Betriebssystem und einer streng kontrollierten Reihe von Programmen ist dies sicherlich eine attraktive Option.

vonbrand
quelle
Der WP-Artikel scheint zu implizieren, dass Multiprogramming im Gegensatz zu Multitasking (Systemen) keinen virtuellen Speicher hat. Historisch mag es wahr sein, aber ist die Definition orthogonal?
Didierc
1
Wir hatten hier in den 70er Jahren ein mehrfach programmiertes IBM S / 370, und es hatte definitiv keinen virtuellen Speicher (ich erinnere mich an eine Festplatte, die nur zum Spoolen verwendet wurde). Mit dem virtuellen Speicher können Sie noch mehr Programme im begrenzten RAM haben (da Sie nur die "am häufigsten verwendeten" Teile zur Hand haben) und auf diese Weise noch besser nutzen. Also ja, ich würde diese als völlig unabhängig betrachten; aber in der heutigen Praxis wird man eins ohne das andere nicht finden. Außer vielleicht in Ihrem WLAN-Router oder Handy ...
vonbrand
Okay. Das habe ich auch gedacht. Eingebettete Systeme haben in der Tat oft keinen angemessenen Speicherschutz, das war mir bewusst. Trotzdem sollte es bei gut erzogenen Programmen kein Problem sein. Das hängt natürlich von den Programmanbietern ab.
Didierc
@idierc orthogonal? du meinst sich gegenseitig ausschließend richtig?
jsj
2

Unterschied zwischen Multitasking und Multiprogramming? Multitasking ist eine logische Erweiterung der Multiprogrammierung. Klassischerweise teilen in einer Umgebung mit mehreren Programmierungen mehr als ein Benutzer die CPU, und die CPU wechselt schnell von einem Benutzer zum anderen, wodurch eine vollständige Transparenz voneinander gewährleistet wird. Beim Multitasking wird der Benutzer durch Programme ersetzt, dh mehr als ein Programm teilt sich die CPU und die CPU wechselt schnell von einem Programm zu einem anderen. Tatsächlich ist eine Software auf der Festplatte ein Programm. Wenn es zur Ausführung in den RAM gebracht wird, wird es als Prozess oder Task bezeichnet, und wenn es sich in der CPU befindet und ausgeführt wird, wird es als Thread bezeichnet. Multiprograaming ist also im Grunde genommen für Mehrbenutzer gedacht, und Multitasking ist für Einzelbenutzer mit mehreren Programmen. Da die meisten modernen Betriebssysteme beide unterstützen, sind sie häufig austauschbar.

Rajesh Amarnath
quelle
0

Es gibt viele Unterschiede zwischen Multitasking und Multiprogramming.

Multitasking führt mehr als eine Aufgabe gleichzeitig aus. Sie hören beispielsweise ein Lied, drucken ein Papier und tippen gleichzeitig auf MS-Word.

Während der Multiprogrammierung verbessern wir bei dieser Art von Betriebssystem die CPU-Auslastung durch Puffern und Spoolen. Bei der sequentiellen Ausführung befindet sich die CPU nach dem Ausführen eines Programms im Leerlauf und lädt das nächste Programm aus dem Hauptspeicher. Während der E / A-Operationen befindet sich die CPU ebenfalls im Leerlauf, die CPU befindet sich ebenfalls im Leerlauf. In einer Multiprogrammierumgebung wechselt die CPU jedoch zum nächsten Programm und verarbeitet es. Dies ist eine Technik, die mit Hilfe des Pufferns und Spoolens verwendet wird.

Vikash Jangra
quelle