Scheduler

Aus Android Wiki
Zur Navigation springen Zur Suche springen

Ein Scheduler ist eine Steuerlogik, die die zeitliche Ausführung von gleichzeitigen Prozessen, bzw. den Zugriff auf bestimmte Systemressourcen, regelt. Die Logik steuert, welcher Prozess die zur Verfügung stehende Leistung (bspw. die Rechenleistung der CPU) wann und für wie lange verwenden darf. Ein Scheduler kann zum Beispiel den Zugriff auf eine Festplatte (I/O Scheduler) oder auf die CPU regeln, bei letzterem unterscheidet man zusätzlich zwischen zwei Arten: unterbrechende und nicht unterbrechende.[1][2]

Beim unterbrechenden Scheduler wird einem Prozess nicht nur die CPU-Leistung zugewiesen, sondern auch mitgeteilt, wie lange diese beansprucht werden kann. Nach Ablauf dieser Zeit entzieht der Scheduler diesem Prozess den Zugriff auf die CPU und vergibt ihn neu an den nächsten Prozess. Im Gegensatz dazu weist der nicht unterbrechende Scheduler der CPU einen Prozess zu und belässt diese Zuweisung, bis der Prozess die CPU selbstständig wieder freigibt.

Android's I/O Scheduler[Bearbeiten | Quelltext bearbeiten]

Der I/O Scheduler steuert den Schreib- sowie Lesezugriff einzelner Prozesse auf den verbauten Speicher (i.d.R. ein Flash-Speicher). Dabei kann dieser die Abarbeitung der in der Warteschlange befindlichen Lese- und Schreibvorgänge verschieden handhaben und bspw. die Lesevorgänge priorisieren und Schreibvorgänge nach hinten stellen oder umgekehrt. Wie die Schreib- und Lesevorgänge abgearbeitet werden kann, je nach Nutzung des Speichers, signifikante Geschwindigkeitseinbußen oder -vorteile haben.[3]

Ändern des I/O Scheduler[Bearbeiten | Quelltext bearbeiten]

Geändert werden kann der I/O Scheduler bspw. durch das Flashen eines Custom-Kernels; einige Apps können ihn zudem auch ändern, ohne einen neuen Kernel zu flashen, benötigen zumeist aber auch Root-Zugriff.

Verfügbare I/O Scheduler[Bearbeiten | Quelltext bearbeiten]

Wie viele und welche Scheduler im Kernel enthalten sind, und dadurch bspw. durch eine App-Lösung gewählt werden können, hängt stark vom Entwickler des Kernels ab. I.d.R. sind die vom Hersteller des Gerätes installierten Kernel in dieser Hinsicht sparsam bestückt.

Noop[Bearbeiten | Quelltext bearbeiten]

Der Noop Scheduler (no operation, deutsch etwa: keine Funktion)[4] ist prinzipiell recht einfach, für nicht-mechanische Festplatten (wie Flashspeicher) allerdings sehr effektiv. Er reiht die wartenden Schreib- und Lesevorgänge in eine einfache Warteschlange nach dem FIFO-Prinzip (First in - First Out) ein. Generell werden Schreib- und Lesevorgänge somit in der Reihenfolge ausgeführt, in welcher sie in die Warteschlange hinein gekommen sind.[5]

Anticipatory[Bearbeiten | Quelltext bearbeiten]

Aufgrund der Arbeitsweise dieses Schedulers sind Lesevorgänge vergleichsweise langsam. Nach einem abgeschlossenen Lesevorgang geht dieser Scheduler nicht, wie andere, in der Warteschlange weiter und führt den nächsten Lesevorgang aus, sondern verweilt eine kurze Zeit (einige Millisekunden) in der Annahme, dass der gleiche Prozess einen weiteren Lesevorgang ausführen wird. Durch diese Wartezeit verringert sich die Lesegeschwindigkeit bei vielen verschiedenen Prozessen entsprechend, bei vielen Vorgängen des gleichen Prozesses, kann er allerdings Vorteile bringen. Für ein Endgerät, wie einem Android Smartphone, wird dieser Scheduler i.d.R. aufgrund seiner Nachteile nicht verwendet.

CFQ[Bearbeiten | Quelltext bearbeiten]

Der Completely Fair Queuing (kurz CFQ) ist ein ursprünglich für den Linuxkernel entwickelter Scheduler, welcher die Einteilung von Prozessen in bestimmten Klassen ermöglicht:[6]

  • RT (Real-Time): Prozesse in dieser Klasse erhalten immer bevorzugt und zuerst Zugriff auf das Gerät, weshalb diese Klasse i.d.R. nur durch den Root-Benutzer gesetzt werden kann, um zu verhindern, dass durch das vermehrte Setzen dieser Klasse das Gerät ständig ausgelastet ist und andere Prozesse keinen Zugriff bekommen.
  • BE (Best-Effort): Erhalten immer dann Zugriff, wenn die Warteschlange RT abgearbeitet ist.

Zudem gibt es noch die Idel Klasse; Prozesse daraus werden dann ausgeführt, wenn BE und RT abgearbeitet sind. Bei hoher Auslastung kann es allerdings dazu kommen, dass diese Prozesse eine Zeit lang keinen Zugriff auf das Gerät erhalten. BE und RT haben intern wiederum 8 Prioritätslevel, die die Prozesse innerhalb der Klasse einordnen, wobei 7 die geringste Stufe ist.

Der Scheduler arbeitet nun nacheinander die einzelnen Warteschlangen nach ihrer Priorität ab, wobei die Zugriffszeit auf das Speichermedium von der Priorität abhängt.

Deadline[Bearbeiten | Quelltext bearbeiten]

Dieser Scheduler versucht eine genaue Start-Zeit für einen Schreib- oder Lesevorgang zu garantieren. Hierfür erhält jeder Prozess eine Ablaufzeit, bis zu welcher der Vorgang abgeschlossen sein soll, wodurch sich errechnen lässt, zu welcher Zeit, welcher Prozess an der Reihe ist. Hierfür verwaltet der Scheduler zwei verschiedene Warteschlangen, jeweils eine für Lese- und Schreibvorgänge. Lesevorgänge werden dabei priorisiert[7], da die verbundenen Prozesse i.d.R. auf diese warten müssen, um weitere Aufgaben ausführen zu können.

VR[Bearbeiten | Quelltext bearbeiten]

In diesem Artikel oder Abschnitt fehlen folgende wichtige Informationen: Was macht dieser? --Florian (Diskussion) 22:33, 3. Mär. 2015 (CET)
Hilf DroidWiki, sichte die Diskussion und recherchiere in deinen Quellen zu dem Thema Scheduler und füge die Informationen ein, aber bitte kopiere keine urheberrechtlich geschützten Inhalt in diesen Artikel.

Die Hauptautoren wurden noch nicht informiert. Bitte benachrichtige sie!


Simple[Bearbeiten | Quelltext bearbeiten]

Wie der Name schon sagt, ist dieser Scheduler extrem einfach gehalten. Er sortiert die Schreib- und Lesevorgänge nicht, sondern führt sie nacheinander aus

Budget Fair Queueing[Bearbeiten | Quelltext bearbeiten]

Der Budget Fair Queueing (kurz BFQ) Scheduler basiert grundsätzlich auf dem CFQ, doch anstelle eines bestimmten Zeitkorridors, die ein Prozess den Zugriff auf ein Speichergerät hat, verteilt dieser ein Budget an Speichersektoren, die dieser Prozess verwenden darf. Ist dieser aufgebraucht, so wird ihm der Zugriff entzogen.

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]