Popek and Goldberg virtualization requirements

They were introduced by Gerald J. Popek and Robert P. Goldberg in their 1974 article "Formal Requirements for Virtualizable Third Generation Architectures".

Their analysis derives such characteristics using a model of "third generation architectures" (e.g., IBM 360, Honeywell 6000, DEC PDP-10) that is nevertheless general enough to be extended to modern machines.

This model includes a processor that operates in either system or user mode, and has access to linear, uniformly addressable memory.

It is assumed that a subset of the instruction set is available only when in system mode and that memory is addressed relative to a relocation register.

A conventional third-generation computer is recursively virtualizable if: Some architectures, like the non-hardware-assisted x86, do not meet these conditions, so they cannot be virtualized in the classic way.

One approach, known as patching, adopts techniques commonly used in dynamic recompilation: critical instructions are discovered at run-time and replaced with a trap into the VMM.

Various mechanisms, such as the caching of emulation code or hardware assists, have been proposed to make the patching process more efficient.

A different approach is that of paravirtualization, which requires guest operating systems to be modified (ported) before running in the virtual environment.

[11] They can be categorized in two groups: The introduction of the AMD-V and Intel VT-x instruction sets in 2005 allows x86 processors to meet the Popek and Goldberg virtualization requirements.

Unfortunately, even on an architecture that meets Popek and Goldberg's requirements, the performance of a virtual machine can differ significantly from the actual hardware.

This led the IBM engineers to introduce a number of hardware assists, which roughly doubled the performance of the System/370 virtual machines.