Cos'è un sistema operativo?

(Confronta: A.S. Tanenbaum, Modern Operating Systems, Prentice-Hall, 1992)

Tutti hanno fatto ormai l'abitudine all'intrinseca complessità di un "semplice" PC da tavolo.

Quello che forse sfugge alla maggior parte degli utenti di PC da tavolo è che l'interfacciamento e la programmazione "a basso livello" anche della più semplice periferica (come il mouse o il drive floppy) richiede un numero elevato di operazioni elementari, e produce una casistica di risultati molto ampia (occorre ad esempio prevedere tutte le possibilità di risposta, ma anche di malfunzionamento dell'hardware). Una parte sempre crescente di questa intelligenza viene spostata nelle periferiche stesse: qualsiasi disco rigido si possa acquistare oggi è in grado di effettuare la semplice operazione di "leggere" e "scrivere" un blocco N, numerato sequenzialmente, senza che l'utente esterno debba occuparsi di pilotare i movimenti della meccanica. Allo stesso tempo cresce anche la complessità del sistema globale, per cui operazioni di più alto livello diventano "elementari" e debbono essere sottratte al controllo dell'utente. Si stabilisce così una gerarchia nel software presente nella macchina, i cui confini subiscono una certa evoluzione:

Software Programmi applicativi: Browser WEBProgramma gestionaleGioco di avventura
Software Applicativi di sistema: Interpreti di comandi (shell)Elaboratori di testo (editor) Compilatori
Software Sistema Operativo
Hardware Linguaggio macchina
Hardware Microcodice
Hardware Dispositivi fisici (circuiti logici)

Schermare il programmatore e l'utente dalla tediosa complessità dell'accesso alle periferiche (fornendo loro una macchina virtuale dalle proprietà semplici e ben definite) è la prima funzione del software di sistema indicato come "sistema operativo":

C'è però una seconda funzione, legata al fatto che l'evoluzione storica dei sistemi operativi ha indicato come modello più flessibile e adatto ad ospitare in modo efficiente il maggior numero di applicazioni quello dei sistemi multiprocesso e multiutente. Il sistema operativo ha dunque la fondamentale funzione di coordinare (gestire ed allocare) le risorse della macchina (memoria, accesso alle periferiche, tempo di CPU) in modo da soddisfare le esigenze di tutti i processi e di tutti gli utenti collegati.

Si manifesta in modo sempre crescente la necessità che il sistema operativo soddisfi anche le esigenze di processi ed utenti non residenti sulla macchina stessa, ma che richiedono qualche forma di servizio distribuito e cooperativo. I sistemi operativi progettati prevedendo fin dall'inizio questa possibilità si chiamano generalmente sistemi operativi di rete (Network Operating Systems).