os老师带着做一个虚拟机的项目,暑假被《操作系统革命》和《硅谷》洗脑了,发觉系统工程师才是真hacker,这次就兴致勃勃追随田老师啦!按照老师说的是我们要做的是一个在实体机里面监控虚拟机的软件,感觉是一个上帝视角,很厉害的样子,用到vmi虚拟机自省技术,需要储备这方面知识,这次慢慢来不要急。
老师让用的是xen+wxwidgets+openstone,不知道为什么要用几个不是很流行的平台(年龄大?)。
xen虚拟化
XEN 虚拟化技术的主要特性如下所示:
◆ 虚拟机的性能更接近真实的硬件平台;
◆ 可实现物理平台和虚拟平台间的自由切换;
◆ 在每个客户虚拟机支持到 32个虚拟CPU,通过VCPU热插拔;
◆ 支持PAE指令集的x86/32, x86/64平台;
◆ 能通过硬件辅助虚拟技术进行虚拟原始操作系统,可支持Microsoft Windows虚拟;
◆ 得到广泛的硬件厂家的大力支持,支持几乎所有的Linux设备驱动。
原理:
Xen通过hypervisor软件层来访问物理硬件,实现在一台单独的计算机上运行多个各自独立彼此隔离的子操作系统。hypervisor扮演着类似交通警察的角色,指挥硬件访问和协调来自各子操作系统的请求。
在Xen环境中,主要有两个组成部分。 一个是虚拟机监控器(VMM),也叫hypervisor。Hypervisor层硬件与虚拟机之间,最先被载入到硬件的第一层。 Hypervisor载入就可部署虚拟机。在Xen中,虚拟机叫做Domain。在这些虚拟机中,Domain0具有很高的特权,负责一些专门的工作。由于hypervisor中不包含任何与硬件对话的驱动,也没有与管理员对话的接口,这些驱动就由 domain0来提供了。通过domain0,管理员可以利用一些Xen工具来创建其它虚拟机(DomainU)。这些domainU属于无特权domain。
在domain0中,还会载入一个xend进程。这个进程会管理所有其它虚拟机,并提供这些虚拟机控制台的访问。在创建虚拟机时,管理员使用配置程序与domain0直接对话。
当启动一个用户VM(DomU)时, 该VM所需的CPU和内存都有Xen Hypervisor提供,而它若需要使用IO设备时,则向特权VM
发起请求,特权VM(Dom0)会为该用户VM创建一个模拟的硬件设备线程,并运行于特权VM的用户空间,当用户VM向该IO硬件
发起调用时,特权VM上相应的模拟设备接收请求并将其转化为特权VM对IO硬件的操作,交给特权VM的内核来代为
完成其操作。这里需注意这些虚拟IO硬件需要由Qemu来模拟,Xen本身并没有提供相应的模拟功能。
(注:特权VM的CPU和内存也是有Xen Hypervisor提供.)
Qemu模拟IO设备(完全虚拟化方式): 假如用户VM向特权VM请求磁盘,特权VM可以将一个分区、文件等,
通过Qemu将其模拟成一个磁盘设备,就拿文件来说,特权VM先创建一个映像文件,再通过Qemu为该文件模拟一个磁盘控制器芯片,然后,将其映射到用户VM上,当然模拟的这个磁盘控制器芯片一定是一个最常见的,用户VM的Kernel一定支持的,但需注意: 模拟的磁盘可能会与实际的物理磁盘不同,因为要尽可能兼容。这样一来用户VM假如要写数据到磁盘的过程如下:
用户VM-APP—>用户VM-Kernel调用虚拟磁盘的驱动进行写数据前的准备
(如:数据写入到磁盘中的扇区位置/数据编码等)—>
用户VM-Kernel将编码后的信息发给特权VM的模拟磁盘进程—>
特权VM的模拟磁盘进程再将编号信息还原后发给特权VM-kernel—>
特权VM-kernel调用真实物理磁盘的驱动对数据进行写前准备—>最后磁盘驱动调度磁盘完成写入.
Xen向Domain提供了一个抽象层,其中包含了管理和虚拟硬件的API。Domain 0内部包含了真实的设备驱动(原生设备驱动),可直接访问物理硬件,Xen 提供的管理 API 可与其交互,并通过用户模式下的管理工具(如:xm/xend、xl等)来管理 Xen 的虚拟机环境。
补充概念:
完全虚拟化:
CPU、内存不做模拟, 只对其进行分配和管理, 可通过BT, HVM等技术进行加速, 只能模拟本机CPU; 著名的软件: VMWare Workstation, VirtualBox, KVM…
半虚拟化:
在底层硬件上安装VMM(Virtual Machines Monitor)来管理各虚拟机, 各虚拟机的内核需要修改, 从而知道自己是虚拟机, 通过特殊方式调用驱动和特权指令; 著名的软件: Xen, VMWare ESXI, UML …
也就是说我们我们的ubuntu被换成了xen的内核,并作为Domain0,我们的项目就是运行在Domain0上面,对gust虚拟机进行自省。