What is virtualization ? and different types of virtualization

What is virtualization?

In philosophy virtual means, “something that is not real”. In computer science virtual means, “a hardware environment that is not real”. Here we duplicate the functions of physical hardware and present it to an operating system (OS). The technology that is used to achieve  this environment can be called as Virtualization technology, in short Virtualization.  The physical system that run the virtualization software (hypervisor OR Virtual Machine Monitor) is called a Host and the virtual machines installed on top of hypervisor are called Guests. 
Using a hypervisor we can create as many virtual machines based on the host’s resource availability (available storage, memory, CPUs etc) thus using host efficiently. This consolidation of OSs on a single host makes management easy. In a virtual environment testing and development of applications become easy and cost effective as there is no need to purchase new hardware. If the virtual machines are installed on shared  storage space (NFS, iscsi Lun,Fabric luns ..etc ), features like  load balancing, live migration ..etc are possible. These features of virtualization makes it attractive and get the management of a company to evaluate virtualization for their enterprise needs. At the time of  live migration,  the guests are moved from one host to another host making an end user oblivious of the fact that,  the original server where the Virtual Machine resided is unavailable. The same principle can be applied for disaster recovery. That being said, migration can be done on a running guest (live migration) with minimal or no downtime. 
Virtualization Types

Full virtualization (FV)

Full virtualization provides total abstraction of the underlying physical system to create a hardware environment that is not real, but closely resembles a functioning system. The guest OS does not realise it’s in fact running under a hypervisor.. This is done using hypervisor alone or a combination of hypervisor and processor (Inter VT-x and AMD-V technologies). The result is a new virtual system in which the guest OS can run. No modifications are needed in the guest OS. You can use a FV Hypervisor to run any guest OS. There is a small limitation that, host OS and guest OS has to be designed to work on the same instruction set architecture (ISA) family.  x86 is an example for ISA .

Fig (1) provides an illustration of FV concept.

Para virtualization (PV)

FV with a slight twist is called PV. The twist is that, PV requires modification of the guest operating systems that run on the virtual machines. The modification is done to make guest aware that they are running inside the virtual machine. Advantage of this approach is that guest can co-operate with hypervisor and thus creating smooth communication path between them. This technique is also useful for running guests on architectures that don’t support full virtualization. Unlike FV guests, while using paravirtualization, hypervisor does not need to perform the extra overhead of converting the communication between the host and guest. With this technology the guest has high I/O performance. The disadvantage is, PV hypervisors cannot be used to run unmodified OSs. Proprietary OSs cannot be modified, hence cannot run as PV guest.
Fig (2) provides an illustration of PV concept.

Operating System level virtualization

OS level virtualization is a server virtualization method where the kernel of an operating system allows for multiple isolated user-space instances, instead of just one. The kernel of host operating system allows to run it in multiple isolated containers on a single physical server. Here we are using the same kernel of host OS and imposes little or no overhead, because programs in virtual partition use the OSs with normal system call interface. But it does not have the flexibility of FV and PV techniques as the guest has to use the same kernel.

Following provides a list of open source projects in Linux that falls into the mentioned virtualization types.

Project Virtualization Type

1) KVM (Kernel-based Virtual Machine) ==> Full Virtualization )

2) VirtualBox ==> Full Virtualization

3) Xen ===> Para Virtualization

4) lguest ===> Para Virtualization

5) UML (User Mode Linux) ===> OS Level Virtualization

6) Linux-VServer ===> OS Level Virtualization
OS Level
7) Open VZ ====> Virtualization