\documentclass[9pt]{beamer}
\usepackage[italian]{babel}
\usepackage{graphicx}

\usetheme{JuanLesPins}
%\usetheme{Warsaw}
%\usetheme[hideothersubsections]{Berkeley}
%\usetheme{Goettingen}

\usefonttheme{structurebold}
\setbeamerfont{author}{size=\large}

\hypersetup{pdfpagemode=FullScreen}

\setbeamercovered{dynamic}

\title[Tesi di Laurea in Progettazione di sistemi operativi, 12 luglio 2006]{Zoo di sistemi operativi: studio e\\realizzazione del supporto di\\macchine virtuali con accesso via Web}
\author{Mattia Gentilini}
\institute[Universit\`a di Bologna]{
	\centering
	Relatore:\\
	\textit{Renzo Davoli}
	\addtolength\itemindent{-1em}
	\vskip5em\par
	\tiny Laurea Specialistica in Informatica --- I Sessione --- A.A. 2005/2006
}
\date{12 luglio 2006}

\makeatother
\setbeamertemplate{navigation symbols}{}

%\setbeamertheme{footline}[split slidenumber right]

\begin{document}
\frame{
	\titlepage
}

%\setbeamertemplate{footline}[frame number]

\section{Introduzione}
\frame{
	\frametitle{Sommario}
	Questa discussione presenter\`a un sistema di \alert{virtualizzazione} per eseguire \alert{sistemi operativi} diversi
	ed utilizzarli tramite il \alert{World Wide Web}:
	\begin{itemize}
		\item Virtualizzazione: concetto ed esempi
		\item Lo \alert{Zoo} di sistemi operativi: FreeOSZoo e FLOZ
		\item Implementazione di FLOZ 
		\item Sviluppi futuri
		\item Conclusioni
	\end{itemize}
}
	
\section{Virtualizzazione}
\subsection{Idea}
\frame{
	\frametitle{Virtualizzazione: concetto}
	\`E ormai pratica diffusa ricorrere a meccanismi di \alert<1>{virtualizzazione}
	all'interno dei computer moderni, ossia utilizzare software che crei un ambiente (\textit{Macchina virtuale} o VM) all'interno del quale eseguire altro software.
	Motivazioni diverse sono possibili:
	\begin{itemize}
		\item \alert{Partizionamento} delle risorse in sottosistemi gestibili \alert{independentemente}
		\item Mantenimento di \alert{compatibilit\`a} con altre architetture o sistemi
		operativi
		\item \alert{Isolamento} di software o utenti per migliorare la \alert{sicurezza} complessiva
	\end{itemize}
	Esistono molti esempi di virtualizzazione: se ne discutono brevemente tre, importanti in questo lavoro di tesi
}

\subsection{Esempi}
%\frame{ 
%	\frametitle{Virtualizzazione: classificazione ed esempi}
%	Il campo abbracciato dalle VM \`e molto ampio, e molte
%	tassonomie sono possibili. Parlando di quale virtualizzazione viene creata, si distinguono:
%	\begin{enumerate}
%	\item VM complete che emulano un intero calcolatore con una determinata architettura (\alert{QEMU}, Bochs, VMWare,
%	Virtual PC, PearPC, Mac-on-Linux\ldots)
%	\item Macchine Paravirtuali che creano copie isolate
%	della macchina reale sottostante, senza tradurre alcuna istruzione (Xen, Denali)
%	\item VM a livello OS, che emulano non una macchina con il relativo hardware, ma un sistema
%	operativo con la relativa interfaccia applicativa (User-mode Linux, Virtuozzo/OpenVZ, Linux VServer)
%	\item VM a livello processo, che emulano parti di sistema a livelli diversi, verso
%	processi singoli o l'intero sistema reale: processore (QEMU in user emulation, Rosetta), rete (\alert{VDE}), file system (chroot, FUSE, Unionfs),
%	combinazioni (View-OS/UMView)
%	\item VM per linguaggi di programmazione, che slegano un linguaggio dalla architettura reale sul quale \`e eseguito e
%	permettono esecuzioni remote (\alert{Java}/RMI, CORBA, .NET)
%	\end{enumerate}
%	Gli esempi evidenziati sono quelli interessanti in questo lavoro
%}

\frame{
	\frametitle{QEMU,  VDE e VNC}
	\alert{QEMU} \`e probabilmente l'emulatore di \alert{VM complete} con il maggior supporto di hardware e software e le migliori prestazioni.
	\begin{itemize}
	\item Pu\`o emulare un computer completo su cui eseguire un OS, oppure un processo Linux compilato per un certo processore su di un altro.
	\item Raggiunge ottime velocit\`a, comparato con un sistema reale, e grazie a un modulo per il kernel Linux (QEMU Accelerator) pu\`o arrivare al pareggio.
	\end{itemize}
	\alert{VDE \textit{(Virtual Distributed Ethernet)}} \`e un emulatore di \alert{reti Ethernet}. \`E composto da vari programmi che permettono, tra l'altro, di:
	\begin{itemize}
	\item Emulare switch, hub e cavi indipendenti dal sistema di trasporto
	%\item Introdurre sui cavi virtuali limitazioni di banda, ritardi, perdite, duplicazioni e rumore
	\item Collegare le reti virtuali create a computer reali (tramite NAT o interfacce TUN/TAP) o virtuali (UML, QEMU, Bochs, MPS)
	\end{itemize}
	\alert{VNC \textit{(Virtual Network Computing)}} non \`e una virtualizzazione in senso stretto, ma consente di eseguire \alert{applicazioni remote}
	come se fossero installate localmente
	\begin{itemize}
	\item A differenza dei prodotti concorrenti (che utilizzano oggetti), VNC trasmette \textit{framebuffer}, ossia snapshot di porzioni di schermo
	\item Questo approccio \`e meno efficiente ma pi\`u portabile: per questo esistono server VNC per molti OS ed applicazioni, tra cui QEMU
	\end{itemize}
}

%\frame{
%	\frametitle{VDE: esempio}
%	\begin{center}
%	\includegraphics{images/VDE-example.png}
%	\end{center}
%}

%\subsection{Network Computing e VNC}
%\frame{
%	\frametitle{Network computing e VNC}
%	\alert{Network Computing} \`e un termine coniato negli anni '90 per indicare la possibilit\`a di eseguire applicazioni ospitate su computer remoti e utilizzarle da computer
%	locali \textit{(thin client)} sui quali tali applicazioni non siano installate. Non \`e una virtualizzazione in senso stretto.\\
%	I prodotti che usano questo concetto sono divisibili in due categorie:
%	\begin{itemize}
%	\item \alert{Virtual Network Computing} (VNC) che trasmette \textit{framebuffer} ossia snapshot di porzioni di schermo
%	\item Microsoft Terminal Services, Citrix ICA, NX, che trasmettono oggetti come finestre ed icone
%	\end{itemize}
%	Il secondo approccio \`e efficiente, ma il primo \`e pi\`u facilmente portabile, ed infatti esistono server VNC per molti OS ed applicazioni, tra cui QEMU
%}

\section{Zoo di sistemi operativi: FreeOSZoo e FLOZ}
\subsection{FreeOSZoo}
\frame{
	\frametitle{Free Operating Systems Zoo (http://www.oszoo.org/)}
	\begin{center}
	\includegraphics{images/freeoszoologo.png}
	\end{center}
	L'idea su cui si basa questo lavoro \`e quella sviluppata nel progetto \alert{FreeOSZoo}
	\begin{itemize}
	\item Come uno zoo di animali, FreeOSZoo vuole far convivere pi\`u sistemi operativi FLOSS all'interno dello stesso ambiente reale,
	ricreando l'hardware per i quali i singoli OS sono progettati
	\item Lo scopo \`e quello di sperimentare sistemi operativi, impararli, studiarne la storia, creare ambienti di computing eterogenei con hardware omogeneo
	\item La versione attuale del progetto \`e una collezione di immagini di OS per QEMU, facilmente scaricabili ed eseguibili sul proprio computer
	\end{itemize}
}

\logo{\includegraphics[scale=.4]{images/flozlogo.png}}

\subsection{FLOZ: Presentazione}
\frame{
	\frametitle{FLOZ: Free Live OS Zoo}
	FLOZ rende FreeOSZoo utilizzabile ``on-the-fly'', permettendo di eseguire le immagini da esso fornite senza scaricarle e senza installare QEMU
	\begin{itemize}
	\item L'utente si collega ad un server WWW e sceglie quale OS avviare
	\item Il server lancia QEMU con l'immagine dell'OS desiderato
	\item Il browser interagisce con QEMU tramite un'applet Java
	\end{itemize}
	\begin{center}
	\includegraphics[scale=.7]{images/screenshot.png}
	\end{center}
	%\begin{itemize}
	%\item Esiste un supporto di rete (attivabile dall'amministratore del server) che permette di utilizzare lo stack di rete dell'OS emulato passando da quello
	%dell'utente
	%\item Al momento, questo supporto richiede l'installazione di VDE sul client, e quindi un OS o delle librerie POSIX-compliant 
	%\item Questo requisito \`e molto limitante e dovr\`a essere eliminato nelle versioni successive, implementando il supporto di rete dentro l'applet Java
	%\end{itemize}
}

\section{Implementazione di FLOZ}
\subsection{Descrizione}
\frame{
	\frametitle{Implementazione di FLOZ}
	FLOZ ha tre componenti: il server Web con gli script PHP di gestione, il sistema emulato attraverso QEMU,
	l'applet del client che interagisce con esso
	\begin{center}
	\includegraphics{images/display.png}
	\end{center}
}

\subsection{Osservazioni}
\frame{
	\frametitle{Prestazioni e problemi noti}
	Le \alert{prestazioni} sono incoraggianti, grazie alle potenzialit\`a di QEMU e di VNC
	\begin{itemize}
	\item I tempi di trasferimento su connessione ADSL sono accettabili (aggiornamento completo dello schermo in circa 1 secondo,
	risposta di mouse e tastiera attorno al mezzo secondo). \`E possibile avere tempi maggiori in caso di cambio di modalit\`a video
	\item L'emulazione \`e veloce, soprattutto con quelle immagini per le quali \`e possibile utilizzare QEMU Accelerator
	\end{itemize}
	Vi sono alcuni \alert{problemi}, dovuti al fatto che il supporto VNC di QEMU \`e stato introdotto da poco tempo
	\begin{itemize}
	\item La tastiera non \`e emulata completamente, per cui alcuni tasti speciali (come le lettere accentate) possono non funzionare
	\item Il puntatore del mouse emulato pu\`o apparire accelerato rispetto a quello reale, a seconda delle impostazioni dell'OS emulato
	\item L'aggiornamento dello schermo pu\`o non essere perfetto
	\end{itemize}
}

\subsection{Fornire FLOZ}
\frame{
	\frametitle{FLOZ per il fornitore di contenuti}
	Il software di FLOZ \`e facilmente portabile su sistemi dotati di OS POSIX, server Web e interprete PHP
	\begin{itemize}
	\item Dover eseguire un'istanza di QEMU per ogni utente impone elevati requisiti hardware
	%\item Il codice di FLOZ \`e essenzialmente una collezione di script PHP, alcuni dei quali pensati per essere eseguiti da linea di comando e/o
	%come \textit{cronjobs}
	\item Esiste un'interfaccia Web dedicata alla configurazione delle singole immagini
	\item Ogni modifica alle immagini \`e persa a fine uso
	\item \`E possibile definire un tempo massimo di uso, dopo il quale QEMU viene terminato,
	e rilevare se il browser si \`e disconnesso 
	\end{itemize}
}

%\frame{
%	\frametitle{Limitazioni d'uso e configurazione}
%	Limitazioni d'uso
%	\begin{itemize}
%	\end{itemize}
%	Variabili di sistema configurabili
%	\begin{itemize}
%	\item Porte utilizzabili e timeout d'uso (vedi sopra)
%	\item Uso del supporto di rete e di QEMU Accelerator
%	\item Directory di lavoro e attivazione del debug 
%	\end{itemize}
%	Impostazioni configurabili per un'immagine
%	\begin{itemize}
%	\item Nome file, descrizione, risoluzione
%	\item Disabilitazione temporanea di un'immagine per manutenzione
%	\end{itemize}
%}

%\subsection{Il sistema di I/O}
%\frame{
%	\frametitle{Il sistema di I/O}
%	L'interazione con il sistema emulato avviene tramite connessione VNC tra il QEMU sul server e l'applet Java del client (ricavata dall'applet
%	tightvnc-java)
%	\begin{enumerate}
%	\item Il server riceve la richiesta di avvio dal browser, trova una porta libera per VNC (di norma tra 5900 e 5999, configurabile) e la riserva per QEMU
%	\item Il server ridirige il client in una nuova pagina PHP, che conterr\`a l'applet Java
%	\item Il server avvia QEMU usando le impostazioni del client e quelle dell'immagine specificata, con I/O sulla porta VNC indicata. L'immagine
%	\`e lanciata con l'opzione \texttt{-snapshot} di QEMU, per cui ogni modifica viene persa all'uscita. Viene memorizzato il PID
%	\item Viene mostrata l'applet Java contenente il display dell'OS emulato
%	\item Un \texttt{<object>} HTML ricarica un PHP che comunica al server che l'immagine \`e in uso 
%	\end{enumerate}
%}

%\frame{
%	\frametitle{Il sistema di I/O - cont'd}
%	\begin{enumerate}
%	\end{enumerate}
%	Quando un'immagine viene uccisa (manualmente o automaticamente) viene prima verificato il PID, e la porta VNC
%	utilizzata viene liberata. Il sistema libera anche le porte allocate per processi QEMU non pi\`u attivi, per mantenere
%	consistenza
%}

%\frame{
%	\frametitle{Dettagli implementativi}
%	\begin{itemize}
%	\item Le immagini per QEMU e le porte VNC disponibili sono gestite con delle classi di PHP 5 che memorizzano le informazioni
%	in documenti XML
%	\item PHP permette di chiamare le funzioni con meno argomenti di quelli indicati nella signature, specificando valori di default:
%	questo rende pi\`u facile l'espansione del sistema
%	\item XML \`e ormai un formato di larghissimo uso, aperto e \textit{human-readable}, ed anch'esso rende facile
%	l'espansione del sistema
%	\item Il codice prodotto per le pagine ha l'obiettivo di essere XHTML 1.1 valido, cosa non possibile per tutti i browser
%	a causa delle diverse compatibilit\`a con il tag \texttt{<object>}; viene dunque usato XHTML 1.0 Transitional
%	\item L'applet Java ha subito lievi modifiche rispetto a quella originale
%	\end{itemize}
%}

\subsection{Il supporto di rete}
\frame{
	\frametitle{Il supporto di rete}
	Questa caratteristica di FLOZ ha come scopo quello di far passare il traffico di rete dell'OS emulato dal network stack dell'utente\\
	La figura mostra il sistema finora testato, che richiede VDE installato sul client; questo requisito \`e penalizzante e andr\`a eliminato
	\begin{center}
	\includegraphics{images/network.png}
	\end{center}
}

%\frame{
%	\frametitle{Descrizione}
%	\begin{enumerate}
%	\item<1-> QEMU collega la scheda di rete del sistema emulato ad un VDE switch, tramite il wrapper \textit{VDEQEMU}
%	\item<2-> Il VDE switch sul server \`e collegato ad un VDE switch avviato sul client tramite un tunnel SSH
%	\item<3-> Il VDE switch sul client \`e collegato a \textit{SlirpVDE}, che estrae i pacchetti di livello 4 e ne incapsula
%	i payload in nuovi pacchetti da instradare tramite la default route del client
%	\item<4-> SlirpVDE contiene un server BOOTP/DHCP minimale che assegna IP e route all'immagine emulata, e instrada al DNS del client
%	le richieste DNS di QEMU
%	\end{enumerate}
%	\begin{description}[A]
%	\item<5-> SlirpVDE non richiede privilegi amministrativi per essere eseguito: questo \`e un vantaggio perch\'e riduce i requisiti
%	del client ed aumenta la sicurezza, ma toglie la possibilit\`a di inviare pacchetti ICMP (che richiedono SUID root)
%	\item<6-> Dal lato server si tiene traccia del PID del VDE switch lanciato; inoltre, come detto, all'utente \`e richiesto
%	di avviare VDE switch e SlirpVDE manualmente
%	\end{description}
%}

\section{Sviluppi futuri}
\frame{
	\frametitle{Sviluppi futuri}
	FLOZ, anche per motivi di tempo, non \`e un progetto completo; alcune cose vanno migliorate, ed altre funzionalit\`a
	possono essere aggiunte
	\begin{itemize}
	\item Integrare il supporto di rete nell'applet Java
	\item Miglorare la sicurezza
	\item Gestire il carico del server
	\item Connessioni di rete tra le immagini
	\item Amministrazione delle immagini
	\end{itemize}
}

\subsection{Miglioramenti}
\frame{
	\frametitle{Integrare il supporto di rete nell'applet Java}
	\`E il miglioramento pi\`u importante, poich\'e permette di ridurre al minimo i vincoli per il client
	anche con il supporto di rete attivato
	\begin{center}
	\includegraphics{images/network-java.png}
	\end{center}
}

\frame{
	\frametitle{Migliorare la sicurezza e gestire il carico del server}
	\`E necessario gestire la \alert{sicurezza} delle connessioni
	\begin{itemize}
	\item \textbf{Manca un controllo sulle porte VNC e del canale di connessione.} Se per ogni istanza di QEMU si utilizzano porte diverse,
	\`e sufficiente modificare al volo le regole del firewall
	\item \textbf{La connessione VNC non \`e cifrata.} Si pu\`o estendere il server VNC di QEMU aggiungendovi un protocollo simmetrico (AES, Blowfish, Twofish); inoltre
	si pu\`o utilizzare una sessione HTTP sicura (con autenticazione e/o HTTPS) per trasferire le chiavi di cifratura
	\end{itemize}
	Controllare il \alert{consumo di risorse} di FLOZ migliora la scalabilit\`a; le due misure da tenere sotto controllo sono la RAM utilizzata e il \textit{load average}
	\begin{itemize}
	\item Va determinato il numero massimo di immagini avviabili contemporaneamente, impostando la quantit\`a di memoria necessaria ad ogni immagine
	\item Per ridurre il carico medio si pu\`o prevenire l'esecuzione di nuove immagini quando si superano certi valori
	e/o implementare politiche di distribuzione su pi\`u server
	\end{itemize}
}

%\frame{
%	\frametitle{Modifiche}
%	\begin{itemize}
%	\item Usando vde\_cryptcab si pu\`o avviare una nuova istanza del server su porte diverse per ogni nuova connessione,
%	ognuna collegata al proprio VDE switch
%	\item Il client vde\_cryptcab \`e integrato nell'applet e contiene, come sul lato server, il VDE plug
%	\item Il VDE switch dal lato client \`e inutile: i dati del cavo virtuale passano direttamente ad uno SlirpVDE integrato nell'applet
%	\item Si pu\`o, ovviamente, fare a meno dello switch anche dal lato server, passando il traffico Ethernet direttamente a vde\_cryptcab
%	\end{itemize}
%}

%\frame{
%	\frametitle{Gestire il carico del server}
%}

\subsection{Nuove funzionalit\`a}
\frame{
	\frametitle{Connettere tra loro ed amministrare le immagini}
	\begin{itemize}
	\item Si pu\`o permettere alla propria immagine attiva di collegarsi ad altre, per sperimentare firewall, NAT od altro,
	attivando pi\`u NIC o consentendo altre connessioni al proprio switch
	\item Per ambienti ``di produzione'', per imparare al meglio l'uso di un sistema operativo, per testare
	sistemi potenzialmente pericolosi, pu\`o essere interessante permettere modifiche persistenti alle immagini
	%\item L'autenticazione, in questo caso, \`e necessaria, in quanto le copie personali delle immagini dovranno essere
	%accessibili in scrittura, ed anche come scarico di responsabilit\`a per usi non leciti
	\item Oltre all'accesso remoto consentito dalla connessione tra immagini, si pu\`o permettere un accesso locale,
	sviluppando politiche di gestione della connessione VNC
	\end{itemize}
}

\section{Conclusioni}

\frame{
	\frametitle{Conclusioni}
	Tre obiettivi hanno guidato lo sviluppo di FLOZ
	\begin{itemize}
	\item Portabilit\`a dell'interfaccia client
	\item Ridurre i vincoli sugli OS utilizzabili nell'emulatore
	\item Uso di software libero ed open source, per libert\`a di sviluppo e apertura alla collaborazione
	\end{itemize}
	\begin{description}[A]
	\item Questi obiettivi hanno reso la scelta del software abbastanza obbligata, ed a parte il supporto di rete di QEMU sono stati
	pienamente raggiunti con lo sviluppo attuale
	%\item Siccome FLOZ non comprende le immagini QEMU utilizzate, chiunque installi FLOZ \`e libero di fornire anche sistemi
	%operativi non FLOSS
	%\item QEMU Accelerator non \`e un prodotto open-source, ma non \`e nemmeno necessario al funzionamento di FLOZ
	\item Il supporto di rete incentrato sul client, caratteristica innovativa rispetto ad altri
	sistemi esistenti, \`e probabilmente il punto di forza di FLOZ e la base del lavoro futuro
	\end{description}
}

\frame{
	\frametitle{Ringraziamenti e prova}
	\begin{center}
	FLOZ e questa tesi esistono anche grazie a:\\
	Renzo Davoli, Fabrice Bellard, Anthony Liguori,\\
	\texttt{<garden>}, \texttt{<gaspa>} e \texttt{<danielinux>}\\
	Grazie!
	\end{center}
	\begin{center}
	Una versione di FLOZ \`e correntemente attiva su \texttt{http://connessi.webminds.cs.unibo.it:8880/}
	\\Verr\`a ora mostrato brevemente FLOZ in azione
	\end{center}
}

\end{document}

