一种用于虚拟化环境下传输数据的方法与设备与流程

文档序号:12747965阅读:267来源:国知局
一种用于虚拟化环境下传输数据的方法与设备与流程

本申请涉及计算机领域,尤其涉及一种用于虚拟化环境下传输数据的技术。



背景技术:

在虚拟化环境中,一般通过网络在宿主机和虚拟机之间进行数据传输。但在网络出现问题时,现有技术中有两种技术方案可以实现宿主机和虚拟机之间的数据传输,一是通过串口传输的方式,二是通过热插拔磁盘的方式,而这两种方案都存在一些缺陷。

串口设备的传输速率通常较低,因而串口传输的方式无法满足快速传输数据的需求。热插拔磁盘的方式需要在宿主机中创建一块虚拟磁盘,先将该虚拟磁盘插到宿主机中,把待传输数据拷贝至该虚拟磁盘,然后把该虚拟磁盘从宿主机中拔出并插到虚拟机中,再将待传输数据从该虚拟磁盘拷贝至虚拟机中,后拔出该虚拟磁盘,如此才能完成一次从宿主机到虚拟机的数据传输。可以看到,热插拔磁盘的方式涉及多次设备的热插拔,且拷贝数据的次数较多,操作步骤过于繁琐,导致系统开销过大。



技术实现要素:

本申请要解决的技术问题是,在虚拟化环境下传输数据,如何提高传输速率,同时简化操作步骤以减少系统开销。

为解决上述技术问题,本申请提供了一种在客端设备端的用于虚拟环境下传输数据的方法,其中,所述方法包括:创建第一数据传输模块;根据所述第一数据传输模块分配一共享内存,且所述共享内存允许主端设备进行读写操作;通过所述第一数据传输模块与所述共享内存进行数据传输,其中,所述进行数据传输包括至少以下任一项:将第一待传输数据存储于所述共享内存中,获取所述主端设备存储在所述共享内存的第二待传输数据。

进一步地,将第一待传输数据存储于所述共享内存中包括:将所述第一 待传输数据读取至用户空间;将所述第一待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存。

进一步地,将所述第一待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存包括:基于所述共享内存的相关容量信息,将所述读取至所述用户空间的第一待传输数据分次拷贝至位于内核空间的所述共享内存;其中,在每次拷贝后,向所述主端设备发送第一数据传输消息;当获取所述主端设备所返回的第一数据读取消息后,进行下一次拷贝,直至传输完成。

进一步地,获取所述主端设备存储在所述共享内存的第二待传输数据包括:读取所述主端设备存储在所述共享内存的第二待传输数据;将所读取的第二待传输数据拷贝至用户空间;将所述拷贝至用户空间的第二待传输数据存储至存储介质。

进一步地,读取所述主端设备存储在所述共享内存的第二待传输数据包括:根据所述主端设备所发送的第二数据传输消息读取所述主端设备存储在所述共享内存的第二待传输数据;在读取完成后,向所述主端设备返回第二数据读取消息。

进一步地,所述方法还包括:在通过所述第一数据传输模块与所述共享内存进行数据传输之前,与所述主端设备进行传输事件通信,进行传输事件通信包括至少以下任一项:向所述主端设备发送关于所述第一待传输数据的第一数据信息;获取所述主端设备所发送的关于所述第二待传输数据的第二数据信息。

根据本申请的一个方面,本申请提供了一种在主端设备端的用于虚拟环境下传输数据的方法,其中,所述方法包括:创建第二数据传输模块;获取客端设备所分配的共享内存的访问权限,以使所述共享内存允许主端设备进行读写操作;通过所述第二数据传输模块与所述共享内存进行数据传输,其中,所述进行数据传输包括至少以下任一项:获取所述客端设备所存储在所述共享内存的第一待传输数据,将第二待传输数据存储于所述共享内存中。

进一步地,将第二待传输数据存储于所述共享内存中包括:将所述第二待传输数据读取至用户空间;将所述第二待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存。

进一步地,将所述第二待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存包括:基于所述共享内存的相关容量信息,将所述读取至所述用户空间的第二待传输数据分次拷贝至位于内核空间的所述共享内存;其中,在每次拷贝后,向所述客端设备发送第二数据传输消息;当获取所述客端设备所返回的第二数据读取消息后,进行下一次拷贝,直至传输完成。

进一步地,获取所述客端设备存储在所述共享内存的第一待传输数据包括:读取所述客端设备存储在所述共享内存的第一待传输数据;将所读取的第一待传输数据拷贝至用户空间;将所述拷贝至用户空间的第一待传输数据存储至存储介质。

进一步地,读取所述客端设备存储在所述共享内存的第一待传输数据包括:根据所述客端设备所发送的第一数据传输消息读取所述客端设备存储在所述共享内存的第一待传输数据;在读取完成后,向所述客端设备返回第一数据读取消息。

进一步地,所述方法还包括:在通过所述第二数据传输模块与所述共享内存进行数据传输之前,与所述客端设备进行传输事件通信,进行传输事件通信包括至少以下任一项:向所述客端设备发送关于所述第二待传输数据的第二数据信息;获取所述客端设备所发送的关于所述第一待传输数据的第一数据信息。

根据本申请的另一个方面,本申请提供了一种在虚拟环境下进行数据传输的设备,其中,所述设备包括:客端创建装置,用于创建第一数据传输模块;客端分配装置,用于根据所述第一数据传输模块分配一共享内存,且所述共享内存允许主端设备进行读写操作;客端数据传输装置,用于通过所述第一数据传输模块与所述共享内存进行数据传输,其中,所述客端数据传输装置包括至少以下任一项:客端数据存储单元,用于将所述第一待传输数据存储于所述共享内存中,客端数据获取单元,用于获取所述主端设备存储在所述共享内存的第二待传输数据。

进一步地,所述客端数据存储单元包括:用于将所述第一待传输数据读取至用户空间的子单元;用于将所述第一待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存的子单元。

进一步地,所述用于将所述第一待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存的子单元包括:用于基于所述共享内存的相关容量信息,将所述读取至所述用户空间的第一待传输数据分次拷贝至位于内核空间的所述共享内存的子单元;用于在每次拷贝后,向所述主端设备发送第一数据传输消息的子单元;用于当获取所述主端设备所返回的第一数据读取消息后进行下一次拷贝直至传输完成的子单元。

进一步地,所述客端数据获取单元包括:用于读取所述主端设备存储在所述共享内存的第二待传输数据的子单元;用于将所读取的第二待传输数据拷贝至用户空间的子单元;用于将所述拷贝至用户空间的第二待传输数据存储至存储介质的子单元。

进一步地,所述用于读取所述主端设备存储在所述共享内存的第二待传输数据的子单元包括:用于根据所述主端设备所发送的第二数据传输消息读取所述主端设备存储在所述共享内存的第二待传输数据的子单元;用于在读取完成后向所述主端设备返回第二数据读取消息的子单元。

进一步地,所述设备还包括:客端通信装置,用于在通过所述第一数据传输模块与所述共享内存进行数据传输之前,与所述主端设备进行传输事件通信,其中,所述客端通信装置包括至少以下任一项:客端信息发送单元,用于向所述主端设备发送关于所述第一待传输数据的第一数据信息;客端信息获取单元,用于获取所述主端设备所发送的关于所述第二待传输数据的第二数据信息。

根据本申请的另一个方面,本申请提供了一种在虚拟环境下进行数据传输的设备,其中,所述设备包括:主端创建装置,用于创建第二数据传输模块;主端分配装置,用于获取客端设备所分配的共享内存的访问权限,以使所述共享内存允许主端设备进行读写操作;主端数据传输装置,用于通过所述第二数据传输模块与所述共享内存进行数据传输,其中,所述主端数据传输装置包括至少以下任一项:主端数据获取单元,用于获取所述客端设备存储在所述共享内存的第一待传输数据,主端数据存储单元,用于将所述第二待传输数据存储于所述共享内存中。

进一步地,所述主端数据存储单元包括:用于将所述第二待传输数据读 取至用户空间的子单元;用于将所述第二待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存的子单元。

