KR101615915B1 - 어드밴스드 피처를 갖는 정규 표현식 패턴에 대한 비결정성 유한 오토마톤 (nfa) 생성 - Google Patents

어드밴스드 피처를 갖는 정규 표현식 패턴에 대한 비결정성 유한 오토마톤 (nfa) 생성 Download PDF

Info

Publication number
KR101615915B1
KR101615915B1 KR1020140114469A KR20140114469A KR101615915B1 KR 101615915 B1 KR101615915 B1 KR 101615915B1 KR 1020140114469 A KR1020140114469 A KR 1020140114469A KR 20140114469 A KR20140114469 A KR 20140114469A KR 101615915 B1 KR101615915 B1 KR 101615915B1
Authority
KR
South Korea
Prior art keywords
node
pattern
character
count
node type
Prior art date
Application number
KR1020140114469A
Other languages
English (en)
Other versions
KR20150026979A (ko
Inventor
라잔 고얄
사티야나라야나 락슈미파티 빌라
Original Assignee
캐비엄, 인코포레이티드
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 캐비엄, 인코포레이티드 filed Critical 캐비엄, 인코포레이티드
Publication of KR20150026979A publication Critical patent/KR20150026979A/ko
Application granted granted Critical
Publication of KR101615915B1 publication Critical patent/KR101615915B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • G06F5/12Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
    • G06F5/14Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations for overflow or underflow handling, e.g. full or empty flags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/567Computer malware detection or handling, e.g. anti-virus arrangements using dedicated hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/28Restricting access to network management systems or functions, e.g. using authorisation function to access network configuration
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1408Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/12Indexing scheme relating to groups G06F5/12 - G06F5/14
    • G06F2205/126Monitoring of intermediate fill level, i.e. with additional means for monitoring the fill level, e.g. half full flag, almost empty flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/28DMA
    • G06F2213/2806Space or buffer allocation for DMA transfers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

실시예에서, 비결정성 유한 오토마톤 (NFA; Non-Deterministic finite automata) 그래프로 패턴을 컴파일하는 방법은 복수의 엘리먼트들 및 복수의 노드 타입들에 대하여 패턴을 검사하는 단계를 포함한다. 노드 타입 각각은 엘리먼트와 대응할 수 있다. 이 패턴의 엘리먼트 각각은 적어도 0회 매칭될 수 있다. 이 방법은 NFA 그래프의 복수의 노드들을 생성하는 단계를 더 포함한다. 복수의 노드들 각각은 복수의 엘리먼트들 중 하나에 대해 매칭하도록 구성될 수 있다. 이 노드는 NFA 그래프 내에서의 다음 노드 어드레스, 카운트 값, 및/또는 이 엘리먼트에 대응하는 노드 타입을 표시할 수 있다. 이 노드는 또한 캐릭터, 캐릭터 클래스 또는 스트링을 나타내는 엘리먼트를 표시할 수 있다. 이 캐릭터는 또한 값 또는 레터일 수 있다.

Description

어드밴스드 피처를 갖는 정규 표현식 패턴에 대한 비결정성 유한 오토마톤 (NFA) 생성{GENERATING A NFA (Non-Deterministic finite automata) GRAPH FOR REGULAR EXPRESSION PATTERNS WITH ADVANCED FEATURES}
OSI (Open Systems Interconnection) 참조 모델은 송신 매체 상에서 통신하기 위해 사용된 7 네트워크 프로토콜 계층들 (L1 - L7) 을 규정한다. 상부층들 (L4 - L7) 은 엔드-투-엔드 (end-to-end) 통신을 나타내고 하부층들 (L1 - L3) 은 로컬 통신을 나타낸다.
네트워크 애플리케이션 인식 시스템 (Networking application aware system) 은 L3 내지 L7 네트워크 프로토콜 계층들, 예를 들어, HTTP (HyperText Transfer Protocol) 및 SMTP (Simple Mail Transfer Protocol) 와 같은 L7 네트워크 프로토콜 계층들, 및 TCP (Transmission Control Protocol) 와 같은 L4 네트워크 프로토콜 계층들의 범위 (range) 를 프로세스, 필터, 스위칭할 필요가 있다. 네트워크 프로토콜 계층들을 프로세싱하는 것에 더하여, 네트워크 애플리케이션 인식 시스템은 와이어 스피드 (wire-speed) 로 방화벽, VPN (Virtual Private Network), SSL (Secure Sockets Layer), IDS (Intrusion Detection System), IPSec (Internet Protocol Security), AV (Anti-Virus) 및 안티 스팸 기능성을 포함하는 L4 - L7 네트워크 프로토콜 계층들을 통한 액세스 및 콘텐트 기반 보안으로 이들 프로토콜들을 동시에 보호할 필요가 있다. 와이어 스피드는 데이터가 송신되고 수신되는 네트워크의 물리적 매체를 통한 데이터 전달 레이트이다.
네트워크 프로세서들은 고-쓰루풋 (high-throughput) L2 및 L3 네트워크 프로토콜 프로세싱, 즉, 와이어 스피드로 패킷들을 포워딩하기 위한 패킷 프로세싱을 수행하는데 이용가능하다. 전형적으로, 더 지능적인 프로세싱을 요구하는 L4 - L7 네트워크 프로토콜들을 프로세스하기 위해 범용 프로세서가 사용된다. 범용 프로세서는 계산 집중적인 태스크들을 수행할 수 있지만, 데이터가 와이어 스피드로 포워딩될 수 있도록 데이터를 프로세스하기에 충분한 성능을 제공하지는 않는다.
콘텐트 인식 네트워크는 "와이어 스피드"로 패킷들의 콘텐트 검사를 요구한다. 콘텐트는 보안 위반 또는 침해가 있는지 여부를 결정하기 위해 분석될 수 있다. 정규 표현식들 (regular expression) 의 형태의 많은 수의 패턴들 및 규칙들이 모든 보안 위반 또는 침해가 검출되었다는 것을 보장하도록 적용된다. 정규 표현식은 값들/캐릭터들/레터들의 스트링 (string) 으로 패턴을 기술하는 간단한 방법이다. 정규 표현식에 의해 매칭된 가장 간단한 패턴은 예를 들어, /c/ 또는 /cat/와 같은, 단일 값/캐릭터/레터 또는 값들/캐릭터들/레터들의 스트링이다. 정규 표현식은 또한 연산자들 및 특별한 의미를 갖는 메타-캐릭터들 (meta-characters) 을 포함한다.
메타-캐릭터들의 사용을 통해, “abc.*xyz” 와 같은 더 복잡한 탐색에 정규 표현식이 사용될 수 있다. 즉, “abc” 와 “xyz” 사이에 한정되지 않은 개수의 캐릭터들을 갖는 스트링 “abc” 및 후속하는 스트링 “xyz” 를 찾는 것이다. 또 다른 예는 정규 표현식 “abc..abc.*xyz” 이다; 즉, 스트링 “abc”, 이어서 2개의 문자, 그리고 이어서 스트링 “abc”, 이어서 한정되지 않은 개수의 캐릭터들 및 이어서 스트링 “xyz”를 찾는 것이다.
IDS (Intrusion Detection System) 애플리케이션은 네트워크를 통해 흐르는 모든 개별 패킷들의 콘텐트를 검사하고, 시스템으로 침입하거나 시스템을 위태롭게 하려는 시도를 표시할 수 있는 의심스러운 패턴들을 식별한다. 의심스러운 패턴의 일 예는 패킷 내에 특정 텍스트 스트링, 이후의 100개의 캐릭터 및 이후의 임의의 특정한 텍스트 스트링일 수 있다.
콘텐트 탐색은 전형적으로 정규 표현식을 프로세스하기 위해 DFA (Deterministic Finite Automata) 또는 NFA (Non-Deterministic Finite Automata) 를 사용하여 수행된다.
일 실시예에서, 비결정성 유한 오토마톤 (NFA; Non-Deterministic finite automata) 그래프로 패턴을 컴파일하는 방법은 복수의 엘리먼트들 및 복수의 노드 타입들에 대하여 패턴을 검사하는 (examining) 단계를 포함한다. 노드 타입 각각은 엘리먼트와 대응할 수 있다. 이 패턴의 엘리먼트 각각은 적어도 0회 매칭될 수 있다. 이 방법은 NFA 그래프의 복수의 노드들을 생성하는 단계를 더 포함한다. 복수의 노드들 각각은 복수의 엘리먼트들 중 하나에 대해 매칭하도록 구성될 수 있다. 이 노드는 NFA 그래프 내에서의 다음 노드 어드레스, 카운트 값, 및/또는 이 엘리먼트에 대응하는 노드 타입을 표시할 수 있다. 이 노드는 또한 캐릭터, 캐릭터 클래스 또는 스트링을 나타내는 엘리먼트를 표시할 수 있다. 이 캐릭터는 또한 값 또는 레터일 수 있다.
일 실시예에서, 노드 타입은 가변 카운트, 고정 카운트, 고정 카운트 및 가변 카운트, 캐릭터, 케이스 인센서티브 캐릭터 (case insensitive character), 캐릭터 클래스, 스트링, 케이스 인센서티브 스트링, 마크드 (marked) 또는 스플릿 (split) 중 적어도 하나이다.
일 실시예에서, 노드 타입에 대하여 패턴을 검사하는 단계는 가변 카운트 노드 타입, 고정 카운트 노드 타입, 고정 카운트 및 가변 카운트 노드 타입, 캐릭터 클래스, 및 스트링의 표시 (indication) 중 적어도 하나에 대하여 패턴을 탐색하는 단계를 포함할 수 있다.
일 실시예에서, 스트링 노드 타입은 복수의 값들, 레터들, 캐릭터들, 또는 다른 데이터 타입의 패턴을 나타낼 수 있다. 스트링 노드 타입에 대하여 패턴을 검사하는 단계는 패턴이 연속하는 값을 표시한다고 결정하는 단계를 포함할 수 있다. 스트링 노드 타입의 패턴을 검사하는 단계는 연속하는 값들이 노드 타입들을 개입시키지 않는다고 결정하는 단계를 더 포함할 수 있다. 각각의 값은 바이트, 레터, 및/또는 캐릭터일 수 있다.
일 실시예에서, 가변 카운트 노드 타입에 대하여 패턴을 검사하는 단계는 패턴이 엘리먼트에 대해 가변 회수 (variable number of times) 매칭하는 것을 표시한다고 결정하는 단계를 포함할 수 있다. 가변 카운트 노드 타입에 대하여 패턴을 검사하는 단계는 패턴이 엘리먼트에 대해 적어도 0회 매칭하는 것을 표시한다고 결정하는 단계를 더 포함할 수 있다.
일 실시예에서, 고정 카운트 노드 타입은 패턴이 엘리먼트에 대해 고정된 회수 매칭하는 것을 나타낸다. 고정 카운트 및 가변 카운트 노드 타입은 패턴이 엘리먼트에 대해 고정된 회수 매칭하고 이어서 가변 회수 매칭하는 것을 나타낼 수 있다. 가변 회수는 유한 회수 또는 무한 회수 일 수 있다. 고정 카운트 및 가변 카운트 노드 타입에 대하여 패턴을 검사하는 단계는 패턴이 엘리먼트에 대해 적어도 1회 그리고 최대 고정된 회수 또는 무한 회수 매칭하는 것을 표시한다고 결정하는 단계를 포함할 수 있다. 패턴은 패턴이 엘리먼트에 대해 무한 회수 매칭하는 것을 표시한다는 결정을 트리거하기 위해 무한함 (infinity) 을 나타내는 심볼을 포함한다.
일 실시예에서, 캐릭터 클래스의 노드 타입은 적어도 하나의 값의 불리언-or (Boolean-or) 연산을 나타낼 수 있다. 이 방법은 캐릭터 클래스 각각을 마스크 (mask) 로서 저장하는 단계를 더 포함할 수 있다. 상기 마스크에서 각각의 가능한 값/캐릭터/레터는 값/캐릭터/레터가 캐릭터 클래스의 일부일 때 셋 (set) 될 수 있고, 캐릭터가 캐릭터 클래스의 일부가 아닐 때 셋되지 않는다. 노드 각각은 고유 (unique) 캐릭터 클래스에 대응하는 캐릭터 클래스 인덱스를 포함할 수 있다. 캐릭터 클래스 번호 및 페이로드 세그먼트 (payload segment) 는 인덱스된 엔트리가 셋되면, 그래프 워크 엔진 (graph walk engine) 이 페이로드가 캐릭터 클래스에 매칭된다고 결정할 수 있도록 마스크에 대한 인덱스로서 채택될 수 있다.
일 실시예에서, 가변 카운트 노드 타입은 또한 노드가 그리디 노드 (greedy node), 레이지 노드 (lazy node), 포제시브 노드 (possessive node), 또는 올 매칭 노드 (all match node) 라는 것을 표시할 수 있다. 그리디 매칭 타입 및 포제시브 매칭 타입의 가변 카운트 노드 타입은 페이로드에서의 가장 긴 가능한 매칭에 매칭할 수 있다. 그러나, 포제시브 매칭 타입의 노드 타입은 페이로드의 끝에 도달시 백트랙 (backtrack) 하지 않지만, 그리디 매칭 타입의 노드 타입은 백트랙한다. 레이지 매칭 타입의 가변 카운트 타입을 갖는 노드는 페이로드에서의 가장 짧은 가능한 매칭에 대해 매칭할 수 있다. 올 노드 매칭 타입의 가변 카운트 타입을 갖는 노드는 페이로드에서 모든 매칭에 대해 매칭할 수 있다.
일 실시예에서, 노드 타입 및 엘리먼트에 대하여 패턴을 검사하는 단계는 패턴의 적어도 일부를 캐릭터 클래스 노드 타입 및 대응하는 엘리먼트로서 식별하는 단계를 포함한다. 노드 타입 및 엘리먼트에 대하여 패턴을 검사하는 단계는 패턴의 적어도 두 부분들을 캐릭터 클래스 노드 타입 및 대응하는 엘리먼트로서 식별하는 단계를 포함할 수 있다. 이 방법은 각각의 부분들에 대해 비트맵을 생성하는 단계를 더 포함할 수 있다. 비트맵의 비트 각각은 엘리먼트에 매칭하는 값을 나타낼 수 있다. 비트맵 각각은 캐릭터 클래스 인덱스와 연관될 수 있다. 이 방법은 적어도 두 부분들 중 제 1 부분 및 적어도 두 부분들 중 제 2 부분이 동일한 대응하는 엘리먼트를 가지면, 제 1 부분 및 제 2 부분을 동일한 비트맵과 연관시키는 단계를 더 포함할 수 있다. 패턴을 검사하는 단계는 복수의 패턴들을 검사하는 단계를 포함할 수 있다. 제 1 부분 및 제 2 부분은 개별 패턴들로 존재할 수 있다.
일 실시예에서, NFA (Non-Deterministic finite automata) 그래프로 패턴을 컴파일하기 위한 컴퓨터 시스템은 복수의 엘리먼트들 및 복수의 노드 타입들에 대하여 패턴을 검사하도록 구성된 패턴 결정 모듈을 포함할 수 있다. 노드 타입 각각은 엘리먼트에 대응할 수 있다. 패턴의 엘리먼트 각각은 적어도 0회 매칭될 수 있다. 이 시스템은 NFA 그래프의 복수의 노드들을 생성하도록 구성된 노드 생성 모듈을 더 포함할 수 있다. 복수의 노드들 각각은 복수의 엘리먼트들 중 하나와 매칭하도록 구성될 수 있다. 노드는 엘리먼트에 대응하는 노드 타입을 표시할 수 있다. 노드는 또한 NFA 그래프 내에서의 다음 노드 어드레스, 카운트 값, 및 캐릭터, 캐릭터 클래스 또는 스트링을 나타내는 엘리먼트를 표시할 수 있다. 캐릭터는 또한 값 또는 레터일 수 있다.
가변 카운트 노드는 엘리먼트에 대해 가변 회수, 범위 (예를 들어, 0에서 5회) 로 정의된 회수 매칭하는 노드이다. 가변 카운트 노드는 4개의 속성들: 레이지, 그리디, 포제시브, 또는 올-매칭 중 하나를 가질 수 있다. 가변 카운트 레이지 노드는 범위 내에서 엘리먼트들의 가장 짧은 가능한 매칭을 찾도록 구성된다. 가변 카운트 포제시브 노드는 페이로드의 끝에 도달하면 백트랙하지 않고 범위 내에서 엘리먼트들의 가장 긴 가능한 매칭을 찾도록 구성된다. 가변 카운트 그리디 노드는 페이로드의 끝에 도달하면 백트랙하면서 범위 내에서 엘리먼트들의 가장 긴 가능한 매칭을 찾도록 구성된다. 가변 카운트 올 매칭 노드는 페이로드에서 올 매칭을 리턴 (return) 하도록 구성된다.
고정 카운트 노드는 엘리먼트에 대해 고정된 회수 매칭한다. 고정 카운트 및 가변 카운트 패턴은 범위에 대해 매칭하도록 구성된 가변 카운트의 패턴의 표현일 수 있고, 이 범위는 0보다 큰 수로 시작한다. 예를 들어, 엘리먼트에 대해 10 - 20회 매칭하는 가변 카운트 패턴은 엘리먼트에 대한 고정 카운트 노드 매칭이 10회, 이어서 엘리먼트에 대한 가변 카운트 노드 매칭이 0 - 10회 이어지는 것으로 표현될 수 있다. 스트링 노드는 스트링 - 특정한 순서의 캐릭터들의 세트에 대해 매칭하는 노드이다.
고정-가변 카운트 노드는 엘리먼트에 대해 고정된 회수 매칭하고 이어서 동일한 엘리먼트에 대해 가변 회수의 매칭이 이어지는 노드이다. 예를 들어, 캐릭터 엘리먼트 “b” 에 대해 2 내지 5회 매칭하는 패턴 “b{2,5}” 를 고려한다. 이 패턴은 2개의 카운트 값들을 갖는 하나의 고정-가변 카운트 노드로 컴파일될 수 있다. 제 1 카운트 값은 엘리먼트에 매칭하기 위한 고정된 회수를 표시하고 제 2 카운트 값은 엘리먼트에 매칭하기 위한 가변 회수를 표시한다. 제 2 카운트 값은 예를 들어, 총 최대 (이 예에서, 엘리먼트에 매칭하기 위한 총 5회) 이거나 고정 매칭이 완료된 후 최대 (이 예에서, 총 3회, 또는 최대 가변 회수 5와 제 1 카운트 2 사이의 차) 일 수 있다. 고정-가변 노드의 프로세싱은 이하에 설명된 바와 같이, 가변 카운트 노드와 동일하다.
마크드 노드는 패턴의 매칭을 페이로드에서 찾은 것을 표시하는 노드이다. 스플릿 노드는 그래프에서 2 경로들 사이의 선택을 표시한다.
전술한 바는 유사한 참조 캐릭터들이 상이한 도면들에서 동일한 부분들을 참조하는 첨부 도면에 예시된 바와 같이, 이하의 본 발명의 예시적인 실시예들의 더 특정한 설명으로부터 명백해질 것이다. 도면들은 비율대로일 필요는 없고, 대신 본 발명의 실시예들을 예시할 때 강조될 수 있다.
도 1a 및 도 1b는 네트워크 서비스 프로세서를 포함하는 예시적인 보안 어플라이언스 (security appliance) 의 블록도이다.
도 2a는 도 1a 및 도 1b에 각각 도시된 네트워크 서비스 프로세서 또는 프로토콜 프로세서의 블록도이다.
도 2b는 엔진 환경의 예시적인 실시예, 예를 들어, 도 2a의 네트워크 서비스 프로세서를 도시하는 블록도이다.
도 3a는 NFA 그래프의 예시적인 실시예를 도시하는 도면이다.
도 3b는 본 발명에 의해 채택된 NFA 그래프의 예시적인 실시예의 도면이다.
도 3c는 다른 타입들의 카운팅 노드들이 채택될 수 있는 것을 도시하는 NFA 그래프의 예시적인 실시예를 예시하는 도면이다.
도 4a는 종래 시스템에 의해 채택된 NFA 그래프의 예시적인 실시예의 도면이다.
도 4b는 본 발명에 의해 채택된 NFA 그래프의 예시적인 실시예를 예시하는 도면이다.
도 4c는 5개의 개별 노드들을 사용하는 패턴 “USPTO” 의 종래의 그래프의 예시적인 실시예의 도면이다.
도 4d는 스트링 노드를 채택하는 그래프의 예시적인 실시예를 예시하는 도면이다.
도 5는 본 발명의 예시적인 실시예를 예시하는 NFA 그래프의 예시적인 실시예를 예시하는 도면이다.
도 6a는 패턴을 프로세싱하는 컴파일러의 예시적인 실시예를 예시하는 블록도이다.
도 6b는 도 6a의 패턴으로부터 결과적인 컴파일된 NFA 그래프의 도면이다.
도 7은 패턴을 컴파일하는 예시적인 실시예를 예시하는 블록도이다.
도 8은 패턴을 컴파일하는 예시적인 실시예를 예시하는 흐름도이다.
도 9는 노드를 프로세싱하는 그래프 워크 엔진의 예시적인 실시예를 예시하는 흐름도이다.
도 10은 NFA 그래프의 노드들을 프로세싱하는 그래프 워크 엔진의 예시적인 실시예를 예시하는 블록도이다.
도 11은 본 발명에 의해 채택된 NFA 그래프를 워킹 (walking) 하는 프로세스를 예시하는 흐름도이다.
도 12는 노드를 프로세싱하는 예시적인 실시예를 예시하는 흐름도이다.
도 13은 캐릭터 클래스 노드를 프로세싱하는 예시적인 실시예를 예시하는 흐름도이다.
도 14는 스트링 노드를 프로세싱하는 그래프 워크 엔진의 예시적인 실시예를 예시하는 흐름도이다.
도 15a 및 도 15b는 고정 카운트 노드를 프로세싱하는 예시적인 실시예를 예시하는 흐름도이다.
도 16은 가변 카운트 노드를 프로세싱하는 예시적인 실시예를 예시하는 흐름도이다.
도 17은 가변 카운트 레이지 노드를 프로세싱하는 예시적인 실시예를 예시하는 흐름도이다.
도 18은 가변 카운트 그리디 노드를 프로세싱하는 예시적인 실시예를 예시하는 흐름도이다.
도 19는 가변 카운트 포제시브 노드를 프로세싱하는 예시적인 실시예를 예시하는 흐름도이다.
도 20은 가변 카운트 올 매칭 노드를 프로세싱하는 예시적인 실시예를 예시하는 흐름도이다.
도 21은 캐릭터 클래스에서 채택된 비트맵/마스크의 예시적인 실시예를 예시하는 표이다.
도 22는 캐릭터 클래스 매칭 노드의 포맷을 예시하는 표이다.
도 23은 스트링 매칭 노드의 포맷을 예시하는 표이다.
도 24는 고정 카운트 매칭 노드의 포맷을 예시하는 표이다.
도 25는 가변 카운트 매칭 노드의 포맷을 예시하는 표이다.
도 26은 캐릭터 클래스 매칭 스택 엔트리의 포맷을 예시하는 표이다.
도 27은 스트링 매칭 스택 엔트리의 포맷을 예시하는 표이다.
도 28은 고정 카운트 매칭 스택 엔트리의 포맷을 예시하는 표이다.
도 29는 가변 카운트 매칭 스택 엔트리의 포맷을 예시하는 표이다.
본 발명의 예시적인 실시예들의 설명이 이어진다.
U.S. 공개 번호 제 2013/0133064 호로 공개된 Goyal 등의 U.S. 출원 번호 제 13/303,855 호 “Reverse NFA Generation and Processing” 및 U.S. 공개 번호 제 2012/0221497 호로 공개된 Goyal 등의 U.S. 출원 번호 제 13/168,395 호 “Regular Expression Processing Automaton” 은 NFA 및 표현식 매칭 개념들을 설명한다. 상기 출원들의 전체 교시사항들은 본원에 참조로서 인용되었다.
PCRE (Perl Compatible Regular Expression) 는 보안 및 네트워킹 애플리케이션에서 정규 표현식 신택스에 대해 사실상 표준이 되었다. 심도있는 패킷 검사를 요구하는 더 많은 애플리케이션들이 알려져 있고 또는 더 많은 위협들이 인터넷에서 일반적이 됨에 따라, 바이러스/어택 또는 애플리케이션들을 식별하기 위한 대응하는 시그니처들/패턴들이 또한 더 복잡해졌다. 시그니처 데이터베이스들은 간단한 스트링 패턴들을 갖는 것으로부터 와일드 (wild) 한 캐릭터/범위/캐릭터 클래스를 갖는 정규 표현식 (regex) 패턴들로 그리고 어드밴스된 PCRE 시그니처들로 진화되었다. 어드밴스드 PCRE 시그니처들은 구체적으로 시작 오프셋, 백 레퍼런스 (back reference), 캡처된 그룹들, 및 어써션 (assertion) 과 같은 피처들을 지칭한다. 본 발명의 실시예들은 와이어-스피드로 어드밴스드 PCRE 피처들을 지원한다 (support).
본 발명의 예시적인 실시예들을 상세히 설명하기 전에, 독자가 본 발명의 독창적인 특징들을 이해하는 것을 돕기 위해 이 실시예들이 구현될 수 있는 예시적인 보안 애플리케이션 및 DFA 및 NFA를 사용하는 전형적인 프로세싱이 바로 아래에서 설명된다.
도 1a는 네트워크 서비스 프로세서 (100) 를 포함하는 예시적인 보안 어플라이언스 (102) 의 블록도이다. 보안 어플라이언스 (102) 는 한 이더넷 포트 (Gig E) 에서 수신된 패킷들을 다른 이더넷 포트 (Gig E) 로 스위칭할 수 있고 이 패킷들을 포워딩하기 전에 수신된 패킷들에 복수의 보안 기능들을 수행할 수 있는 독립 시스템일 수 있다. 예를 들어, 보안 어플라이언스 (102) 는 LAN (Local Area Network) 으로 프로세스된 패킷들을 포워딩하기 전에 WAN (Wide Area Network) 상에서 수신된 패킷에 보안 프로세싱을 수행하도록 사용될 수 있다.
네트워크 서비스 프로세서 (100) 는 수신된 패킷에 캡슐화되어 있는 (encapsulated) OSI (Open System Interconnection) 네트워크 L2 - L7 계층 프로토콜들을 프로세스한다. 당업자에게 공지된 바와 같이, OSI (Open System Interconnection) 참조 모델은 7개의 네트워크 프로토콜 계층들 (L1 - L7) 을 정의한다. 물리 계층 (physical layer) (L1) 은 디바이스를 송신 매체에 전기 및 물리적으로 접속하는 실제 인터페이스를 나타낸다. 데이터 링크 계층 (data link layer) (L2) 은 데이터 프레이밍 (data framing) 을 수행한다. 네트워크 계층 (network layer) (L3) 은 데이터를 패킷으로 포맷한다. 전송 계층 (transport layer) (L4) 은 엔드-투-엔드 전송을 다룬다 (handle). 세션 계층 (session layer) (L5) 은 디바이스들 간의 통신, 예를 들어, 통신이 반이중 (half-duplex) 또는 천이중 (full-duplex) 인지 여부를 관리한다. 프리젠테이션 계층 (presentation layer) (L6) 은 데이터 포맷팅 (formatting) 및 프리젠테이션, 예를 들어, 신택스, 제어 코드, 특별한 그래픽들 및 캐릭터 세트들을 관리한다. 애플리케이션 계층 (application layer) (L7) 은 사용자들 간 통신, 예를 들어, 파일 전송 및 전자 메일을 허용한다.
네트워크 서비스 프로세서 (100) 는 상부 레벨 네트워크 프로토콜들, 예를 들어 L4 - L7에 대한 작업 (work) (패킷 프로세싱 동작) 을 스케줄링하고 큐 (queue) 할 수 있고 수신된 패킷들에서의 상부 레벨 네트워크 프로토콜들의 프로세싱이 와이어-스피드로 패킷들을 포워드하도록 수행되게 할 수 있다. 와이어-스피드로 패킷들을 포워드하도록 프로토콜들을 프로세싱함으로써, 네트워크 서비스 프로세서는 네트워크 데이터 전송 레이트를 둔화시키지 않는다.
네트워크 서비스 프로세서 (100) 는 오프-칩 (off-chip) PHY들 (104a, 104b) 에 표준 RGMII (Reduced Gigabit Media Independent Interface) 접속하는 복수의 이더넷 매체 액세스 제어 인터페이스들을 포함한다.
네트워크 서비스 프로세서 (100) 는 또한 물리적 인터페이스들 PHY (104a, 104b) 를 통해 이더넷 포트 (Gig E) 로부터 패킷들을 수신하고, 수신된 패킷들에 L2 - L7 네트워크 프로토콜 프로세싱을 수행하고 물리적 인터페이스들 (104a, 104b) 을 통해 네트워크의 또 다른 홉 (hop) 또는 최종 목적지로 또는 PCI/PCI-X (Peripheral Component Interconnect/Peripheral Component Interconnect Extended 인터페이스) 버스 (106) 를 통해 호스트 프로세서에 의한 추가 프로세싱을 위해 프로세싱된 패킷들을 포워딩할 수 있다. 네트워크 프로토콜 프로세싱은 방화벽, 애플리케이션 방화벽, IPSec (IP Security) 및/또는 SSL (Secure Sockets Layer) 을 포함하는 VPN (Virtual Private Network), IDS (Intrusion Detection System) 및 AV (Anti-virus) 와 같은 네트워크 보안 프로토콜들의 프로세싱을 포함할 수 있다.
네트워크 서비스 프로세서 (100) 는 또한 DRAM (Dynamic Random Access Memory) 및 DDR SDRAM (double-data-rate synchronous dynamic random access memory) 과 같은 외부 로컬 메모리 (108) 를 제어하기 위한 메모리 제어기를 포함할 수 있다. 일부 실시예들에서, 외부 로컬 메모리 (118) 는 낮은 레이턴시 (low latency) 메모리이다.
외부 로컬 메모리 (118) 는 IDS (Intrusion Detection System) 또는 AV (Anti-virus) 애플리케이션을 위해 요구될 수 있는 스트링 매칭을 포함하는, 고속 룩업 (lookup) 을 허용하는 인터넷 서비스들 및 보안 애플리케이션들 또는 스트링 매칭을 요구하는 다른 애플리케이션들을 위해 사용될 수 있다.
네트워크 서비스 프로세서 (100) 는 본 발명의 실시예에 따라 패킷 프로세싱을 가속화하기 위해 (accelerate) 패턴 탐색, 정규 표현식 프로세싱, 콘텐트 비준 (content validation), 변환 (transformation) 및 보안을 수행할 수 있다. 정규 표현식 프로세싱 및 패턴 탐색은 IDS 및 AV 애플리케이션 및 스트링 매칭을 요구하는 다른 애플리케이션들을 위해 스트링 매칭을 수행하도록 사용될 수 있다.
네트워크 서비스 프로세서 (100) 의 DRAM 제어기는 네트워크 서비스 프로세서 (100) 에 결합된 외부 DRAM (Dynamic Random Access Memory) (108) 에 대한 액세스를 제어할 수 있다. DRAM (108) 은 네트워크 서비스 프로세서 (100) 에 의한 프로세싱을 위해 PHYs 인터페이스들 (104a, 104b) 또는 PCI/PCI-X 인터페이스 (106) 로부터 수신된 데이터 패킷들을 저장할 수 있다. 일 실시예에서, DRAM 인터페이스는 800㎒까지 동작하는 64 또는 128 비트 DDR II SDRAM (Double Data Rate II Synchronous Dynamic Random Access Memory) 을 지원한다. DRAM은 또한 DFA 및 NFA 그래프 표현 탐색에서 룩업 및 패턴 매칭을 위해 요구된 규칙 데이터를 저장할 수 있다.
부트 버스 (110) 는 플래시 메모리 (112) 에 저장될 수 있는 필수 부트 코드가 제공될 수 있고 네트워크 서비스 프로세서 (100) 가 파워-온 (power-on) 되거나 리셋될 때 네트워크 서비스 프로세서 (100) 에 의해 실행될 수 있다. 애플리케이션 코드는 또한 컴팩트 플래시 표준을 구현하는 디바이스 (114) 로부터 부트 버스 (110) 를 통해 또는 디스크일 수 있고 PCI/PCI-X 버스 (106) 를 통해 부착될 수 있는 또 다른 하이-볼륨 디바이스 (high-volume device) 로부터 네트워크 서비스 프로세서 (100) 로 로딩될 수 있다.
다양한 I/O 인터페이스 (116) 는 GPIO (General Purpose Input/Output), Flash, IEEE 802 2-와이어 관리 인터페이스 (MDIO), UART (Universal Asynchronous Receiver-Transmitter) 및 직렬 인터페이스들과 같은 보조 인터페이스들을 제안한다.
예시적인 보안 어플라이언스 (102) 가 프로토콜 프로세서 (101) 를 대안적으로 포함할 수 있다는 것이 인식되어야 한다 (도 1b). 프로토콜 프로세서 (101) 는 PCI/PCI-X 접속부 (106) 를 통해 프로세서 (101) 에 결합된 콘텐트 프로세싱 가속기 (107) 및 가속기 (107) 에 결합된 외부 DRAM (111) 에 부가하여 네트워크 서비스 프로세서 (100) 의 엘리먼트를 포함할 수 있다. 가속기 (107) 및 DRAM (111) 은 콘텐트 탐색 애플리케이션에 채택될 수 있어서, 모든 콘텐트 참작들이 프로세서 (101) 외부에서 이루어진다.
도 2a는 도 1a 및 도 1b에 각각 도시된 네트워크 서비스 프로세서 (100), 또는 프로토콜 프로세서 (101) 의 블록도이다. 네트워크 서비스 프로세서 (100), 및/또는 프로토콜 프로세서 (101) 는 복수의 프로세서들 (코어들) (202) 을 사용하여 고 애플리케이션 성능을 산출한다 (deliver). 네트워크 애플리케이션들은 데이터 평면 및 제어 평면 동작들로 카테고리화될 수 있다. 코어들 (202) 각각은 데이터 플레인 또는 제어 플레인 동작들을 수행하도록 전용될 수 있다. 데이터 평면 동작은 패킷들을 포워딩하기 위한 패킷 동작들을 포함할 수 있다. 제어 평면 동작은 IPSec (Internet Protocol Security), TCP (Transmission Control Protocol) 및 SSL (Secure Sockets Layer) 과 같은 복잡한 더 높은 레벨 프로토콜들의 부분들의 프로세싱을 포함할 수 있다. 데이터 평면 동작은 이들 복잡한 더 높은 레벨 프로토콜들의 다른 부분들의 프로세싱을 포함할 수 있다.
패킷은 SPI-4.2 또는 RGM II 인터페이스를 통해 인터페이스 유닛들 (210a, 210b) 중 임의의 하나에 의해 수신될 수 있다. 패킷은 또한 PCI 인터페이스 (224) 에 의해 수신될 수 있다. 인터페이스 유닛 (210a, 210b) 은 수신된 패킷에 포함된 L2 네트워크 프로토콜 헤더에서 다양한 필드들을 체크함으로써 수신된 패킷의 L2 네트워크 프로토콜 프리-프로세싱 (pre-processing) 을 다룬다. 인터페이스 유닛 (210a, 210b) 이 L2 네트워크 프로토콜 프로세싱을 수행한 후, 패킷은 패킷 입력 유닛 (214)으로 포워딩된다. 패킷 입력 유닛 (214) 은 수신된 패킷에 포함된 L3 및 L4 네트워크 프로토콜 헤더의 프리-프로세싱을 수행할 수 있다. 프리-프로세싱은 TCP (Transmission Control Protocol) / UDP (User Datagram Protocol) (L3 네트워크 프로토콜들) 에 대한 체크섬 체크를 포함한다.
패킷 입력 유닛 (214) 은 더 높은 레벨 네트워크 프로토콜들의 추가 프로세싱을 위해 적어도 하나의 프로세서 (202) 에서 실행된 더 높은 계층 소프트웨어에 편리한 포맷으로 레벨 2 캐시 (212) 또는 DRAM (108) 의 버퍼들에 패킷 데이터를 기록할 수 있다. 패킷 입력 유닛 (214) 은 또한 프로그램가능한 버퍼 사이즈를 지원할 수 있고 큰 패킷 입력 사이즈를 지원하기 위해 다수의 버퍼들을 가로질러 패킷 데이터를 분산할 수 있다.
POW (Packet order/work) 모듈 (유닛) (228) 은 프로세서 (202) 에 대해 작업 (패킷 프로세싱 동작들) 을 큐 및 스케줄할 수 있다. 작업은 작업 큐 상의 엔트리에 의해 식별된 프로세서에 의해 수행되는 임의의 태스크 (task) 로 정의된다. 태스크는 패킷 프로세싱 동작들, 예를 들어, 작업 큐 상의 작업 큐 엔트리에 의해 식별된 수신된 패킷에 대해 수행되는 L4 - L7 계층들에 대한 패킷 프로세싱 동작들을 포함할 수 있다. 각각의 별도의 패킷 프로세싱 동작은 메모리 (L2 캐시 메모리 (212) 또는 DRAM (108)) 에 저장된 수신된 패킷에 대해 프로세서에 의해 수행되는 작업의 일부이다. 예를 들어, 작업은 수신된 방화벽/VPN (Virtual Private Network) 패킷의 프로세싱일 수 있다. 방화벽/VPN 패킷의 프로세싱은 다음의 별도의 패킷 프로세싱 동작들 (작업의 일부) : (1) 수신된 패킷에서 프레그먼트들 (fragments) 을 리오더 (reorder) 하기 위한 디프레그멘테이션 (defragmentation); (2) IPSec 암호 해독 (decryption); (3) IPSec 암호화 (encryption); 및 (4) NAT (Network Address Translation) 또는 TCP 시퀀스 번호 조정을 패킷을 포워딩하기 전에, 포함할 수 있다.
네트워크 서비스 프로세서 (100), 및/또는 프로토콜 프로세서 (101) 는 또한 메모리 서브시스템을 포함할 수 있다. 메모리 서브시스템은 각각의 프로세서 (202) 의 레벨 1 데이터 캐시 메모리 (204), 각각의 프로세서 (202) 의 인스트럭션 캐시, 레벨 2 캐시 메모리 (212), 외부 DRAM 메모리를 위한 DRAM 제어기 (216) 및 외부 로컬 메모리 (118) (예를 들어, DDR SDRAM) 로의 인터페이스 (230) 를 포함할 수 있다. 메모리 서브시스템은 멀티프로세서 지원를 위해 설계되고 메모리 집약적 콘텐트 네트워킹 애플리케이션들에 의해 요구된 높은 스루풋 및 낮은 레이턴시 양자를 산출하도록 튜닝된다 (tuned). 레벨 2 캐시 메모리 (212) 및 외부 DRAM 메모리 (108) (도 1a 및 도 1b의) 는 모든 프로세서들 (202) 및 I/O 코-프로세서 디바이스들 (co-processor devices) 에 의해 공유될 수 있다.
네트워크 서비스 프로세서 (100), 및/또는 프로토콜 프로세서 (101) 는 또한 네트워크 서비스 프로세서가 높은 스루풋을 달성하도록 프로세서들 (202) 을 오프로드 (offload) 하는 애플리케이션 특정 코-프로세서들을 포함할 수 있다. 애플리케이션 특정 코-프로세서는 이하에 더 상세히 설명되는 NFA (Non-Deterministic finite automata) 를 수행하는 코-프로세서 (244) 및 압축 (compression) 및 해제 (decompression) 를 수행하는 압축/해제 코-프로세서 (208) 를 포함한다.
프로세서 (202) 각각은 인스트럭션 캐시 (206), 레벨 1 데이터 캐시 (204), 낮은 레이턴시 메모리 버스 (230) 를 통해 로컬 메모리에 직접 액세스를 갖는 크립토그래피 알고리즘 (cryptography algorithms) 을 위한 빌트-인 하드웨어 가속부 (crypto acceleration module) (200) 를 갖는 듀얼-이슈 (dual-issue), 슈퍼스칼라 프로세서 (superscalar processor) 일 수 있다. 로컬 메모리 (118) 로의 낮은 레이턴시 직접 액세스 경로는 L2 캐시 메모리 (212) 를 바이패스하고 (bypass) 프로세서들 (코어들) (202) 및 NFA 코-프로세서 (244) 양자로부터 직접 액세스될 수 있다.
정규 표현식 프로세싱 및 패턴 탐색을 위해 사용된 콘텐트 탐색 매크로 (macro) 의 동작을 더 상세히 기술하기 전에, 네트워크 서비스 프로세서 (100) 의 다른 모듈들이 기술될 것이다. 예에서, 패킷이 프로세서들 (202) 에 의해 프로세싱된 후, 패킷 출력 유닛 (PKO) (218) 은 L2 캐시 또는 DRAM으로부터 패킷 데이터를 판독하고, L4 네트워크 프로토콜 포스트-프로세싱 (network protocol post-processing) (예를 들어, TCP/UDP 체크섬 생성) 을 수행하고, 인터페이스 유닛 (210a, 210b) 을 통해 패킷을 포워딩하고 패킷을 저장하기 위해 사용된 L2 캐시 (212) 또는 DRAM (108) 위치들을 비운다 (free).
각각의 프로세서 (202) 는 코히어런트 (coherent) 메모리 버스 (234) 에 의해 L2 캐시에 결합된다. 일 실시예에서 384 비트 폭의 코히어런트 메모리 버스 (234) 는 모든 메모리 및 프로세서들 (202), I/O 브리지 (IOB) (232) 와 레벨 2 캐시 및 제어기 (212) 사이의 I/O 트랜잭션 (transaction) 을 위한 통신 채널이다.
FPA (Free Pool Allocator) (236) 는 레벨 2 캐시 메모리 (212) 및 DRAM (108) 의 빈 메모리 (free memory) 로의 포인터들의 풀 (pool) 을 유지한다. 대역폭 효율적인 (LIFO (Last In First Out)) 스택이 각각의 빈 포인터 풀에 대해 구현된다. 포인터들의 풀이 FPA (Free Pool Allocator) (236) 에 들어가기에 (fit) 너무 크면, FPA (Free Pool Allocator) (236) 는 부가적인 포인터들을 저장하기 위해 포인터들의 풀의 빈 메모리를 사용하여 레벨 2 캐시 (212) 또는 DRAM (108) 에 트리/리스트 구조를 구축한다 (build).
IOB (I/O Bridge) (232) 는 전체 프로토콜 및 아비트레이션 (arbitration) 을 관리하고 코히어런트 I/O 파티셔닝 (partitioning) 을 제공한다. IOB (232) 는 브리지 (238) 및 FAU (240) 를 포함한다. 브리지 (238) 는 I/O 버스, 코히어런트 메모리 버스, 패킷 입력 유닛 (214) 및 패킷 출력 유닛 (218) 사이에서 전달될 정보를 저장하기 위한 버퍼 큐들을 포함한다.
FAU (Fetch and Add Unit) (240) 는 판독, 기록, 애토믹 (atomic) 페치 및 추가, 및 애토믹 업데이트 동작들을 지원하는 2KB 레지스터 파일이다. FAU (Fetch and Add Unit) (240) 는 프로세서들 (202) 및 패킷 출력 유닛 (218) 양자로부터 액세스될 수 있다. 레지스터들을 많이 사용된 값들을 저장하여 이들 값들에 액세스하려는 트래픽을 저감한다. FAU (240) 의 레지스터들은 패킷 출력 유닛 (218) 을 통해 프로세스된 패킷들을 포워딩하기 위해 사용된 출력 큐들의 길이를 유지하기 위해 사용된다.
PCI 인터페이스 제어기 (224) 는 프로세서들 (202) 이 네트워크 서비스 프로세서의 로컬 메모리와 원격 (PCI) 메모리 사이에서 양방향으로 비동기적으로 데이터를 이동시킬 수 있게 하는 DMA 엔진을 갖는다.
전형적으로, 콘텐트 인식 애플리케이션 프로세싱은 수신된 패킷의 콘텐트에서 패턴을 인식하기 위해 DFA (deterministic finite automata) 또는 NFA (Non-Deterministic finite automata) 를 사용한다. DFA 및 NFA 양자는 유한 상태 머신 (finite state machine), 즉, 상태들의 세트, 시작-상태, 입력 알파벳 (모든 가능한 심볼들의 세트) 및 천이 함수를 각각 포함하는 계산 모델들이다. 계산은 시작-상태에서 시작하고 천이 함수에 따라 새로운 상태들로 변경한다.
패턴은 일반적으로 애토믹 엘리먼트들, 예를 들어, A - Z, 0 - 9와 같은 보통의 텍스트 캐릭터들 및 *, ^ 및 |와 같은 메타-캐릭터들 또는 다른 값들을 포함하는 정규 표현식을 사용하여 표현된다. 정규 표현식의 애토믹 엘리먼트들은 매칭될 심볼들 (단일 캐릭터들) 이다. 이들은 하나 이상의 엘리먼트의 매칭을 허용하는 메타-캐릭터들 (+), 얼터네이션 (alternation) (|), 클레이니-스타 (Kleene-star) (*)로 결합되고, 이는 0 이상의 엘리먼트를 매칭한다. 일 실시예에서, 메타-캐릭터들은 PCRE 패턴 표준에 의해 정의될 수 있다. 연결 (concatenation) 를 위한 메타-캐릭터는 단일 캐릭터로부터 다수의 캐릭터 매칭 패턴 (또는 서브 스트링) 을 생성하기 위해 사용되는 반면 얼터네이션 (|) 을 위한 메타-캐릭터는 임의의 둘 이상의 서브 스트링들을 매칭할 수 있는 정규 표현식을 생성하기 위해 사용된다. 메타-캐릭터 클리니-스타 (*) 는 패턴이 선행하는 캐릭터 또는 캐릭터 클래스와 매칭하는 페이로드 세그먼트들의 선행하는 캐릭터 또는 캐릭터 클래스 또는 스트링의 발생을 포함하지 않고, 임의의 회수 매칭하도록 한다. 상이한 연산자들 및 단일 캐릭터들을 결합하는 것은 복잡한 표현들이 구성되게 한다. 예를 들어, 표현 (th(is|at)*) 이 다음의 캐릭터 스트링들: th, this, that, thisis, thisat, thatis, 또는 thatat과 매칭할 것이다. 메타-캐릭터 (?) 는 메타-캐릭터 (?) 가 엘리먼트를 뒤따를 때 {0,1}의 등가물일 수 있다. 예를 들어, 패턴 “zzza?” 는 페이로드 “zzz” 와 매칭하거나 “zzza” 와 매칭할 수 있다.
캐릭터 클래스 구성 (construct) […] 은 매칭할 캐릭터들의 리스트가 리스트되게 하는데, 예를 들어, gr[ea]y 는 grey 및 gray 양자를 탐색한다. 대시 (dash) 는 캐릭터들의 범위, 예를 들어, [A-Z] 또는 [0-9] 를 표시한다. 캐릭터 클래스는 또한 다수의 범위들을 가질 수 있으며, 예를 들어, [a-zA-Z0-9] 는 모든 레터들, 소문자와 대문자, 및 모든 숫자들을 포함할 것이다. 메타-캐릭터 “.” 는 뉴 라인 캐릭터를 제외하고 임의의 하나의 캐릭터를 매칭한다. 또한, 메타-캐릭터 “^” 는 이어지는 것을 제외하고 모든 캐릭터를 표시한다. 예를 들어, “[^\\n]” 는 “뉴 라인 (new line)” 캐릭터 (“\n” 는 뉴 라인을 표시한다) 를 제외하고 모든 캐릭터를 표시한다. 또 다른 예는 “[^0-9]” 이고, 이는 숫자 “0” 내지 “9” 를 제외하고 임의의 캐릭터를 표시한다.
전형적으로, ASCII 캐릭터들은 7-비트 및 8-비트 실시예들에서 각각 0 - 128 또는 0 - 256의 이진수로서 저장된다. 예를 들어, 뉴 라인 (또는 라인 피드 (line feed)) 캐릭터는 ASCII 하에서 숫자 12로 나타낼 수 있다. 그 후 뉴 라인은 7-비트 및 8-비트 실시예들에서 각각 “000 1010” 또는 “0000 1010” 과 같이 이진수로 나타낼 수 있다. 그러나, 이는 캐릭터 클래스들을 저장하기 위해서는 최적이 아니다.
DFA 또는 NFA 상태 머신으로의 입력은 전형적으로 (8-비트) 바이트의 스트링, 즉, 알파벳은 단일 바이트 (하나의 캐릭터 또는 심볼) 이다. 입력 스트림의 바이트 각각은 한 상태에서 또 다른 상태로의 천이를 야기한다.
DFA 또는 NFA 상태 머신의 상태들 및 천이 함수들은 그래프로 나타낼 수 있고, 그래프의 노드 각각은 상태를 나타내고 그래프의 호 (arc) 는 상태 천이를 나타낸다. 상태 머신의 현재 상태는 특정한 그래프 노드를 선택하는 노드 식별자로 나타낸다.
캐릭터들의 입력 스트림 내의 정규 표현식을 프로세스하고 정규 표현식에 의해 기술된 패턴 또는 패턴들을 찾기 위해 DFA를 사용하는 것은 다음을 특징으로 한다:
1) 결정성 런 타임 (run time) 성능: DFA의 다음 상태는 입력 캐릭터 (또는 심볼) 및 DFA의 현재 상태로부터 결정될 수 있다. 즉, DFA 상태 당 단지 한번의 상태 천이가 있다. 이와 같이, DFA의 런 타임 성능는 결정성이라고 하고 거동 (behavior) 은 입력으로부터 완전히 예측될 수 있다.
2) 다수의 패킷들에 걸친 매칭을 지원하기 위해 플로우 당 더 작은 콘텍스트 (예를 들어, 상태 또는 노드 포인터) 가 요구된다: 플로우를 형성하는 몇 개의 패킷들에 걸쳐 있는 입력 내의 패턴 탐색시 탐색은 하나의 패킷에서 중단될 수 있고 그 후 또 다른 패킷에서 재시작할 수 있다. 일반적으로, 탐색을 재시작하는 상태를 결정하는 것은 탐색이 중단될 때까지 거쳐진 (traversed) 모든 상태들을 추적하고, 기억하고, 그렇지 않으면 (예를 들어, 상태 포인터들 또는 스택 엔트리로서) 저장할 것을 요구한다. 그러나, DFA에서, 탐색이 중단된 상태만이 탐색을 재시작하기 위해 기억될 필요가 있다. 이와 같이, DFA는 다수의 입력 패킷들에 걸친 패턴 매칭을 지원하기 위해 예를 들어, 상태 또는 노드 포인터를 저장하기 위해 몇개의 바이트들 정도의, 플로우 당 더 작은 콘텍스트를 요구하는 것을 특징으로 한다.
3) 그래프에서 노드들의 수 (또는 그래프 사이즈) 는 패턴의 사이즈와 함께 지수적으로 성장할 수 있다.
그에 반해, 정규 표현식을 프로세스하고 캐릭터들의 입력 스트림에서 정규 표현식에 의해 기술된 패턴(들)을 찾기 위해 NFA를 사용하는 것은 다음을 특징으로 한다:
1) 비결정성 런 타임 성능: 입력 캐릭터 (또는 심볼) 및 NFA의 현재 상태가 주어지면, 천이할 NFA의 하나 이상의 다음 상태들이 있을 수 있다. 즉, NFA의 다음 상태는 입력 및 NFA의 현재 상태로부터 고유하게 결정될 수 없다. 이와 같이, NFA의 런 타임 성능는 비결정성이라고 하고 행동은 입력으로부터 완전히 예측될 수 없다.
2) 패킷들에 걸친 매칭을 지원하기 위해 플로우 당 더 큰 콘텍스트 (예를 들어, 상태 또는 노드 포인터) 가 요구된다: 이전에 기술된 바와 같이, 하나의 패킷에서 탐색을 중단한 후 또 다른 패킷에서 재시작하는 다수의 입력 패킷들에 걸친 패턴 매칭은 탐색이 중단될 때까지 횡단된 모든 상태들을 추적할 것을 요구한다. NFA에서, 더 많은 입력이 매칭됨에 따라, 더 큰 수의 현재 상태들이 추적될 필요가 있다. 이와 같이, NFA는 DFA와 비교할 때 다수의 입력 패킷들에 걸친 패턴 매칭을 지원하기 위해 플로우 당 더 큰 콘텍스트를 요구하는 것을 특징으로 한다고 할 수 있다.
3) 그래프에서 노드들의 수 (또는 그래프 사이즈) 는 전형적으로 패턴의 사이즈와 함께 선형으로 성장한다.
도 2b는 엔진 (252), 예를 들어, 도 2a의 네트워크 서비스 프로세서 (예를 들어, NFA 엔진) 의 환경의 예시적인 실시예를 예시하는 블록도 (250)이다. 엔진 (252) 은 인스트럭션 큐 (254) 로부터 하나 이상의 인스트럭션 (253) 을 판독하도록 동작가능하게 결합된다. 인스트럭션 큐 (254) 는 엔진 (252) 에 의해 프로세스되도록 호스트에 의해 전송된 인스트럭션들을 저장한다. 엔진 (252) 은 인스트럭션 (253) 에 저장된 포인터들을 판독함으로써 인스트럭션 (253) 을 프로세스한다. 인스트럭션 (253) 의 포인터들은 입력 버퍼 (258) (스택의 LIFO 속성들을 갖지 않더라도 입력 스택이라고 지칭될 수 있는) 의 엔트리로의 포인터, 페이로드 (262) 로의 포인터, 매칭 결과 버퍼 (266) 로의 포인터, 세이브 버퍼 (save buffer) (264) (스택의 LIFO 속성들을 갖지 않더라도 세이브 스택이라고 참조될 수 있음) 로의 포인터 및 런 스택 (run stack) (260) 로의 포인터를 포함한다.
엔진 (252) 은 포인터로부터 입력 버퍼 (258) 로 엔트리/엔트리들 (예를 들어, S1, S2, 및/또는 S3) 을 로딩한다 (load). 그 후 엔진은 입력 버퍼 (258) 로부터 런 스택 (260) 으로 엔트리/엔트리들을 푸싱한다 (push). 본 예에서, 엔진은 엔트리들 S1, S2, 및 S3을 런 스택 (260) 으로 푸싱할 수 있다. 그 후 엔진 (252) 은 런 스택 상의 제 1 엔트리 (예를 들어, S1) 를 팝핑 (pop) 하고 제 1 엔트리를 프로세스하기 시작한다. 일 실시예에서, 런 스택은 LIFO (last-in-first-out) 스택이다. 입력 버퍼 (258) 로부터의 엔트리 (예를 들어, S1, S2, 및 S3) 각각은 페이로드 오프셋 및 그래프 (257) 로의 포인터를 포함한다. 그 후 엔진은 그래프 메모리 (256) 로부터 그래프 (257) 를 로딩하고 페이로드 (262) 의 오프셋에 대응하는 페이로드 세그먼트를 사용하여 그래프의 프로세싱을 시작할 수 있다.
엔진 (252) 이 페이로드 (262) 로부터의 페이로드 세그먼트들을 사용하여 그래프 (257) 를 프로세스함에 따라, 엔진 (252) 은 엔트리들을 런 스택 (260) 으로 푸싱 및 팝핑할 수 있다. 엔진 (252) 이 자신의 위치를 그래프에 세이브할 필요가 있을 때 엔진 (252) 은 엔트리들을 런 스택 (260) 으로 푸싱한다. 그래프가 다수의 프로세싱 경로들을 나타낼 때 엔진 (252) 은 자신의 위치를 그래프에 세이브할 필요가 있다. 엔진 (252) 이 이들 경로들 중 하나를 횡단할 수 있고, 미스매칭의 경우, 다른 경로(들)를 횡단하기 위해 런 스택 (260) 에 표시된 노드 및 페이로드 오프셋으로 엔트리를 리턴할 수 있다. 그래프 (257) 에서 스플릿 노드 또는 가변 카운트 노드는 그래프에서 이러한 다수의 경로들을 나타낼 수 있다.
페이로드 (262) 및 그래프 (257) 의 프로세싱에서, 페이로드 (262) 는 프로세싱이 완료되기 전에 데이터를 런 아웃 (run out) 할 수 있다. 페이로드 (262) 는 패킷 또는 데이터의 플로우 (또는 페이로드 플로우) 로부터의 데이터의 다른 그룹일 수 있다. 플로우는 다수의 페이로드들 (262) (예를 들어, 패킷들) 을 가질 수 있고, 각각의 페이로드 (262) 는 플로우에서 순서를 갖는다. 페이로드 (262) 의 세그먼트들 각각은 예를 들어, 특정한 단위 크기 (granularity) 를 갖는 부분이지만, 1 바이트로 제한되지 않는다. 일 실시예에서, 그래뉼러티는 조정가능할 수 있고 또는 선택가능할 수 있다. 이러한 예는 페이로드 (262) 의 페이로드 오프셋이 패킷의 끝을 향해 시작할 때, 및 패킷이 끝나기 전에 부분적인 매칭이 발견될 때뿐이다. 잡 (job) 을 계속하기 위해, 엔진 (252) 은 세이브 버퍼 (264) 에 현재 스택 엔트리를 세이브한다. 따라서, 세이브 버퍼 (264) 는 페이로드가 런 아웃되었을 때 런 스택 (260) 의 하나 이상의 런 스택 엔트리들을 저장한다. 그 후, 엔진 (252) 이 패킷들의 데이터 스트림으로부터 페이로드 (262) 의 후속하는 부분을 로딩할 때, 엔진 (252) 은 세이브 버퍼 (264) 로부터 런 스택 엔트리들을 로딩할 수 있고 잡을 계속하기 위해 런 스택 엔트리들을 런 스택 (260) 으로 푸싱한다. 세이브 버퍼 엔트리들의 런 스택으로의 이러한 로딩은 또한 동일한 플로우의 후속하는 패킷을 위해 엔진에 인스트럭션을 제공하면서 호스트 프로세서에 의해 수행될 수 있다.
페이로드 (262) 가 그래프 (257) 에 대해 매칭한 것을 발견한 경우에, 엔진 (252) 은 입력 버퍼 (258) 로부터 로딩된 잡과 연관된 런 스택 (260) 내의 모든 엔트리들 (예를 들어, 제 1 엔트리 (S1)) 을 팝핑하고, 엔진이 모든 매칭들을 리턴시키도록 구성되지 않는다면, 이들을 폐기할 수도 있다. 그 후 엔진 (252) 은 결과들 (예를 들어, 매칭 위치 및 길이) 을 매칭 결과 메모리 (266) 에 세이브한다. 그 후 엔진 (252) 은 입력 버퍼 (258) 로부터 이전에 로딩된 런 스택으로부터 다음 엔트리 (예를 들어, S2) 를 로딩할 수 있다. 그 후 엔진 (252) 은 그래프 및 상기 엔트리에 대응하는 페이로드 세그먼트들을 프로세스할 수 있고, 런 스택 (260) 이 빌 (empty) 때까지 추가적인 잡들의 프로세스를 계속할 수 있다.
그래프 (257) 에 대한 페이로드 (262) 의 미스매칭 발견시, 엔진은 입력 버퍼 (258) 로부터 로딩된 잡과 연관된 런 스택 (260) 의 다음 엔트리 (예를 들어, 제 1 엔트리 (S1)) 를 팝핑하고 프로세스한다. 입력 버퍼 (258) 로부터 로딩된 잡과 연관된 엔트리 (예를 들어, 제 1 엔트리 (S1)) 가 런 스택 (260) 에 남아 있지 않으면, 그 후 엔진 (252) 은 현재 잡을 종료하고 입력 버퍼 (258) 로부터 이전에 로딩된 다음 엔트리 (예를 들어, S2) 를 런 스택으로부터 로딩한다. 그 후 엔진 (252) 은 그래프 및 상기 엔트리에 대응하는 페이로드 세그먼트들을 프로세스할 수 있고, 런 스택 (260) 이 빌 때까지 추가적인 잡들의 프로세스를 계속할 수 있다.
도 3a는 예를 들어, U.S. 공개 번호 제 2013/0133064 호로 공개된 Goyal 등의 U.S. 출원 번호 제 13/303,855 호 “Reverse NFA Generation and Processing” 및 U.S. 공개 번호 제 2012/0221497 호로 공개된 Goyal 등의 U.S. 출원 번호 제 13/168,395 호 “Regular Expression Processing Automaton” 에 기술된 시스템에 의해 채택된, NFA 그래프 (320) 의 예시적인 실시예를 예시하는 도면 (300) 이다. 상기 출원들의 전체 교시사항들은 본원에 참조로서 인용되었다. NFA 그래프 (320) 는 패턴 “ab{0,5}x” 를 매칭하도록 구성된다. “b{0,5}” 는 0회 내지 5회 패턴의 어디에서든 ‘b’ 에 대해 매칭한다. 따라서, 패턴은 다음 페이로드들: ax, abx, abbx, abbbx, abbbbx, 또는 abbbbbx 를 매칭한다.
NFA 그래프 (320) 는 노드 (N0 302) 로 시작한다. 노드 (N0 302) 의 로딩 시, 그래프 워크 엔진은 페이로드의 제 1 세그먼트 (예를 들어, 바이트) 가 ‘a’ 와 매칭하는지 여부를 결정하도록 구성된다. 매칭한다면, 그래프 워크 엔진은 노드 (N1 304) 및 페이로드의 다음 세그먼트를 로딩하고, 매칭하지 않으면, 그래프 워크 엔진은 노매칭 (nomatch) 을 리턴한다.
노드 (N1 304) 의 로딩시, 페이로드의 다음 세그먼트가 ‘x’ 이면, 그래프 워크 엔진은 노드 (N7 316) 를 로딩하고, 이는 마크드 노드이다. 마크드 노드는 그래프 워크 엔진이 매칭을 리턴하도록 매칭이 페이로드에서 발견되었다는 것을 표시한다. 페이로드의 다음 세그먼트가 ‘b’ 이면, 그래프 워크 엔진은 노드 (N2 306) 를 로딩한다. 페이로드의 다음 세그먼트가 ‘x’ 또는 ‘b’ 가 아닌 어떤 것이면, 그래프 워크 엔진은 페이로드에 매칭이 없다고 결정하고 노매칭을 리턴한다.
노드 (N2 306) 의 로딩시, 페이로드의 다음 세그먼트가 ‘x’ 이면, 그래프 워크 엔진은 노드 (N7 316) 를 로딩하고, 이는 마크드 노드이다. 마크드 노드는 그래프 워크 엔진이 매칭을 리턴하도록 매칭이 페이로드에서 발견되었다는 것을 표시한다. 페이로드의 다음 세그먼트가 ‘b’ 이면, 그래프 워크 엔진은 노드 (N3 308) 를 로딩한다. 페이로드의 다음 세그먼트가 ‘x’ 또는 ‘b’ 이외의 어떤 것이면, 그래프 워크 엔진은 페이로드에 매칭이 없다고 결정하고 노매칭을 리턴한다.
노드 (N3 308) 의 로딩시, 페이로드의 다음 세그먼트가 ‘x’ 이면, 그래프 워크 엔진은 노드 (N7 316) 를 로딩하고, 이는 마크드 노드이다. 마크드 노드는 그래프 워크 엔진이 매칭을 리턴하도록 매칭이 페이로드에서 발견되었다는 것을 표시한다. 페이로드의 다음 세그먼트가 ‘b’ 이면, 그래프 워크 엔진은 노드 (N4 310) 를 로딩한다. 페이로드의 다음 세그먼트가 ‘x’ 또는 ‘b’ 이외의 어떤 것이면, 그래프 워크 엔진은 페이로드에 매칭이 없다고 결정하고 노매칭을 리턴한다.
노드 (N4 310) 의 로딩시, 페이로드의 다음 세그먼트가 ‘x’ 이면, 그래프 워크 엔진은 노드 (N7 316) 를 로딩하고, 이는 마크드 노드이다. 마크드 노드는 그래프 워크 엔진이 매칭을 리턴하도록 매칭이 페이로드에서 발견되었다는 것을 표시한다. 페이로드의 다음 세그먼트가 ‘b’ 이면, 그래프 워크 엔진은 노드 (N5 312) 를 로딩한다. 페이로드의 다음 세그먼트가 ‘x’ 또는 ‘b’ 이외의 어떤 것이면, 그래프 워크 엔진은 페이로드에 매칭이 없다고 결정하고 노매칭을 리턴한다.
노드 (N5 312) 의 로딩시, 페이로드의 다음 세그먼트가 ‘x’ 이면, 그래프 워크 엔진은 노드 (N7 316) 를 로딩하고, 이는 마크드 노드이다. 마크드 노드는 그래프 워크 엔진이 매칭을 리턴하도록 매칭이 페이로드에서 발견되었다는 것을 표시한다. 페이로드의 다음 세그먼트가 ‘b’ 이면, 그래프 워크 엔진은 노드 (N6 314) 를 로딩한다. 페이로드의 다음 세그먼트가 ‘x’ 또는 ‘b’ 이외의 어떤 것이면, 그래프 워크 엔진은 페이로드에 매칭이 없다고 결정하고 노매칭을 리턴한다.
노드 (N6 314) 의 로딩시, 페이로드의 다음 세그먼트가 ‘x’ 이면, 그래프 워크 엔진은 노드 (N7 316) 를 로딩하고, 이는 마크드 노드이다. 마크드 노드는 그래프 워크 엔진이 매칭을 리턴하도록 매칭이 페이로드에서 발견되었다는 것을 표시한다. 페이로드의 다음 세그먼트가 ‘x’ 이외의 어떤 것이면, 그래프 워크 엔진은 페이로드에 매칭이 없다고 결정하고 노매칭을 리턴한다.
도 3b는 본 발명에 의해 채택된 NFA 그래프 (370) 의 예시적인 실시예의 도면이다. NFA 그래프 (370) 는 도 3a에서와 동일한 패턴 “ab{0,5}x” 를 매칭하도록 구성된다. 상기 기술된 바와 같이, b{0,5} 는 패턴 어디에서든 ‘b’ 에 대해 0 내지 5회 매칭한다. 따라서, 패턴은 다음 페이로드들: ax, abx, abbx, abbbx, abbbbx, 또는 abbbbbbx 를 매칭한다.
노드 (N0 352) 는 엘리먼트 ‘a’ 에 대해 매칭하도록 구성된 캐릭터 노드이다. 노드 (N1 354) 는 어디서든 엘리먼트 ‘b’ 에 대해 ‘0’ 으로부터 ‘5’ 회 매칭하도록 구성된 가변 카운트 노드이다. 가변 카운트 노드는 엘리먼트에 대해 무한 회수 를 포함하는, 임의의 회수 매칭하도록 구성될 수 있다. 노드 (N2 356) 는 엘리먼트 ‘x’ 에 대해 매칭하도록 구성된 캐릭터 노드이다. 노드 (N3 358) 는 패턴의 끝을 나타내고 페이로드에서 매칭이 발견되었다는 것을 시그널 (signal) 하도록 구성된 마크드 노드이다.
그래프 워크 엔진은 NFA 그래프 (370) 로부터 노드 (N0 352) 를 로딩한다. 그 후 그래프 워크 엔진은 페이로드의 제 1 세그먼트를 프로세스한다. 페이로드의 세그먼트가 ‘a’ 이면, 그래프 워크 엔진은 노드 (N1 354) 를 로딩한다. 그렇지 않으면, 그래프 워크 엔진은 노매칭을 리턴한다.
노드 (N1 354) 의 로딩시, 그래프 워크 엔진은 이 노드를 캐릭터 클래스 ‘b’ 에 대한 매칭이 0 내지 5회 발생하는 가변 카운트 노드로서 해석한다. 이 노드로부터, 그래프 워크 엔진은 이러한 페이로드의 패턴에 대해 매칭하고, 그 후 다음 노드, 노드 (N2 356) 를 로딩하도록 구성된다. 그 후 노드 (N2 356) 는 페이로드의 다음 세그먼트가 ‘x’ 인지 결정한다. ‘x’ 라면, 그래프 워크 엔진은 패턴이 매칭한다는 것을 표시하는 마크드 노드인, 노드 (3 358) 를 로딩한다. ‘x’ 가 아니면, 그래프 워크 엔진은 노매칭을 리턴한다. 런 스택을 사용하여 가변 카운트 노드들을 워킹하는 (walking) 그래프 워크 엔진의 구체적인 상세들은 이하에 기술된다.
NFA 그래프 (370) 는 도 3a의 NFA 그래프 (320) 와 동일한 패턴들을 식별하지만, 더 적은 노드들을 식별한다. 따라서, NFA 그래프 (370) 는 더 적은 메모리를 사용하고 복잡성이 감소된다.
도 3c는 다른 타입들의 카운팅 노드들을 도시하는 NFA 그래프 (390) 의 예시적인 실시예를 도시하는 도면 (380) 이다. 고정 카운트 노드는 범위를 사용하는 대신, 엘리먼트에 대해 페이로드 세그먼트를 고정된 회수 탐색한다. 예를 들어, 패턴 “ab{5}x” 는 페이로드 “abbbbbx” 와 매칭하지만 “ax”, “abx”, “abbx”, “abbbx”, 또는 “abbbbx” 와는 매칭하지 않는다. 유사하게, 0 이 아닌 범위로 시작하는 가변 카운트 매칭 패턴은 가변 카운트 패턴이 이어지는 고정 카운트 패턴으로 변환될 수 있다. 예를 들어, “ab{5,10}x” 는 또한 “ab{5}b{0,5}x” 로 표현될 수 있다. 이러한 등가의 패턴이 도 3c에 NFA 그래프 (390) 로 도시된다. 상기 기술된 바와 같이, 이는 “a” 에 대해 매칭하기 위한 노드 (N0 382), “b” 에 대해 5회 매칭하기 위한 고정 카운트 노드 (N1 384), “b” 에 대해 0 내지 5회 매칭하기 위한 가변 카운트 노드 (N2 386), “x” 에 대해 매칭하기 위한 노드 (N3 388), 및 매칭이 발견되었다는 것을 나타내기 위한 마크드 노드 (N4 389) 를 생성한다.
본 발명의 예시적인 실시예로서, 노드 각각은 엘리먼트를 저장하고, 엘리먼트는 개별적인 값/캐릭터/레터, 캐릭터 클래스 ID (예를 들어, 캐릭터 클래스 인덱스), 또는 스트링이다. 노드 각각은 또한 자신의 노드 타입 및 노드 타입이 요구하는 임의의 다른 정보를 저장하는데, 예를 들어, 가변 카운트 노드는 각각의 엘리먼트에 대해 매칭하는 회수의 최대 (및 선택적으로 최소) 수 및 가변 카운트 노드가 레이지/그리디/포제시브/올 매칭 타입 노드인지 여부를 저장하고, 고정 카운트 노드는 각각의 엘리먼트에 대해 매칭하는 회수를 저장한다.
도 4a는 종래 시스템에 의해 채택된 NFA 그래프 (440) 의 예시적인 실시예이다. NFA 그래프 (440) 는 “[aA][bB]” 의 패턴을 매칭하도록 구성되고, 이는“ab”, “aB”, “Ab”, 및 “AB” 를 포함하는 페이로드들을 매칭한다.
그래프 워크 엔진은 먼저 노드 (N0 402) 를 프로세스한다. 페이로드가 “a” 이면, 그래프 워크 엔진은 노드 (N1 404) 를 로딩한다. 그 후 그래프 워크 엔진은 페이로드의 다음 세그먼트를 프로세스한다. 페이로드가 ‘b’ 이면, 그래프 워크 엔진은 노드 (N3 408) 를 로딩하고, 이는 마크드 노드이다. 페이로드가 ‘B’ 이면, 그래프 워크 엔진은 노드 (N4 410) 를 로딩하고, 이 또한 마크드 노드이다. 마크드 노드들 양자는 매칭을 리턴하도록 그래프 워크 엔진에 인스트럭션한다.
한편, 노드 (N0 402) 를 프로세싱할 때, 그래프 워크 엔진이 “A” 인 페이로드를 프로세스하면, 그래프 워크 엔진은 노드 (2 406) 를 로딩한다. 그 후 그래프 워크 엔진은 페이로드의 다음 세그먼트를 프로세스한다. 페이로드가 ‘b’ 이면, 그래프 워크 엔진은 노드 (N5 412) 를 로딩하고, 이는 마크드 노드이다. 페이로드가 ‘B’ 이면, 그래프 워크 엔진은 노드 (N6 414) 를 로딩하고, 이 또한 마크드 노드이다. 마크드 노드들 양자는 매칭을 리턴하도록 그래프 워크 엔진에 인스트럭션한다.
NFA 그래프 (440) 는 “[aA][bB]” 와 같이 짧은 패턴으로도 복잡성을 증가시킬 수 있다. 각각의 캐릭터 클래스가 2개의 값들/캐릭터들/레터들만을 지정하더라도, 패턴에 부가된 각각의 부가적인 캐릭터 클래스는 그래프의 노드들의 수를 배가한다 (doubles). 게다가, 캐릭터 클래스들은 많을수록 그래프의 복잡성을 더 증가시키는 임의의 수의 캐릭터들이 표시되게 할 수 있다.
일 실시예에서, 각각의 캐릭터 클래스는 128-비트 또는 256-비트맵에 저장될 수 있다. 캐릭터 클래스의 비트 각각은 대응하는 ASCII 값을 나타낸다. 예를 들어, 비트맵의 12번째 비트는 “뉴 라인” 캐릭터를 나타낸다. 12번째 비트가 1이면, 캐릭터 클래스가 “뉴 라인” 캐릭터를 포함한다는 것을 의미한다. 12번째 비트가 0이면, 캐릭터 클래스는 “뉴 라인” 캐릭터를 포함하지 않는다. 유사한 방식으로, 각각의 캐릭터 클래스는 다수의 ASCII 값들을 저장할 수 있다. 예를 들어, [^\n] (즉, 뉴 라인을 제외한 모든 캐릭터들을 갖는 캐릭터 클래스) 는 12번째 비트를 제외하고 모든 비트들을 “1” 로 마크한다. 또 다른 예로서, 캐릭터 클래스 [a-z] 는 97 - 122의 ASCII 값을 포함한다. 따라서, 캐릭터 클래스 [a-z] 의 비트맵은 97 - 122 비트들을 “1” 로 셋하고, 모든 다른 비트들을 “0” 으로 셋한다.
그래프 워크 엔진이 페이로드 세그먼트를 캐릭터 클래스에 매칭할 때, 페이로드의 ASCII 값을 캐릭터 클래스에 대한 인덱스로 사용할 수 있다. 예를 들어, 캐릭터 클래스가 [a-z] 이면, 그래프 워크 엔진이 114의 ASCII 값을 갖는, 레터 “r” 을 프로세싱한다고 가정한다. 그래프 워크 엔진은 캐릭터 클래스의 114번째 비트를 액세스할 수 있고 이 비트가 캐릭터 클래스와 매칭하는지 여부를 결정하도록 이 비트가 셋되는지 여부를 결정한다. 이는 다음의 논리문 (logical statement) 으로 표현될 수 있다: “if (CharacterClass[PayLoadASCIIValue] == true), return match; else return nomatch”, 여기서 PayLoadASCIIValue 는 페이로드의 현재 세그먼트의 ASCII 값이고, 또는 이 경우 114이다.
주어진 패턴은 또한 다수의 캐릭터 클래스들을 포함할 수 있다. 예를 들어, 패턴 “[a-z][0-9][^\n][a-z]” 는 4개의 캐릭터 클래스들을 갖지만, [a-z] 가 반복된 캐릭터 클래스이기 때문에, 단지 3개의 고유 캐릭터 클래스들 (즉, [a-z], [0-9], 및 [^\n]) 이다. 따라서, 컴파일러는 먼저 패턴(들)에 존재하는 고유 캐릭터 클래스들의 수를 결정한다. 그 후 컴파일러는 각각의 캐릭터 클래스에 고유 번호 (예를 들어, 인덱스 또는 식별자) 를 할당한다. 예를 들어, 컴파일러는 [a-z] 에 인덱스 1, [0-9] 에 인덱스 2, 및 [^\n] 에 인덱스 3을 할당한다. 캐릭터 클래스가 두번 출현하더라도, 캐릭터 클래스 [a-z] 는 비트맵으로서 한번 저장되고, 자신의 인덱스 “1” 로 액세스될 수 있다.
컴파일러는 캐릭터 클래스들을 2차 행렬로 저장하고, 이는 2개의 인덱스들을 입력으로서 액세스될 수 있다. 제 1 인덱스는 캐릭터 클래스를 식별하고, 제 2 인덱스는 이 캐릭터 클래스 내의 값을 식별한다.
NFA 그래프의 맥락에서, 노드 타입 = “캐릭터 클래스” 에 대한 각각의 노드의 “엘리먼트” 필드는 캐릭터 클래스 번호를 포함한다. 또한, 노드 타입들 “가변 카운트” 또는 “고정 카운트” 의 “엘리먼트” 필드는 또한 그래프 워크 엔진이 캐릭터 클래스에 대해 각각 가변 회수 또는 고정된 회수 매칭하도록 캐릭터 클래스의 인덱스일 수 있다.
또한, 컴파일러는 모든 패턴들의 캐릭터 클래스들을 결정한다. 예를 들어, 컴파일러는 패턴 1 “[a-z][0-9]”, 패턴 2 “[a-z][^\n]” 및 패턴 3 “[0-9][A-F]” 을 수신할 수 있다. 패턴 1, 패턴 2, 및 패턴 3이 총 6개의 캐릭터 클래스들을 갖지만, 단지 4개의 고유 캐릭터 클래스들을 갖는다. 따라서, 컴파일러는 [a-z] 에 인덱스 1을 할당하고, [0-9] 에 인덱스 2를 할당하고, [^\n] 에 인덱스 3을 할당하고 [A-F] 에 인덱스 4를 할당한다. 그래프의 임의의 노드는 노드가 출현한 패턴(들)과 상관없이 자신의 비트맵을 액세스함으로써 캐릭터 클래스에 액세스할 수 있다. 이는 모든 캐릭터 클래스들을 저장하는데 필요한 메모리를 감소시킨다.
워킹 동안, 그래프 워크 엔진은 특정한 캐릭터 클래스 비트맵에 대한 제 1 인덱스로서 캐릭터 클래스 (노드 타입 캐릭터 클래스의) 를 표시하는 노드에 저장된 엘리먼트를 사용하고 제 2 인덱스로서 페이로드 세그먼트 (예를 들어, 페이로드 바이트) 를 사용한다. 이는 2차 행렬의 특정한 비트를 로딩하고, 두 인덱스들의 위치에 로딩된 비트는 페이로드 세그먼트 (예를 들어, 페이로드 바이트) 가 특정한 캐릭터 클래스 내에 있는지 여부를 표시한다.
도 4b는 본 발명에 채택된 조밀한 노드들을 갖는 NFA 그래프 (470) 및 대응하는 캐릭터 클래스 행렬 (472) (예를 들어, 비트맵 표) 의 예시적인 실시예를 도시하는 도면 (450) 이다. NFA 그래프 (470) 는 “ab”, “aB”, “Ab”, 및 “AB” 를 포함하는 페이로드들과 매칭하는 패턴 “[aA][bB]” 와 매칭하도록 구성된다. 본 실시예에서, NFA 그래프 (470) 는 그래프의 노드들의 수를 저감하고 그래프 복잡성을 저감시키기 위해 그래프의 노드들 내의 캐릭터 클래스들을 활용한다. 컴파일러는 패턴이 2개의 고유 캐릭터 클래스들, [aA] 및 [bB] 을 포함한다고 결정한다. 컴파일러는 캐릭터 클래스 [aA] 에 인덱스 0을 할당하고 캐릭터 클래스 [bB] 에 인덱스 1을 할당하고, 및 양자는 비트맵으로서 2차원 행렬에 저장된다.
캐릭터 클래스 행렬 (472) 은 대응하는 인덱스들에 캐릭터 클래스들 [aA] 및 [bB] 의 표현을 도시한다. 캐릭터 클래스 0 (즉, [aA]) 은 “A” 및 “a” 에 대해 셋되는 엔트리들을 도시하고, 캐릭터 클래스 1 (즉, [bB]) 은 셋되는 “b” 및 “B” 엔트리들을 도시한다. 이들 캐릭터 클래스들은 동일한 캐릭터 클래스들을 채택하는 다른 그래프들에 의해 활용될 수 있고 행렬은 다른 그래프들로부터 상이한 캐릭터 클래스들을 더 포함할 수 있다. 캐릭터 클래스 행렬의 또 다른 예는 도 21과 관련하여 도시된다.
도 22는 캐릭터 클래스 매칭 노드의 포맷을 도시하는 표 (2200) 이다. 표 (2200) 는 노드 타입 (2202), 매칭 타입 (2204), 엘리먼트 (2206), 다음 노드 어드레스 (2208), 및 카운트 값 (2210) 을 포함한다. 캐릭터 클래스 매칭 노드에 대해, 노드 타입 (2202) 은 캐릭터 클래스를 표시한다. 매칭 타입 (2204) 은 해당없다는 것을 표시한다 (예를 들어, NULL 값). 엘리먼트 (2206) 는 캐릭터 클래스 행렬의 캐릭터 클래스를 액세스하기 위해 사용된 캐릭터 클래스 인덱스를 표시한다. 다음 노드 어드레스 (2208) 는 그래프의 다음 노드의 어드레스를 포함한다. 카운트 값 (2210) 은 캐릭터 클래스 매칭 노드에 대해 해당없다.
도 4b를 다시 참조하면, 노드 (N0 452) 의 판독시, 그래프 워크 엔진은 노드 (N0 452) 가 지정된 캐릭터 클래스의 임의의 값/캐릭터/레터, 이 경우에서 “a” 또는 “A”에 매칭한다고 결정하고, 페이로드의 제 1 세그먼트를 로딩한다. 그래프 워크 엔진은 노드가 캐릭터 클래스라고 표시하는 노드의 노드 타입, 및 캐릭터 클래스가 인덱스 0을 갖는다는 것을 표시하는 노드의 엘리먼트를 로딩한다. 그 후 그래프 워크 엔진은 페이로드의 세그먼트가 캐릭터 클래스와 매칭하는지 결정하기 위해 비트맵에 대한 인덱스로서 페이로드의 현재 세그먼트를 사용한다 (예를 들어, Matrix[0][PayloadSegmentValue] 를 로딩한다). 페이로드의 제 1 세그먼트는 인덱스들의 위치에서 비트맵으로부터 로딩된 값에 의해 표시된 바와 같이, 지정된 캐릭터 클래스의 임의의 값/캐릭터/레터이고, 그래프 워크 엔진은 노드 (N0 452) 에 저장된 “다음 노드 어드레스” 로 포인팅된 노드 (N1 454) 를 로딩한다.
노드 (N1 454) 의 판독시, 그래프 워크 엔진은 노드 (N1 454) 가 지정된 캐릭터 클래스의 임의의 값/캐릭터/레터, 이 경우에서 “b” 또는 “B” 에 대해 매칭한다고 결정하고, 페이로드의 다음 세그먼트를 로딩한다. 그래프 워크 엔진은 노드가 캐릭터 클래스라고 표시하는 노드의 노드 타입, 및 캐릭터 클래스가 인덱스 1을 갖는다는 것을 표시하는 노드의 엘리먼트를 로딩한다. 그 후 그래프 워크 엔진은 페이로드의 세그먼트가 캐릭터 클래스와 매칭하는지 결정하기 위해 비트맵에 대한 인덱스로서 페이로드의 현재 세그먼트를 사용한다 (예를 들어, Matrix[1][PayloadSegmentValue] 를 로딩한다). 인덱스들의 위치에서 비트맵으로부터 로딩된 값에 의해 표시된 바와 같이, 페이로드의 현재 세그먼트가 지정된 캐릭터 클래스의 임의의 값/캐릭터/레터이면, 그래프 워크 엔진은 노드 (N1 454) 에 저장된 “다음 노드 어드레스” 로 포인팅된 노드 (즉, 노드 (N2 456)) 를 로딩한다. 그래프 워크 엔진은 노드 (N2 456) 의 로딩시, 노드 (N2 456) 의 “노드 타입” 에 기초하여, 노드가 마크드 노드라고 결정한다. 그 후 그래프 워크 엔진은 매칭을 리턴할 수 있다.
NFA 그래프 (470) 는 복잡성 및 사이즈가 감소된다. 게다가, 각각의 캐릭터 클래스에서 값들/캐릭터들/레터들의 수를 증가시키는 것은 NFA 그래프 (470) 의 사이즈를 증가시키거나 감소시키지 않는다. 또한, 그래프에서 상이한 캐릭터 클래스들의 수를 증가시키는 것은 캐릭터 클래스의 값들/캐릭터들/레터들의 수를 곱하는 대신, NFA 그래프 (470) 의 사이즈를 선형으로 증가시킨다.
캐릭터 클래스에 부가하여, 본 발명의 예시적인 실시예에 따라, 또 다른 노드 타입은 스트링 노드이다. 스트링 노드는 연속하는 값들/레터들/캐릭터들에 매칭하는 하나의 노드이다.
도 23은 스트링 매칭 노드의 포맷을 예시하는 표들 (2300) 이다. 스트링 노드 표 (2330) 는 노드 타입 (2302), 매칭 타입 (2304), 엘리먼트 (2306), 다음 노드 어드레스 (2308), 및 카운트 값 (2310) 을 포함한다. 노드 타입 (2302) 은 “스트링 매칭” 을 표시한다. 매칭 타입 (2304) 은 해당없다 (예를 들어, NULL 값). 엘리먼트 (2306) 는 스트링 데이터 (2340) 의 어드레스를 표시한다. 다음 노드 어드레스 (2308) 는 그래프의 다음 노드의 어드레스를 표시한다. 카운트 값 (2310) 은 스트링의 길이를 표시한다.
스트링 노드 (2330) 의 엘리먼트 (2306) 의 스트링 데이터의 어드레스에 의해 표시된 스트링 데이터 (2340) 는 노드 타입 (2312), 매칭 타입 (2314), 엘리먼트 (2316), 다음 노드 어드레스 (2318), 및 카운트 값 (2320) 을 포함한다. 노드 타입 (2312) 은 노드가 “스트링 데이터” 라는 것을 나타낸다. 엘리먼트 (2316) 는 스트링의 캐릭터들을 표시한다. 매칭 타입 (2314), 다음 노드 어드레스 (2318), 및 카운트 (2320) 는 모두 해당없다.
스트링 노드에 대한 유사한 변형은 케이스 인센서티브 스트링 노드이다. 케이스 인센서티브 스트링 노드는 일 예시적인 실시예에서 다음 페이로드들: “abc”, “abC”, “aBc”, “aBC”, “Abc”, “AbC”, “ABc”, 및 “ABC” 과 매칭하는, 스트링에 선행하는 “{i}abc” 와 같은 수식어에 의해 패턴에 표시될 수 있다. 당업자는 수식어 “{i}” 가 임의의 표시된 심볼 또는 일련의 심볼들일 수 있다는 것을 인식할 것이다.
케이스 인센서티브 스트링 노드들 (및 케이스 인센서티브 캐릭터 노드들) 을 프로세스하기 위해, 비교 전에 알파벳에 대한 비트 중 하나가 마스크된다. 예를 들어, 대문자 (A-Z) 에 대한 ASCII 값들은 65 - 90 사이이고 97 - 122 사이이다. ‘A’ 의 이진 표현 (예를 들어, 십진수 97) 은 1100001이고 ‘a’ 의 이진 표현 (예를 들어, 십진수 65) 은 1000001이다. 따라서, 2개의 이진 값들 사이에서 한 비트만이 상이하다 (예를 들어, 0으로 시작하는 최하위 비트 (least significant bit) 로 인덱스하면, bit[5]). 케이스 인센서티브 알파벳 캐릭터들의 각각의 대응하는 쌍에 대해, bit[5] (각각의 최하위 비트는 0) 는 비교 전에 엘리먼트 및 페이로드 세그먼트 양자에서 마스크된다. 비교는 대문자 사용의 변화만을 나타내고, 값들은 같기 때문에 bit[5] 이외의 매칭을 리턴한다. 당업자는 예를 들어, 다른 캐릭터 스킴들 (schemes) 에서 마스킹 비트로서, bit[5] 이외의 비트 또는 비트들이 사용될 수 있다는 것을 인식할 것이다.
도 4c는 각각의 노드가 값/캐릭터/레터를 체크하는 5개의 개별적인 노드들을 사용하는 패턴 “USPTO” 에 대한 종래의 그래프 (475) 의 예시적인 실시예이다. 따라서 종래의 그래프 (475) 는 ‘U’ 에 매칭하는 제 1 노드 (N01 476), ‘S’ 에 매칭하는 제 2 노드 (N1 477), ‘P’ 에 매칭하는 제 3 노드 (N2 478), ‘T’ 에 매칭하는 제 4 노드 (N3 489), ‘O’ 에 매칭하는 제 5 노드 (N4 480), 및 매칭을 표시하는 마크드 노드 (N5 481) 를 갖는다.
도 4d는 스트링 노드를 채택하는 그래프 (490) 의 예시적인 실시예를 예시한다. 노드 (N0 492) 는 스트링 “USPTO” 로의 포인터를 포함하는 스트링 노드이다. 노드 (N0 492) 는 도 4c에서와 같이 각각의 개별 레터에 대한 매칭 대신 전체 스트링 “USPTO” 에 대해 매칭하도록 엔진에 인스트럭션하고, 그 후 다음 노드를 로딩한다.
도 24는 고정 카운트 매칭 노드의 포맷을 예시하는 표 (2400) 이다. 고정 카운트 노드들에 대해, 노드 타입 (2402) 은 고정 카운트 매칭 (2402) 를 표시한다. 매칭 타입 필드 (2404) 는 고정 카운트 노드들에 대해 해당없다. 고정 카운트 매칭 노드들에 대해, 엘리먼트 (2406) 는 매칭할 캐릭터를 표시할 수 있고 또는 매칭할 캐릭터 클래스 인덱스를 표시할 수 있다. 다음 노드 어드레스 (2408) 는 매칭이 성공하면 프로세스할 다음 노드의 어드레스를 포함한다. 카운트 값 (2410) 은 엘리먼트를 매칭하기 위한 고정된 회수를 포함한다.
도 25는 가변 카운트 매칭 노드의 포맷을 예시하는 표 (2500) 이다. 노드는 가변 카운트 매칭을 표시하는 노드 타입 (2502) 을 포함한다. 노드는 가변 카운트 노드가 레이지인지, 그리디인지, 포제시브인지, 또는 올 매칭 노드인지 여부를 표시하는 매칭 타입 (2504) 을 더 포함한다. 엘리먼트 (2506) 는 매칭할 캐릭터를 포함할 수 있고 또는 매칭할 캐릭터 클래스 인덱스를 표시할 수 있다. 다음 노드 어드레스 (2508) 는 매칭이 성공하면 프로세스할 다음 노드의 어드레스를 포함한다. 카운트 값 (2510) 은 무한함을 나타내기 위한 특별한 심볼을 포함하는, 엘리먼트에 매칭할 최대 수의 회수를 포함한다.
선택적으로, 카운트 값 (2510) 은 또한 엘리먼트가 반드시 매칭해야 하는 최소 수의 회수를 저장하기 위한 제 2 카운트 값을 포함할 수 있다 (제 2 카운트 값이 제공되지 않으면, 디폴트 0이다). 이는 범위 매칭들을 나타내기 위해 사용될 수 있다. 이러한 패턴들은 또한 나머지 회수들 동안 매칭하는 가변 카운트 노드가 이어지는 엘리먼트에 대해 최소 수의 회수 매칭하는 고정 카운트 노드의 조합으로 나타낼 수 있다.
도 5는 본 발명의 예시적인 실시예를 도시하는 NFA 그래프 (510) 의 예시적인 실시예를 도시하는 도면 (500) 이다. NFA 그래프 (510) 는 패턴 “[^\n]*[zZ]b{5}” 을 검출하도록 구성되고, [^\n] 는 뉴 라인 캐릭터를 제외하고 임의의 값/캐릭터/레터를 표시하는 캐릭터 클래스이고, [“zZ”] 는 캐릭터들 “z” 또는 “Z” 를 나타내는 캐릭터 클래스이다.
노드 (N0 502) 는 가변 카운트 노드이다. 가변 카운트 노드는 레이지, 그리디, 포제시브 (그리디 노드의 최적화된 형태인) 또는 올 매칭 타입 노드일 수 있다. 노드 타입은 그래프가 패턴으로부터 컴파일될 때 설정된다. 사용자는 가변 카운트 노드가 컴파일되어야 하는 매칭 노드 타입을 패턴에 표시할 수 있다. 대안적으로, 사용자는 또한 원하는 그래프 행동에 따라, 임의의 4개의 모드들로 디폴트하도록 컴파일러를 설정할 수 있다. 그래프 워크 엔진이 “yyyZbbbbbzyyyZbbbbb” 의 페이로드를 프로세스한다고 가정한다.
노드 (N0 502) 가 레이지 노드이면, 그래프 워크 엔진은 다음 노드, 노드 (N1 504) 로 가능한 가장 짧은 경로를 찾는다. 즉, 그래프 워크 엔진은 노드 N0의 502 엘리먼트가 “z” 및 “Z” 를 포함하는 뉴 라인 이외의 임의의 페이로드 세그먼트를 찾는 것을 포함해도, 노드 (N0 502) 대신, 노드 (N1 504) 에서 페이로드의 “z” 및 “Z” 의 제 1 예를 프로세스한다. 노드 (N0 502) 가 이러한 방식으로 페이로드를 프로세스하지만, 이는 그래프를 관통하는 가장 짧은 경로를 활용하지 않는다.
노드 N0을 가변 카운트 레이지 노드로서 프로세싱하면서, 그래프 워크 엔진은 0의 페이로드 오프셋을 갖는 노드 N0의 런 스택 엔트리를 런 스택에 푸싱한다. 런 스택 엔트리의 푸싱시, 그래프 워크 엔진은 다음 노드 (N1 504) 를 페치한다 (fetch). 그래프 워크 엔진은 0의 페이로드 오프셋에 대응하는 페이로드의 다음 바이트 ‘y’ 를 페치하고, 이를 노드 (N1 504) 의 엘리먼트, 캐릭터 클래스 [zZ] 와 매칭을 시도한다. 이 바이트가 캐릭터 클래스와 매칭하지 않기 때문에, 그래프 워크 엔진은 런 스택 엔트리를 팝핑한다. 그 후 그래프 워크 엔진은 노드 (N0 502) 를 포함하는 팝핑된 스택 엔트리와 동일한 바이트를 프로세스한다. 바이트 ‘y’ 는 캐릭터 클래스 [^\n] 와 매칭하여, 매칭을 산출한다. 그 후 그래프 엔진은 페이로드 오프셋을 1만큼 증가시키고 노드 (N0 502) 를 포함하는 런 스택 엔트리를 푸싱한다.
런 스택 엔트리의 푸싱시, 그래프 워크 엔진은 다음 노드 (N1 504) 를 페치한다. 그래프 워크 엔진은 1의 페이로드 오프셋에 대응하는 페이로드의 다음 바이트 ‘y’ 를 페치하고, 이를 노드 (N1 504) 의 엘리먼트, 캐릭터 클래스 [zZ] 와 매칭을 시도한다. 이 바이트가 캐릭터 클래스와 매칭하지 않기 때문에, 그래프 워크 엔진은 런 스택 엔트리를 팝핑한다. 그 후 그래프 워크 엔진은 노드 (N0 502) 를 포함하는 팝핑된 스택 엔트리와 동일한 바이트를 프로세스한다. 바이트 ‘y’ 는 캐릭터 클래스 [^\n] 와 매칭하여, 매칭을 산출한다. 그래프 워크 엔진은 페이로드 오프셋을 1만큼 증가시키고 노드 (N0 502) 를 포함하는 런 스택 엔트리를 푸싱한다.
런 스택 엔트리의 푸싱시, 그래프 워크 엔진은 다음 노드 (N1 504) 를 페치한다. 그래프 워크 엔진은 2의 페이로드 오프셋에 대응하는 페이로드의 다음 바이트 ‘y’ 를 페치하고, 이를 노드 (N1 504) 의 엘리먼트, 캐릭터 클래스 [zZ] 와 매칭을 시도한다. 이 바이트가 캐릭터 클래스와 매칭하지 않기 때문에, 그래프 워크 엔진은 런 스택 엔트리를 팝핑한다. 그 후 그래프 워크 엔진은 노드 (N0 502) 를 포함하는 팝핑된 스택 엔트리와 동일한 바이트를 프로세스한다. 바이트 ‘y’ 는 캐릭터 클래스 [^\n] 와 매칭하여, 매칭을 산출한다. 그래프 워크 엔진은 페이로드 오프셋을 1만큼 증가시키고 노드 (N0 502) 를 포함하는 런 스택 엔트리를 푸싱한다.
런 스택 엔트리의 푸싱시, 그래프 워크 엔진은 다음 노드 (N1 504) 를 페치한다. 그래프 워크 엔진은 3의 페이로드 오프셋에 대응하는 페이로드의 다음 바이트 ‘Z’ 를 페치하고, 이를 노드 (N1 504) 의 엘리먼트, 캐릭터 클래스 [zZ] 와 매칭을 시도한다. 이 바이트가 캐릭터 클래스와 매칭하기 때문에, 그래프 워크 엔진은 다음 노드 (N2 506) 를 페치한다.
그 후 그래프 워크 엔진은 ‘b’ 에 대해 5회 매칭하는, 고정 카운트 노드 N2를 로딩한다. 그래프 워크 엔진은 모두 ‘b’ 인 페이로드의 다음 5개의 세그먼트들을 로딩하고, 고정 카운트 노드는 또한 ‘b’ 인 자신의 엘리먼트를 매칭한다. 고정 카운트 노드 (N2 506) 의 매칭 후, 그래프 워크 엔진은 마크드 노드인 노드 (N3 508) 를 로딩한다. 마크드 노드는 매칭이 발견되었다는 것을 표시한다. 그 후 그래프 워크 엔진은 런 스택에서 모든 엔트리들을 팝핑하고 복제 비트가 ‘1’ 이면 엔트리들을 폐기하고, 이 경우, 런 스택의 3의 페이로드 오프셋을 갖는 노드 (N0 502) 를 포함하는 단일 엔트리를 폐기한다. 복제 비트는 NFA 그래프에서 마크드 노드에 도달시 (예를 들어, 페이로드에서 매칭을 발견), 복제 비트가 플래그 (falg) 된 (예를 들어,‘1’ 로 셋) 임의의 런 스택 엔트리가 런 스택으로부터 팝핑될 수 있고 추가 프로세싱 없이 폐기된다. 복제 비트가 플래그되지 않으면 (예를 들어, ‘0’ 로 셋), 그 후 런 스택 엔트리들은 팝핑될 때 폐기되지 않고, 부가적인 매칭 (예를 들어, 올 매칭 노드에 대한) 을 찾도록 시도하기 위해 프로세스된다.
가변 카운트 레이지 노드를 프로세싱하는 것이 도 17과 관련하여 더 상세히 기술된다.
노드 (N0 502) 가 그리디 노드이면, 그래프 워크 엔진은 다음 노드, 노드 (N1 504) 로의 가능한 가장 긴 경로를 찾는다. 예를 들어, 페이로드에서 처음 “z” 또는 “Z” 는 노드 (N1 504) 가 프로세스되었다는 것을 의미할 필요가 없다. 그래프 워크 엔진이 “yyyZbbbbbzyyyZbbbbb” 의 동일한 페이로드를 프로세스한다고 가정한다. 레이지 노드 (N0 502) 는 “yyyZbbbbb” 를 매칭으로서 리턴하는 반면, 그리디 노드 (N0 502) 는 “yyyZbbbbbzyyyZbbbbb” 를 리턴한다. 즉, 노드 (N0 502) 는 제 1 가능한 매칭을 무시하고 가장 긴 가능한 매칭을 찾기 위해 페이로드 매칭을 계속한다. 이러한 방식으로 페이로드를 매칭하는 것은 예를 들어, 노드들 및 페이로드 위치의 오프셋을 런 스택에 푸싱함으로써 그래프 워크 엔진이 자신의 단계들을 세이브할 것을 요구한다. 이러한 방식으로, 그래프 워크 엔진이 매칭을 찾지 않고 페이로드의 끝에 도달하면, 그래프 워크 엔진은 더 빠른 가능한 매칭을 매칭하기 위해 백트랙하도록 런 스택으로부터 노드들을 팝핑할 수 있다.
본 발명의 예시적인 실시예에서, 그리디 노드 또는 포제시브 노드 (N0 502) 의 프로세싱시, 그래프 워크 엔진은 페이로드의 바이트들을 로딩하고 노매칭이 발견될 되거나 페이로드가 런 아웃될 때까지 바이트들을 엘리먼트에 대해 매칭한다. 캐릭터 클래스가 페이로드의 모든 값들/캐릭터들/레터들을 커버하는 [^\n] 이기 때문에 그래프 워크 엔진은 페이로드를 런 아웃한다. 그 후 그래프 워크 엔진은 셋될 복제 비트, 페이로드 오프셋, 및 가변 카운트 노드에서 표시된 엘리먼트를 매칭하면서 소비된 바이트들의 수를 표시하는 카운트 (즉, 이 경우 카운트는 19) 를 포함하는 런 스택으로 노드를 푸싱한다. 그 후 그래프 워크 엔진은 캐릭터 클래스 노드 (N1 504) 를 로딩하지만, 페이로드로부터 소비할 바이트가 없기 때문에, 노매칭을 리턴한다.
그 후 그래프 워크 엔진은 런 스택으로부터 가변 카운트 노드를 팝핑하고 카운트를 1 감소시킨다. 그 후 그래프 워크 엔진은 셋될 복제 비트, 페이로드 오프셋, 및 소비된 바이트들의 수를 표시하는 카운트 (18) 를 포함하는 런 스택으로 노드를 푸싱한다. 그 후 그래프 워크 엔진은 캐릭터 클래스 노드 (N1 502) 를 로딩한다. 그래프 워크 엔진은 ‘b’ 인 페이로드의 19번째 바이트를 소비하려고 시도하지만, 이 바이트는 [zZ] 인 노드 (N1 504) 의 캐릭터 클래스와 매칭하지 않는다. 그 후 그래프 워크 엔진은 런 스택 엔트리를 다시 팝핑한다. 이는 카운트가 노드 (N1 504) 가 소비하는 바이트가 매칭하는 수로 감소될 때, 카운트가 13일 때까지 반복된다. 카운트가 13일 때, 가변 카운트 노드는 “yyyZbbbbbzyyy” 를 효율적으로 소비한다. 그 후 노드 (N1 504) 는 “Z” 인 14번째 바이트를 소비하려고 시도하고, 이는 캐릭터 클래스 [zZ] 에 대한 매칭이다. 그 후 그래프 워크 엔진은 노드 (N2 506) 를 로딩한다. 노드 N2는 페이로드에서 다음 5개의 “b” 들을 소비한다. 그 후 그래프 워크 엔진은 매칭이 발견되었다는 것을 표시하는 마크드 노드인, 노드 (N3 508) 를 로딩한다. 마크드 노드 (N3 508) 를 프로세싱한 후, 그래프 워크 엔진은 1로 셋된 복제 비트를 갖는 모든 런 스택 엔트리들을 팝핑하고 폐기하고, 이 경우, 런 스택에 단지 하나의 엔트리만 있다. 따라서, 그리디 노드는 페이로드에서의 가장 긴 매칭을 찾는다. 복제 비트를 셋/언셋 (unset) 하는 것은 런 타임 동안 런 스택에 또한 존재하는 초기 입력 버퍼 엔트리들로부터 엔진에 의해 푸싱된 런 스택 엔트리들을 분리 (마크) 하기 위한 하나의 구현 스킴이지만, 이는 다른 방식들로 달성될 수 있다. 가변 카운트 그리디 노드를 프로세싱하는 것은 도 18과 관련하여 더 상세히 기술된다.
노드 (N0 502) 가 포제시브 노드이면, 그래프 워크 엔진은 다음 노드, 노드 (N1 504) 로의 가능한 가장 긴 경로를 찾는다. 그래프 워크 엔진은 포제시브 노드에 대해, 상기 기술된 그리디 노드와 동일한 결과를 산출하지만, 도 19와 관련하여 더 상세히 기술된 바와 같이, 페이로드의 끝에 도달시 백트랙하지 않음으로써, 더 최적화된 프로세스를 수행한다.
노드 (N0 502) 가 가변 카운트 올 매칭 노드이면, 그래프 워크 엔진은 다음 노드, 노드 (N1 504) 로의 모든 가능한 경로들을 찾는다. 그래프 워크 엔진은 가변 카운트 올 매칭 노드에 대한 다수의 매칭들을 리턴할 수 있다. 가변 카운트 올 매칭 노드를 프로세싱하는 것은 도 20과 관련하여 더 상세히 기술된다.
도 6a는 패턴 (602) 을 프로세싱하는 컴파일러 (604) 의 예시적인 실시예를 도시하는 블록도 (600) 이다. 본 예에서 패턴 (602) 은 “ACMEa*b{5,10}c{5}[def]” 이다. 패턴 (602) 은 각각 스트링 노드 (예를 들어, “ACME”), 가변 카운트 노드 (예를 들어, “a*”), 고정 카운트 및 가변 카운트 노드, 예를 들어, “b{5}b{0,5}” 로 변환가능한, “b{5,10}”, 고정 카운트 노드, 예를 들어, c{5}, 및 캐릭터 클래스, 예를 들어, [def] 로 분리할 수 있는, 패턴 세그먼트들 (620, 622, 624, 626 및 628) 을 포함한다.
컴파일러 (604) 는 스트링 검출 모듈 (610), 가변 카운트 검출 모듈 (612), 고정 카운트 검출 모듈 (614), 고정 카운트 및 가변 카운트 검출 모듈 (616), 및 캐릭터 클래스 검출 모듈 (618) 을 포함한다. 각각의 모듈 (610, 612, 614, 616 및 618) 은 패턴 (602), 또는 내부의 패턴 세그먼트들 (620, 622, 624, 626, 및 628) 각각을 수신하고, 패턴에 기초하여 그래프 어셈블리 모듈 (606) 에 의해 어셈블된 컴파일된 NFA 그래프 (640) 를 위한 노드들 (630, 632, 634, 636a-b, 638) 을 생성한다.
또 다른 실시예에서, 컴파일러 (604) 는 각각의 엘리먼트 및 노드 타입에 매칭하기 위한 개별 모듈들 없이 엘리먼트들 및 엘리먼트 타입에 대한 패턴 (602) 을 검사한다.
도 6b는 도 6a의 패턴 (602) 의 결과적인 컴파일된 NFA 그래프 (640) 의 도면이다. 컴파일된 NFA 그래프 (640) 는 스트링 “ACME” 에 매칭하기 위해 스트링 노드 (650) 로 시작한다. 그 후 그래프 (640) 는 엘리먼트 “a” 에 대해 유한 회수로 매칭하도록 구성된 다음 가변 카운트 노드 (652) 를 갖는다. 가변 카운트 노드는 레이지, 그리디, 포제시브, 올 매칭 노드일 수 있다. 노드는 패턴의 신택스에 기초하여 레이지, 그리디, 포제시브, 올 매칭 타입으로 셋될 수 있다. 예를 들어, 패턴들 “*?”, “+?”, “??” 또는 “{n,m}?” 와 같이, 메타-캐릭터에 제 2 메타-캐릭터 “?” 가 이어지면, 컴파일러는 매칭 타입 레이지 가변 카운트 노드를 생성할 수 있다. “*+”, “++”, “?+” 및 “{n,m}+” 와 같이, 메타-캐릭터에 제 2 메타-캐릭터 “+” 가 이어지면, 컴파일러는 매칭 타입 포제시브 노드들을 생성할 수 있다. 패턴들 “**”, “+*”, “?*”, 및 “{n,m}*” 와 같이 메타-캐릭터에 제 2 메타-캐릭터 “*” 가 이어지면, 컴파일러는 매칭 타입 올 가변 카운트 노드들을 생성한다.
예를 들어, 페이로드 “abbbbbbb” 를 고려한다. 패턴 “ab*” 에 대해, 매칭 타입 그리디를 갖는 가변 카운트 노드가 생성된다. 이 결과는 결과가 “abbbbbbb” 이도록 노드가 전체 페이로드를 소비하는 것이다.
유사하게, 패턴 “ab*+” 에 대해, 매칭 타입 포제시브를 갖는 가변 카운트 노드가 생성된다. 포제시브 노드는 그리디 노드와 유사한 속성을 갖지만, 페이로드의 끝에 도달시 백트랙하지 않도록 구성된다. 유사하게, 이 결과는 결과가 그리디 노드와 동일하게 발생하는 “abbbbbbb” 이도록 여기서 가변 카운트 포제시브 노드가 전체 페이로드를 소비하고 백트랙하지 않는 것이다.
패턴 “ab*?” 에 대해, 매칭 타입 레이지를 갖는 가변 카운트 노드가 생성된다. 이 결과는 가변 카운트 노드가 “a” 인 가능한 가장 짧은 매칭을 소비하는 것이다.
패턴 “ab**” 에 대해, 올 매칭 타입의 가변 카운트 노드가 생성된다. 이 결과는 “a”, “ab”, “abb”, “abbb”, “abbbb”, “abbbbb”, “abbbbbb”, 및 “abbbbbbb” 가 발견되도록 모든 가능한 매칭들이 발견되는 것이다.
다른 실시예들에서, 예를 들어, 패턴들에 대한 프리픽스 (prefix) 또는 서픽스 (suffix) 로 특별한 캐릭터들을 지정함으로써 다양한 심볼들이 매칭 타입을 표시하기 위해 사용될 수 있다. 다른 실시예들에서, 그래프 (640) 를 생성한 컴파일러의 셋은 노드의 매칭 타입을 셋할 수 있다.
그 후 그래프 (640) 는 b{5} 및 “b{0,5}” 로 논리적으로 스플릿되는 패턴 세그먼트 “b{5,10}” 에 기초하는 고정 카운트 노드 (654a) 및 가변 카운트 노드 (654b) 를 갖는다. 고정 카운트 노드 (654a) 는 “b” 에 대해 5회 매칭한다. 가변 카운트 노드 (654b) 는 어디서든 “b” 에 대해 0 내지 5회 매칭한다. 그 후 그래프 (640) 는 페이로드에서 “c” 에 대해 5회 매칭하는 고정 카운트 노드 (656) 를 갖는다. 캐릭터 클래스 노드 (658) 는 임의의 캐릭터 “d”, “e”, 또는 “f” 인 엘리먼트 [def] 에 대해 매칭한다.
그래프는 또한 가변 카운트 노드 또는 고정 카운트 노드의 일부로서 캐릭터 클래스에 매칭할 수 있다. 예를 들어, 패턴 “[xyz]{0,5}” 는 캐릭터 클래스 [xyz] 에 0 내지 5회 매칭하는 가변 카운트 노드로 컴파일한다. 예를 들어, “xyzzx” 는 이 패턴에 매칭하는 페이로드이다.
도 7은 패턴 (702) 을 컴파일하는 예시적인 실시예를 예시하는 블록도 (700) 이다. 패턴 결정 모듈 (703) 은 매칭 항 (match term) 에 대한 패턴 (702) 을 검사한다. 매칭 항은 엘리먼트 및 노드 타입을 포함한다. 패턴 결정 모듈 (703) 이 매칭 항을 찾면, 엘리먼트 (704) 및 노드 타입 (706) 으로서 매칭 항을 노드 생성 모듈 (708) 로 출력한다. 패턴 결정 (703) 이 매칭 항을 찾지 못하면, 패턴이 오버 (over) 되었다고 표시하고, 패턴 결정 모듈 (703) 은 다른 패턴을 소비할 수 있고, 또는 더 이상의 패턴들이 없으면, 컴파일링을 완료한다. 노드 생성 모듈 (708) 은 값/캐릭터/레터, 캐릭터 클래스, 또는 스트링일 수 있는 엘리먼트 (704), 및 값/캐릭터/레터, 캐릭터 클래스, 가변 카운트, 고정 카운트, 고정 카운트 및 가변 카운트, 스트링, 또는 스플릿 노드 (얼터네이션에 사용됨) 또는 매칭을 선언하기 위한 마크드 노드 (그래프의 마지막 노드로 사용됨) 일 수 있는 노드 타입 (706) 을 포함하는 조밀한 노드 (710) 를 생성한다.
도 8은 패턴을 컴파일하는 예시적인 실시예를 도시하는 블록도 (800) 이다. 컴파일링은 매칭 항에 대하여 패턴을 검사함으로써 시작하고, 매칭 항은 엘리먼트 및 노드 타입을 포함한다 (802). 그 후, 이 방법은 매칭 항이 발견되었는지 여부를 결정한다 (804). 발견되었다면, 이 방법은 노드 타입 및 엘리먼트를 표시하는 노드를 생성한다 (806). 발견되지 않았다면, 이 방법은 종료하고 (808) 선택적으로 또 다른 패턴을 컴파일한다.
도 9는 그래프 워크 엔진이 노드를 프로세싱하는 예시적인 실시예를 도시하는 흐름도 (900) 이다. 그래프 워크 엔진은 노드로부터 노드 타입 및 엘리먼트를 추출한다 (902). 상기에 기술된 바와 같이, 엘리먼트는 값/캐릭터/레터, 캐릭터 클래스 인덱스, 또는 스트링 값일 수 있다. 그 후 그래프 워크 엔진은 노드가 동일한 엘리먼트와 매칭을 계속할 것을 요구하는지 여부를 결정한다 (904). 그래프 워크 엔진은 예를 들어, 인덱스 또는 카운팅 변수를 사용함으로써, 가변 카운트 노드 또는 고정 카운트 노드에 대해 매칭된 엘리먼트들의 수를 추적할 수 있다. 노드 타입이 엘리먼트에 대한 계속된 매칭을 표시하면, 그래프 워크 엔진은 페이로드 세그먼트를 엘리먼트와 매칭한다 (906). 그 후 그래프 워크 엔진은 페이로드 세그먼트가 엘리먼트와 매칭하는지 여부를 결정한다 (910). 매칭한다면, 노드가 매칭을 계속할 것을 요구하는지 여부를 결정한다 (904). 노드 타입이 계속된 매칭을 표시하지 않으면, 그래프 워크 엔진은 노드에 대한 매칭 또는 노매칭을 리턴하고 (908) 그래프의 다음 노드의 프로세싱에 이용가능해 질 수 있다.
그러나, 페이로드의 세그먼트가 엘리먼트와 매칭하지 않으면 (910), 그래프 워크 엔진은 노매칭을 리턴한다 (912).
도 10은 NFA 그래프 (1002) 의 노드들 (1004a-d) 을 프로세싱하는 그래프 워크 엔진의 예시적인 실시예를 도시하는 블록도 (1000) 이다. 결정 모듈 (1006) 은 노드들 (1004a-d) 을 포함하는 NFA 그래프 (1002) 를 수신한다. NFA 그래프 (1002) 는 임의의 수의 노드들 (1004a-d) 을 포함할 수 있다. 게다가, 일 실시예에서, 결정 모듈 (1006) 은 개별적인 노드 (1004a-d) 를 수신할 수 있다. 결정 모듈 (1006) 은 노드 타입 (1008) 및 엘리먼트 (1010) 를 매칭 모듈 (1011) 로 출력한다. 매칭 모듈 (1011) 은 노드 타입 (1008) 에 기초하여 페이로드의 세그먼트(들) (1014) 를 엘리먼트 (1010) 에 대해 매칭한다. 매칭 모듈 (1011) 은 노드 타입 (1008) 에 기초하여, 부가적인 세그먼트(들) (1014), 예를 들어, 하나 이상의 페이로드 세그먼트를 매칭하도록 구성된 가변 카운트 노드 또는 고정 카운트 노드를 수신할 수 있다. 프로세싱 완료시, 매칭 모듈 (1011) 은 매치 또는 노매치 (1012) 를 출력한다. 선택적으로, 매칭 모듈 (1011) 은 NFA 그래프 (1002) 의 다음 노드를 프로세스하도록 결정 모듈 (1006) 에 요청할 수 있다. 매칭 모듈 (1011) 은 또한 페이로드의 더 앞선 또는 더 나중의 세그먼트들 및 NFA 그래프의 더 앞선 또는 더 나중의 노드들을 프로세스할 수 있다.
도 11은 본 발명에 의해 채택된 NFA 그래프의 워킹 프로세스를 예시하는 흐름도 (1100) 이다. 일 실시예에서, 프로세스들을 수행하는 엘리먼트들은 도 2b에 예시된 블록도 (250) 와 관련하여 기술된 엘리먼트들일 수 있다.
그래프 워크 엔진 (252) 은 동일한 플로우의 다음 페이로드가 로딩될 때 엔진이 세이브 버퍼로부터 런 스택으로 스택 엔트리들을 리로드 (reload) 할 수 있도록 페이로드가 부분적인 매칭만으로 프로세스되는 것을 완료할 때 세이브 버퍼/스택 (264) 을 저장하기 위해 채택된 세이브 버퍼/스택 (264) 및 그래프의 다른 부들을 통해 워크하는 경로들을 세이브하도록 채택된 런 스택 (260) 을 저장하는 메모리들을 포함한다. 일 실시예에서, 런 스택 (260) 또는 세이브 버퍼 (264) 는 온 칩 메모리 (on chip memory) 의 순환 버퍼들 (circular buffers) 로서 유지될 수 있고 외부 시스템 메모리로 스필 (spill) 될 수 있지만, 메모리들의 다른 스택 구현들 및 타입들이 채택될 수 있다. 또한, 호스트는 동일한 플로우의 후속 페이로드들을 프로세스하도록 다음 인스트럭션을 엔진에 피드 (feed) 하면서, 세이브 버퍼로부터 런 스택 (입력 버퍼) 으로 엔트리들을 복사 (이동) 할 수 있다.
런 스택 (260) 은 스택 엔트리들을 헤드 포인터로 푸싱하고 헤드 포인터로부터 스택 엔트리들을 팝핑한다. 세이브 버퍼/스택은 자신의 테일 포인터 (tail pointer) 에서 스택 엔트리들을 인-큐한다 (en-queue). 세이브 버퍼/스택 (264) 은 자신의 테일 포인터에 엔트리들을 인-큐하기 때문에 큐로서 구조화된다 (예를 들어, LILO). 프로세서에 결합된 호스트는 적어도 하나의 엔트리 (예를 들어, 도 2의 입력 버퍼 (258) 로부터의 입력) 가 채워진 (filled) 초기 런 스택을 제공한다. 호스트는 또한 (예를 들어, 인스트럭션 큐 (254) 로부터의) 초기 인스트럭션을 제공할 수 있다. 워크 인스트럭션 (walk instruction) 은 다음의 스택 관련 정보를 포함한다: (1) 런 스택 헤드 포인터 (Run Stack Head Pointer); (2) 세이브 스택 테일 포인터 (Save Stack Tail Pointer); (3) 런 스택 엔트리들로의 수; 및 (4) 엔트리들의 수의 런 스택 및 세이브 스택 사이즈.
본 발명의 예시적인 실시예에서, 런 스택 엔트리는 노드 타입 필드, 복제 필드, 역 프로세싱 필드 (reverse processing field), 페이로드 오프셋 필드, 타입 특정 데이터 필드, 및 어드레스 필드를 표시하는 필드들을 포함한다. 노드 타입이 “NOP” 이면 (예를 들어, No-op), 그래프 워커 (graph walker) 는 런 스택 엔트리를 폐기하고 프로세스될 다음 런 스택 엔트리를 팝핑한다. 노드 타입이 페치 (Fetch) 이면, 런 스택 엔트리는 노드 정보를 포함하지 않고 타입 특정 데이터 필드가 무효화된다. 타입이 “NOP” 이외의 임의의 타입 또는 페치이면 (예를 들어, 고정 캐릭터, 가변 카운트, 스플릿 노드, 스트링 노드, 캐릭터 클래스, 캐릭터, 또는 마크드 노드), 런 스택 엔트리는 스스로 타입 특정 데이터 필드에 노드 정보를 포함한다. 가능한 노드 타입들이 이하의 표에 리스트된다.
노드 타입 설명
0 NOP NOP (동작 없음)
1 FTCH 페치만
2 FCH_CNT 고정 카운터 - 캐릭터
3 FCC_CNT 고정 카운터 - 캐릭터 클래스
4 VCH_CNT_ALL 가변 카운트 캐릭터 - 올 매칭 노드
5 VCH_CNT_GD 가변 카운트 캐릭터 - 그리디 노드
6 VCH_CNT_LZ 가변 카운트 캐릭터 - 레이지 노드
7 VCH_CNT_PSV 가변 카운트 캐릭터 - 포제시브 노드
8 VCC_CNT_ALL 가변 카운트 캐릭터 클래스 - 올 매칭 노드
9 VCC_CNT_GD 가변 카운트 캐릭터 클래스 - 그리디 노드
10 VCC_CNT_LZ 가변 카운트 캐릭터 클래스 - 레이지 노드
11 VCC_CNT_PSV 가변 카운트 캐릭터 클래스 - 포제시브 노드
12 SPLT_ALL 스플릿 노드 - 올 매칭 노드
13 SPLT_GD 스플릿 노드 - 그리디 노드
14 SPLT_LZ 스플릿 노드 - 레이지 노드
15 SPLT_PSV 스플릿 노드 - 포제시브 노드
16 STR_MTCH_CS 스트링 - 케이스 센서티브
17 STR_MTCH_CINS 스트링 - 케이스 인센서티브
18 CH_MTCH 캐릭터 매칭
19 CC_MTCH 캐릭터 클래스 매칭
20-30 다른 노드들
31 MRK 마크드 노드
복제 필드는 런 타임 동안 동일한 런 스택에 또한 존재하는 초기 입력 버퍼 엔트리들로부터 그래프 워크 엔진에 의해 푸싱된 런 스택 엔트리들을 분리하도록 사용된다. 역 필드 (reverse field)는 현재 노드가 프로세스된 후 페이로드 오프셋이 증가 또는 감소되어야 하는지 여부를 표시한다. 이는 페이로드가 순방향 및 역방향으로 프로세스되도록 한다. 오프셋 필드는 현재 노드가 프로세스하는 페이로드의 위치를 표시한다. 어드레스 필드는 노드 타입이 페치이면 시작 노드 어드레스를 포함한다. 그렇지 않으면, 어드레스 필드는 스택 엔트리를 프로세싱하면서, 페이로드가 매칭하면, 페치될 다음 노드의 어드레스를 포함한다.
런 스택 엔트리를 런 스택 (260) 으로 푸싱하는 것은 그래프 워크 엔진이 다른 NFA 노드들 또는 NFA 그래프의 또 다른 브랜치 (branch) 를 프로세스하도록 하는 한편, 이 브랜치에서 매칭이 발견되지 않으면 런 스택 (260) 에 레코딩된 노드들로 리턴할 수 있다.
세이브 버퍼/스택 (264) 은 그래프 워크 엔진이 부분적인 매칭, 예를 들어, 그래프 워크 엔진이 페이로드의 끝에 도달하는 이벤트를 세이브하도록 한다. 동일한 플로우의 후속 페이로드의 로딩시, 엔진은 세이브 버퍼/스택 (264) 으로부터 스택 엔트리들을 런 스택 (260) 으로 복사한다 (copy). 또 다른 실시예에서, 호스트 디바이스의 호스트 소프트웨어는 그래프 워크 엔진으로의 다음 인스트럭션 제공시 세이브 스택의 콘텐트들을 입력 스택으로 복사할 수 있다. 이 실시예에서, 그래프 워크 엔진은 호스트 소프트웨어에 의해 관리되기 때문에, 패킷 플로우 또는 플로우의 후속 패킷들을 인식하지 못한다. 도 11은 런 스택 및 세이브 스택을 사용하는 기술된 시스템을 구현하는 예시적인 실시예를 예시하지만, 당업자는 다른 구현들을 감안할 수 있다.
프로세스는 그래프 워크를 시작함으로써 시작한다 (1102). 그 후 프로세스는 런 스택 (예를 들어, 런 스택 (260)) 이 비어 있는지의 여부를 결정한다 (1104). 런 스택 (예를 들어, 런 스택 (260)) 이 비어 있으면, 프로세스는 리턴한다 (1122). 런 스택 (예를 들어, 런 스택 (260)) 은 호스트로부터의 인스트럭션 (253) 에 응답하여 입력 버퍼 (258) 로부터 푸싱된 엔트리들일 수 있다. 런 스택 (예를 들어, 런 스택 (260)) 이 비어 있지 않으면 (예를 들어, 적어도 하나의 엔트리를 가짐), 그래프 워커 (예를 들어, 엔진 (252)) 는 다음 런 스택 엔트리를 로딩하기 위해 런 스택 (예를 들어, 런 스택 (260)) 을 팝핑한다 (1106). 런 스택 (예를 들어, 런 스택 (260)) 은 LIFO (Last-In-First-Out) 데이터 구조이고, 따라서 런 스택 (예를 들어, 런 스택 (260)) 으로부터 팝핑된 엔트리는 런 스택 (예를 들어, 런 스택 (260)) 으로 푸싱된 가장 최신 엔트리이다.
그 후 그래프 워크 엔진은 런 스택 엔트리가 노드 정보를 저장하는지 여부를 결정한다 (1108). 노드 정보를 저장하면, 그래프 워크 엔진은 팝핑된 런 스택 엔트리로부터 노드 정보를 판독한다 (1110). 노드 정보를 저장하지 않으면, 그래프 워크 엔진은 팝핑된 런 스택 엔트리에 표시된 메모리 어드레스로부터의 노드를 페치한다 (1112).
그 후 그래프 워크 엔진은 결과 내의 “워크 종료 (terminate walk)” 비트 (또한 “완료 (done)” 비트로 지칭됨) 를 “거짓 (false)” 으로 셋한다 (1114). 그 후 그래프 워크 엔진은 런 스택 엔트리에 의해 표시된 노드를 프로세스하고 (1118), 이는 도 12와 관련하여 더 상세히 설명된다. 도 11과 관련하여, 그 후 그래프 워크 엔진은 프로세스되는 노드 내측에서 워크 종료 비트에 “참 (TRUE)” 이 할당되는지 여부를 결정한다 (1120). 할당받지 않으면, 그래프 워크 엔진은 현재 노드의 “다음 노드 어드레스” 필드에 표시된 노드를 페치한다 (1116). 할당되면, 그래프 워크 엔진은 런 스택이 비어 있는지의 여부를 결정한다 (1104).
도 12는 노드를 프로세싱하는 예시적인 실시예를 도시하는 흐름도 (1200) 이다. 흐름도 (1200) 는 도 11의 노드를 프로세싱하는 단계 (1118) 의 확장이다.
그래프 워크 엔진은 노드의 프로세싱을 시작한다 (1202). 그래프 워크 엔진은 그래프 워크 엔진이 조밀한 노드인지 결정한다 (1204). 조밀한 노드가 아니면, 그래프 워크 엔진은 노드를 조밀하지 않은 (non-dense) NFA 노드 (예를 들어, 캐릭터 노드, 스플릿 노드, 또는 마크드 노드) 로서 프로세스한다 (1214). 그 후 그래프 워크 엔진은 리턴한다 (1224).
노드가 조밀한 그래프 노드이면 (1204), 그래프 워크 엔진은 노드가 캐릭터 클래스 노드인지 여부를 결정한다 (1206). 캐릭터 클래스 노드이면, 그래프 워크 엔진은 캐릭터 클래스 노드를 프로세스한다 (1216). 캐릭터 클래스 노드를 프로세싱하는 것은 도 13과 관련하여 더 상세히 기술된다. 그 후 그래프 워크 엔진은 리턴한다 (1224).
노드가 캐릭터 클래스 노드가 아니면 (1206), 그래프 워크 엔진은 노드가 스트링 노드인지 여부를 결정한다 (1208). 스트링 노드이면, 그래프 워크 엔진은 노드를 스트링 노드로서 프로세스한다 (1218). 스트링 노드를 프로세싱하는 것은 도 14와 관련하여 더 상세히 기술된다. 그 후 그래프 워크 엔진은 리턴한다 (1224).
노드가 스트링 노드 (1208) 가 아니면, 그래프 워크 엔진은 노드가 고정 카운트 노드인지 여부를 결정한다 (1210). 고정 카운터 노드이면, 고정 카운트 노드를 프로세스한다 (1220). 고정 카운트 노드를 프로세싱하는 것은 도 15와 관련하여 더 상세히 기술된다. 그 후 그래프 워크 엔진은 리턴한다 (1224).
도 12와 관련하여, 노드가 고정 카운트 노드 (1210) 가 아니면, 그래프 워크 엔진은 노드가 가변 카운트 노드인지 여부를 결정한다 (1211). 가변 카운트 노드이면, 그 후 그래프 워크 엔진은 노드를 가변 카운트 노드 (1222) 로서 프로세스한다. 가변 카운트 노드를 프로세싱하는 것은 도 16과 관련하여 더 기술된다. 그 후 그래프 워크 엔진은 리턴한다 (1224). 그래프 워크 엔진이 노드가 가변 카운트 노드가 아니라고 결정하면 (1211), 에러 코드를 리턴한다 (1226).
노드를 프로세싱하는 다른 실시예들이 그래프 워크 엔진에 의해 채택될 수 있다. 예를 들어, 그래프 워크 엔진은 상이한 순서로 노드의 각각의 타입을 체크함으로써 노드의 타입을 결정할 수 있다.
도 13은 캐릭터 클래스 노드를 프로세싱하는 예시적인 실시예를 도시하는 흐름도 (1300) 이다. 캐릭터 클래스 노드의 포맷은 도 22와 관련하여 상기에 기술되었다. 도 13과 관련하여, 흐름도 (1300) 는 도 12에 기술된 캐릭터 클래스 노드를 프로세싱하는 단계 (1216) 의 확장이다.
도 26은 캐릭터 클래스 노드 타입을 프로세싱하는 맥락에서 푸싱된 스택 엔트리의 예시적인 실시예를 도시하는 표 (2600) 이다. 스택 엔트리는 캐릭터 클래스 매칭을 표시하는 스택 엔트리 타입 (2602), 캐릭터 클래스 인덱스를 표시하는 엘리먼트 (2606), 및 그래프의 다음 노드를 표시하는 다음 노드 어드레스 (2608) 를 포함한다. 스택 엔트리는 복제 비트 (2612), 그래프가 역으로 워크되는지를 표시하는 역 비트 (2614), 및 페이로드에서 프로세스할 다음 바이트의 오프셋을 표시하는 오프셋 비트 (2616) 를 더 포함한다. 스택 엔트리는 매칭 타입 (2604) 및 카운트 값 (2610) 을 더 포함하고, 양자는 이들이 해당없다는 것을 표시한다. 캐릭터 클래스 스택 엔트리는 단지 세이브 버퍼/스택으로 큐되고, 및 캐릭터 클래스 스택 엔트리를 런 스택으로 푸싱할 필요가 없기 때문에 런 스택으로 푸싱되지 않는다.
도 13과 관련하여, 그래프 워크 엔진은 캐릭터 클래스 노드의 프로세싱을 시작한다 (1302). 그래프 워크 엔진은 캐릭터 클래스 노드로부터 캐릭터 클래스 인덱스 (예를 들어, 도 22의 엘리먼트 (2206)) 를 로딩하고, 2차 행렬에 저장된 비트맵/마스크를 판독하기 위한 캐릭터 클래스 인덱스를 채택한다 (1304). 그 후 그래프 워크 엔진은 페이로드에 프로세스할 적어도 하나 이상의 바이트가 있는지 여부를 체크한다 (1306).
적어도 하나 이상의 바이트가 있다면, 그래프 워크 엔진은 페이로드로부터 다음 바이트 (또는 데이터의 다른 사이즈) 를 페치한다 (1308). 그래프 워크 엔진은 비트맵/마스크의 비트 (또는 데이터의 다른 사이즈) 에 액세스하기 위해 페이로드의 바이트를 사용하고 이 비트가 셋되는지 여부를 결정한다 (1310). 이 비트가 셋되면, 그래프 워커는 페이로드의 바이트가 노드에 의해 나타낸 캐릭터 클래스와 매칭하는지 결정하고, 리턴한다 (1312). 이 비트가 셋되지 않으면 (1310), 그래프 워크 엔진은 결과적인 워크 종료 비트를 “참” 으로 셋하고 (1314), 리턴한다 (1312). 워크 종료 비트는 현재 그래프 워크가 매칭을 찾지 못하였다는 것을 표시하고 그래프의 다음 노드를 페치하는 대신 이 엔진이 현재 그래프 워크 쓰레드 (thread) 를 중단해야 한다는 것을 표시한다.
한편, 그래프 워크 엔진이 더 이상 프로세스할 페이로드가 없다고 결정하면 (1306), 매칭이 동일한 플로우의 후속 패킷들에 대해 재시작할 수 있도록 그래프 워크 엔진은 노드를 세이브 버퍼/스택으로 푸싱한다 (1316). 그 후 그래프 워크 엔진은 결과적인 워크 종료 비트를 “참” 으로 셋하고 (1314), 리턴한다 (1312).
도 14는 스트링 노드를 프로세싱하는 그래프 워크 엔진의 예시적인 실시예를 도시하는 흐름도 (1400) 이다. 상기에 기술된 바와 같이, 스트링 노드 및 스트링 데이터의 포맷은 도 23과 관련하여 예시된다. 도 14와 관련하여, 흐름도 (1400) 는 도 12와 관련하여 기술된 스트링 노드를 프로세싱하는 단계 (1218) 의 확장이다.
도 27은 스트링 매칭 타입에 대한 스택 엔트리의 예시적인 실시예를 도시하는 표 (2700) 이다. 스택 엔트리는 스트링 매칭을 표시하는 스택 엔트리 타입 (2702), 나머지 스트링 데이터의 어드레스를 표시하는 엘리먼트 (2706), 그래프의 다음 노드를 표시하는 다음 노드 어드레스 (2708), 및 프로세스될 스트링의 나머지 길이를 표시하는 카운트 값 (2710) 을 포함한다. 스택 엔트리는 런 스택의 엔트리가 복제인지 여부를 표시하는 복제 비트 (2712), 그래프가 역으로 워크되는지를 표시하는 역 비트 (2714), 및 페이로드에서 프로세스할 다음 바이트의 오프셋을 표시하는 오프셋 비트 (2716) 를 더 포함한다. 스택 엔트리는 해당없다고 표시하는 매칭 타입 (2704) 을 더 포함한다. 스트링 매칭 타입들에 대해, 스택 엔트리들은 이들을 런 스택에 푸싱할 필요가 없으므로 세이브 버퍼/스택에 큐된다.
도 14와 관련하여, 그래프 워크 엔진은 스트링 노드의 프로세싱을 시작한다 (1402). 그래프 워크 엔진은 노드로부터 스트링의 길이 (예를 들어, 도 23의 스트링 노드 (2330) 의 카운트 (2310)) 를 포함하는 스트링 데이터를 로딩하고, 페이로드에서 이용가능한 바이트의 수 (또는 데이터의 다른 사이즈) 를 결정하고, 페이로드에서 이용가능한 바이트들의 수가 스트링의 길이 이상인지 여부를 결정한다 (1404). 이상이라면, 그래프 워크 엔진은 “매칭 길이” 를 “스트링 길이” 를 셋한다 (1406). 그렇지 않다면, 그래프 워크 엔진은 “매칭 길이” 이용가능한 페이로드 세그먼트들의 수로 셋한다 (1404). “매칭 길이” 는 페이로드에 매칭될 스트링의 바이트들의 수이다. 매칭 길이가 스트링 길이 (1404) 보다 작으면, 매칭 길이는 스트링이 부분적으로 매칭할 수 있도록 이용가능한 바이트들의 수로 셋되고, 후속 패킷으로 매칭이 계속된다.
매칭 길이를 셋한 후 (1404 또는 1406), 그래프 워크 엔진은 페이로드로부터 다수의 바이트들을 페치하고, 여기서 바이트들의 수는 매칭 길이이고, 또한 스트링 데이터 노드들 (예를 들어, 도 23의 스트링 데이터 (2340)) 을 페치한다 (1408). 스트링 데이터 노드들은 페이로드 세그먼트와 비교될 실제 스트링 엘리먼트들 (예를 들어, 도 23의 스트링 데이터 (2340)의 엘리먼트 (2314)) 을 포함한다. 그 후 그래프 워크 엔진은 페이로드 세그먼트 바이트들의 페치된 수와 동일한 수의 스트링 바이트들을 병렬적으로 비교한다 (1410). 그 후 노드는 페이로드의 “매칭 길이” 바이트들이 스트링의 모든 페치된 바이트들과 매칭하는지 여부를 결정한다 (1412). 매칭하지 않으면, 그래프 워크 엔진은 결과적인 워크 종료 비트를 “참” 으로 셋하고 (1418), 리턴한다 (1420). 페이로드의 바이트들이 스트링의 바이트들과 매칭하면 (1412), 그 후 그래프 워크 엔진은 매칭 길이가 스트링 길이와 동일한지 여부를 결정한다 (1414).
매칭 길이와 스트링 길이가 동일하면 (1414), 그래프 워크 엔진은 리턴한다 (1420). 매칭 길이와 스트링 길이가 동일하지 않으면 (1414), 그래프 워크 엔진은 매칭할 스트링의 나머지 길이를 포함하는 스택 엔트리 (도 27) 를, 동일한 플로우의 후속 페이로드부터의 나머지 “스트링 길이” 바이트들이 “나머지 스트링 데이터”와 매칭될 수 있도록, 상기 도 27를 참조하여 기술된 정보와 함께 세이브 버퍼/스택에 푸시하고 (1416), 결과의 워크 종료 비트를 “참” 으로 셋하고, (1418), 리턴한다 (1420).
상기 도 27과 관련하여 기술된 정보에 따라, 동일한 플로우의 후속 페이로드로부터의 나머지 “스트링 길이” 바이트들이 “나머지 스트링 데이터” 에 매칭할 수 있도록, 그래프 워크 엔진은 스트링의 나머지 길이를 포함하는 스택 엔트리 (도 27) 를 매칭하도록 세이브 버퍼/스택으로 푸싱 (1416) 하고, 결과적인 워크 종료 비트를 “참” 으로 셋하고 (1418), 리턴한다 (1420).
도 15a 및 도 15b는 고정 카운트 노드를 프로세싱하는 예시적인 실시예를 도시하는 흐름도들 (1500 및 1501) 이다. 고정 카운트 노드의 포맷은 도 24와 관련하여 상기에 기술되었다. 도 15a 및 도 15b와 관련하여, 흐름도들 (1500 및 1501) 은 도 12와 관련하여 기술된 고정 카운트 노드를 프로세싱하는 단계 (1220) 확장이다.
도 28은 고정 카운트 매칭 타입에 대한 스택 엔트리의 예시적인 실시예를 예시하는 표 (2800) 이다. 스택 엔트리는 고정 카운트 매칭을 표시하는 스택 엔트리 타입 (2802), 캐릭터 또는 캐릭터 클래스 인덱스를 표시하는 엘리먼트 (2806), 그래프의 다음 노드를 표시하는 다음 노드 어드레스 (2808), 및 매칭할 바이트들의 나머지 카운트를 표시하는 카운트 값 (2810) 을 포함한다. 스택 엔트리는 런 스택의 노드가 복제인지 여부를 표시하는 복제 비트 (2812), 그래프가 역으로 워크하는지를 표시하는 역 비트 (2814), 및 페이로드에서 프로세스할 다음 바이트의 오프셋을 표시하는 오프셋 비트 (2816) 를 더 포함한다. 스택 엔트리는 해당없다는 것을 표시하는 매칭 타입 (2804) 을 더 포함한다. 고정 카운트 매칭 타입들에 대해, 스택 엔트리들은 런 스택에 푸싱될 필요가 없기 때문에 세이브 버퍼/스택에 큐된다.
도 15a와 관련하여, 그래프 워크 엔진은 고정 카운트 노드의 프로세싱을 시작한다 (1502). 그래프 워크 엔진은 노드에 저장된 “카운트” (예를 들어, 도 24의 카운트 값 (2410)) 를 판독한다. 노드에 저장된 카운트는 캐릭터 또는 캐릭터 클래스가 페이로드에 매칭될 회수를 나타낸다. 예를 들어, 부분적인 패턴 “b{5}” 로부터 도출된 고정 노드에 대해, 캐릭터 ‘b’ 가 페이로드에 5회 매칭되기 때문에 카운트는 5이다.
그 후 그래프 워크 엔진은 바이트들의 “카운트” 수가 페이로드에서 이용가능한지 여부를 결정한다 (1506). 이용가능하다면, 그래프 워크 엔진은 매칭 길이를 “카운트” 로 셋한다 (1510). 이용가능하지 않다면, 그래프 워크 엔진은 매칭 길이를 이용가능한 페이로드 세그먼트들의 수로 셋한다 (1508). “매칭 길이” 는 페이로드에 매칭될 고정 카운트 패턴의 바이트들의 수이다. 매칭 길이가 고정 카운트 노드의 카운트보다 작으면 (1508), 고정 카운트 노드가 부분적으로 매칭될 수 있도록 매칭 길이는 이용가능한 바이트들의 수로 셋되고, 동일한 플로우의 후속 패킷으로 매칭이 계속된다. 매칭 길이를 셋한 후 (1508 또는 1510), 그래프 워크 엔진은 페이로드로부터 바이트들의 “매칭 길이” 수를 페치한다 (1512).
그 후 그래프 워크 엔진은 예를 들어, 캐릭터 또는 캐릭터 클래스의 인덱스 번호를 표시하는 도 24의 엘리먼트 (2406) 의 데이터를 판독함으로써, 노드가 고정 카운트 캐릭터 클래스 노드인지 또는 고정 카운트 캐릭터 노드인지 여부를 결정한다 (1514). 고정 카운트 캐릭터 클래스 노드이면 (1514), 그래프 워크 엔진은 고정된 캐릭터 클래스 노드로부터 추출된 캐릭터 클래스 인덱스 (예를 들어, 도 24의 엘리먼트 (2406)) 를 사용하여 캐릭터 클래스 비트맵/마스크를 판독한다 (1516). 그 후 그래프 워크 엔진은 페이로드 세그먼트들의 “매칭 길이” 수와 마스크의 대응하는 엔트리들을 병렬 매칭하도록 시도한다 (1518). 캐릭터 클래스 노드의 맥락으로 상기에 기술된 바와 동일한 방식으로 캐릭터 클래스 매칭이 수행된다. 노드가 고정 카운트 캐릭터 노드 (1514) 이면, 그래프 워크 엔진은 페이로드 세그먼트들의 “매칭 길이” 수와 노드에 저장된 엘리먼트 (예를 들어, 도 24의 엘리먼트 (2406)) 를 병렬 매칭한다 (1520).
노드가 고정 카운트 캐릭터 클래스 노드 또는 고정 카운트 캐릭터 노드인지 여부를 결정한 후 (1514) 및 결정에 응답하여 (각각 1516 및 1518 또는 1520) 도 15b의 흐름도 (1501) 를 참조하면, 그래프 워크 엔진은 페이로드의 바이트들의 “매칭 길이” 수가 캐릭터 또는 캐릭터 클래스 (1522) 와 매칭하는지 여부를 결정한다. 매칭하면, 그래프 워크 엔진은 매칭 길이가 고정 카운트 노드의 카운트와 동일한지 여부를 결정한다 (1524). 동일하다면, 그래프 워크 엔진은 리턴한다 (1530). 동일하지 않으면, 그래프 워크 엔진은 동일한 플로우의 후속 페이로드로부터의 나머지 “카운트” 바이트들이 나머지 고정 카운트 노드 엘리먼트와 매칭하도록 스택 엔트리 (도 28) 를 세이브 버퍼/스택으로 푸싱하고 (1526), 결과적인 워크 종료 비트를 “참” 으로 셋하고 (1528), 리턴한다 (1530).
페이로드의 바이트들의 “매칭 길이” 수가 캐릭터 클래스의 캐릭터와 매칭하지 않으면 (1522), 그래프 워크 엔진은 결과적인 워크 종료 비트를 “참” 으로 셋하고 (1528), 리턴한다 (1530).
도 16은 가변 카운트 노드를 프로세싱하는 예시적인 실시예를 도시하는 흐름도 (1600) 이다. 가변 카운트 노드의 포맷은 상기 도 25와 관련하여 기술되었다. 도 16과 관련하여, 흐름도 (1600) 는 도 12와 관련하여 기술된 가변 카운트 노드를 프로세싱하는 단계 (1222) 의 확장이다.
도 29는 가변 카운트 매칭 타입에 대한 스택 엔트리의 예시적인 실시예를 도시하는 표 (2900) 이다. 스택 엔트리는 가변 카운트 매칭을 표시하는 스택 엔트리 타입 (2902), 캐릭터 또는 캐릭터 클래스 인덱스를 표시하는 엘리먼트 (2906), 그래프의 다음 노드를 표시하는 다음 노드 어드레스 (2908), 및 매칭할 바이트들의 나머지 카운트를 표시하는 카운트 값 (2910) 을 포함한다. 스택 엔트리는 런 스택의 노드가 복제인지 여부를 표시하는 복제 비트 (2912), 그래프가 역으로 워크하는지를 표시하는 역 비트 (2914), 및 페이로드에서 프로세스할 다음 바이트의 오프셋을 표시하는 오프셋 비트 (2916) 를 더 포함한다. 스택 엔트리는 노드가 레이지, 그리디, 포제시브 또는 올 매칭 노드인지 여부를 표시하는 매칭 타입 (2904) 을 더 포함한다. 스택 엔트리는 런 스택으로 푸싱 및 팝핑될 수 있고, 또는 페이로드의 런 아웃 이벤트시, 런 스택으로부터 세이브 버퍼/스택으로 복사될 수 있다.
도 16과 관련하여, 그래프 워크 엔진은 가변 카운트 노드의 프로세싱을 시작한다 (1602). 그래프 워크 엔진은 도 25의 매칭 타입 (2504) 을 로딩하고 노드 매칭 타입이 레이지인지 여부를 결정한다 (1604). 레이지 노드이면, 가변 카운트 레이지 노드를 프로세스하고 (1614), 이는 도 17에 더 상세히 설명된다. 그 후 그래프 워크 엔진은 리턴한다 (1622).
레이지 노드가 아니면, 그래프 워크 엔진은 노드 매칭 타입이 그리디인지 여부를 결정한다 (1606). 그리디 노드이면, 가변 카운트 그리디 노드를 프로세스하고 (1616), 이는 도 18에 더 상세히 설명된다. 그 후 그래프 워크 엔진은 리턴한다 (1622).
그리디 노드가 아니면, 그래프 워크 엔진은 노드가 포제시브 매칭 타입인지 여부를 결정한다 (1608). 포제시브 매칭 타입이면, 가변 카운트 포제시브 노드를 프로세스하고 (1618), 이는 도 19에 더 상세히 설명된다. 그 후 그래프 워크 엔진은 리턴한다 (1622).
포제시브 매칭 타입이 아니면, 그래프 워크 엔진은 노드 매칭 타입이 “올 (all)” 또는 “올 매칭 (all-match)” 노드인지 결정하고 노드를 가변 카운트 올 매칭 노드로서 프로세스하고 (1620), 이는 도 20에 더 상세히 설명된다. 그 후 그래프 워크 엔진은 리턴한다 (1622).
도 17은 가변 카운트 레이지 노드를 프로세싱하는 예시적인 실시예를 도시하는 흐름도 (1700) 이다. 가변 카운트 노드의 포맷은 도 25와 관련하여 상기 기술되었고, 가변 카운트 스택 엔트리의 포맷은 도 29와 관련하여 상기 기술되었다. 도 17과 관련하여, 흐름도 (1700) 는 도 16과 관련하여 기술된 가변 카운트 레이지 노드를 프로세싱하는 단계 (1614) 의 확장이다.
그래프 워크 엔진이 가변 카운트 레이지 노드의 프로세싱을 시작한다 (1702). 그래프 워크 엔진은 노드가 런 스택 엔트리로부터 판독되는지 여부를 결정한다 (1704). 노드가 런 스택 엔트리로부터 판독되지 않으면, 이는 노드가 처음으로 프로세스된다는 것을 의미하고, 그래프 워크 엔진은 카운트 (예를 들어, 도 25의 카운트 값 (2510)) 가 0보다 큰지 여부를 결정하고, 0보다 크면, 상기 설명된 바와 같이 모든 관련 정보가 채워진 런 스택 엔트리 (도 29, 2900) 는 자신의 복제 비트 (예를 들어, 도 29의 복제 비트 (2912)) 를 “1” 로 셋한다 (1706). 그 후 그래프 워크 엔진은 리턴한다 (1724). 푸싱된 런 스택 엔트리는 그래프 워크 엔진이 리턴 경로를 기억하도록 하고 다음 노드 어드레스에 위치된 다음 노드로 워킹을 계속한다 (예를 들어, 도 25의 2508). 다음 노드 경로로 워킹하면서 매칭이 발견되면, 복제 비트를 “1” 로 셋하고, 이는 노드들이 런 스택으로부터 팝핑되고 폐기되게 한다. 매칭이 발견되지 않으면, 노드들은 런 스택으로부터 팝핑될 때 프로세스될 수 있다.
노드가 런 스택 엔트리로부터 판독되면 (1704), 그 후 그래프 워크 엔진은 프로세스될 페이로드의 적어도 하나 이상의 바이트가 있는지 여부를 결정한다 (1708). 페이로드에 더 이상 바이트들이 없다면 (1708), 그래프 워크 엔진은 세이브 버퍼/스택으로 노드 정보와 함께 스택 엔트리 (도 29, 2900) 를 푸싱하고 (1710), 결과적인 워크 종료 비트를 “참” 으로 셋하고 (1712), 리턴한다 (1724). 노드를 세이브 버퍼/스택 (1710) 에 푸싱하는 것은 그래프 워크 엔진이 동일한 애플리케이션 플로우에 속하는 후속 패킷을 프로세스할 때, 세이브 버퍼/스택으로부터 매칭의 이전 프로그레스 (progress) 를 로딩할 수 있고 매칭을 재시작할 수 있도록 매칭의 프로그레스를 세이브한다.
페이로드가 런 아웃되지 않았으면 (즉, 페이로드에 프로세스될 적어도 1 바이트가 있다면) (1708), 그래프 워크 엔진은 도 29의 엘리먼트 (2906) 를 검사함으로써 가변 카운트 노드가 캐릭터 클래스 노드인지 또는 캐릭터 노드인지 여부를 결정한다 (1714). 가변 카운트 노드가 가변 카운트 캐릭터 클래스 노드이면 (1714), 가변 카운트 캐릭터 클래스 노드의 도 29의 엘리먼트 (2906) 에 저장된 캐릭터 클래스 인덱스를 사용하여 비트맵/마스크를 판독한다 (1720). 그 후, 그래프 워크 엔진은 페이로드로부터 1 바이트를 페치하고, 페이로드로부터의 바이트를 비트맵/마스크에 대한 인덱스로 사용하여 비트맵/마스크의 대응하는 엔트리를 비교한다 (1722). 그래프 워크 엔진은 엔트리가 셋되면 매칭을 결정한다.
한편, 가변 카운트 노드가 가변 카운트 캐릭터 노드이면 (1714), 그래프 워크 엔진은 페이로드로부터 1 바이트를 페치하고 이를 노드에 저장된 도 29의 엘리먼트 (2906) 와 매칭한다 (1716).
노드가 가변 카운트 캐릭터 클래스 노드인지 또는 가변 카운트 캐릭터 노드인지 여부를 결정한 후 (1714) 결정에 응답하여 (각각 1720 및 1722 또는 1716), 그래프 워크 엔진은 바이트가 엘리먼트와 매칭하는지 결정한다 (1718). 매칭한다면, 그래프 워크 엔진은 카운트 (예를 들어, 도 29의 카운트 값 (2910)) 를 1만큼 감소시키고 (1705), 카운트가 0보다 크다면 셋된 복제 비트 (예를 들어, 도 29의 복제 비트 (2912)) 로 런 스택 엔트리 (예를 들어, 도 29의 2900) 를 푸싱하고 (1706), 리턴한다 (1724). 카운트가 0과 같다면, 런 스택으로 엔트리가 푸싱되지 않는다. 매칭하지 않는다면, 그래프 워크 엔진은 결과적인 워크 종료 비트를 “참” 으로 셋하고 (1712), 리턴한다 (1724).
도 18은 가변 카운트 그리디 노드를 프로세스하는 예시적인 실시예를 도시하는 흐름도 (1800) 이다. 가변 카운트 노드의 포맷은 도 25와 관련하여 상기 기술되었고, 가변 카운트 스택 엔트리의 포맷은 도 29와 관련하여 상기 기술되었다. 도 18과 관련하여, 흐름도 (1800) 는 도 16과 관련하여 기술된 가변 카운트 그리디 노드를 프로세싱하는 단계 (1616) 의 확장이다.
그래프 워크 엔진은 가변 카운트 그리디 노드의 프로세싱을 시작한다 (1802). 그래프 워크 엔진은 노드가 런 스택 엔트리로부터 판독되는지 여부를 결정한다 (1804). 런 스택 엔트리로부터 판독되면, 그래프 워크 엔진은 런 스택 엔트리의 카운트 (예를 들어, 도 29의 카운트 값 (2910)) 를 1만큼 감소시킨다 (1806). 그 후, 카운트 (예를 들어, 도 29의 카운트 값 (2910)) 가 0보다 크면, 셋된 복제 비트를 갖는 런 스택 엔트리를 런 스택으로 푸싱한다 (1808). 그 후 그래프 워크 엔진은 리턴한다 (1818).
런 스택 엔트리가 런 스택으로부터 판독되지 않으면 (즉, 노드가 처음으로 프로세스되면) (1804), 그래프 워크 엔진은 도 25의 엘리먼트 (2506) 를 검사함으로써 가변 카운트 노드가 가변 카운트 캐릭터 클래스 노드인지 또는 가변 카운트 캐릭터 노드인지 여부를 결정한다 (1810). 가변 카운트 노드가 가변 카운트 캐릭터 클래스 노드이면 (1810), 도 25의 엘리먼트 (2506) 를 판독함으로써 가변 카운트 캐릭터 클래스 노드에 저장된 캐릭터 클래스 인덱스에 대응하는 비트맵/마스크를 판독한다 (1814). 그 후, 그래프 워크 엔진은 페이로드로부터 1 바이트를 페치하고 비트맵/마스크에 대한 인덱스로서 페이로드로부터의 바이트를 사용함으로써 비트맵/마스크의 대응하는 엔트리와 비교하고, 노매칭이거나 페이로드에서 더 이상 이용가능한 바이트들이 없을 때까지, 또는 매칭된 바이트들의 수가 카운트 값 (도 25의 2510) 과 같아질 때까지 바이트들의 매칭을 계속한다 (1816). 그 후, 그래프 워크 엔진은 매칭된 가변 카운트 노드의 바이트들의 수로서 런 스택 엔트리에 저장될 카운트 변수 (도 29의 2910) 를 할당한다 (1817). 그 후, 런 스택 엔트리의 카운트가 0보다 크면, 그래프 워크 엔진은 1로 셋된 복제 비트로 런 스택 엔트리 (2900, 도 29) 를 푸싱한다 (1808). 런 스택 엔트리의 카운트가 0과 같으면, 그래프 워크 엔진은 런 스택 엔트리를 푸싱하지 않는다. 그 후 그래프 워크 엔진은 리턴한다 (1818).
노드가 가변 카운트 캐릭터 노드이면 (1810), 그래프 워크 엔진은 페이로드로부터 바이트들을 페치하고, 매칭이 실패하거나, 페이로드가 런 아웃되거나, 매칭된 바이트들의 수가 카운트 (2510, 도 25) 와 같아질 때까지 노드 엘리먼트 (2506, 도 25) 에 저장된 캐릭터와 바이트들을 매칭한다. 그 후, 그래프 워크 엔진은 매칭된 가변 카운트 노드의 바이트들의 수로서 런 스택 엔트리에 저장될 카운트 값 (예를 들어, 도 29의 카운트 값 (2910)) 을 할당한다 (1817).
도 19는 가변 카운트 포제시브 노드를 프로세스하는 예시적인 실시예를 도시하는 흐름도 (1900) 이다. 가변 카운트 노드의 포맷은 도 25와 관련하여 상기 기술되었고, 가변 카운트 스택 엔트리의 포맷은 도 29와 관련하여 상기 기술되었다. 도 19와 관련하여, 흐름도 (1900) 는 도 16과 관련하여 기술된 가변 카운트 포제시브 노드를 프로세싱하는 단계 (1618) 의 확장이다.
도 19와 관련하여, 그래프 워크 엔진은 가변 카운트 노드의 프로세싱을 시작한다 (1902). 그래프 워크 엔진은 도 25의 엘리먼트 (2506) 를 검사함으로써 노드가 가변 카운트 캐릭터 클래스 노드인지 또는 가변 카운트 캐릭터 노드인지 여부를 결정한다 (1904). 노드가 가변 카운트 캐릭터 클래스 노드이면 (1904), 가변 카운트 캐릭터 클래스 노드 엘리먼트 (2506, 도 25) 에 저장된 캐릭터 클래스 인덱스에 대응하는 비트맵/마스크를 판독한다. 그 후, 그래프 워크 엔진은 페이로드로부터 바이트들을 페치하고 비트맵/마스크에 대한 인덱스로서 페이로드로부터의 바이트를 사용함으로써 비트맵/마스크의 대응하는 엔트리와 비교하고, 노매칭이거나 페이로드에서 더 이상 이용가능한 바이트들이 없을 때까지, 또는 매칭된 바이트들의 수가 카운트 (2510, 도 25) 와 같아질 때까지 바이트들의 매칭을 계속한다.
노드가 가변 카운트 캐릭터 노드 (1904) 이면, 그래프 워크 엔진은 페이로드로부터 1 바이트를 페치하고 이를 노드에 저장된 엘리먼트 (2506, 도 25) 와 비교하고 노매칭이거나 페이로드에서 더 이상 이용가능한 바이트들이 없을 때까지, 또는 매칭된 바이트들의 수가 카운트 (2510, 도 25) 와 같아질 때까지 바이트들의 매칭을 계속한다 (1906).
페이로드로부터의 바이트들을 캐릭터 클래스 또는 값/캐릭터/레터에 매칭한 후 (각각 1916 또는 1906), 그래프 워크 엔진은 페이로드에 나머지 바이트들이 있는지 여부를 결정한다 (1908). 그래프 워크 엔진이 런 아웃된 페이로드를 가지면 (즉, 나머지 바이트들이 없으면) (1908), 그래프 워크 엔진은 노드를 세이브 버퍼/스택으로 푸싱하고 (1910), 워크 종료 비트를 “참” 으로 셋하고 (1912), 리턴한다 (1918). 그래프 워크 엔진이 런 아웃된 페이로드를 갖지 않으면 (즉, 나머지 바이트들이 있으면) (1908), 그래프 워크 엔진은 리턴한다 (1918).
도 20은 가변 카운트 올 매칭 노드를 프로세스하는 예시적인 실시예를 도시하는 흐름도 (2000) 이다. 가변 카운트 노드의 포맷은 도 25와 관련하여 상기 기술되었다. 도 20과 관련하여, 흐름도 (2000) 는 도 16과 관련하여 기술된 가변 카운트 올 매칭 노드를 프로세싱하는 단계 (1620) 의 확장이다.
그래프 워크 엔진은 가변 카운트 노드를 프로세싱하기 시작한다 (2002). 그래프 워크 엔진은 노드가 런 스택 엔트리로부터 판독되는지 여부를 결정한다 (2004). 노드가 런 스택으로부터 판독되지 않으면 (2004), 셋되지 않은 (예를 들어, 0으로 셋) 복제 비트 (도 29, 2912) 로 런 스택 엔트리 (도 29, 2900) 를 푸싱한다 (2007). 그 후 그래프 워크 엔진은 리턴한다 (2020).
노드가 런 스택으로부터 판독되면 (2004), 그래프 워크 엔진은 런 아웃된 페이로드를 갖는지 여부를 결정한다 (예를 들어, 페이로드에 바이트들이 남아있지 않은지) (2005). 페이로드가 런 아웃되지 않았다면, 또는 페이로드에 바이트들이 남아 있다면, 그래프 워크 엔진은 도 29의 엘리먼트 (2906) 를 검사함으로써 가변 카운트 노드가 가변 카운트 캐릭터 클래스 노드인지 또는 가변 카운트 캐릭터 노드 인지 여부를 결정한다 (2006).
노드가 가변 카운트 캐릭터 클래스 노드이면 (2006), 그래프 워크 엔진은 가변 카운트 캐릭터 클래스 노드에 저장된 캐릭터 클래스 인덱스에 대응하는 비트맵/마스크를 판독한다 (2012). 그 후, 그래프 워크 엔진은 페이로드로부터 1 바이트를 페치하고 비트맵/마스크에 대한 인덱스로서 페이로드로부터의 바이트를 사용함으로써 비트맵/마스크의 대응하는 엔트리와 비교한다 (2014).
노드가 가변 카운트 캐릭터 노드이면 (2006), 그래프 워크 엔진은 페이로드로부터 1 바이트를 페치하고 노드에 저장된 값/캐릭터/레터와 비교한다 (2008).
페이로드의 바이트를 캐릭터 클래스 또는 캐릭터에 매칭한 후 (각각 2014 또는 2008), 그래프 워크 엔진은 바이트가 캐릭터 클래스 또는 캐릭터와 매칭하는지 여부를 결정한다 (2010). 매칭하면 (2010), 그래프 워크 엔진은 카운트 (즉, 카운트 값 (2910), 도 29) 를 1만큼 감소시킨다 (2022). 카운트가 0보다 크면, 그래프 워크 엔진은 셋되지 않은 (예를 들어, 0으로 셋) 복제 비트 (도 29, 2912) 로 런 스택 엔트리 (도 29, 2900) 를 푸싱하고 (2007), 리턴한다 (2020). 카운트가 0과 같으면, 그래프 워크 엔진은 어떠한 스택 엔트리도 푸싱하지 않고, 리턴한다 (2020). 매칭하지 않으면, 그래프 워크 엔진은 워크 종료 비트를 “참” 으로 셋하고 (2018), 리턴한다 (2020).
그래프 워크 엔진이 런 아웃된 페이로드를 가지면, 또는 페이로드에 남아 있는 바이트들이 없으면 (2005), 그래프 워크 엔진은 노드를 세이브 버퍼/스택에 푸싱한다 (2016). 그 후 그래프 워크 엔진은 워크 종료를 “참” 으로 셋 하고(2018), 리턴한다 (2020).
도 21은 캐릭터 클래스에 채택된 비트맵/마스크의 예시적인 실시예를 도시하는 표 (2100) 이다. 표 (2100) 는 캐릭터 클래스 인덱스 (2102), 캐릭터 클래스 정의 (2104), 및 ASCII 값 (2106) 을 도시한다. 캐릭터 클래스 표를 구현하는 일 실시예에서, 메모리는 캐릭터 클래스 인덱스 (2102) 의 값들, 캐릭터 클래스 정의 (2104), 또는 ASCII 값 (2106) 을 저장하지 않을 수 있지만, 이들은 캐릭터 클래스 정의들과 캐릭터 클래스 행렬이 얼마나 관련되는지 및 인덱스들이 캐릭터 클래스 행렬에 액세스하는 방법을 예시하기 위해 도시된다. 도 21은 단지 예시적인 실시예인 5개의 캐릭터 클래스 정의를 도시한다. 다른 실시예들이 상이한 종류의 캐릭터 클래스들을 포함할 수 있고, 고유 캐릭터 클래스들의 수는 임의의 수일 수 있다.
캐릭터 클래스 인덱스 1이 할당된 캐릭터 클래스 [^\n] 는 , “^” 연산자는 이어지는 모든 것의 역 (inverse) 을 생성하고, “\n” 는 뉴 라인을 표시하기 때문에 뉴 라인을 제외하고 모든 캐릭터를 매칭하도록 변환한다. 따라서, 12인 뉴 라인에 대응하는 ASCII 값을 제외하고 비트맵/마스크의 모든 비트는 “1” 로 셋 된다. 따라서, 12의 값을 갖는 바이트를 프로세싱하는 노드는 이 캐릭터 클래스 CharacterClassMatrix[1][12] 에 액세스하고, 여기서 “1” 은 캐릭터 클래스 인덱스이고 “12” 는 캐릭터 클래스에 대한 페이로드의 값이다. 표에서 이 위치의 값이 “0” 이기 때문에, 페이로드는 매칭하지 않는다. 그러나, 임의의 다른 페이로드가 CharacterClassMatrix[1][PayloadByte] 로 로딩되어 매칭을 유발한다.
캐릭터 클래스 인덱스 2가 할당된 캐릭터 클래스 [a-z] 는 ‘a’ 내지 ‘z’ 의 범위의 모든 캐릭터를 매칭하도록 변환한다. 따라서, 캐릭터 클래스 인덱스 2에 대응하는 비트맵/마스크에서, 97 내지 122의 값들은 “1” 로 셋되고 모든 다른 값들은 “0” 으로 셋된다. 따라서, ASCII 값 “c” 를 나타내는 페이로드 세그먼트를 프로세싱하는 노드는 CharacterClassMatrix[2][99] 에 액세스하고, 여기서 “2” 는 캐릭터 클래스 인덱스이고 “99” 는 페이로드의 값이다. 표에서 이 위치의 값이 “1” 이기 때문에, 페이로드는 캐릭터 클래스에 매칭한다. 그러나, 캐릭터 클래스에 대한 97 - 122의 범위 밖의 페이로드들은 매칭하지 않는다. 예를 들어, 페이로드가 숫자 “4” 이기 때문에, 노드는 노매칭을 표시하는“0”의 값을 갖는 CharacterClassMatrix[2][52] 에 액세스한다.
캐릭터 클래스 인덱스 3이 할당된 캐릭터 클래스 [^a-z] 는 ‘a’ 내지 ‘z’ 의 범위 이외의 모든 값/캐릭터/레터에 매칭하도록 변환한다. 따라서, 캐릭터 클래스 인덱스 3에 대응하는 비트맵/마스크에서, 97 내지 122의 값들은 “0” 으로 셋되고 다른 모든 값들은 “1” 로 셋된다. 따라서, ASCII 값 “c” 를 나타내는 페이로드 세그먼트를 프로세싱하는 노드는 CharacterClassMatrix[3][99] 에 액세스하고, 여기서 “3” 은 캐릭터 클래스 인덱스이고 “99” 는 페이로드의 값이다. 표에서 이 위치의 값이 “0” 이기 때문에, 페이로드는 캐릭터 클래스에 대해 노매칭이다. 그러나, 캐릭터 클래스에 대한 97 - 122 범위의 밖의 페이로드들은 매칭한다. 예를 들어, 페이로드가 숫자 “4” 이면, 노드는 매칭을 표시하는 “1” 의 값을 갖는 CharacterClassMatrix[3][52] 에 액세스한다.
캐릭터 클래스 인덱스 4가 할당된 캐릭터 클래스 [0-9] 는 ‘0’ 내지 ‘9’ 의 범위의 모든 값/캐릭터/레터를 매칭하도록 변환한다. 따라서, 캐릭터 클래스 인덱스 4에 대응하는 비트맵/마스크에서, 48 내지 57의 값들은 “1” 및 모든 다른 값들은 “0” 으로 셋된다. 따라서, ASCII 값 “D” 를 나타내는 페이로드 세그먼트를 프로세싱하는 노드는 CharacterClassMatrix[4][68] 에 액세스하고, 여기서 “4” 는 캐릭터 클래스 인덱스이고 “68” 은 페이로드의 값이다. 표에서 이 위치의 값이 “0” 이기 때문에, 페이로드는 캐릭터 클래스에 대해 노매칭이다. 그러나, 이 캐릭터 클래스에 대해 48 내지 57의 범위 내의 페이로드들은 매칭한다. 예를 들어, 페이로드가 숫자 “4” 이면, 노드는 매칭을 표시하는 “1”의 값을 갖는 CharacterClassMatrix[4][52] 에 액세스한다.
캐릭터 클래스 인덱스 5가 할당되는, 캐릭터 클래스 [ABCabc] 는 개별적인 값들/캐릭터들/레터들 “A”, “B”, “C”, “a”, “b”, 및 “c” 를 매칭하도록 변환된다. 따라서, 캐릭터 클래스 인덱스 5에 대응하는 비트맵/마스크에서, 65, 66, 67, 97, 98 및 99의 값들은 “1” 로 셋되고 모든 다른 값들은 “0” 으로 셋된다. 따라서, ASCII 값 “c” 를 나타내는 페이로드 세그먼트를 프로세싱하는 노드는 CharacterClassMatrix[5][99] 에 액세스하고, “5” 는 캐릭터 클래스 인덱스이고 “99” 는 페이로드의 값이다. 표에서 이 위치의 값은 “1” 이기 때문에, 페이로드는 캐릭터 클래스에 매칭한다. 그러나, 캐릭터 클래스에 대한 값들 65, 66, 67, 97, 98 및 99 이외의 페이로드는 매칭하지 않는다. 예를 들어, 페이로드가 숫자 “4” 이면, 노드는 노매칭을 표시하는 “0” 의 값을 갖는 CharacterClassMatrix[5][52] 에 액세스한다.
일 실시예에서, 캐릭터 클래스 행렬은 임의의 데이터 유형 또는 데이터 길이로 사용될 수 있다. 상기 기술된 실시예에서, 페이로드들은 7-비트 또는 8-비트일 수 있는 캐릭터들이다. 그러나, 임의의 길이의 데이터가 채택될 수 있고 캐릭터의 형태일 필요는 없다. 데이터의 다른 인코딩 (encoding) 이 채택될 수 있다. 이러한 표의 다른 애플리케이션 예들은 비디오 프로세싱, 오디오 프로세싱, 이진 탐색, 또는 임의의 탐색 애플리케이션이다.
모든 특허들, 공개된 출원들 및 본원에 언급된 참조들의 교시사항들은 그 전체가 참조로서 인용되었다.
본 발명이 예시적인 실시예들을 참조하여 특정하게 도시되고 기술되었지만, 형태 및 상세들의 다양한 변화들이 첨부된 청구항들에 의해 포괄된 본 발명의 범위를 벗어나지 않고 이루어질 수 있다는 것이 당업자에게 이해될 것이다.

