模拟硬件的虚拟机

此类虚拟机的用户是操作系统,也就是硬件层虚拟机抽象出了一个计算机硬件体系,此类虚拟机模拟的是cpu指令集。

典型有kvm,vmware等。

模拟操作系统的虚拟机

此类虚拟机模拟的是操作系统,准确来说是操作系统的系统调用接口。此类虚拟机(多是基于宿主操作系统提供的功能)能创建多个虚拟运行容器。对于运行在每个容器之中的程序而言,此类虚拟机均提供了一个完整的操作系统,为其中的软件提供了完善的系统调用接口,也就是说模拟的是系统调用。比如docker,docker基于linux的cgroup,否则docker也无法实现虚拟操作系统环境。

API层的虚拟机

此类虚拟机模拟的是该操作系统的各类用户态API,通常是运行库的函数接口(也就是说模拟的是用户态中各种库的接口函数),总之不是对处理器指令的仿真(绝不是一个层面 )。

编程语言的虚拟机

此类虚拟机也称为语言的运行时,运行时环境,即runtime。通过解释或即时编译技术(Just-In-Time,JIT)来运行语言虚拟机指令,从而实现软件的跨平台特性。如java,lua,python等