什么是虚拟化-以及虚拟化的发展

虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。
计算机有三大组件,I/O(输入、输出),CPU(运算器、控制器),RAM(内存)。计算机为了适应不同行业的需要,设计的非常底层。
一颗单核单线程的CPU,在同一时刻只能处理一个线程。而计算机的计算能力非常快,大多数时间都是在等待资源的输入输出,所以为了达到硬件资源的充分利用,就将资源分成相互隔离的组,扮演成类似多台计算机的形式,每一个程序运行在相互隔离的资源中,这就是操作系统的基本作用。因此,可以理解为,操作系统就是各种硬件接口的抽象,是底层硬件资源的资源管理管理设备。CPU只有一个,同一时刻只能处理一个程序,但是需要运行的程序有多个,因此就需要将CPU的处理时间,切割成一个一个的处理单元,也叫时间片。产生一种资源时间复用的效果。
通常情况下,一个程序想要被CPU处理,必须要被放置到内存中。内存中的地址空间在同一序列上的。当某一个程序要运行时,他会按需使用该内存空间中的任意内存的。可是,当多个程序同时运行时,可能会产生打架的现象。因此,就需要将内存空间隔离开来。空间复用,就成了解决多个程序在同一时间使用内存的现象的,即将内存划分成多个不同的区段,不同的程序使用不同的区段。可是,进程存在产生,也存在销毁,另外进程的大小也不一样,程序员开发的进程,使用的内存空间也是随机调用的。所以划分区段的方式,并不是一个可行的解决方案。对一个操作系统而言,内存的管理是最复杂的部分。实际生产中,是将物理内存空间虚拟成线性内存空间来实现的。每一个进程运行的时候,就告诉该进程,你一共有这么多的内存(取决于CPU的寻址能力)可用,你可以随便使用这些空间,但是,这个空间并没有真正的存储数据。进程使用的内存空间会被映射到物理空间中,物理内存是由内核来管理的,即内存的虚拟化技术。
为了实现内存的快速转换和映射,CPU在其硬件级别上,内置了一个芯片,即MMU(内存管理单元),内核为每一个进程准备了一个内存地址映射表。当某一进程运行时,CPU会将该进程的内存地址映射表装入MMU中(需要经过MMU计算),以便随时完成映射和转换。由于每次MMU的计算,都会消耗时间,为了提高效率,将经常使用到的进程,经过MMU处理后的进程内存地址映射表,会被放置到一个缓存区中(TLB:转换后援缓冲器)中;
对于IO类的资源(服务类的IO:网络IO、磁盘IO;PC类的资源:网络IO、磁盘IO和显示IO);
对于网络IO,网卡只有一个,如何实现,多个进程同时发包呢?以以太网为例,八根线,其中有两对没有使用,剩下两对中,每一对儿都有一跟网线是用于屏蔽干扰的,所以,八根网线只有两根是用来通讯的。电信号的传输,就是通过高电压和低电压来实现1、0的。因此,同一时刻,只能发送一位的数据。(百兆网卡100Mbps,它的传输频率是就是,1秒钟可以传输100兆位的数据。)如果有多个进程需要发送数据包,就需要排队,时间复用;
对于磁盘IO,以机械硬盘为例,需要寻道和定位扇区,在同一时间,只能有一个进程进行读写操作,为了提高磁盘的IO效率,内核做了大量的缓冲,将多个写操作先放在缓冲中,再同步到磁盘中。IO是时序复用,空间是空间复用。
所以,对于传统的计算机本身,操作系统就是硬件接口的虚拟机了,从而使得多个进程同时运行。
虚拟化(就是在一台计算机上,运行多个操作系统。),是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
对于早期的x86CPU,性能特别差,PC机勉强可以运行一个程序,没有空闲的资源,所以虚拟化技术没有市场。随着PC机性能的不断提升。
早期的x86的CPU拥有两种类型的指令,一类是运算类指令,一类是控制类指令;CPU根据指令的"危险"程度,分成了四个等级,叫做指令环。由内向外分别叫做环0(特权指令)、环1(处于空闲状态,未被使用)、环2(处于空闲状态,同样未被使用)、环3(非特权指令)。只有操作系统的内核才有权限运行特权指令。对于用户空间中的进程只有权限运行环3中的指令。操作系统将自己的特权通过系统调用的形式,提供给用户空间中的进程使用;环0用于运行操作系统的内核,环3用于运行程序。问题来了?对于虚拟机中的操作系统来讲,虚拟机有一个内核,物理机也有一个内核。内核运行在CPU的环0上,那么虚拟机执行了一个关机操作,调用了环0中的特权指令,那么物理机也会被关掉。
解决的办法就是,对于虚拟机,使用纯软件的方式,模拟一个环0的空间,通过将虚拟机对环0的操作,导向到对该虚拟机的操作,来实现和物理机的隔离。而虚拟机中的用户空间的进程,和物理机中的用户空间的进程,都运行在环3上。可是,这只是CPU的分离。
对于内存来讲,本来内核控制着所有的物理空间,将空间分给进程使用。可是对于虚拟化来讲,虚拟机上也有一个内核,能让这个虚拟机上的内核管控内存吗?显然是不可以的。对于工作在物理机上的虚拟机,他本来就工作在用户空间中的线性地址上,而这个内存的线性地址,还需要再抽象一次给虚拟机上的进程使用,也就是说,当虚拟机中的某一段进程被调用的时候,需要将内存中的地址映射表放到MMU上,经过转换后的空间,是物理机的内核虚拟过的线性地址,还是不能被使用,还需要物理机上的内核再处理一次,才是真正的物理地址,效率比较低。CPU上的MMU只有一个,虚拟机要用,物理机也要用,到底谁来使用,这也是一个问题?因此就需要,使用纯软件的方式来为虚拟机提供一个MMU,不过性能就很差了,满了好多被。另外内存为了加快访问的效率,有一个用于缓存常用进程的内存空间映射的TLB缓存,即便是用软件模拟的MMU,转换后的结果,有可能还是要使用TLB的,第一个虚拟机缓存的内容,和另一台虚拟机缓存的内容,可能会存在冲突。因此,为了避免冲突,只能禁用TLB,而这样的话,机器上运行的所有的进程,效率都会下降!所以,早期的x86系列的CPU,运行虚拟机,效率极其低下。不过,好在现在的CPU都已经经过优化,在CPU上,支持硬件虚拟化了。
所谓的硬件虚拟化,就是再CPU的环0里面,又加了一个环,称为环-1,所有的特权指令都在环-1上。物理机上的内核,运行在环-1上,虚拟机上的内核,运行在环0上,环0上留空,只用于运行虚拟机的内核,所有的操作,只对当前的虚拟机有效,虚拟机上用户空间的进程,都可以运行在环3上;因此,对于虚拟机,就不需要再使用软件来模拟环0了。这样,相比于软件模拟的虚拟化,性能提高了很多。
对于内存来讲,内存的两级转换必不可少。转换的方式不再是经过虚拟机的内核转换后再由物理机的内核转换,而是穿过虚拟机的内核,直接由物理机的内核来转换。并且还要为TLB增加一个标记,用于标记这是哪一个虚拟机的内存映射,从而避免产生混乱;
注意:对于内存中的MMU virtualization(MMU的虚拟化),Intel和AMD的方法还不一样。Intel使用的是EPT技术(Extended Page Table,扩展页表),AMD使用的是NPT技术(Nested Page Table,嵌套页表);对于TLB virtualization(TLB 虚拟化),使用的是tagged TLB(标记TLB);
对于IO虚拟化,IO本来就是虚拟的,网卡IO是时序复用。磁盘IO的是时序复用,空间是空间复用;如果网卡和硬盘只有一个,如何实现虚拟机和物理机都可以使用呢?
硬盘虚拟化,在宿主机的文件系统上,创建一个文件,让这个文件来当作虚拟机的硬盘使用,即使用软件来模拟硬件设备,需要两级驱动(虚拟机中的某一进程,当要存储一个数据的时候,需要调用自己内核的系统调用,内核要驱动该硬盘,因为是使用软件模拟的,所以,需要使用软件来模拟硬盘的具体型号,或者说是硬盘驱动器的型号来。虚拟机的内核,要找到该硬盘的驱动器型号,将它转换成自己硬盘的写、读操作,可是,该硬盘并不存在,所以还需要使用软件来讲该信号转换,然后将该信号转交给宿主机的内核,宿主机的内核收到命令,再调用硬盘的驱动程序,由该驱动程序,转换成具体的电信号。所以,效率比较低。如果使用的是IDE接口的硬盘,大概只有真实性能的40%;提高效率的方式有两种,一种是减去一个层次(也叫Emulation,模拟。不过完全减掉一层是不现实的,但是可以由厚变薄,即告诉虚拟机,你就是一台虚拟机,不用你做转化了,将该信号直接交给物理机的内核得了。也叫半虚拟化,可以达到真实物理硬件的80%左右);一种是让虚拟机直接使用硬件,需要多准备几个设备(IO-through:IO透传,可以达到真实物理硬件的99%左右);
网络虚拟化,首先需要给每一个虚拟机虚拟出网卡设备来,还需要构造一个虚拟网络来。可以利用纯软件的方式,构造网卡。有了网卡,虚拟机还不能通信,还需要构建一个虚拟网络(可以使用纯软件的方式来构造一个交换机,将虚拟机连接至交换机,供虚拟机通信,不过这样只能供虚拟机之间通信。如果将物理机也连接到虚拟交换机上,宿主机上再加上一个dhcp的进程,就构成了仅主机模型,例如VMware的仅主机,VMware中vmnat-1;如果还想要和外网通信,打开宿主机的路由转发功能,经过宿主机的转发,就构成了nat(SNAT、DNAT)模型,例如VMware中vmnat-8;还有一种桥接的模型,他是将物理机的网卡作为了交换机,然后给物理机也使用软件的方式,建立了一个虚拟的网卡。这样,真实的物理机的网卡,开启混杂模式(即接收非本mac地址的数据,抓包时候,就开了混杂模式。所以,包多了,网卡的性能也会有所下降),就充当了交换机的角色,物理网卡连接着真实网络中的另一台交换机,该交换机连接着真实网络中的dhcp服务,也就构成了类似于vmware中的桥接模型。)。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值