Nel numero
di MB di Luglio/Agosto 97 la redazione ha lanciato una nuova iniziativa
dedicata ai meno esperti e alle novità più salienti del mondo
Java provenienti direttamente dal sito SUN. In quest'ottica abbiamo iniziato
la serie descrivendo per grandi linee cosa rappresenta la PJ, abbiamo visto
che essa non si identifica semplicemente con un linguaggio di programmazione
orientato agli oggetti ma più ragionevolmente la si può pensare
come ad un insieme di tecnologie software e hardware che lavorono su un
set comune di API .Nello scorso numero si è accennato anche al sistema
operativo JavaOS, basato sul set di API Java. JavaOS sarà l'oggetto
di discussione del seguente articolo
Perchè
JavaOS ?
Molti di voi
si chiederanno perchè SUN Microsystem ha sviluppato un "nuovo" Sistema
Operativo quando il mondo dell'informatica (IT) brulica di S.O. maturi
e ben introdotti nel mercato IT ?
Vi chiederete
ancora quali saranno i plus che permetteranno al JavaOs di affermarsi e
guadagnare una propria fetta di mercato ?
Cercheremo di
dare una risposta a queste domande analizzando le principali caratteristiche
e potenzialità del JavaOS.
JavaOS:
Caratteristiche Generali
Come accennato
in precedenza JavaOS è un Sistema Operativo ottimizzato per far
girare applicativi Java su diversi tipi di computers e dispositivi di consumo
come cellulari, stampanti, macchine fotografiche etc.Le applicazioni gireranno
direttamente su JavaOS senza richiedere un sistema operativo ospitante,
in questo modo esse saranno altamente interattive, dinamiche, sicure e
portatili.
Le poche righe
scritte sin ora rivelano alcune grandi potenzialità di JavaOS: il
fatto che esso si adatti sia ai computers che ai dispositivi di consumo
implica che esso è:
-
Altamente Portatile
-
Altamente Scalabile
Tutto ciò
è reso possibile perchè JavaOS si basa sullo stesso set di
API dell'ambiente di sviluppo Java.Quali benefici può ottenere da
tutto questo il futuro utente del JavaOS ?
Gli utenti del
neo S.O. possono installare o ritrovarsi JavaOS su macchine di diversa
estrazione hardware, da microprocessori Intel 80486/Perntium a Motorola
della serie 680xx/PowerPC o ancora su SPARC o ALPHA oppure su chip come
picoJava e microJava, ciò non pone grossi limiti di spostamento
all'utente che voglia migrare da una piattaforma all'altra, anzi questi
si ritroverebbe a lavorare con la stezza interfaccia utente e con gli stessi
meccanismi.
Il discorso
si fa ancora più interessante per gli sviluppatori che possono produrre
un unico codice sorgente facendo girare così il proprio programma
su tutte le piattaforme, compreso il JavaOS e i dispositivi che supportano
i JavaChips (vedi articolo ).
L'elevata portatilità,
l'alta scalabilità, la possibilità di poter far girare programmi
e/o applets, scritti in linguaggio Java, più velocemente sono rese
possibili dal fatto che JavaOS implementa una Virtual Machine ad elevate
prestazioni, molte funzionalità avanzate per l'interfaccia utente
e per il networking ed un file system ottimizzato, il tutto senza richiedere
un sistema operativo ospintante (sottostante).
JavaOs definisce
una vera e propria piattaforma hardware comprendente una CPU, una memoria
fisica, il controllo su qualsiasi dispositivo, la definizione dei bus e
degli slots.
Esso si compone
fondamentalmete di due parti :
-
Il JavaOS Runtime
-
Il JavaOS Kernel
La prima parte è
la porzione del S.O. indipendente dalla piattaforma, la seconda si riferisce
a quella dipendente dalla piattaforma ospitante.
L'ambiente runtime
del JavaOs è stato progettato per girare su piattaforme hardware
molto limitate, infatti esso per funzionare non richiede sofisticati sistemi
di gestione della memoria come la MMU (Memory Management unit) per mappare
la memoria fisica degli indirizzi in una mappa virtuale e non richiede
un meccanismo di memoria protetta.Il Runtime lascia che sia il kernel (nocciolo
del S.O.) ad occuparsi della MMU e della memoria protetta.
In futuro i benefici
della PJ porteranno molti vantaggi nella realizzazione di semplici, intelligenti,
e dinamici dispositivi di rete, la vera sfida è fornire la PJ a
dispositivi con risorse hardware e software limitati.Uno dei modi per ridurre
le richieste di hardware da parte di un qualsiasi dispositivo è
quello di rimuoverne la causa principale; ossia la presenza di un Sistema
Operativo generico.JavaOS grazie alla sua elevata scalabilità fornisce
delle caratteristiche minimali per il supporto della PJ, in questo modo
gli sviluppatori possono realizzare programmi con le API della PJ su dispositivi
aventi hardware e software limitati.
Per questi motivi
JavaOS è stato realizzato implementando una architettura a strati
indipendenti, ogni strato lavora e vive indipendentemente dall' altro,
permettendo di ottenere così due importanti obiettivi:
-
Castomizzazione
dei prodotti
-
Un modello di
S.O. di tipo parallelo
La castomizzazione
del JavaOS consiste nell'assemblarne i vari strati per adattarlo all'uso
specifico cui è destinato.Per esempio, se il JavaOs è destinato
a girare su un telefono portatile, sicuramente esso sarà composto
da un kernel (nocciolo del S.O.) che supporti pienamente le operazioni
in tempo reale (Realtime), una Virtual Machine, delle funzioni base per
il supporto della grafica, e alcuni protocolli di comunicazione.
Mentre se il
JavaOs è destinato ai computers di rete, dovrà avere un kernel
con funzionalità più sofisticate, ma non dovrà necessariamente
supportare il realtime, avrà una Virtual Machine ed una completa
libreria grafica come la AWT (Abstract Window Toolkit), infine non mancherà
il JDK (Java Developers Kit) con tutte le APIs incluso un browser come
HotJava.
Java
e i Sistemi Operativi
Attualmente
l'ambiente Java viene supportato attraverso un Sistema Operativo ospinante,
cioè un S.O. che ospita la Virtual Machine e le classi fondamentali,
sia l'una che l'altra vengono incorporte direttamente all'interno del S.O.
oppure vengono incorporte all'interno di un browser.
Quindi l'unico
modo per poter lavorare con la PJ è quello di avere un S.O. sottostante
che lo ospiti.
Infatti attualmente
molte delle classi e delle utility del linguaggio assumono per certo che
esistano un certo numero di servizi disponibili a livello di Sistema Operativo.La
figura sottostante mostra l'architettura software usata dalla Piattaforma
Java quando essa gira su un Sistema Opeativo ospitante.
Come potete osservare
le applicazioni Java girano su uno strato di API Java, esse includono molti
servizi e funzioni, come le Classi Fondamentali, le AWT e le classi per
la gestione del Network e del I/O a livello di applicazioni.Questa parte
di codice è scritto tutto in puro linguaggio Java quindi lo ritroveremo
su tutte le piattaforme che supportano Java.
Lo strato inferiore
riguarda il Java Runtime il quale include l'interprete e la garbage collector
per la gestione automatica della memoria dedicata alle applicazioni.Questa
parte è scritta in codice C-indipendent, cioè scritto in
modo tale da essere il più possibile indipendente dalla piattaforma.
Per finire,
lo schema mostra la porzione contenente il sistema operativo d'appoggio.
In generale il
S.O. sottostante deve fornire alla PJ i seguenti servizi :
-
Supporto del multithreading
per il runtime Java.
-
Allocazione di memoria.Il
Java runtime gestisce direttamente la "heap" memory attraverso un moderno
sistema di garbage collector, per questo motivo necessita di un meccanismo
di allocazione di memoria che poi gestirà.
-
Un supporto astratto
per l'interfaccia grafica, tale supporto si interfaccerà con AWT
(Abstract Window Toolkit) che creeranno uno strato d'interfaccia uniforme
per tutte le piattaforme.
-
Protocolli standard
di networking per il supporto della classi Java per il networking.
Quando si effettua
il porting della PJ, gli sviluppatori deveno preoccuparsi delle seguenti
cose:
-
Mappare la AWT per
la gestione dell'interfacccia grafica con il sottosistema.
-
Mappare le classi
per la gestione del networking con il codice nativo del sistema operativo
per la gestione del networking, per esempio, gestire le diverse chiamate
e relative operazioni ai sockets.
-
Mappare le classi
relative al file di I/O con il file system del sistema operativo sottostante,
poichè la sintassi e la gestine dei nomi dei file potrebbe essere
diversa.
-
Tradurre la parte
di codice dipendente della Java Virtual Machine in codice specifico per
il sistema sottostane in modo da poter gestire le chiamate alla memoria
e al gestore dei theread.
Java
e JavaOS
JavaOs implementa
un ambiente Java completamente autonomo.Ciò significa che le applicazioni
sviluppate per la PJ gireranno su JavaOS e su tutti i dispositivi su cui
esso.
JavaOS fornisce
alla PJ i seguenti servizi:
-
Supporto per Java
Virtual Machine usando un kernel per Java
-
Supporto diretto
per le AWT e le classi per il networking il file system e di I/O
-
Disponibilità
di driver per il controllo dei display, delle schede per il networking,
del mouse e della tastiera
-
Completo supporto
delle API Java
La figura sotto
mostra l'architettura software usata per far girare la PJ su JavaOS.
Come potete osservare
dalla figura le applicazioni Java e le applets continuano a girare sullo
strato della PJ che si compone sempre delle Java API, delle classi AWT
e delle classi fondamentali per il supporto del networking e I/O.
Nello strato
inferiore appare il JavaOS con tutti i servizi fondamentali per il funzionamento
della PJ, supporto alla grafica e alla interfaccia a finestre, supporto
ai protoccolli per la trasmissione dati quali TCP/IP-UDP, supporto per
la gestine del file system NFS, supporto per le periferiche di rete ethernet,
per la tastiera, il mouse ed il monitor.
Quindi si passa
agli strati comprendenti il Java runtime e il Java kernel di cui abbiamo
parlato in precedenza.
Infine possiamo
osservare lo strato hardware, che può essere rappresentato da qualsiasi
piattaforma su cui giri il JavaOS.
Vorrei concludere
questa prima parte sottolineando che il contenuto tecnico di questo articolo
dedicato al JavaOS è stato ragionevolmente mantenuto ai confini
tra il neofita e l'utente avanzato, consentendo cosi una lettura scorrevole
ed interessante nello stesso tempo.
Ricordo che
nel prossimo numero di MB verrà trattata la seconda ed ultima parte
dell'argomento, in esso troveremo ulteriori specifiche sul JavaOS.