一种基于虚拟机的实时通信系统的制作方法

文档序号:6631884阅读:331来源:国知局
一种基于虚拟机的实时通信系统的制作方法
【专利摘要】一种基于虚拟机的实时通信系统,包括Windows SMP通信虚拟机、虚拟机监控软件、物理设备单元、实时通信虚拟机;针对Windows无法满足实时应用需求的问题,通过在多核处理器上静态地建立Windows SMP虚拟机和实时通信虚拟机,为Windows SMP虚拟机和实时通信虚拟机分配独立的内核,将实时通信网卡绑定到分配给实时虚拟通信机的物理处理器核上的方法可以实现满足应用程序要求的Windows的实时扩展。
【专利说明】一种基于虚拟机的实时通信系统

【技术领域】
[0001]本发明涉及一种基于虚拟机的实时通信系统,尤其涉及基于虚拟机构建实时通信系统,该项技术适用于仿真、虚拟试验中实时通信需求,可广泛应用在实时性要求高的半实物仿真及试验训练中。

【背景技术】
[0002]在高速千兆以太网为通信媒介的局域网中构建基于Windows操作系统的武器装备分布式仿真试验环境首要解决的是系统实时性的问题。在提供实时通信能力的同时,保证Windows利用其余内核(core)进行对称多处理的能力,即支持Windows SMP (SymmetricMult1-Processing,对称多处理系统),这就要求在Windows操作系统平台下,提供实时线程调度、实时通信与实时时钟等实时基础服务。
[0003]Windows是一种多用户分时操作系统,在系统设计过程中,为了达到多用户间的公平调度、多用户间互相隔离和通用性等设计目标,其设计与实现采用了非实时的进程模型、调度算法、存储管理算法、I/o设备模型等等,导致Windows无法满足实时应用需求。传统的多用户操作系统实时化方法,如增加剥夺点、采用常数时间调度算法等仅能勉强使其适用于软实时应用环境,但无法达到硬实时应用的要求。一种能够满足硬实时要求并被广泛应用的方法是采用双核结构,如RTX和VxWin。VxWin将VxWorks实时操作系统植入普通的MS Windows XP中,通过双核结构的应用,使之同时具备Windows的丰富的功能和VxWorks优越的实时性和高可靠性,但用户需要使用专用的接口和开发工具。


【发明内容】

