A Virtual Machine Monitor for Providing a Single System Image

For Japanese Version


(May 26, 2006) Version 0.3.1 is out (Changelog).
(May 15, 2006) Version 0.3 is out (Changelog).
(July 6, 2005) A new demo movie is uploaded. A virtual 8-way multi-processor machine is running!
(May 31, 2005) Version 0.2 is out (Changelog).
(Dec 20, 2004) Version 0.1 is out (Changelog).


Virtual Multiprocessor is a virtual machine monitor (VMM) for providing a single system image. It virtualizes a shared-memory multi-processor machine on a network of computers. More specifically, like existing VMMs, Virtual multiprocessor takes complete control of the machine hardware and creates virtual machines, each of which behaves like a complete physical machine that can run its own operating system. In contrast to the existing VMMs, our system creates a virtual multi-processor machine on a collection of single-processor machines. For example, the system gives users the illusion of N-way multi-processor machine on top of N single-processor machines that are connected via networks.

This functionality of our system greatly simplifies utilization of distributed resources. For example, suppose that a user would like to access and run some parallel tasks on two single-processor machines. With our system, a virtual dual-processor machine is created on two physical machines. The user is able to execute parallel tasks by simply forking processes on the guest OS (e.g., Linux) running inside the virtual machine. These processes are automatically allocated on virtual processors by the scheduler of the guest OS, and are finally allocated on physical machines by the VMM.

Demo Movies



This software is distributed under the GNU General Public License.


You can also download the latest version of the source code from our Subverion repository svn://oop7.is.s.u-tokyo.ac.jp/vm.


The software is intended to work with Linux operating system and with hardware based on x86 processors. It is compiled and installed using the configure script and a pair of make commands.

The simplest way to install the software is:

  1. cd to the directory containing the source code and type ./configure to configure the software for your system. If you're using csh on an old version of System V, you might need to type sh ./configure instead to prevent csh from trying to execute configure itself.
  2. Type make to compile the package.
  3. Type make install to install the software and the header files.
The default installation prefix is /usr/local. You can specify an installation prefix other than /usr/local by giving configure an option --prefix=PATH.


  1. Write a configuration file for specifying (1) hostnames and ports which the virtual machine connects to and listens at, (2) the path to a disk image, and (3) the path to an initial memory image. In the configuration file, a keyword marked at the beginning of the line determines what each line means. More specifically, Here is a sample configuration file.
  2. Execute the installed command mon with specifying a CPU ID and the path to the configuration file as follow:
    mon --id number --config filename
    The individual process forked by this command emulates a processor with a given CPU ID. Thus if you would like to emulate a virtual machine with N processors, you need fork N processes with different CPU IDs. Note that you have to run processes on hosts which are specified in the configuration file.

Related Work


Kenji Kaneda