Virtualization allows running multiple virtual machines on a single physical machine. Originally, emulation was used which copies the behavior of a complete computer to software. Modern virtualization improved efficiency by introducing a hypervisor that runs directly on hardware between virtual machines and hardware, without requiring a host operating system. Virtualization can be done through full virtualization, which requires no guest OS modifications but has performance overhead, or paravirtualization where the guest OS uses specialized APIs to improve performance by generating more efficient instructions for the virtualized environment.