Virtualization allows a single physical machine to run multiple virtual machines, making hardware resources available to multiple virtual operating systems. This is done through a hypervisor or virtual machine monitor that allocates physical resources to virtual machines. Virtualization provides benefits like reduced costs, increased hardware utilization, and isolation of environments while sharing resources. The main types of virtualization are execution level (using a hypervisor), operating system level (through time-sharing), programming level (through virtual machines like Java), application level, storage, and network.