具体实施方式
图1显示了一个计算机***实施例的方框图。该计算机***包含处理器10A-D,通过关联数据包总线(coherent packet bus)15相连。关联数据包总线15的各个区域可在各个处理器10A-D间形成点对点连结。当图中显示的四个处理器利用点对点连结时,应注意可以使用其它数量的处理器及使用其它类型的总线将它们互连在一起。该计算机***还包含三个代号为20、30及40的I/O节点,分别由I/O数据包总线50B和50C连接成链状。I/O数据包总线50A连接主机节点/处理器10A及I/O节点20。处理器10A可视为主机节点,它可包含与I/O数据包总线50A通信的主机桥接器。处理器10B-D还可包含与其它I/O数据包总线(未显示)通信用的主机桥接器。由I/O封包总线50A-C所形成的通信连接也可视为点对点连结。I/O节点20连接到一对***总线25A-B。I/O节点30连接到图形总线35,同时I/O节点40连接至额外***总线(additional peripheral bus)45。
处理器10A-D分别以类似AthlonTM微处理器的x86微处理器为例。另外,一个类似I/O数据包总线50A至50C的数据包总线范例为非关联超传输TM(HyperTransportTM)。***总线25A-B及***总线45以类似PCI总线的通用总线为例。图形总线35以AGP总线为例。但是必须理解的是,其它型号的微处理器及其它类型的***总线也可使用。
应注意当图中显示的是三个I/O节点连接至主机处理器10A时,其它实施例可以使用其它数量的节点且这些节点可以其它的拓扑结构相连。图1中举出链状拓扑结构是便于大家理解。
在举出的实施例中,处理器10A的主机桥接器可接收来自I/O节点20、30或40一类下游节点向上传输的事务处理。另外,处理器10A的主机桥接器可将数据包向下传送至可连接到***总线25A的***设备(未显示)一类的设备中。
在操作中,I/O节点20及40可将PCI总线事务处理转换为在I/O流中移动的上游数据包事务处理中,并同时将下游数据包事务处理转换成PCI总线事务处理。所有源自处理器10的主机桥接器以外的节点的数据包在被转递到其它任意节点之前会先向上传输至处理器10A的主机桥接器。所有源自处理器10A的主机桥接器的数据包会向下传输至其它I/O节点,如节点20、30或40。此处所使用的″上游″指流向处理器10A的主机桥接器的数据包流,而″下游″指流向远离处理器10A的主机桥接器的数据包流。每个I/O流可通过名为单元ID(Unit ID)的识别码加以识别。单元ID可以想象成数据包报头的一部份或是数据包或数据包组中其它一些指定数量的位。这里使用的″I/O流″可视为所有包含相同单元ID而源自相同节点的数据包事务处理。
下面举一个***总线45上的***设备向***总线25上的***设备开始一个事务处理的例子。该事务处理会先转换成具有独特单元ID的单一或多个数据包并向上传输。要注意每个数据包可利用能识别数据包的特定信息加以编码。例如该单位ID可编码至数据包报头中。此外,该事务处理的类型也可编码至数据包报头中。每个数据包要指定一个可识别其源节点的单位ID。因为I/O节点20可能不会将数据包自下游传输到***总线25上的***设备中,该数据包会向上传输到处理器10A的主机桥接器中。接着,处理器10A的主机桥接器会将数据包加上处理器10A的主机桥接器的单位ID并传送回下游直到I/O节点20为***总线25上的***设备识别并申请该数据包。I/O节点20接着会将数据包转换成***总线事务处理,并将事务处理传送至***总线25上的***设备中。
当数据包事务处理向上或向下传输时,该数据包会通过一个或多个I/O节点。所谓通过有时可视为一种通道而I/O节点有时可视为一种通道设备。自上向下或者自下向上传输的数据包可视为″转递″流量(forwarded traffic)。此外,源自特定I/O节点并且***至上游流量中的数据包流量可视为″注入″流量(injected traffic)。
详述如下,要维持各种连接至I/O节点的总线的排序规则,I/O节点提供数据包缓冲的同时还要提供事务处理再排序。该I/O节点还可包含控制逻辑以控制同时通过转递与注入流量而进出通道的数据包流量。
图2显示了一个I/O节点实施例的方框图。该I/O节点代表了图1中的I/O节点20、30或40并为求简便此后皆视为I/O节点20。图2的I/O节点20包含一个事务处理接收器(transaction receiver)110,它通过命令总线(command bus)111与发送器(transmitter)140相连接,并通过命令总线112与***接口(peripheral interface)150相连接。I/O节点20还包含一个事务处理接收器120,它通过命令总线121与发送器130相连接,并通过命令总线122与***接口150相连接。***接口150还通过命令总线151与发送器130及140相连接,并与***总线152相连接。此外,I/O节点20包含一个事务处理控制单元100,它通过控制命令总线101与每个接收器、发送器及***接口相对应。于此处所使用的,命令总线即包括命令、控制及资料信号。因此,当事务处理或命令被要求送至个别的命令总线时意指包括命令及数据位。
在图示的实施例中,接收器110及发送器140形成I/O通道的一条通信路径而接收器120及发送器130形成I/O信道的第二条通信路径。由于各通信路径皆为单向的,任一条路径皆可能连接作为上游或下游路径。所以,来自***接口150的注入流量可提供给发送器130及140。
接收器110及120分别将数据包事务处理接收到接收缓冲器(未显示)中。当一个事务处理被接收后,会产生一个控制命令,它包含接收到的命令所包含的信息的一个子集。例如,该控制命令可包含源节点的单元ID、目的信息(destination information)、数据总数及事务处理类型。要注意该控制命令可能会包含其它信息或未包含某些此处所列出的信息。该控制命令会传送至事务处理控制单元100。
为响应***接口150从***总线152接收事务处理,***接口150也可产生控制命令,它包含与前述控制命令类似的信息。***接口150也可将事务处理储存在一个或多个缓冲区中,并将控制命令传送至事务处理控制单元100。
事务处理控制单元100可将每个接收到的控制命令以接收到的顺序存储到一个或多个缓冲结构中。依据事务处理控制单元100储存在其缓冲区中的控制命令,事务处理控制单元100可决定在源缓冲区(source buffer)(也就是接收器及/或***接口)中等待的对应命令的发送顺序。下面结合图3至图6加以详述,事务处理控制单元100可根据如事务处理类型的因素在其缓冲区中的事务处理间做仲裁,不管发送器或目的地中是否有可用缓冲空间存在,也不管事务处理为转递流量或注入流量。因此事务处理控制单元100可负责通过I/O节点的通道的事务处理的全部流量。
一旦事务处理控制单元100仲裁了要处理那一个事务处理的后,事务处理控制单元100会指示它的源设备发送一个未决事务处理到目标设备。例如,事务处理控制单元100自其缓冲区中选取一个代表事务处理自接收器110转递至发送器140的控制命令。事务处理控制单元100通过命令总线111通知接收器110将事务处理送至发送器140。发送器140接着将事务处理发送到链接中的下一个节点。下一个节点可能为另一个属于上游或下游的I/O节点,或者是图1中的主机处理器10A一类的主机节点。另外,事务处理控制单元100及发送器140可包括能告知另一个节点接收缓冲区中是否有可用空间的逻辑电路(未显示)。
图3显示了一个事务处理控制单元实施例的方框图。与图2中相同的电路组件皆用同样的数字标示以求简单明确。事务处理控制单元100包含分别标识为160、170及180的三个调度程序。任一调度程序160、170及180包含一对的虚拟信道命令缓冲区及一个仲裁器与缓冲器管理单元。调度程序160的虚拟信道命令缓冲区标识为虚拟信道先进先出存储器(V.C.FIFO)166及167,而仲裁器与缓冲器管理单元编号为168。同样地,调度程序170的虚拟信道命令缓冲区标识为V.C.FIFO176及177,而仲裁器与缓冲管理单元编号为178,调度程序180的虚拟信道命令缓冲区标识为V.C.FIFO 186及187,而仲裁器与缓冲管理单元编号为188。
一般而言,″虚拟信道(virtual channel)″为在不同的处理节点间传送数据包的通信路径。各个虚拟信道皆与其它虚拟信道的资源互相独立(resource-independent)(也就是说,在物理传送方面,在一个虚拟信道中流动的数据包一般不会受到另一个虚拟信道中数据包存在与否的影响)。数据包基于它的种类指定给某个虚拟信道。在相同虚拟信道中数据包彼此可能会发生物理冲突(也就是,在相同虚拟信道中的数据包可能会经历资源冲突),但不会与不同虚拟信道中数据包的传输产生物理冲突。
某些数据包可能与其它数据包发生逻辑冲突(也就是说,基于通信协议的原因、连贯性的原因或其它类似的原因,一个数据包可能与另一个数据包发生逻辑冲突)。若第一个数据包,基于逻辑或通信协议的原因,必须在第二个数据包抵达其目的节点之前先到达其目的节点,若第二个数据包物理上阻塞了(通过占用冲突资源)第一个数据包的传输则计算机***有可能会产生死锁。通过将第一个数据包与第二个数据包指定给分离的虚拟信道,并让计算机***上的传输媒体实现分离的虚拟信道中的数据包无法挡住彼此的传输,便可达成死锁解除(deadlock-free)工作。要注意的是来自不同虚拟信道的数据包是在相同的物理链接上传输。然而,由于接收缓冲器在发送前是可利用的,即便使用这种共享资源也不会导致虚拟信道互相阻塞。
从一个观点来看,每个不同的数据包类型(例如,命令编码各有不同)可指定给其专属的虚拟信道,因此在一个实施例中,分离的缓冲区分配给每个虚拟信道。因为分离的缓冲区可用于每个虚拟信道中,来自一个虚拟信道的数据包并不会与来自另一个信道的数据包产生物理冲突(因为这些数据包会放置在其它缓冲区中)。
每个调度程序对应于一个特定的目的及两个源。在图示的实施例中,调度程序160控制以图2的发送器130作为目的并以接收器120及***接口/桥接器150作为源的事务处理。同样地,图3的调度程序170控制以图2的发送器140作为目的并以接收器110及桥接器150作为源的事务处理。最后,图3的调度程序180控制以图2的桥接器150作为目的并以接收器110及接收器120作为源的事务处理。在图3中,各个虚拟信道命令缓冲区自各自的接收器或桥接器接收与各自的接收器或桥接器所接收的事务处理相对应的控制命令。控制命令可包括一个目的位以指定要将控制命令传送到哪一个调度程序。一般控制命令只会设定一个目的位。然而,在事务处理为广播消息的情况下,可能会设定一个以上的目的位以便让一个以上的调度程序能够接收该控制命令。
为简化讨论,仅对调度程序160做详述。当控制命令接受到V.C.FIFO 166或167中时,它们会依据事务处理的类型放置在各自的FIFO区域中。因V.C.FIFO 166及167是完全相同的,故仅对V.C.FIFO 166做详述。V.C.FIFO 166包含三个分离的FIFO区域对应于三种事务处理:公开的、非公开的及响应的。控制命令依照他们被接收到的顺序置入各自的FIFO中。然而,要维护与可能产生原始命令的不同的总线或不同类型的设备相结合的排序法则,事务处理可能必须在不同类型的事务处理间做无序处理。
结合图4至图6详述如下,仲裁器与缓冲器管理逻辑168可设定来仲裁在V.C.FIFO 166或V.C.FIFO 167内的事务处理中哪个事务处理要第一个处理、第二个处理等等。例如在响应命令之前抵达V.C.FIFO 166的公开命令由于排序法则的缘故可能必须在响应命令后才能做处理。此外,仲裁器与缓冲器管理逻辑168还可根据一套公正法则及下一个I/O节点或主机桥接器的接收缓冲区中是否有可用空间来仲裁来自哪一个V.C.FIFO的事务处理可以进行处理。若目的为图2的桥接器150,特定的仲裁法则可能会与上述的仲裁法则不同。
图4显示了一个调度程序实施例的方框图。与图3中相同的电路组件皆用同样的数字标示以求简单明确。事务处理调度程序400包括与仲裁和公正逻辑450相连的虚拟信道FIFO缓冲区410。事务处理调度程序400还包括也与仲裁与公正逻辑450相连的虚拟信道FIFO缓冲区420。仲裁与公正逻辑450连接至与缓冲管理逻辑470相连的FIFO缓冲区460。缓冲管理逻辑的输出被输出缓冲器480锁存。
如上结合图3所述,各个虚拟信道FIFO缓冲区410及420可从各自的来源输入接收控制命令,例如,图2中的接收器110或桥接器150。控制命令可依据控制命令所代表的事务处理类型放置于虚拟信道FIFO缓冲区410与420中。特别是,控制命令可代表公开、非公开或响应命令,因而可储存在各个公开、非公开或响应队列中。
在图示的实施例中,仲裁与公正逻辑450包含仲裁单元430与440及公正单元445。仲裁单元430可设定为可选取一个储存于虚拟信道FIFO缓冲区410中的控制命令。详述如下,该选择程序包括利用预仲裁算法(predetermined arbitration algorithm)选取一个胜出者(winner)。同样地,仲裁单元440可设定为采用与仲裁单元430相同的算法选取一个储存于虚拟信道FIFO缓冲区420中的控制命令。公正单元445可接着选取一个由仲裁单元430及440所选取的胜出事务处理。公正单元445可采用基于事务处理是转递还是注入来判决的公正算法。根据调度程序的目的,仲裁单元430与440还可包含用来追踪对应的事务处理的目的缓冲区的缓冲区空间的逻辑(未显示),如图1中下一个I/O节点的或在处理器10A的主机桥接器中的接收缓冲区。
在图示的实施例中,通过调度程序传播控制命令可能需要三个潜在的时钟周期。旁路415和旁路425分别围绕着虚拟信道FIFO缓冲区410和420显示。当调度程序400自源接收到控制命令且给定的虚拟信道FIFO缓冲区上的每个队列为空时,便有可能采用将虚拟信道FIFO缓冲区旁路的方式节约一个时钟周期。例如,在当前为空的虚拟信道FIFO缓冲区410上接收非公开控制命令。仲裁单元430上的逻辑可允许非公开控制命令将虚拟信道FIFO缓冲区410旁路,并且若仲裁单元430指出在事务处理的目的缓冲区中有可用的缓冲器空间,便立刻将非公开命令放入虚拟信道FIFO缓冲器460中。此外,公正单元445会根据上面所描述的公正算法授权此一旁路动作。通过上述范例可以看出节约一个时钟周期的潜在可能。要注意虽然图示的实施例显示了三个潜在的时钟周期,可以想象在其它的实施例中可能会有更少或更多的潜在时钟周期。此外,由旁路415及425所节约的实际潜伏时钟周期有可能更大或更小。
图4的FIFO缓冲区460可接收胜出的控制命令。在图示的实施例中,FIFO缓冲区460为一个双深度缓冲区(two-deep buffer),然而,可以想象的是在其它实施例中,FIFO缓冲区460可能会有更多或更少的缓冲区位置。
缓冲管理逻辑470是设定用来追踪图2中发送器130或140或桥接器150内的缓冲区空间。当事务处理储存在FIFO缓冲区460中时,缓冲管理逻辑470检查下一个缓冲区的可利用性,并保持控制命令直到缓冲区空间可以使用或允许其进入输出寄存器480。一旦控制命令已被输出寄存器480锁存,各个事务处理来源会分别被告知与控制命令相对应的事务处理可传送至图2的发送器130或140或桥接器150。
图5显示了一个包含标识逻辑的调度程序实施例的方框图。调度程序500包括一个与虚拟信道FIFO缓冲区505相连的标识逻辑501。虚拟信道FIFO缓冲区505包括三个分离的队列以对应于三种事务处理:公开、非公开与响应。标识比较/仲裁逻辑单元520与虚拟信道FIFO缓冲区505相连。此外还显示了虚拟信道FIFO缓冲区505的部分分解图。此部分分解图显示每个非公开与响应队列都有一个对应的标识。公开队列却有两个标识:分别对应于非公开与响应队列。
标识逻辑510可在每个控制命令储存到虚拟信道FIFO缓冲区505之前给它指定一个标识。控制命令可以根据它从图2中的接收器110或桥接器150之类的来源被接收到的顺序来指定标识。该标识可附加至控制命令。
当控制命令到达虚拟信道FIFO缓冲区505的顶端时,标识比较/仲裁逻辑单元520可设定成在三个虚拟信道间作仲裁以选出胜出的控制命令。胜出者是通过基于一系列排序法则的算法挑选出来的,这些排序法则对应于由连接到I/O节点的***总线负责维护的排序法则。在一个实施例中排序法则可能与PCI排序法则相对应。在另一个实施例中,排序法则可能与AGP排序法则相对应。
在图示的实施例中,由于虚拟信道FIFO缓冲区505最多可达16个位置深度所以标识为四位。要注意在其它实施例中,虚拟信道FIFO缓冲区505可能包含其它数量的位置深度而标识因此会包含对应数目的位数。标识逻辑510可包含为储存于虚拟信道FIFO缓冲区505中的非公开及响应控制命令追踪现有标识的计数逻辑(未显示)。该标识可依据一个算法来指定,如果在当前接收到的公开控制命令之前和前一个公开控制命令之后接收到至少一个可阻断的非公开或响应控制命令,该算法根据接收的公开控制命令对非公开或者响应计数器进行递增。正如这里所用的,如果一个可辨认在虚拟信道FIFO缓冲器505中非公开或者响应控制命令可否通过公开控制命令的特定位被设置,非公开或者响应控制命令是可阻断的。在一个实施例中,该特定位表示为密码(PassPW)位。
为说明标识算法的使用,表1举例说明了进入三种公开、非公开及响应队列的控制命令的接收顺序与标识。第一栏显示九种控制命令的接收顺序。第二栏显示收到的命令类型。第三栏显示指定给非公开与响应命令的标识,而第四与第五栏显示经公开控制命令递增后的非公开及响应命令计数器值。由于公开控制命令接收两个标识,其同时接收分别显示于非公开与响应计数器中的现行计数器值。虚拟信道FIFO缓冲区505的部分分解图图示了表1的命令如何储存起来。
表1
接收顺序 | 控制命令 |
PassPW位 | 标识值 |
非公开计数器 |
响应计数器 |
1 |
公开1 |
0 | |
0 |
0 |
2 |
响应1 |
0 |
0 |
0 |
0 |
3 |
公开2 |
0 | |
0 |
1 |
4 |
非公开1 |
0 |
0 |
0 |
1 |
5 |
响应2 |
0 |
1 |
0 |
1 |
6 |
非公开2 |
0 |
0 |
0 |
1 |
7 |
公开3 |
0 |
|
1 |
2 |
8 |
响应3 |
0 |
2 |
1 |
2 |
9 |
非公开3 |
0 |
1 |
1 |
2 |
表2示出了PassPW位如何影响显示在表1中接收到的控制命令的标识。若PassPW位在非公开或响应控制命令时置位,下一个公开控制命令将不会递增相应的计数器。例如,在表2中,设PassPW位在响应1时置位,所以当接收到公开2控制信号时,该响应计数器并不会递增。然而,当PassPW位在非公开2时置位,公开3控制命令会使非公开与响应计数器皆递增。这是因为非公开1控制命令在最后一个公开控制命令之后及现行公开控制命令之前被接收到时PassPW位被清零,因此满足递增计数器的标识规则。要注意尽管PassPW位在此描述为置位时指示非公开或响应控制命令可通过公开控制命令,可以想象在其它实施例中可采取相反的逻辑。
表2
接收顺序 | 控制命令 |
PassPW位 | 标识值 |
非公开计数器 |
响应计数器 |
1 |
公开1 |
0 | |
0 |
0 |
2 |
响应1 |
1 |
0 |
0 |
0 |
3 |
公开2 |
0 | |
0 |
0 |
4 |
非公开1 |
0 |
0 |
0 |
0 |
5 |
响应2 |
0 |
0 |
0 |
0 |
6 |
非公开2 |
1 |
0 |
0 |
0 |
7 |
公开3 |
0 | |
1 |
1 |
8 |
响应3 |
0 |
1 |
1 |
1 |
9 |
非公开3 |
0 |
1 |
1 |
1 |
重新参阅图5,在仲裁时,标识比较与仲裁逻辑单元520会设定成通过比较附加至各个控制命令的标识从虚拟信道FIFO缓冲区505中挑选出胜出的控制命令。此外,在标识比较之前,标识比较与仲裁逻辑单元520会辨别在各个虚拟信道的下一个I/O节点中是否有可用的缓冲区空间。若有任何的虚拟信道被阻断了,则该信道在本周期中不能参与仲裁。若三个信道皆可以做仲裁,则仲裁在非公开与响应信道之间以循环方式(round robin fashion)进行,而***道则与非***道及响应信道作个别比较。最后,标识比较与仲裁逻辑单元520会利用公正算法来决定胜出者。公正算法将结合图6的叙述在下面做更详细的叙述。
图6显示了一个包含饥饿回避逻辑的事务处理调度程序实施例的方框图。事务处理调度程序600包括一个与仲裁电路650相连的虚拟信道FIFO缓冲区610。事务处理调度程序600还包括同样与仲裁电路650相连的虚拟信道FIFO缓冲区620。仲裁电路650连接至与缓冲管理逻辑680相连的FIFO缓冲区670,。该缓冲管理逻辑的输出为输出寄存器690所锁存。
与先前的图3与图4的叙述相同,虚拟信道FIFO缓冲区610及620可自类似图2的接收器110或桥接器150等各自的来源输入接收控制命令。该控制命令可依据控制命令所代表的事务处理类型储存在虚拟信道FIFO缓冲区610与620中。例如,该控制命令可代表公开、非公开或响应命令,因而储存在各自的公开、非公开或响应队列中。
在图示的实施例中,仲裁电路650包含仲裁单元630、640及公正电路645。在一个仲裁周期中,仲裁单元630与640可设定为分别选取一个储存于虚拟信道FIFO缓冲区610与620中的控制命令。此外,公正电路645可提供选择条件,以决定采用仲裁单元630还是640选择胜出的事务处理。结合图7详述如下,公正电路645可利用公正算法在分配带宽前建立仲裁。该公正算法可依赖饥饿回避逻辑以便于任一个事务处理被阻断达预定数目的周期时做判断。
图7显示了一个图6的公正电路实施例的方框图。公正电路645包括一个包含了三十二个与8位计数器705相连的3位计数器0-31的公正单元700。锁存器710与计数器705相连。***比率逻辑(insertionrate logic)715与锁存器710相对应。公正电路645亦包含一个饥饿单元750,它包含三个与饥饿定限寄存器(starvation thresholdregister)760相连的虚拟信道计数器755-757以及与公正单元700及饥饿单元750相连的事务处理选择单元775。
在一个实施例中,每次事务处理经由通道转递时,与传送事务处理的I/O节点相对应的3位计数器0-31会递增。另外,计数器705在3位计数器0-31每次递增时也会递增。当其中一个3位计数器0至31溢出时,锁存器710会捕获计数器705中的值。捕获到的值代表了该特定时间点的下游节点事务处理请求率。***比率逻辑715接着会利用捕获到的值来计算该节点的容许***率。
事务处理选取单元(transaction selection unit)775可在图6的仲裁单元630或640中引发一个指针以指向在仲裁周期中要考虑的虚拟信道缓冲区。在转递后的虚拟信道缓冲区的虚拟信道中以及在***缓冲区的相同虚拟信道中都有事务处理存在的情况会多次发生。在图7中,事务处理选择单元775会依据公正单元700所建立的优先权从两个虚拟信道缓冲区选择一个。然而在虚拟信道因为事务处理的目的中缺少足够的可用缓冲区空间一类的原因而遭到阻断的情况下,仲裁逻辑会略过遭阻断的信道并前往下一个虚拟信道让仲裁得以继续。当遭阻断的信道变成可利用时,将只会有供转递后的信道使用的空间且因为其依据公正算法可能会有大于***的信道的优先权,来自转递后信道的事务处理便可送出。接着下次前一个遭阻断的信道变成可以使用的,其在此仲裁周期中便会再一次的没有优先权,且因此会再次被略过。此状况会持续,因而使***的虚拟信道″饥饿(starve)″。根据特定节点上的设定,可以想象在其它的实施例中,转递后的信道亦会因相同的情况由***的信道而产生饥饿。
要避免给定的信道发生饥饿,饥饿单元750会追踪事务处理被阻断的次数。每当事务处理选择单元775决定某个事务处理合乎进行仲裁的资格但该事务处理却遭到阻断时,事务处理选择单元775会使对应的虚拟信道计数器755-757做累加。饥饿定限寄存器760保存了信道在仲裁过程中被略过的最大次数相对应的值。储存在饥饿定限寄存器760中的值会依据在任意给定时间点上计算的需求率做动态的改变。当任意的虚拟信道计数器755-757符合饥饿定限寄存器中的值时,对应的虚拟信道的优先权会改变,如此一来在紧接着的仲裁周期中事务处理选择单元775会选取遭阻断的事务处理。因此,通过动态的改变优先权,特定信道的饥饿便可以加以避免了。要注意上述的逻辑安排仅为一个具体的实现。可以想象的是,其它的实施例有可能使用含有不同数目的计数器或不同位数的计数器的其它逻辑安排以达成上述的功能。
亦应注意的是上述图示的实施例为调度程序的具体实现。可以想象的是其它实施例可能包括表现出额外及/或不同的功能的其它实现方法。
一旦完全理解了上述公开的内容,本领域的普通技术人员很容易对本发明做变化或者修改。下面的权利要求意在包括这些变化与修改。