使用信号量的高效fifo通信的制作方法

文档序号:6431355阅读:123来源:国知局
专利名称:使用信号量的高效fifo通信的制作方法
技术领域
本发明涉及把数据元素写入到共享FIFO缓冲区中的方法和设备、从共享FIFO缓冲区读取数据元素的方法和设备、计算机系统以及对应的计算机程序产品。
在计算机系统中,处理器的协调是一个重要的问题。在集中式系统中通常用信号量来解决许多进程协调例如互斥和管理可重用的消耗性资源之类的问题。
互斥问题在并发处理中是一个重要的问题。多个进程经常在一个或多个处理器上并发执行。这些处理器通常共享像存储设备、输入/输出设备和存储器这样的资源。当两个或多个进程需要对相同的数据和存储器进行操作时,就有必要提供一种机制来强制实施对资源的互斥访问。要求这种机制允许在任一时刻只有一个进程有权访问一个源。
通常信号量被用作调解对共享资源的访问的同步机制。信号量可以有相关联的值,这个值通常被设置为该信号量所约束的资源的数量。每当有进程获得该信号量时,信号量的值被减1。在信号量的值达到0之后,获取该信号量的新尝试都会被阻塞住,直到该信号量被一个处理器释放并且该信号量的值被加1为止。
信号量是非负整型变量,对其只允许进行P-和V-操作。V-操作由生产者进程用来指示已经产生了供消费者进程所用的信息。P-操作由消费者进程在其请求由生产者进程所产生的信息时使用。P-操作用来进入互斥,V-操作用来退出互斥。在US4,928,222中可以找到对信号量和P-、V-操作的非常图形化的解释。
通常,所谓的生产者-消费者问题出现在并发处理中。生产者-消费者问题的基础是数据的生产者必须具有这样的装置,该装置用于把数据存储着直至消费者就绪为止,并且消费者禁止试图消费不在那里的数据。看来生产者仅在消费者准备消费时才产生数据是不切实际的。如果这些进程中的任一个提早到达了,它都被要求去等待。但是,如果消费者或生产者的数据速率在程序执行期间有变化,或者如果生产者或消费者的数据速率不同,那么缓冲数据就成为必然。缓冲区是一段内存,生产者和消费者都可以对其进行访问。如果缓冲区大到足以处理高峰时产生的数据,那么生产者和消费者就都维持用于数据传输的稳定的高平均速率,而不必担心由于突发的高峰而导致的故障。
当并发进程以生产者-消费者对加以链接并共享一个有限的缓冲区-缓冲区中的每个部分对于各个进程都是可访问的时,较慢的消费者可能大大延迟整个系统。在一些消费者被阻塞的情形中,由相关的生产者所产生的消息将挤满整个缓冲区并将因此而阻塞整个系统。为了避免这种行为,已知的方法是为每个生产者-消费者对保留足够数量的、用于通常工作的部分,并把缓冲区的其余部分专门用来吸收各个对的生产高峰。
图3A和3B示出了向有界FIFO缓冲区写入或从其读出数据的标准方法,该有界FIFO缓冲区被实现在两个处理器之间高速缓存的共享存储器中,其中使用信号量进行同步。该方法的从有界FIFO缓冲区读取或向其写入数据的操作基于两个信号量信号量″data″用来防止从空FIFO缓冲区中读取,信号量″room″用来防止向满的FIFO缓冲区写入数据。信号量″data″的值对应于FIFO缓冲区中有效数据条目的数量,而信号量″room″的值对应于FIFO缓冲区中空闲位置的数量。
图3A示出了基于信号量″room″向所述有界FIFO缓冲区写入数据的方法。对FIFO缓冲区内的空间执行P操作(P(room)),即执行对用于FIFO缓冲区中的数据元素的空间或空位(room)的请求。如果在FIFO缓冲区中没有可用的空间或空位,写进程就必须等待。但是,如果FIFO缓冲区中有空位,就把一个数据元素输入到队列中并执行V-操作(V(data)),即信号通知FIFO缓冲区中有新数据元素可用。
图3B示出了基于信号量″data″从所述有界FIFO缓冲区读取数据的方法。如果在FIFO缓冲区中的数据元素可用,就对FIFO缓冲区中的数据元素执行P-操作(P(data)),即请求。如果在FIFO缓冲区中没有可用的数据元素,读进程就必须等待。但是,如果FIFO缓冲区中有数据元素,就要从队列中输出数据元素并执行V-操作(V(data)),即执行信号通知,通知FIFO缓冲区中有可用的新空间。
特别地,在消费者进程-即读者进程和生产者进程-即写者进程基于不同的处理速率的情形中,两个信号量″room″和″data″被重复地在两个进程高速缓存之间传送,导致高速缓存一致性通信量增加。
因此,本发明的目的是提供在信号量操作的基础上用于读/写共享FIFO缓冲区的方法和对应的设备,该信号量操作能够减少高速缓存一致性通信量并提高处理速度,在写者进程和读者进程具有不同速度的情况下尤其如此。
这个目的是由依照权利要求1用于把数据写入到共享FIFO缓冲区中的方法、依照权利要求4从共享FIFO缓冲区读取数据的方法、依照权利要求9把数据写入到共享FIFO缓冲区中的设备、以及依照权利要求10从共享FIFO缓冲区读取数据的设备解决的。
本发明基于这样思想,即执行信号通知,通知在所述FIFO缓冲区中有可用的数据元素或有可用的用于数据元素的存储空间,即执行V-操作,只有在所述FIFO缓冲区中有数据元素或用于数据元素的存储空间变为可用时并不被原子地进行,而是要等到所述FIFO缓冲区中有L个数据元素或用于L个数据元素的L个存储空间变为可用时才发信号通知L个数据元素或用于L个数据元素的L个存储空间的可用性。在某种意义上,对数据元素或用于数据元素的存储空间的可用性的信号通知-即执行y-操作被缓冲起来,直到收集了一定量的V-操作时才输出对可用性的信号通知。
依照本发明,当要把数据元素写入到共享FIFO缓冲区中时,首先要判断在所述FIFO中是否有存储空间可用于在其中存储数据元素。当所述FIFO缓冲区中没有可用的存储空间时,就阻塞所述FIFO缓冲区的输入,而在所述FIFO缓冲区中有可用的存储空间时,就把数据元素写入到所述FIFO缓冲区中。当数据元素被输入到所述FIFO缓冲区中时,递增写计数器的计数,其中所述计数代表已经输入所述FIFO缓冲区的数据元素的数量。在该计数达到值L之后,即已经有L个数据元素被输入所述FIFO缓冲区时,就执行第一个信号通知操作。
从共享FIFO缓冲区读取数据元素是和把数据元素写入到所述共享FIFO缓冲区中对称执行的首先,判断在所述FIFO缓冲区中是否有数据元素可用于被从所述FIFO缓冲区读出。当在所述FIFO缓冲区中没有可用的数据元素时,就阻塞所述FIFO缓冲区的输出,而在所述FIFO缓冲区中有可用的数据元素时,就从所述FIFO缓冲区输出数据元素。当从所述FIFO缓冲区输出数据元素时,递增读计数器的计数,其中该计数代表已经从所述FIFO缓冲区输出的数据元素的数量。在该计数达到值L之后,即已经从所述FIFO缓冲区输出了L个数据元素时,执行第二个信号通知操作。
本发明基于下列认识问题发生在如下的情形中,即在读者进程和写者进程正运行在不同的处理器上,并且FIFO缓冲区在共享存储器中实现,共享存储器被两个处理器缓存并且由高速缓存一致性协议保持一致。对有不同速度的读者和写者来说,较快的进程会重复地通过P-操作阻塞它自己(信号量计数器=0),P-操作是对信号量计数器递减,即对数据元素或用于数据元素的存储空间的请求。较快的进程在能够恢复它的通常操作之前,必须由来自较慢进程的V-操作解除阻塞(信号量计数器>0),V-操作是对信号量计数器递增,即对数据元素或用于数据元素的存储空间的释放。但是,在较慢进程除了通常操作之外还被迫执行V-操作,即释放操作的情形中,由此该慢进程就变得更慢。
由本发明通过如下来解决这个特定问题,即缓冲V-操作直到已收集了L个V-操作,并输出用于指示在共享FIFO缓冲区中有L个数据元素或用于L个数据元素的L个存储空间可用的单一V-操作。这样,在通常操作之外,进程只需执行较少的V-操作即可。
当应用程序以高速率执行对共享FIFO缓冲区的读写操作时,象视频流的像素,像素被从FIFO直接读取或被直接写入FIFO,因为收集了L个V-操作,所以其它进程(在写时是读者,在读时是写者)收到或“看到”L个像素突发中的像素。因此,其它进程的信号通知速率就降低了L倍。这就实现了对生产者和消费者进程之间的同步-通知其它进程数据元素或用于数据元素的存储空间是可用的和通信-向FIFO缓冲区写入或从其读出数据的去耦合。
本发明进一步的优点是降低高速缓存一致性通信量,因为与L次指示一个数据元素可用的信号通知操作相比,本发明使用了一个指示L个数据元素可用的信号通知操作。
本发明更进一步的优点在于以比通信粗的粒度来同步读者和写者。这就使得使用具有更少机器指令的更少信号量操作、更少数据通信量来保持高速缓存一致、以及由线程调度器/操作系统进行的更少的进程阻塞和解除阻塞操作。
依照本发明的优选实施例,当把数据元素写入到共享FIFO缓冲区中时,所述第一个信号通知操作指示已经输入所述FIFO缓冲区的L个数据元素现在可以用于从所述FIFO缓冲区中输出。对于从共享FIFO缓冲区读取数据元素的情况来说,所述第二个信号通知操作指示现有用于L个数据元素的L个存储空间可用,这样就能够把L个数据元素输入到所述FIFO缓冲区中。
依照本发明进一步的实施例,从预定的起始计数向上递增写计数器和/或读计数器。判断所述写计数器的计数和/或所述读计数器的计数是否已经达到预定的第一限值L,在达到预定的第一限值L时,当把数据元素写入到所述FIFO缓冲区中时,执行第一个信号通知操作或当从所述FIFO缓冲区读取数据元素时,执行第二个信号通知操作。当所述写计数器的计数和/或所述读计数器的计数已经达到所述预定的第一限值L时,把所述写计数器和/或所述读计数器重置为所述预定的起点。
依照本发明更进一步的实施例,预定的起始计数是0,预定的第一限值L是大于1的整数。
本发明的目的还可由与把数据元素写入到共享FIFO缓冲区中的所述方法相对应的、用于把数据元素写入到共享FIFO缓冲区中的设备,以及与从共享FIFO缓冲区读取数据元素的所述方法相对应的、用于从共享FIFO缓冲区读取数据元素的设备来解决。
依照本发明还提供了依照权利要求11的计算机系统。
此外,本发明还提供了依照权利要求12的计算机程序产品。
下面将参考附图更详细地阐述本发明,附图中

