Wenn ein neuer Thread ausgeführt wird, werden seine Register aus dem gespeicherten Kontext geladen, genau wie ein Thread, der bereits ausgeführt wurde. Der Thread, der den Thread erstellt, kann die Kontextstruktur des neuen Threads beliebig füllen, bevor er sie der Tabelle der laufenden Threads des Betriebssystems hinzufügt.
Grundsätzlich funktioniert es so:
Eine neue Aufgabenstruktur wird zugewiesen.
Die Felder in dieser neuen Aufgabenstruktur werden wie gewünscht ausgefüllt. Dazu gehören Register, der Stapelzeiger usw.
Die Aufgabenstruktur wird als betriebsbereit markiert und zur Liste der Aufgaben des Schedulers hinzugefügt.
Der Scheduler entscheidet sich für die Zeitplanung des neuen Threads, lädt seinen Kontext aus der Aufgabenstruktur und wechselt zu ihm.
Der Thread hat nun alle Register, Stack und Anweisungszeiger, die der erzeugende Thread für ihn gefüllt hat.