(57)【特許請求の範囲】
【請求項１】
Ｎ個の分割状態機械（１０３）を使用する文字列照合方法であって、
前記Ｎ個の分割状態機械は、組み合わせられて、基となる状態機械に対応し、
前記基となる状態機械は、連続した入力記号に基づいて少なくとも１つの文字列を認識するように構成され、
前記Ｎ個の分割状態機械のそれぞれが、入力記号の各部分の処理を担当し、
前記各分割状態機械の各状態に、１つの部分一致ベクトル値が関連付けられ、
Ｎ個のメモリコンテキスト（１１）が、現在の状態と、現在処理中の前記入力記号の部分とに応じて次の状態の決定を可能にする、情報の記憶を担当し、
前記Ｎ個のメモリコンテキスト内において、関連付けられる識別子が、前記Ｎ個の分割状態機械の各状態に関連して示され、
前記識別子と前記部分一致ベクトル値との関連が、前記Ｎ個の分割状態機械によって共有される共有メモリ（１２）に記憶され、
前記関連付けられる識別子は、前記共有メモリに記憶される部分一致ベクトル値の各オフセットであり、
識別子を記憶するために要するメモリ容量は、それぞれの部分一致ベクトル値を記憶するために要するメモリ容量より少ない、文字列照合方法。
【請求項２】
前記複数の異なる部分一致ベクトル値は、前記共有メモリに１回だけ記憶される、請求項１に記載の文字列照合方法。
【請求項３】
Ｎ個の分割状態機械（１０３）に基づく文字列照合方法を実行するように構成される装置であって、
前記Ｎ個の分割状態機械は、組み合わせられて、基となる状態機械に対応し、
前記基となる状態機械は、連続した入力記号に基づいて少なくとも１つの文字列を認識するように構成され、
前記Ｎ個の分割状態機械のそれぞれが、入力記号の各部分の処理を担当し、
前記各分割状態機械の各状態に、１つの部分一致ベクトル値が関連付けられ、
前記装置は、
−現在の状態と、現在受信中の前記入力記号の部分とに応じて次の状態の決定を可能にする、情報の記憶を担当するＮ個のメモリコンテキスト（１１）であって、前記メモリコンテキスト内において、関連付けられる識別子が、前記Ｎ個の分割状態機械の各状態に関連して記憶される、Ｎ個のメモリコンテキスト（１１）と、
−前記識別子と前記部分一致ベクトル値との関連を記憶するように構成される共有メモリ（１２）であって、前記共有メモリ（１２）は前記Ｎ個の分割状態機械によって共有される、共有メモリ（１２）と
を備え、
前記関連付けられる識別子は、前記共有メモリに記憶される部分一致ベクトル値の各オフセットであり、
識別子を記憶するために要するメモリ容量は、それぞれの部分一致ベクトル値を記憶するために要するメモリより少ない、装置。
【請求項４】
前記複数の異なる部分一致ベクトル値は、前記共有メモリに１回だけ記憶される、請求項３に記載の装置。
【請求項５】
コンピュータに、請求項１または２に記載の方法のステップを実施させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［発明の背景］
［１．技術分野］
本発明は、概して文字列照合方法に関する。
【０００２】
文字列照合方法は、テキスト内の複数の文字列を探索可能にする。例えば、文字列照合方法は、ネットワークパケット検査システムを実施する際に使用することができ、またはより一般的にはテキスト内の複数の文字列照合を実行する必要があるあらゆる種類の用途に使用することができ、又は、侵入検知システム、ＩＤＳ、又は同様のアンチウィルスのような用途に使用することができる。
【０００３】
［２．関連技術］
照合対象の文字列は、エイホ・コラシックアルゴリズムを使用して生成されるＤＦＡ（「決定性有限オートマトン(Deterministic Finite Automaton)」の略）グラフである「文字列照合オートマトン」内にグループ化することができる。ＤＦＡとは、状態及び入力記号によって形成される各ペアにつき、現在の状態から次の状態への遷移が１つだけである有限状態機械(finite state machine)である。
【０００４】
ＤＦＡに基づいて、照合対象のテキストの各入力記号につき、遷移関数に従って状態への遷移が付与される。テキストの最後の入力記号が処理されると、次に、テキストがＤＦＡに既知の文字列に対応するか否かを判断することが可能である。かかる判断は、ＤＦＡの最終状態に依存する。実際には、ＤＦＡのこの最終状態が受容状態の場合、これは、そのテキストがＤＦＡ内の既知の文字列の１つに対応することを意味し、ＤＦＡの最終状態が非受容状態の場合、そのテキストはＤＦＡに既知の文字列に対応しない。
【０００５】
しかしながら、この類のオートマトンは大容量の記憶領域を必要とする。この特徴は、これらのオートマトンがＦＰＧＡ（「フィールドプログラマブルゲートアレイ」の略）等の構成要素に実装される場合に特に不利である。
【０００６】
この不都合さを制限するために、ホン−ジップ・ジュン(Hung-Jip Jung)、ザッカリー  Ｋ．ベイカー（Zachary K. Baker)、及びビクター  Ｋ．プラサンナ(Victor K. Prasanna)の「Performance of FPGA implementation of Split architecture for intrusion detection system」という文献に、大きな状態機械を複数のビット分割状態機械に変換することができる分割アーキテクチャ（split architecture）が説明されている。かかる変換に基づき、メモリ管理を強化することができるとともに、必要とされるメモリ量を低減することができる。
【０００７】
分割アルゴリズム、例えば先に参照した文献に記載されている分割アルゴリズムは、複数文字列照合用途に向けて特に設計されている。これは、入力英数字（例えば、ＡＳＣＩＩコード）に属する入力記号に基づいていくつかの文字列を認識するように構成されたソースＤＦＡグラフを、いくつかの「より小さな」ＤＦＡ、即ち分割状態機械(split state machine)に変換するために使用される。これらのより小さな各ＤＦＡが必要とするメモリ容量は、最初のＤＦＡよりも小さい。これらのより小さな各ＤＦＡは、入力記号の部分又は一部のみを使用する。このコンテキストの中では、ソースオートマトンは、より小さなＤＦＡのある種の「積」と等価であることが示されている。異なる複数のより小さなＤＦＡが並列に評価され、ソースＤＦＡの最終状態が、より小さなＤＦＡの結果を結合することによって特定される。
【０００８】
複数の分割状態機械の非連結性（disconnected nature）により、部分一致ベクトル値（ＰＭＶ）（partial match vector value）がすべての分割状態機械のすべての状態にそれぞれ関連付けられる。分割状態機械の最終状態に関連付けられたこれらのＰＭＶの各値が、これらの分割状態機械の最終状態を共に再連結させるために使用される。より厳密には、論理ＡＮＤ演算がＰＭＶの各値に対して適用されて、テキスト認識の判断を可能にする全体の完全一致ベクトル（ＦＭＶ）（full match vector）が形成される。
【０００９】
このアーキテクチャは、一般に、プログラム可能であるため、照合する文字列セットを実行時に更新することが可能である。あるアルゴリズムが使用されて、ビット分割変換に基づいて、基となる状態機械の挙動を表すメモリ効率的なデータ構造が生成される。
【００１０】
かかるアーキテクチャは、基となる大きなオートマトンのコンパクトな表現を記憶できるようにする。
【００１１】
しかしながら、各分割状態機械は、大きなデータワードを有するメモリコンテキストを必要とする。実際には、各分割状態機械につき、ある状態から別の状態への異なる複数の遷移候補に対応するいくつかのリンクと、１つのＰＭＶとが、状態メモリの各ワードの中に記憶される。
【００１２】
分割状態機械によって処理されるビット数は、次の状態数（即ち各ワードに記憶されるリンク数）に直接結び付く。より厳密には、リンクのサイズは、
ＬＯＧ2（Ｘ）
に対応する。但し、Ｘは分割状態機械内の状態の最大数であり、ＬＯＧ2はｌｏｇ２（底が２の対数）よりも大きな直近の整数である。
【００１３】
分割状態機械によって処理される受容状態の数も、ＰＭＶ値の記憶に使用されるデータワードサイズに影響する。
【００１４】
これらの制約は、状態機械が処理可能な受容状態の数を制限する。文字列照合用途では、文字列セットが多くのサブセットに細分され、異なる分割状態機械上で評価される。このアーキテクチャは、少数の状態及び少数の受容状態を処理する小さな状態機械には上手く適合するが、多くの受容状態を有し得る大きな状態機械を実装する必要がある場合（例えば、長い文字列を解析することが必要な場合）にはそれ程効率的ではない。状態メモリのワード幅は受容状態の数に伴って急速に増大し、受容状態の数はＰＭＶ値サイズ及び状態総数に直接結び付き、状態総数はリンクサイズに直接結び付く。
【００１５】
したがって、分割状態機械アーキテクチャの改良又は分割状態機械の改良が必要である。
【００１６】
【非特許文献１】LIN TAN他、「A High Throughput String Matching Architecture for Intrusion Detection and Prevention", COMPUTER ARCHITECTURE, 2005, ISCA '05, PROCEEDINGS, 32ND INTERNTATIONAL SYMPOSIUM ON MADISON, WI, USA, ２００５年６月４〜８日、PISCATAWAY, NJ, USA, IEEE, ２００５年６月４日、１１２〜１２２ページ、XP010807899, ISBN: 978-0-7695-2270-8
【特許文献１】国際公開第２００７／１０３３９７号パンフレット
【００１７】
［発明の概要］
したがって、第１の態様において、本発明は、Ｎ個の分割状態機械を使用する文字列照合方法であって、Ｎ個の分割状態機械は組み合わせられて、基となる状態機械に対応し、基となる状態機械は、連続した入力記号に基づいて少なくとも１つの文字列を認識するように構成される、文字列照合方法を提案する。Ｎ個の分割状態機械のそれぞれは、入力記号の各部分の処理を担当する。各分割状態機械の各状態に、１つの部分一致ベクトル値が関連付けられる。Ｎ個のメモリコンテキストが情報の記憶を担当し、この情報は、現在の状態と、現在処理中の入力記号の部分とに応じて、次の状態の決定を可能にする。
【００１８】
この方法によれば、Ｎ個のメモリコンテキストにおいて、関連付けられる識別子がＮ個の分割状態機械の各状態に関連して示される。識別子と部分一致ベクトル値との関連が、Ｎ個の分割状態機械によって共有される共有メモリに記憶される。
【００１９】
これらの状況下において、ＰＭＶ値を各分割状態機械の各状態に関連付けるために必要なメモリ容量を低減することが可能である。実際には、識別子の使用により、各状態に関連して対応するＰＭＶ値を直接記憶することを回避することができる。かかる識別子は、ＰＭＶ値自体よりもはるかに小さくすることができる。この文脈の中では、すべての異なる分割状態機械が共有するメモリが使用され、このメモリは、異なるＰＭＶ値と各識別子との対応を含む。
【００２０】
有利なことに、かかる特徴により、複数の分割状態機械内のすべての状態に関連付けられたＰＭＶ値を記憶するために必要なメモリ要件を低減することが可能である。実際には、ＰＭＶは、背景技術のアーキテクチャにおいて大容量のメモリを消費する。何故なら、ＰＭＶはすべての分割状態機械のすべての状態にそれぞれ関連付けられるためである。
【００２１】
第１の状態タイプは、分割状態機械内の受容状態に対応する状態である「受容状態」に対応する。第２の状態タイプは、対応する分割状態機械内におけるそれ以外のすべての状態である、「非受容状態」に対応する。本発明の文脈の中では、非受容状態とは、照合する既知の文字列に対応しない状態に対応する。逆に、受容状態とは、少なくとも１つの照合する既知の文字列に対応する状態である。
【００２２】
有利なことに、本発明の一実施形態では、これらの２タイプの状態を別様に処理することができる。
【００２３】
分割状態機械内の異なるＰＭＶ値の最大数はｇ＋１である。但し、ｇは、ソースＤＦＡによって照合することが可能な既知の文字列の数である。さらに、同じ分割状態機械内の異なる状態に対して、１つのＰＭＶ値が２回以上使用されることがある。
【００２４】
メモリコンテキストは、本説明において参照されるｌｉｎｋｓ＿ｍｅｍｏｒｙと、各状態に関連付けられたＰＭＶ＿ＩＤを示すためのスキームとを含む。
【００２５】
共有メモリは「ＰＭＶ＿ｍｅｍｏｒｙ」に対応する。これは、異なる部分一致ベクトル値を含むことができ、関連付けられる識別子は、共有メモリ内の記憶域の各オフセットに対応する。
【００２６】
これらの状況下において、各分割状態機械に対するメモリコンテキストは、各状態に対応して、この状態に対応するＰＭＶ値に関連付けられたオフセットを記憶する。このオフセットはＰＭＶ値よりも小さく、メモリ要件が、完全なＰＭＶ値がメモリコンテキスト内のすべての状態に関連して分割状態機械ごとに記憶される場合と比較して低減される。
【００２７】
あるいは、各状態に１つの状態コンテキストを状態ラベルで参照されるメモリコンテキスト内に記憶することができ、関連付けられる識別子がそのまま状態ラベルであってよい。状態コンテキストは、ある状態と、対応するすべての次の状態とを含む。
【００２８】
ここで、メモリ量要件がさらに低減される。実際には、これらの状況下において、ｌｉｎｋｓ＿ｍｅｍｏｒｙにそのまま記憶される状態それ自身（即ち状態ラベルそれ自身）が、ＰＭＶ＿ｍｅｍｏｒｙ内において関連付けられたＰＭＶ値のオフセットをそのまま表し、対応するオフセットを各分割状態機械のメモリコンテキストに記憶する必要がない。
【００２９】
一実施形態において、そのまま記憶される状態、即ち状態ラベルが、関連する各ＰＭＶ値をそのまま表す場合、本方法は、
−前記基となるソース状態機械から前記Ｎ個の分割状態機械を生成するステップであって、前記Ｎ個の分割状態機械のそれぞれは複数の異なる状態を含み、複数の異なる状態はそれぞれの初期ラベルで参照される、生成するステップと、
−初期ラベルを新ラベルに置き換えるステップであって、それにより、各分割状態機械の各状態につき、前記状態に関連付けられる新ラベルであって、共有メモリに記憶された部分一致ベクトル値のオフセットに等しい新ラベルを得る、置き換えるステップと
を含む。
【００３０】
好ましくは、複数の異なる部分一致ベクトル値は、共有メモリに１回だけ記憶される。
【００３１】
本発明の文脈の中では、状態ラベルは所与の状態を命名する番号に対応することができる。
【００３２】
本発明の第２の態様は、Ｎ個の状態分割機械を使用する文字列照合方法を実行するように構成された装置であって、Ｎ個の分割状態機械は、組み合わせられて、基となる状態機械に対応し、基となる状態機械は、連続した入力記号に基づいて少なくとも１つの文字列を認識するように構成され、
Ｎ個の分割状態機械のそれぞれが、入力記号の各部分の処理を担当し、
各分割状態機械の各状態に、１つの部分一致ベクトル値が関連付けられ、
本装置は、
−現在の状態と、現在受信中の入力記号の部分とに応じて次の状態の決定を可能にする、情報の記憶を担当するＮ個のメモリコンテキストであって、Ｎ個のメモリコンテキスト内において、関連付けられる識別子が、Ｎ個の分割状態機械の各状態に関連して示される、Ｎ個のメモリコンテキストと、
−識別子と部分一致ベクトル値との関連を記憶するように構成された共有メモリであって、この共有メモリはＮ個の分割状態機械によって共有される、共有メモリと
を備える装置に関する。
【００３３】
かかる装置は、本発明の第１の態様による文字列照合方法を実行するために必要なすべてのユニットを備えることができる。
【００３４】
かかる装置では、共有メモリは、異なる部分一致ベクトル値を含むことができ、関連付けられる識別子は、前記共有メモリ内の記憶域の各オフセットに対応することができる。
【００３５】
一実施形態では、メモリコンテキストは、状態ラベルで参照される各状態を記憶するように構成され、関連付けられる識別子がそのまま状態ラベルである。
【００３６】
本装置は、
−前記基となるソース状態機械から前記Ｎ個の分割状態機械を生成するように構成された生成ユニットであって、前記Ｎ個の分割状態機械のそれぞれは複数の異なる状態を含み、複数の異なる状態は各初期ラベルで参照される、生成ユニットと、
−初期ラベルを新ラベルに置き換えるように構成される置換ユニットであって、
それにより、各分割状態機械の各状態につき１つの新ラベルを得、
この新ラベルは、前記状態に関連付けられ前記共有メモリに記憶される前記部分一致ベクトル値のオフセットに等しい
置換ユニットと
をさらに備えることができる。
【００３７】
第３の態様において、本発明は、本発明の第２の態様による装置のコンピュータ手段にロードされ実行された場合、本発明の第１の態様による方法のステップを実施するための命令を含むコンピュータプログラム製品を提案する。
【００３８】
本発明のさらなる特徴及び利点が以下の説明からより明白になるであろう。以下の説明は、あくまで説明として示され、添付の図面に関連して読まれるべきである。
【００３９】
［好適な実施形態の説明］
本発明は、分割状態機械に使用されるメモリ量を低減するために、これらの分割状態機械の各メモリワード内のＰＭＶ値記憶量を抑えることを提案する。
【００４０】
一実施形態では、ソースＤＦＡグラフが、既知の文字列の探索を担当するＦＰＧＡのような又はＡＳＩＣのような回路にロードされるよう構成されたデータ構造に変換される。ソースＤＦＡは、例えば、エイホ・コラシックアルゴリズムを実行することによって生成することができる。
【００４１】
ソースＤＦＡグラフは、照合するテキストから抽出される入力記号の可能な値と、考慮中の分割状態機械内の現在の状態に依存する遷移とを含む。
【００４２】
分割状態機械のコンテキストの中では、入力記号はいくつかの部分に分けられ、これらの各部分は異なる分割状態機械によって処理される。例えば、入力記号が８ビットワードである場合、各部分が２ビットに対応する４つの部分に分けることができる。有利なことに、各部分は、ソースＤＦＡグラフから得られる分割状態機械の１つによって処理することができる。
【００４３】
ＰＭＶ＿ｍｅｍｏｒｙは、複数の異なる分割状態機械によって共有される。このメモリは、ソース状態機械ＤＦＡから複数の異なる分割状態機械を生成する際に実行される入力記号の異なる各部分に対する異なる変換に基づいて更新される。
【００４４】
性能を上げるために、ＰＭＶ＿ｍｅｍｏｒｙはマルチポートメモリであることができ、それにより、リードモードでのみ同時アクセスを可能にし、それにより、フルカスタムＡＳＩＣ内のこのメモリの設計を簡略化することができる。
【００４５】
一実施形態では、最初に、このＰＭＶ＿ｍｅｍｏｒｙは、ヌルベクトルに対応する単一のＰＭＶのみを含む。ＰＭＶのこの値は非受容状態に対応する。
【００４６】
入力記号の異なる各部分は、８ビットの入力記号のビット１及び０、ビット３及び２、ビット５及び４、並びにビット７及び６に対応することができる。
【００４７】
入力記号の各部分につき、第１のステップにおいて、ソースＤＦＡが、考慮中の部分に属するビットの分割機械に変換される。各分割状態機械は複数の異なる状態を含み、複数の異なる状態には、いくつかのリンク（即ち次の状態）及び１つのＰＭＶ値が関連付けられる。このステップにおいて、各分割状態機械に関連付けられた遷移表が、考慮中の分割状態機械の各状態に関連付けられた次の状態候補で更新され、この表はｌｉｎｋｓ＿ｍｅｍｏｒｙにより参照される。
【００４８】
ｌｉｎｋｓ＿ｍｅｍｏｒｙは、分割状態機械内のある状態（即ち現在の状態）から別の状態（即ち次の状態）へのリンクに関するデータである「リンクデータ」を記憶するように構成される。
【００４９】
かかるメモリは２つの部分：受容状態範囲のための第１の部分及び非受容状態範囲のための第２の部分に分けることができる。一実施形態では、４個の分割状態機械と、照合するｇ個の既知の文字列とがある。この状況では、０〜４*ｇ−１の状態値が受容状態又は非受容状態に対応することができ、値「４*ｇ」以上の状態値は非受容状態に対応することができる。
【００５０】
このメモリは、内部又は外部のメモリであることができる。その幅は、リンクが並列ではなく逐次記憶される場合に小さくすることができる。次の状態へのリンクのこの対応により、より大きな状態機械並びに異なるサイズの入力記号を、メモリデータ幅に大きく影響せずに処理することが可能である。例えば、１６ビットデータ幅のメモリは、６４Ｋ個までの状態を有する状態機械を処理することが可能である。
【００５１】
今後、以下の表記が使用される。
−ｂは、分割状態機械によって管理される、入力記号からのビット数である。説明される実施形態では、ｂは２に等しい。
−ｐは、状態（現在の状態又は次の状態）の符号化に必要なビット数である。
−ｇは、ソースＤＦＡ又はソース状態機械内で管理される受容状態数である。
−Ｌは、ｌｉｎｋｓ＿ｍｅｍｏｒｙ１０５のアドレス指定に必要なビット数である。但し、Ｌ＝ｐ＋ｂである。
−Ｔは、タイプメモリ１１２及びＰＭＶメモリ１２のアドレス指定に必要なビット数であり、Ｔは以下の式を検証する。
Ｔ≦ｐかつ
Ｔ＝Ｌｏｇ2（（α／ｂ）×Ｎ）＝Ｌｏｇ2（４×Ｎ）
−αは、入力記号のビット数である。
−（α／ｂ）は、モジュールを構成する分割状態機械の数である。
【００５２】
処理される入力記号からのビット数は、各状態からアクセス可能な次の全状態候補の数に影響する。例えば、ｐが９に等しく（即ち、処理される最大状態数が５１２であることを意味する）、ｂが２に等しい場合、このメモリに必要なサイズは１８４３２ビットであり、これは５１２*４*９ビットに対応する。
【００５３】
次に、第２のステップにおいて、この分割状態機械で使用されるＰＭＶが番号付けされ、ＰＭＶ＿ｍｅｍｏｒｙが、ＰＭＶの異なる値を好ましくは複製なしで１度だけ含むように、この番号付けに基づいて更新される。
【００５４】
第３のステップにおいて、状態と、これに対応するＰＭＶ値との対応付けが実行される。これは、各分割状態機械のメモリコンテキストに、各状態のすべてのＰＭＶ値を記憶するのを避けるためになされる。
【００５５】
これらの３つのステップが、すべての分割状態機械に対して実行される。最後に、すべての分割状態機械に関連するすべての異なるデータ構造が作成されると、次に、ＰＭＶ＿ｍｅｍｏｒｙを更新することが可能である。このＰＭＶ＿ｍｅｍｏｒｙは、異なる分割状態機械内で使用される、異なるＰＭＶ値を含む。
【００５６】
この第３のステップに関連して、第１の代替形態において、各分割状態機械のメモリコンテキスト内で、ＰＭＶ値をＰＭＶ値それぞれの識別子で置き換えることが可能である。この識別子は、ＰＭＶ＿ｍｅｍｏｒｙ内の対応するオフセットに対応する。又は、第２の代替形態において、ＰＭＶ値を除去し、考慮中の分割状態機械の状態の名前を変更することが可能である。これは、これらの状態を、ＰＭＶ＿ｍｅｍｏｒｙ内に記憶される、関連付けられた各ＰＭＶ値のオフセットにそのままマッチさせるためである。言い換えれば、第２の代替形態では、状態のラベルは、そのまま、その状態に関連付けられるＰＭＶ値のオフセットに等しい。
【００５７】
第１の代替形態では、ＰＭＶ識別子は、ＰＭＶ＿ＩＤ＿ｍｅｍｏｒｙとして参照される、分割状態機械ごとのメモリに記憶される。ＰＭＶ＿ＩＤ＿ｍｅｍｏｒｙは、その分割状態機械内で処理される各状態に１つのエントリを含む。各ＰＭＶ値は、ＰＭＶ＿ＩＤ＿ｍｅｍｏｒｙに記憶されているそのＰＭＶ識別子にそのまま対応するオフセットでＰＭＶ＿ｍｅｍｏｒｙに記憶される。
【００５８】
第２の代替形態では、すべての受容状態に対して、表（ＰＭＶ＿ｍｅｍｏｒｙ）内のそれぞれのＰＭＶ値のオフセットに対応する値に影響を及ぼすことにより、ＰＭＶを見つけるために検索の必要がなく、すべてのメモリを同時にアドレス指定することができる。
【００５９】
本発明はかかる実施形態に限定されず、所与の分割状態機械の各状態に関連付けられたＰＭＶ値の記憶に使用されるメモリ量要件を低減するために、（次の状態の決定を可能にする情報の記憶を担当するメモリ内において）明示的なＰＭＶ値を、対応する関連付けられたＰＭＶ識別子と置き換えることができる、すべての実施形態を包含する。
【００６０】
例えば、第２の代替形態では、ｌｉｎｋｓ＿ｍｅｍｏｒｙにそのまま記憶される、即ち状態ラベルと呼ばれるその記憶形式の下で記憶される各状態が、それに関連付けられたＰＭＶ値のオフセットをそのまま示す。これらの条件下では、状態ラベル自体がそのまま対応するオフセットであるため、追加の情報をｌｉｎｋｓ＿ｍｅｍｏｒｙに記憶する必要がない。この第２の代替形態では、各分割状態機械のＰＭＶ＿ＩＤ＿ｍｅｍｏｒｙが必要ないことに留意されたい。
【００６１】
この実施形態では、状態の名前を変更するステップがさらに実行されて、状態ラベルとＰＭＶ値のオフセットとのかかる直接的な各対応が得られる。
【００６２】
図１は、第１の代替形態に対応する、本発明の一実施形態による分割状態機械のモジュールのアーキテクチャを示す。このアーキテクチャでは、状態とそれぞれの関連付けられたＰＭＶ値との対応は、ＰＭＶ＿ｍｅｍｏｒｙ内のオフセットに対応するＰＭＶ識別子に基づく。
【００６３】
かかるモジュールは、４個の分割状態機械１０３を含む。
【００６４】
各分割状態機械１０３は、各分割状態機械に使用される、それぞれ異なるメモリである、メモリ「ｌｉｎｋｓ＿ｍｅｍｏｒｙ」１０５及び「ＰＭＶ＿ＩＤ＿ｍｅｍｏｒｙ」１０６内のアドレスを生成するように構成される、アドレス生成器「ＳＰＬＩＴ＿ｓｔａｔｅ  ｍａｃｈｉｎｅ＿ａｄｄｒ＿ｇｅｎ」１０４を備えることができる。両メモリとも、対応する分割状態機械に関連付けられたコンテキストメモリ内にある。本発明はこの態様に限定されない。例えば、メモリＰＭＶ＿ＩＤ＿ｍｅｍｏｒｙ内のアドレスは、分割状態機械内の現在の状態によってそのまま提供してよく、ｌｉｎｋｓ＿ｍｅｍｏｒｙ内のアドレスは、現在の状態と、考慮中の分割状態機械によって処理される入力記号の部分のビットとの連結によって生成されてよい。
【００６５】
各分割状態機械は、考慮中の分割状態機械の各状態に関連付けられたＰＭＶ識別子を記憶するために、メモリ「ＰＭＶ＿ＩＤ＿ｍｅｍｏｒｙ」１０６をさらに備える。このメモリ１０６は、少なくとも、ＰＭＶ識別子（即ちオフセット）を符号化することができるワード数を含む。この数は、１つの分割状態機械内で管理される状態数
２p＝２(L-n)
に等しい。
【００６６】
ワードのサイズはＬＯＧ2（４ｇ＋１）ビットである。
【００６７】
各分割状態機械はメモリｌｉｎｋｓ＿ｍｅｍｏｒｙ１０５をさらに備え、そこにおいて、リンク（即ち次の状態）が分割状態機械の各状態に対応して記憶される。このメモリは、少なくとも２n２p＝２Lワードを含み、各ワードは次の状態の値を符号化するためにｐビットからなる。
【００６８】
一実施形態では、入力データセレクタ１０２が、照合する入力記号を受信し、入力記号の各部分をそれぞれ分割状態機械に送る。
【００６９】
このセレクタは、分割状態機械にそれぞれ転送される入力記号の部分を選択することができる。入力記号の各部分は、入力記号の任意のビットにより構成することができる。例えば、入力記号から連続したビットを選択することによって、入力記号の異なる部分を形成することが可能である。
【００７０】
このセレクタ１０２は必要ではないが、状況によっては、特にいくつかのソースＤＦＡに関連する情報がメモリに記憶される場合には、有用である可能性がある。
【００７１】
これらの分割状態機械を通しての文字列照合プロセスを停止できるように、停止条件を検出するように構成された停止条件モジュール１０７を導入することが可能である。このモジュールは複数の異なる条件に基づくことができる。
【００７２】
文字列が照合したときに、又は照合プロセスが失敗したときに、照合プロセスを停止できることが有利であり得る。停止状態を識別できるようにするためには、特定の情報を追加しなければならない。通常、２つの停止状態を追加することができる：ｓｔｏｐ＿ｏｋ及びｓｔｏｐ＿ｅｒｒである。ｓｔｏｐ＿ｏｋは、文字列が照合したときに照合プロセスを停止させるために使用され、ｓｔｏｐ＿ｅｒｒはその他の場合に使用される。これらの状態は、基となるＤＦＡに存在してもよい。
【００７３】
分割状態機械内のこれらの状態を識別するために、異なるソリューションも可能である。例えば、ビットをＰＭＶ値に追加する（例えば各停止条件につき１ビット）ことが可能であり、又はビットをｌｉｎｋｓ＿ｍｅｍｏｒｙに追加することが可能である。一実施形態では、各分割状態機械につき、別の１つのメモリ：ｔｙｐｅ＿ｍｅｍｏｒｙが管理される。このメモリは、ｌｉｎｋｓ＿ｍｅｍｏｒｙ内に記憶された状態が受容状態に対応するのか、それとも非受容状態に対応するのかを示せるようにする。これらの状況では、代替として、停止条件をｔｙｐｅ＿ｍｅｍｏｒｙに記憶することができる。
【００７４】
各ソリューションは、それ自体の制約及び／又は利点を伴う。ビットがＰＭＶ値に追加される場合、停止状態に達したことを１クロックサイクルで識別することは困難となる可能性がある。この場合、停止状態は「トラップ」状態でなければならない。実際に、この状態になってしまえば、分割状態機械が評価され続ける場合であっても、それ以上の入力文字を処理すべきではなく、状態機械はこの同じ状態に留まる。一方、このソリューションでは、ＰＭＶの幅が大きいため、多くの区別可能な停止状態の処理が可能である。
【００７５】
ｌｉｎｋｓ＿ｍｅｍｏｒｙへの停止ビットの追加に対応するソリューションは、少数のみの停止ビットがある場合には簡易なソリューションである。この場合、ＰＭＶの復号に長い時間がかかる場合であっても、次の状態と同時に停止条件が分かるため、分割状態機械の性能に対して影響を及ぼさない。このソリューションの主な欠点は、すべての状態のすべてのリンクに情報が存在することからくるメモリ消費量である。
【００７６】
分割状態機械レベルにおいて、異なる複数のメモリを、単一のメモリに従って、又は複数のメモリに従って実装することができる。いずれであっても、分割状態機械メモリコンテキスト１１が、対応する分割状態機械内のある状態から別の状態へのコース、即ち現在の状態から次の状態へのコースを扱うために使用される。このコンテキストメモリを、以下に、第２の代替実施形態において詳述する。
【００７７】
さらに、一実施形態では、初期化レジスタ１０９が、異なる分割状態機械内の現在の状態を初期化するように構成されたユニットに対応する。
【００７８】
図２は、第２の代替形態に対応する一実施形態によるメモリアーキテクチャを説明する。
【００７９】
この実施形態では、メモリコンテキスト１１は単一の分割状態機械専用としてもよく、メモリ１２は、有利なことに、すべての分割状態機械によって共有することができる。
【００８０】
以下の実施形態によれば、入力記号は８ビットワードであり、これは４つの部分に分けられ、各部分は２ビットに対応する。有利には、各部分は、ソースＤＦＡグラフから得られる分割状態機械の１つによって処理される。
【００８１】
メモリコンテキスト１１は、ｌｉｎｋｓ＿ｍｅｍｏｒｙ１０５を含む。ｌｉｎｋｓ＿ｍｅｍｏｒｙ１０５は、ある与えられた分割状態機械に関連付けられ、この分割状態機械の各状態について、状態０−状態ｘｘｘの各状態について、潜在的なリンク（リンク０、リンク１、リンク２、及びリンク３）１つごとに４つのメモリロケーションが関連付けられる。ある受容状態に対応するある与えられた状態では、受容状態に関連付けられたデータに対応する多くのメモリロケーションは使用されない。何故なら、分割状態機械内には最大でｇ個の受容状態しかないためである。
【００８２】
これらのメモリロケーションの使用を最適化するために、使用されないメモリロケーションは、非受容状態に関連付けられたデータリンクを記憶するために使用することができる。
【００８３】
この状況では、あるメモリロケーションが非受容状態に対応するか否かを示すビットタイプが、（受容状態に関連付けられたデータリンク専用のエリア内であっても）これらのメモリロケーションに関連付けられる。
【００８４】
「ｔｙｐｅ＿ｍｅｍｏｒｙ」１１２は、ある状態値がある受容状態に対応するのか、それともある非受容状態に対応するかの判断を可能にするように構成される。ｔｙｐｅ＿ｍｅｍｏｒｙは、分割状態機械の状態ラベルによってアドレス指定される。このメモリはタイプビットを返す。タイプビットは、状態が受容状態である場合には範囲０から４ｇ−１にセットされ、受容状態ではない場合、メモリは「０」を返し、これが通常状態であることを意味する。
【００８５】
ｔｙｐｅ＿ｍｅｍｏｒｙに必要な容量は、
（α／ｂ）*ｇビット
であることができる。但し、
ｇは、基となる状態機械内の受容状態数であり、
ｂは、各分割状態機械によって処理されるビット数であり、
（α／ｂ）は、基となる分割状態機械に対応する分割状態機械の数であり、
αは、入力記号のビット数である。
【００８６】
簡明にするために、ｌｉｎｋｓ＿ｍｅｍｏｒｙの１ビットを、各ワードについてのこの情報を符号化するための専用のものとすることが可能である。しかし、これは必要なことではない。実際に、この情報は、分割状態機械の最初の（α／ｂ）*ｇ個の状態についてのみ必要である。
【００８７】
このビットは、受容状態に影響されない状態値の使用を可能にし、「受容状態区間」に対応する区間である０から［（α／ｂ）*ｇ−１］内に含まれる。「タイプ」ビットがクリアされる場合、それが非受容状態であることを意味し、クリアされていない（セットされている）場合、対応する状態が受容状態であることを意味する。
【００８８】
一実施形態では、値が（α／ｂ）*ｇ以上であるすべての状態は非受容状態であるのに対し、値が「特殊状態区間」内にある状態は、「タイプ」ビットの値に応じて受容状態又は非受容状態のいずれかである。
【００８９】
現在の状態が非受容状態区間内にあるか否かを検出するために、比較器を各分割状態機械に関連付けることができる。これにより、このエリア内の状態に対して「タイプ」ビットを使用する必要がない。
【００９０】
以下の表はその態様を示す。
【００９１】
【表１】
0005254742.tif 000002
【００９２】
当然ながら、ｌｉｎｋｓ＿ｍｅｍｏｒｙのあらゆるワードに１つのタイプビットがある場合、比較器は必要ない。
【００９３】
一実施形態では、ｌｉｎｋｓ＿ｍｅｍｏｒｙ及びｔｙｐｅ＿ｍｅｍｏｒｙを同じメモリ内に設計するほうが容易であり得る。この態様に限定されない。
【００９４】
ＰＭＶ＿ｍｅｍｏｒｙは、幅が広いが深度が比較的浅いため、内部メモリとして実装することができる。ＰＭＶメモリを複数の異なる分割状態機械で共有させることが効率的であるはずである。
【００９５】
このＰＭＶ＿ｍｅｍｏｒｙのサイズの上限は、
（α／ｂ）*ｇワード、各ワードｇビットである。
【００９６】
かかるメモリ容量は、すべての分割状態機械内のすべての受容状態のすべての異なるＰＭＶ値の記憶を可能にする。
【００９７】
一実施形態では、有利なことに、受容状態のみが非ヌルのそれぞれのＰＭＶ値を有し、すべての非受容状態はＰＭＶヌルを有する。したがって、非受容状態が識別される場合にＰＭＶ値を記憶することは無用である。受容状態の数は一般に、分割状態機械の状態総数と比較して小さいため、かかるメモリ管理はメモリの大量な節約に相当し得る。
【００９８】
これに加えて、表を記憶するために必要な容量は、一般に、従来得られる理論上の最大容量よりもよい。何故なら、一般に、異なる状態機械の異なるＰＭＶ値間にいくらかの冗長性があるためである。
【００９９】
かかるアーキテクチャにおいて、一実施形態では、制御ロジックユニットが存在する。このロジックは、すべての分割状態機械によって提供される信号の収集を担当する。これらのすべての信号が受容状態を示す場合、部分一致ベクトルは非ヌル値を有し、使用可能であり、そうでない場合には非受容状態である。受容状態が検出された場合、部分一致ベクトルが復号されて、ソースオートマトン内の識別子が生成される。
【０１００】
この制御ロジックユニットは、ＰＭＶ値の生成を担当することができる。
【０１０１】
別の実施形態では比較器が使用され、この比較器は、許容状態に関連付けられたエリアに配置されつつも非受容状態に関連付けられるリンクデータを検出するように構成される。比較器の使用により、ｌｉｎｋｓ＿ｍｅｍｏｒｙ内のあらゆるワードに１つのタイプビットを追加することと比較してメモリの大きな節約が可能である。実際に、かかるビットタイプの追加は、
２b＊２pビットではなく、（８／ｂ）＊ｇビット
というメモリ要件に相当する。
【０１０２】
ｌｉｎｋｓ＿ｍｅｍｏｒｙ及びｔｙｐｅ＿ｍｅｍｏｒｙは、同時にアドレス指定することが可能である。
【０１０３】
有利なことに、ｌｉｎｋｓ＿ｍｅｍｏｒｙが必要とするのは４*ｇワード以下であり、これは４*ｇ個の異なるＰＭＶ値に対応する。
【０１０４】
文字列は、それぞれのサイズに従ってグループ化することができる。または、文字列は、特定のＰＭＶ値が１つの分割状態機械内で１回のみ使用されることを保証する、別の基準に従ってグループ化することができる。
【０１０５】
図２を参照して説明されるアーキテクチャにおいて、一実施形態では、図１に示される初期化レジスタ１０９のような初期化レジスタを導入することができる。
【０１０６】
以下の項において、一例に基づく本発明の一実施形態を示す。この例によれば、基となる状態機械は、以下の文字列セットを認識するように構成される。
−ｈｉｓ
−ｈｅ
−ｈｅｒｓ
−ｓｈｅ
【０１０７】
この基となる状態機械は４個の分割状態機械に分割され、各分割状態機械は１つの入力記号のうちの２ビットを処理する。各分割状態機械の挙動の説明は、遷移表により説明される。
【０１０８】
かかる表では、１列目は現在の状態を表す。そして、各行は、この現在の状態に対応する状態コンテキストの表現を含む。すなわち、各行は、考慮中の分割状態機械によって処理される、入力記号の一部がとり得る異なる値（即ち１行目では値００、０１、１０、及び１１）に応じて異なる、次の状態の候補を含む。１列目では、値０〜９が現在の状態に対応する。最後の列は、現在の状態に関連付けられたＰＭＶ値を表す。
【０１０９】
以下のテーブル１は、第１の分割状態機械によって実行される処理を示す。この分割状態機械は、入力記号のビット７：６を処理する。
【０１１０】
【表２】
0005254742.tif 000003
【０１１１】
受容状態（太字）に対応することができる３つの状態を含む５つの状態が、第１の分割状態機械によって管理される。
【０１１２】
以下のテーブル２は、第２の分割状態機械によって実行される処理を示す。この分割状態機械は、入力記号のビット５：４を処理する。
【０１１３】
【表３】
0005254742.tif 000004
【０１１４】
受容状態（太字）に対応することができる４つの状態を含む８つの状態が、第２の分割状態機械によって管理される。
【０１１５】
以下のテーブル３は、第３の分割状態機械によって実行される処理を示す。この分割状態機械は、入力記号のビット３：２を処理する。
【０１１６】
【表４】
0005254742.tif 000005
【０１１７】
受容状態（太字）に対応することができる４つの状態を含む１０の状態が、第３の分割状態機械によって管理される。
【０１１８】
以下のテーブル４は、第４の分割状態機械によって実行される処理を示す。この分割状態機械は、入力記号のビット１：０を処理する。
【０１１９】
【表５】
0005254742.tif 000006
【０１２０】
受容状態（太字）に対応することができる４つの状態を含む９つの状態が、第４の分割状態機械によって管理される。
【０１２１】
上記各テーブルの最初のライン（現在の状態＝０）は、各分割状態機械の初期状態を示す。
【０１２２】
上記テーブルにおいて観察することができるように、いくつかのＰＭＶ値は異なる分割状態機械内において重複する。
【０１２３】
以下の表であるテーブル５はＰＭＶ＿ｍｅｍｏｒｙに対応し、分割機械内で使用される、異なるＰＭＶ値及びそれぞれの重複しないオフセットを含む。
【０１２４】
【表６】
0005254742.tif 000007
【０１２５】
第１の代替形態の一実施形態によれば、以下のステップが実行される。
−遷移表内でＰＭＶ値をＰＭＶ＿ＩＤに置き換えること
−ＰＭＶ＿ｍｅｍｏｒｙ内のヌル値についてＰＭＶ＿ＩＤを作成すること
【０１２６】
第２の代替形態に対応する本発明の一実施形態では、ｌｉｎｋｓ＿ｍｅｍｏｒｙへのオフセットの記憶を回避するために、名前を変更するステップが実行される。
【０１２７】
第１の分割状態機械において実行される名前を変更するステップは、以下のテーブルであるテーブル６によって示すことができる。
【０１２８】
【表７】
0005254742.tif 000008
【０１２９】
新状態ラベルは、受容状態に関連付けられたＰＭＶ＿ＩＤに等しい。通常状態のラベルは、ＰＭＶ識別に対して特別な意味を持たない（関連付けられたタイプビット＝０で示される）。
【０１３０】
第２の分割状態機械において実行される名前を変更するステップは、以下のテーブルであるテーブル７によって示すことができる。
【０１３１】
【表８】
0005254742.tif 000009
【０１３２】
第３の分割状態機械において実行される名前を変更するステップは、以下のテーブルであるテーブル８によって示すことができる。
【０１３３】
【表９】
0005254742.tif 000010
【０１３４】
第４の分割状態機械において実行される名前を変更するステップは、以下のテーブルであるテーブル９によって示すことができる。
【０１３５】
【表１０】
0005254742.tif 000011
【０１３６】
太字の文字は、上記４つのテーブル内の受容状態に対応する。
【０１３７】
このステップにおいて、ｔｙｐｅ＿ｍｅｍｏｒｙを各分割状態機械について埋めることができる。タイプビットはそれぞれ、ｔｙｐｅ＿ｍｅｍｏｒｙ内の「新状態ラベル」オフセットに書き込まれる。
【０１３８】
初期状態レジスタもここで更新することができる。異なる分割状態機械の初期状態構成は、ここで３：１：１：１である。各数は左から右に、第１〜第４の分割状態機械の初期現在状態にそれぞれ対応する。この初期状態レジスタは、状態機械が起動され次第、正しい初期状態にロードするために使用される。
【０１３９】
状態の名前変更が決定された場合、遷移表を更新することができる。テーブル１０〜１３に新しい遷移表を示す。これらの表が決定されると、メモリｌｉｎｋｓ＿ｍｅｍｏｒｙを各分割状態機械について埋めることができる。
【０１４０】
テーブル１０〜１３は、状態値の前のラベルを新しいラベルに置き換えることからなる名前を変更するステップ後の遷移表に対応する。さらに、この各遷移表は、現在の状態の昇順にソートされている。
【０１４１】
以下のテーブル１０は第１の分割状態機械に対応する。
【０１４２】
【表１１】
0005254742.tif 000012
【０１４３】
状態３及び４に関連付けられるタイプビットは０に等しく、したがって、これらの状態３及び４は非受容状態（ＰＭＶヌル）に対応する。
【０１４４】
これに加えて、状態の名前変更後、テーブル６によれば、
−状態０は１０００に等しいＰＭＶに対応し、
−状態１は１１１０に等しいＰＭＶに対応し、
−状態２は１１１１に等しいＰＭＶに対応し、
−状態３は００００に等しいＰＭＶに対応し、
−状態４は００００に等しいＰＭＶに対応する。
【０１４５】
以下のテーブル１１は第２の分割状態機械に対応する。
【０１４６】
【表１２】
0005254742.tif 000013
【０１４７】
状態１、２、６、及び７に関連付けられるタイプビットは０に等しく、したがって、これらの状態は非受容状態（ＰＭＶヌル）に対応する。
【０１４８】
これに加えて、状態の名前変更後、テーブル７によれば、
−状態０は１０００に等しいＰＭＶに対応し、
−状態１は００００に等しいＰＭＶに対応し、
−状態２は００００に等しいＰＭＶに対応し、
−状態３は００１０に等しいＰＭＶに対応し、
−状態４は１１００に等しいＰＭＶに対応し、
−状態５は０００１に等しいＰＭＶに対応し、
−状態６は００００に等しいＰＭＶに対応し、
−状態７は００００に等しいＰＭＶに対応する。
【０１４９】
以下のテーブル１２は第３の分割状態機械に対応する。
【０１５０】
【表１３】
0005254742.tif 000014
【０１５１】
状態１、２、６〜９に関連付けられるタイプビットは０に等しく、したがって、これらの状態は非受容状態（ＰＭＶヌル）に対応する。
【０１５２】
これに加えて、状態の名前変更後、テーブル８によれば、
−状態０は１０００に等しいＰＭＶに対応し、
−状態１は００００に等しいＰＭＶに対応し、
−状態２は００００に等しいＰＭＶに対応し、
−状態３は００１０に等しいＰＭＶに対応し、
−状態４は１１００に等しいＰＭＶに対応し、
−状態５は０００１に等しいＰＭＶに対応し、
−状態６〜９は００００に等しいＰＭＶに対応する。
【０１５３】
以下のテーブル１３は第４の分割状態機械に対応する。
【０１５４】
【表１４】
0005254742.tif 000015
【０１５５】
状態１、２、６〜８に関連付けられるタイプビットは０に等しく、したがって、これらの状態は非受容状態（ＰＭＶヌル）に対応する。
【０１５６】
これに加えて、状態の名前変更後、テーブル８によれば、
−状態０は１０００に等しいＰＭＶに対応し、
−状態１は００００に等しいＰＭＶに対応し、
−状態２は００００に等しいＰＭＶに対応し、
−状態３は００１０に等しいＰＭＶに対応し、
−状態４は１１００に等しいＰＭＶに対応し、
−状態５は０００１に等しいＰＭＶに対応し、
−状態６〜８は００００に等しいＰＭＶに対応する。
【０１５７】
本発明の一実施形態では、有利なことに、分割状態機械環境でのＰＭＶの処理に必要なメモリ容量を低減することができる。実際に、非受容状態に関連付けられたＰＭＶを記憶するための記憶容量が必要ない。一般に、非受容状態は最も頻度の高い状態であるため、この態様により、メモリ量要件をかなり低減することが可能である。
【０１５８】
これに加えて、ＰＭＶ＿ｍｅｍｏｒｙはすべての分割状態機械によって共有されるため、これにより、異なる分割状態機械間で共通のＰＭＶがある場合に値の重複を避けながら、異なる分割状態機械の受容状態に関連付けられたＰＭＶのみを記憶するだけでよい。
【０１５９】
したがって、識別することができる受容状態の数がここではより重要になり得る。
【０１６０】
さらに、使用されるメモリ容量を低減することにより、本明細書において説明したすべてのメモリは、大きな状態機械の場合であっても、ＦＰＧＡ又はＡＳＩＣのような素子自体内に実装することができる。
【０１６１】
本発明の一実施形態によるかかる一実装態様は、それぞれ２ビット又は４ビットを処理することができる分割状態機械を使用して、異なる幅、例えば８又は１６ビットの入力記号の処理を可能にするが、より多くの分割状態機械を使用して（８個の分割状態機械を使用しての３２ビット入力記号のように）他のサイズも可能である。
【図面の簡単な説明】
【０１６２】
【図１】本発明の一実施形態による分割状態機械のモジュールのアーキテクチャを示す。
【図２】本発明の別の一実施形態によるメモリアーキテクチャを示す。
【図１】
0005254742.tif 000016
【図２】
0005254742.tif 000017