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

来源:互联网 发布:php开发分类信息 编辑:程序博客网 时间:2024/05/31 19:09
虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。
计算机有三大组件,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中的桥接模型。)。
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 蓝鲸俱乐部 蓝鲸卫浴马桶的价格 蓝鲸能活多少年 蓝鲸教育 蓝鲸科技 蓝鲸幼崽 篮鲸 蓝鲸计划 蓝鲸瓷砖厂家 蓝鲸洁具 蓝鲸财经 蓝鲸投资 蓝鲸公司 蓝鲸传媒 海夫蓝鲸2 蓝鲸国际 蓝鲸网络 蓝鲸图 蓝鲸的资料 蓝鲸照片 蓝鲸网 深海蓝鲸 蓝鲸设计 蓝鲸网站 蓝鲸吃什么 蓝鲸餐厅 蓝鲸岛 蓝鲸有多大 蓝鲸汽车 蓝鲸客 蓝鲸人 蓝鲸小镇 蓝鲸瓷砖是几线品牌 蓝鲸游泳 蓝鲸行动 蓝鲸咨询 蓝鲸简笔画 蓝鲸物流 蓝鲸有没有牙齿 蓝鲸的图片 中科蓝鲸