difference between hardware virtualization software virtualization