Corso di Informatica - Il futuro - Evoluzione sistemi operativi e linguaggi


Evoluzione di sistemi operativi e linguaggi

 

 

Prima della crescita esplosiva della rete il modello fondamentale era quello del sistema operativo tradizionale di cui abbiamo già commentato la struttura in tre livelli: utente, nucleo e hardware. L'esplosione della disponibilità di infrastrutture di rete a livello capillare ha generato nuovi modelli con i quali il concetto di sistema operativo è diventato qualcosa di molto più generale e multiforme.

La tendenza è quella di generare dei sistemi in grado di accedere ad una grande varietà di risorse e servizi disponibili in rete esattamente come il sistema tradizionale accede alle risorse disponibili nell'ambito della propria macchina. Questo non significa che il sistema operativo convenzionale vada sparendo: ci sarà sempre un sistema che governa localmente una macchina e che è in grado di farla funzionare quando questa è sconnessa dalla rete.

 

Si stanno sviluppando tuttavia nuovi strati di software che agganciandosi al software locale peculiare di ciascun computer, sono in grado di riprodurre a loro volta funzionalità tipiche di un sistema operativo convenzionale ma utilizzando risorse distribuite; per esempio database dislocati su server appositi o potenza di calcolo su macchine adeguate. Il lettore avrà notato che non stiamo dando un nome preciso a questo nuovo tipo di sistema. La ragione consiste nel fatto che vi può essere tutta una varietà di tali sistemi, apparentemente anche molto diversi ma che realizzano in qualche forma l'idea di un sistema operativo che è in grado di utilizzare i servizi di macchine diverse o che addirittura "vive" nella rete appoggiato su tante macchine diverse, talvolta una miriade di macchine.

 

Fra tali sistemi si annoverano oggetti che possono essere noti come linguaggi di programmazione (Java per esempio), come sistemi cosiddetti P2P, comunicazione da pari pari) o come middleware. Consideriamo per l'appunto questa espressione: middleware. Sappiamo che software identifica l'insieme di programmi che possono essere fatti girare su un computer e hardware l'insieme di oggetti fisici di cui è costituito un computer. Abbiamo visto come il sistema operativo convenzionale sia quella parte di software deputata al controllo diretto dei dispositivi hardware. Ebbene, il middleware rappresenta un insieme di programmi software che girano su di un insieme di computer e che consentono di gestire tale insieme di computer come un unica risorsa: come il software di un sistema operativo serve a controllare il livello hardware di una macchina, così il middleware serve a controllare una macchina "generalizzata" i cui componenti sono un insieme di computer e di macchine diverse e dei loro rispettivi dispositivi.

 

Una disanima delle tipologie di sistemi di questo genere che esistono già o che sono in via di sviluppo ci porterebbe fuori strada. Un buon esempio può tuttavia essere quello del linguaggio di programmazione Java. Per capire la peculiarità di Java rispetto agli altri linguaggi di programmazione è necessario soffermarsi un momento sul processo di formazione di un programma eseguibile.

 

Vi sono due tipi di linguaggi di programmazione: quelli compilati e quelli interpretati.

Fra i primi si possono annoverare il Fortran, il Cobol, Ada, il C, il C++, il Pascal, tanto per citare alcuni fra i più noti.

Fra i secondi possiamo ricordare l'APL e il Basic nella sua forma originale.

 

In ogni caso, il programmatore scrive quello che si chiama la sorgente che è un file in formato ASCII. Si tratta quindi di un file che può essere letto e modificato con qualsiasi editore di testo (Notepad, Edit, Emacs, Pico fra i tantissimi in circolazione). Poiché sappiamo che l'unità di controllo è in grado di decodificare esclusivamente istruzioni macchina, cioè istruzioni costituite da sequenze di 0 ed 1, deve per forza aver luogo un processo di traduzione dei file sorgenti in linguaggio macchina. È nel modo in cui viene eseguita tale traduzione che i linguaggi compilati si differenziano da quelli interpretati.

 

 

 

Linguaggi compilati e linguaggi interpretati

 

 

 

 

