Sistemi Operativi: Struttura avanzata - Lezione 05
1. Introduzione
• Negli ultimi anni, è esplosa la moda degli
strumenti di virtualizzazione
– Xen, KVM
– Vmware, VirtualBox
– User Mode Linux
– Qemu, Bochs
• Interesse:
– privato
– industriale
• PERCHE'?
1
2. Architetture – anni '90
• Server Intel/AMD estremamente popolari (x86)
• Ciascun server esegue Linux, Windows,
oppure Netware
• Le ditte installano un SO ed una applicazione
su ciascun server
• 2 server diventano rapidamente >50 server
• Problemi:
– Logistici (dove metto fisicamente le macchine)
– Consumo elettrico elevato
2
3. Architetture – anni '90
File Web File Web Domain
server server server server server
DNS App File
server server server
Ciascun server
esegue 1 applicazione
3
4. Architetture – 2000
• I produttori di HW si buttano a capofitto per
risolvere il problema
– Focus: rendere “piccoli” i server
• Alloggiamento delle unità di calcolo in armadi
– Rack: 6-20 unità server per armadio
– Blade: 30-60 unità server per armadio
• Unità di misura della “grandezza” delle unità
nell'armadio: 1U (19inch x 1.75inch)
– Larghezza, altezza dello chassis del server
• Unità di calcolo di diverse dimensioni:
– 1U, 2U, 3U
– Stessa larghezza, altezza raddoppiata, triplicata
4
5. Architetture – 2000
Dell PowerEdge 1950 Rack Unit (1U)
Armadio Rack pieno
Armadio Rack vuoto
5
6. Architetture – 2000
IBM HS20 Blade Server Unit
HP BladeSystem c7000
16 blade servers
2 UPS da 3U
6
7. Architetture – 2000
• Riduzione dello spazio necessario per ospitare
i server
• Il consumo elettrico rimane un problema
• Al crescere della frequenza delle CPU:
– l'utilizzazione media dei server si abbassa
(4%-10%)
– sempre una applicazione per server
7
8. I problemi attuali
• Sovradimensionamento delle infrastrutture
esistenti
– Costi enormi dovuti a consumo elettrico,
logistica e raffreddamento
– Costi enormi di amministrazione dovuti
all'installazione di una applicazione per server
• Bassi tassi di utilizzo delle risorse dei server
– Max. 10%
• Cosa deve essere fatto? Ridurre i costi
• Come riduco I costi?
– Ridurre il consumo elettrico
– Aumentare l'utilizzazione media per server
8
9. Virtualizzazione
• Una soluzione comune è quella di virtualizzare
l'architettura
• Eseguire tante macchine “finte”, “virtuali”
(equivalenti a macchine vere)
– Tramite software opportuni
– Su una architettura fisica vera più piccola
File Print DNS Domain
App servers server server
DB servers server server
Sistemi
virtuali
Sistema
fisico
9
10. Macchina virtuale
• Una macchina virtuale è una implementazione
software di un calcolatore
– Astrazione software di un calcolatore fisico
• Definizione di Popek e Goldberg:
– “Un duplicato efficiente ed isolato di una
macchina vera”
• Esempio: Java
– Un programma scritto in Java riceve servizi dal
Java Runtime Environment
– Il Java Runtime Environment implementa una
macchina “fittizia” sulla macchina reale
– Portabilità dei programmi
10
11. Architettura tradizionale
• Singolo SO per nodo Applicazione
fisico
• Singola applicazione
Processo Processo Processo
per nodo fisico
• Componenti HW
Sistema Operativo
connessi direttamente
al SO
Architettura HW
CPU memoria
rete disco
11
12. Architettura virtualizzata
• Aggiunta di un livello di Applicazione Applicazione
virtualizzazione, detto
Virtual Machine Monitor SO Windows SO Linux
Macchine
• Diversi SO possono CPU Disco CPU Disco
virtuali
essere instanziati sotto Mem Rete Mem Rete
forma di macchine Livello di virtualizzazione
virtuali (Virtual Machine Monitor)
• Ciascuna macchina
virtuale è isolata Sistema Operativo
• Possono essere eseguiti
più SO simultaneamente Architettura HW
• Se una macchina
CPU memoria
virtuale si rovina, le altre
non sono affette rete disco
12
13. Macchine virtuali:
innovazione o riscoperta?
• Il concetto di macchina virtuale è nuovo?
– Assolutamente no!
• Prima implementazione: CP-40 (IBM, 1967)
– Control Program (detto anche Virtual Machine)
– Installato sull'IBM System/360
– SO basato su memoria virtuale, time sharing
– Poteva eseguire tante istanze software del SO
(single user, interattivo) Conversational Monitor
System (CMS) sullo stesso hardware
13
17. VM/360: isolamento
• Implementazione tramite tecniche di time
sharing e virtualizzazione della memoria
• Macchina virtuale: copia esatta
dell'architettura fisica, sotto forma di processo
– dischi virtuali, nastri virtuali
– memoria principale virtuale
– CPU virtuale
– dispositivi I/O virtuali
• ciascun processo colloquia con la propria VM,
non con altro
17
18. VM/360: virtualizzazione risorse
• Il kernel implementa tutte le funzionalità
necessarie per suddividere le periferiche
fisiche in più periferiche virtuali
• Le periferiche virtuali non esistono; sono nomi
di dispositivi che il kernel mappa nei veri
dispositivi
– kernel crea dischi virtuali (detti minidischi),
mappati sulle traccie del disco vero
– traccie del disco vero
18
19. Un pò di terminologia
• Host: l'infrastruttura fisica vera che ospita
l'ambiente virtuale
– Host machine: computer fisico
– Host OS: sistema operativo vero
• Guest: l'infrastruttura virtuale
– Guest machine: infrastruttura hw virtuale
– Guest OS: sistema operativo virtuale
• Virtual Machine Monitor:
– Implementa l'astrazione virtuale
– Crea rappresentazioni “finte” di risorse
– Esegue OS ed applicazioni virtuali
– Se fa uso (o è implementato) in HW, prende il
nome di hypervisor 19
20. Un pò di terminologia
Applicazione Applicazione
Macchina SO Guest SO Guest
virtuale Windows Linux
CPU Disco CPU Disco
Guest HW
Mem Rete Mem Rete
Livello di virtualizzazione
(Virtual Machine Monitor)
Sistema Operativo
Host
Architettura HW Host
CPU memoria
rete disco
20
21. Applicazioni della virtualizzazione
• Isolamento
– Separazione completa di due macchine virtuali
• Consolidamento:
– Riduzione al minimo dell'architettura HW
• Test e sviluppo (Sandboxing):
– Sviluppo/test di applicazioni su diversi SO
– Sviluppo/test di applicazioni in ambienti ristretti
• Dynamic Load Balancing:
– Bilanciamento del carico fra più SO
• Disaster Recovery:
– Migrazione e ripristino di macchine virtuali in
seguito ad interruzioni di servizio
21
22. Applicazioni della virtualizzazione
Isolamento Consolidamento
App1 App2
App1 App2 App1 App2 App1 App2
OS OS OS1 OS1
OS OS2 OS2
VMM VMM
HW HW1 HW2
HW HW
Disaster recovery Test e sviluppo
App App
App App
OS OS OS1 OS2
VMM VMM
VMM VMM VMM
HW1 HW2 HW1 HW2 HW
22
23. Tassonomie
• Grado di emulazione dell'hardware
– Emulazione completa
– Emulazione parziale
♦ Virtualizzazione completa
♦ Virtualizzazione assistita dall'HW
♦ Paravirtualizzazione
• Livello a cui viene effettuata la virtualizzazione:
– Sistema Operativo
– Applicazione
– Risorse
• Virtualizzazione nativa e non nativa
23
24. Emulazione completa
• Permette di emulare tutti gli aspetti di un
calcolatore
– Tutto l'hardware
– Il Sistema Operativo
– Le applicazioni
• Permette di eseguire un SO Guest non
modificato su una architettura Host
completamente diversa
• Esempi:
– Bochs, VirtualPC, QEMU (senza accelerazione)
24
25. Emulazione completa
VMM
Applicazioni
Guest OS
Hardware
(tutto)
Sistema Operativo
Host
Architettura HW Host
CPU memoria
rete disco
25
26. Virtualizzazione completa
• Il VMM emula l'hardware necessario da
permettere l'esecuzione isolata di un SO Guest
non modificato
• Il SO Guest deve essere progettato per la
stessa CPU del SO Host
• Esempi:
– VirtualBox, Virtual PC, Vmware, QEMU (con
accelerazione), Win4Lin, Xen, User Mode Linux
26
27. Virtualizzazione completa
VMM
Applicazioni
Guest OS
Hardware
che serve
Sistema Operativo
Host
Architettura HW Host
CPU memoria
rete disco
27
28. Virtualizzazione assistita dall'HW
• Il VMM permette l'esecuzione isolata di un SO
Guest non modificato
• Il VMM mette a disposizione dei SO Guest
hardware vero tramite alcune estensioni hw del
processore
– Intel Virtualization Technology (VT-x, VT-d, VT-i)
– AMD Virtualization (AMD-V)
• Il SO Guest deve essere progettato per la
stessa CPU del SO Host
• Esempi:
– Vmware Fusion, VirtualBox, Xen, KVM/QEMU,
Parallels
28
29. Virtualizzazione assistita dall'HW
VMM
Applicazioni
Guest OS
Mappatura
in hw vero
Sistema Operativo
Host
Architettura HW Host
CPU memoria
rete disco
29
30. Paravirtualizzazione
• Il VMM non emula necessariamente
dell'hardware
• Il VMM mette a disposizione una API per
“estendere” il SO Guest
• L'estensione consiste nella implementazione di
hypercall
– Versione virtualizzata delle chiamate di sistema
– Invocano i servizi del VMM
– Invocate tramite eccezioni
• Esempi:
– Xen, KVM/QEMU, Win4Lin 9x
30
31. Paravirtualizzazione
VMM
Applicazioni
Guest OS
Hypercall
System call
Sistema Operativo
Host
Architettura HW Host
CPU memoria
rete disco
31
32. Virtualizzazione a livello di SO
• Il VMM ha il compito di partizionare le risorse
del SO Host fra I vari SO Guest
• Le risorse sono partizionate in contenitori
– Un contenitore per macchina virtuale
– Gruppi di processi, file, partizioni
• Approccio molto più snello delle varie
emulazioni
• È possibile eseguire solamente SO Guest con
kernel identico a quello Host
• Esempi:
– Comando chroot, Linux-VServer, Parallels
Virtuozzo Containers, Xen, KVM/QEMU,
Win4Lin 9x 32
33. Virtualizzazione a livello di SO
VMM
Contenitore
Applicazione
Assegnazione
porzione hw
System call
Sistema Operativo
Host
Architettura HW Host
CPU memoria
rete disco
33
34. Virtualizzazione a livello
di applicazione
• Meccanismo per eseguire programmi in
maniera portabile su diverse architetture
hardware/software
• Componenti:
– Definizione di un linguaggio portabile
– Compilatore per la traduzione del codice
sorgente in una rappresentazione indipendente
dall'architettura (bytecode)
– Interprete del bytecode risultante
– Ambiente di esecuzione (runtime environment)
che traduce il bytecode nelle operazioni di
basso livello del SO Host
• Esempi: Java, .NET, Perl, Python, Ruby,...
34
35. Virtualizzazione a livello
di applicazione
VMM
sorgente
Applicazione
Compilatore
Interprete
Runtime
environment
System call
Sistema Operativo
Host
Architettura HW Host
CPU memoria
rete disco
35
36. Virtualizzazione nativa e non nativa
• Se un sistema di virtualizzazione prevede
l'utilizzo esplicito di un SO Host e di un SO
Guest, si parla di virtualizzazione non nativa
– Lenta, Guest ed Host possono essere “diversi”
• Esempi:
– Sistemi ad emulazione completa o parziale
• Se un sistema di virtualizzazione prevede
l'utilizzo esplicito di un unico SO, si parla di
virtualizzazione nativa
– Veloce, Guest ed Host devono essere “uguali”
• Esempi:
– Chroot, Parallels, OpenVz, virtualizzazione a
livello di applicazione 36
37. Condizioni di Popek e Goldberg
• Come posso capire se una architettura hw sia
in grado di supportare la virtualizzazione in
maniera efficiente?
• Problema studiato da Popek e Goldberg (1974)
• Si parte da requisiti di efficienza e si
determinano condizioni sufficienti
sull'architettura hw
• Approccio valido ancora oggi
37
38. Condizioni di Popek e Goldberg
• Un Virtual Machine Monitor deve soddisfare tre
proprietà
• Equivalenza: il comportamento esibito dal SO
Guest deve essere del tutto equivalente a
quello del SO Host
• Controllo risorse: il VMM deve avere completo
controllo di tutte le risorse HW/SW del nodo
Host
• Efficienza: una percentuale significativa delle
istruzioni Guest devono essere eseguite senza
intervento del VMM
38
39. Condizioni di Popek e Goldberg
• Viene fornita una classificazione delle
istruzioni macchina di un calcolatore
• Istruzioni privilegiate:
– scatenano una eccezione se eseguite in user
mode
– Non scatenano una eccezione se eseguite in
kernel mode
• Istruzioni sensibili al controllo:
– provano a modificare la configurazione delle
risorse del sistema
• Istruzioni sensibili al comportamento:
– Il loro risultato dipende dalla configurazione
delle risorse del sistema
39
40. Condizioni di Popek e Goldberg
• Teorema 1: si ha UN VMM efficiente se
l'insieme delle istruzioni sensibili è un
sottoinsieme delle istruzioni privilegiate
• Detta in altre parole: il VMM è efficiente se
– tutte le istruzioni che ne possono alterare il
funzionamento sono eseguite in modalità
privilegiata, tramite una eccezione (controllo
risorse)
– tutte le istruzioni non privilegiate sono eseguite
in modalità nativa (efficienza)
• In realtà, il primo teorema di Popek e Goldberg
è una condizione necessaria e sufficiente (se e
solo se)
40
41. Condizioni di Popek e Goldberg
• Teorema 2: un calcolatore è ricorsivamente
virtualizzabile in maniera efficiente se
– è virtualizzabile in maniera efficiente
– può esserci eseguito un VMM senza dipendenze
temporali
• Il Teorema 2 ci dice quando una architettura
hw può eseguire VMM “a scatole cinesi”
– Un VMM esegue un VMM, che esegue un VMM
41
42. Approccio “Trap and emulate”
• Gli studi di Popek e Goldberg sembrano
suggerire una architettura di tipo “Trap and
emulate” per l'implementazione di VMM
• Il VMM viene eseguito in modalità privilegiata
• Tutte le istruzioni (privilegiate e non) eseguite
dalle CPU virtuali vengono eseguite sulla CPU
fisica in modalità non privilegiata
• Quando la CPU virtuale prova ad eseguire una
istruzione privilegiata, scatena una eccezione
• L'eccezione viene gestita dal VMM che emula
gli effetti della istruzione privilegiata sulla CPU
virtuale
42
43. Approccio “Trap and emulate”
Virtual Machine Monitor
Memoria della
Gestore
CPU
macchina virtuale
eccezioni
virtuale
Istruzioni non
privilegiate
Istruzioni
SO Host
privilegiate
I/O, memoria fisica
Eccezione
CPU reale
43
44. Popek, Goldberg ed x86
• Proviamo ad applicare quanto detto
all'architettura x86
• Istruzioni privilegiate:
– scatenano una eccezione se eseguite in ring > 0
– LIDT (Load Interrupt Descriptor Table)
• Istruzioni sensibili:
– Impostano/Dipendono dallo stato del sistema
(ad es., livello di privilegio attuale)
– POPF (mette in EFLAGS il valore in cima allo
stack)
– In ring 0, avviene una copia fedele
– In ring 3, il bit “Interrupt Enable” non viene
sovrascritto (per non impedire ricezione IRQ) 44
45. Popek, Goldberg ed x86
• Il teorema di Popek e Goldberg ci dice che
l'x86 è virtualizzabile efficientemente se tutte le
istruzioni sensibili sono eseguibili
esclusivamente in ring 0
• Rispondiamo alle seguenti domande:
– popf è sensibile? SI
– popf è eseguita solo in ring 0? NO
• Un VMM che esegue popf, non potrà mai
impostare l'interrupt enable di EFLAGS
– Non sarà mai equivalente ad x86 vero
– Non scatena eccezioni; come eseguo il VMM?
• Non vale il teorema di Popek e Goldberg
– Esecuzione di popf tramite VMM problematica 45
46. Popek, Goldberg ed x86
• Se non vale il teorema di Popek e Goldberg, è
tutto perduto? Non posso creare VMM su x86?
• Certo che posso creare VMM su x86!
• Il VMM non potrà eseguire a livello applicativo
le istruzioni critiche, ma dovrà emularle,
operando in ring 0
– Binary scanner: ispeziona a runtime il codice
binario del Guest OS/application ed inserisce le
eccezioni in punti strategici
– Dispatcher: viene invocato dalle eccezioni
– Allocator: alloca risorse macchina per
l'emulazione
– Interpreter: esegue l'istruzione privilegiata
46
47. Popek, Goldberg ed x86
• Le istruzioni sensibili non privilegiate sono
ben 17, nell'architettura Intel x86 di base
• Sensitive register instructions:
leggono/modificano registri sensibili, clock
registers, interrupt registers
– SGDT, SIDT, SLDT, SMSW, POPF, PUSHF
• Protection system instructions: sfruttano
modalità di indirizzamento protetto della
memoria
– LAR, LSL, VERR, VERW, POP, PUSH, CALL,
JMP, INT n, RET, STR, MOV
• Tutte queste istruzioni vanno emulate tramite
eccezioni inserite opportunamente :-(
47
48. Supporto INTEL alla virtualizzazione
• Insieme di modifiche architetturali
sull'architettura x86 a 32/64 bit
• Obiettivi:
– rimuovere i vincoli dovute alla non verifica delle
condizioni di Popek e Goldberg
– sostituire l'emulazione con l'accesso controllato
tramite hw
• Estensioni:
– VT-x, VT-i: gestione efficiente livelli privilegio,
rimozione limiti Popek Goldberg
– VT-d: accesso diretto all'I/O tramite hw
– VT-c: accesso diretto alle schede di rete tramite
hw
48
49. Estensione VT-x
• Una premessa importante: alcuni sistemi di
virtualizzazione (Xen) su architetture Intel
“normali” eseguono il Guest OS in ring 1, e
non in ring 0
– Ring deprivileging
• Vantaggi:
– Impossibilità di far eseguire codice privilegiato
al Guest OS
• Svantaggi
– Lentezza delle operazioni
49
50. Estensione VT-x
• Invenzione di un nuovo ring: VMX Root (detto
anche ring -1)
– Dedicato unicamente all'esecuzione del VMM
– Il Guest kernel esegue in ring 0
• Due modalità di esecuzione:
– VMX root: esegue il VMM (ring -1)
– VMX non root: x86 classica (ring 0-3)
• Due nuove transizioni di privilegio
– VM entry: VMX root->VMX non root
– VM exit: VMX non root->VMX root
• Nella modalità VMX non root, parecchie
istruzioni causano VM exit
50
51. Estensione VT-x
Senza VT-x Con VT-x
VMM VMM Ring -1
Ring 3 Ring 3
Applicazioni Applicazioni
Ring 1 Ring 0
Guest OS Guest OS
Hardware Hardware
Ring 0 Ring 0
Sistema Operativo Sistema Operativo
Host Host
Architettura HW Host Architettura HW Host
CPU memoria CPU memoria
rete rete
disco disco
51
52. Estensione VT-x
• Introduzione di una nuova struttura dati: VMCS
(Virtual Machine Control Structure)
• Contiene informazioni sui SO Guest e Host
• Semplifica le transizioni VM Entry e VM Exit
– VM Entry: lo stato del processore è letto da una
host state area
– VM Exit: lo stato del processore è scritto in una
guest state area
• Operazioni di gestione transizioni
– VMXON: Abilitazione modalità VMX ROOT
– VMLAUNCH: Interazione iniziale VM Entry
– VMRESUME: Interazioni successive VM Entry
– VMEXIT: Interazione VM Exit 52
53. Estensione VT-x
• Tra le tante istruzioni che scatenano un VM
Exit, ci sono quelle sensibili
• Consideriamo la VM Exit alla stregua di una
eccezione che invoca il VMM
• Torna a valere il teorema di Popek e Goldberg
• La virtualizzazione su x86 può essere di nuovo
operata in modalità efficiente
53
56. Estensione VT-x
VM 1
VMX
Ring 3
Non-root
Operation Ring 0
VM Enter
VMX Root Ring 3
Operation
VMLAUNCH Ring 0
56
57. Estensione VT-x
VM 1
VMX
Ring 3
Non-root
Operation Ring 0
VM Exit
VMX Root Ring 3
Operation
Ring 0
57
58. Estensione VT-x
VM 1
VMX
Ring 3
Non-root
Operation Ring 0
VM Enter
VMX Root Ring 3
Operation
VMRESUME Ring 0
58
59. Estensione VT-x
VM 1 VM 2 VM n
VMX
Ring 3 Ring 3 Ring 3
...
Non-root
Operation Ring 0 Ring 0 Ring 0
VM Enter
VMX Root Ring 3
Operation
VMLAUNCH Ring 0
59
60. Estensione VT-x
VM 1 VM 2 VM n
VMX
Ring 3 Ring 3 Ring 3
...
Non-root
Operation Ring 0 Ring 0 Ring 0
VM Enter VMCS VMCS VMCS
1 2 n
VMX Root Ring 3
Operation
VMLAUNCH Ring 0
60
61. Estensione VT-d
• Serie di modifiche ai chipset Intel per accedere
direttamente alle periferiche in modalità
– isolata
– efficiente
• Tre funzionalità:
– Extended Page Tables: ciascun Guest OS ha la
sua tabella delle pagine
– DMA remapping: ciascuna VM può dedicare
un'area di memoria per le operazioni DMA delle
periferiche
– Interrupt Virtualization: ciascuna VM riceve le
proprie interruzioni
61
62. Estensione VT-d
• Il VMM deve proteggere la memoria fisica
dall'accesso delle macchine virtuali
– Più VM condividono la stessa memoria fisica
– Una shadow page table per ciascuna VM
– Si chiama “shadow” perché non è mai
direttamente puntata dal registro CR3
– Porzioni di shadow page table vengono copiate
sulla e dalla tabella delle pagine vera
• L'aggiornamento tabella pagine e shadow page
table richiede l'istruzione mov CR3,...
– Va emulata dal VMM-> richiede VM Exit
– lentissima
62
63. Estensione VT-d
CPU CPU
System Bus
North Bridge
DRAM
VT-d
Integrated PCIe* Root Ports
Devices
PCI Express
South
PCI, LPC,
Bridge Legacy devices, …
63
64. Estensione VT-d
• Viene fornita una nuova struttura dati:
Extended Page Table (EPT)
• Struttura simile alla tabella delle pagine,
controllata direttamente dal VMM
– Definisce mappa fra indirizzi fisici Host e Guest
– EPT base pointer (non in CR3, bensì in un
campo della VMCS) punta all'inizio della EPT
– EPT è attivata in seguito ad una VM Entry
– EPT è disattivata in seguito ad una VM Exit
• Il SO Guest ha pieno controllo sulle sue tabelle
delle pagine
– Il Guest è in grado di fare la mov C3,... sulla EPT
– Non si richiede più una VM Exit per mov C3,... 64
66. Estensione VT-d
Extended Page Table: schema dettagliato
Indirizzo Indirizzo
CR3 lineare Guest fisico Host
+
Page Page
directory table
EPT
EPT EPT
+ +
Indirizzo fisico
Indirizzo fisico
iniziale della
iniziale della
pagina - Guest
pagina - Guest
66
67. Estensione VT-d: DMA remapping
• Il VMM può assegnare uno o più dispositivi di
I/O fisici ad un'area di memoria dedicata al
DMA della macchina virtuale (protection
domain)
• L'accesso al protection domain viene garantito
solo ai dispositivi registrati, in modo tale da
garantire isolamento
• Obiettivo: tradurre gli indirizzi lineari DMA del
Guest in indirizzi fisici dell'Host
• Device assignment structure: tabella che
mappa il dispositivo di I/O al protection domain
• Address translation structure: page table a 3
livelli
67
68. Estensione VT-d
DMA remapping: schema dettagliato
DMA Requests
Dev 31, Func 7
Device ID Virtual Address …
Length
Dev P, Func 2
Bus 255
Page
Bus N Frame
Fault Generation Bus 0
Dev P, Func 1
4KB Page
Dev 0, Func 0 Tables
Address Translation
DMA Remapping Structures
Device D1
Engine Device
Assignment
Translation Cache Structures
Device D2
Address Translation
Structures
Context Cache
Accesso alla memoria Strutture di traduzione
con l'indirizzo fisico Host
68
70. Estensione VT-d: DMA remapping
• VT-d mette a disposizione un meccanismo per
effettuare il caching delle strutture dati
coinvolte
– Context cache: per le device assignment
structures più frequenti
– IOTLB: traduzioni più frequenti (risultato del
lookup)
– Non-leaf cache: per le page directory più
frequenti
70
71. Estensioni VT: chi le usa?
• Tutti i VMM che fanno virtualizzazione assistita
dall'hardware
– Vmware Fusion, VirtualBox, Xen, KVM/QEMU,
Parallels
• Xen
– Senza estensioni VT, richiede la modifica del
SO Guest per poter effettuare hypercall in ring 1
(paravirtualizzazione)
– Con estensioni VT, il VMM ha tutti gli strumenti
hw per creare MV completamente virtualizzate
♦ Ciascuna MV ha le sue strutture di gestione
memoria mappate in hw
♦ Ciascuna MV può operare in ring 0
♦ Non serve più modificare il guest OS 71
72. JAVA
• Sun Microsystems, 1995
• Linguaggio orientato agli oggetti
• Implementazione di una macchina virtuale
(Java Virtual Machine, JVM)
• Specifica di classi con il costrutto class
– una classe contiene il metodo main
• Il compilatore produce, per ciascuna classe, un
file .class, contenente il bytecode
• bytecode: “linguaggio macchina” della JVM
– viene eseguito dalla JVM
– architecture-independent
72
73. JAVA
Struttura della JVM
file *.class
caricatore delle classi
verificatore delle classi
interprete
calcolatore
73
74. JAVA
Struttura della JVM
file *.class
JVM
caricatore delle classi
verificatore delle classi
interprete
calcolatore
74
75. JAVA
Struttura della JVM
file *.class
caricatore delle classi
verificatore delle classi
interprete
SO Host
calcolatore
75
76. JAVA
• Caricatore delle classi: si preoccupa di
caricare in memoria
– il file *.class del programma
– i file della libreria JAVA (*.jar)
• Verificatore delle classi: effettua
operazioni di controllo, quali
– correttezza sintattica del bytecode
– accesso entro i limiti legali dello stack JVM
– divieto di aritmetica sui puntatori
76
77. JAVA
• Interprete: esegue il bytecode
– garbage collection automatica
• L'interprete può essere:
– vero interprete, byte per byte
– Just In Time Compiler (JIT)
♦ compila il bytecode nel linguaggio macchina
reale della macchina
– esecuzione indipendente dall'architettura
77
78. QEMU
• Software di emulazione completa di
architetture hardware
• Scritto da Fabrice Bellard (2005)
– http://bellard.org/qemu/
• Licenza del software:
– Nucleo: LGPL
– Alcuni driver: BSD
• Opera una binary translation: sequenze di
istruzioni macchina Guest sono tradotte in
sequenza di istruzioni macchina Host
– un blocco di codice alla volta
– caching delle traduzioni
– Bytecode intermedio: Tiny Code Generator 78
79. QEMU: modalità di funzionamento
• User mode emulation
– QEMU esegue un processo Linux (compilato su
una data CPU) su un'altra CPU
• Complete Computer System mode emulation
– Supporta le architetture x86, AMD64, Alpha,
ETRAX CRIS, MIPS, SPARC
– Supporta i SO Linux, Solaris, Microsoft
Windows, DOS, BSD
– L'emulazione x86 supporta diverse periferiche
molto comuni
79
80. QEMU: gestione immagini
• I filesystem delle MV sono mappati su file
immagine
• Le immagini sono sparse
– Si può dichiarare una grandezza iniziale
arbitraria
– La dimensione attuale rispecchia l'uso
• Le immagini usano il formato Copy-On-Write
– Si può mantenere uno snapshot del sistema
(stato iniziale)
– Tutte le differenze sono scritte in un file
immagine a parte
– Se il sistema si rompe, si fa il rollback dello
snapshot
80
81. KQEMU: accelerazione
• Modulo del kernel che “accelera” l'esecuzione
di QEMU
– Il codice che gira in user mode viene eseguito
direttamente dalla CPU Host
– Il codice che gira in kernel mode viene emulato
81
82. QEMU: the Free OS Zoo
• Home page del progetto:
– http://www.oszoo.org/wiki/index.php/Main_Page
• Immagini di filesystem per QEMU
• SO free:
– http://www.oszoo.org/wiki/index.php/Category:
OS_images
82
83. QEMU: pacchetti
• I seguenti pacchetti sono richiesti (Debian):
– qemu: l'emulatore QEMU
• I seguenti pacchetti sono opzionali (Debian):
– kqemu-source: codice sorgente del modulo di
accelerazione kqemu
– kqemu-modules-x.y.z: binario del modulo di
accelerazione kqemu per la versione x.y.z del
kernel
– qemu-launcher: GUI di gestione MV (alla
Vmware)
83
84. QEMU: alcuni comandi
• Creazione di una immagine:
– qemu-img create -f qcow2 c.img 3G
• Installazione di un SO da CDROM
– qemu -cdrom /dev/cdrom -hda c.img -m 256
-boot d
• Installazione di un SO da immagine ISO
– qemu -cdrom my_os_install.iso -hda c.img -m
256 -boot d
• Esecuzione della MV:
– qemu -hda c.img -m 256
• Caricamento del modulo di accelerazione
– modprobe kqemu
84