在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
CPU虚拟化有什么作用?
CPU虚拟化技术十分有用,例如在Win10系统中运行基于Win XP或Win7开发的应用,程序能够正常运行,不会出现不兼容的情况(部分程序本身兼容
性问题除外)。一般有软件虚拟和硬件虚拟两种,软件虚拟效率低,资源消耗大,硬件虚拟则可以大幅度提高效率,加快程序运行速度。
此外,虚拟机也是相同的道理,但是虚拟主机对系统资源的消耗十分恐怖,但是有了硬件级VT技术,也便于虚拟主机的部署。
虚拟化技术的分类主要有服务器虚拟化、存储虚拟化、网络虚拟化、应用虚拟化。
服务器虚拟化技术按照虚拟对象来分,可分为:CPU虚拟化、内存虚拟化、I/O虚拟化;按照虚拟化程度可分为:全虚拟化、半虚拟化、硬件辅助虚拟化。
将不同的虚拟化对象和程度组合,可得出9种不同的服务器虚拟化技术。
然后详细介绍下服务器虚拟化CPU虚拟化,后续讲解中再详细介绍内存虚拟化及I/O虚拟化。
基于软件的 CPU 虚拟化,故名思议,就是通过软件的形式来模拟每一条指令。通过前面的文章我们知道常用的软件虚拟化技术有两种:优先级压缩和二进制代码翻译。这两种是通用技术,可以用在所有虚拟化类型中。我们就结合 intercept 和 virtualize 来看看 CPU 软件虚拟化是怎么做的。
首先,一些必须的硬件知识要知道,X86 体系架构为了让上层的软件(操作系统、应用程序)能够访问硬件,提供了四个 CPU 特权级别,Ring 0 是最
高级别,Ring 1 次之,Ring 2 更次之,Ring 3 是最低级别。
一般,操作系统由于要直接访问硬件和内存,因此它的代码需要运行在最高级别 Ring 0 上,而应用程序的代码运行在最低级别 Ring 3 上,如果要访问硬件和内存,比如设备访问,写文件等,就要执行相关的系统调用,CPU 的运行级别发生从 Ring 3 到 Ring 0 的切换,当完成之后,再切换回去,我们熟悉的用户态和内核态切换的本质就来自这里。
虚拟化的实现也是基于这个思想,VMM 本质上是个 Host OS,运行在 Ring 0 上,Guest OS 运行在 Ring 1 上,再往上是相应层次的应用程序运行在 Ring 2 和 Ring 3 上。
- CPU半虚拟化技术
主要采用Hypercall技术。Guest OS的部分代码被改变,从而使Guest OS会将和特权指令相关的操作都转换为发给VMM的Hypercall(超级调用),由VMM继续进行处理。而Hypercall支持的批处理和异步这两种优化方式,使得通过Hypercall能得到近似于物理机的速度
好啦,暂时就给大家讲一部分虚拟化的知识,希望大家喜欢,后续还会给大家补充的。