650 likes | 780 Views
Le componenti di un calcolatore. CPU Intel x86, AMD Memoria volatile RAM Memorie di massa Hard disk, dispositivi USB, PC Card Rete Wired e wireless LAN Bluetooth Altri dispositivi Porte di comunicazione (seriale, parallela, USB, firewire, ecc.). Il linguaggio della CPU. 31. 22. 21.
E N D
Le componenti di un calcolatore • CPU • Intel x86, AMD • Memoria volatile • RAM • Memorie di massa • Hard disk, dispositivi USB, PC Card • Rete • Wired e wireless LAN • Bluetooth • Altri dispositivi • Porte di comunicazione (seriale, parallela, USB, firewire, ecc.)
Il linguaggio della CPU 31 22 21 12 11 0 PDE (10 bit) PTE (10 bit) OFFSET (12 bit) 20 bits 12 bits 20 bits 12 bits 4GB 1023 1023 PAGE 4KB 0 0 Page Directory Page Table FA 00 08 CF AA 21 88 ………. CR#3 0 ix86 RAM
Il 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 operativo • Windows, Unix/Linux, VMS, OS/400, ecc. • Inizialmente • Un insieme di servizi per consentire alle applicazioni di non dover “reinventare tutte le volte la classica ruota” • Una serie di controlli per evitare che le applicazioni possano “danneggiarsi” tra loro • Oggi • Tutto quello appena detto più.. • Una interfaccia grafica sulle risorse del sistema • Un punto di controllo e configurazione del nostro PC
Come funziona Windows? • Parliamo ovviamente di Windows NT/2000/XP!! • Un kernelche fornisce tutti i sistemi di base • Gestione dei processi in esecuzione • Gestione della memoria • Controllo su tutti i dispositivi attraverso drivers • Un insieme di interfacce di programmazione (API) per accedere ai servizi del kernel • Librerie di funzioni: USER, GDI, KERNEL, ecc. • Diffici da utilizzare direttamente • Una shell, o interfaccia grafica, per permettere l’interazione con l’utente
Le caratteristiche fondamentali • Windows è un sistema multi-threading • Programmi e operazioni diverse possono essere eseguite in parallelo (se abbiamo più CPU..) • Windows è un sistema basato sul concetto di memoria virtuale • Ogni programma ha a disposizione 4Gb di memoria “fittizia” • Il sistema operativo si occupa di assegnare lo spazio nella memoria fisica e nel file di paginazione ai vari programmi • I programmi non possono “danneggiare” il kernel • I programmi sono “isolati” e non possono danneggiarsi tra loro
Come si programma Windows? • Dipende dal tipo di applicazione che vogliamo realizzare • Basata su finestre grafiche • Web • Un servizio di sistema • Scrivendo un programma in un linguaggio di programmazione che viene trasformato in “codice macchina” • Compilato • Interpretato • Il programma interagisce con il sistema operativo attraverso le API • Per disegnare una finestra • Per scrivere sulla stampante, ecc. • Un esempio di applicazione Windows
L’introduzione delle macchine virtuali • Inizialmente i programmi Windows erano scritti in linguaggio C, poi C++ • Molta potenza per il programmatore • Poco controllo sull’accesso ai servizi di sistema • Molto difficile da utilizzare in modo corretto • Ogni linguaggio aveva le sue caratteristiche • I suoi tipi di dati • Le sue librerie di funzioni • Il suo modo di gestire la memoria, gli errori, ecc.
L’introduzione delle macchine virtuali • C’era la necessità di trovare qualcosa che funzionasse da “astrazione” dal sistema operativo per permettere al programmatore di concentrarsi su un “modello virtuale” di sistema • Concetto apparso inizialmente in ambito accademico • Java è probabilmente l’implementazione più famosa di questo concetto • Il .NET Framework di Microsoft è la soluzione creata per tutta la famiglia Windows
Applicazione Codice e strutture dati Applicazioni monolitiche
IDL Marshaling L’era di COM / CORBA C++ / Java / VB COM e CORBA consentono di integrare dei componenti.Ogni componente deve però fornire dei “punti di contatto” e gli oggetti non possono interagire direttamente
.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é .NET • Difficile effettuare sviluppo omogeneo • Molto tempo viene dedicato a far comunicare i vari “strati” • Serve un salto qualitativo per semplificare lo scenario • Ma non c’era COM ?
VB C++ C# J# … Visual Studio.NET Common Language Specification Web Services User Interface Data and XML Base Class Library Common Language Runtime Architettura .NET Framework
Cosa è .NET • È un ambiente di esecuzione (runtime environment) • È una serie di librerie e di strumenti per lo sviluppo di applicazioni • Per client Windows • Per il Web • Per la realizzazione di Web Services • Semplifica lo sviluppo e il deployment • Aumenta l’affidabilità del codice • È completamente indipendente da COM • È fortemente integrato con COM • Unifica il modello di programmazione
Ambiente di esecuzione • Concetti chiave: • MSIL: Microsoft Intermediate Language • CLR: Common Language Runtime • CTS: Common Type System • CLS: Common Language Specification
Codice MSIL Sorgenti Compilatore.NET CodiceMSIL (Assembly) .EXE/.DLL Codicenativo Output Compilatore JIT
Codice MSIL Sorgenti Compilatore.NET CodiceMSIL (Assembly) .EXE/.DLL Codice + metadati Codicenativo Output Compilatore JIT
Codice MSIL Ambiente di esecuzione .NET Runtime Sorgenti Compilatore.NET CodiceMSIL (Assembly) .EXE/.DLL Codicenativo Output Compilatore JIT
Common Language Runtime • IL CLR offre vari servizi alle applicazioni Managed code (MSIL) Common Language Runtime (CLR) Funzionalità specifiche di CLR (es. Garbage Collection) Funzionalità esistenti (es. I/O su file) mediate da CLR Sistema operativo (Win32, …)
Base Class Library Support Thread Support COM Marshaler Type Checker Exception Manager Security Engine Debug Engine IL to Native Compilers Code Manager Garbage Collector Class Loader Common Language Runtime
Runtime Host • Esecuzione di un’applicazione .NET Processo Win32 (app.exe) MSCOREE.DLL MYCOMCLASS.DLL Managed World KERNEL.DLL MYNETCLASS.DLL Marshaling MSCORLIB.DLL
Runtime Host • MSCOREE.DLL • “Ultima” DLL COM rimasta... • _CorDllMain: Entry-point del loader per caricare ed eseguire il codice IL • MSCORLIB.DLL • Implementa CTS (Common Type System) • Contiene BCL (Base Class Library) • Non si vede con DEPENDS.EXE, usare ADEPENDS.EXE • Diversi tipi processi host • Shell exe, ASP.NET, Internet Explorer, Servizi NT
Sviluppo semplificato • Ambiente object-oriented • Qualsiasi entità è un oggetto • Classi ed ereditarietà pienamente supportati • Anche tra linguaggi diversi ! • Riduzione errori comuni di programmazione • Linguaggi fortemente tipizzati • Errori non gestiti • Meno memory leak: Garbage Collector
Indipendenza dalla piattaforma • .NET è un’implementazione di CLI • Common Language Infrastructure • CLI è uno standard ECMA, definito con C# • ECMA-334, ECMA-335 • Esistono già altre implementazioni di CLI: • SSCLI (Microsoft, per Windows, FreeBSD e Macintosh) • Mono (per Linux) • DotGNU • Intel OCL (Open CLI Library) • …
Distribuzione semplificata delle applicazioni • Assembly • Unità minima per la distribuzione, il versioning e la security • Simile alle DLL, ma aggiunge meta-dati sul contenuto attraverso il “Manifest” • Può essere composto da uno o più file • Il manifest può risiedere in un file EXE/DLL separato, oppure in un EXE/DLL che contiene codice dell’assembly
Modulo(file PE) Codice IL Metadati Manifest Assembly Assembly a modulo singolo
Sicurezza e affidabilità del codice • Separazione spazi di memoria in un processo con AppDomain • Controllo del codice e sicurezza dei tipi • Sono impediti cast non sicuri, variabili non inizializzate, accessi ad array oltre i limiti di allocazione • Garbage Collector per tutti gli oggetti .NET • Gestione delle eccezioni • Miglioramento della diagnostica di errore • Integrata con Windows SEH
Type safety • Isolamento della memoria • Consente l’esecuzione sicura di più applicazioni nello stesso processo • Type safety (sicurezza dei tipi) • Assicura isolamento della memoria • Assicura operazioni corrette rispettoal sistema di sicurezza • Non è richiesta dal Runtime • Verification • Assicura type safety
Type safety • Si eliminano: • Cast non sicuri • Variabili non inizializzate • Indici di array fuori limite (out-of-bounds) • PEVERIFY.EXE • Tool linea di comando per verificare requisiti di type safety di un assembly
Application Domain • Unità di elaborazione in .NET • Un processo può avere più AppDomain • Si può scaricare un AppDomain, non un assembly • Relazione thread – AppDomain • Runtime host creano AppDomain • ASP.NET, Internet Explorer, Shell, … • Gestione diretta degli AppDomain
Garbage Collector • Gli oggetti vengono distrutti automaticamente quando non sono più referenziati • A differenza di COM, non ci si basa sul Reference Counting • Maggiore velocità di allocazione • Consentiti i riferimenti circolari • Perdita della distruzione deterministica • Algoritmo Mark-and-Compact
NextObjPtr Root set Oggetti “vivi” Oggetti non raggiungibili Spazio libero Garbage Collector - fase 1: Mark
Spazio recuperato NextObjPtr Root set Oggetti “vivi” Spazio libero Garbage Collector - fase 2: Compact
Piattaforma multi-linguaggio • Libertà di scelta del linguaggio • Tutte le funzionalità di .NET Framework sono disponibili a tutti i linguaggi .NET • I componenti di un’applicazione possono essere scritti con diversi linguaggi • Impatto sui tool • Tool disponibili per tutti i linguaggi:Debugger, Profiler, Analisi “Code coverage”, ecc.
CTS: Common Type System • Sistema di tipi comune • Alla base di tutti i linguaggi .NET • Progettato per linguaggi object-oriented, procedurali e funzionali • Esaminate caratteristiche di 20 linguaggi • Tutte le funzionalità disponibili con IL • Ogni linguaggio utilizza alcune caratteristiche • Common Language Specification (CLS) • Sottoinsieme di CTS • Regole di compatibilità tra linguaggi
CTS: Common Type System • Alla base di tutto ci sono i tipi (le classi) • Fortemente tipizzato (compile-time) • Object-oriented • Campi, metodi, tipi nidificati, proprietà, ... • Overload di funzioni (compile-time) • Dispatch metodi virtuali risolto a runtime • Ereditarietà singola di implementazione • Ereditarietà multipla di interfacce
Common Type System • Qualsiasi applicazione .NET è realizzata definendo un insieme di tipi + utilizzo (istanziazione) di questi ultimi insieme a quelli predefiniti da MS (Base Class Library) • Due categorie di tipi: • Tipi reference (riferimento) • Allocati su heap gestito • Tipi value (valore) • Allocati su stack o in oggetti gestiti (reference) • Tutti i tipi value possono essere visti come tipi reference • Boxing
Estendibilità tipi value • I value type comprendono: • Tipi primitivi (built-in) • Tipi definiti dall’utente • Enum • Strutture • I tipi value definiti dall’utente hanno le stesse capacità dei tipi primitivi
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 } Stack Heap v.height v.width height width r Class CSize Tipi value e reference in memoria
Boxing • I tipi value si possono sottoporre a “boxing” per supportare le funzionalità tipiche degli oggetti • Un tipo value “boxed” è un clone indipendente • Un tipo value “boxed” può tornaread essere value (unboxing) • System.Object è il tipo universale
Stack int i = 123; object o = i; int k = (int)o; i Heap 123 int i = 123; o int 123 object o = i; Boxing k 123 int j = (int)o; Unboxing Boxing
Gestione degli errori • Uniforme per tutte le classi • Gestione strutturata delle eccezioni • Concetto implementato nel CTS • Disponibile in tutti i linguaggi con sintassi diverse • Concetti universali: • Lanciare un’eccezione • Catturare un’eccezione • Codice di uscita da un blocco controllato (finally) • Non ha costi elevati (codice/prestazioni)
a() b() Try c() d() Catch e As Exception f() End Try g() Sub c r() s() t() End Sub Sub s Dim a As MyClass a = null a.z() a.w() a.x() End Sub Gestione strutturata delle eccezioni
Principali servizi del CLR • Garbage collector • Gestione del ciclo di vita degli oggetti • Problema della distruzione deterministica • Reflection • Analisi dei metadati di un assembly • Generazione di un assembly dinamico • Remoting • Chiamata di componenti remoti (.NET) • Interoperabilità (COM, Platform Invoke)
Elaborazione sincrona e asincrona Elaborazionesincrona a() b() c() d() e() f() g() h() Tempo Elaborazioneasincrona a() fork c() e() g() join h() Thread 1 b() d() f() Thread 2
Elaborazione sincrona e asincrona • Programmazione asincrona possibile da tutti i linguaggi • Chiamate asincrone • Thread • Thread pool • Componenti remoti • A volte è “involontaria”... • Nuovo problema: componenti thread-safe • Anche per gli sviluppatori VB!!
Dove sono gli assembly • Assembly privati • Directory applicazione (e sub-directory) • Assembly condivisi • Global Assembly Cache (GAC) • c:\windows\assembly • Assembly scaricati da URL • Download cache • c:\windows\assembly\download GACUTIL.EXE • Tool per esaminare GAC e download cache
Deployment degli assembly • XCOPY • Applicazioni ASP.NET • .CAB • Applicazioni Windows Forms - Code Download • .MSI (Windows Installer) • Applicazioni Windows Forms • Installazione in GAC di assembly condivisi • Configurazione shortcut