虚拟化与多任务以及超线程有什么区别

Yang 135

虚拟化与多任务以及超线程主要有以下三点区别:一、实现方式不同;二、适用场景不同;三、执行方式不同。虚拟化、多任务和超线程都是提高计算机性能和利用率的常用技术,实现方式不同,

一、实现方式不同

多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的 CPU 或者是虚拟主机上;超线程技术只是单 CPU 模拟双 CPU 来平衡程序运行性能,这两个模拟出来的 CPU 是不能分离的,只能协同工作。

二、适用场景不同

虚拟化主要用于服务器的资源共享和利用,多任务则应用于每个用户的计算机上,而超线程主要适用于单个处理器的性能提升。

三、执行方式不同

1、多任务执行方式有两种:并发和并行

并发:在一段时间内交替去执行任务。

并行:对于多核cpu处理多任务,操作系统会给cpu的每个内核安排一个执行的软件,多个内核是真正的一起执行软件。这里需要注意多核cpu是并行的执行多任务,始终有多个软件一起执行。

例如:对于单核cpu处理多任务,操作系统轮流让各个软件交替执行,假如:软件1执行0.01秒,切换到软件2,软件2执行0.01秒,再切换到软件3,执行0.01秒……这样反复执行下去。表面上看,每个软件都是交替执行的,但由于CPU的执行速度太快,感觉就像这些软件都在同时执行一样,这里需要注意单核cpu是并发的执行多任务的。

2、虚拟化的实现主要有两种方式:全虚拟化和硬件支持的虚拟化

对于IO虚拟化来说,还有第三种,那就是半虚拟化。全、半这两个字表示的是虚拟化和软件、硬件的关系。全虚拟化表示的是整个虚拟化都是用软件实现的,半虚拟化指的是整个虚拟化出来的硬件只有原有硬件的部分功能,硬件支持的虚拟化则是在硬件上深度集成对于虚拟化的支持。

3、超线程运作方式

每个单位时间内,一个单运行管线的CPU只能处理一个线程(操作系统:thread),以这样的单位进行,如果想要在一单位时间内处理超过一个线程是不可能的,除非是有两个CPU的实体单元。双核心技术是将两个一样的CPU放置于一个封装内(或直接将两个CPU做成一个芯片),而英特尔的多线程技术是在CPU内部仅复制必要的资源、让两个线程可同时运行;在一单位时间内处理两个线程的工作,模拟实体双核心、双线程运作。 

Intel自Pentium开始引入超标量、乱序运行、大量的寄存器及寄存器重名、多指令解码器、预测运行等特性;这些特性的原理是让CPU拥有大量资源,并可以预先运行及平行运行指令,以增加指令运行效率,可是在现实中这些资源经常闲置;为了有效利用这些资源,就干脆再增加一些资源来运行第二个线程,让这些闲置资源可执行另一个线程,而且CPU只要增加少数资源就可以模拟成两个线程运作。

延伸阅读

一、全虚拟化

我们以CPU为例。CPU的输入是CPU指令。CPU执行时,会读取CPU指令,改变寄存器和内存中的值。如果我们用软件来模拟,是用一个程序而不是CPU硬件来读取CPU指令,改变用内存表示的寄存器和内存中的值。在这个例子中,软件模拟的是CPU,内存模拟的是寄存器。软件读取指令后,会读取一张表,然后根据这个表来执行指令对应的操作。在CPU硬件中是没有这张表的。读取这张表又涉及到内存的访问。因此,用软件模拟的CPU会比真实的CPU慢许多个数量级。

像Vmware、VirtualBox这样的虚拟化软件在以前就是使用的全虚拟化。全虚拟化实现起来难度大,运行起来效率不高,但是它的兼容性很好,覆盖面广,可以虚拟化出几乎所有的硬件。

二、硬件支持的虚拟化

为了提高虚拟化的效率,硬件虚拟化技术被提了出来。这里还是以CPU为例。Intel开发的CPU硬件虚拟化技术称为VT-x。同一个CPU核心在某个时刻只能执行一条指令,因此,VT-x的基本思路还是分时。VT-x有两个模式,根模式和非根模式。当运行在非根模式中时,执行某些特权指令会陷入到根模式中,然后由根模式来模拟执行这些特殊指令。虚拟机管理器(VMM)处于根模式,虚拟机则处于非根模式中。原来所有的指令都需要模拟执行,有了VT-x技术后,现在只需要极少部分指令需要模拟执行,极大地提高了指令的执行效率。

CPU属于硬件资源,自然由操作系统管理,因此,使用VT-x技术需要得到操作系统的支持。在Linux系统中,KVM充当了这一角色。KVM有两个部分,一部分程序放在内核态,另一部分程序放在用户态。而全虚拟程序都是放在用户态。所以,硬件支持的虚拟化尽管提高了效率,也可能会带来一些安全性问题。

三、半虚拟化

半虚拟化只和IO有关。在网卡的虚拟化中,传统的全虚拟化直接虚拟化出整张网卡,实现了网卡的所有功能。这张网卡再和虚拟机管理的虚拟网络相联。每当虚拟机收发数据包时,数据包会经历多次拷贝。网卡的全虚拟化不仅实现起来复杂,而且效率很低。半虚拟化和全虚拟化不同,它不会实现整张网卡的功能,只是实现部分最核心的功能,而且它不会去模拟真正的硬件,只是实现出标准的接口。因此,它与其说是一张网卡,不过是一个像网卡的驱动设备。这个设备可能不会再和虚拟网络相联,而是直接被虚拟机管理器通过物理网卡转发出去。所以,在省掉了拷贝、转发的若干开销后,整个过程的效率会比全虚拟化高许多,实现难度也会得到降低。

Virtio是Linux下的一个IO虚拟化框架,定义了一套与IO虚拟化相关接口。只要虚拟机操作系统和VMM同时实现了这套接口,那么就能够提高IO效率。

回复

我来回复
  • 暂无回复内容

联系我们
站长微信
站长微信
分享本页
返回顶部