进一步地,所述用于将所述第二待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存的子单元包括:用于基于所述共享内存的相关容量信息,将所述读取至所述用户空间的第二待传输数据分次拷贝至位于内核空间的所述共享内存的子单元;用于在每次拷贝后,向所述客端设备发送第二数据传输消息的子单元;用于当获取所述客端设备所返回的第二数据读取消息后进行下一次拷贝直至传输完成的子单元。

进一步地,所述主端数据获取单元包括:用于读取所述客端设备存储在所述共享内存的第一待传输数据的子单元;用于将所读取的第一待传输数据拷贝至用户空间的子单元;用于将所述拷贝至用户空间的第一待传输数据存储至存储介质的子单元。

进一步地,所述用于读取所述客端设备存储在所述共享内存的第一待传输数据的子单元包括:用于根据所述客端设备所发送的第一数据传输消息读取所述客端设备存储在所述共享内存的第一待传输数据的子单元;用于在读取完成后,向所述客端设备返回第一数据读取消息的子单元。

进一步地,所述设备还包括:主端通信装置,用于在通过所述第二数据传输模块与所述共享内存进行数据传输之前,与所述客端设备进行传输事件通信,其中,所述主端通信装置包括至少以下任一项:主端信息发送单元,用于向所述客端设备发送关于所述第二待传输数据的第二数据信息;主端信息获取单元,用于获取所述客端设备所发送的关于所述第一待传输数据的第一数据信息。

与现有技术相比,本申请的一个实施例中,客端设备创建第一数据传输模块,主端设备创建第二数据传输模块,所述第一数据传输模块和所述第二数据传输模块提供了客端设备端的用户空间与主端设备端的用户空间之间的数据传输通道;所述客端设备根据所述第一数据传输模块分配一位于内核空间的共享内存,并允许所述主端设备对所述共享内存进行读写操作,所述主端设备获取所述共享内存的访问权限;所述客端设备和所述主端设备分别通过所述第一数据传输模块和所述第二数据传输模块与所 述共享内存进行数据传输,具体地,所述客端设备将所述第一待传输数据存储于所述共享内存中,所述主端设备获取所述客端设备存储在所述共享内存的第一待传输数据,所述主端设备将所述第二待传输数据存储于所述共享内存中,所述客端设备获取所述主端设备存储在所述共享内存的第二待传输数据。

如此,通过位于内核空间的共享内存作为中转站传输数据,与现有的串口传输方式相比,大大地提高数据传输速率,与现有的热插拔磁盘的方式相比,操作较为简洁,对系统资源的占用较少。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出根据本申请一个方面的一个实施例的一种在虚拟环境下进行数据传输的客端设备;

图2示出根据本申请一个方面的一个优选实施例的一种在虚拟环境下进行数据传输的客端设备的客端数据传输装置;

图3示出根据本申请一个方面的一个优选实施例的一种在虚拟环境下进行数据传输的客端设备;

图4示出根据本申请一个方面的一个实施例的一种在虚拟环境下进行数据传输的主端设备;

图5示出根据本申请一个方面的一个优选实施例的一种在虚拟环境下进行数据传输的主端设备的主端数据传输装置;

图6示出根据本申请一个方面的一个优选实施例的一种在虚拟环境下进行数据传输的主端设备;

图7示出根据本申请一个方面的一个实施例的一种在虚拟环境下进行数据传输的客端设备与主端设备配合的示意图;

图8示出根据本申请另一个方面的一个实施例的一种在客端设备端的用于虚拟环境下传输数据的方法流程图;

图9示出根据本申请另一个方面的一个实施例的一种在主端设备端的 用于虚拟环境下传输数据的方法流程图;

图10示出根据本申请另一个方面的一个实施例的一种用于虚拟环境下传输数据的方法流程图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

图1示出根据本申请一个方面的一个实施例的一种在虚拟环境下进行数据传输的客端设备1,其中,客端设备1包括客端创建装置11、客端分配装置12和客端数据传输装置13。

具体地,所述客端创建装置11创建第一数据传输模块;所述客端分配装置12根据所述第一数据传输模块分配一共享内存,且所述共享内存允许主端设备进行读写操作;所述客端数据传输装置13通过所述第一数据传输模块与所述共享内存进行数据传输。

在此,所述客端设备1包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述客端设备1也可以是由一系列按照特定顺序组织的计算机数据和指令的集合。此外,所述客端设备也可以是由一系列按照特定顺序组织的计算机数据和指令的集合与能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备的结合。本领域技术人员应能理解所述客端设备1仅为举例,其他现有的或今后可能出现的客端设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

上述各装置之间是持续不断工作的,在此,本领域技术人员应理解“持续”是指上述各装置分别实时地或者按照设定的或实时调整的工作模式要求,例如所述客端创建装置11创建第一数据传输模块,所述客端创建装置11所创建的第一数据传输模块持续供所述客端分配装置12和所述客端数据传输装置13使用,所述客端分配装置12持续根据所述第一数据传输模块分 配一共享内存,且所述共享内存允许主端设备进行读写操作,所述客端数据传输装置13持续通过所述第一数据传输模块与所述共享内存进行数据传输,直至所述客端设备1停止工作。

在具体的实施例中,虚拟化环境下,客端设备可以是客户虚拟机(guest),主端设备可以是特权虚拟机(host),通过特权虚拟机可以实现对一个或多个非特权级的客户虚拟机的管理。

所述客端创建装置11创建第一数据传输模块。

其中,所述第一数据传输模块包括客端虚拟设备和客端驱动。所述客端创建装置11创建第一数据传输模块包括:创建客端虚拟设备以及加载所述客端虚拟设备的客端驱动。

进一步的,所述客端创建装置11根据host的管理程序(hypervisor)的类型,通过修改相应逻辑增加客端虚拟设备,所述客端虚拟设备用于内核空间与用户空间之间以及guest与host的内核空间之间的通信。具体地,在guest的创建阶段,所述客端创建装置11可以直接通过创建的方法增加客端虚拟设备,若guest已存在,则所述客端创建装置11可以采用热插拔方法增加客端虚拟设备。

在此,客端设备的操作系统(例如为Linux操作系统)的虚拟内存划分为内核空间与用户空间,运行在内核空间的核心软件拥有访问硬件设备的所有权限,具有较高的特权级别;运行在用户空间的普通应用程序只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,也不能直接访问内核空间和硬件设备。

因此,所创建的第一数据传输模块提供了内核空间与用户空间之间的数据传输通道,有利于后续数据传输的顺利进行。

所述客端分配装置12根据所述第一数据传输模块分配一共享内存,且所述共享内存允许主端设备进行读写操作。

在具体的实施例中,所述第一数据传输模块中的客端驱动检测到客端虚拟设备时分配一共享内存,所述共享内存位于内核空间,并允许主端设备的第二数据传输模块中的主端驱动访问该共享内存。具体地,所述第一数据传输模块中的客端驱动检测到所述客端虚拟设备时,分配用于数据传 输的传输页面,分配用于控制数据传输的控制页面,所述传输页面与所述控制页面均为所述共享内存页面。

在此,通过位于内核空间的共享内存作为中转站传输数据,与现有的串口传输方式相比,大大地提高数据传输速率,与现有的热插拔磁盘的方式相比,操作较为简洁,对系统资源的占用较少。

所述客端数据传输装置13通过所述第一数据传输模块与所述共享内存进行数据传输,所述客端数据传输装置13包括客端数据存储单元131和客端数据获取单元132中的至少任一项,其中,所述客端数据存储单元131将所述第一待传输数据存储于所述共享内存中,所述客端数据获取单元132获取所述主端设备存储在所述共享内存的第二待传输数据。

在此,所述客端数据存储单元131用于向所述主端设备发送第一待传输数据,所述客端数据获取单元132用于接收所述主端设备所发送的第二待传输数据。所述客端数据传输装置13可以仅包括所述客端数据存储单元131,即向所述主端设备发送第一待传输数据;所述客端数据传输装置13也可以仅包括所述客端数据获取单元132,即接收所述主端设备所发送的第二待传输数据;所述客端数据传输装置13还可以包括所述客端数据存储单元131和所述客端数据获取单元132,即向所述主端设备发送第一待传输数据与接收所述主端设备所发送的第二待传输数据同时进行。

