计算虚拟化简介
了解传统的物理机的部署方案
(1.)服务器的选型(几个cpu,频率,多大内存,硬盘,关联存储)
(2.)IDC数据中心采购服务器的放置的空间及上架
(3.)系统安装(windows linux unix freebsd)
(4.)应用的规划和部署,域名注册,dns映射,外网访问
因为这个过程非常复杂传统的的数据中心带来很多的问题
(1.)服务器利用率低下,cpu,内存又不能共享
(2.)资源分配又不合理
(3.)初始化成本比较高
(4.)自动化能力差
1.什么是虚拟化
在没有虚拟化的场景下,一套硬件上同时只能运行一个os,有了虚拟化,一套硬件可以同时运行多个os。
虚拟化就是把物理资源逻辑化
在一套硬件上去安装一个特殊的os,也成为VMM(virtual machine moitor虚拟机监视器)或者叫hypervisor。用来监控运行在上面的os(vm)
VMM就是用来提供虚拟化,跑虚拟机和监控虚拟机的运行。
虚拟化的实现就是开发VMM
2.虚拟化的产生
在60年代就有了虚拟化的概念,不过叫做cpu的分时复用,90年代,IBM才有了逻辑分区的概念。IBM虚拟化在power cpu上实现。
3.虚拟化的驱动
(1.)cpu的速度越来越快,超过软件对硬件的要求
(2.)企业成本压力
(3.)环保压力
(4.)业务压力
在没有做虚拟化之前,IT资源独立,操作系统和硬件是紧耦合
有了虚拟化后,资源抽象成共享资源池,操作系统和硬件解耦,从资源池去分配资源。
4.虚拟化的本质:分区,隔离,封装,独立
分区:在虚拟化层为多个虚拟机划分服务器资源的能力,每个虚拟机可以同时运行一套单独的os,使你能够在同一台服务器上运行多个应用程序,每个操作系统只能看到虚拟化层为其提供的虚拟硬件,VM认为自己就是运行在一台单独的服务器上。
隔离:虚拟机之间是相互隔离的(os故障,蓝屏,APP崩溃,驱动程序故障)不会影响到同一台服务器其他的虚拟机的运行。
封装:封装意味着可以将整个虚拟机(规格,bios配置,内存状态,磁盘状态,cpu)存储在单独的文件中,只需要复制文件就可以移动虚拟机。
独立:相对于硬件独立
完全适用于虚拟化,比如vlan
5.虚拟化的厂商
IBM是最早实现虚拟化(分时系统)
VMware 开发出了虚拟化
针对个人用户:VMware workstation VMware fusion
针对企业用户:VMware vsphere
Redhat: kvm
Citrix: xen
Microsoft:hyper-v
虚拟化的实现就是开发vmm
6.实现虚拟化的技术
(1.)模拟仿真技术
在虚拟化模式下,存在着2种cpu指令,特殊指令(敏感指令),普通指令。
特权指令:系统中有一些操作和管理关键系统资源的指令,这些指令只能在最高特权级别上运行,如果在非最高特权上运行,特权指令会引发一些异常。
敏感指令:在x86cpu上,有19条敏感指令不属于特权指令。
经典的虚拟化就是使用的模拟仿真技术。
当guest os执行特权指令的时候,VMM会捕捉到异常,对guest os执行的特权指令进行特权降级,然后陷入模拟,通过模拟的方式实现guest os需要做的特权操作。
但是由于x86的cpu架构指令,敏感指令并不完全是特权指令(19条),VMM捕获不到,所以无法进行特权降级然后陷入模拟,由于x86这种架构的问题,导致无法实现虚拟化的全部功能。
VMware公司通过二进制翻译技术完成了对x86cpu架构的完全虚拟化 binary translation
(2.)完全虚拟化与半虚拟化和cpu硬件辅助虚拟化
完全虚拟化(BT):guest os不知道自己运行在VM上,认为自己运行在物理机上,运行在cpu的ring0环上
由于都是通过纯软件的方式导致效率比较慢,速度慢,但是确实解决了x86cpu架构的问题。
纯软件的半虚拟化:通过修改guest os的代码,让guest os能够知道自己运行在VM上,进而知道自己没有运行在ring0环上,所以特权指令和敏感指令都主动提交给VMM,由VMM处理完成后,返回VM。
在2003年xen,使用半虚拟化的方案来解决x86的敏感指令问题,主要是通过hypercall,需要去更改guest os的代码,从而使guest os会将和特权指令相关的操作都转换为发给VMM的hypercall(超级调用),由VMM继续进行处理。
Windows不允许修改os的代码。
Cpu硬件辅助全虚拟化:有cpu厂商在cpu指令里面加入虚拟化指令。
Intel vt-x
Amd amd-v
核心思想就是通过引用新的指令和运行模式,使得guest os和VMM分别运行在不同的模式下。
