Freigeben über


Kontextschalter

Der Scheduler verwaltet separate Warteschlangen von ausführbaren Threads für jede Prioritätsebene. Diese Threads werden als fertige Threads bezeichnet. Wenn ein Prozessor verfügbar wird, führt das System einen Kontextschalter aus. Die Schritte in einem Kontextwechsel sind:

  1. Speichern Sie den Kontext des Threads, der vom Prozessor vorgebeutet oder freiwillig zurückgegeben wurde.
  2. Wenn der Thread in einem bereiten Zustand verbleibt, platzieren Sie ihn am Ende der Warteschlange für die Prioritätsebene.
  3. Suchen Sie die Warteschlange mit der höchsten Priorität, die bereite Threads enthält.
  4. Entfernen Sie den Thread am Kopf der Warteschlange, stellen Sie den Kontext wieder her, und setzen Sie die Ausführung fort.

Die folgenden Threadsklassen sind nicht bereit.

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

Bis Threads, die angehalten oder blockiert werden, zur Ausführung bereit sind, weist der Scheduler ihnen unabhängig von ihrer Priorität keine Prozessorzeit zu.

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

  • Das Zeitsegment ist abgelaufen.
  • Ein Thread mit höherer Priorität ist bereit für die Ausführung.
  • Ein ausgeführter Thread muss warten.

Wenn ein ausgeführter Thread warten muss, wird der Rest des Zeitsegments angibt.