Virtualization involves dividing the resources of a computer into multiple execution environments. It has been used since the 1960s and there are several types including hardware, desktop, and language virtualization. The key components of a virtualization architecture are the hypervisor and guest/host machines. Hypervisors allow multiple operating systems to run on a single system and can be type 1 (runs directly on hardware) or type 2 (runs within an operating system). Virtualization provides benefits but also has limitations related to resource allocation and compatibility that vendors continue working to address.