CN101861568A - 用于交换数据的方法和系统 - Google Patents
用于交换数据的方法和系统 Download PDFInfo
- Publication number
- CN101861568A CN101861568A CN200880116894A CN200880116894A CN101861568A CN 101861568 A CN101861568 A CN 101861568A CN 200880116894 A CN200880116894 A CN 200880116894A CN 200880116894 A CN200880116894 A CN 200880116894A CN 101861568 A CN101861568 A CN 101861568A
- Authority
- CN
- China
- Prior art keywords
- data
- module
- consumer
- cycle
- producer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
- Radio Transmission System (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
提供一种用于在生产者与消费者之间交换数据的方法。该方法包括用生产者写入数据而没有阻塞消费者并且无需等待对消费者的访问。该方法还包括用消费者读取数据而没有阻塞生产者并且无需等待对生产者的访问。在读取数据时,将该数据从生产者交换到消费者。
Description
技术领域
一般来说,本发明涉及生产者(producer)/消费者(consumer)软件,更具体来说,涉及用于在生产者与消费者之间交换数据的方法和系统。
背景技术
一般来说,I/O扫描机制利用包括配置成使用共享存储缓冲器通过模块交换数据的生产者和消费者的软件实现。此外,数据交换通常要求通过底板(backplane)的握手机制,以便允许对数据的访问。具体来说,生产者要求对将数据写入共享存储缓冲器的访问,而消费者要求对从共享存储缓冲器读取数据的访问。相应地,在数据交换期间,至少某些扫描机制要求生产者和/或消费者等待对数据的访问。具体来说,握手机制可要求多次读访问或写访问。例如,通常实现共享存储器信号量(semaphore)、如Peterson算法,以便确保对共享存储器数据缓冲器的相干(coherent)访问。但是,这类信号量往往要求反复尝试以获得访问。此外,在生产者和/或消费者中之一捕获最新数据时,某些已知的扫描机制要求临界区域或超时。计算这类等待时间或超时会很困难并且容易出错。
相应地,至少某些已知的扫描机制向扫描模块发送命令,以便准备控制器访问。但是,这种机制往往要求该模块延迟其正常处理以读取该命令,由此引起数据交换的延迟。此外,至少某些已知的扫描机制使用硬件机制来帮助访问控制。但是,硬件机制可能安装和维护起来成本高和/或费时。
发明内容
在一方面,提供一种用于在第一模块与第二模块之间交换数据的方法。该方法包括在第一模块生成数据,其中第一模块配置成允许第二模块实质连续地访问数据。该方法还包括在第二模块读取数据,其中第二模块配置成允许第一模块实质连续地生成数据。该方法最后包括在读取数据时在第一模块与第二模块之间交换数据。
在另一方面,提供一种系统。该系统包括控制器以及配置成通过共享存储器接口与控制器交换数据的输入/输出模块。数据通过下列步骤进行交换:用第一模块生成数据,在第二模块读取数据,并且在读取数据时将数据从第一模块交换到第二模块。第一模块配置成允许第二模块实质连续地访问数据;而第二模块配置成允许第一模块实质连续地生成数据。
在又一方面,提供安装在输入/输出模块中的计算机程序。计算机程序包括配置成指示输入/输出模块在第一模块与第二模块之间交换数据的至少一个代码段。数据通过下列步骤进行交换:在第一模块生成数据,其中第一模块配置成允许第二模块实质连续地访问数据;在第二模块读取数据,其中第二模块配置成允许第一模块实质连续地生成数据;以及在读取数据时在第一模块与第二模块之间交换数据。
附图说明
图1是包括控制器和输入/输出模块的扫描机制的示范实施例。
图2和图3是可用于通过使用图1所示扫描机制交换数据的示范算法的流程图。
具体实施方式
本发明提供一种系统,该系统包括控制器以及配置成通过共享存储器接口与控制器交换数据的输入/输出(I/O)模块。在一个实施例中,该系统包括输入到I/O模块的计算机程序,并且包括用于交换数据的算法。该系统还可包括读取和操作计算机程序的处理器。该算法的技术效果是控制生产者和消费者,以便促进在控制器与I/O模块之间交换数据。该算法使生产者能够异步且相干地写入新数据,而不阻塞和等着协调与消费者的访问。消费者也异步读取最新的生产者数据,而不阻塞或等着生产者对数据的访问。在示范实施例中,系统不需要专用硬件。
此外,用于生产者/消费者交换的数据结构仅包括生产者状态字节、消费者状态字节和多个不同的数据缓冲槽(buffer bin),如4个不同的数据缓冲槽。对于生产者,该算法确保缓冲槽中至少之一始终可用于写入最近的生产数据,使得生产者不等待对消费者的访问。对于消费者,该算法使消费者能够即时锁定最新产生的数据缓冲器以读取数据。在示范实施例中,该算法仅要求2个共享存储器读/写操作以协商对适当数据缓冲槽的访问,由此改进在通过底板进行扫描时的性能。
应当注意,虽然针对扫描机制描述本发明,但是本领域技术人员要领会,本发明也可适用于在生产者与消费者之间交换数据的任何系统和/或设备。此外,虽然针对处理器和计算机程序描述本发明,但是本领域技术人员要领会,本发明也可适用于配置成在生产者与消费者之间交换数据的任何系统和/或程序。本文所使用的术语“处理器”并不局限于本领域中称作处理器的那些集成电路,而是广义地表示计算机、处理器、微控制器、微型计算机、可编程逻辑控制器、专用集成电路和其它可编程电路。处理器可以是计算机的组成部分,所述计算机可包括例如软盘驱动器或压缩盘只读存储器(CD-ROM)驱动器的装置,用于从例如软盘、CD-ROM、磁光盘(MOD)或数字通用光盘(DVD)的计算机可读介质读取数据。
图1是包括控制器104和I/O模块108的扫描机制100的示范实施例。在该示范实施例中,I/O模块108控制多个远程模块112的I/O数据。具体来说,I/O模块108实现共享存储器接口,并且包括用于每个已配置远程模块112的4缓冲器生产者/消费者数据集。例如,如果用户将网络配置成包括50个远程模块112,则I/O模块108向各模块112提供用于输入数据交换的50个生产者/消费者数据集以及用于输出数据交换的另外50个生产者/消费者数据集。各生产者/消费者数据集包括生产者状态字节、消费者状态字节和4个数据缓冲槽。
在该示范实施例中,扫描机制包括计算机程序中包含的算法,其使生产者能够生成新数据并使消费者能够查看和/或读取最新生成的生产者数据,而无需等着协商访问。相应地,生产者和消费者可异步并在任何时间间隔进行操作。在一个实施例中,生产者周期比消费者周期快。在备选实施例中,消费者周期比生产者周期快。在另一个实施例中,生产者周期和消费者周期交替进行。在各实施例中,生产者和消费者都不要求任何临界区域或超时。更具体来说,不要求生产者状态和消费者状态的共享存储器控制值的读/写是原子的。相应地,对这些值的生产者和消费者访问可以是并发的并且是重叠的。该算法使共享存储器访问最小,以便优化性能。此外,该算法仅需要共享存储器的单字节写入和单字节读取以协商缓冲器访问。
一般来说,4缓冲器扫描对于各生产者/消费者组合要求4个不同的共享存储器缓冲槽。因此,输入扫描需要4个缓冲槽,而输出扫描需要另外4个缓冲槽。缓冲器的偏移位置可在模块启动/配置期间确定,使得在实际扫描操作期间,缓冲器可简单地通过缓冲器索引值0、1、2或3来表示。例如,具有12字节的输入扫描数据的模块可将其4缓冲器组定位在共享存储器中在偏移0x10000处。在这个示例中,由于各输入缓冲器的数据大小为0x0C,所以4缓冲器定位在偏移0x10000、0x1000C、0x10018和0x10024处。然后,在配置期间确定这些偏移,并映射4缓冲器扫描索引值0、1、2和3。
控制基本4缓冲器扫描操作需要共享存储器中最少5个控制子字段。具体来说,控制子字段中的4个仅由生产者写入,包括最后周期值、槽选择符(selector)、bin0子字段和bin1子字段。剩余的控制子字段是仅由消费者写入的周期值。可定义附加字段,以便增强I/O扫描操作。
一般来说,生产者和消费者在bin0与bin1之间交替。相应地,在操作期间,消费者使用一个缓冲槽中锁定的缓冲器值,而生产者采用新产生的缓冲器来更新其它缓冲槽。在各生产周期期间,生产者找到可用的I/O扫描缓冲器,向其写入生产数据,并且在共享存储器中呈现该缓冲器的索引值。在一个实施例中,生产者将新产生的缓冲器索引值写入当前没有被消费者锁定的缓冲槽字段。此外,生产者在各生产周期期间读取和保存消费者周期值。当生产者从前一生产周期看到消费者周期值变化时,生产者必须在其下一生产周期转换到其它缓冲槽。相应地,如果消费者周期值在生产者正对bin0进行产生时发生变化,则下一产生将针对bin1。如果bin1是活动的,则生产者转换到bin0。生产者写入槽选择符,以便指明它当前正使用哪个缓冲槽(bin0或者bin1)。该算法允许生产者随每个所观测消费周期不断转换其缓冲槽和槽选择符状态。消费者观测生产者状态,并且从锁定的缓冲槽挑选最新生产缓冲器。
4缓冲器握手算法仅要求两个共享存储器访问来协调下一生产/消费缓冲器。读取或写入实际数据还需要第三共享存储器访问。相应地,生产者必须将新数据写入空闲缓冲器位置,用新缓冲器索引写入生产者状态字段,并且读取消费者状态字段以确定下一生产周期的动作。消费者写入新消费者状态字段以开始消费周期,读取生产者状态以识别消费缓冲器,并且从该消费缓冲器读取数据。
如果仅需要5个控制子字段,则生产者状态字段和消费者状态字段对于各状态字段可减小到单个字节。使用更大的DWORD大小提供用于缓冲槽就绪位的空间,以便为特定的锁定缓冲器赋予缓冲器有效指示。如果不需要缓冲器特定细节,则这些就绪位可用将bin0值设置成等于bin1值的机制取代,以便指明生产者未就绪。使用DWORD状态大小还为将来的增强提供备用位。
图2和图3是用于生产者与消费者之间的4缓冲器扫描的算法的流程图。在该示范实施例中,该算法包括生产者算法208(图2所示)和消费者算法212(图3所示)。在生产者算法208期间,当前缓冲器变量、前一缓冲器变量和锁定缓冲器变量是生产者的局部实例变量,而不是共享存储器字段。这些变量记录4个扫描缓冲器索引值0、1、2或3中之一。生产者的局部实例数据还记录各扫描缓冲器的当前使用中(in-use)状态。在第一生产周期之前,全部4个扫描缓冲器可用(不在使用中)。
相应地,在该示范实施例中,生产者找到可用(不在使用中的)扫描缓冲器,并且将缓冲器索引值保存(216)到当前缓冲器变量。然后,生产者将新生产数据写入(220)共享存储器中的当前缓冲器偏移位置。通过将当前缓冲器值和锁定缓冲器值放入当前槽选择符的适当缓冲槽,创建新生产者状态。还设置适当的最后消费者周期值字段。生产者算法208还包括将生产者状态写入共享存储器(225),并且从该共享存储器读取消费者状态(226)。
在该示范实施例中,生产者算法208确定(228)消费者周期值自最后生产周期以来是否改变。如果消费者周期值已改变(232)(指明当前缓冲槽的锁定),则对下一生产周期切换(toggle)(236)生产者的槽选择符。相应地,除了当前缓冲器索引和前一缓冲器索引之外,所有生产缓冲器被标记为(240)‘可用’。此外,锁定缓冲器值设置成(244)等于当前缓冲器值,以便保存新的消费者锁定缓冲器值。如果自最后生产周期以来没有检测到(248)消费者周期开始(即,前一缓冲器的值等于锁定缓冲器的值),则前一缓冲器索引标记为(252)‘可用’,并且可在下一生产周期使用。此外,当前缓冲器索引标记为(256)‘不可用’(在使用中),并且不能在下一生产周期使用。另外,对下一生产周期将前一缓冲器值设置成(260)等于当前缓冲器值。
在消费者算法212期间,当前周期变量、前一周期变量和锁定周期变量是消费者的局部实例变量,而不是共享存储器字段。这些变量记录5个周期值1、2、3、4或5中之一。消费者的局部实例数据还记录各周期值的当前使用中状态。在第一消费周期之前,全部5个周期值可用(不在使用中)。
相应地,在该示范实施例中,消费者找到(264)‘可用’(不在使用中的)消费者周期值,并且将这个值保存到当前周期变量。消费者还用新消费者周期值将新消费者状态写入(268)共享存储器,并且从该共享存储器读取(272)生产者状态。然后,消费者算法212确定(276)新消费者周期值是否等于生产者状态中的最后消费者周期值。如果新消费者周期值不等于最后消费者周期值(280),则消费者从当前生产者槽选择符所指明的缓冲槽中检索(284)缓冲器索引。如果新消费者周期值等于最后消费者周期值(288),则生产者已经看到新的消费者周期,并且相应地切换其槽选择符。因此,消费者从不由当前生产者槽选择符所指明的缓冲槽中检索(292)缓冲器索引。
随后,消费者从缓冲器索引所指明的适当共享存储缓冲器偏移读取(296)生产者数据。消费者算法212确定(300)自最后消费者周期以来是否已经出现生产者周期(通过生产者状态的变化所指明)。如果生产者周期已经出现(304),则消费者将当前周期、前一周期和最后消费者周期值标记为(308)‘不可用’。此外,消费者将其余周期值标记为(312)‘可用’(不在使用中)。此外,锁定周期值设置成等于当前周期值,以便保存新的锁定周期值。如果前一生产者状态值等于当前生产者状态(生产者周期尚未出现(320)),则消费者在前一周期不等于锁定周期时将前一周期值标记为(324)‘可用’。此外,当前周期值标记为(328)‘不可用’(在使用中),并且不能在下一消费周期使用。此外,对下一消费周期将前一周期值设置成(332)等于当前周期值。
相应地,生产者算法208和消费者算法212使执行扫描握手所需的底板读/写访问最少。具体来说,生产者和消费者都只需要对4缓冲器底板握手的单次写入和单次读取以及实际I/O扫描数据的额外读取或写入。另外,该算法在软件实现中不需要任何超时和/或临界区域。
在该示范实施例中,生产者负责管理生产周期期间4个扫描缓冲器的可用性或者使用中状态。这种管理针对当前未用于生产的扫描缓冲器相对使对消费可用的缓冲器的可用性。为执行这种管理,生产者必须知道消费者当前已经锁定哪个缓冲器以及哪个缓冲器在最后生产周期中被使用。然后,生产者必须为当前生产周期挑选余下缓冲器中之一。进行这种选择由于生产者与消费者之间出现的竞态条件(racecondition)而有些复杂。竞态条件在生产者将新缓冲器值写入预期的当前生产缓冲槽时出现。当执行该生产写入时,消费者可能在同时锁定生产者正写入的同一缓冲槽并且还读取这个锁定缓冲槽中的缓冲器值。生产者不知道消费者在缓冲槽中实际看到哪个缓冲器值。生产者只知道它是刚写入的新生产缓冲器或者前一生产缓冲器。由于这种竞态条件,4缓冲器算法要求生产者假定两个缓冲器均在使用中(当前生产缓冲器和前一生产缓冲器均标记为在使用中,但是这两个其余缓冲器隐含地可供使用)。
例如,如果生产者先前已经在缓冲器1中产生新数据,并且现在在缓冲器2中产生数据,则在用值2更新当前缓冲槽之后,生产者检查消费者周期值并且看到消费者先前已经锁定同一缓冲槽。生产者这时必须假定缓冲器1和缓冲器2均在使用中,并且可能正在被消费。在后续生产周期,生产者随意将缓冲器0或缓冲器3用于新生产者数据。
在该示范实施例中,消费者状态中的消费者周期值字段旨在指明消费周期的出现。新消费周期通过在各消费周期的开始改变消费者周期值来指明。生产者在其下一生产周期看到该值变化,并且知道消费周期已经出现或者正在进行中。消费者必须处理随消费者周期值变化的几个问题。首先,消费者需要随每个消费周期改变周期值,但是它不能重复生产者在其前一生产周期中可能已经看到的值。因此,消费者必须跟踪在最后周期期间呈现了哪个消费者周期值。
其次,消费者不能使用当前在生产者状态最后消费者周期值字段中呈现的周期值。必须避免这个周期值,因此消费者可在后续消费者周期中正确比较生产者周期值和消费者周期值。如果使用这个值并且生产者在消费者再使用同一值之前没有循环到改变最后消费者周期值,则消费者会用消费者槽选择符子算法来挑选错误的缓冲槽。
最后,当消费者在生产者正写入新生产者状态的同时也写入新消费者周期值并读取生产者状态时,必须处理竞态条件。在这种情况下,消费者不肯定生产者看到了哪个消费者周期值。相应地,消费者必须假定当前周期值和前一周期值均在使用中,并且不可用于下一消费者周期。本质上,如上所述,这是生产者必须处理的相同竞态条件。
相对于消费者周期值,每个周期仅需要4个值来呈现唯一值。但是,由于要求避免生产者的最后消费者周期值,消费者周期值选择子算法需要5个周期值(值范围为1-5)。应当注意,消费者周期值1、2、3、4和5与缓冲槽无关,而只是向生产者指明新的消费者周期已经出现。
在该示范实施例中,要求生产者在每个生产周期期间将其看到的最新消费者周期值复制到生产者状态字段最后消费者周期值。消费者使用这个值来确定它应当从哪个缓冲槽进行读取。快速(fast)生产者可在消费者读取生产者状态之前切换其槽选择符。相应地,为在消费者周期期间进行正确的缓冲槽选择,消费者将生产者状态最后消费者周期值的值与当前消费者周期值进行比较。如果这些值不相等,则消费者使用生产者状态槽选择符值所指明的缓冲槽。但是,如果这些周期值相等,则消费者知道生产者在消费者读取其生产者状态值之前已经完成另一周期。因此,生产者的槽选择符从预计位置进行切换,并且消费者必须使用其它缓冲槽中的锁定缓冲器。
相应地,本系统提供定期更新其所产生数据并向消费者指明最新所产生缓冲器的生产者。此外,消费者定期锁定生产缓冲器,使得它可相干地读取所有数据。生产者使用共享存储器中两个缓冲槽中之一来指明最新生产缓冲器索引值(缓冲器0-3)。生产者每次仅向一个槽写入新生产缓冲器值,并且使用生产者槽选择符字段来指明当前哪个槽是活动的。当消费者想要访问最新产生的缓冲器时,消费者写入新的消费者周期值,以便指明新消费周期的开始。通过这种动作,消费者命令生产者停止将新生产缓冲器写入当前槽,并且在其下一生产周期转换到其它槽。这有效地锁定所选槽以免其它生产周期更新,并允许消费者读取所选槽并且将其缓冲器值用于消费。
相应地,该算法提供一种比先前软件实现更快的I/O扫描机制。这是优于先前算法的技术改进,但是它也将产生具有更快和更一致扫描时间的产品。
此外,在该示范实施例中,基本的4缓冲器算法包括与扫描机制100配合使用的若干增强。这些增强便于支持多个远程模块并且提高性能。具体来说,如果模块需要多个I/O缓冲器组,则多个组可在共享存储器中实现。各缓冲器组包括:单个生产者/消费者交换所需的基本字段,即消费者状态、生产者状态以及4个缓冲槽。这个基本组则在共享存储器中根据数据交换的需要被重复多次。生产者/消费者控制状态字段可布置在4个共享存储器阵列中,即输入消费者状态阵列、输入生产者状态阵列、输出消费者状态阵列和输出生产者状态阵列。
在该示范实施例中,术语“扫描索引值”指的是其中对I/O缓冲器组定位特定控制状态字段集合的阵列索引。例如,扫描索引值5表示对应生产者/消费者状态标志位于阵列索引5,其中4个控制阵列中的每个如下:
输入消费者状态=输入消费者偏移[5]
输入生产者状态=输入生产者偏移[5]
输出消费者状态=输出消费者偏移[5]
输出生产者状态=输出生产者偏移[5]
在该示范实施例中,系统起作用以控制多个远程I/O模块并将来自主控制器的扫描进行分割。相应地,对于各远程模块需要一组生产者和消费者状态控制字段。具体来说,在配置期间,该模块必须在共享存储器中为输入消费者、输入生产者、输出消费者和输出生产者创建4I/O控制阵列组。各阵列包含所有模块的生产者或消费者状态字段的列表。
在配置期间,该模块还必须识别各远程I/O模块的输入和输出数据缓冲器偏移。单个缓冲器偏移值指向4缓冲器扫描期间使用的4缓冲器阵列。数据大小值将指明各扫描缓冲器的大小,并且还隐含对阵列中各扫描缓冲器的偏移。例如,如果模块的输入数据大小为12字节,则输入缓冲器偏移必须指向各自位于缓冲器阵列中偏移0、12、24和36的4个12字节的缓冲器。这些缓冲器对应于4缓冲器扫描算法中的扫描缓冲器索引0、1、2和3。扫描算法和状态字段则可用于识别要使用哪个扫描缓冲器。
如果从模块支持根据配置(例如远程模块I/O扫描数据)动态分配的多个I/O缓冲器组,则本系统负责为4个控制状态阵列正确分配和呈现扫描索引值。由于I/O数据集可随各配置而改变,控制状态字段和对应扫描索引值可因各配置变化而被丢弃或添加。该系统负责正确处理控制状态字段的扫描索引值的指配。相应地,该系统尝试维持所指配的扫描索引值被封装在索引值的低范围中。因此,当配置添加新的I/O数据区域时,系统在状态阵列结束处分配新位置之前再使用先前被解除分配的扫描索引位置。这可要求该模块保持内部或专用扫描索引分配阵列,以便确定哪些扫描索引位置被分配而哪些是空闲的。
在该示范实施例中,消费者就绪位存在于消费者状态中,以便指明消费者是否就绪。生产者可使用各缓冲槽(bin0或bin1)中的缓冲槽就绪位来指明其就绪状态。生产者将为具有有效数据的各生产周期在缓冲槽中设置缓冲槽就绪位。如果生产者进入它尚未就绪的状态,则生产者必须在不设置缓冲槽就绪位的情况下执行另一生产周期,或者只是清除前一生产周期的缓冲槽中的缓冲槽就绪位。消费者根据它已经锁定供消费的缓冲槽中的缓冲槽就绪位来确定它正消费的生产数据是否有效。
主控制器将在第一输入扫描期间通过输入消费者状态指明它已就绪,并且在第一输出扫描期间用输出生产者状态指明输出就绪。当输出被禁用时,主控制器必须清除输出生产者状态的最新产生的缓冲槽中的缓冲槽就绪位,以便适当指明无效的输出数据。在利用RX3i系统的一个实施例中,主控制器将还不主张(deassert)底板RUN线。
类似地,从模块用其输入生产者状态来指明其第一生产周期期间输入数据是有效的。从模块还可用输出消费者状态中的消费者就绪位来指明它已准备消费输出。
在该示范实施例中,从模块在从模块的启动序列期间初始化特定字段。由主模块在模块配置之后立即对I/O扫描设置框中的其余字段取样。这提供在配置期间改变I/O扫描数据大小和位置的模块灵活性。如果主模块具有不随配置变化的静态数据大小,则整个I/O扫描设置框在启动序列期间被初始化一次。
该示范实施例还包括生成指示第一模块的生产周期的生产者状态,并且写入生产者状态以指明第二模块可从其读取数据的缓冲槽。该示范实施例还包括生成指示第二模块的消费周期的消费者状态,并且写入消费者状态以指明第一模块可向其写入数据的缓冲槽。
在一个实施例中,该方法包括在第一模块的第一生产周期期间生成数据,并且读取指示第二模块的消费周期的消费者状态,以便确定写入第二生产周期的生产数据的位置。在这个实施例中,该方法还包括在第一生产周期期间对多个缓冲槽中第一缓冲槽生成数据,并且在第二生产周期期间对多个缓冲槽中第二缓冲槽生成数据。
在另一实施例中,该方法包括在第二模块的第一消费者周期期间读取数据,并且读取指示生产周期的生产者状态,以便确定新生产数据是否可用于第二消费者周期。在这个实施例中,该方法还包括在第一消费周期期间从多个缓冲槽中第一缓冲槽读取数据,并且在第二消费周期期间从多个缓冲槽中第二缓冲槽读取数据。
本文所使用的、以单数形式所述且带有词“一个”或“一种”的要素或步骤应当被理解为不排除多个所述要素或步骤的情况,除非明确说明这种排除情况。此外,本发明中“一个实施例”的说法不是要被解释为排除同样结合了所述特征的其它实施例的存在。
提供用于在生产者与消费者之间交换数据的系统和方法的示范实施例。这些系统和方法并不局限于本文所述的具体实施例,而是可单独且独立于本文所述的其它组件来使用该系统的组件。此外,可单独且独立于本文所述的其它步骤来使用方法中所述的步骤。
虽然按照各种具体实施例描述了本发明,但是本领域技术人员要领会,在权利要求书的精神和范围之内,可经过修改来实施本发明。
Claims (20)
1.一种用于在第一模块与第二模块之间交换数据的方法,所述方法包括:
在所述第一模块生成数据,所述第一模块配置成允许所述第二模块实质连续地访问所述数据;
在所述第二模块读取所述数据,所述第二模块配置成允许所述第一模块实质连续地生成数据;以及
在读取所述数据时在所述第一模块与所述第二模块之间交换所述数据。
2.如权利要求1所述的方法,还包括:
生成指示所述第一模块的生产周期的生产者状态;以及
读取所述生产者状态,以便指明所述第二模块可从其读取所述数据的缓冲槽。
3.如权利要求1所述的方法,还包括:
生成指示所述第二模块的消费周期的消费者状态;以及
读取所述消费者状态,以便指明所述第一模块可向其写入所述数据的缓冲槽。
4.如权利要求1所述的方法,还包括:
在所述第一模块的第一生产周期期间生成数据;以及
读取指示所述第二模块的消费周期的消费者状态,以便确定写入第二生产周期的生产数据的位置。
5.如权利要求4所述的方法,还包括:
在所述第一生产周期期间对多个缓冲槽中第一缓冲槽生成数据;以及
在所述第二生产周期期间对多个缓冲槽中第二缓冲槽生成数据。
6.如权利要求1所述的方法,还包括:
在所述第二模块的第一消费者周期期间读取数据;以及
读取指示生产周期的生产者状态,以便确定新生产数据是否可用于第二消费者周期。
7.如权利要求6所述的方法,还包括:
在所述第一消费周期期间从多个缓冲槽中第一缓冲槽读取数据;以及
在所述第二消费周期期间从所述多个缓冲槽中第二缓冲槽读取数据。
8.一种系统,包括:
控制器;以及
配置成通过共享存储器接口与所述控制器交换数据的输入/输出模块,其中所述数据通过下列步骤进行交换:
用第一模块生成所述数据;
在第二模块读取所述数据;以及
在读取所述数据时将所述数据从所述第一模块交换到所述第二模块,其中所述第一模块配置成允许所述第二模块实质连续地访问所述数据;以及所述第二模块配置成允许所述第一模块实质连续地生成所述数据。
9.如权利要求8所述的系统,其中,所述数据还通过下列步骤进行交换:
生成指示所述第一模块和所述第二模块中至少之一的周期的状态;以及
读取所述状态,以便指明所述第二模块可从其读取数据的第一缓冲槽以及所述第一模块可对其生成数据的第二缓冲槽中至少之一。
10.如权利要求8所述的系统,其中,所述数据还通过下列步骤进行交换:
在所述第一模块的第一生产周期期间写入数据;以及
读取指示所述第二模块的消费周期的消费者状态,以便确定写入第二生产周期的生产数据的位置。
11.如权利要求10所述的系统,其中,所述数据还通过下列步骤进行交换:
在所述第一生产周期期间将数据写入多个缓冲槽中第一缓冲槽;以及
在所述第二生产周期期间将数据写入多个缓冲槽中第二缓冲槽。
12.如权利要求8所述的系统,其中,所述数据还通过下列步骤进行交换:
在所述第二模块的第一消费者周期期间读取数据;以及
读取指示生产周期的生产者状态,以便确定新生产数据是否可用于第二消费者周期。
13.如权利要求12所述的系统,其中,所述数据还通过下列步骤进行交换:
在所述第一消费周期期间从多个缓冲槽中第一缓冲槽读取数据;以及
在所述第二消费周期期间从多个缓冲槽中第二缓冲槽读取数据。
14.一种安装在输入/输出模块中的计算机程序,所述计算机程序包括至少一个代码段,所述代码段配置成指示所述输入/输出模块在第一模块与第二模块之间通过下列步骤交换数据:
在所述第一模块生成数据,所述第一模块配置成允许所述第二模块实质连续地访问所述数据;
在所述第二模块读取所述数据,所述第二模块配置成允许所述第一模块实质连续地生成数据;以及
在读取所述数据时在所述第一模块与所述第二模块之间交换所述数据。
15.如权利要求14所述的计算机程序,其中,所述计算机程序还包括至少一个代码段,所述代码段配置成指示所述输入/输出模块:
生成指示所述第一模块的生产周期的生产者状态;以及
读取所述生产者状态,以便指明所述第二模块可从其读取所述数据的缓冲槽。
16.如权利要求14所述的计算机程序,其中,所述计算机程序还包括至少一个代码段,所述代码段配置成指示所述输入/输出模块:
生成指示所述第二模块的消费周期的消费者状态;以及
读取所述消费者状态,以便指明所述第一模块可向其写入所述数据的缓冲槽。
17.如权利要求14所述的计算机程序,其中,所述计算机程序还包括至少一个代码段,所述代码段配置成指示所述输入/输出模块:
在所述第一模块的第一生产周期期间生成数据;以及
读取指示所述第二模块的消费周期的消费者状态,以便确定写入第二生产周期的生产数据的位置。
18.如权利要求17所述的计算机程序,其中,所述计算机程序还包括至少一个代码段,所述代码段配置成指示所述输入/输出模块:
在所述第一生产周期期间对多个缓冲槽中第一缓冲槽生成数据;以及
在所述第二生产周期期间对多个缓冲槽中第二缓冲槽生成数据。
19.如权利要求14所述的计算机程序,其中,所述计算机程序还包括至少一个代码段,所述代码段配置成指示所述输入/输出模块:
在所述第二模块的第一消费者周期期间读取数据;以及
读取指示生产周期的生产者状态,以便确定新生产数据是否可用于第二消费者周期。
20.如权利要求19所述的计算机程序,其中,所述计算机程序还包括至少一个代码段,所述代码段配置成指示所述输入/输出模块:
在所述第一消费周期期间从多个缓冲槽中第一缓冲槽读取数据;以及
在所述第二消费周期期间从所述多个缓冲槽中第二缓冲槽读取数据。
Applications Claiming Priority (4)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US11/856,210 US7945745B2 (en) | 2007-09-17 | 2007-09-17 | Methods and systems for exchanging data |
| US11/856,210 | 2007-09-17 | ||
| US11/856210 | 2007-09-17 | ||
| PCT/US2008/069762 WO2009038856A1 (en) | 2007-09-17 | 2008-07-11 | Methods and systems for exchanging data |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN101861568A true CN101861568A (zh) | 2010-10-13 |
| CN101861568B CN101861568B (zh) | 2013-06-26 |
Family
ID=39810155
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN2008801168943A Active CN101861568B (zh) | 2007-09-17 | 2008-07-11 | 用于交换数据的方法和系统 |
Country Status (8)
| Country | Link |
|---|---|
| US (1) | US7945745B2 (zh) |
| EP (1) | EP2203816A1 (zh) |
| JP (1) | JP5469066B2 (zh) |
| CN (1) | CN101861568B (zh) |
| AU (1) | AU2008302681A1 (zh) |
| BR (1) | BRPI0815868A2 (zh) |
| RU (1) | RU2475818C2 (zh) |
| WO (1) | WO2009038856A1 (zh) |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN106227613A (zh) * | 2016-08-02 | 2016-12-14 | 秦龙 | Linux下“生产者‑消费者”模型的改进方法 |
| CN107741883A (zh) * | 2017-09-29 | 2018-02-27 | 武汉斗鱼网络科技有限公司 | 一种避免线程阻塞的方法、装置及计算机设备 |
| CN109412821A (zh) * | 2017-08-16 | 2019-03-01 | 阿里巴巴集团控股有限公司 | 消息处理方法和装置以及电子设备 |
| US20250252039A1 (en) * | 2024-02-07 | 2025-08-07 | Samsung Electronics Co., Ltd. | System-on-chip for synchronizing data between processors and memory sharing method thereof |
Families Citing this family (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8869169B2 (en) * | 2007-04-30 | 2014-10-21 | Accenture Global Services Limited | Alternately processing messages |
| US8286191B2 (en) * | 2009-05-14 | 2012-10-09 | International Business Machines Corporation | Dynamically composing data stream processing applications |
| RU2504027C1 (ru) * | 2012-07-03 | 2014-01-10 | Государственное казенное образовательное учреждение высшего профессионального образования Академия Федеральной службы охраны Российской Федерации (Академия ФСО России) | Способ создания кодовой книги и поиска в ней при векторном квантовании данных |
| CN105068947B (zh) * | 2015-08-20 | 2018-01-16 | 浪潮软件集团有限公司 | 一种基于驱动层处理串口通信的方法 |
| CN106815950B (zh) * | 2017-01-11 | 2020-02-18 | 浪潮金融信息技术有限公司 | 一种基于单模块的智慧柜员机驱动方法及其系统 |
| US20190138242A1 (en) * | 2017-11-08 | 2019-05-09 | Raytheon Company | Lock-free asynchronous buffer |
Family Cites Families (24)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| DE2445814A1 (de) | 1974-09-25 | 1976-04-08 | Siemens Ag | Einrichtung zur korrektur und/oder ergaenzung von aus einem mechanischen datentraeger entnehmbaren informationen |
| JPS5636709A (en) | 1979-09-04 | 1981-04-10 | Fanuc Ltd | Numerical control system |
| US4727538A (en) | 1986-05-20 | 1988-02-23 | American Telephone And Telegraph Company, At&T Bell Laboratories | Information transfer method and arrangement |
| KR910002325B1 (ko) | 1987-01-12 | 1991-04-11 | 후지쓰 가부시기가이샤 | 데이타 교환용 데이타 전송 버퍼회로 |
| JPH01129345A (ja) * | 1987-11-13 | 1989-05-22 | Toshiba Corp | マルチプロセッサ・システム |
| US4998245A (en) | 1987-12-17 | 1991-03-05 | Matsushita Electric Industrial Co., Ltd. | Information transmission system having collective data transmission and collection devices |
| US5224213A (en) * | 1989-09-05 | 1993-06-29 | International Business Machines Corporation | Ping-pong data buffer for transferring data from one data bus to another data bus |
| JP3075809B2 (ja) | 1991-11-12 | 2000-08-14 | 株式会社東芝 | データ伝送システムにおける受信データ転送制御装置 |
| RU2058041C1 (ru) * | 1992-05-26 | 1996-04-10 | Александр Сергеевич Илюкевич | Устройство для обмена данными двух процессоров через общую память |
| US5367650A (en) | 1992-07-31 | 1994-11-22 | Intel Corporation | Method and apparauts for parallel exchange operation in a pipelined processor |
| JPH06348656A (ja) * | 1993-06-04 | 1994-12-22 | Yamatake Honeywell Co Ltd | プロセッサ間データ転送方法 |
| JP2859178B2 (ja) * | 1995-09-12 | 1999-02-17 | 日本電気通信システム株式会社 | プロセッサ間データ転送方式及びプロセッサ間データ転送用リングバッファメモリ |
| KR100186229B1 (ko) | 1995-12-08 | 1999-05-15 | 김광호 | 타임스위칭 및 회의통화 기능 통합 구현장치 |
| US6516360B1 (en) * | 1999-09-23 | 2003-02-04 | Qualcomm Incorporated | Method and apparatus for buffering data transmission between producer and consumer |
| US6412032B1 (en) | 1999-09-30 | 2002-06-25 | Rockwell Automation Technologies, Inc. | Interface for industrial controller network card |
| US6330961B1 (en) | 2000-04-15 | 2001-12-18 | Anita Arriola Borja | Forearm mounted storage pouch for securing articles and utilizing a personal communicator |
| US6779055B2 (en) * | 2001-06-20 | 2004-08-17 | Freescale Semiconductor, Inc. | First-in, first-out memory system having both simultaneous and alternating data access and method thereof |
| US7243354B1 (en) | 2002-04-08 | 2007-07-10 | 3Com Corporation | System and method for efficiently processing information in a multithread environment |
| US6985977B2 (en) * | 2002-08-30 | 2006-01-10 | National Instruments Corporation | System and method for transferring data over a communication medium using double-buffering |
| US6944728B2 (en) * | 2002-12-23 | 2005-09-13 | Intel Corporation | Interleaving memory access |
| US7447812B1 (en) * | 2004-03-23 | 2008-11-04 | Integrated Device Technology, Inc. | Multi-queue FIFO memory devices that support flow-through of write and read counter updates using multi-port flag counter register files |
| US7254654B1 (en) * | 2004-04-01 | 2007-08-07 | Emc Corporation | Split-FIFO multi-station data transfer system |
| US7650386B2 (en) * | 2004-07-29 | 2010-01-19 | Hewlett-Packard Development Company, L.P. | Communication among partitioned devices |
| WO2006092807A1 (en) | 2005-03-04 | 2006-09-08 | Hewlett-Packard Development Company, L.P. | A method and apparatus for facilitating pipeline throughput |
-
2007
- 2007-09-17 US US11/856,210 patent/US7945745B2/en active Active
-
2008
- 2008-07-11 JP JP2010524894A patent/JP5469066B2/ja active Active
- 2008-07-11 RU RU2010115341/08A patent/RU2475818C2/ru not_active IP Right Cessation
- 2008-07-11 WO PCT/US2008/069762 patent/WO2009038856A1/en not_active Ceased
- 2008-07-11 EP EP08781679A patent/EP2203816A1/en not_active Ceased
- 2008-07-11 BR BRPI0815868A patent/BRPI0815868A2/pt not_active IP Right Cessation
- 2008-07-11 AU AU2008302681A patent/AU2008302681A1/en not_active Abandoned
- 2008-07-11 CN CN2008801168943A patent/CN101861568B/zh active Active
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN106227613A (zh) * | 2016-08-02 | 2016-12-14 | 秦龙 | Linux下“生产者‑消费者”模型的改进方法 |
| CN106227613B (zh) * | 2016-08-02 | 2019-03-15 | 重庆贵飞科技有限公司 | Linux下“生产者-消费者”模型的改进方法 |
| CN109412821A (zh) * | 2017-08-16 | 2019-03-01 | 阿里巴巴集团控股有限公司 | 消息处理方法和装置以及电子设备 |
| CN109412821B (zh) * | 2017-08-16 | 2021-09-10 | 阿里巴巴集团控股有限公司 | 消息处理方法和装置以及电子设备 |
| CN107741883A (zh) * | 2017-09-29 | 2018-02-27 | 武汉斗鱼网络科技有限公司 | 一种避免线程阻塞的方法、装置及计算机设备 |
| WO2019061619A1 (zh) * | 2017-09-29 | 2019-04-04 | 武汉斗鱼网络科技有限公司 | 一种避免线程阻塞的方法、装置及计算机设备 |
| US20250252039A1 (en) * | 2024-02-07 | 2025-08-07 | Samsung Electronics Co., Ltd. | System-on-chip for synchronizing data between processors and memory sharing method thereof |
Also Published As
| Publication number | Publication date |
|---|---|
| US20090077324A1 (en) | 2009-03-19 |
| WO2009038856A1 (en) | 2009-03-26 |
| AU2008302681A1 (en) | 2009-03-26 |
| RU2010115341A (ru) | 2011-10-27 |
| JP2010539592A (ja) | 2010-12-16 |
| CN101861568B (zh) | 2013-06-26 |
| US7945745B2 (en) | 2011-05-17 |
| BRPI0815868A2 (pt) | 2018-03-20 |
| JP5469066B2 (ja) | 2014-04-09 |
| EP2203816A1 (en) | 2010-07-07 |
| RU2475818C2 (ru) | 2013-02-20 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN101861568B (zh) | 用于交换数据的方法和系统 | |
| JP5039954B2 (ja) | 文字列タグに記録されたタグ名を用いて制御装置のデータに間接アクセスする、システム及び方法 | |
| US20080114474A1 (en) | Event triggered data capture via embedded historians | |
| JP2001134526A (ja) | 論理区画クラスタに資源を割り当てる方法および装置 | |
| CN109656886B (zh) | 基于键值对的文件系统实现方法、装置、设备和存储介质 | |
| JP2003241900A (ja) | ストレージエリアネットワークシステムのアクセス制御方法およびストレージエリアネットワークシステムならびにネットワークスイッチ | |
| JP2016009225A (ja) | データベース管理装置、データベース管理方法、プログラムおよび記録媒体 | |
| JP7381290B2 (ja) | 計算機システム及びデータの管理方法 | |
| WO2020170401A1 (ja) | 情報処理装置、情報処理方法及び情報処理プログラム | |
| US10305740B2 (en) | System and method for performing mass renaming of list of items at run-time with variable differentiation factor | |
| Allmaier et al. | Parallel graph generation algorithms for shared and distributed memory machines | |
| US20070266199A1 (en) | Virtual Address Cache and Method for Sharing Data Stored in a Virtual Address Cache | |
| JPH07104830B2 (ja) | コンピュータ・システム及びコンピュータ・システムを作動させる方法 | |
| CN101582037A (zh) | 共享基本输入输出系统的方法及其刀锋服务器与计算机 | |
| CN112035486A (zh) | 分区表的分区建立方法、装置和设备 | |
| CN107679093B (zh) | 一种数据查询方法及装置 | |
| JP6774147B2 (ja) | 制御装置 | |
| JP2016018269A (ja) | 情報処理装置、情報処理方法及びプログラム | |
| KR20240103708A (ko) | 스토리지 시스템, 스토리지 장치 및 그 동작 방법 | |
| JP2019186617A (ja) | 制御システムおよび制御方法 | |
| JP2780662B2 (ja) | マルチプロセッサシステム | |
| JP4305221B2 (ja) | ゲートウェイ装置 | |
| EP2738681A1 (en) | Electronic device, device access method, and program | |
| RU2263951C2 (ru) | Способ обработки цифровых данных в запоминающем устройстве и запоминающее устройство для осуществления способа | |
| JP3557338B2 (ja) | プラント監視制御装置及び該装置のプログラムを記録した記録媒体 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| C06 | Publication | ||
| PB01 | Publication | ||
| C10 | Entry into substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| C14 | Grant of patent or utility model | ||
| GR01 | Patent grant | ||
| CP01 | Change in the name or title of a patent holder |
Address after: New York State, USA Patentee after: Intelligent platform Co.,Ltd. Address before: New York State, USA Patentee before: General Electric Co. |
|
| CP01 | Change in the name or title of a patent holder | ||
| CP02 | Change in the address of a patent holder |
Address after: Virginia Patentee after: Intelligent platform Co.,Ltd. Address before: New York State, USA Patentee before: Intelligent platform Co.,Ltd. |
|
| CP02 | Change in the address of a patent holder |