一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

队列管理器可执行的子队列插入方案和相关系统及操作的制作方法

2022-10-26 16:57:04 来源:中国专利 TAG:

队列管理器可执行的子队列插入方案和相关系统及操作
1.相关申请的交叉引用
2.本技术要求于2020年1月31日提交的美国临时申请no.62/968,467、题为“hardware queue manager with sub-queue insertions for task and sub-task controls and processing(具有用于任务和子任务控制和处理的子队列插入的硬件队列管理器)”的优先权,其全部内容通过引用整体并入本文。
技术领域
3.各个实施例涉及在队列内嵌套子队列以允许更有效地管理排队等待执行的元素的方法。


背景技术:

4.通常,无线网络系统有两条通信路径-上行链路路径和下行链路路径。当数据沿着下行链路路径从基站(例如,蜂窝基站)传输到计算设备时,计算设备接收数据包,然后根据协议栈(protocol stack)进行处理。术语“协议栈”是指计算设备对一套通信协议的软件实现。在一套通信协议中的单个协议可以出于单一的目的设计;然而,由于每个协议通常与至少一个其他协议进行通信,因此协议通常被视作堆栈中的层。在协议栈中,最低层负责与底层硬件交互,而堆栈中更上层的每一层都增加了额外的功能。
5.协议栈的一个示例是为长期演进(long term evolution,lte)开发的演进通用移动通信系统(evolved universal mobile telecommunications system,umts)地面无线电接入(terrestrial radio access,e-utra)协议栈。如图1所示,e-utra协议栈包括媒体接入控制(medium access control,mac)层、无线链路控制(radio link control,rlc)层和分组数据汇聚协议(packet data convergence protocol,pdcp)层。mac层控制负责与传输介质的传输信道交互的物理硬件。rlc层位于mac层之上,但位于pdcp层之下,因此充当mac层和pdcp层之间的接口。rlc层的一些主要功能是将上层服务数据单元(service data unit,sdu)分割成rlc协议数据单元(protocol data unit,pdu),并将下层pdu去分割(desegmentation)(也称为“级联(concatenation)”)为rlc sdu。


技术实现要素:

