高速共享内存数据收发系统的制作方法

文档序号:18009230发布日期:2019-06-25 23:47阅读:147来源:国知局
高速共享内存数据收发系统的制作方法

本发明涉及一种基于共享内存的高速且支持灵活配置的数据交互收发系统,主要应用于嵌入式系统、通信系统以及航空机载设备中以共享内存区域为交互基础的高速数据通信中间件的设计与开发领域。



背景技术:

进程间的数据交换和共享是一种非常重要和实用的技术。进程间通讯的方式有多种,常用的有共享内存、命名管道和匿名管道、发送消息等,另外还可以通过socket接口等间接实现进程间的数据通讯任务。以上这几种方法各有优缺点,具体到在进程间进行大数据量数据的快速交换问题上,由于管道和socket套接字的使用需要有网卡的支持,不适用于跨节点以及缺少以太网的应用环境,因此可以不予考虑。这样,可供选择的通讯方式主要就是共享内存和发送消息两种。对于消息传输方式,接收方程序在消息的响应函数中通过随消息传递的参数完成对数据的接收,主要有阻塞式和非阻塞式两种机制。阻塞式的消息发送方式在发出消息后不是马上返回,而是在接收方的消息响应函数处理完之后才能返回,并能够得到返回结果,在此期间发送方程序将被阻塞。而非阻塞式在发出消息后马上返回,其后语句能够被立即执行,但是无法获取消息的执行结果。在消息机制中,由于涉及多次数据拷贝,数据传输效率较低,因此并不适合交换数据量较大的应用场景,另外当数据传输过于频繁时还有可能导致数据的丢失。相比之下,共享内存有着明显的优势。

共享内存是一种在进程之间共享和传递数据的高效解决方案,可以以较小的开销获取较高的性能。不同进程之间共享的内存区域通常是允许这些进程访问的同一段物理内存,共享它的进程可以将这段共享内存区域连接到自己的地址空间中,然后对共享内存区域进行数据读写操作。如果某个进程向共享内存区域写入数据,所做的改动将立即影响到可以访问同一段共享内存的另一个进程。共享内存方式在收发数据的过程中只拷贝两次数据,一次将输入内容拷贝到共享内存区,另一次从共享内存区拷贝到输出文件,可以实现进程之间的高效数据传输。目前,共享内存已经成为进程间、多核间、以及跨处理器节点之间的高效数据通信方式,在嵌入式系统、通信系统、机载航电系统开发等领域广泛应用。

共享内存是操作系统内的不同进程之间常用的数据通信方式,使用过程中首先由接收方进程调用操作系统提供的接口申请一块共享内存区域,然后将共享内存映射到接收方进程的地址空间中;接下来发送方进程也将共享内存地址映射到自己的地址空间中;完成共享内存地址映射后,发送方进程与接收方进程可以像操作本地内存地址一样利用该区域进行信息交换。由于没有同步机制,在通过共享内存进行数据收发时,需要参与通信的进程双方协商控制在合适的时机对共享内存区域进行读写。共享内存也是实现核间通信的一种高速数据通信方式。对于在通信系统以及机载航电设备中广泛使用的数字信号处理器(digitalsignalprocessor,dsp),通常需在多核之间进行高速数据通信,并在多核内部实现并行高速信号数据处理。通过共享内存方式,在多个核之间可以访问同一块内存,同时借助中断或核间通信寄存器实现核间共享数据读取操作的同步控制。tms320c6678是目前在通信和航空机载领域广泛应用的一款高性能8核处理器,通过合理划分共享内存区域,可以实现核间的高速数据共享与传输,例如通过主核(0核)创建共享内存,并将数据写入内存,然后通过核间消息通信将内存地址发送给从核;由从核(1到7核)接收主核的通知,读取各自对应的内存地址中的数据,并完成数据的高速并行处理。

此外,共享内存也是实现多处理器之间高速数据通信的有效手段。外部存储器接口(externalmemoryinterface,emif)是dsp器件上的一种常用接口,可以实现dsp与不同类型的外部存储器(sram、flash、rom等)的连接。另外,通过emif还可以实现dsp与现场可编程门阵列(field-programmablegatearray,fpga)处理器的无缝连接,使得dsp可以和fpga很方便地进行大量数据传输,从而使fpga平台充当高速数据协处理器或高速数据传输接口的角色。另外借助rapidio高速互联总线,还可以实现跨芯片、跨系统的高速共享内存数据通信。rapidio是一种高性能、低引脚数、基于数据包交换的互连体系结构,是为满足高性能嵌入式系统需求而设计的一种开放式互连技术标准,主要应用于嵌入式系统内部互连,支持芯片到芯片、板到板间的通讯,还支持嵌入式设备的背板连接。rapidio直接输入输出(directinput/output,dio)模式通过外设通信总线可以实现跨处理器的高速共享内存通信,支持在ppc、dsp和fpga三种芯片之间进行大规模的数据传输,有效的应对了高性能嵌入式系统在可靠性和互联性方面的挑战。目前世界主流的嵌入式厂商都已经支持rapidio技术。

共享内存使得进程间的数据交互以直接访问内存的方式实现,具有简单方便的特点,已经成为进程间、核间通信、芯片间、以及系统之间主要的高速数据通信方式。然而目前的相关方案在实现高速共享内存的数据收发过程中还存在诸多不足,例如:

1、缺少灵活的共享内存配置机制。目前在创建共享内存空间时只是简单的明确共享内存区域的大小,缺少更加灵活和规范的共享内存区域配置机制,例如交互的数据包大小、是否需要缓冲以及缓冲包数量等,同时也缺少基于这些配置信息的共享内存交互控制。另外,对于跨处理器的共享内存通信,数据收发双方也缺乏支持接收远端配置的能力。

2、缺少共享内存同步控制机制。目前的共享内存机制主要以传输数据为目的,在完成共享内存区域申请以及地址映射后,缺少对于共享内存区域读写的同步互斥机制。开发人员在使用共享内存进行进程间通信时,往往还需要附加额外的数据结构或借助其他的手段,如信号量、互斥锁和读写锁等来实现进程间对共享内存区域的读写同步。

3、缺少更加高效的共享内存收发控制机制。目前基于共享内存的数据通信方法并没有对共享内存区域进一步划分,而是作为一个完整区块进行管理,发送方写入后需要等接收方读取数据后才能再次写入,数据的发送效率受接收方读取速度及处理能力的影响,因此需要一种更细粒度的管理机制,来实现更加高速的共享内存数据收发。



技术实现要素:

本发明的目的针对上述现有技术存在的不足之处,提供一种综合考虑共享内存中数据收发双方的同步机制,支持对基于共享内存通信机制进行灵活配置,并能够通过对共享内存区域进行细粒度管理来实现数据缓冲并支持高效数据收发传输的高速共享内存数据收发系统,以克服现有基于共享内存的数据收发方法缺少灵活的共享内存配置机制,缺少共享内存同步控制机制,缺少更加高效的共享内存收发控制机制的问题。

本发明的上述目的可以通过以下措施来达到,一种高速共享内存数据收发系统,包括:发送端的数据发送者和实现其数据发送控制的发送逻辑控制单元、接收端的数据接收者和实现其数据接收控制的接收逻辑控制单元,以及对发送逻辑控制单元和接收逻辑单元进行远程配置的管理端的系统数据收发配置管理器,其特征在于:接收逻辑控制单元内的共享内存区域为实现发送端和接收端数据收发交互的共享物理内存区域;共享内存管理器根据数据接收者的申请信息实现对共享内存区域的划分与管理;接收逻辑控制单元内的数据接收控制器实现共享内存区域内收发数据是否有效的判断,并向数据接收者发送数据到达通知信号来告知数据接收者读取数据,同时控制数据接收者从正确的共享内存区域读取数据,数据接收控制器通过调用内部的环形缓冲区接收复位控制器完成接收端初始上电时的复位操作;发送逻辑控制单元首先调用地址转换器完成共享内存地址到本地地址的转换,同时由内部的配置信息注册器将数据发送者录入的共享内存信息存入数据发送配置信息表,然后由数据发送控制器将数据发送者发送的数据写入接收逻辑控制单元内的共享内存区域的正确地址中,并向其内部的数据接收控制器发送中断信号,通知接收端数据已到达;数据发送控制器根据共享内存区域的状态向数据发送者发送流控反馈信号,通知数据发送者进行流量控制,从而实现数据发送过程的运行控制,数据发送控制器通过调用内部的环形缓冲区发送复位控制器实现发送端初始上电时的复位操作;发送逻辑控制单元和接收逻辑控制单元内的配置命令解析器接收管理端的系统数据收发配置管理器下发的配置命令,实现对各自内部信息的远程配置操作。

