Virtualizzazione dei Sistemi metodologie, progetto e utilizzo Docente: Eugenia Occhiuto occhiuto@di.unipi.it www.di.unipi.it/~occhiuto Ricevimento studenti: Lun. 11-13, Dipartimento di Informatica, Stanza 356
Prerequisiti e modalità d’esame Programmazione con paradigmi imperativo e object oriented. Il linguaggio Java. Architettture dei calcolatori: concetti di base Sistemi operativi: concetti di base Modalità d’esame: orale, preparazione di un piccolo progetto in bytecode, utilizzando l’assembler Oolong.
Programma del corso (segue) Introduzione ai concetti di base : Concetto di macchina macchina fisica, macchina virtuale, astrazione interfacce I vantaggi della virtualizzazione : l’indipendenza dalla piattaforma, la portabilità, la robustezza, affidabilità e la protezione del software.
Programma del corso (segue) Ambiti e le tipologie di machine virtuali: process virtual machines: stesso ISA: sistemi multiprogrammatie ottimizzatori binari dinamici diverso ISA: traduttori dinamici, macchine ad alto livello system virtual machines: stesso ISA: macchine virtuali di sistema classiche, macchine virtuali ospitate diverso ISA: macchine virtuali di sistema complete, macchine virtuali coprogettate.
Programma del corso (segue) high level language virtual machines (HHL VMs). Pascal P-code VM, JVM: caratteristiche implementazione, scrittura di progammi in byte code utilizzando l’assembler Oolong per la traduzione in byte code CLI VM.
Testi di riferimento Virtual Machines, Versatile Platforms for System and Processes, J.E.Smith and R. Nair, Morgan Kaufmann Pub. Elsevier, ISBN-13: 978-1-55860-910-5, ISBN-10:55860-910-5. (Cap. 1, 5,6) Programming for the JVM, J. Engel, Addison Wesley, 1999, ISBN 0-201-30972-6. Java Virtual Machine specifications, T. Lindholm and F. Yellin, Addison Wesley, 1996, ISBN0-201-63452-X
Gestione della complessità Un moderno computer è una macchina molto complessa: hardware: molti chips contenenti un’enorme quantità (108) di transistor, più dispositivi di I/O, e di telecomuncazione, formano la piattaforma per il software software: S.O., software per la grafica e la connessione di rete, tutto ha lo scopo di fornire un ambiente potente e di facile utilizzo per ogni tipo di applicazione (gestione dei dati, comunicazione, intrattenimento, ecc) Una tale complessità si gestisce solo definendo molti: Livelli di astrazione separati by interfaces ben definite
Astrazione Un livello di astrazione permette di mascondere i dettagli implementativi di una o più componenti semplificando il loro uso a livello più alto. I livelli di astrazione sono organizzati in gerarchie: i livelli più bassi sono implementati in hardware (componeneti fisich econ interfacce interfaces che consentono le connessioni fisiche), i livelli più alti sono implementati in software (componenti logiche con interfacce molto più flessibili).
Interfacce Le interfacce consentono di separare i livelli di astrazione e costituiscono la connessione tra i due livelli. Per esempio il linguaggio macchina (ISA, Instruction Set Architecture) è l’interfaccia tra hardware e software. La specifica dell’ISA è fondamentale affinchè la macchina esegua calcoli correttamente. Essa è necessaria per chi realizza l’hardware perchè ne devono fornire l’implementazione. È necessaria per chi gli sviluppatori del software che devono realizzare i compilatori per i linguaggi ad alto livello.
Definizione Una macchina fisica (computer) è costituita dall’ hardware e dal linguaggio (ISA) che permette di specificare la funzioe da calcolare e i dati che devono essere usati per la computazione. Una macchina virtuale è l’insieme dei programmi (software) che simulano il comportamento di una macchina che è diversa dalla macchina fisica su cui il software è eseguito.
Definizioni Una piattaforma di computazione (computing platform) include un’architettura hardware and a software framework (includente frameworks per varie appliacazioi), dove the combinazione permette al software, particularly al software applicativo , di essere eseguito. macchina piattaforma (machine platform)
Virtualizzazione La Virtualizzazione: è un isomorphism V tra un sistema ospitato (guest) e un sistema ospitante (host) : Si, Sj sono stati, e,e’ sono sequenze di operazioni. SSi SSj e(Si) V(Si) V(Sj) SS’i SS’j e’(S’i) guest host
Astrazione L’Astrazione: è (anch’essa) un isomorfismo A tra due sistemi, che però nasconde dei dettagli (ovvero semplifica) mentre la virtualizzazione non necessariamente SSi SSj e(Si) A(Si) A(Sj) SS’i SS’j e’(S’i)
Virtualization versus Abstraction La virtualizzazione serve per emulare una diversa piattaforma o parti di essa, per rendere la piattaforma host compatibile con applicazioni che sono state sviluppate per una piattaforma diversa. Inizialmente le macchine virtuali emulano macchine fisiche reali. Successivamente vengono costruite macchine virtuali che emulano macchine inventate utili per implementare linguaggi ad es. JVM L’astrazione serve per semplificare e descrivere in sintesi ad es. La descrizione dell’Architettura di un calcolatore e` un’astrazione della macchina che e` una sua implementazione
Computer System Architecture Hardware Application Programs Libraries Operating System Execution Hardware MeMemory Translation bus Controllers I/O Devices and Networking 13 11 Main Memory 14 10 9 8 7 Drivers Memory Management Scheduler 4 3 1 2 5 6 Software ISA
Definizioni: ISA, ABI, OS L’ ISA è l’Instruction Set Architecture. Essa è il linguaggio macchina che comprende le istruzioni eseguibili dai normali processi (7) e le istruzioni privilegiate o di sistema . Le istruzioni di sistema permettono di gestire : I/O, Memoria, Scheduler, interrupt? (8) Il S.O. permette di eseguire chiamate di funzioni per function calls for: I/O, memory, processes (nascondendo così le istruzioni di sistema) (3) L’interfaccia binaria delle applicazioni (ABI) contiene le interfacce (3) e (7)
Machine interfaces Application software Application software Machine ISA system calls Machine Operating System ABI user ISA system ISA user ISA
Una macchina dal punto di vista dei processi Dal punto di vista dei processi (generati ad esempio da un programa utente) una macchina consiste di uno spazio logico di indirizzi di memoria, di registri per l’utente, e di istruzioni. Le chiamate di Sistema O, (spesso attraverso librerie) permettono di eseguire I/O (e altre) operazioni di sistema. Di solito i processi hanno un inizio e una fine. L’interazione, in questo caso avvine al livello della Interfaccia Binaria di Applicazione (ABI).
Una macchina dal punto di vista del Sistema Operativo Dal punto di vista del Sistema Operativo la macchina l’intera piattaforma che supporta diversi processi che condividono un file system e le risorse di I/O e comunicano attraverso chiamate di S.O. L’ambiente di sistema è persistente )con occasionali reboots) In questo caso l’interazione avviene al livello dell’Instruction Set Architecture (ISA).
Process Virtual Machine Application process Guest Virtualizing software Runtime Operating System Virtual machine Host Hardware
System Virtual Machine Application process Guest Operating System Virtualizing software VMM Virtual machine Hardware Host
System Virtual Machine supporting multiples OS environments IA-32 Windows Applications Windows Linux Applications Linux VMM
Diversi classi di Macchine Virtuali Macchine virtuali di processo stesso ISA Multiprogrammed Systems, di solito sistemi che supportano processi multi utente. Ogni processo viene eseguito come se la macchina fosse completamente dedicata. Ottimizzatori binari dinamici (traduttori dinamici conlo stesso ISA) ISA differenti Traduttori dinamici: emulazione di un diverso ISA (di solito l’ISA utente) Macchine Virtuali ad alto livello (JVM, CLI Vm)
Un esempio di traduttore Dinamico: Digital FX!32 IA32 Windows Application Alpha ISA La MV emula un diverso target user ISA. In questo caso guest e host condividono lo stesso SO. Di solito, l’implementazione dell’emulazione avviene attraverso l’interpretazione. Windows O.S PVM
Interpretazione contro Traduzione Interpretazione: ciascuna istruzione è reperita (fetched), (decoded) decodificata ed emulata. È piuttosto inefficiente ma facile da realizzare ed ha un basso costo di start up. Traduzione: richiede pìu tempo ma il codice tradotto è più efficiente. Blocchi di codice sorgente possono essere convertiti in codice target e ottimizzati. Techniques di profiling: mischiano interpretazione e traduzione, controllando quali blocchi di istruzioni vengono eseguiti frequentemente. Tali blocchi vengono tradotti e and ottimizzati (possibilmente) incrementalmente, mentre il programma viene eseguito.
MV per Linguaggi ad alto livello Sono progettate per l’implementazione di un particolare languaggio Conventional system HLL VM environment High level program Intermediate code Object code Memory image Loader High level program Portable code Virtual Memory Image Host instructions Compiler VM loader VM interpreter/compiler Compiler frontend Compiler backend
Diferenti classi di Macchine Virtuali Macchine virtuali di sistema stesso ISA Classic-System VMs, Hosted VMs differente ISA Whole-System VMs Codesigned VMs Il problema principale è la condivisione delle risorse.
Macchine Virtuali di sistema (stesso ISA) Dal punto di vista dell’utente sono tutte molto simili. Differiscono sull’implementazione, due possibilità: VM implementate sull’hardware: massimi privilegi. Tutti i sistemi ospitati (guests) sono implementati sulla VMM. Nessuno ha i privilegi diritti emulazione: c’è un solo S.O privilegiato gli altri sistemi (applicazioni e S.O.) sono emulati (possibili varie tecniche) VMM= Virtual Machine Monitor sta per il software di virtualizzazione
Classic (old) System Virtual Machine supporting multiples users Hardware Appl.s O.S. VMM .... User1 User2 Userk Usually the S.O. è unico: è solo un modo di implementare time sharing..
System Virtual Machine supporting multiples OS environments IA-32 Windows Applications Windows Linux Applications Linux VMM Nowadays servers implementation use such strategy mainly for security reasons.
System Virtual Machine: emulation Windows Applications Windows PowerPC Mac Applications Mac OS VM
Implementazione diretta contro emulazione Implementazione direct: efficienza rigidità: necessità di iniziare da zero per istallare una nuova W(whole-system)VM Emulazione: inefficienza flessibilità: possibilità di aggiungere la WVM, e dispositivi di I/O più tardi
Codesigned Virtual Machines L’obiettivo è l’ottimizzazione dell’hardware Differenti ISA or ISA modificati (alcune istruzioni sono aggiunte o cancellate) La MV traduce il codice binario del software (S.O. e appl.) nel diverso ISA. Tale traduzione è assolutamente trasparente (spesso utilizza una zona di memoria invisibile (ricavata nella memoria reale) al software ospitato Simile alla virtualizzazione dell’hardware (Non trattiamo queste MV)
High level language VM High Level language VMs permettono di implementare un linguaggio ad alto livello su diverse piattaforme: L’ISA viene progettato per adattarsi alle caratteristiche del linguaggio che si vuole implementare e efficientemente implementate su ciascuna piattaforma. L’implementazione della MV è dipendente dalla piattaforma e consentendo un’efficiente implementazione. Il frontend del compilatore è indipendente dalla piattaforma: portabilità.
HLL VM: ISA portabile Il frontend del compilatore produce un programma in codice portabile , detto V-ISA V-ISA e un languaggio intermedio che non contiene solo istruzioni ma anche meta dati (strutturati) che caratterizzano il languaggio Quali metadati il languaggio (V-ISA) fornisca depende dalle caratteristiche del linguaggio(HL) di interesse
High Level Language VM Sono progettate per l’ implementazione di uno specifico language Conventional system HLL VM environment High level program Intermediate code Object code Memory image Loader High level program Portable code Virtual Memory Image Host instructions Compiler VM loader VM interpreter/compiler Compiler frontend Compiler backend
Pascal P-code VM Pascal program Compiler P- code VM Library routines Host instructions Compiler VM Library routines readln() writeln() VM interpreter/compiler
Caratteristiche della P-Code VM comuni a tutte le HLL VMs È una macchina a stack : minima quantità di registri i binari sono di dimensioni contenute (importante per HD di capacità ridotta) la memoria è divisa in celle i cui dettagli d’implementazione (num. di bit ecc.) è nascosta la memoria è organizzata in stack e heap le cui dimensioni non sono una proprietà dell’ architettura ma dependono dalla piattforma. nessun indirizzo è assoluto (solo offsets da elementi nello stack) l’interfacciamento con il SO avviene attraverso librarie standard, al fine di isolare i programmi dal SO. Indipendenza dalla piattaforma contro librarie sofisticate / potenti.
Architettura di Memoria della P-Code Area di memoria del programma Area dati: area delle costanti: operandi immediati heap: memoria allocata dinamicamente (in pascal usando new). Lo heap persiste durante tutta l’esecuzione del programma e i dati in esso memorizzati sono condivisi dalle procedure e funzioni. stack: quando una procedura viene eseguita, le viene assegnata un nuovo frame sullo stack (porzione di stack) che esiste solo durante l’invocazione della procedura .: regione a dimensione fissa: markstack regione a dimensione variabile: locali, argomenti, operandi
Struttura di un frame dello stack (regione di dimensione fissata) Mark stack: permette di ripristinare lo stato quando la procedura(/funzione) termina la sua esecuzione: valore della funzione: valore calcolato se esiste link statico: link a constanti definite in procedure in cui la corrente procedura è annidata link dinamico: valore MP del precedente stack frame precedente valore EP “ “ “ “ indirizzo di ritorno: PC dell’istruzione che deve essere eseguita quando la procedura termina
Frame dello Stack (regione di dimensione variabile) parametri: valori dei parametri attuali locali: variabili dichiarate nella procedura stack degli operandi: lo stack è usato per la computazione quando la procedura è eseguita. SP punta al top dello stack. Cresce restando minore del valore EP
P-code V-ISA memory architecture: data area MP function value stack frame MP static link stack frame EP dynamic link mark stack previous EP return address NP parameters heap locals SP operand stack constant area EP
P-Code Memory Architecture: pointers PC: program counter punta alla prossima istruzione (nell’area del programma) MP: Mark Pointer punta all’inizio dello frame della procedura attualmente attiva EP: Extent Pointer punta alla fine del frame corrente dello stack SP: Stack Pointer punta all’attuale top dello stack degli operandi. Se SP=EP failure! memoria insufficiente NP: New Pointer punta all’indirizzo di massima estensione dello heap. Se EP=NP failure! memoria insufficiente
Insieme delle Istruzioni della P-Code load: memorizzazione dell’operando sul top dello stack store trascrizione in memoria del resultato che si trova sullo stack operazioni sugli elementi che si trovano sullo stack (top e precedenti) C’è anche un concetto di tipo abbastanza semplice: integer, real, Boolean, char, set, pointers. Il codice operativo (opcode) è diverso a seconda del tipo degli operandi (addi somma interi, addr somma reali, ecc.)
Insieme delle Istruzioni della P-Code Le istruzioni base includono: lodi 0 5 carica sullo stack la variable in 5a posizione dal MP ldci 1 carica sullo stack la costante 1 stri 0 5 memorizza il top dello stack nella locazione in 5a posizione da MP addi somma i due elementi sullo stack (il top e quello subito precedente) e lascia il resultato sullo stack