具体地,所述客端数据存储单元131可以包括:用于将所述第一待传输数据读取至用户空间的子单元;用于将所述第一待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存的子单元。

在此,所述客端数据存储单元131将所述第一待传输数据从客端设备1的存储介质读取至内存中客端设备端的用户空间,而共享内存位于内存的内核空间,故将所述第一待传输数据从所述用户空间拷贝至所述共享内存。

具体地,所述用于将所述第一待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存的子单元包括:用于基于所述共享内存的相关容量信息,将所述读取至所述用户空间的第一待传输数据分次拷贝至位于内核空间的所述共享内存的子单元;用于在每次拷贝后,向所述主端设备发送第一数据传输消息的子单元;用于当获取所述主端设备所返回的第一数据读取消息 后进行下一次拷贝直至传输完成的子单元。

在此,所述共享内存的相关容量信息可以包括但不限于所述用于数据传输的传输页面的大小,所述传输页面的大小SIZET=子页面个数TP×子页面大小PAGESIZE。优选地,在将第一待传输数据从用户空间拷贝至所述共享内存时,以所述传输页面为单位分次进行拷贝。

假设第一待传输数据的大小为N,客端数据传输装置13已发送的数据大小为ALREADY,其初始值为0,传输页面SEND1的空闲子页面个数为FREE,子页面编号A的初始值为0,将所述第一待传输数据从客端数据传输装置13拷贝至所述共享内存的流程如下:

第一步,根据所述第一待传输数据未传输部分的大小LEFT=N–ALREADY,判断LEFT是否为0,若是,则所述第一待传输数据在客端设备端的传输已经结束,若否,则通过后续步骤判断能否将数据拷贝至所述共享内存;

第二步,判断所述第一待传输数据未传输部分的大小LEFT是否大于等于传输页面SEND1的大小SIZET,若是,则此次待拷贝数据的大小INPUT=SIZET,若否,则此次待拷贝数据的大小INPUT=LEFT,即每次最多拷贝SIZET大小的数据;

第三步,判断待拷贝数据大小INPUT是否大于等于子页面大小PAGESIZE,若是,则转第四步,若否,则转第五步;

第四步,将PAGESIZE大小的数据拷贝至传输页面SEND1中,将该子页面在所述共享内存中的地址ADDR=0,该子页面的长度LEN_SIZE=PAGESIZE及其子页面编号A放入控制页面中,然后执行INPUT-=PAGESIZE,A=(++A)>=TP?0:A,即待拷贝数据等于减去子页面大小后的新值,页面编号A加1后判断是否达到传输页面SEND1的最大子页面数TP,若A达到TP则给A赋值0,然后转第三步;

第五步,将INPUT大小的数据拷贝至传输页面SEND1中,将该子页面在所述共享内存中的地址ADDR=0,该子页面的长度LEN_SIZE=INPUT及其子页面编号A放入控制页面中,然后执行A=(++A)>=TP?0:A,即页面编号A加1后判断是否达到传输页面SEND1的最大子页面数TP, 若A达到TP则给A赋值0,然后转第六步;

第六步,执行ALREADY+=此次拷贝至所述共享内存的数据大小,FREE-=此次使用的子页面个数,即客端数据传输装置13已发送的数据大小ALREADY等于加上此次拷贝至所述共享内存的数据大小后的新值,传输页面SEND1的空闲子页面个数FREE等于减去此次使用的子页面个数后的新值;然后向所述主端设备发送第一数据传输消息,以通知所述主端设备读取此次拷贝至所述共享内存的数据,在获取所述主端设备所返回的第一数据读取消息后,执行FREE=TP,然后转第一步。

本领域技术人员应能理解上述将第一待传输数据从用户空间分次拷贝至共享内存的方法仅为举例,其他现有的或今后可能出现的将第一待传输数据从用户空间拷贝至共享内存的方法如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

具体地,所述客端数据获取单元132包括:用于读取所述主端设备存储在所述共享内存的第二待传输数据的子单元;用于将所读取的第二待传输数据拷贝至用户空间的子单元;用于将所述拷贝至用户空间的第二待传输数据存储至存储介质的子单元。

在此,所述客端数据获取单元132将所述主端设备所发送的第二待传输数据从所述共享内存拷贝至用户空间,再从用户空间拷贝至存储介质。所述存储介质指的是非易失性存储介质,例如且不限于硬盘、光盘、U盘、SD卡等。

具体地,所述用于读取所述主端设备存储在所述共享内存的第二待传输数据的子单元包括:用于根据所述主端设备所发送的第二数据传输消息读取所述主端设备存储在所述共享内存的第二待传输数据的子单元;用于在读取完成后向所述主端设备返回第二数据读取消息的子单元。

例如,假设第二待传输数据的大小为N,客端数据传输装置13已接收的数据大小为GET,其初始值为0,将所述第二待传输数据从所述共享内存拷贝至客端数据传输装置13的流程如下:

第一步,判断等式GET==N是否为真,即判断客端数据传输装置13已接收的数据大小GET是否等于第二待传输数据的大小N,若是,则客 端设备1已完成对所述第二待传输数据的读取,并向所述主端设备返回第二数据读取消息,若否,则转第二步;

第二步,等待所述主端设备所发送的第二数据传输消息,当接收到所述主端设备所发送的第二数据传输消息后,根据控制页面中的关于传输页面RECEIVE1长度LEN_SLICE、传输页面RECEIVE1子页面编号及传输页面RECEIVE1在共享内存中的地址ADDR等信息,依次处理并将传输页面RECEIVE1中的数据拷贝至用户空间,所述客端数据获取单元132将所述拷贝至用户空间的第二待传输数据存储至存储介质,然后执行GET+=此次从所述共享内存中获取的数据大小,即客端数据传输装置13已接收的数据大小GET等于加上此次从所述共享内存中获取的数据大小后的新值,向所述主端设备返回第二数据读取消息,然后转第一步。

本领域技术人员应能理解上述将第二待传输数据从共享内存拷贝至用户空间的方法仅为举例,其他现有的或今后可能出现的将第二待传输数据从共享内存拷贝至用户空间的方法如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

图3示出根据本申请一个方面的一个优选实施例的一种在虚拟环境下进行数据传输的客端设备1,其中,所述客端设备1包括客端创建装置11’、客端分配装置12’、客端数据传输装置13’和客端通信装置14’。

在此,所述客端创建装置11’、客端分配装置12’、客端数据传输装置13’与图1中客端创建装置11、客端分配装置12、客端数据传输装置13的内容相同或基本相同,为简明起见,不再赘述。

所述客端通信装置14’在通过所述第一数据传输模块与所述共享内存进行数据传输之前,与所述主端设备进行传输事件通信。具体地,所述客端通信装置包括客端信息发送单元(图中未示出)和客端信息获取单元(图中未示出)中的至少任一项,其中,所述客端信息发送单元向所述主端设备发送关于所述第一待传输数据的第一数据信息,所述客端信息获取单元获取所述主端设备所发送的关于所述第二待传输数据的第二数据信息。

在此,所述第一待传输数据传输到所述主端设备端后,以文件形式存储于存储介质中,第一数据信息包括该文件的存储路径、该文件的名称及 该文件的长度。所述第二待传输数据传输到所述客端设备端后,以文件形式存储于存储介质中,第二数据信息包括该文件的存储路径、该文件的名称及该文件的长度。通过所述客端通信装置在数据传输开始之前,与所述主端设备进行传输事件通信,可以避免一些类似于重复传输的低级错误,有效提高数据传输成功率。

例如,假设在Xen虚拟化环境中,客端设备1与所述主端设备进行传输事件通信可以是:将传输命令放入xenstore(Xen虚拟环境中的一存储设备,xenstore是基于事件通道完成的)中,该传输命令包括第一数据信息,并通知所述主端设备存在新的命令。所述主端设备从xenstore中获取传输命令,提取第一数据信息,先查看所述第一数据信息中的文件的存储路径是否已经存在,若是,则返回错误,并通知客端设备1相应错误信息,然后结束传输;若否,则根据所述第一数据信息中的文件的存储路径创建文件,并通知客端设备1已经接受传输命令且处理正常。

图4示出根据本申请一个方面的一个实施例的一种在虚拟环境下进行数据传输的主端设备2,其中,主端设备2包括主端创建装置25、主端分配装置26和主端数据传输装置27。

具体地,所述主端创建装置25创建第二数据传输模块;所述主端分配装置26获取客端设备所分配的共享内存的访问权限,以使所述共享内存允许主端设备进行读写操作;所述主端数据传输装置27通过所述第二数据传输模块与所述共享内存进行数据传输。

在此,所述主端设备2包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述主端设备2也可以是由一系列按照特定顺序组织的计算机数据和指令的集合。此外,所述主端设备2也可以是由一系列按照特定顺序组织的计算机数据和指令的集合与能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备的结合。本领域技术人员应能理解所述主端设备2仅为举例,其他现有的或今后可能出现的主端设备2如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包 含于此。

上述各装置之间是持续不断工作的,在此,本领域技术人员应理解“持续”是指上述各装置分别实时地或者按照设定的或实时调整的工作模式要求,例如所述主端创建装置25创建第二数据传输模块,所述主端创建装置25所创建的第二数据传输模块持续供所述主端分配装置26和所述主端数据传输装置27使用,所述主端分配装置26持续获取客端设备所分配的共享内存的访问权限,以使所述共享内存允许主端设备进行读写操作,所述主端数据传输装置27持续通过所述第二数据传输模块与所述共享内存进行数据传输,直至所述主端设备2停止工作。

在具体的实施例中,虚拟化环境下,客端设备可以是客户虚拟机(guest),主端设备可以是特权虚拟机(host),通过特权虚拟机可以实现对一个或多个非特权级的客户虚拟机的管理。

进一步地,所述主端创建装置25创建第二数据传输模块。

其中,所述第二数据传输模块包括主端虚拟设备和主端驱动。所述主端创建装置25创建第二数据传输模块包括:创建主端虚拟设备以及加载所述主端虚拟设备的主端驱动。

进一步的,所述主端创建装置25根据host的管理程序(hypervisor)的类型,通过修改相应逻辑增加主端虚拟设备,所述主端虚拟设备用于内核空间与用户空间之间以及host与guest的内核空间之间的通信。

在此,主端设备的操作系统(例如为Linux操作系统)的虚拟内存划分为内核空间与用户空间,运行在内核空间的核心软件拥有访问硬件设备的所有权限,具有较高的特权级别;运行在用户空间的普通应用程序只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,也不能直接访问内核空间和硬件设备。

因此,所创建的第二数据传输模块提供了内核空间与用户空间之间的数据传输通道,有利于后续数据传输的顺利进行。

所述主端分配装置26获取客端设备所分配的共享内存的访问权限,以使所述共享内存允许主端设备进行读写操作。

在具体的实施例中,客端设备的第一数据传输模块中的客端驱动检测 到客端虚拟设备时分配一共享内存,所述共享内存位于内核空间,并允许所述第二数据传输模块中的主端驱动访问该共享内存。具体地,所述第一数据传输模块中的客端驱动检测到所述第一数据传输模块中的客端虚拟设备时,分配用于数据传输的传输页面,分配用于控制数据传输的控制页面,所述传输页面与所述控制页面均为所述共享内存页面。

在此,通过位于内核空间的共享内存作为中转站传输数据,与现有的串口传输方式相比,大大地提高数据传输速率,与现有的热插拔磁盘的方式相比,操作较为简洁,对系统资源的占用较少。

所述主端数据传输装置27通过所述第二数据传输模块与所述共享内存进行数据传输,所述主端数据传输装置27包括主端数据存储单元271和主端数据获取单元272中的至少任一项,其中,所述主端数据存储单元271获取所述客端设备存储在所述共享内存的第一待传输数据,所述主端数据获取单元272将所述第二待传输数据存储于所述共享内存中。

在此,所述主端数据存储单元271用于接收所述客端设备所发送的第一待传输数据,所述主端数据获取单元272用于向所述客端设备发送第二待传输数据。所述主端数据传输装置27可以仅包括所述主端数据存储单元271,即接收所述客端设备所发送的第一待传输数;所述主端数据传输装置27也可以仅包括所述主端数据获取单元272,即向所述客端设备发送第二待传输数据;所述主端数据传输装置27还可以包括所述主端数据存储单元271和所述主端数据获取单元272,即接收所述客端设备所发送的第一待传输数据与向所述客端设备发送第二待传输数据同时进行。

具体地,所述主端数据存储单元271可以包括:用于将所述第二待传输数据读取至用户空间的子单元;用于将所述第二待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存的子单元。

在此,所述主端数据存储单元271将所述第二待传输数据从主端设备2的存储介质读取至内存中主端设备端的用户空间,而共享内存位于内存的内核空间,故将所述第二待传输数据从所述用户空间拷贝至所述共享内存。

具体地,所述用于将所述第二待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存的子单元包括:用于基于所述共享内存的相关容量信 息,将所述读取至所述用户空间的第二待传输数据分次拷贝至位于内核空间的所述共享内存的子单元;用于在每次拷贝后,向所述客端设备发送第二数据传输消息的子单元;用于当获取所述客端设备所返回的第二数据读取消息后进行下一次拷贝直至传输完成的子单元。

在此,所述共享内存的相关容量信息可以包括但不限于所述用于数据传输的传输页面的大小,所述传输页面的大小SIZET=子页面个数TP×子页面大小PAGESIZE。优选地,在将第二待传输数据从用户空间拷贝至所述共享内存时,以所述传输页面为单位分次进行拷贝。

假设第二待传输数据的大小为N,主端数据传输装置27已发送的数据大小为ALREADY,其初始值为0,传输页面SEND2的空闲子页面个数为FREE,子页面编号A的初始值为0,将所述第二待传输数据从主端数据传输装置27拷贝至所述共享内存的流程如下:

第一步,根据所述第二待传输数据未传输部分的大小LEFT=N–ALREADY,判断LEFT是否为0,若是,则所述第二待传输数据在主端设备端的传输已经结束,若否,则通过后续步骤判断能否将数据拷贝至所述共享内存;

第二步,判断所述第二待传输数据未传输部分的大小LEFT是否大于等于传输页面SEND2的大小SIZET,若是,则此次待拷贝数据的大小INPUT=SIZET,若否,则此次待拷贝数据的大小INPUT=LEFT,即每次最多拷贝SIZET大小的数据;

第三步,判断待拷贝数据大小INPUT是否大于等于子页面大小PAGESIZE,若是,则转第四步,若否,则转第五步;

第四步,将PAGESIZE大小的数据拷贝至传输页面SEND2中,将该子页面在所述共享内存中的地址ADDR=0,该子页面的长度LEN_SIZE=PAGESIZE及其子页面编号A放入控制页面中,然后执行INPUT-=PAGESIZE,A=(++A)>=TP?0:A,即待拷贝数据等于减去子页面大小后的新值,页面编号A加1后判断是否达到传输页面SEND2的最大子页面数TP,若A达到TP则给A赋值0,然后转第三步;

第五步,将INPUT大小的数据拷贝至传输页面SEND2中,将该子页 面在所述共享内存中的地址ADDR=0,该子页面的长度LEN_SIZE=INPUT及其子页面编号A放入控制页面中,然后执行A=(++A)>=TP?0:A,即页面编号A加1后判断是否达到传输页面SEND2的最大子页面数TP,若A达到TP则给A赋值0,然后转第六步;

第六步,执行ALREADY+=此次拷贝至所述共享内存的数据大小,FREE-=此次使用的子页面个数,即主端数据传输装置27已发送的数据大小ALREADY等于加上此次拷贝至所述共享内存的数据大小后的新值,传输页面SEND2的空闲子页面个数FREE等于减去此次使用的子页面个数后的新值;然后向所述客端设备发送第二数据传输消息,以通知所述客端设备读取此次拷贝至所述共享内存的数据,在获取所述客端设备所返回的第二数据读取消息后,执行FREE=TP,然后转第一步。

本领域技术人员应能理解上述将第二待传输数据从用户空间分次拷贝至共享内存的方法仅为举例,其他现有的或今后可能出现的将第二待传输数据从用户空间拷贝至共享内存的方法如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

具体地,所述主端数据存储单元271包括:用于读取所述客端设备存储在所述共享内存的第一待传输数据的子单元;用于将所读取的第一待传输数据拷贝至用户空间的子单元;用于将所述拷贝至用户空间的第一待传输数据存储至存储介质的子单元。

在此,所述主端数据存储单元271将所述客端设备所发送的第一待传输数据从所述共享内存拷贝至用户空间,再从用户空间拷贝至存储介质。所述存储介质指的是非易失性存储介质,例如且不限于硬盘、光盘、U盘、SD卡等。

具体地,所述用于读取所述客端设备存储在所述共享内存的第一待传输数据的子单元包括:用于根据所述客端设备所发送的第一数据传输消息读取所述客端设备存储在所述共享内存的第一待传输数据的子单元;用于在读取完成后向所述客端设备返回第一数据读取消息的子单元。

例如,假设第一待传输数据的大小为N,主端数据传输装置27已接收的数据大小为GET,其初始值为0,将所述第一待传输数据从所述共享 内存拷贝至主端数据传输装置27的流程如下:

第一步,判断等式GET==N是否为真,即判断主端数据传输装置27已接收的数据大小GET是否等于第一待传输数据的大小N,若是,则主端设备2已完成对所述第一待传输数据的读取,并向所述客端设备返回第一数据读取消息,若否,则转第二步;

第二步,等待所述客端设备所发送的第一数据传输消息,当接收到所述客端设备所发送的第一数据传输消息后,根据控制页面中的关于传输页面RECEIVE2长度LEN_SLICE、传输页面RECEIVE2子页面编号及传输页面RECEIVE2在共享内存中的地址ADDR等信息,依次处理并将传输页面RECEIVE2中的数据拷贝至用户空间,将所述拷贝至用户空间的第一待传输数据存储至存储介质,然后执行GET+=此次从所述共享内存中获取的数据大小,即主端数据传输装置27已接收的数据大小GET等于加上此次从所述共享内存中获取的数据大小后的新值,向所述客端设备返回第一数据读取消息,然后转第一步。

本领域技术人员应能理解上述将第一待传输数据从共享内存拷贝至用户空间的方法仅为举例,其他现有的或今后可能出现的将第一待传输数据从共享内存拷贝至用户空间的方法如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

图6示出根据本申请一个方面的一个优选实施例的一种在虚拟环境下进行数据传输的主端设备2,其中,所述主端设备2包括主端创建装置25’、主端分配装置26’、主端数据传输装置27’和主端通信装置28’。

在此,所述主端创建装置25’、主端分配装置26’、主端数据传输装置27’与图4中主端创建装置25、主端分配装置26、主端数据传输装置27的内容相同或基本相同,为简明起见,不再赘述。

所述主端通信装置28’在通过所述第二数据传输模块与所述共享内存进行数据传输之前,与所述客端设备进行传输事件通信。具体地,所述主端通信装置包括主端信息发送单元(图中未示出)和主端信息获取单元(图中未示出)中的至少任一项,其中,所述主端信息发送单元向所述客端设备发送关于所述第二待传输数据的第二数据信息,所述主端信息获取单元获取所述 客端设备所发送的关于所述第一待传输数据的第一数据信息。

在此,所述第二待传输数据传输到所述客端设备端后,以文件形式存储于存储介质中,第二数据信息包括该文件的存储路径、该文件的名称及该文件的长度。所述第一待传输数据传输到所述主端设备端后,以文件形式存储于存储介质中,第一数据信息包括该文件的存储路径、该文件的名称及该文件的长度。通过所述主端通信装置在数据传输开始之前,与所述客端设备进行传输事件通信,可以避免一些类似于重复传输的低级错误,有效提高数据传输成功率。

例如,假设在Xen虚拟化环境中,主端设备2与所述客端设备进行传输事件通信可以是:将传输命令放入xenstore(Xen虚拟环境中的一存储设备,xenstore是基于事件通道完成的)中,该传输命令包括第二数据信息,并通知所述客端设备存在新的命令。所述客端设备从xenstore中获取传输命令,提取第二数据信息,先查看所述第二数据信息中的文件的存储路径是否已经存在,若是,则返回错误,并通知主端设备2相应错误信息,然后结束传输;若否,则根据所述第二数据信息中的文件的存储路径创建文件,并通知主端设备2已经接受传输命令且处理正常。

图7示出根据本申请一个方面的一个实施例的一种在虚拟环境下进行数据传输的客端设备1与主端设备2配合的示意图。所述客端设备1包括客端创建装置11”、客端分配装置12”和客端数据传输装置13”,所述主端设备2包括主端创建装置25”、主端分配装置26”和主端数据传输装置27”。客端设备1的客端创建装置11”创建第一数据传输模块;主端设备2的主端创建装置25”创建第二数据传输模块;客端设备1的客端分配装置12”根据所述第一数据传输模块分配一共享内存,且所述共享内存允许主端设备2进行读写操作;主端设备2的主端分配装置26”获取客端设备1所分配的共享内存的访问权限,以使所述共享内存允许主端设备2进行读写操作;客端设备1的客端数据传输装置13”通过所述第一数据传输模块与所述共享内存进行数据传输,所述客端数据传输装置13”包括客端数据存储单元和客端数据获取单元中的至少任一项,其中,所述客端数据存储单元将所述第一待传输数据存储于所述共享内存中,所述客端数据获取单 元获取主端设备2存储在所述共享内存的第二待传输数据;主端设备2的主端数据传输装置27”通过所述第二数据传输模块与所述共享内存进行数据传输,所述主端数据传输装置27”包括主端数据存储单元和主端数据获取单元中的至少任一项,其中,所述主端数据存储单元获取客端设备1存储在所述共享内存的第一待传输数据,所述主端数据获取单元将所述第二待传输数据存储于所述共享内存中。在此,客端设备1的客端创建装置11”、客端分配装置12”、客端数据传输装置13”与图1中客端设备1的客端创建装置11、客端分配装置12、客端数据传输装置13的内容相同或基本相同,并且主端设备2的主端创建装置25”、主端分配装置26”、主端数据传输装置27”与图4中主端设备2的主端创建装置25、主端分配装置26、主端数据传输装置27的内容相同或基本相同,为简明起见,故在此不再赘述,并以引用的方式包含于此。

图8示出根据本申请另一个方面的一个实施例的一种在客端设备端的用于虚拟环境下传输数据的方法流程图。

该方法包括步骤S81、步骤S82和步骤S83。具体地,在步骤S81中,客端设备1创建第一数据传输模块;在步骤S82中,客端设备1根据所述第一数据传输模块分配一共享内存,且所述共享内存允许主端设备进行读写操作;在步骤S83中,客端设备1通过所述第一数据传输模块与所述共享内存进行数据传输。

在此,所述客端设备1包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述客端设备1也可以是由一系列按照特定顺序组织的计算机数据和指令的集合。此外,所述客端设备也可以是由一系列按照特定顺序组织的计算机数据和指令的集合与能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备的结合。本领域技术人员应能理解所述客端设备1仅为举例,其他现有的或今后可能出现的客端设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

客端设备1的各个步骤之间是持续不断工作的。具体地,在步骤S81中,客端设备1创建第一数据传输模块,所述步骤S81中客端设备1所创建的第一数据传输模块持续供所述步骤S82和所述步骤S83使用,在步骤S82中,客端设备1持续根据所述第一数据传输模块分配一共享内存,且所述共享内存允许主端设备进行读写操作,在步骤S83中,客端设备1持续通过所述第一数据传输模块与所述共享内存进行数据传输,直至所述客端设备1停止工作。

在具体的实施例中,虚拟化环境下,客端设备可以是客户虚拟机(guest),主端设备可以是特权虚拟机(host),通过特权虚拟机可以实现对一个或多个非特权级的客户虚拟机的管理。

在步骤S81中,客端设备1创建第一数据传输模块。

其中,所述第一数据传输模块包括客端虚拟设备和客端驱动。客端设备1创建第一数据传输模块包括:创建客端虚拟设备以及加载所述客端虚拟设备的客端驱动。

进一步的,客端设备1根据host的管理程序(hypervisor)的类型,通过修改相应逻辑增加客端虚拟设备,所述客端虚拟设备用于内核空间与用户空间之间以及guest与host的内核空间之间的通信。具体地,在guest的创建阶段,客端设备1可以直接通过创建的方法增加客端虚拟设备,若guest已存在,则客端设备1可以采用热插拔方法增加客端虚拟设备。

在此,客端设备的操作系统(例如为Linux操作系统)的虚拟内存划分为内核空间与用户空间,运行在内核空间的核心软件拥有访问硬件设备的所有权限,具有较高的特权级别;运行在用户空间的普通应用程序只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,也不能直接访问内核空间和硬件设备。

因此,所创建的第一数据传输模块提供了内核空间与用户空间之间的数据传输通道,有利于后续数据传输的顺利进行。

在步骤S82中,客端设备1根据所述第一数据传输模块分配一共享内存,且所述共享内存允许主端设备进行读写操作。

在具体的实施例中,所述第一数据传输模块中的客端驱动检测到客端 虚拟设备时分配一共享内存,所述共享内存位于内核空间,并允许主端设备的第二数据传输模块中的主端驱动访问该共享内存。具体地,所述第一数据传输模块中的客端驱动检测到所述客端虚拟设备时,分配用于数据传输的传输页面,分配用于控制数据传输的控制页面,所述传输页面与所述控制页面均为所述共享内存页面。

在此,通过位于内核空间的共享内存作为中转站传输数据,与现有的串口传输方式相比,大大地提高数据传输速率,与现有的热插拔磁盘的方式相比,操作较为简洁,对系统资源的占用较少。

在步骤S83中,客端设备1通过所述第一数据传输模块与所述共享内存进行数据传输。所述步骤S83包括步骤S831(图中未示出)和步骤S832(图中未示出)中的至少任一项,其中,在步骤S831中,客端设备1将第一待传输数据存储于所述共享内存中,在步骤S832中,客端设备1获取所述主端设备存储在所述共享内存的第二待传输数据。

在此,步骤S831中客端设备1用于向所述主端设备发送第一待传输数据,步骤S832中客端设备1用于接收所述主端设备所发送的第二待传输数据。所述步骤S83可以仅包括所述步骤S831,即向所述主端设备发送第一待传输数据;所述步骤S83也可以仅包括所述步骤S832,即接收所述主端设备所发送的第二待传输数据;所述步骤S83还可以包括所述步骤S831和所述步骤S832,即向所述主端设备发送第一待传输数据与接收所述主端设备所发送的第二待传输数据同时进行。

具体地,在步骤S831中,客端设备1将所述第一待传输数据读取至用户空间,将所述第一待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存。

在此,客端设备1将所述第一待传输数据从客端设备1的存储介质读取至内存中客端设备端的用户空间,而共享内存位于内存的内核空间,故将所述第一待传输数据从所述用户空间拷贝至所述共享内存。

具体地,在步骤S831中,客端设备1基于所述共享内存的相关容量信息,将所述读取至所述用户空间的第一待传输数据分次拷贝至位于内核空间的所述共享内存;在每次拷贝后,向所述主端设备发送第一数据传输消 息;当获取所述主端设备所返回的第一数据读取消息后,进行下一次拷贝,直至传输完成。

在此,所述共享内存的相关容量信息可以包括但不限于所述用于数据传输的传输页面的大小,所述传输页面的大小SIZET=子页面个数TP×子页面大小PAGESIZE。优选地,在将第一待传输数据从用户空间拷贝至所述共享内存时,以所述传输页面为单位分次进行拷贝。

假设第一待传输数据的大小为N,客端设备1已发送的数据大小为ALREADY,其初始值为0,传输页面SEND1的空闲子页面个数为FREE,子页面编号A的初始值为0,将所述第一待传输数据从客端设备1拷贝至所述共享内存的流程如下:

第一步,根据所述第一待传输数据未传输部分的大小LEFT=N–ALREADY,判断LEFT是否为0,若是,则所述第一待传输数据在客端设备端的传输已经结束,若否,则通过后续步骤判断能否将数据拷贝至所述共享内存;

第二步,判断所述第一待传输数据未传输部分的大小LEFT是否大于等于传输页面SEND1的大小SIZET,若是,则此次待拷贝数据的大小INPUT=SIZET,若否,则此次待拷贝数据的大小INPUT=LEFT,即每次最多拷贝SIZET大小的数据;

第三步,判断待拷贝数据大小INPUT是否大于等于子页面大小PAGESIZE,若是,则转第四步,若否,则转第五步;

第四步,将PAGESIZE大小的数据拷贝至传输页面SEND1中,将该子页面在所述共享内存中的地址ADDR=0,该子页面的长度LEN_SIZE=PAGESIZE及其子页面编号A放入控制页面中,然后执行INPUT-=PAGESIZE,A=(++A)>=TP?0:A,即待拷贝数据等于减去子页面大小后的新值,页面编号A加1后判断是否达到传输页面SEND1的最大子页面数TP,若A达到TP则给A赋值0,然后转第三步;

第五步,将INPUT大小的数据拷贝至传输页面SEND1中,将该子页面在所述共享内存中的地址ADDR=0,该子页面的长度LEN_SIZE=INPUT及其子页面编号A放入控制页面中,然后执行A=(++A)>=TP?0:A, 即页面编号A加1后判断是否达到传输页面SEND1的最大子页面数TP,若A达到TP则给A赋值0,然后转第六步;

第六步,执行ALREADY+=此次拷贝至所述共享内存的数据大小,FREE-=此次使用的子页面个数,即客端设备1已发送的数据大小ALREADY等于加上此次拷贝至所述共享内存的数据大小后的新值,传输页面SEND1的空闲子页面个数FREE等于减去此次使用的子页面个数后的新值;然后客端设备1向所述主端设备发送第一数据传输消息,以通知所述主端设备读取此次拷贝至所述共享内存的数据,客端设备1获取所述主端设备所返回的第一数据读取消息后,执行FREE=TP,然后转第一步。

本领域技术人员应能理解上述将第一待传输数据从用户空间分次拷贝至共享内存的方法仅为举例,其他现有的或今后可能出现的将第一待传输数据从用户空间拷贝至共享内存的方法如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

具体地,在步骤S832中,客端设备1读取所述主端设备存储在所述共享内存的第二待传输数据,将所读取的第二待传输数据拷贝至用户空间,将所述拷贝至用户空间的第二待传输数据存储至存储介质。

在此,客端设备1将所述主端设备所发送的第二待传输数据从所述共享内存拷贝至用户空间,再从用户空间拷贝至存储介质。所述存储介质指的是非易失性存储介质,例如且不限于硬盘、光盘、U盘、SD卡等。

具体地,在步骤S832中,客端设备1根据所述主端设备所发送的第二数据传输消息读取所述主端设备存储在所述共享内存的第二待传输数据,在读取完成后,向所述主端设备返回第二数据读取消息。

例如,假设第二待传输数据的大小为N,客端设备1已接收的数据大小为GET,其初始值为0,将所述第二待传输数据从所述共享内存拷贝至客端设备1的流程如下:

第一步,判断等式GET==N是否为真,即判断客端设备1已接收的数据大小GET是否等于第二待传输数据的大小N,若是,则客端设备1已完成对所述第二待传输数据的读取,并向所述主端设备返回第二数据读取消息,若否,则转第二步;

第二步,等待所述主端设备所发送的第二数据传输消息,当接收到所述主端设备所发送的第二数据传输消息后,根据控制页面中的关于传输页面RECEIVE1长度LEN_SLICE、传输页面RECEIVE1子页面编号及传输页面RECEIVE1在共享内存中的地址ADDR等信息,依次处理并将传输页面RECEIVE1中的数据拷贝至用户空间,客端设备1将所述拷贝至用户空间的第二待传输数据存储至存储介质,然后执行GET+=此次从所述共享内存中获取的数据大小,即客端设备1已接收的数据大小GET等于加上此次从所述共享内存中获取的数据大小后的新值,客端设备1向所述主端设备返回第二数据读取消息,然后转第一步。

本领域技术人员应能理解上述将第二待传输数据从共享内存拷贝至用户空间的方法仅为举例,其他现有的或今后可能出现的将第二待传输数据从共享内存拷贝至用户空间的方法如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

根据本申请的一个优选实施例,所述方法还可以包括:客端设备1在通过所述第一数据传输模块与所述共享内存进行数据传输之前,与所述主端设备进行传输事件通信,其中,所述进行传输事件通信包括至少以下任一项:

客端设备1向所述主端设备发送关于所述第一待传输数据的第一数据信息;

客端设备1获取所述主端设备所发送的关于所述第二待传输数据的第二数据信息。

在此,所述第一待传输数据传输到所述主端设备端后,以文件形式存储于存储介质中,第一数据信息包括该文件的存储路径、该文件的名称及该文件的长度。所述第二待传输数据传输到所述客端设备端后,以文件形式存储于存储介质中,第二数据信息包括该文件的存储路径、该文件的名称及该文件的长度。通过客端设备1在数据传输开始之前,与所述主端设备进行传输事件通信,可以避免一些类似于重复传输的低级错误,有效提高数据传输成功率。

例如,假设在Xen虚拟化环境中,客端设备1与所述主端设备进行传输事件通信可以是:将传输命令放入xenstore(Xen虚拟环境中的一存储 设备,xenstore是基于事件通道完成的)中,该传输命令包括第一数据信息,并通知所述主端设备存在新的命令。所述主端设备从xenstore中获取传输命令,提取第一数据信息,先查看所述第一数据信息中的文件的存储路径是否已经存在,若是,则返回错误,并通知客端设备1相应错误信息,然后结束传输;若否,则根据所述第一数据信息中的文件的存储路径创建文件,并通知客端设备1已经接受传输命令且处理正常。

图9示出根据本申请另一个方面的一个实施例的一种在主端设备端的用于虚拟环境下传输数据的方法流程图。

该方法包括步骤S95、步骤S96和步骤S97。具体地,在步骤S95中,主端设备2创建第二数据传输模块;在步骤S96中,主端设备2获取客端设备所分配的共享内存的访问权限,以使所述共享内存允许主端设备进行读写操作;在步骤S97中,主端设备2通过所述第二数据传输模块与所述共享内存进行数据传输。

在此,所述主端设备2包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述主端设备2也可以是由一系列按照特定顺序组织的计算机数据和指令的集合。此外,所述主端设备2也可以是由一系列按照特定顺序组织的计算机数据和指令的集合与能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备的结合。本领域技术人员应能理解所述主端设备2仅为举例,其他现有的或今后可能出现的主端设备2如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

主端设备2的各个步骤之间是持续不断工作的。具体地,在步骤S95中,主端设备2创建第二数据传输模块,所述步骤S95中主端设备2所创建的第二数据传输模块持续供所述步骤S96和所述步骤S97使用,在步骤S96中,主端设备2持续获取客端设备所分配的共享内存的访问权限,以使所述共享内存允许主端设备进行读写操作,在步骤S97中,主端设备2持续通过所述第二数据传输模块与所述共享内存进行数据传输,直至所述主端 设备2停止工作。

在具体的实施例中,虚拟化环境下,客端设备可以是客户虚拟机(guest),主端设备可以是特权虚拟机(host),通过特权虚拟机可以实现对一个或多个非特权级的客户虚拟机的管理。

在步骤S95中,主端设备2创建第二数据传输模块。

其中,所述第二数据传输模块包括主端虚拟设备和主端驱动。主端设备2创建第二数据传输模块包括:创建主端虚拟设备以及加载所述主端虚拟设备的主端驱动。

进一步的,主端设备2根据host的管理程序(hypervisor)的类型,通过修改相应逻辑增加主端虚拟设备,所述主端虚拟设备用于内核空间与用户空间之间以及host与guest的内核空间之间的通信。

在此,主端设备的操作系统(例如为Linux操作系统)的虚拟内存划分为内核空间与用户空间,运行在内核空间的核心软件拥有访问硬件设备的所有权限,具有较高的特权级别;运行在用户空间的普通应用程序只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,也不能直接访问内核空间和硬件设备。

因此,所创建的第二数据传输模块提供了内核空间与用户空间之间的数据传输通道,有利于后续数据传输的顺利进行。

在步骤S96中,主端设备2获取客端设备所分配的共享内存的访问权限,以使所述共享内存允许主端设备进行读写操作。

在具体的实施例中,客端设备的第一数据传输模块中的客端驱动检测到客端虚拟设备时分配一共享内存,所述共享内存位于内核空间,并允许所述第二数据传输模块中的主端驱动访问该共享内存。具体地,所述第一数据传输模块中的客端驱动检测到所述第一数据传输模块中的客端虚拟设备时,分配用于数据传输的传输页面,分配用于控制数据传输的控制页面,所述传输页面与所述控制页面均为所述共享内存页面。

在此,通过位于内核空间的共享内存作为中转站传输数据,与现有的串口传输方式相比,大大地提高数据传输速率,与现有的热插拔磁盘的方式相比,操作较为简洁,对系统资源的占用较少。

在步骤S97中,主端设备2通过所述第二数据传输模块与所述共享内存进行数据传输。所述步骤S97包括步骤S975(图中未示出)和步骤S976(图中未示出)中的至少任一项,其中,在步骤S975中,主端设备2获取所述客端设备存储在所述共享内存的第一待传输数据,在步骤S976中,主端设备2将所述第二待传输数据存储于所述共享内存中。

在此,步骤S975中主端设备2用于接收所述客端设备所发送的第一待传输数据,步骤S976中主端设备2用于向所述客端设备发送第二待传输数据。所述步骤S97可以仅包括所述步骤S975,即接收所述客端设备所发送的第一待传输数;所述步骤S97也可以仅包括所述步骤S976,即向所述客端设备发送第二待传输数据;所述步骤S97还可以包括所述步骤S975和所述步骤S976,即接收所述客端设备所发送的第一待传输数据与向所述客端设备发送第二待传输数据同时进行。

具体地,在步骤S976中,主端设备2将所述第二待传输数据读取至用户空间,将所述第二待传输数据从所述用户空间拷贝至位于内核空间的所述共享内存。

在此,主端设备2将所述第二待传输数据从主端设备2的存储介质读取至内存中主端设备端的用户空间,而共享内存位于内存的内核空间,故将所述第二待传输数据从所述用户空间拷贝至所述共享内存。

具体地,在步骤S976中,主端设备2基于所述共享内存的相关容量信息,将所述读取至所述用户空间的第二待传输数据分次拷贝至位于内核空间的所述共享内存;在每次拷贝后,向所述客端设备发送第二数据传输消息;当获取所述客端设备所返回的第二数据读取消息后,进行下一次拷贝,直至传输完成。

在此,所述共享内存的相关容量信息可以包括但不限于所述用于数据传输的传输页面的大小,所述传输页面的大小SIZET=子页面个数TP×子页面大小PAGESIZE。优选地,在将第二待传输数据从用户空间拷贝至所述共享内存时,以所述传输页面为单位分次进行拷贝。

假设第二待传输数据的大小为N,主端设备2已发送的数据大小为ALREADY,其初始值为0,传输页面SEND2的空闲子页面个数为FREE, 子页面编号A的初始值为0,将所述第二待传输数据从主端设备2拷贝至所述共享内存的流程如下:

第一步,根据所述第二待传输数据未传输部分的大小LEFT=N–ALREADY,判断LEFT是否为0,若是,则所述第二待传输数据在主端设备端的传输已经结束,若否,则通过后续步骤判断能否将数据拷贝至所述共享内存;

第二步,判断所述第二待传输数据未传输部分的大小LEFT是否大于等于传输页面SEND2的大小SIZET,若是,则此次待拷贝数据的大小INPUT=SIZET,若否,则此次待拷贝数据的大小INPUT=LEFT,即每次最多拷贝SIZET大小的数据;