本发明相比于现有技术具有如下特点及有益效果:

本发明采用发送端中实现数据发送控制的发送逻辑控制单元、接收端中实现数据接收控制的接收逻辑控制单元,以及对发送逻辑控制单元和接收逻辑单元进行远程配置的管理端的系统数据收发配置管理器完成数据发送者和数据接收者之间的数据交互和收发信息配置,提供了更加灵活的共享内存申请及管理机制,允许用户按照所需交互数据的长度、缓冲数据包的数量来进行共享内存申请,改善了现有共享内存申请方式仅指定共享内存块大小的单调申请形式以及缺少灵活的共享内存配置机制的问题,实现了对共享内存区域的更加细粒度的划分与管理,同时支持基于这些配置信息的共享内存划分与交互控制。在交互系统的发送端和接收端还支持对管理端发送的配置信息的解析,从而提供了对于跨处理器的共享内存数据交互通信的支持。

本发明采用接收逻辑控制单元内的数据接收控制器实现共享内存区域内收发数据是否有效的判断,并向数据接收者发送数据到达通知信号来告知数据接收者读取数据,同时控制数据接收者从正确的共享内存区域读取数据;采用数据发送控制器根据共享内存区域的状态向数据发送者发送流控反馈信号,通知数据发送者进行流量控制,实现数据发送过程的运行控制。通过数据发送控制器和数据接收控制器对共享内存的数据写入、读取、同步以及状态交互进行控制,保障数据发送端和接收端高速、可靠的数据交互过程正常运行。使用过程中,数据发送者只需要向指定的接收者标识发送数据,无需通过额外的信号量、互斥锁等来实现同步控制,同时可以通过接收流控反馈信号来控制数据发送的速率;数据接收者只需要通过等待数据接收控制器发送的数据到达通知信号,并通过指定的接收者标识读取数据即可,使用方法简单。数据发送者和使用者无需关注数据发送过程中的内存地址跳转和同步控制机制,从而降低了开发人员的使用难度。

本发明采用数据发送控制器和数据接收控制器实现共享内存区域的读写控制,环形缓冲区发送复位控制器实现发送端初始上电时的复位操作,环形缓冲区接收复位控制器实现接收端初始上电时的复位操作,通过循环缓冲区的共享内存管理机制,按照用户指定的数据包大小与缓冲包数量将共享内存区域形成循环缓冲区来实现数据收发操作。数据发送者在发送数据时按照顺序依次向循环缓冲区的不同块内写入数据,而数据接收者则按照顺序依次读取。当数据接收者读取数据不及时,可以对数据发送者发送的数据进行缓存,不需要写入一个数据后就必须等待读取者读取后才能写入,仅当缓冲区满时才向发送者发送流控信号触发其进行流量控制。本发明提供了更加高效和灵活的共享内存数据收发控制机制,从而能够支持具有不同数据处理能力的发送者和接收者之间的共享内存数据交互。

