发明名称 基于嵌入式虚拟化平台的域间文件数据共享方法
摘要 本发明提供了一种基于嵌入式虚拟化平台的域间数据共享方法,该方法将VFS系统中的索引节点数据对象一分为二,将与用户层进程联系密切的前端索引节点放在Domain域中,将与底层块设备驱动程序联系紧密的后端索引节点放入VMM中;将块设备驱动从Domain域转移到VMM中,同时在VMM的后端索引节点上引入了文件锁机制保证多个Domain域读写同一文件对象时的文件数据的一致性。本发明实现了Domain域间对块设备上文件数据安全可靠的共享,并且提高了共享块设备文件数据的传输性能。
申请公布号 CN102521300A 申请公布日期 2012.06.27
申请号 CN201110391529.7 申请日期 2011.11.30
申请人 华中科技大学 发明人 金海;邵志远;李海峰;伍箴水
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 华中科技大学专利中心 42201 代理人 李智
主权项 一种基于嵌入式虚拟化平台的域间数据共享方法,其特征在于:VFS中的索引节点分为前端索引节点和后端索引节点,前端索引节点位于客户操作系统Domain域中,后端索引节点位于软件层一虚拟监控程序VMM中,该方法包括打开文件、读写文件和关闭文件三个步骤:所述打开文件步骤为:(A.1)Domain域的进程从待打开文件的路径获取待打开文件对应的前端索引节点F1和块设备BD1信息,为本次打开操作分配文件号,创建包含前端索引节点F1、块设备BD1和文件号信息的文件结构对象O1,将其加入文件描述符数组;(A.2)若Domain域中已存在前端索引节点F1,则F1的使用计数加一,否则,在Domain域中建立前端索引节点F1,并在块设备BD1中读出待打开文件在块设备BD1上的物理位置分布信息;(A.3)Domain域向VMM发送包含前端索引节点F1和块设备BD1的ID信息的超级调用请求,VMM对前端索引节点F1和块设备BD1的ID作哈希计算,依据计算得到的后端索引节点索引值在后端索引节点哈希链表中找到其对应的后端索引节点B1;(A.4)若VMM中存在后端索引节点B1,则B1的使用计数加一,否则,在VMM中建立后端索引节点B1,将其插入后端索引节点哈希链表中,插入和查找该哈希链表所使用的哈希值依据前端索引节F1和块设备BD1的ID计算;所述读写文件步骤包括读写文件请求子步骤和读写文件执行子步骤,所述读写文件请求子步骤将读写文件请求挂载到块设备的读写请求队列上,读写文件执行子步骤执行读写请求队列中的读写请求;所述读写文件请求子步骤具体为:(B.1)Domain域的进程发出读写操作请求,读写操作请求包含待 读写文件的文件号、用户空间数据缓冲区、待读写文件的逻辑偏移、读写数据长度和读写类型;(B.2)依据待读写文件的文件号索引进程的文件描述符数组找到文件结构对象O2;(B.3)获取文件结构对象O2中的前端索引节点F2和块设备BD2;(B.4)查询待读写文件的逻辑偏移对应的页缓存是否已经在内存中,若存在,进入步骤(B.5),否则,分配页缓存,进入步骤(B.5);(B.5)查询待读写文件的逻辑偏移对应的页缓存标志位以判断所述页缓存是否是最新,若是,则进入步骤(B.6),否则,进入步骤(B.7);(B.6)若为读请求,则将所述页缓存复制到用户空间数据缓冲区,读写操作结束,否则,将用户空间数据缓冲区复制到所述应页缓存中,读写操作结束;(B.7)根据前端索引节点F2找到待读写文件在块设备BD2的物理位置分布信息,并结合待读写文件的逻辑偏移得到待读写文件在块设备上的物理位置,再根据该物理位置和读写数据长度得到读写区间;(B.8)对前端索引节点F2和块设备BD2作哈希计算得到第一后端索引节点索引值,并分配读写请求对象R2和文件锁对象L2,所述读写请求对象R2包含待读写文件在块设备上的物理位置、读写数据长度、页缓存位置和进程号,所述文件锁对象L2包含读写区间和读写类型;(B.9)Domain域向VMM发送包含第一后端索引节点索引值、读写请求对象R2和文件锁对象L2的超级调用请求;(B.10)VMM依据第一后端索引节点索引值在后端索引节点哈希链表中查找对应的后端索引节点B2;(B.11)依据文件锁对象L2中的读写类型和读写区间,判定该文件锁对象L2是否与后端索引节点B2的文件锁列表某一文件锁对象L0有冲突,若有冲突,则进入步骤(B.12),否则,进入(B.13);(B.12)将读写操作请求对象R2和文件锁对象L2挂载在冲突的文件锁对象L0的冲突链表上,结束;(B.13)将读写操作请求R2挂载到块设备BD2的读写请求队列,将文件锁对象L2挂载到后端索引节点B2的文件锁链表上,结束;所述读写文件执行子步骤具体为:(C.1)若块设备BD3的读写请求队列非空,则VMM执行块设备BD3的读写请求队列中的当前读写请求对象R3;(C.2)执行完毕时释放R3对应的文件锁对象L3,更新页缓存的标志位,向读写请求对象R3的来源Domain域发出软中断以唤醒R3中的进程号指定的读写进程;(C.3)若释放的文件锁对象L3的冲突链表非空,则激活当前文件锁对象L4,判定文件锁对象L4是否与其对应的后端索引节点B4的文件锁队列存在冲突,若有冲突,进入步骤(C.4),否则,进入步骤(C.5);(C.4)被激活的文件锁对象L4及其对应的读写请求对象R4挂载在冲突的文件锁对象L`0的冲突链表上,返回步骤(C.1);(C.5)将读写请求对象R4挂载到块设备BD3的读写请求队列,将文件锁对象L4挂载到后端索引节点B4的文件锁链表上,返回步骤(C.1);所述关闭文件步骤具体为:(D.1)将待关闭文件对应的前端索引节点F4的使用计数减一,若F4的使用计数为0,则释放F4;(D.2)Domain域的进程对待关闭文件的前端索引节点F3和块设备BD4作哈希计算得到第二后端索引节点索引值;(D.3)Domain域向VMM发出包含第二后端索引节点索引值的超级调用请求;(D.4)VMM依据第二后端索引节点索引值在后端索引节点哈希链表中查找对应的后端索引节点B5,对后端索引节点B5的使用计数减一, 若后端索引节点B5的使用计数为0,则释放后端索引节点B5。
地址 430074 湖北省武汉市洪山区珞喻路1037号