01.06.2013 Views

JIT - Dipartimento di Sistemi e Informatica

JIT - Dipartimento di Sistemi e Informatica

JIT - Dipartimento di Sistemi e Informatica

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>Sistemi</strong> Distribuiti<br />

Corso <strong>di</strong> Laurea in Ingegneria<br />

Dr. Davide Rogai, Prof. Paolo Nesi<br />

PARTE 8: .net Framework<br />

Department of Systems and Informatics<br />

University of Florence<br />

Via S. Marta 3, 50139, Firenze, Italy<br />

tel: +39-055-4796523, fax: +39-055-4796363<br />

Lab: DISIT, <strong>Sistemi</strong> Distribuiti e Tecnologie Internet<br />

nesi@dsi.unifi.it nesi@computer.org<br />

www: http://www.dsi.unifi.it/~nesi<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 1<br />

A problem of communication<br />

Application<br />

Code and data<br />

structures<br />

Before RPC-style models,<br />

applications were completely<br />

separate entities with little or<br />

no integration…<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 2<br />

1


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

A problem of communication<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 3<br />

The .NET Approach<br />

…but with RPC or COM,<br />

you still have to write<br />

‘plumbing’ code and can’t<br />

<strong>di</strong>rectly interact…<br />

… a common language<br />

runtime provides<br />

components a common<br />

substrate. No “plumbing” is<br />

needed and objects can<br />

<strong>di</strong>rectly interact.<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 4<br />

2


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

.NET Framework and Tools<br />

Evoluzione<br />

♣ Co<strong>di</strong>ce nativo<br />

♣ Co<strong>di</strong>ce interpretato<br />

♣ Co<strong>di</strong>ce MSIL<br />

VB C++ C# J# …<br />

Common Language Specification<br />

ASP .NET<br />

Web Forms Web Services<br />

Mobile Internet Toolkit<br />

ADO .NET and XML<br />

Base Class Library<br />

Common Language Runtime<br />

Operating System<br />

Windows<br />

Forms<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 5<br />

Co<strong>di</strong>ci<br />

IL:<br />

♣ Interme<strong>di</strong>ate Language, Language,<br />

Standard ECMA del 1997<br />

MSIL:<br />

♣ Microsoft IL, Implementazione Microsoft <strong>di</strong> IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 6<br />

3


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Sorgenti<br />

Sorgenti<br />

Co<strong>di</strong>ce nativo<br />

Compilatore<br />

Co<strong>di</strong>ce<br />

nativo<br />

(.EXE)<br />

Output<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 7<br />

Co<strong>di</strong>ce interpretato<br />

Interprete<br />

Output<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 8<br />

4


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Sorgenti<br />

Compilatore<br />

<strong>JIT</strong><br />

Sorgenti<br />

Compilatore<br />

<strong>JIT</strong><br />

Co<strong>di</strong>ce MSIL<br />

Compilatore<br />

.NET<br />

Co<strong>di</strong>ce<br />

nativo<br />

Co<strong>di</strong>ce<br />

MSIL<br />

(Assembly)<br />

.EXE/.DLL<br />

Output<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 9<br />

Co<strong>di</strong>ce MSIL<br />

Compilatore<br />

.NET<br />

Co<strong>di</strong>ce +<br />

metadati<br />

Co<strong>di</strong>ce<br />

nativo<br />

Co<strong>di</strong>ce<br />

MSIL<br />

(Assembly)<br />

.EXE/.DLL<br />

Output<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 10<br />

5


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Sorgenti<br />

Compilatore<br />

<strong>JIT</strong><br />

Co<strong>di</strong>ce MSIL<br />

Ambiente <strong>di</strong><br />

Compilatore esecuzione<br />

.NET Runtime<br />

Co<strong>di</strong>ce<br />

nativo<br />

Co<strong>di</strong>ce<br />

MSIL<br />

(Assembly)<br />

.EXE/.DLL<br />

Output<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 11<br />

Interme<strong>di</strong>ate Language (IL)<br />

VB VC ... Script<br />

IL<br />

Common Language Runtime<br />

<strong>JIT</strong><br />

Compiler<br />

Native<br />

Code<br />

Assembly<br />

Language<br />

of CLR<br />

Code is<br />

never<br />

interpreted<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 12<br />

6


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Interme<strong>di</strong>ate Language<br />

Presenta similitu<strong>di</strong>ni con linguaggi ad alto livello, ma anche con con<br />

il<br />

linguaggio assembly:<br />

♣ Istruzioni per<br />

il il caricamento, la memorizzazione e l’inizializzazione l inizializzazione dei dati<br />

richiamare richiamare meto<strong>di</strong> da oggetti<br />

aritmetiche aritmetiche e logiche<br />

gestione gestione eccezioni <strong>di</strong> tipo “Try/Catch Try/Catch”<br />

Operazioni Operazioni sui registri, ma in<strong>di</strong>pendente dalla piattaforma<br />

Operazioni Operazioni “atomiche atomiche”<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 13<br />

Interme<strong>di</strong>ate Language<br />

Permette al CLR controlli durante la compilazione:<br />

♣ Co<strong>di</strong>ce Type Safe<br />

♣ Puntatori corretti<br />

♣ Conversioni corrette<br />

♣ ecc.<br />

Di fatto rappresenta il linguaggio a livello più pi basso e l’unico l unico<br />

“eseguibile eseguibile” dal CLR<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 14<br />

7


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Interme<strong>di</strong>ate Language<br />

Un compilatore conforme al CLS produce<br />

♣ Co<strong>di</strong>ce IL<br />

Rappresenta Rappresenta il programma vero e proprio<br />

♣ Metadati<br />

Descrivono Descrivono i tipi specifici appartenenti al Common Language<br />

Types (CLT) utilizzati nel co<strong>di</strong>ce, comprendente la definizione<br />

<strong>di</strong> ogni tipo, le signature per ogni membro del tipo, i membri ai<br />

quali il co<strong>di</strong>ce fa riferimento e gli altri dati che il runtime usa usa<br />

durante l’esecuzione.<br />

l esecuzione.<br />

Permettono Permettono componenti autodescrittivi<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 15<br />

Interme<strong>di</strong>ate Language<br />

IL e Metadati sono alla fine contenuti in uno o più pi file PE<br />

(Portable Executable) nella forma tra<strong>di</strong>zionale:<br />

♣ .exe<br />

Se Se è co<strong>di</strong>ce <strong>di</strong> programma eseguibile<br />

♣ .dll<br />

Se Se è un insieme <strong>di</strong> librerie<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 16<br />

8


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Common Language Runtime<br />

Manages running code<br />

♣ Verifies type safety<br />

♣ Provides garbage collection, error handling<br />

♣ Provides code access security<br />

Common type system<br />

♣ Value types (integer, float, user, …)<br />

♣ Objects, Interfaces<br />

♣ Delegates, Events, Properties, Pointers<br />

Access to native system resources<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 17<br />

Common Language Runtime<br />

Base Class Library Support<br />

Thread Support COM Marshaler<br />

Type Checker Exception Manager<br />

Security Engine Debug Engine<br />

IL to Native<br />

Compilers<br />

Code<br />

Manager<br />

Class Loader<br />

Garbage<br />

Collector<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 18<br />

9


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Common Type System<br />

Sistema <strong>di</strong> Tipi unificato ed interlinguaggio<br />

Un insieme standard <strong>di</strong> tipi <strong>di</strong> dato e <strong>di</strong> regole necessarie per la la<br />

realizzazione <strong>di</strong> nuovi tipi<br />

Due Categorie <strong>di</strong> Tipi <strong>di</strong>sponibili:<br />

♣ Value Type<br />

♣ Reference Type<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 19<br />

Common Type System<br />

Reference Type<br />

Value Type<br />

♣ Entità Entit autodefinite contententi sia<br />

meto<strong>di</strong> che variabili<br />

♣ Tipi atomici come integer e<br />

char<br />

♣ Divisi in built-in built in ed user<br />

defined<br />

♣ Descrivono valori che sono<br />

rappresentati come<br />

♣ Divisi in quattro sottocategorie:<br />

Self Self Describing<br />

Interface Interface<br />

Pointer Pointer<br />

Built Built-in in<br />

sequenze <strong>di</strong> bit<br />

♣ Descrivono valori che sono<br />

♣ Allocati nello Stack del<br />

Thread<br />

rappresentati come la locazione <strong>di</strong><br />

una sequenza <strong>di</strong> bit<br />

♣ Non soggetti al Garbage<br />

Reference Type<br />

Collector<br />

♣ Allocati nell’ nell Heap Gestito<br />

(Managed Heap)<br />

♣ Soggetti al Garbage Collector<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 20<br />

10


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Common Language Specification<br />

Il CLS definisce un sottoinsieme del Common Type System al<br />

quale tutti i fornitori <strong>di</strong> librerie <strong>di</strong> classi e progettisti <strong>di</strong> linguaggi linguaggi<br />

