Der Scheduler im Linux Kernel 2.4 lief sehr lange und sehr stabil in den unterschiedlichsten
Aufgabenbereichen und ist ein relativ simpler Algorithmus, der entsprechend
robust ist.
Der Hauptunterschied zum Scheduler im Kernel 2.6 liegt in der Verwaltung der
Runqueue. Hier gibt es Systemweit nur eine solche Runqueue mit einer verketteten
Liste, die alle wartenden Prozesse enthält. Zeitkontingente werden vom
Scheduler für alle Prozesse zur gleichen Zeit berechnet, was abhängig
von der Anzahl der Prozesse ist. Dadurch ist die Laufzeitkomplexität von
schedule() O(n)
Erst wenn alle Prozesse ihre Zeitkontingente verbraucht haben, werden neue berechnet
und es beginnt eine neue Epoche.
Zeitkontingente sind per default 200ms lang, also die hälfte des 2.6er
Schedulers.
Prozesse die ihre Zeit nicht rechnend verbraucht haben, bekommen auch Boni in
der nächsten Epoche. Sanktionen für CPU-Fresser gibt es jedoch keine.
Der nachfolgende Prozess wird berechnet, indem für jeden Prozess in der
Runqueue eine goodness() Funktion ausgeführt wird und derjenige Prozess
mit dem höchsten Rückgabewert kommt zur Ausführung. Auch diese
Berechnung ist O(n) komplex.