Si può affermare che la tecnologia basata sulla compilazione è dominante. Tutti i linguaggi principali utilizzati per la produzione di software di ogni tipo sono compilati. La compilazione si presta a produrre programmi ottimizzati (l'ottimizzazione di un programma consiste in tutta una serie di accorgimenti che, senza alterare la funzionalità di base, consentono di migliorarne le prestazioni e le dimensioni) e che debbano essere distribuiti come pacchetti software indipendenti. Così sono stati prodotti tutti i pacchetti che siete abituati ad utilizzare per scrittura di testi, disegno, ritocco fotografico, video giochi e via dicendo.

La tecnologia basata sull'interpretazione è nata per la realizzazione di linguaggi adatti all'uso didattico, idonei cioè all'apprendimento della programmazione. Nacque così il Basic che nella sua forma originale era un interprete: si faceva partire il programma basic (una versione molto diffusa è stata a lungo il QuickBasic) che offriva un prompt al quale si potevano scrivere le singole istruzioni che venivano eseguite immediatamente. Questo sistema si presta particolarmente per sperimentare in modo immediato gli effetti delle varie istruzioni o di brevi sequenze di istruzioni. Successivamente il Basic si è evoluto in un linguaggio compilato e completo come molti altri (VisualBasic).

La tecnologia basata sull'interpretazione ha avuto tuttavia alcune importanti applicazioni. Una di queste concerne i cosiddetti ambienti di analisi di dati scientifici. Si tratta di programmi che offrono un ambiente con molti comandi che facilitano molto la lettura, manipolazione e visualizzazione di dati. Quasi sempre i vari comandi offerti da tali ambienti possono essere raggruppati in sequenze (si parla in tal caso di script che possono essere successivamente eseguite come fossero dei programmi). In questo modo l'utente può estendere moltissimo la funzionalità dell'ambiente in funzione delle proprie specifiche necessità. Alcuni di questi ambienti consentono anche di tradurre gli script prodotti in veri e propri programmi scritti in un linguaggio da compilare (per esempio C) per produrre dei programmi distribuibili convenzionalmente.

Un'altra evoluzione importantissima della tecnologia d'interpretazione è quella che ha condotto a linguaggi tipo Java.

 

 

 

Il linguaggio Java

 

Java è un linguaggio che è stato introdotto dalla Sun Microsystem non tanto con l'obiettivo di creare un nuovo linguaggio quanto per dare vita ad un nuovo modo di utilizzare i computer. L'idea centrale che sta alla base di questa visione è quella di concepire il software come un qualcosa che funzioni su insiemi di computer connessi in rete anziché su di un singolo computer. Per poter iniziare un progetto del genere era necessario disporre di un linguaggio che consentisse di scrivere programmi liberando i programmatori dagli oneri e spesso dall'incubo di produrre versioni diverse per sistemi diversi.

La soluzione proposta con Java impiega sia la tecnologia dei compilatori che quella degli interpreti. I programmi vengono scritti in file sorgenti in caratteri ASCII come usuale. Successivamente vengono compilati in modo tradizionale per produrre dei file oggetto esattamente come avviene per i linguaggi convenzionali. Tuttavia i file oggetto prodotti dal compilatore Java non sono utilizzabili su nessun tipo di computer. La cosa può sembrare strana perché abbiamo descritto i file oggetto come quei file che contengono la traduzione in linguaggio macchina del programma. In effetti il compilatore Java produce file oggetto contenenti istruzioni macchina ma si tratta di istruzioni valide per una generica macchina che è stata chiamata JVM e che non corrisponde a nessun computer esistente.

 

Questo spiega evidentemente come possa essere possibile scrivere software senza preoccuparsi del computer su cui questo dovrà girare. Rimane da capire come i file oggetto buoni per la JVM possano essere trasformati in programmi validi per uno specifico computer reale. È qui che entra in gioco l'interprete. I programmi scritti in Java, ancorché tradotti in linguaggio macchina (per la JVM), non possono essere tradotti in un file eseguibile ma hanno bisogno di un "ambiente", l'interprete Java per l'appunto. È l'interprete Java che si incarica di leggere le istruzioni in linguaggio macchina valida per la JVM e di tradurle in istruzioni nel linguaggio macchina del computer reale su cui si sta lavorando. Infatti per girare un programma Java si deve in realtà far girare il programma java aggiungendo sulla riga di comando il nome del file oggetto che rappresenta il nostro programma. Supponiamo per esempio che il programma che vogliamo far girare si chiami "pippo". Mentre con i linguaggi convenzionali noi avremmo prodotto un file eseguibile di nome "pippo" da lanciare al prompt con il comando "pippo", con Java noi dovremo lanciare un comando del tipo "java pippo". Con tale comando si fa partire in realtà l'interprete Java il quale va a leggersi le istruzioni macchina per la JVM contenute nel file "pippo", tradurle nel linguaggio macchina del computer ed eseguirle.

È evidente che, affinché si possano girare programmi scritti in Java su di un certo computer, dovrà essere disponibile l'interprete Java adatto per quel computer e per il sistema operativo con cui esso è equipaggiato. Gli interpreti Java per i vari tipi di computer e sistemi operativi sono gratuitamente disponibili e scaricabili dalla rete. Una volta che l'interprete è stato scaricato ed installato su di un certo sistema su quel sistema può essere fatto girare qualsiasi programma Java senza che i programmatori che hanno prodotto quel programma abbiano dovuto preoccuparsi delle particolari specifiche del sistema.

Una prima applicazione della tecnologia Java è quella con la quale si producono le cosiddette applet. Le applet sono dei programmi (inizialmente erano molto piccoli ma ora possono anche essere piuttosto grossi) che possono essere associati alle pagine web per funzionare sul computer di chi ha invocato quelle pagine. Sono prodotti usualmente così gli effetti animati più o meno complessi che corredano spesso le pagine web. Quello che succede quando si invoca mediante un click sul link corrispondente ad una pagina del genere, è che insieme alle informazioni che appaiono sulla pagina stessa viene scaricato nella RAM del proprio computer anche un programma che viene eseguito localmente. Questo tipo di programma, chiamato applet, è scritto in Java e il browser (per esempio Netscape o Mozilla o Internet Explorer) che state utilizzando per visualizzare le pagine web fa partire automaticamente l'interprete java per trasformare al volo le istruzioni valide per la JVM nelle istruzioni del vostro computer.

Con il tempo il linguaggio Java è stato arricchito con una quantità enorme di possibili richieste alla JVM consentendo ai programmatori di scrivere software anche molto complessi per una grande varietà di macchine. Moltissime delle funzionalità cher siete ormai abituati a vedere "navigando" nella rete sono state ottenute con questo tipo di tecnologie. Un esempio molto interessante è costituito dal programma di elaborazione di immagini mediche ImageJ. Altre informazioni sul programma ImageJ le trovate nella sezione "Relax". Un esempio più semplice è quello che abbiamo proposto nella sezione sulla codifica delle informazioni a proposito della rappresentazione delle immagini mediche.

 

Potete trovare ulteriori informazioni sul linguaggio Java nelle pagine spiritose scritte da un vostro compagno.