Storia dei Sistemi Operativi
In Informatica la Storia dei Sistemi Operativi descrive l'evoluzione di questi software durante tutto il periodo di sviluppo dei calcolatori elettronici. La Storia dei Sistemi Operativi procede a fianco della Storia del personal computer e, più in generale, della Storia dell'informatica
Un
Sistema operativo è un
software che fornisce all'utente
una serie di comandi e servizi per fruire al meglio della potenza di
calcolo di un qualsivoglia
elaboratore elettronico,
spaziando dal più piccolo dei
palmari al più potente tra i
Mainframe. I Sistemi Operativi
nascondono tutti i dettagli tecnici legati allo specifico hardware e
architettura rappresentando le informazioni ad un alto livello, meglio
comprensibile dall'uomo.
In
un periodo delimitabile tra il
1945 e il
1955 gli elaboratori elettronici erano ammassi di
valvole termoioniche,
occupavano intere stanze, erano lentissimi e così costosi che potevano
permetterseli soltanto grossi centri di calcolo o Università. Inoltre
questi calcolatori erano molto inaffidabili, in quanto le valvole che li
componevano si rompevano spesso. In questo periodo non esisteva ancora
il concetto di Sistema Operativo; infatti il programma da eseguire
veniva inserito ad ogni esecuzione in codice binario attraverso dei
primitivi lettori di schede perforate e dopo alcune ore il risultato
veniva inviato ad una stampante.
I primi Sistemi Operativi (anni '50)
Tra
il
1955 e il
1965, grazie alla rivoluzionaria invenzione del
transistor gli elaboratori (chiamati
Mainframe) divennero abbastanza
affidabili da poter essere costruiti e venduti in serie, anche se erano
comunque macchine grosse e costosissime tanto che gli unici acquirenti
possibili erano ancora una volta i Centri di Calcolo, le Università e le
banche. Per eseguire dei programmi (o come venivano chiamati job), un
programmatore doveva scrivere il proprio programma su carta, trasferirlo
su schede, caricarlo nel computer, attendere il termine dell'esecuzione
e la stampa del risultato. Tale operazione era molto dispendiosa in
termini di tempo e non permetteva di sfruttare la macchina durante le
lunghe fasi di caricamento di dati e programmi. Non essendo stata ancora
introdotta la tecnologia di accesso diretto alla memoria (DMA) durante le fasi di
input/output il processore era
totalmente utilizzato per il controllo di queste operazioni. È per
questo che si adottò la soluzione del sistema
batch (a lotti): l'idea
di base era quella di dividere i tre lavori, ovvero il caricamento dei
dati, il calcolo e la stampa su macchine distinte. Il calcolo veniva
affidato ad un calcolatore centrale costoso come l'IBM 7094 mentre gli elaboratori satelliti erano macchine più
economiche come gli
IBM 1401. Il Sistema Operativo di questi Mainframe doveva
erogare pochi semplici servizi: gestione dell'input/output,
interpretazione dei comandi contenuti nelle schede controllo e controllo
dell'esecuzione di programmi, sia quelli lanciati dall'utente, sia le
utilità di sistema. I sistemi operativi tipici per questi elaboratori,
per lo più programmati in
FORTRAN e in
Assembler erano il
FMS (Fortran Monitor System) e l'IBSYS. Dai primi anni '60 cominciò a farsi strada il
concetto di
dispositivo virtuale e
astrazione. Prima di ciò un
programmatore che avesse voluto comandare ad esempio una stampante,
doveva conoscere, nei minimi dettagli, il funzionamento a basso livello
della periferica, mentre a partire dall'introduzione del concetto di
periferica virtuale il Sistema Operativo avrebbe fatto da intermediario
tra utente e periferica. Nello stesso periodo i Sistemi Operativi
iniziarono a supportare il
DMA e lo
SPOOL.
Il
DMA (Direct Memory Access) è
il sistema che permette di trasferire dati da memoria secondaria a
memoria centrale in modo completamente indipendente dal processore, il
quale può, nel frattempo, eseguire altre operazioni. Lo
SPOOL (Simultaneous Peripheral Operations On Line) è un
sistema che permette di gestire in maniera efficiente le code di job di
stampa.
Infine, ma non meno importante si assistette all'introduzione delle
politiche di ordinamento dei job. Essi venivano caricati ed eseguiti
in maniera sequenziale, ma l'ordine di esecuzione dei programmi era
gestito da opportune politiche implementate nel Sistema Operativo. Siamo
ancora lontani da ciò che sarà poi il
timesharing supportato da tutti i
Sistemi Operativi moderni, tuttavia è il germe che darà il via alla
implementazione della
multiprogrammazione negli anni successivi.
La multiprogrammazione (anni '60)
L'IBM System/360
Nell'aprile del '64 l'IBM presentò una famiglia di
computer chiamata
IBM
System/360, prima realizzazione di
una netta distinzione tra architettura hardware e
implementazione. Tutti gli elaboratori della suite, che andavano da
piccole macchine a grandi
Mainframe utilizzavano varianti
dello stesso
Sistema
Operativo, l'OS/360, che supportava sia il
calcolo scientifico che quello commerciale. Tuttavia questa eccessiva
diversificazione tra i diversi computer rese difficile scrivere codice
efficiente che rispettasse tutti i requisiti che erano in conflitto tra
di loro. Il risultato fu un Sistema Operativo enorme e molto complesso
scritto da migliaia di programmatori. OS/360 conteneva centinaia di
errori che resero necessarie diverse revisioni. Ogni nuova versione
correggeva alcuni problemi, introducendone però degli altri. Un
esauriente rapporto sull'esperienza con
OS/360 è descritto da
Fred Brooks sul suo saggio
sull'Ingegneria del Software intitolato "The Mythical Man-Month: Essays
on Software Engineering". In questo e in molti altri Sistemi Operativi
dell'epoca venne implementata la
multiprogrammazione, che rendeva possibile la
presenza di più programmi in memoria contemporaneamente. Questo rendeva
necessaria la presenza di hardware specializzato per proteggere i
programmi dalle reciproche interferenze. Quando un job in esecuzione
aveva bisogno di effettuare una
operazione di
I/O il Sistema Operativo lo
sospendeva e al suo posto faceva girare un altro job. Quando
l'operazione di I/O si concludeva il primo job tornava pronto
all'esecuzione e attendeva il suo turno attendendo la sospensione di uno
degli altri. Questi sistemi ottimizzavano l'uso delle risorse
disponibili ma non lo sviluppo dei programmi, infatti il tempo che
intercorreva tra il caricamento dei programmi e la disponibilità dei
risultati era spesso di alcune ore, per cui il più piccolo errore poteva
far perdere al programmatore un sacco di tempo.
La nascita di Unix
Dagli anni sessanta esiste il concetto di
timesharing: ogni utente dispone di un
dispositivo di ingresso (la tastiera) e un dispositivo di uscita (un
monitor o una
telescrivente), ed ha la possibilità di
inviare comandi al Sistema Operativo ottenendo subito una risposta.
Infatti in questi sistemi con timesharing un programma resta in
esecuzione fino a quando esso richiede un'operazione di I/O, oppure
occupa la CPU per più di un certo intervallo di tempo prestabilito
(detto quanto temporale).
Nel
1962 venne realizzato al
MIT il primo sistema di timesharing su un
IBM 7094: il
CTSS. Fu in realtà il
MULTICS la vera rivoluzione. Venne
sviluppato congiuntamente dal
MIT, dalla
General Electric e dai
Bell Labs, ed era in grado di
supportare centinaia di utenti in timesharing. La realizzazione fu però
molto più complessa del previsto, tanto che i Bell Labs abbandonarono il
progetto. Tuttavia Multics introdusse molte nuove idee che influenzarono
non poco i successivi Sistemi Operativi. Se da un lato esistevano questi
supercomputer dall'altro negli stessi anni vi fu lo sviluppo dei
minielaboratori, dei quali un importante esponente fu il
PDP-1 del
1961 che costava solo
120.000$ (cioè il 5% del prezzo di un IBM 7094) e che ebbe un gran
successo. Per questi sistemi vennero progettati appositi Sistemi
Operativi, il più famoso dei quali fu senza dubbio
UNIX..
UNIX fu progettato a partire
dal 1969 da un gruppo di ricercatori della
AT&T presso i Bell Labs, tra
cui erano presenti
Ken Thompson
(che lavorò anche al progetto Multics),
Dennis Ritchie e
Douglas McIlroy. Esso prese notevole
spunto dal padre Multics, e grazie all'ottimo lavoro di queste persone
divenne un sistema molto interattivo, affidabile e ricco di
funzionalità, tanto che, nelle sue varianti ed evoluzioni, tuttora
domina il mercato delle
workstation. Da esso furono realizzate
varianti come
BSD (Berkley Software
Distribution) e sistemi
Unix-like come
Minix (usato in ambito didattico) e successivamente l'ormai
famosissimo
Linux sviluppato dallo studente
finlandese
Linus Torvalds.
Oggigiorno i sistemi operativi *NIX sono conformi allo standard
POSIX (che uniforma l'interprete dei comandi e le API dei
programmi), offrendo una compatibilità reciproca di base necessaria a
non stroncarne lo sviluppo.
L'arrivo del Personal Computer (anni '80)
Verso gli anni '80 grazie alla tecnologia LSI (large
scale integration) la costruzione di chip integrati divenne
massiccia e portò all'abbattimento dei prezzi dell'hardware, facendo
sorgere l'era dell'elaboratore personale o
Personal
Computer. Queste macchine erano
piccole, economiche ed avevano prestazioni simili a quelle dei
calcolatori medio-grandi di 10-20 anni prima. I primi modelli erano
dotati di Sistemi Operativi monoutente con accesso interattivo e
supporto al timesharing. Il più importante tra i primi Sistemi Operativi
per Personal computer era il
CP/M-80 della
Digital Research per le
CPU
8080 /
8085 /
Z-80. Era basato sui Sistemi Operativi della
Digital Equipment Corporation specialmente quelli per
l'architettura PDP-1.
MS-DOS (o PC-DOS quando
fornito da
IBM) era originariamente basato proprio sul CP/M-80.
Microsoft vs. Apple
Steve Jobs
era uno dei pochi che credeva nell'idea del
Personal
Computer. All'epoca era difficile
immaginare cosa potesse farsene una persona di un computer in casa. Egli
invece continuò per la sua strada fondando
Apple Computer Inc. il
1° Aprile
1976 assieme a
Steve Wozniak e
Ronald Wayne. Jobs era convinto che il
futuro del Personal Computer sarebbe stato legato all'interfaccia grafica. E così, ispirandosi a
quella sviluppata da
Xerox qualche anno prima, Apple
lanciò nel
1984
Mac OS il primo sistema operativo
per Personal Computer con interfaccia grafica. Questa fu una vera
rivoluzione tanto che di lì a poco
Microsoft avrebbe commercializzato
Windows (20 novembre
1985) e sarebbe nato l'X Window System in ambiente Unix (1984). All'inizio Windows non era definibile Sistema
Operativo: era piuttosto un'estensione di MS-DOS. Fu con il rilascio di
Windows 3.0, nel
1990, che Microsoft si impose sul mercato. Oltre alle
maggiori performance che garantiva alle applicazioni rispetto alle
versioni precedenti, Windows 3.0 forniva un ambiente
multitasking migliorato rispetto alle
precedenti versioni di MS-DOS, grazie all'introduzione del supporto alla
memoria virtuale, e divenne così un degno
rivale del
Macintosh (su cui girava Mac OS) di
Apple. A partire da
Windows 3.1 fu
introdotto il supporto alla multimedialità (perfezionato via via nelle
successive release), mentre con l'introduzione di
Windows 95 si passò definitivamente
dal calcolo a
16 bit a quello a
32 bit.
I sistemi operativi di rete e il fenomeno Linux
A
fianco di Microsoft ed Apple il mercato delle workstation e dei grandi
elaboratori era comunque dominato da UNIX. Un fenomeno interessante che
iniziò a prendere piede da metà degli anni '80 fu lo sviluppo delle
reti di
calcolatori, fenomeno che ha poi
portato all'incredibile crescita di
Internet. Nacquero così i
Sistemi Operativi di rete e i Sistemi Operativi distribuiti.
I primi altro non sono che normali Sistemi Operativi ai quali vengono
aggiunti i software per il collegamento a macchine remote e quindi alle
relative risorse condivise come file e stampanti. I secondi sono Sistemi
Operativi che girano su sistemi a più processori oppure che inviano i
processi da elaborare ad altri computer della rete. Essi sono dotati di
particolari politiche di
scheduling che permettono una
efficace allocazione dei processi tra le CPU disponibili. Inoltre anche
il sistema di archiviazione (il
file system) è
unico, anche se in realtà è distribuito tra vari nodi della rete. Esempi
della prima classe di sistemi di rete sono tutte le versioni di Windows
dalla 3.1 e
NT in poi, mentre UNIX e
derivati fanno parte di entrambe le categorie in quanto supportano
entrambe le tecnologie. Nel
1991
Linus Torvalds sviluppò un
kernel
Unix-like, capace però di girare
sulla piattaforma
x86. Così nacque
Linux. Fu quando venne abbinato al
Progetto GNU di
Richard Stallman, portavoce della
filosofia del
Software Libero,
che iniziò la fortuna di Linux in quanto la combinazione risultava, e lo
è tuttora, un sistema operativo efficiente ed affidabile anche se non
sempre di facile utilizzo.
Oggigiorno è disponibile una grande varietà di sistemi di elaborazione
dalle più disparate dimensioni e performance a costi contenuti; questo
permette una diffusione pervasiva degli elaboratori elettronici nelle
più diverse attività umane. Inoltre sono oggi sempre più diffuse le
interconnessioni tra i vari dispositivi in modalità sia wired che
wireless. Tutte queste innovazioni hanno portato allo sviluppo di
sistemi operativi per le più svariate architetture, in particolare per
dispositivi handheld come
cellulari (tra i quali non si può
non citare il
Symbian OS) e
PDA (con
Windows Mobile e
Palm OS).
Per
qualunque architettura venga sviluppato un Sistema Operativo moderno
esso deve fornire il supporto, oltre a quanto visto sinora, a molteplici
esigenze quali:
-
Streaming audio/video
(trasmissione ed elaborazione continua di dati multimediali)
-
supporto alle più
diverse tecnologie di interconnessione (ad esempio
Ethernet,
Bluetooth e
Wireless LAN)
-
integrazione di
tecnologie per la fruizione di contenuti su
Internet
-
una efficiente
gestione dell'energia.
La
linea di sviluppo dei sistemi operativi moderni per il mercato consumer
è principalmente incentrato su multimedialità, connettività e risparmio
energetico.