
第1章和第2章
Saas(软件即服务): 提供已部署的软件即服务,例如: Google Docs,Google Apps
Paas(平台即服务): 提供开发环境即服务.
Iaas(基础设施即服务): 由多个服务器组成的“云”基础设施作为计量服务提供给客户.
使用纯软件方法来实现对现有物理平台上的物理平台访问的拦截和模拟(通常不支持硬件虚拟化).
诸如QEMU之类的通用软件虚拟机通过纯软件模拟x86平台处理器的获取,解码和执行. 客户的指令不会在物理平台上直接执行.
由于所有指令都是由软件模拟的,因此性能通常很差,但是可以在同一平台上模拟不同架构平台的虚拟机.
VMware的软件虚拟化使用动态二进制转换技术. 虚拟机监视器(VMM)在可控制的范围内,从而允许客户的指令直接在物理平台上运行. 但是,客户端指令将在运行之前由虚拟机监视器扫描,并且突破虚拟机监视器限制的指令将由可以直接在物理平台上运行或由软件代替的安全指令动态替换. 呼叫. 优点是它大大提高了纯软件仿真的性能. 缺点是它失去了跨平台虚拟化的能力.
物理平台本身提供了对特殊指令的拦截和重定向的支持;甚至新的硬件也将提供额外的资源,以帮助软件虚拟化关键的硬件资源,从而提高性能.

以x86平台虚拟化为例kvm虚拟化技术实战与原理解析 pdf,支持虚拟化技术的x86 CPU具有专门优化的指令集来控制虚拟过程. 通过这些指令集,VMM可以轻松地将客户端置于受限模式下. 在该操作下,一旦客户端尝试访问物理资源,硬件将挂起客户端的操作并将控件返回给VMM进行处理. VMM可以在受限模式下将客户端对某些特殊资源的访问从硬件重定向到VMM指定的虚拟资源. 整个过程不需要中止客户端的操作和VMM软件的参与.
因为虚拟化硬件可以提供新的体系结构,所以它支持操作系统直接在其上运行,而无需二进制转码,从而减少了相关的性能开销,极大地简化了VMM的设计,从而允许VMM符合通用标准Write,性能更强大.
修改来宾操作系统,使其认为它在虚拟环境中运行并且可以与虚拟机监视器一起使用. 因此,半虚拟化需要修改客户端操作系统的源代码以实现主动通知.
Xen是超虚拟化的一个示例. 它适用于Linux等开放源代码操作系统,但不适用于Windows等封闭源代码操作系统.
支持运行任何理论上可以在真实物理平台上运行的操作系统. 无需修改来宾操作系统.
KVM开发人员并未从头开始编写新的虚拟机监控程序,而是选择使用Linux内核通过加载新模块将Linux内核转换为虚拟机监控程序.
KVM当前被设计为通过可加载的内核模块(包括Windows)支持各种来宾操作系统.
在KVM架构中,虚拟机被实现为常规Linux进程,由标准Linux调度程序调度. 实际上,每个虚拟CPU都是作为常规Linux进程实现的. 这使KVM可以享受Linux内核的所有功能.
KVM本身不执行任何模拟. 它要求用户空间程序通过/ dev / kvm接口设置来宾虚拟服务器的地址空间,为其提供模拟I / O,并将其视频显示映射回主机显示屏幕. 此应用程序(注意: 上面的“用户空间程序”)是著名的QEMU.

REHL6.x系统中的KVM客户端可以支持160个虚拟CPU和高达2TB的内存,而KVM主机则支持4096个CPU内核和高达64TB的内存.
操作系统内核设计分为: 微内核和单内核.
单核意味着整个核作为一个整体作为一个大进程实现,并同时在单独的地址空间中运行. 所有内核服务都在如此大的内核空间中运行,并且内核之间的通信可以简单地实现为函数调用.
对于微内核,内核的功能分为多个独立的进程,每个进程称为服务器. 多个服务器在它们自己的地址空间中运行,并且只有少数核心服务器在特权模式下运行. 服务器之间的通信使用进程间通信机制. 独立的服务器进程提高了系统的健壮性,但是由于涉及内核空间和用户空间的上下文切换kvm虚拟化技术实战与原理解析 pdf,进程间通信的成本比函数调用的成本高得多.
Linux采用务实的设计: Linux内核被设计为满足性能要求的单个内核. 但同时,Linux内核还具有模块化设计,并具有动态加载内核模块的能力. 除了诸如进程切换和内存管理之类的核心内核功能外,大多数内核功能都被设计和实现为单独的内核模块. 在编译之后,这些内核模块以单独的二进制文件的形式存在. 在内核运行期间,内核模块会动态加载并链接到内核空间以根据需要运行. 未使用的模块也可以在运行期间动态卸载. 这种设计不仅可以确保内核性能,而且可以提高传统单核设计的灵活性.
KVM以内核模块的形式存在,为Linux内核添加了虚拟化功能.
从虚拟机的基本体系结构来看,它分为两种类型: 类型一和类型二.
输入一:
系统启动后,首先加载并运行虚拟机监视程序,而传统操作系统在其创建的虚拟机中运行.

类型1虚拟机监视程序可以视为针对虚拟机优化的操作系统内核.
著名的开源虚拟化软件Xen,商业软件VMware ESX / ESXi和Microsoft的Hyper-V是Type 1的示例.
第二种:
打开系统电源后,它仍将运行常规操作系统(也称为主机操作系统). 虚拟机监视程序作为一种特殊的应用程序,可以用来扩展操作系统的功能.
对于Type 2虚拟机,最大的优势是它们可以充分利用现有的操作系统;但是,它们也会受到主机操作系统的限制.
KVM,VMware Workstation和VirtualBox是2型虚拟机.
P38-39
KVM模块的主要功能是初始化CPU硬件,打开虚拟化模式,然后在虚拟机模式下运行虚拟客户机,并为虚拟客户机的操作提供一定的支持.
KVM仅支持硬件虚拟化.

以在Intel CPU上运行的KVM为例:
1. 加载内核后,KVM模块将首先初始化内部数据结构;
2. 做好准备后,KVM模块将检测系统当前的CPU,然后打开CPU控制寄存器CR4中的虚拟化模式开关;
3. 通过执行VMXON指令,将主机操作系统(包括KVM模块本身)置于虚拟化模式的根模式;
4. 最后,KVM模块创建一个特殊的设备文件/ dev / kvm并等待用户空间中的命令;
5. 接下来,虚拟机的创建和运行将是用户空间应用程序(QEMU)和KVM模块之间的合作过程.
KVM模块和用户空间QEMU之间的通信接口主要是对特殊设备文件的一系列IOCTL调用.
在KVM模块加载开始时,仅存在/ dev / kvm文件,并且此文件最重要的IOCTL调用是“创建虚拟机”,对于特定的虚拟客户端(用户,它可以理解为KVM)空间程序的创建和初始化)创建相应的内核数据结构. 同时,KVM还将返回一个文件句柄以代表创建的虚拟机.
对虚拟处理器最重要的IOCTL调用是“执行虚拟处理器”. 通过它,在KVM模块的支持下,将在用户空间中准备的虚拟机置于虚拟化模式的非根模式下,并开始执行二进制指令. 在非根模式下,所有敏感的二进制指令将被处理器捕获. 保存场景后,处理器会自动切换到root模式,KVM决定如何进一步处理(直接由KVM模块或返回用户空间,由用户空间程序处理).
除了处理器虚拟化之外,KVM模块还实现了内存虚拟化. 实际上,这部分是虚拟机实现代码中最大,最复杂的部分(至少在硬件支持二维地址转换之前).
处理器对设备的访问主要是通过IO指令和MMIO,其中IO指令将直接被处理器拦截,而MMIO将通过配置内存虚拟化来捕获. 但是,设备的仿真通常不是KVM模块的责任. 通常,只有具有高性能要求的虚拟设备才直接负责KVM内核模块,例如虚拟中断控制器和虚拟时钟. 大多数输入和输出设备仍保留在用户模式程序QEMU中.
QEMU不是KVM本身的一部分,它是著名的开源虚拟机软件. 它是纯软件实现,因此性能很低.
为了简化开发和代码重用,已在QEMU的基础上对KVM进行了修改. 在虚拟机运行期间,QEMU将通过KVM模块提供的系统调用包含在内核中,并且KVM模块负责将虚拟机置于处理器的特殊模式下运行. 当遇到用于输入和输出操作的虚拟机时,KVM模块从上一个系统调用的退出处返回QEMU,并且QEMU负责解析和模拟这些设备.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-214108-1.html
目标明确
炒股票很难发财