Per
gli utenti Amiga comunque
l'interesse maggiore riguarda Elate, il S.O. real time
che è alla base dell'AmigaDE.
Elate
è stato realizzato sempre da TAO e comprende tutte le
funzioni classiche offerte dai sistemi operativi: filesystem,
scheduling real time, gestione della memoria, librerie
di alto livello.
Offre codice completamente portabile che come abbiamo
visto è realizzato in VP e le seguenti caratteristiche:
- Indipendenza
dal codice (al momento un programma scritto in VP
o JAVA può essere eseguito su uno dei seguenti processori
supportati: ARM 6/7, StrongARM, Thumb, x86 (486, pentium,
athlon, …) Coldfire, Motorola M-core, Motorola PowerPC,
Hitachi SH ¾ (Sega Dreamcast), Mips R3000/R4000/R5000,
Nec V850).
- Basato
su oggetti
- Load-balancing
(distribuzione "automatica" dei processi nella rete)
- Multithreading
(esecuzioni di più thread di un processo in contemporanea)
- Multitasking
(esecuzione in contemporanea di più processi)
- Esecuzioni
programmi/processi in parallelo anche su processori
eterogenei (es. su un PPC e su un x86)
- Dynamic
binding (caricamento di parti di un'applicazione (tool)
solo quando necessario per evitare spreco di risorse)
- Kernel
minimale, compatto, veloce e portabile. Il kernel
può essere portato senza ottimizzazioni particolari
verso altra piattaforma in poco più di due-tre settimane.
E' possibile anche creare un kernel in base alle proprie
esigenze, es. da 12KB per dispositivi a batteria).
- Un
porting completo su altra piattaforma può richiedere
appena tre mesi di lavoro.
Questo
RTOS è stato sviluppato per poter sfruttare tutte le
potenzialità offerte dal VP, in particolare le dimensioni
ridotte del codice e l'elevata portabilità. Queste caratteristiche
permettono finalmente di esplorare anche soluzioni che
prevedano l'utilizzo della potenza di calcolo resa disponibile
ad esempio da tutte le macchine presenti in una rete
locale, anche se con hardware, architettura completamente
differenti, senza necessità di modifica del codice e
ricompilazioni "manuali".
Elate
non
implementa la memoria condivisa, si basa invece su un
sistema di messaggi (asincrono o sincroni) che consente
ai vari oggetti di comunicare tra loro, inoltre non
è necessaria una gestione centralizzata date le dimensioni
ridotte del kernel (12K) che consentono di renderlo
presente su più macchine (e data l'elevata portabilità,
di qualsiasi architettura supportata), di servire direttamente
i processi/oggetti locali e di gestire la comunicazione
con gli altri kernel.
Nel
momento in cui un processo richiederà un determinato
tool questo sarà caricato, compilato ed eseguito, se
lo stesso tool necessiterà dell'utilizzo di un'ulteriore
tool anche questo sarà caricato, compilato ed eseguito.
Per questo motivo i tool sono stati realizzati in modo
compatto, proprio per evitare i tempi lunghi di caricamento
tipici degli eseguibili "classici" e per consentire
una compilazione immediata. Il tool inoltre resterà
disponibile in memoria a disposizione di tutte le applicazioni
che ne abbiano bisogno e se non più necessario rimosso.
Per quanto riguarda lo sviluppo del codice è possibile
utilizzare il linguaggio più familiare tra:
Per
i programmi in C/C++ sono disponibili i compilatori
gcc che
generano automaticamente il listato assembler VP. In
questo caso bisognerà comunque seguire la filosofia
dello sviluppo di tool (procedure/metodi) compatti che
svolgono una determinata funzione. Infatti più i tool
sono compatti e maggiore sarà la velocità di caricamento
e traduzione. Quindi utilizzando l'assemblatore asm
si genererà il codice VP (con suffisso .00).
Una
volta ottenuto il codice VP è possibile avviare l'applicazione
realizzata:
Per
ottenere comunque il codice più ottimizzato e veloce
possibile si può utilizzare direttamente il VP
assembler, che poi in realtà è più vicino ad un linguaggio
di alto livello (es. C) che non ad un linguaggio Assembler
vero e proprio, infatti implementa tutti i costrutti
tipici di questi linguaggi (repeat...until, while...endwhile,
loop...endloop, ...).
Ad
esempio il classico helloworld si potrebbe scrivere
in questo modo:
.include 'taort'
tool
'demo/example/helloworld',VP,F_MAIN,8192,0
ent -;-
printf messaggio
; stampa messaggio "Hello world!"
qcall lib/exit,(0:-) ; chiamata del tool
di uscita
ret
toolend
data
messaggio:
dc.b "Hello world!\n",0
.end
Il listato una volta salvato
con suffisso asm può essere dato in pasto all'assembler
asm che genererà il file hello.00 pronto per essere
tradotto.
E'
possibile anche realizzare diverse versioni di un tool
realizzato in modo che sfrutti i set di istruzioni ottimizzate
di alcuni processori (es. MMX, 3Dnow!, SSE, Altivec,
…) in modo che siano poi utilizzate automaticamente
dal traduttore.
Elate
inoltre può essere eseguito, oltre che standalone, anche
"sopra" un altro S.O., sotto forma di finestra. Al momento
i S.O supportati sono: Windows (95/98/NT/CE), Linux,
QNX, DOS, OS-9, …).
|