# Commutazione di contesto

La commutazione di contesto (in inglese context switch), in informatica, indica una particolare operazione del sistema operativo che conserva lo stato del processo o thread, in modo da poter essere ripreso in un altro momento. Questa attività permette a più processi di condividere la CPU, ed è anche una caratteristica essenziale per i sistemi operativi multitasking.

## Significato concettuale

Il significato varia dal tipo di attività nel quale viene eseguito. Nel multitasking, si fa riferimento a un processo che salva lo stato di un programma in esecuzione per dare spazio a un altro programma ed essere eseguito, dando la disponibilità delle risorse necessarie al nuovo programma.
Un altro significato del context switch è quello dovuto agli interrupt, ovvero quando un processo richiede l'uso di un disco o di attività di I/O, si richiede alla CPU di fermare il processo in esecuzione, salvare il suo stato con tutte le informazioni dei registri e altre varie informazioni, e di occupare la CPU nel soddisfare la richiesta di interrupt.
Inoltre ci sono alcuni sistemi operativi che richiedono l'uso del context switch per muovere processi tra le due modalità user mode e kernel mode.
Infine tale processo può avere degli impatti negativi sulle performance del sistema.

## Descrizione
### Fasi del processo

Prima di tutto la commutazione viene causata da un'interruzione che forza il sistema a sospendere il proprio lavoro per eseguire una routine del kernel: il sistema deve salvare il contesto del processo corrente. Il contesto di un processo in esecuzione è rappresentato da vari dati, tra cui il program counter e il contenuto dei registri generali o lo stato del processo, in modo che l'esecuzione possa essere ripresa in seguito. Queste informazioni sullo stato del processo vengono generalmente salvate nel PCB.
Successivamente si esegue il salvataggio dello stato corrente della CPU; in seguito si effettuerà un corrispettivo ripristino dello stato per poter riprendere l'elaborazione interrotta. Il passaggio a un nuovo processo implica tale operazione di salvataggio e il successivo ripristino del contesto del nuovo processo che si vuole porre in esecuzione sulla CPU; esso sarà ovviamente scelto dalla coda pronti, in base alla propria politica di scheduling, e accederà al suo PCB per ripristinare il suo stato nel processore. Il cambio di contesto è puro overhead.

### Costo

Il context switch richiede una capacità computazionale molto intensa e molti degli sviluppatori dei sistemi operativi ottimizzano l'uso dello stesso con l'obiettivo di rendere meno dispendioso l'utilizzo delle risorse. Rendere disponibili le risorse di un calcolatore da un processo a un altro richiede un certo numero di tempo e di attività di amministrazione delle stesse risorse come - salvare e caricare i registri, mappatura della memoria, aggiornare tabelle e liste, ecc.
Ciò che viene effettivamente coinvolto nell'esecuzione del context switch dipende da molti fattori quali l'architettura della famiglia di processori, il sistema operativo in uso e il numero di risorse condivise.
I thread che appartengono allo stesso processo condividono più risorse rispetto ad altri processi di tipo no-cooperating; per esempio, nel kernel Linux lo scambio di contesto comporta le attività di - scambio di registri, stack pointer (puntatore allo stack che fa riferimento alla procedura di un programma), il program counter, aggiornamento del translation lookaside buffer (TLB) e caricamento della tabella delle pagine del processo successivo da eseguire (a meno che il vecchio processo non condivida la memoria con il nuovo usando la sezione di memoria dove è caricata la procedura e viene rimappata la sezione dei dati).