在环型缓冲区中确定顺序优先级的制作方法

文档序号:6413815阅读:242来源:国知局
专利名称:在环型缓冲区中确定顺序优先级的制作方法
技术领域
本发明涉及含有项目序列的环型缓冲区,更具体地说,涉及在所述环型缓冲区中满足给定判据的项目之间顺序优先级的确定。
当实现先进先出(FIFO)的缓冲区时,采用环型缓冲区,其中储存项目序列。新项目从项目序列头部加入,老项目从序列的尾部取出。通过加入新项目和取出老项目,所述环型缓冲区中的有效窗口就开始移动,它像蠕虫一样绕着环型缓冲区爬行,时而收缩,时而伸展。
无论何时,只要所述项目序列伸展到缓冲区最后一个项目位置以外,就出现环绕,这意味着所述序列最新的项目装入所述缓冲区的第一个项目的位置。
当所述项目被安排入项目序列时,在这些项目之间存在一种次序。因为,例如,需要选择满足某个条件的最老的或最新的项目,所以就会出现这种次序变得重要的情况。例如,不同的项目可能都满足给定的条件,这时就需要在它们的顺序优先级上进行比较。
这个问题的一种解决办法是总在项目序列的尾部和项目序列头部之间留出一段空隙,并使满足所述判据的指令阻塞较新的指令。
这种解决办法的一个缺点是浪费缓冲区空间,因为缓冲器的项目得不到充分利用。
本发明的一个目的是提供一种在从所述序列的第一个项目排列到所述序列的最后一个项目存在真实的项目位置的连续序列的环绕式存储器中,确定满足给定的条件的项目的顺序优先级的方法,并提供能避免现有解决办法的缺点的相应的环绕式缓冲区。
本发明的目的用根据本发明的环绕式缓冲区和根据本发明的在环绕式缓冲区中确定项目顺序优先级的方法解决。
根据本发明的环绕式缓冲区包括n个真实的项目位置,用来保存项目;第一组项目位置,它包括从所述序列的第一个项目到所述序列的最后一个项目的真实项目位置的连续序列;第二组项目位置,它包括所有不包括在所述第一组项目位置内的所有项目位置;所述第一组项目的预定项目的子集。
首先,向环绕式缓冲区未被占用的部分至少提供额外的虚拟项目位置。
第二步,通过禁止从所述预定的项目子集的每一个所述预定项目开始包括所述虚拟项目位置的至少(n-1)个相邻项目位置,来确定预定项目子集的在顺序上最新的项目或在顺序上最老的项目。
根据本发明的在环绕式缓冲区中确定项目顺序优先级的方法,所述环绕式缓冲区包括n个真实的项目位置,用来保存项目;第一组项目位置,它包括从所述序列的第一个项目到所述序列的最后一个项目的真实项目位置的连续序列;第二组项目位置,它包括所有不包括在所述第一组项目位置内的所述真实项目位置;第一组项目位置的预定项目的子集;所述方法包括以下步骤在第二组项目位置中提供至少n个虚拟的项目位置;通过抑制从所述预定项目子集的每一个预定项目开始包括虚拟项目位置的至少(n-1)个相邻的项目位置,从所述预定项目的子集中确定顺序上最新的项目或者顺序上最老的项目。
通过加入虚拟项目位置,可以加宽项目序列头部和项目序列尾部之间的间隙,而不留下一大部分未占用的环型缓冲区。使用一种实现起来成本低的容易的阻塞机制来阻塞被选中的不具有顺序优先级的项目。”幸存者”便是具有顺序优先级的项目。
所述预定项目的子集可以包含满足任何给定判据的项目。这样,所述选择具有顺序优先级的项目的方法,就可以应用于任何选择判据。


