最近这几个月为了Release product,累死了,今天终于发布给SV拉(郁闷的是,马上又要出下一版啦;还好在国庆前搞定,比我预计的快,也还可以放心休息一下)!
今天一天也可以歇一歇,忙里偷闲,把Microsoft的一个虚拟OS的东西看了看,画了些小图,写了些文字。现把自认为精要的部分贴出来分享分享,等大家拍拍砖,以后争取整理成一片技术介绍文章,也让自己不断学习虚拟华技术,以后扩展到VMWARE,Solaris的zone,和硬件支持的虚拟华。
下面是Microsoft虚拟化OS的架构图:

其中:
每个Child Partition都有一个或者多个存储驱动栈,通过加入VSC使得该驱动栈功能得以加强。VSC从Child Partition的存储驱动栈中得到I/O请求,然后通过VMBus将它们传递到Parent partition的VSP;VSP将得到的所有应答通过VMBus返回给VSC,VSC又将所有应答发送给Child Partition的存储驱动栈,并最终到达请求的发起者。
它有如下特性:
1,Child Partition的存储I/O由存储Port Driver来完成;
2,VSC通过编写存储PortDriver对应的MiniPortDriver来实现;
3,Child Partition上的VSC通过VMBus和Parent Partition上的VSP通信;
VSP由两部分组成:SRB (SCSI request block) Server和IFP (Image Format Parser,映像格式解析器)。这两部分协同工作,使得I/O请求能够以恰当的格式到达恰当的位置。
VSC,在Child Partition上存储设备被当作SCSI设备,因此只需考虑这些存储驱动。为了减少代码的执行流程,增加系统的吞吐率,加入fast path驱动以提高读/写性能。它是一个Filter驱动,直接跨越disk和存储Port Driver,通过VMBus和VSP通信。
VSC上部的通过标准的接口和Port driver通信,下部使用VMBus传送I/O请求给VSP,并接收Parent Partition返回的确认数据,数据通过共享内存列表来传递。VSC处理的工作相当轻量级的,大部分的处理都是由VSP来完成。
VSP,Parent Partition只有一个VSP,它处理VSC、存储硬件、以及虚拟化驱动栈的通信,支持多个独立的VMBus通道,能够异步地处理虚拟化I/O。在资源不高的情况下,VSP能够用同步方式处理,以避免分配失败的情形。VSP能够虚拟化任何存储设备:DAS (包括IDE和SCSI),SAN和NAS;其他存储设备,如USB, IEEE1394,以及Flash memory等,VSP也支持,只要它们属于存储设备类。VSP由两部分组成:SRB Server和Image Format Parser.
SRB Server,它处理VSC和VMBus之间的通信;从VSC那里接收VMBus包,解开包得到SRB。通常SRB会被发送到对应的Image Format Parser进行处理,并最终发送到设备。设备返回的确认数据,被返回到VMBus,同时将信息返回给对应的VSC。它能够处理自身的控制消息,主要是那些不需要Parse的消息,就像存储设备的热插拔消息;并向用户模式的应用程序,提供控制接口,从而能够显示或者删除设备。
Image Format Parsers,SRB Server并不直接处理image format,而是通过Image Format Parsers来完成;该Parser处理磁盘中的数据映射,使得数据对于Child Partition来说,就像是实际的物理硬件。但存储设备被显示给Child Partition时,将会装载该Parser;它使用VSC在磁盘中指定的偏移,将它们映射为VHD文件中对应的偏移值。在某些时候,整个磁盘都会被分配给一个Child Partition控制,此时该Parser只需做相同的转换,也就是说,不需要改变命令而直接发送出去。
VSP支持如下的Image Format Parsers:
A) VHD,处理VHD格式;
B) ISO,处理ISO文件,并将其作为CD-ROM来处理;
C) Pass-Through,只将命令直接传递给下层设备;
The Control Interface,VSP支持几个输入输出的控制命令(IOCTLs),它们会被存储虚拟设备(virtual device, VDev)用于如下方面:
A) 设备的添加和删除;
B) 生成或者合并不同的映像;
C) 查询映像属性;
而Vdev,通过WMI (Windows Management Instrumentation)来实现其功能。
User-mode Hardware Emulators用户模式的硬件仿真,为了向后兼容,特别是启动的时候,Viridian提供了IDE仿真控制器(Intel 440BX IDE controller)和SCSI仿真控制器(Adaptec 7870 SCSI controller)。但Child Partition上的OS访问这些设备时,Parent Partition上会产生一个陷入(trap)请求,让该仿真控制器处理请求。在Child Partition上,一旦OS启动起来,将使用Fast Path过滤驱动处理读、写,以及Flush命令到VMBus而其他的命令可以继续被发送到仿真控制器。
Virtual Hard Disks,虚拟化OS不需要专用的硬盘,Viridian通过分配一个或者多个虚拟硬盘(virtual hard disks, VHD)给Child Partition。从Parent Partition的角度看,每个VHD其实就是一个简单的文件而已。它也许位于其他的系统上面,并通过网络访问;然而,对于Child Partition来说,它确实又是一个实际的硬盘。Viridian通过Parser处理Child Partition的存储格式,完成细节的转换。
有如下两种VHD:
Dynamic VHDs,能够分配最大的空间;然而,除非有特别的需求,VHD文件只能使用Parent Partition上文件系统能够允许的空间。
Differencing VHDs,由Parent image和Child Image链组成,其中child images记录磁盘上添加或者删除数据的记录。
VHD拥有和多个Child Partition共享物理硬盘的优点,同时也能够只使用数据需要的存储空间特色,并且可以不同的磁盘格式来生成磁盘快照。
但是VHD由于需要解析Image,所以需要额外的处理,因此对于需要高性能的Child Partition来说是不足之处。
路漫漫而修远,(***)将上下而求索!