Um sistema operacional típico é dividido em kernel e userspace. O kernel tem acesso direto ao hardware, o espaço do usuário (onde os programas são executados) não, e deve passar pelo kernel. Cada programa executa "dentro de" um espaço de usuário fornecido pelo kernel. (As CPUs modernas têm uma MMU que fisicamente impede que os userspaces façam coisas que o kernel não permite.)
Seria mais rápido se o espaço do usuário pudesse acessar o hardware diretamente, em vez de passar pelo kernel, mas seria significativamente menos seguro. Então, um sistema operacional apresenta alguma sobrecarga.
Máquinas virtuais estendem esse conceito um passo adiante. Sistemas operacionais, incluindo o kernel e seu espaço de usuário, executam "dentro" de um monitor de máquina virtual (VMM) - também conhecido como um hipervisor . Apenas o hipervisor tem acesso direto real ao hardware, e o kernel (dentro da VM, ou seja, o kernel do SO convidado) deve "passar" pelo hipervisor para acesso ao hardware. Normalmente, como as VMs são configuradas, o kernel nem sabe que está sendo executado em uma VM. No entanto, como o kernel precisa passar por outra camada para chegar ao hardware (mesmo que não saiba), é um pouco mais lento. Essa é a sobrecarga do VMM.
CPUs mais recentes suportam VMs em hardware e também suportam hardware "remapeamento" dentro de VMs (IOMMU), portanto a sobrecarga geralmente é muito pequena.