le componenti di un calcolatore cpu cpu intel x86, amd intel x86, amd memoria volatile memoria...

65
Le componenti di un Le componenti di un calcolatore calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard disk, dispositivi USB, PC Card Hard disk, dispositivi USB, PC Card Rete Rete Wired e wireless LAN Wired e wireless LAN Bluetooth Bluetooth Altri dispositivi Altri dispositivi Porte di comunicazione (seriale, parallela, Porte di comunicazione (seriale, parallela, USB, firewire, ecc.) USB, firewire, ecc.)

Upload: sylvana-guidi

Post on 01-May-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 2: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 3: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 4: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 5: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 6: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 7: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 8: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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.

Page 9: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 10: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

Applicazioni monoliticheApplicazioni monolitiche

Applicazione

Codice e strutture dati

Page 11: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 12: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 13: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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 ?

Page 14: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 15: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 16: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 17: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

Codice MSILCodice MSIL

Codicenativo

OutputCompilatoreJIT

CodiceMSIL

(Assembly).EXE/.DLL

Compilatore.NET

Sorgenti

Page 18: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

Codice MSILCodice MSIL

Codicenativo

Output

Sorgenti

CompilatoreJIT

CodiceMSIL

(Assembly).EXE/.DLL

Compilatore.NET

Codice + metadati

Page 19: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

Codice MSILCodice MSIL

Codicenativo

OutputCompilatoreJIT

CodiceMSIL

(Assembly).EXE/.DLL

Compilatore.NET

SorgentiAmbiente di esecuzione

.NET Runtime

Marco Russo
Provocazione: c'è un solo linguaggio, MSIL, vedere esempio Demo_00 con codice IL che viene compilato con ILASM ed eseguito
Page 20: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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)

Page 21: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 22: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 23: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 24: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 25: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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) ……

Page 26: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 27: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

AssemblyAssembly

Assembly a modulo singolo

Codice IL

Metadati

Manifest

Modulo(file PE)

Page 28: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 29: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 30: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 31: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 32: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 33: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 34: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

Garbage Collector - fase 2: CompactGarbage Collector - fase 2: Compact

NextObjPtrNextObjPtr

Oggetti “vivi”Oggetti “vivi”

Spazio liberoSpazio libero

Root setRoot set

Spazio recuperatoSpazio recuperato

Page 35: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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.

Page 36: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 37: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 38: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 39: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 40: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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}

Page 41: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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.

Page 42: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 43: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 44: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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)

Page 45: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 46: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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)

Page 47: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 48: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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!!

Page 49: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 50: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 51: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 52: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 53: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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#

Page 54: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 55: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 56: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 57: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 58: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 59: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 60: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

Base Class Library

Data Xml

Web Services User Interface

.NET Framework.NET Framework

Page 61: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

.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

Page 62: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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

Page 63: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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, …

Page 64: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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 ……

Page 65: Le componenti di un calcolatore CPU CPU Intel x86, AMD Intel x86, AMD Memoria volatile Memoria volatile RAM RAM Memorie di massa Memorie di massa Hard

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!!