分类: LINUX
2014-02-20 10:36:39
=============================================================
虚拟化相关概念
=============================================================
经典的虚拟化采用:陷入后模拟的方法,x86架构中部分敏感指令不能陷入,所以存在虚拟化漏洞。Power架构是不存在虚拟化漏洞的。
-------------------------------------------------------------
1 全虚拟化
-------------------------------------------------------------
-- guest无需任何改动
-- vmm需要处理guest的所有指令
-- x86架构存在虚拟化漏洞:部分敏感指令不是特权指令,执行时,无法“陷入”
解决方案:
1、软件辅助:Ring Compression&Binary Translation
1)先级压缩:VMM运行在Ring 0,Guest kernel运行在Ring 1,Guest User运行在Ring 0,Guest的内核和user执行特权指令时,会引发异常,陷入VMM,VMM截获后进行模拟。
2)二进制翻译
VMM扫描Guest OS的二进制代码,将不能虚拟化的指令转化成支持虚拟化的指令,如此:转化后的指令可与VMM合作范围受限的虚拟资源或显式触发异常,由VMM截获处理。
2、硬件辅助:x86的VT-x, 引入新的运行模式。两种模式都有Ring0-Ring3。
root模式(vmm)
VMM的kernel运行于Ring0
VMM的user运行于Ring3
Non-root模式(guest)
guest kernel--ring 0
guest user--ring 3
guest运行于non-root模式,有一套完整的处理器 集合和执行环境,只有特权操作会处理器截获并交给VMM
-------------------------------------------------------------
2 半虚拟化
-------------------------------------------------------------
-- guest需要修改,以适应虚拟化平台
-- 比如半虚拟化驱动,可以提升性能
-------------------------------------------------------------
3 敏感指令&特权指令
-------------------------------------------------------------
3.1 特权指令:操作和管理系统关键资源,在非最高特权运行时,会引发异常,陷入最高特权级(比如ring0,硬件保证)
3.2 敏感指令:虚拟化技术中的概念,操作特权资源的指令,包括修改虚拟机运行模式、物理机状态、读写敏感寄存器或内存、IO指令等
3.3 所有特权指令都是敏感指令,但反之不一定,
3.4 如果所有敏感指令都是特权指令,那么该系统是可虚拟化的。反之则是不可虚拟化的,称为存在“虚拟化漏洞”,传统的x86架构的cpu就是存在虚拟化漏洞的。
其它内容待续。