La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Inferno, Limbo e la Dis Virtual Machine Lanciano Davide Ferrara Simona.

Presentazioni simili


Presentazione sul tema: "Inferno, Limbo e la Dis Virtual Machine Lanciano Davide Ferrara Simona."— Transcript della presentazione:

1 Inferno, Limbo e la Dis Virtual Machine Lanciano Davide Ferrara Simona

2 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.

3 Caratteristiche principali di Inferno Indipendente dall’architettura Indipendente dall’architettura Puo’ essere eseguito su dispositivi con poca memoria: serve soltanto 1 MB di RAM! Puo’ essere eseguito su dispositivi con poca memoria: serve soltanto 1 MB di RAM! Supporta la compilazione Just-in-Time Supporta la compilazione Just-in-Time Kernel e device driver sono scritti in C Kernel e device driver sono scritti in C Le applicazioni di Inferno sono scritte nel nuovo linguaggio Limbo Le applicazioni di Inferno sono scritte nel nuovo linguaggio Limbo

4 Vantaggi per l’utilizzo di Inferno Portabilità tra processori Portabilità tra processori VENDORPROCESSOR IntelX86 Sun Microsystems Sparc Silicon Graphics (MIPS) MIPS Advanced RISC Machines ARM Hewlett Packard HP-PA AmdahlAMD

5 Vantaggi per l’utilizzo di Inferno Portabilità tra ambienti Portabilità tra ambienti VENDORPLATFORM VariousStandalone Microsoft Windows 95, Windows NT Silicon Graphics Irix Sun Microsystems Solaris VariousLinux IBMAIX Hewlett Packard HP/UX Lucent Technologies Plan 9

6 Vantaggi per l’utilizzo di Inferno Design distribuito Design distribuito Portabilità delle applicazioni Portabilità delle applicazioni

7 Componenti principali Linguaggio di programmazione: Limbo Linguaggio di programmazione: Limbo Macchina virtuale: DIS Macchina virtuale: DIS File Communications Protocol: Styx File Communications Protocol: Styx Inferno API (application programming interface) Inferno API (application programming interface)

8 Esempio dell’utilizzo di Inferno

9 Limbo sintatticamente simile al linguaggio C sintatticamente simile al linguaggio C inferno API inferno API supporta la programmazione modulare supporta la programmazione modulare un forte type cheking a compile- e run-time un forte type cheking a compile- e run-time creazione di processi multipli (threads) e comunicazione tra loro attraverso dei tipi channel creazione di processi multipli (threads) e comunicazione tra loro attraverso dei tipi channel Le sue caratteristiche principali: lo rendono semplice, sicuro, e molto potente, e meglio adatto per lo sviluppo di sistemi distribuiti e concorrenti.

10 Tipi di dato Limbo offre un’ampia scelta di tipi di dato primitivi: 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

11 Canali di comunicazione Un canale il cui tipo e’ scritto chan of data-type - chan of int - chan of (int, char) c <= (123, “ hello ” );

12 Programma 1 1: implement Timer2; 2: include “sys.m”; 3: sys: Sys; 4: include “draw.m”; 5: Timer: module { 6: init: fn (nil: ref Draw->Context, argv : list of string); 7: }; 8: init (nil: ref Draw->Context, argv: list of string ) 9: { 10: sys = load Sys Sys-> PATH; 11: n := len argv; 12: sys->print (“comand Line Parameters\n”); 13: for (i:= 0 ; i < n; I++ ) { 14: sys ->sleep (1000); 15: sys-> print (“%d: %s\n”, i, hd argv); 16: argv =tl argv; 17: } 18: }

13 Programma 2 1: implement Timer2; 2: include “sys.m”; 3: sys: Sys; 4: include “draw.m”; 5: Timer2: module { 6: init: fn (nil: ref Draw->Context, argv : list of string); 7: }; 8: init (nil: ref Draw->Context, argv: list of string ) 9: { 10: sys = load Sys Sys-> PATH; 11: sync := chan of int; 12: n := len argv; 13: spawn timer (sync, n); 14: sys->print (“comand Line Parameters\n”); 15: for (i :=0; i < n; i++) { 16: <- sync; 17: sys-> print (“%d: %s\n”, i, hd argv); 18: argv =tl argv; 19: } 20: } 21: timer { syinc: chan of int, n: int) 22: { 23: for (i:= 0 ; i < n; I++ ) { 24: sys ->sleep (1000); 25: sync <-= 1; 26; } 27: }

14 Caratteristiche comuni con Java Uso di una sintassi simile al C Uso di una sintassi simile al C Compilazione in codice macchina virtuale per un’ esecuzione portabile Compilazione in codice macchina virtuale per un’ esecuzione portabile Garbage collection automatico per la gestione della memoria Garbage collection automatico per la gestione della memoria Uso di caratteri Unicode Uso di caratteri Unicode

15 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) 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 I programmi Limbo possono caricare e scaricare moduli come impone il suo ambiente

16 Dis virtual machine Fornisce l’ambiente di esecuzione per i programmi che vengono eseguiti sul sistema operativo Inferno. 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. Ogni macchina che ha la DIS può eseguire ogni applicazione scritta in Limbo. Fornisce perciò una rappresentazione architettura-indipendente del codice eseguibile.

