Just now I listened to Mendel Rosenblum's talk. He is from VMware. The x86 is rather less virtualizable than even I had thought. Their main technique is to search for those privileged commands that cannot be virtualized and patch them. There is OS code that is self modifying and this presents a challenge.
Another real problem is the variety in other parts of the platform. In particular many of the hardware devices have interfaces that are proprietary. Linux has improved this situation however as those hardware vendors have moved to ensure that their hardware is compatible with Linux.
The main device problems are with displays and network interface cards. Their main response is to standardize the virtual facilities and map requests to the network and display via the host OS upon which VMware runs. VMware now runs on NT & Linux.
They use the memory map directly by the hypervisor trick of taking control via a “driver” installed for that purpose. They are careful to preserve the environment of the host OS.