Bei der nicht-präventiven Planung kann ein Prozess, sobald er mit der Ausführung beginnt, nicht von einem anderen Prozess vorgezogen werden, bevor er seine Ausführung abgeschlossen hat oder die CPU freiwillig freigibt.
So funktionieren nicht präemptive Algorithmen:
1. Prozessauswahl:
– Der Planer wählt den nächsten auszuführenden Prozess basierend auf Planungsrichtlinien wie „Wer zuerst kommt, mahlt zuerst“ (FCFS), „Kürzester Job zuerst“ (SJF) oder einem anderen Planungsalgorithmus aus.
2. Unterbrechungsfreie Ausführung:
- Sobald die Ausführung eines Prozesses beginnt, kann sie nicht durch einen anderen Prozess unterbrochen werden. Dies bedeutet, dass der ausgewählte Prozess so lange weiter ausgeführt wird, bis er seine Ausführung abschließt oder freiwillig die CPU aufgibt (z. B. durch Ausführen einer E/A-Operation).
3. Kein Vorkaufsrecht:
- Während der aktuelle Prozess ausgeführt wird, kann ihm kein anderer Prozess die CPU entziehen. Dadurch wird sichergestellt, dass Prozesse abgeschlossen werden, ohne dass sie durch Prozesse mit höherer Priorität unterbrochen werden.
4. Abschluss:
– Der Prozess führt seine Anweisungen weiter aus, bis er seine Ausführung beendet oder einen Zustand erreicht, in dem er blockiert ist (Warten auf E/A oder eine Ressource). Sobald der Prozess abgeschlossen ist, steht die CPU für die Planung des nächsten Prozesses zur Verfügung.
Nicht präemptive Planungsalgorithmen sind einfacher zu implementieren als präemptive, da kein häufiger Kontextwechsel erforderlich ist. Sie können jedoch zu einer geringeren Systemeffizienz und einer suboptimalen Leistung führen, da Prozesse mit höherer Priorität möglicherweise darauf warten müssen, dass Prozesse mit niedrigerer Priorität ihre Ausführung abschließen.
Beispiele für nicht präemptive Planungsalgorithmen sind:
- Wer zuerst kommt, mahlt zuerst (FCFS): Prozesse werden in der Reihenfolge ihres Eintreffens ausgeführt, ohne Rücksicht auf ihre Priorität oder Ressourcenanforderungen.
- Shortest Job First (SJF) ohne Vorkaufsrecht: Dieser Algorithmus wählt den Prozess mit der kürzesten geschätzten Ausführungszeit für die nächste Ausführung aus. Sobald der Prozess jedoch mit der Ausführung beginnt, kann ihm kein anderer Prozess zuvorkommen, selbst wenn dieser später mit einer kürzeren geschätzten Ausführungszeit eintrifft.