Scheduling allgemein

Aufgabe

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.

Ziele

Latenz

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.

Durchsatz

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.

Fairness

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.

Mehrere Prozessoren

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.

Echtzeit

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.