Kontextschalter
Der Scheduler verwaltet eine Warteschlange mit ausführbaren Threads für jede Prioritätsstufe. Diese werden als bereite Threadsbezeichnet. Wenn ein Prozessor verfügbar wird, führt das System einen Kontextschalteraus. Die Schritte in einem Kontextwechsel sind:
- Speichern Sie den Kontext des Threads, der gerade ausgeführt wurde.
- Platzieren Sie den Thread, der die Ausführung soeben am Ende der Warteschlange für die Priorität abgeschlossen hat.
- Suchen Sie die Warteschlange mit der höchsten Priorität, die bereite Threads enthält.
- Entfernen Sie den Thread am Kopf der Warteschlange, laden Sie den Kontext, und führen Sie ihn aus.
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.