In einem User-Kernel-Thread kann immer nur eine Task den Prozessor nutzen, also im Zustand running sein (laufen). Alle anderen Tasks sind entweder lauffähig, oder sie warten auf ein externes Ereignis wie z. B. das Ende einer I/O-Operation und eine entsprechende Meldung, um wieder lauffähig zu werden.
Wenn die laufende Task den Prozessor nicht mehr benötigt, löst sie einen Task-Wechsel aus (kooperativer Task-Wechsel), und die nächste Task im selben User-Kernel-Thread kann den Prozessor nutzen.
Die folgende Abbildung zeigt auf vereinfachte Weise, wie drei Tasks in einem User-Kernel-Thread abwechselnd laufen.
Zunächst läuft Task 1. Task 2 und Task 3 sind lauffähig.
...
1. Task 1 schickt eine I/O-Anforderung und versetzt sich in einen wartenden Zustand.
Task 2 ist die nächste lauffähige Task; sie setzt ihre Ausführung fort.
2. Task 2 schickt eine I/O-Anforderung und versetzt sich in einen wartenden Zustand.
Task 3 ist die nächste lauffähige Task; sie setzt ihre Ausführung fort.
3. Die I/O-Operation von Task 1 ist beendet. Task 1 erhält eine entsprechende Meldung und ist wieder lauffähig.
4. Task 3 schickt eine I/O-Anforderung und versetzt sich in einen wartenden Zustand.
Task 1 ist die nächste lauffähige Task; sie setzt ihre Ausführung fort.
5. Die I/O-Operation von Task 2 ist beendet. Task 2 erhält eine entsprechende Meldung und ist wieder lauffähig.
6. Task 1 ist beendet.
Task 2 ist die nächste lauffähige Task; sie setzt ihre Ausführung fort.
Siehe auch: