Kontextwechsel
# Kontextwechsel

Kontextwechsel oder Taskswitching (englisch context switch) nennt man den Vorgang in einem Betriebssystem, bei dem die Bearbeitung des aktuellen Prozesses (oder auch Threads, Tasks oder Programms) unterbrochen wird (z. B. nach einer festgelegten Zeitspanne durch einen Timer-Interrupt oder bei Systemaufrufen) und zu einer anderen Routine gewechselt wird. Dabei wird der Kontext (im Wesentlichen die Prozessor-Register) des aktuellen Prozesses/Threads/Tasks gesichert und der Kontext des neuen wiederhergestellt. Durch diesen Vorgang wird Multitasking ermöglicht, da sich so mehrere Prozesse im Zeit-Multiplexverfahren abwechselnd auf einem einzelnen CPU-Kern ausführen lassen. Beim Benutzer entsteht der Eindruck, mehrere Prozesse würden tatsächlich gleichzeitig ausgeführt werden.
Kontextwechsel sind meist zeitintensiv und daher wird das Design von Betriebssystemen dahingehend optimiert, möglichst wenig Kontextwechsel durchzuführen. Das Wechseln von einem Prozess zum nächsten erfordert einen gewissen administrativen Aufwand, etwa das Speichern und Laden von Registern und internen Tabellen zur Verwaltung der Prozesse.
Die Strategie für den Kontextwechsel wird vom Scheduler festgelegt, während die Durchführung selbst vom Dispatcher vorgenommen wird.

## Auslöser für Kontextwechsel
### Multitasking

Einer der wichtigsten Auslöser für Kontextwechsel ist das Multitasking. Dabei kümmert sich ein Scheduler darum, dass alle im System laufenden Prozesse ihren Anteil an der gesamten Prozessorzeit bekommen. Dieser Kontextwechsel wird dabei entweder vom Prozess selbst ausgelöst, etwa indem er auf den Abschluss von E/A-Operationen wartet. In einem präemptiven Multitasking-System wird auch dann ein Kontextwechsel ausgelöst, wenn der Prozess noch lauffähig ist, aber der Scheduler entscheidet, dass ein anderer Prozess an die Reihe kommt.

### Interrupts

Bei einem Interrupt handelt es sich um Unterbrechungen der normalen Programmausführung etwa durch ein von der Hardware ausgelöstes Ereignis. Wird ein Interrupt ausgelöst, sichern die meisten CPUs automatisch die wichtigsten kontextuellen Informationen (zumindest so viel, dass nach dem Interrupt wieder zum eigentlichen Programmfluss zurückgesprungen werden kann). In der Unterbrechungsroutine können, wenn nötig, noch weitere Informationen gesichert werden, meistens wird aber nur ein minimaler Kontext erzeugt, um wertvolle Ressourcen zu sparen und schneller wieder mit dem eigentlichen Programm fortfahren zu können.