本发明采用数据发送控制器和数据接收控制器实现对共享内存区域的占用状态判断和数据的写入和读取控制,通过判断共享内存占用状态位和记录读写位置信息的方式,保障所发送的数据顺序到达,并被数据接收者按序接收。本发明的数据收发过程具备流量控制机制,在检测到共享的环形缓冲区满时触发数据发送者进行流量控制,保障发送的数据不被丢失。在发送端或接收端出现重新上电或重启等情况时,借助环形缓冲区发送复位控制器和环形缓冲区接收复位控制器可以实现发送端和接收端的自动复位,能够恢复到正常的运行状态,从而实现更加可靠的共享内存数据交互控制。

本发明适用于实现操作系统内多进程间、核间以及多处理器之间的高速共享内存数据收发,可以广泛的应用于如嵌入式系统、通信系统和机载航电设备中以共享内存区域为交互基础的高速数据通信中间件的设计与开发领域。

附图说明

下面结合附图和实施例对本发明进一步说明。

图1是本发明高速共享内存数据收发系统的组成结构示意图。

图2是图1的共享内存区域结构划分示意图。

图3是图1的共享内存形成的环形缓冲区的读写过程示意图。

图4是图1的数据发送控制器的运行处理流程图。

图5是图1的数据接收控制器的运行处理流程图。

下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

具体实施方式

参阅图1。在以下描述的一个最佳实施例中,一种高速共享内存数据收发系统,包括:发送端的数据发送者和实现其数据发送控制的发送逻辑控制单元、接收端的数据接收者和实现其数据接收控制的接收逻辑控制单元,以及对发送逻辑控制单元和接收逻辑单元进行远程配置的管理端的系统数据收发配置管理器。接收逻辑控制单元内的共享内存区域为实现发送端和接收端数据收发交互的共享物理内存区域;共享内存管理器根据数据接收者的申请信息实现对共享内存区域的划分与管理;接收逻辑控制单元内的数据接收控制器实现共享内存区域内收发数据是否有效的判断,并向数据接收者发送数据到达通知信号来告知数据接收者读取数据,同时控制数据接收者从正确的共享内存区域读取数据,数据接收控制器通过调用内部的环形缓冲区接收复位控制器完成接收端初始上电时的复位操作;发送逻辑控制单元首先调用地址转换器完成共享内存地址到本地地址的转换,同时由内部的配置信息注册器将数据发送者录入的共享内存信息存入数据发送配置信息表,然后由数据发送控制器将数据发送者发送的数据写入接收逻辑控制单元内的共享内存区域的正确地址中,并向其内部的数据接收控制器发送中断信号,通知接收端数据已到达;数据发送控制器根据共享内存区域的状态向数据发送者发送流控反馈信号,通知数据发送者进行流量控制,从而实现数据发送过程的运行控制,数据发送控制器通过调用内部的环形缓冲区发送复位控制器实现发送端初始上电时的复位操作;发送逻辑控制单元和接收逻辑控制单元内的配置命令解析器接收管理端的系统数据收发配置管理器下发的配置命令,实现对各自内部信息的远程配置操作。

发送逻辑控制单元包含接收来自数据发送者的发送数据,向数据发送者抛出流控反馈信号,并连接环形缓冲区发送复位控制器和数据发送配置信息表的数据发送控制器,接收数据发送者录入的共享内存信息,并连接地址转换器、配置命令解析器和数据发送配置信息表的配置信息注册器。数据发送配置信息表存储共享内存和发送配置信息;配置信息注册器将数据发送者录入的共享内存信息经过地址转换器实现远端共享内存地址到本地地址的转换后存入数据发送配置信息表;数据发送控制器通过读取数据发送配置信息表中的信息,对共享内存区域进行数据发送控制,并完成共享内存区域数据读写操作;环形缓冲区发送复位控制器在发送端上电或重启时找到正确的数据写入位置;配置命令解析器接收来自管理端的系统数据收发配置管理器下发的配置命令。