[0004]本发明解决的技术问题为:克服现有技术的不足,提供一种基于虚拟机的实时通信系统,解决Windows操作系统及以太网的实时性问题,实现虚拟试验平台试验对象的实时通信。该方案以Windows SMP为宿主的方式实现虚拟化实时通信机,可以满足基于Windows操作系统、TCP/IP协议、以太网构建的VITA系统的实时通信要求。
[0005]本发明解决的技术方案为:一种基于虚拟机的实时通信系统,包括Windows SMP通信虚拟机单元、虚拟机监控软件单元、物理设备单元、实时通信虚拟机单元。实时通信虚拟机包括实时协议栈模块、实时通信设备管理模块、实时通信内存管理模块;WindowS SMP通信虚拟机单元,包括应用程序模块、Windows内存管理模块和Windows设备管理模块;虚拟机监控软件包括初始化模块、第一储存管理模块、第一设备管理模块、第二储存管理模块、第二设备管理模块;物理设备单元,包括实时通信网卡、内存、非实时通信网卡以及其它接入设备。
[0006]Windows SMP通信虚拟机单元的应用程序模块产生对Windows设备的操作指令及通信数据,将对Windows设备的操作指令传送给Windows设备管理模块,将通信数据传送给Windows内存管理模块;同时应用程序模块接收Windows内存管理模块发送过来的实时通信数据;WindowS设备管理模块接收应用程序模块对Windows设备的操作指令后,将该操作指令传送给虚拟机监控软件的第一设备管理模块;WindowS内存管理模块接收应用程序模块产生的通信数据后,将实时通信数据转发给虚拟机监控软件的第一存储管理模块,Windows内存管理模块从非实时通信网卡中提取从千兆以太网接收的非实时通信数据,储存在该Windows内存管理模块;同时Windows内存管理模块接收虚拟机监控软件的第一内存管理模块发送的实时通信数据。
[0007]虚拟机监控软件的初始化模块首先为第一存储器管理模块和第一设备管理模块、第二存储器管理模块和第二设备管理模块进行初始环境设置,即在运行该基于虚拟机的实时通信系统时,初始化模块从Windows中根据实际需求释放设定数量的内存以及实时通信网卡,并且初始化模块为Windows SMP通信虚拟机和实时通信虚拟机分别分配独立的CPU内核,将从Windows中释放的实时通信网卡绑定到分配给实时虚拟通信机的CPU内核上,将除实时通信网卡外的Windows未释放的全部输入输出设备静态分配给Windows SMP虚拟机。
[0008]第一设备管理模块,在初始环境设置后等待接收Windows设备管理模块发送过来的对Windows设备的操作指令,并进行安全性检查,如果该操作指令是对实时通信网卡发出的操作指令,则截获该操作指令,跳过这些指令的执行,完成实时通信网卡与CPU的隔离,如果接收Windows设备管理模块发送过来的对Windows设备的操作指令是对物理设备单元中除实时通信网卡外的接入设备发出的操作指令,则将该操作指令发送给物理设备单元的该操作指令控制的相应设备。
[0009]第一存储管理模块设置影子页表的访问权限来实现存储保护机制,第一存储管理模块将物理内存的一个物理页表映射到两个虚拟地址的地址空间来实现共享内存机制;Windows SMP通信虚拟机运行时,在CPU的页表基地址寄存器CR3中装载影子页表的基地址,使用装载基地址的影子页表对CPU的所有线性地址访问转换进行寻址,以捕获装载基地址的影子页表缺页异常、影子页表虚拟化INVLPG指令和转移到CR3指令Mov to CR3指令后,通过缺页异常查找Windows SMP的页表,以确定发生缺页异常的线性地址对应的物理地址所在的页表项,根据页表项的访问权限确定该缺页异常的种类,如果该异常为影子页表异常,则第一存储管理模块根据Windows SMP页表项的内容生成或更新相应的影子页表项,实现影子页表的更新;如果第一存储管理模块捕获INVLPG指令,将该INVLPG指令对应的影子页表清空,实现影子页表的更新;如果第一存储管理模块捕获Movto CR3指令,将影子页表全部置为无效,实现影子页表的更新。第一存储管理模块接收Windows内存管理模块发送过来的实时通信数据,通过影子页表的更新实现通信数据的更新,以共享内存的方式更新的通信数据存入物理设备单元的内存中。同时第一存储管理模块接收物理设备单元的共享内存中的实时通信数据。
[0010]物理设备单元的非实时通信网卡如果接收到第一设备管理模块发来的对物理设备单元的非实时通信网卡发出的操作指令,则从Windows内存管理模块接收通信数据。
[0011]物理设备单元的内存,通过共享内存方式存储需要进行实时通信的数据,物理设备单元的内存将第一存储管理模块发送过来的实时通信数据送至第二存储管理模块;同时,物理设备单元的内存将第二存储管理模块发送过来的实时通信数据送至第一存储管理模块。
[0012]第二存储管理模块,设置页表的访问权限来实现存储保护机制,第二存储管理模块将一个物理页表映射到两个虚拟地址的地址空间来实现共享内存机制,第二存储管理模块,通过存储保护机制和共享内存机制从物理设备单元的共享内存中存取实时通信数据,转发给实时通信虚拟机的实时通信内存管理模块。同时,第二存储管理模块将从实时通信内存管理模块接收到的实时通信数据以共享内存机制和存储保护机制存入物理设备单元的内存中。
[0013]实时通信内存管理模块将从第二存储管理模块接收的实时通信数据发送至实时协议栈模块,同时实时通信内存管理模块将实时通信协议栈中的实时通信数据传送给虚拟机监控软件单元的第二存储管理模块。
[0014]实时通信协议栈模块以IMAGE的文件格式,被虚拟机监控软件加载运行,接收实时通信内存管理模块发送过来的实时通信数据,将该实时通信数据根据协议栈逐层解包,以查询是否存在数据发送请求,如果存在,则协议栈模块对解包后的实时通信数据封装,传送给实时通信设备管理模块;同时实时通信协议栈模块接收实时通信设备管理模块转发的实时通信数据给实时通信内存管理模块。
[0015]实时通信设备管理模块,接收实时通信协议栈中的实时通信数据,将该实时通信数据种对Windows设备的操作指令传送给第二虚拟机监控软件的第二设备管理模块,将实时通信数据传送给实时通信网卡。同时,实时通信设备管理模块接收实时通行网卡发送过来的实时通信数据。
[0016]第二设备管理模块,在初始环境设置后,等待接收实时通信设备管理模块发送过来的对Windows设备的操作指令,并进行安全性检查,如果该操作指令是对实时通信网卡发出的操作指令则运行该操作指令,将该操作指令发送给实时通信网卡,完成实时通信网卡与CPU的隔离,如果该操作指令是对物理设备单元中除实时通信网卡外的接入设备发出的操作指令,则截获该操作指令,跳过这些指令的执行,使这些操作指令不影响WindowsSMP通信虚拟机的工作。
[0017]实时通信网卡如果接收到第二设备管理模块的操作指令,则接收实时设备管理模块发送过来的实时通信数据,转发到以太网上。同时实时通信网卡接收以太网上的实时通信数据发送给实时通信设备管理模块。
[0018]所述的虚拟机监控软件单元初始化模块的实现过程为:
[0019](I)将选定的内核从windows中释放;
[0020](2)将实时通信网卡从Windows中释放;
[0021](3)从Windows中分配物理内存;
[0022](4)将步骤(2)释放的实时通信网卡绑定到步骤(I)释放的的内核上。
[0023](5)装载实时虚拟通信机到步骤(3)中分配的物理内存上。
[0024](6)建立主机虚拟机控制结构VMCS,取虚拟机监控软件后继操作地址存入主机虚拟机控制结构VMCS中,为后面的VMexit指令操作准备虚拟机监控软件的入口点;
[0025](7)执行VMexit指令使控制流导向虚拟机监控软件步骤(6)进行后继操作的入口占.
[0026](8)为实时虚拟通信机建立存储映射页表。根据实时虚拟通信机应用软件装载的物理地址和实时虚拟通信机应用软件的逻辑地址为虚拟通信机建立相应的地址映射(建立相应的页表结构),限定应用程序仅能访问分配给它的内存(越界则产生异常),实现存储空间的隔离;
[0027](9)设置步骤¢)的VMCS,使虚拟机监控软件截获实时通信虚拟机的缺页异常和对Windows设备的操作指令,为实时通信虚拟机的内存管理和设备管理做准备;将实时通信虚拟机的入口地址和步骤(8)建立的存储映射页表的地址填到VMCS中;
[0028](10)设置步骤(6)的VMCS,使虚拟机监控软件截获windows SMP通信虚拟机的缺页异常和对Windows设备的操作指令,为Windows SMP通信虚拟机的内存管理和设备管理做准备;根据步骤(7)的后继操作的入口点保存的Windows SMP通信虚拟机的现场,填写VMCS的对应域,为Windows SMP通信虚拟机运行做准备;根据Windows SMP的页表结构建立相应的影子页表结构,实现SMP虚拟机的二次存储管理。
[0029]本发明与现有技术相比的优点在于:
[0030](I)本发明完成两个虚拟机的隔离。使Windows操作系统以及实时通信虚拟机运行在不同的处理器核上。二者独立运行,并且可以通过虚拟机监控软件提供的机制进行协作。
[0031](2)本发明实现内存的分区管理。对物理内存进行分区,使虚拟机可以进行排他式的使用,这样每个虚拟机可以采用自定义的管理机制和策略。同时,虚拟机监控软件提供二者之间的共享内存用于虚拟机之间的通讯需求。
[0032](3)本发明实现对设备的控制。从核CPU上只挂在实时通信网卡,其余设备全部挂在到主核CPU上。虚拟机监控软件完成虚拟机对设备访问的安全检查工作,并不干涉其访问,能防止虚拟机对不属于自己设备的访问请求。

