# Sistemi operativi/Funzionalità dei sistemi operativi

Sistemi operativi
Copertina Tutti i moduli · Sviluppo
    Copertina
* Introduzione
* Breve storia
* Le funzioni di base
** Funzionalità dei sistemi operativi
** Evoluzione dei sistemi operativi
Modifica il sommario

## Definizione di sistema operativo

In informatica, il termine "sistema operativo" è usato con diverse sfumature di significato.
Un significato molto usato è quello di software fornito in un unico pacchetto a tutti gli utenti di un modello di elaboratore. Secondo tale accezione, il sistema operativo comprenderebbe programmi di videoscrittura, interpreti o compilatori di linguaggi di programmazione, visualizzatori di immagini, programmi di posta elettronica, e molto altro.
Questa definizione è commercialmente valida, ma priva di utilità teorica, in quanto la tipologia di programmi di utilità forniti insieme al software di base è praticamente sconfinata. Al limite, tutto il software impacchettato potrebbe essere considerato far parte di un sistema operativo.
In questo libro si usa un concetto molto più restrittivo. Qui per sistema operativo si intende un sistema software avente lo scopo di consentire la condivisione di risorse informatiche da parte di sistemi software sviluppati uno indipendentemente dall'altro.
Vediamo di spiegare il concetto.
Supponiamo di voler utilizzare o progettare da zero un sistema informatico composto da uno o più elaboratori privi di qualunque software.
Ovviamente, dobbiamo scrivere il software appropriato; partire da zero significa affrontare un lavoro ciclopico, che tuttavia è fattibile per una grande azienda.
Per semplificare il lavoro, si possono usare dei moduli software già scritti da altri, cioè librerie e driver di dispositivi. Le librerie e i driver di dispositivi hanno a che far con i sistemi operativi, ma non costituiscono un sistema operativo.
Infatti esistono librerie fornite con i sistemi operativi, e la maggior parte dei driver di dispositivi attualmente esistenti sono utilizzabili solo se integrati in un sistema operativo; tuttavia esistono anche librerie e driver di dispositivi che non si appoggiano a sistemi operativi. Pertanto, per tale finalità non è strettamente necessario usare un sistema operativo.
E infatti molti sistemi informatici riescono a funzionare bene anche in assenza di un sistema operativo. Si tratta di sistemi in cui tutti i programmi sono stati progettati, configurati e installati da un'unica azienda. Per lo sviluppo di tale software, l'azienda tipicamente si avvale di librerie di routine e di driver di dispositivi (gestiti come librerie di routine) sviluppati da altre aziende, ma non di interi programmi sviluppati da altre organizzazioni.
La vera ragion d'essere del sistema operativo si ha quando in uno stesso sistema informatico si vogliono far coesistere sistemi software sviluppati da organizzazioni distinte, e quindi il cui sviluppo non è stato coordinato.

### Esempi

