Gestione dei processi
Stato sospeso
Oltre ai processi attivi ci sono anche i processi dormienti, ossia quei processi che sono stati rimossi dalla memoria centrale.
Questo può succedere per diverse ragioni:
Il sistema operativo deve fare partire un processo ad elevata priorità che richiede spazio di memoria: il sistema operativo rimuove alcuni processi dalla memoria centrale e li colloca temporaneamente su disco (swap out).
Tutti i processi in memoria sono nello stato waiting e, per non lasciare inutilizzato il processore, il sistema operativo decide di portare in memoria altri processi, attualmente su disco, in grado di essere eseguiti (swap in). Se la memoria è piena, per potere accogliere i nuovi processi, occorre creare spazio in memoria spostando su disco alcuni processi.
L’esecuzione multiprogrammata dei processi ha un costo dovuto all’intervento del sistema operativo che interrompe un programma e ne manda in esecuzione un altro. Sotto certe condizioni, anche a causa della gestione della memoria virtuale, un elevato grado di multiprogrammazione può degradare le prestazioni del sistema. Il sistema operativo può decidere, in tal caso, di abbassare il grado di multiprogrammazione per migliorare l’efficienza del sistema, spostando alcuni processi dalla memoria al disco.
Ai processi che dalla memoria sono spostati su disco viene assegnato lo stato sospeso: questi processi non sono più considerati dal sistema operativo per l’esecuzione. In particolare i processi ready rimossi dalla memoria passano nello stato ready sospeso, mentre i processi bloccati, rimossi dalla memoria, passano nello stato waiting sospeso. I processi nello stato waiting sospeso e ready sospeso costituiscono i processi dormienti.
La figura seguente completa il diagramma di stato, includendo i processi dormienti ed evidenziando i nuovi stati e le relative transizioni. Si osservi che il passaggio di un processo allo stato sospeso, cioè la transizione Sospensione, abbassa il grado di multiprogrammazione, mentre la transizione inversa, Attivazione di un processo, lo aumenta.
Nel diagramma compaiono tre nuove transizioni di stato:
Sospensione - È il passaggio allo stato sospeso ed è causata dal sistema operativo in base alle proprie politiche di schedulazione. La sospensione è accompagnata da un’operazione di swap out nel corso della quale il processo è trasferito su disco, dove viene creata un’immagine del processo.
Attivazione - È la transizione opposta alla sospensione ed è accompagnata da un’operazione di swap in, nel corso della quale l’immagine del processo è riportata in memoria. Anche questa transizione è decisa dal sistema operativo in base alle proprie politiche di gestione dei processi.
Avviene evento - È la transizione da waiting sospeso a ready sospeso ed è causata dall’evento che ha portato il processo, quando era attivo, a bloccarsi nello stato waiting in attesa di quello specifico evento. In alcuni sistemi operativi, per esempio in Unix/Linux, i processi new non passano direttamente allo stato ready, ma transitano prima nello stato ready sospeso.
Domanda
Per quali ragioni i processi possono passare nello stato sospeso?
Per attendere il completamento di un’operazione di I/O
Per aumentare il grado di multiprogrammazione
Per ridurre il grado di multiprogrammazione
Per assegnare loro il processore
Per aumentare l’efficienza del sistema
(Risposta: 3, 5)
Il cambiamento di contesto
Il cambiamento di contesto descrive le operazioni necessarie per passare dall’esecuzione di un processo P a quella di un altro processo Q. Finora si è sempre ipotizzato, per semplicità , che il passaggio dall’esecuzione di P a quella di Q avvenisse istantaneamente o, in ogni caso, in un periodo trascurabile di tempo. In realtà si tratta di tempi non trascurabili. Si consideri la situazione di due processi P1 e P2 che si alternano nell’esecuzione in un sistema che opera in multiprogrammazione. Inizialmente il processo P1 è running. All’istante t1 scade il time slice di P1 e l’orologio di sistema invia un’interrupt. La gestione dell’interruzione causa l’intervento del sistema operativo che, scegliendo tra i processi nello stato ready, decide di mandare in esecuzione il processo P2.
Il passaggio dall’esecuzione di P1 all’esecuzione di P2 prende il nome di cambiamento di contesto (context switch): si passa dal contesto di esecuzione di P1 a quello di P2. Il contesto del processo è rappresentato dalle informazioni contenute nel suo PCB (Process Control Block).
Più in dettaglio, le operazioni che si succedono all’istante t1 sono le seguenti:
Il salvataggio dello stato di esecuzione di P1, ossia il Program Counter e tutti i registri del processore che devono essere salvati per poter riprendere l’esecuzione del processo interrotto, nell’area a questo preposta dentro il PCB del processo P1.
Il cambiamento del modo di operare del processore, dalla modalità utente alla modalità privilegiata, per poter eseguire tutte le istruzioni.
Il processore inserisce nel Program Counter l’indirizzo di inizio della routine per gestire la specifica interruzione; l’esecuzione della routine di gestione dell’interruzione viene così avviata in modalità riservata.
La routine di gestione dell’interruzione, dato il tipo di interruzione, cede il controllo al sistema operativo che seleziona il processo P2 per l’esecuzione.
Il cambiamento di contesto vero e proprio che comprende: modifica dello stato di P1 da running a ready; aggiornamento di tutte le informazioni del PCB (per esempio l’aggiornamento del tempo totale di uso del processore), inserimento del processo P1 nella coda appropriata (la coda dei processi ready); modifica dello stato di P2 (che diventa running) e rimozione di P2 dalla coda dei processi ready; ripristino dello stato di esecuzione di P2 recuperando i valori dei registri, compreso il Program Counter, a suo tempo salvati nel PCB di P2.
Il modo di operare del processore ritorna in modalità utente.
L’esecuzione di P2 riprende all’istante t2 in modalità utente e prosegue sino a t3 quando, allo scadere del tempo dedicato all’esecuzione di P2, avviene un nuovo cambiamento di contesto che riporta in esecuzione P1 al tempo t4.
Il tempo dedicato al cambiamento di contesto è un sovraccarico per il sistema (overhead), perché in questo intervallo di tempo non ci sono processi utili in esecuzione, ma solo lavoro fatto direttamente dall’hardware o dal sistema operativo per fermare un programma e farne partire un altro. Il valore dell’overhead per cambiamento di contesto, t2- t1 (oppure t4- t3) nell’esempio precedente, varia da sistema a sistema e dipende anche dal supporto hardware disponibile. Si parla comunque di tempi rilevanti, in relazione ai tempi del processore, dell’ordine delle decine o centinaia di microsecondi (msec). Supponiamo, per esempio, che in un dato sistema il cambiamento di contesto richieda 200 msec, o in nanosecondi (ns):
Considerando processori che eseguono un’istruzione in pochi ns, per esempio 10-20 ns, il tempo necessario per effettuare un cambiamento di contesto è tempo durante il quale si potrebbero eseguire 10.000 – 20.000 istruzioni utili. Si comprende l’interesse ai processi leggeri in grado di attuare cambiamenti di contesto in tempi molto più brevi: i thread, rispondono proprio a questa esigenza.
Domanda
Quali delle seguenti affermazioni sono vere (V) e quali false (F)?
Il cambiamento di contesto avviene in tempi dell’ordine delle centinaia di nanosecondi
Il cambiamento di contesto prevede il salvataggio della PSW
Il cambiamento di contesto è effettuato totalmente dal sistema operativo
Il cambiamento di contesto è eseguito totalmente dal processore
Nel corso del cambiamento di contesto c’è un processo che passa nello stato running
Il cambiamento di contesto modifica lo stato di due processi
(Risposta F V F F V V)
Last updated
Was this helpful?