JP5063780B2 - 有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置 - Google Patents

有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置 Download PDF

Info

Publication number
JP5063780B2
JP5063780B2 JP2010505832A JP2010505832A JP5063780B2 JP 5063780 B2 JP5063780 B2 JP 5063780B2 JP 2010505832 A JP2010505832 A JP 2010505832A JP 2010505832 A JP2010505832 A JP 2010505832A JP 5063780 B2 JP5063780 B2 JP 5063780B2
Authority
JP
Japan
Prior art keywords
common part
address
bit
circuit
common
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010505832A
Other languages
English (en)
Other versions
JPWO2009119802A1 (ja
Inventor
友洋 米田
哲朗 佐藤
文法 河口
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NODC INCORPORATED
Inter University Research Institute Corp Research Organization of Information and Systems
Original Assignee
NODC INCORPORATED
Inter University Research Institute Corp Research Organization of Information and Systems
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 NODC INCORPORATED, Inter University Research Institute Corp Research Organization of Information and Systems filed Critical NODC INCORPORATED
Priority to JP2010505832A priority Critical patent/JP5063780B2/ja
Publication of JPWO2009119802A1 publication Critical patent/JPWO2009119802A1/ja
Application granted granted Critical
Publication of JP5063780B2 publication Critical patent/JP5063780B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/562Static detection
    • G06F21/564Static detection by virus signature recognition

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置に係り、例えばウイルススキャン、メールフィルタリング、URLフィルタリング、XMLファイルのパース、データマイニング、テキストマイニング、パケットルーティング、遺伝子解析、コンパイラ、文章の文法解析又は情報検索等に用いられる有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置に関する。
インターネットの普及に伴い、スパムメールやファイルへのウイルス感染による被害が増大しており、メールサーバーでは大量のメール及びメール添付ファイルに対しメールフィルタリング及びウイルスチェックを高速に行う必要がある。
ウイルススキャンは、シグネチャーと呼ばれる可変長パターンの検索処理であり、平均100〜150バイトのシグネチャーが約10万種類存在すると言われている。
この検索でのパターンマッチングは、有限オートマトンを用いて行うことができる。有限オートマトンでは、現状態と入力文字(input symbol)とで次状態が定まり、これが繰り返し行われてキーワード(パターン)が検出される。ウイルススキャンの場合、文字は例えば1バイトであり、文字列(a string of symbols)中に、多数の、キーワードとしてのシグネチャーのどれが含まれているかのパターンマッチング処理を、1つの有限オートマトンで表すことができる(Aho−Corasick法)。ここに、「文字」は所定ビット長の任意のコードである。
この方法は、メモリに有限オートマトンを格納しておき、現状態を示すベースアドレスBADDRと入力文字ISとをアドレスADDR=BADDR+ISとしてメモリから次状態を読み出すという処理を繰り返すことにより、実施される。
図1の上部は、通常のメモリに有限オートマトンを格納した状態を示す。左端の列は、下位8ビットを除く、16進表記のベースアドレスBADDRであり、状態番号を示している。上端の行は、下位8ビットの、16進表記の下位アドレスLAを示しており、任意の文字に対応している。例えば、ベースアドレスBADDRがA88で入力文字ISが02である場合、アドレスADDR=BADDR+IS=A8802をメモリに対し指定することにより、次状態を示すBADDR=A1000が読み出される。このような処理が順次行われて、キーワード検出が行われる。
図1の上部において、空欄はFAILURE遷移先のベースアドレス、例えば初期状態を示すベースアドレスが格納されている。FAILURE遷移先は、各行について共通である。空欄以外の次状態(GOTO遷移先)は、256エントリー中、数エントリーであり、GOTO遷移の記憶効率が極めて低く、キーワード数が多いと通常のメモリは実用的でない。
この問題を解決するため、例えば下記特許文献1に開示されているように、従来ではCAM(Content Addressable Memory)が用いられていた。
しかし、CAMメモリは、現状態BADDRと入力文字ISとの組を、全記憶内容のそれぞれと比較して、一致するもののアドレスを出力する構成であるため、消費電力が比較的大きく、チップ面積に対する記憶密度が低く、かつ、高価である。
そこで、下記非特許文献1には、1バイトの入力文字に対し256ビットのビットマップを用い、その各ビットをGOTO遷移文字と対応付け、ビットマップ上の、入力文字に対応する位置のビットが、‘0’であればFAILURE遷移、‘1’であればGOTO遷移と判定し、後者の場合、そのビット位置の前までのセットビットをカウントし、その値をシングルポインタ(ベースアドレス)からのオフセットアドレス(相対アドレス)として次の状態へ遷移し、このようなデータ構造をSRAMに格納することが開示されている。
しかしながら、ビットマップを用いる方法は、入力文字が例えば8ビットで1ワードが32ビットである場合、現状態からの遷移文字の個数によらず、256ビット=32ビット×8ワードのビットマップが、相対アドレス関数決定情報(入力文字に対する相対アドレスの関数を決定する情報)として必要になる。一方、有限オートマトンでは一般に、初期状態から離れると、1個のGOTO遷移とその他のFAILURE遷移となる確率が高い。このため、ビットマップが長くなり過ぎ、記憶効率が悪くなる。入力文字がアルファベットに限定されるような場合にはビットマップのビット数を少なくできるが、漢字コードやバイナリコードを処理対象とする場合には、ビットマップのビット数を少なくすると、FAILURE遷移情報が多くなって記憶効率が悪くなる。
特開昭62−179083号公報 "Deterministic Memory-Efficient String Matching Algorithms for Intrusion Detection", Nathan Tuck et. al., Proceedings of the IEEE Infocom Conference, Hong Kong, China, March 2004
本発明の目的は、このような問題点に鑑み、相対アドレス関数決定情報のビット数を低減して、記憶効率を高めることができる、有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置を提供することにある。
本発明の他の目的は、相対アドレス関数決定情報のビット数を低減して、記憶効率を高めることができるとともに、高速処理を可能にする、有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置を提供することにある。
本発明による、有限オートマトンのメモリ内データ構造の第1態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造において、
1ワードに格納される、該現状態を示すベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報を有し、該相対アドレス関数決定情報は、該入力文字がGOTO遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該GOTO遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、
該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスの1ワードに格納される、次の現・次状態情報を有する。
この構成によれば、現状態を示すベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報が1ワードに格納されているので、メモリから1ワードのデータを読み出す毎に、すなわち高速に、状態を遷移させることができるという効果を奏する。
また、GOTO遷移文字セットの共通部のビット位置によらずこの共通部が1ビット増加する毎に、格納すべき次状態を示すベースアドレスの数を半減でき、かつ、共通部一致判定情報と非共通部存否情報とが互いに独立な情報であるので、共通部一致判定情報により低減されたベースアドレスの数を、非共通部存否情報によりさらに低減でき、すなわち、遷移情報の記憶効率を高くすることができ、これにより、CAMメモリのような高価なメモリを用いずに通常のメモリ、例えばSDRAM又はSRAMを用いて、多量のGOTO遷移情報を含むオートマトン実行装置を安価に提供することが可能になるという効果を奏する。また、共通部が1ビット増加する毎に、格納すべき次状態を示すベースアドレスの数を半減できるので、非共通部存否情報のビット数を低減でき、これによりトータルとして相対アドレス関数決定情報のビット数を低減して、この情報の記憶効率を高くすることができるという効果を奏する。
本発明による、有限オートマトンのメモリ内データ構造の第2態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造において、
1ワードに格納される、アドレスモードと該アドレスモードに応じたベースアドレス又は相対ベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報を有し、該ベースアドレスは該現状態を示し、該相対ベースアドレスと該1ワードのアドレスとの和又は差に対応した値がベースアドレスに等しく、該相対アドレス関数決定情報は、該入力文字がGOTO遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該GOTO遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、該非共通部存否情報のビット長は該アドレスモードが該相対ベースアドレスを示すときの方が該ベースアドレスを示すときよりも大きく、
該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスの1ワードに格納される、次の現・次状態情報を有する。
この構成によれば、上記1ワードに格納された、現状態を示す該ベースアドレスと次状態への該相対アドレス関数決定情報とを含む該現・次状態情報において、該ベースアドレスを読み出しアドレスに対し相対アドレス化してそのビット長を短くし、一方、該非共通部存否情報のビット長を長くするので、該現・次状態情報の記憶効率をより高くすることができるという効果を奏するとともに、上記第1態様の効果も奏する。
本発明による、有限オートマトンのメモリ内データ構造の第3態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのメモリ内データ構造において、
該現状態を示すベースアドレスに格納される、該入力文字がGOTO遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該GOTO遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含む相対アドレス関数決定情報と、
該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスに格納される、該次状態を示すベースアドレスとを有す
る。
この構成によれば、GOTO遷移文字セットの共通部のビット位置によらずこの共通部が1ビット増加する毎に、格納すべき次状態を示すベースアドレスの数を半減でき、かつ、共通部一致判定情報と非共通部存否情報とが互いに独立な情報であるので、共通部一致判定情報により低減されたベースアドレスの数を、非共通部存否情報によりさらに低減でき、すなわち、遷移情報の記憶効率を高くすることができ、これにより、CAMメモリのような高価なメモリを用いずに通常のメモリ、例えばSDRAM又はSRAMを用いて、多量のGOTO遷移情報を含むオートマトン実行装置を安価に提供することが可能になるという効果を奏する。また、共通部が1ビット増加する毎に、格納すべき次状態を示すベースアドレスの数を半減できるので、非共通部存否情報のビット数を低減でき、これによりトータルとして相対アドレス関数決定情報のビット数を低減して、この情報の記憶効率を高くすることができるという効果を奏する。
本発明による有限オートマトン実行装置の第1態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトン実行装置において、
上記有限オートマトンのメモリ内データ構造の第1態様のデータ構造の情報が格納されるメモリと、
該入力文字と、該メモリの指定アドレスから読み出された現・次状態情報に含まれる相対アドレス関数決定情報とに基づいて、この現・次状態情報に含まれるベースアドレスに対する相対アドレスを求める相対アドレス算出手段と、
該読み出されたベースアドレスと該求められた相対アドレスとの和又は差に対応したアドレスを、該メモリに対し指定して、次の現・次状態情報を読み出させる、という処理を繰り返すメモリ読出制御手段とを有する。
本発明による有限オートマトン実行装置の第2態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトン実行装置において、
上記有限オートマトンのメモリ内データ構造の第2態様のデータ構造の情報が格納されるメモリと、
該入力文字と、該メモリの指定アドレスから読み出された現・次状態情報に含まれる相対アドレス関数決定情報とに基づいて、この現・次状態情報に含まれるベースアドレス又は相対ベースアドレスに対する相対アドレスを求める相対アドレス算出手段と、
該読み出されたベースアドレスと該求められた相対アドレスとの和に対応したアドレス又は、該読み出された相対ベースアドレスと読み出しアドレスと該求められた相対アドレスとの和に対応したアドレスを、該メモリに対し指定して、次の現・次状態情報を読み出させる、という処理を繰り返すメモリ読出制御手段とを有する。
本発明による有限オートマトン実行装置の第3態様では、
現状態と入力文字とに基づいて次状態へ遷移する有限オートマトン実行装置において、
上記有限オートマトンのメモリ内データ構造の第3態様のデータ構造の情報が格納されるメモリと、
該入力文字と、該メモリの指定アドレスから読み出された相対アドレス関数決定情報とに基づいて、相対アドレスを求める相対アドレス算出手段と、
該メモリに対し、該指定アドレスと該相対アドレスとの和又は差に対応したアドレスを指定することにより、次状態を示すベースアドレスを読み出させ、次いで該次状態を示すベースアドレスを指定することにより、次の相対アドレス関数決定情報を読み出させる、という処理を繰り返すメモリ読出制御手段とを有する。
本発明の他の目的、構成及び効果は以下の説明から明らかになる。
図5は、本発明の実施例1に係る、有限オートマトンのメモリ内データ構造の説明に供する状態遷移図である。
丸の中の数字は状態番号を示し、状態0が初期状態、二重丸の状態1及び3が出力状態であることを示す。実線の矢印はGOTO遷移を示し、その矢印に付されたバイナリコードは、GOTO遷移文字を示す。点線の矢印はFAILURE遷移を示し、「その他」はGOTO遷移文字以外の任意の文字を示し、ANYは任意の文字を示している。
図6(A)は、図5中の状態0からの遷移のみを抽出したものを示す。
この図を、図1上部に示す従来のメモリ内データ構造と関係付けて説明すると、状態0は例えばBADDR=A88に対応し、GOTO遷移先の状態1及び3はBADDR=A88の行の空欄でないベースアドレスA1000及びA0に対応し、遷移文字はこれら状態1及び3が格納されている下位アドレスLAの値02及びFFに対応している。従来では、BADDR=A88の行の256バイトのうち、GOTO遷移先が格納されているのは3バイトだけであり、その他には共通のFAILURE遷移先が格納されていた。
本実施例1では、各行(状態)について共通のFAILURE遷移先の格納領域を削減するために、互いに独立な2つの情報量削減方法を用いている。
第1の情報量削減方法は、図6(B)に示す共通部一致判定情報CMNINFOを用いたものであり、この共通部一致判定情報CMNINFOは、マスクMASKとコモンCMNとで構成され、それぞれ、状態からGOTO遷移する文字のセットに基づいて後述のように作成され、そのビット長は入力文字ISのそれに等しい。
マスクMASKの各ビットは、各GOTO遷移文字の対応するビットが共通値である場合、‘1’であり、そうでなければ‘0’である。2値コードの下位からi番目を第iビットと称し、最下位を第0ビットと称すると、図6(B)の場合、第3、4及び7ビットが共通値である。コモンCMNは、マスクMASK中のセットビット(‘1’のビット)に対応する位置の該共通値を示しており、マスクMASKのリセットビットに対応するコモンCMNのビット値は‘0’になっている。図6(B)の場合、コモンCMNの第2、3及び7ビットはそれぞれ、該共通値が‘0’、‘0’及び‘1’であることを示している。
共通部一致判定情報CMNINFOは、マスクMASKとコモンCMNの対応するビットの組を4値で表したものであり、マスクMASKのセットビットに対応する4値はコモンCMNの2値に等しく、マスクMASKのリセットビットに対応する4値を"−"で表記している。すなわち、マスクMASKが‘10001100’であり、コモンCMNが‘10000000’であるとき、共通部一致判定情報CMNINFOは‘1−−−00−−’と表記される。
図6(C)は、状態0を示す、メモリのワードアドレスA0に相対アドレス関数決定情報RAFDIとして格納される、共通部一致判定情報CMNINFOと非共通部ビットマップBITMAPとの組を示す。
任意の入力文字ISについて、マスクMASKの‘1’に相当するビットのうち、いずれかが、対応するコモンCMNのビットの値に等しくなければ、GOTO遷移ではない、すなわち第1のFAILURE遷移(一括FAILURE遷移)であると判定できる。マスクMASKに含まれるセットビットの数をCLと表記すると、この判定により、状態0
からの遷移先情報量を従来の256ワードから、256/2CL+2=(28-CL+2)ワードに、具体的にはCL=3の場合には34ワードに、CL=4の場合には18ワードに、CL=5の場合は10ワードに低減できる(図3中の「CMNINFO使用」)。ここに"+2"は、この一括FAILURE遷移であると判定が行われたときの遷移先が格納される1ワードと、ベースアドレスに格納される相対アドレス関数決定情報RAFDIとに対応している。
この第1の情報量削減方法のみ用いる場合には、入力文字ISからマスクMASKのセットビットに対応する部分を取り除いたものを非共通部NCMNと表記すると、NCMNがGOTO遷移文字のそれと一致していればそのベースアドレスをADDR=BADDR+NCMN+1に格納し、そうでなければFAILURE遷移先のベースアドレスをこれに格納すればよい。一括FAILURE遷移であると判定が行われたときの遷移先は、例えばワードアドレスADDR=28-CL+1である。後述のように、このADDRは、0又は−1とすることもできる。
第2の情報量削減方法は、図6(B)において、入力文字ISの非共通部NCMNのうち所定Nビット、本実施例1では非共通部NCMNの上位4ビットに着目した削減方である。この上位4ビットをブロックBLK、残りの下位ビットをブロック内オフセットOFSと表記する。
各GOTO遷移文字のブロックBLKをデコードして16ビットで表し、それぞれの論理和を非共通部ビットマップBITMAPと表記する。
任意の入力文字ISのブロックBLKをデコードし、そのセットビットに対応する非共通部ビットマップBITMAP上のビットが‘0’であれば、GOTO遷移文字でないので、第2のFAILURE遷移(一括FAILURE遷移)と判定することができる。従って、非共通部ビットマップBITMAP中のセットビット数をBmaxと表記すると、この第2の情報量削減方法だけで(BLK=IS)、状態0からの遷移先情報量を従来の256ワードから、(16*Bmax+2)ワードに、Bmax=3の場合には50ワードに低減できる(図3中の「BITMAP使用」)。ここに*は積演算子であり、"+2"は、この一括FAILURE遷移であると判定が行われたときの遷移先が格納される1ワードと、ベースアドレスに格納される相対アドレス関数決定情報RAFDIとに対応している。
この第2の情報量削減方法のみ用いる場合には、入力文字ISのブロックBLKをデコードしたもののセットビットが、非共通部ビットマップBITMAP上の下位側からセットビットを数えて(B+1)番目(B=0、1、・・・)のセットビットに対応していれば、ADDR=B*24+OFS+1に、このブロックBLK及びブロック内オフセットOFSと等しいGOTO遷移文字による遷移先のベースアドレスを格納し、そうでなければFAILURE遷移先のベースアドレスを格納すればよい。一括FAILURE遷移であると判定が行われたときの遷移先ベースアドレス格納位置は、例えばワードアドレスADDR=16*Bmax+1である。後述のように、このADDRは、0又は−1とすることもできる。
上述のような第1の情報量削減方法と第2の情報量削減方法とは互いに独立であるので、両方の情報量削減方法を用いることにより、情報量削減を効率的に増大させることができる。すなわち、状態からの遷移先情報量を従来の256ワードから、16*Bmax/2CL+2=(24-CL*Bmax+2)ワードに、例えばCL=3、Bmax=3の場合には8ワードに低減できる(図3中の「CMNINFO&BITMAP使用」)。ここに"+2"は、上記第1又は第2の一括FAILURE遷移であると判定が行われたときの遷移先が格納される1ワードと、ベースアドレスに格納される相対アドレス関数決定情報RAFDIと
に対応している。
本実施例1では、第1と第2の両方の情報量削減方法を用いる。この場合、入力文字ISのブロックBLKをデコードしたもののセットビットが、非共通部ビットマップBITMAP上の下位側からセットビットを数えて(B+1)番目(B=0、1、・・・)のセットビットに対応していれば、ワードアドレスADDR=B*24-CL+OFS+1に、このブロックBLK及びブロック内オフセットOFSと等しいGOTO遷移文字による遷移先のベースアドレスを格納し、そうでなければFAILURE遷移先のベースアドレスを格納する。第1又は第2の一括FAILURE遷移であると判定が行われたときの遷移先ベースアドレス格納位置は、例えばワードアドレスADDR=Bmax*24-CL+1である。後述のように、このADDRは、0又は−1とすることもできる(以下、4−CLをブロックサイズ指数Sと表記する)。
すなわち、図2に示すように、状態を示すベースアドレスBADDRに、相対アドレス関数決定情報RAFDIとして上記共通部一致判定情報CMNINFOと非共通部ビットマップBITMAPとを格納し、これに定数、例えば1又は2を加えたワードワードアドレスから、遷移先のベースアドレスBADDRを格納する。より具体的には、ベースアドレスBADDRからの相対アドレスRADDR=B*2S+OFS+(定数)に、換言すれば第Bブロックのブロック内オフセットOFSに、このブロックナンバBとOFSとに対応した非共通部NCMNを持つGOTO遷移文字による遷移先のベースアドレスを格納し、この非共通部NCMNがGOTO遷移文字に含まれなければFAILURE遷移先のベースアドレスを格納する。
図4は、図5に対応した有限オートマトンのメモリ内データ構造を示す。この場合、図2中の定数は1である。左端のA0〜A4はそれぞれ、図5中の状態0〜4に対応したベースアドレスBADDRであり、16進表記のワードアドレスADDR=00〜07が図6(A)に対応している。図4中の空欄は、メモリ内には存在しない領域である。1ワードは32ビットであり、コモンCMNが16ビット、非共通部ビットマップBITMAPが16ビットである。
具体的には、図6(B)のB=0(第0ブロック)が図4のワードアドレス01及び02に対応し、B=0の非共通部NCMNに含まれるブロック内オフセットOFSが0であるので、第0ブロックの最初のワードアドレス01に、GOTO遷移文字‘10010000’による遷移先のベースアドレスBADDR=A2を格納し、ワードアドレス02に対応するGOTO遷移文字が存在しないので、ここにはFAILURE遷移先のBADDR=A0を格納する。次にB=1(第1ブロック)の非共通部NCMNに含まれるブロック内オフセットOFSが‘0’であるので、第1ブロック内の最初のワードアドレス03に、GOTO遷移文字‘11000010’による遷移先のBADDR=A3を格納し、ワードアドレス04に対応するGOTO遷移文字が存在しないので、ここにはFAILURE遷移先のBADDR=A0を格納する。同様にして、B=2(第2ブロック)の非共通部NCMNに含まれるブロック内オフセットOFSが‘1’であるので、第2ブロック内の2番目のワードアドレス06に、GOTO遷移文字‘11100011’による遷移先のBADDR=A1を格納し、ワードアドレス05に対応するGOTO遷移文字が存在しないので、ここにはFAILURE遷移先のBADDR=A0を格納する。
上述のように第1又は第2の情報量削減方法のいずれかで入力文字ISが一括FAILURE遷移文字であると判定された場合には、第Bmaxブロックの最初のワードアドレスADDR=BADDRi+Bmax*2S+1に、一括FAILURE遷移先のベースアドレスBADDRを格納する。図6(A)の場合、図4中のワードアドレス07に、BADDR=A0を格納する。
ベースアドレスBADDRが格納されたワードワードアドレスADDRにはさらに、出力状態Qと消費フラグFとが格納されている。Qは、ベースアドレスBADDRが示す状態が出力状態であれば‘1’、そうでなければ‘0’である。消費フラグFは、後述のように、遷移元からその状態へ遷移する際に入力文字ISを持ち越すとき、すなわち、入力文字ISを未消費でこの状態に遷移するときに‘0’、持ち越さない時(消費)のとき‘1’である。
出力状態Qと消費フラグFとは、ベースアドレスBADDRとともに格納されており、1ワードが32ビットである場合、ベースアドレスBADDRを最大30ビットとすることができる。
図7(A)は、図5中の状態1からの遷移のみを抽出したものを示す。図7(B)は、状態1を示す、メモリのワードアドレスADDR=A1に、相対アドレス関数決定情報RAFDIとして格納される共通部一致判定情報CMNINFOと非共通部ビットマップBITMAPとを示す。これらはそれぞれ、図6(A)及び(C)の場合と同様である。
図9(A)は、図5中の状態3からの遷移のみを抽出したものを示す。
この場合、図9(B)に示すように、GOTO遷移文字が1個であるので、その各ビットが共通値であり、マスクMASKは各ビットがセットビットとなる。また、コモンCMNはこのGOTO遷移文字に等しくなる。非共通部NCMNが0であるので、ブロックBLKも0となり、従って、非共通部ビットマップBITMAPは最下位ビットのみセットビットとなる。S=0、Bは0のみであり、ワードアドレスADDR=A3+1にGOTO遷移先のBADDR=A4が格納され、その次のワードアドレスADDR=A3+1+1(Bmax=1)にFAILURE遷移先のBADDR=A2が格納される(図4参照)。
図9(C)は、状態3を示す、メモリのワードアドレスA3に、相対アドレス関数決定情報RAFDIとして格納される共通部一致判定情報CMNINFOと非共通部ビットマップBITMAPとを示す。
図8(A)は、図5中の状態2からの遷移のみを抽出したものを示す。
この場合、GOTO遷移文字が存在しないので、共通値のビット位置を示すマスクMASKは各ビットが0となる。任意の入力文字ISについてFAILURE遷移となるので、このときのCMNの各ビットを‘1’で表すことにし、MASKとCMNの対応するビットについて、それぞれ‘0’及び‘1’であるとき、共通部一致判定情報CMNINFOの4値を‘×’で表す。マスクMASKのビット値‘0’に対応するCMNのビット値‘1’は、共通値を意味せず、ドント・ケアを意味している。この意味は、以下の実施例9で明瞭になる。GOTO遷移文字が存在しないので、図4に示す如く、ADDR=A2の次のワードアドレスADDR=A2+1(Bmax=0)には、FAILURE遷移先のBADDR=A0が格納されている。
ワードアドレスA4についても、A2と同様である。
次に、消費フラグFが必須でないことを、図10を参照して説明する。
図10(A)は、GOTO遷移と、状態2から状態5又は6へのFAILURE遷移と、状態7から状態5又は6へのFAILURE遷移とを示している。状態4であるとき、
入力文字ISがCであれば状態5へ遷移し、入力文字ISがDであれば状態6へ遷移するので、図10(B)に示すように、状態2及び7のそれぞれから、その他のFAILURE遷移先を状態4とし、入力文字ISを持ち越して(F=‘0’)再度使用する構成と等価である。すなわち、図10(B)に示すようにF=‘0’としてFAILURE遷移する替わりに、図10(A)に示すようにF=‘1’としてFAILURE遷移してもよい。
したがって、全ての消費フラグFの値を‘1’とすることにより、消費フラグFを用いない構成であってもよい。
しかしながら、図10(B)に示すように表現することにより、トータルの遷移先が少なくなるので、必要なメモリ容量を低減することができる。これに対し、図10(A)の場合には、有意な情報量が増えるものの順次状態遷移するときの総遷移数が低減するので、処理速度が高速となる。どちらの表現とするかは、部分的にも全体的にも変更可能であり、メモリの容量と必要な処理速度とを考慮して、いずれかを選択すべき問題である。
図11は、上記の如く構成されたメモリ内データ構造の有限オートマトンを用い、ソフトウェア処理により文字列X中のキーワードを検出する情報処理装置10のハードウェア構成を示す概略ブロック図である。
この情報処理装置10は、例えばプロキシサーバであり、CPU11がインタフェース12を介してROM13、RAM14、ハードディスクドライブ15、ネットワークアダプタ16、入力装置17及び表示装置18に結合されている。図11では簡単化の為に、複数のインタフェースを1つのブロック12で表している。インタフェース12は、メモリコントローラを含んでいる。
ROM13は、例えばフラッシュメモリであり、BIOSが格納されている。
RAM14は、例えばSDRAM(Synchronous Dynamic Random Access Memory)(DDR(Double-Data-Rate)、DDR2又はDDR3であってもよい)又はSRAMで構成され、主記憶装置として用いられる。SDRAMの場合、メモリコントローラがCPU11に内蔵され又はインタフェース12の構成要素であるチップセットに含まれている。
磁気記録媒体を含むハードディスクドライブ15には、OS、デバイスドライバ、アプリケーションプログラム及びデータが格納され、OSの管理下で仮想記憶方式によりこれらがRAM14上にロードされてこのアプリケーションプログラムが実行される。このアプリケーションプログラムには、例えば、URLフィルタリング、メールフィルタリング又はウイルスチェックにおける上記キーワードを検出するプログラムが含まれ、このデータには、図4に示すような構造の有限オートマトンが含まれ、これが該アプリケーションプログラムの初期化ルーチンにおいてRAM14にロードされる。
ネットワークアダプタ16は、不図示のルータを介してインターネットに接続され、受信データがOSを介してRAM14のバッファ領域に一時記憶される。
入力装置17は、キーボード及びポインティングデバイスを含み、指示入力用である。
表示装置18は、上記キーワード検出プログラムの実行結果表示用等として用いられる。
図12は、このキーワード検出プログラムの概略フローチャートである。以下、括弧内
は図中の識別符号である。
(S0)次のような初期値設定処理を行う。すなわち、例えば上記バッファ内の受信文字列Xの最初の文字ISを入力文字として取得する。入力文字ISのビット長は、例えば8ビットである。ワードアドレスADDRに初期値ADDR0、例えば図4中のアドレスA0を代入する。また、文字列X中の文字ISの位置を示す変数COUNTに初期値0を代入する。
(S1)RAM14のワードアドレスADDRから1ワードの相対アドレス関数決定情報RAFDIを読み出す。この相対アドレス関数決定情報RAFDIは、上述の16ビットの共通部一致判定情報CMNINFOと16ビットの非共通部ビットマップBITMAPとからなる。
(S2)後述の如く、入力文字ISと相対アドレス関数決定情報RAFDIとに基づいて、相対アドレスRADDRを算出する。
(S3)ワードアドレスADDRに相対アドレスRADDRを加算したものを、新たなワードアドレスADDRとして求める。
(S4)RAM14のワードアドレスADDRから1ワードのデータを読み出す。このデータは、例えば図4のADDR=04から読み出したものであり、ベースアドレスBADDRと、出力状態Qと、消費フラグFとからなる。
(S5)Q=1であればステップS6へ進み、そうでなければステップS7へ進む。
(S6)ベースアドレスBADDR及びCOUNTの値を、処理終了後の出力情報としてRAM14に格納しておく。ウイルスチェックの場合には、この段階で、文字列Xに対する処理を終了してそのウイルスに対する後処理へ移行してもよい。
(S7)F=‘0’であれば、現在の入力文字ISを持ち越すのでステップS1へ戻り、そうでなければステップS8へ進む。
(S8)文字列Xが空でなければステップS9へ進み、空であればキーワード検出処理を終了し、後処理プログラムにおいて、ステップS6で格納したデータがあれば、例えばこれに関係した情報を表示装置18に表示させる。
(S9)文字列Xから次の入力文字ISを取得し、COUNTを1だけインクリメントし、ステップS1へ戻る。
図13は、図12のステップS2の処理の詳細フローチャートである。
(S10)マスクMASKとコモンCMNの論理和を演算してその結果を合成マスクCMASKに代入する。
合成マスクCMASKは、通常はマスクMASKと等しい。図8(B)に示すようにマスクMASKの各ビットが‘0’でコモンCMNの各ビットが‘1’となる場合のみ両者が異なり、合成マスクCMASKの各ビットが‘1’となる。この合成マスクCMASKをマスクMASKの変わりに用いることにより、以下の処理で、共通部一致判定情報CMNINFOが‘XXXXXXXX’である特殊な場合を、通常の場合と同様に取り扱うことが可能となる。
(S11)合成マスクCMASK中のセットビットの数を求めてこれをCLに代入する。
(S12)4−CL>0であればステップS13へ進み、そうでなければステップS14へ進む。
(S13)ブロックサイズ指数Sに4−CLを代入し、ステップS15へ進む。
(S14)ブロックサイズ指数Sに0を代入する。例えばCMNINFO=‘XXXXXXXX’である場合には、M=8となるので、S=0となる。
(S15)入力文字ISと合成マスクCMASKの対応するビット毎の論理積がコモンCMNにマッチすれば、入力文字ISがGOTO遷移文字のいずれかにマッチしている可能性があるので、ステップS16へ進み、そうでなければステップS1Aへ進む。CMNINFO=‘XXXXXXXX’である場合には、このステップS15で否定判定される。
(S16)入力文字ISから、合成マスクCMASKのリセットビットに対応する部分を非共通部NCMNとして抽出する。
(S17)非共通部NCMNをSビットだけ右シフトさせた後のものをブロックBLKに代入し、このシフトにより取り除かれたものをブロック内オフセットOFSに代入する。これにより、例えば図6(B)に示すように、非共通部NCMNがブロックBLKとブロック内オフセットOFSとに分割される。
(S18)ブロックBLKをデコードし、そのセットビットの位置に対応する非共通部ビットマップBITMAP上のビットが‘0’であれば、すなわち入力文字ISがいずれのGOTO遷移文字ともマッチしない場合には、ブロックナンバBに−1を代入し、‘1’であれば、非共通部ビットマップBITMAP中のそのビットより下位側のビットの数をカウントし、その値をブロックナンバBに代入する。これにより、ブロックナンバBは、例えば図6(B)に示す値になる。
(S19)B=−1であればステップS1Aへ進み、そうでなければステップS1Bへ進む。
(S1A)非共通部ビットマップBITMAP中の全てのセットビットの数BmaxをブロックナンバBに代入し、また、ブロック内オフセットOFSに0を代入する。
(S1B)求めたブロックサイズ指数SとブロックナンバBとブロック内オフセットOFSとを式RADDR=B*2S+OFS+1の右辺に代入して、遷移先の相対アドレスRADDRを求める。
以上のような処理により、メモリ内データ構造の有限オートマトンを用いて、文字列X中のキーワード及びその位置を検出することができる。
上記実施例1では、ソフトウェアによりキーワード検出処理を行っているので、大量のデータを高速処理するのには向かない。そこで、この処理をハードウェアで行う構成を、本発明の実施例2として次に説明する。
図14は、図12に対応した有限オートマトン実行装置を示す概略ブロック図である。図15は、図14の装置の動作を示す概略タイムチャートである。
RAM14Aは、例えばSDRAM(DDR、DDR2又はDDR3であってもよい)とメモリコントローラとの組、又はSRAMで構成され、上述のデータ構造の有限オートマトンが格納される。
相対アドレス算出回路20は、図13に示す処理をハードウェアで実行するものである。
制御回路25はまず、レジスタ23に例えば0を(図15のD1)、消費フラグF、出力状態Q及びカウンタ27にそれぞれ1、0及び0を、初期設定する。
文字列Xの一部がFIFO(First In, First Out)のキュー24に保持され、その1文字が入力文字ISとして取り出される。消費フラグFが‘1’である場合、制御回路25からのクロックCLKの1パルスがアンドゲート26を介してレジスタ22(D2)、キュー24及びカウンタ27のそれぞれのクロック入力端に供給される。
RAM14Aの、レジスタ23で指定されたワードアドレスADDRから、例えば32ビットのデータ(相対アドレス関数決定情報RAFDI、出力状態Q及び消費フラグF)が読み出され、制御回路25Bからのクロックパルスにより、これらがレジスタ21に保持される(D3)。
相対アドレス算出回路20Dは、レジスタ21に保持された相対アドレス関数決定情報RAFDIとレジスタ22に保持された入力文字ISとに基づいて、相対アドレスRADDRを算出し出力する。RADDRは、制御回路25からのクロックパルスにより、レジスタ28に保持される(D4)。
一方、レジスタ23の出力と値1とが加算回路29で加算される。この加算は、相対アドレス算出回路20の処理と並行して行われるので、相対アドレス算出回路20内で1を加算するよりも処理が高速となる。
レジスタ28と加算回路29との出力値が加算回路30で加算され、その結果がセレクタ3Sの一方の入力端に供給される。最初は、制御回路25からの選択制御信号により加算回路30の出力がセレクタ3Sで選択され、制御回路25からのクロックパルスにより、レジスタ23に保持される(D5)。これにより、RAM14AからベースアドレスBADDR、出力状態Q及び消費フラグFが読み出され、制御回路25からのクロックパルスにより、レジスタ21に保持される(D6)。
Q=‘1’の場合、例えば、不図示のCPUに割込が掛かって、レジスタ21のベースアドレスBADDR及びカウンタ27の出力がこのCPUで読み込まれる。
制御回路25からクロックCLKのパルスが1個出力され、このときF=‘1’であれば、このパルスの立ち上がりでカウンタ27が1だけインクリメントされるとともに、キュー24から1文字取り出され、このパルスの立ち下がりで該文字が入力文字ISとして、レジスタ22に保持される(D8)。
レジスタ21に保持されたベースアドレスBADDRは、セレクタ3Sの他方の入力端に供給され、制御回路25によりこのベースアドレスBADDRがセレクタ3Sで選択制
御され、制御回路25からのクロックパルスにより、レジスタ23に保持される(D7)。
このような処理が繰り返されて、図12の処理がハードウェア的に行われる。
図16は、図14中の相対アドレス算出回路20の構成例を示すブロック図である。図17は、図16の構成をより具体化した概略ブロック図である。
共通部処理回路31では、図13のステップS10に対応して、マスクMASKとコモンCMNとの論理和を合成マスクCMASKとして求め、入力文字ISから、合成マスクCMASKのセットビットに対応する部分を共通部抽出回路312で抽出し、これがコモンCMNの対応するビットの値にマッチしているかどうかを一致判定回路313で判定する。図17中の共通部不一致判定回路314は、図16中の共通部抽出回路312と一致判定回路313とを備えている。
図18(A)は、入力文字ISの第iビットISiと、合成マスクCMASKの第iビットMiと、コモンCMNの第iビットCiと、一致判定出力の第iビットOiとの関係を示す真理値表である。
この表において、Miが‘1’のとき、ISiがCiと一致すればOiが‘1’、そうでなければOiが‘0’となる。この関係は、図19(A)に示すような回路で満たされる。すなわち、MiとISiとをアンドゲート312iに供給すると、Miが‘1’のときISiがアンドゲート312iを通ってイクスクルーシブノアゲート313iに供給され、このISiがCiと一致するときイクスクルーシブノアゲート313iの出力Oiが‘1’となる。
Miが‘0’のとき、アンドゲート312iの出力が‘0’となるので、Ciが‘0’のときOiが‘1’、Ciが‘1’のときOiが‘0’となり、図18(A)の下半分の関係が満たされる。換言すれば、Miが‘0’のとき、Ciを‘0’とすることによりOiが‘1’となるので、入力文字ISの全ビットについて一致判定を行うことにより、共通部の一判定を行うことができ、構成が簡単となる。
図19(B)は、このような関係を用いて共通部不一致判定回路314を構成したものであり、入力文字ISと合成マスクCMASKの対応するビット毎の論理積を共通部抽出回路312で求め、その結果の各ビットがコモンCMNの対応するビットに等しいかどうかを一致判定回路313で判定し、その結果の反転出力を1ビットのアンマッチUMとして出力する。アンマッチUMは、一致判定回路313の2入力の対応するビットが1つでも不一致であれば‘1’となる。
図18(A)において、Miが‘1’のとき、Ci=‘1’であればISi=Oiとなり、Ci=‘0’であればISi=not Oi(Oiの反転値)となる。そこで、図18(B)に示す如く、Miが‘1’のとき、Ciが‘1’であればISiをセレクタ41で選択させ、Ciが‘0’であればISiをインバータ40で反転したものをセレクタ41で選択させ、いずれの場合もセレクタ42でセレクタ41の出力を選択させることにより、セレクタ42の出力をOiとすることができる。また、図18(A)において、Miが‘0’のとき、Oi=not Ciとなるので、Ciをインバータ43で反転させたものをセレクタ42で選択することにより、セレクタ42の出力をOiとすることができる。従って、図19(A)の回路の替わりに、図18(B)に示す回路を用いることもできる。
図16に戻って、非共通部抽出・分割回路34では、入力文字ISのうち合成マスクCMASKのリセットビットに対応する部分が非共通部NCMNとして抽出され、これが分割部342で、上位4ビット(NCMNが3ビット以下であればその全ビット)のブロックBLKと、残りのブロック内オフセットOFSと分割される(NCMNが3ビット以下であればOFS=0)。また、非共通部NCMN抽出時に、ブロックサイズ2Sの指数Sが決定される。
図20は、非共通部抽出・分割回路34を順序回路で構成した例を示す。
この回路34では、入力文字ISがシフトレジスタ343にロードされ、クロックCLKの立ち上がりエッジ毎にシフトレジスタ343の内容が右に1ビットシフトされてシフトレジスタ344のシリアル入力端SIに供給される。一方、合成マスクCMASKがシフトレジスタ345にロードされ、クロックCLKの立ち上がりエッジ毎にシフトレジスタ345の内容が右に1ビットシフトされ、その反転シリアル出力端~SOの信号がアンドゲート346の一方の入力端に供給される。アンドゲート346の他方の入力端には、シフトレジスタ345の出力遅延を考慮して、クロックCLKを遅延ゲート347で遅延させたものが供給される。アンドゲート346の出力は、非共通部クロックUCLKとしてシフトレジスタ344のクロック入力端に供給される。
このような構成により、入力文字ISのうち、合成マスクCMASKのリセットビットに対応する部分のみがシフトレジスタ344に取り込まれてシフトされる。図21(A)は、シフトレジスタ343に入力文字ISがロードされた後、クロックCLKによりシフトされる前の状態を示す。図21(B)は、クロックCLKの8個のパルスにより入力文字ISの非共通部NCMNがシフトレジスタ344に取り込まれた状態を示す。このシフトは、シフトレジスタ344がゼロクリアされた後に行われる。
シフトレジスタ344の上位4ビットをブロックBLKとする。合成マスクCMASKのリセットビット数が4未満であっても、シフトレジスタ344の内容をさらに右へシフトさせずシフトレジスタ344の上位4ビットをブロックBLKとすることにより、構成を簡単化する。ブロック内オフセットOFSについても、さらに右シフトを行うことなく、単に出力配線を図示のようにクロスさせてビット順序を逆にすることで、構成を簡単化する。このようなブロックBLK及びブロック内オフセットOFSは、実施例1で説明したものと異なるが、遷移文字セットを用いて相対アドレス関数決定情報RAFDIを作成するときにも同様にしてブロックBLK及びブロック内オフセットOFSを定めれば、このように簡単化しても問題ない。
図20に戻って、非共通部クロックUCLKはカウンタ348のクロック入力端に供給されてカウントされ、その値CNが比較回路349により‘100’と比較され、CN>4となると、比較回路349の出力が‘1’となって非共通部クロックUCLKがアンドゲート34Aを通り、カウンタ34Bでカウントされる。これにより、シフトレジスタ343のクロック入力端にクロックCLKの8個のパルスを供給すれば、カウンタ34Bのカウントがブロックサイズ指数Sとなる。図22は、このような動作によりブロックサイズ指数Sが決定されることを示す。
非共通部抽出・分割回路34がクロックCLKに同期して動作するので、クロックCLKの周波数をできるだけ高くしてその処理を高速化する。
図17に戻って、ブロックアドレス決定回路35では、非共通部抽出・分割回路34の出力BLKがデコーダ351によりデコードされ、デコーディッドブロックDBLKとしてブロックナンバ検出回路352及び不存在判定回路353の一方の入力端に供給される
。ブロックナンバ検出回路352及び不存在判定回路353の他方の入力端には、非共通部ビットマップBITMAPが供給される。ブロックナンバ検出回路352は、非共通部ビットマップBITMAPのうち、デコーディッドブロックDBLKのセットビットより下位側のセットビットの個数をブロックナンバB1として求める。不存在判定回路353は、デコーディッドブロックDBLKのセットビットに対応する非共通部ビットマップBITMAPのビットを反転したものをミスヒットMHとして出力する。
図23は、ブロックアドレス決定回路35の構成例を示すブロック図である。図25は、この回路の動作説明図である。
ブロックナンバ検出回路352では、セットビット尾引・1ビットシフトライト回路46により、デコーディッドブロックDBLKについてそのセットビットより下位側を全てセットビットにし、その全ビットを右に1ビットシフトさせる。図24は、この回路46の構成例を示す。
回路46では、最上位ビットを‘0’とし、最上位ビット以外については、下位側から(i+1)番目の出力ビットとi番目の入力ビットとの論理和をi番目の出力ビットとしている。さらに、最下位のオアゲートを用いず且つ‘0’の最上位ビットを追加することにより、結果として出力を1ビット右にシフトさせている。
図23に戻って、セットビット尾引・1ビットシフトライト回路46の出力と非共通部ビットマップBITMAPとの論理積をAND回路47で求め、その出力RSBITMAPのセットビットの個数を並列カウンタ48でカウントし、その値をブロックナンバB1として出力する。
不存在判定回路353では、デコーディッドブロックDBLKと非共通部ビットマップBITMAPとの論理積をAND回路49で求め、その結果をゼロ検出回路50に供給して、全ビットが‘0’であればその出力MHを‘1’とし、そうでなければMHを‘0’とする。
図17に戻って、非共通部ビットマップBITMAPが並列カウンタ321に供給されて、そのセットビットの数がBmaxとして求められる。Bmax及びB1はそれぞれセレクタ331の一方及び他方の入力端に供給される。共通部不一致判定回路314の出力UMと不存在判定回路353の出力MHとが出力回路のオアゲート332に供給される。オアゲート332の出力NEがセレクタ331の選択制御入力端に供給され、NEが‘1’のとき、セレクタ331によりBmaxが選択され、‘0’のときB1が選択され、それぞれブロックナンバBとして演算回路333に供給される。演算回路333にはさらに、上述のブロックサイズ指数S及びブロック内オフセットOFSが供給され、演算回路333はこれらに基づいてB*2S+OFSを計算し、その結果を相対アドレスRADDRとして出力する。
図26は、演算回路333を組み合わせ回路で構成した例を示すブロック図である。
この回路では、4ビットのブロックナンバBのそれぞれがデマルチプレクサ51〜54のデータ入力端に供給され、ブロックサイズ指数Sがデコーダ55でデコードされて、デマルチプレクサ51〜54の選択制御入力端及びゲート回路56の出力イネーブル制御入力端に供給される。デマルチプレクサ51〜54はいずれも、1ビット入力5ビット出力である。デマルチプレクサ5i(i=1〜4)の第0〜4ビット出力はそれぞれ、レジスタ57の第(i−1)〜(i+3)ビットに供給され、デマルチプレクサ5iの第Sビット出力が‘1’となり、他のビット出力がハイインピーダンス状態となる。例えばデマル
チプレクサ51について、その出力510〜514のうち、ブロックサイズ指数Sが‘0’のとき入力を出力510から取り出すとともに出力511〜514をハイインピーダンス状態にし、S=1のとき、入力を出力511から取り出すとともに出力510及び512〜514をハイインピーダンス状態にする。
一方、4ビットのブロック内オフセットOFSのそれぞれがゲート回路56を介してレジスタ57の第0〜3ビットに供給される。ゲート回路56は、その出力の第S〜3ビットをハイインピーダンス状態にし、S>0のとき第0〜(S−1)ビットの入力をスルーで出力する。
上記構成において、レジスタ57がゼロクリアされるとともにブロックナンバB、ブロックサイズ指数S及びブロック内オフセットOSFが演算回路333に供給され、所定時間経過後にレジスタ57にクロックパルスが供給されて、デマルチプレクサ51〜54及びゲート回路56の出力がレジスタ57に保持される。これにより、例えばB=‘0011’、OSF=‘0111’、S=3である場合、相対アドレスRADDRが‘00011111’として求められる。
なお、デマルチプレクサ51〜54として、非選択の出力をハイインピーダンスにする替わりに‘0’にするものを用い、この出力を、オアゲートを介してレジスタ57の各ビット入力に供給する構成であってもよい(図27参照)。
次に、図17を参照して、相対アドレス算出回路20の全体的な動作を説明する。
マスクMASK及びコモンCMNがOR回路311に供給され、非共通部ビットマップBITMAPが並列カウンタ321、ブロックナンバ検出回路352及び不存在判定回路353に供給され、入力文字IS及び合成マスクCMASKが共通部不一致判定回路314に供給される。
共通部不一致判定回路314の出力UMが‘1’になると、すなわち、入力文字ISの共通部がコモンCMNの対応する部分と不一致であると判定されると、セレクタ331により並列カウンタ321の出力Bmaxが選択され、ブロックナンバBとして演算回路333に供給される。一方、合成マスクCMASKが非共通部抽出・分割回路34に供給されて、入力文字ISがブロックBLKとブロック内オフセットOFSとに分離されるとともに、ブロックサイズを定めるブロックサイズ指数Sが求められ、ブロック内オフセットOFS及びブロックサイズ指数Sが演算回路333に供給されて、演算回路333により相対アドレスRADDRが求められる。
一方、ブロックBLKがデコーダ351でデコードされ、デコーディッドブロックDBLKがブロックナンバ検出回路352及び不存在判定回路353に供給されて、ブロックナンバ検出回路352と不存在判定回路353による処理が並行して行われる。アンマッチUMが‘0’であってもミスヒットMHが‘1’であれば、すなわち、入力文字ISの共通部がコモンCMNと一致していても非共通部が非共通部ビットマップBITMAP上のどのセットビットにも対応していないと判定されると、セレクタ331によりBmaxが選択され、演算回路333にブロックナンバBとして供給され、演算回路333により同様にして相対アドレスRADDRが求められる。アンマッチUM及びミスヒットMHがいずれも‘0’である場合には、ブロックナンバ検出回路352の出力B1がセレクタ331により選択され、ブロックナンバBとして演算回路333に供給され、演算回路333により同様にして相対アドレスRADDRが求められる。
このようなハードウェアによる並行処理で、相対アドレスRADDRが高速に求められ
る。
上記実施例2では、非共通部抽出・分割回路34が順序回路で構成されているので、その処理速度がボトルネックとなる。
そこで、本発明の実施例3では、これを組合せ回路で構成して高速に処理することにより、相対アドレス算出回路20の処理性能を向上させる。
図27は、この実施例3の非共通部抽出・分割回路34Pの構成を示す。
この回路34Pでは、合成マスクCMASKの各ビットについて、それより上位側のセットビットの個数が回路61により求められ、それぞれデマルチプレクサ群62の対応するデマルチプレクサの選択制御入力端に供給される。
図28(A)は、上位側セットビット個数検出回路61の構成例を示す。
この回路61では、その入力の各ビットについて、そのビットと、1つ上位側の出力値とが加算器により加算されて出力され、最上位ビットはスルーで出力される。
図28(B)の上位側セットビット個数検出回路61Aでは、回路61での加算値の信号伝播遅延時間を短縮するために、中央付近の加算器613において、その入力ビットと上位側の全ビットとを加算して出力している。
図27に戻って、CMASKの出力を反転したものと入力文字ISとのそれぞれの対応するビットの論理積がAND回路63で求められて、その結果がデマルチプレクサ群62の対応するデマルチプレクサのデータ入力端に供給される。但し、最上位の論理積は、デマルチプレクサを介さずにオアゲート647に供給される。デマルチプレクサ群62の各デマルチプレクサは、そのデータ入力端に供給される1ビットを、選択制御入力端に供給される値をデコードしたときのセットビットに対応する出力端から取り出し、その他の出力端を‘0’とするものであって、入力ビットを選択制御値だけ上位側へシフトさせる1ビット非同期シフタとして機能する。
すなわち、デマルチプレクサ群62の第iデマルチプレクサ(i=0〜6)は、その出力が(8−i)ビットであり、その選択制御値がkであるとき、入力ビットをオアゲート64j、j=i+kへの出力ビットとして取り出し、その他の出力ビットの値を‘0’にする。但し、第0デマルチプレクサの最下位ビット出力はオアゲートに供給されず、スルーで用いられる。
例えば、デマルチプレクサ群62の最下位のデマルチプレクサ620の出力8ビットのうち上位7ビットが下位側からそれぞれオアゲート641〜647に供給され、最下位ビットがそのまま用いられる。この最下位ビットと、オアゲート641〜643の出力とを、図21(B)と同様にクロスさせて取り出し、ブロック内オフセットOFSとする。オアゲート644〜647の出力は、ブロックBLKである。
このような処理により、高速に、入力文字ISから非共通部NCMNが抽出され且つこれがブロックBLKとブロック内オフセットOFSとに分割される。
図29は、図27中のブロックサイズ指数検出回路65を組合せ回路で構成した例を示すブロック図であり、この回路65により、合成マスクCMASKに基づいてブロックサ
イズ指数Sが求められる。
この回路65では、並列‘0’カウンタ651により合成マスクCMASKのリセットビットの個数がCN0として求められ、これが加算回路652の一方の入力端に供給される。加算回路652の他方の入力端には−4が供給され、その加算結果がセレクタ653の一方の入力端に供給される。セレクタ653の他方の入力端及び選択制御入力端にはそれぞれ‘000’及び加算回路652の出力の符号ビットが供給される。セレクタ653は、この符号ビットが‘0’、すなわちCN0≧4であれば、加算結果を選択的に出力し、‘1’であれば、‘000’を選択的に出力する。セレクタ653の出力は、ブロックサイズ指数Sとして用いられる。このような動作により、ブロックサイズ指数Sが高速に求められる。
図27の回路34Pは、図17の非共通部抽出・分割回路34の替わりに用いられ、これにより、相対アドレス算出回路20の処理速度が向上する。
図30は、図27の非共通部抽出・分割回路34Pの変形例を示す。
この回路34Qでは、図27のオアゲート群64及びAND回路63を省略するために、デマルチプレクサ群62Aの各デマルチプレクサについて、出力イネーブル反転制御入力端を備え、これが‘1’のときにはそのブロックの全出力ビットをハイインピーダンス状態にし、‘0’のときには選択制御入力値で選択された出力ビット以外は全てハイインピーダンス状態にする。ハイインピーダンス状態は、‘0’にされた後に行われ、図30中の回路34Qの出力先の空白ブロックは‘0’である。上記出力イネーブル反転制御入力端は、CMASKの対応するビットに接続されている。また、デマルチプレクサ群62Aの最上位にはトライステートバッファ627が用いられ、その反転制御入力端にCMASKの最上位ビットが接続され、入力文字ISの最上位ビットがトライステートバッファ627の入力端に供給され、トライステートバッファ627の出力端が、ブロックBLKの最上位ビットに対応した配線に接続されている。
他の点は、非共通部抽出・分割回路34Pと同一である。
図31は、本発明の実施例4に係る有限オートマトンのメモリ内データ構造を示す。
一般に、有限オートマトン実行装置では、入力文字ISに対しFAILURE遷移となる確率が比較的高い。そこで、この有限オートマトンでは、GOTO遷移先の相対アドレスRADDRを変えることなく一括FAILURE遷移先の相対アドレスRADDRを固定値−1にして、処理を高速化している。
図32は、この構造の有限オートマトンに対応した相対アドレス算出手順を示すフローチャートである。
一括FAILURE遷移の場合、ステップS1Bの計算を行う必要がないので、最初の方でFAILURE遷移であるか否かを判定する。
すなわち、まずステップS1Cにおいて、マスクMASKとコモンCMNとの排他的論理和が‘11111111’であるか否かを判定し、すなわち図8(A)に示すような無条件FAILURE遷移であるか否かを判定し、肯定判定された場合にはステップS1Dで相対アドレスRADDRに固定値1を代入する。
ステップS1Cで否定判定された場合には、マスクMASKは上述の合成マスクCMASKと同一となるので、ステップS15A以下の処理では、合成マスクCMASKの替わりにマスクMASKが用いられる。すなわち、ステップS15A、S11A及びS16Aでは、マスクMASKが用いられる。
ステップS1Cで否定判定された場合、ステップS15Aにおいて、入力文字ISとマスクMASKとの論理積がコモンCMNにマッチするか否かを判定し、すなわち入力文字ISの共通部がコモンCMNの対応する部分と一致しているか否かを判定し、肯定判定した場合にはステップS11Aへ進み、そうでなければステップS1A1へ進む。ステップS1A1では、相対アドレスRADDRに固定値−1を代入する。
このような処理により、FAILURE遷移の場合、高速に相対アドレスRADDRを求めることができる。
他の点は、図13の場合と同一である。
なお、図31において無条件FAILURE遷移先の相対アドレスを−1にしておき、ステップS1Cにおいて、相対アドレスRADDRに固定値−1を代入する構成であってもよい。
図33は、本発明の実施例5に係る、図32のソフトウェア構成をハードウェア化した相対アドレス算出回路20Aを示す。
この回路20Aでは、図32のステップS1C、S1D、S15A、S19及びS1A1に対応して全ビット不一致判定回路66及びセレクタ335を備えている。
全ビット不一致判定回路66は、マスクMASKとコモンCMNのそれぞれ対応するビットの排他的論理和を求め、その各ビットが‘1’であれば‘1’を出力し、そうでなければ‘0’を出力する。
出力回路33Aのセレクタ335により、全ビット不一致判定回路66の出力が‘1’であればこれが優先されて、NEの値に依らず固定値0が選択され、そうでなければ、NEが‘1’のとき固定値−2が選択され、NEが‘0’のとき演算回路333の出力が選択され、いずれの場合も相対アドレスRADDRとして出力される。このようなセレクタ335を用いているので、図17の並列カウンタ321及びセレクタ331は不要である。
非共通部抽出・分割回路34Qは、図30の構成と同一である。共通部不一致判定回路314及び非共通部抽出・分割回路34Qはいずれも、CMASKの替わりにMASKを用いている。
他の点は、図17の回路と同一である。
本実施例4によれば、FAILURE遷移の相対アドレスRADDRを高速に求めることができるので、有限オートマトン実行装置の性能が向上する。
なお、図31において無条件FAILURE遷移先の相対アドレスを−1にしておき、セレクタ335を2入力とし、固定値0を省略し、回路66の出力をオアゲート332に供給する構成であってもよい。
上述のように、有限オートマトン実行装置ではFAILURE遷移となる確率が比較的高い。一方、RAM14Aから2ワード目を読み出す動作と、読み出された1ワード目を用いる相対アドレス算出回路20との動作を並行して行うことができる。
そこで、本発明の実施例6では、図34に示すように、相対アドレス関数決定情報RAFDI格納アドレスの次のワードワードアドレスに、一括FAILURE遷移先のベースアドレスBADDRと、これに関係した出力状態Qと消費フラグFとを格納し、個別遷移の相対アドレスRADDRを、B*2S+OFS+2とする。
図35は、この方法を実行するためのフローチャートであり、図12に示す方法の替わりに用いられる。
図12と異なる2点の1つは、ステップS1Aにおいて、ワードアドレスADDRから2ワードのデータを連続的に読み出す点である。他の1つは、ステップS2AとステップS3との間にステップSAが挿入され、ステップS2Aで求めた相対アドレスRADDRが1であった場合、ステップSBにおいて、ステップS1Aで読み出された2ワード目の内容(ADDR+1)をワードアドレスADDRに代入して、ステップS7へ進む点である。
このような処理により、ステップS1AでワードアドレスADDRから1ワードのデータが読み出された後に、ハードウェアによる2ワード目の読み出しと並行してステップS2Aの処理を開始でき、また、一括FAILURE遷移の場合にはステップS4の処理が行われないので、図12の場合よりも処理が高速となる。
しかも、一括FAILURE遷移の場合には相対アドレスRADDRが固定値1であり、図13のステップS1Aに示すブロックナンバBを算出する必要がないので、処理が高速となる。
図36は、ステップS2Aの処理の詳細フローチャートである。
図32と異なる点は、図32のステップS1DとステップS1A1とが1つのステップS1Dにまとめられることと、ステップS1B1において、相対アドレスRADDRの値が図32のステップS1Bの場合よりも1だけ大きくなることである。
他の点は、図32の場合と同一である。
図37は、本発明の実施例7に係る有限オートマトン実行装置を示す。
この装置は、実施例6のソフトウェア構成をハードウェア化したものであり、RAM14Aからの2ワード連続読み出しに対応してレジスタ21Aを追加し、図14のセレクタ3Sの変わりに3入力のセレクタ3S1を用い、レジスタ21AのBADDR出力をセレクタ3S1に供給し、また、相対アドレス算出回路20Bの出力を制御回路25Aに供給している。さらに、レジスタ21と21AとのF出力をセレクタ3S2に供給し、セレクタ3S2の出力をアンドゲート26の一方の入力端に供給している。また、加算回路29の一方の入力端に2を供給し、相対アドレス算出回路20Bの処理と並行して加算回路29の処理行わせている。
制御回路25Aは、相対アドレスRADDRが−1でないとき、図14の場合と同じになるように制御し、相対アドレスRADDRが−1であるとき、セレクタ3S1及び3S2に対しそれぞれ、投機的先読み出しを保持したレジスタ21AのBADDR出力及びF出力を選択させ、クロックCLKのパルスを1個出力する。
図38は、この相対アドレス算出回路20Bの構成例を示す。
出力回路33Bでは、全ビット不一致判定回路66の出力と、オアゲート332の出力NEとがオアゲート336に供給され、オアゲート336の出力が‘1’のとき、固定値−1が相対アドレスRADDRとしてセレクタ334により選択される。オアゲート336の出力が‘0’であるとき、演算回路333の出力が相対アドレスRADDRとしてセレクタ334により選択される。
他の点は、図33の場合と同一である。
図39は、図37の装置の動作を示すタイムチャートである。図15中のデータと同一のものには同一符号を付している。
データD3Aは、データD3の読み出しクロックの次のクロックで、RAM14Aから先読み出されるデータであり、レジスタ21Aに保持される。相対アドレス算出回路20Bは、この読み出しと並行して、レジスタ21に保持された相対アドレス関数決定情報RAFDIとレジスタ22に保持された入力文字ISとに基づき、相対アドレスRADDRを算出する(D4)。RADDR=−1である場合、レジスタ21Aの消費フラグFが‘1’であれば、上記パルスの立ち上がりでカウンタ27が1だけインクリメントされるとともに、キュー24から1文字取り出され、このパルスの立ち下がりで該文字が入力文字ISとして、レジスタ22に保持される(D8)。
本実施例7によれば、上記先読みにより、FAILURE遷移の場合、有限オートマトン実行装置の1遷移サイクルが図15の場合よりも短縮されるという効果を奏する。
また、実施例6のソフトウェアによる処理がハードウェアで高速化されるとともに、非共通部抽出・分割回路34Q、全ビット不一致判定回路66及びオアゲート336を用いているので、実施例1〜6のいずれの場合よりも高速処理が可能となるという効果を奏する。
マスクMASKのセットビット数が4より小さいほど、特に0(S=4)である場合、FAILURE遷移先が格納される記憶領域が多くなって記憶効率が悪くなる。
図40(A)は、マスクMASKのセットビット数が0で、GOTO遷移文字が、第0及び第1ブロックについてそれぞれ2個、第2〜5ブロックについてそれぞれ1個である場合を示す。この場合、1ブロックサイズが16ワードとなるので、16×6=96ワード内にGOTO遷移先を格納する必要があり、そのうち、共通のFAILURE遷移先は88ワードとなる。相対アドレス関数決定情報RAFDIとその他のFAILURE遷移を加えると、必要なワード数は合計98となる。
そこで、本実施例8では、図40(A)の元状態Sを、図40(B)に示すように3つのサブ状態S0〜S2に分割し、GOTO遷移しない場合にはF=‘0’でサブ状態間をFAILURE遷移するようにしている。
本実施例8では、有限オートマトンのメモリ内データ構造が部分的に、F=‘0’で直列多段に遷移するように変更される他は、上記他の実施例と同一であり、上記他の実施例と同一のソフトウェア又はハードウェアの構成により、状態遷移を実行させることができる。
図40(B)の場合、各状態遷移サブセットのマスクMASKのセットビット数が4以上であるので、いずれもブロックサイズは1であり、サブ状態S0〜S2について必要なワード数は合計、(4+2)+(3+2)+(1+2)=14ワードとなり、サブ状態に分割する前の(14/98)100≒14%となって、記憶効率が向上する。
上記実施例8では、元状態Sの分割数が多くなると、処理時間が長くなる。そこで、本発明の実施例9では、図41(A)に示す1つの元状態Sを、図42に示すように親状態S0と、これからF=‘0’でいずれかにGOTO遷移する複数の子状態S10〜S15とに分割し、形式的に直列2段になることを保証している。
この方法では、入力文字ISの4ビット、例えば下位4ビットを無視して親状態から子状態へのGOTO遷移先を決定し、子状態において、入力文字ISの、無視された下位4ビットを含む全8ビットに基づいて、次の状態への遷移先を通常通り決定する。
図43(A)は、GOTO遷移文字セットが図40(A)と同一である場合における、親状態の相対アドレス関数決定情報RAFDIの定め方を示している。
マスクMASKについては、全GOTO遷移文字について、通常通りにその値を決定する。マスクMASKのリセットビットのうち任意の4ビット、例えば下位4ビットについて、コモンCMNの対応するビットを‘1’にし、マスクMASKとコモンCMNとの論理和を合成マスクCMASKとする。この合成マスクCMASKを用いて、入力文字ISから非共通部NCMNを抽出することにより、非共通部NCMNが4ビットとなり、ブロックサイズが1となる。非共通部ビットマップBITMAP作成方法及びブロックナンバBの決定方法は、上述のものと同一であり、NCMN=BLK、OFS=0、RADDR=Bとなる。
コモンCMNの各ビットは、マスクMASKの対応するビットの値が‘0’であるとき、‘1’はドント・ケア(Don’t Care)を意味している。
親状態S0のGOTO遷移文字セットは、元状態Sのそれと同じであり、そのブロックナンバB毎に、子状態のGOTO遷移文字サブセットに分割される。図43(A)の場合、親状態の8個のGOTO遷移文字のセットが、ブロックナンバB=0〜5の6サブセットに分割される。各子状態については、通常通りに相対アドレス関数決定情報RAFDIを作成する。図43(B)は、子状態S10についての相対アドレス関数決定情報RAFDIの作成を示す。
図44は、実施例1〜9のいずれかの方法で作成された相対アドレス関数決定情報RAFDIと入力文字ISとが与えられたときの、相対アドレス算出手順を示すフローチャートである。
図36と異なる点は、ステップ15Bにおいて、コモンCMNの替わりにコモンCMNとマスクMASKとの論理積を用いてコモンCMNのドント・ケア部をクリアしたものにする点と、ステップS15Bの次において、マスクMASKとコモンCMNとの論理和を合成マスクCMASKとして求め、それ以下のステップS11及びS16において、マス
クMASKの替わりに合成マスクCMASKを用いることにより、コモンCMNのドント・ケア部をマスクのセットビットと同様に取り扱っている点である。
実施例8では、ステップS1CからステップS15Bへ進んだ後はマスクMASKと合成マスクCMASKとが等しくなるので、合成マスクCMASKの替わりにマスクMASKを用いたが、本実施例9では、マスクMASKのリセットビットに対応してコモンCMNのビットをセットビットとすることがあるので、マスクMASKの替わりに合成マスクCMASKを用いている。
図43(A)及び(B)についての上記説明から明らかなように、マスクMASKの替わりに合成マスクCMASKを用いる他は、図36の場合と同じ処理を行えばよい。コモンCMNの各ビットをドント・ケアとして用いない場合は、ステップS11以下においてCMASK=MASKとなり、図36の場合と結果が同じになるので、図44のフローチャートは図32のそれを拡張したものになっている。
図43(A)において、第1段に必要な合計ワード数は6+2=8であり、第2段のB=0〜5のグループについて必要なワード数は合計、2+2+1+1+1+1+2×6=20ワードとなり、グループ分けする前の(28/98)100≒29%となる。第1段のブロック数が少なくなるように、任意に取り得る合成マスクCMASK中の‘1’の4ビットを選択することにより、データ圧縮率が向上する。
本実施例9によれば、第1段で「その他」のFAILURE遷移になれば(図44でステップS15B又はS19からステップS1Dへ進む場合)、グループ分けしない場合と同じになること、第1段で「その他」のFAILURE遷移にならなくても第3段が無いこと、合成マスクCMASKの‘1’の4ビットを下位4ビットのように一律に決めてもデータを圧縮できるのでグループ分けが簡単であることから、実施例8よりも実用的である。
なお、コモンCMNのドント・ケアは、状態を直並列2段に分割しない場合にも用いることができる。例えば、正規表現における任意の1文字又はある範囲内の文字を識別するのに用いることができる。
図45は、本発明の実施例10に係る相対アドレス算出回路20Cを示す。
この回路20Cは、実施例9のソフトウェア構成をハードウェア化したものであり、図38の相対アドレス算出回路20Bの替わりに用いられる。
共通部処理回路31Aの共通部抽出回路312Aでは、上記ステップS15Bに対応して、図16の合成マスクCMASKの替わりにマスクMASKを用い、コモンCMNの替わりにコモンCMNとマスクMASKとの論理積をAND回路312Aで取ったものを用いることにより、入力文字ISの共通部がGOTO遷移文字のいずれとも一致しない場合にFAILURE遷移と判定できるようにしている。これに対し、非共通部抽出・分割回路34の非共通部抽出部341は、マスクMASKの替わりに合成マスクCMASKを用いることにより、コモンCMNの値を変えて状態を図42に示すように直並列2段に分割した場合にも、通常の場合と同様に取り扱えるようにしている。
図46は、図45の構成をより具体化したブロック図である。
図38と異なるのは、共通部不一致判定回路314Aにおいて、図47に示すように、
コモンCMNの替わりにコモンCMNとマスクMASKとの論理積をAND回路312Aで取ったものを用いる点と、OR回路311で合成マスクCMASKを生成し、非共通部抽出・分割回路34Qにおいて、上記理由によりマスクMASKの替わりに合成マスクCMASKを用いている点である。
他の点は、図38の場合と同一である。
実施例10によれば、このような簡単な変更により、状態の直並列2段化を部分的に含む有限オートマトンにも対応できる。
図48は、本発明の実施例11に係る有限オートマトンのメモリ内データ構造概略を、従来のそれと対比して示す。
以上の実施例では、次のようなメモリ内データ構造と処理とを用いていた。
(1)現状態を示すベースアドレスBADDRにこの状態からの遷移先相対アドレス関数決定情報RAFDIを格納しておき、このRAFDIを読み出す。
(2)このRAFDIと入力文字ISとから相対アドレスRADDRを求め、アドレスADDR=BADDR+RADDRを算出する。
(3)アドレスADDRに、次状態を示すベースアドレスBADDRを格納しておき、このBADDRを読み出す。
これら(1)〜(3)が繰り返されて状態が遷移する。(3)と(1)の処理はRAM14Aからデータを読み出すだけであり、また、(3)から(1)へ戻るとき、(3)の「次状態を示すベースアドレスBADDR」は(1)の「現状態を示すベースアドレスBADDR」となる。
そこで、本実施例11では、(1)の「現状態を示すベースアドレスBADDR」を省略し、この替わりに(3)の「次状態を示すベースアドレスBADDR」を用いることにより、(3)と(1)とを1つにまとめて、次のようなメモリ内データ構造と処理とを用いる。
(i)アドレスADDRに、現状態を示すベースアドレスBADDRとこの状態からの遷移先相対アドレス関数決定情報RAFDIとの組である現・次状態情報を格納しておき、これらBADDR及びRAFDIを読み出す。
(ii)このRAFDIと入力文字ISとから相対アドレスRADDRを求め、アドレスADDR=BADDR+RADDRを算出する。
これら(i)及び(ii) が繰り返されて状態が遷移する。図48にも示すように、BADDRとRAFDIとの組(現・次状態情報)が1ワードに格納されているので、RAM14Aから1ワードのデータを読み出す毎に、このデータと入力文字ISとの組で、次の遷移先を決定することができる。
(3)と(1)を1つにまとめるときに、(1)の「現状態を示すベースアドレスBADDR」を省略したので、現状態を示すベースアドレスは、RAM14Aのアドレスではなく、RAM14AのアドレスADDRに格納されているデータであり、この点が、以上
の実施例と大きく異なる。また、(3)と(1)を1つにまとめたので、1ワードのビット長が以上の実施例の場合の2倍、例えば64ビットになる。
図49に示すように、入力文字ISを変数とする、ベースアドレスBADDRからの相対アドレスRADDRを求める関数が、相対アドレス関数決定情報RAFDIとその解釈により定まる。すなわち、この関数をRADDR(RAFDI,IS)と表記することができる。この点は、以上の実施例と同じである。ADDR=BADDR+RADDR(RAFDI,IS)に、次の状態を示すベースアドレスBADDRと、この状態からの遷移先に対応した相対アドレス関数決定情報RAFDIとが格納されている。
図50は、図5の状態遷移図をメモリ内のデータ構造で表したものであり、図49中の定数が0である場合を示す。
この構造は、図4のBADDR=00に、A0とこれに対応した出力状態Qと消費フラグFとを記入し、ベースアドレスBADDRが記入されている行の空欄に、このベースアドレスBADDRからの遷移先を示す相対アドレス関数決定情報RAFDIを記入し、BADDR=A1〜A4の行(BADDRが08、0E、10及び13である行)を削除したものを、太線で区切られた状態遷移セット単位で配置換えしたものになっている。この配置換えは、任意である。但し、記号A0〜A4の値がこの配置換えに応じて変わる。
図51は、図50のメモリ内データ構造の有限オートマトンを用いてキーワードを検出するプログラムの概略フローチャートである。
図12とは、ステップS4が存在しない点と、ステップの順番が異なる点と、ステップS2Aで相対アドレスRADDRが1だけ小さくなる点とで、相違している。
(S0)次のような初期値設定処理を行う。すなわち、例えば上記バッファ内の受信文字列Xの最初の文字を入力文字ISとして取得する。入力文字ISのビット長は、例えば8ビットである。ワードアドレスADDRに初期値ADDR0、例えば図50中の00を代入する。また、文字列X中の入力文字ISの位置を示すCOUNTに初期値0を代入する。
(S1)RAM14AのワードアドレスADDRから1ワード、例えば64ビットのデータを読み出す。この1ワードは、ベースアドレスBADDRと、相対アドレス関数決定情報RAFDIと、出力状態Qと、消費フラグFとからなる。相対アドレス関数決定情報RAFDIは、上述の16ビットの共通部一致判定情報CMNINFOと16ビットの非共通部ビットマップBITMAPとからなる。ベースアドレスBADDRは最大30ビットとすることができる。
(S5)Q=1であればステップS6へ進み、そうでなければステップS7へ進む。
(S6)ベースアドレスBADDR及びCOUNTの値を、処理終了後の出力情報としてRAM14Aに格納しておく。
(S7)F=‘0’であれば、現在の入力文字ISを持ち越すのでステップS2へ進み、そうでなければステップS8へ進む。
(S8)文字列Xが空でなければステップS9へ進み、空であればキーワード検出処理を終了し、後処理プログラムにおいて、ステップS6で格納したデータがあれば、例えばこれに関係した情報を表示装置18に表示させる。
(S9)文字列Xから次の入力文字ISを取得し、COUNTを1だけインクリメントする。
(S2A)入力文字ISと相対アドレス関数決定情報RAFDIとに基づいて、上述のように相対アドレスRADDRを算出する。この処理は、図13のそれと同一である。但し、図13のステップS1Bにおいて、相対アドレスRADDRの値を1だけ小さくし、RADDR=B*2S+OFSとする。
(S3)ワードアドレスADDRに相対アドレスRADDRを加算したものを、新たなワードアドレスADDRとして求め、ステップS1へ戻る。
このような処理により、RAM14Aから1ワードのデータを読み出す毎に、次の状態に遷移することができ、高速処理が可能となるという効果を奏する。
上記実施例11では、ソフトウェアによりキーワード検出処理を行っているので、大量のデータを高速処理するのには向かない。そこで、この処理をハードウェアで行う構成を、本発明の実施例12として次に説明する。
図52は、図51に対応した有限オートマトン実行装置を示す概略ブロック図である。図53は、図52の装置の動作を示す概略タイムチャートである。
RAM14Aには、上述のデータ構造の有限オートマトンが格納される。
相対アドレス算出回路20Dは、図51のステップS2Aでの処理をハードウェアで実行するものである。相対アドレス算出回路20Dとしては、図16及び図17の相対アドレス算出回路20をそのまま用いることができる。また図17の非共通部抽出・分割回路34の替わりに、図27の非共通部抽出・分割回路34P又は図30の非共通部抽出・分割回路34Qを用いて処理を高速化してもよい。
制御回路25Bはまず、レジスタ23に例えば0を、消費フラグF、出力状態Q及びカウンタ27にそれぞれ0を、初期設定する。
RAM14Aの、レジスタ23で指定されたワードアドレスADDR(図53のD1)から、例えば64ビットのデータ(ベースアドレスBADDR、相対アドレス関数決定情報RAFDI、出力状態Q及び消費フラグF)が読み出され、制御回路25Bからのクロックパルスにより、これらがレジスタ21に保持される(D3)。
Q=‘1’の場合、例えば、不図示のCPUに割込が掛かって、レジスタ21のベースアドレスBADDR及びカウンタ27の出力がこのCPUで読み込まれる。
一方、文字列Xの一部がFIFOのキュー24に保持され、その1文字が入力文字ISとして取り出される。消費フラグFが‘1’である場合、制御回路25からのクロックCLKの1パルスがアンドゲート26を介してレジスタ22、キュー24及びカウンタ27のそれぞれのクロック入力端に供給される。これにより、上記入力文字ISがレジスタ22に保持され(D8)、カウンタ27が‘1’だけインクリメントされる。
相対アドレス算出回路20Dは、レジスタ21に保持された相対アドレス関数決定情報RAFDIとレジスタ22に保持された入力文字ISとに基づいて、相対アドレスRAD
DRを算出し出力する。RADDRは、制御回路25Bからのクロックパルスにより、レジスタ28に保持される(D4)。レジスタ28の出力と、レジスタ21のベースアドレスBADDR出力とが加算回路30で加算され、その結果が、制御回路25Bからのクロックパルスにより、レジスタ23に保持される(D7)。
このような処理が繰り返されて、図51の処理がハードウェア的に行われる。
実施例11及び12で用いられる、オートマトンのメモリ内データ構造は、相対アドレス関数決定情報RAFDIが各ワードに付加されているので、その重複が生じ、実施例1〜10のそれよりも記憶効率が悪い。
しかし、BADDRとRAFDIとの組を1ワードに格納したことにより、実施例1〜10の場合にはやりくりできないが、BADDRのビット長を減少させるとともにBITMAPのビット長を増加させて、メモリの記憶効率をより高めることが可能となる。
図54は、これを行った、本発明の実施例13に係る有限オートマトンのメモリ内データ構造概略を示す図である。
このデータ構造では、ワードアドレスAiに格納されている相対ベースアドレスRBADDRiとワードアドレスAiとの和を相対アドレスRADDRiとすることにより、相対ベースアドレスRBADDRiのビット長を短くして、非共通部ビットマップBITMAPのビット長を大きくしている。BADDRiがこの相対ベースアドレスRBADDRiの範囲外に存在するときには、相対ベースアドレスRBADDRiを使用できないので、1ビットのアドレスモードAMを相対ベースアドレスRBADDRi又は相対アドレスRADDRとともにワードアドレスAiに格納している。例えば、AM=‘1’のとき相対ベースアドレスRBADDR、AM=‘0’のとき相対アドレスRADDRであるとする。
このようなベースアドレスの相対アドレス化に伴って、非共通部ビットマップBITMAPを2倍の32ビットにすると、相対ベースアドレスRBADDRを30−(1+16)=13ビットにすることができる。
なお、入力文字が同一であっても、非共通部ビットマップBITMAPのビット長が16ビットであるか32ビットであるかにより相対アドレスが異なるので、遷移先データがどちらを用いて構成されているかでアドレスモードAMの値が定まる。したがって、同じ遷移先状態について、遷移元の状態により相対ベースアドレスRBADDRの到達範囲内になったり到達範囲外になったりする場合には、非共通部ビットマップBITMAPのビット長が16ビットである遷移先データと32ビットである遷移先データとをRAM14Aに格納しておく必要がある。
図55は、上記のような相対ベースアドレスRBADDRを用いることができる有限オートマトン実行装置のハードウェア構成を示す概略ブロック図である。
レジスタ21のRBADDR出力(13ビット)が加算回路67の一方の入力端に供給され、他方の入力端にレジスタ23の出力がワードアドレスAiとして供給され、その加算結果がセレクタ68の一方の入力端に供給される。
アドレスモードAMが‘1’であるとき、セレクタ68により加算回路67の出力がセレクタ68で選択され、ベースアドレスBADDRとして加算回路30の一方の入力端に
供給される。加算回路67による加算と並行して、相対アドレス算出回路20Dにより相対アドレスRADDRが求められ、これがレジスタ28に保持され、この値とセレクタ68の出力とが加算回路30で加算され、その結果がレジスタ23に保持される。
AM=‘0’であるとき、29ビットのベースアドレスBADDRがセレクタ68により選択され、これがレジスタ28の出力と加算回路30で加算されて、レジスタ23に保持される。
本実施例13によれば、ベースアドレスの相対アドレス化により非共通部ビットマップBITMAPのビット長を大きくして遷移先情報量をさらに低減することが可能となる。
図56は、本発明の実施例14に係る有限オートマトンのメモリ内データ構造の具体例を示す説明図である。
このデータ構造は、図34に対応している。このデータ構造を用いて処理をソフトウェアで行う場合、図51のステップS2Aで、図36に示す処理を行う。但し、ステップS1D及びS1B1においてRELADDRの値を1だけ小さくし、それぞれRADDR=0及びRADDR=B*2S+OFS+1とする。
図57は、このデータ構造を用いて処理をハードウェアで行うオートマトン実行装置のブロック図である。
この装置の相対アドレス算出回路20Eは、図38の相対アドレス算出回路20Bにおいて、セレクタ334の固定値入力−1の替わりに0を用いたものと同一である。また、図14の加算回路29を用いて処理を高速化している。
さらに、入力文字ISに対し遷移せずに元の状態に留まる場合の処理を高速化するため、比較回路69を用いている。比較回路69は、レジスタ23に保持されたアドレスと、次に保持しようとするアドレスとを比較し、その結果を制御回路25Dに供給する。制御回路25Dは、この比較結果が一致を示している場合、RAM14Aに同一データを読み出させるのを省略して、レジスタ21に保持されている内容を再利用させるとともに、クロックCLKのパルスを1個アンドゲート26に供給して、次の入力文字ISを相対アドレス算出回路20Eに供給させる。
他の点は、実施例12と同一である。
他の実施例においても、前記再利用を行うように構成することもできるが、本実施例の場合、FAILURE遷移先相対アドレスが0であり、且つ、ベースアドレスと相対アドレス関数決定情報とが1ワードに格納されているので、再利用の為の付加構成が特に簡単となる。このような簡単な再利用構成は、図56のデータ構造の特性に基づくものであり、従来ではできなかったものである。
なお、本発明には外にも種々の変形例が含まれる。
例えば、図50の変形例として、図58に示すメモリ内データ構造の有限オートマトンを用いることができる。このデータ構造は、図31に対応している。このデータ構造を用いて処理をソフトウェアで行う場合、図51のステップS2Aで、図32に示す処理を行う。但し、ステップS1BにおいてRELADDRの値を1だけ小さくし、RADDR=B*2S+OFSとする。このメモリ内データ構造を用いて処理をハードウェアで行う場
合、図55の相対アドレス算出回路20Dとして図33の相対アドレス算出回路20Aを用いる。但し、セレクタ335の固定値入力−2を−1に変更する。
図50、56及び58のメモリ内データ構造の変形例として、部分的に実施例8又は9の方法を適用し状態を分割したものであってもよい。実施例9の方法を適用したメモリ内データ構造を用いて処理をソフトウェアで行う場合、図51のステップS2Aで、図44に示す処理を行う。但し、ステップS1D及びS1B1においてRELADDRの値を1だけ小さくし、それぞれRADDR=0及びRADDR=B*2S+OFS+1とする。このデータ構造を用いて処理をハードウェアで行う場合、図52又は図55の相対アドレス算出回路20Dとして、図46の相対アドレス算出回路20Cを用いる。但し、セレクタ334の固定値入力−1を0に変更し、回路333でRADDR=B*2S+OFS+1を算出する。
また、以上の実施例の構成要素の異なる組み合わせも本発明に含まれ、例えば図55の装置に、図57の比較回路69を適用した構成であってもよい。
さらに、上記いずれの実施例においても、ベースアドレスBADDRを固定値だけシフトした構成であってもよい。
また、実施例6及び7において、投機的先読みワード数を2以上にしてもよい。
出力状態フラグQをBLOCKINFOと同じアドレスに格納する替わりに、出力関数用メモリを用いてもよい。すなわち、読み出したBADDRで該出力関数用メモリをアドレス指定して、出力状態であるか否かの情報を読み出す構成であってもよい。
さらに、有限オートマトンが格納されるメモリは、SRAM、ランバスメモリ又はフラッシュメモリであってもよく、用途に応じて適宜選択される。有限オートマトンをファイルとして記録媒体に格納した後メモリにロードする場合における該記録媒体は、磁気ディスク、光ディスク、フラッシュメモリ等のいずれであってもよい。
以上の説明から明らかなように、本発明には、以下のような付記項1〜18の構成も含まれる。
[付記項1]
入力文字と、相対アドレス関数決定情報とに基づいて、現状態を示すベースアドレスに対応した次状態情報格納先相対アドレスを求める有限オートマトン実行装置用相対アドレス算出回路であって、該相対アドレス関数決定情報は、GOTO遷移文字セットの共通部を該入力文字が含んでいるか否かを判定するための共通部一致判定情報と、該GOTO遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、
該共通部一致判定情報が示す該共通部が該入力文字に含まれているか否かを判定する共通部不一致判定回路と、
該共通部不一致判定回路が否定判定した場合に、FAILURE遷移先に対応した相対アドレスを出力する出力回路と、
を有することを特徴とする有限オートマトン実行装置用相対アドレス算出回路。
この構成によれば、該共通部不一致判定回路により、該共通部一致判定情報が示す該共通部が該入力文字に含まれているか否かを判定し、否定判定した場合に、FAILURE遷移先に対応した相対アドレスを該出力回路から出力するので、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。
[付記項2]
該非共通部存否情報は、2NビットのそれぞれがGOTO遷移存否を示す非共通部ビットマップを含み、ここにNは1<N<ISLを満たす整数の所定値であり、ISLは該入力文字のビット長であり、
該非共通部に対応するビットを該入力文字から抽出し、該非共通部のビット長NCLが該所定値Nより大であれば該非共通部に対応するビットのうちNビットをブロックBLKとし残りの(NCL−N)ビットをブロック内オフセットOFSとし(NCL−N)をブロックサイズSとして出力し、そうでなければ該非共通部に対応するビットを該ブロックBLKとし該ブロック内オフセットOFSを0とし該ブロックサイズを0として出力する非共通部抽出・分割回路と、
該非共通部ビットマップ上の、該ブロックBLKの値に対応した位置のビットが、第1値であるか否かを判定する不存在判定回路を備えた非共通部処理回路と、
をさらに有し、
該出力回路はさらに、該不存在判定回路が肯定判定した場合に該FAILURE遷移先に対応した相対アドレスを出力する、
ことを特徴とする付記項1に記載の相対アドレス算出回路。
この構成によれば、該非共通部抽出・分割回路が該非共通部をブロックBLKとオフセットOFSとに分割し、かつ、ブロックサイズSを求めるので、その後の処理が簡単になり、また、該非共通部処理回路により、該非共通部ビットマップ上の、該ブロックBLKの値に対応した位置のビットが、第1値であるか否かを判定し、肯定判定した場合に該FAILURE遷移先に対応した相対アドレスを該出力回路が出力するので、
該共通部不一致判定回路により肯定判定された場合であっても、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。
[付記項3]
該出力回路は、
第1入力端と第2入力端とを備え、該第1入力端に固定値が供給されるセレクタと、
該共通部不一致判定回路が否定判定し又は該不存在判定回路が否定判定した場合に該セレクタに対し該第1入力端の値を、該FAILURE遷移先に対応した相対アドレスとして選択的に出力させる選択制御回路と、
を有することを特徴とする付記項2に記載の相対アドレス算出回路。
この構成によれば、該出力回路の該セレクタにより選択された固定値が該FAILURE遷移先に対応した相対アドレスとして出力されるので、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。
[付記項4]
該非共通部処理回路はさらに、
該ブロックBLKをデコードする第1デコーダと、
該第1デコーダの出力が示す、該非共通部ビットマップ上の位置から該非共通部ビットマップの一端までに含まれる第2値のビットの個数より1だけ小さい値をブロックナンバBとして求めるブロックナンバ検出回路と、
を有することを特徴とする付記項3に記載の相対アドレス算出回路。
この構成によれば、簡単な構成で該ブロックナンバBを求めることができるという効果を奏する。
[付記項5]
該出力回路はさらに、該ブロックナンバB、該ブロックサイズ指数S及び該ブロック内オフセットOFSに基づき、B*2S+OFS+(定数)を求めて、該セレクタの第2入力端に供給する演算回路を有し、
該選択制御回路は、該共通部不一致判定回路が肯定判定し且つ該不存在判定回路が肯定判定した場合に該セレクタに対し該第2入力端の値を、遷移先に対応した相対アドレスとして選択的に出力させる、
ことを特徴とする付記項4に記載の相対アドレス算出回路。
[付記項6]
該共通部一致判定情報は、該共通部の各ビット位置を示すマスクMASKと、該共通部の各ビット位置に対応した値を含むコモンCMNとを有し、
該共通部不一致判定回路は、該入力文字と該マスクMASKとの論理積が該コモンCMNと一致するとき該入力文字に該共通部が含まれていると判定する、
ことを特徴とする付記項5に記載の相対アドレス算出回路。
この構成によれば、該入力文字と該マスクMASKとの論理積が該コモンCMNと一致するとき該入力文字に該共通部が含まれていると判定するので、この判定を簡単な構成で高速に行うことができるという効果を奏する。
[付記項7]
該共通部一致判定情報は、該共通部の各ビット位置を示すマスクMASKと、該共通部の各ビット位置に対応した値を含むコモンCMNとを有し、
該共通部不一致判定回路は、該入力文字と該マスクMASKとの論理積と、該コモンCMNと該マスクMASKとの論理積とが一致するとき、該入力文字に該共通部が含まれていると判定する、
ことを特徴とする付記項5に記載の相対アドレス算出回路。
この構成によれば、該入力文字と該マスクMASKとの論理積と、該コモンCMNと該マスクMASKとの論理積とが一致するとき、該入力文字に該共通部が含まれていると判定するので、ビット数を増加させることなく、該該コモンCMNを共通値以外の目的に使用することができるという効果を奏する。
[付記項8]
該マスクMASKと該コモンCMNとが全ビット不一致であるか否かを判定する全ビット不一致判定回路をさらに有し、
該選択制御回路はさらに、該全ビット不一致判定回路が肯定判定した場合にも、該セレクタに対し該第1入力端の値を、該FAILURE遷移先に対応した相対アドレスとして選択的に出力させる、
ことを特徴とする付記項6又は7に記載の相対アドレス算出回路。
この構成によれば、該マスクMASKと該コモンCMNとが全ビット不一致であると判定した場合に該セレクタに対し、該FAILURE遷移先に対応した相対アドレスを選択的に出力させるので、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。
[付記項9]
該マスクMASKと該コモンCMNとが全ビット不一致であるか否かを判定する全ビット不一致判定回路をさらに有し、
該セレクタはさらに、固定値が供給される第3入力端を有し、
該選択制御回路はさらに、該全ビット不一致判定回路が肯定判定した場合には優先的に
、該セレクタに対し該第3入力端の値を、該FAILURE遷移先に対応した相対アドレスとして選択的に出力させる、
ことを特徴とする付記項6又は7に記載の相対アドレス算出回路。
この構成によっても、該マスクMASKと該コモンCMNとが全ビット不一致であると判定した場合に該セレクタに対し、該FAILURE遷移先に対応した相対アドレスを選択的に出力させるので、簡単な構成で高速に相対アドレスを求めることができるという効果を奏する。
[付記項10]
該相対アドレス関数決定情報はさらに、該入力文字から該共通部及び該非共通部に対応する部分を除いた部分であるドント・ケア部の情報を含み、
該ドント・ケア部の情報は、該コモンCMNの該ドント・ケア部に対応する各ビットが該第2値であることに対応しており、
該マスクMASKと該コモンCMNとの論理和を合成マスクCMASKとして求めるOR回路をさらに有し、
該非共通部抽出・分割回路は、該入力文字から、該合成マスクCMASKに含まれる該第1値のビットを、該非共通部に対応するビットとして抽出する、
ことを特徴とする付記項7に記載の相対アドレス算出回路。
この構成によれば、該マスクMASKと該コモンCMNとの論理和を合成マスクCMASKとして求め、該合成マスクCMASKに含まれる該第1値のビットを、該非共通部に対応するビットとして抽出するので、該コモンCMNをドント・ケアとして使用する場合にも、そうでない場合と統一して取り扱うことができ、構成が簡単になるという効果を奏する。
[付記項11]
該非共通部抽出・分割回路は、該入力文字の該非共通部を上位NCLビットとし下位(ISL−NCL)ビットの各ビット値を該第1値とするISLビットの、上位NビットをブロックBLKとして求め、下位(ISL−N)ビットのビット位置を逆順にしたものをブロック内オフセットOFSとして求める、
ことを特徴とする付記項2乃至10のいずれか1つに記載の相対アドレス算出回路。
この構成によれば、簡単な構成で、該非共通部のビット数NCLの値によらず該非共通部を該ブロックBLKと該ブロック内オフセットOFSとに高速に分割できるという効果を奏する。
[付記項12]
該非共通部抽出・分割回路は、
クロック入力端にクロックが供給され、該入力文字が保持される第1シフトレジスタと、
クロック入力端に該クロックが供給され、該マスクMASK又は該合成マスクCMASKが保持される第2シフトレジスタと、
該第2シフトレジスタのシリアル出力端と該クロックとの論理積に対応したものを出力する第1論理回路と、
クロック入力端に該第1論理回路の出力が供給され、シリアル入力端が該第1シフトレジスタのシリアル出力端に接続された第3シフトレジスタと、
を有し、該第3シフトレジスタの上位Nビットから該ブロックBLKが取り出され、該第3シフトレジスタの下位(ISL−N)ビットのビット位置を逆順にしたものが該ブロック内オフセットOFSとして取り出される、
ことを特徴とする付記項11に記載の相対アドレス算出回路。
この構成によれば、該第1〜3シフトレジスタを用いた簡単な構成で、該非共通部を該ブロックBLKと該ブロック内オフセットOFSとに分割できるという効果を奏する。
[付記項13]
該非共通部抽出・分割回路はさらに、
該第1論理回路の出力パルスをカウントする第1カウンタと、
該第1カウンタのカウントCNが該所定値Nより大であるか否かを判定する比較回路と、
該比較回路が肯定判定しているときに該第1論理回路の出力パルスを通過させる第2論理回路と、
該第2論理回路の出力パルスをカウントする第2カウンタと、
を備え、該第2カウンタの計数値を該ブロックサイズ指数Sとして出力するブロックサイズ指数検出回路を有することを特徴とする付記項12に記載の相対アドレス算出回路。
この構成によれば、第1及び第2カウンタと比較回路と第2論理回路とを用いた簡単な構成で、該ブロックサイズ指数Sを求めることができるという効果を奏する。
[付記項14]
該非共通部抽出・分割回路は、
該マスクMASK又は該合成マスクCMASK上の、一方側最端を除く各ビットについて、その一方側隣のビットから該一方側最端ビットまでの該第2値の個数を求める一方側第2値個数検出回路と、
該マスクMASK又は該合成マスク上の該第1値に対応する、該入力文字の一方側最端を除く(NCL−1)ビットの各々について、該求められた対応する該第2値の個数だけこのビットをシフトさせたものを出力し、(ISL−NCL)ビットのそれぞれを該第1値にして他方側へ追加出力するとともに、該マスクMASK又は該合成マスク上の一方側最端が該第1値であれば該入力文字の一方側最端のビットを出力するデマルチプレクサ群と、
を有し、これらISLビットの出力のうち一方側Nビットを該ブロックBLKとし、残り(ISL−N)ビットのビット位置を逆順にしたものを該ブロック内オフセットOFSとする、
ことを特徴とする付記項11に記載の相対アドレス算出回路。
この構成によれば、該一方側第2値個数検出回路と該デマルチプレクサ群とを用いた簡単な構成で、該非共通部のビット数NCLの値によらず該非共通部を該ブロックBLKと該ブロック内オフセットOFSとに高速に分割できるという効果を奏する。
[付記項15]
該非共通部抽出・分割回路はさらに、
該マスクMASK又は該合成マスク上の該第1値をカウントする並列カウンタと、
該並列カウンタのカウントCN0と−Nとの和を求める加算回路と、
第1入力端に該加算回路の出力CN0−Nが供給され、第2入力端に0が供給され、該加算回路の符号ビットが負であることを示していれば該第2入力端の値を該ブロックサイズ指数Sとして選択的に出力し、そうでなければ該第1入力端の値を該ブロックサイズ指数Sとして選択的に出力するセレクタと、
を備えたブロックサイズ指数検出回路を有することを特徴とする付記項14に記載の相対アドレス算出回路。
この構成によれば、該並列カウンタと該加算回路と該セレクタとを備えた簡単な構成で、該ブロックサイズ指数を高速に求めることができるという効果を奏する。
[付記項16]
該ブロックナンバ検出回路は、
該第1デコーダの出力が入力され、該第2値を一端側へ尾引させたものを実質的に該一端側へ1ビットシフトさせる第2値尾引1ビット一端側シフト回路と、
該非共通部ビットマップから、該第2値尾引1ビット一端側シフト回路の出力の該第2値に対応する部分を抽出する論理回路と、
該論理回路の出力に含まれる該第2値をカウントし、その結果をブロックナンバBとして出力する並列カウンタと、
を有することを特徴とする付記項4乃至10のいずれか1つに記載の相対アドレス算出回路。
この構成によれば、第2値尾引1ビット一端側シフト回路と該論理回路と該並列カウンタとを備えた簡単な構成で、該ブロックナンバBを高速に求めることができるという効果を奏する。
[付記項17]
該演算回路は、
出力レジスタと、
該ブロックサイズ指数Sをデコードする第2デコーダと、
該出力レジスタの最下位側からNビットのそれぞれに対応して備えられ、それぞれ該ブロックナンバBの対応するビットがデータ入力端に供給され、0〜Nの範囲内で該第2デコーダの出力に応じたビット数だけ、それぞれ該出力レジスタの対応するビットから上位側へシフトさせて該出力レジスタに供給するデマルチプレクサ群と、
該デマルチプレクサ群の出力と衝突しないようにして、(NCL−N)ビットのブロック内オフセットOFSのそれぞれを、該該出力レジスタの最下位側から対応するビットに供給するゲート回路と、
を有することを特徴とする付記項5乃至10のいずれか1つに記載の相対アドレス算出回路。
この構成によれば、該出力レジスタと該第2デコーダと該デマルチプレクサ群と該ゲート回路とを備えた簡単な構成で、GOTO遷移先又はFAILURE遷移先の相対アドレスを高速に求めることができるという効果を奏する。
本発明の実施例1に係る有限オートマトンのメモリ内データ構造の概略を従来のそれと対比して示す説明図である。 有限オートマトンのメモリ内データ構造に対応した相対アドレス関数の説明図である。 共通部一致判定情報を用いた情報量削減方法と非共通部ビットマップを用いた情報量削減方法と共通部一致判定情報及び非共通部ビットマップを用いた情報量削減方法とのデータ圧縮効果を具体的に示す対比図である。 有限オートマトンのメモリ内データ構造の具体例を示す説明図である。 図4に対応した有限オートマトン状態遷移図である。 (A)は図5中の状態0からの遷移のみを抽出したものを示す図、(B)は(A)に関する相対アドレス関数決定情報を作成する方法の説明図、(C)は作成された相対アドレス関数決定情報のメモリ内配置を示す説明図である。 (A)は図5中の状態1からの遷移のみを抽出したものを示す図、(B)は(A)に関する相対アドレス関数決定情報のメモリ内配置を示す説明図である。 (A)は図5中の状態2からの遷移のみを抽出したものを示す図、(B)は(A)に関する相対アドレス関数決定情報を作成する方法の説明図、(C)は作成された相対アドレス関数決定情報のメモリ内配置を示す説明図である。 (A)は図5中の状態3からの遷移のみを抽出したものを示す図、(B)は(A)に関する相対アドレス関数決定情報作成説明図、(C)はこの相対アドレス関数決定情報のメモリ内配置説明図である。 消費フラグの任意性説明図である。 本発明の実施例1に係る有限オートマトンをソフトウェアで実行するための情報処理装置のハードウェア構成を示す概略ブロック図である。 このソフトウェアの概略フローチャートである。 図12中のステップS2の処理の詳細フローチャートである。 本発明の実施例2に係る有限オートマトン実行装置の概略ブロック図である。 図14の装置の動作を示す概略タイムチャートである。 図14中の相対アドレス算出回路20の構成例を示す概略ブロック図である。 図16の構成をより具体化した概略ブロック図である。 (A)は共通部一致判定真理値表を示す図、(B)はこの真理値表に従って動作する1ビット入力/1ビット出力の共通部一致判定回路図である。 (A)は他の、1ビット入力/1ビット出力の共通部一致判定回路図、(B)は(A)の回路を用いた、図17中の共通部不一致判定回路の構成例を示す図である。 図17中の非共通部抽出・分割回路を順序回路で構成した例を示す図である。 (A)及び(B)は図20の回路の非共通部抽出・分割動作説明図である。 図20の回路のブロックサイズ指数検出部動作説明図である。 図17中のブロックアドレス決定回路の構成例を示すブロック図である。 図23中のセットビット尾引・1ビットシフトライト回路の構成例を示す論理回路図である。 図23の回路の動作説明図である。 図17中の相対アドレス出力回路を組み合わせ回路で構成した例を示すブロック図である。 本発明の実施例3の非共通部抽出・分割回路図である。 (A)は図27中の上位側セットビット個数検出回路の構成例を示す図、(B)は他の構成例を示す図である。 図27中のブロックサイズ指数検出回路の構成例を示すブロック図である。 図27の非共通部抽出・分割回路の変形例を示す図である。 本発明の実施例4に係る有限オートマトンのメモリ内データ構造説明図である。 図31のデータ構造に対応した相対アドレス算出手順を示すフローチャートである。 本発明の実施例5に係る、図32のソフトウェア構成をハードウェア化した相対アドレス算出回路を示す図である。 本発明の実施例6に係る有限オートマトンのメモリ内データ構造説明図である。 この有限オートマトンを実行するソフトウェアの概略フローチャートである。 図35のステップS2Aの処理の詳細フローチャートである。 本発明の実施例7に係る有限オートマトン実行装置を示す概略ブロック図である。 図37中の相対アドレス算出回路の構成を示すブロック図である。 図37の装置の動作を示すタイムチャートである。 本発明の実施例8に係るGOTO遷移文字セットのサブセット化説明図であり、(A)は直列多段化前のGOTO遷移文字セットとMASKとを示し、(B)は直列多段化後のGOTO遷移文字サブセットとMASKとを示す図である。 (A)は図40(A)に対応した直列多段化前の単一状態説明、(B)は図40(B)に対応した直列多段化後の複数状態説明図である。 本発明の実施例9に係るGOTO遷移文字セットの直並列2段遷移化説明図である。 (A)は、GOTO遷移文字セットが図40(A)と同一である場合における、直並列2段遷移の第1段の相対アドレス関数決定情報定め方説明図、(B)は、第2段の1つの状態に関する相対アドレス関数決定情報定め方説明図である。 実施例1〜9のいずれかの相対アドレス関数決定情報と入力文字とが与えられたときの相対アドレス算出手順を示すフローチャートである。 本発明の実施例10に係る相対アドレス算出回路を示す概略ブロック図である。 図45の構成をより具体化したブロック図である。 図46中の共通部不一致判定回路の構成例を示すブロック図である。 本発明の実施例11に係る有限オートマトンのメモリ内データ構造概略を、従来のそれと対比して示す図である。 有限オートマトンのメモリ内データ構造概略説明図である。 図5の状態遷移図に対応したメモリ内データ構造説明図である。 図50のデータ構造の有限オートマトンを用いてキーワードを検出するプログラムの概略フローチャートである。 本発明の実施例11に係る有限オートマトン実行装置を示す概略ブロック図である。 図52の装置の動作を示す概略タイムチャートである。 本発明の実施例13に係る有限オートマトンのメモリ内データ構造概略説明図である。 図54のデータ構造のメモリを用いた有限オートマトン実行装置の概略ブロック図である。 本発明の実施例14に係る有限オートマトンのメモリ内データ構造概略説明図である。 図56のデータ構造のメモリを用いた有限オートマトン実行装置の概略ブロック図である。 メモリ内データ構造の変形例説明図である。
符号の説明
10 情報処理装置
11 CPU
12 インタフェース
13 PROM
14、14A RAM
15 ハードディスクドライブ
16 ネットワークアダプタ
17 入力装置
18 表示装置
20、20A〜20E 相対アドレス算出回路
21、21A、22、23、28、57 レジスタ
24 キュー
25、25A〜25D 制御回路
26、312i、346、34A アンドゲート
27、348、34B カウンタ
29、30、652、67 加算回路
31 共通部処理回路
311 OR回路
312 共通部抽出回路
313i イクスクルーシブノアゲート
313 一致判定回路
314 共通部不一致判定回路
32 FAILURE遷移先ブロックナンバ決定回路
33、33A、33B 出力回路
331、334、335、41、42、653、68、3S、3S1 セレクタ
332、336 オアゲート
333 演算回路
34、34P、34Q 非共通部抽出・分割回路
341 非共通部抽出部
342 分割部
343、344、345 シフトレジスタ
347 遅延ゲート
349、69 比較回路
35 ブロックアドレス決定回路
351、55 デコーダ
352 ブロックナンバ検出回路
353 不存在判定回路
40、43 インバータ
46 セットビット尾引・1ビットシフトライト回路
47、49 AND回路
48 並列カウンタ
50 ゼロ検出回路
51〜54、620 デマルチプレクサ
56 ゲート回路
61、61A 上位側セットビット個数検出回路
62、62A デマルチプレクサ群
63 AND回路
64 オアゲート群
641〜647 オアゲート
65 ブロックサイズ指数検出回路
651 並列‘0’カウンタ
66 全ビット不一致判定回路
X 文字列
IS 入力文字
NCMN 非共通部
BLK ブロック
OFS ブロック内オフセット
ADDR、ADDRi、Ai ワードアドレス
BADDR ベースアドレス
RADDR、RADDRi 相対アドレス
RBADDR、RBADDRi 相対ベースアドレス
MASK マスク
CMASK 合成マスク
CMNINFO 共通部一致判定情報
CMN コモン
BITMAP 非共通部ビットマップ
S ブロックサイズ指数
Q 出力状態
F 消費フラグ

Claims (11)

  1. 現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのデータ構造を有するデータが格納されたメモリにおいて、該データ構造は、
    1ワードに格納される、該現状態を示すベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報を有し、該相対アドレス関数決定情報は、該入力文字がGOTO遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該GOTO遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、
    該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスの1ワードに格納される、次の現・次状態情報を有する、
    ことを特徴とする、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
  2. 現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのデータ構造を有するデータが格納されたメモリにおいて、該データ構造は、
    1ワードに格納される、アドレスモードと該アドレスモードに応じたベースアドレス又は相対ベースアドレスと次状態への相対アドレス関数決定情報とを含む現・次状態情報を有し、該ベースアドレスは該現状態を示し、該相対ベースアドレスと該1ワードのアドレスとの和又は差に対応した値がベースアドレスに等しく、該相対アドレス関数決定情報は、該入力文字がGOTO遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該GOTO遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含み、該非共通部存否情報のビット長は該アドレスモードが該相対ベースアドレスを示すときの方が該ベースアドレスを示すときよりも大きく、
    該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスの1ワードに格納される、次の現・次状態情報を有する、
    ことを特徴とする、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
  3. 現状態と入力文字とに基づいて次状態へ遷移する有限オートマトンのデータ構造を有するデータが格納されたメモリにおいて、該データ構造は、
    該現状態を示すベースアドレスに格納される、該入力文字がGOTO遷移文字セットの共通部と一致しているか否かを判定するための共通部一致判定情報と該GOTO遷移文字セットから少なくとも該共通部を除いた部分である非共通部のいずれかを該入力文字が含んでいるか否かを判定するための非共通部存否情報とを含む相対アドレス関数決定情報と、
    該入力文字と該相対アドレス関数決定情報とで定まる相対アドレスと該ベースアドレスとの和又は差に対応したアドレスに格納される、該次状態を示すベースアドレスと、
    を有することを特徴とする、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
  4. 該共通部一致判定情報は、該共通部の各ビット位置を示すマスクMASKを含む、
    ことを特徴とする請求項1乃至3のいずれかに記載の、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
  5. 該マスクMASKは、該GOTO遷移文字セットを構成する文字が1個であるとき、各ビットが共通値であることを示す、
    ことを特徴とする請求項4に記載の、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
  6. 該共通部一致判定情報は、該共通部の各ビット位置に対応した値を示すコモンCMNを
    含む、
    ことを特徴とする請求項5に記載の、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
  7. 該コモンCMNは、該非共通部の各ビット位置に対応した値が第1値である、
    ことを特徴とする請求項6に記載の、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
  8. 該GOTO遷移文字セットを構成する文字が0個であるとき、
    該マスクMASKは、各ビットが共通値でないことを示し、該コモンCMNは、各ビットが第2値である、
    ことを特徴とする請求項7に記載の、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
  9. 該非共通部存否情報は、非共通部のビット長がNCLであるとき、NCL>NであればNビット、NCL≦NであればNCLビットの各値に対応した、GOTO遷移存否を示すビットからなる2Nビットの非共通部ビットマップを含み、
    ここにNは1<N<ISLを満たす整数であり、ISLは入力文字のビット長であることを特徴とする請求項6乃至8のいずれか1つに記載の、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
  10. 該非共通部ビットマップは、該GOTO遷移文字セットを構成するそれぞれの文字の該非共通部を上位NCLビットとし下位(ISL−NCL)ビットの各ビット値を該第1値とするISLビットの、それぞれの上位Nビットをデコードしたものの論理和である、
    ことを特徴とする請求項9に記載の、有限オートマトンのデータ構造を有するデータが格納されたメモリ。。
  11. 該相対アドレスは、ブロックナンバをB、ブロックサイズ指数をS、ブロック内オフセットをOFSと表記したとき、B*2S+OFS+(定数)と表され、ここに、
    ブロックナンバBは、該非共通部ビットマップ内の存在有を示すビット値のそれぞれについて、そのビット位置から該非共通部ビットマップの一端側までに含まれる、存在有を示すビット値の個数より1小さい値であり、
    ブロックサイズ指数Sは、NCL>NのときS=NCL−N、そうでないときS=0であり、
    ブロック内オフセットOFSは、NCL>Nのとき、該非共通部から該Nビットを除いた部分に対応した値であり、そうでないとき0である、
    ことを特徴とする請求項9又は10に記載の、有限オートマトンのデータ構造を有するデータが格納されたメモリ。
JP2010505832A 2008-03-27 2009-03-27 有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置 Expired - Fee Related JP5063780B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010505832A JP5063780B2 (ja) 2008-03-27 2009-03-27 有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置

Applications Claiming Priority (12)

Application Number Priority Date Filing Date Title
JP2008082363 2008-03-27
JP2008082363 2008-03-27
JP2008082365 2008-03-27
JP2008082362 2008-03-27
JP2008082364 2008-03-27
JP2008082361 2008-03-27
JP2008082362 2008-03-27
JP2008082364 2008-03-27
JP2008082361 2008-03-27
JP2008082365 2008-03-27
PCT/JP2009/056280 WO2009119802A1 (ja) 2008-03-27 2009-03-27 有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置
JP2010505832A JP5063780B2 (ja) 2008-03-27 2009-03-27 有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置

Publications (2)

Publication Number Publication Date
JPWO2009119802A1 JPWO2009119802A1 (ja) 2011-07-28
JP5063780B2 true JP5063780B2 (ja) 2012-10-31

Family

ID=41113986

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010505832A Expired - Fee Related JP5063780B2 (ja) 2008-03-27 2009-03-27 有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置

Country Status (2)

Country Link
JP (1) JP5063780B2 (ja)
WO (1) WO2009119802A1 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0675994A (ja) * 1992-06-19 1994-03-18 Matsushita Electric Ind Co Ltd 文字列照合装置
WO2006029986A1 (de) * 2004-09-16 2006-03-23 Siemens Aktiengesellschaft Rechnereinrichtung mit rekonfigurierbarer architektur zur aufnahme eines globalen zellularen automaten
JP2007034777A (ja) * 2005-07-28 2007-02-08 Nec Corp データ検索装置及び方法、並びにコンピュータ・プログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0675994A (ja) * 1992-06-19 1994-03-18 Matsushita Electric Ind Co Ltd 文字列照合装置
WO2006029986A1 (de) * 2004-09-16 2006-03-23 Siemens Aktiengesellschaft Rechnereinrichtung mit rekonfigurierbarer architektur zur aufnahme eines globalen zellularen automaten
JP2007034777A (ja) * 2005-07-28 2007-02-08 Nec Corp データ検索装置及び方法、並びにコンピュータ・プログラム

Also Published As

Publication number Publication date
WO2009119802A1 (ja) 2009-10-01
JPWO2009119802A1 (ja) 2011-07-28

Similar Documents

Publication Publication Date Title
CN107608750B (zh) 用于型式辨识的装置
Kumar et al. Advanced algorithms for fast and scalable deep packet inspection
US9647684B2 (en) Memory-based history search
CN107609644B (zh) 用于状态机中的数据分析的方法及系统
JP5265378B2 (ja) 高性能正規表現パターンマッチングのための方法および装置
JP6177418B2 (ja) ステートマシンエンジンによって受信されるデータを提供するための方法及び装置
US8972450B2 (en) Multi-stage parallel multi-character string matching device
JP6154824B2 (ja) ステートマシンラチスにおけるブール型論理
EP2668574B1 (en) Utilizing special purpose elements to implement a fsm
EP2668575B1 (en) Method and apparatus for compiling regular expressions
US8473523B2 (en) Deterministic finite automata graph traversal with nodal bit mapping
US20140019486A1 (en) Logic Content Processing for Hardware Acceleration of Multi-Pattern Search
US10430210B2 (en) Systems and devices for accessing a state machine
US11977902B2 (en) Methods and systems for event reporting
US20170193351A1 (en) Methods and systems for vector length management
US20220261257A1 (en) Systems and devices for accessing a state machine
EP1428127A1 (en) A memory engine for the inspection and manipulation of data
US11449344B1 (en) Regular expression processor and parallel processing architecture
US20200401553A1 (en) Devices for time division multiplexing of state machine engine signals
US10929764B2 (en) Boolean satisfiability
JP5063780B2 (ja) 有限オートマトンのメモリ内データ構造、この構造のデータが格納されたメモリ、このメモリを用いた有限オートマトン実行装置
Hilgurt A Survey on Hardware Solutions for Signature-Based Security Systems.
WO2015011907A1 (ja) k近傍法連想メモリ
US20080306948A1 (en) String and binary data sorting
CN112994886B (zh) 一种用于生成tcam搜索关键字的硬件及实现方法

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110225

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110225

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120403

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120601

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120807

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120807

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150817

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees