Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23094
  • 博文数量: 9
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-15 21:02
文章分类

全部博文(9)

文章存档

2012年(1)

2011年(1)

2010年(1)

2009年(6)

我的朋友

分类: LINUX

2009-07-14 23:03:55

 
 
什么是虚拟化: 虚拟化是指将一台物理计算机虚拟化为一台或多台虚拟化计算机,每台虚拟计算机都拥有自己的虚拟硬件,来提供一个独立的虚拟机执行环境。
 
现有的虚拟机技术分类:
   指令集虚拟     如Bochs和QEMU
   硬件抽象级虚拟    如VMware、xen、Denali
   操作系统级虚拟     linux VServer
   库程序或者应用程序级虚拟   java 虚拟机
 
基于VMM的虚拟化分类:
 完全虚拟化(full virtualization):
   和物理平台完全同质,OS感知不到运行在,无需对OS内核作任何改动
   软件辅助的完全虚拟化:基于优先级压缩和二进制代码翻译
    硬件辅助的完全虚拟化:intel VT-x技术
 半虚拟化(paravirtualization):
      通过在源代码级别上修改指令以回避虚拟化漏洞,可以实现更高的性能
 
CPU虚拟化:
 物理地址:由硬件总线地址决定的地址空间
 线性地址:进程使用的地址空间,一般包含内核占用,用户占用,共享段,
          代码段,数据段等
 逻辑地址:程序直接使用的地址
 逻辑地址--->(分段) -->线性地址 -->(分页)->物理地址
 
分段和分页中的权限保护:
 
  段保护:
  当前权限级别(CPL):CPL描述当前代码的权限,通过CS寄存器的0,1两个bit记录,通过这两位,将CS指向的代码分为4个特权级ring0--ring3
  描述符权限级别(DPL):DPL表示段和门所具有的权限,表示该段如果被访问,CPL必须小于DPL的值
  当CPL<=DPL时,代码被执行,否则,触发异常。异常会被特权代码捕获
 
  页保护:
  页表项,页目录表项中存在一个user/supervisor位,该位为0时,对应的CPL为0,1,2时,为特权页面,对应CPL=3时为用户页面
 
 大多数系统都存在一些指令,这些指令只能在最高特权级执行,如果在非对应特权级上运行,就会引发一个异常,处理器会陷入最高特权级,交由相关代码处理。这种指令叫做特权指令。
 存在一些指令,能够访问敏感资源,(CR FLAG TLB, IDT, GDT, LDT),这些指令叫做敏感指令,显然,特权指令全部属于敏感指令。
 存不存在一些敏感指令,不需要最高级特权就可以执行,是决定该体系结构能否进行虚拟化的关键,X86平台存在这样的指令,所以不属于可虚拟化架构。
 
 陷入再模拟:能够处理所有可虚拟化架构
 解释执行:逐条翻译,性能很差
 扫描与修补:将即将执行的代码段进行扫描,将不可虚拟化指令用JMP指令提前置换
 二进制代码翻译:开辟很大的缓冲区,将客户代码全部翻译好后再逐条执行
在X86平台上实现虚拟化的最好方法:
      陷入再模拟+扫描与修补
对于半虚拟化更简单,直接修改GUEST OS的产生敏感指令的代码,主动陷入到最高特权级hypervisor
 
IO虚拟化方式:
  设备接口完全模拟
  FE/BE模型,XEN将驱动分为前端驱动和后端驱动,前端驱动属于guest OS,后端属于driver domain
    
 
阅读(979) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~