Kontextwechsel

Der Scheduler verwaltet eine Warteschlange mit ausführbaren Threads für jede Prioritätsstufe. Diese werden als bereite Threads bezeichnet. Wenn ein Prozessor verfügbar wird, führt das System einen Kontextwechsel aus. Die Schritte in einem Kontextwechsel sind:

  1. Speichern Sie den Kontext des Threads, der gerade die Ausführung abgeschlossen hat.
  2. Platzieren Sie den Thread, der gerade die Ausführung abgeschlossen hat, am Ende der Warteschlange für seine Priorität.
  3. Suchen Sie die Warteschlange mit der höchsten Priorität, die bereite Threads enthält.
  4. Entfernen Sie den Thread am Anfang der Warteschlange, laden Sie den Kontext, und führen Sie ihn aus.

Die folgenden Klassen von Threads sind keine bereiten Threads.

  • Threads, die mit dem flag "CREATE_SUSPENDED" erstellt wurden
  • Threads, die während der Ausführung mit der SuspendThread - oder SwitchToThread-Funktion angehalten werden
  • Threads, die auf ein Synchronisierungsobjekt oder eine Synchronisierungseingabe warten.

Bis angehaltene oder blockierte Threads zur Ausführung bereit sind, weist der Planer ihnen unabhängig von ihrer Priorität keine Prozessorzeit zu.

Die häufigsten Gründe für einen Kontextwechsel sind:

  • Der Zeitslice ist abgelaufen.
  • Ein Thread mit einer höheren Priorität ist bereit für die Ausführung.
  • Ein ausgeführter Thread muss warten.

Wenn ein ausgeführter Thread warten muss, gibt er den Rest seines Zeitslices auf.