17 Caratteristiche principali della Dis Modella un’architettura di tipo CISC Modella un’architettura di tipo CISC E’ una macchina a tre operandi E’ una macchina a tre operandi OP src1, src2, dst OP src1, src2, dst Ha un’architettura memory-to-memory Ha un’architettura memory-to-memory Supporta un grande insieme di tipi di alto livello, ad esempio stringhe, liste e array. Supporta un grande insieme di tipi di alto livello, ad esempio stringhe, liste e array.

18 Procedura d’esecuzione di un programma Application (in Limbo) Bytecode Transformer Interpreter On-the-fly compiler CPU Inferno Kernel

19 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 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 Un compilatore JIT puo’ trasformare l’insieme di istruzioni Dis nel codice nativo dell’hardware sottostante

20 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. 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. 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.

21 Elementi della symbol table Header Header File table File table PC table PC table Adt table Adt table Fn table Fn table Data table Data table

22 Dimensione degli operandi byte = 8 bit byte = 8 bit parola o puntatore = 32 bits parola o puntatore = 32 bits float = 64 bits float = 64 bits Big integer = 64 bits Big integer = 64 bits

23 Dimensione degli operandi La dimensione ed il tipo dell’ operando sono specificati dall’ultimo carattere dell’istruzione. Esempio: 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 FFloat L Big, 64-bit two’s complement PPointer

24 Instruction Set Logical AND Syntax: andb src1, src2, dst Syntax: andb src1, src2, dst andw src1, src2, dst andl src1, src2, dst Function: dst = src1 & src2 Function: dst = src1 & src2

25 Instruction Set Branch equal Syntax: beqb src1, src2, dst Syntax: beqb src1, src2, dst beqw src1, src2, dst beqf src1, src2, dst Function: if src1 == src2 then pc = dst Function: if src1 == src2 then pc = dst

26 Organizzazione della memoria IL SEGMENTO DI CODICE CONTIENE: istruzioni decodificate in linguaggio Dis disponibili per essere eseguite dall’interprete (istruction set) 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 codice macchina compilato on-the-fly per la CPU che si sta utilizzando

27 Indirizzamento Un thread in esecuzione ha accesso a due regioni di memoria dati indirizzabile: 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) 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) il record di attivazione, o frame, per il thread, puntato dal registro FP (frame pointer)

28 Dati statici Codice Dati statici Codice MP 1 MP 2 MP 3 Modulo 1 Modulo 2 Modulo 3 Stack Thread 3 Stack Thread 1 Stack Thread 2 FP 3 FP 2 FP 1 DATI GLOBALI DEI MODULI DATI DEI THREADS DEI MODULI

29 Indirizzamento effettivo Indiretto Indiretto Immediato Immediato Doppia indirettezza Doppia indirettezza Ogni istruzione puo’ indirizzare tre operandi. Gli operandi possono generare un indirizzo effettivo in tre modi differenti:

30 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

31 Instruction Set Add Syntax: addf src1, src2, dst Syntax: addf src1, src2, dst Function: dst = src1 + src2 Function: dst = src1 + src2

32 Instruction Set Add (con operando intermedio omesso) Syntax: addf src1, dst Syntax: addf src1, dst Function: dst = dst + src2 Function: dst = dst + src2

33 Garbage Collection La macchina DIS fornisce 2 algoritmi di garbage collection: La macchina DIS fornisce 2 algoritmi di garbage collection: Reference Counted Reference Counted Real Time mark-and-Sweep Real Time mark-and-Sweep

34 Questo approccio ibrido permette al codice di essere generato in diversi stili: Questo approccio ibrido permette al codice di essere generato in diversi stili: Reference Counted puro Reference Counted puro Real Time mark-and-Sweep Real Time mark-and-Sweep Approccio intermedio tra le due strategie Approccio intermedio tra le due strategie

35 La sintassi in assembler per un descrittore di tipo è: desc $10, 132, “ 001F ” numero di descrittore dimensione puntatore a map

36 DIFFERENZA PRINCIPALE RISPETTO ALLA JVM: La DIS utilizza registri virtuali La DIS utilizza registri virtuali La JVM utilizza lo stack La JVM utilizza lo stack

37 cio’ comporta: maggiore semplicita’ di interpretazione per la SM rispetto alla MM 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 maggiore traffico di memoria per la SM, mascherato dal tempo risparmiato a non decodificare i campi degli operandi

38 consideriamo il codice per eseguire la seguente istruzione: consideriamo il codice per eseguire la seguente istruzione: c = a + b c = a + b sequenza di istruzioni per una SM: sequenza di istruzioni per una SM: push a #LS push a #LS push b #LS push b #LS add #LLS add #LLS store c #LS store c #LS il corrispondente in MM: il corrispondente in MM: add a, b, c #LLS add a, b, c #LLS

39 Riferimenti contiene la versione scaricabile di Inferno contiene la versione scaricabile di Inferno


Scaricare ppt "Inferno, Limbo e la Dis Virtual Machine Lanciano Davide Ferrara Simona."

Presentazioni simili


Annunci Google