1. Definizione e storia
Un sistema operativo è un insieme di programmi che funge da interfaccia fra hardware e software applicativo. Il suo scopo principale è quello di gestire le risorse hardware e rendere efficiente il loro uso, facilitare l’uso del computer ed evitare conflitti nella allocazione delle risorse hardware/software.
Di seguito una sintesi della storia dei sistemi operativi, il cui principio ispiratore fu sempre quello di aumentare l'utilizzo della CPU.
Prima generazione di computer - valvole e schede perforate
I primi computer (1946-1955) erano privi di sistema operativo. L'utente inseriva le istruzioni sequenzialmente tramite schede perforate. Successivamente, con la diffusione delle periferiche, vennero sviluppati i primi driver, insieme alle prime librerie. I tempi di setup rendevano la programmazione macchinosa e l'utilizzo della CPU scarso.
Seconda generazione di computer - transistor e batch
Per massimizzare i termini di utilizzo si separò la figura dell'operatore da quella del programmatore. Si adottò una tecnica di batch, nel quale programmi simili (ad esempio dello stesso linguaggio) venivano raggruppati ed eseguiti insieme per minimizzare i tempi di setup. In caso di errore, l'operatore non sapeva effettuare il debug e doveva passare da un job (programmi, task) all'altro manualmente. Per superare queste problematiche venne introdotto il resident monitor, di fatto il
primo sistema operativo. Questo veniva automaticamente invocato all'avvio ed aveva il compito di passare il controllo da un job all'altro quando necessario. La sequenza di esecuzione dei job era decisa da una serie di schede di controllo scritte in un Job Control Language (JCL). Il resident monitor era dunque costituito da un interprete JCL, un sequenzializzatore di job e dai driver per l'accesso ai dispitivi di I/O. Un miglioramento delle prestazioni si ebbe con la sovrapposizione di
I/O e CPU, nel quale la CPU, anzichè leggere e scrivere su schede, utilizzava nastri magnetici molto più veloci, che inoltre potevano essere scritti e e letti da più dispositivi contemporaneamente. Con i dischi magnetici nacque lo spooling, tecnica tramite la quale la CPU poteva leggere sul disco contemporaneamente ai dispositivi di I/O. Per far questo è stato necessario abbandonare il vecchio meccanismo di interazione tradizionale tra CPU e I/O, il polling, ed introdurre gli interrupt e il Direct Memory Access. Con il polling infatti avviene un'interrogazione continua del dispositivo tramite esplicite istruzioni bloccanti, mentre per sovrapporre CPU e I/O è necessario un meccanismo asincrono (richiesta I/O non bloccante). Per questo sono nati gli interrupt (il dispositivo segnala la fine dell’elaborazione alla CPU ed essa soddisfa la richiesta) e il Direct Memory Access (nel caso di dispositivi veloci (es. dischi), gli interrupt sono molto frequenti provocando inefficienza). Nasce in questo modo il paradigma moderno di job scheduling.
Terza generazione di computer - multiprogrammazione e sicurezza
Con l'avvento dello spooling nasce il problema dell'esecuzione contemporanea di più job. Sorge inoltre, con l'evoluzione dei dispositivi di I/O, la necessità di assicurare un'adeguata protezione della macchina per evitare che l'esecuzione di un job possa influenzare in maniera indesiderata quella di un altro (es: un job scrive nell'area di memoria riservata ad un altro job). I tre tipi di protezione sono:
- I/O: si separa l'esecuzione in modalità User, che non può accedere all'I/O e la modalità Kernel (riservata per le routine di sistema), che invece può. In questo modo le operazioni di I/O passano sempre per il sistema operativo che ne controlla la legittimità.
- Memoria: ogni programma (job) non può scrivere in una zona che non gli appartiene (si associano dei registri limite ad ogni processo)
- CPU: ad ogni job è associato un timer, alla scadenza del quale la CPU ritorna al monitor.
Quarta generazione di computer - GUI
Viene introdotta l'interfaccia grafica e i computer sono utilizzabili per usi personali.
Quinta generazione di computer - più CPU
Viene introdotta la possibilità di utilizzare più CPU (ogni processore adatto a particolari tipi di calcoli) e vengono introdotti nuovi sistemi operativi per piattaforme mobili (iOS, Android, ecc.).