安卓

注册

 

发新话题 回复该主题

什么是虚拟化技术具体有哪些实现方法 [复制链接]

1#
白癜风医院 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/bdf/

随着现代计算机硬件的飞速发展,很多时候硬件本身的性能,如算力,存储,速度等,早已大大超出普通应用场景的需要。如现在普通的千元级别基于ARM架构的手机CPU速度超过了10年前售价数千元的电脑,一张几十元的TF存储卡容量超过了10年前售价上千元的硬盘容量。于是人们开始考虑怎样最大化利用已有的硬件设备来运行更多的软件,为更多的用户提供服务。而虚拟化技术就是为了达到此目的的方法之一,简单来说虚拟化技术可以使用同一台硬件设备“虚拟”出几台相同或者不同配置的硬件。这些运行着虚拟化系统的设备被称为宿主机或者物理机,被“虚拟”出来的硬件设备我们称作虚拟机,或者客户机。打个简单的比方就是把一台电脑虚拟成2台电脑来同时使用。由于现代硬件运行速度快,人们在使用大部分软件的时候几乎感觉不到速度差异,也就是感受不到自己使用的软件是运行在虚拟机上。下面将详细介绍下虚拟化技术具体可以实现的功能,以及虚拟的方法。

虚拟化技术

一般来说使用虚拟化技术的系统可以实现以下功能:

功能1.同一台设备上并发运行多种不同的系统。如在一台电脑上同时运行4套系统:2套Windows系统,1套macOS(苹果)系统和1套安卓系统。这个功能一般也称作为系统级多开;

功能2.同时运行的系统互相隔离。如上例中在同一台电脑上运行的2套Windows系统之间不能未经授权互相访问到对方的内存,文件等内容。而其中某套Windows系统死机或者崩溃的话完全不会影响到另外一台Windows系统或者安卓系统的正常运行;

功能3.同时运行的系统可以经过授权互相共享资源。如上例中的Windows系统可以经过虚拟化软件系统的设置与授权后,与macOS之间共享部分文件;

如果按照虚拟指令集的方法来分类,可以分为以下两种类型:

类型1:指令集虚拟化。也叫指令集模拟,就是用当前CPU的指令集去逐条解释模拟另外一种架构的指令集。比如我们手机使用的CPU是基于ARM架构的,而普通电脑一般都是X86架构的,如果需要在普通电脑上运行ARM架构指令集的APP或者游戏,就需要使用普通电脑上的X86指令集逐条把ARM指令集翻译为普通的X86指令集再去执行。这种方法效率比较低,通常使用率只有当前处理器的30%甚至不到,因为使用软件来翻译指令集是非常耗时的操作,复杂度很高;

类型2:指令集透传。这种方法相当于模拟同架构CPU的系统,比如我们在普通X86架构的电脑上的Windows里面安装虚拟化软件,来运行基于X86架构的Linux操作系统,那么就非常简单和快捷。只要把软件中需要执行的每条指令直接丢给当前的CPU去执行,然后切换下虚拟机的上下文环境即可。此种方法运行速度基本可以达到当前处理器速度的92%-98%,也是大部分虚拟化系统运行的场景。

CPU指令集

除了CPU的指令集虚拟化,还有大量的外设也需要虚拟化,比如玩家玩游戏的显卡,游戏手柄,键盘鼠标,网卡等。这些外设的使用在虚拟化系统中也存在两种方法来管理:

方法1.软件模拟。这种方法使用软件来实现一个驱动程序,来模拟各种外设的输入输出。比如在安装了虚拟化系统的Windows的宿主机中,虚拟化系统会把用户在宿主机中的操作转发到当前操作的虚拟机内,让虚拟机以为是用户在操作。这种方法可以实现一套硬件被复用到多台虚拟机中,如前面所说由于宿主机速度很快,用户体会不到设备是共享使用的情况,大大提高了使用效率;

方法2:设备透传。方法1可以让多个系统使用同一套外设,但是对于打游戏等场景需要非常快速地访问显卡,否则玩游戏就会卡顿导致体验不佳(想像下卡一下就被最后一人K掉而没有吃到鸡的尴尬场景)。此时有的虚拟化软件就提供了设备透传的功能,可以指定当前宿主机中的设备指定绑定到某台虚拟机,为这台虚拟机独占使用。这样一来虽然降低了使用效率但是可以大大提升外设的访问速度。

显卡透传

现在虚拟化技术还在飞速发展,实际还存在着半虚拟化,通用外设访问接口等非常专业的方法,这里就不再做更深入地介绍了。也欢迎感兴趣的朋友留言和讨论!

分享 转发
TOP
发新话题 回复该主题