Claims (60)

  1. 비결정성 유한 오토마톤 (NFA; Non-Deterministic finite automata) 그래프로 패턴을 컴파일링하는 방법에 있어서,
    복수의 엘리먼트들 및 복수의 노드 타입들에 대하여 패턴을 검사하는 (examining) 단계로서, 노드 타입 각각은 엘리먼트에 대응하고, 상기 패턴의 엘리먼트 각각은 적어도 0회 매칭되고, 상기 엘리먼트는 캐릭터 (character), 캐릭터 클래스 (character class) 또는 스트링 (string) 을 나타내는, 상기 패턴을 검사하는 단계;
    상기 NFA 그래프의 복수의 노드들을 생성하는 단계로서, 상기 복수의 노드들 각각은 복수의 엘리먼트들 중 하나와 매칭하도록 구성되고, 상기 노드는 상기 엘리먼트에 대응하는 상기 노드 타입, 상기 NFA 그래프 내에서의 다음 노드 어드레스, 카운트 값, 및 상기 엘리먼트를 포함하는, 상기 NFA 그래프의 복수의 노드들을 생성하는 단계를 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  2. 제 1 항에 있어서,
    상기 노드 타입은 가변 카운트, 고정 카운트, 고정 카운트 및 가변 카운트, 캐릭터, 케이스 인센서티브 캐릭터 (case insensitive character), 캐릭터 클래스, 케이스 센서티브 스트링, 케이스 인센서티브 스트링, 마크드 (marked) 또는 스플릿 (split) 중 하나인, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  3. 제 2 항에 있어서,
    상기 노드 타입이 가변 카운트이면, 상기 노드는 엘리먼트 타입을 더 포함하고, 상기 엘리먼트 타입은 캐릭터, 캐릭터 클래스, 또는 스트링 노드인, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  4. 제 2 항에 있어서,
    상기 노드 타입이 고정 카운트이면, 상기 노드는 엘리먼트 타입을 더 포함하고, 상기 엘리먼트 타입은 캐릭터, 캐릭터 클래스, 또는 스트링 노드인 엘리먼트 타입인, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  5. 제 1 항에 있어서,
    상기 노드 타입에 대하여 패턴을 검사하는 단계는 가변 카운트 노드 타입, 고정 카운트 노드 타입, 고정-가변 카운트 노드 타입, 캐릭터 노드 타입, 케이스 인센서티브 캐릭터 노드 타입, 캐릭터 클래스 노드 타입, 스트링 노드 타입, 케이스 인센서티브 스트링 노드 타입, 마크드 노드 타입, 및 스플릿 노드 타입 중 적어도 하나의 표시 (indication) 에 대해 상기 패턴을 매칭하는 단계를 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  6. 제 1 항에 있어서,
    상기 패턴은 복수의 값들의 패턴이며, 상기 복수의 노드 타입들은, 상기 복수의 값들의 패턴의 일부를 나타내는 스트링 노드 타입을 포함하고, 상기 복수의 값들의 각각의 값은 바이트, 레터 (letter), 또는 캐릭터 중 적어도 하나인, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  7. 제 6 항에 있어서,
    스트링 노드 타입에 대하여 패턴을 검사하는 단계는 상기 패턴의 일부가 연속하는 값들을 표시하는지를 결정하는 단계를 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  8. 제 7 항에 있어서,
    상기 패턴의 상기 일부가 연속하는 값들을 표시한다면, 스트링 노드 타입에 대하여 패턴을 검사하는 단계는 상기 패턴의 일부의 연속하는 값들이 논-스트링 노드 타입들 (non-string node types) 을 개입시키지 않는지를 결정하는 단계를 더 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  9. 제 1 항에 있어서,
    상기 복수의 노드 타입들은, 상기 패턴의 일부가 엘리먼트에 대해 가변 회수 (variable number of times) 매칭하는 것을 나타내는 가변 카운트 노드 타입을 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  10. 제 9 항에 있어서,
    가변 카운트 노드 타입에 대하여 패턴을 검사하는 단계는 상기 패턴의 일부가 상기 엘리먼트에 대해 가변 회수 매칭하는 것을 표시하는지를 결정하는 단계를 더 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  11. 제 10 항에 있어서,
    상기 가변 회수는 유한 회수 또는 무한 회수 중 적어도 하나인, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  12. 제 11 항에 있어서,
    상기 패턴은 상기 패턴의 일부가 상기 엘리먼트에 대해 무한 회수 매칭하는 것을 표시한다는 결정을 트리거하기 위해 무한함 (infinity) 을 나타내는 심볼을 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  13. 제 10 항에 있어서,
    가변 카운트 노드 타입에 대하여 패턴을 검사하는 단계는 상기 패턴의 일부가 상기 엘리먼트에 대해 적어도 0회 매칭하는 것을 표시하는지를 결정하는 단계를 더 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  14. 제 1 항에 있어서,
    상기 복수의 노드 타입들은, 상기 패턴의 일부가 엘리먼트에 대해 고정된 회수 매칭하는 것을 나타내는 고정 카운트 노드 타입을 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  15. 제 1 항에 있어서,
    상기 복수의 노드 타입들은, 상기 패턴의 일부가 상기 엘리먼트에 대해 고정된 회수에 이어 가변 회수 매칭하는 것을 나타내는 고정-가변 카운트 노드 타입을 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  16. 제 15 항에 있어서,
    고정-가변 카운트 노드 타입에 대하여 패턴을 검사하는 단계는 상기 패턴의 일부가 상기 엘리먼트에 대해 적어도 1회 그리고 최대 유한 회수 또는 무한 회수 매칭하는 것을 표시하는지를 결정하는 단계를 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  17. 제 16 항에 있어서,
    상기 패턴은 상기 패턴의 일부가 상기 엘리먼트에 대해 무한 회수 매칭하는 것을 표시한다는 결정을 트리거하기 위해 무한함을 나타내는 심볼을 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  18. 제 1 항에 있어서,
    상기 복수의 노드 타입들은 상기 패턴의 일부가 적어도 하나의 값의 불리언-or (Boolean-or) 연산을 채택함으로써 엘리먼트에 대해 매칭하는 것을 나타내는 캐릭터 클래스의 노드 타입을 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  19. 제 18 항에 있어서,
    복수의 캐릭터 클래스들을 저장하는 단계를 더 포함하고, 상기 복수의 캐릭터 클래스들의 캐릭터 클래스 각각은 마스크로 저장되고, 상기 마스크에서의 비트들은 상기 캐릭터 클래스에서 가능한 캐릭터 각각에 대응하고, 상기 마스크에서의 비트는 대응하는 캐릭터가 상기 캐릭터 클래스의 일부일 때 셋 (set) 되고, 상기 캐릭터가 상기 캐릭터 클래스의 일부가 아닐 때 셋되지 않는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  20. 제 19 항에 있어서,
    상기 노드에 포함되는 엘리먼트는 저장된 상기 복수의 캐릭터 클래스들의 고유 (unique) 캐릭터 클래스에 대응하는 캐릭터 클래스 인덱스를 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  21. 제 20 항에 있어서,
    상기 캐릭터 클래스 인덱스 및 페이로드 세그먼트 (payload segment) 는 상기 마스크에 대한 인덱스로서 그래프 워크 엔진 (graph walk engine) 에 의해 채용되며, 상기 그래프 워크 엔진에 의해 인덱스된 상기 마스크가 세트된 상기 페이로드 세그먼트에 대응하는 비트를 포함하면, 상기 그래프 워크 엔진은 상기 페이로드 세그먼트가 상기 캐릭터 클래스에 매칭된다고 결정하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  22. 제 1 항에 있어서,
    상기 복수의 노드 타입들은 상기 노드가 그리디 노드 (greedy node), 레이지 노드 (lazy node), 포제시브 노드 (possessive node), 또는 올 매칭 노드 (all match node) 인지를 더 표시하는 가변 카운트 노드 타입을 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  23. 제 22 항에 있어서,
    상기 노드가 상기 그리디 노드인 것을 더 표시하는 가변 카운트 노드 타입, 및 상기 노드가 상기 포제시브 노드인 것을 더 표시하는 가변 카운트 노드 타입 모두는 페이로드에서의 가장 긴 가능한 매칭 상에서 매칭하도록 그래프 워크 엔진에 지시하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  24. 제 22 항에 있어서,
    상기 레이지 노드를 더 표시하는 가변 카운트 노드 타입은 페이로드에서의 가장 짧은 가능한 매칭 상에서 매칭하도록 그래프 워크 엔진에 지시하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  25. 제 22 항에 있어서,
    상기 올 매칭 노드를 더 표시하는 가변 카운트 노드 타입은 페이로드에서 모든 매칭 상에서 매칭하도록 그래프 워크 엔진에 지시하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  26. 제 1 항에 있어서,
    상기 노드 타입 및 상기 엘리먼트에 대하여 패턴을 검사하는 단계는 상기 패턴의 적어도 일부를 캐릭터 클래스 노드 타입 및 대응하는 엘리먼트로서 식별하는 단계를 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  27. 제 26 항에 있어서,
    상기 노드 타입 및 상기 엘리먼트에 대하여 패턴을 검사하는 단계는 상기 패턴의 적어도 두 부분들을 캐릭터 클래스 노드 타입 및 대응하는 엘리먼트로서 식별하는 단계를 포함하고,
    상기 부분들 각각에 대하여 비트맵을 생성하는 단계를 더 포함하고, 상기 비트맵의 비트 각각은 상기 엘리먼트와 매칭하는 값을 나타내고, 비트맵 각각은 고유 캐릭터 클래스 인덱스와 연관되는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  28. 제 27 항에 있어서,
    상기 적어도 두 부분들 중 제 1 부분 및 상기 적어도 두 부분들 중 제 2 부분이 동일한 대응하는 엘리먼트를 갖는다면, 상기 제 1 부분 및 제 2 부분을 동일한 비트맵과 연관시키는 단계를 더 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  29. 제 28 항에 있어서,
    상기 패턴을 검사하는 단계는 복수의 패턴들을 검사하는 단계를 포함하고, 상기 제 1 부분 및 제 2 부분은 검사된 복수의 패턴들의 개별 패턴들로 존재하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  30. 제 1 항에 있어서,
    상기 패턴을 검사하는 단계는 적어도 하나의 메타-캐릭터를 찾는 단계를 포함하고, 상기 복수의 노드들을 생성하는 단계는 상기 적어도 하나의 메타-캐릭터에 기초하여 상기 노드 타입 또는 상기 카운트 값 중 적어도 하나를 결정하는 단계를 포함하는, 비결정성 유한 오토마톤 그래프로 패턴을 컴파일링하는 방법.
  31. 비결정성 유한 오토마톤 (NFA; Non-Deterministic finite automata) 그래프로 패턴을 컴파일하기 위한 컴퓨터 시스템에 있어서,
    복수의 엘리먼트들 및 복수의 노드 타입들에 대하여 패턴을 검사하도록 구성된 패턴 결정 모듈로서, 노드 타입 각각은 엘리먼트에 대응하고, 상기 패턴의 엘리먼트 각각은 적어도 0회 매칭되고, 상기 엘리먼트는 캐릭터, 캐릭터 클래스 또는 스트링을 나타내는, 상기 패턴 결정 모듈; 및
    상기 NFA 그래프의 복수의 노드들을 생성하도록 구성된 노드 생성 모듈로서, 상기 복수의 노드들 각각은 상기 복수의 엘리먼트들 중 하나와 매칭하도록 구성되고, 상기 노드는 상기 엘리먼트에 대응하는 상기 노드 타입, 상기 NFA 그래프 내에서의 다음 노드 어드레스, 카운트 값, 및 상기 엘리먼트를 포함하는, 상기 노드 생성 모듈을 포함하는, 컴퓨터 시스템.
  32. 제 31 항에 있어서,
    상기 노드 타입은 가변 카운트, 고정 카운트, 고정 카운트 및 가변 카운트, 캐릭터, 케이스 인센서티브 캐릭터 (case insensitive character), 캐릭터 클래스, 케이스 센서티브 스트링, 케이스 인센서티브 스트링, 마크드 (marked) 또는 스플릿 (split) 중 하나인, 컴퓨터 시스템.
  33. 제 32 항에 있어서,
    상기 노드 타입이 가변 카운트이면, 상기 노드는 엘리먼트 타입을 포함하고, 상기 엘리먼트 타입은 캐릭터, 캐릭터 클래스, 또는 스트링 노드인, 컴퓨터 시스템.
  34. 제 32 항에 있어서,
    상기 노드 타입이 고정 카운트이면, 상기 노드는 엘리먼트 타입을 포함하고, 상기 엘리먼트 타입은 캐릭터, 캐릭터 클래스, 또는 스트링 노드인, 컴퓨터 시스템.
  35. 제 31 항에 있어서,
    상기 노드 타입에 대한 패턴을 검사하기 위해, 상기 패턴 결정 모듈은 또한 가변 카운트 노드 타입, 고정 카운트 노드 타입, 고정-가변 카운트 노드 타입, 캐릭터 노드 타입, 케이스 인센서티브 캐릭터 노드 타입, 캐릭터 클래스 노드 타입, 스트링 노드 타입, 케이스 인센서티브 스트링 노드 타입, 마크드 노드 타입, 및 스플릿 노드 타입 중 적어도 하나의 표시에 대해 상기 패턴을 매칭하도록 구성되는, 컴퓨터 시스템.
  36. 제 31 항에 있어서,
    상기 패턴은 복수의 값들의 패턴이고, 상기 복수의 노드 타입들은 복수의 값들의 패턴의 일부를 나타내는 스트링 노드 타입을 포함하고, 상기 복수의 값들의 각각의 값은 바이트, 레터 (letter), 또는 캐릭터 중 적어도 하나인, 컴퓨터 시스템.
  37. 제 36 항에 있어서,
    상기 스트링 노드 타입에 대한 패턴을 검사하기 위해, 상기 패턴 결정 모듈은 상기 패턴의 일부가 연속하는 값들을 표시하는지를 결정하도록 구성되는, 컴퓨터 시스템.
  38. 제 37 항에 있어서,
    상기 패턴의 일부가 연속하는 값들을 표시하면, 상기 스트링 노드 타입에 대한 패턴을 검사하기 위해, 상기 패턴 결정 모듈은 상기 패턴의 일부의 연속하는 값들은 논-스트링 노드 타입들 (non-string node types) 을 개입시키지 않는지를 결정하도록 더 구성되는, 컴퓨터 시스템.
  39. 제 31 항에 있어서,
    상기 복수의 노드 타입들은 상기 패턴의 일부가 엘리먼트에 대해 가변 회수 (variable number of times) 매칭하는 가변 카운트 노드 타입을 포함하는, 컴퓨터 시스템.
  40. 제 39 항에 있어서,
    상기 가변 카운트 노드 타입에 대한 패턴을 검사하기 위해, 상기 패턴 결정 모듈은 상기 패턴의 일부가 상기 엘리먼트에 대해 가변 회수 (variable number of times) 매칭하는 것을 표시하는지를 결정하도록 더 구성되는, 컴퓨터 시스템.
  41. 제 40 항에 있어서,
    상기 가변 회수는 유한 회수 또는 무한 회수 중 적어도 하나인, 컴퓨터 시스템.
  42. 제 41 항에 있어서,
    상기 패턴은 상기 패턴의 일부가 상기 엘리먼트에 대해 무한 회수 매칭하는 것을 표시한다는 결정을 트리거하기 위해 무한함을 나타내는 심볼을 포함하는, 컴퓨터 시스템.
  43. 제 40 항에 있어서,
    상기 가변 카운트 노드 타입에 대한 패턴을 검사하기 위해, 상기 패턴 결정 모듈은 또한 상기 패턴의 일부가 상기 엘리먼트에 대해 적어도 0회 매칭하는 것을 표시하는지를 결정하도록 더 구성되는, 컴퓨터 시스템.
  44. 제 31 항에 있어서,
    상기 복수의 노드타입들은 상기 패턴의 일부가 엘리먼트에 대해 고정된 회수 매칭하는 것을 나타내는 고정 카운트 노드 타입을 포함하는, 컴퓨터 시스템.
  45. 제 31 항에 있어서,
    상기 복수의 노드 타입들은 상기 패턴의 일부가 상기 엘리먼트에 대해 고정된 회수에 이어 가변 회수 매칭하는 것을 나타내는 고정 가변 카운트 노드 타입을 포함하는, 컴퓨터 시스템.
  46. 제 45 항에 있어서,
    상기 고정 가변 카운트 노드 타입에 대한 패턴을 검사하기 위해, 상기 패턴 결정 모듈은 또한 상기 패턴의 일부가 상기 엘리먼트에 대해 적어도 1회 그리고 최대 유한 회수 또는 무한 회수 매칭하는 것을 표시하는지를 결정하도록 구성되는, 컴퓨터 시스템.
  47. 제 46 항에 있어서,
    상기 패턴은 상기 패턴의 일부가 상기 엘리먼트에 대해 무한 회수 매칭하는 것을 표시한다는 결정을 트리거하기 위해 무한함을 나타내는 심볼을 포함하는, 컴퓨터 시스템.
  48. 제 31 항에 있어서,
    상기 복수의 노드 타입들은 상기 패턴의 일부가 적어도 하나의 값의 불리언-or (Boolean-or) 연산을 채택함으로써 엘리먼트에 대해 매칭하는 것을 나타내는 캐릭터 클래스의 노드 타입을 포함하는, 컴퓨터 시스템.
  49. 제 48 항에 있어서,
    복수의 캐릭터 클래스들을 저장하도록 구성된 캐릭터 클래스 저장 모듈을 더 포함하고, 상기 복수의 캐릭터 클래스들의 캐릭터 클래스 각각은 마스크로 저장되고, 상기 마스크에서의 비트들은 상기 캐릭터 클래스에서의 가능한 캐릭터 각각에 대응하고, 상기 마스크에서의 비트는 대응하는 캐릭터가 상기 캐릭터 클래스의 일부일 때 셋 (set) 되고, 상기 캐릭터가 상기 캐릭터 클래스의 일부가 아닐 때 셋되지 않는, 컴퓨터 시스템.
  50. 제 49 항에 있어서,
    상기 노드에 포함되는 엘리먼트는 고유 (unique) 캐릭터 클래스에 대응하는 캐릭터 클래스 인덱스인, 컴퓨터 시스템.
  51. 제 50 항에 있어서,
    상기 캐릭터 클래스 인덱스 및 페이로드 세그먼트 (payload segment) 는 상기 마스크에 대한 인덱스로서 그래프 워크 엔진에 의해 채용되며, 상기 그래프 워크 엔진에 의해 인덱스된 상기 마스크가 세트된 상기 페이로드 세그먼트에 대응하는 비트를 포함하면, 상기 그래프 워크 엔진은 상기 페이로드 세그먼트가 상기 캐릭터 클래스에 매칭된다고 결정하는, 컴퓨터 시스템.
  52. 제 31 항에 있어서,
    상기 복수의 노드 타입들은 상기 노드가 그리디 노드 (greedy node), 레이지 노드 (lazy node), 포제시브 노드 (possessive node), 또는 올 매칭 노드 (all match node) 인지를 더 표시하는 가변 카운트 노드 타입을 포함하는, 컴퓨터 시스템.
  53. 제 52 항에 있어서,
    상기 노드가 상기 그리디 노드인 것을 더 표시하는 가변 카운트 노드 타입, 및 상기 노드가 상기 포제시브 노드인 것을 더 표시하는 가변 카운트 노드 타입 모두는 페이로드에서의 가장 긴 가능한 매칭 상에서 매칭하도록 그래프 워크 엔진에 지시하는, 컴퓨터 시스템.
  54. 제 52 항에 있어서,
    상기 레이지 노드를 더 표시하는 가변 카운트 노드 타입은 페이로드에서의 가장 짧은 가능한 매칭 상에서 매칭하도록 그래프 워크 엔진에 지시하는, 컴퓨터 시스템.
  55. 제 52 항에 있어서,
    상기 올 매칭 노드를 더 표시하는 가변 카운트 노드 타입은 페이로드에서 모든 매칭 상에서 매칭하도록 그래프 워크 엔진에 지시하는, 컴퓨터 시스템.
  56. 제 31 항에 있어서,
    상기 패턴 결정 모듈은 상기 패턴의 적어도 일부를 캐릭터 클래스 노드 타입 및 대응하는 엘리먼트로서 식별하도록 더 구성되는, 컴퓨터 시스템.
  57. 제 56 항에 있어서,
    상기 패턴 결정 모듈은 상기 패턴의 적어도 두 부분들을 캐릭터 클래스 노드 타입 및 대응하는 엘리먼트로서 식별하고 상기 부분들 각각에 대하여 비트맵을 생성하도록 더 구성되고, 상기 비트맵의 비트 각각은 상기 엘리먼트와 매칭하는 값을 나타내고, 비트맵 각각은 고유 캐릭터 클래스 인덱스와 연관되는, 컴퓨터 시스템.
  58. 제 57 항에 있어서,
    상기 패턴 결정 모듈은 상기 적어도 두 부분들 중 제 1 부분 및 상기 적어도 두 부분들 중 제 2 부분이 동일한 대응하는 엘리먼트를 갖는다면, 상기 제 1 부분 및 제 2 부분을 동일한 비트맵과 연관시키도록 더 구성되는, 컴퓨터 시스템.
  59. 제 58 항에 있어서,
    상기 패턴 결정 모듈은 복수의 패턴들을 검사하도록 더 구성되고, 상기 제 1 부분 및 제 2 부분은 복수의 패턴들의 개별 패턴들로 존재할 수 있는, 컴퓨터 시스템.
  60. 제 31 항에 있어서,
    상기 패턴 결정 모듈은 또한 적어도 하나의 메타-캐릭터를 찾도록 구성되고, 상기 노드 생성 모듈은 상기 적어도 하나의 메타-캐릭터에 기초하여 상기 노드 타입 또는 상기 카운트 값 중 적어도 하나를 결정함으로써 상기 복수의 노드들을 생성하도록 구성되는, 컴퓨터 시스템.
