le componenti di un calcolatore cpu cpu intel x86, amd intel x86, amd memoria volatile memoria...
TRANSCRIPT
Le componenti di un calcolatoreLe componenti di un calcolatore CPUCPU
Intel x86, AMDIntel x86, AMD Memoria volatileMemoria volatile
RAMRAM Memorie di massaMemorie di massa
Hard disk, dispositivi USB, PC CardHard disk, dispositivi USB, PC Card ReteRete
Wired e wireless LANWired e wireless LAN BluetoothBluetooth
Altri dispositiviAltri dispositivi Porte di comunicazione (seriale, parallela, USB, firewire, ecc.)Porte di comunicazione (seriale, parallela, USB, firewire, ecc.)
Il linguaggio della CPUIl linguaggio della CPU
OFFSET (12 bit)0
PDE (10 bit) PTE (10 bit)12212231 11
20 bits 12 bits 20 bits 12 bits
PAGE 4KB
RAM0
4GB
CR#3
ix86
Page Directory Page Table
1023
0
1023
0
FA 00 08CF AA 21 88……….
Il linguaggio della CPUIl linguaggio della CPU
Codici operativi e dati Indirizzi di memoria, porte di comunicazione, ecc.
Istruzioni direttamente eseguibili dal processore Molto difficili da ricordare… Molta potenza… nessun controllo!!
Estrema possibilità di fare errori nella scrittura Nessuno strumento di verifica del codice Nessun approccio “logico” alla scrittura del codice
Solo istruzioni di basso livello
Il sistema operativoIl sistema operativo
Windows, Unix/Linux, VMS, OS/400, ecc.Windows, Unix/Linux, VMS, OS/400, ecc. InizialmenteInizialmente
Un insieme di servizi per consentire alle applicazioni di Un insieme di servizi per consentire alle applicazioni di non dover “reinventare tutte le volte la classica ruota”non dover “reinventare tutte le volte la classica ruota”
Una serie di controlli per evitare che le applicazioni Una serie di controlli per evitare che le applicazioni possano “danneggiarsi” tra loropossano “danneggiarsi” tra loro
OggiOggi Tutto quello appena detto più..Tutto quello appena detto più.. Una interfaccia grafica sulle risorse del sistemaUna interfaccia grafica sulle risorse del sistema Un punto di controllo e configurazione del nostro PCUn punto di controllo e configurazione del nostro PC
Come funziona Windows?Come funziona Windows? Parliamo ovviamente di Windows NT/2000/XP!! Parliamo ovviamente di Windows NT/2000/XP!! Un Un kernelkernel che fornisce tutti i sistemi di baseche fornisce tutti i sistemi di base
Gestione dei processi in esecuzioneGestione dei processi in esecuzione Gestione della memoriaGestione della memoria Controllo su tutti i dispositivi attraverso driversControllo su tutti i dispositivi attraverso drivers
Un insieme di interfacce di programmazione (API) per Un insieme di interfacce di programmazione (API) per accedere ai servizi del kernelaccedere ai servizi del kernel Librerie di funzioni: USER, GDI, KERNEL, ecc.Librerie di funzioni: USER, GDI, KERNEL, ecc. Diffici da utilizzare direttamenteDiffici da utilizzare direttamente
Una Una shell,shell, o interfaccia grafica, per permettere o interfaccia grafica, per permettere l’interazione con l’utentel’interazione con l’utente
Le caratteristiche fondamentaliLe caratteristiche fondamentali
Windows è un sistema Windows è un sistema multi-threadingmulti-threading Programmi e operazioni diverse possono essere eseguite in Programmi e operazioni diverse possono essere eseguite in
parallelo (se abbiamo più CPU..)parallelo (se abbiamo più CPU..) Windows è un sistema basato sul concetto di memoria Windows è un sistema basato sul concetto di memoria
virtualevirtuale Ogni programma ha a disposizione 4Gb di memoria “fittizia”Ogni programma ha a disposizione 4Gb di memoria “fittizia” Il sistema operativo si occupa di assegnare lo spazio nella Il sistema operativo si occupa di assegnare lo spazio nella
memoria fisica e nel file di paginazione ai vari programmimemoria fisica e nel file di paginazione ai vari programmi I programmi non possono “danneggiare” il kernelI programmi non possono “danneggiare” il kernel I programmi sono “isolati” e non possono danneggiarsi I programmi sono “isolati” e non possono danneggiarsi
tra lorotra loro
Come si programma Windows?Come si programma Windows? Dipende dal tipo di applicazione che vogliamo realizzareDipende dal tipo di applicazione che vogliamo realizzare
Basata su finestre graficheBasata su finestre grafiche WebWeb Un servizio di sistemaUn servizio di sistema
Scrivendo un programma in un linguaggio di programmazione che Scrivendo un programma in un linguaggio di programmazione che viene trasformato in “codice macchina”viene trasformato in “codice macchina” CompilatoCompilato InterpretatoInterpretato
Il programma interagisce con il sistema operativo attraverso le APIIl programma interagisce con il sistema operativo attraverso le API Per disegnare una finestraPer disegnare una finestra Per scrivere sulla stampante, ecc.Per scrivere sulla stampante, ecc.
Un esempio di applicazione WindowsUn esempio di applicazione Windows
L’introduzione delle macchine virtualiL’introduzione delle macchine virtuali
Inizialmente i programmi Windows erano scritti in Inizialmente i programmi Windows erano scritti in linguaggio C, poi C++linguaggio C, poi C++ Molta potenza per il programmatoreMolta potenza per il programmatore Poco controllo sull’accesso ai servizi di sistemaPoco controllo sull’accesso ai servizi di sistema Molto difficile da utilizzare in modo correttoMolto difficile da utilizzare in modo corretto
Ogni linguaggio aveva le sue caratteristicheOgni linguaggio aveva le sue caratteristiche I suoi tipi di datiI suoi tipi di dati Le sue librerie di funzioniLe sue librerie di funzioni Il suo modo di gestire la memoria, gli errori, ecc.Il suo modo di gestire la memoria, gli errori, ecc.
L’introduzione delle macchine virtualiL’introduzione delle macchine virtuali
C’era la necessità di trovare qualcosa che C’era la necessità di trovare qualcosa che funzionasse da “astrazione” dal sistema operativo funzionasse da “astrazione” dal sistema operativo per permettere al programmatore di concentrarsi su per permettere al programmatore di concentrarsi su un “modello virtuale” di sistemaun “modello virtuale” di sistema Concetto apparso inizialmente in ambito accademicoConcetto apparso inizialmente in ambito accademico Java è probabilmente l’implementazione più famosa di Java è probabilmente l’implementazione più famosa di
questo concettoquesto concetto Il .NET Framework di Microsoft è la soluzione creata Il .NET Framework di Microsoft è la soluzione creata
per tutta la famiglia Windowsper tutta la famiglia Windows
Applicazioni monoliticheApplicazioni monolitiche
Applicazione
Codice e strutture dati
L’era di COM / CORBAL’era di COM / CORBA
COM e CORBA consentono di integrare dei componenti.Ogni componente deve però fornire dei “punti di contatto” e gli oggetti non possono interagire direttamente
C++ / Java / VB IDL
Marshaling
.NET: oltre l’era di COM.NET: oltre l’era di COM
Con “.NET Framework Common Language Runtime”, i componenti sono costruiti su uno strato comune. Gli oggetti interagiscono direttamente.
Perché .NETPerché .NET
Difficile effettuare sviluppo omogeneoDifficile effettuare sviluppo omogeneo Molto tempo viene dedicato a far comunicare i Molto tempo viene dedicato a far comunicare i
vari “strati”vari “strati” Serve un salto qualitativo per semplificare lo Serve un salto qualitativo per semplificare lo
scenarioscenario Ma non c’era COM ?Ma non c’era COM ?
Architettura .NET FrameworkArchitettura .NET Framework
Base Class Library
Common Language Specification
Common Language Runtime
Data and XML
VB C++ C#V
isual S
tud
io.N
ET
J# …
WebServices
UserInterface
Cosa è .NETCosa è .NET È un ambiente di esecuzione (runtime environment)È un ambiente di esecuzione (runtime environment) È una serie di librerie e di strumenti per lo sviluppo di È una serie di librerie e di strumenti per lo sviluppo di
applicazioniapplicazioni Per client WindowsPer client Windows Per il WebPer il Web Per la realizzazione di Web ServicesPer la realizzazione di Web Services
Semplifica lo sviluppo e il deploymentSemplifica lo sviluppo e il deployment Aumenta l’affidabilità del codiceAumenta l’affidabilità del codice È completamente indipendente da COMÈ completamente indipendente da COM È fortemente integrato con COMÈ fortemente integrato con COM Unifica il modello di programmazioneUnifica il modello di programmazione
Ambiente di esecuzioneAmbiente di esecuzione
Concetti chiave:Concetti chiave: MSIL: Microsoft Intermediate LanguageMSIL: Microsoft Intermediate Language CLR: Common Language RuntimeCLR: Common Language Runtime CTS: Common Type SystemCTS: Common Type System CLS: Common Language SpecificationCLS: Common Language Specification
Codice MSILCodice MSIL
Codicenativo
OutputCompilatoreJIT
CodiceMSIL
(Assembly).EXE/.DLL
Compilatore.NET
Sorgenti
Codice MSILCodice MSIL
Codicenativo
Output
Sorgenti
CompilatoreJIT
CodiceMSIL
(Assembly).EXE/.DLL
Compilatore.NET
Codice + metadati
Codice MSILCodice MSIL
Codicenativo
OutputCompilatoreJIT
CodiceMSIL
(Assembly).EXE/.DLL
Compilatore.NET
SorgentiAmbiente di esecuzione
.NET Runtime
Common Language RuntimeCommon Language Runtime
IL CLR offre vari servizi alle applicazioniIL CLR offre vari servizi alle applicazioniManaged code (MSIL)
Sistema operativo (Win32, …)
Common Language Runtime (CLR)
Funzionalità esistenti (es. I/Osu file) mediate da CLR
Funzionalità specifiche di CLR(es. Garbage Collection)
Common Language RuntimeCommon Language Runtime
Class Loader
IL to NativeCompilers
CodeManager
GarbageCollector
Security Engine Debug Engine
Type Checker Exception Manager
Thread Support COM Marshaler
Base Class Library Support
Processo Win32 (app.exe)Processo Win32 (app.exe)
MSCOREE.DLLMSCOREE.DLL
Managed WorldManaged World
Runtime HostRuntime Host
Esecuzione di un’applicazione .NETEsecuzione di un’applicazione .NET
MSCORLIB.DLLMSCORLIB.DLL
MYCOMCLASS.DLLMYCOMCLASS.DLL
KERNEL.DLLKERNEL.DLLMYNETCLASS.DLLMYNETCLASS.DLL
Mars
halin
g
Runtime HostRuntime Host
MSCOREE.DLLMSCOREE.DLL ““Ultima” DLL COM rimasta...Ultima” DLL COM rimasta...
__CorDllMainCorDllMain: Entry-point del loader per caricare ed eseguire : Entry-point del loader per caricare ed eseguire il codice ILil codice IL
MSCORLIB.DLLMSCORLIB.DLL Implementa CTS (Common Type System)Implementa CTS (Common Type System) Contiene BCL (Base Class Library)Contiene BCL (Base Class Library) Non si vede con DEPENDS.EXE, usare ADEPENDS.EXENon si vede con DEPENDS.EXE, usare ADEPENDS.EXE
Diversi tipi processi hostDiversi tipi processi host Shell exe, ASP.NET, Internet Explorer, Servizi NTShell exe, ASP.NET, Internet Explorer, Servizi NT
Sviluppo semplificatoSviluppo semplificato
Ambiente object-orientedAmbiente object-oriented Qualsiasi entità è un oggetto Qualsiasi entità è un oggetto Classi ed ereditarietà pienamente supportatiClassi ed ereditarietà pienamente supportati Anche tra linguaggi diversi !Anche tra linguaggi diversi !
Riduzione errori comuni di programmazioneRiduzione errori comuni di programmazione Linguaggi fortemente tipizzatiLinguaggi fortemente tipizzati Errori non gestitiErrori non gestiti Meno memory leak: Garbage CollectorMeno memory leak: Garbage Collector
Indipendenza dalla piattaformaIndipendenza dalla piattaforma .NET è un’implementazione di CLI.NET è un’implementazione di CLI
Common Language InfrastructureCommon Language Infrastructure CLI è uno standard ECMA, definito con C#CLI è uno standard ECMA, definito con C#
ECMA-334, ECMA-335ECMA-334, ECMA-335 Esistono già altre implementazioni di CLI:Esistono già altre implementazioni di CLI:
SSCLI (Microsoft, per Windows, FreeBSD e Macintosh)SSCLI (Microsoft, per Windows, FreeBSD e Macintosh) Mono (per Linux)Mono (per Linux) DotGNUDotGNU Intel OCL (Open CLI Library)Intel OCL (Open CLI Library) ……
Distribuzione semplificata delle applicazioniDistribuzione semplificata delle applicazioni
AssemblAssemblyy Unità minima per la distribuzione, il versioning e la Unità minima per la distribuzione, il versioning e la
securitysecurity Simile alle DLL, ma aggiunge meta-dati sul contenuto Simile alle DLL, ma aggiunge meta-dati sul contenuto
attraverso il “Manifest”attraverso il “Manifest” Può essere composto da uno o più filePuò essere composto da uno o più file Il manifest può risiedere in un file EXE/DLL separato, Il manifest può risiedere in un file EXE/DLL separato,
oppure in un EXE/DLL che contiene codice oppure in un EXE/DLL che contiene codice dell’assemblydell’assembly
AssemblyAssembly
Assembly a modulo singolo
Codice IL
Metadati
Manifest
Modulo(file PE)
Sicurezza e affidabilità del codiceSicurezza e affidabilità del codice
Separazione spazi di memoria in un processo con Separazione spazi di memoria in un processo con AppDomainAppDomain
Controllo del codice e sicurezza dei tipiControllo del codice e sicurezza dei tipi Sono impediti cast non sicuri, variabili non inizializzate, Sono impediti cast non sicuri, variabili non inizializzate,
accessi ad array oltre i limiti di allocazioneaccessi ad array oltre i limiti di allocazione Garbage Collector per tutti gli oggetti Garbage Collector per tutti gli oggetti .NET.NET Gestione delle eccezioniGestione delle eccezioni
Miglioramento della diagnostica di erroreMiglioramento della diagnostica di errore Integrata con Integrata con Windows SEHWindows SEH
Type safetyType safety Isolamento della memoriaIsolamento della memoria
Consente l’esecuzione sicura di più applicazioni nello Consente l’esecuzione sicura di più applicazioni nello stesso processostesso processo
Type safety (sicurezza dei tipi)Type safety (sicurezza dei tipi) Assicura isolamento della memoriaAssicura isolamento della memoria Assicura operazioni corrette rispettoAssicura operazioni corrette rispetto
al sistema di sicurezzaal sistema di sicurezza Non è richiesta dal RuntimeNon è richiesta dal Runtime
VerificationVerification Assicura type safetyAssicura type safety
Type safetyType safety
Si eliminano:Si eliminano: Cast non sicuriCast non sicuri Variabili non inizializzateVariabili non inizializzate Indici di array fuori limite (out-of-bounds)Indici di array fuori limite (out-of-bounds)
PEVERIFY.EXEPEVERIFY.EXE Tool linea di comando per verificare requisiti di type Tool linea di comando per verificare requisiti di type
safety di un assemblysafety di un assembly
Application DomainApplication Domain
Unità di elaborazione in .NETUnità di elaborazione in .NET Un processo può avere più AppDomainUn processo può avere più AppDomain Si può scaricare un AppDomain, non un assemblySi può scaricare un AppDomain, non un assembly Relazione thread – AppDomainRelazione thread – AppDomain Runtime host creano AppDomainRuntime host creano AppDomain
ASP.NET, Internet Explorer, Shell, …ASP.NET, Internet Explorer, Shell, … Gestione diretta degli AppDomainGestione diretta degli AppDomain
Garbage CollectorGarbage Collector
Gli oggetti vengono distrutti automaticamente Gli oggetti vengono distrutti automaticamente quando non sono più referenziatiquando non sono più referenziati
A differenza di COM, non ci si basa sul A differenza di COM, non ci si basa sul Reference CountingReference Counting Maggiore velocità di allocazioneMaggiore velocità di allocazione Consentiti i riferimenti circolariConsentiti i riferimenti circolari Perdita della distruzione deterministicaPerdita della distruzione deterministica
Algoritmo Mark-and-CompactAlgoritmo Mark-and-Compact
Garbage Collector - fase 1: MarkGarbage Collector - fase 1: Mark
NextObjPtrNextObjPtr
Oggetti “vivi”Oggetti “vivi”
Oggetti non raggiungibiliOggetti non raggiungibili
Spazio liberoSpazio libero
Root setRoot set
Garbage Collector - fase 2: CompactGarbage Collector - fase 2: Compact
NextObjPtrNextObjPtr
Oggetti “vivi”Oggetti “vivi”
Spazio liberoSpazio libero
Root setRoot set
Spazio recuperatoSpazio recuperato
Piattaforma multi-linguaggioPiattaforma multi-linguaggio
Libertà di scelta del linguaggioLibertà di scelta del linguaggio Tutte le funzionalità di Tutte le funzionalità di .NET .NET Framework sono Framework sono
disponibili a tutti i linguaggi .NETdisponibili a tutti i linguaggi .NET I componenti di un’applicazione possono essere I componenti di un’applicazione possono essere
scritti con diversi linguaggiscritti con diversi linguaggi Impatto sui toolImpatto sui tool
Tool disponibili per tutti i linguaggi:Tool disponibili per tutti i linguaggi:Debugger, Profiler, Analisi “Code coverage”, ecc.Debugger, Profiler, Analisi “Code coverage”, ecc.
CTS: Common Type SystemCTS: Common Type System
Sistema di tipi comuneSistema di tipi comune Alla base di tutti i linguaggi .NETAlla base di tutti i linguaggi .NET
Progettato per linguaggi object-oriented, procedurali Progettato per linguaggi object-oriented, procedurali e funzionalie funzionali Esaminate caratteristiche di 20 linguaggiEsaminate caratteristiche di 20 linguaggi Tutte le funzionalità disponibili con ILTutte le funzionalità disponibili con IL Ogni linguaggio utilizza alcune caratteristicheOgni linguaggio utilizza alcune caratteristiche
Common Language Specification (CLS)Common Language Specification (CLS) Sottoinsieme di CTSSottoinsieme di CTS Regole di compatibilità tra linguaggiRegole di compatibilità tra linguaggi
CTS: Common Type SystemCTS: Common Type System
Alla base di tutto ci sono i tipi (le classi)Alla base di tutto ci sono i tipi (le classi) Fortemente tipizzato (compile-time)Fortemente tipizzato (compile-time) Object-orientedObject-oriented
Campi, metodi, tipi nidificati, proprietà, ...Campi, metodi, tipi nidificati, proprietà, ... Overload di funzioni (compile-time)Overload di funzioni (compile-time) Dispatch metodi virtuali risolto a runtimeDispatch metodi virtuali risolto a runtime Ereditarietà singola di implementazioneEreditarietà singola di implementazione Ereditarietà multipla di interfacceEreditarietà multipla di interfacce
Common Type SystemCommon Type System
Qualsiasi applicazione .NET è realizzata definendo un Qualsiasi applicazione .NET è realizzata definendo un insieme di tipi + utilizzo (istanziazione) di questi ultimi insieme di tipi + utilizzo (istanziazione) di questi ultimi insieme a quelli predefiniti da MS (Base Class Library)insieme a quelli predefiniti da MS (Base Class Library)
Due categorie di tipi:Due categorie di tipi: Tipi reference (riferimento)Tipi reference (riferimento)
Allocati su heap gestitoAllocati su heap gestito Tipi value (valore)Tipi value (valore)
Allocati su stack o in oggetti gestiti (reference)Allocati su stack o in oggetti gestiti (reference)
Tutti i tipi value possono essere visti come tipi referenceTutti i tipi value possono essere visti come tipi reference BoxingBoxing
Estendibilità tipi valueEstendibilità tipi value
I value type comprendono:I value type comprendono: Tipi primitivi (built-in)Tipi primitivi (built-in) Tipi definiti dall’utenteTipi definiti dall’utente
EnumEnum StruttureStrutture
I tipi value definiti dall’utente hanno le stesse I tipi value definiti dall’utente hanno le stesse capacità dei tipi primitivicapacità dei tipi primitivi
Tipi value e reference in memoriaTipi value e reference in memoria
StackStack HeapHeap
heightheight
widthwidth
Class CSizeClass CSize
v.heightv.height
v.widthv.width
rr
public struct Size { public int height; public int weight;}public class CSize { public int height; public int weight;}void Main() { Size v; // v istanza di Size v.height = 100; // ok CSize r; // r è un reference r.height = 100; // illegale, r non assegnato r = new CSize(); // r fa riferimento a un CSize r.height = 100; // ok, r inizializzata}
Tipi nativiTipi nativiCLRCLR C#C# VB.NETVB.NET
ObjectObject objectobject ObjectObject
StringString stringstring StringString
BooleanBoolean boolbool BooleanBoolean
CharChar charchar CharChar
SingleSingle floatfloat SingleSingle
DoubleDouble doubledouble DoubleDouble
DecimalDecimal decimaldecimal DecimalDecimal
SByteSByte sbytesbyte n.d.n.d.
ByteByte bytebyte ByteByte
Int16Int16 shortshort ShortShort
UInt16UInt16 ushortushort n.d.n.d.
Int32Int32 intint IntegerInteger
UInt32UInt32 uintuint n.d.n.d.
Int64Int64 longlong LongLong
UInt64UInt64 ulongulong n.d.n.d.
BoxingBoxing
I tipi value si possono sottoporre a “boxing” I tipi value si possono sottoporre a “boxing” per supportare le funzionalità tipiche degli per supportare le funzionalità tipiche degli oggettioggetti Un tipo value “boxed” è un clone indipendenteUn tipo value “boxed” è un clone indipendente Un tipo value “boxed” può tornareUn tipo value “boxed” può tornare
ad essere value (ad essere value (unboxingunboxing)) System.ObjectSystem.Object è il tipo universale è il tipo universale
BoxingBoxingint i = 123;int i = 123;object o = i;object o = i;int k = (int)o;int k = (int)o;
123123
i
ointint
123123
123123
k
int j = (int)o;int j = (int)o;
object o = i;object o = i;
int i = 123;int i = 123;
StackStack
HeapHeap
BoxinBoxingg
UnboxinUnboxingg
Gestione degli erroriGestione degli errori
Uniforme per tutte le classiUniforme per tutte le classi Gestione strutturata delle eccezioniGestione strutturata delle eccezioni
Concetto implementato nel CTSConcetto implementato nel CTS Disponibile in tutti i linguaggi con sintassi diverseDisponibile in tutti i linguaggi con sintassi diverse Concetti universali:Concetti universali:
Lanciare un’eccezioneLanciare un’eccezione Catturare un’eccezioneCatturare un’eccezione Codice di uscita da un blocco controllato (finally)Codice di uscita da un blocco controllato (finally)
Non ha costi elevati (codice/prestazioni)Non ha costi elevati (codice/prestazioni)
Gestione strutturata delle eccezioniGestione strutturata delle eccezioni
a()a()
b()b()
TryTry
c()c()
d()d()
Catch e As ExceptionCatch e As Exception
f()f()
End TryEnd Try
g()g()
Sub cSub c
r()r()
s()s()
t()t()
End SubEnd Sub
Sub sSub s
Dim a As MyClassDim a As MyClass
a = nulla = null
a.z()a.z()
a.w()a.w()
a.x()a.x()
End SubEnd Sub
Principali servizi del CLRPrincipali servizi del CLR Garbage collector Garbage collector
Gestione del ciclo di vita degli oggettiGestione del ciclo di vita degli oggetti Problema della distruzione deterministicaProblema della distruzione deterministica
ReflectionReflection Analisi dei metadati di un assemblyAnalisi dei metadati di un assembly Generazione di un assembly dinamicoGenerazione di un assembly dinamico
RemotingRemoting Chiamata di componenti remoti (.NET)Chiamata di componenti remoti (.NET)
Interoperabilità Interoperabilità (COM, Platform Invoke)(COM, Platform Invoke)
Elaborazione sincrona e asincronaElaborazione sincrona e asincrona
a()a() b()b() c()c() d()d() e()e() f()f() g()g() h()h()
a()a()
b()b()
c()c()
d()d()
e()e()
f()f()
g()g() h()h()ffoorrkk
jjooiinn
TempoTempo
ElaborazioElaborazionene
sincronasincrona
ElaborazioneElaborazioneasincronaasincrona Thread 1Thread 1
Thread 2Thread 2
Elaborazione sincrona e asincronaElaborazione sincrona e asincrona
Programmazione asincrona possibile da tutti i Programmazione asincrona possibile da tutti i linguaggilinguaggi Chiamate asincroneChiamate asincrone ThreadThread Thread poolThread pool Componenti remotiComponenti remoti A volte è “involontaria”...A volte è “involontaria”...
Nuovo problema: componenti thread-safeNuovo problema: componenti thread-safe Anche per gli sviluppatori VB!!Anche per gli sviluppatori VB!!
Dove sono gli assemblyDove sono gli assembly
Assembly privatiAssembly privati Directory applicazione (e sub-directory)Directory applicazione (e sub-directory)
Assembly condivisiAssembly condivisi Global Assembly Cache (GAC)Global Assembly Cache (GAC) c:\windows\assemblyc:\windows\assembly
Assembly scaricati da URLAssembly scaricati da URL Download cacheDownload cache c:\windows\assembly\downloadc:\windows\assembly\download
GACUTIL.EXEGACUTIL.EXE Tool per esaminare GAC e download cacheTool per esaminare GAC e download cache
Deployment degli assemblyDeployment degli assembly
XCOPYXCOPY Applicazioni ASP.NETApplicazioni ASP.NET
.CAB.CAB Applicazioni Windows Forms - Code DownloadApplicazioni Windows Forms - Code Download
.MSI (Windows Installer).MSI (Windows Installer) Applicazioni Windows FormsApplicazioni Windows Forms Installazione in GAC di assembly condivisiInstallazione in GAC di assembly condivisi Configurazione shortcutConfigurazione shortcut
MetadatiMetadati
Descrizione di un assemblyDescrizione di un assembly Identità: nome, versione, cultura [, pubblic key]Identità: nome, versione, cultura [, pubblic key] Tipi esportatiTipi esportati Assembly da cui dipendeAssembly da cui dipende Permessi necessari per l’esecuzionePermessi necessari per l’esecuzione
Descrizione dei tipiDescrizione dei tipi Nome, visibilità, classe base, interfacce implementateNome, visibilità, classe base, interfacce implementate
Attributi customAttributi custom Definiti dall’utenteDefiniti dall’utente Definiti dal compilatoreDefiniti dal compilatore Definiti dal FrameworkDefiniti dal Framework
Strong NameStrong Name
Sinonimo: “shared name”Sinonimo: “shared name” Traduzione ufficiale: “nome sicuro”Traduzione ufficiale: “nome sicuro” Lo scopo è garantire:Lo scopo è garantire:
Identità dell’assemblyIdentità dell’assembly Nessuna modifica del codiceNessuna modifica del codice Riferimenti univociRiferimenti univoci
Non garantisce identità dell’autoreNon garantisce identità dell’autore Nel caso usare tecnologie come la firma digitale Nel caso usare tecnologie come la firma digitale
con certificaticon certificati
Strong NameStrong Name Nome completo assembly:Nome completo assembly:
NameName (di solito è il nome del file) (di solito è il nome del file) VersionVersion (major/minor/build/revision) (major/minor/build/revision) CultureInfo*CultureInfo* (lingua/zona) (lingua/zona) Originator/PublicKey*Originator/PublicKey* (identità assembly) (identità assembly)
* = opzionale* = opzionale
nomeassembly, Version=1.2.3.4, Culture=en-US, nomeassembly, Version=1.2.3.4, Culture=en-US, PublicKeyToken=1234123412341234PublicKeyToken=1234123412341234
using System.Reflection;using System.Reflection;
[assembly: AssemblyVersion(“1.2.3.4”)][assembly: AssemblyVersion(“1.2.3.4”)]
[assembly: AssemblyCulture(“en-US”)][assembly: AssemblyCulture(“en-US”)]
[assembly: AssemblyKeyFile(“mycompany.snk”)][assembly: AssemblyKeyFile(“mycompany.snk”)]
Nome assembly visualizzatoNome assembly visualizzato
Codice C#Codice C#
Strong NameStrong Name Assembly firmato digitalmenteAssembly firmato digitalmente Coppia di chiavi pubblica/privataCoppia di chiavi pubblica/privata Chiave pubblica 1024 bit nell’assemblyChiave pubblica 1024 bit nell’assembly Riferimenti all’assembly con Public TokenRiferimenti all’assembly con Public Token
hash 64-bit della chiave pubblica completahash 64-bit della chiave pubblica completa Hash di tutto il file Hash di tutto il file Digital Signature Digital Signature SN.EXE per gestire file di chiaviSN.EXE per gestire file di chiavi Attributi [Attributi [AssemblyKeyFileAssemblyKeyFile()] e ()] e
[[AssemblyDelaySignAssemblyDelaySign()] per associare chiavi agli ()] per associare chiavi agli assemblyassembly
Firma digitale dell’assemblyFirma digitale dell’assembly
Assembly
Public Key
Hash File
RSA Digital Signature
Library.dll
RSA Digital Signature
Codice IL
Metadati
ManifestPublic Key
Private Key
RSA Digital SignaturePublic Key
Hash File
Firma digitale dell’assemblyFirma digitale dell’assembly
Tool e attributi:Tool e attributi: SN.EXE per gestire file di chiaviSN.EXE per gestire file di chiavi Attributi [Attributi [AssemblyKeyFileAssemblyKeyFile()] e ()] e
[[AssemblyDelaySignAssemblyDelaySign()]()] Integrazione con compilatori/VS.NETIntegrazione con compilatori/VS.NET
In alternativa:In alternativa: AL.EXEAL.EXE
Strong Name & Strong ReferenceStrong Name & Strong Reference
PE/PE/COFFCOFF
HeaderHeader CLR HeaderCLR Header CodeCode
StrongApp.exeStrongApp.exe
using System.Reflection;using System.Reflection;
[assembly: AssemblyKeyFile( “publicprivate.snk”)][assembly: AssemblyKeyFile( “publicprivate.snk”)]
[assembly: AssemblyDelaySign( false )][assembly: AssemblyDelaySign( false )]
csc /t:library StrongLib.cscsc /t:library StrongLib.cs
Assembly ReferenceAssembly Reference
stronglistronglibb
Public Key Token (8 Public Key Token (8 bytes)bytes)
PE/PE/COFFCOFF
HeaderHeader CLR HeaderCLR Header CodeCode
Public Key (128 Public Key (128 bytes + header 32 bytes + header 32
bytes)bytes)
SignaturSignaturee
StrongLib.dllStrongLib.dll
Public KeyPublic Key(128 bytes + (128 bytes +
header 32 header 32 bytes)bytes)
Private KeyPrivate Key(436 bytes)(436 bytes)
Publicprivate.snkPublicprivate.snk
Librerie di classiLibrerie di classi
Base Class Library
Common Language Specification
Common Language Runtime
Data and XML
VB C++ C#V
isual S
tud
io.N
ET
J# …
WebServices
UserInterface
Estendibilità delle classiEstendibilità delle classi
Il Framework non è una “scatola nera”Il Framework non è una “scatola nera” Qualsiasi classe Qualsiasi classe .NET .NET può essere estesa può essere estesa
mediante ereditarietàmediante ereditarietà Diversamente da Diversamente da COM, COM, si usa e si estende la classe si usa e si estende la classe
stessa, non uno strato intermedio (wrapper)stessa, non uno strato intermedio (wrapper) L’ereditarietà è L’ereditarietà è cross-languagecross-language
Base Class Library
Data Xml
Web Services User Interface
.NET Framework.NET Framework
.NET Framework.NET Framework
System
System.Data System.Xml
System.Web
Globalization
Diagnostics
Configuration
Collections
Resources
Reflection
IO
Threading
Text
Security
SqlClient
OleDb
SQLTypes
Common
RuntimeInteropServices
Remoting
Serialization
Configuration SessionState
Caching Security
UIHtmlControls
WebControls
System.Drawing
Imaging
Drawing2D
Text
Printing
System.Windows.Forms
Design ComponentModel
XPath
Xsl
Serialization
Schema
Hosting
Handlers
Compilation
LinguaggiLinguaggi
La piattaforma La piattaforma .NET .NET è neutrale rispetto al è neutrale rispetto al linguaggio (nessuno è favorito)linguaggio (nessuno è favorito) Tutti i linguaggi Tutti i linguaggi .NET .NET hanno le stesse possibilitàhanno le stesse possibilità Si possono sfruttare skill già esistentiSi possono sfruttare skill già esistenti
Common Language SpecificationCommon Language Specification Consumer: Consumer: Può usarePuò usare .NET Framework .NET Framework Extender: Extender: Può estenderePuò estendere .NET Framework .NET Framework
LinguaggiLinguaggi
Microsoft fornisce:Microsoft fornisce: VB, C++, C#, J#VB, C++, C#, J#
Linguaggi di terze parti:Linguaggi di terze parti: APL, COBOL, Pascal, Eiffel, Haskell, ML, APL, COBOL, Pascal, Eiffel, Haskell, ML,
Oberon, Perl, Python, Scheme, Smalltalk, …Oberon, Perl, Python, Scheme, Smalltalk, …
Visual Studio .NETVisual Studio .NET
Un solo tool per tutti i linguaggiUn solo tool per tutti i linguaggi Creazione e consumo di servizi WebCreazione e consumo di servizi Web Modello a oggetti del codice in editorModello a oggetti del codice in editor Debugger integratoDebugger integrato ……
Considerazioni finaliConsiderazioni finali Un nuovo modello di sviluppo per la piattaforma Un nuovo modello di sviluppo per la piattaforma
applicativa Microsoftapplicativa Microsoft Un nuovo ambiente di esecuzione integrato tra Un nuovo ambiente di esecuzione integrato tra
diverse tipologie di applicazionidiverse tipologie di applicazioni Framework di classi già molto estesoFramework di classi già molto esteso
Ma soprattutto coerente!Ma soprattutto coerente! Quasi tutto completamente estendibileQuasi tutto completamente estendibile Alta integrabilità con il codice esistenteAlta integrabilità con il codice esistente A prima vista è tutto semplice, ma è bene andare a A prima vista è tutto semplice, ma è bene andare a
dare uno sguardo dietro le quinte!!dare uno sguardo dietro le quinte!!