In recent years, Virtual Machines have become a standard mechanism for deployment. Essentially, a VM is a software implementation of a computer. The VM executes programs and for all intents and purposes acts like a physical machine. This definition encompasses a broad cross-sectional of technology but the two best known categories of VM refer to programming language interpreters like Python and the Java Virtual Machine and the situation where one instance of an operating system (OS) along with one or more applications run in an isolated partition within a computer. These two main categories of VM are referred to as Process and System (or Hardware) VMs respectively i.e. a System VM provides a complete system platform which supports the execution of a complete OS while a Process VM is designed to run a single program which means that it supports a single process. The cardinal point regarding VMs is that the software running inside the VM is limited to the resources and abstractions provided by the VM. In other words, it cannot break out of its virtual world.
The use of a VM for programming languages essentially means that software implemented using the language can run on any OS. This Process (or Application) VM runs as a normal application inside an OS and supports a single process. The VM is created when the process is started and is destroyed when it exits. The Process VM provides a platform-independent programming environment that abstracts and isolates details of the underlying hardware or OS and allows the program to execute in the same way on any platform. A high-level programming language translator called an interpreter is used to implement a Process VM.
The most well known Process VM is that provided by Sun Microsystems for the Java programming language. The Java VM (JVM) is the runtime engine of the Java platform. This allows any program written in Java or indeed any programming language compiled into Java bytecode to run on any computer that has a native JVM. In effect, this means, with very few exceptions such as the rare occasion where hardware such as a Serial Port is interfaced, that a Java program compiled and developed using the JVM for Microsoft Windows can run under the JVM for LINUX, UNIX, MAC OS and other OS. Similarly, Python is an interpreted programming language that requires a VM for runtime execution while Microsoft's .NET Framework runs a Process VM called the Common Language Runtime (CLR).
The ability of different OS to run in the same computer at the same time by using a System VM prevents applications interfering with each other. This is much more flexible than a dual-boot or multi-boot environment where the user has to choose the OS that they are using at the start. All VMs run simultaneously in such a scenario. This System VM architecture allows the sharing of the underlying physical machine resources between the different VMs running their own OS. The OS in each VM partition are called guest OS and communicate with the hardware via a control program called a VM Monitor (VMM) or Hypervisor. The guest OS do not have to be the same, meaning that Microsoft Windows and LINUX can run in their own VMs on the same computer. The need and desire to run multiple OS was the original motivation for VMs.
A VMM is the control software that creates the VM environment in a computer. Normally, the OS is the master control program for a computer, managing the execution of all applications and acting as an interface with the software applications and the hardware. As you would expect, the OS has the highest privilege level in the computer. In a VM environment on the other hand, the VMM becomes the master control program and has the highest privilege level. The VMM manages the guest OS or applications. In the case of the former, each guest OS manages its own applications as it would in a non-VM environment with the key difference that it has been isolated in the computer by the VM. Together with its applications each guest OS is considered to be a VM. A VMM can run on the bare hardware or on top of an OS. The former is known as a Type I or Native VM while the latter is known as a Type II or Hosted VM.
The principal value of a System VM is that multiple OS environments and applications can co-exist on the same computer in isolation from each other. The VM are provide an instruction set architecture (ISA i.e. the specification of the machine language instructions that the computer follows) that is somewhat different from that of the real machine while the System VM architecture facilitates application provisioning, maintenance, high availability and disaster recovery. System VMs are frequently used to consolidate servers where different applications and OS that had their own individual server machines to avoid clashes now run in separate VMs on the same physical computer. This is known as Quality of Service (QoS) isolation. The one caveat to note is that a VM is less efficient than a real machine for accessing hardware components as it does so indirectly. This issue also applies for Process VMs and is one reason why it is more efficient to use programming languages such as C++ to interface with hardware and the OS than it is with Java.
As noted, VMs have become a standard mechanism for deployment in recent years. The fundamental building block is a software image which is a copy of the state of a computer system stored in a file. Virtual Machine Images are simply software images installed onto a VM. The other mechanism used is the virtual appliance. This is based on the concept of a software appliance which is itself one or more applications that is combined with a customized OS (known as Just Enough Operating System - JeOS) to fit the needs of the application(s). Virtual appliances are software applications designed for deployment in a VM. These VMs include software that is partially or fully configured to perform a specific task such as a Web or database server.
The flexibility provided by VM has been further enhanced by Virtualization. As the name implies, this is the creation of a virtual version of an artefact such as an OS (as previously discussed), a server, a storage device or network. We alluded to server virtualization earlier when discussing consolidating servers. In essence, this is the masking of resources such as the number and identity of the physical machines, the processors and OS from users. The frees the users from having to manage server resources while increasing the sharing and utilization of same and also provides the ability to expand server resources while hiding the details of this expansion from users.
Multiple storage devices on a network can also be combined into what appears to be a single storage device that can be managed centrally. This is known as storage virtualization and is frequently used in Storage Area Networks (SANs). The final category of Virtualization that we will consider is Network Virtualization which is a mechanism for combining the available resources in a network by splitting the bandwidth into distinct channels each of which is independent from the others. Each channel can then be assigned to a particular server or device in real-time. This disguises the complexity of the network by separating it into manageable parts.
Virtualization, then, abstracts the hardware to the point where software stacks can be deployed and redeployed without being tied to a specific physical computer server. Virtualization enables a dynamic data centre where servers provide a pool of resources that are harnessed when required. The relationship of applications of compute, storage and network resources will then change dynamically so as to meet both workload and business demands.
This effectively means that application deployment is decoupled from server deployment. Applications can thus be deployed and scaled rapidly without having to first procure physical servers. The prevalent abstraction facilitating this is the Virtual Machine. The VM has become the primary mechanism or unit of deployment as it is the least-common denominator interface between providers of services and system developers. Sun Microsystems claims that using a VM as a deployment object is sufficient for 80% of application usage and assists in the rapid deployment and scaling of applications. The use of Virtual Appliances further enhances the ability to create and deploy applications rapidly. It is this combination of Virtual Machines and Appliances as standard deployment objects that is one of the key features of Cloud Computing.
One of the better known VM products is VMWare (http://www.vmware.com) . Citrix (http://www.citrix.com) also provide a comprehensive range of Virtualization software while Oracle VM Virtual Box (http://www.virtualbox.org) is an open source virtualization product.
In tandem with Cloud Computing, Smart Objects and Smart Infrastructure are driving new IT projects. The concept of the Virtual Machine is a useful one for smart objects solutions such as Vertoda. System VMs can be used to encapsulate and isolate smart object data capture and storage mechanisms for different smart ecosystems. In other words, one server can host VMs for several smart networks. The smart objects themselves can run on Process VMs. For example, Sun SPOT Wireless Sensors are built on the Squawk Java VM. The corollary to this is the use of virtualization to process the data for different smart objects. An ecosystem may be made up of wireless sensors, smart meters, RFID and GPS and may require intensive processing. Using Virtualization a unified presentation of the data is possible even though processing may mandate the use of several servers.
The use of the VM as a deployment objects also facilitates Smart Infrastructure solutions. It is possible that such solutions will be deployed in several locations. In such a situation the use of a Virtual Appliance consisting of data capture, organisation and storage software such as the Vertoda Framework will be extremely easy to install in a timely fashion. Finally, it is worth noting the potential for the use of Network Virtualization for smart ecosystems. Given the range and number of devices and users in pervasive computing networks, a strategy of virtualizing the network on a per-user, device category or location basis makes perfect sense.