Betriebssysteme (11) - Prozesse und Prozesszustände
Wir wollen uns in diesem Abschnitt damit beschäftigen, wie das Betriebssystem die Ausführung von Programmen ermöglicht und warum wir das Gefühl haben, dass mehrere Prozesse quasi "parallel" laufen.
Ein Programm, das sich gerade in Ausführung befindet, heißt Prozess. Zum Prozess gehört aber nicht nur ein Programmstück, sondern auch der Prozesskontext bestehend aus
- den Registerinhalten
- Befehlszähler
- Grenzen des Adressraums
- Prozessnummer
- Priorität
und anderen Informationen. Diese Angaben werden im Prozesskontrollblock (process control block = PCB) zusammengefasst. Dort steht auch vermerkt, ob der Prozess im System- oder im Benutzermodus arbeitet.
Prozesszustände
Ein Prozess wird zu irgendeinem Zeitpunkt erzeugt z. B. durch einen anderen Prozess und zu einem späteren Zeitpunkt beendet, wenn er mit der Bearbeitung fertig ist. Dazwischen kann er mehrfach zwischen drei Zuständen wechseln, die in Folgender Abbildung dargestellt sind.
Nach der Erzeugung eines Prozesses erhält er vom Betriebssystem die benötigte Ressource wie z. B. einen Speicherbereich, den Prozesskontext und den PCB zugeteilt. Nun ist der Prozess bereit für die Bearbeitung und der Prozess geht in den Zustand bereit. Bei den Einprozessorsystemen ist zu jedem Zeitpunkt genau ein Prozess im Zustand rechnend. Bei einem Mehrprozessorsystem können mehrere Prozesse im Zustand rechnend sein. Jeder andere existierende Prozess ist entweder bereit und bewirbt sich mit den übrigen bereiten Prozessen um die Zuteilung der CPU, oder er ist blockiert und wartet darauf, dass seine Ein-/Ausgabeanforderung erledigt wird oder ein bestimmtes Ereignis eintritt.
Wenn zum Beispiel ein laufendes Benutzerprogramm auf eine Eingabe von der Tastatur wartet, führt es einen Systemaufruf durch. Ohne die Ein-/Ausgabedaten kann der Benutzerprozess nicht weiterarbeiten; er wird deshalb vom Betriebssystem vom Zustand rechnend in den Zustand blockiert versetzt.
Danach ist die CPU frei, um andere Prozesse zu bearbeiten. Wenn dann die Daten bereitstehen und der Tastaturcontroller eine Unterbrechung auslöst, wird der Benutzerprozess in den Zustand bereit gebracht, denn seine Arbeit kann nun weitergehen. Das heißt aber nicht, dass er sofort die CPU zugeteilt bekommt: Welcher der bereiten Prozesse als nächster rechnen darf, entscheidet der CPU-Scheduler. Der Scheduler kann seine Entscheidungen nach unterschiedlichen Strategien treffen.
Ein rechnender Prozess kann auch durch einen Systemaufruf mitteilen, dass er auf ein bestimmtes Ereignis warten will; er wird dann blockiert und kommt in eine spezielle Warteschlange, in der möglicherweise noch andere blockierte Prozesse stehen, die auf dasselbe Ereignis warten. Wenn dann dieses Ereignis eintritt, kann der Prozess, welcher es auslöst, ein Signal abschicken. Dieses Signal bewirkt, dass alle Prozesse aus der Warteschlange wieder in den Zustand bereit versetzt werden.
Nachfolgend werden zwei bekannte Schedulingstrategien erwähnt:
Bei FCFS (first-come, first-served) darf zuerst rechnen, wer zuerst kommt; Dieses Verfahren ist leicht zu implementieren; es genügt, eine Warteschlange (queue) einzurichten, bei der immer der erste Prozess als nächster an die Reihe kommt und neu eintreffende bereite Prozesse sich hinten anstellen. Der Nachteil: Ein früh eintreffender Prozess mit hohem Rechenzeitbedarf oder einer Endlosschleife hält alle späteren Prozesse auf
Das Verfahren SJF (shortest job first) kann den Nachteil von FCFS vermeiden; hier werden die Prozesse im Zustand bereit in der Reihenfolge aufsteigenden Rechenzeitbedarfs bearbeitet. Voraussetzung für eine sinnvolle Anwendung von SJF ist, dass sich die benötigte Rechenzeit (bis zur nächsten Unterbrechung) aus Erfahrungswerten gut vorhersagen lässt
Quelle
Imran Qureshi. CPU Scheduling Algorithms: A Survey. In: Advanced Networking and Applications, Volume 5, Issue 4. 2014. ISSN : 0975-0290
Congratulations @ozelot47! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP
To support your work, I also upvoted your post!
Do not miss the last post from @steemitboard:
This post has been voted on by the SteemSTEM curation team and voting trail. It is elligible for support from @curie and @minnowbooster.
If you appreciate the work we are doing, then consider supporting our witness @stem.witness. Additional witness support to the curie witness would be appreciated as well.
For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!
Please consider using the steemstem.io app and/or including @steemstem in the list of beneficiaries of this post. This could yield a stronger support from SteemSTEM.