Kooperatives Multitasking - Cooperative multitasking

Kooperatives Multitasking , auch als nicht-präemptives Multitasking bekannt , ist eine Art von Computer-Multitasking, bei der das Betriebssystem niemals einen Kontextwechsel von einem laufenden Prozess zu einem anderen Prozess initiiert . Um mehrere Anwendungen gleichzeitig auszuführen, geben Prozesse stattdessen freiwillig die Kontrolle in regelmäßigen Abständen oder wenn sie inaktiv oder logisch blockiert sind . Diese Art von Multitasking wird als kooperativ bezeichnet, da alle Programme zusammenarbeiten müssen, damit das Scheduling-Schema funktioniert.

In diesem Schema ist der Prozess-Scheduler eines Betriebssystems als kooperativer Scheduler bekannt, dessen Rolle darauf beschränkt ist, die Prozesse zu starten und ihnen die Kontrolle freiwillig zurückzugeben.

Verwendungszweck

Obwohl es in modernen größeren Systemen selten verwendet wird, wird es häufig in eingebetteten Systemen mit eingeschränktem Speicher und auch in bestimmten Anwendungen wie CICS oder dem JES2- Subsystem verwendet. Kooperatives Multitasking war das primäre Scheduling-Schema für 16-Bit-Anwendungen, das von Microsoft Windows vor Windows 95 und Windows NT sowie vom klassischen Mac OS verwendet wurde . Windows 9x verwendete nicht- präemptives Multitasking für 16-Bit-Legacy-Anwendungen, und die PowerPC- Versionen von Mac OS X vor Leopard verwendeten es für klassische Anwendungen. NetWare , ein netzwerkorientiertes Betriebssystem, nutzte kooperatives Multitasking bis NetWare 6.5. Kooperatives Multitasking wird immer noch auf RISC OS- Systemen verwendet.

Kooperatives Multitasking wird mit await in Sprachen wie JavaScript oder Python verwendet , die in ihrer Laufzeit über eine Singlethread-Ereignisschleife verfügen.

Probleme

Da ein kooperatives Multitasking-System darauf angewiesen ist, dass jeder Prozess regelmäßig Zeit an andere Prozesse auf dem System abgibt, kann ein schlecht entworfenes Programm die gesamte CPU-Zeit für sich selbst verbrauchen, entweder durch Ausführen umfangreicher Berechnungen oder durch eifriges Warten ; beides würde dazu führen, dass das ganze System hängen bleibt . In einer Serverumgebung stellt dies eine Gefahr dar, die die gesamte Umgebung inakzeptabel anfällig macht.

Im Gegensatz dazu unterbricht präemptives Multitasking Anwendungen und gibt anderen Prozessen außerhalb der Kontrolle der Anwendung die Kontrolle.

Die Möglichkeit eines Systemabsturzes kann durch die Verwendung eines Watchdog-Timers gemildert werden , der häufig in Hardware implementiert ist; dies ruft normalerweise einen Hardware-Reset auf .

Kooperatives Multitasking ermöglicht eine viel einfachere Implementierung von Anwendungen, da ihre Ausführung nie unerwartet vom Prozess-Scheduler unterbrochen wird; Beispielsweise müssen verschiedene Funktionen innerhalb der Anwendung nicht wiedereintretend sein .

Siehe auch

Verweise