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 fr 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.

Fr 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. Ausfhrliche Hilfe zu den einzelnen Einstellungen erhalten Sie, wenn Sie den "Hilfe"-Knopf auf dieser Seite drcken.

Ein Thread ist die kleinste Verwaltungseinheit fr die Umschaltung, die OS/2 zur Verfgung 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 ausgefhrt werden. Zwischen den Threads hingegen ist eine sequentielle Ausfhrung nicht gesichert, weil zu keinem Zeitpunkt bestimmt ist, welche Instruktion des einen Threads vor einer Instruktion eines anderen Threads ausgefhrt 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 ausfhren, der idR. l„nger dauern wird, so wird ein hochwertiges OS/2-Programm fr diese Aufgabe einen neuen Thread starten, der diese Aufgabe ausfhrt. W„hrend dieser Ausfhrung 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 fr 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:

  1. "Idle time priority" ist die geringste Priorit„tsklasse. Solch ein Thread bekommt nur dann Prozessorzeit zugewiesen, wenn keine Threads mit h”heren Priorit„tsklassen Prozessorzeit ben”tigen, dh. nur dann, wenn diese "leerlaufen". Ein Beispiel hierfr ist der XFolder-"Worker"-Thread, der zB. Buch fhrt ber die aktiven WPS-Objekte. Dies ist ziemlich zeitintensiv, aber nicht zeitkritisch: also wird es ausgefhrt, wenn der Computer nichts anderes zu tun hat.
  2. "Regular priority" ist die normale Priorit„tsklasse. Die meisten Threads laufen mit dieser Klasse. OS/2 vergibt diese Klasse fr neue Threads als Standard, wenn nichts anderes eingestellt wird. Zwischen Threads dieser Klasse „ndert OS/2 dynamisch die Priorit„tsebenen (dazu sogleich), um keinen dieser Threads auf Dauer "verhungern" zu lassen.
  3. "Fixed-high priority" ist die zweith”chste Priorit„tsklasse fr Threads, die Daten fr "regul„re" Threads vorbereiten mssen. Diese sollen vorrangig zur Ausfhrung kommen und nicht durch die dynamischen Priorit„ts„nderungen fr "regul„re" Threads beeinfluát werden, was zB. h„ufig fr Nachrichtenverteiler angewandt wird.
  4. "Time-critical priority" ist die h”chste Priorit„tsklasse fr Threads, die unmittelbar zur Ausfhrung kommen mssen, wenn sie etwas zu tun haben. Ein solcher Thread erh„lt sofort Prozessorzeit, wenn n”tig, und wird nicht unterbrochen, bis er mit seiner Aufgabe fertig ist. Solche Threads sind idR. mit der Beantwortung von zeitkritischen Nachrichten besch„ftigt, wie zB. Netzwerk- und andere Kommunikationssoftware.
Innerhalb jeder Priorit„tsklasse kann schlieálich noch die Priorit„tsebene festgelegt werden. Dies ist ein Wert von -31 bis +31, der den Vorrang eines Threads innerhalb einer Priorit„tsklasse festlegt.

Einige Beispiele:

Ein Prozeá ist demgegenber eine OS/2-Anwendung, die in den Speicher geladen wurde. Jeder Prozeá muá mindestens aus einem Thread bestehen. Jeder Prozeá enth„lt gemeinsame Daten sowie Zugriff auf Systemressourcen. Prozesse werden gegeneinander vor ungltigen Speicherzugriffen geschtzt, indem OS/2 ihnen den Zugriff auf Speicherbereiche verweigert, die ihnen nicht geh”ren ("Speicherschutz"). Mehrere Threads innerhalb eines Prozesses k”nnen jedoch auf den Speicher des Prozesses zugreifen, weil der Speicher pro Prozeá verwaltet wird. Gleiches gilt fr andere Systemressourcen wie zB. ge”ffnete Dateien.