【专利附图】

【附图说明】
[0033]图1为本发明的结构原理图;
[0034]图2为本发明的VMM初始化流程图;
[0035]图3为本发明的VMM影子页表与客户机页表交互关系图;
[0036]图4为本发明的VMM影子页表的更新示意图;
[0037]图5为本发明的VMM的工作流程图;
[0038]图6为本发明的实时协议栈模块发送数据流程图;
[0039]图7为本发明的实时协议栈模块接收数据流程图。

【具体实施方式】
[0040]本发明的基本思路为:提供一种基于虚拟机的实时通信系统,针对Windows无法满足实时应用需求的问题,通过在多核处理器上静态地建立Windows SMP虚拟机和实时虚拟通信机,为Windows SMP虚拟机和实时虚拟通信机分配独立的CPU core,将实时通信网卡绑定到分配给实时虚拟通信机的物理处理器核上的方法可以实现满足应用程序要求的Windows的实时扩展。
[0041]下面结合附图对本发明做进一步详细描述。
[0042]图1为本发明基于虚拟机的实时通信系统结构原理图。本发明系统包括WindowsSMP通信虚拟机单元、虚拟机监控软件单元、物理设备单元、实时通信虚拟机单元。实时通信虚拟机包括实时协议栈模块、实时通信设备管理模块、实时通信内存管理模块;WindowSSMP通信虚拟机单元,包括应用程序模块、Windows内存管理模块和Windows设备管理模块;虚拟机监控软件包括初始化模块、第一储存管理模块、第一设备管理模块、第二储存管理模块、第二设备管理模块;物理设备单元,包括实时通信网卡、内存、非实时通信网卡以及其它接入设备。
[0043]Windows SMP通信虚拟机单元为对称多处理版(SMP)的Windows操作系统,其上运行用户需要的应用程序以及设备管理以及内存管理模块。其应用程序模块产生对Windows设备的操作指令及通信数据,将对Windows设备的操作指令传送给Windows设备管理模块,将通信数据传送给Windows内存管理模块;同时应用程序模块接收Windows内存管理模块发送过来的实时通信数据;WindowS设备管理模块接收应用程序模块对Windows设备的操作指令后,将该操作指令传送给虚拟机监控软件的第一设备管理模块;WindowS内存管理模块接收应用程序模块产生的通信数据后,将实时通信数据转发给虚拟机监控软件的第一内存管理模块,Windows内存管理模块从非实时通信网卡中提取从千兆以太网接收的非实时通信数据,储存在该Windows内存管理模块;同时Windows内存管理模块接收虚拟机监控软件的第一内存管理模块发送的实时通信数据。
[0044]虚拟机监控软件(VMM)是虚拟机技术的核心,该软件通过截获存储管理、I/O操作、CPU全局操作等特权指令为每台虚拟机建立虚拟CPU、mem0ry和I/O集。其初始化模块首先为第一存储器管理模块和第一设备管理模块、第二存储器管理模块和第二设备管理模块进行初始环境设置。即在运行该基于虚拟机的实时通信系统时,初始化模块从Windows中根据实际需求释放设定数量的内存以及实时通信网卡,并且初始化模块为Windows SMP通信虚拟机和实时通信虚拟机分别分配独立的CPU内核,将从Windows中释放的实时通信网卡绑定到分配给实时虚拟通信机的CPU内核上,将除实时通信网卡外的Windows未释放的全部输入输出设备静态分配给Windows SMP虚拟机。
[0045]如图2所示,VMM初始化模块具体实现过程如下:
[0046](I)将选定的内核从windows中释放。该功能可通过Windows系统配置窗口实现。通过Windows系统配置窗口设定Windows所使用的core的数量,从而保留其余的core给实时虚拟通信机。Windows将只初始化设定数量的core,在其上启动空闲线程,而其他core将保持halt状态。VMM可通过INIT IPI机制启动保留的core执行指定地址上的代码。
[0047](2)将实时通信网卡从Windows中释放。通过Windows设备管理器禁止实时通信网卡,在Windows重启后将不对该设备进行初始化,实时通信网卡将被保留。采用以上方法释放core和实时通信网卡能够保持与Windows最好的兼容性,但要求首先启动Windows完成以上释放操作,待Windows重启后再加载VMM虚拟机驱动。这些工作只需在系统配置期间做一次,无需每次启动时都做。
[0048](3)从Windows中分配物理内存。所有操作系统都为设备驱动程序提供内存分配和释放操作,在Windows中该操作为ExAllocatePool与ExFreePool。利用这两个操作VMM可为实时虚拟通信机从Windows中分配非分页内存,供实时虚拟通信机中的应用程序使用。
[0049](4)将步骤⑵释放的实时通信网卡绑定到步骤⑴释放的的内核上。该功能主要是对连接通信网卡到core的所用芯片组进行设置,使实时通信网卡发出的MSI (MessageSignaled Interrupt)中断被定向到相应的core上。
[0050](5)装载实时虚拟通信机到步骤(3)中分配的物理内存上。该功能通过Windows文件系统读实时虚拟通信机应用程序到已分配的内存中。由于实时虚拟通信机应用程序实现为image文件形式,无需进行符号解析,因此该功能只是简单的拷贝文件内容到指定的内存。
[0051](6)建立主机VMCS结构。主要是根据VMM加载的地址填写相应的VMCS结构,为VMM在root操作模式下运行准备现场。该工作主要是取VMM后继操作的地址填入VMCS中,为后面的VMexit操作准备VMM的入口点。
[0052](7)执行VMexit指令使控制流导向虚拟机监控软件步骤(6)进行后继操作的入口点。
[0053](8)为实时虚拟通信机建立存储映射页表。根据实时虚拟通信机应用软件装载的物理地址和实时虚拟通信机应用软件的逻辑地址为虚拟通信机建立相应的地址映射(建立相应的页表结构),限定应用程序仅能访问分配给它的内存(越界则产生异常),实现存储空间的隔离;
[0054](9)设置步骤¢)的VMCS,使虚拟机监控软件截获实时通信虚拟机的缺页异常和对Windows设备的操作指令,为实时通信虚拟机的内存管理和设备管理做准备;将实时通信虚拟机的入口地址和步骤(8)建立的存储映射页表的地址填到VMCS中;
[0055](10)设置步骤(6)的VMCS,使虚拟机监控软件截获windows SMP通信虚拟机的缺页异常和对Windows设备的操作指令,为Windows SMP通信虚拟机的内存管理和设备管理做准备;根据步骤(7)的后继操作的入口点保存的Windows SMP通信虚拟机的现场,填写VMCS的对应域,为Windows SMP通信虚拟机运行做准备;根据Windows SMP的页表结构建立相应的影子页表结构,实现Windows SMP虚拟机的二次存储管理。
[0056]VMM设备管理采用直接分配的方式(即CPU和设备为虚拟机独占)进行CPU和I/O设备的管理,没有CPU和1/0调度问题。虚拟设备管理功能通过截获1/0指令进行虚拟机设备间的隔离和保护,实现为异常处理例程的形式。
[0057]第一设备管理模块,在初始环境设置后等待接收Windows设备管理模块发送过来的对Windows设备的操作指令,并进行安全性检查,如果该操作指令是对实时通信网卡发出的操作指令,则截获该操作指令,跳过这些指令的执行,完成实时通信网卡与CPU的隔离,如果接收Windows设备管理模块发送过来的对Windows设备的操作指令是对物理设备单元中除实时通信网卡外的接入设备发出的操作指令,则将该操作指令发送给物理设备单元的该操作指令控制的相应设备。
[0058]第二设备管理模块,在初始环境设置后,等待接收实时通信设备管理模块发送过来的对Windows设备的操作指令,并进行安全性检查,如果该操作指令是对实时通信网卡发出的操作指令则运行该操作指令,将该操作指令发送给实时通信网卡,完成实时通信网卡与CPU的隔离,如果该操作指令是对物理设备单元中除实时通信网卡外的接入设备发出的操作指令,则截获该操作指令,跳过这些指令的执行,使这些操作指令不影响WindowsSMP通信虚拟机的工作。
[0059]VMM存储器管理为Windows SMP和通信虚拟机提供存储保护和共享内存机制。这两项机制通过页表操作来完成。存储保护通过适当地设置页表的访问权限来实现,而内存共享通过将一个物理页映射到两个虚地址空间来实现。VMM存储器管理包括第一存储管理模块和第二存储管理模块。
[0060]第一存储管理模块设置影子页表的访问权限来实现存储保护机制,将物理内存的一个物理页表映射到两个虚拟地址的地址空间来实现共享内存机制。Windows SMP虚拟机由于运行操作系统因此需要利用影子页表进行二次存储管理。影子页表是CPU真正使用的页表,影子页表是Windows SMP页表的拷贝,但访问权限为只读,这样VMM就能捕获WindowsSMP对页表的修改。影子页表与Windows SMP页表的关系如图3所示。WindowsSMP通信虚拟机运行时,在CPU的页表基地址寄存器CR3中装载影子页表的基地址,使用装载基地址的影子页表对CPU的所有线性地址访问转换进行寻址,即Windows SMP运行时实际上是经过影子页表在访问真实的机器物理内存。影子页表的创建则以Windows SMP页表为蓝本,随着客户机页表的更新而更新。影子页表的更新如图4所示。影子页表的更新主要由影子页表缺页异常、INVLPG指令和Mov to CR3指令引发,因此第一存储管理模块主要对这些异常和指令的捕获和处理。
[0061](I)缺页异常处理。当VMM捕获到缺页异常,首先查找Windows SMP的页表以确定指向发生缺页异常的线性地址对应的物理地址所在的页表项,该页表项的[O:1]位表明了该物理地址所对应的页的被访问权限,根据此权限对照缺页异常产生的错误码以确定该缺页异常的种类:Windows SMP本身的缺页异常(Guest Page Fault):此异常是由于客户机页表中没有相应转换,或者访问权限不够引起的,此异常需要Windows SMP机自己进行处理,VMM只需将这种异常直接注入Windows SMP操作系统,让其自行处理。影子页表异常(Shadow Fault):此异常是由影子页表与Windows SMP页表不一致而产生的页面异常,即Windows SMP页表中已经有相应转换,而影子页表中还没有进行同步。VMM根据出错的Windows SMP页表项的内容来生成或更新相应的影子页表项。
[0062](2) INVLPG指令处理。Windows SMP机操作系统修改了页表项后一般会使用INVLPG指令使该转换在TLB中失效。VMM截获Windows SMP这条指令把对应的影子页表项清空。
[0063](3)Mov to CR3指令处理。WindowsSMP重新切换CR3意味着把所有的TLB刷新,因此VMM截获这条指令后将影子页表全部置为无效。
[0064]如图3所示,VMM与虚拟机的交互过程为:
[0065](I)进入VMX模式。使用一条VMX指令-VMXON进入到VMXroot操作模式,控制权给 VMM ;
[0066](2)通过VMeniry进入到VMX non-root操作模式,控制权交给Guest OS (这里假设为 Guest 0S1);
[0067](3)Guest OSl运行过程中,会因为某些指令的执行或者事件的发生被剥夺控制权,通过VMexit回到VMXroot操作模式下,控制权又交给VMM ;
[0068](4) VMM选择回到之前的Guest OSl或者另一个Guest OS(这里假设为Guest0S2);
[0069](5)周而复始,直到VMM使用VMXOFF指令关闭VMX模式为止。
[0070]所述的VMX模式是指:VMM根据硬件虚拟化的思想,采用Intel VT-χ技术进行实现,具有VT-x技术的处理器有两种运行模式:VMX模式和非VMX模式。VMX模式就是VT_x技术实际发生功效的模式。在VMX模式中,又分为两种新的处理器操作模式=VMXroot操作模式和VMXnon-root操作模式。VMXroot操作模式是提供给VMM使用的,VMXnon-root操作模式提供了一个选择性的IA-32环境,该环境被VMM控制,被设计用来支持虚拟机。VT-x技术定义了两种新的转换:从VMX root操作模式到VMXnon-root操作模式的转换叫做VMentry,从VMXnon-root操作模式到VMXroot操作模式的转换叫做VMexit。这两种转换被叫做虚拟机控制结构(virtual machinecontrol strcture, VMCS)。VMCS包括一组客户机状态(guest-state area)和一组主机状态(host-statearea),两种状态都对应着处理器不同组件的值。该结构由VMX指令控制的。VMX指令只能在VMX root操作模式下使用,在VMXnon-root操作模式下运行VMX指令会导致VMexit,而在非VMX模式下运行VMX指令会导致异常。
[0071]VT-x技术提供了 10条VMX指令,分为两组:其中5条是用来控制VMCS的,另外5条是用来控制VMX操作的。
[0072]控制VMCS的5条VMX指令:
[0073](I) VMPTRLD:该指令的操作数是指向某个VMCS区域的VMCS指针。运行该指令后,会将其指向的VMCS的状态变为当前状态。同时,会把上述VMCS指针保存到“当前VMCS指针”这个控制域中去。因为当前状态的VMCS只有一个,所以如果一个VMCS处于当前状态后,又对另一个VMCS执行VMPTRLD,则前者会从当前状态变为活跃状态,而后者则变为当前状态。
[0074]⑵VMPTRST:该指令的操作数是64位的内存地址。该指令的执行会将“当前VMCS指针”的值保存到该目标地址中去。如果当前状态的VMCS不存在,则会保存FFFFFFFF_FFFFFFFFH到目标地址中去。
[0075](3) VMCLEAR:该指令的操作数是指向某个VMCS区域的VMCS指针。该指令的执行会将该指针指向的VMCS的状态变为无效状态,并把该VMCS的数据协会到其对应的VMCS区域中去。如果上述指针的值和当前VMCS指针的值相同,则将当前VMCS指针的值变为无效。
[0076](4)VMREAD:VMCS中有非常多的子域。每个子域都有一个检索编码。该指令通过保存在寄存器中的检索编码来读取VMCS中相应的域值。结果可以保存在寄存器或者内存中。
[0077](5) VMWRITE:该指令通过保存在寄存器中的检索编码来给VMCS中相应的域进行赋值操作。数据源可以保存在寄存器或者内存中。
[0078]控制VMX操作的5条VMX指令:
[0079](I) VMCALL:该指令可以让Guest OS退出VMXnon-root操作模式。通过VMexit将控制权交给VMM。
[0080](2) VMLAUNCH:该指令可以让系统进入到VMXnon-root操作模式中,让Guest OS运行。Guest OS受到当前状态的VMCS控制,并且,在VMXnon-root操作模式下的VMCS状态即为工作状态。
[0081 ] (3) VMRESUME:该指令也可以让系统进入到VMXnon-root操作模式中。和VMLAUNCH的区别在于,对于某个Guest OS,第一次进入到VMXnon-root操作模式中运行必须通过VMLAUNCH,之后再次进入到VMXnon-root操作模式中运行必须通过VMRESUME。
[0082](4) VMXON:该指令使系统进入到VMX模式中。它的操作数是一个64位地址,系统使用该地址指向的分配空间来支持VMX操作。
[0083](5) VMXOFF:该指令使系统退出VMX模式。如果执行VMXOFF指令时还存在着活跃状态的VMCS,则该指令运行后,这些VMCS对应的VMCS区域的值将会是不可预料的。我们应该在将每个VMCS的状态后变为无效状态后才执行VMXOFF。
[0084]VMM将工作在VMX root模式下,对硬件具有完全的控制能力。两个虚拟机工作在VMX non-root模式下,在运行过程中,如果出现异常、某些特权指令的执行、1/0端口的访问、内存访问等就有可能导致VMexit,从而暂停虚拟机的运行,将控制权交给VMM来对上述特殊情况进行处理。
[0085]第二存储管理模块,由于实时通信虚拟机上没有操作系统(没有一次存储管理),因此不需要使用影子页表等技术进行二次存储管理,只需使用传统的页表就可实现虚拟地址到物理地址的映射和存储空间的隔离。第二存储管理模块通过设置页表的访问权限来实现存储保护机制,将一个物理页表映射到两个虚拟地址的地址空间来实现共享内存机制。
[0086]VMM的工作流程如下图5所示:
[0087](I)开机之后,处理器复位,将根据主核、从核的顺序依次启动处理器内核运行;
[0088](2)某个处理器内核运行之后,首先做一些初始化的操作,之后将根据处理器自身的信息判断是够支持VT-x技术;
[0089](3)若支持VT-x技术,则首先分配VMX模式所需要的内存空间,之后使用VMXON指令进入VMX的root模式;
[0090](4)进入VMX root模式之后,使用VMCLEAR指令初始化VMCS ;
[0091 ] (5)使用VMPTR指令激活VMCS,使之成为控制虚拟机运行的VMCS ;
[0092](6)通过VMWRITE指令,根据VMCS的配置,对各个控制域以及信息域赋值;
[0093](7)使用VMLAUNCH指令进入VMX non-root操作模式运行虚拟机;
[0094](8)两个内核均会通过这样的操作顺序完成初始化的设置,进而分别进入各自的虚拟机运行阶段;
[0095](9)两个虚拟机各自的正常运行,当出现异常、某些特权指令的执行、1/0端口的访问、内存访问等情况导致VMexit,回到VMX root模式;
[0096](1)VMM对导致VMexit的各种原因进行相应的处理;
[0097](11)使用VMRESUME指令,重新将控制权交给虚拟机;
[0098](12)最后,如果VMM想要退出,则使用VMMOFF指令,关闭VMX模式。
[0099]物理设备单元的非实时通信网卡如果接收到第一设备管理模块发来的对物理设备单元的非实时通信网卡发出的操作指令,则从Windows内存管理模块接收通信数据;物理设备单元的内存,通过共享内存方式存储需要进行实时通信的数据,物理设备单元的内存将第一存储管理模块发送过来的实时通信数据送至第二存储管理模块;同时,物理设备单元的内存将第二存储管理模块发送过来的实时通信数据送至第一存储管理模块;实时通信网卡如果接收到第二设备管理模块的操作指令,则接收实时设备管理模块发送过来的实时通信数据,转发到以太网上。同时实时通信网卡接收以太网上的实时通信数据发送给实时通信设备管理模块。其他接入设备可以为计算机常用的接入设备,如键盘、鼠标等。
[0100]实时通信内存管理模块将从第二存储管理模块接收的实时通信数据发送至实时协议栈模块,同时实时通信内存管理模块将实时通信协议栈中的实时通信数据传送给虚拟机监控软件单元的第二存储管理模块;实时通信设备管理模块,接收实时通信协议栈中的实时通信数据,将该实时通信数据种对Windows设备的操作指令传送给第二虚拟机监控软件的第二设备管理模块,将实时通信数据传送给实时通信网卡。同时,实时通信设备管理模块接收实时通行网卡发送过来的实时通信数据。实时通信协议栈模块以IMAGE的文件格式,被虚拟机监控软件加载运行,接收实时通信内存管理模块发送过来的实时通信数据,将该实时通信数据根据协议栈逐层解包,以查询是否存在数据发送请求,如果存在,则协议栈模块对解包后的实时通信数据封装,传送给实时通信设备管理模块;同时实时通信协议栈模块接收实时通信设备管理模块转发的实时通信数据给实时通信内存管理模块。
[0101]实时通信协议通过硬件I/O指令直接访问实时通信网卡,达到对网卡的快速访问,实时通信协议栈上层通过共享内存的框架以标准Socket API接口的形式为上层通信应用程序提供通信服务,将实时协议栈实现为一个服务解析的过程,监听是否有通信应用程序提出实时通信请求,响应请求结果返回给应用程序。实时协议栈模块控制流程可分为2个部分:
[0102](I)发送数据流程:如图6所示,在每个循环首部,均需要查询与实时通信应用程序之间的共享内存是否存在着数据发送请求,如果存在则调用协议栈模块进行数据封转,进而通过对网卡的直接操作将数据发送到以太网上。
[0103](2)接收数据流程:如图7所示,数据的接收是由中断触发的,接收数据之后,首先判断是否需要记录数据精确到达时间,之后根据协议栈逐层解包,并按照数据端口通过共享内存返回给实时通信应用程序。
[0104]本发明未详细阐述部分属于本领域公知技术。
【权利要求】
1.一种基于虚拟机的实时通信系统,其特征在于:包括Windows对称多处理系统SMP通信虚拟机单元、虚拟机监控软件VMM单元、物理设备单元、实时通信虚拟机单元; 实时通信虚拟机包括实时协议栈模块、实时通信设备管理模块、实时通信内存管理模块;Windows SMP通信虚拟机单元,包括应用程序模块、Windows内存管理模块和Windows设备管理模块;虚拟机监控软件包括初始化模块、第一储存管理模块、第一设备管理模块、第二储存管理模块、第二设备管理模块;物理设备单元,包括实时通信网卡、内存、非实时通信网卡以及其它接入设备; Windows SMP通信虚拟机单元的应用程序模块产生对Windows设备的操作指令及通信数据,将对Windows设备的操作指令传送给Windows设备管理模块,将通信数据传送给Windows内存管理模块;同时应用程序模块接收Windows内存管理模块发送过来的实时通信数据; Windows设备管理模块接收应用程序模块对Windows设备的操作指令后,将该操作指令传送给虚拟机监控软件的第一设备管理模块; Windows内存管理模块接收应用程序模块产生的通信数据后,将实时通信数据转发给虚拟机监控软件的第一存储管理模块,Windows内存管理模块从非实时通信网卡中提取从千兆以太网接收的非实时通信数据,储存在该Windows内存管理模块;同时Windows内存管理模块接收虚拟机监控软件的第一内存管理模块发送的实时通信数据; 虚拟机监控软件的初始化模块首先为第一存储器管理模块和第一设备管理模块、第二存储器管理模块和第二设备管理模块进行初始环境设置,即在运行该基于虚拟机的实时通信系统时,初始化模块从Windows中根据实际需求释放设定数量的内存以及实时通信网卡,并且初始化模块为Windows SMP通信虚拟机和实时通信虚拟机分别分配独立的CPU内核,将从Windows中释放的实时通信网卡绑定到分配给实时虚拟通信机的CPU内核上,将除实时通信网卡外的Windows未释放的全部输入输出设备静态分配给Windows SMP虚拟机;第一设备管理模块,在初始环境设置后,等待接收Windows设备管理模块发送过来的对Windows设备的操作指令,并进行安全性检查,如果该操作指令是对实时通信网卡发出的操作指令,则截获该操作指令,跳过这些指令的执行,完成实时通信网卡与CPU的隔离,如果接收Windows设备管理模块发送过来的对Windows设备的操作指令是对物理设备单元中除实时通信网卡外的接入设备发出的操作指令,则将该操作指令发送给物理设备单元的该操作指令控制的相应设备; 第一存储管理模块设置影子页表的访问权限来实现存储保护机制,第一存储管理模块将物理内存的一个物理页表映射到两个虚拟地址的地址空间来实现共享内存机制;Windows SMP通信虚拟机运行时,在CPU的页表基地址寄存器CR3中装载影子页表的基地址,使用装载基地址的影子页表对CPU的所有线性地址访问转换进行寻址,以捕获装载基地址的影子页表缺页异常、影子页表虚拟化INVLPG指令和转移到CPU的页表基地址寄存器指令Mov to CR3指令后,通过缺页异常查找Windows SMP的页表,以确定发生缺页异常的线性地址对应的物理地址所在的页表项,根据页表项的访问权限确定该缺页异常的种类,如果该异常为影子页表异常,则第一存储管理模块根据Windows SMP页表项的内容生成或更新相应的影子页表项,实现影子页表的更新;如果第一存储管理模块捕获INVLPG指令,将该INVLPG指令对应的影子页表清空,实现影子页表的更新;如果第一存储管理模块捕获Mov to CR3指令,将影子页表全部置为无效,实现影子页表的更新;第一存储管理模块接收Windows内存管理模块发送过来的实时通信数据,通过影子页表的更新实现通信数据的更新,以共享内存的方式更新的通信数据存入物理设备单元的内存中;同时第一存储管理模块接收物理设备单元的共享内存中的实时通信数据; 物理设备单元的非实时通信网卡如果接收到第一设备管理模块发来的对物理设备单元的非实时通信网卡发出的操作指令,则从Windows内存管理模块接收通信数据; 物理设备单元的内存,通过共享内存方式存储需要进行实时通信的数据,物理设备单元的内存将第一存储管理模块发送过来的实时通信数据送至第二存储管理模块;同时,物理设备单元的内存将第二存储管理模块发送过来的实时通信数据送至第一存储管理模块; 第二存储管理模块,设置页表的访问权限来实现存储保护机制,第二存储管理模块将一个物理页表映射到两个虚拟地址的地址空间来实现共享内存机制,第二存储管理模块,通过存储保护机制和共享内存机制从物理设备单元的共享内存中存取实时通信数据,转发给实时通信虚拟机的实时通信内存管理模块;同时,第二存储管理模块将从实时通信内存管理模块接收到的实时通信数据以共享内存机制和存储保护机制存入物理设备单元的内存中; 实时通信内存管理模块将从第二存储管理模块接收的实时通信数据发送至实时协议栈模块,同时实时通信内存管理模块将实时通信协议栈中的实时通信数据传送给虚拟机监控软件单元的第二存储管理模块; 实时通信协议栈模块以IMAGE的文件格式,被虚拟机监控软件加载运行,接收实时通信内存管理模块发送过来的实时通信数据,将该实时通信数据根据协议栈逐层解包,以查询是否存在数据发送请求,如果存在,则协议栈模块对解包后的实时通信数据封装,传送给实时通信设备管理模块;同时实时通信协议栈模块接收实时通信设备管理模块转发的实时通信数据给实时通信内存管理模块; 实时通信设备管理模块,接收实时通信协议栈中的实时通信数据,将该实时通信数据种对Windows设备的操作指令传送给第二虚拟机监控软件的第二设备管理模块,将实时通信数据传送给实时通信网卡;同时,实时通信设备管理模块接收实时通行网卡发送过来的实时通信数据; 第二设备管理模块,在初始环境设置后,等待接收实时通信设备管理模块发送过来的对Windows设备的操作指令,并进行安全性检查,如果该操作指令是对实时通信网卡发出的操作指令则运行该操作指令,将该操作指令发送给实时通信网卡,完成实时通信网卡与CPU的隔离,如果该操作指令是对物理设备单元中除实时通信网卡外的接入设备发出的操作指令,则截获该操作指令,跳过这些指令的执行,使这些操作指令不影响Windows SMP通信虚拟机的工作; 实时通信网卡如果接收到第二设备管理模块的操作指令,则接收实时设备管理模块发送过来的实时通信数据,转发到以太网上;同时实时通信网卡接收以太网上的实时通信数据发送给实时通信设备管理模块。
2.根据权利要求1所述的基于虚拟机的实时通信系统,其特征在于:所述的虚拟机监控软件单元初始化模块的实现过程为: (1)将选定的内核从Windows中释放; (2)将实时通信网卡从Windows中释放; (3)从Windows中分配物理内存; (4)将步骤(2)释放的实时通信网卡绑定到步骤(1)释放的的内核上; (5)装载实时虚拟通信机到步骤(3)中分配的物理内存上; (6)建立主机虚拟机控制结构VMCS,取虚拟机监控软件后继操作地址存入主机虚拟机控制结构VMCS中,为后面的VMexit指令操作准备虚拟机监控软件的入口点; (7)执行VMexit指令使控制流导向虚拟机监控软件步骤(6)进行后继操作的入口点; (8)为实时虚拟通信机建立存储映射页表。根据实时虚拟通信机应用软件装载的物理地址和实时虚拟通信机应用软件的逻辑地址为虚拟通信机建立相应的地址映射,限定应用程序仅能访问分配给它的内存,实现存储空间的隔离; (9)设置步骤¢)的VMCS,使虚拟机监控软件截获实时通信虚拟机的缺页异常和对Windows设备的操作指令,为实时通信虚拟机的内存管理和设备管理做准备;将实时通信虚拟机的入口地址和步骤(8)建立的存储映射页表的地址填到VMCS中; (10)设置步骤(6)的VMCS,使虚拟机监控软件截获windowsSMP通信虚拟机的缺页异常和对Windows设备的操作指令,为Windows SMP通信虚拟机的内存管理和设备管理做准备;根据步骤(7)的后继操作的入口点保存的Windows SMP通信虚拟机的现场,填写VMCS的对应域,为Windows SMP通信虚拟机运行做准备;根据Windows SMP的页表结构建立相应的影子页表结构,实现SMP虚拟机的二次存储管理。
【文档编号】G06F9/455GK104468307SQ201410584801
【公开日】2015年3月25日 申请日期:2014年10月27日 优先权日:2014年10月27日
【发明者】廖建, 郭晶, 彭健, 蔡斐华, 李鑫, 贾长伟, 褚厚斌, 王彦静, 赵雯, 侯雄, 刘佳, 王立伟, 章乐平 申请人:中国运载火箭技术研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1