[Home] [Services] [Philosophy] [Experience] [Software] [Publications] [Tips] [Contact]

Virtualization and Emulation

Virtualization and emulation are two ways of running multiple operating systems (OS's) on the same machine, at the same time. They achieve the same effect through different means, and vastly different performance.

In either case, one operating system, called the host, is ultimately in charge of all hardware resources, and runs just as it would in the absence of virtualization or emulation. To allow another operating system to run at the same time, we run a program on the host that pretends to be another computer. This application could be either an emulator or a virtual machine. The OS running on the emulator or virtual machine is called a guest, and is generally unaware that the emulator/virtual machine is not real hardware.

There are many virtual machine and emulation packages available for a variety of host and guest platforms. Below is a screen shot of Windows XP running under a virtual machine (Parallels) on an Apple Macintosh. (Click the image to enlarge.)

[parallels]

Using virtualization, a single computer can replace two (or more), thus saving you a great deal of money and office space. Virtual machine software generally sells for under $100 per guest, compared to around $1000 for a real computer. There are even some high-quality virtual machines available for free.

The difference between an emulator and a virtual machine is not clear-cut. Generally, an emulator uses software to emulate most components of a computer, while a virtual machine machine allows the guest to access real hardware directly. However, all such systems use some combination of emulated hardware and direct hardware access. The general rule, though, is that if the the guest operating system has direct access to the CPU, it's called a virtual machine, even if it uses an emulated video, disk, etc. If the CPU itself is emulated by software, it's called an emulator.

Naturally, if the guest operating system and the applications running under it have direct access to the CPU (as in a virtual machine), they will run far faster than they would on an emulator. In fact, guest applications on most virtual machines run very close to native speed, i.e. the speed at which they would run on the host. On an emulator, since software emulates the CPU, the real CPU must run many instructions in order to complete a single instruction for the guest, and the guest therefore runs several times slower than the host.

In theory, there is no limit to the number of guests that can run under a single host. Of course, there are practical limits due to the amount of memory and disk available, and the speed of the CPU and other shared hardware.