用于串行互斥体的方法与装置的制作方法

文档序号:6420675阅读:125来源:国知局
专利名称:用于串行互斥体的方法与装置的制作方法
背景技术
许多应用程序采用共享公用存储器中的数据或使用公用存储器进行通讯的多个执行线程,为保证数据的一致性,应用程序需要采用一定类型的机制。有一种机制提供互斥,就是说,它使用“互斥锁”来确保只有一个执行线程能够进入临界区在其中对共享数据进行操作。如果两个以上的执行线程共享一个数据区的话,多个线程可能试图同时获得互斥锁的所有权,在这种情况下,线程获得互斥锁所有权的顺序无法保证。
当一个或多个处理器上的多线程共享数据时,使用互斥锁(mutal exclusionlock)(“互斥体”)来一次只向一个线程提供共享数据的所有权。互斥体(mutex)的使用使得持有互斥体的线程在维护记录内一致性的同时,对共享记录的内容进行一次或多次修改,或者是一次读-改-写操作对记录内容进行更新。
一般而言,互斥体被实现为存储器中的一个存储单元(a location inmemory),它被用来既表示试图占有也表示已经拥有另一个被互斥体保护的区域的所有权。有许多技术,使用软件的或软件与硬件相结合的,来实现获得(进入)和释放(退出)互斥体的动作。进入共享数据在其中被修改的代码关键区域的线程之前被加上mutex_enter()操作,之后被加上mutex_exit()操作。实现mutex_enter()和mutex_exit()操作的技术是人们所熟知的。
在一些应用中,由于串行化方式的限制,使用这种竞争性互斥锁来控制对共享数据的存取是不充分的。因此,还需使用其它实施排序的技术。
例如,在一些网络化应用程序中,顺序是通过要求所有的在特定的一对端点间传输的信元或数据包被同一个进程或线程来处理来维护的,或通过使用硬件流水线操作来维护。前者将任意一对端点间的吞吐量限制在单线程的性能内,因而,并行性只能在不相关的端点的流量中取得,当严格的顺序被维护在任意的点到点之间。后者能取得较高的吞吐量,但在灵活性和性能上受到限制,比如要将任务分割成多少个固定的流水线阶段,以及阶段间的通讯的简化程度。还有些网络应用程序通过使用与每个信元或数据包相关联的序号来维护次序,但有些网络协议不支持序号的使用。


图1是一种通讯系统框图,它使用一个拥有多线程微引擎的处理器来支持多线程的执行。
图2是处理器高层处理流程的描述。
图3是处理器接收单元的方框图。
图4是一种范例性的接收数据路径的描述。
图5是图1的处理器中的线程使用的一种串行互斥体(s-mutex)机制的概念上的描述。
图6是协作线程使用串行化互斥锁来存取共享数据项的代码的例子。
图7是协作线程使用串行化互斥锁存取共享数据项的串行化方式的说明。
图8是串行互斥锁的串行化所有权传递方面的一个范例性“令牌传递”实现的说明。
图9是串行互斥锁所有权传递机制的一个可供选择的方法。
图10是一种说明使用四个串行互斥锁的范例性流程图。
详细说明参考图1,通讯系统10包括处理器12,其连接到一个或多个输入/输出装置,例如网络装置14和16,以及存储器系统18。处理器12是多线程处理器,因而对能分解为并行子任务或功能的任务尤其有用。如图所示的一个实施例中,处理器12包括多个微引擎20,每个带有多个能在一个任务中同时激活并独立工作的由硬件控制的程序线程22。每个微引擎20与临近的微引擎相连接并能与之通讯。
处理器12还包括通用处理器(GPP)24,它帮助装载用于微引擎20的微代码控制,并且完成其它诸如处理协议和异常的通用计算机类型的功能,它还为微引擎无法处理的高层处理任务提供支持。通用处理器24有操作系统,通过它通用处理器能调用功能在微引擎20上进行操作。通用处理器24能使用任何被支持的操作系统,最好是实时操作系统。
微引擎20分别以共享资源操作,包括存储器系统18、总线接口26′、一个和多个媒体块26和28。总线接口26′为外部总线30,例如PCI总线,提供接口。媒体块26、28分别控制和把处理器12接口到网络装置14、16。存储器系统18包括使用DRAM控制器36存取的动态随机存取存储器(DRAM)34、使用SRAM控制器40存取的静态随机存储器(SRAM)38。存储器系统18还包括诸如PROM之类的非易失性存储器42和相应的接口44,以支持引导操作。DRAM 34和DRAM控制器36通常用于存储大容量数据,例如网络数据包的有效载荷。DRAM控制器36包括用于存取位于DRAM 34中缓冲存储器46的DRAM接口45。缓冲存储器保存数据包的数据,有效载荷或完整的数据包。SRAM 38和SRAM控制器40用在低延时、快速存取任务的网络实现中,例如,存取查找表、处理器24使用的时间紧急的数据和指令,等等。SRAM 38保存DRAM缓冲区的自由链表(缓冲存储器46中可用的缓冲区的指针列表)48、描述符50、描述符自由链表52和传递信息用的通信环54,例如在处理器资源如微引擎线程22、GPP 24和媒体块之间传递描述符指针。SRAM控制器40包括用于存取存储在SRAM 38中的数据的SRAM接口56,还包括支持DRAM缓冲区分配的用于申请资源的控制逻辑50,该DRAM缓冲区由自由链表48表示。SRAM控制器40还包括环转换单元60,它和环预取器62一起被资源用来存取环54。微引擎20和通用处理器24能执行到DRAM控制器36或SRAM控制器40的内存访问指令(memory reference instructions)。
装置14和16可以是可发送和/或接收网络流量数据的任何网络装置,如成帧/媒体存取控制装置,例如,用于连接到10/100BaseT以太网、千兆以太网、ATM或其它类型网络的装置,或连接到交换结构的装置。因此,媒体块26、28支持一种或一种以上的接口,例如用于在PHY装置与更高协议层(例如链路层)之间包和信元传送的接口,或在流量管理和异步传输模式(ATM)、网际协议(IP)、以太网和类似的数据通讯应用的交换结构之间的接口。媒体块26、28分别包括一个分离的接收(RX)单元64和发送(TX)单元66,分别可配置为特定的处理器12所支持的接口。
处理器12也为其它装置提供服务,诸如可连接到由总线接口26′控制的总线30上的主机和/或总线外设(未示出),或者可连接到由协处理器接口70控制的协处理器总线68上的协处理器(亦未示出)。
一般的,作为网络处理器,处理器12能和任何类型的接收/发送大量数据的通讯装置或接口相连接。如将被描述的,起到网络处理器作用的处理器12能接收从像网络装置14那样的网络装置来的数据包单元,并以并行的方式处理这些数据包单元。数据包单元可能包括完整的网络数据包(例如,以太网数据包)或这种数据包的一部分,例如信元或数据包片断。
处理器12的每个功能单元20、24、26′、36、40、44和70连接到第一总线结构72。功能单元20、26、28、36、40连接到第二总线结构74。存储器总线78、80分别将存储器控制器36和40连接到存储器系统18的各个存储器单元DRAM 34和SRAM 38。存储器总线82将PROM接口44连接到存储器系统18的PROM 42。媒体块26、28通过分离的输入/输出总线84a和84b分别将它们连接到各自的网络装置14和16。
尽管没有详细显示出来,但每个微引擎20包括写发送寄存器文件和读发送寄存器文件。写发送寄存器文件存储将被写到微引擎的外部资源(例如,DRAM存储器或SRAM存储器)的数据。读发送寄存器文件用于存储从微处理器20的外部资源返回的数据。
参考图2,显示了处理器12的一种示例性的软件模型90。处理器12支持三个处理级别或阶段接收处理阶段92,高层处理阶段94和发送处理阶段96。在接收处理阶段,完成了诸如重组指针搜索、重组信息更新、接收包处理和队列管理等操作。如此,接收处理阶段的处理起始于数据抵达媒体块的输入/输出接口的接收单元,终止于将描述符存储在SRAM并将有效载荷数据移动到DRAM中。在发送处理阶段,完成包括发送调度、队列管理和数据发送等一些功能。
接收线程98解析数据包头部并完成基于数据包头部信息的查找。当数据包被处理完后,就被存储到DRAM 34中,或者作为异常被转发给GPP 24做进一步处理,到另一个线程100或协处理器102做高层的处理,或者通过为数据包放置一个描述符在与由头部/查找所指示的发送(转发口)相联系的发送队列中来排队等待发送。此描述符存储在SRAM 38中。在发送处理阶段96,TX线程104完成发送数据处理,就是说,可能应用一种调度策略,可能修改头部,然后将数据包发送到由在接收处理阶段的头部/查找信息所指示的转发端口。
总体上,各种功能组成一种功能性流水线。功能性流水线中的每个阶段并行地使用多个微引擎线程100,并且,在任何特定时间,每个微引擎(ME)中的每个线程被分配单独一个数据包来处理。
一般地,为了重新组装数据帧或为了发送,信元和数据帧需要在一个数据流中保持顺序。由于使用了多组线程来提供并行性和改善吞吐量,通过协作线程的仔细排序来维护顺序。
参考图3,显示了媒体块接收(RX)单元64的功能性单元和数据结构。这个单元复制在图1的媒体块0和媒体块1中。RX单元64包括接收管理器110,其包括用来管理多信道112的信道管理块111。RX单元64还包括接收缓冲阵列(RBUF)114和状态阵列116。状态阵列116存储与RBUF114中每个项目相关联的状态描述表(context)。每个项目通过索引来标识,该索引作为RX状态的一部分提交到一个分配的RX线程并被此RX线程返回到RBUF的自由链表118中。数据被RBUF控制器120放在RBUF116中,并能被线程使用某条指令读取,该指令指定了阵列偏移量、要读取的单元的数目和数据将被移动到的第一寄存器。
线程通过将其线程标识符写到线程自由链表122的方法来指示接收单元它已准备好来处理接收到的信元或数据帧。这是通过为它正使用的列表向线程自由链表寄存器CSR发出一个CSR写来达到的。线程标识符ID在线程自由链表122上的出现指示该线程已保留其SRAM读传送寄存器来接收RX状态字。线程还能指示RX单元64从RBUF 116中直接将数据移动到DRAM 34中。
接收硬件以与线程被列队在自由链表中的次序相同的顺序为信元或数据包分配线程。在接收单元中会有多个线程列表,每个有其自己的CSR地址。通道管理块110中的每个通道被配置使用一个特定的线程自由链表。这使得单个自由链表能够根据系统程序员的要求为一个或多个通道服务。还可以有多个RBUF自由链表。每个通道被配置来使用其中之一,因此每个RBUF自由链表118能根据需要为一个或多个通道服务。RBUF控制器120从RBUF自由链表118中分配一个RBUF单元来保存接收到的数据,并把RBUF号(索引)作为接收状态一部分传递到线程中。一旦线程读完RBUF单元的内容,它通过向相关联的RBUF自由链表CSR地址发出一个CSR写指令将该项目返回到RBUF自由链表118中。
RX单元通过从绑定到那个RX通道的RBUF自由链表中读取数据帧或信元来分配RBUF单元以保存收到的数据帧的头64字节(包括前导符)或一个完整的信元。
任何为数据帧配置的通道自动地使用DMA引擎124来将数据帧体(头64字节之后的包括填充部分的所有字节)存储到DRAM 34中的缓冲区。数据被写到起始于64字节对齐的缓冲区指针的64字节的偏移处,为处理线程留出空间来在以后插入编辑过的头部。
RX单元64包括预取器126,以从在SRAM 38中DRAM缓冲区自由链表48中预取DRAM缓冲区的指针。为效率故,这些指针可以从DRAM缓冲区链表48中猝发预取。预取器还能直接从TX单元接收指向TX单元中用过的缓冲区的指针。也就是说,TX单元能直接循环用过的DRAM缓冲区到RX预取器126,而不是将它们退回到DRAM缓冲区列表48。
RX单元还包括就绪单元列表128,它由RBUF控制器120使用来将完整接收到的信元或数据帧投递到RBUF和/或DRAM,并准备分配给某个线程,以及完成这些的分配分配器129。
四个RX线程自由链表的每一个使线程组以FIFO顺序把自己分配给一组端口中的一个提供服务。每个媒体通道被静态地配置从这些链表中使用线程,每个链表可以为一个或多个通道服务。类似的,有四个RBUF自由链表,用过的RBUF项目被返回到这里。这表示至多有四个分配给一个或一组端口的封闭的缓冲区池,用类似的静态绑定每个通道在这些链表中的一个上,这样链表就能为一个或多个通道服务。RBUF池使得系统软件根据需要在不同的端口中分配这64个缓冲区,这些端口可能运行在根本不同的到达速率上。由于每个媒体块能被分割为至多4个通道,这些缓冲区池允许灵活分配资源,并在不同的通道间独立的排队。
参考图4,在接收信元或数据帧130中一种示例性的事件时序如下。媒体RX接口110开始接收数据帧或接收信元到它的内部缓冲区(事务1,如标号“1”的箭头指示的)。如果接收到的数据单元是帧,接口110分配一个从DRAM缓冲区自由链表中预取的缓冲区(事务2)。它还从接收通道的RBUF自由链表中分配一个空闲的RBUF单元(事务3)。接口110从媒体RX接口移动信元或数据包(事务4)。头64字节被移到已分配的RBUF项目(事务4a)。如果是数据帧,帧的剩余部分被写入起始于偏移量为64字节的DRAM缓冲区(事务4b)。当全部信元或数据帧被接收到,状态即结束,并且该单元被投递到此通道的就绪单元链表上(事务5)。从信道的线程已分配自由链表中分配一个线程(事务6)。分派器将状态推到那个线程的读传递寄存器中(事务7)。状态包括诸如RBUF索引、帧长度、媒体特定的比特位(包括特定状态,如果是信元就包括VCI/VPI,如果是以太网帧就包括以太网CRC)、通道的ID、时间戳和缓冲区指针。线程还必须将接收到的头64字节中包含的任何非头部的信息写回,以在DRAM中完成数据包的内容。
所分配的线程发出读RBUF内容的指令(事务7a)。线程将数据从RBUF接收到SRAM的读转发寄存器(事务7b)。在信元的情况下,由于它已经有了VCI/VPI,线程只读取有效载荷。可选的,线程还可以从描述符自由链表中为数据帧分配一个描述符(事务7c)。
线程解析头部、执行查找与比较(事务8)。如果是数据帧,线程适当地编辑头部(事务8a)。如果执行信元SAR,线程将有效载荷组装到一个帧缓冲区内,并为该信元计算增量CRC(在过程中为该帧取得、修改和写回CRC余数)(事务8b)。如果线程正在转发信元,它分配一个信元缓冲区并将修改过的信元写进去(事务8c)。
如果是数据帧,线程必须将编辑过的头部写进DRAM缓冲区来完成DRAM中帧的映像(事务9)。写到DRAM缓冲区的头部的长度可能比收到的头部长、短或者相等。
如果转发数据帧或信元,当帧完成后,线程把缓冲区指针或相关的描述符指针放到硬件管理的环54中的一个上,这样,将它传递到TX线程,或到另一个线程做进一步处理,或到通用处理器GPP 24上。如果分配了描述符,在它被转发前被填到SRAM。当这些都完成了,线程通过将其线程ID写到线程自由链表来宣布自己可用(事务11)。线程将RBUF单元返回到其RBUF中(事务11a)。应当理解,线程可以选择在事务7b之后的任何时间返回RBUF单元。
一组线程提供处理从某个通道来的单独一个数据包流或信元流的并行性,但需要以顺序的方式,以所处理的信元或数据包到达的顺序,存取各通道(per-channel)或各流(per-flow)的特定信息。为了维护接收的顺序,它们还需要按顺序地将自己列队在自由链表上。线程间的排序通过使用顺序互斥锁,即“s_mutex”来实现。
s_mutex保证以特定地顺序来处理数据包或信元,并保证对顺序敏感的数据结构相应地被存取/更新。
参考图5,描述了一种在多线程环境中用于协作线程的串行互斥锁(s_mutex)方案。有多个执行线程142a,142b,……142n和共享数据项144,示为数据项144a,144b,……144x。数据项可对应于存储在单个存储单元中、或存储器内一区域中的数据。与每个共享数据项144相关联的是对应的连续互斥体(mutux)146,从而互斥体146a,146b,……146x分别对应于共享数据项144a,144b,……144x。
参考图6,显示了协作线程使用的代码片段150。例中显示,协作线程使用两个s_mutex,S_mutex(a)和S_mutex(b)分别对应于共享数据项“a”和“b”。各线程进入S_mutex(a)(“Sa”),执行存取共享数据“a”的代码,退出S_mutex(a)。线程可以执行多线程安全代码,即,不使用共享数据的代码。线程进入S_mutex(b)(“Sb”),执行存取共享数据“b”的代码,退出S_mutex(b)。
参考图7,时序图160阐明了协作线程存取共享数据项“a”和“b”时使用的串行方式。虽然多个线程(本例中是4个)可能同时等待特定的S_mutex(本例中为“Sa”或“Sb”),它们仍然按照预定的顺序顺次的获得进入。从图7可看到,线程可以以任何顺序进入“等待”。
在一种串行互斥方法中,锁(进而是受保护的数据)的所有权从当前持有者被传到其后继者。尽管可能有许多线程在等待获得锁的所有权,然而某个线程仅能从其指定的前任那里接收到锁的所有权。因此,在这种方法中,s_mutex所有权的传递可被看作一种令牌传递机制,它使用线程间信令机制将令牌从前任传递到后继者。在s_mutex实现中可以使用多种不同的令牌传递机制。
图8显示了直接的处理器(或线程)-处理器(或-线程)信令或“门铃”机制170。在这种机制中,“n”个线程中每一个都有状态寄存器172a,172b,……172n。每个寄存器172有“x”个比特位174a,174b,……,174x,每位对应接收令牌的位置。这些位置提供信令机制,即“门铃”,也就是说,一个门铃/位对应于“x”个共享数据项的每一项。例如,比特位174b对应于门铃2。发送者(前任)执行“按门铃”指令,该指令指定了后继者线程的线程ID(标识符)和对应于相应门铃的比特位。接收者(后继者)轮询其门铃状态寄存器寻找所关心的比特位,或者在该事件上休眠。例如,假定线程1进入“Sb”(对应于门铃2),完成关键工作并退出“Sb”。当线程1退出时,它将代表s-mutex的令牌传递到下一线程,例如,根据一组使用此s-mutex的线程的预定的线程顺序传递给线程2。线程1通过在线程2的门铃状态寄存器中设定位174b而按响线程2的门铃,寄存174b(如箭头176所示)使线程2知道其现在拥有该锁。当线程2在其代码中“Sb”的互斥体进入时,线程2检查门铃状态寄存器172b中的位174b。若该位已置位,线程2继续涉及与由该s-mutex保护的数据项有关的工作,或者继续轮询(等待)一直到确定该位已置位。这样的消息系统能完全位于ME(微引擎)内,而门铃状态寄存器位于本地CSR中,或者门铃状态寄存器可以位于共享的硬件或外部存储器中。这种类型的令牌传递机制在令牌传递中具有相对低的时延,但由于它需要使用专门的硬件资源而限制了所支持的s-mutex的数量。
在可供选择的线程间信令的实现中,使用了一种可配置的到处理器(或到线程)的信令机制,该机制允许任何线程或处理器把多种信令中的任一种发送到所使用的任一处理器(或线程)。
还可以使用其它(非令牌传递)机制。例如,如图9所示,硬件S-mutex监控系统或s-mutex分配器180在特定的s-mutex“Sx”的共享地址182上为“n”个线程142a,142b,……,142n的每一个提供硬件监控器180,即,相应的硬件监控器181a,181b,……,181n。共享地址182为s-mutex的当前拥有者存储线程ID(标识符)。当硬件监控器181等待的地址182中被写入了那个线程的标识符时,它就促使与其对应的处理器/线程142分别为每个线程142a,142b,……,142n接收状态184(例如,硬件中断,线程唤醒,轮询线程等),即184a,184b,……,184n。例如,每个监控器会把相应的监控器值185a,185b,……,185n提供给与其耦合的相应MUX(多路复用器)186a,186b,……,186n,并从地址182接收ID,当地址包含相应线程的ID时,使MUX能够引起信号184中相应的一个进入激活状态。当前的拥有者通过将后继者的标识符放到串行互斥体“x”地址182处来将互斥体让给器后继者。在这种机制中,线程142a,142b,……,142n所使用的每个s-mutex都有一个s-mutex分配器180。
监控机制也可以代之以集中代理。s-mutex所有权(当前s-mutex持有者的线程ID)可存储在单独的寄存器地址中。当传递所有权给后继者时,前任将后继者的标识符写到那个地址。参与排序好的一组线程中的所有线程轮询这个地址以进入特定的s-mutex,检查其内容以确定所保存的ID是否与它们自身的ID相匹配。这种技术提供了所需的排序,但导致大量的存储器访问流量。最多它以存储器读操作的时延为代价来获得锁的所有权。
或者,每个s-mutex的硬件寄存器可以用类似于上述存储器单元的方式来轮询,但需要离处理器较近,从而能更快速地存取。这种实现将系统内s-mutex的数目限制为可用的硬件寄存器数目。
如前所讨论的,服务一个或多个端口的一组线程互相协作以实施排序并使共享数据在次序上保持一致。线程使用一种串行互斥体来协作以实施排序。服务一个端口以获得并行性(为了吞吐量)的一组线程在需要时会实施排序,即使处理是并行发生的。
例如,带有VP/VC的ATM信元保持严格的次序。同样,为性能故,TCP也强烈要求流量内的数据帧保持次序。在信元/帧接收流中,处理流量中的某些功能也按顺序发生,例如CRC余数管理。一组相互协作的线程依次排队到线程的自由列表中,因此从到达的流中以相同次序取得所分配的信元和数据包。在每个事件中,可以用s-mutex来实施对共享的、对顺序敏感的关键代码段的按序存取,还实施按顺序将信元或数据包转发到下一个处理代理的次序。
参考图10,阐述了一个使用s-mutex来实现AAL5帧内信元的并行处理的例子。例子中使用了4个不同的s-mutex(串行互斥体)。其中一个串行互斥体用于维持协作线程间CRC余数的相干性,这些协作线程为来自相同帧或数据包的信元执行CRC处理。每个信元有数据帧的一个片段。CRC的验证或产生(数据完整性保护)以信元到达的次序的顺序来串行化,以产生正确的结果。另外,CRC的计算以严格的顺序执行,以确保属于相同VC的信元用正确的CRC余数来计算。
在AAL5帧的RX过程220中,线程完成如下任务。222当线程唤醒时,线程在微引擎SRAM读传送寄存器中找到信元状态,包括DRAM缓冲区指针和RBUF号码。224线程从对应于RBUF号码的RBUF项目中取得信元。226线程从信元头部提取出VCI/VPI,以及228对VCI/VPI执行哈希函数。230线程对VC表进行哈希搜索以定位与该信元相关联的VC的相关序号(“vc_record[seq_num]”)。232线程进入第一s-mutex,该s-mutex在线程修改第一s-mutex时4线程递增序号,以及238退出第一s-mutex。240如果序号为‘0’,线程就从数据包部件的缓冲区自由列表中分配一个缓冲区,更具体地说是一个指针“buf prt”。线程进入第二串行互斥体,它用于保护VC表记录,该记录存储当前信元的指针值“vc_record[wrt_ptr]”。244如果此信元是数据包中的第一信元,线程将值“48”加到指针值上并记录该指针值;否则,它使当前记录的值递增48,值48是每个ATM信元携带的有效载荷的字节数。246线程退出第二串行互斥体。248线程进入第三串行互斥体。250除非信元是第一信元,否则线程取出存储在记录vc_record[residue]内的VC表中的CRC余数。252线程把余数和CRC信息从信元提供给位于微引擎中的CRC引擎,用于CRC计算。256线程确定该信元是否为最后一个。如果信元不是最后一个信元,则线程进行如下操作。258线程从CRC引擎中读取新的余数,以及260把新的余数存储到vc_record(residue]。262线程退出第三串行互斥体。264线程把信元数据存储到部件缓冲区中的计算/取出的地址。如果在步骤256确定该信元是最后一个信元,则线程执行如下操作。266线程检查CRC的有效性,然后268将重组好的数据帧传递给另一线程或通用处理器做进一步的处理,或者传到TX单元来发送。270线程将RBUF单元返回到RBUF自由列表中。272线程进入第四串行互斥体,274将其自身的线程标识符排队到线程自由列表上,然后276退出第四串行互斥体。第四串行互斥体是一个点,各线程在此点上将自按预定的顺序排队到线程自由列表上,以便维持其他串行互斥体的顺序使用,从而以按序的协助组进行工作。当媒体块RX_Status信号指示另一个信元已经被分配给此线程时,线程就休眠。
还有其它使用串行互斥体的应用程序示例。例如,在L3转发中,各线程可以进入两个串行操作的串行互斥体s-mutex把数据帧/信元转发给处理该流的下一线程,例如,以发送该数据帧;以及将自身按组顺序放回到线程的自由列表中。。
串行互斥体能用来帮助维持数据包和信元的顺序,如上面讨论的那样。通过提供一种串行操作的有效机制,可以减少开销,并且相应地增加吞吐量。
尽管是在多线程、多处理器的网络操作环境的背景中描述的,但串行互斥机制也可以应用于通用的多线程编程应用中。
其它的实施方式落在所附权利要求的范围内。
权利要求
1.一种方法,其特征在于包括将互斥锁与共享数据项相关联;及向按顺序对共享数据相执行代码操作的多个处理代理提供互斥锁的所有权。
2.如权利要求1所述的方法,其特征在于,所述处理代理为执行线程。
3.如权利要求2所述的方法,其特征在于,由执行线程所执行的代码处理接收自网络的包数据的单元,且顺序保持包数据单元的正确顺序。
4.如权利要求3所述的方法,其特征在于,所述保持正确的顺序包括保持转发的网络包的端点到端点顺序。
5.如权利要求2所述的方法,其特征在于,由执行线程所执行的代码处理接收自网络的包数据的单元,且顺序保持包数据单元处理的正确顺序。
6.如权利要求2所述的方法,其特征在于,代码被用来对属于包的ATM信元进行接收处理,包括CRC计算,所述共享数据项是存储在存储位置的CRC计算值,且顺序与在CRC计算中访问存储位置的顺序保持一致。
7.如权利要求6所述的方法,其特征在于,所述CRC计算值是CRC余数。
8.如权利要求2所述的方法,其特征在于,所述代码被用来对ATM信元进行接收处理,且共享数据项为顺序号。
9.如权利要求2所述的方法,其特征在于,所述提供包括使作为互斥锁的当前持有者的每个线程能够根据顺序将互斥锁的所有权传递给后继线程。
10.如权利要求9所述的方法,其特征在于,所述使能包括利用线程间信令资源向后继线程发信号,表示后继线程拥有互斥锁。
11.如权利要求10所述的方法,其特征在于,所述线程间信令资源包括状态寄存器,其存储每个线程的互斥锁所有权状态。
12.如权利要求2所述的方法,其特征在于,所述使能还包括作为互斥锁的当前所有者的每个线程在某个位置存储一相关标识符,当线程释放互斥锁时,该线程存储与后继线程相关的标识符。
13.如权利要求12所述的方法,其特征在于,所述提供包括使每个线程都能够接收表示互斥锁所有权的状态。
14.如权利要求12所述的方法,其特征在于,所述使能还包括由其它线程轮询所述位置,以判定所存储的标识符是否与轮询线程的标识符相匹配。
15.如权利要求12所述的方法,其特征在于,所述与后继线程相关的标识符的存储导致向后继线程发送一状态。
16.如权利要求12所述的方法,其特征在于,所述使能还包括触发在该状态处于睡眠的线程的唤醒。
17.如权利要求10所述的方法,其特征在于,所述线程间信令资源还包括线程的状态指示,表明线程已经成为互斥锁的所有者。
18.一种产品,其特征在于包括一种存储介质,在其上存储了指令,当指令被机器执行时将产生以下结果将互斥锁与共享数据项相关联;和向按顺序对共享数据项执行代码处理的多个执行线程提供互斥锁的所有权。
19.如权利要求18所述的产品,其特征在于,由执行线程所执行的所述代码被用来处理从网络中接收的包数据的单元,而且顺序与包数据单元的正确顺序保持一致。
20.如权利要求18所述的产品,其特征在于,由执行线程所执行的所述代码被用来处理从网络中接收的包数据的单元,而且顺序与包数据单元处理的正确顺序保持一致。
21.一种装置,其特征在于包括处理器,它包括访问共享数据项的处理代理;存储装置,它存储可执行代码以标识哪一个处理代理拥有互斥锁的所有权,包括使处理器进行以下步骤的指令改变处理代理可访问的信息,以反映按照顺序方式将所有权从作为当前所有者的一个处理代理向作为后继者的另一个处理代理的转移;和至少通知该后后继者信息已被改变。
22.如权利要求21所述的装置,其特征在于,所述处理代理是执行线程。
23.如权利要求22所述的装置,其特征在于,所述执行线程所执行的代码对从网络接收的包数据的单元进行处理,且顺序与包数据单元的正确顺序保持一致。
24.如权利要求22所述的装置,其特征在于,所述执行线程所执行的代码被用于对从网络接收的包数据的单元进行处理,且顺序与包数据单元的正确顺序保持一致。
25.如权利要求23所述的装置,其特征在于,所述保持正确的顺序包括保持所转送的网路包的端点到端点顺序。
26.如权利要求22所述的装置,其特征在于,所述执行线程所执行的代码对从网络接收的包数据的单元进行处理,且顺序与包数据单元处理的正确顺序保持一致。
27.如权利要求22所述的装置,其特征在于,所述代码被用来对属于包的ATM信元进行接收处理,包括CRC计算,所述共享数据项是存储在存储位置上的CRC计算值,且顺序与在CRC计算期间访问存储位置的顺序保持一致。
28.如权利要求27所述的装置,其特征在于,所述CRC计算值为CRC余数。
29.如权利要求22所述的装置,其特征在于,所述代码被用来对ATM信元进行接收处理,且共享数据项为顺序号。
30.如权利要求22所述的装置,其特征在于,所述提供包括使作为互斥锁的当前持有者的每个线程能够按顺序将互斥锁的所有权传递给后继线程。
31.如权利要求30所述的装置,其特征在于,所述使能包括用线程间信令资源向后继线程发出该后继线程拥有互斥锁的信号。
32.如权利要求31所述的装置,其特征在于,所述线程间信令资源包括状态寄存器,它存储每个线程的互斥锁所有权状态。
33.如权利要求22所述的装置,其特征在于,所述使能还包括每个作为互斥锁的当前所有者的线程在某位置上存储一关联标识符,当线程释放互斥锁时,该线程存储与后继线程相关的标识符。
34.如权利要求33所述的装置,其特征在于,所述提供包括使每个线程都能够接收表示互斥锁所有权的状态。
35.如权利要求33所述的装置,其特征在于,所述使能还包括其它线程对位置轮询,以确定所存储的标识符是否与轮询的线程的标识符相匹配。
36.如权利要求33所述的装置,其特征在于,存储与后继线程相关的标识符导致向后继线程发送一状态。
37.如权利要求33所述的装置,其特征在于,所述使能还包括触发在该状态处于睡眠的线程的唤醒。
38.如权利要求31所述的装置,其特征在于,所述线程间信令资源还包括线程的状态指示,表明线程已经成为互斥锁的所有者。
全文摘要
提供了一种将互斥锁与共享数据项相关联、并向多个执行线程提供互斥锁所有权的机制,这些线程按次序对共享数据项执行代码操作。
文档编号G06F9/00GK1512326SQ200310114380
公开日2004年7月14日 申请日期2003年11月12日 优先权日2002年11月12日
发明者L·B·休斯顿, C·E·那拉德, L B 休斯顿, 那拉德 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1