KR1020140114469A 2013-08-30 2014-08-29 어드밴스드 피처를 갖는 정규 표현식 패턴에 대한 비결정성 유한 오토마톤 (nfa) 생성 KR101615915B1 (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201361872622P 2013-08-30 2013-08-30
US201361872612P 2013-08-30 2013-08-30
US61/872,622 2013-08-30
US61/872,612 2013-08-30
US14/186,978 US9563399B2 (en) 2013-08-30 2014-02-21 Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
US14/186,978 2014-02-21

Publications (2)

Publication Number Publication Date
KR20150026979A KR20150026979A (ko) 2015-03-11
KR101615915B1 true KR101615915B1 (ko) 2016-04-27

Family

ID=52584716

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140114469A KR101615915B1 (ko) 2013-08-30 2014-08-29 어드밴스드 피처를 갖는 정규 표현식 패턴에 대한 비결정성 유한 오토마톤 (nfa) 생성

Country Status (4)

Country Link
US (5) US9563399B2 (ko)
KR (1) KR101615915B1 (ko)
CN (2) CN104516940B (ko)
HK (2) HK1207179A1 (ko)

Families Citing this family (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9398033B2 (en) 2011-02-25 2016-07-19 Cavium, Inc. Regular expression processing automaton
WO2013020002A1 (en) 2011-08-02 2013-02-07 Cavium, Inc. Incremental update of rules for packet classification
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
US9426166B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for processing finite automata
US9563399B2 (en) 2013-08-30 2017-02-07 Cavium, Inc. Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
US9426165B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for compilation of finite automata
US10225855B2 (en) * 2013-10-28 2019-03-05 Lg Electronics Inc. Method and apparatus for transmitting and receiving signal for device-to-device terminal in wireless communication system
WO2015084360A1 (en) * 2013-12-05 2015-06-11 Hewlett-Packard Development Company, L.P. Regular expression matching
US9419943B2 (en) 2013-12-30 2016-08-16 Cavium, Inc. Method and apparatus for processing of finite automata
US9275336B2 (en) 2013-12-31 2016-03-01 Cavium, Inc. Method and system for skipping over group(s) of rules based on skip group rule
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
US9667446B2 (en) 2014-01-08 2017-05-30 Cavium, Inc. Condition code approach for comparing rule and packet data that are provided in portions
US10362093B2 (en) * 2014-01-09 2019-07-23 Netronome Systems, Inc. NFA completion notification
US9904630B2 (en) 2014-01-31 2018-02-27 Cavium, Inc. Finite automata processing based on a top of stack (TOS) memory
US9602532B2 (en) 2014-01-31 2017-03-21 Cavium, Inc. Method and apparatus for optimizing finite automata processing
US9438561B2 (en) 2014-04-14 2016-09-06 Cavium, Inc. Processing of finite automata based on a node cache
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
US9223551B1 (en) * 2014-07-22 2015-12-29 Here Global B.V. Rendergraph compilation method and use thereof for low-latency execution
EP3198474A1 (en) * 2014-09-26 2017-08-02 British Telecommunications Public Limited Company Improved pattern matching
US10776427B2 (en) 2014-09-26 2020-09-15 British Telecommunications Public Limited Company Efficient conditional state mapping in a pattern matching automaton
US11334540B2 (en) 2015-09-25 2022-05-17 Netapp, Inc. Namespace hierarchy preservation with multiple object storage objects
US10929419B2 (en) * 2015-09-25 2021-02-23 Netapp, Inc. Object storage backed file system
CN107025129B (zh) * 2016-01-29 2020-10-09 腾讯科技(深圳)有限公司 一种数据处理方法以及装置
CN106230863B (zh) * 2016-09-19 2019-05-07 成都知道创宇信息技术有限公司 一种基于WAF的ReDoS攻击检测方法
CN106789447B (zh) * 2017-02-20 2019-11-26 成都欧飞凌通讯技术有限公司 一种多核中实现超有限自动机图变更时不丢包的方法
CN106897447B (zh) * 2017-03-02 2018-02-16 广州算易软件科技有限公司 一种基于规则电气图纸箱号的自动化查找方法
US10481881B2 (en) * 2017-06-22 2019-11-19 Archeo Futurus, Inc. Mapping a computer code to wires and gates
US9996328B1 (en) * 2017-06-22 2018-06-12 Archeo Futurus, Inc. Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code
US10528556B1 (en) * 2017-12-31 2020-01-07 Allscripts Software, Llc Database methodology for searching encrypted data records
US10901887B2 (en) * 2018-05-17 2021-01-26 International Business Machines Corporation Buffered freepointer management memory system
US10983721B2 (en) 2018-07-13 2021-04-20 Fungible, Inc. Deterministic finite automata node construction and memory mapping for regular expression accelerator
US10656949B2 (en) 2018-07-13 2020-05-19 Fungible, Inc. Instruction-based non-deterministic finite state automata accelerator
US10635419B2 (en) 2018-07-13 2020-04-28 Fungible, Inc. Incremental compilation of finite automata for a regular expression accelerator
US10645187B2 (en) 2018-07-13 2020-05-05 Fungible, Inc. ARC caching for determininstic finite automata of regular expression accelerator
US10908880B2 (en) * 2018-10-19 2021-02-02 Knowles Electronics, Llc Audio signal circuit with in-place bit-reversal
US10990627B1 (en) * 2018-12-11 2021-04-27 Amazon Technologies, Inc. Sharing character data across lookups to identify matches to a regular expression
CN109933973B (zh) * 2019-01-24 2024-01-19 平安科技(深圳)有限公司 密码校验方法、装置、计算机设备及存储介质
US10831691B1 (en) * 2019-05-24 2020-11-10 International Business Machines Corporation Method for implementing processing elements in a chip card
US20220300450A1 (en) * 2019-08-22 2022-09-22 Google Llc Sharding for synchronous processors
US11636115B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Query processing using data processing units having DFA/NFA hardware accelerators
US11636154B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Data flow graph-driven analytics platform using data processing units having hardware accelerators
US11263190B2 (en) 2019-09-26 2022-03-01 Fungible, Inc. Data ingestion and storage by data processing unit having stream-processing hardware accelerators
CN111176582A (zh) * 2019-12-31 2020-05-19 北京百度网讯科技有限公司 矩阵存储方法、矩阵访问方法、装置和电子设备
CN111159496B (zh) * 2019-12-31 2024-01-23 奇安信科技集团股份有限公司 正则表达式nfa的构造方法及装置
US11934964B2 (en) 2020-03-20 2024-03-19 Microsoft Technology Licensing, Llc Finite automata global counter in a data flow graph-driven analytics platform having analytics hardware accelerators
US11449344B1 (en) * 2020-04-21 2022-09-20 Xilinx, Inc. Regular expression processor and parallel processing architecture
US11630729B2 (en) 2020-04-27 2023-04-18 Fungible, Inc. Reliability coding with reduced network traffic
CN112087507B (zh) * 2020-09-02 2022-09-09 深圳市朗强科技有限公司 接口数据的发送、接收方法及设备
CN112416251B (zh) * 2020-11-24 2023-02-10 上海壁仞智能科技有限公司 计算系统
US11782983B1 (en) * 2020-11-27 2023-10-10 Amazon Technologies, Inc. Expanded character encoding to enhance regular expression filter capabilities
CN112579651A (zh) * 2020-12-28 2021-03-30 北京浩瀚深度信息技术股份有限公司 一种网络信息监管方法、装置及存储介质
CN113703715B (zh) * 2021-08-31 2024-02-23 深信服科技股份有限公司 一种正则表达式匹配方法、装置、fpga及介质
KR102682299B1 (ko) 2021-09-23 2024-07-04 연세대학교 산학협력단 글루시코프 오토마타 생성과 하이브리드 매칭을 활용한 정규 표현식 엔진에 관한 오토마타 처리 장치 및 방법
US20230275913A1 (en) * 2022-02-25 2023-08-31 Microsoft Technology Licensing, Llc Using graph enrichment to detect a potentially malicious access attempt
US11983122B2 (en) 2022-04-26 2024-05-14 Xilinx, Inc. High-throughput regular expression processing with path priorities using an integrated circuit
US12014072B2 (en) 2022-04-26 2024-06-18 Xilinx, Inc. High-throughput regular expression processing using an integrated circuit
US11861171B2 (en) 2022-04-26 2024-01-02 Xilinx, Inc. High-throughput regular expression processing with capture using an integrated circuit
US11983223B2 (en) * 2022-08-18 2024-05-14 Microsoft Technology Licensing, Llc Finite automaton construction using regular expression derivatives to simulate behavior of a backtracking engine

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060069872A1 (en) 2004-09-10 2006-03-30 Bouchard Gregg A Deterministic finite automata (DFA) processing
US20080271141A1 (en) 2007-04-24 2008-10-30 Juniper Networks, Inc. Parallelized pattern matching using non-deterministic finite automata

Family Cites Families (123)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5428554A (en) 1992-09-03 1995-06-27 International Business Machines Corporation Hierarchical graph analysis method and apparatus
US5608662A (en) 1995-01-12 1997-03-04 Television Computer, Inc. Packet filter engine
JP4153989B2 (ja) 1996-07-11 2008-09-24 株式会社日立製作所 文書検索配送方法および装置
US5893142A (en) 1996-11-14 1999-04-06 Motorola Inc. Data processing system having a cache and method therefor
US6314513B1 (en) 1997-09-30 2001-11-06 Intel Corporation Method and apparatus for transferring data between a register stack and a memory resource
US6954424B2 (en) 2000-02-24 2005-10-11 Zarlink Semiconductor V.N., Inc. Credit-based pacing scheme for heterogeneous speed frame forwarding
US20070192863A1 (en) 2005-07-01 2007-08-16 Harsh Kapoor Systems and methods for processing data flows
US20110238855A1 (en) 2000-09-25 2011-09-29 Yevgeny Korsunsky Processing data flows with a data flow processor
US8010469B2 (en) 2000-09-25 2011-08-30 Crossbeam Systems, Inc. Systems and methods for processing data flows
US7046848B1 (en) 2001-08-22 2006-05-16 Olcott Peter L Method and system for recognizing machine generated character glyphs and icons in graphic images
AU2003269798A1 (en) 2002-02-01 2004-01-06 John Fairweather A system for exchanging binary data
US7225188B1 (en) 2002-02-13 2007-05-29 Cisco Technology, Inc. System and method for performing regular expression matching with high parallelism
JP4047053B2 (ja) 2002-04-16 2008-02-13 富士通株式会社 繰り返しを含む順序パターンを用いた検索装置および方法
US7944920B2 (en) 2002-06-11 2011-05-17 Pandya Ashish A Data processing system using internet protocols and RDMA
AU2003259797A1 (en) 2002-08-05 2004-02-23 Fish, Robert System and method of parallel pattern matching
US7119577B2 (en) 2002-08-28 2006-10-10 Cisco Systems, Inc. Method and apparatus for efficient implementation and evaluation of state machines and programmable finite state automata
US7464254B2 (en) 2003-01-09 2008-12-09 Cisco Technology, Inc. Programmable processor apparatus integrating dedicated search registers and dedicated state machine registers with associated execution hardware to support rapid application of rulesets to data
US7308446B1 (en) 2003-01-10 2007-12-11 Cisco Technology, Inc. Methods and apparatus for regular expression matching
JP2004240766A (ja) 2003-02-06 2004-08-26 Toshiba Corp パターン検出処理プログラム生成システムおよびパターン検出処理プログラム生成方法
WO2004072797A2 (en) 2003-02-07 2004-08-26 Safenet, Inc. System and method for determining the start of a match of a regular expression
US7594002B1 (en) 2003-02-14 2009-09-22 Istor Networks, Inc. Hardware-accelerated high availability integrated networked storage system
AU2003277247A1 (en) 2003-02-28 2004-09-28 Lockheed Martin Corporation Hardware accelerator state table compiler
US7093231B2 (en) 2003-05-06 2006-08-15 David H. Alderson Grammer for regular expressions
US7685254B2 (en) 2003-06-10 2010-03-23 Pandya Ashish A Runtime adaptable search processor
US20050108518A1 (en) 2003-06-10 2005-05-19 Pandya Ashish A. Runtime adaptable security processor
US20050114700A1 (en) 2003-08-13 2005-05-26 Sensory Networks, Inc. Integrated circuit apparatus and method for high throughput signature based network applications
US7870161B2 (en) 2003-11-07 2011-01-11 Qiang Wang Fast signature scan
US7685637B2 (en) 2004-06-14 2010-03-23 Lionic Corporation System security approaches using sub-expression automata
US7779464B2 (en) 2004-06-14 2010-08-17 Lionic Corporation System security approaches utilizing a hierarchical memory system
WO2006031496A2 (en) 2004-09-10 2006-03-23 The Regents Of The University Of California Method and apparatus for deep packet inspection
US7594081B2 (en) 2004-09-10 2009-09-22 Cavium Networks, Inc. Direct access to low-latency memory
US8301788B2 (en) 2004-09-10 2012-10-30 Cavium, Inc. Deterministic finite automata (DFA) instruction
US8560475B2 (en) 2004-09-10 2013-10-15 Cavium, Inc. Content search mechanism that uses a deterministic finite automata (DFA) graph, a DFA state machine, and a walker process
US7941585B2 (en) 2004-09-10 2011-05-10 Cavium Networks, Inc. Local scratchpad and data caching system
US7260558B1 (en) 2004-10-25 2007-08-21 Hi/Fn, Inc. Simultaneously searching for a plurality of patterns definable by complex expressions, and efficiently generating data for such searching
US7356663B2 (en) 2004-11-08 2008-04-08 Intruguard Devices, Inc. Layered memory architecture for deterministic finite automaton based string matching useful in network intrusion detection and prevention systems and apparatuses
US7710988B1 (en) 2005-03-11 2010-05-04 Xambala Corporation Method and system for non-deterministic finite automaton filtering
US20080229415A1 (en) 2005-07-01 2008-09-18 Harsh Kapoor Systems and methods for processing data flows
US7979368B2 (en) 2005-07-01 2011-07-12 Crossbeam Systems, Inc. Systems and methods for processing data flows
JP4320004B2 (ja) 2005-07-04 2009-08-26 日本電信電話株式会社 XPath式処理方法、XPath式処理装置、XPath式処理プログラムおよびそのプログラムを格納した記憶媒体
US7805392B1 (en) 2005-11-29 2010-09-28 Tilera Corporation Pattern matching in a multiprocessor environment with finite state automaton transitions based on an order of vectors in a state transition table
US7702629B2 (en) 2005-12-02 2010-04-20 Exegy Incorporated Method and device for high performance regular expression pattern matching
US20070226362A1 (en) 2006-03-21 2007-09-27 At&T Corp. Monitoring regular expressions on out-of-order streams
US7512634B2 (en) * 2006-06-05 2009-03-31 Tarari, Inc. Systems and methods for processing regular expressions
US20080097959A1 (en) 2006-06-14 2008-04-24 Nec Laboratories America, Inc. Scalable xml filtering with bottom up path matching and encoded path joins
US20080071783A1 (en) 2006-07-03 2008-03-20 Benjamin Langmead System, Apparatus, And Methods For Pattern Matching
US20080034427A1 (en) 2006-08-02 2008-02-07 Nec Laboratories America, Inc. Fast and scalable process for regular expression search
US8220048B2 (en) 2006-08-21 2012-07-10 Wisconsin Alumni Research Foundation Network intrusion detector with combined protocol analyses, normalization and matching
GB2441351B (en) 2006-09-01 2010-12-08 3Com Corp Positionally dependent pattern checking in character strings using deterministic finite automata
US20080077793A1 (en) 2006-09-21 2008-03-27 Sensory Networks, Inc. Apparatus and method for high throughput network security systems
US8024691B2 (en) 2006-09-28 2011-09-20 Mcgill University Automata unit, a tool for designing checker circuitry and a method of manufacturing hardware circuitry incorporating checker circuitry
GB2443240B (en) 2006-10-27 2009-05-06 3Com Corp Signature checking using deterministic finite state machines
US7996348B2 (en) 2006-12-08 2011-08-09 Pandya Ashish A 100GBPS security and search architecture using programmable intelligent search memory (PRISM) that comprises one or more bit interval counters
WO2008073824A1 (en) 2006-12-08 2008-06-19 Pandya Ashish A Dynamic programmable intelligent search memory
US8055601B2 (en) 2006-12-08 2011-11-08 Pandya Ashish A Compiler for compiling content search rules comprising a regular expression using a programmable intelligent search memory (PRISM) and vectors
CN101013441A (zh) 2007-02-12 2007-08-08 杭州华为三康技术有限公司 确定性有限自动机生成方法和装置及索引方法和索引系统
US7962434B2 (en) 2007-02-15 2011-06-14 Wisconsin Alumni Research Foundation Extended finite state automata and systems and methods for recognizing patterns in a data stream using extended finite state automata
FR2913785B1 (fr) 2007-03-13 2009-06-12 St Microelectronics Sa Gestion de memoire tampon circulaire
JP5299272B2 (ja) 2007-04-12 2013-09-25 富士通株式会社 分析プログラムおよび分析装置
US7788206B2 (en) 2007-04-30 2010-08-31 Lsi Corporation State machine compression using multi-character state transition instructions
CN101360088B (zh) 2007-07-30 2011-09-14 华为技术有限公司 正则表达式编译、匹配系统及编译、匹配方法
US8024802B1 (en) 2007-07-31 2011-09-20 Hewlett-Packard Development Company, L.P. Methods and systems for using state ranges for processing regular expressions in intrusion-prevention systems
US20100138367A1 (en) * 2007-08-02 2010-06-03 Nario Yamagaki SYSTEM, METHOD, AND PROGRAM FOR GENERATING NON-DETERMINISTIC FINITE AUTOMATON NOT INCLUDING e-TRANSITION
CN101201836B (zh) 2007-09-04 2010-04-14 浙江大学 基于带记忆确定有限自动机的正则表达式匹配加速方法
US8086609B2 (en) 2007-11-01 2011-12-27 Cavium, Inc. Graph caching
US8819217B2 (en) 2007-11-01 2014-08-26 Cavium, Inc. Intelligent graph walking
US7949683B2 (en) 2007-11-27 2011-05-24 Cavium Networks, Inc. Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph
US8180803B2 (en) 2007-11-27 2012-05-15 Cavium, Inc. Deterministic finite automata (DFA) graph compression
US8051085B1 (en) 2008-07-18 2011-11-01 Netlogic Microsystems, Inc. Determining regular expression match lengths
CN101650718A (zh) 2008-08-15 2010-02-17 华为技术有限公司 字符串匹配方法和装置
US8176300B2 (en) 2008-08-25 2012-05-08 Cavium, Inc. Method and apparatus for content based searching
US8473523B2 (en) 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
US8683590B2 (en) 2008-10-31 2014-03-25 Alcatel Lucent Method and apparatus for pattern matching for intrusion detection/prevention systems
TWI482083B (zh) 2008-12-15 2015-04-21 Univ Nat Taiwan 二階段式正規表示式比對處理方法及系統
TWI383618B (zh) 2008-12-22 2013-01-21 Univ Nat Taiwan 管線架構型正規表示式樣式比對處理電路
US20100192225A1 (en) 2009-01-28 2010-07-29 Juniper Networks, Inc. Efficient application identification with network devices
KR101034389B1 (ko) 2009-04-22 2011-05-16 (주) 시스메이트 패킷 내 시그니처 위치에 따른 시그니처 검색 방법
US8219776B2 (en) 2009-09-23 2012-07-10 Lsi Corporation Logical-to-physical address translation for solid state disks
US20110016154A1 (en) 2009-07-17 2011-01-20 Rajan Goyal Profile-based and dictionary based graph caching
CN101639861B (zh) 2009-09-02 2012-06-27 福建星网锐捷网络有限公司 一种基于有限状态自动机的字符串匹配方法及装置
US8554698B2 (en) 2009-10-17 2013-10-08 Polytechnic Institute Of New York University Configuring state machines used to order and select matching operations for determining whether an input string matches any of at least one regular expression using lookahead finite automata based regular expression detection
CN101876986B (zh) 2009-11-27 2012-11-21 福建星网锐捷网络有限公司 基于有限状态自动机的字符串匹配方法及内容过滤设备
US8291258B2 (en) 2010-01-08 2012-10-16 Juniper Networks, Inc. High availability for network security devices
US8458354B2 (en) 2010-01-27 2013-06-04 Interdisciplinary Center Herzliya Multi-pattern matching in compressed communication traffic
CN102148805B (zh) 2010-02-09 2015-04-08 华为技术有限公司 特征匹配方法和装置
US8522199B2 (en) 2010-02-26 2013-08-27 Mcafee, Inc. System, method, and computer program product for applying a regular expression to content based on required strings of the regular expression
CN101853301A (zh) 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
US8650146B2 (en) 2010-06-24 2014-02-11 Lsi Corporation Impulse regular expression matching
CN101944121B (zh) 2010-09-20 2012-05-30 北京星网锐捷网络技术有限公司 有限状态自动机生成方法、关键字匹配方法及装置和设备
CN102075511B (zh) 2010-11-01 2014-05-14 北京神州绿盟信息安全科技股份有限公司 一种数据匹配设备和方法以及网络入侵检测设备和方法
US8516456B1 (en) 2010-11-11 2013-08-20 Netlogic Microsystems, Inc. Compact instruction format for content search systems
US9398033B2 (en) 2011-02-25 2016-07-19 Cavium, Inc. Regular expression processing automaton
US20120221494A1 (en) 2011-02-25 2012-08-30 International Business Machines Corporation Regular expression pattern matching using keyword graphs
CN102184197B (zh) 2011-04-22 2012-10-10 湖南亿谷信息科技发展有限公司 基于智能有限自动机的正则表达式匹配方法
US8848970B2 (en) 2011-04-26 2014-09-30 Digimarc Corporation Salient point-based arrangements
US9246928B2 (en) 2011-05-02 2016-01-26 International Business Machines Corporation Compiling pattern contexts to scan lanes under instruction execution constraints
US8990259B2 (en) 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
US9223618B2 (en) 2011-09-20 2015-12-29 Intel Corporation Multi-threaded queuing system for pattern matching
US9465662B2 (en) 2011-10-17 2016-10-11 Cavium, Inc. Processor with efficient work queuing
US8850125B2 (en) 2011-10-25 2014-09-30 Cavium, Inc. System and method to provide non-coherent access to a coherent memory system
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
CN102420750B (zh) 2011-11-28 2015-09-23 曙光信息产业(北京)有限公司 单包正则匹配设备和方法
CN103166802B (zh) 2011-12-12 2016-12-07 中国移动通信集团湖南有限公司 一种确定有限自动机的构建方法及装置
US9280600B2 (en) 2012-03-20 2016-03-08 Yissum Research Development Company Of The Hebrew University Of Jerusalem Ltd. Method and system for decompression-free inspection of shared dictionary compressed traffic over HTTP
CN102902713B (zh) 2012-03-29 2016-03-02 中国科学技术大学 一种基于图形处理单元的非确定有限自动机的匹配方法及装置
US9558299B2 (en) 2012-04-30 2017-01-31 Hewlett Packard Enterprise Development Lp Submatch extraction
US9524248B2 (en) 2012-07-18 2016-12-20 Micron Technology, Inc. Memory management for a hierarchical memory system
RU2608464C2 (ru) 2012-09-28 2017-01-18 Телефонактиеболагет Лм Эрикссон (Пабл) Устройство, способ и сетевой сервер для обнаружения структур данных в потоке данных
US9064032B2 (en) 2012-10-05 2015-06-23 Intel Corporation Blended match mode DFA scanning
US8862585B2 (en) 2012-10-10 2014-10-14 Polytechnic Institute Of New York University Encoding non-derministic finite automation states efficiently in a manner that permits simple and fast union operations
US9046916B2 (en) 2012-11-06 2015-06-02 Intel Corporation Cache prefetch for NFA instructions
US9304768B2 (en) 2012-12-18 2016-04-05 Intel Corporation Cache prefetch for deterministic finite automaton instructions
US9177253B2 (en) 2013-01-31 2015-11-03 Intel Corporation System and method for DFA-NFA splitting
US9563399B2 (en) 2013-08-30 2017-02-07 Cavium, Inc. Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
US9426166B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for processing finite automata
US9426165B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for compilation of finite automata
US9419943B2 (en) 2013-12-30 2016-08-16 Cavium, Inc. Method and apparatus for processing of finite automata
US9432284B2 (en) 2014-01-08 2016-08-30 Cavium, Inc. Method and apparatus for compiling search trees for processing request keys based on a key size supported by underlying processing elements
US9904630B2 (en) 2014-01-31 2018-02-27 Cavium, Inc. Finite automata processing based on a top of stack (TOS) memory
US9602532B2 (en) 2014-01-31 2017-03-21 Cavium, Inc. Method and apparatus for optimizing finite automata processing
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
US9438561B2 (en) 2014-04-14 2016-09-06 Cavium, Inc. Processing of finite automata based on a node cache

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060069872A1 (en) 2004-09-10 2006-03-30 Bouchard Gregg A Deterministic finite automata (DFA) processing
US20080271141A1 (en) 2007-04-24 2008-10-30 Juniper Networks, Inc. Parallelized pattern matching using non-deterministic finite automata

Also Published As

Publication number Publication date
US20150067123A1 (en) 2015-03-05
CN104516940A (zh) 2015-04-15
US9823895B2 (en) 2017-11-21
US20150067200A1 (en) 2015-03-05
US9563399B2 (en) 2017-02-07
US9785403B2 (en) 2017-10-10
US20150066927A1 (en) 2015-03-05
CN104516940B (zh) 2019-03-01
US10466964B2 (en) 2019-11-05
KR20150026979A (ko) 2015-03-11
CN104426909A (zh) 2015-03-18
US20150067836A1 (en) 2015-03-05
CN104426909B (zh) 2019-01-04
HK1207179A1 (en) 2016-01-22
US9507563B2 (en) 2016-11-29
US20180004483A1 (en) 2018-01-04
HK1208104A1 (en) 2016-02-19

Similar Documents

Publication Publication Date Title
KR101615915B1 (ko) 어드밴스드 피처를 갖는 정규 표현식 패턴에 대한 비결정성 유한 오토마톤 (nfa) 생성
US9652505B2 (en) Content search pattern matching using deterministic finite automata (DFA) graphs
US9495479B2 (en) Traversal with arc configuration information
US8819217B2 (en) Intelligent graph walking
US7949683B2 (en) Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph
US8180803B2 (en) Deterministic finite automata (DFA) graph compression
US9762544B2 (en) Reverse NFA generation and processing
US9787693B2 (en) Graph caching
US9398033B2 (en) Regular expression processing automaton
US8176300B2 (en) Method and apparatus for content based searching
US20110016154A1 (en) Profile-based and dictionary based graph caching

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant