Sistemi Operativi
Essa si sviluppa parallela a fianco della storia del computer e, più in generale, della storia dell'informatica.
Solitamente un sistema operativo installato su computer fornisce anche degli applicativi di base per svolgere elaborazioni di diverso tipo.
Un sistema operativo è un software che fornisce all'utente una serie di comandi e servizi per usufruire al meglio della potenza di calcolo di un qualsivoglia elaboratore elettronico, spaziando dal più piccolo dei palmari al più potente tra i mainframe.
La scacchiera dei sistemi operativi |
La storia dei sistemi operativi.
La storia dei sistemi operativi può essere suddivisa in varie generazioni, ognuna delle quali composta da esemplari sempre più evoluti, affidabili e veloci rispetto a quelli della generazione precedente. Le generazioni possono essere così schematizzate:
prima generazione – valvole e spinotti, assenza di sistema operativo;
seconda generazione – transistor e sistemi batch;
terza generazione – circuiti integrati e multiprogrammazione;
quarta generazione – sviluppo delle reti e avvento del personal computer.
Il secondo dopoguerra.
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à o sovrani particolarmente facoltosi. 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.Console del sistema IBM 7090 |
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.
Leggi anche: Windows 7 è il leader indiscusso dei sistemi operativi.
Il programma doveva contenere tutte le istruzioni necessarie, comprese ad esempio le singole operazioni di input/output verso dispositivi fisici: queste procedure a basso livello andavano riportate identiche in tutti i programmi, a differenza dei sistemi odierni, in cui è il sistema operativo che le implementa, e nei programmi è necessario solo richiamarle.
Gli anni '50 e '60
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 CPU della macchina durante le lunghe fasi di caricamento di dati e programmi: non essendo infatti 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 su macchine distinte le tre operazioni di caricamento dei dati, elaborazione vera e propria e stampa. Il calcolo veniva affidato ad un calcolatore centrale costoso come l'IBM 7094 mentre gli elaboratori satelliti utilizzati per le altre due operazioni 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 pilotaggio 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 Assembly erano il Fortran Monitor System (FMS) e l'IBSYS.
Gli anni '60 e '70
Dai primi anni sessanta 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.
I sistemi operativi moderni sfruttano le pił moderne conoscenze nel campo dell'informatica.Twitta
Il DMA (Direct Memory Access) è il sistema che permette di trasferire interi blocchi di 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.
La multiprogrammazione.
Magnifying glass icon mgx2.svg Lo stesso argomento in dettaglio: Multitasking. In questo periodo vennero anche introdotte 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 time-sharing supportato da tutti i sistemi operativi moderni, tuttavia è il germe che darà il via alla implementazione della multiprogrammazione negli anni successivi.
L'IBM System/360
Nell'aprile del 1964 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.
L'evoluzione di Unix.
Schermata principale di Unix. |
Dagli anni sessanta esiste il concetto di time-sharing: 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 time-sharing 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 time-sharing su un IBM 7094: il CTSS. Fu in realtà il Multics la vera rivoluzione.Leggi anche: Linux è uno dei maggiori esempi dello sviluppo di tipo free software e Open Source.
Venne sviluppato congiuntamente dal MIT, dalla General Electric e dai Bell Laboratories, ed era in grado di supportare centinaia di utenti in time-sharing. La realizzazione fu però molto più complessa del previsto, tanto che i Bell Laboratories 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 Laboratories, 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 Berkeley Software Distribution (BSD) 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.
Gli anni '80 ed i personal computer.
Verso gli anni ottanta, 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 time-sharing. Il più importante tra i primi sistemi operativi per personal computer era il CP/M-80 della Digital Research per le CPU 8080, 8085 e 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.
La concorrenza tra Microsoft e Apple.
Steve Jobs era tra quelli che credevano 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, dopo aver casualmente visto l'interfaccia a finestre sviluppata da Xerox Corporation qualche anno prima, si convinse che il futuro del personal computer sarebbe stato legato all'interfaccia grafica, e così Apple lanciò nel 1984 Mac OS il primo sistema operativo per personal computer con interfaccia grafica. Questa fu una vera rivoluzione tanto che nello stesso anno sarebbe nato l'X Window System in ambiente Unix e il 20 novembre 1985 Microsoft avrebbe commercializzato Windows.
All'inizio Windows non era definibile come un 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 dell'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.
Principali distribuzioni Linux. |
Gli anni '90, l'avvento di Internet e la nascita di 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 ottanta 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 "Windows for Workgroups 3.1" e dalla "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 GNU/Linux in quanto la combinazione risultava, e lo è tuttora, un sistema operativo efficiente ed affidabile.
Un esempio di sistema operativo GNU/Linux: Ubuntu, con interfaccia grafica Unity |
Gli anni 2000
A partire dal 2000 sono stati immessi sul mercato 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 smartphone e Tablet PC (Symbian OS, Android, iOS, Windows Phone, ecc.).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.