
Il modello a processi
Nel modello a processi tutto il software , compreso SO, è organizzato in un certo numero di processi sequenziali (chiamati processi): un unico processore può essere condiviso tra molti processi, utilizzando un algoritmo di schedulazione (scheduling) per determinare quando interrompere l'evoluzione di un processo e servirne un altro. Questa tecnica appena citata si chiama multiprogrammazione e richiede la presenza contemporanea di più programmi in memoria. La multiprogrammazione permette l'evoluzione contemporanea di più processi limitando al minimo i tempi morti e sfruttando al pieno le potenzialità di calcolo del processore, questo perché l'esecuzione di un processo è costituito da una successione di fasi di elaborazione della CPU e fasi di attesa per l'esecuzione di operazioni su altre risorse del sistema. I processi possono essere indipendenti oppure cooperare per raggiungere un medesimo obiettivo: • all'indipendente un processo evolve in modo autonomo senza bisogno di comunicare con gli altri processi per scambiare dati. • se due o più processi hanno la necessità di cooperare, necessitano dello scambio di informazioni. Un esempio di processi che cooperano sono i videogame multiplayer. ogni giocatore è un processo e per far si che il gioco funzioni correttamente, essi devono cooperare e scambiare informazioni.
L'utilità di avere processi che cooperano sono:
- parallelizzazione dell'esecuzione
- Replicazione di un servizio
- modularità di diversi processi per funzioni diverse della stessa applicazione
- condivisione delle informazione
Un'altra forma di interazione tra almeno due processi è quando si ostacolano a vicenda compromettendo il buon fine delle loro elaborazioni. Avviene quando entrambi i processi competono per utilizzare la medesima risorsa. Questo può portare ad un blocco individuale o critico. Esempio: scheduling dei processi, dove tutti competono per la CPU. Un'altro esempio è la stampante
Stato dei processi Il programma diviene processo quando inizia a essere eseguito dal processore e termina la sua esecuzione per un insieme di possibili cause:
- Quando esegue un'istruzione macchina di terminazione.
- Quando effettua un'operazione illecita (per esempio cerca di accedere alla memoria privata di altri processi).
- Quando c'è un'errore che non gli permette di proseguire (overflow). Durante il ciclo di vita del processo (dall'avvio alla terminazione), il processo, può trovarsi in varie situazioni che definiremo come gli stati di un processo.
Vediamo dettagliatamente come può trovarsi un processo rispetto al processore:
- Nuovo (new, init): è lo stato in cui si trova un processo appena creato. Ovvero l'utente richiede l'esecuzione di un programma che si trova sul disco.
- Esecuzione (running): è lo stato in cui si trova il processo quando è sotto esecuzione da parte della CPU. Nei sistemi a monoprocessore solo un processo può essere in questo stato.
- Attesa (waiting): Il processo si trova in questo stato quando gli manca una risorsa e quindi sta aspettando che si verifichi un evento, per esempio che si liberi la risorsa.
- Pronto (ready-to-run): Il processo si trova in questo stato se è pronto e ha tutte le risorse per essere eseguito. La cpu ancora non è pronta per dargli il time-slice, ovvero, la sua parte in cui eseguire il suo processo.
- Finito (terminated): Siamo in questo stato, quando è stato eseguito fino all'ultimo codice del processo. Il S.O. (Sistema Operativo), deve rilasciare le risorse che utilizzava.