Scheduler
Der Scheduler (engl.: Disponent, Planer) ist ein elementarer Teil von Betriebssystemen, die Multitasking unterstützen. Werden auf einem Computer mehrere Prozesse gleichzeitig ausgeführt, so muss das Betriebssystem die vorhandenen Ressourcen auf die verschiedenen Prozesse aufteilen. Diese Aufteilung sollte so optimal wie möglich erfolgen, wobei allerdings unterschiedliche Ziele verfolgt werden können:
- Auslastung der Betriebsmittel
- Jedes vorhandene Betriebsmittel (wie z.B. CPU oder Festplatte) sollte zu jeder Zeit optimal ausgelastet sein, d.h. verwendet werden. Es sollte nicht vorkommen, dass die CPU sich im Leerlauf befindet, nur weil ein Prozess auf Daten von der Festplatte wartet.
- Schnelle Antwortzeiten
- Die Wartezeiten des Benutzers (oder anderer Systeme) sollten minimiert werden. Prozesse, die eine Interaktion mit dem Benutzer erfordern, sollten also bevorzugt werden vor solchen, die im Hintergrund stattfinden können.
- Durchsatz
- Die Anzahl beendeter Aufgaben pro Zeiteinheit sollte maximiert werden. Dies ergibt eine ähnliche Strategie wie die Auslastung, betrachtet aber mehr das tatsächliche Ergebnis.
Das größte Problem des Schedulers ist die Tatsache, dass die benötigten Betriebsmittel für die einzelnen Prozesse nicht im Vorfeld bekannt sind. Es lässt sich also im Allgemeinen keine optimale Planung erstellen, sondern der Scheduler muss dynamisch auf geänderte Anforderungen reagieren. Dabei können (abhänging vom Scheduler) verschiedene Zuteilungsstrategien zum Einsatz kommen:
- Eingangsreihenfolge (FCFS: first-come, first-serve)
- Hierbei werden alle Prozesse in der Reihenfolge ihres Eingangs bearbeitet. Dabei werden einzelne Prozesse immer komplett verarbeitet, bevor der nächste Prozess an die Reihe kommt. Diese Strategie erzielt eine gute Auslastung bezüglich der CPU, allerdings nicht bezüglich Ressourcen, die längere Zeit für eine Anforderung benötigen können, wie z.B. Ein-/Ausgabe oder Massenspeicher.
- Zeitscheibenverfahren (siehe Round_Robin)
- Prioritätsbasiertes Verfahren
- Bei dieser Strategie wird jedem Prozess eine Priorität zugeordnet. Die Abarbeitung erfolgt dann in der Reihenfolge der Prioritäten. Da es sich dann (innerhalb der gleichen Prioritäten) um eine Strategie der Eingangsreihenfolge handelt, wird diesem Verfahren meistens noch ein Zeitscheibenverfahren untergeordnet, um trotzdem eine schnelle Antwortzeit zu ermöglichen. Zusätzlich wird in den verbreiteten Schedulern mit dynamischen Prioritäten gearbeitet, wobei sich die Priorität eines Prozesses mit der Zeit erhöht, damit auch niedrig priorisierte Prozesse irgendwann bearbeitet werden und nicht ständig von höher priorisierten Prozessen verdrängt werden.
- Terminabhängige Ablaufplanung
- Diese Strategie kommt hauptsächlich in Echtzeitsystem vor. Dabei werden die Prozesse bevorzugt verarbeitet, die als erstes beendet sein müssen. Damit ist es möglich, eine definierte Antwortzeit für bestimmte Prozesse zu garantieren.