一种虚拟存储器的驱动方法以及驱动器的制造方法_2

文档序号:9631364阅读:来源:国知局
01、前端驱动器接收10请求。
[0036]结合图3所示,Xen平台中的虚拟机称为虚拟域(英文名称:Domain),其中虚拟域0设备驱动域,用于提供对计算机硬件资源的管理功能,虚拟域0包括原生驱动器和后端驱动器,虚拟域0具有对计算机硬件资源的直接访问权。用户的普通虚拟域通常只包括前端驱动器,如图3所示的虚拟域1。普通虚拟域不能直接访问计算机硬件资源,当普通虚拟域内的操作系统访问域内的虚拟资源时,操作系统向前端驱动器发送访问虚拟资源的请求,前端驱动器请求虚拟域0内的后端驱动器访问计算机硬件资源。
[0037]本发明的实施例中,前端驱动器具体可以为Xen平台的普通虚拟域内的前端驱动器,后端驱动器为Xen平台的设备驱动域内的后端驱动器。
[0038]普通虚拟域访问域内的虚拟存储器时,向前端驱动器发送10请求。前端驱动器所接收到的10请求,可以是虚拟域内的应用程序所发出的10请求,或者虚拟域操作系统所发出的10请求。
[0039]202、前端驱动器将10请求存入第一内存共享区域的空闲位置。
[0040]现有技术中前端驱动器和后端驱动器进行数据交互的过程如图4所示,共享数据环(英文名称:Ring)401为前端驱动器和后端驱动器之间的共享内存。普通虚拟域的前端驱动器将10请求存入共享数据环401,然后调用Hypercall服务通知后端驱动器0号虚拟域的后端驱动器,请求后端驱动器处理10请求。后端驱动器从共享数据环401读取10请求,通过原生驱动器(英文全称:Native driver)对物理存储器进行读写操作后得到10响应。后端驱动器将10响应存入共享数据环401,然后调用Hypercall服务通知普通虚拟域的前端驱动器从共享数据环401读取10响应。
[0041]本发明的实施例中,共享数据环包括第一内存共享区域501和第二内存共享区域502。其中第一内存共享区域501为共享数据环内用于存储10请求的存储区,第二内存共享区域502为共享数据环内用于存储10响应的存储区。
[0042]可选的,第一内存共享区域501和第二内存共享区域502可以是对前端驱动器和后端驱动器的共享数据环进行划分所得到的两个共享区域,第一内存共享区域501和第二内存共享区域502的大小可以为预设值,例如各占共享数据环大小的一半。第一内存共享区域和第二内存共享区域的地址范围可以由前端驱动器或者后端驱动器确定后,向对方通知。例如,后端驱动器将共享数据环的容量按照预设定的比例进行划分,将第一内存共享区域和第二内存共享区域的地址范围通过第一指示消息发送至前端驱动器。或者前端驱动器对共享数据环的容量进行划分,将第一内存共享区域和第二内存共享区域的地址范围通过第二指示消息发送至前端驱动器。
[0043]优选的,结合图5所示,第一内存共享区域501和第二内存共享区域502可以是将前端驱动器和后端驱动器的共享数据环进行拆分所得到的两个独立的共享数据环。由前端驱动器或者后端驱动器完成拆分后,向对方通知,指示拆分所得的其中一个数据环为第一内存共享区域501,另一个数据环为第二内存共享区域502。
[0044]前端驱动器接收到10请求之后,将10请求存入第一内存共享区域501的空闲位置。
[0045]可选的,前端驱动器对第一内存共享区域501的占用情况进行持续监控,当接收到10请求时,若确定第一内存共享区域501有空闲位置,即第一内存共享区域501没有被完全占用,则将10请求存入第一内存共享区域501的空闲位置。
[0046]或者前端驱动器在接收到10请求之后,对第一内存共享区域501的占用情况进行检测,若第一内存共享区域501有空闲位置,则将10请求存入第一内存共享区域501的空闲位置。
[0047]第一内存共享区域501可以存储多个10请求,在第一内存共享区域501没有被完全占用的情况下,前端驱动器可以将接收到的一个以上10请求存入第一内存共享区域501的空闲位置。
[0048]203、后端驱动器从第一内存共享区域读取10请求。
[0049]后端驱动器循环检测第一内存共享区域501的占用情况,当第一内存共享区域501处于非空闲状态时,即一旦有10请求存入第一内存共享区域501时,就从第一内存共享区域501读取10请求。后端驱动器在读取10请求之后,将已读取的10请求从第一内存共享区域501删除。
[0050]前端驱动器不断向第一内存共享区域501的空闲位置存入10请求,后端驱动器不断从第一内存共享区域501读取10请求,并将已读取的10请求从第一内存共享区域501删除,第一内存共享区域501的占用空间动态变化。
[0051]结合步骤202,第一内存共享区域501被完全占用的情况下,前端驱动器确定第一内存共享区域501没有空闲位置,则等待直到第一内存共享区域501有空闲位置时,再将10请求存入空闲位置。
[0052]204、后端驱动器将10请求发送至原生驱动器,并接收原生驱动器返回的10响应。
[0053]原生驱动器为直接访问计算机硬件资源的驱动器,后端驱动器将10发送至原生驱动器,原生驱动器对物理存储器进行读写操作,向后端驱动器返回10响应。其中,物理存储器可以为磁介质存储器或者固态硬盘等。
[0054]205、后端驱动器将10响应存入第二内存共享区域的空闲位置。
[0055]可选的,后端驱动器对第二内存共享区域502的占用情况进行持续监控,当从原生驱动器接收到10响应时,若第二内存共享区域502有空闲位置,即第二内存共享区域502没有被完全占用,则将10响应存入第二内存共享区域502的空闲位置。
[0056]或者后端驱动器从原生驱动器接收到10响应之后,对第二内存共享区域502的占用情况进行检测,若第二内存共享区域502有空闲位置,则将10响应存入第二内存共享区域502的空闲位置。
[0057]第二内存共享区域502可以存储多个10响应,在第二内存共享区域502没有被完全占用的情况下,后端驱动器可以将接收到的一个以上10响应存入第二内存共享区域502的空闲位置。
[0058]206、前端驱动器从第二内存共享区域读取10响应。
[0059]前端驱动器循环检测第二内存共享区域502的占用情况,当第二内存共享区域502处于非空闲状态时,即一旦有10响应存入第二内存共享区域502时,就从第二内存共享区域502读取10响应。前端驱动器在读取10响应之后,将已读取的10响应从第二内存共享区域502删除。
[0060]结合步骤202-205,前端驱动器向第一内存共享区域存入的10请求包括请求标识,后端驱动器向第二内存共享区域存入的10响应包括响应标识。前端驱动器和后端驱动器通过请求标识和响应标识确定10请求与10响应之间的—对应关系。
[0061]可选的,请求标识和响应标识具体可以为序列编号。前端驱动器为一个10请求分配序列编号,将包括序列编号的10请求存入第一内存共享区域。后端驱动器将包括相同序列编号的10响应存入第二内存共享区域,前端驱动器读取10响应后,根据序列标号确定10响应所对应的10请求。
[0062]或者,请求标识和响应标识还可以为内存地址。例如,前端驱动器将10请求的完整内容写入内存,将内存地址存入第一内存共享区域。后端驱动器根据内存地址读取10请求的完整内容,并将10响应的完整内容存入相同的内存地址,然后将该内存地址存入第二内存共享区域。前端驱动器从第二内存共享区域读取内存地址,从该内存地址读取10响应的完整内容。
[0063]后端驱动器不断向第二内存共享区域502的空闲位置存入10响应,前端驱动器不断从第二内存共享区域502读取10响应,并将已读取的10响应从第二内存共享区域502删除,第二内存共享区域502的占用空间动态变化。
[0064]结合步骤205,第二内存共享区域502被完全占用的情况下,后端驱动器确定第二内存共享区域501没有空闲位置,则等待直到第二内存共享区域502有空闲位置时,再将10响应存入空闲位置。
[0065]本发明的实施例所提供的虚拟存储器的驱动方法,前端驱动器与后端驱动器的共享数据环包括第一内存共享区域和第二内存共享区域。其中,第一内存共享区域用于存储10请求,第二内存共享区域用于存储10响应。前端驱动器将接收到的10请求队列不断存入第一内存共享区域的空闲位置,后端驱动器不断从第一内存共享区域读取10请求,并将已读取的10请求从第一内存共享区域删除。后端驱动器从原生驱动器得到10响应后,将10响应队列
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1