Che cos’è il Context Switching nel sistema operativo?
Nel sistema operativo, ci sono casi in cui è necessario riportare il processo che si trova nello stato di esecuzione in qualche altro stato come lo stato di pronto o di attesa/blocco. Se il processo in esecuzione vuole eseguire qualche operazione di I/O, allora dovete rimuovere il processo dallo stato di esecuzione e poi mettere il processo nella coda di I/O. A volte, il processo potrebbe usare un algoritmo di programmazione round-robin dove dopo ogni quantum di tempo fisso, il processo deve tornare allo stato pronto dallo stato in esecuzione. Quindi, questi cambi di processo sono fatti con l’aiuto del Context Switching. In questo blog, impareremo il concetto di Context Switching nel sistema operativo e conosceremo anche i vantaggi e gli svantaggi del Context Switching. Quindi, cominciamo.
Che cos’è il Context Switching?
La commutazione di contesto è un processo che comporta il passaggio della CPU da un processo o compito a un altro. In questo fenomeno, l’esecuzione del processo che è presente nello stato di esecuzione viene sospeso dal kernel e un altro processo che è presente nello stato pronto viene eseguito dalla CPU.
È una delle caratteristiche essenziali del sistema operativo multitasking. I processi vengono commutati così velocemente da dare l’illusione all’utente che tutti i processi vengano eseguiti allo stesso tempo.
Ma il processo di commutazione di contesto comporta una serie di passaggi che devono essere seguiti. Non si può passare direttamente un processo dallo stato di esecuzione allo stato di pronto. Dovete salvare il contesto di quel processo. Se non salvate il contesto di un qualsiasi processo P, allora dopo un po’ di tempo, quando il processo P entra di nuovo nella CPU per l’esecuzione, allora il processo inizierà l’esecuzione dall’inizio. Ma in realtà, dovrebbe continuare da quel punto in cui ha lasciato la CPU nella sua precedente esecuzione. Quindi, il contesto del processo dovrebbe essere salvato prima di mettere qualsiasi altro processo nello stato di esecuzione.
Un contesto è il contenuto dei registri e del contatore del programma di una CPU in qualsiasi momento. Il cambio di contesto può avvenire per i seguenti motivi:
- Quando un processo di alta priorità arriva nello stato di pronto. In questo caso, l’esecuzione del processo in esecuzione dovrebbe essere fermata e il processo a priorità più alta dovrebbe ricevere la CPU per l’esecuzione.
- Quando si verifica un’interruzione, il processo in esecuzione dovrebbe essere fermato e la CPU dovrebbe gestire l’interruzione prima di fare altro.
- Quando è richiesta una transizione tra il modo utente e il modo kernel, allora bisogna eseguire la commutazione di contesto.
Passi coinvolti nella commutazione di contesto
Il processo di commutazione di contesto comporta una serie di passi. Il seguente diagramma descrive il processo di commutazione di contesto tra i due processi P1 e P2.
Nella figura precedente, si può vedere che inizialmente, il processo P1 è nello stato di esecuzione e il processo P2 è nello stato pronto. Ora, quando si verifica qualche interruzione, si deve passare il processo P1 dallo stato di esecuzione allo stato pronto dopo aver salvato il contesto e il processo P2 dallo stato pronto allo stato di esecuzione. I seguenti passi saranno eseguiti:
- Prima di tutto, il contesto del processo P1 cioè il processo presente nello stato di esecuzione sarà salvato nel blocco di controllo del processo P1 cioè PCB1.
- Ora, dovete spostare il PCB1 nella coda pertinente cioè.
- Dallo stato pronto, selezionate il nuovo processo che deve essere eseguito, cioè il processo P2.
- Ora, aggiornate il blocco di controllo del processo P2, cioè PCB2, impostando lo stato del processo in esecuzione. Se il processo P2 è stato eseguito in precedenza dalla CPU, allora potete ottenere la posizione dell’ultima istruzione eseguita in modo da poter riprendere l’esecuzione di P2.
- Similmente, se volete eseguire nuovamente il processo P1, allora dovete seguire gli stessi passi menzionati sopra (dal passo 1 al 4).
Perché la commutazione di contesto avvenga, sono necessari almeno due processi in generale, e nel caso dell’algoritmo round-robin, è possibile eseguire la commutazione di contesto con l’aiuto di un solo processo.
Il tempo coinvolto nella commutazione di contesto di un processo da parte di un altro è chiamato Context Switching Time.
Avantaggio del Context Switching
La commutazione di contesto è usata per ottenere il multitasking cioè la multiprogrammazione con la condivisione del tempo (per saperne di più sul multitasking vedi qui). Il multitasking dà l’illusione agli utenti che più di un processo venga eseguito allo stesso tempo. Ma in realtà, solo un compito viene eseguito in un particolare istante di tempo da un processore. Qui, la commutazione di contesto è così veloce che l’utente sente che la CPU sta eseguendo più di un compito allo stesso tempo.
Lo svantaggio della commutazione di contesto
Lo svantaggio della commutazione di contesto è che richiede del tempo per la commutazione di contesto, cioè il tempo di commutazione di contesto. Il tempo è richiesto per salvare il contesto di un processo che è nello stato di esecuzione e poi ottenere il contesto di un altro processo che sta per entrare nello stato di esecuzione. Durante questo tempo, non c’è nessun lavoro utile fatto dalla CPU dal punto di vista dell’utente. Quindi, il cambio di contesto è un puro overhead in questa condizione.
Questo è tutto per questo blog. Spero vi sia piaciuto questo blog.