I Sistemi Operativi

Sito culturale

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

Cos'è un Sistema Operativo

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.

Prima dei Sistemi Operativi

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.

I giorni nostri

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.