Se uso un personal computer esclusivamente per scrivere e stampare documenti testuali, usando un programma di videoscrittura memorizzato in una memoria non volatile, come una ROM o un disco fisso, potrei fare a meno del sistema operativo, purché il personal computer sia impostato in modo da avviare automaticamente il programma di videoscrittura all'accensione, e di non fornire la possibilità di lanciare altri comandi.
Anche se uso un personal computer esclusivamente per disegnare e stampare schemi elettrici, usando un programma di CAD elettrico memorizzato in una memoria non volatile, potrei fare a meno del sistema operativo, purché il personal computer sia impostato in modo da avviare automaticamente il programma di CAD all'accensione.
Ma se voglio utilizzare un personal computer non dedicato né esclusivamente alla videoscrittura né esclusivamente al CAD, bensì che mi permetta di svolgere alternativamente entrambe le attività ed eventualmente delle altre, devo poter installare nella memoria non volatile tutti i programmi che mi interessano, e devo poter scegliere all'avvio del sistema se voglio attivare la funzione di videoscrittura, la funzione di CAD, o qualche altra funzione.
L'installazione di software arbitrari e il loro lancio su scelta dell'utente sono funzioni che prescindono dai software applicativi stessi e quindi fanno necessariamente parte del sistema operativo.
Un sistema operativo che abbia il solo compito di chiedere all'utente quale programma lanciare, e poi di lanciare tale programma è un sistema software molto semplice. La grande complessità dei sistemi operativi oggi esistenti emerge dalla necessità di far coesistere più software applicativi in esecuzione contemporanea, se non addirittura in comunicazione. Tale comunicazione può avvenire tra programmi in esecuzione sullo stesso elaboratore, oppure tra programmi in esecuzione in elaboratori distinti collegati in rete.
Vediamo un altro ambito di applicazione dei sistemi operativi.
Per una data famiglia di elaboratori, esistono decine di aziende che producono circuiti elettronici di gestione dello schermo in modalità grafica, i cosiddetti adattatori grafici, mutuamente incompatibili, cioè che devono essere utilizzati con differenti istruzioni.
Per la stessa famiglia di elaboratori, esistono centinaia di aziende che producono applicazioni grafiche, le quali contengono apposite istruzioni di visualizzazione grafica.
Per fare in modo che una data applicazioni funzioni correttamente con un dato adattatore grafico, in assenza di un sistema operativo, l'applicazione dovrebbe contenere la corretta sequenza di istruzioni specifica per quell'adattatore grafico.
Per fare in modo che tutte le applicazioni funzionino con tutti gli adattatori grafici è necessario che:
* O ogni azienda che costruisce applicazioni grafiche inserisca nel proprio codice le sequenze di istruzioni per ogni adattatore grafico esistente o prevedibile.
* O ogni azienda che costruisce adattatori grafici fornisca agli acquirenti del proprio circuito la sequenza di istruzioni appropriata per ogni applicazione grafica esistente o prevedibile.
Ovviamente, entrambe le soluzioni sono poco soddisfacenti, anche perché non si può prevedere quali saranno le applicazioni grafiche e gli adattatori grafici che verranno prodotti in futuro.
La soluzione sta nel fornire uno standard di comunicazione tra le applicazioni e gli adattatori grafici. In effetti esistono standard di questo tipo (per esempio, EGA, VGA, VESA), ma tali standard, per la loro semplicità e generalità non consentono prestazioni elevate. Per esempio, un adattatore grafico potrebbe avere incorporato un circuito in grado di disegnare una linea, mentre lo standard consente solo di accendere singoli pixel.
La presenza di un sistema operativo che funge da intermediario tra le applicazioni e le risorse hardware permette alle applicazioni di rendersi indipendenti dall'hardware effettivamente installato, funzionando correttamente su qualunque piattaforma e sfruttando al meglio le risorse avanzate eventualmente presenti.
In sostanza, per sistema operativo intendiamo il software che, dovendo fare da arbitro tra le varie applicazioni, e tra le applicazioni e i dispositivi hardware, non può essere sviluppato né da uno sviluppatore applicativo né da uno sviluppatore di dispositivi hardware. Invece, tale software presenta un'interfaccia verso il software applicativo, a cui il software applicativo deve attenersi, e un'interfaccia verso il software di gestione dei dispositivi hardware, a cui il software di gestione dei dispositivi hardware deve attenersi.

## Le funzionalità di un sistema operativo

Ovviamente, un sistema operativo deve essere caricato in memoria prima di ogni programma applicativo e prima di ogni software di gestione dei dispositivi hardware. Tale caricamento è una procedura complessa, ed è chiamata in vari modi, tra cui "caricamento del sistema operativo", "bootstrap" (abbreviato "boot"), e "Initial Program Loading" (IPL).
Nel caricamento vengono portati in memoria principale:
* la parte fondamentale del sistema operativo, chiamata con termine inglese di "kernel" (nucleo);
* il software di gestione dei dispositivi hardware (in inglese "device driver");
* eventualmente, i moduli per gestire gli archivi in memoria secondaria (file system);
* eventualmente, i moduli per gestire lo schermo in modalità grafica (windowing system).
Infine, vengono lanciati uno o più programmi applicativi.
A questo punto il sistema operativo rimane caricato in memoria, ma agisce solo su richiesta, cioè in risposta a interrupt o a chiamate di sistema.
In molti sistemi le chiamate di sistema sono implementate con la stessa tecnica degli interrupt, e quindi vengono detti (impropriamente) "interrupt software".
In tali sistemi, i veri interrupt sono pertanto chiamati "interrupt hardware".
I tipi di interrupt hardware sono determinati dall'architettura dell'elaboratore.
Il sistema operativo può solamente gestirli, ma non crearne di nuovi. Esempi di interrupt hardware sono i seguenti:
* Un dispositivo (per esempio un disco, un'interfaccia di comunicazione con una periferica, un'interfaccia di comunicazione in rete) ha completato l'operazione richiesta precedentemente.
* Ad un dispositivo (per esempio la tastiera, il mouse) sono giunti dei dati da elaborare.
* Il timer di sistema è scattato.
* È stata eseguita un'istruzione illegale.
Le chiamate di sistema sono i servizi che il sistema operativo mette a disposizione dei programmi applicativi. Esempi di chiamate di sistema sono le seguenti:
* Apertura di un file.
* Scrittura su un file aperto.
* Lettura da un file aperto.
* Chiusura di un file aperto.
* Esecuzione di un nuovo programma applicativo.
* Terminazione del programma corrente.
* Invio di un pacchetto di dati a un altro computer.
* Attesa di un pacchetto di dati da un altro computer.