图1表示环型环绕式缓冲区的两种不同状态,这样每一种状态都可以用各自的入指针和出指针的位置来表征。
图2A表示将用作实施例的环型缓冲区的非环绕状态。
图2B表示为了使位串尺寸加大一倍可以如何展开初始有效位串。
图3给出完成展开后有效位串的图形表示。
图4描述扩展初始位串用的可能的电路。
图5A表示用作第二实施例的环型缓冲区的环绕状态。
图5B表示如何通过展开逻辑使初始位串尺寸加大一倍。
图6给出处于展开状态的有效位串的图形表示。
图7表示如何实现用来选择具有顺序优先级的项目的优先级滤波器。
图8表示为了阻塞所有优先级比自己低的匹配线,每一条匹配线如何激励对应的禁止线。
图9描绘为了提供几个具有顺序优先级的匹配项目而将几个优先级网络级联的方法。
图1表示环型缓冲区的两个状态,”空”态和”满”态。环型缓冲区(100)包括一组项目位置(101),它可以含有项目(102)或不含有项目(101)。当具有顺序次序的项目写入所述环型缓冲区时,当装配所述项目时,必需注意这个次序。一般设置两个指针,进指针(103)和出指针(104),它们使环形缓冲区作为先进先出(FIFO)缓冲区而运行成为可能。进指针指向环型缓冲区中与缓冲区最近被占用的项目相邻接的第一个空闲的项目位置(107)。这样,进指针定义了已储存的项目序列的头部。无论何时,只要新的项目准备写入缓冲区,它就被放在进指针所指的项目位置上。然后使进指针加一,以便再次指向下一个可用的项目位置。这样,进指针便确定了已经存入环型缓冲区的项目序列的头部。
反之,项目序列的尾部由出指针确定,后者指向第一个被占用的项目位置,这是所述项目位置序列中最老的项目位置。无论何时,只要选择先进先出(FIFO)项目,并使之离开先进先出(FIFO),就选择出指针(106)所确定的项目,因为就顺序而言,它是最老的项目。接着,出指针加一,于是一个新的未被占用的项目位置又变成可以使用了。
在环型缓冲区空的情况下,进指针(103)和出指针(104)都指向同一个项目位置。在环型缓冲区满的情况下,这意味着有多少可以填入的项目位置就已经写入了多少个项目,仍旧存在一个由进指针(105)指着的未被占用的项目位置(107)。出指针(106)指向与所述空项目位置(107)邻接的项目位置。这样,只要看看进指针和出指针各自的位置,就可以区分空态和满态。
通过向项目序列头部加入新的项目,以及从项目序列尾部取出老项目,项目序列就开始移动。可以把它想象成一条可以向前爬行的蠕虫,它时而伸展,时而收缩。
下面将用图2A给出的例子表示如何可以把多个虚拟项目位置加入环型环绕式缓冲区真实项目位置。已占用项目序列从项目位置0伸向项目位置52。因此,在这种情况下,构成有效窗口的所述项目序列在环型缓冲区中是不环绕的,已占用的项目序列不同时占用项目位置63和0。有效窗口的范围由出指针(201)的位置确定,后者指出,项目位置O保有所述项目序列最不新的项目(202),它通常是最老的项目。项目位置52保有最近加入的项目(204),它由出指针(203)指出,后者指向与之邻近的作为第一个未被占用的项目位置的可用项目位置53(205)。
根据环型缓冲区64个项目位置中给定的一个是否被占用,在由与环型缓冲区64个项目对应的64个位组成的”有效位串”(206)中设置”有效位”。这样,在所述”有效位串”(206)中1的序列代表在所述环型缓冲区中从出指针(201)到进指针(203)之前的项目位置范围的项目序列。对于环型缓冲区每一个未被占用的项目位置,在有效窗口位串(206)对应的位置设置“0”。在我们这个实施例中,0从位串位置53伸展到位串位置63。
图2B给出的电路的任务是向有效窗口位串206的64位加上与虚拟项目位置对应的64个位。所述环型缓冲器只包括64个真实的项目位置。因此,在环型缓冲区中并不存在与所述64个虚拟项目位置对应的项目位置。展开有效窗口串的任务是通过包括所述有效窗口串中每位一个展开电路(208,209)的展开逻辑(207)来完成的。因此,就需要平行地存在64个所述的展开电路(208,209)。
有效窗口串的每一位,例如位i(210)设置为它对应的展开电路(208)的输入。每一个展开电路存在两个输出。展开电路i的第一个输出(212)写到包括128个项目的扩充的位串214的第i位。所述展开电路的第二个输出(213)写到扩充的位串214的第i+64位,后者同时代表真实项目位置的和额外的虚拟项目位置的状态。在展开电路208的输入i(210)等于1的情况下,1出现在输出212或213中的一个上。所述展开电路的另一个环绕输入211确定扩充的位串214的位i还是位i+64将含有”1”。在无环绕发生的情况下输入211失效。这是在图2A所描绘的实施例的情况,因此,输出i将被设置成”1”(212),而输出i+64将被设置成”0”(213)。
输入k(215)与环型缓冲区未被占用的项目位置对应,因而等于”0”。在这种情况下,对应的展开电路209的两个输出都等于”0”。”0”既写入扩充的位串214的位置k(216),又写入位置k+64(217)。
因为在这个实施例中,并没有环绕,所以有效窗口串206中所含的所有”1”都向前送到扩充的位串214的下半部。
所得有效位串214的结构示于图3中的图形表示。由于初始有效窗口串的所有”1”都向前送到扩展窗口串(无环绕!)的同一位置。扩展窗口串214的位0-52(300)都填成”1”。扩充的位串214的剩余部分含有零。位53-63中所含的零与初始有效窗口串206的位位置52-63的零对应。扩充的位串214的位64-127也填成零,因为所有展开电路的所有输出i+64都已经把零写到扩充的位串的上半部分。这之所以发生,因为在本实施例中还没有出现任何环绕。
在图4中给出了所述展开电路(208,209)中的一个的可能的实现(400)。有效窗口串的位i作为所述展开电路的输入(401)向前送。环绕输入(402)确定所述输入位向前送给哪一个输出(405,407)。首先,确定是否存在环绕。在项目位置0和项目位置63都保有有效项目的情况下,环绕存在。在有环绕存在的情况下,在第二步确定所考虑的位的项目号i是否小于出指针所指向的项目号。
在两个条件都满足的情况下,环绕输入402被设置成”高”,与输出407对应的场效应管(FET)406被激活,而通过反相器403接收所述环绕信号402的FET 404被置成失效。这意味着在环绕的情况下,出现”0”(405),后者写到扩充的位串214的位i。输入401向前送到输出407,后者写到所述扩充的位串的位i+64。
在无环绕的情况下,环绕输入402是”低”,FET 406失效,而FET404被激活。这意味着输入401向前送到输出405,后者写到所述扩充的位串214的第一半,而零出现在输出407。
看看环绕存在的缓冲区状态,这种电路的含义就变得更清楚了。在图5A中描绘出这样一种状态。在那里,正如标出有效窗口串尾部的出指针501所指出的,可以发现有效项目序列最老的项目(502)是在项目位置63。当跟踪从所述尾部开始的已占用的项目序列时,发生从项目位置63到项目位置0的环绕。因为项目位置63和项目位置0都含有有效项目,所以满足图4中的第一个环绕信号402的条件。有效项目序列向上伸展到项目位置61(504)。项目位置61的项目确定了有效顺序的头部。这是由指向下一个可用的项目位置(505)的进指针503指出的。所述项目位置是唯一未被占用的项目位置。
在图5B中解释有效窗口串506向包括128个项目的扩充的位串514的平移。初始有效窗口串包括从位0到位61的”1”的序列,在位62上的”0”和位63上的”1”。显然,当环绕发生时,有效顺序被分成两部分从项目位置0到进指针的前一个项目位置的前部和从出指针所规定的项目位置直至项目位置63的后部。
图4条件框给出的第二个条件要求,所考虑的项目位置小于出指针所指的项目号。对于从0到61的有效序列的前部,这个条件是满足的。但是,对于属于有效项目序列的后部的所有项目,这个条件都是不满足的。在我们的例子中,后部只包括一个项目位置,项目位置63,它并不小于出指针所指的项目位置。这样,在环绕的情况下,对于属于所述已占用的项目序列的前部的所有项目,环绕信号是有效的,而对于所有属于所述有效序列的后部的项目位置,所述环绕信号是无效的。
位i(510)属于有效窗口串506的前部。因此,环绕信号511有效。所以,与位i对应的展开电路508把输入510的”1”向前送到i+64的输出513,于是,把”1”写入扩充的位串514的位置i+64。相应地,”0”出现在所述展开电路508的输出512上,因而”0”写入所述扩充的位串的位置i。相应地,有效窗口串位置61上所含的”1”向前送到输出520,并写到扩充的位串514的位置125。因此位置125含有”1”(521)。相应地,”0”写入位串514的位置61。这样,位串506的位置62含有0,而所述的0也写入扩充的位串514的位置62和位置126。
对于项目位置63所含的”1”,情况就不同了。在这里,图4条件框中的第二个条件是不满足的,因为项目位置63不小于出指针501所指的位置。因此,有效窗口串506的位置63所含的”1”向前送到输出515,并写入扩充的位串514的位置63(516)。与初始位串的项目位置63对应的第二个输出(517)无效,因为不满足所述条件。所以,一个”0”写入所述扩充的位串的位置126。项目位置126和127总含有零(522)。
在图6中给出扩充的位串所得的结构。初始有效窗口串的后部只在位置63包含项目(601)。所述初始有效窗口串的前部包括从项目位置0(602)直至项目位置61(603)的项目。但是,所述有效窗口串(604)的所述前部所含的”1”并不同样地复制到扩充的位串,因为图4条件框的两个条件都满足。相反,项目位置0(602)所含的”1”映射(605)到项目位置64的”1”(606)。相应地,项目位置61所含的”1”(603)写到(607)扩充的位串514的项目位置125(608)。这样,初始有效窗口串的整段604复制到扩充的位串上半部分的段609。有效窗口串604前面的项目,包含在扩充的位串的下半部分,用零填充。这样,在已占用的项目序列的后部保持不变(601)的同时,所述有效项目序列的整个前部完成转移到扩充的位串的上半部。
通过这样做,在项目位置63和项目位置0之间加入64个虚拟项目,就重新装配了已经撕成两部分的有效项目序列,以便形成从项目位置63到项目位置125的连续序列。在最新的项目(608)和最老的项目(601)之间的间隙,为了形成所述扩充的位串已经加入64个虚拟项目,全都含有零。所述间隙开始时只在项目位置62包括未被占用的位置(505),而现在所述间隙含有65个未被占用的位置,但是,所述未被占用的位置中有64个是虚拟项目位置,它们并不对应于任何真实的缓冲区项目。这样,所述间隙就虚拟地增加了。
在图7中,说明所述扩充的位串如何向前送到顺序优先网络。选用与图2A描绘的相同的缓冲区状态作为例子。环型缓冲区含有从项目位置0到项目位置52的项目位置序列,没有环绕。这由含有64个项目的有效窗口串206中相应的1和0的序列代表。所述64个项目向前送到扩展逻辑(207),后者使用有效窗口串206的各位和环绕信息(211)作为输入,并产生128个位宽的扩充的位串作为输出。所述扩充的位串是按照图2B所给出的方法产生的,因此,所得的扩充的位串214与图3给出的结构相同。这个扩充的位串向前送到发送选择单元700。在这里,对所述扩充的位串的每一个有效位位置都应用判据。只有也满足所述判据的扩充的位串的有效位才向前送到顺序优先级网络。
现用一个例子更加清楚地说明可以如何确定所述判据。在无顺序的处理系统中,指令在它们被分送到它们各自的执行单元之前,首先被送到指令窗口缓冲区。在所述指令窗口缓冲区中,每一条指令被分配给一个项目,后者保存所述指令本身,源和目的操作数识别符以及若干状态位。每一个项目保留在指令窗口缓冲区中直至它所有源操作数都已经计算出来并已可用为止。一旦它的所有的源操作数都已可用,就可以把指令发送到执行单元中的一个。所述指令窗口缓冲区通常都做成环型缓冲区。这意味着来自指令串的新指令写到窗口缓冲区中的指令队列的第一个空闲项目上。所述第一个空闲项目就是进指针所指向的项目。可以环绕的队列的尾部由出指针指示。这样所述出指针便指向保持队列最老指令的项目。
在每一个周期中,都需要从指令窗口缓冲区选择”准备好发送”的指令。
按照处理能力和可用执行单元的数目,可以向执行单元发送数目有限的指令。发送指令的前提是指令所有的源操作数都可用。这通常由”源有效”位指出。在所述指令的源操作数的所有源有效位都置1的情况下,所述指令就”准备好发送”了。在这种情况下,上述判据就是所有源操作数都可用。
但是,确定了在所述有效指令队列中哪些指令满足发送判据之后,仍可能还有许多”准备好发送”的候选指令,不能在一个周期中把它们都发送出去。所以,在这些候选指令中,还需要按照它们的优先级进行选择。”准备好发送”的候选指令中最老的指令要首先发送。因此,优先逻辑需要利用所有可用的源确定所述指令中具有最高的优先级的指令。
现在让我们回到图7,看一下发送选择逻辑(700)。展开逻辑(207)已发送一种有效位串,其中每一个有效指令项目都保持”1”。对这种扩充的位串应用是否全部指令源操作数都可用(701)的判据。由于项目i和项目i+64都对应于同一个物理项目,所以”所有源操作数均可用”信号(702)同时加到所述扩充的位串的位置i和i+64。这是通过把”所有源操作数均可用”信号(702)向前送到每个所述扩充的位串位位置的“与”门(703,704)来实现的。通过把指令窗口缓冲区队列的每个有效指令项目含有”1”的扩充的位串馈送到一排128个“与”门(705),只有那些满足”所有源操作数均可用”(701)判据的有效位才被保留下来。这些是发送的可能的候选者,在它们之中,需要确定优先级。所述“与”门(703,704,…)的128个输出被称为”匹配线”(706)。所有128条匹配线都向前送到优先级滤波器。
优先级滤波器的任务是确定所有有效匹配线(706)中最老的一条。
对于每一条匹配线ML(0)到ML(127),都存在对应的禁止线。在图7给出的优先级滤波器电路背后的想法是,每一条有效的匹配线通过激活它们的禁止线应该能够阻塞63条随后的代表较新项目的匹配线。
作为一个实施例,让我们考虑匹配线ML(2)(707)。当所述匹配线有效时,“与”门711的两个输入中的一个为高。禁止线708与ML(2)对应。所述禁止线708初始为”高”,除非前面63条匹配线中的一条将它拉”低”,否则它仍旧为”高”。在所述禁止线708不被它前面的匹配线拉”低”的情况下,“与”门711的两个输入都有效,因此该“与”门的输出M(2)有效。
因为ML(2)(707)有效,所以所有的FET 709都被激活,后者将与ML(3),ML(4),…ML(65)对应的禁止线拉”低”。因为禁止线710被拉”低”,所以M(3)至M(65)都无效。
M(0)至M(127)代表优先级滤波器的最后所得的输出。准确地说这些信号线中,只有一个将是有效的,而这条信号线指出哪一个缓冲区项目既满足判据又具有顺序优先级。在我们的情况下,所述优先级滤波器输出将指出所有源操作数均可用的最老的缓冲区项目。
为了使这些输出信号与缓冲区项目发生关系,需要去除由展开逻辑207加入的虚拟项目。这是通过把输出M(i)和输出M(i+64)相“或”(717)而实现的。“或”门(717)的输出718将确定缓冲区项目i是不是所有源操作数均可用的最老的缓冲区项目。
图8表示一条有效匹配线如何能够阻塞随后的63条匹配线。有效项目序列从出指针所指的最老的项目(800)排列到进指针之前的最新项目。因为没有环绕,所以展开逻辑(207)刚好加上从项目64排列到项目127的64个虚拟项目。让我们假定,4条匹配线ML(5)(803),ML(20)(804),ML(39)(805)和ML(46)(806)满足给定的判据。在这些候选项目中,需要由优先级逻辑确定最老的一个。每一条有效匹配线都通过激活所述63条随后的匹配线来阻塞随后的63条匹配线。这样,匹配线(5)(803)阻塞所有匹配线,从6至68(806)。被禁止的匹配线的范围总是用半园表示。匹配线804阻塞匹配线的范围808,匹配线805阻塞范围809,而匹配线806阻塞范围810。唯一不被其他匹配线阻塞的匹配线是ML(5)。ML(5)事实上是最老的匹配线。因此,ML(5)将是有效的,它将与ML(68)进行“或”操作,后者不是有效的,而所得结果将指出项目5是满足所述判据的最老的项目。
图8还指出,为什么需要把虚拟项目加到有效窗口串上。否则,队列尾部和头部之间的间隙就不足够大,而老的匹配线就可能被较新的匹配线阻塞。在给出的解决方案中避免了这个问题。
当需要确定最新的项目时,图7的电路也可以应用。在这种情况下,匹配线阻塞需要发生在相反的方向。有效的匹配线会需要阻塞前面63个项目。
在图9中给出了表示几个优先级滤波器的级联电路。为了不仅确定满足条件的最老的或最新的项目,而且确定若干个满足条件的最老的或最新的项目,需要这样的级联电路。看看将是有效匹配线的ML(2)(901),所述原理就清楚了。假如这条匹配线不被其他任何一条匹配线阻塞,则它对应的禁止线(900)将为”高”。在这种情况下,ML(2)是最老的匹配线,为了指示这一点,“与”门902的输出有效。因为ML(2)已经被优先级滤波器1选择为最老的有效匹配线,所以它不需要向前送到优先级滤波器2。禁止线900向前送到“与”门903的反相输入。所以,只要禁止线处于”高”电平,匹配线904就无效。
若(2)已经被任何其他较老的匹配线阻塞,情况就不一样了。在这种情况下,它对应的禁止线900将被置成”低”,“与”门902的输出无效。这意味着ML(2)不是满足所述判据的最老的项目。但是,仍旧可能是满足所述判据的第二最老的项目。禁止线900连接到“与”门903的反相输入,而有效匹配线901本身连接到非反相输入。所以,构成所述匹配线中与优先级滤波器2相关的一条匹配线的输出904是有效的,而ML(2)将被在下一个连接步骤考虑。
通过在所述优先级滤波器级联电路上加入其他优先级滤波器,就可以同时选择若干个具有顺序优先级的项目。在一个周期中从指令缓冲区向若干个执行单元发送几条指令,是这样的级联循环电路有用的一个例子。但是,本发明绝不限于指令窗口缓冲区。
权利要求
1.一种环绕式缓冲区,它包括n个真实的项目位置,用来保存项目,第一组项目位置,它包括从所述序列的第一个项目到所述序列的最后一个项目的真实项目位置的连续序列,第二组项目位置,它包括所有不包括在所述第一组项目位置内的所述项目位置,所述第一组项目位置的预定项目的子集,其特征在于用来在所述第二组项目位置中提供至少n个额外虚拟项目位置的装置,用来确定所述预定项目的子集中顺序上最新的项目或者顺序上最老的项目的装置,从而,所述装置从所述预定项目的子集的每一个所述预定项目开始,至少禁止包括所述虚拟项目位置的(n-1)个相邻的项目位置。
2.按照权利要求1的环绕式缓冲区,其特征在于所述第一组项目位置的所述预定项目的子集包含所述第一组项目位置中满足预定判据的所有所述项目。
3.按照前面的权利要求中任何一个的环绕式缓冲区,其特征在于用来在所述第二组项目位置中提供至少n个额外的虚拟项目位置的所述装置把至少n个虚拟项目位置加到所述环绕式缓冲区的后面,假如所述第一组项目位置的环绕存在,则把所述第一组项目位置分成两部分,前部和后部,所述提供至少n个虚拟项目位置的装置把所述两部分中的一部分复制到所述环绕式缓冲区的所述虚拟项目位置上。
4.按照前面的权利要求中任何一个的环绕式缓冲区,其特征在于所述用来确定所述预定项目的子集中顺序上最新的项目或者顺序上最老的项目的装置包括用来把所述真实的项目位置与虚拟项目位置复合的装置。
5.按照前面的权利要求中任何一个的环绕式缓冲区,其特征在于所述环绕式缓冲区是指令窗口缓冲区,从而所述第一组项目位置中的每一个项目保持指令。
6.按照权利要求5的环绕式缓冲区,其特征在于所述第一组项目位置的所述预定项目的子集包含所述第一组项目位置的所述项目中这样一些项目保持在所述项目中的指令的所有源操作数均是可用的。
7.按照前面的权利要求中任何一个的环绕式缓冲区,其特征在于所述用来确定所述预定项目的子集中顺序上最新的项目或者顺序上最老的项目的装置还包括每一个项目位置一条匹配线,从而包括所述虚拟项目位置,以及从而,假如每一条匹配线对应的项目位置保持属于所述第一组项目位置的所述预定项目的子集的项目,则所述匹配线有效。
8.按照权利要求7的环绕式缓冲区,其特征在于所述用来确定所述预定项目的子集中顺序上最新的项目或者顺序上最老的项目的装置还包括每一条匹配线一条禁止线,从而,所述禁止线禁止与至少(n-1)个相邻的项目位置对应的所述匹配线。
9.一种用来在环绕式缓冲区中确定项目顺序优先级的方法,所述环绕式缓冲区包括n个真实的项目位置,用来保存项目,第一组项目位置,它包括从所述序列的第一个项目到所述序列的最后一个项目的真实项目位置的连续序列,第二组项目位置,它包括所有不包括在所述第一组项目位置内的所述真实项目位置,所述第一组项目位置的预定项目的子集,其特征在于所述方法包括以下步骤在所述第二组项目位置中提供至少n个虚拟的项目位置,通过禁止从所述预定项目子集的每一个所述预定项目开始的包括所述虚拟项目位置的至少(n-1)个相邻的项目位置,确定所述预定项目的子集的顺序上最新的项目或者顺序上最老的项目。
10.按照权利要求9的方法,其特征在于所述第一组项目位置的所述预定项目的子集包含所述第一组项目位置中满足预定判据的所有所述项目。
11.按照权利要求9或10的方法,其特征在于所述环绕式缓冲区是指令窗口缓冲区,所述第一组项目位置中的每一个项目都保持指令。
12.按照权利要求11的方法,其特征在于所述第一组项目位置的所述预定项目的子集包含所述第一组项目位置的所述项目中的这样一些项目保持在所述项目中的指令的所有源操作数均是可用的。
13.按照权利要求9-12中任何一个的方法,其特征在于用来在所述第二组项目位置中提供至少n个额外的虚拟项目位置的所述步骤包括以下步骤把至少n个虚拟项目位置附加到所述环绕式缓冲区上,假如所述第一组项目位置存在环绕,则把所述第一组项目位置分成两部分,前部和后部,把所述两部分中的一部分复制到所述缓冲区的所述虚拟项目位置。
14.按照权利要求9-13中任何一个的方法,其特征在于用来确定所述预定项目的子集中顺序上最新的项目或者顺序上最老的项目的所述步骤包括把所述真实的项目位置与所述虚拟项目位置复合的步骤。
全文摘要
本发明涉及含有项目序列的环型缓冲区,在既满足给定条件又含于所述序列中的项目之间确定顺序优先级。在所述环型序列中所述项目序列可以环绕。按照本发明,首先,把数量上至少等于缓冲区中真实项目位置的虚拟项目位置加到所述缓冲区未被占用部分上。第二步,每一个满足给定条件的项目阻塞若干个相邻的项目,包括所述虚拟项目。只剩下一个仍旧不被阻塞的并满足给定条件的项目。这个项目就是具有顺序优先权的项目。
文档编号G06F5/06GK1193141SQ9810442
公开日1998年9月16日 申请日期1998年2月9日 优先权日1997年3月10日
发明者W·梭尔, D·文德尔, F-C·韦尼克 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1