JIT - Dipartimento di Sistemi e Informatica
JIT - Dipartimento di Sistemi e Informatica
JIT - Dipartimento di Sistemi e Informatica
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