Der Scheduler -- auf deutsch vielleicht: "Fahrplaner" ;-) -- ist ein Teil des OS/2-Kernel, arbeitet also auf der untersten Ebene des Systems (vgl. hierzu auch die Erläuterungen zum WPS-Neustart).
Der Scheduler ist verantwortlich für das Multitasking und Multithreading in OS/2. Weil Sie idR. nur einen Prozessor haben, aber mehrere Programme wenigstens scheinbar gleichzeitig laufen sollen, schaltet der Scheduler viele Dutzend Mal in der Sekunde zwischen den verschiedenen Programmen um, so daß es so aussieht, als liefen die Programme gleichzeitig.
Für das Verständnis der einzelnen Einstellungen auf der Seite "Scheduler" im Objekt "OS/2 Kernel" ist ein grundsätzliches Verständnis der Art und Weise hilfreich, wie OS/2 Prozesse und Threads verwaltet. Ausführliche Hilfe zu den einzelnen Einstellungen erhalten Sie, wenn Sie den "Hilfe"-Knopf auf dieser Seite drücken.
Ein Thread ist die kleinste Verwaltungseinheit für die Umschaltung, die OS/2 zur Verfügung stellt. Ein Programm kann mehrere Threads, muß aber mindestens einen Thread enthalten. Die Bezeichnung "Thread" (auf deutsch etwa "Faden") wurde gewählt, weil innerhalb eines Threads Programminstruktionen sequentiell ausgeführt werden. Zwischen den Threads hingegen ist eine sequentielle Ausführung nicht gesichert, weil zu keinem Zeitpunkt bestimmt ist, welche Instruktion des einen Threads vor einer Instruktion eines anderen Threads ausgeführt wird.
Gut programmierte OS/2-Software benutzt mehrere Threads, um dem Benutzer eine schnellere Antwort auf seine Eingaben und Mausaktionen zu sichern. Wenn Sie zB. einen Befehl ausführen, der idR. länger dauern wird, so wird ein hochwertiges OS/2-Programm für diese Aufgabe einen neuen Thread starten, der diese Aufgabe ausführt. Während dieser Ausführung ist der Haupt-Thread des Programmes, der die Benutzereingaben entgegennimmt, bereits wieder zur Eingabe neuer Befehle bereit.
Schlecht programmierte OS/2-Software benutzt nur einen Thread, so daß während der Bearbeitung einer Aufgabe keine weiteren Benutzereingaben möglich sind. Ein Beispiel für solch schlechte Programmierung stammt ausgerechnet von IBM selbst: wenn Sie in VIEW.EXE "In allen Bibliotheken" nach einem bestimmten Begriff suchen, ist der Rechner komplett blockiert, bis alle Bibliotheken durchsucht sind. Hier wäre Multithreading sehr angebracht gewesen.
Threads können nun verschiedene Prioritäten besitzen. Allgemein gilt, daß ein Thread mit höherer Priorität mehr Prozessorzeit erhält als ein Thread mit geringerer Priotität. Dies gilt jedenfalls dann, wenn mehrere Threads zugleich etwas zu tun haben; wenn Threads gerade "leerlaufen", dh. auf weitere Aufgaben warten, verbrauchen sie keine Prozessorzeit, und die Prioritäten spielen keine Rolle.
OS/2 ermöglicht eine sehr differenzierte Prioritätszuweisung. Es unterscheidet zwischen vier Prioritätsklassen:
Einige Beispiele:
Innerhalb der Klasse "Regular priority" sorgt OS/2 allerdings dafür, daß kein Thread "verhungert", also niemals zur Ausführung gelangt, indem nach einer bestimmten Zeit die Priorität eines niedrigeren Threads automatisch erhöht wird. Diese Zeit wird mit der CONFIG.SYS-Einstellung MAXWAIT festgelegt. OS/2 erhöht außerdem die Priorität eines Threads, wenn Tastatureingaben vorliegen, der Prozeß des Threads im Vordergrund läuft oder auf Geräte zugegriffen wird.
Diese dynamischen Änderungen werden jedenfalls dann vorgenommen,
wenn in der CONFIG.SYS nicht der Befehl PRIORITY=ABSOLUTE steht,
was nicht empfehlenswert ist. (Deswegen finden Sie diese Einstellung auch nicht auf
der Einstellungsseite im Objekt "OS/2 Kernel").