2018 Spring Term
February 27 2018
Virtualità
Virtualizzare qualcosa significa fornire un oggetto che possa essere usato (stessa interfaccia) efficacemente al posto dell'altro. Se si usa una scarpa per piantare un chiodo, la scarpa è un "martello virtuale".
Memoria virtuale
- Interfaccia della memoria principale: load(indirizzo), store(indirizzo, oggetto).
- Semantica: se eseguo store(i, a) seguito da load(i), la seconda operazione ritornerà a.
La memoria secondaria può essere usata per implementare l'interfaccia di quella primaria. Anche l'hardware di un calcolatore può essere visto come un'entità astratta che parla il linguaggio ISA del processore di cui fa uso. Se virtualizziamo l'hardware tramite un programma che ne implementa la stessa interfaccia otteniamo una macchina virtuale.
Possibilità di virtualizzare il tempo.
Significato di virtualsquare
Una piazza dove i vari tipi di virtualià coesistono, un laboratorio internazionale sulla virtualità.
Concetto di VIEW
I processi "vedono" l'ambiente di esecuzione. Se non stanno eseguendo istruzioni di calcolo, i processi si interfacciano ("vedono") al sistema (accedono a memoria, fanno routing) usando system calls. ogni processo può vedere un file diverso allo stesso path name
umview vecchia macchina parziale virtuale
L'Hypervisor agisce parzialmente come un debugger: intercetta le system calls ed intraprende azioni.
Virtual Distributed Ethernet (VDE)
VDE è una rete Ethernet virtuale che può essere distribuita su diverse macchine fisiche presenti in rete. Usare concetti reali nello "Standard" ethernet e vitualizzarli. ad esmpio uno switch con il vitual switch, più avanti nelle versioni sono stati creati dei "tasselli" che si posso interfacciare con vari altri tasselli per formare una rete virtuale personalizzata
Tip: "Trovate il nome giusto da dare a tutte le cose che pensate"
PeDaNTe S.P.A. (Physical, Data link, Network, Transport, Session, Presentation, Application)
Internet of Threads
Dare un indirizzo IP non alla macchina, ma direttamente al processo, questo ti pemette di migrare i processi da una macchina ad un'altra senza che il client deve riconfigurare l'IP della chiamata a quel processo (IPV6 è praticamente obbligatorio per rendere Internet of Threads utillizzabile, perchè IPV4 ha troppi pochi indirizzi) Se abbiamo due web servers virtuali sulla stessa macchina fisica vogliamo che abbiano comunque diversi indirizzi ip.
March 01 2018
INFO
Le comunicazioni e lo scambio di idee avverranno nel gruppo Telegram.
Per iscriversi/scrivere nel wiki occorre il numero magico usato già per il corso di Sistemi Operativi.
Vecchio materiale Virtual System Design
Altre risorse su GitHub
Nickname del docente
- rd235 (derivato dai documenti RFC es. RFC 1166)
- iz4dje
Tipi di virtualizzazione
finnix è un sistema operativo live da usare "quando si è nei guai", non ha interfaccia grafica e permette di provare i sistemi virtuali; la versione 1.0 è quella che funziona bene.
Il sistema operativo in cui viene eseguita la macchina virtuale, viene detto host (ospitante) mentre la macchina virtuale è chiamata guest (ospite).
Emulazione
Scrivendo un emulatore di una macchina emulo i passi di esecuzione dell'hardware: convertire le istruzioni dal linguaggio del processore che vuole essere emulato ad istruzioni per la macchina host.
QEMU è un esempio: traduce il codice macchina guest in codice macchina host (traduzione dinamica). QEMU contiene i sorgenti con le istruzioni del vari assembler (sottoforma di funzioni) che vengono messi in un vettore; fa uso di cache come fanno i browser: il codice non viene tradotto di continuo ma viene eseguito quello "in cache" e questo lo fa risultare 15/20 volte più veloce.
(NOTA: rimane in sospeso slirp, lo vedremo nel dettaglio in futuro)
Busybox è un piccolo eseguibile che combina diverse applicazioni standard Unix, in pratica le utility Unix non sono altro che un alias di busybox; si può scaricare e compilare i binari di busybox per mips (arm), se attivo il servizio binfmt-support il sistema utilizzerà QEMU per eseguire i binari mips, mentre disattivando il servizio sarà possibile utilizzare KVM.
Esempi di emulazione
qemu-system-* (wildcard) è il comando per lanciare un'architettura:
qemu-system-x86_64 -cdrom finnix-110.iso -m 512M
dove -m 512M è la quantità di ram che gli rendiamo disponibile.
Con QEMU possiamo eseguire finnix-armhf-111.iso su macchina x86_64 seguendo le istruzioni (test non riuscito).
Virtualizzazione parziale
KVM, acronimo di Kernel-based Virtual Machine (utilizza VT per Intel e AMD-V per AMD), ha un comportamento a "trigger" il processore si comporta come la routine normale, soltanto quando vengono lanciate determinate call viene cambiata la routine da quella nativa a quella apposita per simulare altri processori. Questo permette di avere macchine virtuali molto più veloci, visto che girano direttamente sul processore escluse le varie eccezione rende una correlazione praticamente 1 a 1.
Si può abilitare la modalità KVM in QEMU usando l'opzione -enable-kvm che ovviamente richiede che i moduli siano stati caricati.
Virtualizzazione totale
VirtualBox è un esempio di virtualizzazione totale.
User-Mode Linux è una macchina virtuale i cui sorgenti sono presenti nel kernel linux; usa lo stesso supporto del comando strace (utile per vedere le system call di un comando); User-Mode Linux è molto vicino a umview (che appunto sta per User-Mode View); in quanto a velocità sta in mezzo tra qemu e kvm.
Differenze
QEMU virtualizzazione a livello di processo (PVM), KVM a livello di sistema (SVM), VirtualBox a livello di system call (SCVM). Vedere pag. 36 e a seguire.
qemu-system-* é formato dal processore di traduzioni dinamiche qemu_(arm, mips...) e dalle periferiche.
kvm invece non fa uso di qemu ma al posto suo usa l'accellerazione del processore (oltre alle periferiche).
qemu funziona come processo utente e non ha bisogno di permessi eccezionali; kvm invece risulta vincolato al processore (egrep '^flags.*(vmx|svm)' /proc/cpuinfo) e occorre anche il modulo kernel (lsmod | grep kvm).
VirtualBox non può convivere con KVM.
Macchine virtuali in rete
È possibile creare una propria macchina virtuale online usando le credenziali unibo okeanos grnet
Tip: molly-guard protects machines from accidental shutdowns/reboots (via ssh); è un software che se si tenta un reboot/poweroff chiede di digitare il nome della macchina, in questo modo si evita di spegnere una macchina virtuale non voluta tra le varie finestre aperte.