06 Jul 2023, 7:42 AM
06 Jul 2023, 7:42 AM

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:

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.).