图1示出了依照第一实施例的把数据元素写入到共享FIFO缓冲区中的设备的框图,图2示出了依照第二实施例的从共享FIFO缓冲区读取数据元素的设备的框图,图3A示出了依照现有技术把数据元素写入到FIFO缓冲区中的方法的流程图,图3B示出了依照现有技术从FIFO缓冲区读取数据元素的方法的流程图。
在第一和第二实施例中,所述FIFO缓冲区100被实现在由计算机系统中的至少两个处理器所缓存的、并通过缓存一致性协议保持一致的、所述计算机系统中的共享存储器中。读者进程和写者进程运行在不同的处理器上但都访问所述共享FIFO缓冲区100。
图1示出了依照第一实施例的、用于把数据元素写入到共享FIFO缓冲区中的设备的框图。所述设备包括输入阻塞装置10、输入装置11、第一判断装置14、写计数器12、第一信号通知装置13、第二判断装置17和第一重置装置18。
输入阻塞装置10接收对FIFO缓冲区100的输入作为输入信号,并且与输入装置11相连,输入装置11又被连接到共享FIFO缓冲区100的输入上。输入阻塞装置10还与第一判断装置14连接,第一判断装置14接收共享FIFO缓冲区100的状态作为输入信号。与输入阻塞装置10和共享FIFO缓冲区100的输入相连的输入装置11还与写计数器12相连。写计数器12还与第一重置装置18和第二判断装置17相连。第二判断装置17还与第一信号通知装置13相连。
第一判断装置14判断在FIFO缓冲区100中是否有可用的存储空间(room),可以向这些存储空间写入数据元素,并向第一阻塞装置10输出判断结果。当第一判断装置已经判断在FIFO缓冲区100中没有可用的存储空间(room)时,输入阻塞装置10阻塞到FIFO缓冲区100的输入。但是,如果第一判断装置14已经判断在所述FIFO缓冲区100中有可用的存储空间(room)时,该输入装置就把数据元素输入到FIFO缓冲区100中。此后,输入装置11通知写计数器12已经有一个数据元素被输入到所述FIFO缓冲区100中。如果输入装置11已经通知写计数器12已有一个数据元素被输入到所述FIFO缓冲区100中,则写计数器12递增它的计数。因此,写计数器12的计数指示已经输入到FIFO缓冲器100中的数据元素的数量。
第二判断装置17判断写计数器12的计数是否已经达到第一限值L。当写计数器12的计数已经达到第一限值L时,第二判断装置17就通知第一信号通知装置13和第一重置装置18写计数器12的计数已经达到了第一限值L。当第一信号通知装置13已经被第二判断装置17通知写计数器12的计数已经达到第一限值L时,它就执行第一信号通知操作。第一信号通知操作指示现在有L个数据元素可用于被从所述FIFO缓冲区输出,即,第一信号通知操作表示与可用的L个数据元素有关的一个V-操作。
当第一重置装置18被第二判断装置通知写计数器12的计数已经达到第一限值L时—并且优选地在第一信号通知操作执行完毕之后,第一重置装置18将写计数器12的计数重置为0。因此,在写计数器12的计数达到第一限值L之后,再次启动对第一信号通知操作的缓冲。
图2示出了依照第二实施例的、从所述共享FIFO缓冲区100读取数据元素的设备的框图。所述设备包括输出阻塞装置26、输出装置25、第三判断装置24、读计数器22、第二信号通知装置23、第四判断装置27和第二重置装置28。
输出阻塞装置26接收对FIFO缓冲区的输出请求或读请求作为输入信号,并且与输出装置25相连,输出装置25又被连接到共享FIFO缓冲区100的输出上。输出阻塞装置26还与第三判断装置24连接,第三判断装置24接收共享FIFO缓冲区100的状态作为输入信号。与输出阻塞装置26和共享FIFO缓冲区100的输出相连的输出装置25还与读计数器22相连。读计数器22还与第二重置装置28和第四判断装置27相连。第四判断装置27还与第二信号通知装置23相连。
第三判断装置24判断在FIFO缓冲区100中是否有数据元素可用于被从FIFO缓冲100读出,并向输出阻塞装置26输出判断结果。当第三判断装置24已经判断在所述FIFO缓冲区100中无可用的数据元素时,输出阻塞装置26阻塞从所述FIFO缓冲区100的输出。但是,如果第三判断装置24已经判断在所述FIFO缓冲区100中有可用的数据元素时,输出装置25从所述FIFO缓冲区100输出或提取数据元素。输出装置25通知读计数器22已经有一个数据元素被从所述FIFO缓冲区100输出。如果输出装置25已经通知读计数器22已有一个数据元素被从所述FIFO缓冲区100输出,则读计数器22递增其计数。因此,读计数器22的计数指示从所述FIFO缓冲器100输出的数据元素的数量,并因而指示了FIFO缓冲区100内的用于数据元素的可用存储空间的数量。
第四判断装置27判断读计数器22的计数是否已经达到第一限值L。当读计数器22的计数已经达到第一限值L时,第四判断装置27就通知第二信号通知装置23和第二重置装置28读计数器22的计数已经达到了第一限值L。当第二信号通知装置23已经被第四判断装置27通知读计数器22的计数已经达到第一限值L时,它就执行第二信号通知操作。第二信号通知操作指示已经由输出装置25从FIFO缓冲区100输出了L个数据元素,并且指示FIFO缓冲区100中现有L个存储空间可用于被填充另外的L个数据元素,即,第二信号通知操作表示对可用的L个存储空间的一个V-操作。
当第二重置装置28被第四判断装置通知读计数器22的计数已经达到第一限值L时—并且优选地在第二信号通知操作执行完毕之后,第二重置装置28将读计数器22的计数重置为0。因此,在读计数器22的计数达到第一限值L之后,再次启动对第二信号通知操作的缓冲。
可以在基于并发处理的计算机系统或基于多任务处理的计算机系统中实现向共享FIFO缓冲区100写入数据元素的设备和从其读出数据元素的设备。
当象本发明的第一实施例所建议的那样缓冲对FIFO缓冲区100中可用的数据元素的V-操作时,由于会发生死锁,因此必须注意。例如,如果进程A向另一进程B发送令牌并随即开始等待来自进程B的回应,如果进程B由于对可用数据元素的V-操作被缓冲着直到有L个数据元素可用于从FIFO缓冲区100输出而没有得到进程A所发出的令牌的通知,则就有可能发生死锁。通过为每个进程实现一个阻塞处理器可以避免这种情况。在一个进程被阻塞(例如,因为信号量计数器为0)之后,阻塞处理器由总的进程调度器立即执行。阻塞处理器是通过执行所述第一信号通知操作来实现的,即对于它正在写入的所有FIFO缓冲区,通知FIFO缓冲区中有可用的数据元素可被读者进程读取。
现在可以进行总结,由两个处理器运行进程,它们通过存储在共享存储器内的FIFO彼此通信。互连方式通常是总线。通常,处理器包括必须通过高速缓存一致性协议保持一致的高速缓存,缓存一致性协议由处理器及互连来实现。软件通信也意味着同步读者进程在数据可用之前不应该读,写者进程在没有空闲空间之前不应该写。本发明的目标是按比通信更粗的粒度同步读者和写者。这会导致用更少的信号量操作、更少的数据通信量来保持高速缓存一致性,并且线程调度器/操作系统对进程进行更少的阻塞和解除阻塞。
权利要求
1.基于信号量操作把数据元素写入到共享FIFO缓冲区(100)中的方法,包括以下步骤a)判断FIFO缓冲区(100)中是否有存储空间(room)可以用于在其中存储数据元素;b)如果在步骤a)中已经判断出在所述FIFO缓冲区(100)中没有可用的存储空间(room),就阻塞所述FIFO缓冲区(100)的输入;c)如果在步骤a)中已经判断出在所述FIFO缓冲区(100)中存在有可用的存储空间(room),就把数据元素输入到FIFO缓冲区(100)中;d)当在步骤c)中输入了一个数据元素时,递增写计数器(12)的计数,该计数指示在所述FIFO缓冲区(100)中输入的数据元素的数量;e)当所述写计数器(12)的计数已经被增加L时,执行第一信号通知操作。
2.如权利要求1所述的方法,其中步骤e)中的第一信号通知操作指示在步骤c)中输入到所述FIFO缓冲区(100)的L个数据元素可以用于被从所述FIFO缓冲区(100)中输出。
3.如权利要求1或2所述的方法,其中所述步骤d)包括如下步骤从预定的起始计数递增所述写计数器(12)的计数;所述方法还包括下列步骤f)判断所述写计数器(12)的计数是否已经达到了预定的第一限值L,g)在f)步骤之后,将所述写计数器(12)的计数重置到所述预定的起始点。
4.基于信号量操作从共享FIFO缓冲区(100)中读取数据元素的方法,包括下列步骤a)判断在所述FIFO缓冲区(100)中是否有数据元素可用于被从FIFO缓冲区(100)读取;b)如果在步骤a)中已经判断出在所述FIFO缓冲区(100)中没有数据元素可用于被从FIFO缓冲区(100)读取,就阻塞从所述FIFO缓冲区(100)的输出;c)如果在步骤a)中已经判断出在所述FIFO缓冲区(100)中有数据元素可用于被从FIFO缓冲区(100)中读取,就从FIFO缓冲区(100)输出数据元素;d)当在步骤c)中从所述FIFO缓冲区(100)输出一个数据元素时,就递增读计数器(22)的计数,所述计数指示已经从所述FIFO缓冲区(100)中输出的数据元素的数量;e)当所述读计数器(22)的计数已经被增加L时,执行第二信号通知操作。
5.如权利要求4所述的方法,其中在步骤e)中的第二信号通知操作指示在所述FIFO缓冲区(100)中有L个存储空间可用于存储L个数据元素。
6.如权利要求4或5所述的方法,其中所述步骤d)还包括如下步骤从预定的起始计数递增所述读计数器(22)的计数;所述方法还包括下列步骤f)判断所述读计数器(22)的计数是否已经达到预定的第一限值L;g)在步骤f)之后,把所述读计数器(22)的计数量置到所述预定的起始点。
7.如权利要求3或6所述的方法,其中所述预定的起始计数是0。
8.如权利要求1、2、4或5所述的方法,其中第一限值L是大于1的整数。
9.基于信号量操作把数据元素写入到共享FIFO缓冲区(100)中的设备,包括第一判断装置(14),用于判断在所述FIFO缓冲区(100)中是否有存储空间(room)可用于在其中存储数据元素;输入阻塞装置(10),用于在所述第一判断装置(14)已经判断出在所述FIFO缓冲区(100)中没有可用的存储空间(room)时,阻塞所述FIFO缓冲区(100)的输入;输入装置(11),用于在所述第一判断装置(14)已经判断出在所述FIFO缓冲区(100)中有可用的存储空间(room)时,把数据元素输入到FIFO缓冲区(100)中;写计数器(12),用于当在步骤c)中输入数据元素时,递增其计数,所述计数指示在所述FIFO缓冲区(100)中输入的数据元素的数量;第一信号发送装置(13),用于在所述计数器(12)的计数已经被增加了L时,执行第一信号通知操作。
10.基于信号量操作从共享FIFO缓冲区(100)中读取数据元素的设备,包括第三判断装置(24),用于判断在所述FIFO缓冲区(100)中是否有数据元素可用于被从所述FIFO缓冲区(100)中读取;输出阻塞装置(25),用于在所述第三判断装置(24)已经判断出在所述FIFO缓冲区(100)中没有可用的数据元素时,阻塞所述FIFO缓冲区(100)的输出;输出装置(25),用于在所述第三判断装置(24)已经判断出在所述FIFO缓冲区(100)中有可用的数据元素时,从所述FIFO缓冲区(100)中输出数据元素;读计数器(17),用于当所述输出装置(25)从所述FIFO缓冲区(100)输出数据元素时,递增其计数,所述计数指示从所述FIFO缓冲区(100)中输出的数据元素的数量;第二信号通知装置(23),用于在所述读计数器(22)的计数已经被增加了L时,执行第二信号通知操作。
11.用于并发处理的计算机系统,包括依照权利要求9的、使用信号量操作把数据元素写入到共享FIFO缓冲区(100)中的设备,和/或依照权利要求10的、使用信号量操作从共享FIFO缓冲区(100)中读取数据元素的设备。
12.计算机程序产品,包括计算机程序代码装置,用于当所述计算机程序运行在一台计算机上时,使所述计算机执行所请求保护的方法的步骤。
全文摘要
本发明涉及向FIFO缓冲区写入或从其读取数据元素的方法和设备,其中信号通知FIFO缓冲区中有可用的数据元素或有可用的用于数据元素的存储空间,即执行V-操作,只有在所述FIFO缓冲区中有数据元素或有用于数据元素的存储空间变为可用,不被原子执行,而是等到在所述FIFO缓冲区中有L个数据元素或有用于L个数据元素的L个存储空间变为可用时,才执行一次信号通知,通知L个数据元素或用于L个数据元素的L个存储空间的可用性。在某种意义上,信号通知数据元素或用于数据元素的存储空间的可用性,即执行V-操作,被缓冲起来,直到收集了一定量的V-操作才输出对可用性的信号通知。
文档编号G06F15/177GK1585924SQ02822479
公开日2005年2月23日 申请日期2002年10月25日 优先权日2001年11月13日
发明者J·胡格布鲁格, P·斯特拉维斯 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1