接收逻辑控制单元包含向数据接收者发送数据到达通知信号和接收到的数据,并连接环形缓冲区接收复位控制器和共享内存区域划分配置表的数据接收控制器,接收来自数据接收者的共享内存区域申请,并连接配置命令解析器以及共享内存区域划分配置表的共享内存管理器。共享内存区域划分配置表存储共享内存区域划分及分配信息;共享内存管理器对共享内存区域进行管理,根据数据接收者的共享内存区域申请信息进行共享内存分配,并将共享内存区域划分及分配信息存入共享内存区域划分配置表;数据接收控制器通过读取共享内存区域划分配置表中的信息,对共享内存区域进行数据读取控制,并完成共享内存区域数据读写操作;环形缓冲区接收复位控制器在接收端上电或重启时找到正确的数据读取位置;配置命令解析器接收来自管理端的系统数据收发配置管理器下发的配置命令。

数据发送控制器和数据接收控制器通过循环缓冲区的共享内存管理机制,按照用户指定的数据包大小与缓冲包数量将共享内存区域形成循环缓冲区来实现数据收发操作。数据发送控制器在完成数据发送后向数据接收控制器发送中断信号,数据发送者在发送数据时按照顺序依次向循环缓冲区的不同块内写入数据,而数据接收者则按照顺序依次读取。

接收逻辑控制单元将数据发送者发送的数据存储在共享内存区域中,当数据接收者读取数据不及时,可以对数据发送者发送的数据进行缓存。共享内存区域由接收逻辑控制单元进行管理,由数据接收者根据应用需求或系统规划向接收逻辑控制单元内的共享内存管理器进行共享内存区域申请,并将申请得到的共享内存区域地址、事件号、以及申请时指定的数据包大小、缓冲数据包数量信息告知数据发送者,由数据发送者向发送逻辑控制单元进行注册。在本实施例中,数据发送者和数据接收者一一对应,即对于每个数据接收者,其申请的共享内存区域信息,只能告知一个数据发送者,申请得到的共享内存区域仅支持对应的数据发送者和数据接收者进行数据收发交互。通过建立多对数据接收者和数据发送者,可以实现多个基于共享内存的数据收发通道。

在可选的实施例中,数据接收者首先向接收逻辑控制单元申请共享内存区域,申请的参数包括:接收的数据包大小和需要缓冲的数据包数量,由其内部的共享内存管理器根据当前的共享内存状态进行内存和事件号分配,完后将分配结果存入共享内存区域划分配置表中,并向数据接收者返回数据读取标识号、分配的共享内存区域地址和事件号,同时数据接收者将分配的共享内存区域地址和事件号告知数据发送者,在接收逻辑控制单元内将分配得到的共享内存按照环形缓冲区进行读取控制;然后数据接收者等待接收逻辑控制单元内部的数据接收控制器抛出的数据到达信号,当接收到信号时,通过数据读取标识号读取数据;数据发送者将接收者申请共享内存时指定的接收数据包大小、需要缓冲的数据包数量,以及分配得到的共享内存区域地址和事件号向发送逻辑控制单元注册,其内部的配置信息注册器调用地址转换器将共享内存区域地址转换成本地地址,完后将上述信息存入数据发送配置信息表,并向数据发送者返回一个数据写入标识号,在发送逻辑控制单元内将分配得到的共享内存按照环形缓冲区进行写入控制;数据发送者通过数据写入标识号进行数据发送,发送逻辑控制单元内的数据发送控制器通过查找数据发送配置信息表,获取与该标识号对应的共享内存区域地址、缓冲包数量、数据包大小信息,找到正确的共享内存区域地址写入数据以及状态控制信息,完后向数据接收者发送中断信号,通知其数据已经写完,在初始上电或者重启时,数据发送控制器调用环形缓冲区发送复位控制器,找到正确的环形缓冲区位置写入数据;在数据发送者发送数据时,当数据发送控制器检测到所有环形缓冲区全部写满时,即已经缓冲了用户指定的最大包数据,而数据接收者仍未读取,此刻数据发送控制器将向数据发送者抛出流控反馈信号,告知数据发送者缓冲区已满,暂时无法发送数据,应该进行发送数据流量控制;接收逻辑控制单元的数据接收控制器在接收到数据发送控制器发送的中断信号后,通过检测共享内存的状态信息,判断是哪个接收者的数据到达,并通过查找共享内存区域划分配置表找到对应的数据读取标识号,并向该标识号对应的数据接收者抛出数据到达通知;数据接收者在接收到数据接收控制器抛出的数据到达通知后,通过数据读取标识号读取数据,数据接收控制器通过查找共享内存区域划分配置表,获取对应的共享内存区域地址、缓冲包数量、数据包大小信息,以及当前的读取状态,从正确的共享内存区域的缓冲区块中读取数据,反馈给数据接收者,从而完成数据读取,在初始上电或重启时,数据接收控制器调用环形缓冲区接收复位控制器,找到正确的环形缓冲区位置读取数据。

