一种基于设备模拟的数据卡虚拟化实现方法
【专利摘要】本发明公开了一种基于设备模拟的数据卡虚拟化实现方法,它包括一个设备初始化步骤和一个I/O口读写处理步骤,所述的设备初始化步骤包括:分配模拟设备资源配置对象;将虚拟子数据卡信息注册到虚拟机子模块;根据初始化指定的数据卡类型生成相应的设备节点名;对I/O口读写操作处理函数进行注册;虚拟子数据卡的I/O口读写范围的申请;结束初始化设置。本发明不需要对硬件进行专门设计、可在虚拟子模块中提供虚拟的子数据卡、各子数据卡之间相互独立,互不干扰、且具备迁移功能。
【专利说明】一种基于设备模拟的数据卡虚拟化实现方法
【技术领域】
[0001]本发明涉及一种基于设备模拟的数据卡虚拟化实现方法。
【背景技术】
[0002]虚拟化,是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案,通过虚拟话技术可以扩大硬件的容量,简化软件的重新配置过程,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
[0003]在计算机虚拟化中,虚拟机管理器(VMM)模拟底层硬件,为虚拟机子系统(Guest OS)提供访问虚拟设备的接口。VMM基本可以分为两种工作模式:完全虚拟化(Full virtual izat ion)和半虚拟化(Paravirtualizat ion)。在完全虚拟化中,物理设备在虚拟机子系统之间共享使用,子系统的I/O访问被VMM捕获,由设备模型来进行模拟。完全虚拟化技术中,VMM提供了对子系统I/O操作的捕获支持。对于I/O内存映射,VMM 一般通过页面失效的方式进行捕获;然后,这些I/O操作通过设备模拟模型模块进行解析处理;最后,设备模拟模型模块通过本地设备驱动操作真实的硬件设备。现有的设备虚拟化一般需要硬件专门支持,这将使数据卡的设计复杂;硬件虚拟化能提供的虚拟数据卡数目受硬件资源限制。
【发明内容】
[0004]本发明的目的在于克服现有技术的不足,提供一种不需要对硬件进行专门设计、可在虚拟子模块中提供虚拟的子数据卡、各子数据卡之间相互独立,互不干扰、且具备迁移功能的基于设备模拟的数据卡虚拟化实现方法。
[0005]本发明的目的是通过以下技术方案来实现的:一种基于设备模拟的数据卡虚拟化实现方法,它包括一个设备初始化步骤和一个I/o 口读写处理步骤,所述的设备初始化步骤包括以下步骤:
5101:分配模拟设备资源配置对象;
5102:将虚拟子数据卡信息注册到虚拟机子模块;
5103:根据初始化指定的数据卡类型生成相应的设备节点名;
5104:对I/O 口读写操作处理函数进行注册;
5105:虚拟子数据卡的I/O 口读写范围的申请;
5106:结束初始化设置;
所述的I/o 口读写处理步骤包括I/O 口读处理步骤和I/O 口写处理步骤,所述的I/O口读处理步骤包括以下步骤:
52011:获取I/O 口读操作指令,对I/O 口所读取的数据进行判断;
52012:判断I/O 口读取的数据是否为DMA传输地址寄存器数据,若为DMA传输地址寄存器数据,则执行步骤S2013,否则执行步骤S2014 ;52013:读取DMA传输地址寄存器内的数据,并返回DMA传输地址寄存器内的数据处理值,完成I/O 口数据读取处理;
52014:判断I/O 口读取的数据是否为控制状态寄存器数据,若为控制状态寄存器数据,则执行步骤S2015,否则执行步骤S2016 ;
52015:读取控制状态寄存器内的数据,返回控制状态寄存器内的数据处理值,完成1/0口数据读取处理;
52016:返回0,完成I/O 口数据读取处理;
所述的I/O 口写处理步骤包括以下步骤:
52021:获取I/O 口写操作指令,对I/O 口所读取的数据进行判断;
52022:判断I/O 口所读取的数据是否为DMA地址标志寄存器数据,若为DMA地址标志寄存器数据,则执行步骤S2023,否则跳转至步骤S2026 ;
52023:将读取到的DMA地址标志寄存器内的数据传输至真实数据卡设备;
52024:读取真实数据卡设备中的数据,作为返回值写入虚拟机子模块中的DMA地址寄存器内;
52025:完成I/O 口写处理步骤;
52026:判断I/O 口所读取的数据是否为DMA传输地址寄存器数据,若为DMA传输地址寄存器数据,则执行步骤S2027,否则执行步骤S2028 ;
52027:将读取到的数据写入指定的DMA传输地址寄存器,完成I/O 口写处理;
52028:判断I/O 口所读取到的数据是否为控制状态寄存器数据,若为控制状态寄存器数据,则执行步骤S2029,否则执行步骤S2030 ;
52029:将控制状态寄存器中的指定位和虚拟子数据卡的中断标志清零,完成I/O 口写处理;
52030:不响应操作,完成I/O 口写处理。
[0006]所述的一种基于设备模拟的数据卡虚拟化实现方法,它还包括一个设备迁入步骤和设备迁出步骤,所述的设备迁入步骤包括以下步骤:
53011:读取数据,将DMA地址寄存器和控制状态寄存器中的数据进行恢复;
53012:读取数据,恢复虚拟子系统相关的通信会话上下文环境;
53013:完成设备迁入;
所述的设备迁出步骤包括以下步骤:
53021:保存DMA地址寄存器和控制状态寄存器中的数据信息;
53022:获取虚拟子系统相关的通信会话的上下文环境,并保存;
53023:完成设备迁出。
[0007]本发明的有益效果是:不需要对进行专门设计,从而提高了数据卡虚拟化的使用范围;能够设置多个子数据卡,且各子数据卡之间相互独立,互补干扰;且具有设备迁移功倉泛。
【专利附图】
【附图说明】
[0008]图1为本发明的系统概略框图;
图2为本发明的设备初始化流程图;图3为本发明的I/O 口读处理流程图;
图4为本发明的I/O 口写处理流程图;
图5为本发明的设备迁入流程图;
图6为本发明的设备迁出流程图。
【具体实施方式】
[0009]下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。
[0010]本发明的系统概略框图如图1所示,它包括虚拟机子模块、数据卡虚拟化模块、数据卡驱动模块和数据卡设备,数据卡虚拟化模块包括设备模拟模型单元、资源管理单元和迁移管理单元,设备模拟模型单元分别与资源管理单元、数据卡驱动模块和虚拟机子模块相连,资源管理单元和迁移管理单元相连;所述的数字卡设备包括迁移支持模块,迁移支持模块和迁移管理单元相连,迁移管理单元还和数据卡驱动模块相连。
[0011]在图1中,设备模拟模型单元用于产生虚拟子数据卡的对象实例,并初始化其配置空间参数,然后将对象实例注册到虚拟机子模块的PCI总线(类似于插入PCI加密卡的动作),最后将I/O读写的处理方法注册到VMM ;资源管理单元用于保存虚拟子加密卡的设备信息、控制状态寄存器以及传输地址;数据卡驱动模块用于处理其它寄存器的访问,并将处理结果传送至数据卡设备;迁移管理单元用于响应VMM的迁移命令,它在迁出/迁入过程中将访问资源管理单元,以及通过数据卡驱动模块访问数据卡设备的迁移支持功能;迁移支持模块用于响应迁移管理单元的迁移命令,导入/导出数据卡设备中虚拟子数据卡所涉及的通信会话的上下文环境。
[0012]所述的控制状态寄存器用于模拟虚拟子数据卡的中断控制状态,它以二进制位表示中断来源,由设备模拟模型单元根据设备响应进行置位,并由虚拟子模块通过I/o请求清零;所述的传输地址用于保存虚拟子数据卡的虚拟子模块系统中分配得到DMA传输地址,其值由虚拟子模块通过I/O请求写入,设备模拟模型单元通过DMA传输地址与虚拟子系统进行数据交互;所述的通信会话的上下文环境包括通信会话的登录状态、通信会话使用的数据资源,如:工作模式、密钥等。
[0013]如图2、3、4、5和6所示,一种基于设备模拟的数据卡虚拟化实现方法,它包括一个设备初始化步骤和一个I/o 口读写处理步骤,所述的设备初始化步骤包括以下步骤:
5101:分配模拟设备资源配置对象;
5102:将虚拟子数据卡信息注册到虚拟机子模块;
5103:根据初始化指定的数据卡类型生成相应的设备节点名;
5104:对I/O 口读写操作处理函数进行注册;
5105:虚拟子数据卡的I/O 口读写范围的申请;
5106:结束初始化设置;
所述的I/o 口读写处理步骤包括I/O 口读处理步骤和I/O 口写处理步骤,所述的I/O口读处理步骤包括以下步骤:
52011:获取I/O 口读操作指令,对I/O 口所读取的数据进行判断;
52012:判断I/O 口读取的数据是否为DMA传输地址寄存器数据,若为DMA传输地址寄存器数据,则执行步骤S2013,否则执行步骤S2014 ;
52013:读取DMA传输地址寄存器内的数据,并返回DMA传输地址寄存器内的数据处理值,完成I/o 口数据读取处理;
52014:判断I/O 口读取的数据是否为控制状态寄存器数据,若为控制状态寄存器数据,则执行步骤S2015,否则执行步骤S2016 ;
52015:读取控制状态寄存器内的数据,返回控制状态寄存器内的数据处理值,完成1/0口数据读取处理;
52016:返回0,完成I/O 口数据读取处理;
所述的I/O 口写处理步骤包括以下步骤:
52021:获取I/O 口写操作指令,对I/O 口所读取的数据进行判断;
52022:判断I/O 口所读取的数据是否为DMA地址标志寄存器数据,若为DMA地址标志寄存器数据,则执行步骤S2023,否则跳转至步骤S2026 ;
52023:将读取到的DMA地址标志寄存器内的数据传输至真实数据卡设备;
52024:读取真实数据卡设备中的数据,作为返回值写入虚拟机子模块中的DMA地址寄存器内;
52025:完成I/O 口写处理步骤;
52026:判断I/O 口所读取的数据是否为DMA传输地址寄存器数据,若为DMA传输地址寄存器数据,则执行步骤S2027,否则执行步骤S2028 ;
52027:将读取到的数据写入指定的DMA传输地址寄存器,完成I/O 口写处理;
52028:判断I/O 口所读取到的数据是否为控制状态寄存器数据,若为控制状态寄存器数据,则执行步骤S2029,否则执行步骤S2030 ;
52029:将控制状态寄存器中的指定位和虚拟子数据卡的中断标志清零,完成I/O 口写处理;
52030:不响应操作,完成I/O 口写处理。
[0014]所述的一种基于设备模拟的数据卡虚拟化实现方法,它还包括一个设备迁入步骤和设备迁出步骤,所述的设备迁入步骤包括以下步骤:
53011:读取数据,将DMA地址寄存器和控制状态寄存器中的数据进行恢复;
53012:读取数据,恢复虚拟子系统相关的通信会话上下文环境;
53013:完成设备迁入;
所述的设备迁出步骤包括以下步骤:
53021:保存DMA地址寄存器和控制状态寄存器中的数据信息;
53022:获取虚拟子系统相关的通信会话的上下文环境,并保存;
53023:完成设备迁出。
[0015]该方法可以使数据卡设备在虚拟机子模块中呈现出至少一个虚拟子数据卡,供虚拟机子模块使用。
【权利要求】
1.一种基于设备模拟的数据卡虚拟化实现方法,其特征在于:它包括一个设备初始化步骤和一个I/O 口读写处理步骤,所述的设备初始化步骤包括以下步骤:5101:分配模拟设备资源配置对象;5102:将虚拟子数据卡信息注册到虚拟机子模块;5103:根据初始化指定的数据卡类型生成相应的设备节点名;5104:对I/O 口读写操作处理函数进行注册;5105:虚拟子数据卡的I/O 口读写范围的申请;5106:结束初始化设置;所述的I/o 口读写处理步骤包括I/O 口读处理步骤和I/O 口写处理步骤,所述的I/O口读处理步骤包括以下步骤:52011:获取I/O 口读操作指令,对I/O 口所读取的数据进行判断;52012:判断I/O 口读取的数据是否为DMA传输地址寄存器数据,若为DMA传输地址寄存器数据,则执行步骤S2013,否则执行步骤S2014 ;52013:读取DMA传输地址寄存器内的数据,并返回DMA传输地址寄存器内的数据处理值,完成I/o 口数据读取 处理;52014:判断I/O 口读取的数据是否为控制状态寄存器数据,若为控制状态寄存器数据,则执行步骤S2015,否则执行步骤S2016 ;52015:读取控制状态寄存器内的数据,返回控制状态寄存器内的数据处理值,完成1/0口数据读取处理;52016:返回0,完成I/O 口数据读取处理;所述的I/O 口写处理步骤包括以下步骤:52021:获取I/O 口写操作指令,对I/O 口所读取的数据进行判断;52022:判断I/O 口所读取的数据是否为DMA地址标志寄存器数据,若为DMA地址标志寄存器数据,则执行步骤S2023,否则跳转至步骤S2026 ;52023:将读取到的DMA地址标志寄存器内的数据传输至真实数据卡设备;52024:读取真实数据卡设备中的数据,作为返回值写入虚拟机子模块中的DMA地址寄存器内;52025:完成I/O 口写处理步骤;52026:判断I/O 口所读取的数据是否为DMA传输地址寄存器数据,若为DMA传输地址寄存器数据,则执行步骤S2027,否则执行步骤S2028 ;52027:将读取到的数据写入指定的DMA传输地址寄存器,完成I/O 口写处理;52028:判断I/O 口所读取到的数据是否为控制状态寄存器数据,若为控制状态寄存器数据,则执行步骤S2029,否则执行步骤S2030 ;52029:将控制状态寄存器中的指定位和虚拟子数据卡的中断标志清零,完成I/O 口写处理;52030:不响应操作,完成I/O 口写处理。
2.根据权利要求1所述的一种基于设备模拟的数据卡虚拟化实现方法,其特征在于:它还包括一个设备迁入步骤和设备迁出步骤,所述的设备迁入步骤包括以下步骤:S3011:读取数据,将DMA地址寄存器和控制状态寄存器中的数据进行恢复;53012:读取数据,恢复虚拟子系统相关的通信会话上下文环境;53013:完成设备迁入;所述的设备迁出步骤包括以下步骤: 53021:保存DMA地址寄存器和控制状态寄存器中的数据信息;53022:获取虚拟子系统相关的通信会话的上下文环境,并保存;53023:完成设备迁出。
【文档编号】G06F9/455GK103645936SQ201310696743
【公开日】2014年3月19日 申请日期:2013年12月18日 优先权日:2013年12月18日
【发明者】王亚栋, 黄臻, 刘颖 申请人:四川卫士通信息安全平台技术有限公司