2018 Spring Term

From vsd
Jump to navigation Jump to search

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

etherpad

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, per avere successo bisogna montare l'immagine iso ed estrarre il contenuto (initrd.xz, linux e vexpress-v2p-ca9.dtb) della directory /boot/armhf/ nella cartella da cui si lancia QEMU.

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.

March 06 2018

March 08 2018

March 13 2018

March 15 2018

March 20 2018

March 22 2018

March 27 2018

April 05 2018

April 10 2018

April 12 2018

April 17 2018

April 19 2018

April 24 2018

April 27 2018

May 03 2018

May 08 2018

May 10 2018

May 15 2018

May 17 2018

May 22 2018

May 24 2018