为了支持更加灵活的核间、以及跨处理器的共享内存数据交互,在可选的实施例中,接收逻辑控制单元和发送逻辑控制单元支持对远端配置命令的解析,在进行数据交互前,事先明确数据接收者的数据读取标识号和数据发送者的数据写入标识号,而对于交互的数据包大小、缓存的数据包数量,以及共享内存的申请则统一由管理端进行远程配置完成。数据接收者直接等待数据读取标识号对应的数据到达信号,到达后通过该标识号读取数据,无需进行共享内存区域申请;数据发送者直接通过数据写入标识号发送数据,无需进行共享内存信息录入。接收逻辑控制单元内的共享内存区域申请和发送逻辑控制单元内的共享内存信息录入则由系统数据收发配置管理器进行远程配置完成。管理端的系统数据收发配置管理器首先向接收逻辑控制单元内的配置命令解析器发送共享内存区域申请命令,参数包含:数据读取标识号、数据包大小、需要缓冲的数据包数量,接收逻辑控制单元内的配置命令解析器解析出参数后,通过共享内存管理器进行内存申请,并向系统数据收发配置管理器返回申请得到的共享内存地址和事件号;然后系统数据收发配置管理器向发送逻辑控制单元内的配置命令解析器发送配置命令,参数包含:数据写入标识号、数据包大小、需要缓冲的数据包数量、事件号、申请得到的共享内存地址,发送逻辑控制单元内的配置命令解析器解析出参数后,通过配置信息注册器调用地址转换器完成共享内存地址到本地地址的转换,并存入数据发送配置信息表。

参阅图2。发送端和接收端之间的共享内存区域分为用于记录读写运行状态的系统状态控制数据区和用于数据接收者申请以进行数据收发的系统有效收发数据区。系统状态控制数据区又分为共1024字节的事件状态记录区、共1024字节的读状态记录区和共1024字节的写状态记录区三部分。在接收端,当数据接收者向接收逻辑控制单元申请共享内存区域时,在接收逻辑控制单元内部将同时为其分配一段共享内存和一个事件号,每个事件号与一个数据接收者和数据发送者一一绑定。

在事件状态记录区中,每个事件号对应一个事件状态检测区,用于记录该事件对应的数据接收者是否有数据到达,每个事件状态检测区4个字节,事件状态记录区共支持256个事件。初始时,每个事件状态检测区的值都为0,当事件i(255≥i≥0)对应的状态检测区值为1时,表示该事件对应的数据接收者有数据到达,当状态检测区值为0时,表示该事件对应的数据接收者无数据到达。

在读状态记录区中,每个事件号对应一个读状态区,用于记录该事件对应的数据接收者已经读取完哪个缓冲区的数据,每个事件读状态区4个字节,读状态记录区共支持256个事件的读状态记录。初始时,每个事件读状态区的值都为0xffffffff,表示该事件对应的数据接收者还未从环形缓冲区读取数据。事件i对应的读状态区的值x(数据接收者申请的缓冲区数≥i≥1,x!=0xffffffff)表示该事件对应的数据接收者已经完成第x个缓冲区内的数据读取。