6.在此引入的是能够将队列划分为一个或多个子队列以更有效地管理信息单元和任务的方法。例如,假设队列管理器确定新队列元素应该在先前填充在初级缓冲区的条目中的现有队列元素之前执行。在这种情况下,队列管理器可以将现有队列元素存储到存储空间,然后在条目中插入特殊队列元素,当该特殊队列元素被执行时,将处理器路由到次级缓冲区。然后,队列管理器可将新队列元素和现有队列元素填充到次级缓冲区中,使得处理器在执行现有队列元素之前执行新队列元素。
7.子队列还可用于扩展初级缓冲区的可用容量,在该初级缓冲区中填充有队列元素以供处理器执行。例如,在一些实施例中,队列管理器被配置为监测初级缓冲区的可用容
量。在确定该初级缓冲区的可用容量已降至阈值以下时,队列管理器可将特殊队列元素插入到初级缓冲区,当该特殊队列元素被执行时,将处理器路由到能够在其中填充队列元素的次级缓冲区。
附图说明
8.图1示出了为lte开发的e-utra协议栈的一部分。
9.图2包括示出队列管理器如何实现插入方案以管理初级队列缓冲区(或简称为“初级缓冲区”)的高级框图。
10.图3示出了如何使用插入指示符使队列互相嵌套以扩展初级缓冲区中有效条目数。
11.图4示出了在一些实施例中如何格式化队列元素(queuing element,qe)。
12.图5示出了如何将队列(或队列组)的非空(not empty,ne)指示符合并到队列管理器可使用的分层位图中。
13.图6示出了如何将队列(或队列组)的溢出(overflow,of)指示符合并到队列管理器可使用的分层位图中。
14.图7示出了如何将队列(或队列组)的下溢(underflow,uf)指示符合并到队列管理器可使用的分层位图中。
15.图8示出了其中计时器(更具体地,计时器标识符)与阈值持续时间相关联的数据结构的示例。
16.图9示出了其中可存储与队列相关的信息/统计信息的数据结构的示例。
17.图10示出了表示由队列管理器管理的初级缓冲区的有序列表的数据结构示例。
18.图11示出了将初级缓冲区中有界的现有队列元素替换为包括用于次级缓冲区的插入指示符的特殊队列元素的过程的流程图。
19.图12示出了将初级缓冲区中现有队列元素替换为包括用于次级缓冲区的插入指示符的特殊队列元素的另一过程的流程图。
20.图13包括在计算设备上实现的队列管理器的高级框图。
21.图14包括示出计算系统的示例的高级框图,在该计算系统中可以实现本文描述的至少一些操作。
22.通过结合附图对具体实施方式的研究,本文所述的技术的各种特征对于本领域技术人员而言将变得更加显而易见。实施例在附图中以示例而非限制的方式示出,其中类似的标记可以指示类似的元素。尽管附图出于说明的目的描述了各个实施例,但本领域技术人员应该认识到,在不脱离技术原理的情况下可采用替代实施例。因此,尽管在附图中示出了特定实施例,但该技术可进行各种修改。
具体实施方式
23.与4g和5g无线通信标准的协议组中的层类似,在mac层中,单个信息单元或单个处理任务(或简称为“任务”)通常必须划分为多个子单元或子任务。例如,这种情况可能出现在执行分割或去分割时。为了更有效地处理子单元和子任务,已经开发了几种软件实现的方法。然而,这些软件实现的方法存在明显的缺点。例如,这些软件实现的方法由于涉及额
外的计算而消耗相对较高的功率,并且需要更多的数据缓冲区(或简称为“缓冲区”)来临时存储子单元或子任务。此外,这些软件实现的方法的性能往往相当缓慢,因此会导致严重的延迟。
24.为了加速子单元和子任务的处理,需要对底层硬件进行更有效的控制。因此,在此引入的是能够将队列划分为一个或多个子队列以更有效地管理信息单元和任务的方法。为了说明的目的,可以在队列元素的背景下描述实施例,队列元素被加载到队列中的条目中进行处理。本文所使用的术语“队列元素”和“元素”指的是需要处理的子任务、子单元或任何其他信息。
25.如下所述,本公开针对用于将主队列(或简称为“队列”)划分为一个或多个子队列的硬件实现方法,其中队列元素可以填充到子队列中。这些方法有利于设计加速引擎,加速引擎被配置为对rlc层进行分割或从rlc层进行去分割,以及实现分割和去分割协议。作为示例,可以将单个rlc pdu拆分成多个rlc pdu段,这些rlc pdu段被填充到子队列中,或者子队列中的多个plc pdu段可以被级联为单个rlc pdu。
26.可以参考特定类型的网络技术、协议栈、过程等来描述实施例。然而,本领域技术人员将认识到这些特征类似地适用于其他类型的网络技术、协议栈等。例如,虽然在lte协议栈的背景下描述实施例,但这些实施例的特征可以扩展到为4g/5g网络技术开发的协议栈。作为另一示例,虽然本文所描述的方法可以在防溢出的背景下描述,但是这些方法的特征也可以用于确保特定动作(例如,数据包的重传)需要在已经调度的队列的某个点发生。
27.可以使用专用硬件(例如,电路)、使用软件和/或固件编程的可编程电路、或专用硬件和可编程电路的组合来体现该技术的各个方面。因此,实施例可以包括具有指令的机器可读介质,在执行该指令时使得计算设备执行将特殊队列元素插入到队列中的过程,在读取该特殊队列元素时指向子队列的控制信息。可以在子队列中填充条目以进行处理。此外,控制信息可以包括返回指针,该返回指针指示在子队列中的所有条目被处理后在队列中返回的位置。
28.术语
29.在本说明书中引用“实施例”或“一个实施例”意味着所描述的特定特征、功能、结构或特性包括在至少一个实施例中。这样的表述的出现不一定指的是同一实施例,也不一定指的是相互排斥的替代实施例。
30.除非上下文另有明确要求,否则“包括”和“包含”一词应以包含的含义而非排他性或穷尽性的含义(即“包括但不限于”的含义)来解释。术语“基于”也应以包含的含义而不是排他性或穷尽性的含义来解释。因此,除非另有说明,否则术语“基于”意在表示“至少部分基于”。
31.术语“连接”、“耦合”或其任何变体旨在包括两个或多个元件之间的任何直接或间接的连接或耦合。连接/耦合可以是物理的、逻辑的或其组合。例如,尽管不共享物理连接,但对象可以彼此电耦合或通信耦合。
32.当用于指多个项目的列表时,“或”一词旨在涵盖以下所有解释:列表中的任何项目、列表中的所有项目以及列表中的项目的任意组合。
33.在此所述的任何过程中执行的步骤顺序是示例性的。然而,除非与物理可能性相反,否则这些步骤可以以各种顺序和组合执行。例如,可以在在此所述的过程中添加或删除
步骤。类似地,步骤可以被替换或重新排序。因此,任何过程的描述都是开放式的。
34.插入方案概述
35.图2包括示出队列管理器如何实现插入方案以管理初级队列缓冲区(或简称为“初级缓冲区”)202的高级框图。出于说明的目的,插入方案将在单个初级缓冲区(也称为“主缓冲区”)的背景下描述。然而,本领域技术人员将认识到队列管理器可以负责管理任意数量的初级缓冲区。
36.初级缓冲区202可以是其中能够临时存储数据的物理内存存储的任意区域。例如,初级缓冲区202可以是循环缓冲区(也称为“周期缓冲区”或“环形缓冲区”),其表示使用固定大小的缓冲区的数据结构,如同其是端到端连接的一样。循环缓冲区是一个有界队列,具有用于插入和删除数据的独立索引(write_pointer,read_pointer)。因此,这些索引将继续在有界队列中工作,就像缓冲区在本质上是连续的一样。这样的数据结构有助于缓冲数据流,这是因为各个队列元素在单个队列元素被消耗时不需要被打乱。当读指针读取循环缓冲区的条目中的队列元素时,读指针可以仅前进到循环缓冲区中的下一个条目。相反,如果初级缓冲区202是非循环缓冲区,则当一个队列元素被消耗时,将必须移动所有队列元素。在适用于4g/5g网络技术的协议栈中,初级缓冲区202可以用作流分类之后的入局业务(incoming traffic)的队列,或者初级缓冲区202可以用作服务质量(quality of service,qos)分类之后的qos业务的队列。
37.如图2所示,初级缓冲区202可以具有状态寄存器206,该状态寄存器206可以被队列管理器用作控制参数。这些状态寄存器206包括读指针和写指针、可指示队列是否全满、队列是否全空或队列大小的控制指示符(也称为“控制标志”)以及用于控制中央处理单元(central processing unit,cpu)(也称为“处理器”)的相关中断。下面参照图5-8进一步讨论这些状态寄存器。当初级缓冲区202中的队列元素正在入列(enqueue)和出列(dequeue)时,可更新读指针和写指针。初级缓冲区202中的每个条目能够临时存储包含关于任务或对象的信息的队列元素。例如,队列元素可以是用于数据包的描述符或用于操作硬件的命令。
38.队列元素可以存储在连续的内存空间中,使得多个队列元素可以一次出列。例如,如果一个队列元素的执行取决于前一个队列元素的执行结果,则多个队列元素可以一次出列。将队列元素存储在连续的内存空间(例如,循环缓冲区)中提高了队列管理器以通信方式连接到的总线的运行效率,并避免了由于访问系统数据的延迟而造成的过度延迟。这也使得控制方案更易于硬件实现。然而,传统控制方案的一个问题是,硬件实现的缓冲区存在于连续的内存空间中,这使得在相邻的队列元素之间执行插入变得困难。如果需要在队列中的某个位置(例如,在一对现有队列元素之间)处将新的队列元素添加到初级缓冲区中,则采用传统的控制方案没有直接的方法可以有效地做到这一点。
39.本公开引入解决这个问题的插入方案。假定初级缓冲区202包括存储在为队列分配的连续内存空间中的队列元素序列。此外,假设每个条目大小相同,格式一致。为了实现插入方案,队列管理器可以插入特殊队列元素,特殊队列元素中的字段被定义为“插入指示符”,该指示符实际上是指向可以存储子队列控制信息的存储空间的指针。
40.在图2中,存在两个被称为次级队列缓冲区204a-b(或简称为“次级缓冲区”)的子队列。在基本特征方面,每个次级缓冲区204a-b可以类似于初级缓冲区202。例如,每个次级缓冲区204a-b可以具有各自的读和写指针组以及用于诸如大小、类型等控制信息的其他状
态寄存器。然而,每个次级缓冲区204a-b还可以具有在控制信息中定义的唯一信息,即返回指针(subq_return)。返回指针指示子队列将返回到的位置。如果返回指针指向初级缓冲区202的控制信息,则当子队列中的所有队列元素都被彻底处理时,子队列将返回初级缓冲区202。或者,返回指针可以指向另一子队列的控制信息,如下参考图3所述。因此,插入指示符可以用于无限制地在初级缓冲区202内嵌套子队列。
41.如果初级缓冲区202的容量超过阈值,则插入指示符也可用于扩展初级缓冲区202。例如,插入指示符可用于确保初级缓冲区202不会耗尽其分配的内存空间。例如,如果队列管理器确定写指针有可能覆盖初级缓冲区202中的现有队列元素,那么队列管理器可以从初级缓冲区202中删除最近填充的队列元素,将插入指示符插入以扩展可用内存空间量,然后使已删除的队列元素写入由插入指示符指向的次级缓冲区中。
42.图3示出了如何使用插入指示符使队列互相嵌套以扩展初级缓冲区202中有效条目数。在图3中,两个插入指示符已插入到初级缓冲区302的队列中。这些插入指示符中的每个指向不同的次级队列缓冲区304a-b(或简称为“次级缓冲区”)。两个插入指示符已插入到一个次级缓冲区(即,次级缓冲区304a)的队列中,而一个插入指示符已插入到另一次级缓冲区(即,次级缓冲区304b)的队列中。这些插入指示符中的每个插入指示符指向不同的第三级队列缓冲区306a-b(或简称为“第三级缓冲区”)。术语“初级”、“次级”和“第三级”被用来说明主队列可能具有不同的子队列嵌套级别。本领域技术人员将认识到,在此所述的插入方案可用于沿任意级别插入任意数量的子队列。因此,尽管在“初级缓冲区”的“次级缓冲区”的背景下描述实施例,但这些特征类似地适用于“次级缓冲区”的“三级缓冲区”。
43.在将队列元素插入到子队列(例如,次级缓冲区304a-b或第三级缓冲区306a-c中的一个)之前,队列管理器可以首先组织这些队列元素。例如,假设队列管理器有意在所需位置将队列元素添加到初级缓冲区302中。在要添加这些队列元素的位置处的初级缓冲区302中,会发生两种不同的情况。第一,次级缓冲区可以替换初级缓冲区302中在该位置处的队列元素。在这种情况下,队列管理器将初级缓冲区302中的队列元素更改为包括插入指示符的特殊队列元素,插入指示符指向次级缓冲区的控制信息。第二,可以在初级缓冲区302中的常规队列元素之前插入次级缓冲区。在这种情况下,将常规队列元素保存到存储空间(例如,寄存器)中,然后替换为包括插入指示符的特殊队列元素。该插入指示符将指向要插入到初级缓冲区302中的次级缓冲区的控制信息。然后,可以将常规队列元素填充到次级缓冲区中。在次级缓冲区中填充常规队列元素的位置取决于队列管理器希望队列元素被处理的顺序。例如,可以在次级缓冲区的末端填充常规队列元素,以便在返回到初级缓冲区302之前立即执行。在一些实施例中,队列管理器被配置成动态地增加次级缓冲区的大小(例如,增加一个队列元素),以指示从初级缓冲区302复制过来的保存的队列元素。如下所述,在将特殊队列元素插入到初级缓冲区302中之后,可更新用于初级缓冲区302的控制和统计信息。
44.为了执行这些操作,队列管理器可以实现特殊命令来合并次级缓冲区。该特殊命令可以不同于普通的入列和出列命令。特殊命令可以定义初级缓冲区302中的入口点和要插入的特殊队列元素。此外,该特殊命令可以指示队列管理器使用关于特殊元素指向的次级缓冲区的附加信息来更新初级缓冲区302的统计信息。
45.图4示出了在一些实施例中如何格式化队列元素(qe)400。在此示例格式中,存在
用于不同类型信息的各个字段。例如,队列元素400包括指定类型的类型字段402,即指定该队列元素400是普通队列元素(也称为“常规队列元素”)还是特殊队列元素。如果类型字段402指示队列元素400是特殊队列元素,则其他字段中的一个将用作对应子队列的控制信息的指针。例如,信息字段404a-d中的一个字段的最后32位可以包括插入指示符,该插入指示符指向用于存储对应子队列的控制信息的存储空间。例如,在此插入指示符包括在标记为“qe info 4”的信息字段中。
46.图5示出了如何将队列(或队列组)的非空(ne)指示符合并到队列管理器可使用的分层位图500中。主ne指示符502向队列管理器指示由队列管理器管理的任何队列是否为非空。
47.在一些实施例中,队列管理器负责管理一组初级缓冲区。在这样的实施例中,只要至少一个初级缓冲区不是空的,主ne指示符502将指示非空。然而,需要注意的是,如上所述,这些初级缓冲区中的一些可以具有嵌套在其中的次级缓冲区。为了说明次级缓冲区,分层位图500可以指示哪些队列组是非空的。例如,这里ne0是队列组0的ne指示符,用作队列组0中所有队列的逻辑或(or)运算符。队列组0可以代表单个队列(例如,初级缓冲区)、或者队列组0可以代表多个队列(例如,初级缓冲区和一个或多个次级缓冲区)。因此,只要队列组0中的一个队列是非空的,ne0将指示队列组0是非空的。ne1、ne2和ne3分别是队列组1、队列组2和队列组3的ne指示符。需要注意的是,每个组中的队列数量不一定相同。
48.主ne指示符502可以用作所有队列组的逻辑或运算符。因此,如果用于队列组的任意ne指示符指示为非空,则主ne指示符502可以指示为非空。队列/组的层级和间隔尺寸可以是高度可编程的。
49.图6示出了如何将队列(或队列组)的溢出(of)指示符600合并到队列管理器可使用的分层位图600中。主of指示符602向队列管理器指示由队列管理器管理的任何队列是否发生溢出。在此使用的术语“溢出”指的是当队列已满时发生的写入事件。如果队列是循环缓冲区,则溢出可能导致现有队列元素被写指针用新队列元素覆盖。
50.在一些实施例中,队列管理器负责管理一组初级缓冲区。在这些实施例中,只要至少一个初级缓冲区是满的,主of指示符602将指示溢出。与图5中的分层位图500非常相似,队列管理器可以使用图6中的分层位图600来指示哪些队列(或队列组)溢出。例如,这里of0是队列组0的of指示符,用作队列组0中所有队列的逻辑或运算符。队列组0可以代表单个队列(例如,初级缓冲区),或者队列组0可以代表多个队列(例如,初级缓冲区和一个或多个次级缓冲区)。因此,如果队列组0中的任意一个队列是溢出的,of0将指示队列组0溢出。of1、of2和of3分别是队列组1、队列组2和队列组3的of指示符。需要注意的是,每个组中的队列数量不一定相同。
51.主of指示符602可以用作所有队列组的逻辑或运算符。因此,如果用于队列组的任意of指示符指示溢出,则主of指示符602可以指示溢出。队列/组的层级和间隔尺寸可以是高度可编程的。
52.图7示出了如何将队列(或队列组)的下溢(uf)指示符合并到队列管理器可使用的分层位图700中。主uf指示符702向队列管理器指示由队列管理器管理的任何队列是否发生下溢。在此使用的术语“下溢”指的是当队列为空时发生的读取事件。因此,只有当队列完全没有队列元素时才会发生下溢。
53.在一些实施例中,队列管理器负责管理一组初级缓冲区。在这些实施例中,如果任意一个初级缓冲区中正在经历下溢(即为空),则主uf指示符702将指示下溢。与图5-6中的分层位图500、600非常相似,队列管理器可以使用图7中的分层位图700来指示哪些队列(或队列组)下溢。例如,这里uf0是队列组0的uf指示符,用作队列组0中所有队列的逻辑或运算符。队列组0可以代表单个队列(例如,初级缓冲区),或者队列组0可以代表多个队列(例如,初级缓冲区和一个或多个次级缓冲区)。因此,如果队列组0中的任意一个队列下溢,则uf0将指示队列组0下溢。uf1、uf2和uf3分别是队列组1、队列组2和队列组3的uf指示符。需要注意的是,每个组中的队列数量不一定相同。
54.主uf指示符702可以充当所有队列组的逻辑或运算符。因此,如果用于队列组的任意uf指示符指示下溢,则主uf指示符702可以指示下溢。队列/组的层级和间隔尺寸可以是高度可编程的。
55.由队列管理器管理的每个队列可以与一组定时器关联,以指示超时事件。图8示出了其中计时器(更具体地,计时器标识符)与阈值持续时间相关联的数据结构的示例。定时器可用于指示在上述的队列上操作时发生超时异常,从而违反了特定的时间限制。定时器可以是被配置为在到期时产生中断的倒计时定时器(count-down timers)或计时定时器(count-up timers)。
56.队列信息和统计数据可以维持在使用诸如队列标识符易于搜索的数据结构(例如表格)中。图9示出了其中可存储与队列相关的信息/统计信息的数据结构的示例。队列标识符可以从队列管理器管理的所有队列中、从计算设备中包括的所有队列中等唯一地识别出对应队列。通常,各个初级缓冲区与不同的队列标识符相关联,并且与每个初级缓冲区相关联的信息/统计数据可以与对应的队列标识符相关联。例如,在图9中,表格中的每一行都与不同的队列相关联。
57.如上所述,如果任意次级缓冲区被嵌套在初级缓冲区中,队列管理器可以负责确保与每个初级缓冲区相关联的信息/统计信息被更新。因此,每当队列管理器添加或移除次级缓冲区时,数据结构被更新。这些数据结构可以存储在内存(存储器)中,并可供队列管理器所属的计算设备上执行的软件和/或固件访问。如图9所示,数据结构可以包括诸如队列大小、队列类型、队列优先级之类的信息/统计信息。
58.在一些实施例中,队列管理器被配置为根据大小自动地对其负责管理的初级缓冲区进行排序。因此,队列管理器可以生成从大到小排序的初级缓冲区列表,反之亦然。换句话说,队列管理器可以按升序或降序对初级缓冲区列表进行排序,因此第一条目可以是最大的队列,也可以是最小的队列,这取决于配置的顺序。图10示出了表示由队列管理器管理的初级缓冲区的有序列表的数据结构示例。如图10所示,每个初级缓冲区可以通过其队列标识符(queue id)在数据结构中进行标识,这使得能够从内存中容易地检索出有序列表。
59.如上所述,存在至少两种可以由队列管理器实现插入方案的情况。图11-12讨论了这些情况。
60.第一,队列管理器可以选择将初级缓冲区中有界的现有队列元素替换为次级缓冲区。在这种情况下,队列管理器需要将有界的现有队列元素更改为特殊队列元素,当该特殊队列元素被执行时,将处理器路由到次级缓冲区。在此使用的术语“有界”是指在现有队列元素之前和之后的一个现有队列元素。当现有队列元素是有界的时,插入新的队列元素由
于需要重新排列多个现有队列元素而难以实现。
61.图11示出了将初级缓冲区中有界的现有队列元素替换为包括用于次级缓冲区的插入指示符的特殊队列元素的过程1100的流程图。最初,队列管理器确定新队列元素将在初级缓冲区中的有界的现有队列元素之前执行(步骤1101)。作为示例,假设初级缓冲区包括五个待执行的队列元素,并且队列管理器已经确定应在第三队列元素之后且在第四队列元素之前执行新队列元素。在这样的情况下,第二、第三和第四队列元素是“有界的(bounded)”。
62.队列管理器可以将有界的现有队列元素保存到存储空间中,而不是重新排列多个队列元素(步骤1102)。例如,队列管理器可以暂时将有界的现有队列元素保存到寄存器中。然后,队列管理器可以将特殊队列元素插入到初级缓冲区中以替代有界的现有队列元素(步骤1103)。更具体地,队列管理器可以使特殊队列元素写入到初级缓冲区中的同一条目中,从而覆盖有界的现有队列元素。如上所述,特殊队列元素可以包括插入指示符,当其被执行时,将处理器路由到次级缓冲区。
63.此后,队列管理器可以将新队列元素和现有队列元素填充到次级缓冲区中,使得处理器将在执行现有队列元素之前执行新队列元素(步骤1104)。在次级缓冲区中填充新队列元素和现有队列元素的位置可取决于队列管理器希望这些队列元素被执行的顺序。例如,现有队列元素可以填充在次级缓冲区的最后一个条目中,使得在处理器从次级缓冲区重定向到初级缓冲区之前立即执行。作为另一示例,新队列元素可以填充在次级缓冲区的第一个条目中,使得在处理器从初级缓冲区重定向到次级缓冲区之后立即执行。
64.出于说明的目的,再次参考上述示例,在该示例中,初级缓冲区包括五个待执行的队列元素,并且队列管理器已确定应在第三队列元素之后且在第四队列元素之前执行新队列元素。在这种情况下,队列管理器可以将第四队列元素临时保存到存储空间(例如,寄存器)中,插入特殊队列元素来代替第四队列元素,然后将新队列元素和第四队列元素填充到次级缓冲区中。新队列元素可以填充到次级缓冲区中位于第四队列元素之上的任意条目中。例如,新队列元素可以填充到次级缓冲区中的第一条目中,而第四队列元素可以填充到次级缓冲区中的第二条目中,或者新队列元素可以填充到次级缓冲区中的第一条目中,而第四队列元素可以填充到次级缓冲区中的最后一个条目中。
65.或者,队列管理器可以将现有队列元素直接填充到次级缓冲区中,而不是如上参考步骤1102所述的填充到存储空间中。在这样的实施例中,响应于确定应在现有队列元素之前执行新队列元素,队列管理器可以将现有队列元素直接填充到次级缓冲区中的预定条目中。该预定条目可以是诸如次级缓冲区中的第一条目或最后一个条目。
66.在一些实施例中,队列管理器被配置成增加次级缓冲区的大小,以说明包含从初级缓冲区复制的现有队列元素。例如,队列管理器可以动态地将次级缓冲区的大小增加一个条目,以说明现有队列元素。此外,如上所述,在一些实施例中,关于初级缓冲区的信息可以被保持(例如,在寄存器中)。在这样的实施例中,队列管理器可以确保信息被更新以说明在初级缓冲区内嵌套次级缓冲区。
67.第二,队列管理器可以选择在现有队列元素之前插入次级缓冲区以避免覆盖(例如,由于溢出)。在这种情况下,队列管理器需要将现有队列元素替换为特殊队列元素,当特殊队列元素被执行时,将处理器路由到次级缓冲区。
68.图12示出了将初级缓冲区中的现有队列元素替换为包括用于次级缓冲区的插入指示符的特殊队列元素的另一过程1200的流程图。最初,队列管理器可以监测初级缓冲区的可用容量,在初级缓冲区中填充有队列元素以供处理器执行(步骤1201)。在监测可用容量时,队列管理器可以确定初级缓冲区的可用容量已经低于预定阈值(步骤1202)。例如,队列管理器可以连续检查与初级缓冲区相关联的溢出(of)指示符,以发现初级缓冲区中的所有条目何时被填充。作为另一个示例,队列管理器可以连续检查初级缓冲区本身,以确定何时有一个或零个条目未填充。
69.然后,队列管理器可以为其中能够填充队列元素的次级缓冲区分配内存空间(步骤1203),并将特殊队列元素插入初级缓冲区,当特殊队列元素被执行时,将处理器路由到次级缓冲区(步骤1204)。更具体地,队列管理器可以识别最近填充到初级缓冲区中的现有队列元素,将现有队列元素保存到存储空间(如寄存器),然后将现有队列元素填充到次级缓冲区中。因此,队列管理器可以将最近填充的队列元素从初级缓冲区复制到次级缓冲区中,以扩展初级缓冲区中的有效条目的数量。通常,现有队列元素被填充到次级缓冲区的第一条目中。然而,现有队列元素也可以被填充到次级缓冲区的另一条目中。
70.如以上关于步骤1203所述,可以在需要时为次级缓冲区分配内存空间。然而,当不再需要次级缓冲区时,队列管理器希望释放以前分配的内存空间。换句话说,由于次级缓冲区旨在暂时用于溢出,响应于确定不再溢出,队列管理器希望释放分配给次级缓冲区的内存空间。因此,队列管理器可以监测次级缓冲区的可用容量(步骤1205)。例如,队列管理器可以持续检查与次级缓冲区相关联的下溢(uf)指示符或非空(ne)指示符。如果队列管理器确定次级缓冲区中的至少一个条目尚未执行,则队列管理器不会采取进一步操作。然而,如果队列管理器确定次级缓冲区中的所有条目都已执行,则队列管理器可以释放分配给次级缓冲区的内存空间(步骤1206)。因此,队列管理器可以根据一段时间内需要的次级缓冲区的数量动态地分配和释放内存空间。
71.可以以各种顺序执行这些处理的步骤。例如,图12的步骤1203和1205-1206可以包括在图11的过程1100中。其他步骤也可以包括在一些实施例中。
72.本文所述的方法有几种替代的方法。
73.一种替代方法涉及复制要插入新队列元素的位置下方的所有队列元素。例如,假设将新队列元素插入到包括五个队列元素的初级缓冲区中,这些队列元素在队列中连续排列。如果队列管理器确定新队列元素应该设置在第二队列元素之上,那么队列管理器可以复制第二、第三、第四和第五队列元素(例如,用于包括在次级缓冲区中)。但是这种方法计算复杂、速度慢且耗电量大。
74.另一种替换方案涉及将每个队列表示为连续列表的内存块。这种方法允许将整个队列表示为内存块的链表。为随时添加到列表中,队列管理器只需在内存块的链表中创建另一个链接。虽然这种方法相对简单,但要插入到内存块的中间,队列管理器必须将内存块拆分为两个内存块,然后在两个内存块之间插入新的内存块。或者,队列管理器可以使用本文所述的插入方案。该替代方案有几个优点,即:(1)允许在连续内存块大小的性能和灵活性之间进行折衷;(2)如果释放了内存块的链表,则该链表可以容易地将释放的内存块去分配(deallocate)并重新链接该链表。因此,由于空闲内存块区域在重新分配回池时会收缩,因此该方法提供了有效的空间分配/去分配。这种方法的缺点在于,硬件难以处理内存块的
连续列表。在高级别下,简单的内存块会使正常入列和出列操作变得更加复杂,因此循环缓冲区对于硬件实现的队列操作来说往往更加有效。
75.队列管理器概述
76.图13包括在计算设备1300上实现的队列管理器1302的高级框图。在正常操作下,由于初级缓冲区的数量(以及这些初级缓冲区的大小)是已知的,缓冲区空间最初将由队列管理器1302创建。然而,一旦子队列被添加到初级缓冲区,缓冲区空间可以被动态分配,然后由缓冲区释放器1304释放。当子队列被构造时,缓冲区的分配可以基于外部操作。在子队列结束后,队列管理器1302可以负责经由缓冲区管理器1306将对应的缓冲区释放回缓冲区释放器1304。
77.队列管理器1302可以维持用于一些或所有控制寄存器的寄存器组1308。例如,队列管理器1302可以为每个队列维持独立的寄存器组(例如,图2的寄存器206),尽管寄存器组中包括的信息可以取决于队列代表初级缓冲区还是次级缓冲区。这些寄存器组1308可以通过通信地连接到队列管理器1302的寄存器总线1310来编程。
78.事件处理引擎1312可以负责将包括具有插入指示符的特殊元素的元素入列和出列到由缓冲区释放器1304分配的缓冲区中。在一些实施例中,队列管理器1302还包括用于计算统计信息、排序队列等的专用模块。该专用模块可以被称为“计算和排序引擎1314”,并且可以通过硬件、固件、软件或其任何组合来实现。如上所述,缓冲区释放器1304可负责与缓冲区管理器1306交互以在必要时分配缓冲区和/或在队列结束后释放缓冲区。
79.在一些实施例中,队列管理器1302经由直接内存器访问(direct memory access,dma)通道1318通信地连接到系统总线1316。这样的设计仅在队列与在计算设备1300的系统内存1320中执行的软件共享时才是必需的,尽管这是队列管理器的常用方式。
80.插入方案的优点
81.通过使用本文所述的插入方案可以获得多个优势。这些优势包括:
82.·
由于硬件实现队列的有效运行而降低了功耗;
83.·
与完全软件实现的队列相比,硬件实现的队列能够以更高的速度处理,从而提高了处理速度;
84.·
硬件设计中列表的灵活高效管理;以及
85.·
灵活和有效地使用内存(例如,随着添加/移除子队列可以动态地添加/移除用于子队列的附加内存)。
86.这些优势可能对诸如移动电话、路由器等便携式计算设备(也称为“移动计算设备”)特别有用。例如,插入方案可用于为4g/5g网络技术设计的高性能、低成本和/或低功率调制解调器(也称为“4g调制解调器”或“5g调制解调器”)。
87.计算系统
88.图14包括示出可以在其中实现队列管理器的计算系统1400的示例的高级框图。因此,计算系统1100的组件可以托管在包括队列管理器(例如,图13的队列管理器1302)的计算设备(例如,图13的计算设备1300)上。
89.计算系统1400可以包括处理器1402、主内存1406、非易失性内存1410、网络适配器1412(例如,网络接口)、视频显示器1418、输入/输出设备1420、控制设备1422(例如,键盘、定位设备或诸如按钮的机械输入)、包括存储介质1426的驱动单元1424以及通信地连接到
总线1416的信号生成设备1430。总线4116被示为表示由一个或多个物理总线和/或通过适当的桥接器、适配器或控制器连接的点到点连接的抽象概念。因此,总线1416可以包括系统总线、外部组件互连(peripheral component interconnect,pci)总线、pci-express总线、超传输总线、工业标准结构(industry standard architecture,isa)总线、小型机系统接口(small computer system interface,scsi)总线、通用串行总线(universal serial bus,usb)、内部集成电路(inter-integrated circuit,i2c)总线或符合电气和电子工程师协会(institute of electrical and electronics engineers,ieee)标准1394的总线。
90.计算系统1400可以与服务器、路由器、台式计算机、平板计算机、移动电话、电子游戏机、可穿戴电子设备(例如,手表或健身追踪器)、网络连接(“智能”)设备(例如,电视或家庭助理设备)、增强或虚拟现实系统(例如,头戴式显示器)、或能够执行指定处理系统1400要采取的动作的一组指令(顺序指令或其他指令)的另一电子设备的计算机处理器架构共享相似的计算机处理器架构。
91.虽然主内存1406、非易失性内存1410和存储介质1424被示为单个介质,但术语“存储介质”和“机器可读介质”应被视为包括存储一组或多组指令1426的单个或多个介质。术语“存储介质”和“机器可读介质”还应被视为包括能够存储、编码或携带供处理系统1400执行的一组指令的任意介质。
92.通常,为实现本公开的实施例而执行的例程可作为操作系统或特定应用程序、组件、程序、对象、模块或指令序列(统称为“计算机程序”)的一部分来实现。计算机程序通常包括在各种时间在计算设备中的各种内存和存储设备中设置的一个或多个指令(例如,指令1404、1408、1428)。当由处理器1402读取和执行时,该指令使得计算系统1400执行操作以执行本公开的各方面。
93.尽管已经在全功能的计算设备的背景下描述了实施例,但本领域技术人员应理解,各个实施例能够以各种形式作为程序产品分发。本公开适用于各种情况,与用于实际引起分发的机器或计算机可读介质的特定类型无关。机器和计算机可读介质的其他示例包括可记录类型介质,例如易失性和非易失性内存设备1410、可移动磁盘、硬盘驱动器、光盘(例如,光盘只读内存(compact disk read-only memory,cd-rom)和数字多功能盘(digital versatile disk,dvd)、基于云的存储以及诸如数字和模拟通信链路的传输类型介质。
94.网络适配器1412使计算系统1400能够通过由计算系统1400和外部实体支持的任意通信协议,将网络1414中的数据与计算系统1400外部的实体进行中介。网络适配器1412可以包括网络适配器卡、无线网络接口卡、交换机、协议转换器、网关、桥接器、集线器、接收器、中继器或包括集成电路的收发器(例如,启用或进行通信)。
95.本文介绍的技术可以使用软件、固件、硬件或这些形式的组合来实现。例如,本公开的各方面可以使用专用集成电路(application-specific integrated circuit,asic)、可编程逻辑设备(programmable logic device,pld)、现场可编程门阵列(field-programmable gate array,fpga)等形式的专用硬连线(即,不可编程)电路来实现。
96.附注
97.出于说明的目的,提供了对各种实施例的前述描述。这并非旨在详尽地描述,也并非旨在将所要求保护的主题限制到所公开的确切形式内。多种修改和变形对本领域内的技术人员是显而易见的。选择和描述实施例,以便最好地描述本发明的原理及其实际应用,从
而使相关领域的技术人员能够理解所要求保护的主题、各种实施例以及适合预期的特定用途的各种修改。
98.尽管具体实施方式描述了各种实施例,但无论具体实施方式如何详尽,该技术都可以以多种方式实践。实施例可以在其实现细节上有很大的变化,但同时仍由本说明书所涵盖。在描述各种实施例的某些特征或方面时使用的特定术语不应被视为暗示术语在此被重新定义以限制与该术语相关联的技术的任何特定特征、特性或方面。通常,在下述权利要求中使用的术语不应被解释为将技术限制到说明书中公开的特定实施例,除非这些术语在此被明确定义。因此,本技术的实际范围不仅包括所公开的实施例,还包括实施或实现实施例的所有等效方式。
99.说明书中使用的语言主要用于可读性和指导目的,而不是用于描述或限定主题。因此,本技术的范围不受本具体实施方式的限制,而受基于本具体实施方式的申请提出的任意权利要求的限制。因此,各种实施例的公开旨在说明而非限制以下权利要求中所提出的技术的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献