Un sistema operativo per poter gestire contemporaneamente più programmi, ognuno dei quali può essere eseguito, bloccato e ripreso al punto in cui
era stato sospeso precedentemente, deve disporre di una struttura che possegga istante per istante lo stato di ogni programma in esecuzione. Tale struttura astratta è il processo.
Processo e programma
- Un processo è un programma in esecuzione sul calcolatore.
- Un programma è un oggetto statico (una sequenza di istruzioni).
- Un processo invece è dinamico, cioè è dotato di uno stato interno che cambia nel tempo.
- Lo stesso programma può essere associato a più processi distinti.
Stati del processo
- Executing o Running (in esecuzione):
il processore è a disposizione per l’esecuzione del processo.
In un calcolatore mono-processore ad ogni istante un solo processo può trovarsi in questo stato.
- Ready (pronto):
in grado di essere eseguito ed in attesa del processore dopo il suo rilascio da parte di altri processi.
- Waiting (in attesa):
non in grado di essere eseguito perché in attesa di un evento esterno.
La multiprogrammazione
I sistemi operativi che permettono di eseguire contemporaneamente più programmi sono detti multitasking.
In sistemi con un solo processore l'esecuzione contemporanea dei processi è virtuale, in quanto la CPU esegue un'istruzione per volta.
Con il termine multiprogrammazione si intende che più programmi possono risiedere contemporaneamente in memoria centrale.
Il multitasking è nato per poter rendere minimo il tempo di inattività della CPU durante operazioni in cui non viene utilizzata.
La politica che si utilizza per poter tenere più programmi in esecuzione senza sprecare tempo di CPU e penalizzare i processi in coda (facendoli attendere troppo a lungo) è
la ripartizione del tempo, ovvero il time sharing.
In tal modo viene fatta un'equa ripartizione del tempo di CPU fra tutti i processi attivi, ognuno dei quali crede di operare sul calcolatore come se fosse a lui dedicato.
Tutto ciò è organizzato dal sistema operativo attraverso la gestione di una coda di processi ciascuni di questi ha un quanto di tempo a propria disposizione.
Lo scheduler
Lo scheduler è quella parte del sistema operativo che si occupa di gestire i processi. Esso deve:
- essere efficiente;
- minimizzare il tempo di risposta;
- minimizzare il tempo d’attesa dei processi batch;
- massimizzare il throughput (numero di processi per ora);
- garantire che ogni processo abbia la sua giusta parte di tempo di CPU.
I principali algoritmi di scheduling sono:
- First Come First Served
- Algoritmo Round Robin
- Priorità
- Code multiple
- Il più breve prima (shortest job first)
Problemi legati alla concorrenza
Starvation:
avviene quando più processi richiedono una risorsa ma solo alcuni riescono ad ottenerla.
Deadlock:
avviene quando un gruppo di processi rimane permanentemente bloccato in attesa di una risorsa.
Cooperazione fra processi:
memoria condivisa, scambio di messaggi