Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
CAP 3: Descrizione e controllo dei processi
Stati del processo:
Un SO deve soddisfare principalmente le seguenti richieste:
- Interlacciare l'esecuzione di diversi processi per massimizzare l'uso del processore, fornendo un tempo di risposta ragionevole
- Allocare risorse
- Supportare la processi, usando una specifica politica ed evitando lo stallo
Per gestire al meglio il collegamento tra processi viene introdotto il concetto di STATO.
Esistono vari modelli, il più semplice è IL MODELLO A DUE STATI.Un processo può essere eseguito dal processore (RUNNING) o no (NOT-RUNNING).
Un processo viene creato e inserito nel gruppo dei processi not-running. Poi viene preso ed eseguito, lo stato passa a running. Esso potrebbe terminare o essere messo in pausa perché è finito il suo quanto di tempo o è in attesa di un evento I/O.
I processi non eseguiti sono memorizzati in qualche coda tramite puntatori oppure blocchi di dati. Essa può funzionare sia come FIFO (first in first out) sia come coda di priorità (il processo con priorità più alta viene selezionato).
La creazione di un processo avviene tramite due azioni fatte dal SO:
- Costruisce le strutture dati
- Allocca lo spazio di indirizzamento
- In ambiente non interattivo (batch) viene ricevuto un nuovo job batch (programmi dove non è richiesto l'intervento dell'utente)
- Un nuovo utente si collega al sistema
- Per svolgere una funzione per conto di un programma utente affinché non ci sia attesa (es. stampa)
- A seguito di una richiesta di un processo (generazione di processo) per sfruttare il parallelismo
- Terminazione normale
- Superamento del tempo massimo specificato
- Memoria non disponibile
- Violazione dei limiti di memoria
- Errore di protezione
- Tempo scaduto
- Fallimento di un'operazione di I/O
- Istruzione non valida
- Istruzioni privilegiate
- Intervento dell'operatore o del SO
- Terminazione del genitore
- Richiesta del genitore
Il modello appena riportato sarebbe perfetto se i processi not-running fossero sempre disponibili, ma capita che alcuni siano bloccati in quanto in attesa di qualcosa. Perciò potrebbe capitare che prima di trovare un task adatto, l'allocatore debba percorrere tutta la coda. Per questo motivo viene introdotto il MODELLO A CINQUE STATI.
- Essi sono: RUNNING (stato di esecuzione), READY (pronto per l'esecuzione), BLOCKED (in attesa di qualche evento), NEW (processo appena creato ma ancora non ammesso dal SO), EXIT (processo rilasciato perché fallito o terminato).
Gli stati new ed exit sono stati aggiunti per non far affaticare la memoria. SO ha costruito o conserva le tabelle e gli identificatori ma i processi ad essi associati non possono essere eseguiti.
N.B. Un processo può terminare da qualsiasi stato, non solo quando è running. Ad esempio un processo padre può uccidere il figlio in qualsiasi momento.
In questa nuova struttura avremo due code:
- Coda dei Ready
- Coda del Blocked
Per migliorare le prestazioni potrebbero essere introdotte più code blocked, una per ogni tipo di evento, così da riportare tutta la lista in ready appena si verifica ciò che si stava attendendo. Oppure, se si usa una politica prioritaria, si potrebbero creare tante code ready quante sono i livelli di priorità. Ciò permetterebbe una scelta del processo molto più veloce.
Come sappiamo un processo per essere eseguito, deve essere caricato nella memoria principale. I modelli visti fino ad ora seguono questa linea. Il problema principale di queste strutture è la lentezza degli eventi I/O che potrebbe portare all'inattività del processore, poiché quest'ultimo è ampiamente più veloce. Per evitare ciò si potrebbe aumentare la memoria principale, ma questo comporterebbe un aumento dei costi, in più il peso dei programmi sta crescendo in maniera notevole.
Altra soluzione è lo SWAPPING, cioè spostare un processo, o una sua parte, sul disco, nella coda dei SUSPEND. Ciò permette di liberare memoria e quindi il SO può creare un nuovo processo o riabilitare un programma sospeso. L'operazione introdotta è sempre di I/O ma essendo del disco è generalmente più rapida e quindi le prestazioni miglioreranno.
Inizializzazione del process control block:
- IDENTIFICAZIONE: contiene ID del processo, più altri, ad esempio quello del genitore
- INFORMAZIONI SULLO STATO: eccetto il program counter e lo stack di sistema, il resto dei campi sono inizializzati a 0.
- INFORMAZIONI DI CONTROLLO: sono settati su valori standard per difetto e sugli attributi richiesti per il processo. La priorità è impostata al valore più basso, a meno di richieste specifiche. In molti casi il nuovo task non ha risorse, salvo che non le abbia ereditate dal genitore.
Creazione di collegamenti appropriati, ad esempio con altri processi nello stesso stato o con la stessa prioritàEstensione o creazione di eventuali nuove strutture datiPer quanto riguarda il cambio dei processi (switch) si possono osservare delle problematiche progettuali:
- Riconoscere gli eventi che provocano uno switch
- Definire la differenza tra cambio di processo e di modalità di esecuzione
- Determinare le operazioni da compiere sulle strutture dati per effettuare lo switch
- Un cambio di processo può verificarsi quando il SO ottiene il controllo del processo in esecuzione. I meccanismi che possono provocare ciò sono:
- Interruzione: le cause sono eventi esterni al processo. Il controllo prima passa ad un gestore dell’interruzione, così da poter effettuare delle operazioni di manutenzione, poi salta alla routine del SO competente.
- Trap: è legato ad eccezioni ed errori all’interno del processo corrente. Quando si verificano il SO deve stabilire se eseguire una certa exit e avviene il cambio. Nell’altro caso, l’azione sarà indefinita o fatale.
- Chiamata al supervisore: il controllo viene trasferito al sistema sotto richiesta del processo che entra in stato blocked.
Per ultimo poniamo l’attenzione sul SISTEMA OPERATIVO. Esso è uno speciale programma che viene eseguito sul processore. Se frequentemente il controllo è, per riprendere, bisogna aspettare il processore. In fin dei conti il SO è una collezione di programmi eseguiti dal processore, quindi si può definire processo?I progettisti hanno fornito varie risposte, di seguito sono riportati i tre diversi approcci più famosi:
- KERNEL SEPARATO DAI PROCESSI -> l’esecuzione del kernel avviene al di fuori di qualsiasi processo. Quando vi è un cambio di modalità, il SO ha la sua regione di memoria e il suo stack per controllare le chiamate ed i ritorni da procedura.
- FUNZIONI DEL SO ESEGUITE ALL’INTERNO DEI PROCESSI UTENTE -> questo approccio, solitamente, è usato in macchine piccole. Consiste nell’eseguire il sw del SO nel contesto di un processo utente.