Generell ist der Scheduler für die Verteilung der verfügbaren Rechenzeit
auf die einzelnen Prozesse zuständig.
Wie das geschieht und welche Ziele dabei verfolgt werden, hängt maßgeblich
vom Einsatzgebiet des Betriebssystems ab. Linux wird mit seinem Kernel auf Desktopsystemen,
auf Servern, in Server-Clustern oder in HiFi-Komponenten eingesetzt, der Scheduler
verfolgt dabei die folgenden Ziele.
Latenz oder Latenzzeit meint hier die Reaktionsgeschwindigkeit auf ein Ereignis.
Interaktive Prozesse müssen umgehend bearbeitet werden und die Reaktionszeit
auf Tastatur- oder Mauseingaben sollte unterhalb der Wahrnehmungszeit des Anwenders
liegen. Ereignisse von anderen externen Kanälen (Festplatte, Netzwerk,
etc.) sollten aus den genannten Gründen im Abschnitt Resourcen
auch schnellstmöglich bearbeitet werden.
Insgesamt sollte die Latenz möglichst gering sein.
Die Maximierung der Netto-Rechenleistung ist das wichtigste Ziel des Schedulers.
Jeder Wechsel zwischen Prozessen und jeder Durchlauf des Schedulers benötigt
Rechenzeit, die als Overhead die Netto-Rechenleistung verringern.
Einzelne Prozesse sollten also möglichst lange ungestört ablaufen,
um diesen Overhead zu verringen. Die Geschwindigkeit des Scheduler selbst ist
auch ein wesentlicher Beitrag zur Gesamteffizienz und damit zum Durchsatz.
Längere Zeitschlitze für Prozesse gehen jedoch zu Lasten der Latenz.
Jeder Prozess hat die Chance Rechenzeit für sich zu ergattern, irgendwann. Kein Prozess darf verhungern, d.h. zu lange auf einen Platz an der Spitze der Warteschlange zu warten. Prozesse mit langer Wartezeit bekommen eine höhere Prioriät im Laufe der Zeit, damit sie niemals verhungern.
Prozesse sollten auf die zur Verfügung stehenden Prozessoren gleichmässig verteilt werden. Es darf aber kein Prozess zweimal gestartet werden, das würde zu unvorhersagbaren System- und Speicherzuständen führen. Bei der Verteilung ist ausserdem die Architektur der Prozessoren zu berücksichtigen. Bei CPU-internen Caches ist es sinnvoll mehrfach ausgeführte Prozesse oder Prozesse mit geteilten Speicherbereichen auf einem Prozessor zu belassen, weil die Wahrscheinlichkeit das benötigte Daten schon im Cache liegen, sehr hoch ist. So werden Wartezeiten beim externen Speicher vermieden.
Von Echtzeitsystemen spricht man, wenn ein Programm innerhalb einer vorher definierten Zeit vollständig ablaufen kann. Linux hat eine sogenannte weiche Echtzeitunterstützung, die zwar keine Zusicherung über den Endzeitpunkt eines Prozessen machen kann, jedoch die Kriterien im Regelbetrieb mit hoher Wahrscheinlichkeit erfüllen kann. Für Echtzeitprozesse stehen 100 eigene Prioritätsklassen zur Verfügung.