在写状态记录区中,每个事件号对应一个写状态区,用于记录该事件对应的数据发送者已经写完哪个缓冲区的数据,每个事件写状态区4个字节,写状态记录区共支持256个事件的写状态记录。初始时,每个事件写状态区的值都为0xffffffff,表示该事件对应的数据发送者还未向环形缓冲区写入数据。事件i对应的写状态区的值x(数据接收者申请的缓冲区数≥i≥1,x!=0xffffffff)表示该事件对应的数据发送者已经完成第x个缓冲区内的数据写入。

系统有效收发数据区为实现数据接收者和数据发送者数据收发的有效内存区域。当数据接收者向接收逻辑控制单元申请共享内存区域时,由共享内存管理器根据当前的空闲内存区大小、以及申请者所需的数据包大小、缓冲包数量信息,判断是否存在足够大小的内存区域(即:申请的共享内存区域大小=数据包大小×缓冲包数量),如果存在则从空闲内存区域中为数据接收者划分共享内存区域,并将分配得到的共享内存区域基地址反馈给数据接收者。对于每个数据接收者申请得到的共享内存区域,在接收逻辑控制单元和发送逻辑控制单元内部按照环形缓冲区的形式进行管理。在可选的实施例中,数据接收者a申请了8kb的共享内存区域,并划分为8个缓冲区,每个缓冲区1kb,分别为缓冲区1、缓冲区2、缓冲区3、...、缓冲区8,8个缓冲区按照编号递增的顺序依次排列,每个缓冲区的第一个字节为占用状态标记位,如果为1则表示该缓冲区为忙状态,即数据发送者已经写入数据,且未被接收者读取;如果为0则表示该缓冲区为空闲态,即数据接收者已经读取数据,且可以再次写入数据。在进行数据读写时按照环形进行操作,即写入数据时:先写缓冲区1,再写缓冲区2,直到缓冲区8,完后再返回写缓冲区1,依次循环;在进行数据读取时:先读取缓冲区1,再读取缓冲区2,直到缓冲区8,完后再返回读取缓冲区1,依次循环。

参阅图3。接收端的接收逻辑控制单元和发送端的发送逻辑控制单元对于数据接收者和数据发送者之间共享的内存区域按照环形缓冲区进行管理,并结合对应的事件的读状态区和写状态区的值实现读写控制。

如图(3a)所示,数据接收者申请了8个缓冲区,每个缓冲区1kb,共8kb的共享内存区域,对应的事件为i,接收逻辑控制单元和发送逻辑控制单元将8个缓冲区按照环形来进行管理。初始化后,事件i对应的读状态区和写状态区的值都为0xffffffff,并且所有的缓冲区都为空闲状态。在接收逻辑控制单元和发送逻辑控制单元通过判断事件对应的读状态区和写状态区的值是否为0xffffffff,来判断是否为第一次开始读写数据,如果为第一次,则接收逻辑控制单元内的数据接收控制器调用环形缓冲区接收复位控制器找到正确的第一次读取位置,即应从第几个缓冲区开始读数据,发送逻辑控制单元内的数据发送控制器调用环形缓冲区发送复位控制器找到正确的第一次写入位置,即应从第几个缓冲区开始写入数据。

如图(3b)所示,数据发送者开始写入数据,依次将数据写入1、2、3、4、5缓冲区,在完成每个缓冲区的写入数据时都需要更新事件i写状态区,用于记录数据发送者已经完成哪个缓冲区的写入,当前的事件i写状态区为5,即表示已经完成第5个缓冲区的数据写入。事件i读状态区为0xffffffff表示数据接收者还未开始读取数据。

如图(3c)所示,数据接收者开始读取数据,在完成每个缓冲区的数据读取后都需要更新事件i读状态区,用于记录数据接收者已经完成哪个缓冲区的读取,当前的事件i读状态区为1,即表示已经完成第1个缓冲区的数据读取。

如图(3d)所示,数据发送者继续按照循环缓冲区的顺序依次写入数据,事件i写状态区为1,表示数据发送者已经完成第一个缓冲区的数据写入;事件i读状态区为4,表示数据接收者已经完成第4个缓冲区的数据读取。

