P和V信号操作
技术领域
本发明叙述了控制访问共享FIFO缓存的信号计数器的P信号;从/向共享FIFO缓存读取/写入大量数据单元的一种读取方法和一种写入方法;一个减少控制访问共享FIFO缓存的信号计数器的P信号操作单元;一种从共享FIFO缓存读取大量数据单元的设备,以及向共享FIFO缓存写入大量数据单元的设备;一个可以并发处理被一个读任务和一个写任务访问的共享FIFO缓存计算机系统和对应的计算机程序产品。
背景技术
在计算机系统中,处理器的协调是一个重要的问题。在一个集中式系统中,信号通常被用作解决多进程协调的问题,比如互斥和管理可重用,以及可消耗资源。
在并行处理中互斥问题是一个重要的问题。多进程通常在一个或多个处理器中并发地执行。处理器通常共享诸如存储设备、输入/输出设备和内存这些资源。当两个或多个进程需要操作同一数据和内存时,需要提供一种机制以强制互斥访问资源。这一机制要求允许在每一次访问资源时只有一个进程。
通常,所谓生产者-消费者问题出现在并发处理中。生产者-消费者问题的基础是数据的生产者必须有存储所述数据直到消费者准备好的装置,并且消费者不必去尝试消耗不在那里的数据。生产者仅在消费者准备要消费时才产生数据显然是不切实际的。如果任何一个进程早到达,那么需要等待。但是,如果程序执行期间消费者或生产者的数据率变化,或者消费者或生产者的数据率不同,数据需要被缓存。缓存是生产者和消费者都要访问的一段内存。如果缓存足够大以能够处理数据产生的峰值,生产者和消费者就都能维持一个稳定的高平均数据传输速率,而不用担心因偶然峰值所产生的故障。
当并发进程被链接成生产者-消费者对,并且可以共享各部分都可以被每个进程访问的有限缓存时,缓慢的消费者可能在很大程度上延缓整个系统。在某些情况下,一个消费者被阻塞,相关生产者产生的消息侵入整个缓存,从而阻塞整个系统。为了避免这种行为,通常为每个生产者-消费者对能正常工作保留足够数量的份额,并将剩余的缓存用于吸收不同生产者-消费者对的生产峰值。
一般信号被用作协调访问共享资源的同步机制。信号有一个相关值,通常这个值被设为信号管理的资源数。信号被进程获得一次,信号值减去1。当信号值达到0之后,新的获取该信号的尝试将被阻塞,直到该信号被一个进程释放,并对信号值加1。
信号是一个只允许P和V操作使用的非负整数变量。一个V操作用于生产者进程,以指明它已经生产了为消费者进程所使用的信息。一个P操作用于消费者进程需要生产者进程产生信息的时候。使用P操作进入互斥而使用V操作退出互斥。信号对应于一个计数器,其中V操作增加该计数器,而P操作减少该计数器,但在该计数器为0时阻塞并且一直阻塞到该计数器变为大于0。信号以及P和V操作的图形化解释可以在US 4,928,222中找到。
发明内容
本发明的一个目的就是要提供一种机制来控制访问共享FIFO缓存,以提高并发处理环境中的操作。
本发明的目的要解决:根据权利要求1,控制访问共享FIFO缓存的信号计数器的P信号操作;根据权利要求2,从该共享FIFO缓存读取大量数据单元的一种方法,根据权利要求4,向该共享FIFO缓存写入大量数据单元的一种方法;根据权利要求6,一个递减信号计数器的P信号操作单元;根据权利要求7,从共享FIFO缓存读取大量数据单元的一种设备;根据权利要求8,向该共享FIFO缓存写入大量数据单元的一种设备;根据权利要求9,并发处理能被读任务和写任务访问的共享FIFO缓存的计算机系统;根据权利要求10,计算机程序产品。
本发明基于的基本思想是,不为FIFO中成为可用的数据单元或存储空间自动执行V操作,或不为FIFO中每个数据单元或存储空间的请求自动执行P操作,而是在m个数据单元或m个存储空间在FIFO中已经成为可用之后执行一个V操作,或在m个数据单元请求或m个存储空间请求已经被接收之后执行一个P操作。
通过利用这些P操作,即突发地而不是自动地执行所述请求操作,会出现所述FIFO中可用的数据单元或存储空间比消费者进程如读或写进程需要的或要求的要少的情况。P操作在请求m个数据单元或为m个数据单元请求m个存储空间时执行。P操作一递减信号计数器-只有在FIFO缓存中没有可用数据单元或存储空间时,即信号计数器为零时被完全阻塞。但是,当FIFO缓存中有可用数据单元或存储空间时,即信号计数器大于零时,可用的数据单元的值或数据单元的存储空间的值,即信号计数器的计数值和P请求操作的m值作比较,选择所述两值中的最小值。
如果所述FIFO缓存中可用数据单元或存储空间比所述P操作要求的多,所要求的数据单元或数据单元的存储空间的m值被选为所说信号计数器实际可用的减少量。但是,如果所述FIFO缓存中可用数据单元或存储空间比所述P操作要求的少,可用的数据单元或数据单元的存储空间的值被选为实际可用的减少量dec。所说信号计数器的实际减少量dec最终会被输出。根据这个实际减少量dec,dec个数据单元可以从所述FIFO缓存中输出,或dec个存储空间为dec个数据单元可用,这样dec个数据单元可以被输入到FIFO缓存中。
本发明中执行P和V操作的优点在于多个P和V操作能被合并为一个操作,以减少高速缓存中相关性业务量,同时保证这些V和P操作不会被不必要的阻塞。
本发明还解决了减少控制访问共享FIFO缓存的信号计数器的对应的P信号操作单元,利用该P信号操作单元实现上述的P信号操作。
本发明更进一步解决了利用对控制访问所述共享FIFO缓存的信号计数器的P信号操作,从共享FIFO缓存读出大量数据单元的方法。当一个消费者任务要求获得P信号操作的允许,以从所述共享FIFO缓存中读取m个数据单元时,P信号操作按上面描述的执行,并输出一个可用的减少量dec。该可用的减少量dec表明dec个数据单元从所述FIFO缓存中读取。之后,dec个数据单元从该FIFO缓存中读出。当dec个数据单元从所述FIFO缓存中读取时,从第二计数器的计数值中减去可用的减少量dec。只要第二计数器的计数值m大于0,上述步骤就会一致重复下去。
根据优选实施方案,在从所述FIFO缓存中读取dec个数据单元之后执行信号通知dec个数据单元的dec个存储空间是可用的。也就是说,表明FIFO中dec个存储空间可以被dec个数据单元使用的一个V操作被执行。
本发明还更进一步解决了利用控制访问所述共享FIFO缓存的信号计数器的P信号操作,向共享FIFO缓存写入大量数据单元的方法。当一个生产者任务要求获得P信号操作的允许,以向所述共享FIFO缓存写入m个数据单元时,P信号操作按上面描述的执行,并输出一个可用的减少量dec。该可用的减少量dec表明所述FIFO缓存中有dec个数据单元的dec个存储空间可用。之后,dec个数据单元依照dec个存储空间写入FIFO缓存中。当dec个数据单元写入到所述FIFO缓存中时,从第二计数器的计数值中减去可用的减少量dec。只要第二计数器的计数值m大于0,上述步骤就会一致重复下去。
根据优选的实施方案,在向所述FIFO缓存中写入dec个数据单元之后执行信号通知dec个数据单元是可用的。也就是说,表明该FIFO中dec个数据单元能够被读取的一个V操作被执行。
本发明解决了对应的读和写设备,这些设备适合分别实现上述的读和写方法。
本发明还解决了能并发处理被读任务和写任务访问的共享FIFO缓存的计算机系统,包括了一个减少信号计数器的P信号操作单元,从共享FIFO缓存中读取大量数据单元的设备,和/或向共享FIFO缓存写入大量数据单元的设备。
最后,本发明还进一步解决了一个计算机程序产品,包括计算机程序代码方法,使得在计算机上运行该计算机程序时,计算机执行上述读/写方法的步骤和/或P信号操作。
附图说明
现在将通过参考附图来更详细的解释本发明,其中:
图1显示了根据第一实施方案,P信号操作单元10的方框图;
图2显示了根据第一实施方案,从共享FIFO缓存中读取大量数据单元的设备100的方框图;
图3显示了根据第二实施方案,V信号操作单位20的方框图;以及
图4显示了根据第二实施方案,向共享FIFO缓存中写入大量数据单元的设备200的方框图;
具体实施方式
第一实施方案中,在根据并发处理的计算机系统中利用P信号操作执行从/向由至少两个进程如一个读进程和一个写进程共享的FIFO缓存进行读/写。
图1显示了用作减少信号计数器13(也在图1中所示)的P信号操作单元10的方框图,信号计数器13用作控制访问共享FIFO缓存(没有示出)。信号计数器13可基于该FIFO缓存中的可用数据单元,即一个信号(数据),或者基于在所述FIFO缓存中的可用存储空间,即一个信号(空间)。P信号操作单元10包括第一接收装置11,第一阻塞装置12,第一比较装置14和第一输出装置15。所述第一接收装置11和所述第一阻塞装置12相连,其接收所述信号计数器13的状态作为输入信号。所述第一阻塞装置12还和所述第一比较装置14相连,所述第一比较装置14接着和所述信号计数器13相连。所述信号计数器13输出其状态到第一阻塞装置12以及第一比较装置14,并接收第一比较装置14的输出作为输入信号。最后第一比较装置14和所述第一输出装置15相连。
所述第一接收装置11接收消费者任务的请求对所述信号计数器13的计数值n减去m次。从所述信号计数器13的计数n减去m次的该请求表明对来自所述FIFO缓存1的m个数据单元的一个P请求,即所述信号计数器13是基于信号(数据)。所述第一接收装置11转发减少m的请求到所述第一阻塞装置12,其在所述信号计数器13的计数值n等于零时阻塞该减少m的请求。所述信号计数器13的计数值n大于0时,所述第一阻塞装置12转发该减少m的请求到所述第一比较装置14,其比较转发的减少m的请求和所述信号计数器13的计数值n以确定这两个值中的最小值。所述信号计数器13的计数值n减去在所述第一比较装置14中确定的最小值。在所述第一比较装置14中确定的该最小值被转发到所述输出装置15,以便作为可用的减少量dec输出。该可用的减少量dec表明从所述FIFO缓存1中实际有多少数据单元可以被输出。
另外,从生产者任务中的所述信号计数器13的计数值n减去m的请求表明对在所述FIFO缓存1中的m个数据单元的m个存储空间的一个P请求,即所述信号计数器13是基于信号(空间)的。在这种情况下,所述可用的减少量dec指明实际有多少数据单元能被输入到所述FIFO缓存1中,因为有对于m个数据单元的m个存储空间可用。
图2显示了用作从外部共享的FIFO缓存1中读取大量数据单元的设备100,以及用作向外部共享的FIFO缓存1写入大量数据单元的设备的方框图。
该读设备和该写设备100都包括第一允许请求装置111,第二接收装置101,第二阻塞装置102,第一计数器103,读/写装置110和第一信号装置115。所述第一允许请求装置111和一个外部的P请求操作单元10连接。该P请求操作单元10的输出和所述第二接收装置101的输入连接。所述第二接收装置101又和所述第二阻塞装置102连接,所述第二阻塞装置102接着和所述读/写装置110以及所述第一计数器103连接。所述第一计数器103的输出和所述第二阻塞装置102连接。所述读/写装置110和共享FIFO缓存1以及所述第一信号装置115连接。
关于读操作,一个消费者任务输入一个允许从所述FIFO缓存1中读m个数据单元的请求到所述第一允许请求装置111。所述第一允许请求装置111为所述P信号操作单元10初始化一个请求,来准许从所述FIFO缓存1中读m个数据单元。所述P信号操作单元10接收到对该m个数据单元的请求,并参考图1用上述的信号(数据)为基础来处理这个请求,并输出可用的减少量dec。所述第二接收装置101接收可用的减少量dec以作为从所述P信号操作单元10的输出,并转发可用的减少量dec到所述第二阻塞装置102。如果所述第一计数器103的计数值m等于0,所述第二阻塞装置102阻塞对dec个数据单元的请求。但是,如果所述第一计数器103的计数值m大于0,可用的减少量dec由所述第二阻塞装置102转发到所述读/写装置110。所述读/写装置110从所述FIFO缓存1中读取dec个数据单元并将这dec个数据单元输出。所述读/写装置110把所述dec个数据单元输出后,所述读/写装置110通知所述第一信号装置115有dec个数据单元已经从所述FIFO缓存1输出。之后,所述第一信号装置115执行一个信号操作,以表明在所述FIFO缓存1中有对于dec个数据单元的dec个存储空间是可用的。所述信号操作表示一个V操作,其表示现在在FIFO缓存1中有dec个可用的存储空间。然后第一计数器的计数值m减去dec。
另外,在写操作中,一个生产者任务输入一个允许向所述FIFO缓存中写m个数据单元的请求到所述第一允许请求装置111。进一步的处理和上述读操作一致。所述P信号操作单元10接收到对于m个数据单元的m个存储空间的请求,并且参考图1用上述的信号(空间)为基础来处理这个请求。可用的减少量dec由所述第二阻塞装置102转发到所述读/写装置110。之后,所述读/写装置110把dec个数据单元写入到所述FIFO缓存中。在所述读/写装置110输入dec个数据单元之后,所述读/写装置110通知所述第一信号装置115有dec个数据单元已经被输入到所述FIFO缓存1中。之后,所述第一信号装置115执行信号操作,表明在所述FIFO缓存1中有dec个数据单元可用。这样,该信号操作表示对一个信号(数据)的V操作,以表明要从FIFO缓存1中读取的dec个数据单元是可用的。然后第一计数器的计数值m减去dec。
这样,根据第一实施方案,通过对信号(数据)执行对至少一个数据单元的一个P操作,即请求从FIFO缓存中读取数据单元来完成读操作,并在读操作结束时,通过对信号(空间)执行对至少一个存储空间的一个V操作,表明现在在FIFO缓存中有可用的存储空间。另一方面,通过对信号(空间)执行对在所述FIFO缓存中的至少一个存储空间的一个P操作,即为数据单元请求FIFO缓存中的存储空间来完成写操作,并在写操作结束时,通过对信号(数据)执行对至少一个数据单元的一个V操作,表明要从FIFO中读出的数据单元现在是可用的。读和写之间的不同在于对不同的信号即对信号(数据)和信号(空间)执行信号操作,并且数据单元以相对方向拷贝的,即拷贝到FIFO,和从FIFO拷贝。
在第二实施方案中,在基于并发处理的计算机系统中,通过使用V信号操作来完成从/向由至少两个进程如一个读进程和一个写进程共享的FIFO缓存的读/写。
图3显示了用作增加信号计数器23(也在图1中所示)的V信号操作单元20的方框图,信号计数器23用作控制访问外部的共享FIFO缓存1(没有示出)。V信号操作单元20包括第三接收装置21,第三阻塞装置22,第二比较装置24,第二输出装置29,第一减法装置28,第一限制L内存27和和第三比较装置26。
第三接收装置21和第三阻塞装置22连接,第三阻塞装置22接着和第二比较装置24以及第三比较装置26连接。第三比较装置26和第一限制L内存27以及所述信号计数器23连接。第一限制L内存27又和第一减法装置28连接。第一减法装置28接收所述信号计数器23的状态和内存27即所述第一限制L的状态作为输入信号,并将减法结果输出到第二比较装置24。第二比较装置24的输出是可用的增加量inc,其也是输出装置29的输出。所述信号计数器23将可用的增加量inc作为输入。
所述第一接收装置21接收生产者任务的请求,以对所述信号计数器23的计数值n增加m次。对所述信号计数器23的计数值n增加m次的该请求表明一个V释放m个数据单元到所述FIFO缓存中的请求。所述第一接收装置21转发该增加m的请求到所述第三阻塞装置22。如果所述信号计数器23的计数值n超过存储在所述第一限制L内存27中的第一限制L,所述第三阻塞装置22将阻塞增加m的请求。所述第三比较装置26接收第一限制L和所述信号计数器23的计数值n作为输入信号,并比较这两个输入信号,以确定所述信号计数器23的计数值n是否超过第一限制L。所述第三比较装置26输出这一比较操作的结果到所述第三阻塞装置22。如果所述信号计数器23的计数值n没超过所述第一限制L,如由所述第三比较装置26确定的那样,所述第三阻塞装置22转发增加m的请求到所述第二比较装置24。
所述第一减法装置28接收第一限制L和所述信号计数器23的计数值n作为输入信号,并对两个值求差来确定它们的差值。所述第一减法装置28输出减法结果到所述第二比较装置24,其将该减法结果和增加m的请求做比较,并决定所述这些值中的最小值。所述第二比较装置24输出确定的最小值到所述输出装置29。所述输出装置29接收该最小值作为输入信号,并输出该最小值作为可用的增加量inc,以表明有对于inc个数据单元的inc个存储空间是可用的。
图4显示用作写大量数据单元到共享FIFO缓存1中的设备200的方框图。所述设备200包括第二允许请求装置211,第四接收装置201,第四阻塞装置202,第二计数器203,写装置210,第二信号装置215,第一限制L的第二内存207和第二减法装置212。
所述允许请求装置211和一个V信号操作单元20的输入连接,且所述第四接收装置201和该V信号操作单元20的输出连接。所述第四接收装置201又和所述第四阻塞装置202连接,所述第四阻塞装置202又和所述写装置210、所述第二计数器203以及所述第二减法装置212连接。所述第二减法装置212和所述第二计数器203、在它的输入侧的所述第一限制L的内存207,以及在它的输出侧的所述第四阻塞装置202连接。所述写装置210和所述外部的共享FIFO缓存1以及所述第二信号装置215连接。
一个生产者任务输入一个允许向所述FIFO缓存中写m个数据单元的请求到所述第二允许请求装置211。所述第二允许请求装置211为所述V信号操作单元20初始化一个请求,以准许向所述FIFO缓存1写m个数据单元。所述V信号操作单元20接收该写m个数据单元的请求,参考图3如上所述处理这个请求,并输出可用的增加量inc。所述第四接收装置201接收可用的增加量inc以作为所述V信号操作单元20的输出,并转发可用的增加量inc到所述第四阻塞装置202。
所述第四阻塞装置202在所述第二计数器203的计数值超过所述第一限制L时阻塞写m个数据单元的请求。所述第二减法装置212接收第二计数器203的计数值m和第一限制L作为输入信号,并对它们求差以确定第二计数器203的计数值m是否超过第一限制L。当第二计数器203的计数值m没有超过所述第一限制L时,所述第四阻塞装置202转发可用的增加量inc到所述写装置210。根据接收到该可用的增加量inc,所述写装置210将inc个数据单元写到所述FIFO缓存1中。所述写装置210进一步转发可用的增加量inc到所述第二信号装置215。所述第二信号装置215执行一个信号操作,以表明在FIFO缓存1中有inc个可用的数据单元用于进一步处理,即对输入到所述FIFO缓存1中的inc个数据单元执行一个V操作,以表明有inc个数据单元可以从FIFO中读出。
然后,在inc个数据单元被写到所述FIFO缓存1中后,可用的增加量inc被加到所述第二计数器203的计数值m上。只要第二计数器的计数值m没有超过第一限制L,重复执行以上提到的步骤。
一个读操作也可以在V操作的基础上执行。这样的读操作和上述写处理过程对称执行。参考图4。
一个V操作和上面的P操作十分的相似。在执行该V操作时要避免信号计数器超过预定限制L。V操作不允许输入到FIFO缓存中的数据单元多于该FIFO缓存中可用的存储空间,也不允许对超过FIFO缓存中最大可用存储空间执行V操作。该FIFO缓存中,最大可用存储空间和所述预定限制L对应。
可总结为,一个P信号操作试图减少信号计数器m次,并返回实际减少量,其值大于零,但不大于要求的调节值(government)。一个V信号操作增加信号计数器m次,并返回实际增加量,其值大于零,但不大于所述信号计数器的第一限制L。
从FIFO缓存的读取和向FIFO缓存的写入是对称的。在从FIFO缓存中读取的情况下,读进程担当消耗或处理数据的消费者进程,同时还担当在FIFO缓存中生产空闲存储空间的生产者进程,因为数据单元已经从FIFO缓存中输出。在向FIFO缓存中写入的情况下,写进程担当消耗或占用存储空间的消费者进程,同时还担当在FIFO缓存中产生数据单元的生产者进程,因为数据单元已经被输入到FIFO缓存中。
变量1和/或m可以被设置为预定值,或根据当前处理状态计算它们,以此来优化整个处理性能。