The history of virtualization dates back to 1960s. At first the intention was to extend computer memory. The concept of virtual machine has been developed by IBM. The intention of this project to share hardware resources and to run more than one operating system on a single computer (back then it was a mainframe). The end-users would get the ability to work together, sharing the same computer.
Today virtualization can be used in different ways. First of all, it could be used to share hardware resources, such as CPU, RAM and peripheral devices. The idea for making a stable server is to use it for one dedicated task. Server hardware has always been powerful and using only one operating system on it isn't smart. Virtual machines that are run on one server and use the same resources (each of them, for one specific task) is a good way. This could be achieved by using virtualization technologies. Maintaining only one server is easier than maintaining a few of them. Operating systems run on emulated hardware, so changing real hardware could be done very easily. Migrating to another server can also be done without problems.
Another approach to virtualization is combining hardware resources as a “cluster”. The idea is to make powerful devices from small low performance hardware. It could be easy scalable and could share resources.
The real approach to virtualization could be shown as cloud technology. There's no necessity for using dedicated services. Virtual machines could be easily cloned and maintained. Users don't need to take care of it, even about hardware, because all they have are resources to run the OS.
Today x86 virtualization is the most popular one. ARM virtualization is also available, but it is not that widespread. When hardware virtualization is available, this is the fastest way of sharing resources. If the host system doesn't support any hardware virtualization technologies, then emulation could be used. It could be combined in one solution for some hardware.
Hardware virtualization means that real hardware resources will be used by the CPU without any translation of the code. This means that guest operation system will be run with high performance, the same way as a bare-metal OS. Two most famous and widely supported technologies are available from two main CPU manufactures: Intel and AMD. The first one from Intel called VT-x, and the second is AMD-V.
There are additional types of hardware virtualization technologies. First of all, different CPU types have different hardware extensions. Those include ARM and VIA VT.
Another types of virtualization could be used for different hardware:
This means that all virtualized hardware and virtual machines work the same way on real hardware. The program emulates all hardware, thus making it possible to run an unmodified guest OS. The reason behind such type of virtualization is that kernel modification for guest operating systems is available only for those that have open sources code which makes it possible to modify the kernel. Closed source operating system which are not available publicly such as Windows family couldn't be modified and only could be run by fully virtualized environments.
Full virtualization relies on a special program called hypervisor. This is like a small operating system intended to share resources between virtual machines and isolate the across each other.
There are two types of hypervisors:
a) Type-1, native or bare-metal hypervisor. Runs native on hardware and then provides resources to a machine. The examples of modern and widely used native hypervisors are as follows:
b) Type-2, hosted hypervisor. Runs on an operating system and then can be used for running a guest OS. The examples of such hypervisors are:
Such differentiation of hypervisors isn't strong and could be diverse. Linux's Kernel-based Virtual Machine runs as a kernel module and if it’s possible to use hardware, then it could be considered as Type-1. When the Hardware module is not available, then the program can emulate hardware and rusn as QEMU virtual machine with emulating hardware and thus could be considered as Type-2.
Paravirtualization could be used for running modified operating systems. It’s mostly used for open source OSes such as GNU/Linux, NetBSD, FreeBSD. While Windows can only be run in full virtualization mode, certain hardware devices could be paravirtualized with special paravirtualized drivers.
OS-level virtualization is a way of desktop virtualization for systems that run the same kernel. It works only in Linux or FreeBSD. Virtualized environments are isolated but have access to native hardware, so this method provides bare-metal performance.
Software virtualization also could be named as desktop virtualization or application virtualization. This is another type of using the idea of sharing computer resources and isolating application environments.
Also, this virtualization allows running an application in an isolated environment. The main goal is to isolate the environment for running an application. It then could be run from USB devices or network locations. All information that is used by application such as registry data or files is saved on disc and is available for the application in a normal way. The application thinks that it’s running like under a normal Windows installation.
Often virtualized machines do not have any real hardware such as monitor, mouse or keyboard. To access them and manage their setups, remote access tools should be used. Different types of protocols are used to access the remote OS.
For remote access, UNIX-like operating systems widely use the SSH protocol. The main advantage is that it’s very flexible and it enables access to any feature. This is the main type for such kind of OS. Such virtualized guest OSes can be run without GUI. SSH provides secure connection, is supported by a lot of clients and is an open technology.
VNC is a protocol that provide access to a remote system via graphical user interface. It is the most widespread and easiest way to do it. VNC is an open source project. It works as in a server-client architecture. The server is a program that runs on the remote system and the client is a program to access the server. Plenty of software that relies on VNC is available for free and or as paid solutions.
Windows OSes can be accessed in different ways. First of all, they can be accessed using Windows RDP and need to be accessed through user account log in.
Another way is to use alternative software such as DeskRoll. It could be used as remote access solution for unattended access. This can be archived only for Windows as a guest operating system.