Sorry No History! master
authorNikanth Karthikesan <nikanth@gmail.com>
Sun, 30 Jan 2011 09:10:55 +0000 (14:40 +0530)
committerNikanth Karthikesan <nikanth@gmail.com>
Sun, 30 Jan 2011 09:10:55 +0000 (14:40 +0530)
commitacf2c81dc6111d1488e035788fb029f4e5267637
tree7bee15deb30bb3e030fd84e2ec02831706a6f2eb
Sorry No History!

Virtual Machine eXtensions instructions allow trap-and-emulate
virtualization. And KVM exposes VMX in a convenient way to userspace in
Linux. Virtual Machine Monitors(VMM) like qemu-kvm use the KVM API
exposed by linux to emulate^Wvirtualize software.

x86_64 processors boot in real-mode. In this mode it can use only 16-bit
addresses, ie., upto 1MByte RAM. The execution would begin at physical
address 0xFFFFFFF0. Then the software has to switch to protected mode
where protection and paging is possible. Paging is optional, but almost
all OSes use demand paging extensively. Now 4 GBytes of linear address
space is used. And then CPU can be switched to long mode i.e., 64-bit
mode. Paging should be disabled in 32-bit mode, before switching to long
mode. There are also other modes of operation like virtual-8086 mode to
allow executing legacy real-mode software from protected mode, SMM for
OS transparent execution of OEM specific code.

A simple VMM that directly starts the guest at address 0H, in 32-bit
protected mode with paging disabled. And supports only insb and outsb as
the only form of interaction possible for the guest. The guest is a
simple static linked 32-bit program that doesn't use any library, and
linked to start from 0x0. The guest simply reads a byte using insb and
sends byte+1 back via outsb. The guest would halt, when it gets the,
"Answer to the Ultimate Question of Life, the Universe, and Everything".
The VMM reads the byte value to pass to the guest from stdin and prints
its response in stdout.
build.sh [new file with mode: 0644]
guest.bin [new file with mode: 0755]
guest.c [new file with mode: 0644]
guest.elf32 [new file with mode: 0755]
guest.lds [new file with mode: 0644]
guest.o [new file with mode: 0644]
vmm [new file with mode: 0755]
vmm.c [new file with mode: 0644]