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) sollten zu jeder Zeit optimal ausgelastet, d.h. verwendet werden. Es sollte nicht vorkommen, dass die CPU sich im Leerlauf befindet, nur weil in 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 kommen (abhänging vom Scheduler) verschiedene Zuteilungsstrategien zum Einsazt:
- Eingangsreihenfolge (FCFS: first-come, first-serve)
- Hierbei werden alle Prozesse in der Reihenfolge ihrers 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 (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) und 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 nidrig 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.