一种共享文件的访问方法、系统及相关设备的制造方法_3

文档序号:9687664阅读:来源:国知局
VHFS请求后,将VHFS请求写入内存,然后将内存的地址写入预置通用寄存器,该预置通用寄存器可以是宿主机分配给虚拟机用于保存VHFS请求的,因此,宿主机通过访问该预置通用寄存器,从中读取到VHFS请求所在内存的地址,然后根据地址去内存中读取到VHFS请求。
[0079]在上述介绍了虚拟机是运行在系统非根模式下,而宿主机是运行在系统根模式下。虚拟机将VHFS请求所在内存的地址写入寄存器后,后续将由宿主机完成对VHFS请求的操作,此时,虚拟机需要退出非根模式,然后让系统进入根模式,以便宿主机获取控制权。
[0080]在图3给出的共享文件的访问系统中,以通过vmcal1门来实现虚拟机与宿主机之间的切换,具体地,若是利用vmcall退出非根模式,则步骤403具体包括:将上述VHFS请求所在内存的地址写入上述预置通用寄存器;调用vmcall指令退出非根模式,以使得上述宿主机获得控制权然后处理上述VHFS请求。其中,发出一个调用vmcal 1的指令去调用vmcal 1,然后虚拟机将退出非根模式。
[0081]除了上述图3提供的通过vmcall在非根模式与根模式之间切换外,本发明实施例还可以通过HyperCall机制高效地访问宿主机的文件系统。比如,通过virt1机制来实现。宿主机事先模拟出一块外设部件互连标准(Peripheral Component Interconnect,简称PCI)设备,然后在虚拟机读写该PCI设备的配置空间时,将会触发虚拟机退出非根模式。在这种方式下,步骤403具体包括:将所述VHFS请求所在内存的地址写入外设部件互连标准PCI设备,并触发所述虚拟机退出非根模式,以使所述宿主机获得控制权处理所述VHFS请求。
[0082]需要说明,本发明实施例中的预置通用寄存器可以单独用于写入VHFS请求所在内存的地址,当然,由于资源受限,该预置通用寄存器还可能用于写入其它信息,因此,宿主机从该预置通用寄存器读取信息后,确定该信息是否为指向VHFS请求的内存地址。
[0083]405、上述宿主机根据读取的上述VHFS请求所在内存的地址,读取上述VHFS请求,根据上述VHFS请求执行对上述共享文件的上述操作。
[0084]可以理解,本发明实施例中根据上述VHFS请求执行对上述共享文件的上述操作是指:宿主机将所述虚拟机物理地址转换成主机逻辑地址,根据所述主机逻辑地址以及所述文件信息,查找到所述共享文件,对查找到的所述共享文件执行所述操作命令所指示的操作。
[0085]需要说明,处理完VHFS请求中操作命令的操作结果将返回给虚拟机,对于不同的操作,其操作结果也会有所不同,比如,文件打开操作,操作结果中包括文件描述符(fd)。对于文件写入操作或者文件读取操作等,操作结果为失败指示或成功指示。
[0086]可以看出,虚拟机通过检测用户对VHFS中共享文件的操作,以获得操作信息,然后根据操作信息生成VHFS请求,将VHFS请求写入虚拟机的内存中,之后再将VHFS请求所在内存的地址写入预置通用寄存器,调用系统切换指令后退出,然后由宿主机来执行后续对VHFS请求的操作。其中,由于预置的寄存器可以由虚拟机操作,也可以由宿主机操作,而虚拟机的内存也是从宿主机的内存中划分给虚拟机的,因此,宿主机可以从预置通用寄存器中拿到VHFS请求所在内存的地址,然后去内存中读取VHFS请求,然后处理该VHFS请求。本发明实施例中整个对文件的操作步骤比较简单,不需要涉及太多的拷贝,能够有效提高文件共享中处理文件的效率。
[0087]请参阅图5和图6a,图5为本发明一些实施例提供的共享文件的访问方法的信令图;图6a为本发明实施例提供的文件打开流程;如图5所示,一种共享文件的访问方法可包括:
[0088]501、虚拟机检测对共享文件的打开操作,获得操作信息;
[0089]该操作信息中包括路径信息和操作命令等。
[0090]502、虚拟机调用应用程序,根据操作信息生成VHFS请求,将VHFS请求保存到内存,将VHFS请求所在内存的地址写入预置通用寄存器;
[0091]其中,虚拟机通过应用程序调用SyS_0Pen函数去试图打开某个文件。具体地,调用的是sys_open下的dentry_open函数,实际上就是VHFS系统下的open函数。VHFS的open函数会初始化VHFS请求,也就是生成了一个VHFS请求。
[0092]503、虚拟机调用vmcall指令退出非根模式,将控制权交给宿主机;
[0093]虚拟机调用vmcall指令退出非根模式,把控制权交给宿主机。
[0094]504、宿主机调度VCPU线程捕捉到vmcall指令,从预置通用寄存器读取VHFS请求所在内存的地址,根据地址去内存中读取到VHFS请求,然后执行VHFS请求中的打开共享文件的操作;
[0095]宿主机读取到VHFS请求之后,调用文件系统中的vfs_open函数去执行打开共享文件的操作。
[0096]505、宿主机将打开的共享文件的文件描述符fd返回给虚拟机;
[0097]其中,在虚拟机的VHFS系统中还划分出一个结果区,宿主机完成打开共享文件的操作,将文件描述符fd更新到结果区。
[0098]在宿主机完成打开共享文件的操作之后,调用vmcall指令,宿主机退出根模式,将控制权再交给虚拟机。
[0099]请参阅图6b,图6b为本发明实施例提供的宿主机的文件系统与虚拟机的文件系统之间的数据对应关系。在图6b中,共享文件打开后,在宿主机中共享文件视为被一个vmm进程打开着,而文件描述符(fd)在vmm进程的描述符数组中保存。在虚拟机中,在对应的文件下划分一个私有结构区(private_data)中保存相同的一份文件描述符(fd),供后续读写文件时使用。
[0100]可以理解,宿主机将共享文件打开后,使用虚拟机的用户可以继续对打开的共享文件进行其它操作,比如写入操作或者读取操作。在写入操作和读取操作中将会使用保存的文件描述符,以减少操作流程。当然,对文件的写入操作和读取操作等都需要先打开文件,因此,打开文件作为读取文件和写入文件的前提条件。
[0101]请参阅图7a和图7b,图7a为本发明一些实施例提供的共享文件的写入方法的信令图;图7b为本发明实施例提供的写文件的流程示意图。在图7a和图7b中,一种共享文件的写入方法可包括:
[0102]701、虚拟机检测到对共享文件的文件写入操作,获得操作信息;
[0103]文件写入操作中,操作信息包括共享文件描述符(fd)、操作命令和写入内容等。
[0104]702、虚拟机从结果区中读取被打开的共享文件的文件描述符fd;
[0105]703、虚拟机将被打开的共享文件所在缓冲区的虚拟机逻辑地址转换成虚拟机物理地址;
[0106]704、虚拟机根据操作命令、写入内容、读取到的fd以及虚拟机物理地址生成VHFS请求;
[0107]705、虚拟机将VHFS请求写入内存,然后将内存地址写入寄存器;
[0108]706、虚拟机调用vmcal 1指令退出对VHFS请求的处理;
[0109]虚拟机调用系统中的sys_write函数开始写文件。其中,调用VHFS中的f_ops的相关hook函数组成生成VHFS请求,VHFS请求包括共享文件所在缓冲区的虚拟机物理地址,虚拟机物理地址由虚拟机逻辑地址转化而来。并把实际文件的fd从虚拟机的结果区中取出,作为VHFS请求的内容之一,然后调用vmcall指令退出虚拟机交给宿主机处理。
[0110]707、宿主机调度VCPU线程捕捉到vmcal 1指令,从寄存器读取VHFS请求所在内存的地址,根据读取到的地址去内存读取到VHFS请求;
[0111]708、宿主机根据VHFS请求中的fd,去读取宿主机自己保存的fd,并将VHFS请求中的虚拟机物理地址转换成宿主机逻辑地址;
[0112]709、宿主机调用写入函数,根据宿主机逻辑地址将VHFS请求中的写入信息写入fd对应的共享文件中。
[0113]其中,宿主机在处理写入文件的VHFS请求时,先把文件缓冲区的虚拟机物理地址转成宿主机逻辑地址,然后调用vfs_write函数对对应共享文件进行写入操作。
[0114]对文件的写入操作是在文件被打开的基础上进行,文件在打开后宿主机将文件的fd返回给虚拟机进行保存,同时,宿主机也将保存着该fd,那么在文件写入操作时,宿主机则可以直接根据其保存着的fd去执行文件写入操作。
[0115]可以理解,在本发明实施例中对文件读取操作与文件写入操作相似,都是在文件被打开基础上,只是在文件读取操作的时候,VHFS请求没有包括写入内容。宿主机调用vfs_read函数对对应文件进行读取操作。
[0116]还可以理解,在本发明实施例中对文件的创建操作时,若是在某一个文件下创建文件,也将需要打开该文件。宿主机调用vfs_creat函数创建出一个文件,创建文件后,该文件将对应着一个文件描述符(fd),还有文件所在缓冲区的虚拟机逻辑地址、虚拟机物理地址和宿主机逻辑地址。
[0117]可以看出,本发明实施例提供的共享文件的访问方法中需要的组件少,仅需要安装相关内核模块(宿主机中一个VHFSD处理模块和虚拟机中一个VHFS处理模块)即可,不需要复杂配置。系统开销小,不需要多次拷贝操作文件的操作信息,仅需要完成GVA-GPA-HVA等地址转换,宿主机直接对文件缓冲区进行各类操作。极大提高文件访问效率。
[0118]请参阅图8,图8为本发明一些实施例提供的索引节点操的流程示意
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1