第三步,判断待拷贝数据大小INPUT是否大于等于子页面大小PAGESIZE,若是,则转第四步,若否,则转第五步;

第四步,将PAGESIZE大小的数据拷贝至传输页面SEND2中,将该子页面在所述共享内存中的地址ADDR=0,该子页面的长度LEN_SIZE=PAGESIZE及其子页面编号A放入控制页面中,然后执行INPUT-=PAGESIZE,A=(++A)>=TP?0:A,即待拷贝数据等于减去子页面大小后的新值,页面编号A加1后判断是否达到传输页面SEND2的最大子页面数TP,若A达到TP则给A赋值0,然后转第三步;

第五步,将INPUT大小的数据拷贝至传输页面SEND2中,将该子页面在所述共享内存中的地址ADDR=0,该子页面的长度LEN_SIZE=INPUT及其子页面编号A放入控制页面中,然后执行A=(++A)>=TP?0:A,即页面编号A加1后判断是否达到传输页面SEND2的最大子页面数TP,若A达到TP则给A赋值0,然后转第六步;

第六步,执行ALREADY+=此次拷贝至所述共享内存的数据大小,FREE-=此次使用的子页面个数,即主端设备2已发送的数据大小ALREADY等于加上此次拷贝至所述共享内存的数据大小后的新值,传输页面SEND2的空闲子页面个数FREE等于减去此次使用的子页面个数后的新值;然后主端设备2向所述客端设备发送第二数据传输消息,以通知所述客端设备读取此次拷贝至所述共享内存的数据,主端设备2获取所述 客端设备所返回的第二数据读取消息后,执行FREE=TP,然后转第一步。

本领域技术人员应能理解上述将第二待传输数据从用户空间分次拷贝至共享内存的方法仅为举例,其他现有的或今后可能出现的将第二待传输数据从用户空间拷贝至共享内存的方法如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

具体地,在步骤S975中,主端设备2读取所述客端设备存储在所述共享内存的第一待传输数据,将所读取的第一待传输数据拷贝至用户空间,将所述拷贝至用户空间的第一待传输数据存储至存储介质。

在此,主端设备2将所述客端设备所发送的第一待传输数据从所述共享内存拷贝至用户空间,再从用户空间拷贝至存储介质。所述存储介质指的是非易失性存储介质,例如且不限于硬盘、光盘、U盘、SD卡等。

具体地,在步骤S975中,主端设备2根据所述客端设备所发送的第一数据传输消息读取所述客端设备存储在所述共享内存的第一待传输数据,在读取完成后,向所述客端设备返回第一数据读取消息。

例如,假设第一待传输数据的大小为N,主端设备2已接收的数据大小为GET,其初始值为0,将所述第一待传输数据从所述共享内存拷贝至主端设备2的流程如下:

第一步,判断等式GET==N是否为真,即判断主端设备2已接收的数据大小GET是否等于第一待传输数据的大小N,若是,则主端设备2已完成对所述第一待传输数据的读取,并向所述客端设备返回第一数据读取消息,若否,则转第二步;

第二步,等待所述客端设备所发送的第一数据传输消息,当接收到所述客端设备所发送的第一数据传输消息后,根据控制页面中的关于传输页面RECEIVE2长度LEN_SLICE、传输页面RECEIVE2子页面编号及传输页面RECEIVE2在共享内存中的地址ADDR等信息,依次处理并将传输页面RECEIVE2中的数据拷贝至用户空间,主端设备2将所述拷贝至用户空间的第一待传输数据存储至存储介质,然后执行GET+=此次从所述共享内存中获取的数据大小,即主端设备2已接收的数据大小GET等于加上此次从所述共享内存中获取的数据大小后的新值,主端设备2向所述客 端设备返回第一数据读取消息,然后转第一步。

本领域技术人员应能理解上述将第一待传输数据从共享内存拷贝至用户空间的方法仅为举例,其他现有的或今后可能出现的将第一待传输数据从共享内存拷贝至用户空间的方法如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

根据本申请的一个优选实施例,所述方法还可以包括:主端设备2在通过所述第二数据传输模块与所述共享内存进行数据传输之前,与所述客端设备进行传输事件通信,其中,所述进行传输事件通信包括至少以下任一项:

主端设备2向所述客端设备发送关于所述第二待传输数据的第二数据信息;

主端设备2获取所述客端设备所发送的关于所述第一待传输数据的第一数据信息。

在此,所述第二待传输数据传输到所述客端设备端后,以文件形式存储于存储介质中,第二数据信息包括该文件的存储路径、该文件的名称及该文件的长度。所述第一待传输数据传输到所述主端设备端后,以文件形式存储于存储介质中,第一数据信息包括该文件的存储路径、该文件的名称及该文件的长度。通过所述主端通信装置在数据传输开始之前,与所述客端设备进行传输事件通信,可以避免一些类似于重复传输的低级错误,有效提高数据传输成功率。

例如,假设在Xen虚拟化环境中,主端设备2与所述客端设备进行传输事件通信可以是:将传输命令放入xenstore(Xen虚拟环境中的一存储设备,xenstore是基于事件通道完成的)中,该传输命令包括第二数据信息,并通知所述客端设备存在新的命令。所述客端设备从xenstore中获取传输命令,提取第二数据信息,先查看所述第二数据信息中的文件的存储路径是否已经存在,若是,则返回错误,并通知主端设备2相应错误信息,然后结束传输;若否,则根据所述第二数据信息中的文件的存储路径创建文件,并通知主端设备2已经接受传输命令且处理正常。

图10示出根据本申请另一个方面的一个实施例的一种用于虚拟环境下 传输数据的方法流程图。所述方法包括步骤S81’~S83’和步骤S95’~S97’。具体地,在步骤S81’中,客端设备1创建第一数据传输模块;在步骤S95’中,主端设备2创建第二数据传输模块;在步骤S82’中,客端设备1根据所述第一数据传输模块分配一共享内存,且所述共享内存允许主端设备2进行读写操作;在步骤S96’中,主端设备2获取客端设备1所分配的共享内存的访问权限,以使所述共享内存允许主端设备2进行读写操作;在步骤S83’中,客端设备1通过所述第一数据传输模块与所述共享内存进行数据传输,所述步骤S83’包括以下至少任一项:将所述第一待传输数据存储于所述共享内存中,获取主端设备2存储在所述共享内存的第二待传输数据;在步骤S97’中,主端设备2通过所述第二数据传输模块与所述共享内存进行数据传输,所述步骤S97’包括以下至少任一项:获取客端设备1存储在所述共享内存的第一待传输数据,将所述第二待传输数据存储于所述共享内存中。在此,步骤S81’~S83’与图8中步骤S81~S83的内容相同或基本相同,并且步骤S95’~S97’与图9中步骤S95~S97的内容相同或基本相同,为简明起见,故在此不再赘述,并以引用的方式包含于此。

与现有技术相比,本申请的一个实施例中,客端设备创建第一数据传输模块,主端设备创建第二数据传输模块,所述第一数据传输模块和所述第二数据传输模块提供了客端设备端的用户空间与主端设备端的用户空间之间的数据传输通道;所述客端设备根据所述第一数据传输模块分配一位于内核空间的共享内存,并允许所述主端设备对所述共享内存进行读写操作,所述主端设备获取所述共享内存的访问权限;所述客端设备和所述主端设备分别通过所述第一数据传输模块和所述第二数据传输模块与所述共享内存进行数据传输,具体地,所述客端设备将所述第一待传输数据存储于所述共享内存中,所述主端设备获取所述客端设备存储在所述共享内存的第一待传输数据,所述主端设备将所述第二待传输数据存储于所述共享内存中,所述客端设备获取所述主端设备存储在所述共享内存的第二待传输数据。

如此,通过位于内核空间的共享内存作为中转站传输数据,与现有的串口传输方式相比,大大地提高数据传输速率,与现有的热插拔磁盘的方 式相比,操作较为简洁,对系统资源的占用较少。

此外,在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序 指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1