【文献】
金田 悠作、外2名,高速ストリーム処理のためのビット並列パターン照合手法にもとづくハードウェアアルゴリズム,第1回データ工学と情報マネジメントに関するフォーラム−DEIMフォーラム−論文集,日本,電子情報通信学会データ工学研究専門委員会,2009年12月25日,p.1−5
【文献】
Hong-Jip Jung,外2名,"Performance of FPGA Implementation of Bit-split Architecture for Intrusion Detection Systems",2006 IEEE International Parallel & Distributed Processing Symposium,2007年 3月
【文献】
Zachary K. Baker,外2名,"REGULAR EXPRESSION SOFTWARE DECELERATION FOR INTRUSION DETECTION SYSTEMS",2006 International Conference on Field Programmable Logic and Applications,2007年 4月
(58)【調査した分野】(Int.Cl.,DB名)
請求項1に記載の装置であって、該装置は前記Nビットワイドワードに関して動作して前記パターンを照合する単一FSMをエミュレートし、前記一致出力は前記単一FSM内の異なる取り得る一致状態に対応する、請求項1に記載の装置。
【背景技術】
【0001】
有限状態機械(FSM:Finite State Machine)は多くの場合に、データストリングの中の規定されたパターンを探索するのに用いられる。FSMは「有向辺」によって接続される複数の状態を有する機械である。FSMは、FSMによって新たな入力ワードが受信されるたびに、現在の状態から次の状態に移動する。それゆえ、各辺は、その辺に関連付けられる1つ又は複数の値を有する。FSMが或る辺上の値に等しい値を有する入力ワードを受信し、かつFSMがその辺の入力側に関連付けられる状態にあるとき、FSMはその辺の出力側に関連付けられる状態に変化する。その後、FSMは次の入力ワードを処理し始める。データストリングはデジタル値のシーケンスである。そのデジタル値は、複数のデータ源のいずれかから到来することができる。例えば、データ源は、通信リンク上のデジタル伝送とすることができる。別の例では、データストリングは、各デジタル値が8ビットワードであるASCIIにおいて符号化されたテキストのストリングとすることができる。また、データストリングは、デジタルオシロスコープによって生成されるような測定値のシーケンスとすることもでき、その場合、各デジタル値は、或るより大きなワード、例えば、12ビットワード又は16ビットワードとすることができる。場合によっては、データストリングははるかに大きなワードを含むことができる。例えば、データストリングは、命令が64ビットワードであるプログラムとすることができる。
【0002】
通常、探索プログラムは、これらのシーケンスの中の正規表現として表すことができる規定されたパターンを探索することと含む。このタイプの問題は、数多くのデータ処理問題において直面される。例えば、長いテキストのドキュメントの中の、特定のフレーズが探索される場合がある。同様に、オシロスコープのような機器において、測定値の非常に長いストリングの中の、特定の波形パターンが探索されることが必要な場合がある。コンピュータコードの場合、ウィルスチェックプログラムにおいてマルウェアを探索するのが一般的である。
【0003】
単一FSMが探索に用いられる場合には、探索を完了する時間は、データストリングの長さの一次関数である。測定値の長いストリング、例えば、10
12データポイントの場合、探索時間は実行できないほど長くなる可能性がある。さらに、リアルタイム処理を必要とする応用形態の場合、それより少ないポイントが関与する場合であっても、データポイントを処理する時間は、実行できないほど長くなる可能性がある。最新のデジタルオシロスコープは、最大2チャネルの場合にチャネルあたり160ギガサンプル/秒を、最大4チャネルの場合にチャネルあたり80ギガサンプル/秒を生成することができる。データ内のパターンを時間内に見つけて、そのパターンを含む信号を取り込むという問題は、時間がかかりすぎるので、トリガ用プロセッサとしてFSMを使用できない可能性がある。
【0004】
探索時間を短縮する1つの方法は、状態を更新するたびに複数のワードを処理するFSMを利用する。これは、FSMを元のワードサイズの倍数を用いて構築することと同じである。2ワードワイドFSMが用いられる場合には、探索時間は2分の1に短縮される。残念なことに、FSMを実現するのに必要とされるメモリの量によって、設定される入力ワードのサイズには限界がある。
【0005】
FSMを実現するのに必要とされるメモリの量は、ワードサイズの指数関数である。一般的な場合に、FSMは、取り得る入力値ごとに1つの行と、状態ごとに1つの列とを有する表を用いて実現される。表は、FSMの現在の状態と、次の状態への現在の入力とをマッピングしている。表内の行の数は2
Nである。ただし、Nは入力ワード内のビット数である。それゆえ、16ビットより大きな入力ワードの場合に、メモリに基づくFSMを構築することは、かなりの難題を提起する。問題によっては、メモリの量を種々の圧縮技法を用いて削減することができる。しかしながら、これらの技法によっても実用的な実施態様につながらない問題が相変わらず存在する。
【0006】
より高速の回路を用いることによって利用可能な速度を超えてFSMの処理速度を改善するのに、複数のFSMが並列に動作する機械が提案された。残念なことに、並列FSMを利用する従来技術の探索エンジンは、探索することができるパターンのタイプに制限がある。本検討には、正規表現によって表すことができるパターンのタイプを2つの種類に分けることが有用である。第1の種類は「固定パターン」と呼ばれる。例えば、テキストストリングの中のパターン「var=x」を探索することができる。固定パターンは既知の固定長を有し、入力ストリーム内の唯一のパターンによって満たされる。第2の種類のパターンは「可変パターン」と呼ばれる。これらのパターンは未知の長さを有するか、又は複数の異なるストリングによって満たされる。例えば、「var=[a−z]+;」は、「var=」から始まり、その後、小文字アルファベット内の任意の数の文字が続き、その後、「;」が続く任意のパターンによって満たされる。このパターンは、長さに関して、同様に厳密な内容に関しても、あらかじめ予測できないストリングを生成する。ウィルス検出において利用されるような、対象となる数多くの探索問題は、可変パターンの探索を必要とする。
【0007】
固定パターンの場合の並列FSMに基づく探索エンジンは当該技術分野において既知である。複数のFSMのそれぞれが、レーンと呼ばれる特定のストリームからのデータを処理する機械について考える。探索パターンをL個のレーンにわたって分割できる場合には、L個のプロセッサを備える探索エンジンを用いることができる。この構成では、入力データストリームは、第1のFSMがワード1、L+1、2L+1等からなる入力ストリングを処理するようにレーンにわたってストライピングされる。第2のFSMはワード2、L+2、2L+2...からなる入力ストリングを処理し、それ以外も同様である。各FSMは特定のパターン、すなわち、全パターンの長さの1/Nを探索する。各FSMがその指定された一致を見つけるとき、その探索エンジンは、その一致を結合回路に出力し、結合回路は、全てのFSMが一致を同時に見つけるのを確実にするように試験する。残念なことに、可変パターンは、このように決まった数のプロセッサにわたって分割できないので、この方策は可変パターンを伴う探索の場合に失敗する。そのパターンは可変パターンである。
【発明を実施するための形態】
【0013】
本発明は、入力データのワードサイズよりも著しく小さなワードサイズを有し、可変パターンを探索するように並列に動作することができるFSMを利用する並列探索エンジンを提供する。以下の検討を簡単にするように、FSMによって利用されるワードサイズはFSMワードサイズと呼ばれる。このワードサイズは、探索される入力ストリングのワードサイズより大きくすることも、小さくすることもできる。探索されるストリングのワードサイズは入力ワードサイズと呼ばれる。ここで対象となる事例では、FSMワードサイズは入力ワードサイズよりも著しく小さい。入力ワードサイズよりも小さいFSMワードサイズに関して動作するFSMは、サブワードFSMと呼ばれる。最も小さなサブワードFSMは1ビットのFSMワードサイズを有する。
【0014】
本発明がその利点を提供する方法は、入力データシーケンス内のパターンを探索する、より大きなFSMをエミュレートするように並列に動作する複数の単一ビットFSMを含む探索エンジンに関して更に深く理解することができる。より大きなFSMは、以下の検討において、1ワードFSMと呼ばれる。対象となるパターンに対する1ワードワイド探索エンジンは既に設計されていると仮定する。正規表現によって表されるパターンに対するFSMを生成する方法は、当該技術分野において既知であり、それゆえ、ここでは詳細には論じられない。
【0015】
そのシーケンスの入力ワードはNビット幅であり、1ワードFSM内の状態数はMによって表される。1ワードFSMは通常、状態図によって表され、状態図では、種々の状態が状態間の遷移を表す複数の「辺」によって接続される。各辺は開始状態及び終了状態と、1つ又は複数の「トークン」とを有する。現在の状態が開始状態であり、トークンのうちの1つのトークンの値を有するワードが受信されるとき、終了状態が、そのFSMの次の状態である。各Nビット入力ワードが2
Nの取り得る値を有するので、原理的には、状態ごとに2
Nの取り得るトークン値が存在する。それゆえ、FSMは、M個の取り得る現在の状態及び現在の入力ワードごとに次の状態を与える2
N行及びM列を有する表における単純な索表動作によって動作することができる。それゆえ、遷移を行う時間は基本的にFSM内の状態数とは無関係である。
【0016】
Nの値が大きい場合、この表によって必要とされるメモリがこの単純な手法を実行不可能にする。入力データストリームがデジタルオシロスコープ等の機器からの一連の測定値である応用形態の場合に、多くの場合に32ビット又は64ビットのN値が必要とされる。そのような応用形態では、FSMを用いて、機器によって測定された波形を解析し、対象となる特徴を識別する。それゆえ、大きなワードのFSMを実施するのに必要とされるメモリの量を削減する機構が必要とされる。
【0017】
本発明の一実施形態では、入力ストリームを探索するのに、N個の単一ビットFSMが並列に使用される。以下で更に詳細に論じられるように、単一ビットFSMのうちの1つ又は複数は、NビットワードFSMよりも多くの状態数を有することができる。この最大状態数をM’によって表す。単一ビットFSMは、多くても2行×M’列を有する表しか必要としない。ここで、N個のそのようなFSMが並列に動作している。1バイト探索ワードの場合、N=8であり、メモリ要件は、256行×M状態と比べて、16行×M列以下である。1ビットFSMにおいて状態数が著しく多い場合であっても、依然としてメモリは著しく節約される。
【0018】
一般的に、並列に作動しているN個の単一ビットFSMは、探索を完了するのに概ね同じ時間を要する。コストはメモリ要件の直接の相関要素であるので、それゆえ、この手法における大きな節約はコストの削減である。しかしながら、FSMのサイズが小さいほど、簡単な回路を使用することになるので、結果として速度も多少の改善が図られる場合がある。さらに、この手法は大きな入力ワードのFSMを実用的にする。
【0019】
1ワードFSMよりも著しい速度の改善を得るように、元の1ワードFSMから、一度に2ワードに関して動作するFSMを導出することができる。その際、この新たな2ワードFSMは、並列に作動する2N個の単一ビットFSMとして実現される。この場合、入力ストリームの長さが実効的に半分にされるので、並列処理によって2倍の速度が与えられる。Nの更に大きな倍数である探索ワードを有するFSMを使用し、さらに、単一ビットFSMの対応する集合体を実現することによって、更なる改善を実現することができる。この場合、メモリを著しく節約することができる。
【0020】
以下の検討を簡単にするように、サブワードFSMは単一ビットFSMであると仮定される。他のサイズのサブワードFSMを利用することができる方法は、以下で更に詳細に論じられる。一般的に、NビットFSMは「一致した」状態である少なくとも1つの状態を有する。FSMがこの状態に入るとき、FSMに取り付けられた処理ハードウェアに、それを得るようにFSMが作成されたターゲットパターンのうちの1つに対する一致が見いだされたことを指示する信号が生成される。1つのFSM内に複数のそのような一致状態が存在する場合がある。
【0021】
各単一ビットFSMは、NビットFSMに対する入力ワードのうちの対応するビットに関して動作する。各単一ビットFSMは、他の単一ビットFSM内で行われる遷移とは関係なく、その遷移を行わなければならない。ターゲットパターンが見いだされたために、NビットFSMに対する入力ワードがそのFSMにおいて一致をトリガするとき、各単一ビットFSMは同じように一致を報告しなければならない。より大きなFSMでは、単一ビット一致は、複数の取り得る一致状態を規定する場合があることに留意されたい。結合プロセッサが複数の単一ビットFSMからの一致出力の収集物を受信し、全ての単一ビットFSMによって報告される共通状態が存在するか否かを判断する。その後、その共通状態は一致した状態として外部に報告される。
【0022】
正規表現からなる探索パターンを考えると、その正規探索パターンを実現する最小FSMが存在する。最小FSMは、その探索パターンを実現する最小状態数を有するFSMである。最小FSMは特有のトポロジを有する。特定のパターンに対する任意のFSMを考えると、状態を除去するか、又は統合することによって最小パターンを導出することができる。任意の入力の場合に初期状態から到達不可能である任意の状態を除去することができる。任意の入力の場合に互いに区別することができない任意の2つの状態は統合することができる。FSMがもはや任意の到達不可能な状態又は区別不可能な状態を有しないとき、そのFSMは最小FSMである。
【0023】
可変パターンの探索を実現するFSMは、少なくとも1つの辺上に複数のトークンが存在する最小FSMを有するか、又は「
*」等のワイルドカードによって作成された直接ループを含む最小FSMを有する。すなわち、最小FSMにおいて、複数の異なる入力値の場合、又は繰り返す入力値の場合、又は場合によっては、全く入力値がない場合でも第1の状態から第2の状態への遷移が生じるという特性を有する2つの状態が存在することになる。対照的に、固定パターンを探索するFSMは、全ての辺上に所与の状態への単一トークンのみを有する最小FSMを有する。
【0024】
1ワードFSMから複数の単一ビットFSMを導出する従来技術の技法は、1ワードFSMが、固定パターンである対応する探索パターンを有する場合のみ確実に作動する。さらに、1つの辺上に複数のトークンを含むが、固定長パターンを有するFSMも、そのようなFSMを複数のサブワードFSMとして実現しようと試みるときに難題を提起する。
【0025】
本発明がその利点を提供する方法は、簡単な例を参照することにより容易に理解することができる。パリティが正確であるかを検査されることになるデータワードストリームについて考える。各データワードは偶数パリティ又は奇数パリティのいずれかを有する。パリティ計算器の正規表現は以下の通りである。
({偶数}
*{奇数}{偶数}
*{奇数})
*{偶数}
*
【0026】
ここで「偶数」は、偶数パリティを有するストリーム内のワードを表し、「奇数」は奇数パリティを有するストリーム内のワードを表す。正規表現は、偶数パリティを有する任意の数(0以上)のワードに奇数パリティを有する1ワードが続き、その後に、偶数パリティを有する任意の数のワードに奇数パリティを有する1ワードが続き、それらを任意の回数だけ繰り返した後に、偶数パリティを有する任意の数のワードが続くことによって満たされる。「
*」は先行値の0以上を意味するので、このパターンは可変であり、かつ未知の長さを有する。さらに、このパターンを見つける最小FSMは、全ての既知の入力に対して、ビットレベルにおいて区別不可能である2つの状態間の辺上に複数のトークンを有する。
【0027】
その例を簡単にするように、そのデータストリームは3ビットワード、すなわち、0〜7の整数値であると仮定される。0、3、5及び6は偶数パリティを有し、1、2、4及び7は奇数パリティを有することに留意されたい。それゆえ、3ビットワードの事例では、正規表現は以下の通りである。
({0,3,5,6}
*{1,2,4,7}{0,3,5,6}
*{1,2,4,7})
*{0,3,5,6}
*
【0028】
見やすくするように、整数トークンを分けるのにコンマが用いられており、トークンをまとめるのに中括弧{}が用いられている。
【0029】
このパターンを実施する最小FSMが
図1に示される。以下の検討において、「一致」出力をトリガする状態は二重丸の境界で示される。一致は、状態「0」に入るときに生じる。すなわち、1、2、4若しくは7の入力が受信され、かつFSMが状態「1」にあるときに、又は0、3、5若しくは6が受信され、かつFSMが状態「0」にあるときに一致が生じる。
【0030】
ここで、
図2を参照すると、上記で論じられたパターンを実施する装置20が示される。その装置20への入力ストリング21は、3ビットワード22のシーケンスからなる。各ワードは装置20の入力レジスタ15の中にシフトされる。入力レジスタ15は、現在のワード内の各ビットを異なる単一ビットFSMに与える。FSMは11〜13において示される。各FSMは、そのFSMに入る単一ビットストリームに関してのみ動作する。それゆえ、FSM11は入力ワードの最下位ビットb
0に関してのみ動作し、FSM12は次の上位ビットb
1に関してのみ動作し、FSM13は最上位ビットb
2に関してのみ動作する。FSMのうちのいずれかが一致を見いだすとき、そのFSMはその一致を結合器14に報告する。結合器14が、全てのFSMから同じ一致状態を指示する一致報告を受信する場合には、結合器14はその一致を外部に報告する。
【0031】
FSMのそれぞれが単一ビットストリームに関してのみ動作するので、そのFSMはそのビット値のみに基づいて状態変化を行わなければならず、それらの状態変化は、一致した状態を得るように全ワードに関して動作することになっていた1ワードFSMの場合の状態変化に対応しなければならない。しかしながら、以下で更に詳細に説明されるように、1ビットFSMの状態が、1ワードFSMの複数の状態に対応する場合がある。この例における8つの状態に対するビット値が以下に示されており、最下位ビットはb
0である。
【0033】
図1のFSMは1、2、4及び7のワード値に関して遷移する。FSM11は、b
0値を「見る」だけである。しかしながら、値1及び7はFSM11への入力において1に対応し、値2及び4はFSM11への入力において0に対応する。同様に、第2の1組の値0、3、5及び6は、FSM11への特有のビット値を与えない。それゆえ、FSM11が0を受信するとき、その0は2若しくは4からくる可能性があるか、又は0若しくは6からくる可能性があり、2及び4は0及び6とは異なる辺によって表されるので、FSM11は次の状態に遷移するか否かがわからない。FSM12及び13の場合にも同様の問題がある。これらの問題は、異なる状態に遷移する1つ又は複数の辺上に複数のトークンが存在することから生じる。結果として、ワードワイズFSMを複数のサブワードFSMに変換する従来技術の技法は、辺あたり、1つのトークンのみを有するか、又は区別する必要がない1組のトークンを有する固定パターンに限定される。例えば、FSMが、大文字又は小文字いずれかにおいて、「s」又は「t」の入力を認識するように設計される場合には、その入力は実際には、「S」、「s」又は「T」、「t」のいずれかとすることができる。ASCIIでは、ビット5は大文字、小文字の区別を見分ける役割を担うビットであり、大文字はそのビットが0に設定されており、小文字はそのビットが1に設定されている。それゆえ、この場合、ビット5の値は重要ではない。
【0034】
辺が1つのみのトークンを有する場合であっても、「
*」がパターン内に存在するときに同様の問題が生じる。ASCII文字の入力ストリング内で探索されることになるサンプルパターン「za
*」について考える。そのパターンは、zに、0を含む任意の数のaが続くことよって満たされる。すなわち、一致が「z」、「za」、「zaa」等に対応する。このパターンに対するワードワイズFSMが
図3に示される。FSMは状態0において開始し、「z」が受信されるまでその状態のままである。「z」が受信されるとき、FSMは状態1に遷移し、一致を報告する。状態1において「a」以外の任意の他の文字が受信される場合には、FSMは状態0に遷移して戻る。状態1にある間に「a」が受信される場合には、FSMは「a」によってループバックし、一致を報告する。
【0035】
8つの単一ビットFSMにおいてこのFSMを実現することに伴う問題は、そのFSMが最下位ビットを取り扱う場合に最も容易に理解することができる。ASCIIにおいて「z」の最下位ビットは0であり、一方、「a」の最下位ビットは1である。FSMが0を受信したので、状態0から状態1に遷移したと仮定する。次に受信したビットが「a」でない場合には、FSMは状態1に戻ることになる。次のビットが「a」からのものである場合には、FSMは現在の状態のままであり、別の一致を報告する。その問題は、再び、次に受信された1が「a」に対応するか、その最下位ビットにおいて1を有する或る他の文字に対応するかをFSMが判断できないことにある。例えば、「s」も最下位ビットに1を有する。それゆえ、
図3に示されるFSMを実現する単一ビットFSMも失敗する。
【0036】
本発明は、サブワードFSMが失敗する1ワードFSMを、サブワードFSMが正確に動作する新たなFSMに拡張することによってこの問題を回避する。再び
図1を参照する。FSMを拡張して、サブワードFSMを用いることができるFSMを提供する1つの方法は、元のFSMを、各辺が一意的に区別可能なトークンを有するか、又はその間を区別する必要がない場合には1組のトークンを有するFSMに拡張することである。そのようなFSMが
図4に示されており、
図4は、
図1に示されるのと同じ探索を実行するが、辺あたり1つのトークンのみを有するFSMの状態図である。ここでは、全てのトークン値が区別されなければならないので、辺あたり1つのトークンが必要とされる。その拡張は、元のFSM内のマルチトークン辺のそれぞれを、辺あたり1つのトークンを有する別々の辺に分割することによって成し遂げられる。それゆえ、トークン「1、2、4、7」を有する単一の辺は4つ辺、すなわち、「1」に対応する辺、「2」に対応する辺等に分割される。新たな辺をそれぞれ受信するのに新たな状態が追加される。元のFSM内の状態0から8つの辺が出る。0のトークン値に対応する辺は、その状態にループバックする。それゆえ、残りの7つの辺を受信するのに7つの更なる状態が必要とされる。これらの状態は状態番号1〜7で示される。しかしながら、
図4に示されるFSMの状態1は、
図1に示される状態1と同じではない。
【0037】
図4の状態番号は、その状態番号が、結果として状態0から
図4のその状態への遷移が生じた辺値に対応するように選択される。それゆえ、状態2は、FSMが状態0にある間に、値2を有するワードが受信された結果である。新たな状態ごとに、元のFSMを調べて、取り得る8つのトークンのそれぞれに対応する次の状態を決定する。再び
図1を参照すると、FSMが状態2に遷移した後に「2」が受信された場合には、FSMは状態0に戻り、報告する。同様に、FSMが状態4に遷移した後に4が受信された場合には、FSMは状態0に戻り、報告する。FSMが状態0にあるときに、3、5又は6が受信された場合には、元のFSMは状態0に戻り、報告した。それゆえ、
図4の状態0、3、5及び6は報告状態である。
【0038】
残りの辺は、入力値のシーケンスを追跡し、その結果を
図1のFSMで得られた結果と比較することによって理解することができる。例えば、4が受信された後に2が受信された場合には、FSMは状態0から状態4に移動し、その後、報告状態である状態6に移動する。状態6は報告状態である。これは、状態0から状態1に遷移し、その後、状態0に戻り、一致を報告する
図1に示される元のFSMに対応する。
【0039】
図4に示されるFSMは、
図1に示される最小FSMの2つの状態に比べて8つの状態を有するという点ではるかに複雑であるが、
図4のFSMから導出される単一ビットFSMは3つの状態のみを有する。ここで、
図5A〜
図5Cを参照すると、それぞれビットb
0、b
1及びb
2の場合の単一ビットFSMが示される。単一ビットFSMが
図4に示されるワードワイズFSMから導出される方法が、ここでb
0の場合の単一ビットFSMに関して説明される。b
0の場合のFSMは、
図4に示される状態0から開始し、
図4のFSMが全ワード入力を受信して次の状態に進むときに、当該ビットの取り得る入力値ごとに横切られる状態を調べることによって導出される。以下の検討を簡単にするように、b
0を処理するFSMはFSM
0と呼ばれる。ワード全体を受信する
図4のFSMはFSM
Wと呼ばれる。
【0040】
ここで
図6A〜
図6Dを参照すると、FSM
WからFSM
0が導出されるプロセスが示される。FSM
0が、状態0にあるときに1を受信する場合には、FSM
Wはb
0に1を有する入力ワード、すなわち、1、3、5又は7の入力ワードを受信していなければならない。この入力ワードによれば、FSM
Wは状態1、3、5又は7のうちの1つに進むことになる。FSM
0は、どの状態が実際に当該状態であったかを見分けることはできない。この状態は
図6においてA1を付される。FSM
0におけるこの状態は、FSM
Wにおけるこの状態に対応することができる取り得る状態のリストによっても表される。同様に、FSM
Wがb
0=0を有する入力ワードを受信した場合には、FSM
0は、その状態図において、対応する状態A0に進むことになる。b
0=0を有するワードは0、2、4及び6である。FSMがそれらのワードのうちの1つを受信した場合には、FSMは、実際にどのワードが受信されたかによって、状態0、2、4又は6のうちの1つに進むことになる。再び、FSM
0は、FSM
Wであるこれらの状態の厳密に1つの状態を知るすべはない。FSM
0は、FSM
Wがそれらの状態のうちの1つであることのみを知る。したがって、「0」に対応する、その新たな状態A0は、0、2、4、6を付される。
【0041】
ここで、そのプロセスは、新たな状態ごとに、かつ0及び1のFSM
0への取り得る入力値ごとに繰り返される。FSM
0がA1にあり、かつFSM
0への次の入力として1が到来すると仮定する。この状況は、FSM
Wが状態1、3、5又は7のうちのいずれかにあり、次の入力ワードが1、3、5又は7であった場合に生じる可能性がある。それゆえ、B1として表される次の状態は、潜在的な入力ワードのうちの1つがA1におけるリスト内の取り得る状態のうちの1つによって受信された場合には、FSM
Wにおいて終点となることができる全ての状態に対応する。これらが以下の表において要約される。
【0043】
それゆえ、B1の場合の取り得る状態は0、2、4及び6である。しかしながら、これらは状態A0と全く同じ状態である。それゆえ、状態A0及びB1は同じである。したがって、一部終了したFSM
0は、ここで
図6Bに示されるようになる。次に、状態B0に対応する状態が決定される。これらの状態は、A1における開始状態のうちの1つの場合に、結果としてb
0=0から生じる可能性がある状態である。これらが以下の表に要約される。
【0045】
それゆえ、B0に対応する取り得るFSM
W状態は1、3、5及び7である。しかしながら、これらはA1と同じ状態である。それゆえ、A1及びB0は同じ状態である。したがって、一部終了したFSM
0は、ここで
図6Cに示されるようになる。
【0046】
ここで、この手順が、A0における状態から開始し、b
0=1を有する入力ワードがFSMによって受信されると仮定して繰り返される。その結果が以下の表に要約される。
【0048】
それゆえ、状態A0に入力される1のビット値から生じる状態は再び1、3、5及び7である。これらは状態A1に対応した同じ状態である。それゆえ、新たな状態は作成されない。すなわち、1が受信されるとき、A0はA1に遷移する。A0及び0の入力ビットの場合にこの手順を繰り返す結果として、0、2、4及び6のFSM
W状態に対応する状態が生じる。これも実際にはA0である。したがって、最後のFSM
0は
図6Cに示されたようになる。対象となるFSM
Wの状態は、一致を外部に報告する状態、すなわち、状態0、3、5及び6である。それゆえ、FSM
0も、これらの報告状態のうちの1つに対応する状態に入るたびに、一致候補を報告しなければならない。これらの状態のうちの1つに入っても、FSM
0は、実際にどのFSM
W状態に達したのか「わからない」ので、取り得る状態のリストを
図2に示される結合器14に報告する。状態1、2、4及び7は報告状態ではなく、これらの状態を外部に報告することは何の役割も果たさないので、これらの状態は各FSM
0状態に対応する状態のリストから除外することができる。それゆえ、最後のFSM
0状態図は
図6Dに示されるようになる。ここでは、二重丸の境界は、FSM
0がその状態のリスト内でFSM
W状態のリストを結合回路に報告することを示す。
【0049】
実際には、現在の入力ワードからの入力ビットを受信すると、各単一ビットFSMが一致を外部に報告し、各単一ビットFSMによって報告された状態のリストが状態xを含むときに、状態xに対応する一致が結合器14によって報告される。
【0050】
上記の例では、NビットワードFSMはN個の1ビットワイドFSMで置き換えられた。Nの値が大きい場合、この方策はメモリ要件を緩和するとともに、1つの大きく複雑な回路の代わりに数多くの簡単で小さな回路を使用することに起因して多少の速度の上昇も見込める。更なる速度改善を提供するように、元のNビットワードFSMから、マルチワードFSMを最初に作成することができる。例えば、1ワードワイドFSMから2ワードワイドFSMを作成することができ、その後、2N個の単一ビットFSMを用いて、2ワードワイドFSMを実現することになる。この場合、1ワードFSMより、2倍までの速度上昇を実現することができる。それゆえ、本発明は、可変パターンの場合に大きなデータセットを走査するのに必要とされる時間を著しく短縮する可能性を有する。
【0051】
場合によっては、実施される具体的な探索パターンによるが、大きなサブワードFSMほど効率的である場合がある。本検討で用いるサブワードFSMは、入力データシーケンス内のワードの全ビット未満に関して動作するFSMであると定義される。例えば、64ビットワードFSMは、32個の2ビットFSM又は16個の4ビットFSMとして実現することができる。さらに、サブワードFSMの全てが同じサイズである必要はない。上記の手順において、複数のサブワードFSMとして確実に実現することができるFSMに到達するのに、最初に、1ワードワイド可変パターンFSMが各辺上に1つのトークンを有するFSMを実現するように拡張された。しかしながら、他の方策を利用することもできる。
【0052】
図1においてFSMの単一ビットFSMバージョンを見つける際に直面する問題は、辺上に複数のトークンがあることから生じ、それらのトークンは区別する必要があった。その辺上の1組のトークンを単一ビットFSMによって区別できない場合には、FSMを複数の単一ビットFSMを用いる実施態様に直接変換することは失敗する。その問題を取り除くには、辺が2つの辺に分割され、トークンの一部が新たな辺に進むようにする。ここで、各辺上の1組のトークンを単一ビットFSMによって区別できる場合には、更なる分割は不要である。極端な場合には、いずれの辺上にも単一のトークンしか存在しなくなるまで状態が追加される。しかしながら、多くの場合に、そのプロセスは、この極端な場合に達する前に終了することになる。「t」、「T」又は「s」、「S」を認識した、大文字、小文字を区別しないFSMを記述したこの上記の例では、「S」と「s」、又は「T」と「t」とを区別する必要はなく、それゆえ、それらの辺は分割する必要はなかった。
【0053】
ここで
図7A〜
図7Cを参照すると、2ビット以上を有する1組のサブワードFSMを使用する利点が示される。
図7Aは、パターン「z[ab]
*」を認識するFSMの場合の1ワード(8ビット)状態図を示す。このパターンは、「z」に、0以上の「a」又は「b」のいずれか一方が続くことによって満たされる。それゆえ、そのFSMは、「za」、「zza」、「zb」、「zzb」、「zab」、「zzabb」等を認識することができる。図面を容易にするように、「z」、「a」又は「b」でない入力の場合に状態「0」に戻る辺は図面から省略されている。
【0054】
「z」、「a」及び「b」に対するASCII値は以下の表において与えられる。
【0056】
8つの単一ビットFSMにおいてこのFSMを実現することに伴う問題は、FSMが最下位ビットを取り扱う場合に最も容易に理解することができる。ASCIIにおいて「z」の最下位ビットは0であり、一方、「a」の最下位ビットは1である。FSMは、0を受信したので、状態0から状態1に遷移したと仮定する。次に受信したビットが「a」でない場合には、FSMは状態0に戻ることになる。次のビットが「a」からのものである場合には、FSMは現在の状態のままであり、別の一致を報告する。その問題は、再び、次に受信された1が「a」に対応するか、その最下位ビットにおいて1を有する或る別の文字に対応するかをFSMが判断できないことにある。例えば、「s」も最下位ビットに1を有し、FSMは状態1ではなく状態0に遷移する必要がある。
【0057】
ここで
図7Bを参照すると、2ビットサブワードFSMを用いて
図7Aに示されるFSMを実現するように拡張された状態図が示される。2ビットFSMは「z」を「a」又は「b」から区別できないが、「a」と「b」とを区別することができる。それゆえ、トークン「a」、「b」の最下位2ビットは十分に異なるので、「ab」辺は更に分割される必要はない。しかしながら、
図7Aに示されるように、状態1になると、2ビットFSMは別の「z」と「a」又は「b」とを区別できないので、新たな状態が必要とされる。
【0058】
それゆえ、
図7AのFSMは、FSMが状態1にあり、かつ「a」又は「b」が受信される場合には、次の状態になる新たな状態2を追加することによって拡張される。原理的には、「z」の入力の場合の新たな状態を作成して、ここで分割された「z」辺を受け入れることができる。しかしながら、「z」の入力は状態1に戻る。それゆえ、新たな状態は不要である。新たな状態2は対象となる2つの取り得る入力を有し、残りの入力は「失敗」であり、状態0に戻るので、図示されない。第1の入力は「a」又は「b」であり、それは一致状態であり、状態2に戻る。状態2にある間に「z」が受信される場合には、一致が生じ、FSMは状態1に戻り、別の「z」、「a」又は「b」を探す。更なる新たな状態は不要であるので、拡張は状態2を追加して停止する。
【0059】
一般的に、サブワードレベルにおいて解決することができない複数のトークンを有する辺を除去するように任意の1ワードFSMを拡張するプロセスは同じようにして進む。所望のサブワードレベルにおいて解決することができない辺は、曖昧辺と呼ばれる。曖昧辺は、各辺がここで所望のサブワードレベルにおいて解決可能であるように、2つ以上の辺に分割される。すなわち、新たな辺は全て曖昧ではない。新たな辺を受信するのに、新たな状態が導入される。その後、照合される1ワードパターンを用いて、新たな状態ごとに取り得る各入力を調べる。入力が既知の状態に戻る場合には、その辺はその状態に向けられ、その辺に対する更なる措置は不要である。その入力によって、FSMがまだ知られていない状態に移動する場合には、その新たな状態が導入され、当該辺によって接続される。新たな状態ごとに、取り得る全ての入力が調べられ、対応する状態への辺が作成され、その状態は新たな状態か、又はあらかじめ知られている状態のいずれかである。全ての新たな状態への全ての入力が調べられ、新たな状態が不要であるとき、そのプロセスは終了する。
【0060】
ここで
図7Cを参照すると、
図7BのFSMから作成された4つの2ビットFSMが示される。FSM
0の場合、「z」が受信される場合には、初期遷移のみがトリガされる。「z」の最下位2ビットは2進数において「10」、10進数において2である。それゆえ、2を受信すると、FSM
0は「0,1」を付された第2の状態に移動する。この第2の状態は、1ワードFSMの失敗から、すなわち、「z」ではないが、10進数で2に等しい最下位2ビットを有する別の文字から生じる可能性がある。それゆえ、それは「0」を付されるか、又は「z」からのものである可能性があり、それゆえ、「1」も付される。サブワードFSM
1、FSM
2及びFSM
3の他の部分は真の入力値を区別し、それゆえ、FSM
0は、これが10進数で0、1又は3でないことを知れば十分である。
図7Bを得るように、1ワードFSMが拡張されていなかった場合には、サブワードFSM
0は、「z」、「a」、「b」を区別するときに混同することになっていた。例えば、「z」及び「b」の両方は類似であるが、入力「a」は異なり、それゆえ、対立を引き起こす。結果として、例えば、「a」が「i」と混同され(それは失敗になるはずである)、「b」及び「z」が「j」と同じである(それも失敗になるはずである)。
【0061】
ここで、
図7BからFSM
0が得られる方法が、
図8A〜
図8Dを参照しながら更に詳細に論じられることになり、
図8A〜
図8DはFSM
0を構成する種々の段階を示す。
図7Bを参照すると、そのプロセスは状態0において開始し、その状態から、10進数で0〜3、2進数で「00」、「01」、「10」及び「11」の入力ごとに全ての取り得る辺が調べられる。10進数で入力0、1及び3の場合、FSMは状態0に戻り、10進数で入力2の場合、FSMは、失敗時に状態0に、「z」時に状態1に移行することができ、結果として生じる第1のステップは
図8Aに示される。ここで、「0,1」を付された新たな複合状態を有する。
【0062】
次に、
図7BにおけるワードワイズFSM内のこの新たな状態「0,1」からの全ての取り得る辺が調べられる。10進数の入力0及び3の場合に、状態0及び状態1の両方から、FSMは状態0に戻る。これは失敗である。しかしながら、1の入力1の場合、1ワードFSMは、失敗時に状態0に移行し、「a」時に状態2に移行する。それゆえ、新たな複合状態「0,2」が作成される。2の入力の場合、1ワードFSMは「a」(失敗)2時に状態0に移行し、「z」時に状態1に移行し、「b」時に状態2に移行する。それゆえ、新たな複合状態「0,1,2」が作成される。これらの新たな状態が
図8Bに示される。
【0063】
ここで、1ワードFSMが2つの新たな複合状態「0,2」及び「0,1,2」にあるときに種々の入力に対して取り得る遷移を調べることによって、これらの状態に対してそのプロセスが繰り返されなければならない。状態「0,1,2」の場合に、10進数の入力0及び3は失敗であり、状態0に戻る。しかしながら、入力1の場合、FSMは、失敗時に状態0に移行し、「a」時に状態2に移行する。複合状態「0,2」は既に存在しているので、新たな状態は不要である。入力2の場合、1ワードFSMは「a」(失敗)時に状態0に移行し、「z」時に状態1に移行し、「b」時に状態2に移行する。再び、複合状態「0,1,2」は既に定義されており、それゆえ、この拡張の結果は
図8Cに示される。
【0064】
最後に、複合状態「0,2」への種々の入力に対応する遷移が調べられなければならない。10進数の入力0及び3は失敗であり、1ワードFSMを状態0に戻す。しかしながら、入力1の場合、1ワードFSMは、失敗時に状態0に移行し、「a」時に状態2に移行する。複合状態「0,2」は既に存在している。入力2の場合、1ワードFSMは、「a」(失敗)時に状態0に移行し、「z」時に状態1に移行し、「b」時に状態2に移行する。この複合状態「0,1,2」は既に存在しており、それゆえ、
図8Dのような状態図が残される。
【0065】
ここで
図7Dを参照すると、1ビットサブワードFSMを用いて
図7Aに示されるFSMを実施する場合の拡張された状態図が示される。1ビットFSMは「a」又は「b」又は「z」を区別することができない。それゆえ、
図7Dに示されるように、複数のトークンの全てが拡張されなければならない。
【0066】
ここで
図9及び
図9Bを参照すると、
図7DのワードFSMから作成された8つの1ビットサブワードFSMが示される。
図7A又は
図7BのFSMは、いずれも1ビットサブワードレベルにおいて「a」、「b」、「z」及び失敗を区別できないので、「z[ab]
*」の場合の1ビットサブワードFSMを作成するのに用いることはできない。代わりに、入力を正確に区別することができるように複数トークンの辺の全てが単一トークンの辺に単純化された1ワードFSMが必要とされる。そのようなFSMが
図7Dに示される。結果として生成される単一ビットFSMが
図9A及び
図9Bに示される。
【0067】
上記の実施形態では、並列に作動する複数のサブワードFSMを用いて、1ワードFSMがエミュレートされた。これらの実施形態では、1ワードFSMの各ビットはサブワードFSMのうちの少なくとも1つにおいて処理された。しかしながら、サブワードFSMの全てが必要であるとは限らない事例がある。すなわち、1ワードFSMのうちの1つ又は複数が余分である。1ワードFSMがASCIIストリングの中の文字の特定のシーケンスを探索し、大文字、小文字の区別が重要ではない事例について考える。例えば、FSMは、シーケンス「mad」を探索することができ、シーケンス内の各文字は大文字又は小文字とすることができる。すなわち、シーケンスMad、mad、MAd等がターゲットシーケンスを満たす。このFSMが7つの単一ビットFSMで置き換えられる場合には、最上位から第5のビットは、小文字と大文字とを区別するだけであるので、このビットに関して動作するFSMが余分である。
【0068】
本発明の別の態様では、1組のサブワードFSM内の各FSMが、余分であるかを試験される。候補FSMが余分である場合には、その候補を1組のサブワードFSMから除去することができ、それに応じて計算作業負荷及びメモリが削減される。1ワードFSMへの全ての取り得る入力について考える。1ワードFSMが、1ワードFSMへの入力のうちの1つに対して、そのFSM内の状態Kにおいて一致を外部に報告すると仮定する。全てのサブワードFSMが、各サブワードFSMによって報告されるリストの共通部分が「K」である一致を外部に報告しなければならない。候補サブワードFSMは以下の場合に余分である。
(1)残りのサブワードFSMが一致を報告し、その一致リストの共通部分が状態Kである。
(2)候補サブワードFSMも、Kを含むリストを用いて一致状態を外部に報告する。
(3)1ワードFSM内の任意の不一致状態の場合に、残りのサブワードFSMのうちの少なくとも1つが不一致状態にあるか、又は残りのサブワードFSMによって報告された一致状態リストの共通部分が空である。
【0069】
候補FSMを試験する計算作業負荷は、1ワードFSMからサブワードFSMが生成される方法を変更することによって著しく削減することができる。上記の手順において、一致を報告するサブワードFSM内の各状態は、サブワードFSM内のその状態に対応することができる1ワードFSM内の報告状態のリストを有する。変更された手順では、サブワードFSM内の各状態に関連付けられるリストは、サブワードFSM内のその状態に対応することができる1ワードFSM内の全ての状態を含む。さらに、このリストには、報告状態だけでなく、1ワードFSM内の全ての状態が含まれる。最後に、サブワードFSM内の各状態は、サブワードFSM内のその状態が報告状態であるか否かにかかわらず、1ワードFSM内の取り得る状態の対応するリストを含む。
【0070】
各サブワードFSMが、各状態において、その状態に対応する1ワードFSM内の取り得る状態のリストを用いて報告すると仮定する。この報告は、サブワードFSMが一致報告状態にあるか否かにかかわらず行われる。それゆえ、1ワードFSMのいずれかの状態の場合に、各サブワードFSM内の全ての取り得るサブワードFSM状態が既知である。詳細には、候補FSM以外のサブワードFSMを「残りのサブワードFSM」によって表す。
【0071】
1ワードFSM内の状態Qについて考える。Qは、サブワードFSMのリストのうちの1つ又は複数において現れることになる。以下の検討を簡単にするように、候補FSMはサブワードFSM
0であると仮定する。残りのサブワードFSMは、FSM
1、FSM
2、...FSM
Nを付されることになる。FSM
1について考える。各状態は、その状態に関連付けられる1ワードFSM状態のリストを有する。ベクトルS[s
1,...,s
N]を定義する。ただし、s
1はワードFSM
1の状態であり、s
2はFSM
2の状態であり、それ以降も同様である。これらの状態はそれぞれ、1ワードFSM内の取り得るリストを与える対応するリストを有する。それらの状態のリストの全てが1ワードFSMの状態Qを含む場合には、S[s
1,...,s
N]=Qと定義する。ベクトル[s
1,...,s
N]は、以下の検討においてサブワード状態ベクトルと呼ばれる。
【0072】
Qが報告状態である場合について考える。その際、残りのFSMが一致を報告する少なくとも1つの状態ベクトルが存在する。S=Qである全ての取り得る状態ベクトルについて考える。状態ベクトルごとに、各サブワードFSMは、Qと、おそらく他の状態とを含むリストを外部に報告することになる。これらの状態の状態ごとにリストの共通部分を計算する。対象となる2つの場合があり、共通部分が報告状態Qのみを含むか、又は複数の報告状態が存在する。共通部分が複数の報告状態を含む場合には、曖昧さを解決するのにFSM
0が必要とされるので、FSM
0は余分ではない。報告状態が一意的にQである場合には、Qに対応する曖昧さを解決するのにFSM
0は不要であるので、FSM
0はおそらく余分である。
【0073】
FSM
0はおそらく余分である場合には、1ワードFSM内でQが報告状態であるQの値ごとに上記の試験が繰り返されなければならない。それらの結果が同じである、すなわち、FSN
0がおそらく余分であると仮定する。その際、残りのサブワードFSMは1ワードFSM内の各報告状態を一意的に識別することができる。
【0074】
それゆえ、この場合には、一致を識別するのにFSN
0は不要である。しかしながら、FSM
0は、誤検出を克服するのに必要とすることができる。Qが1ワードFSM内の報告状態でなく、複数の状態の共通部分が偶然に報告状態Kを含む、Qに対応する状態ベクトルが存在する場合について考える。これは稀にしか起こらないことであると予想されるが、起こり得る。この場合、誤検出を除去するのにFSM
0が必要とされ、それゆえ、FSM
0は余分ではない。
【0075】
本発明の上記の実施形態は、本発明の種々の態様を例示するように提供されてきた。しかしながら、種々の具体的な実施形態において示される本発明の種々の態様を組み合わせて、本発明の他の実施形態を提供できることは理解されたい。さらに、本発明に対する種々の変更形態は、これまでの説明及び添付の図面から明らかになるであろう。したがって、本発明は、添付の特許請求の範囲によってのみ制限されるべきである。
なお、出願当初の特許請求の範囲の記載は以下の通りである。
請求項1:
Nビットワイドワードのシーケンスを含む入力ストリームの中の或るパターンを探索する装置であって、該装置は、
複数のサブワードFSMであって、各サブワードFSMはNビット未満のワードサイズを有し、各サブワードFSMは前記Nビットワードの対応するセグメントを処理し、前記Nビットワイドワードのうちの1つのNビットワイドワードの前記対応するセグメントのうちの1つが該サブワードFSMによって受信されるときに、前記パターンへの一致候補を指示する一致出力を生成する、複数のサブワードFSMと、
前記一致出力を受信し、全てのFSMが前記パターンの一致を示す場合にはパターン一致出力を生成する結合器とを備え、
前記パターンは可変パターンである、Nビットワイドワードのシーケンスを含む入力ストリームの中の或るパターンを探索する装置。
請求項2:
請求項1に記載の装置であって、該装置は前記Nビットワイドワードに関して動作して前記パターンを照合する単一FSMをエミュレートし、前記一致出力は前記単一FSM内の異なる取り得る一致状態に対応する、請求項1に記載の装置。
請求項3:
前記サブワードFSMは単一ビットFSMである、請求項1に記載の装置。
請求項4:
請求項1に記載の装置であって、該装置は、複数の前記Nビットワードに関して同時に動作する単一FSMをエミュレートする、請求項1に記載の装置。
請求項5:
前記パターンは可変長を有する正規表現である、請求項1に記載の装置。
請求項6:
前記パターンは、1つの辺上に区別される必要がある複数のトークンを有する、請求項1に記載の装置。
請求項7:
前記Nビットワイドワードの1つのビットは前記サブワードFSMのいずれによっても処理されない、請求項1に記載の装置。
請求項8:
入力ワードのシーケンスを含む入力ストリーム内の可変パターンとの一致を見いだす方法であって、各入力ワードは複数のサブワードによって特徴付けられ、前記サブワードはそれぞれ前記入力ワード未満のビットを有し、該方法は、
複数のサブワードFSMを設けるステップであって、各サブワードFSMは前記入力ワードのそれぞれの異なるサブワードに関して動作し、各サブワードFSMは、そのサブワードFSMが一致した状態に入るときにパターン一致候補を指示する一致した出力を与える、設けるステップと、
前記サブワードFSMのそれぞれの前記一致した出力が共通の一致した状態を指示するか否かを判断するステップと、
前記共通の一致した状態を出力するステップとを含む、入力ワードのシーケンスを含む入力ストリーム内の可変パターンとの一致を見いだす方法。
請求項9:
前記複数のサブワードFSMは、複数の前記入力ワードに関して同時に動作する単一のFSMをエミュレートする、請求項8に記載の方法。
請求項10:
前記パターンは可変長を有する正規表現である、請求項8に記載の方法。