A4
Il sistema
operativo
Privo del software del sistema operativo l’hardware del computer sarebbe
inutilizzabile.
Diversi tipi di sistema
operativo
Schermata della fase di avvio di Windows.
I più comuni sistemi operativi,
come Windows e Linux, sono
utilizzati per i computer personali. Ma i computer che necessitano di un sistema operativo
sono anche di altro tipo, per
esempio:
• i server (come i computer
che ospitano i dati aziendali,
oppure i servizi Internet);
• i dispositivi mobili (telefoni
cellulari, navigatori satellitari
ecc.);
• i dispositivi embedded
(computer incorporati in altri
dispositivi, per esempio nel
motore o nel sistema di guida
di un’automobile).
Esistono sistemi operativi specifici e versioni specializzate
dei sistemi operativi più comuni per questi particolari ambiti
di applicazione.
56
Schermata della fase di avvio di Linux.
Nella fase di bootstrap che segue l’accensione il computer si attiva caricando
nella memoria principale il codice del sistema operativo memorizzato nella
memoria permanente: è solo l’esecuzione del sistema operativo, infatti, che
trasforma il computer nello strumento multifunzionale che conosciamo.
A4
Il sistema operativo
Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica
1
Le funzionalità fondamentali
del sistema operativo
Le numerose e diverse funzionalità del computer di cui noi utenti usufruiamo sono rese possibili da tre componenti fondamentali:
• l’hardware vero e proprio;
• il sistema operativo;
• le applicazioni software.
ESEMPIO
La multifunzionalità tipica dei computer attuali è certamente dovuta alla
varietà dei programmi applicativi che vi possono essere installati, ma la
loro esecuzione – per la quale l’hardware è sicuramente necessario – sarebbe comunque impossibile senza il supporto del sistema operativo.
La riproduzione di un filmato reso disponibile da un
servizio Internet in modalità streaming è una delle più
frequenti azioni che l’utente di un computer esegue.
Per quanto la connessione «fisica» con la rete (wired
o wireless che sia), il processore, la memoria, la scheda video e il monitor siano elementi essenziali per assolvere questo compito, è il sistema operativo che:
• gestisce la comunicazione di rete con il servizio remoto garantendo la ricezione in tempo reale dei dati che
costituiscono i frammenti audio e video del filmato;
• gestisce e controlla l’esecuzione del programma1
di riproduzione condividendo il processore tra i vari
programmi contemporaneamente attivi;
• gestisce la memorizzazione temporanea dei dati
ricevuti per renderli successivamente disponibili al
programma di riproduzione;
• gestisce l’invio dei dati generati dal programma di
riproduzione alla scheda video in modo trasparente (il programma di riproduzione, infatti, ignora le
caratteristiche fisiche e funzionali di questo dispositivo).
Il sistema operativo (S.O.) assolve a tre funzioni fondamentali:
• realizzare la piattaforma di esecuzione delle applicazioni software;
• gestire le risorse hardware del computer (la CPU, le memorie, i dispositivi di input e di output ecc.);
• gestire le risorse software del computer (i programmi installati, i
dati memorizzati permanentemente ecc.).
Che il sistema operativo realizzi la «piattaforma»
di esecuzione dei programmi applicativi è reso evidente dal fatto
che, anche utilizzando lo stesso computer, i programmi sviluppati
per Windows non possono essere installati in ambiente Linux e viceversa2.
1. In questo esempio
invece di un programma
applicativo vero
e proprio potrebbe
trattarsi di un plug-in
del browser utilizzato
per la navigazione
della rete.
OSSERVAZIONE
Dal punto di vista dell’utente la funzione principale del sistema operativo è però ancora un’altra: fornire l’interfaccia per l’uso del computer
(FIGURE 1-4).
1
2. Un’eccezione
è rappresentata
dai programmi realizzati
con linguaggi che
utilizzano una «macchina
virtuale» per l’esecuzione,
come per esempio Java.
Le funzionalità fondamentali del sistema operativo
Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica
57
FIGURA 1 Interfaccia utente di Microsoft Windows.
FIGURA 3 Interfaccia utente di tipo KDE per Ubuntu Linux.
FIGURA 2 Interfaccia utente di Mac-OS.
FIGURA 4 Interfaccia utente di tipo Gnome per Ubuntu Linux.
In realtà questo aspetto è una caratteristica solo di alcuni sistemi operativi
– come le varie versioni di Windows e di Mac-OS – perché in molti altri
casi – per esempio nelle diverse distribuzioni Linux – l’interfaccia utente (spesso denominata GUI, Graphics User Interface) è realizzata da uno
specifico programma separato dal sistema operativo vero e proprio ed è di
conseguenza intercambiabile.
In definitiva il sistema operativo può essere sinteticamente definito
come il gestore delle risorse (sia hardware sia software) del computer.
2
L’architettura modulare
e gerarchica dei sistemi operativi
Per semplificarne la progettazione e lo sviluppo un sistema operativo è
di solito organizzato internamente in moduli corrispondenti alle diverse risorse che esso deve gestire:
58
A4
Il sistema operativo
Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica
• il gestore del processore e dei programmi in esecuzione;
• il gestore della memoria per il codice e per i dati dei programmi in
esecuzione;
• il gestore dei file memorizzati su disco o su altri supporti;
• i gestori dei dispositivi di input e di output;
• il gestore della comunicazione di rete.
OSSERVAZIONE L’interfaccia grafica di interazione con l’utente non
è, dal punto di vista tecnico, un componente fondamentale di un
sistema operativo e, con le notevoli eccezioni di Windows e Mac-OS,
ne costituisce spesso un modulo esterno indipendente e intercambiabile.
Dal punto di vista dell’utente del computer il sistema operativo (S.O.) costituisce un’estensione dell’hardware (HW) che incapsula consentendo
l’esecuzione dei programmi applicativi con cui interagisce (FIGURA 5).
Interfaccia utente
a riga di comando
Anche i S.O. moderni che presentano all’utente interfacce
grafiche (GUI) sofisticate, mantengono la possibilità di interagire con il sistema mediante
la digitazione di comandi che
forniscono risposte in formato
esclusivamente testuale.
Questa forma di interazione
con il S.O. – l’unica disponibile fino all’avvento delle GUI
negli anni ’80 e ’90 del secolo
scorso – è infatti ancora utile
in molte situazioni.
UTENTE
APPLICAZIONI
S.O.
Gestione
della sicurezza
HW
La gestione della sicurezza è
ormai considerata una funzionalità indispensabile dei moderni sistemi operativi.
Un sistema operativo deve autenticare gli utenti (gli umani o
le applicazioni software) con
cui interagisce al fine di non
consentire loro operazioni non
autorizzate che potrebbero
coinvolgere il corretto funzionamento del computer, o i dati
di altri utenti del sistema.
L’autenticazione degli utenti
avviene tradizionalmente mediante una password segreta,
ma è ormai diffusa la pratica di utilizzare per gli utenti
umani dati biometrici (per
esempio le impronte digitali),
o un supporto fisico (come una
smart-card ) abilitato mediante
un PIN (Personal Identification
Number ). Le autorizzazioni
delle applicazioni software che
intendono accedere alle risorse di un computer sono invece
verificate mediante tecniche
crittografiche.
FIGURA 5
In quest’ottica l’interfaccia grafica di interazione con l’utente è considerata come un’applicazione e non come un componente del sistema
operativo.
Pur essendo un elemento software, la particolarità del sistema operativo
di costituire un’estensione dell’hardware del computer lo rende un programma con privilegi speciali: il processore esegue il codice del sistema
operativo in una modalità protetta, distinta dalla modalità utente in
cui sono eseguiti i normali programmi applicativi; il kernel o nucleo di
un sistema operativo è costituito dai moduli eseguiti in modalità protetta.
I sistemi operativi per i quali tutti i moduli sono eseguiti in modalità protetta, come un unico programma, sono definiti monolitici. Invece i sistemi operativi in cui tutti i moduli, esclusi i gestori
del processore e della memoria, vengono eseguiti in modalità utente sono
denominati micro-kernel. La maggior parte dei sistemi operativi più diffusi sono monolitici, o ibridi; in quest’ultimo caso solo alcuni moduli
sono eseguiti in modalità utente come programmi esterni.
OSSERVAZIONE
2
L’architettura modulare e gerarchica dei sistemi operativi
Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica
59
Macchine virtuali
Le elevate prestazioni dell’hardware dei computer attuali ha
consentito la diffusione di applicazioni software capaci di
emulare l’hardware di un computer: questi programmi sono
noti come «macchine virtuali»
ed è possibile installarvi sistemi
operativi diversi da quello della
piattaforma di esecuzione, ottenendo di fatto una nuova piattaforma di esecuzione distinta da
quella originale. Per esempio è
possibile avere un sistema Linux ospitato in una macchina
virtuale eseguita in un sistema
Windows, o viceversa.
Una tecnologia simile è utilizzata dai compilatori di alcuni
linguaggi di programmazione,
come Java, per rendere i programmi potenzialmente eseguibili su qualsiasi piattaforma
hardware e software.
API
Livello
2
0
Gestori del processore
e della memoria
1
1
Gestori dei dispositivi di
input/output e della
comunicazione di rete
2
Gestore dei file
0
HARDWARE
Modulo/i
FIGURA 6
Anche nei sistemi operativi monolitici il kernel ha un’organizzazione interna gerarchica distribuita su più livelli (FIGURA 6).
Ma come avviene l’accesso alle risorse hardware e software gestite dal
sistema operativo da parte dei programmi applicativi con cui interagisce l’utente del computer? Il sistema operativo espone un’Application
Program Interface (API) che tradizionalmente assume la forma di una
libreria di funzioni speciali (note come system-call o «chiamate di sistema»).
L’invocazione di una system-call da parte di un programma non può consistere in una semplice chiamata di funzione;
infatti essa genera una vera e propria interruzione dell’esecuzione del
programma e trasferisce al sistema operativo la richiesta dell’operazione
desiderata. L’esecuzione del programma riprende solo dopo che il sistema operativo ha completato l’operazione richiesta.
ESEMPI
OSSERVAZIONE
䊏 Un programma di gioco con funzionalità di interazione on-line con i computer di altri giocatori deve
invocare le funzioni dell’API del sistema operativo che
utilizza come piattaforma di esecuzione ad esempio
per:
• comunicare in rete con i programmi degli altri giocatori;
• visualizzare sul monitor la scena del gioco utilizzando la scheda video del computer;
• recuperare da file memorizzati su disco i filmati e i
suoni da riprodurre;
• salvare in modo permanente su file il livello e la situazione di gioco all’uscita dal programma.
䊏 L’API delle varie versioni dei sistemi operativi Windows a 32 e 64 bit è nota come WinAPI, mentre molte funzionalità comuni ai vari sistemi Unix ed ereditate
dal kernel di Linux sono state standardizzate in una
interfaccia di riferimento denominata POSIX.
Molti programmatori non conoscono direttamente
le funzionalità dell’API dei sistemi operativi che utilizzano come piattaforma di esecuzione del software che sviluppano: le funzionalità e le
librerie standard di molti linguaggi di programmazione, infatti, «nascondono» l’interazione del codice con le funzioni esposte dal sistema
OSSERVAZIONE
60
A4
Il sistema operativo
Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica
operativo. Per esempio un programmatore C/C++ visualizzerà una
stringa di testo nella console di esecuzione del programma utilizzando la funzione printf o l’oggetto cout: il compilatore che trasforma
il codice sorgente C/C++ in codice eseguibile per quella specifica
piattaforma hardware e software di esecuzione si occuperà di inserirvi le specifiche invocazioni alle funzioni dell’API del sistema
operativo.
Lo schema di FIGURA 7 sintetizza l’architettura di un sistema operativo moderno e il contesto hardware e software in cui opera.
LINGUAGGIO DI
PROGRAMMAZIONE
APPLICAZIONI
interprete dei comandi
e/o GUI
compilatore +
librerie
programmi
applicativi
SW
UTENTE
API DEL SISTEMA OPERATIVO
S.O.
(«chiamate» di sistema)
gestione
processi
gestione
memoria
gestione
disco
gestione
I/O + rete
HARDWARE
processore
memoria
disco
HW
(linguaggio «macchina»)
I/O + rete
In quale linguaggio
di programmazione
sono scritti i S.O.?
Per quanto siano un prodotto
molto particolare, i S.O. sono
composti da moduli software
e come tali sono progettati,
implementati e mantenuti da
sviluppatori.
Data la stretta dipendenza dall’hardware che hanno alcune
componenti dei S.O., è inevitabile il ricorso al linguaggio
macchina della piattaforma di
esecuzione, ma tradizionalmente la maggior parte del
codice del kernel di un S.O. è
codificata nel linguaggio C che,
pur essendo un linguaggio di
alto livello, presenta molti costrutti per il controllo dell’efficienza dell’esecuzione del codice e della gestione dei dati.
Molti sistemi operativi – Linux
è in questo un esempio notevole – devono la loro diffusione su piattaforme diverse alla
portabilità garantita da un kernel scritto in ampia misura in
linguaggio C.
FIGURA 7
3
Windows e Linux
Il sistema operativo Windows è un prodotto commercializzato in varie
versioni da Microsoft Corporation, un’azienda con sede a Redmond nello
stato di Washington. Il primo sistema Windows fu rilasciato nel 1985, ma
l’architettura interna oggi condivisa da tutte le versioni del sistema operativo nasce nel 1993 con la serie «NT».
Anche se la distribuzione commerciale dei sistemi Windows prevede oggi
il supporto esclusivamente per le piattaforme hardware IA-32 (a 32 bit) e
IA-64 (a 64 bit) di Intel e AMD, la progettazione interna prevede la portabilità tra architetture hardware diverse, prevedendo esplicitamente un livello
HAL (Hardware Abstraction Layer) che separa il codice del kernel dalle specificità dell’hardware.
L’architettura interna dei sistemi operativi Windows è basata su un kernel
ibrido che non comprende la gestione del sistema dei file; tuttavia questo
modulo e la caratteristica GUI sono eseguiti in modalità protetta e di fatto
sono componenti essenziali del sistema operativo stesso, le cui funzionalità
sono esposte dall’API standard che ha mantenuto nel tempo e nelle varie
3
Unix: il padre
dei sistemi operativi
Il sistema operativo che ha
maggiormente influenzato la
progettazione di quelli attuali
è senz’altro Unix, realizzato a
partire dal 1969 nei laboratori
di ricerca «Bell» della AT&T nel
New Jersey, principalmente
da Ken Thompson e Dennis
Ritchie.
씰
Windows e Linux
Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica
61
씰 Unix fu il primo sistema
operativo «portabile», cioè
parzialmente indipendente
dall’hardware del computer.
Questa caratteristica fondamentale è il risultato del fatto
che Unix è stato fin dall’inizio
scritto in gran parte in linguaggio C (sviluppato nello stesso
periodo e nello stesso laboratorio da Dennis Ritchie e da Brian
Kernighan).
Alcune versioni di Unix sono
distribuite o commercializzate
ancora oggi, ma – anche se la
lezione di Unix è stata accolta da molti sistemi operativi
attuali, compresi Windows e
Mac-OS – sono in particolare le numerose distribuzioni
del sistema operativo Linux a
rappresentare oggi l’eredità di
Unix.
3. La gratuità della
maggior parte delle
distribuzioni di Linux
è una conseguenza
dell’adozione di una
licenza legale del tipo noto
come open-source license
(in particolare si tratta
della licenza denominata
GPL, GNU Public License).
versioni una elevata coerenza. Nonostante esistano versioni di Windows
specializzate per server, dispositivi mobili e dispositivi embedded, questa
caratteristica lo ha reso il più diffuso sistema operativo per computer di
uso personale.
Le numerose distribuzioni del sistema operativo Linux rappresentano
l’eredità tecnica dei sistemi Unix: il kernel monolitico espone un’API che
discende da quella di Unix e che implementa lo standard POSIX.
Linux nasce nel 1992 da un progetto personale di Linus Torvalds, allora
studente all’università di Helsinki, dove la prima versione fu presentata
nel 1994, ma la sua evoluzione è avvenuta grazie al contributo di migliaia di sviluppatori e di aziende interessate al successo del progetto:
questo è stato possibile grazie alla licenza legale adottata da Torvalds
stesso che rende obbligatorio il rilascio pubblico del codice sorgente3 del
kernel. La libera disponibilità del codice sorgente ha inoltre consentito
di «portare» Linux su una moltitudine di diverse architetture hardware;
oggi esiste una versione di Linux praticamente per ogni tipo di computer esistente.
Il kernel di Linux è completamente indipendente dall’interfaccia utente:
molte distribuzioni di tipo server si limitano a installare una interfaccia di
comando non grafica, mentre le due GUI più diffuse – Gnome e KDE –
sono entrambe basate sul servizio X Window System esterno al kernel.
Il campo applicativo in cui i sistemi Linux sono maggiormente diffusi
è senz’altro quello dei sistemi server, ma negli ultimi anni sono sempre
più numerose le distribuzioni di Linux dedicate ai computer per uso
personale.
Windows e Linux sono oggi i sistemi operativi più diffusi e utilizzati. In
questo testo tutti i concetti introdotti sono illustrati per entrambi gli ambienti – sottolineando convergenze ed eventuali divergenze – e, nella seconda parte, il codice che esemplifica le varie funzionalità esposte dai sistemi
operativi è sempre dettagliato con riferimento all’API di entrambe le piattaforme.
Sintesi
Dal punto di vista dell’utente le componenti fondamentali del computer sono:
• gestisce le risorse hardware del computer;
• gestisce le risorse software del computer.
• l’hardarwe;
• il sistema operativo;
• i programmi applicativi.
Il S.O. può essere definito come il gestore delle risorse hardware e software del computer.
Il sistema operativo (S.O.) assolve a tre
funzioni fondamentali:
• realizza la piattaforma di esecuzione delle applicazioni;
62
A4
L’interfaccia utente grafica di un S.O. è
un elemento caratterizzante, ma non fondamentale: in alcuni S.O. è implementata mediante
un’applicazione indipendente dal sistema vero e
proprio.
Il sistema operativo
Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica