Inferno,
Limbo
e la Dis Virtual Machine
Lanciano Davide
Ferrara Simona
Inferno
E’ un nuovo Sistema Operativo per sistemi
embedded sviluppato dai ricercatori Rob Pike e
Phil Winterbottom del Computing Science
Research of Bell Labs (Lucent Technologies).
Nasce da un altro S.O. sviluppato presso gli stessi
laboratori: Plan-9 .
Il suo scopo è quello di facilitare la creazione ed il
supporto di servizi distribuiti e di applicazioni di
rete.
Caratteristiche principali di Inferno





Indipendente dall’architettura
Puo’ essere eseguito su dispositivi con poca
memoria: serve soltanto 1 MB di RAM!
Supporta la compilazione Just-in-Time
Kernel e device driver sono scritti in C
Le applicazioni di Inferno sono scritte nel
nuovo linguaggio Limbo
Vantaggi per l’utilizzo di Inferno

Portabilità tra processori
VENDOR
Intel
Sun Microsystems
PROCESSOR
X86
Sparc
Silicon Graphics (MIPS)
Advanced RISC Machines
Hewlett Packard
MIPS
ARM
HP-PA
Amdahl
AMD
Vantaggi per l’utilizzo di Inferno

Portabilità tra ambienti
VENDOR
Various
Microsoft
PLATFORM
Standalone
Windows 95, Windows NT
Silicon Graphics
Sun Microsystems
Various
Irix
Solaris
Linux
IBM
Hewlett Packard
Lucent Technologies
AIX
HP/UX
Plan 9
Vantaggi per l’utilizzo di Inferno

Design distribuito

Portabilità delle applicazioni
Componenti principali

Linguaggio di programmazione: Limbo

Macchina virtuale: DIS

File Communications Protocol: Styx

Inferno API (application programming interface)
Esempio dell’utilizzo di Inferno
Limbo
Le sue caratteristiche principali:





sintatticamente simile al linguaggio C
inferno API
supporta la programmazione modulare
un forte type cheking a compile- e run-time
creazione di processi multipli (threads) e
comunicazione tra loro attraverso dei tipi
channel
lo rendono semplice, sicuro, e molto potente, e meglio adatto per lo sviluppo
di sistemi distribuiti e concorrenti.
Tipi di dato
Limbo offre un’ampia scelta di tipi di dato
primitivi:












Byte (8-bit unsigned)
Int (32-bit signed)
Big (64-bit unsigned)
Real (64-bit floating point)
List
Array
String
Tuple (ordered collection of types)
Channel (for inter-process communication)
Adt (C like struct)
Pick (discriminated union type)
Module
Canali di comunicazione
Un canale il cui tipo e’ scritto
chan of data-type
- chan of int
- chan of (int, char)
c <= (123, “hello”);
Programma 1
1:
implement Timer2;
2:
3:
4:
include “sys.m”;
sys: Sys;
include “draw.m”;
5:
6:
7:
Timer: module {
init: fn (nil: ref Draw->Context, argv : list of string);
};
8: init (nil: ref Draw->Context, argv: list of string )
9: {
10: sys = load Sys Sys-> PATH;
11:
12:
n := len argv;
sys->print (“comand Line Parameters\n”);
13:
14:
15:
16:
17:
18:
for (i:= 0 ; i < n; I++ ) {
sys ->sleep (1000);
sys-> print (“%d: %s\n”, i, hd argv);
argv =tl argv;
}
}
Programma 2
1:
implement Timer2;
2:
3:
4:
include “sys.m”;
sys: Sys;
include “draw.m”;
5:
6:
7:
Timer2: module {
init: fn (nil: ref Draw->Context, argv : list of string);
};
8: init (nil: ref Draw->Context, argv: list of string )
9: {
10: sys = load Sys Sys-> PATH;
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26;
27: }
sync := chan of int;
n := len argv;
spawn timer (sync, n);
sys->print (“comand Line Parameters\n”);
for (i :=0; i < n; i++) {
<- sync;
sys-> print (“%d: %s\n”, i, hd argv);
argv =tl argv;
}
}
timer { syinc: chan of int, n: int)
{
for (i:= 0 ; i < n; I++ ) {
sys ->sleep (1000);
sync <-= 1;
}
Caratteristiche comuni con Java




Uso di una sintassi simile al C
Compilazione in codice macchina virtuale
per un’ esecuzione portabile
Garbage collection automatico per la
gestione della memoria
Uso di caratteri Unicode
Sostanziali differenze con Java


Limbo non e’ un linguaggio ad oggetti ma
rispetto a Java ha piu’ tipi base (es:
liste, stringhe, tuple) e piu’ concetti di
programmazione (es: i thread sono
implementati attraverso canali di
comunicazione)
I programmi Limbo possono caricare e
scaricare moduli come impone il suo
ambiente
Dis virtual machine
Fornisce l’ambiente di esecuzione per i
programmi che vengono eseguiti sul sistema
operativo Inferno.
Ogni macchina che ha la DIS può eseguire
ogni applicazione scritta in Limbo.
Fornisce perciò una rappresentazione
architettura-indipendente del codice
eseguibile.
Caratteristiche principali della Dis




Modella un’architettura di tipo CISC
E’ una macchina a tre operandi
OP
src1, src2, dst
Ha un’architettura memory-to-memory
Supporta un grande insieme di tipi di
alto livello, ad esempio stringhe, liste e
array.
Procedura d’esecuzione
di un programma
Application
(in Limbo)
Inferno
Kernel
Bytecode
Transformer
On-the-fly
compiler
Interpreter
CPU
Procedura d’esecuzione
di un programma


Quando il codice e’ caricato in memoria
per l’esecuzione il bytecode viene
convertito in un formato piu’ efficente
per l’esecuzione
Un compilatore JIT puo’ trasformare
l’insieme di istruzioni Dis nel codice
nativo dell’hardware sottostante
Symbol table
Un file .sbl fornisce le informazioni sui
tipi utilizzati in un file eseguibile Dis e
puo' essere usato dai debuggers. Viene
costruita dal compilatore.
Il file .sbl è formato da un header
seguito da 5 tabelle. Ogni tabella inizia
con 1 linea che contiene il numero di
elementi di quella tabella.
Elementi della symbol table

Header

Adt table

File table

Fn table

PC table

Data table
Dimensione degli operandi

byte = 8 bit

parola o puntatore = 32 bits

float = 64 bits

Big integer = 64 bits
Dimensione degli operandi
La dimensione ed il tipo dell’ operando sono
specificati dall’ultimo carattere dell’istruzione.
Esempio:
W
Word, 32-bit two’s complement
B
Byte, 8-bit unsigned
F
Float
L
Big, 64-bit two’s complement
P
Pointer
Instruction Set
Logical AND
Syntax:
andb src1, src2, dst
andw src1, src2, dst
andl src1, src2, dst
Function: dst = src1 & src2
Instruction Set
Branch equal
Syntax:
beqb src1, src2, dst
beqw src1, src2, dst
beqf src1, src2, dst
Function: if src1 == src2 then pc = dst
Organizzazione della memoria
IL SEGMENTO DI CODICE CONTIENE:


istruzioni decodificate in linguaggio Dis
disponibili per essere eseguite
dall’interprete (istruction set)
codice macchina compilato on-the-fly per la
CPU che si sta utilizzando
Indirizzamento


Un thread in esecuzione ha accesso a
due regioni di memoria dati
indirizzabile:
una regione dei dati globali di un
particolare modulo, puntata dal registro
MP (module pointer)
il record di attivazione, o frame, per il
thread, puntato dal registro FP (frame
pointer)
DATI GLOBALI
DEI MODULI
MP 1
Modulo
1
FP 1
Stack
Thread 1
Codice
MP 2
Modulo
2
Dati statici
FP 2
Stack
Thread 2
Codice
MP 3
Modulo
3
Dati statici
DATI DEI THREADS
DEI MODULI
Dati statici
Codice
FP 3
Stack
Thread 3
Indirizzamento effettivo
Ogni istruzione puo’ indirizzare tre
operandi.
Gli operandi possono generare un
indirizzo effettivo in tre modi
differenti:



Indiretto
Immediato
Doppia indirettezza
Esempi di indirizzamento
10(fp)
indirect dal registro fp
20(mp)
indirect da mp
$0x123
immediate value
10(20(fp))
double indirect rispetto a fp
10(20(mp)) double indirect rispetto a mp
Instruction Set
Add
Syntax:
addf src1, src2, dst
Function: dst = src1 + src2
Instruction Set
Add (con operando intermedio omesso)
Syntax:
addf src1, dst
Function: dst = dst + src2
Garbage Collection
La macchina DIS fornisce 2 algoritmi di
garbage collection:


Reference Counted
Real Time mark-and-Sweep
Questo approccio ibrido permette al
codice di essere generato in diversi stili:



Reference Counted puro
Real Time mark-and-Sweep
Approccio intermedio tra le due
strategie
La sintassi in assembler per un
descrittore di tipo è:
desc $10, 132, “001F”
dimensione
numero di
puntatore a map
descrittore
DIFFERENZA PRINCIPALE
RISPETTO ALLA JVM:
La DIS utilizza registri virtuali
La JVM utilizza lo stack
cio’ comporta:


maggiore semplicita’ di interpretazione
per la SM rispetto alla MM
maggiore traffico di memoria per la SM,
mascherato dal tempo risparmiato a non
decodificare i campi degli operandi
consideriamo il codice per eseguire la seguente
istruzione:
c = a + b
sequenza di istruzioni per una SM:
push a
#LS
push b
#LS
add
#LLS
store c
#LS
il corrispondente in MM:
add
a, b, c
#LLS
Riferimenti




www.vitanuova.com
contiene la versione scaricabile di
Inferno
www.hallogram.com/inferno
www.cynergy.com
www.infernolucent.com
Scarica

ppt - DISI