一种基于动态内存虚拟磁盘的跨运行环境文件快速共享方法技术

技术编号:37610247 阅读:13 留言:0更新日期:2023-05-18 12:02
本发明专利技术公开了一种基于动态内存虚拟磁盘的跨运行环境文件快速共享方法,通过文件内存映射将共享文件直接映射到物理内存空间,再将共享文件对应的物理内存空间映射到虚拟机中,在虚拟机中采用该物理内存空间及共享文件元信息构建PCIe设备,使虚拟机通过PCIe设备实现对文件的读操作,相较于现有的文件共享方式仅需完成一次读文件的操作即可实现文件共享,有效节约了内存和CPU的消耗,提高了文件共享的速度及效率。速度及效率。

【技术实现步骤摘要】
一种基于动态内存虚拟磁盘的跨运行环境文件快速共享方法


[0001]本专利技术属于跨运行环境开发
,具体涉及一种基于动态内存虚拟磁盘的跨运行环境文件快速共享方法。

技术介绍

[0002]虚拟机(Virtual Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,安装在虚拟机中的操作系统通常被称为Guest OS(Guest Operating System),安装虚拟机的物理计算机(宿主机)上的操作系统通常被称为Host OS(Host Operating System)。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量,每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
[0003]实际使用中,Host OS与Guest OS之间经常需要共享文件。从技术角度看,Host OS与Guest OS间的文件共享通常有两种实现方式:一是基于Samba协议实现文件共享,这种方式的本质是Host OS与GuestOS之间通过网络共享文件,例如Host OS将文件内容读到内存中后再将内存中的文件通过网络发送至Guest OS,Guest OS将文件内容读取到内存后,再将文件内容写入到文件系统中,该过程中执行的操作包括一次文件读取、两次内存复制及一次文件写入;二是基于虚拟机的私有通信协议实现文件共享,私有通信协议通常是指通过构建PCIe设备实现高速通信的方式,例如Host OS将文件内容读到内存后再将内存中的文件内容通过虚拟PCIe设备写入Guest OS的内存,Guest OS再将文件内容写入到文件系统中,该过程中执行的操作包括一次文件读取、一次内存复制及一次文件写入。
[0004]例如,Windows版本的xDroid就是通过将安卓系统安装在虚拟机内,再将虚拟机运行在Windows系统上实现了安卓应用在Windows系统上的运行,当用户在该Windows系统上执行安装安卓应用的操作时,也就是安装安卓应用对应的apk文件时,xDroid需要将该apk文件先复制到虚拟机内,再在安卓系统内执行标准的安装操作,安装完成后该apk文件即可被删除。
[0005]综上所述,无论是采用上述哪种方式实现Host OS与Guest OS间的文件共享,操作过程都涉及了多次的文件读写及内存复制操作,因此都产生了较多的内存和CPU的消耗,进而降低了文件共享的效率。

技术实现思路

[0006]有鉴于此,本专利技术提供了一种基于动态内存虚拟磁盘的跨运行环境文件快速共享方法,能够实现虚拟机与宿主机之间快速的文件共享。
[0007]本专利技术提供的一种基于动态内存虚拟磁盘的跨运行环境文件快速共享方法,具体包括以下步骤:步骤1、在Host OS中获取共享文件的句柄,记为第一句柄,根据第一句柄创建文件
映射内核对象;当共享文件的大小不大于阈值时,执行步骤2;否则,令起始位置为零后执行步骤3;步骤2、由文件映射内核对象将共享文件的全部内容映射到虚拟机软件进程对应的连续内存空间中,将该连续内存空间的起始地址作为第一映射地址,执行步骤4;步骤3、从起始位置截取阈值大小的共享文件的内容,由文件映射内核对象将该内容映射到虚拟机软件进程对应的连续内存空间中,将该连续内存空间的起始地址作为第一映射地址,执行步骤4;步骤4、在Host OS中创建PCIe设备,记为主PCIe设备,令主PCIe设备锁定第一映射地址对应的第一物理内存空间;步骤5、在Guest OS中创建PCIe设备,记为从PCIe设备,将从PCIe设备I/O地址空间映射到地址为第二映射地址的Guest OS的内存空间,将I/O地址空间的读写操作映射到第一物理内存空间的读写操作,基于共享文件的元信息及第二映射地址构建虚拟块设备,由虚拟块设备完成共享文件的读操作;步骤6、移除虚拟块设备,删除第二映射地址,释放第一物理内存空间,依次关闭文件映射内核对象及第一句柄。
[0008]进一步地,所述步骤4中令主PCIe设备锁定第一映射地址对应的第一物理内存空间的方式为:步骤4.1、根据虚拟机软件所在进程对应的CR3寄存器,获取该CR3寄存器所指向的页目录表PDT;遍历页目录表PDT,找到第一映射地址对应的物理内存,记为第一物理内存空间;步骤4.2、若第一物理内存空间的属性为非分页内存,则调用MmBuildMdlForNonPagedPool为第一物理内存空间分配内存描述符表MDL;若第一物理内存空间的属性为分页内存,则调用MmAllocatePagesForMdl为第一物理内存空间分配内存描述符表MDL;步骤4.3、若内存描述符表MDL为空,则调用MmProbeAndLockPages锁定第一物理内存空间;若内存描述符表MDL不为空,则调用MmMapLockedPagesSpecifyCache锁定内存描述符表MDL对应的物理内存空间。
[0009]进一步地,所述共享文件的元信息包括超级块表、数据块表、索引节点表、目录表、数据块表及文件扩展属性表。
[0010]进一步地,所述步骤5中由虚拟块设备完成共享文件的读操作的方式为:设置虚拟块设备为只读模式,将虚拟块设备读操作的地址映射到元信息和第二映射地址分别对应的内存空间;当读取第二映射地址对应的内存空间时,若产生缺页异常,则不向上抛出异常,并由从PCIe设备通知主PCIe设备,以当前第一物理内存空间中保存的共享文件的结束位置为起始位置执行步骤3;若未产生缺页异常,则完成共享文件的读操作。
[0011]进一步地,所述步骤1中在Host OS中获取共享文件的句柄,记为第一句柄,根据第一句柄创建文件映射内核对象的方式为:VirtualBox在用户态调用CreateFile方法获取共享文件的句柄,记为第一句柄,以第一句柄为输入调用CreateFileMapping方法创建文件映射内核对象。
[0012]进一步地,所述步骤5中将从PCIe设备I/O地址空间映射到地址为第二映射地址的
Guest OS的内存空间的方式为:调用Linux的内核函数ioremap将从PCIe设备I/O地址空间映射到地址为第二映射地址的GuestOS的内存空间。
[0013]有益效果:本专利技术通过文件内存映射将共享文件直接映射到物理内存空间,再将共享文件对应的物理内存空间映射到虚拟机中,在虚拟机中采用该物理内存空间及共享文件元信息构建PCIe设备,使虚拟机通过PCIe设备实现对文件的读操作,相较于现有的文件共享方式仅需完成一次读文件的操作即可实现文件共享,有效节约了内存和CPU的消耗,提高了文件共享的速度及效率。
具体实施方式
[0014]下面列举实施例,对本专利技术进行详细描述。
[0015]本专利技术提供的一种基于动态内存虚拟磁盘的跨运行环境文件快速共享方法,其核心思想是:通过文件内存映射将共享文件直接映射到物理内存空间,再将共享文件对应的物理内存空间映射到虚拟机,在本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于动态内存虚拟磁盘的跨运行环境文件快速共享方法,其特征在于,具体包括以下步骤:步骤1、在Host OS中获取共享文件的句柄,记为第一句柄,根据第一句柄创建文件映射内核对象;当共享文件的大小不大于阈值时,执行步骤2;否则,令起始位置为零后执行步骤3;步骤2、由文件映射内核对象将共享文件的全部内容映射到虚拟机软件进程对应的连续内存空间中,将该连续内存空间的起始地址作为第一映射地址,执行步骤4;步骤3、从起始位置截取阈值大小的共享文件的内容,由文件映射内核对象将该内容映射到虚拟机软件进程对应的连续内存空间中,将该连续内存空间的起始地址作为第一映射地址,执行步骤4;步骤4、在Host OS中创建PCIe设备,记为主PCIe设备,令主PCIe设备锁定第一映射地址对应的第一物理内存空间;步骤5、在Guest OS中创建PCIe设备,记为从PCIe设备,将从PCIe设备I/O地址空间映射到地址为第二映射地址的Guest OS的内存空间,将I/O地址空间的读写操作映射到第一物理内存空间的读写操作,基于共享文件的元信息及第二映射地址构建虚拟块设备,由虚拟块设备完成共享文件的读操作;步骤6、移除虚拟块设备,删除第二映射地址,释放第一物理内存空间,依次关闭文件映射内核对象及第一句柄。2.根据权利要求1所述的跨运行环境文件快速共享方法,其特征在于,所述步骤4中令主PCIe设备锁定第一映射地址对应的第一物理内存空间的方式为:步骤4.1、根据虚拟机软件所在进程对应的CR3寄存器,获取该CR3寄存器所指向的页目录表PDT;遍历页目录表PDT,找到第一映射地址对应的物理内存,记为第一物理内存空间;步骤4.2、若第一物理内存空间的属性为非分页内存,则调用MmBuildMdlForNonPagedPool为第一物理内存空间分配内存描述符表MDL;若第一物理内存空间的属性为分页...

【专利技术属性】
技术研发人员:温研袁利
申请(专利权)人:北京麟卓信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1