Virtual machines or VMs like those found in Amazon's Elastic Compute Cloud or EC2 all run within real machines—thousands upon thousands of clustered data center servers, to be exact.
A VM can either be implemented by running an older operating system within a newer operating system using software emulation (e.g., running an emulated Windows 95 within Windows XP or an emulated Windows XP within Windows Vista, and so forth) or hardware virtualization (what the EC2 cloud computing servers of Amazon bring to the table).
A VM is a machine implementation of an application that runs programs like a physical, tangible computer appliance would.
In other words, a virtual machine emulates, copies, and duplicates the functions of any individual, tangible hardware while itself remaining software.
VMs are divided into two main groups based on the degree of association to any real hardware and their use.
A process virtual machine is made to execute a single application, so it's the type of VM that supports a singe process.
Meanwhile, the system virtual machine is a VM type that offers a complete system medium which assists the execution of an entire OS or operating system.
Process virtual machines (also known as hardware virtual machines) were created to provide a user with a medium-independent programming environment that abstracts away particulars of the fundamental operating system or hardware. System virtual machines (also known as application virtual machines) enable sharing of the underlying hardware resources between multiple VMs, with each running their own respective OS.
One crucial aspect of a VM is that the application executing within is basically constrained and limited to the abstractions and resources offered by the VM.
It's trapped within the virtual world and follows its rules to the letter.
The VM was originally described by the late Gerald J. Popek (a researcher on virtualization and operating systems) and Robert P. Goldberg (a software entrepreneur, currently retired) in their Popek and Goldberg virtualization requirements treatise as a standalone and proficient duplicate of real hardware.
Current usage of the term includes VMs which have no direct association to any real, tangible machines.
The foremost benefits and advantages of virtual machines are immediate disaster recovery, high availability, easy access, straightforward maintenance, application provisioning, and so forth.
What's more, the VM can offer an ISA or instruction set architecture that is slightly different from the real machine's ISA. Finally, VMs are capable of allowing multiple OS environments to exist in harmony within the same machine while they're all isolated from each other to boot.
On the other hand, the cons of VMs include reduced efficiency when compared to hardware in terms of indirect hardware access and unstable performance.
Multiple VMs have a tendency to become unstable and unpredictable when they're running simultaneously on the same physical host, which results in reduced speed, buggy behavior, and so forth.
To be more specific, this result can depend on the workload produced by other VMs, so there's a need to use proper methods to isolate VMs temporally.