Virtualization enables the abstraction of operating systems away from hardware resources and can be achieved in multiple ways.
Full Server Virtualization — Full server virtualization is the installation of a hypervisor solely responsible for creating and monitoring virtual machines and managing commands between hardware, host OS, and VMs. The main advantage is that no modifications to guest operating systems is necessary, but the trade off to emulated environments is more complex, and typically slower.
Paravirtualization — Paravirtualization is somewhat like a stripped down version of full server virtualization. In full server virtualization, hardware I/O is emulated, and the hypervisor traps commands from VMs before making calls on hardware. In paravirtualization, guest OSes are modified to interact directly with the hypervisor eliminating the emulation overhead in full server virtualization. Minus emulation, performance improves, however, guest operating systems require modification.
Hardware Assisted Virtualization — In hardware assisted virtualization, virtualization operations remain similar to full and para virtualization, however, guest OSes, by virtue of using common x86 instruction sets, can then interface with modified hardware with much less hypervisor overhead. Performance improves with less hypervisor overhead, but modifications to hardware are required.
Kernel Level Virtualization — In this scenario, virtualization instructions are included within a Linux kernel, acting as its own hypervisor, and subsequent VMs are created and managed as if they were processes interacting through specialized device drivers. While kernel level virtualization has less overhead it does also require hardware support.
OS Level or System Level Virtualization — OS level virtualization shares a single kernel layered on a host operating system with multiple VMs. There are many advantages to these configurations, particularly extreme lightweight, enhanced environment isolation and security, live migrations, capability to host many VMs, and more. The main limitation of system level virtualization is that all VMs must run the same OS. This differs from server virtualization which is capable of running multiple brands of operating systems. There is a significant disadvantage to this configuration, potential kernel or driver issues can collapse all VMs.