% Computing virtualization
At first, servers have been placed across the whole company and then the enterprise moved all the hardware in data centers. The consequence is to get an easier management and a better data preservation.
Only after this shift, enterprises noticed that there were a lot of servers and mostly of them were in idle state, but at the same time they could not consolidate multiple applications on a single server, because of the \textit{One Application per Server} rule.

The ``One Application per Server'' rule means that each server could run only one application, because it has strict dependencies due to shared libraries or kernel version that may cannot be compatible with another one, which has different requirements.

This is due to the incapability of Operating Systems (OSs) to provide:
\begin{itemize}
	\item 
	configuration components full isolation: this is about kernel versions, OS' patches and\break libraries;
	\item
	temporal isolation: this refers to the performance predictability, what if an application A could affect the performance of an application B in term of CPU load or device ownership?;
	\item
	space isolation: this means what if an application crashes, it may compromise other\break applications running on the same physical system;
	\item
	security isolation: this refers to internal communication, an application A may contact another application B without passing through any firewall.
\end{itemize} 
Those dependencies lead a company to have a lot of servers, mostly under used, with a low workload and, obviously, it is a losing of money and resources.
In this contest the \textit{Computing Virtualization} (Figure \ref{fig:computing architecture}) is born as an easy way to share hardware resources (CPU, Memory, I/O devices) between different OSs.

Computing Virtualization is not a new technology, it was used in the past for other reasons, as to share expensive hardware mainframes, but with the diffusion of mini and personal PCs that are cheaper, this approach fade out. 
Nowadays hardware virtualization has a new purpose and it is focused on the reliability and consolidation of business servers.

\begin{figure}[H]
	\centerline{\includegraphics[width=0.7\textwidth]
		{computing-01.png}}
	\caption{From traditional architecture to a computing virtualized architecture solutions.
		\label{fig:computing architecture}}
\end{figure}

The main advantages of virtualization are the following.
\begin{itemize}
	\item 
	Isolation: several services could run in different isolated OSs that are deployed in the same physical host. Each Virtual Machine (VM) could have assigned its own CPUs with an improved degree of isolation.
	\item
	Consolidation: the same physical machine can run different OSs at the same time, saving hardware resources and reducing the energy consumption exploiting multi-core CPUs.
	\item
	Flexibility and agility: the host has the complete control on the VMs running on it, so it has the possibility to start, to stop and to restart instances. Moreover the \textit{VM migration} became a crucial point to create a dynamic virtual environment, adding the possibility to duplicate VM instances to handle peak workload and make a disaster recovery easier to be implemented.
	This feature is the one which is more interesting in this virtual world, because it provides the creation of \textit{autonomic} systems, which can automatic react to changes and difference situations.
	\item
	Cost saving: the virtualized layer provides all the elements to create dynamically the\break requested features for a virtual server, so it is no more significant have a physical server with a specific set of hardware elements. This leads company to buy huge amount of general and equivalent servers called Common Off The Shelf (COTS) at a low price and aggregates them on in a single data center.
\end{itemize}

At the same time this technology has some limitations as:
\begin{itemize}
	\item 
	overhead, each VM has a different OS running on it and it is isolated from the other OSs, hence more resources are required in term of memory (RAM) and disk;
	\item 
	application, each Application must have his Operating System, they could not share\break underlying layers also if they required the same OS and kernel version;
	\item
	heterogeneous hardware, a few applications could have some requirements for special\break hardware and it is an hard challenge to provide them with heterogeneous devices.
\end{itemize}

In Computing Virtualization architecture there are four key elements:

\begin{minipage}{0.35\textwidth}\raggedleft
	\includegraphics[width=0.85\textwidth]{computing-02.png}
\end{minipage}
\hfill
\begin{minipage}{0.6\textwidth}\raggedright
	\hfill
	\begin{itemize}
		\item 
		host OS, it is the Operating System running on the physical machine, it handles the hardware and the I/O devices;
		\item 
		Virtual Machine (VM), it is the emulation of a physical machine running both OS and applications;
		\item
		guest OS, it is the OS running on the VM and it is in charge of hosts applications, this is like the Host OS but it runs on a virtual environment;
		\item
		hypervisor (VMM), it is the software running on the Host OS that is in charge to virtualize the environment, hardware and devices.
	\end{itemize}
\end{minipage}
\clearpage

Moreover, a virtualized environment could be set up in different ways, because there are three distinct types of virtualization.\newline
The first one is \textit{Dynamic Binary Translation (DBT)}, it is the oldest, developed by VMware in the latest 90'. This technique allows to run the Guest OS unmodified on the Host OS, this means it does not know that it is running on a virtual environment.\newline
The second one is called \textit{Paravirtualization}, the Guest OS is modified to provide better performance for the virtualization execution. Not all the Operating Sytstems could follow this solution, but just the Linux/Unix based.\newline
The last technique, came out in 2006, is \textit{Hybrid Virtualization} and it was developed in order to sum up all the advantages of the previous techniques. It adds in the Host OS new primitives that could be exploited by the Hypervisor.