如图(3e)所示,事件i读状态区和写状态区的值都为7,并且8个缓冲区都已有有效数据,表示数据接收者已经完成第7个缓冲区的数据读取,数据发送者在循环一圈后又将数据写入第7个缓冲区,此刻数据接收者将依次读取第8个缓冲区的数据,如果此刻数据发送者再写入数据时,检测到第8个缓冲区的数据未被数据接收者读取,即第8个缓冲区的占用状态位为1,此刻将无法写入数据,发送逻辑控制单元内的数据发送控制器将向数据发送者抛出流控反馈信号,通知数据发送者进行流量控制。

如图(3f)所示,事件i写状态区和写状态区都为2,并且8个缓冲区都已空闲,表示数据接收者已经完成第2个缓冲区的数据读取,下一次将读取第3个缓冲区的数据,而此刻第3个缓冲区的占用状态为0,即不存在有效数据,所以此刻数据接收者进入等待状态;此刻数据发送者已经完成第2个缓冲区的数据写入,下一次将在第3个缓冲区写入数据。

参阅图4。发送逻辑控制单元内的数据发送控制器在进行数据发送时的处理流程如下:s1:数据发送控制器获取数据发送者发送数据的标识号与待发送的数据;

s2:数据发送控制器根据标识号查询数据发送配置信息表,获取数据发送者注册的共享内存信息;

s3:数据发送控制器判断该数据发送者是否为初次发送数据,否则跳至s5获取应写入的缓冲区编号,是则继续;

s4:数据发送控制器调用环形缓冲区发送复位控制器进行复位处理,找到正确的环形缓冲区写入编号;

s5:数据发送控制器获取应写入的缓冲区编号,并计算对应的共享内存地址;

s6:数据发送控制器判断该编号对应缓冲区是否空闲,即缓冲区的占用状态位是否为0,否则向数据发送者抛出流控反馈信号,结束并退出,是则继续;

s7:数据发送控制器向接收端的共享内存写状态记录区记录当前写入数据的缓冲区编号;

s8:数据发送控制器向缓冲区写入发送的数据;

s9:数据发送控制器将缓冲区的占用状态位置为1;

s10:数据发送控制器将接收端的事件状态区中数据接收者对应的事件状态检测区置为1;

s11:数据发送控制器向接收端的数据接收控制器发送中断信号,完成数据发送处理并退出。

参阅图5。接收逻辑控制单元内的数据接收控制器在进行数据接收时的处理流程如下:t1:数据接收控制器判断中断信号是否有效,无效则继续循环判断,有效则继续;

t2:数据接收控制器扫描共享内存中的事件状态记录区,获取事件状态记录区中值为1的事件状态检测区编号;

t3:数据接收控制器向该事件对应的数据接收者抛出数据读取信号,触发接收者读取数据,并将事件状态检测区的值清为0;

t4:数据接收控制器获取数据接收者提供的数据读取标识号,并根据标识号查询数据发送配置信息表,获取申请时的共享内存信息;

t5:数据接收控制器判断该数据接收者是否为初次读取数据,否则跳至t7获取应读取的缓冲区编号,是则继续;

t6:数据接收控制器调用环形缓冲区接收复位控制器进行复位处理,找到正确的应读取的缓冲区编号;

t7:数据接收控制器获取应读取的缓冲区编号,并计算对应的内存地址;

t8:数据接收控制器判断该缓冲区内的数据是否有效,即缓冲区的占用状态位是否为1,否则跳至s1继续判断中断信号是否有效,是则继续;

t9:数据接收控制器在共享内存中的读状态记录区中记录当前读取数据的缓冲区编号;

t10:数据接收控制器读取缓冲区内的数据,并将读取到的数据返回给数据接收者;

t11:数据接收控制器将该缓冲区的占用状态位置为0,并跳至s1继续判断中断信号是否有效。

以上结合附图对本发明进行了详细描述,但需要指出的是,上述实例所描述的是仅为本发明的优选实例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化,比如可以结合具体的实现改变处理流程和处理顺序、可以选设计算过程中的不同参数来实现本发明的技术方法。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。

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