che puntano al CLR, devono aderire.<br />

Se un componente scritto in un linguaggio (ad esempio C#)<br />

dovrà dovr essere utilizzato da un altro linguaggio (ad esempio<br />

VB.NET), allora chi scrive il componente dovrà dovr aderire ai tipi e<br />

alle strutture definite dal CLS.<br />

Ad Ad esempio, il tipo Int32 è compatibile con il CLS ed i linguaggi<br />

e gli strumenti possono aspettarsi che altri linguaggi e<br />

strumenti conformi al CLS sappiano come utilizzarlo<br />

correttamente<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 21<br />

<strong>JIT</strong> – Just in Time Compiler<br />

Il co<strong>di</strong>ce non viene caricato tutto in memoria<br />

il compilatore <strong>JIT</strong> compila solo il co<strong>di</strong>ce necessario,<br />

quin<strong>di</strong> memorizza nella cache il co<strong>di</strong>ce nativo compilato<br />

per riutilizzarlo<br />

L’overhead overhead è una lieve <strong>di</strong>fferenza che, nella maggior<br />

parte dei casi, non verrà verr rilevata<br />

Quando viene caricata una classe, il caricatore aggiunge<br />

uno stub a ogni metodo della classe<br />

La prima volta che viene chiamato il metodo, il co<strong>di</strong>ce<br />

stub cede il controllo al compilatore <strong>JIT</strong>, che compila<br />

MSIL nel co<strong>di</strong>ce nativo.<br />

Lo stub viene quin<strong>di</strong> mo<strong>di</strong>ficato per puntare al co<strong>di</strong>ce<br />

nativo appena creato, affinché affinch le chiamate successive<br />

passino <strong>di</strong>rettamente al co<strong>di</strong>ce nativo<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 22<br />

11


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Just In Time Compiler<br />

Compilatore al volo basato sul concetto <strong>JIT</strong>:<br />

♣ Non tutto l’IL l IL <strong>di</strong> un PE viene eseguito durante un programma, solo la<br />

parte necessaria viene compilata un istante prima della sua<br />

esecuzione.<br />

♣ Il co<strong>di</strong>ce compilato viene memorizzato per successive esecuzioni<br />

♣ Tutto il co<strong>di</strong>ce .NET è compilato <strong>JIT</strong>, anche linguaggi <strong>di</strong> scripting<br />

come VB Script, J Script, JavaScript ecc.<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 23<br />

Just In Time Compiler<br />

Solo il co<strong>di</strong>ce usato verrà verr compilato<br />

Minore occupazione <strong>di</strong> memoria<br />

Facile rimozione del co<strong>di</strong>ce inutilizzato da tempo<br />

Controlli sull’IL sull IL in fase <strong>di</strong> compilazione<br />

Dati per la compilazione contenuti nello stesso file del co<strong>di</strong>ce<br />

(metadati)<br />

Compilazione ottimizzante perché perch conosce lo stato preciso<br />

dell’ambiente dell ambiente <strong>di</strong> esecuzione<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 24<br />

12


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

IL<br />

Metodo 1<br />

IL<br />

Metodo 2<br />

IL<br />

PORTABLE EXECUTABLE<br />

<strong>JIT</strong> Entry Point / Classe<br />

IL<br />

LOADER<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 25<br />

Metodo 2<br />

IL<br />

PORTABLE EXECUTABLE<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 26<br />

13


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

IL<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

IL<br />

<strong>JIT</strong> <strong>JIT</strong><br />

Entry Point / Classe<br />

IL<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 27<br />

Metodo 2<br />

IL<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 28<br />

14


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

IL<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 29<br />

Metodo 2<br />

IL<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 30<br />

15


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

IL<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

<strong>JIT</strong><br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 31<br />

Metodo 2<br />

IL<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 32<br />

16


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

IL<br />

Metodo 2<br />

CODICE MACCHINA<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 33<br />

Metodo 2<br />

CODICE MACCHINA<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 34<br />

17


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

CODICE MACCHINA<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 35<br />

Metodo 2<br />

CODICE MACCHINA<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 36<br />

18


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

CODICE MACCHINA<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 37<br />

Metodo 2<br />

CODICE MACCHINA<br />

<strong>JIT</strong><br />

Metodo 3<br />

IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 38<br />

19


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

CODICE MACCHINA<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 3<br />

IL<br />

Metodo 3<br />

CODICE MACCHINA<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 39<br />

Metodo 2<br />

CODICE MACCHINA<br />

Metodo 3<br />

CODICE MACCHINA<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 40<br />

20


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

CODICE MACCHINA<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 3<br />

CODICE MACCHINA<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 41<br />

Metodo 2<br />

CODICE MACCHINA<br />

Metodo 3<br />

CODICE MACCHINA<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 42<br />

21


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

CODICE MACCHINA<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 3<br />

CODICE MACCHINA<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 43<br />

Metodo 2<br />

CODICE MACCHINA<br />

Metodo 3<br />

CODICE MACCHINA<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 44<br />

22


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

<strong>JIT</strong> Entry Point / Classe<br />

CODICE MACCHINA<br />

Metodo 1<br />

IL<br />

Stub<br />

Metodo 2<br />

CODICE MACCHINA<br />

Metodo 3<br />

CODICE MACCHINA<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 45<br />

.NET – Hierarchy, Another View<br />

CLR<br />

CLR<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 46<br />

23


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

In<strong>di</strong>pendenza dalla piattaforma<br />

.NET è un’implementazione un implementazione <strong>di</strong> CLI<br />

♣ Common Language Infrastructure<br />

CLI è uno standard ECMA<br />

♣ ECMA-334, ECMA 334, ECMA-335 ECMA 335<br />

Esistono già gi altre implementazioni <strong>di</strong> CLI:<br />

♣ SSCLI (Microsoft, per Windows, FreeBSD e Macintosh)<br />

♣ Mono (per Linux) Linux<br />

♣ DotGNU<br />

♣ Intel OCL (Open CLI Library)<br />

♣ …<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 47<br />

Comparison<br />

Java<br />

♣One One language<br />

♣Multiple Multiple platforms<br />

.NET<br />

♣Multiple Multiple languages<br />

♣Multiple Multiple platforms<br />

Windows Windows<br />

FreeBSD FreeBSD (Rotor)<br />

Linux, Linux, GNU (in progress)<br />

Mono Mono Project (Ximian ( Ximian)<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 48<br />

24


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Comparison between J2EE and .NET Architectures<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 49<br />

J2EE and .NET<br />

Execution Engine<br />

J2EE<br />

Java source code compiles into machine-<br />

independent byte code<br />

Runtime Environment : JVM<br />

.NET<br />

Any compliant language compiles into MSIL<br />

Runtime environment : CLR<br />

Both JVM and CLR ,support services, such as code<br />

verification, memory management via via garbage garbage<br />

collection, and code security<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 50<br />

25


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Cross Platform Portability<br />

J2EE and .NET<br />

J2EE<br />

Platform Independent<br />

JDK should exist on target machine<br />

.NET<br />

Supports Windows platform<br />

CLR should exist on target machine<br />

Can support other platforms provided it has its<br />

own <strong>JIT</strong> complier<br />

Language Support<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 51<br />

J2EE and .NET<br />

J2EE<br />

Tied to Java<br />

Supports other languages via interface technology<br />

.NET<br />

Language independent<br />

Supports any language if mapping exists from that<br />

language to IL<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 52<br />

26


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

HTTP<br />

HTML<br />

.NET<br />

Client System<br />

HTTP<br />

HTML<br />

F<br />

I<br />

R<br />

E<br />

W<br />

A<br />

L<br />

L<br />

F<br />

I<br />

R<br />

E<br />

W<br />

A<br />

L<br />

L<br />

The .NET Architecture<br />

Presentation Tier<br />

ASP.NET<br />

F<br />

I<br />

R<br />

E<br />

W<br />

A<br />

L<br />

L<br />

.NET Remoting, MSMQ<br />

or SOAP<br />

.NET Enterprise<br />

Server<br />

.NET Buil<strong>di</strong>ng<br />

Block Services<br />

Business Tier<br />

COM+<br />

Visual Stu<strong>di</strong>o .NET<br />

ADO.NET<br />

UDDI<br />

SQL Server<br />

or<br />

ADO compatible DB<br />

Database Tier<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 53<br />

The J2EE Architecture<br />

Presentation Tier F<br />

I RMI / IIOP<br />

Business Tier<br />

R<br />

Servlets<br />

E<br />

EJB<br />

Java Server Pages W<br />

A<br />

L<br />

L<br />

Java Language System<br />

JDBC<br />

JDBC compatible DB<br />

Database Tier<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 54<br />

27


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Address.cs<br />

.NET: Language-Independent,<br />

Language Independent,<br />

Platform- Platform Specific<br />

Person.vb<br />

Person<br />

MSIL<br />

Address<br />

MSIL<br />

(C#)<br />

(Visual Basic)<br />

Application Domain<br />

Assembly<br />

Company<br />

MSIL<br />

CLR<br />

Company.cbl<br />

(Cobol)<br />

Deploy<br />

Windows<br />

CLR<br />

Windows<br />

CLR<br />

Others?<br />

CLR<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 55<br />

Elementi caratteristici<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 56<br />

28


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Assembly<br />

Modulo<br />

(file PE)<br />

Co<strong>di</strong>ce IL<br />

Metadati<br />

Manifest<br />

Assembly<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 57<br />

Metadati<br />

Concetto chiave in .NET<br />

Informazioni sui tipi <strong>di</strong> un assembly<br />

Generati automaticamente dai compilatori<br />

Esten<strong>di</strong>bili da terze parti<br />

Formato binario rappresentabile con XML:<br />

♣ XML Schema (XSD)<br />

♣ Serializzazione e deserializzazione<br />

oggetti a runtime in XML<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 58<br />

29


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Metadati<br />

Descrizione <strong>di</strong> un assembly<br />

♣ Identità: Identit : nome, versione, cultura [, pubblic key]<br />

♣ Tipi esportati<br />

♣ Assembly da cui <strong>di</strong>pende<br />

Descrizione dei tipi<br />

♣ Nome, visibilità, visibilit , classe base, interfacce implementate<br />

Attributi custom<br />

♣ Definiti dall’utente dall utente<br />

♣ Definiti dal compilatore<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 59<br />

Simplify Deployment And Management<br />

Assemblies<br />

♣ The unit of deployment, versioning,<br />

and security<br />

♣ Like DLLs, but self-describing<br />

self describing<br />

through manifest<br />

Zero-impact Zero impact install<br />

Side-by Side by-side side execution<br />

♣ Multiple versions of the same component can<br />

co-exist co exist<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 60<br />

30


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Assembly<br />

È una collezione <strong>di</strong> funzionalità funzionalit sviluppate e <strong>di</strong>stribuite come una<br />

singola unità unit applicativa (uno o più pi file).<br />

In pratica è una raccolta <strong>di</strong> co<strong>di</strong>ce compilato.<br />

Completamente autodescrittivo grazie al suo manifesto.<br />

Installazione <strong>di</strong> tipo XCOPY.<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 61<br />

Assembly<br />

Il manifesto è un metadato che:<br />

Stabilisce Stabilisce l’identit l identità dell’assembly dell assembly in termini <strong>di</strong> nome, versione,<br />

livello <strong>di</strong> con<strong>di</strong>visione tra applicazioni <strong>di</strong>verse, firma <strong>di</strong>gitale. <strong>di</strong>gitale.<br />

Definisce Definisce quali file costituiscono l’implementazione<br />

l implementazione<br />

dell’assembly.<br />

dell assembly.<br />

Specifica Specifica le <strong>di</strong>pendenze in fase <strong>di</strong> compilazione da altri<br />

assembly.<br />

Specifica Specifica i tipi e le risorse che costituiscono l’assembly, l assembly, inclusi<br />

quelli che vengono esportati dall’assembly.<br />

dall assembly.<br />

Specifica Specifica l’insieme l insieme dei permessi necessari al corretto<br />

funzionamento dell’assembly.<br />

dell assembly.<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 62<br />

31


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Assembly<br />

Il manifesto è parte in<strong>di</strong>ssolubile dell’assembly dell assembly ed è compreso<br />

nello stesso file.<br />

E’ il CLR che si preoccupa che le <strong>di</strong>pendenze espresse nel<br />

manifesto siano verificate ed eventualmente si occupa <strong>di</strong><br />

“ripararle ripararle”<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 63<br />

Assembly<br />

Il runtime è in grado <strong>di</strong> eseguire due versioni <strong>di</strong>verse della stessa<br />

componente side-by side by-side. side.<br />

Il runtime è in grado <strong>di</strong> rendere <strong>di</strong>sponibile due versioni <strong>di</strong>verse<br />

della stessa libreria<br />

Nessuna registrazione necessaria<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 64<br />

32


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Assembly<br />

Il CLR fornisce anche API utilizzate dai motori <strong>di</strong> scripting che<br />

creano assembly <strong>di</strong>namici durante l’esecuzione l esecuzione degli script;<br />

questi assembly sono eseguiti <strong>di</strong>rettamente senza essere salvati<br />

su <strong>di</strong>sco.<br />

Global Assembly Cache<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 65<br />

Assembly<br />

♣ Memoria per gli assembly “sicuri sicuri”.<br />

Gestione Gestione riservata agli amministratori<br />

Eseguiti Eseguiti fuori dalla “Sandbox Sandbox”, , maggiori privilegi <strong>di</strong> accesso alle<br />

risorse<br />

Downloaded Assembly Cache<br />

♣ Memoria per gli assembly transitori e/o “insicuri insicuri”.<br />

Assembly Assembly esterni, ad esempio scaricati dalla rete.<br />

Eseguiti Eseguiti nella “Sandbox Sandbox” più pi lenti e con minor accesso alle risorse<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 66<br />

33


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Sistema Operativo<br />

Concludendo<br />

♣ Applicazione 1 (Processo Win32 Separato)<br />

Application Application Domain 1<br />

Application Application Domain 2<br />

• Assembly 1<br />

• Assembly 2<br />

• Assembly 3<br />

♣ Applicazione 2 (Processo Win32 Separato)<br />

♣ Applicazione 3 (Processo Win32 Separato)<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 67<br />

Application Domain<br />

Sono i processi leggeri del CLR<br />

♣ Possono essere immaginati come una fusione della Sandbox <strong>di</strong> Java<br />

e del modello a Thread<br />

♣ “Leggeri Leggeri” perché perch più pi AD sono eseguiti in un unico processo<br />

Win32, Win32,<br />

ma con meccanismi <strong>di</strong> sicurezza ed isolamento<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 68<br />

34


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Application Domain<br />

Modello <strong>di</strong> sicurezza<br />

♣ Controllo <strong>di</strong> sicurezza in fase <strong>di</strong> compilazione<br />

♣ Ogni applicazione può avere application domain multipli associata associata<br />

con<br />

essa, ed ognuno <strong>di</strong> questi ha un file <strong>di</strong> configurazione contenente contenente<br />

i<br />

permessi <strong>di</strong> sicurezza. Queste informazioni <strong>di</strong> configurazione sono sono<br />

utilizzate dal CLR per fornire un sistema <strong>di</strong> sicurezza tipo sandbox sandbox<br />

analogo a quello presente in Java.<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 69<br />

Application Domain<br />

Modello <strong>di</strong> sicurezza<br />

♣ Nonostante più pi application domain possano essere eseguiti in un<br />

unico processo, nessuna chiamata <strong>di</strong>retta è permessa tra meto<strong>di</strong><br />

<strong>di</strong> oggetti presenti in <strong>di</strong>fferenti application domain. domain.<br />

In alternativa<br />

un meccanismo <strong>di</strong> tipo proxy è utilizzato per isolare lo spazio dei<br />

co<strong>di</strong>ci.<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 70<br />

35


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

Garbage Collector<br />

Gli oggetti vengono <strong>di</strong>strutti automaticamente quando<br />

non sono più pi referenziati<br />

Algoritmo Mark-and Mark and-Compact Compact<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 71<br />

GC e <strong>di</strong>struzione deterministica<br />

In alcuni casi serve un comportamento <strong>di</strong> finalizzazione<br />

deterministica:<br />

♣ Riferimenti a oggetti non gestiti<br />

♣ Utilizzo <strong>di</strong> risorse che devono essere rilasciate appena<br />

termina il loro utilizzo<br />

Non si possono usare i finalizzatori, finalizzatori,<br />

che non sono<br />

richiamabili <strong>di</strong>rettamente<br />

Implementare l’interfaccia<br />

l interfaccia IDisposable<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 72<br />

36


<strong>Dipartimento</strong> <strong>di</strong> <strong>Sistemi</strong> e <strong>Informatica</strong>, University of Florence<br />

<strong>Sistemi</strong> Distribuiti, Prof. Paolo Nesi<br />

References<br />

Dove posso ottenere maggiori informazioni<br />

♣ www.microsoft.com/msdn/italy/studenti<br />

www.microsoft.com/ msdn/italy/studenti<br />

♣ www.ugidotnet.org<br />

♣ www.gotdotnet.com<br />

♣ www.ecma-international.org<br />

www.ecma international.org<br />

Developer resources<br />

♣ Microsoft Visual Stu<strong>di</strong>o.NET<br />

♣ Microsoft .NET Framework SDK<br />

♣ Microsoft Developer Network<br />

<strong>Sistemi</strong> Distribuiti, Univ. Firenze, Paolo Nesi 2005-2006 73<br />

37

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!