CN1742272A - 可重配置语义处理器 - Google Patents

可重配置语义处理器 Download PDF

Info

Publication number
CN1742272A
CN1742272A CNA2003801092138A CN200380109213A CN1742272A CN 1742272 A CN1742272 A CN 1742272A CN A2003801092138 A CNA2003801092138 A CN A2003801092138A CN 200380109213 A CN200380109213 A CN 200380109213A CN 1742272 A CN1742272 A CN 1742272A
Authority
CN
China
Prior art keywords
parser
generation rule
code
symbol
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2003801092138A
Other languages
English (en)
Inventor
索姆索布理·司柯达尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
MISTLETOE TECHNOLOGIES Inc
Original Assignee
MISTLETOE TECHNOLOGIES Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by MISTLETOE TECHNOLOGIES Inc filed Critical MISTLETOE TECHNOLOGIES Inc
Publication of CN1742272A publication Critical patent/CN1742272A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Devices For Executing Special Programs (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Multi Processors (AREA)

Abstract

公开了数据处理器和其配置方法。与传统的冯·诺依曼微处理器不同的是,所公开的处理器是语义处理器(100),其剖析输入流,并且取决于剖析内容引导一个或多个语义执行引擎(300)执行代码段。对于诸如分组数据流之类的定义结构输入流,这些语义处理器与冯·诺依曼系统相比,可以是既经济又快速的。多个可选组件可以增加设备操作。例如,机器上下文数据接口将语义执行引擎(300)从管理物理存储器的压力中缓解出来,允许多个引擎顺序地访问存储器,并实现正常的访问操作。另外,简单的冯·诺依曼异常处理单元可以附接到语义执行引擎,以执行更复杂的、但是不经常执行的或时间要求不严格的操作。

Description

可重配置语义处理器
技术领域
本发明一般地涉及数字处理器和数字处理,更具体地说,涉及用于数据流处理的数字语义处理器。
背景技术
传统的可编程计算机使用冯·诺依曼(Von Neumann)(VN)体系结构。VN体系结构的最简单形式包括中央处理单元(CPU)和附接的存储器,通常还具有某些形式的输入/输出以允许有用操作。例如,图1示出了包括CPU 30、存储器控制器40、存储器50和输入/输出(I/O)设备60的计算机20。CPU 30经由地址/控制总线42向存储器控制器40发送数据请求;数据自身经由数据总线44传输。存储器控制器40与存储器50和I/O设备60通信,以执行CPU 30(或可能是I/O设备)所请求的数据读写。尽管未示出,但是各种设备都有“中断”CPU并使其切换任务的能力。
在VN机中,存储器50存储程序指令和数据。CPU 30从存储器取得程序指令,并执行包含在其中的命令-一般指令指示CPU将数据从存储器加载到寄存器、将数据从寄存器写入到存储器、利用板上寄存器中的数据执行算术或逻辑操作、或者分支到不同的指令并继续执行。如可意识到的,CPU 30花费了大量时间来取得指令、经由数据总线44取得数据或写入数据。尽管可以实现精细设计(通常也很昂贵)的方案来缓存可能有用的数据和指令,实现流水线并减少平均存储器周期时间,但是数据总线44最终还是处理器性能的瓶颈。
VN体系结构相比于门逻辑来说是有吸引力的,这是因为VN体系结构可以被制成“通用的”并且可以相对较快的重配置;通过仅仅加载新的程序指令集,就可以改变VN机的功能来执行甚至非常复杂的功能(如果时间足够的话)。VN体系结构的灵活性与复杂性和低效率之间有一个平衡。从而,几乎能够做任何事情的代价是不能有效率地执行某些简单操作。
发明内容
许多正提供服务或将要提供服务的数字设备落在一般的分组处理器范畴内。换句话说,这些设备例如经由电缆、光纤或无线网络或点到点连接、底板(backplane)等与使用分组的另一个或另一些设备进行通信。在许多的这样的设备中,对接收数据的处理是直接的,但是分组协议和分组处理太为复杂,而无法保证专用硬件的设计。作为替代,这些设备利用VN机来实现协议。
这里我们认识到,存在一种不同的且有吸引力的方法用于分组处理器,该方法更一般地可被描述为可重配置语义处理器(RSP)。这种设备优选地是可重配置的,如同VN机,因为其处理取决于其“程序”-尽管将会发现该“程序”不同于VN机中使用的传统机器代码。尽管VN机总是执行顺序检查各种数据条件的机器指令集,但是RSP直接响应于输入流的语义。换句话说,RSP执行的“代码”由其输入选择。从而对于分组输入,在定义的语法下,RSP在理论上适于快速和有效的分组处理。
这里描述的某些实施例使用表驱动型预测剖析器来驱动网络语法协议的直接执行,例如LL(通过识别最左边的产生从左到右剖析)剖析器。其他剖析技术,例如递归下降、LR(通过识别最右边的产生从左到右剖析)和LALR(超前查看LR)也可用在本发明的实施例中。在每种情况下,剖析器通过在简单执行单元上执行微指令代码段而响应于其输入。当表放在可重写存储设备中时,RSP可以容易地重配置,从而单个RSP设计可用在多种应用中。在许多应用中,整个RSP(包括其操作所必需的表)可以实现在单个低成本、低功耗的集成电路上。
多个可选特征可以增加该设备的可用性。可以使用一簇执行单元来执行不同的任务,这里允许并行处理。可以连接有异常单元(本质上可以是小的VN机),并用其来执行例如复杂但是不经常执行且没有严格时间压力的任务。并且执行单元可以使用机器上下文存储器接口,从而执行单元不必理解存储器单元的底层格式—因而极大简化了执行单元执行的代码。
附图说明
通过参考附图阅读公开内容,可以更好理解本发明,其中:
图1包含一般冯·诺依曼机器的框图;
图2包含本发明的发明人在先所获专利的预测剖析器模式识别器的框图;
图3以方框形式图示了根据本发明实施例的语义处理器;
图4示出了对本发明实施例有用的一种可能的剖析器表构造;
图5示出了对本发明实施例有用的一种可能的产生规则表组织;
图6以方框形式图示了对本发明实施例有用的直接执行剖析器(DXP)的一种实现方式;
图7包含图6所示的DXP操作的流程图;
图8示出了根据本发明实施例的可重配置语义处理器的框图;
图9示出了对本发明实施例有用的语义代码执行引擎的框图结构;
图10示出了地址解析协议分组的格式;以及
图11图示了使用内容可寻址存储器(CAM)的另一剖析器表实现方式。
具体实施方式
本申请的发明人是1999年6月29日发布的题为“Pattern Recognitionin Data Communications Using Predictive Parsers”的在先专利(美国专利No.5,916,305)的发明人之一。尽管’305专利中描述的整个设备与本发明完全不同,但是作为对基本预测剖析器与网络协议结合使用(作为模式匹配器)的一般介绍,是有益的。
图2示出了’305专利中描述的设备80的框图。语义引擎82读取分组70,并将分组数据的八位字节作为值传输到预测剖析器84。预测剖析器84检查传输过来的每个值(八位字节)。首先,剖析器84利用该值和该值的位置距离分组70起始点的偏移量作为索引,在剖析器表88中执行表查找。剖析器表88为值和偏移量的每个组合存储以下四个可能值中的一个:“A”,表示接受该偏移量处的值;“D”,表示值和偏移量的组合是“无关紧要的”;“F”,表示由于该偏移量处的值不是要识别模式的一部分因而失败;“$”,表示结束符号。
剖析器栈86不是字面意义(或者应用到将要简要描述的本发明实施例)上的真正“堆栈”,其仅仅保留剖析器84试图匹配的每个“过滤器”的状态变量。每个状态变量被初始化为入口状态。随着随后为每个值和偏移量返回表条目,栈更新每个栈变量。例如,如果返回“A”用于栈变量,则该栈变量从入口状态移动到部分匹配状态。如果返回“F”,则该栈变量从入口状态或部分匹配状态移动到失败状态。如果返回“D”,则该栈变量维持其当前状态。如果在状态变量为入口状态或部分匹配状态的同时返回“$”,则状态变量转变为匹配状态。
一旦语义引擎82已将所有分组值传输到预测剖析器84,剖析器84就基于剖析器栈状态返回匹配值。然后,语义引擎82取决于匹配的成功或失败采取某些输出动作。应当注意,剖析器并不控制或调整设备功能,而仅仅充当更大系统的辅助模式匹配器。要区分的每个可能的模式都需要剖析器表中的新列,从而在硬件实现中设备80只能匹配有限数目的输入模式。并且每个输入八位字节位置都需要剖析器表行,即使该输入八位字节位置不影响匹配结果。
这里描述的实施例采用了绝对不同的方法来进行数据处理。图3示出了根据本发明实施例的语义处理器100。与仅仅将具体输入模式匹配到具体存储模式不同,语义处理器100包含控制输入分组的处理的引导执行剖析器(Direct Execution Parser,DXP)200。随着DXP 200剖析在输入端口102处接收到的数据,其响应于输入而扩展并执行实际的语法产生,并随着语法的执行,指示语义代码执行引擎(SEE)300处理输入段,或执行其他操作。
该结构具有复杂的语法剖析器,其按照数据需要,将机器上下文任务分配到执行引擎,该机构既灵活又很有效用。在优选实施例中,语义处理器是可重配置的,因而具有无高开销的VN机那样的吸引力。因为语义处理器只响应于其给定的输入,所以其有效操作时所利用的指令集可以小于VN机。因为语义处理器允许在机器上下文中处理,所以该指令集也是非常有利的。
语义处理器100至少使用三个表。SEE 300的代码段存储在语义代码表160中。复杂语法产生规则存储在产生规则表140中。用于检索这些产生规则的代码存储在剖析器表120中。剖析器表120中的代码还允许DXP200检测在给定产生规则的情况下,SEE 300是否应加载并执行来自语义代码表160的代码段。
本发明的某些实施例包含比图3所示多很多的元件,但是这些基本元件出现在每一个系统或软件实施例中。因而,在描述更复杂的实施例之前,先给出图3中每个方框的描述。
图4示出了剖析器表120的一般框图。产生规则代码存储器122例如以行-列格式存储表值。表的行由非终端(non-terminal)代码索引。表的列由输入数据值索引。
实际上,在产生规则代码存储器122中可以同时存在许多不同语法的代码。例如,如图所示,一个代码集可以是关于MAC(介质访问控制)分组头部格式剖析的,而其他的代码集可以是关于地址解析协议(ARP)分组处理、因特网协议(IP)分组处理、传输控制协议(TCP)分组处理、实时传送协议(RTP)分组处理等的。非终端代码既不需要在产生规则代码存储器122中以任何特定顺序分配,也不需要在关于如图所示的特定协议的方框中以任何特定顺序分配。
寻址器124从DXP 200接收非终端(NT)代码和数据值。寻址器124将[NT代码、数据值]对转换为产生规则代码存储器122中的物理位置,获取存储在该位置的产生规则(PR)代码,并将PR代码返回到DXP。尽管在概念上将产生规则代码存储器122的结构视为矩阵通常是非常有帮助的(对于每个NT代码和数据值的唯一组合存储一个PR代码),但是本发明并不限于此。不同应用可以适用不同类型的存储器和存储器组织(图11中示出了其中一种)。
当DXP 200和SEE 300一起集成在电路中时,剖析器表120可以位于芯片上,也可以位于芯片外。例如,位于芯片上的静态RAM可以充当剖析器表120。或者,芯片外的DRAM存储设备可以存储剖析器表120,其中寻址器124充当DRAM的存储器控制器,或者与其通信。在其他实施例中,剖析器表可以位于芯片外的存储器中,其中芯片上的高速缓存能够保存剖析器表的一部分。寻址器124在某些实现中不是必要的,但是当使用时可以是剖析器200的一部分、剖析器表120的一部分或者中间功能块。注意通过给予寻址器124对输入流上的下一个输入值和DXP剖析器栈上的下一个值的可视性,可以实现剖析器表120的超前查看(Look-ahead)能力。
图5图示了产生规则表140的一种可能实现。产生规则存储器142将终端和非终端符号的实际产生规则序列例如存储为连续存储器地址的零终端链。寻址器144从DXP 200或者直接从剖析器表120接收PR代码。
由于产生规则可以有各种长度,因此优选地采用一种允许容易地对存储器142进行索引的方法。在一种方法中,可以算术操作PR代码来确定产生规则的物理存储器起始地址(例如,如果以扩展长度对产生规则归类,然后根据规则的归类位置分配PR代码,则这种方法就是可行的)。PR代码也可以是实际的PR起始地址,尽管在某些应用中这可能使PR代码不必要地变长。在图5所示的方法中,指针表150填充有每个PR代码的PR起始地址。寻址器144通过利用PR代码作为地址查询指针表150来获取产生规则。指针表150返回PR起始地址PR ADD。然后,寻址器144利用该起始地址从产生规则存储器142中获取PR数据。寻址器144递增起始地址并继续获取PR数据,直到检测到NULL字符为止。
图5示出了表150中的第二列,其被用来存储语义代码(SC)起始地址。当DXP 200利用PR代码查询寻址器144时,寻址器不仅返回对应的产生规则,还返回用于要执行的SEE任务的SC起始地址。在给定产生规则不需要任何SEE任务的情况下,SC起始地址被设为NULL地址。
图6示出了DXP 200的一种可能的框图实现。剖析器控制有限状态机(FSM)210基于来自图6中其他逻辑模块的输入,控制整个DXP操作并为其排序。栈操纵器220和栈222存储DXP 200执行的产生规则并为其排序。剖析器表接口230允许DXP 200从附接的剖析器表中获取PR代码。产生规则表接口240允许DXP 200从附接的产生规则表中获取产生规则。语义代码表接口250允许DXP 200识别与产生规则相关联的语义代码段的存储单元(在图示实施例中,接口240和250部分组合在一起)。
输入流序列控制260和寄存器262从Si-Bus获取输入数据符号。比较器270将输入符号与来自剖析器栈222的符号相比较。最后,SEE接口280被用来将任务分派给经由Sx-Bus与DXP 200通信的一个或多个SEE。
下面参考图7中的流程图描述图6中方框的基本操作。在每个剖析周期的开始(流程图方框400),栈操纵器220获取由其栈顶指针psp所指向的产生符号pX。产生符号pX被分为两个组分:前缀p和符号X。前缀p例如根据下面的两比特前缀的映射对符号X的类型编码:
表1
 前缀值p   符号X的类型
  00   无效符号
  01   非终端符号
  10   终端符号
  11   无关紧要的终端符号;与任何输入符号匹配
注意,与“无关紧要的”终端符号的前缀不同,该前缀可以指示加掩码的终端符号。加掩码的终端符号允许输入符号比特掩码的规范,即,终端符号的某些(或全部)比特是“无关紧要的”比特。加掩码的终端符号构造对于例如发生在许多网络协议中的剖析分组标志字段可以是有用的。
输入流序列控制260还将由输入指针ip指向的当前输入流值加载到aReg寄存器262中。如果先前的剖析周期不领先于输入指针ip,则这一步就不是必需的。
当剖析器控制FSM 210从栈操纵器220接收到新的前缀代码p时,其确定(流程图方框402)对于该剖析周期采用三种可能的逻辑路径中的哪一种。如果前缀代码指示X是终端符号,则采用路径410。如果前缀代码指示X匹配任何输入符号,则采用路径420。而如果前缀代码指示X是非终端符号,则采用路径430。下面将依次解释与每个路径相关联的处理。
当采用路径410时,剖析器控制FSM 210基于比较器270所提供的符号匹配信号M,进行另一个路径分叉。比较器270将输入符号a与栈符号X相比较-如果两者相同,则声明信号M。如果允许加掩码的终端符号并且提供加掩码的终端符号,则比较器270应用掩码使得信号M只取决于未加掩码的栈符号比特。
当希望得到特定输入符号而未发现时,剖析器控制FSM 210在方框414进入错误恢复模式。通常,错误恢复将清洗(flush)输入中的剩余分组(例如通过将输入与栈结束(EOF)符号相匹配,直到检测到匹配),并将剩余符号推出栈。也可以将语义代码段分派到SEE,以清除与错误分组有关的任何机器状态数据。这些和其他的动作可以取决于发生错误时正剖析的具体语法。
假定在方框412发现a和X之间的匹配,进一步的处理进入处理路径420。
处理路径420实现了两个任务,如图7中的方框422和424所示。首先,剖析器控制FSM 210给栈操纵器220发信号,例如通过递减栈指针psp来从栈222中“推出”X的当前值。其次,剖析器控制FSM 210给输入流序列控制260发信号,将输入指针ip递增到输入流中的下一个符号。
处理路径430处理在栈222上出现的非终端符号。当非终端符号X到达栈顶时,处理方框432、434、438和440将非终端符号扩展到其对应的产生规则中。剖析器控制FSM 210首先给剖析器表接口230发信号,返回产生规则代码y=PT[X,a]。如果y无效,则剖析器控制FSM 210执行例如如上所述的错误恢复(方框436)。
假定PR代码y有效,则剖析器控制FSM 210将栈222上的X替换为其扩展后的产生规则。剖析器控制FSM给产生规则表(PRT)接口240和语义代码表(SCT)接口250发信号,利用PR代码y执行查找。剖析器控制FSM 210还给栈操纵器220发信号,从栈222中推出X的当前值。当PRT接口240返回产生规则PR[y]时,剖析器控制FSM 210给栈操纵器220发信号,将PR[y]推入到栈222中。由于每个扩展的产生规则都有对应的长度,因此在推入过程中必须考虑该长度,即,某些扩展可能需要从产生规则表中传送多个符号(从表到栈操纵器的路径宽度当然可能多于一个符号宽)。
其间,SCT接口250已返回产生规则PR[y]的对应语义代码地址代码SCT[y]。地址代码SCT[y]可包含对应于PR代码y的第一语义代码微指令的实际物理地址,或者允许SEE加载该微指令的某些抽象。地址代码SCT[y]还可包含其他信息,例如哪一个SEE(在多SEE系统中)应当接收代码段的指示。
当受到剖析器控制FSM 210命令时,SEE接口280检查SCT[y],并确定代码段是否需要被分派到SEE。如图7中的判决方框442所示,如果SCT[y]不是“有效的”,即代表NULL值,则没有必要执行任何微指令。否则,SEE接口280确定(判决方框444)SEE在当前是否是可获得的。SEE接口280检查信号量(semaphore)寄存器(未示出)以确定SEE的可获得性。如果SCT[y]指示了特定的SEE,则SEE接口280检查该SEE的信号量。如果信号量指示所请求的SEE正忙,则SEE接口280进入等待状态446,直到信号量清零。如果任何SEE都可执行语义代码段,则SEE接口280可简单地选择一个信号量清零的SEE。
当对于所选SEE信号量清零时,SEE接口280捕捉SX-bus,并将SCT[y]发送到所选的SEE。所选的SEE设置其信号量以指示其已接收到请求。
当剖析器控制FSM 210首先命令SEE接口280分派SCT[y]时,SEE接口280给SEE状态线去声明(deassert)以悬挂进一步的剖析,从而防止剖析器控制FSM 210退出当前剖析周期,直到已分派了SCT[y](在给SEE状态线去声明的同时,可以并行地继续将扩展的产生规则PR[y]推入栈的操作)。一旦SCT[y]已被传送到所选的SEE,DXP 200是否继续悬挂剖析就可以取决于SCT[y]。例如,SCT[y]还可指示对应的语义代码段应当阻塞(block)剖析器控制FSM 210的进一步处理多长时间。在一个实施例中,DXU可以在下列时间释放:一分派了SCT[y]就释放;SEE一设置了其信号量就释放;在SEE设置其信号量后经过可编程的时钟周期数释放;或者直到SEE设置并清零了其信号量后才释放。或者,SEE可以有对应于这些不同可能性的不同信号量状态。
在每个剖析器周期的结束(图7中的判决方框460),如果栈为空,则栈操纵器220将向剖析器控制FSM 210声明栈空信号SE。一旦声明了SE信号,剖析器控制FSM 210就重新设置其状态以等待下一个输入分组的开始。然而,只要栈未空,剖析器控制FSM就返回到方框400并开始新的剖析周期。
图8示出了具有扩展能力的第二RSP实施例500。与图3所示单个SEE 300不同的是,RSP 500并入了N+1个SEE 300-0到300-N。RSP 500还包含多个其他重要的附件:异常处理单元(EPU)600、数组机器上下文数据存储器(AMCD)700和变量机器上下文数据存储器(VMCD)800。下面将解释图8中每个方框的功能。
图9示出了SEE 300-0的基本功能框。在SEE 300-0的中心处是算术逻辑单元(ALU)310、流水线寄存器集320和语义代码(或s-code)指令解码器330。s-code队列340存储SEE要执行的微指令。微指令自身存储在语义代码表160中,并由SEE S-bus接口360接收。SEE控制有限状态机(FSM)350协同执行图示SEE方框的操作。
SEE 300-0保持空闲,直到其在Sx-bus上接收到执行请求(来自DXP200)为止。SEE控制FSM 350检查Sx-bus上的流量,等待定向到SEE300-0的请求(例如,可以四个Sx-bus地址线寻址上限为16个的SEE,每个SEE地址唯一)。当请求被定向到SEE 300-0时,请求例如包含起始语义代码地址。SEE控制FSM 350以下列动作响应请求:设置其信号量以肯定其正忙;并指示S-bus接口360驱动S-bus上的请求,以获取从接收的起始语义代码地址开始的微指令代码段。
S-bus接口360的任务是:在s-code指令解码器330需要s-code指令之前,将s-code指令放入队列340中。S-bus接口没有必要与其他SEE S-bus接口竞争以接入到S-bus,因而在一次动作中一次下载多个顺序指令可能是有益的。S-bus接口360维护s-code地址计数器(未示出),并继续顺序下载指令,除非被SEE控制FSM 350定向。
S-code微指令解码器330在ALU 310和流水线寄存器320上执行DXP所请求的代码段。尽管优选地在指令解码器330内存在分叉能力,但是许多代码段在RSP的整个结构中很少需要或基本不需要分叉。
ALU 310可以是传统的,例如,能够利用其自身的寄存器值和/或来自流水线寄存器320的值执行添加、比较、偏移等操作。
流水线寄存器320允许对数据的机器上下文访问。与标准CPU不同的是,优选的SEE实施例没有关于用于其正操作的数据的物理数据存储结构的概念。相反地,对数据的访问采用了机器上下文事务形式。在V-bus上访问变量(例如标量)数据;在A-bus上访问数组数据;在Si-bus上访问输入流数据。例如,为了读取位于数据上下文ct内给定位置offset的长度为m个八位字节的标量数据元素,指令解码器330提示V-bus接口发出总线请求{read,ct,offset,m}。上下文mct指RSP的主上下文;其他的子上下文通常在RSP处理输入数据时创建和毁坏,例如用于当前TCP分组或主动会话的子上下文。
一旦流水线寄存器发出命令,其就处理数据传送过程。如果需要多个总线传送来读或写m个八位字节,则流水线寄存器将跟踪事务直到完成。作为示例,可以利用两个微指令将六个八位字节字段从流输入传送到机器上下文变量:第一指令将六个八位字节从Si-bus读取到流水线寄存器;然后,第二指令经由V-bus将六个八位字节从寄存器写入到机器上下文变量。然而,需要执行许多总线数据的寄存器接口来使传送有效。
VMCD 800为在V-bus上发起的请求提供服务。VMCD 800能够将机器上下文变量数据请求转换为物理存储器事务。从而,VMCD 800优选地维护将机器上下文标识符对应到物理起始地址的转换表,包含用于分配和去分配上下文的机构,允许上下文被给定的SEE锁定,并确保所请求的事务不落在所请求的上下文边界的外部。所采用的实际存储机构可以基于应用而变化:存储器可以是完全内部的、完全外部的、两者的混合、带有大的外部存储器的缓存等。在给定实现中,外部存储器可以与其他存储器部件的外部存储器共享如AMCD、e-code表、输入缓冲器、剖析器表、产生规则表和语义代码表。
A-bus接口和AMCD 70类似地操作,但是具有数组机器上下文组织。优选地,利用简单的总线请求可以分派、重新定义大小、去分配、写入、读取、搜索、还可能散列或归类不同类型的数组和表。对于不同类型的数组和表,实际的根本物理存储器可以不同,例如包括板上快速RAM、外部RAM或ROM、内容可寻址存储器等。
返回到SEE 300-0和其流水线寄存器的描述,每个SEE可经由Si-bus访问来自缓冲器510的输入数据。并且每个SEE可以访问P-bus和当前剖析器栈顶的符号-这是有用的,例如在相同的s-code用于多个产生规则时,但是其输出取决于发起其的产生规则。最后,可以特殊化某些SEE的流水线寄存器。例如,图8中的SEE 300-1与本地I/O模块520通信,以提供去往/来自例如连接到本地I/O模块520的本地USB或串行ATA设备的数据路径。并且图8中的SEE 300-2与EPU 600通信以提供去往/来自异常单元的数据路径。尽管在理论上每个SEE可以与这些设备中的每一个分离连接,但是实际上设备被简化了,并且通过将某些SEE与某些其他功能配对,带来了很小的性能下降。
异常处理单元600可以是标准的冯·诺依曼中央处理单元(CPU),尽管在许多应用中其可以是非常基本的处理单元。当包括EPU 600时,其优选地被用来处理不经常运行或者时间要求不严格的复杂代码。示例有用户登录过程、使本地驱动器在远端可用的请求、错误登录和恢复、系统启动时的表加载和系统配置。EPU 600经由加载到SEE 300-2中的s-code段不直接响应于DXP请求。优选地,EPU 600还可指派SEE 300-2执行其功能,例如对AMCD 700或VMCD 800的读或写。
e-code表610对于EPU 600优选地是可获得的。e-code表包含设备的引导(boot)指令,还可包含用于执行DXP所请求的其他功能的可执行指令。可选地,e-code表610可包含用于将s-code请求转换为要执行代码的指令地址的表,其中指令地址位于传统的外部存储器空间中。
一个示例
为了更好的图示RSP 500的操作,给出了如IETF RFC 826中所描述的地址解析协议(ARP)的实现示例。该示例涉及产生规则的创建、剖析器表条目和用于处理接收的ARP分组的s-code的功能实质。
简要地说,ARP分组允许本地网络节点将每个对等体的链路层(硬件)地址关联到一个或多个网络协议的网络(协议)地址。该示例假定硬件协议是以太网,并且网络协议是因特网协议(IP或IPv4)。因此,ARP分组具有如图10所示的格式。当opcode字段被设为1时,发送者正试图发现与目标协议地址相关联的目标硬件地址,并请求ARP答复分组。当opcode字段被设为2时,发送者正答复ARP请求-这种情况下,发送者的硬件地址就是最初发送者寻找的目标硬件地址。
下面的示例性语法描述了RSP 500可以处理在输入端口接收的ARP分组的一种方式。$指示产生规则的开始,{}包含SEE要执行的s-code:
$MAC_PDU:=MAC_DA_MAC_SA_MAC_PAYLOAD_MAC_FCSEoFrame
$MAC_DA:=0X08 0X01 0X02 0X03 0X04 0X05
          |0XFF 0XFF 0XFF 0XFF 0XFF 0XFF
$MAC_SA:=etherAddType{s0:mct->curr_SA=MAC_SA}
$MAC_PAYLOAD:=0X08ET2
$ET2:=0X06 ARP_BODY|0X00 IP_BODY
$ARP_BODY          :=ARP_HW_TYPE         ARP_PROT_TYPEARP_HW_ADD_LEN_ARP_PROT_ADD_LEN_ARP_OP_ARP_PADDING
$ARP_HW_TYPE:=0X0001
$ARP_PROT_TYPE:=0x0800
$ARP_HW_ADD_LEN:=0X06
$ARP_PROT_ADD_LEN:=0X040x00
$ARP_OP:=0x01 ARP_REQ_ADDR
|0x02 ARP_REPLY_ADDR
$ARP_REQ_ADDR:=ARP_SENDER_HW ARP_SENDER_PROTARP_TARGET_HW ARP_TARGET_PROT{s1:s-code seg1}
$ARP_REPLY_ADDR:=ARP_SENDER_HW  ARP_SENDER_PROTARP_TARGET_HW ARP_TARGET_PROT{s2:s-code seg2}
$ARP_SENDER_HW:=etherAddType
$ARP_SENDER_PROT:=ipAddType
$ARP_TARGET_HW:=etherAddType
$ARP_TARGET_PROT:=ipAddType
$ARP_PADDING=octet|null{s3:calc.length;throw away}
$IP_BODY=//unresolved by this example
$MAC_FCS:=octet octet octet octet{s4:check FCS}
$etherAddType:=octet octet octet octet octet octet
$ipAddType:=octet octet octet octet
{s-code segl:=if ARP_TARGET_PROT==mct->myIPAddress thengenerate ARP reply to mct->curr_SA;s-code seg2}
{s-code seg2:=update mct->ArpCache with ARP-SENDER-HW,ARP-SENDER-PROT,mct->time}
该示例只处理了所有可能的ARP分组的有限集,即正确地指示了与以太网硬件类型和IP协议类型相一致的字段的ARP分组;所有其他的ARP分组将不被剖析并被拒绝。该语法还为处理IP分组($IP_BODY)留下了钩子(hook)从而不会拒绝IP分组,但是对应的IP语法不是该示例的一部分。
遍览产生过程,$MAC_PDU仅仅定义了MAC帧格式。$MAC_DA允许两个目的地MAC地址:特定硬件地址(0x08 0x01 0x02 0x03 0x040x05)和全1的广播地址。所有其他的MAC地址被自动拒绝,因此地址不是以上两个地址之一的分组不被剖析。$MAC_SA接受任何源地址;SEE被指派用来将源地址保存为VMCD上的主上下文表变量mct→curr_SA。$MAC_PAYLOAD和$ET2组合来确保只剖析两种类型的载荷,ARP载荷和IP载荷(这里未图示出IP载荷的进一步剖析)。当然,通过扩展这些产生,可以添加其他的分组类型。
当MAC_PAYLOAD的前两个字节指示ARP分组(类型=0x0806)时,剖析器随后试图剖析$ARP_BODY。为了简化,ARP主体的前四个单元(硬件和协议类型以及地址长度)示为固定-如果对于除IP外的另一种协议实现了ARP,则这些单元可以通用(注意长度字段的通用可能允许随后的地址字段的大小不同,这是产生规则中必须要考虑的一个条件)。
$ARP_OP可能有两个值,1为请求,2为答复。尽管对于$ARP_OP的两个值,地址剖析并没有不同,但是每种情况下要执行的s-code是不同的。ARP请求执行的s-code段1将目标协议与存储在VMCD上的主上下文表中的本地IP地址相比较。当两者相等时,SEE生成到发送者的硬件和IP地址的ARP答复分组。S-code段2执行ARP请求和ARP答复-该段以发送者的硬件和协议地址以及接收的时间来更新存储在AMCD中的ArpCache数组。mct→ArpCache的“更新”命令包括用来识别ArpCache中的哪些数据应当用来执行更新的标志或掩码;通常,缓存至少由IP地址来索引。
在以太网/IP ARP分组中,ARP_PADDING的长度为18个八位字节。然而,这里所示的ARP_RADDING产生规则适合任何数目的八位字节。在该示例中,调用s-code段来计算填充长度并例如通过领先输入指针而“扔掉”该许多的八位字节。或者,剖析器可以使用五个八位字节的超前查看来查看输入中的EoFrame令牌;当发现令牌时,在前的四个八位字节是FCS。在该示例的结论处,将解释剖析器具有变量符号超前查看能力的可替换实施例。
MAC_FCS产生指示SEE要检查附接到分组的FCS。SEE实际上可能计算校验和,或者可通过输入缓冲器或其他硬件来计算校验和,这种情况下,SEE仅仅比较分组值和计算的值,并且在不匹配时拒绝分组。
为了进一步示出RSP 500是如何被配置来执行以上的ARP语法的,下面将给出并解释示例性的产生规则表和剖析器表值。首先示出了产生规则,其中,十六进制符号示出了终端值,十进制符号指示产生规则,“octet”匹配在输入流的头部发现的任何八位字节。非终端(NT)代码被用作剖析器表的索引;产生规则(PR)代码存储在剖析器表中,并且指示哪一个产生规则应用到NT代码和输入值的给定组合。
ARP产生规则
  NT代码   名称   产生规则号   产生规则代码   RHS非终端值
  129   MAC_PDU   129.1   51   130   131   134   148   127
  130   MAC_DA   130.1   52   0x08   0x01   0x02   0x03   0x04   0x05
  130.2   53   0xFF   0xFF   0xFF   0xFF   0xFF   0xFF
  131   MAC_SA   131.1   54   132
  132   EtherAddType   132.1   55   octet   octet   octet   octet   octet   octet
  133   IpAddType   133.1   56   octet   octet   octet   octet
  134   MAC_PAYLOAD   134.1   57   0x08   135
  135   ET2   135.1   58   0x06   136
  135.2   59   0x00   $IP_BODY(unresolved)
  136   ARP_BODY   136.1   60   137   138   139   140   141   148
  137   ARP_HW_TYPE   137.1   61   0x00   0x01
  138   ARP_PROT_TYPE   138.1   62   0x08   0x00
  139   ARP_HW_ADDLEN   139.1   63   0x06
  140   ARP_PROT_ADD_LEN   140.1   64   0x04   0x00
  141   ARP_OP   141.1   65   0x01   142
  141.2   66   0x02   143
  142   ARP_REQ_ADDR   142.1   67   144   145   146   147
  143   ARP_REPLY_A   143.1   68   144   145   146   147
  DDR
  144   ARP_S70ENDER_HW   144.1   69   132
  145   ARP_SENDER_PROT   145.1   70   133
  146   ARP_TARGET_HW   146.1   71   132
  147   ARP_TARGET_PROT   147.1   72   133
  148   ARP_PADDING   148.1   73   octet   148
  148.2   74   Null
  149   ARP_FCS   149.1   75   octet   octet   octet   octet
在以上的ARP产生规则表中,RHS非终端值(例如,附接有特殊的规则结束符号)是存储在RSP的产生规则表中的。产生规则代码是到对应产生规则的“指针”;实际存储在剖析器表中的其实是PR代码。下面的剖析器表段图示了PR和PR代码之间的关系:
ARP剖析器表值
  非终端                         输入流数据值的头部
  NT代码   名称  0x00   0x01   0x02   0x04   0x06   0x08   0xFF  范围[0x00-0xFF]内的所有其他值
  0   S(start symbol)
  127   Eoframe
  128   $(bottom of stack)
  129   MAC_PDU   51   51
  130   MAC_DA   52   53
  131   MAC_SA   54
  132   EtherAddType   55
  133   IpAddType   56
  134   MAC_PAYLOAD   57
  135   ET2   59   58
  136   ARP_BODY   60
  137   ARP_HW_TYPE   61
  138   ARP_PROT_TYPE   62
  139   ARP_HW_ADD_LEN   63
  140   ARP_PROT_ADD_LEN   64
  141   ARP_OP   65   66
  142   ARP_REQ_ADDR   67
  143   ARP_REPLY_ADDR   68
  144   ARP_SENDER_HW   69
  145   ARP_SENDER_PROT   70
  146   ARP_TARGET_HW   71
  147   ARP_TARGET_PROT   72
  148   ARP_PADDING   73,74
  149   MAC_FCS   75
*利用剖析器或SEE中的超前查看能力实现了PR 148.1/.2
NT代码和“输入流数据值的头部”的组合作为RSP中剖析器表值的索引。注意开始符号S、Eoframe符号和栈底符号$是特殊情况-对这些符号不需参考剖析器表就可实现剖析器控制FSM。对于许多NT代码,不论占据输入流头部的数据值如何,表都产生相同的PR代码。在该示例中,所有其他的NT代码都有输入流值一或两个头部的有效值(单元中的空白值代表无效条目)。该信息可以矩阵格式编码,其中填充每个单元,或者可以某些其他更经济的格式编码。
给定上面的表,下面给出RSP执行以太网/ARP分组的示例。在该示例中,DXP以剖析器周期作为每一步,对应于图7中流程图的一个“循环”。在每个周期中,机器状态循着下面的顺序进行:输入指针ip,指示正剖析的当前流输入符号的字节地址;输入指针所指向的输入符号,*ip;剖析器栈指针psp,指示在剖析器周期的开始指向哪一个栈值;在该剖析器周期的开始的剖析器栈顶的符号,*psp,其中非终端符号指示以前缀“nt.”,终端符号t.xx匹配任何输入符号;PT[*ip,*psp],剖析器表的当前索引值;PRT[PT],PT[*ip,*psp]所指向的产生规则;SCT[PT],PT[*ip,*psp]所指向的s-code段;以及*ps,剖析器栈的整个内容。
在示例中将使用下面的ARP分组,其中所有的值标识以十六进制符号:
0x0000:FF FF FF FF  FF FF 00 02  3F 77 6D 9E  08 06 00 01
0x0010:08 00 06 04  00 01 00 02  3F 77 6D 9E  C0 AS 00 04
0x0020:00 00 00 00  00 00 C0 A8  00 06 3A 20  33 0D 0A 53
0x0030:54 3A 20 75  72 6E 3A 73  63 68 65 6D  EF 73 84 CC
这是发送到广播MAC地址的ARP请求分组,请求与网络地址192.168.0.6(在该示例中是分配给RSP的网络地址)相关联的硬件地址。剖析该示例分组的结果以表格形式示在下面,跟随有简要的解释。尽管示例较冗长,但是由于其经历了RSP的大部分基本功能,因而较有意义。
ARP分组剖析器周期示例
  剖析器周期   ip  a=*ip   psp   X=*psp   y=PT[a,X]   PRT[y] SCT[y]   *ps
  0   0x00  0xFF   1   nt.129   51   nt.130nt.131nt.134nt.149nt.127 NULL   nt.129nt.128
  1   0x00   0xFF   5   nt.130   53   0xFF 0xFF0xFF 0xFF0xFF 0xFF   NULL   nt.130 nt.131 nt.134nt.149 nt.127 nt.128
  2   0x00   0xFF   10   0xFF   N/A   N/A   N/A   0xFF 0xFF 0xFF0xFF 0xFF 0xFFnt.131 nt.134 nt.149nt.127 nt.128
  3   0x01   0xFF   9   0xFF   N/A   N/A   N/A   0xFF 0xFF 0xFF0xFF 0xFF nt.131nt.134 nt.149nt.127 nt.128
  4   0x02   0xFF   8   0xFF   N/A   N/A   N/A   0xFF 0xFF 0xFF0xFF nt.131 nt.134nt.149 nt.127 nt.128
  5   0x03   0xFF   7   0xFF   N/A   N/A   N/A   0xFF  0xFF  0xFFnt.131 nt.134 nt.149nt.127 nt.128
  6   0x04   0xFF   6   0xFF   N/A   N/A   N/A   0xFF 0xFF nt.131nt.134 nt.149nt.127 nt.128
  7   0x05   0xFF   5   0xFF   N/A   N/A   N/A   0xFF nt.131 nt.134nt.149 nt.127 nt.128
  8   0x06   0x00   4   nt.131   54   t.xx t.xx t.xxt.xx t.xx t.xx   s0   nt.131 nt.134 nt.149nt.127 nt.128
  9   0x06   0x00   9   t.xx   N/A   N/A   N/A   t.xx  t.xx  t.xx  t.xxt.xx  t.xx  nt.134nt.149 nt.127 nt.128
  10   0x07   0x02   8   t.xx   N/A   N/A   N/A   t.xx  t.xx  t.xx  t.xxt.xx  nt.134 nt.149
  nt.127 nt.128
  11   0x08   0x3F   7   t.xx   N/A   N/A   N/A   t.xx  t.xx  t.xx  t.xxnt.134 nt.149 nt.127nt.128
  12   0x09   0x77   6   t.xx   N/A   N/A   N/A   t.xx t.xx t.xx nt.134nt.149 nt.127 nt.128
  13   0x0A   0x6D   5   t.xx   N/A   N/A   N/A   t.xx  t.xx  nt.134nt.149 nt.127 nt.128
  14   0x0B   0x9E   4   t.xx   N/A   N/A   N/A   t.xx  nt.134 nt.149nt.127 nt.128
  15   0x0C   0x08   3   nt.134   57   0x08nt.135   NULL   nt.134 nt.149 nt.127nt.128
  16   0x0C   0x08   4   0x08   N/A   N/A   N/A   0x08 nt.135 nt.149nt.127 nt.128
  17   0x0D   0x06   3   nt.135   58   0x06nt.136   NULL   nt.135 nt.149 nt.127nt.128
  18   0x0D   0x06   4   0x06   N/A   N/A   N/A   0x06 nt.136 nt.149nt.127 nt.128
  19   0x0E   0x00   3   nt.136   60   nt.137nt.138nt.139nt.140nt.141nt.148   NULL   nt.136 nt.149 nt.127nt.128
  20   0x0E   0x00   8   nt.137   61   0x00 0x01   NULL   nt.137 nt.138 nt.139nt.140 nt.141 nt.148nt.149 nt.127 nt.128
  21   0x0E   0x00   9   0x00   N/A   N/A   N/A   0x00 0x01 nt.138nt.139 nt.140 nt.141
  nt.148 nt.149 nt.127nt.128
  22   0x0F   0x01   8   0x01   N/A   N/A   N/A   0x01 nt.138 nt.139nt.140 nt.141 nt.148nt.149 nt.127 nt.128
  23   0x10   0x08   7   nt.138   62   0x08 0x00   NULL   nt.138 nt.139 nt.140nt.141 nt.148 nt.149nt.127 nt.128
  24   0x10   0x08   8   0x08   N/A   N/A   N/A   0x08 0x00 nt.139nt.140 nt.141 nt.148nt.149 nt.127 nt.128
  25   0x11   0x00   7   0x00   N/A   N/A   N/A   0x00 nt.139 nt.140nt.141 nt.148 nt.149nt.127 nt.128
  26   0x12   0x06   6   nt.139   63   0x06   N/A   nt.139 nt.140 nt.141nt.148 nt.149 nt.127nt.128
  27   0x12   0x06   6   0x06   N/A   N/A   N/A   0x06 nt.140 nt.141nt.148 nt.149 nt.127nt.128
  28   0x13   0x04   5   nt.140   64   0x04 0x00   N/A   nt.140 nt.141 nt.148nt.149 nt.127 nt.128
  29   0x13   0x04   6   0x04   N/A   N/A   N/A   0x04 0x00 nt.141nt.148 nt.149 nt.127nt.128
  30   0x14   0x00   5   0x00   N/A   N/A   N/A   0x00 nt.141 nt.148nt.149 nt.127 nt.128
  31   0x15   0x01   4   nt.141   65   0x01nt.142   NULL   nt.141 nt.148 nt.149nt.127 nt.128
  32   0x15   0x01   5   0x01   N/A   N/A   N/A   0x01 nt.142 nt.148nt.149 nt.127 nt.128
  33   0x16   0x00   4   nt.142   67   nt.144nt.145nt.146nt.147   s1   nt.142 nt.148 nt.149nt.127 nt.128
  34-61   Cycle sender and Target Hardware and Protocol Addresses ThroughParser,SEE is executing code to match target protocol address and sendARP reply if match
  62   0x2A   0x3A   3   nt.148   73/74   null   s3   nt.148 nt.149 nt.127nt.128
  63   0x2A   0x3A   3   null   N/A   N/A   N/A   null  nt.149 nt.127nt.128
  64   0x3C   0xEF   2   nt.149   75   t.xx    t.xxt.xx t.xx   s4   nt.149 nt.127 nt.128
  65   0x3C   0xEF   5   t.xx   N/A   N/A   N/A   t.xx  t.xx  t.xx  t.xxnt.127 nt.128
  66   0x3D   0x73   4   t.xx   N/A   N/A   N/A   t.xx t.xx t.xx nt.127nt.128
  67   0x3E   0x84   3   t.xx   N/A   N/A   N/A   t.xx  t.xx  nt.127nt.128
  68   0x3F   0xCC   2   t.xx   N/A   N/A   N/A   t.xx nt.127 nt.128
  69   0x40   EoF   1   nt.127   frame end processing   nt.127 nt.128
  70   0x41   ?   0   nt.128   waiting for start of newframe   nt.128
通常,以上的详细示例图示了产生规则是如何扩展到剖析器栈中然后被独立处理的,其或者通过:将终端符号与输入符号匹配(例如见剖析器周期2-7);将终端无关紧要的符号t.xx与输入符号匹配(例如见剖析器周期9-14);不论输入如何(例如见剖析器周期8)或基于当前输入符号(例如见剖析器周期0、1、17),进一步扩展非终端符号;或者执行null周期,这种情况下允许SEE调整输入指针以“跳过”填充字段的剖析(剖析器周期63)。该示例还图示了在剖析过程期间的合适点处调用s-code段的操作,取决于此产生规则被加载到栈上(剖析器周期8、33、62、64)。可以意识到,这些代码段中的某一些可以与继续的剖析并行执行。
以上所给出的示例性语法只是根据本发明实施例实现ARP语法的一种方式。例如,通过明确地将某些非终端扩展为其父产生规则,可以减少某些周期的低效率。也可以在一定程度上使ARP语法通用化以处理更多的可能性。然而,所选的编码只是说明基本原理,并不是所有可能的最优选择或ARP特征。对于给定实现,显式扩展也可能受限于所选择的栈大小。
在替换实施例中,DXP 200可实现LL(f(X))剖析器,其中,超前查看值f(X)被编码到栈符号中,从而使得每个栈符号可指定其自身的超前查看。作为示例,先前示例中ARP_PADDING的产生规则可以指定为
$ARP_PADDING:=octet ARP_PADDING|EoFrame,(LA5)
其中,(LA5)指示该规则的5符号的输入符号超前查看。超前查看值被编码进产生规则表中,从而使得当执行规则时,DXP 200在产生规则表中查找(X,a+5)。
也可以使用变量超前查看能力来指示在表查找中要使用多个输入符号。例如,MAC_DA的产生规则可指定为
$MAC_DA:=0X08 0X01 0X02 0X03 0X04 0X05
          |0XFF 0XFF 0XFF 0XFF 0XFF 0XFF,(LA6)与创建每个由六个终端符号组成的两个产生规则52和53不同的是,剖析器表包含两个条目,每个匹配六个符号,例如,在剖析器表位置(X,a)=(130,0X08 0X01 0X02 0X03 0X04 0X05)和(130,0XFF 0XFF 0XFF0XFF 0XFF 0XFF)。
利用该方法,标准的行、列矩阵剖析器表可以证明是非常浪费的,这是由于上限为六个八位字节输入符号宽度所需的可寻址列的数目和该矩阵的稀少。图11中示出了一种使用三进制(ternary)CAM的替换实现方式。
图11的三进制CAM 900加载有匹配地址和对应产生规则代码的表。每个匹配地址包括一个八位字节栈符号X和六个八位字节输入符号a1、a2、a3、a4、a5、a6。当匹配地址被提供给CAM 900时,其确定在其剖析器表条目中是否存在匹配。如果存在匹配,则返回对应的产生规则代码(或者,返回引发匹配的表条目的地址,其可用作产生规则代码或指针表的索引)。
图11的剖析器表实现方式的一个优点在于:其比矩阵方法更有效率,这是由于只对于栈和输入符号的有效组合才创建条目。这一相同的有效性允许在一个剖析器周期中剖析更长的输入符号串(图示上限为六个输入符号,但是设计者可以使用任何方便的长度),从而可以在一个剖析器周期中剖析MAC或IP地址。另外,超前查看能力可以隐性地编码进CAM中,例如下一个六输入符号可以总是提供给表。对于对应于LL(1)剖析的产生规则(例如CAM 900中X=136的行),该行上对应于a2、a3、a4、a5、a6的CAM比特被设为“无关紧要的”值xx,并且对查找不起作用。对于对应于LL(2)剖析的产生规则(例如X=134和135的行,其分别匹配ARP和IP分组的两个八位字节分组型字段),这些行上对应于a3、a4、a5、a6的CAM比特被设为xx。在表中可以输入上限为LL(6)的剖析,如图中X=129的两个MAC地址条目。注意如果a1、a2、a3、a4、a5被设为xx,则也可以实现真正的六符号超前查看。最后一点是,利用三进制CAM,每个比特可以独立地被设为“无关紧要的”状态,从而产生规则也可以被设为忽略如在标志字段中的某些比特。
二进制CAM也可用在剖析器表的实现中。主要的区别是:二进制CAM不能以显式方式存储“无关紧要的”信息,从而使剖析器状态机(或某些其他机构)负责以某些其他方式处理任何“无关紧要的”功能。
本领域的技术人员会意识到,这里所教导的概念可以许多其他的有利方式应用到具体应用中。例如,可以对给出的代码和寻址方案进行许多改变。在描述的实施例中,微指令代码段以NULL指令结束-可以由SEE的S-bus接口、微指令解码器或s-code表功能来检测NULL指令的存在。对于SEE来说s-code地址不是必须知道的;SCT可以跟踪每个SEE的指令指针,其中每个SEE的指令指针由DXP设定。尽管图示了具有不同接口的多个存储器存储区域,但是其中若干个接口可以共享到公共存储器存储区域的访问,该公共存储器存储区域充当所有接口的物理存储空间。本领域的技术人员将意识到,诸如异常处理单元之类的某些组件或者可以与RSP集成,或者可以连接到RSP作为分离元件。
对于给定语法集剖析器表、产生规则表和s-code表是如何填充的并不重要-例如,可以通过EPU、其中一个SEE上的根代码段或在输入端口处提供表填充指令的根语法段来实现填充。当然,也可以非易失性存储器来实现表,从而使得不必在每次开机时都重新加载表。
图示DXP操作的流程图仅是说明性的-例如,这里意识到,给定的状态机实现方式可并行完成图示为顺序任务的许多任务,并且可以推测性地执行许多操作。
尽管图示并描述的多个实施例都只有单个输入端口,但是“一个”输入端口的描述仅仅表示至少一个端口存在。物理端口配置可以取决于应用而变化。例如,取决于端口带宽和剖析器性能,可以将多个输入端口复用为相同的引导执行剖析器。
本领域的技术人员将意识到,在本发明的范围内其他功能划分也是可以的。另外,功能是否实现在通用集成电路(对于硬件实现方式)上只是设计选择,并且可取决于应用而变化。还意识到所描述的剖析器功能可以利用传统的软件技术实现在通用处理器上,尽管这可能有损于硬件实施例存在的某些优点。
最后,尽管说明书在多个位置可能涉及到“一个”、“另一个”或“某些”实施例,但是这并不意味着每一个该处引用都指相同的实施例,或者该特征只存在于单个实施例。

Claims (56)

1.一种数据处理系统,包括:
接收数据符号的输入端口;
具有存储栈符号的栈的引导执行剖析器,所述剖析器能够响应于接收的数据符号而处理栈符号;
可由所述剖析器访问的剖析器表,所述剖析器表能够填充有产生规则代码,所述产生规则代码可由至少一个接收的数据符号和所述剖析器提供的栈符号的组合索引;
可由所述剖析器访问的产生规则表,所述产生规则表能够填充有产生规则,所述产生规则可由产生规则代码索引;
第一语义代码执行引擎,当受所述引导执行剖析器提示时,能够利用所述剖析器指示的机器指令段执行机器指令;以及
可由所述语义代码执行引擎访问的语义代码表,所述语义代码表能够填充有机器指令段,所述机器指令段可由产生规则代码索引。
2.如权利要求1所述的系统,还包括第二语义代码执行引擎,当受所述引导执行剖析器提示时,能够利用所述剖析器指示的机器指令执行机器指令,所述第一和第二语义代码执行引擎能够并行执行机器指令。
3.如权利要求2所述的系统,还包括具有微处理器和关联存储器的异常处理单元,所述异常处理单元能够在请求至少一个语义代码执行引擎时执行任务。
4.如权利要求2所述的系统,还包括连接到至少一个语义代码执行引擎的阻塞输入/输出端口,所述阻塞输入/输出端口能够在至少一个语义代码执行引擎的控制下发起阻塞输入/输出操作。
5.如权利要求2所述的系统,其中,产生规则代码允许所述引导执行剖析器确定对应的语义代码表机器指令段是否可定向到任何可用的语义代码执行引擎,或者该段是否应当定向到特定的语义代码执行引擎。
6.如权利要求1所述的系统,还包括所述引导执行剖析器和所述语义代码执行引擎之间的接口,所述接口当受所述语义代码执行引擎引导时能够悬挂所述引导执行剖析器处理的栈符号。
7.如权利要求1所述的系统,其中,所述剖析器表、产生规则表和语义代码表至少部分地驻留在可重编程存储设备中。
8.如权利要求7所述的系统,其中,所述系统处理数据分组,每个数据分组根据一个或多个网络协议进行格式化,所述剖析器表、产生规则表和语义代码表是可重编程的以支持不同网络协议的剖析。
9.如权利要求8所述的系统,其中,在所述系统处理数据分组的同时,所述系统还可将网络协议加载到剖析器表可重编程存储设备中。
10.如权利要求1所述的系统,还包括连接到数据存储区域且可由所述语义代码执行引擎访问的机器上下文数据接口,所述机器上下文数据接口管理所述数据存储区域,并响应于所述语义代码执行引擎发出的机器上下文指令而执行数据操作。
11.如权利要求10所述的系统,所述机器上下文数据接口包括变量机器上下文数据接口和数组机器上下文数据接口,所述数组机器上下文数据接口能够管理数组数据并对数组数据执行数据操作。
12.如权利要求11所述的系统,其中,所述数组机器上下文数据接口以不同于所述变量机器上下文数据接口访问数据存储区域时的数据访问格式的数据访问格式来访问至少一个数据存储区域。
13.如权利要求1所述的系统,其中,利用软件来配置微处理器和其附接存储器,实现了至少所述引导执行剖析器、所述剖析器表和所述产生规则表。
14.如权利要求1所述的系统,其中,所述产生规则表能够存储比特掩码的终端符号,每个比特掩码的终端符号能够指示在对应输入符号中的所选比特是“无关紧要的”比特。
15.如权利要求1所述的系统,其中,所述引导执行剖析器执行从以下方法组中选择的剖析方法,所述方法组包括LL剖析、LR剖析、LALR剖析和递归下降剖析。
16.如权利要求1所述的系统,其中,所述引导执行剖析器能够利用变量输入符号超前查看来剖析输入符号,所述变量输入符号超前查看对于每个栈符号可以是变化的。
17.如权利要求16所述的系统,其中,所述变量输入符号超前查看可以与所述产生规则一同存储为所述产生规则表中的值,并且当所述引导执行剖析器将产生规则加载到所述栈中时,其也加载所述变量输入符号超前查看。
18.如权利要求16所述的系统,其中,所述剖析器表包括二进制或三进制内容可寻址存储器(CAM),其字的大小能够存储对应于栈符号和上限为N个输入符号组合的条目。
19.如权利要求18所述的系统,其中,所述剖析器在每次访问时向所述剖析器表提供N个输入符号,每个CAM条目确定N个输入符号中的哪一个影响该CAM条目的查找。
20.一种集成电路,包括:
接收数据符号的输入端口;
具有存储栈符号的栈的引导执行剖析器,所述剖析器能够响应于接收的数据符号而处理栈符号;
可由所述剖析器访问的剖析器表,所述剖析器表能够填充有产生规则代码,所述产生规则代码可由接收的数据符号和所述剖析器提供的栈符号的组合索引;
可由所述剖析器访问的产生规则表,所述产生规则表能够填充有产生规则,所述产生规则可由产生规则代码索引;
第一语义代码执行引擎,当受所述引导执行剖析器提示时,能够利用所述剖析器指示的机器指令段执行机器指令;以及
可由所述语义代码执行引擎访问的语义代码表,所述语义代码表能够填充有机器指令段,所述机器指令段可由产生规则代码索引。
21.如权利要求20所述的集成电路,还包括第二语义代码执行引擎,当受所述引导执行剖析器提示时,能够利用所述剖析器指示的机器指令来执行机器指令,所述第一和第二语义代码执行引擎能够并行执行机器指令。
22.如权利要求21所述的集成电路,还包括具有微处理器的异常处理单元,所述异常处理单元能够在请求至少一个语义代码执行引擎时执行可编程任务。
23.如权利要求21所述的集成电路,还包括连接到至少一个语义代码执行引擎的阻塞输入/输出端口,所述阻塞输入/输出端口能够在至少一个语义代码执行引擎的控制下发起阻塞输入/输出操作。
24.如权利要求21所述的集成电路,其中,产生规则代码允许所述引导执行剖析器确定对应的语义代码表机器指令段是否可定向到任何可用的语义代码执行引擎,或者该段是否应当定向到特定的语义代码执行引擎。
25.如权利要求20所述的集成电路,还包括所述引导执行剖析器和所述语义代码执行引擎之间的接口,所述接口当受所述语义代码执行引擎引导时能够悬挂所述引导执行剖析器处理的栈符号。
26.如权利要求20所述的集成电路,其中,所述剖析器表、产生规则表和语义代码表至少部分地驻留在可重编程存储设备中。
27.如权利要求26所述的集成电路,其中,所述剖析器表、产生规则表和语义代码表包括缓存,所述缓存用于驻留在与所述集成电路相分离的存储器中的更大的表。
28.如权利要求20所述的集成电路,还包括可连接到数据存储区域且可由所述语义代码执行引擎访问的机器上下文数据接口,所述机器上下文数据接口管理所述数据存储区域,并响应于所述语义代码执行引擎发出的机器上下文指令执行数据操作。
29.如权利要求28所述的集成电路,其中,所述数据存储区域至少部分地集成在所述集成电路上。
30.如权利要求28所述的集成电路,所述机器上下文数据接口包括变量机器上下文数据接口和数组机器上下文数据接口,所述数组机器上下文数据接口能够管理数组数据并对数组数据执行数据操作。
31.如权利要求30所述的集成电路,其中,所述数组机器上下文数据接口以不同于所述变量机器上下文数据接口访问数据存储区域时的数据访问格式的数据访问格式来访问至少一个数据存储区域。
32.一种集成电路,包括:
接收数据符号的输入端口;
具有存储栈符号的栈的引导执行剖析器,所述剖析器能够响应于接收的数据符号而处理栈符号;
可由所述剖析器访问的剖析器表,所述剖析器表能够填充有产生规则代码,所述产生规则代码可由接收的数据符号和所述剖析器提供的栈符号的组合索引;
可由所述剖析器访问的产生规则表,所述产生规则表能够填充有产生规则,所述产生规则可由产生规则代码索引;
多个语义代码执行引擎,每个语义代码执行引擎当受所述引导执行剖析器提示时,都能够利用所述剖析器指示的机器指令段执行机器指令;
可由所述语义代码执行引擎访问的语义代码表,所述语义代码表能够填充有机器指令段,所述机器指令段可由产生规则代码索引;以及
可连接到数据存储区域且可由所述语义代码执行引擎访问的机器上下文数据接口,所述机器上下文数据接口管理所述数据存储区域,并响应于所述语义代码执行引擎发出的机器上下文指令来执行数据操作。
33.如权利要求32所述的集成电路,还包括:
所述语义代码执行引擎和所述语义代码表之间的第一总线;以及
所述语义代码执行引擎和所述机器上下文数据接口之间的第二总线。
34.如权利要求33所述的集成电路,还包括允许所述语义代码执行引擎访问所述数据符号的输入总线。
35.如权利要求32所述的集成电路,还包括所述引导执行剖析器和所述语义代码执行引擎之间的接口,所述接口可访问每个语义代码执行引擎的状态信息,并且能够基于语义代码执行引擎的状态悬挂所述引导执行剖析器处理的栈符号。
36.如权利要求35所述的集成电路,其中,所述状态信息包括信号量集,所述信号量集对应于语义代码执行引擎,并且可由对应的语义代码执行引擎设置。
37.一种集成电路,包括:
接收数据符号的输入端口;
引导执行剖析器,包括:
存储栈符号的栈,所述剖析器能够响应于接收的数据符号而处理栈符号;
允许所述剖析器访问剖析器表的剖析器表接口,所述剖析器表能够填充有产生规则代码,每个代码可由接收的数据符号和所述剖析器提供的栈符号的组合索引;
允许所述剖析器访问产生规则表的产生规则表接口,所述产生规则表能够填充有产生规则,每个规则可由产生规则代码索引;以及
第一语义代码执行引擎,当受所述引导执行剖析器提示时,能够利用所述剖析器指示的机器指令段执行机器指令;以及
允许所述语义代码执行引擎访问语义代码表的语义代码表接口,所述语义代码表能够填充有对应于产生规则的机器指令段。
38.如权利要求36所述的集成电路,还包括集成在所述电路上的所述剖析器表、产生规则表和语义代码表中的至少一部分。
39.如权利要求36所述的集成电路,其中,所述产生规则表能够存储比特掩码的终端符号,每个比特掩码的终端符号能够指示在对应输入符号中的所选比特是“无关紧要的”比特。
40.如权利要求36所述的集成电路,其中,所述引导执行剖析器执行从以下方法组中选择的剖析方法,所述方法组包括LL剖析、LR剖析、LALR剖析和递归下降剖析。
41.如权利要求36所述的集成电路,其中,所述引导执行剖析器能够利用变量输入符号超前查看来剖析输入符号,所述变量输入符号超前查看对于每个栈符号可以是变化的。
42.如权利要求41所述的集成电路,其中,所述变量输入符号超前查看可以与所述产生规则一同存储为所述产生规则表中的值,并且当所述引导执行剖析器将产生规则加载到所述栈中时,其也加载所述变量输入符号超前查看。
43.如权利要求41所述的集成电路,其中,所述剖析器表包括三进制内容可寻址存储器(CAM),其字的大小能够存储对应于栈符号和上限为N个输入符号组合的条目。
44.如权利要求43所述的集成电路,其中,所述剖析器在每次访问时向所述剖析器表提供N个输入符号,每个CAM条目确定N个输入符号中的哪一个影响该CAM条目的查找。
45.一种配置数据处理器来处理数据报数据输入流的方法,所述方法包括:
在产生规则表中存储用于解释数据报的产生规则集,每个规则包括一个或多个符号;
在语义代码表中存储语义执行引擎指令集,每个语义执行引擎指令包括与至少某些产生规则相关联的代码段;以及
在剖析器表中存储参考所述产生规则的产生规则代码集。
46.如权利要求45所述的方法,还包括一旦在所述数据报数据输入流中接收到起始符号,则根据所存储的产生规则初始化引导执行剖析器以开始剖析数据报。
47.一种操作网络处理器的方法,所述方法包括:
在输入端口检测接收到包括多个数据符号的数据报的起始;
引导引导执行剖析器根据存储的产生规则集剖析来自所述数据报的数据符号;以及
至少在剖析过程期间,引导语义代码执行引擎执行与产生规则相关联的代码段。
48.如权利要求47所述的方法,还包括在所述代码段的执行期间,执行生成到附接的机器上下文数据接口的机器上下文数据请求的指令,并将所述机器上下文数据请求转换为至少一个物理存储器的操作。
49.如权利要求47所述的方法,还包括:
检测不能由语义代码执行引擎处理的数据报内容的存在;以及
引导异常处理单元处理所述数据报内容。
50.如权利要求47所述的方法,其中,执行所述代码段包括引导对阻塞输入/输出端口的阻塞输入/输出数据操作。
51.一种实现网络分组协议的方法,所述方法包括:
将所述协议划分为可剖析语法产生规则集,每个包括从终端和非终端符号中选出的至少一个符号,以及要由执行引擎执行的至少某些产生规则的机器上下文任务集;
将非终端代码和产生规则代码分配到产生规则;
以机器可存储格式组织所述语法产生规则,所述语法产生规则可由产生规则代码索引;
以执行引擎指令代码格式组织所述机器上下文任务,所述机器上下文任务可由与对应的产生规则相关联的所述产生规则代码索引;以及
以机器可存储格式生成产生规则代码的剖析器表,所述剖析器表可由非终端符号和在所述网络分组协议要剖析的分组中出现的至少一个符号的组合来索引。
52.如权利要求51所述的方法,还包括以所述机器可存储格式产生规则给所述符号加上前缀代码,所述前缀代码指示每个符号是终端符号还是非终端符号。
53.如权利要求52所述的方法,所述前缀代码还指示终端符号是否能匹配与其成对的任何网络分组协议符号。
54.如权利要求51所述的方法,还包括对于至少一个终端符号,将比特掩码分配到该符号并且以包含该符号的所述产生规则存储所述比特掩码。
55.如权利要求51所述的方法,还包括基于非终端符号和多个输入符号的组合,设置所述剖析器表中的至少某些索引。
56.如权利要求55所述的方法,其中,所述剖析器表中的每个索引可以基于上限为N个索引位置的N个输入符号,并且其中设置所述剖析器表中至少某些索引的步骤包括:对于每个索引,使用1和N之间的索引位置,并且如果有所述索引位置的剩余部分的话,则将所述索引位置的剩余部分设为“无关紧要的”条件。
CNA2003801092138A 2003-01-24 2003-11-12 可重配置语义处理器 Pending CN1742272A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/351,030 2003-01-24
US10/351,030 US7130987B2 (en) 2003-01-24 2003-01-24 Reconfigurable semantic processor

Publications (1)

Publication Number Publication Date
CN1742272A true CN1742272A (zh) 2006-03-01

Family

ID=32735705

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2003801092138A Pending CN1742272A (zh) 2003-01-24 2003-11-12 可重配置语义处理器

Country Status (9)

Country Link
US (2) US7130987B2 (zh)
EP (1) EP1590744A4 (zh)
JP (1) JP4203023B2 (zh)
KR (1) KR20050106591A (zh)
CN (1) CN1742272A (zh)
AU (1) AU2003290817A1 (zh)
CA (1) CA2513097A1 (zh)
TW (1) TWI239475B (zh)
WO (1) WO2004068271A2 (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7415596B2 (en) * 2003-01-24 2008-08-19 Gigafin Networks, Inc. Parser table/production rule table configuration using CAM and SRAM
US7082044B2 (en) * 2003-03-12 2006-07-25 Sensory Networks, Inc. Apparatus and method for memory efficient, programmable, pattern matching finite state machine hardware
US7751440B2 (en) * 2003-12-04 2010-07-06 Intel Corporation Reconfigurable frame parser
US7219319B2 (en) * 2004-03-12 2007-05-15 Sensory Networks, Inc. Apparatus and method for generating state transition rules for memory efficient programmable pattern matching finite state machine hardware
US20050223369A1 (en) * 2004-03-31 2005-10-06 Intel Corporation Method and system for programming a reconfigurable processing element
US7251722B2 (en) * 2004-05-11 2007-07-31 Mistletoe Technologies, Inc. Semantic processor storage server architecture
US20070027991A1 (en) * 2005-07-14 2007-02-01 Mistletoe Technologies, Inc. TCP isolation with semantic processor TCP state machine
WO2006017689A2 (en) * 2004-08-05 2006-02-16 Mistletoe Technologies, Inc. Data context switching in a semantic processor
US20070022275A1 (en) * 2005-07-25 2007-01-25 Mistletoe Technologies, Inc. Processor cluster implementing conditional instruction skip
WO2007014276A2 (en) * 2005-07-25 2007-02-01 Hercules Software, Llc Direct execution virtual machine
KR100697536B1 (ko) 2005-11-08 2007-03-20 전자부품연구원 TV-Anytime 서비스에서 get_Data 오퍼레이션을 이용한 사용자 정보 기초 검색 방법
KR100681199B1 (ko) * 2006-01-11 2007-02-09 삼성전자주식회사 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치
US20080022401A1 (en) * 2006-07-21 2008-01-24 Sensory Networks Inc. Apparatus and Method for Multicore Network Security Processing
US8117530B2 (en) * 2007-02-19 2012-02-14 International Business Machines Corporation Extensible markup language parsing using multiple XML parsers
US9424339B2 (en) 2008-08-15 2016-08-23 Athena A. Smyros Systems and methods utilizing a search engine
US9286892B2 (en) 2014-04-01 2016-03-15 Google Inc. Language modeling in speech recognition
CN110737628A (zh) 2019-10-17 2020-01-31 辰芯科技有限公司 一种可重构处理器和可重构处理器系统
CN114679504B (zh) * 2022-05-27 2022-09-06 成都数联云算科技有限公司 Udp报文解析方法、装置及计算机设备

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4837735A (en) * 1987-06-09 1989-06-06 Martin Marietta Energy Systems, Inc. Parallel machine architecture for production rule systems
US5193192A (en) * 1989-12-29 1993-03-09 Supercomputer Systems Limited Partnership Vectorized LR parsing of computer programs
US5487147A (en) * 1991-09-05 1996-01-23 International Business Machines Corporation Generation of error messages and error recovery for an LL(1) parser
US5805808A (en) * 1991-12-27 1998-09-08 Digital Equipment Corporation Real time parser for data packets in a communications network
US5632034A (en) * 1993-06-01 1997-05-20 International Business Machines Corporation Controlling method invocation sequence through virtual functions in an object-oriented class library
US5581696A (en) * 1995-05-09 1996-12-03 Parasoft Corporation Method using a computer for automatically instrumenting a computer program for dynamic debugging
US6493761B1 (en) * 1995-12-20 2002-12-10 Nb Networks Systems and methods for data processing using a protocol parsing engine
US5793954A (en) * 1995-12-20 1998-08-11 Nb Networks System and method for general purpose network analysis
US6034963A (en) * 1996-10-31 2000-03-07 Iready Corporation Multiple network protocol encoder/decoder and data processor
US5916305A (en) * 1996-11-05 1999-06-29 Shomiti Systems, Inc. Pattern recognition in data communications using predictive parsers
EP0980544A1 (en) * 1997-05-08 2000-02-23 iReady Corporation Hardware accelerator for an object-oriented programming language
US6330659B1 (en) * 1997-11-06 2001-12-11 Iready Corporation Hardware accelerator for an object-oriented programming language
US6122757A (en) * 1997-06-27 2000-09-19 Agilent Technologies, Inc Code generating system for improved pattern matching in a protocol analyzer
US5991539A (en) * 1997-09-08 1999-11-23 Lucent Technologies, Inc. Use of re-entrant subparsing to facilitate processing of complicated input data
US6341130B1 (en) * 1998-02-09 2002-01-22 Lucent Technologies, Inc. Packet classification method and apparatus employing two fields
US6208649B1 (en) * 1998-03-11 2001-03-27 Cisco Technology, Inc. Derived VLAN mapping technique
US6119215A (en) * 1998-06-29 2000-09-12 Cisco Technology, Inc. Synchronization and control system for an arrayed processing engine
US6145073A (en) * 1998-10-16 2000-11-07 Quintessence Architectures, Inc. Data flow integrated circuit architecture
US6356950B1 (en) * 1999-01-11 2002-03-12 Novilit, Inc. Method for encoding and decoding data according to a protocol specification
US6763499B1 (en) * 1999-07-26 2004-07-13 Microsoft Corporation Methods and apparatus for parsing extensible markup language (XML) data streams
US6549916B1 (en) * 1999-08-05 2003-04-15 Oracle Corporation Event notification system tied to a file system
US6772413B2 (en) * 1999-12-21 2004-08-03 Datapower Technology, Inc. Method and apparatus of data exchange using runtime code generator and translator
US6985964B1 (en) * 1999-12-22 2006-01-10 Cisco Technology, Inc. Network processor system including a central processor and at least one peripheral processor
US6892237B1 (en) * 2000-03-28 2005-05-10 Cisco Technology, Inc. Method and apparatus for high-speed parsing of network messages
US6952666B1 (en) * 2000-07-20 2005-10-04 Microsoft Corporation Ranking parser for a natural language processing system
JP3690730B2 (ja) * 2000-10-24 2005-08-31 インターナショナル・ビジネス・マシーンズ・コーポレーション 構造回復システム、構文解析システム、変換システム、コンピュータ装置、構文解析方法、及び記憶媒体
US20020116527A1 (en) * 2000-12-21 2002-08-22 Jin-Ru Chen Lookup engine for network devices
US20020083331A1 (en) * 2000-12-21 2002-06-27 802 Systems, Inc. Methods and systems using PLD-based network communication protocols
US7379475B2 (en) * 2002-01-25 2008-05-27 Nvidia Corporation Communications processor
US8218555B2 (en) * 2001-04-24 2012-07-10 Nvidia Corporation Gigabit ethernet adapter
US6587750B2 (en) * 2001-09-25 2003-07-01 Intuitive Surgical, Inc. Removable infinite roll master grip handle and touch sensor for robotic surgery
US6920154B1 (en) * 2001-12-17 2005-07-19 Supergate Technology Usa, Inc. Architectures for a modularized data optimization engine and methods therefor
US7535913B2 (en) * 2002-03-06 2009-05-19 Nvidia Corporation Gigabit ethernet adapter supporting the iSCSI and IPSEC protocols
US7426634B2 (en) * 2003-04-22 2008-09-16 Intruguard Devices, Inc. Method and apparatus for rate based denial of service attack detection and prevention

Also Published As

Publication number Publication date
WO2004068271A3 (en) 2005-02-10
JP2006513667A (ja) 2006-04-20
WO2004068271A2 (en) 2004-08-12
AU2003290817A8 (en) 2004-08-23
AU2003290817A1 (en) 2004-08-23
US20040148415A1 (en) 2004-07-29
TW200419443A (en) 2004-10-01
US7130987B2 (en) 2006-10-31
EP1590744A4 (en) 2007-12-05
EP1590744A2 (en) 2005-11-02
US20070083858A1 (en) 2007-04-12
CA2513097A1 (en) 2004-08-12
TWI239475B (en) 2005-09-11
KR20050106591A (ko) 2005-11-10
JP4203023B2 (ja) 2008-12-24

Similar Documents

Publication Publication Date Title
CN1742272A (zh) 可重配置语义处理器
US8867395B2 (en) Accelerating data packet parsing
Bosshart et al. P4: Programming protocol-independent packet processors
US9916145B2 (en) Utilizing special purpose elements to implement a FSM
US11418632B2 (en) High speed flexible packet classification using network processors
US7529746B2 (en) Search circuit having individually selectable search engines
JP5265378B2 (ja) 高性能正規表現パターンマッチングのための方法および装置
US7539032B2 (en) Regular expression searching of packet contents using dedicated search circuits
US8069023B1 (en) Hardware support for instruction set emulation
WO2009015603A1 (fr) Système de compilation d'expressions régulières, système d'appariement, procédé de compilation et procédé d'appariement
CN113934660A (zh) 加速网络分组处理
Kong et al. Efficient signature matching with multiple alphabet compression tables
US20050281281A1 (en) Port input buffer architecture
US20140172766A1 (en) Scanning data streams in real-time against large pattern collections
Wang et al. A modular NFA architecture for regular expression matching
CN1165144C (zh) 在分布式网络环境中处理特殊数据帧的系统、方法和接口
US20070043871A1 (en) Debug non-terminal symbol for parser error handling
Duncan et al. A paradigm for processing network protocols in parallel
Nottingham GPF: A framework for general packet classification on GPU co-processors
US20050163107A1 (en) Packet processing pipeline
US11983122B2 (en) High-throughput regular expression processing with path priorities using an integrated circuit
US12014072B2 (en) High-throughput regular expression processing using an integrated circuit
Galos et al. Dynamic reconfiguration inwireless Sensor Networks
Shahbaz Enabling Programmable Infrastructure for Multi-tenant Data Centers
JP5950811B2 (ja) 条件テーブルからクエリエントリに一致する条件エントリを検索する検索装置、フロースイッチ装置、プログラム及び方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
AD01 Patent right deemed abandoned

Effective date of abandoning: 20060301

C20 Patent right or utility model deemed to be abandoned or is abandoned