多VxWorks主机共享访问存储介质的方法与流程

文档序号:17440940发布日期:2019-04-17 04:45阅读:426来源:国知局
多VxWorks主机共享访问存储介质的方法与流程

本发明具体涉及一种多vxworks主机共享访问存储介质的方法。



背景技术:

随着经济技术的发展,vxworks文件系统已经得到了越来越广泛的应用。

目前,市面上常用的vxworks文件系统主要是基于vxworks平台自带的dosfs、hrfs以及开源的exfat等文件系统。但是,这类文件系统一般都只能实现单主机情况下的文件系统操作;一旦执行多主机共享访问存储介质,由于每个主机的文件系统相互独立,因此该共享访问将有极大的概率造成存储介质数据的损坏或文件读写的失败。同时,在共享访问时,由于共享访问的文件系统相互独立,因此系统单主机在进行硬盘的操作读写时,其他主机无法获取到相关的文件信息,从而造成后续的读写异常等问题。



技术实现要素:

本发明的目的在于提供一种能够实现多主机共享访问存储介质,而且方法简单、可靠和科学的多vxworks主机共享访问存储介质的方法。

本发明提供的这种多vxworks主机共享访问存储介质的方法,包括如下步骤:

单主机文件系统操作的队列化,用于将单主机文件系统的操作按照队列的形式进行排队操作;

多主机共享访问的队列线程仲裁,通过采用多主机通信的方式对多主机的队列线程进行仲裁;

文件共享层处理,通过在用户操作库和内核驱动层之间增加共享层,无需改变系统标准操作接口即可对存储介质进行共享访问,该共享机制对上层应用软件完全透明。

所述的单主机文件系统操作的队列化,具体为通过vxworks系统内部的msgq消息机制和信号量机制将每个读写操作通过消息发送到读写操作队列线程,队列线程按照先进先出的原则处理接收到的文件系统操作。

所述的多主机共享访问的队列线程仲裁,具体为多主机之间设计通信协议,采用srio接口的doorbell进行通信,利用doorbell携带的主机状态、操作命令等信息实现多主机之间对于存储介质操作状态的实时交互,从而保证任何时刻均只有单主机在对存储介质进行访问操作。

在单主机获取读写权限后需要进行分区表更新,确保目前获取的文件系统信息是最新的;同时,其他主机放弃读写权限后也需要对分区表更新,确保对文件系统的操作能够同步到对方主机处。

当单次读写数据块大于事先设定的第一阈值时,将读写数据块的大小拆分为事先设定的大小为第二阈值的块并进行多次读写,从而避免单主机读写大文件导致其他主机长时间不能获取读写权限,使多主机操作时各方速度均衡。

所述的文件共享层处理,具体为在标准操作函数库与内核驱动层之间增加共享操作层,在其中实现本方法所需要的额外操作,使得用户仅采用习惯的操作函数即可利用本方法实现的功能。

本发明提供的这种多vxworks主机共享访问存储介质的方法,通过设置单主机文件系统操作的队列化、多主机共享访问的队列线程仲裁和文件共享层处理,解决了多主机多任务共享访问硬盘中出现的读写冲突、文件损坏、分区表损坏等问题,而且使得任意主机对硬盘的操作,其他主机能够及时获取文件更改信息,从而实现多主机对共享存储介质上的文件操作信息的同步。

附图说明

图1为本发明方法的方法流程示意图。

图2为本发明的文件系统结构图。

图3为本发明的多主机仲裁结构图。

具体实施方式

如图1所示为本发明方法的方法流程示意图:本发明提供的这种多vxworks主机共享访问存储介质的方法,包括如下步骤:

单主机文件系统操作的队列化,用于将单主机文件系统的操作按照队列的形式进行排队操作;具体为通过vxworks系统内部的msgq消息机制和信号量机制将每个读写操作通过消息发送到建立在各主机上的读写操作队列线程,队列线程按照先进先出的原则处理接收到的文件系统操作;

多主机共享访问的队列线程仲裁,通过采用多主机通信的方式对多主机的队列线程进行仲裁;具体为多主机之间设计通信协议,采用srio接口的doorbell进行通信,利用doorbell携带的主机状态、操作命令等信息实现多主机之间对于存储介质操作状态的实时交互,从而保证任何时刻均只有单主机在对存储介质进行访问操作;其他主机重新获取读写权限后需要进行分区表更新,确保目前获取的文件系统信息是最新的;同时,其他主机任意主机放弃读写权限后也需要对分区表更新,确保对文件系统的操作能够同步到其他主机处;当单次读写数据块大于事先设定的第一阈值时,将读写数据块的大小拆分为事先设定的大小为第二阈值的块并进行多次读写,从而避免单主机读写大文件导致其他主机长时间不能获取读写权限,使多主机操作时各方速度均衡。

在具体实施时,对多个主机的队列线程进行仲裁,需要多个主机间有必要的通信方式,本系统中多主机之间有doorbell进行通信,doorbell除了可以发送中断外,还可以携带2个字节的信息,可以通过设置这2个字节的不同数据来实现多个主机之间的申请读写权限、放弃读写权限、报告己方状态、反馈申请读写权限、反馈放弃读写权限等命令交互。通过doorbell命令交互,可以确保任何时刻都只有单主机在对硬盘进行访问。单主机获取读写权限后需要进行分区表更新(分区表下载),确保目前获取的文件系统信息是最新的;同样,其他主机放弃读写权限后也需要对分区表更新(分区表上传),确保对文件系统的操作能够同步到其他主机处。此外为避免单主机读取大文件导致其他主机长时间不能获取读写权限,当读写buffer较大时候,将其拆分成16m大小的buffer操作,确保其他主机能够及时获取读写权限,实现多主机共享操作;

所述的文件共享层处理,具体为在标准操作函数库与内核驱动层之间增加共享操作层,在其中实现本方法所需要的额外操作,使得用户仅采用习惯的操作函数即可利用本方法实现的功能;

在具体实施时,需要增加如下共享层操作:userfs_creat、userfs_delete、userfs_open、userfs_close、userfs_read、userfs_write、userfs_ioctl,这些操作除了执行原有文件系统操作外,还要执行单主机文件系统操作队列化操作和多主机仲裁操作。在共享层中为底层共享存储介质创建块设备盘符定义为“/usrfs”,当用户创建块设备时,比如“/vxfs”,共享层将所有对“/vxfs”的操作都映射到对“/usrfs”操作上。用户端只需要执行针对“/vxfs”盘符的creat、delete、open、close、read、write、ioctl等操作即可操作针对“/usrfs”盘符的userfs_creat、userfs_delete、userfs_open、userfs_close、userfs_read、userfs_write、userfs_ioctl功能。

如图2所示为本发明的文件系统结构图:如图左右两边可以认为是两台vxworks主机,其访问流程为标准文件接口->共享操作层接口->文件系统处理队列->共享存储介质。其中文件系统处理队列部分需要两台主机之间进行必要的通信来实现握手、主从仲裁以及分区表同步操作。

如图3所示为本发明的多主机仲裁结构图:

其中,单主机操作队列化具体实施过程:

(1)用户执行文件系统操作,打开信号量,然后将本次操作的参数通过msgq消息发送到队列线程中,等待队列线程将读写结果反馈;

(2)队列线程收到文件系统操作后,通过多主机仲裁机制,按照队列先进先出的策略执行文件系统操作,并将每次操作结果通过msgq消息反馈给用户操作函数;

(3)用户操作函数收到队列线程发送的反馈结果后,释放信号量,将文件系统操作结果反馈给上级后,继续接受下次函数响应。

多主机仲裁方式的具体实施过程(以ab两个主机举例说明):

1)a主机需要读写文件,向b主机发送“申请读写权限”命令,若收到b主机“反馈申请读写权限”表示b主机已收到a主机信息,则申请成功,从盘内同步文件分区表信息,开始读写操作;若1s后仍未收到b主机反馈,判断b主机断线,进入单主机模式操作;

2)a主机做完一次读写操作后,若b主机申请读写权限,则a主机发送“放弃读写权限”,若收到b主机“反馈放弃读写权限”表示b主机已收到a主机信息,则放弃读写权限成功,将a主机的文件分区表信息下发到盘内,a主机进入等待状态,b主机进入读写操作状态;若1s后仍未收到b主机反馈,判断b主机断线,进入单主机模式操作;

3)a主机检查读写队列中是否还有读写操作,若有,则申请读写权限,完成第1步操作;否则进入空闲等待状态;

4)若b主机一直没有申请读写权限,a主机每隔一段时间将分区信息下发给硬盘,并通知b主机及时获取最新文件分区表信息。

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