以降、本発明を実施のための最良の形態および実施例について具体的に説明する。しかし、本発明は以下に説明する実施の形態および実施例に限定されるものではなく、その要旨を逸脱しない範囲で種々の改良が可能である。
[全体の構成]
本発明における固定長データの検索および管理に係る実施例を示す機能ブロック図を図1に示す。理解しやすいように、検索に必要な機能を図1〜14により最初に説明し、その基本機能となる各種テーブルを構築し、保守する管理機能を次に説明する。
図1は、本発明における固定長データ検索および管理装置に係る実施例を示すブロック図である。図1に示す固定長データ検索および管理装置50は、固定長データ検索装置10を一部に有している。図1に示された固定長データ検索装置10は、入力された入力固定長データ9と検索番号8および統計データ11に対して、指定された処理を行って出力する入力固定長データ処理手段100と、前記入力固定長データ処理手段100の出力またはポインタ処理手段200の出力によりインデックスされるポインタテーブルを格納するポインタテーブルメモリ500と、後記固定長データテーブルメモリ560の出力または前記ポインタテーブルメモリ500の出力を前記入力固定長データ処理手段100の出力の一部とともに演算を行い、その結果を出力する前記ポインタ処理手段200と、前記ポインタ処理手段200の出力をインデックスとした固定長データテーブルを格納する固定長データテーブルメモリ560と、前記固定長データテーブルメモリ560が出力する多数の固定長データと前記入力固定長データ9を指定されたルールで比較する比較手段400と、前記比較手段400の一致結果の出力により、前記ポインタ処理手段200の出力をインデックスの一部とした、ユーザーデータと統計データを保持するデータテーブルを格納するデータテーブルメモリ540と、前記データテーブルメモリ540の出力の一部を出力する、又その一部のデータに演算を行い、前記データテーブルメモリの同じ場所に書き込む修正手段300と、前記比較手段400の出力と前記修正手段300の出力を同期させて出力する出力手段800とを備える。なお、前記ポインタテーブルメモリ500と固定長データテーブルメモリ560とデータテーブルメモリ540とを単一のメモリで構成するようにしてもよい。
図2は、図1に記載した固定長データ検索装置10の処理フロー図である。概略を説明すると、まず検索したい入力固定長データ9が入力される(S202)。そして入力固定長データ処理手段100によりポインタテーブルのインデックスを計算する(S204)。さらにポインタテーブルを読み出す(S206)。その後、ポインタテーブルの出力をポインタ処理手段200により処理する(S208)。それがポインタテーブルを指示すれば(S210)、ポインタテーブルの読み出し(S206)を再び行う。ポインタ処理手段200の出力が固定長データテーブルの読み出しを指示すれば、それを実行する(S212)。一回の固定長データテーブルの読み出しで比較動作(S214)が終了すれば(S216)、検索結果を作成し、一致していれば(S218〜S222)、修正手段300によりデータテーブルの読み出しと書き込み(S224)が行われる。そして出力手段により検索結果が出力される(S226)。比較結果が不一致(S218)の場合、不一致結果を作成し(S228)、出力手段により検索結果が出力される(S226)。前記比較動作が終了しなければ(S216〜S230)、再び、ポインタ処理でテーブルのアドレス計算が行われ、テーブルの選択(S232)が行われる。ローカルテーブルが選択された場合、固定長データテーブルの読み出し(S212)を実行する。テーブルの選択(S232)でSPTが選択された場合、ポインタテーブルからの読み出し(S206)を実行する。本発明におけるデータベースの細分化の特徴は複数のポインタテーブルの読み出し、複数の固定長データテーブルの読み出し、そしてポインタテーブルと固定長データテーブルの組み合わせによる複数の読み出し、により実現される。以下に固定長データ検索装置10の動作について図1、図2と共に詳細に説明する。
固定長データ検索装置10に入力される検索番号8は主に前記ポインタ処理手段200と比較手段400と修正手段300と各メモリの動作並列化および比較手段400と、修正手段300と、出力手段800の出力の名前として使用されるため、そして入力される統計データ11は修正手段300で使われるため、検索手法の本質ではないので図2に記述してはいない。
[入力固定長データ処理手段]
入力固定長データ9と検索番号8と統計データ11は入力固定長データ処理手段100に入力される。入力固定長データ処理手段100はポインタテーブル500に格納されたポインタテーブルのインデックスを演算し出力する。ポインタテーブルの役目はデータベース内の固定長データをグループに分割し、そのグループ内の固定長データの数(メンバー数)を均一化し可能な限り少なくすることである。このため、演算方法は次の4つを用意する。
(1)ハッシュ法により計算されたハッシュ値
(2)ハッシュ法により計算されたハッシュ値の一部
(3)入力固定長データ
(4)入力固定長データの一部
演算方法、ハッシュ値または入力固定長データから一部を取り出す方法は指定可能とする。入力固定長データ処理手段100の実施例を図3に示す。
入力固定長データ処理手段100に入力された入力固定長データ9はレジスターDに、検索番号8および統計データ11はレジスターCにそれぞれ一時的に貯蔵され、後述するその他の出力データが入力固定長データ処理手段100から出力される際に、同期して出力される。このため、レジスターCの出力を同期検索番号192および同期統計データ194と呼び、レジスターDの出力を同期入力固定長データ193と呼ぶ。固定長データ検索装置10の説明では混乱を避ける意味で同期した番号やデータに対しても、同じ名称を使う、ただしその番号はその都度異なるものとする。各信号はポインタ処理手段200、比較手段400、および修正手段300への入力となる。そして、入力固定長データ処理手段100への追加の入力には図3に示すように管理データ699がある。管理データ699は管理固定長データと管理検索番号と管理統計データから構成され、入力固定長データ9と検索番号8と統計データ11と同様に扱われる。管理データ699は固定長データ検索装置10の各種テーブルの管理の行う場合に入力される。管理データ699の詳細は固定長データ検索および管理装置50の説明で行う。
入力固定長データ9は入力抽出機能110に入力される。入力抽出機能110は、入力固定長データ9の入力抽出開始値171により指定されるビット位置のビットから、入力抽出終了値172により指定されるビット位置のビットまでを抽出し出力する。入力抽出開始値171が入力固定長データ9の最初のビット位置を示し、入力抽出終了値172が最後のビット位置を示す場合、出力される値は入力固定長データ9そのものである。なお、入力抽出開始値171または入力抽出終了値172はビット単位で指定されることを仮定して説明したが、バイト単位で指定することも可能である。入力抽出機能110の手順は入力固定長データ処理制御機能160により制御される。
入力抽出機能110の出力は後述する3:1選択器140と加算器120に入力される。抽出したデータが入力抽出機能110の出力バス幅を超える場合、入力抽出機能110は複数の出力バス転送サイクルにより抽出したデータを出力する。この場合、各バスサイクルで出力された出力値は加算器120により積算される。一例として、入力抽出機能110の出力バス幅が32ビット、加算器120が32ビット加算器を備え、抽出したデータが64ビットである場合、抽出したデータは2回の出力バス転送サイクルにより出力される。入力前に、レジスターA180は初期値(ゼロ)に設定されている。抽出したデータの最初の出力値は加算器120でレジスターA180が保持する値(この場合は初期値ゼロである)と加算され、その結果がレジスターA180に保持される。抽出したデータの2回目の出力値は同様に加算器120でレジスターA180が保持する値(この場合は最初の出力値である)と加算され、その結果がレジスターA180に保持される。抽出したデータの処理が終了したので、入力固定長データ処理制御機能160はレジスターA180のデータをレジスターB181に転送する。レジスターA180およびレジスターB181のデータ保持信号の発生は入力固定長データ処理制御機能160により生成および制御される。
レジスターB181の出力は後述する3:1選択器140とハッシュ演算器130に入力する。ハッシュ演算器130は入力されたレジスターB181の出力値からハッシュ関数値173を参照し、ハッシュ値を出力する。ハッシュ演算器130の出力値は3:1選択器140に入力される。ハッシュ関数はいろいろな方法が提案されている。例えば、ハッシュ関数として、入力されたレジスターB181の出力値をハッシュ関数値で除算し商と余りを得る、そして余りをハッシュ値とする方法である。本実施例においては、ハッシュ関数値を変更可能値と定めているが、ハッシュ関数値を固定にし、レジスターB181の出力値をシフト動作等により変化させる方法も可能である。
入力抽出機能110の出力、レジスターB181の出力、およびハッシュ演算器130の出力は3:1選択器140に入力される。3:1選択器140は選択値174を参照し、入力された3出力のうち一つを全インデックス190として出力する。全インデックス190は出力抽出機能150に入力される。
出力抽出機能150は全インデックス190の出力抽出開始値175により指定されるビット位置のビットから、出力抽出終了値176により指定されるビット位置のビットまでを抽出し、抽出したビットはポインタテーブルインデックス191として出力される。出力抽出開始値175が全インデックス190の最初のビット位置を、出力抽出終了値176が最後のビット位置を示す場合、出力される値は全インデックス190そのものである。出力抽出開始値175または出力抽出終了値176はビット単位で指定されることを仮定して説明したが、バイト単位で指定することも可能である。入力抽出機能110の手順は入力固定長データ処理制御機能160により制御される。
図3において、入力抽出開始値171、および入力抽出終了値172、ハッシュ関数値173、選択値174、出力抽出開始値175、および出力抽出終了値176は変更可能なレジスターに保持される。
入力固定長データ処理手段100はその回路を入力抽出機能110、加算器120とレジスターA180、ハッシュ演算器130、3:1選択器、および出力抽出機能150に分割し、おのおのをステージと呼ぶと、各ステージで異なる検索番号8を持つ検索動作が可能である。このように入力固定長データ処理手段100は検索処理能力を増大させるパイプライン処理を行う。
一般的に、入力固定長データ9の全てまたはその一部は、IPアドレスを検索するために使用され、その他の検索のためにはハッシュ値全てまたはその一部が使用される。
[ポインタテーブル]
図4に、ポインタテーブルメモリ500の構成例を示す。なお、図4には、ポインタテーブルメモリ500、固定長テーブルメモリ560、データテーブル540の構成が似ている場合の例をまとめて記載したものである。図4の下段には、これらの各メモリとして使用する場合の制御信号、アドレス、データ組合わせが記載されている。
ポインタテーブルメモリ500はメモリアレイ501から構成されるメモリ部分と書き込みおよび読み出し回路509から構成される。入力固定長データ処理手段100の出力の内、ポインタテーブルインデックス191(図3)はポインタテーブルメモリ500のメモリのアドレスに使われ、同期検索番号192はポインタテーブルメモリ500の読み出し回路を同期させるために使われる。ポインタテーブルインデックス191は図5に示すようにメモリアレイ501のアドレスと、メモリバンク502それ自体のアドレスと、メモリバンク502内のアドレス(ディスプレースメント)とから構成され、ポインタテーブルメモリ500のメモリアドレスとなる。
書き込み機能は、書き込みおよび読み出し回路509に入力される書き込みアドレス・制御信号503と書き込みデータ504により与えられる書き込み命令を実行することにより実現される。ポインタテーブルメモリ500におけること書き込み機能は、主に固定長データ検索および管理装置で使用される機能であるため、詳細な説明は、固定長データ検索および管理装置の説明において行う。
書き込みおよび読み出し回路509における読み出し機能は、2箇所からの読み出し命令を受付けて動作することができる。読み出し命令の一つは入力固定長データ処理手段100からの読み出し命令505であり、他はポインタ処理手段200からの読み出し命令506である。両命令とも読み出すメモリのアドレスおよび制御信号を含み、命令に固有な同期検索番号192を伴っている。このように構成する理由は、読み出し命令は、必ずしも順番には実行されず、実行可能な命令から実行されるからである。読み出し命令が実行された後、読み出されたデータが図4の読み出しデータ507として、入力された同期検索番号192を伴って出力される。これにより、読み出しデータ507がどの読み出し命令によるものであるか判断することができる。
ポインタテーブルメモリ500のメモリ部分はQ(Qは1以上の整数)個のメモリアレイ501から成り、各メモリアレイはP(Pは1以上の整数)個のメモリバンク502から構成される。各メモリアレイ501は独立して動作し、全ての、あるいは一部の複数のメモリアレイ501を同時に動作させることができる。メモリアレイ501において、各メモリバンク502は独立したタイミング発生回路を持つため独立に動作する。しかし各バンクを接続するアドレスとデータバスと制御信号が共通であるため、一時に動作開始可能なメモリバンク502は一つだけである。メモリ動作命令間隔に比べて、各メモリバンク502の動作時間が長いため、メモリアレイ501内の複数のメモリバンク502が動作できる。ポインタテーブルメモリ500はP*Q個のメモリバンクから構成される。P*Q個のメモリアレイ501から構成しない理由はアドレス・データバスおよび制御信号が膨大な量になるからである。
ポインタテーブルメモリ500は、一つの同じメモリアレイ501にはメモリ動作命令間隔で読み出し命令を与えることができる。メモリ動作命令間隔(t秒)は、全てのメモリバンク502が動作可能な場合、読み出しアドレス・制御信号を運ぶバスと読み出しデータを運ぶバスの転送能力に依存する。1秒あたり最大Q/t回のメモリ動作命令すなわちポインタテーブルの読み出しが実行可能である。しかしながら、複数の読み出し命令が同じメモリバンク502に対し与えられる場合、メモリの動作時間間隔でしかその命令を実行することができない。その場合、ポインタテーブルメモリ500が並列動作可能であるというメリットが失われる。この状況が起きた場合、解決法はメモリの動作時間を短縮するほか手段は無いが、この状況が短い時間内で起きる場合において、メモリの並列動作を改善する手法を以下に説明する。
図5にはポインタテーブルメモリ500の読み出し機能510が示されている。メモリアレイ501の読み出し機能510はn個のレジスター511とポインタテーブルメモリ制御手段512から構成される。n個のレジスターはR1、R2、R3、Rnと名付けられており、読み出し命令を格納する。読み出し命令は読み出すメモリバンク502のアドレスを含むメモリアドレスと制御信号を含む。各レジスターはR2の読み出し命令をR1へ、R3の読み出し命令をR2へと移動させるための独立したシフト動作を行える配線で結ばれている。各シフト動作は、ポインタテーブルメモリ制御手段512により発せられる実行命令により制御される。例えば、3つの読み出し命令が実行待ちの状態のとき、ポインタテーブルメモリ制御手段512は、3つの命令をR1、R2、およびR3に格納するように管理する。ここで、命令を受けた時間はR1の命令が最初で、R3の命令が最後である。ポインタテーブルメモリ制御手段512は担当するメモリアレイ501内の各メモリバンク502の動作状況を管理する。
読み出し命令520は入力固定長データ処理手段100からの読み出し命令505とポインタ処理手段200からの読み出し命令506とをまとめた信号である。読み出し命令520が読み出し機能510に入力されると、ポインタテーブルメモリ制御手段512は最後に格納されたレジスターの次のレジスターを選択して命令を格納する。例えば、レジスターR1、R2、およびR3が満室の場合、レジスターR4が選択され、命令はレジスターR4に格納される。メモリアレイ501へのアクセス開始時間前に、ポインタテーブルメモリ制御手段512は、次に実行可能なメモリバンクに対する命令を、レジスターR1、R2、R3、およびR4に格納されている命令の中から選択する。ここで、実行可能な命令が複数ある場合には、古い命令から順に実行される。例えば、レジスターR2とR4内の命令が実行可能である場合、レジスターR2の命令が実行される。R2の命令がメモリバンク502に転送された後、レジスターR3の命令はR2にシフトされ、レジスターR4の命令はR3にシフトされる。レジスターの数nはメモリアレイ501内のメモリバンク502の数、メモリ動作命令間隔、メモリの動作時間を考慮して決定される。このように、与えられた読み出し命令520を実行可能な命令から順次実行することにより、単位時間当たりのメモリ読み出し回数を増大させることができる。
ポインタテーブルメモリ500の出力は読み出された読み出しデータ507(図4)とその読み出し命令520に付属した同期検索番号192(図3)である。読み出しデータ507はポインタテーブルのエントリーデータである。
図6に、ポインタテーブルメモリ500に格納されるポインタテーブルのエントリーデータの内容を示す。図6に示したように、エントリーデータは大きく分類して3つの要素に分けられる。それらは(1)次工程、(2)次工程で必要なデータ、(3)メモリ制御データである。メモリ制御データは、次に読み出されるメモリアレイを含む固定長データテーブルを格納する固定長データテーブルメモリ560を構成するメモリアレイ561を制御するデータである。固定長データテーブルメモリ560については、固定長データが格納されているメモリアレイだけ、メモリ制御データにより読み出される。
ポインタテーブルのエントリーデータは次の6つの次工程を備える。
(1)ポインタテーブルのこのエントリーに固定長データは無い。検索終了となる。
(2)ポインタテーブルのこのエントリーに一つの固定長データが存在する。検索終了となる。
(3)ポインタテーブルの再読み出しを行う。
(4)ローカルテーブル(LT)の読み出しを行い、比較を実行する。
(5)固定長データテーブルの読み出しを行い、NVC(数値比較)を実行する。
(6)固定長データテーブルの読み出しを行い、比較を実行する。
これら次工程を詳しく説明する。
次工程が上記(1)である場合、すなわち、ポインタテーブルのこのエントリーに固定長データが無い場合、ポインタ処理手段200、固定長データテーブルメモリ560、比較手段400を経て出力手段800から検索結果が出力される。当然であるが固定長データテーブルメモリ560に入力されたポインタ処理手段200からのこの場合の命令によって読み出し動作は行われず、当該命令はそのまま比較手段400に出力される。もし、同期検索番号192に相当する検索結果が比較手段400に貯蔵されていなければ、不一致を示す検索結果が同期検索番号192と共に出力される。
次工程が上記(2)である場合、すなわち、ポインタテーブルの当該エントリーに一つの固定長データが存在する場合、このエントリーデータは固定長データのアドレスを持っている。この場合、ポインタ処理手段200、固定長データテーブルメモリ560、比較手段400を経て修正手段300でユーザーデータを得る。そして統計データが変更された後、一致検索結果とユーザーデータが同期検索番号192と共に出力手段から出力される。このケースはIPアドレスの検索に使われる工程であるため、後の比較処理は必要が無い。固定長データテーブルメモリ560におけるこの場合の動作は次工程(1)と同じである。
次工程が上記(3)である場合、すなわち、ポインタテーブルの再読み出しを行う場合は、ポインタテーブルのこのエントリーに多数の固定長データが存在することから、よりいっそうの細分化が必要である場合である。そのための手段として、ポインタテーブルによる細分化が図られる。最初のポインタテーブルと区別するため、このポインタテーブルをセカンダリーポインタテーブル(SPT)または2次ポインタテーブルと呼ぶ。このエントリーは、SPTのインデックスを生成させる目的で、ポインタテーブルメモリ500のベースアドレス、ポインタテーブルのサイズ、全インデックスの開始ビット位置、および全インデックスの終了ビット位置を備えている。SPTのインデックスはポインタテーブルメモリ500のベースアドレスと全インデックスの開始ビット位置から終了ビット位置に存在するビットとを連結して得られる。全インデックスの開始ビット位置から終了ビット位置に存在するビットは、ポインタテーブルインデックスとは異なる部分である。SPTのインデックスが得られた後、再びポインタテーブルが読み出される。その後の工程は、読み出されたポインタテーブルのエントリーに従う。
次工程が上記(4)である場合、すなわち、ローカルテーブル(LT)の読み出しを行い、比較を実行する場合、固定長データテーブル内に構築されたLTの読み出しを行い、得られた多数の固定長データの比較を行う。この次工程は、ポインタテーブルのこのエントリーに多数の固定長データが存在することから、よりいっそうの細分化を図る必要がある場合である。LTはそのための手段の一つである。LTは、固定長データテーブル内の複数のエントリーがテーブルとして活用されたものである。LTのインデックスは固定長データテーブルのインデックスの上位部分と、全インデックスの開始ビット位置から終了ビット位置に存在するビットとを連結して得られる。LTのインデックスが得られた後は(6)の工程の固定長データテーブルのインデックスが得られた後と同じである。
次工程が上記(5)である場合、すなわち、固定長データテーブルの読み出しを行い、NVCを実行する場合は、ポインタテーブルのこのエントリーに超多数の固定長データが存在することから、真剣によりいっそうのグループ化が必要となる場合である。このエントリーデータは、固定長データテーブルのインデックスを備え、そのインデックスに基づいて固定長データテーブルの読み出しを行い、読み出されたデータに基づいてNVCを実行する。この次工程が使われることはまれなことである。NVCにおいては数値比較を行うことによりデータベースを細分化する。NVC動作の詳細な説明は、固定データテーブルメモリの説明において行う。この次工程の次は(5)もしくは(6)である。(5)が選ばれる場合、このエントリーは巨大な数の固定長データを持つことが予想される。
次工程が上記(6)である場合、すなわち、固定長データテーブルの読み出しを行い、比較を実行する場合、このエントリーデータは、固定長データテーブルのインデックスと固定長データテーブルのメモリ制御データとを備え、そのインデックスに基づいて固定長データテーブルの読み出しを行い、読み出されたデータに基づいて比較を実行する。固定長データテーブルの読み出しの際、固定長データテーブルのメモリ制御データにより、このエントリーに属する固定長データが格納されているメモリアレイ501だけが読み出される。これにより、メモリ読み出し回数が増大され、メモリ読み出しに必要な電力が節約される。一般に、固定長データ検索装置10による検索の大部分は、この次工程により完了される。このエントリーデータから、固定長データテーブルのインデックスを得た後、固定長データテーブルが読み出される。得られた複数の固定長データテーブルのエントリーが比較手段に送られ、同期入力固定長データ193と比較されることにより、比較結果が得られる。
[ポインタ処理手段]
ポインタテーブルメモリ500の出力であるエントリーデータ(読み出しデータ507)はポインタ処理手段200に入力される(図1)。ポインタ処理手段200の目的は入力された情報から次工程である固定長データテーブルメモリのインデックスを出力することである。ポインタ処理手段200の実施例を図7に示す。ポインタ処理手段200の入力は、ポインタテーブルの前記エントリーデータと、入力固定長データ処理手段100の出力と、固定長データテーブルのエントリー制御データとである。ポインタテーブルの前記エントリーデータと固定長データテーブルのエントリー制御データとは同じ形式を持つので、以降の説明では単にエントリーデータという。
図7で、ポインタ処理手段200は、入力固定長データ処理手段100から出力された同期検索番号192と全インデックス190を受け取り、同期検索番号192をデコードして、その番号xに相当するレジスターSxに全インデックス190を格納する。
図7で、ポインタ処理手段200は、ポインタテーブルメモリ500の読み出しデータ507に含まれている同期検索番号514と比較手段400の同期検索番号451とを受け取り、同様にポインタテーブルメモリ500の読み出しデータ507に含まれているエントリーデータ516と比較手段400のエントリーデータ452とを受け取る。二つの同期検索番号514および451は、AND−OR231に入力される。ポインタ処理制御機能240の管理の下で、AND−OR231は同期検索番号251を生成する。同様に、エントリーデータ516およびエントリー制御データ452は、AND−OR221に入力される。さらにポインタ処理制御機能240の管理の下で、AND−OR221はエントリーデータを生成する。
同期検索番号は、エントリーデータを処理して、固定長データテーブルのインデックスを発生させるために、同期検索番号に相当する全インデックスを得る事に使われ、そして同期検索番号251として固定長データテーブルメモリ560に出力される。同期検索番号に相当する全インデックスは、n:1選択器213により準備され、レジスターEに格納される。
エントリーデータはAND−OR221により出力された後、レジスターFに格納される。その後、エントリーデータはそれ自体が有する次工程ビットによりデコードされ、目的のテーブルインデックス252とメモリ制御データ253を発生させる。次に、次工程とテーブルインデックス252およびメモリ制御データ253の関係を説明する。
(1)ポインタテーブルのこのエントリーに固定長データが無い場合、メモリ制御データ253は一致データ無しのデータとなり、そしてメモリ読み出し無しのデータとなる。両データは6:1選択器233に入力される固定制御データ234により生成される。固定制御データ234は、ポインタ処理制御手段240が生成する制御データの一つである。テーブルインデックス252は意味の無いデータとなる。テーブルインデックス252とメモリ制御データ253は固定長データテーブルメモリ560(図1)に送られる。
(2)ポインタテーブルのこのエントリーに一つの固定長データが存在する場合、メモリ制御データ253は一致データ有りのデータとなり、そしてメモリ読み出し無しのデータとなる。両データは6:1選択器233に入力され固定制御データにより発生される。テーブルインデックス252はエントリーデータから抽出された固定長データのアドレスとなる。テーブルインデックス252とメモリ制御データ253は固定長データテーブルメモリ560に送られる。
(3)ポインタテーブルの再読み出しを行う場合、メモリ制御データ253はポインタテーブルの読み出しのデータとなる。そのデータは6:1選択器233に入力される固定制御データ234により生成される。テーブルインデックス252としてはレジスターG216の出力が選択される。エントリーデータから抽出されたポインタテーブルベースアドレスと、SPTのサイズと、開始ビット位置と、終了ビット位置とが抽出機能215に入力され、全インデックスの開始ビット位置から終了ビット位置までのビットがレジスターG216に格納される。その結果、ポインタテーブルインデックスが形成される。テーブルインデックス252とメモリ制御データ253はポインタテーブルメモリ500に送られる。
(4)ローカルテーブル(LT)の読み出しを行い、比較を実行する場合、メモリ制御データ253は、固定長データテーブルの読み出しのデータとなる。そのデータは6:1選択器233に入力する固定制御データ234により生成される。テーブルインデックス252としてはレジスターG216の出力が選択される。エントリーデータから抽出された固定長データテーブルのインデックスの上位ビットと、LTのサイズと、開始ビット位置と、終了ビット位置とが抽出機能215に入力され、全インデックスの開始ビット位置から終了ビット位置までのビットがレジスターG216に格納される。その結果、固定長データテーブルインデックスが形成される。テーブルインデックス252とメモリ制御データ253は固定長データテーブルメモリ560に送られる。
(5)固定長データテーブルの読み出しを行い、NVCを実行する場合、メモリ制御データ253は固定長データテーブルを読み出したデータおよびNVC動作のデータとなる。そのデータは6:1選択器233に入力する固定制御データ234により生成される。テーブルインデックス252はエントリーデータから抽出された固定長データテーブルのインデックスとなる。テーブルインデックス252とメモリ制御データ253は固定長データテーブルメモリ560に送られる。
(6)固定長データテーブルの読み出しを行い、比較を実行する場合、メモリ制御データ253は固定長データテーブルを読み出したデータとエントリーデータから抽出された固定長データテーブルメモリの制御データとなる。固定長データテーブルの読み出しデータは、6:1選択器233に入力する固定制御データ234により発生される。テーブルインデックス252はエントリーデータから抽出された固定長データテーブルのインデックスを出力する。テーブルインデックス252とメモリ制御データ253は固定長データテーブルメモリ560に送られる。
ポインタ処理手段200のレジスターP217には、ポインタ処理手段200によって出力される、管理データを扱う検索番号を有しているテーブルインデックス252が格納される。レジスターP217においては、管理データを扱う検索番号を有しているテーブルインデックス252が複数回生成された場合、その生成のたびに格納動作が行われる。結果的に、レジスターP217は最後に生成されたテーブルインデックス252を保持する。
ポインタ処理手段200において、レジスターE214、レジスターF232、レジスターG216の前後において回路構成を複数のステージに区別すると、各ステージで異なる検索番号8を用いて検索動作が可能である。このようにポインタ処理手段200は検索処理能力を増大させるパイプライン処理を行う。ポインタ処理手段200のポインタ処理制御機能240は、抽出機能215、レジスターG216の格納信号発生、そしてパイプライン処理の管理を行う。
[固定長データテーブルメモリ]
図4に、固定長データテーブルメモリ560(図1)の構成例を示す。固定長データテーブルメモリ560は、メモリアレイ561から構成されるメモリ部分と書き込みおよび読み出し回路569とから構成される。ポインタ処理手段200の出力、固定長データテーブルインデックス252は、固定長データテーブルメモリ560のメモリのアドレス指定に使われ、同期検索番号251は固定長データテーブルメモリ560の読み出し回路の同期に使われる。固定長データテーブルインデックス252は、図5に示すようにメモリバンク562それ自体のアドレスと、メモリバンク562内のアドレス(ディスプレースメント)とから構成され、固定長データテーブルメモリ560のメモリアドレスとなる。この場合、メモリアレイ561のアドレスは出力されず、ポインタ処理手段200の出力であるメモリ制御データ(図示しない)により、固定長データテーブルメモリ560は独立して制御される。このため、固定長データテーブルメモリ560の全てのメモリアレイ561を読み出すことが可能となる。
固定長データテーブルメモリ560の書き込み機能は、書き込みおよび読み出し回路569に入力される書き込みアドレス・制御信号563と、書き込みデータ564により与えられる書き込み命令とにより実現される。この書き込み機能は、主に固定長データ検索および管理装置で使用される機能であるため、詳細な説明は固定長データ検索および管理装置の説明において行う。
固定長データテーブルメモリ560の読み出し機能はポインタ処理手段200からの読み出し命令565により実行される。読み出し命令565は、読み出すメモリのアドレスおよび制御信号を含み、そして命令に固有な同期検索番号251を伴う。その理由は読み出し命令が必ずしも順番には実行されず、実行可能な命令から実行されるからである。読み出し命令の実行後、読み出されたデータが図4の読み出しデータ567から、入力された同期検索番号251を伴って出力される。これにより、読み出しデータ567がどの読み出し命令によるものか判断できる。
固定長データテーブルメモリ560のメモリ部分はN(Nは1以上の整数)個のメモリアレイ561から成り、各メモリアレイはM(Mは1以上の整数)個のメモリバンク562から成る。各メモリアレイ561は独立して動作し、全ての、あるいは一部の複数のメモリアレイ561を同時に動作させることができる。メモリアレイ561において、各メモリバンク562は独立したタイミング発生回路を持つため独立に動作する。しかし各バンクを接続するアドレスとデータバスと制御信号が共通であるため、一時に動作開始可能なメモリバンク562は一つだけである。メモリ動作命令間隔に比べて、各メモリバンク562の動作時間が長いため、メモリアレイ561内の複数のメモリバンク562が動作できる。固定長データテーブルメモリ560はM*N個のメモリバンクから構成されるが、M*N個のメモリアレイ561から構成しない理由はアドレス・データバスおよび制御信号が膨大な量になるからである。
固定長データテーブルメモリ560は一つのメモリアレイ561にはメモリ動作命令間隔(t秒)で読み出し命令を与えることができる。メモリ動作命令間隔は、全てのメモリバンク562が動作可能な場合、読み出しアドレス・制御信号を運ぶバスと読み出しデータを運ぶバスの転送能力に依存する。1秒あたり最小1/t、最大N/t回のメモリ動作命令すなわち固定長データテーブルの読み出しが実行可能である。しかしながら、複数の読み出し命令が同じメモリバンク562に対し与えられる場合、メモリの動作時間間隔でしかその命令を実行することができない。その場合、固定長データテーブルメモリ560が並列動作可能であるというメリットが失われる。この状況が起きた場合、解決法は動作時間を短縮するほか手段は無いが、この状況が短い時間内で起きる場合、メモリの並列動作を改善する手法を以下に説明する。
図5に、固定長データテーブルメモリ560の読み出し機能570を示す。メモリアレイ561の読み出し機能570はn個のレジスター571と固定長データテーブルメモリ制御手段572から構成される。n個のレジスターはR1、R2、R3、Rnと名付けられており、読み出し命令を格納する。読み出し命令は読み出すメモリバンク562のアドレスを含むメモリアドレスと制御信号を含む。各レジスターはR2の読み出し命令をR1へ、R3の読み出し命令をR2へと移動させるための、独立したシフト動作を行える配線で結ばれている。各シフト動作は、固定長データテーブルメモリ制御手段572により発せられる実行命令により制御される。例えば、3つの読み出し命令が実行待ちの状態のとき、ポインタテーブルメモリ制御手段512は、3つの命令をR1、R2、およびR3に格納するように管理する。ここで、命令を受けた時間はR1の命令が最初で、R3の命令が最後である。固定長データテーブルメモリ制御手段572は担当するメモリアレイ561内の各メモリバンク562の動作状況を管理する。
読み出し命令565が読み出し機能570に入力されると、固定長データテーブルメモリ制御手段572は最後に格納されたレジスターの次のレジスターを選択して、命令を格納する。例えば、R1、R2、およびR3が満室の場合、R4が選択され、命令はそれに格納される。メモリアレイ561へのアクセス開始時間前に、固定長データテーブルメモリ制御手段572は、次に実行可能なメモリバンクに対する命令をレジスターR1、R2、R3、およびR4に格納されている命令の中から選択する。ここで、実行可能な命令が複数ある場合には、古い命令から順に実行される。例えば、レジスターR2とR4内の命令が実行可能である場合、レジスターR2に格納された命令が実行される。レジスターR2の命令がメモリバンク562に転送された後、レジスターR3の命令はR2にシフトされ、レジスターR4の命令はR3にシフトされる。レジスターの数nはメモリアレイ561内のメモリバンク562の数、メモリ動作命令間隔、メモリの動作時間を考慮して決定される。このように、与えられた読み出し命令565を実行可能な命令から、実行することにより、単位時間当たりのメモリ読み出し回数を増大させることができる。
固定長データテーブルメモリ560の出力は読み出された読み出しデータ567とその読み出し命令565に付属した同期検索番号251である。読み出しデータ567は固定長データテーブルのエントリーデータである。
図5に示されているように、固定長データテーブルのインデックスはメモリバンク562それ自体のアドレスとメモリバンク562の中のアドレス(ディスプレースメント)により構成される。そしてメモリアレイはメモリ制御データ253により制御される。この理由は一度に比較される固定長データの数をできるだけ多くするためであり、不必要なメモリアレイの読み出しを防ぐためである。固定長データテーブルの一つのインデックスで読み出される固定長データの構成を図8に示す。メモリアレイ561から読み出されるエントリーデータは、エントリー制御データと、複数の、単数の、または一部の固定値データとから構成される。メモリアレイ561に含まれる固定値データの数は、固定値データの長さに依存する。例として、図8は固定長データテーブルの一つのインデックスに最大数の固定長データが存在する場合を示す。このケースでは、メモリアレイ1を除く各メモリアレイの持つエントリー制御データは無視されるため、図示していない。
図8に、固定長データテーブルの要素の構成を示す。固定長データテーブルの要素としては2つの形式が存在し、前次工程がその形式を決定する。一つは前次工程が比較動作を指示した場合の形式(1)であり、他はNVC動作を指示した場合の形式(2)である。形式(1)は固定長データ、マスク、および固定長データ名から構成される。形式(1)の場合、マスクについては検索ルールによって存在しない場合(グローバルマスクである場合)もある。この場合には、比較対照データは固定長データであり、マスクはその比較動作で使用される。この場合において、比較動作の結果、固定長データ名が一致した場合、比較対照データは一致した固定長データの名前として出力されるデータである。形式(2)は抽出インデックスと固定長データテーブルインデックスとから構成される。形式(2)を理解するために、以下、NVC動作を説明する。
図9により、NVC動作を説明する。NVC動作をより理解しやすいように、NVC動作のエントリーデータの作成手順を図9により説明する。例として、ポインタテーブルのあるエントリーがm個の固定長データを保持していると仮定する。固定長データは、詳しくは、固定長データ、対応する全インデックス、マスク、および固定長データ名である。図9の作業1で示されるように、まず、全インデックスから指定された部分を抽出し、それを抽出インデックスと呼ぶこととすると、m個の固定長データに対する抽出インデックスを得る。次に、作業2で、m個の抽出インデックスを大小順に他のデータと共に並べる。さらに、作業3で、大小順に並べられた他のデータを伴ったm個の抽出インデックスを、所定の数以内に大きさ順に分割し、所定の数のグループを作る。この所定の数は、固定長データテーブルの一つのエントリーデータに格納できる数である。この所定の数以内であればエントリーデータ内に格納できるので、そのグループの所定の数は任意に選択できる。そして、作業4で、各グループの固定長データとその他のデータをエントリーデータに格納する。これが比較動作のためのエントリーデータとなる。各エントリーデータはそれぞれインデックスを持つ。加えて、作業5で、NVC動作のエントリーデータを作成する。なお、以上の説明においてはNVC動作によりエントリーデータを作成する方法を示したが、本発明でNVC形式のテーブル構造を作成する方法は異なる。
図9の説明により、NVC動作のエントリーデータが理解できる。すなわち、NVC動作は次のように行われる。例えば、ポインタテーブルのエントリーデータの次工程がNVC動作を指示した場合、そのエントリーデータが指定する固定長データテーブルインデックスに従って固定長データテーブルメモリを読み出し、NVC動作のエントリーデータを得る、その後、入力固定長データ9の全インデックス190から、そのNVC動作のエントリーデータの次工程が指定した部分を抽出する。抽出された抽出インデックスはNVC動作のエントリーデータにおける各固定長データテーブルの要素の抽出インデックスとその値が大小比較される。図9の作業5で得られたNVC動作のエントリーデータは、左側の抽出インデックスが最小で、右に向かって大きな抽出インデックスとなるように並べられている。この例に従えば、値の大小比較の結果は、抽出インデックスとの大小比較結果を左側から記述すると、大、大、大、大、小、小のような並びが得られる。この場合、大から小に遷移する直前の「大」が有する固定長データテーブルインデックスが、次の固定長データテーブルの読み出しインデックスとなる。大小比較の結果が全て大となれば、一番右側の抽出インデックスが持つ固定長データテーブルインデックスが次の固定長データテーブルの読み出しインデックスとなる。
もし、NVC動作のエントリーデータと比較動作のエントリーデータで格納できないほどに著しく多い固定長データがポインタテーブルのあるエントリーに属している場合には、NVC動作のエントリーデータを増やし、NVC動作のエントリーデータ、NVC動作のエントリーデータ、そして比較動作のエントリーデータという構成で、非常に大きな数の固定長データが検索可能である。なお、NVC動作自体が非常にまれな事態であるため、NVC動作のエントリーデータが二つ続くケースはありえないと考えられるが機能としては用意されている。
図6に、固定長データテーブルメモリ560に格納される固定長データテーブルのエントリー制御データの内容を示す。エントリー制御データはポインタテーブルのエントリーデータと同様な構成である。図6に示されたようにエントリー制御データは大きく分類して3つの要素に分けられる。それらは(1)次工程、(2)次工程で必要なデータ、(3)メモリ制御データである。メモリ制御データは、固定長データテーブルを格納する固定長データテーブルメモリ560を構成するメモリアレイ561であって、次に読み出されるメモリアレイ561を制御するデータである。固定長データテーブルメモリ560においては、固定長データが格納されているメモリアレイだけが、メモリ制御データにより読み出される。次に読み出されるメモリがポインタテーブルメモリ500である場合、メモリ制御データは無視される。
エントリー制御データは次の5つの次工程を備える。
(1)固定長データテーブルのこのエントリーに固定長データは無い。
検索終了となる。
(2)ポインタテーブルの再読み出しを行う。
(3)ローカルテーブル(LT)の読み出しを行い、比較を実行する。
(4)固定長データテーブルの読み出しを行い、NVCを実行する。
(5)固定長データテーブルの読み出しを行い、比較を実行する。
これら次工程を詳しく説明する。
次工程が上記(1)である場合、すなわち、固定長データテーブルのこのエントリーに固定長データは無い場合、比較手段を経て出力手段800から検索結果が出力される。もし比較手段400に、同期検索番号192に相当する検索結果が貯蔵されていなければ、不一致の検索結果が同期検索番号192と共に出力される。
次工程が上記(2)である場合、すなわち、ポインタテーブルの再読み出しを行う場合、固定長データテーブルの当該エントリーに多数の固定長データが存在するため、よりいっそうの細分化が必要であることを意味する。その手段として、ポインタテーブルによる細分化が図られる。SPTのインデックスを発生する目的で、このエントリーは、ポインタテーブルメモリ500のベースアドレス、ポインタテーブルのサイズ、全インデックスの開始ビット位置、および全インデックスの終了ビット位置を備える。SPTのインデックスはポインタテーブルメモリ500のベースアドレスと全インデックスの開始ビット位置から終了ビット位置に存在するビットを連結して得られる。全インデックスの開始ビット位置から終了ビット位置に存在するビットは、ポインタテーブルインデックスとは異なる部分である。SPTのインデックスが得られた後、比較手段を経て再びポインタテーブルの読み出しを行う。その後の工程は、読み出されたポインタテーブルのエントリーに従う。
次工程が上記(3)である場合、すなわち、ローカルテーブル(LT)の読み出しを行い、比較を実行する場合、固定長データテーブル内に構築されたLTの読み出しを行い、得られた多数の固定長データの比較を行う。これは、ポインタテーブルのこのエントリーに多数の固定長データが存在するため、よりいっそうの細分化を図る必要があることを意味し、LTはその手段の一つである。LTは、固定長データテーブル内の複数のエントリーをテーブルとして活用する。LTのインデックスは固定長データテーブルのインデックスの上位部分と全インデックスの開始ビット位置から終了ビット位置に存在するビットを連結して得られる。LTのインデックスが得られた後は(5)の工程の固定長データテーブルのインデックスが得られた後と同じである。
次工程が上記(4)である場合、すなわち、固定長データテーブルの読み出しを行い、NVCを実行する場合、ポインタテーブルのこのエントリーに超多数の固定長データが存在するため、真剣によりいっそうのグループ化が必要であることを意味する。このエントリーデータは固定長データテーブルのインデックスを備え、そのインデックスで固定長データテーブルの読み出しを行い、読み出されたデータでNVCを実行する。この次工程が使われることはまれなことである。この次工程の次は(4)または(5)である。(4)が選ばれる場合、このエントリーは巨大な数の固定長データを持つことが予想される。前次工程がNVCの実行を指示している場合、図6に示されたようにエントリー制御データは全インデックスから抽出するデータを含む。
次工程が上記(5)である場合、すなわち、固定長データテーブルの読み出しを行い、比較を実行する場合、このエントリーデータは、固定長データテーブルのインデックスと固定長データテーブルのメモリ制御データを備え、そのインデックスの作用により固定長データテーブルの読み出しを行い、読み出されたデータを用いて比較を実行する。固定長データテーブルの読み出しの際、固定長データテーブルのメモリ制御データは、このエントリーに属する固定長データが格納されているメモリアレイ561だけを読み出す。これにより、メモリ読み出し回数を増大し、メモリ読み出しに必要な電力の節約になる。一般に、固定長データ検索装置10で検索される大部分はこの次工程により検索終了する。このエントリーデータから、固定長データテーブルのインデックスを得た後、固定長データテーブルが読み出される。得られた複数の固定長データテーブルのエントリーは比較手段400に送られ、同期入力固定長データ193と比較され、比較結果が得られる。前次工程がNVCの実行を指示している場合、図6に示されたようにエントリー制御データは全インデックスから抽出するデータを含む。
[比較手段]
固定長データテーブルメモリ560の出力であるエントリーデータは比較手段400に入力される。比較手段400の目的は、入力されたエントリーデータと前もって保存された同期入力固定値データ193とを比較し(比較動作)、比較により得られた結果を保持すること、入力されたエントリーデータと全インデックスから抽出した抽出インデックスを大小比較すること、および、入力されたエントリー制御データの次工程に従い、次の工程を決定することである。
比較手段400の実施例を図10に示す。比較手段400への入力は固定長データテーブルメモリ560の出力である固定長データテーブルのエントリーデータと入力固定長データ処理手段の出力とである。図10に示したように、比較手段400は、入力固定長データ処理手段100から出力された同期検索番号192と全インデックス190を受け取り、デコーダー411により同期検索番号192をデコードして、その番号xに相当するレジスターTx、412に同期入力固定値データ193と全インデックス190を格納する。同期入力固定値データ193は、固定値データテーブルメモリ560から出力された固定値データテーブルのエントリーデータと比較を行うために使われ、全インデックス190は、ポインタテーブルインデックスまたは固定値データテーブルインデックスの発生のために使われる。
固定長データテーブルメモリ560から入力される同期検索番号とエントリーデータはレジスターHに保持される。比較手段400の機能は、レジスターH、421のメモリ制御データ以外のエントリーデータの処理、すなわち前次工程の処理とレジスターHのエントリーデータの持つ次工程の処理とである。このため、前次工程の示す処理を最初に説明し、その後、エントリーデータが含む次工程によって実行される、比較手段400の処理を説明する。各説明における動作手順は比較制御機能440により管理される。比較制御機能440は入力される次工程により比較手段400の他の回路の制御信号を発生する。
前次工程において固定長データテーブルメモリ560から比較手段400への入力が生じるのは次の5つのケースである。
(1)ポインタテーブルのこのエントリーに固定長データは無い。検索終了となる。
(2)ポインタテーブルのこのエントリーに一つの固定長データが存在する。検索終了となる。
(3)ローカルテーブル(LT)の読み出しを行い、比較を実行する。
(4)固定長データテーブルの読み出しを行い、NVCを実行する。
(5)固定長データテーブルの読み出しを行い、比較を実行する。
以下、各ケースについて比較手段400の処理を説明する。
次工程が上記(1)である場合、すなわち、このエントリーに固定長データが無い場合においては、比較制御機能440は検索の終了を認識する。この際、レジスターHに保持されている同期検索番号xに相当するレジスターUxの内容、すなわち、検索結果453と固定長データ名452がn:1選択器424を通して、同期検索番号451を伴って、出力手段800に出力される。それと同時に、検索結果が一致結果を示す場合には、同期検索番号451と同期検索番号xに相当するレジスターUxに保持されるデータテーブルインデックス455が修正手段300に送られる。
次工程が上記(2)である場合、すなわち、このエントリーに一つの固定長データが存在する場合、比較制御機能440は検索の終了および一致結果を認識し、比較器431に対し、レジスターHに保持されている固定長データテーブルのインデックスのアドレスをn:1選択器432に出力し、一致結果を出力させる。n:1選択器432は固定長データ名と固定長データテーブルインデックスを、比較器431は検索結果と固定長データテーブルのインデックスのアドレスを出力し、その出力は同期検索番号xに相当するレジスターUxに書き込まれる。書き込み動作後、n:1選択器424を通して出力手段800と修正手段300に出力される。固定長データテーブルインデックスと固定長データテーブルのインデックスのアドレスを連結することによりデータテーブルインデックス455が得られる。出力手段800に出力されるデータは検索結果453、同期検索番号451と固定長データ名である。そして修正手段300に出力されるデータは同期検索番号451とデータテーブルインデックス455である。
次工程が上記(3)である場合、すなわち、ローカルテーブル(LT)の読み出しを行い、比較を実行する、および(5)固定長データテーブルの読み出しを行い、比較を実行する場合、レジスターHに保持されているエントリーデータについての比較手段400が行う処理は同じである。レジスターHに保持されている同期検索番号により、n:1選択器413はレジスターTxを選択し、その内容、すなわち同期入力固定長データと全インデックスを出力する。次工程が(3)または(5)であるため、2:1選択器は、同期入力固定長データをレジスターTxの出力から選択する。そして、その出力は抽出機能415に入力される。この際、同様に次工程(3)または(5)であるため、抽出機能415は機能せず、入力された同期入力固定長データはそのまま出力されずに、比較器431に入力される。一方、レジスターHに保持されている固定長データテーブルの各要素は比較器431に入力され、比較動作が行われる。
比較器431は図11に示す3種類の論理比較を行う。検索ルールがLPM(Longest Prefix Match)法の場合、固定長データテーブルの要素はマスク値を持つ。マスクは固定長データのビット長を有するビット列に展開される。展開方法は、マスクが持つ値(図11ではm)に1を加えた和だけ左側のビット位置から1を並べ、それ以降は固定長データのビット長のところまで0を並べる。固定長データと同じ長さを有する展開されたビット列が論理比較動作のマスクとして動作する。この場合、固定長データの左側から(m+1)ビットだけ論理比較が行われる。論理比較は固定長データテーブルの要素と同期入力固定長データの左側の(m+1)ビットが一致すれば、一致していると判断し、それ以外の場合には不一致であると判断する。検索ルールがローカルマスクルール法により行われる場合、固定長データテーブルの要素はマスクそれ自体を有しており、そのマスクを使い、固定長データテーブルの要素と同期入力固定長データの論理比較を行う。論理比較はLPM法のマスク展開後の処理と同じである。ただし、マスクは任意のビット位置に1が存在するものであるため、1となっているビット位置においてのみ論理比較を実行する。検索ルールがグローバルマスクルール法により行われる場合、固定長データテーブルの要素はマスクを持たない。そのかわり、マスクは指定可能なレジスターに保存されている。そのマスクを使い、固定長データテーブルの要素と同期入力固定長データの論理比較が行われる。論理比較はローカルマスクルール法と全く同じである。
論理比較の結果、一致する固定長データテーブルの要素が存在すれば、一致要素のアドレスを発生させ、レジスターH421に保持されている同期検索番号xでアドレス指定されるレジスターUx423に検索結果、固定長データ名、固定長データテーブルインデックス、および一致要素のアドレスを保存する。固定長データテーブルインデックスと一致要素のアドレスを連結すればデータテーブルのインデックスが得られる。
次工程が上記(4)である場合、すなわち、固定長データテーブルの読み出しを行い、NVCを実行する場合、図11に示す大小比較を行い、検索を続ける。レジスターHに保持されている同期検索番号xにより、n:1選択器413はレジスターT1〜Tn412の中から、レジスターTxを選択し、その内容、同期入力固定長データと全インデックスを出力する。それらから、2:1選択器は、次工程(4)であるため、全インデックスを選択する。そして、その出力は抽出機能415に入力され、同様に次工程(4)であるため、抽出機能415はレジスターH421に保持されているNVCの長さ、開始ビット位置、および終了ビット位置により制御され、それらから抽出インデックスを抽出し、比較器431に入力される。一方、レジスターH421に保持されている固定長データテーブルの各要素は比較器431に入力され、大小比較動作が行われる。NVCの長さ、開始ビット位置、および終了ビット位置は、前次工程がNVC動作を指示した場合、レジスターHのエントリーデータの持つ次工程に保存されている。
比較器431は、図11に示すように、抽出機能415からの抽出インデックス(A)と固定長データテーブルの各要素の抽出インデックス(B)を大小比較する。比較器431はこの結果、A>B、A=B、そしてA<Bを発生する。
結果として、比較器431は比較回路と大小比較回路を備える。これらの回路はいろいろなビット長を持つ固定長データを扱えるように、回路のビット長を変更可能な構成を持つ。1ビット単位で再配置可能な回路が無駄である場合には、バイト、またはワード単位で規定される再配置可能な回路を備える。
比較手段400においては、記述された前次工程の処理と同時に、レジスターHのエントリーデータの持つ次工程の処理が行われる。固定長データテーブルのエントリー制御データは図6に示されている下記次工程の処理を行う。
(1)固定長データテーブルの当該エントリーに固定長データは無い。検索終了となる。
(2)ポインタテーブルの再読み出しを行う。
(3)ローカルテーブル(LT)の読み出しを行い、比較を実行する。
(4)固定長データテーブルの読み出しを行い、NVCを実行する。
(5)固定長データテーブルの読み出しを行い、比較を実行する。
又、前次工程がNVC動作か否かでこれら次工程の処理は異なる、このため、最初は前次工程がNVC動作ではない場合を詳しく説明する。そしてその後、前次工程がNVC動作の場合について説明する。
次工程が(1)である場合、すなわち、固定長データテーブルのこのエントリーに固定長データは無い場合、比較制御機能440は検索の終了を認識し、レジスターHに保持されている同期検索番号xに相当するレジスターUxの内容(すなわち、検索結果453と固定長データ名452)がn:1選択器424を通して、同期検索番号451を伴って、出力手段800へと出力される。同時に、検索結果が一致結果を示す場合、同期検索番号451と同期検索番号xに相当するレジスターUxに保持されるデータテーブルインデックス455とが修正手段300に送られる。
その他(2)〜(5)の次工程においてはエントリー制御データがレジスターI433に入力され、2:1選択器434を通して出力される。出力されるエントリー制御データ454はポインタ処理手段200に出力される。
前次工程がNVC動作の場合、エントリー制御データの次工程としては次の3つが使用できる。
(1)固定長データテーブルのこのエントリーに固定長データが無い。
(2)固定長データテーブルの読み出しを行い、NVCを実行する。
(3)固定長データテーブルの読み出しを行い、比較を実行する。
このうち、次工程(1)は前次工程がNVC動作ではない場合の次工程(1)と全く同じ処理を行う。
次工程が上記(2)と(3)である場合において、出力されるエントリー制御データは、前次工程がNVC動作ではない場合と異なる。前次工程がNVC動作を指定しているため、レジスターHに保持されているエントリーデータの固定長データテーブルの各要素と大小比較が行われている。この際の比較は大小比較であるため、条件に合う要素が存在する。その要素の持つ固定長データテーブルのインデックスはn:1選択器432を通して、レジスターI433に保存される。そして固定長データテーブルのインデックスは次工程と共に、2:1選択器434を通して出力される。出力されるエントリー制御データ454はポインタ処理手段200に出力される。
比較手段400が出力するデータのまとめを図12に示す。比較手段400は検索動作が終了したと判断した場合、修正手段300と出力手段800(図1)に図12に示すデータを出力する。すなわち修正手段300に同期検索番号を伴い、データテーブルのインデックスを出力する。これを使い修正手段300はユーザーデータと統計データをアクセスする。出力手段800に検索結果と同期検索番号を伴い、比較結果が一致した場合だけ固定長データ名を加えて出力する。又、比較手段400は検索動作が続くと判断した場合、ポインタ処理手段200に図12に示すデータを出力する。すなわち、同期検索番号を伴い、前次工程がNVCの場合、NVC動作で得た固定長データテーブルインデックスが、その他の場合、エントリー制御データが出力される。
比較手段400(図10)はその回路をレジスターH421とレジスターI433の前後に区分して、おのおのをステージと呼ぶと、各ステージで異なる同期検索番号を持つ検索動作が可能である。このように比較手段400は検索処理能力を増大させるパイプライン処理を行う。比較手段400の比較制御機能440は抽出機能415、比較器431、レジスターUxの格納信号発生、そしてパイプライン処理の管理を行う。
ポインタ処理手段200に出力されたエントリー制御データの処理は前記ポインタ処理手段200で説明された方法により行われる。
[修正手段]
修正手段300に入力された同期検索番号451とデータテーブルインデックス455はデータテーブルに格納されているユーザーデータの読み出しと、統計データの変更を行う。図13に修正手段300の実施例を示す。
図13において、修正手段300は、入力固定長データ処理手段100から出力された同期検索番号192と同期統計データ194を受け取り、同期検索番号192をデコーダー311によりデコードして、その番号xに相当するレジスターTxに同期統計データ194を格納する。同期統計データ194はデータテーブルメモリ540から出力されたデータテーブルのエントリーデータの一つである統計データに加算される。加算結果は統計データが格納されていたのと同じエントリーに書き込まれる。データテーブルのエントリーデータにおける他のデータ、ユーザーデータは統計データと共に読み込まれ、出力手段800に同期検索番号と共に出力される。
図13において、比較手段400からデータテーブルインデックス455と同期検索番号451が入力されレジスターK316に格納される。レジスターKの出力である読み込み同期検索番号336と読み込みデータテーブルインデックス335とはデータテーブルメモリ540に読み出し動作を行うために出力される。又、データテーブルインデックス335は統計データの変更後の書き込みを行うためにレジスターM322に格納される。
データテーブルメモリ540の読み出し動作終了後、データテーブルメモリ540の読み出しデータ556、すなわち、同期検索番号とエントリーデータが入力され、同期検索番号はレジスターM322に、エントリーデータはレジスターJ315に各々格納される。同期検索番号はn:1選択器の選択信号として使われ、同期検索番号xに相当するレジスターVx312に格納されている統計データを選択する。選択された統計データはレジスターL313に格納され、加算器321に入力される。一方、レジスターJ315に格納されているエントリーデータの統計データは、加算器321の他方の入力に送られる。エントリーデータのユーザーデータはレジスターM322に格納される。
加算器321は加算結果を出力し、加算結果はレジスターM322に格納される。そして、レジスターM322の格納されている読み込みデータテーブルインデックス335、同期検索番号、および加算器の結果を、それぞれ書き込みデータテーブルインデックス334、書き込みおよび出力同期検索番号333、書き込み累積統計データ331の名前でデータテーブルメモリ540に出力して、書き込み動作をする。この際、管理データを処理する検索番号を受け取った場合には、加算器321は加算結果をレジスターO323に格納することもできる。管理データを扱う検索番号はデコーダー324で認識され、レジスターO323の格納信号となる。レジスターO323の出力は固定長データ検索および管理装置50により読み出される。その詳細は後述する、固定長データ検索および管理装置50に関連して説明する。
レジスターM322に格納されているユーザーデータは、出力ユーザーデータ332として、書き込みおよび出力同期検索番号333と共に出力手段800に出力される。図13に、出力手段800への出力データを示す。
修正手段300はその回路をレジスターK316、レジスターJ315、レジスターL313とレジスターM322の前後に区分し、おのおのをステージと呼ぶと、各ステージで異なる同期検索番号を持つ検索動作が可能である。このように修正手段300は検索処理能力を増大させるパイプライン処理を行う。又、修正手段300の修正制御機能340は加算器321の制御とレジスターK316、レジスターJ315、レジスターL313とレジスターM322の格納信号発生、そしてパイプライン処理の管理を行う。特に、レジスターM322は格納する各種データに合わせた格納信号を発生させる必要がある。
[データテーブルメモリ]
図4に、データテーブルメモリ540の構成例を示す。データテーブルメモリ540はメモリアレイ541から構成されるメモリ部分と書き込みおよび読み出し回路550から構成される。修正手段300の出力である書き込みデータテーブルインデックス334、および読み出しデータテーブルインデックス335は、データテーブルメモリ540のメモリのアドレス指定に使われ、読み出し同期検索番号336はデータテーブルメモリ540の読み出し回路の同期に使われる。書き込みデータテーブルインデックス334、および読み出しデータテーブルインデックス335は、図5に示されるように、メモリアレイ551のアドレス、メモリバンク542のアドレス、およびメモリバンク542内のアドレス(ディスプレースメント)から構成され、データテーブルメモリ540のメモリアドレスとなる。
書き込み機能は、2箇所からの書き込み命令を受け付け、実行可能である。一つは修正手段300からの書き込み命令であり、他はデータテーブルメモリ540の管理機能からの書き込み命令である。修正手段300からの書き込み命令は、書き込みおよび読み出し回路550に入力される書き込みアドレス・制御信号A551と書き込みデータ552とにより実行する。データテーブルメモリ540の管理機能からの書き込み命令は、書き込みおよび読み出し回路550に入力される書き込みアドレス・制御信号B553と書き込みデータ554とにより実行する。管理機能からの書き込み機能は、主に固定長データ検索および管理装置で使用される機能であるため、詳細説明は固定長データ検索および管理装置の説明で行う。
読み出し機能は修正手段300からの読み出し命令であり、読み出し命令はアドレス・制御信号555と命令に固有な読み出し同期検索番号336を伴う。これは、読み出し命令が順番には実行されず、実行可能な命令から実行されるためである。読み出し命令の実行後、読み出されたデータが図4の読み出しデータ556から、入力された読み出し同期検索番号336を伴って出力される。これにより、読み出しデータ556がどの読み出し命令によるものか判断できる。
データテーブルメモリ540のメモリ部分はU(Uは1以上の整数)個のメモリアレイ541から成り、各メモリアレイはV(Vは1以上の整数)個のメモリバンク542から構成される。各メモリアレイ541は独立して動作し、複数のメモリアレイ541の全てあるいはその一部だけを同時に動作させることができる。メモリアレイ541において、各メモリバンク542は独立したタイミング発生回路を持つため独立に動作する。しかし各バンクを接続するアドレスとデータバスと制御信号が共通であるため、一時に動作開始可能なメモリバンク542は一つだけである。メモリ動作命令間隔に比べて、各メモリバンク542の動作時間が長いため、メモリアレイ541内の複数のメモリバンク542が動作できる。データテーブルメモリ540はU*V個のメモリバンクから構成されるが、U*V個のメモリアレイ541から構成しない理由はアドレス・データバスおよび制御信号が膨大な量になるからである。
データテーブルメモリ540は同じメモリアレイ541にメモリ動作命令間隔で読み出し命令を与えることができる。メモリ動作命令間隔(t秒)は、全てのメモリバンク542が動作可能な場合、読み出しアドレス・制御信号を運ぶバスと読み出しデータを運ぶバスの転送能力に依存する。毎秒最大Q/t回のメモリ動作命令すなわちデータテーブルの読み出しが実行可能である。しかしながら、複数の読み出し命令が同じメモリバンク542に対し与えられる場合、メモリの動作時間間隔でしかその命令を実行することができない。その場合、ポインタテーブルメモリ540の並列動作可能なメリットが失われる。この状況となった場合、解決法は動作時間を短縮するほか手段は無いが、この状況が短い時間内で起きる場合、メモリの並列動作を改善する手段を説明する。図5に、データテーブルメモリ540の読み出し機能549を示す。
メモリアレイ541の読み出し機能549はn個のレジスター543とデータテーブルメモリ制御手段544から構成される。n個のレジスターはR1、R2、R3、Rnと名付けられ、読み出し命令を格納する。読み出し命令は読み出すメモリバンク542のアドレスを含むメモリアドレスと制御信号を含む。各レジスターはR2の読み出し命令をR1へ、R3の読み出し命令をR2へ移動する、独立したシフト動作を行える配線で結ばれ、各シフト動作はデータテーブルメモリ制御手段544が実行命令を出す。例えば、3つの読み出し命令が実行待ちの状態のとき、データテーブルメモリ制御手段544は、3つの命令をR1、R2、およびR3に格納するように管理する。この場合、命令を受けた時間はR1の命令が最初で、R3の命令が最後である。データテーブルメモリ制御手段544は担当するメモリアレイ541内の各メモリバンク542の動作状況を管理する。
読み出し命令557が読み出し機能549に入力されると、データテーブルメモリ制御手段544は最後に格納されたレジスターの次のものを選択し、命令を格納する。例えば、R1、R2、およびR3が満室の場合、R4が選択され、命令はそれに格納される。メモリアレイ541の開始時間前に、データテーブルメモリ制御手段544は次に実行可能なメモリバンクに対する命令をR1、R2、R3、およびR4に格納されている命令の中から選択する。例えば、R2とR4内の命令が実行可能である場合、古い命令を実行する。この場合、R2の命令が実行され。R2の命令がメモリバンク542に転送された後、R3の命令はR2に移動され、R4の命令はR3にシフトされる。レジスターの数nはメモリアレイ541内のメモリバンク542の数、メモリ動作命令間隔、メモリの動作時間を考慮して決定される。このように、与えられた読み出し命令557を実行可能な命令から、実行することにより、単位時間当たりのメモリ読み出し回数が増大する。
データテーブルメモリの読み出し機能を説明したが、データテーブルメモリは読み出しと同様に、読み出されたデータに修正を行い、同じ場所に書き込まれる。この為、上記説明で読み出し命令と書き込み命令を同時に制御しても良い。
データテーブルメモリ540の出力は読み出された読み出しデータ556とその読み出し命令557に付属した読み出し同期検索番号336である。読み出しデータ556はデータテーブルのエントリーデータである。
データテーブルメモリ540に格納されるデータタテーブルのエントリーデータの内容を図13に示す。図13に示されるように、エントリーデータは2つの要素に分けられる。それらは累積統計データとユーザーデータである。これらデータの処理は修正手段300で説明した。
[出力手段]
出力手段800は検索結果を出力する。出力手段800の実施例を図14に示す。出力手段800は比較手段400から同期検索番号451、検索結果453と固定長データ名452が入力される。入力された、それらのデータは同期検索番号451のデコーダー811によって同期検索番号451(xとする)に相当するレジスターSx812に格納される。
同様に出力手段800には修正手段300から出力同期検索番号333と出力ユーザーデータ332が入力される。入力されたそれらのデータは、出力同期検索番号333のデコーダー815によって出力同期検索番号333(yとする)に相当するレジスターSy812に格納される。
出力手段800は、比較手段400から入力された検索結果453が不一致である場合、同期検索番号451、検索結果453および固定長データ名452が比較手段400から入力されて、レジスターSx812に格納され、AND−OR選択器813から出力されて、レジスターNに格納され、そして検索結果出力820として出力される。図14に、出力手段800の出力として検索結果出力820を示す。このとき、レジスターSx812の名前、すなわち同期検索番号もAND−OR選択器813から出力、そしてレジスターNに格納され、検索結果出力820として出力される。
比較手段400から入力された検索結果453が一致の場合、同期検索番号451と、検索結果453および固定長データ名452が比較手段400から入力され、レジスターSxに格納される。そして修正手段からの出力ユーザーデータ332を待つ。修正手段300から出力同期検索番号333と出力ユーザーデータ332が入力され、レジスターSx812に格納された後、レジスターSxの全ての内容(同期検索番号を含む)がAND−OR選択器813から出力され、レジスターN814に格納され、検索結果出力820として出力される。図14に、出力手段800の出力として検索結果出力820を示す。
出力手段800が行う出力判断は出力制御機能840により行われる。同期検索番号が管理データを扱う場合、出力制御機能840はそれに相当するレジスターSx812の内容を検索結果出力820に出力しないで、レジスターSx812の内容を管理検索結果出力821に直接出力する。
レジスターSx812に格納する回路とレジスターN814の回路おのおのをステージと呼ぶと、各ステージで異なる同期検索番号を持つ検索動作が可能である。このように出力手段800は検索処理能力を増大させるパイプライン処理を行う。又、出力手段800の出力制御機能800は出力判断、レジスターN814の格納信号発生、そしてパイプライン処理の管理を行う。
[実施例]
図1は本発明固定長データ検索および管理装置50に係る実施例を示すブロック図である。図1に示す固定長データ検索および管理装置50は、前記固定長データ検索装置10(図1)に加え、入力されたテーブル管理命令1を解釈および実行するテーブル管理制御手段600と、固定長データテーブルメモリ560において、一つのメモリアドレスまたは複数のメモリバンク562の異なるメモリアドレスを用いて読み出される単位を家と定義した場合、使用されていない家を管理する空家テーブルを格納する空家テーブルメモリ700と、前記家において、固定長データと検索に必要な固定長データに対応するデータそして検索に必要なデータを保持する単位を室と定義した場合、使用されていない室を持つ家を管理する空室テーブルを格納する空室テーブルメモリと、室の使用状態を管理する室管理テーブルを格納する室管理メモリ740と、検索方法により構築されたテーブルの構造を管理する構造管理テーブルを格納する構造管理テーブルメモリ760とを備える。なお、前記空室テーブルメモリ700と空家テーブルメモリ720と室管理テーブルメモリ740と構造管理テーブルメモリ760を単一のメモリで構成するようにしてもよい。
上記メモリのほかに、固定長データ検索装置10に含まれる、ポインタテーブルメモリ500と、固定長データテーブルメモリ560と、データテーブルメモリ540は検索動作のための読み出し・書き込み動作中であっても、テーブル管理制御手段600により割り込まれ、読み出し、そして書き込みが可能な構成を持つ。この場合、テーブル管理制御手段600のそれらのメモリに対する読み込みと書き込み動作は、検索動作の問題または妨害にはならない。
図15に、空家テーブルメモリ700に格納される空家テーブル701と、そのエントリーデータとを示す。空家テーブル701のエントリーデータは、家制御ビット703と次の空家のインデックス704から構成される。空家テーブル701のエントリー数は最大で固定長データテーブルが持つ家の数である。空家テーブル701は空家を管理するだけの役割であるため、この他にもいろいろな実施例が考えられる。
[空家テーブルメモリ]
図15に、空家テーブル701の実施例の一つと、その使用法をあわせて示す。空家の管理においては登録された空家は順次使用されるため、空家テーブル701と空家開始レジスター702により行われる。空家開始レジスター702は空家ありビットと最初の空家のインデックスを保持する。図15に、6個の空家、A、B、C、D、E、Fの管理を示す。空家テーブル701は一方向のリンク構造を持ち、空家テーブル701のエントリーAは終了ビットがオフの家制御ビット703と次の空家のインデックス704にBの値とを持つ。同様に、エントリー、B、C、D、Eは終了ビットがオフの家制御ビット703と次の空家のインデックス704、C、D、E、Fをそれぞれ持つ。エントリーFは終了ビットがオンの家制御ビット703だけを保持する。そして、空家開始レジスター702は最初の空家のインデックスAを持つ。空家への要求がある場合、空家開始レジスター702が保持する空家ありビットがオンであることを確認できれば、家のインデックスAは使用可能である。空家ありビットがオフであれば空家はないと確認できる。そして、空家のインデックスAで空家テーブル701を読み出し、家制御ビットの終了ビットがオフのとき、読み出されたインデックスAにある次の空家のインデックス704、Bを空家開始レジスター702に保持する。この動作は、空家開始レジスター702が空家インデックスFを格納するまで行われる。その後、空家を求める要求に対し、空家開始レジスター702の保持する空家ありビットがオンであるため、空家のインデックス704、Fは空家として使用される。その後、空家のインデックス704、Fを読み出し、家制御ビットの終了ビットがオンであることに対応させて、空家開始レジスター702の空家ありビットをオフに変更する。その後は空家の要求に対し空家無しの状態が続く。空家を登録する場合、登録する空家のインデックスを空家開始レジスター702の持つインデックスに書き込み、同時に書き込まれたインデックスの終了ビットをオフにする。このとき、空家開始レジスター702の空家ありビットがオフである場合、空家ありビットをオンに変更する。以上の方法によって、空家の入手および登録が可能となる。
[空室テーブルメモリ]
図16に、空室テーブルメモリ720に格納される空室テーブル721とそのエントリーデータを示す。登録された空室を持つ家は必要なときに使用されるため、空室テーブル721のエントリーデータは、室制御データ723と、前の空家のインデックス725と、次の空家のインデックス726とから構成される。空室テーブル721のエントリー数は最大で固定長データテーブルが持つ家の数である。空家テーブル701は空室を持つ家を管理するだけの役割であるため、いろいろな実施例が考えられる。
図16に、空室テーブル721の実施例の一つであり、使用法をあわせて示す。空室のある家の管理は空室テーブル721とx空室開始レジスター722により行われる。xは空室数を表す整数であり、図16に、1室空いている家を管理する1空室開始レジスターと、同様に2室、3室、そして4室空いている家を管理する2空室開始レジスター、3空室開始レジスター、そして4空室開始レジスターを示す。各x空室開始レジスター722は前記空家開始レジスター702と同じ役割を行う。図16において示される、2空室開始レジスターを伴う空室管理動作を説明する。
2空室開始レジスター722は、空室ありビットと最初の2空室のある家のインデックスとを保持する。図16に、5個の2空室を持つ家、A、B、C、D、Eの管理を示す。空室テーブル721は双方向のリンク構造を持ち、空室テーブル721のエントリーAは終了ビットがオフの室制御ビット723と、次の家のインデックス726、B、を持つ。この場合、2空室を有している前の家のインデックス725は最初のエントリーであるため必要が無い。同様に、エントリー、B、C、Dは終了ビットがオフの室制御ビット723と、前の家のインデックス725、A、B、Cと、次の家のインデックス726、C、D、そしてE、をそれぞれ持つ。エントリーEは終了ビットがオンにされている室制御ビット723と前の家のインデックス725、Dだけを保持する。そして、2空室開始レジスター722は最初の2空室を持つ家のインデックスAを持つ。2空室を持つ家の要求がある場合、2空室開始レジスター722が保持する空室ありビットのオンが確認できれば、2空室開始レジスター722の家のインデックスAは使用可能である。空室ありビットがオフであれば空室を有する家はないと確認できる。そして、家のインデックスAで空室テーブル721を読み出し、室制御ビットの終了ビットがオフのとき、読み出されたインデックスAの次の家のインデックス724、B、を2空室開始レジスター722に保持する。この動作が、2空室開始レジスター722が家インデックスEを格納するまで行われる。その後、2空室の要求に対し、2空室開始レジスター722の保持する空室ありビットがオンであるため、次の家のインデックス726、E、は2空室を持つ家として使用される。その後、次の家のインデックス726、E、を読み出し、室制御ビットの終了ビットがオンであるため、2空室開始レジスター722の空室ありビットをオフに変更する。その後は2空室を持つ家の要求に対し2空室を持つ家は無い状態が続く。
2空室をもつ家を登録する場合、登録する2空室を持つ家のインデックスを2空室開始レジスター722の持つインデックスにおける前の家のインデックス725に書き込み、同時に書き込まれたインデックスの終了ビットをオフにする。又、登録する2空室を持つ家のインデックスにおける前の家のインデックス725に2空室開始レジスター722の持つインデックスを書き込む、そして、2空室開始レジスター722に登録する2空室を持つ家のインデックスを書き込む。このとき、2空室開始レジスター722の2空室ありビットがオフである場合、2空室ありビットをオンに変更する。
2空室をもつ家の1室に書き込み要求が発生した場合、空室テーブル721のその家を2空室開始レジスター722が作成するリンクから登録を削除する必要がある。この場合、例えば、その家を示すインデックスがCであるとすると、インデックスCを読み出し、前の家のインデックス725、Bと次の家のインデックス726、Dを得る。インデックスBにおける次の家のインデックス726にインデックスDを書き込み、さらに、インデックスDにおける前の家のインデックス725にインデックスBを書き込む。この結果、インデックスCは2空室開始レジスター722が作成するリンクから削除され、リンクはインデックスA、B、D、そしてEとなる。以上の方法によって、2空室を持つ家の入手、登録および登録削除が可能となる。
図17に室の管理法を示す。説明を簡単にするために、2つのメモリアレイに、家が構成され、家は8個の室を持つと仮定するが、本発明がこれに限られるものではない。検索動作で論理比較される固定長データの集まり、すなわち室の集まりを以後団体と呼ぶ。室の管理法の基本は全ての家を満室状態にすることである。満室状態とは図17に示すように、一つの団体または複数の団体により家に存在する全ての室が使用されることである。満室にするために、団体の数を増やすことは、管理の複雑性、および必要なメモリおよびレジスターの増大等につながり、その効果は少ない場合があるために、一つの家に存在する可能な団体の数を例えば2とする。家に2つの団体が存在するとき、他の団体より多くの室を所有する団体を大団体、その他を小団体と呼ぶ。家に団体を保存するときは大団体を基本に考える。すなわち、大団体を保存した家は空室の数で管理される。管理は前記空室テーブルとx空室開始レジスターにより行われる。xは1〜4の整数である。大団体と同居する以上に小団体が多く存在した場合、図17の最下段に示されるように、家を2分割し、分割した家に2つの小団体を格納する。この場合、1室、2室そして3室を所有する団体が入居する。これらの団体を管理するためには、x’ 空室開始レジスターが管理に使用される。この理由は、x’ 空室開始レジスターにより管理される家の数については、固定長データテーブルの有効利用を考えて最小にする努力が必要であるためである。このため、x空室が必要となった場合には、最初にx’ 空室開始レジスターに登録されている家を利用する。それらの家が無くなったら、x空室開始レジスターに登録されている家を利用する。
図18に、室管理テーブルメモリ740に格納されている室管理テーブル741とそのエントリーデータを示す。室管理テーブル741のエントリー数は固定長データテーブルの家の数と同じであり、各家に室管理テーブル741の各エントリーが対応する。室管理テーブル741のエントリーの一般形式は、図18に示されているように、室管理データ742とn個の団体データ745から構築される。説明はnが2の場合について行う。室管理データ742は家の形式744と家が持つデータの形式743を持つ。データの形式743は1ビットで、家が格納しているデータ、NVCか論理比較データかを選択する。家は(1)一つの団体または、(2)大団体と小団体または、(3)二つの団体、により構成されるので、家の形式744は2ビットで表現されており、上記3つの形式のうち一つを選択的に有する。一つの団体が家に格納されたとき、団体1データがその団体を示し、団体2データは無視される。大団体と小団体が選択されたとき、団体1データは大団体を記述し、団体2データは小団体を記述する。二つの団体が選択されたとき、団体1データと団体2データはそれぞれの団体を記述する。団体データ745は団体が格納されている家を呼び出す上位テーブルのインデックスまたはアドレスを表すテーブルタイプ746と上位アドレス748および団体の占める室数747を持つ。テーブルタイプ746がポインタテーブルのとき、上位アドレス748はポインタテーブルのインデックスを表わし、テーブルタイプ746が固定長データテーブルのとき、上位アドレス748は固定長データテーブルのインデックスを表わす。テーブルタイプ746が空室テーブルのとき、上位アドレス748は空室テーブルのインデックス、すなわち家のインデックスを表す。大団体が一つの室を必要になった場合には、小団体を他の家に移動し、空き室となった室を大団体に使用させることが必要となる。この場合、小団体の各パラメータを入手・修正するために室管理テーブルのデータが利用される。
図19に、前記固定長データテーブルの家と、ポインタテーブルのインデックスと、室管理テーブル741のエントリーデータと、空室テーブル721との関連を示す。家が満室の場合、固定長データテーブルのインデックスSは大団体を指定するポインタテーブルのインデックスAのエントリーに含まれ、又小団体を指定するポインタテーブルのインデックスBのエントリーにも含まれる。この関係は室管理テーブル741のインデックスSのエントリーデータに記述される。空室がある場合、空き室のある家Rは大団体を指定するポインタテーブルのインデックスAのエントリーに含まれ、その空室はその数で表されるx空室テーブルにより管理される。この場合、室管理テーブル741のインデックスRのエントリーデータは大団体を記述するポインタテーブルのインデックスAと空室を記述するx空室テーブルのインデックスRを持つ。図19でx空室テーブルは空室テーブルでx空室開始レジスターによりリンクされたテーブルを意味する。
図20に、空家テーブル701と空室テーブル721と室管理テーブル741を一つのテーブルにまとめた家管理テーブル751の例を示す。家管理テーブル751のエントリーデータは、家・室制御データと、次の空家のインデックスまたは前の空室のある家のインデックスと、次の空室のある家のインデックスと、n個の団体データとから構成される。家・室制御データは、終了ビットと、データ形式と、家の形式とを有する。家・室制御データと次の空家のインデックスまたは前の空室のある家のインデックスで空家テーブルの機能が実現でき、家・室制御データと、次の空家のインデックスまたは前の空室のある家のインデックスと、次の空室のある家のインデックスで空室テーブルが実現され、家・室制御データとn個の団体データにより室管理テーブルの機能が実現できる。このとき、空家開始レジスターとn空室開始レジスターは3つの機能を実装するために必要である。
[構造管理テーブルメモリ]
図21に、構造管理テーブルメモリ760に格納されている構造管理テーブル761とそのエントリーデータとを示す。構造管理テーブル761のエントリー数はポインタテーブルのエントリー数と同じである。エントリーデータは、構造制御ビットと、ポインタテーブルのエントリーが持つ固定データ長データ数と、リンクアドレスとにより構成される。本発明においては、検索方法として、検索対象の固定長データの集団を一時に比較可能な数に分解し、比較することはすでに述べた。しかし、固定長データの集団の分布においては、一時に比較可能な数の分布にはなっていないのが一般的である。このため、本発明は二次ポインタテーブル、ローカルテーブル、NVC比較法のテーブル等の手法を導入し、固定長データの集団の分散化を図る。本発明の実際の実装においてはこれらの方法を組み合わせる。図21の詳細説明を行う前に、テーブルの構造から見た検索手順を図22で説明し、その構造の変移を図21を用いて説明する。その後、構造変移に必要なデータに関して図21の構造管理テーブルを参考に説明する。
図22に検索手順の例を示す。その他の検索手順も作成可能ではあるが、説明のため、手順1から手順5を検索手段の説明に使う。手順1はポインタテーブルを読み出し、固定値データテーブルのインデックスを得て、固定値データテーブルを読み出し、比較を行う。この手順はポインタテーブルのエントリーの持つ比較データ数が一つの家に格納できる固定長データの数以下の場合に実現する。説明では家が持つ室数(固定長データの数)を8と仮定しているため、ポインタテーブルのエントリーの持つ固定長データの数が8以下の場合である。本発明の固定長データ検索装置10は、大多数の固定長データを手順1により検索することができる。手順2は手順1に固定長データテーブルの読み出しと比較動作を加えたものである。この手順はポインタテーブルのエントリーの持つ比較データ数が16以下の場合に使われる。手順1と手順2の間に構造の変化は存在しない。
手順3は、手順1の次に、第2ポインタテーブル(SPT)の読み出しを行い、入手した固定長データテーブルのインデックスで固定長データテーブルの読み出し、および比較動作を行う。最初の固定長データテーブルの読み出し・比較動作の後にSPTと固定長データテーブルの読み出しを行う理由は、検索をLPMルールで行う場合、SPTのインデックスを発生するために使われる全インデックス190の一部のビットのビット位置と固定長データの要素であるマスクの関係で、SPT前に比較が必要な固定長データが存在するためである。手順3が扱う固定長データの数は最低17個で、最高(8*n+8)個である。nはSPTのサイズである。SPTが3ビットでインデックスされると考えると最高72個の固定長データが手順3で処理できる。
手順4は、手順3における最後の固定長データテーブルの読み出し・比較動作が、ローカルテーブルの読み出し・比較動作に置き換わられたものである。手順4は手順3におけるSPTの一つのエントリーがローカルテーブルを要求した場合である。他のSPTのエントリーが手順3で動作しても、一つのローカルテーブルが存在すれば手順4である。このため、手順4が扱う固定長データの数は最低17個で、最高(8*n*m+8)個である。mはローカルテーブルのサイズである。ローカルテーブルが3ビットでインデックスされると考えると最高520個の固定長データが手順4で処理できる。
手順5は手順4までの手段と大きく異なり、NVC構造のテーブルを作成し、大小比較で検索を行う。このため、手順5が扱う固定長データの数は最高(8*p*p)個である。ここで、pは一つの家が格納できるNVCタイプのデータ数である。図22における手順5で二つの構造を示しているが、実際のケースとしては二つの構造の組み合わせである。一般的にNVCタイプのデータ数を固定長データの数の2倍と考えると最高2048個の固定長データが手順5により処理できる。一般的に、家が格納する室の数は、ポインタテーブルが固定長データの集団を理想的に分散した場合の数、すなわちポインタテーブルのエントリーが持つ平均固定長データ数の2倍の数に設定する。ポインタテーブルのエントリーが持つ平均固定長データ数が4であることを考えると、手順3と手順4の扱う固定長データ数は非常に大きいと考えられ、手順3と手順4が必要な場合はまれなときと推測される。手順5は手順3と手順4以上の場合であり、必要か否かの議論が存在する。しかし、手順5を用いることにより、実装される固定長データの分布が非常に大きく偏っていた場合でも、検索動作が可能となることがわかる。
図21に、各手順に必要なテーブルの構造の変移を示す。変移Aは条件774が成立したとき、変移Bは条件775が成立したとき、変移Cは条件775が成立したとき、変移Dは条件779が成立したとき、変移Eは条件778が成立したとき、変移Fは条件777が成立したときに実行される。図21では、手順1と手順2のテーブルの構造は同一とみなす。図21において長方形770内の手順1/手順2は手順1または2により検索されるテーブル構造を意味する。他の長方形も同様である。
ポインタテーブルのエントリーの持つ固定長データ数(簡単のため、PTの固定長データ数と呼ぶ)が16以内の場合、そのエントリーは手順1または手順2で検索が行われる。PTの固定長データ数が16個であるエントリーに、固定長データの付加命令が実行されたとき、すなわち、ポインタテーブルのエントリーが持つ固定長データ数が16を超えるとき(条件774)、変移Aが実行されて、手順3で検索するテーブル構造に変移する。
手順3で検索されるエントリーのテーブル構造は最初ポインタテーブル、次に固定長データテーブル、次にSPT、最後に固定長データテーブルである。最後の固定長データテーブルの家が満室で固定長データの付加命令が実行されたとき、すなわち、SPTのエントリーが持つ固定長データ数が8を超えるとき(条件775)、手順4で検索するテーブル構造に変移する。
手順4で検索されるエントリーのテーブル構造は最初ポインタテーブル、次に固定長データテーブル、次にSPT、最後にローカルテーブルである。最後のローカルテーブルのエントリーにおける家が満室で固定長データの付加命令が実行されたとき、すなわち、LTのエントリーが持つ固定長データ数が8を超えるとき(条件776)、手順5で検索するテーブル構造に変移する。手順5は手順1から手順4までのテーブル構造とは全く異なるテーブル構造を持つ。このため、構造を管理する方法は手順1から手順4までのテーブル構造を管理した手法と同じ物を使う。しかし、手順5で検索されるエントリーのテーブル構造は最初ポインタテーブル、次にNVC構造の固定長データテーブル、次にNVC構造の固定長データテーブル、最後に固定長データテーブルである。
手順5で検索されるエントリーにいくつかの固定長データの削除命令が実行されたとき、その結果ローカルテーブルの全てのエントリーが8以下の固定長データを持てば、すなわち、LTのエントリーが持つ固定長データ数が8以下になるとき(条件779)、手順5で検索されるテーブル構造は手順4で検索されるテーブル構造に変移する。同様に、手順4で検索されるエントリーにいくつかの固定長データの削除命令が実行されたとき、その結果SPTの全てのエントリーが8以下の固定長データを持てば、すなわち、SPTのエントリーが持つ固定長データ数が8以下になるとき(条件778)、手順4で検索されるテーブル構造は手順3で検索されるテーブル構造に変移する。最後に、手順3で検索されるエントリーにいくつかの固定長データの削除命令が実行されたとき、その結果PTの全てのエントリーが16以下の固定長データを持てば、すなわち、ポインタテーブルのエントリーが持つ固定長データ数が16以下になるとき(条件777)、手順3で検索されるテーブル構造は手順1/手順2で検索されるテーブル構造に変移する。上記条件、777、778、779でそれぞれ16以下、8以下、8以下の尺度が規定されているが、実際の値は指定可能とする。
図21に示されている構造管理テーブルは、各手順で検索されるテーブル構造の変移(図21)を行うデータを管理する。構造管理テーブル761はポインタテーブルと同じエントリー数を持ち、各エントリーはポインタテーブルのエントリーに対応する。構造管理テーブル761のエントリーは構造制御データ762と、ポインタテーブルのエントリーが持つ固定長データ数763と、リンクアドレス764とから構成される。構造制御データ762は手順番号765と、SPTのサイズ766と、ローカルテーブルのサイズ767とで構成される。手順番号765が手順1または手順2である場合、SPTのサイズ766と、ローカルテーブルのサイズ767と、リンクアドレスは無視される。ポインタテーブルの大部分のエントリーはこれらの手順に入る。
手順番号765が手順3である場合、SPTのサイズ766とリンクアドレスは使われ、ローカルテーブルのサイズ767は無視される。この場合、リンクアドレス764はSPTの各エントリーが持つ固定長データ数のテーブル768の位置を示す。SPTのサイズ766はSPTのエントリー数nである。
手順番号765が手順4または手順5である場合、SPTのサイズ766と、ローカルテーブルのサイズ767と、リンクアドレスは使われる。この場合、リンクアドレス764はSPTとローカルテーブルの各エントリーが持つ固定長データ数のテーブル769の位置を示す。SPTのサイズ766はSPTのエントリー数nであり、ローカルテーブルのサイズ767はローカルテーブルのエントリー数nである。このように、構造管理テーブル761を活用することにより、検索手順に対応するテーブル構造の変移を行うことができる。ここで注意すべきことは、手順5はNVC構造のテーブルを使って検索を行うが、構造管理テーブルによる、テーブル構造管理はSPTとローカルテーブルの形式で管理することである。この方法により、構造管理に一貫性が生まれ、構造管理が効率的に、簡単に行うことが出来る。
[テーブル管理手段]
テーブル管理手段600のある実施例を図23に示す。テーブル管理手段600はCPU601と、入出力バス、CPUバス、メモリバス、メモリ信号を供える制御回路602と、CPU601のプログラムとデータを格納するメモリ603とで構成される。図23において説明するテーブル管理の方法は複雑なため、図23で示されるCPU601によって実行される。入力バスは命令の入力に使われ、メモリバスは制御回路602と各テーブルメモリ間、または制御回路602と入力固定長データ処理手段100の間で、または制御回路602と出力手段800の間でのデータ転送に使われる。本実施例はテーブルの管理を行うプログラムが命令の同時実行を行い、複雑な構成となる場合がある。
テーブル管理手段600の他の実施例を図23に示す。本実施例は実施例1でCPU601が実現する機能を細分化し、細分化された機能を図23に示されたコントローラまたはシークエンサーにより実現するものである。図23においてテーブル管理制御手段600はホスト制御装置からの命令を受けて、その解析、実行を行う入力命令・実行機能670と、入力命令・実行機能670の付加命令実行時に、テーブルの構造の変移を必要としない付加を補助する単純付加機能630と、テーブルの構造の変移を必要とする付加を補助する構造変更付加機能640と、入力命令・実行機能670の削除命令実行時に、テーブルの構造の変移を必要としない削除を補助する単純削除機能650と、テーブルの構造の変移を必要とする削除を補助する構造変更付加機能660と、自動削除命令を発生させ、入力命令実行機能670に送る自動削除命令機能620と、入力命令実行機能670が一時的にデータを格納する一時記憶機能610とから構成される。
図23に示される一時記憶機能610を除く各機能は図23に示されるコントローラまたはシークエンサーにより実現される。図23において、コントローラまたはシークエンサーは初期化信号により初期化される、又インストラクション実行回路607の実行結果により変更されるインストラクションカウンター604と、インストラクションカウンター604でインデックスされ読み出されるインストラクションを格納するインストラクションメモリ605と、読み出されたインストラクションをデコードするインストラクションデコード606と、デコードされた信号により制御され指定された機能を実行する実行回路607と、実行回路607に必要なデータを一時的に格納するレジスター608と、実行回路607とレジスター608とその他の回路間のデータ転送を行う内部バス609とにより構成される。コントローラまたはシークエンサーは実行する機能が細分化されているため、そしてその機能にあった実行回路を実装することにより、インストラクションメモリ605のサイズは最小にでき、またコントローラまたはシークエンサーは単純化が可能である。以下、コントローラまたはシークエンサーを使用した各機能を説明する。
図24に入力命令・実行機能670(図23)が受付けるホスト制御装置からの4つの命令を示す。図24に示されているように、付加命令は固定長データと、マスクと、固定長データ名と、ユーザーデータと、状態ビットを伴って入力される。この場合、検索ルールにより、マスクが送られない場合がある。送られた固定長データ、マスク、および固定長データ名が固定長データテーブルに、ユーザーデータと初期化された統計データがユーザーデータテーブルに格納される。状態ビットは要素制御データの作成に使用される。状態ビットがこの要素を常駐させることを示す場合、要素制御データは常駐状態にセットされる、それ以外は使用状態にセットされる。削除命令は固定長データを伴い入力される。送られた固定長データとそれに関連するデータが固定長データテーブルおよびユーザーデータテーブルから削除される。統計データ引出命令は固定長データを伴い入力される。入力された固定長データに関する統計データがホスト制御装置に送られる。最後に自動削除名引出命令は引出自動削除名数を伴って入力される。自動削除機能により削除された引出自動削除名数の固定長データの固定長データ名がホスト制御装置に送られる。自動削除機能により削除された固定長データが引出自動削除名数以下である場合、削除された固定長データ数の削除固定長データ名が送られる。
図24に、入力命令・実行機能670の実施例を示す。入力命令・実行機能670は二つのコントローラまたはシークエンサーを持ち、一つはホスト制御装置からの入力命令を処理し、他は自動削除命令機能620からの入力命令を処理する。二つのコントローラまたはシークエンサーを備える理由は、ホスト制御装置からの入力命令と自動削除命令機能620からの入力命令とを独立に処理できるからである。このために、相互の処理が影響しあわない仕組みが必要になる。この点について、自動削除命令の実行で説明する。ホスト制御装置からの入力命令を入力命令・実行機能670が受け取り、命令のデコード後、担当コントローラまたはシークエンサーを動作させ、入力命令に対応した実行、付加命令の実行671、または削除命令の実行672、または統計データ引出命令の実行673、または自動削除名引出命令の実行674を行う。そして、実行結果をホスト制御装置に送付して、入力命令に対応した実行は終了するため、いずれかの実行を担当しているコントローラまたはシークエンサーが動作中には、ホスト制御装置からの別の入力命令が送られてくることは無い。ホスト制御装置からの入力命令待ち、または入力命令を実行中、自動削除命令機能620からの入力命令を入力命令・実行機能670が受け取り、実行可能である。担当コントローラまたはシークエンサーが自動削除命令を実行中においては、他の自動削除命令が入力命令・実行機能670に入力されることは無い。理由は自動削除命令機能620が動作可能な状態をチェックしているからである。
図24に自動削除命令機能620の実施例を示す。図24から明らかであるが、自動削除命令機能620は単なるタイマー回路である。自動削除命令機能620は自動削徐命令発行時間レジスター621を持ち、自動削徐命令発行時間レジスター621のエネーブルビットが1のとき、自動削徐命令発行時間レジスター621の定める時間間隔で自動削除命令を発行する。図24の動作可能判断は自動削除命令機能620が発行した自動削除命令がすでに終了していることと、自動削徐命令発行時間レジスター621のエネーブルビットが1であることを確認して行われる。このように自動削除命令機能620はコントローラまたはシークエンサーにより実現される必要は無い。
図25に、ホスト制御装置からの付加命令を実行するコントローラまたはシークエンサーの動作例を示す。入力命令・実行機能670が付加命令を受付けて、まず、構造管理テーブル761を読み出し、手順番号を確認し、その手順の最後に読み出すテーブルの固定長データの数を構造管理テーブル761から得る(S6710)。そして、その数が図21で示される構造変移に必要な条件であるか否かを確認する(S6711)。構造変移の条件であれば入力命令・実行機能670は構造変更付加機能640を起動し、その終了まで停止する(S6712)。構造変移の条件でなければ入力命令・実行機能670は単純付加機能630を起動し、その終了まで停止する。(S6713)構造変更付加機能640、または単純付加機能630の実行終了の結果、入力命令・実行機能670は実行結果を得て再スタートする。得られた実行結果を解析し(S6714)、実行結果が問題なく実行されたことを報告していれば、実行済み結果データを作成し、管理出力機能に送る。(S6715)。この場合、さらに、最後に構造管理テーブルの対応する要素数に1加える(S6716)。得られた実行結果が実行できなかった場合、不実行結果データを作成し(S6717)、管理出力機能に送る。そして、入力命令・実行機能670はホスト制御装置からの次の命令を待つ。得られた実行結果が実行できないケースは(1)固定長データテーブルに固定長データを付加するロケーションが無い(2)固定長データテーブルに付加する固定長データがすでに存在する、等が考えられる。(2)のケースでは付加する固定長データに伴うマスク、固定長データ名、およびユーザーデータは現存するデータと置き換えることができる選択能力をレジスターにより実現できる。
図25に、ホスト制御装置からの削除命令を実行するコントローラまたはシークエンサーの動作例を示す。入力命令・実行機能670が削除命令を受付けると、まず、構造管理テーブル761を読み出し、手順番号を確認し、その手順の最後に読み出すテーブルの固定長データの数を構造管理テーブル761から得る(S6720)。その数が図21で示される構造変移に必要な条件であるか否かを確認する(S6721)。構造変移の条件であれば入力命令・実行機能670は構造変更削除機能660を起動し、その終了まで停止する(S6722)。構造変移の条件でなければ入力命令・実行機能670は単純削除機能650を起動し、その終了まで停止する(S6723)。構造変更削除機能660、または単純削除機能650の実行終了の結果、入力命令・実行機能670は実行結果を得て再スタートする。得られた実行結果を解析し、実行結果が問題なく実行されたことを報告していれば(S6724)、実行済み結果データを作成し、管理出力機能に送る(S6725)。最後に構造管理テーブルの対応する要素数から1を減ずる(S6726)。得られた実行結果が実行できなかった場合、不実行結果データを作成し、管理出力機能に送る(S6727)。そして、入力命令・実行機能670はホスト制御装置からの次の命令を待つ。得られた実行結果が実行できないケースは(1)固定長データテーブルに構造変更を行うロケーションが無い(2)固定長データテーブルに削除する固定長データが無い、等が考えられる。(1)の場合、構造変更を行わず、命令内の固定長データ削除し、構造管理テーブルの対応する要素数から1を減らした後で、報告する手法も存在する。
図26に、ホスト制御装置からの統計データ引出命令を実行するコントローラまたはシークエンサーの動作例を示す。入力命令・実行機能670が統計データ引出命令を受付けて、まず、統計データ引出命令内の固定長データを検索する(S6730)。入力命令・実行機能670は統計データ引出命令内の固定長データを入力固定値データ処理手段100の管理データ699から入力する。入力検索番号はテーブル管理制御手段600に割り当てられた検索番号である、又入力統計データはゼロが入力される。テーブル管理制御手段600に割り当てられた検索番号を伴う検索動作は出力制御機能840により、レジスターS812にデータが格納された時点で終了する。その時、検索結果はテーブル管理制御手段600に割り当てられた検索番号のレジスターS812に格納され、管理検索結果出力821を通して、入力命令・実行機能670に読み込まれる。統計データ引出命令内の固定長データに関する統計データは、修正手段300のレジスターOに格納され、統計データ337を通して、入力命令・実行機能670に読み込まれる。(S6732)読み込まれた統計データは出力手段800内の管理出力機能に出力する。(S6733)読み込まれた検索結果により実行結果が作成される。検索結果が一致の場合、固定長データ名を伴い統計データと実行結果が出力手段800の管理出力機能に出力される。(S6734)検索結果が一致しなかった場合、不一致の実行結果だけが出力手段800に管理出力機能に出力される(S6735)。
図26に、ホスト制御装置からの自動削除名引出命令を実行するコントローラまたはシークエンサーの動作例を示す。入力命令・実行機能670が自動削除名引出命令を受付けて、まず、図26に示すように引き出し自動削除数レジスターを初期化する。自動削除命令の実行の結果、削除された固定長データの固定長データ名がテーブル管理手段600の一時記憶機能610に格納される。自動削除名引出命令は格納されている固定長データ名を指定された数だけ読み出し、管理出力機能に出力することである。このため、図26に示すように、一時記憶機能610に格納されている自動削除された固定長データ名があるか確認する(S6741)。あれば、一時記憶機能610に格納されている固定長データ名を一つ入手し(S6742)管理出力機能に出力する。(S6743)そして引き出し自動削除数レジスターを1増加させる(S6744)。増加後、引き出し自動削除数レジスターが自動削除名引出命令内の引き出し数と同じか確認する(S6745)。引き出し自動削除数レジスターが引き出し数より少ない場合、再び、一時記憶機能610に格納されている自動削除された固定長データ名があるか確認する。この動作を引き出し自動削除数レジスターと引き出し数が同じになるまで続ける。引き出し自動削除数レジスターが引き出し数に達したとき、引き出し数を伴い、実行結果データが管理出力機能に出力される(S6746)。引き出し自動削除数レジスターが引き出し数に達する前に、一時記憶機能610に格納されている自動削除された固定長データ名がなくなった場合、引き出し自動削除数レジスターの引き出し数を伴い、実行結果データが管理出力機能に出力される(S6746)。
図27に、自動削除命令機能からの自動削除命令を実行するコントローラまたはシークエンサーの動作例を示す。入力命令・実行機能670が自動削除命令を受付けて、まず、図27に示すように固定長データアドレスレジスターを初期化する(S6750)。自動削除命令は、図8に示される固定長データテーブルの要素制御データを参照して行われる。
図27に、要素制御データの詳細を示す。要素制御データは要素状態と位置変更から構成される。要素状態は4つの状態の一つを保持する。4つの状態は(1)空室状態、(2)常駐状態、(3)削除状態、そして(4)使用状態、である。固定長データが初期化された時、要素状態は空室状態にセットされる。空室状態にある固定長データテーブルの要素に常駐の状態ビットを持つ固定長データが付加された時、その要素の要素制御データは常駐状態に変移する。この状態にある固定長データは自動削除命令による削除対象には含まれない。すなわち、この状態にある固定長データはホスト制御装置からの削除命令を実行する以外、削除はされない。空室状態にある固定長データテーブルの要素に常駐で無い状態ビットを持つ固定長データが付加された時、その要素の要素制御データは削除状態に変移する。そして、位置変更がセットされる。削除状態にある固定長データは自動削除命令による削除対象に含まれる。すなわち、この状態にある固定長データはホスト制御装置からの削除命令と自動削除命令の実行で削除される。(位置変更がセットされた削除状態は自動削除命令の対象から除かれる。位置変更は後述する。)削除状態にある固定長データテーブルの要素が検索動作で検索目的の固定長データと一致すると、削除状態にある固定長データテーブルの要素状態は使用状態に変移する。自動削除命令の目的はある時間間隔で使われない固定長データを削除することである。自動削除命令は周期的に発行される。その時間の間に、使われない、すなわち削除状態にある固定長データは削除される。使用状態にある固定長データテーブルの要素状態は自動削除命令の実行により削除状態に変移する。そして次の自動削除命令により、使われたか否かを調べられ、使われていなければ削除される。
図27において位置変更はホスト制御装置からの付加命令または削除命令、または自動削除命令機能からの自動削除命令を実行したとき、固定長データテーブル内を移動する固定長データの位置変更をセットし、実行中の自動削除命令の対象から除く。そして、自動削除命令が実行されたとき、位置変更がセットされている固定長データは削除されず、次の自動削除命令の実行対象とするため、位置変更をリセットされる。
図27において、固定長データアドレスレジスターをインデックスとして固定長データテーブルの家を読み出す(S6751)。読み出された家の中において固定長データの要素制御データをチェックする(S6752)。その要素状態が空室状態または常駐状態の場合、次の固定長データをチェックする。要素状態が削除状態にあり、位置変更がセットされていない場合(アクセスが無い場合)、その固定長データは削除される(S6753)。削除は削除命令と同じ動作を行い、固定長データを削除する。そして削除した固定長データの固定長データ名をテーブル管理制御手段600の一時記憶機能に保存する(S6754)。要素状態が削除状態にあり、位置変更がセットされている場合(アクセスがある場合)、その固定長データは削除されず、そして位置変更をリセットする。この作業を読み込まれた家の全固定長データに対して行う。読み込まれた家の全ての固定長データがチェックされると(S6755)、固定長データアドレスレジスターを1増加する(S6756)。そして固定長データアドレスレジスターをインデックスとして固定長データテーブルの家を読み出す作業を行う。このような作業を、固定長データテーブルの全ての家に対して行うと(S6757)自動削除命令の実行を終了する。
図28に、入力命令・実行機能670の要請で構造変更の必要の無い付加機能(単純付加機能630)を実行するコントローラまたはシークエンサーの動作例の一部を示す。単純付加機能630の全てのケースを図28に記述することは複雑となるため、詳細な機能は説明により行う。入力命令・実行機能670から単純付加命令の実行を受付けると、まず、付加命令内の固定長データを検索する(S6300)。単純付加機能630は入力固定値データ処理手段100の管理データ699から付加命令内の固定長データを入力する。入力検索番号はテーブル管理制御手段600に割り当てられた検索番号であり、又入力統計データにはゼロが入力される。テーブル管理制御手段600に割り当てられた検索番号を伴う検索動作は出力制御機能840により、レジスターS812にデータが格納された時点で終了する。又、図7のポインタ処理手段200において、テーブル管理制御手段600に割り当てられた検索番号のインデックスを発生させるとき、そのインデックスはレジスターP217に保存される。検索過程の中でレジスターP217はポインタ処理手段200がテーブルインデックス252を発生するたびに改定される。このため、検索終了時、レジスターP217は固定長データテーブルを読み込んだ最後のインデックスが保持されている。それに加え、付加命令内の固定長データに関する検索結果、固定長データ名、およびユーザーデータは、テーブル管理制御手段600に割り当てられた検索番号のレジスターS812に格納され、単純付加機能630に読み込まれる。今後の説明には省略するが、付加される固定長データは大小順に並べられるものとする、そして付加される固定長データ以外の固定長データ名とマスクと状態ビットから作成される要素制御データは固定長データテーブルに、ユーザーデータと初期化された統計データはデータテーブルに、固定長データが格納される時点で同時に格納される。
図28には記述されていないが、一致しない検索結果が得られたとき、単純付加機能630の実行は続けられる。一致した結果が得られた時、二つの選択肢が考えられる。一つは単純付加機能630の実行を中止して、その結果をホスト制御装置に報告する。他は単純付加機能630の実行を続行し、付加すべき固定長データに関連した各種データを付加命令内のデータと置き換え、改正を行う。これらの選択肢はレジスターにより行われる。
ポインタ処理手段200のレジスターP217が保持するインデックスで、室管理テーブル741を参照し(S6301)、家が満室(8室が単一団体で占められている)か否かを確認する。満室でない場合、二つの団体により家が構成されている。このとき、家の占有の状況と固定長データが付加される団体とを用いて場合分けをすると、次のケースが考えられる。(1)家には大団体と小団体が同居しており、大団体に付加される、(2)家には大団体と小団体が同居しており、小団体に付加される、(3)家には大団体と小団体が同居できるが、大団体だけが存在し、そこに付加される、(4)家にはサイズの等しい二団体が同居しており、その一つの団体に付加される、(5)家にはサイズの等しい二団体が同居できるが、一つだけが存在し、その団体に付加される、(6)付加する団体が無い。図28に上記(1)と(2)のケースを示したが、以下、(1)〜(6)のケースについて説明を行う。
(1)家(P)には大団体と小団体が同居しており、大団体に付加される場合、小団体を移動し、付加する固定長データとその関連するデータを空いた室に格納する。作業の順番は最初に空室テーブル721から小団体の持つ室数の空き室を持つ家(Q)のインデックスを得る。家(Q)に小団体を移す(S6304)。そして家(Q)の室管理テーブル741に小団体に関連するパラメータを写し、室管理テーブル741が持つ上位アドレスを使い上位テーブルのエントリー制御データに家(Q)のインデックスを書き込む。次に大団体の家(P)に付加命令内の固定長データとその関連データを格納する。付加することによりその家が満室になった場合、その家の室管理テーブル741と構造管理テーブル761のパラメータを変更する。その家が満室で無い場合、それらの変更に加えて、家(P)を(小団体の室数―1)の空室テーブル721に登録する(S6305)。
(2)家(P)には大団体と小団体が同居しており、小団体に付加される場合、小団体の室数より一つ大きな空室をもつ家(Q)を空室テーブル721から入手し、小団体を家(Q)に移動し、そして付加する固定長データとその関連するデータを家(Q)に格納する(S6306)。そして家(Q)の室管理テーブル741に小団体に関連するパラメータを写し、室管理テーブル741が持つ上位アドレスを使い上位テーブルのエントリー制御データと構造管理テーブル761を変更する。次に大団体の家(P)を小団体の室数の空室テーブル721に登録し、家(P)の室管理テーブルの上位アドレスに空室テーブル721に登録したアドレスを書き込み、それらに対応するパラメータを変更する(S6307)。
(3)家には大団体と小団体が同居できるが、大団体だけが存在し、そこに付加される場合、大団体の家に付加命令内の固定長データとその関連データを格納する。空き室であった小団体の室数の空室テーブル721からこの家を削除する。付加することによりその家が満室になった場合、その家の室管理テーブル741と構造管理テーブル761のパラメータを変更する。その家が満室で無い場合、それらの変更に加えて、家を(空き室であった小団体の室数―1)の空室テーブル721に登録する。
(4)家(P)にはサイズの等しい二団体(AとBと呼ぶ)が同居しており、その一つの団体Aに付加される場合、団体の室数が1、2、または3のとき、団体Aの室数より一つ大きな空室をもつ家(Q)を空室テーブル721から入手し、団体Aを移動し、そして付加する固定長データとその関連するデータをその家に格納する。そして家(Q)の室管理テーブル741の団体Aに関連するパラメータを写し、室管理テーブル741が持つ上位アドレスを使い、上位テーブルのエントリー制御データに家(Q)のインデックスを書き込み、構造管理テーブル761を変更する。次に家(P)を団体Bの室数の空室テーブル721に登録し、そして団体Bの家(P)の室管理テーブル741の団体Aのパラメータを登録された空室テーブル721のアドレスに変更する。団体の室数が4のとき、空き家(R)を空家テーブル701から入手し、団体Aを移動し、そして付加する固定長データとその関連するデータをその家に格納する。そして新しい家(R)の室管理テーブル741に団体Aに関連するパラメータを写し、室管理テーブル741が持つ上位アドレスを使い、上位テーブルのエントリー制御データと構造管理テーブル761を変更する。次に家(P)を団体Bの室数の空室テーブル721に登録し、そして団体Bの家(P)の室管理テーブル741の団体Bのパラメータを登録された空室テーブル721のアドレスに変更する。
(5)家にはサイズの等しい二団体(AとBと呼ぶ)が同居できるが、一つ(団体A)だけが存在し、その団体に付加される場合、団体Aの家に付加命令内の固定長データとその関連データを格納する。空き室であった団体(B)の室数の空室テーブル721からこの家を削除する。家を(空き室であった団体Bの室数+1)の空室テーブル721に登録する。その家における室管理テーブル741の空き室の上位アドレスに登録した空室テーブル721のアドレスを書き込み、構造管理テーブル761のパラメータを変更する。
(6)付加する団体が無い場合、1空室テーブル721から、1室の空室を持つ家を入手する。付加する固定長データをその家に付加し、ポインタテーブルにその家を登録し、その家の室管理テーブル741の空き室にポインタテーブルのインデックスを登録する。最後に構造管理テーブル761のパラメータを変更する。
図28において、家が満室(8室が単一団体で占められている)の場合、二つのケースにより処理される。一つはNVC形式の場合と他はそれ以外である(S6308)。NVC形式の場合、再配列を行い(S6309)、付加命令内の固定長データとその関連データを格納する。そして、再配置の結果、付加しなければならない家に対して、上記(1)から(5)の中で、一つの付加動作を行う(S6310)。NVC形式ではない場合、一つの空室を持つ家(Q)を空室テーブル721から入手し、家(P)の8個の固定長データとの大小比較により、9個の固定長データを家(P)と家(Q)に格納する(S6311)。家(P)のエントリー制御データを家(Q)にリンクするように変更し(S6312)、家(Q)のエントリー制御データを修正し、家(Q)の室管理テーブル741に家(P)のインデックスを書き込み、最後に構造管理テーブル761を変更する。
図28に、入力命令・実行機能670の要請で構造変更の必要のある付加機能(構造変更付加機能640)を実行するコントローラまたはシークエンサーの動作例の一部を示す。単純付加機能630の説明と同様に、構造変更付加機能640の全てのケースを図28に記述することは複雑となるため、詳細な機能は説明により行う。入力命令・実行機能670から構造変更付加命令の実行を受付けると、まず、付加命令内の固定長データを検索する(S6400)。構造変更付加機能640は、入力固定値データ処理手段100の管理データ699から付加命令内の固定長データを入力する。入力検索番号は、テーブル管理制御手段600に割り当てられた検索番号であり、又入力統計データとしてはゼロが入力される。テーブル管理制御手段600に割り当てられた検索番号を伴う検索動作は、出力制御機能840により、レジスターS812にデータが格納された時点で終了する。又、図7のポインタ処理手段200において、テーブル管理制御手段600に割り当てられた検索番号のインデックスを発生させるとき、そのインデックスはレジスターP217に保存される。検索過程の中でレジスターP217はポインタ処理手段200がテーブルインデックス252を発生するたびに改定される。このため、検索終了時、レジスターP217には固定長データテーブルを読み込んだ最後のインデックスが保持されている。それに加え、付加命令内の固定長データに関する検索結果、固定長データ名、およびユーザーデータは、テーブル管理制御手段600に割り当てられた検索番号のレジスターS812に格納され、構造変更付加機能640に読み込まれる。
図28には記述されていないが、一致しない検索結果が得られたときに構造変更付加機能640の実行は続けられる。一致した結果が得られた時、二つの選択肢が考えられる。一つは構造変更付加機能640の実行を中止して、その結果をホスト制御装置に報告する。他は構造変更付加機能640の実行を続行し、付加すべき固定長データに関連した各種データを付加命令内のデータと置き換え、改正を行う。これらの選択肢はレジスターにより行われる。
ポインタ処理手段200のレジスターP217が保持するインデックスで、室管理テーブル741を参照し、家の形式が一つの団体で占められていることを確認する(S6401)。そして、上位アドレスを得る。次に構造管理テーブル761を参照し、手順番号と構造変更理由を確認する(S6402、S6403)。手順2の場合、SPTを構築する。手順3の場合、ローカルテーブルを構築する。手順4の場合、NVC形式のテーブル構造に変更する。
構造管理テーブル761の手順番号が2のとき、固定長データテーブルの二つの家(PとQ)に格納されている16個の固定長データと付加される固定長データをSPTの構築により再配置する(S6405)。その作業の最初は、17個の固定長データの区分けである。SPTのサイズを8と仮定して説明しているため、9つに区分け(区分0から区分8)する。区分けに使われるデータは、全インデックスからポインタテーブルのインデックスに使われているビットからの3ビットである。例えば、ポインタテーブルのインデックスが全インデックス、(例えば32ビット)の31ビットから16ビットであるならば、SPTのインデックスはビット15、ビット14、およびビット13である。それらを(ビット15、ビット14、ビット13)で表す。この場合、区分0は(000)、区分1は(001)、同様に区分7は(111)で表す。区分8は17個の固定長データのうち、そのマスクの長さが17ビット(32ビットー15ビット)か18ビット(32ビットー14ビット)を持つ固定長データを扱う。区分け後、区分8に属する固定長データの数の空き室を持つ家(R)を空室テーブル721から入手し、区分8に属する固定長データをその家(R)に移す(S6406)。このときの動作は単純付加機能630で説明したとおりである。その家(R)のインデックスをポインタテーブルのエントリーデータに書き込む。
8エントリーを持つテーブル、SPT、をポインタテーブルメモリ500に構築し、初期化する。SPTのインデックス(000)のメモリアドレス、すなわちベースアドレスとSPTのパラメータを家(R)のエントリー制御データに書き込む。
区分0に属する固定長データの数の空き室を持つ家(S)を空室テーブル721から入手し、区分0に属する固定長データをその家(S)に移す。このときの動作は単純付加機能630で説明したとおりである。その家(S)のインデックスと次工程101とメモリ制御データをSPTのエントリーデータに書き込む。固定長データの数の空き室が4以下であれば、それを格納するメモリアレイだけを活性化するデータをメモリ制御データに書き込む。最後にその家(S)のエントリー制御データの次工程000を書き込む。この作業を区分1から区分7まで行う。構造管理テーブルの変更を行う。そして家Pと家Qを空家テーブル701に登録し、SPTへの構造変更は終了する(S6411)。
構造管理テーブル761の手順番号が3のとき(S6403)、固定長データテーブルの一つの家(P)に格納されている8個の固定長データと付加される固定長データをローカルテーブルの構築により再配置する(S6407)。これら9個の固定長データはSPTの一つのエントリーに格納できないためである。その作業の最初は、9個の固定長データの区分けである。ローカルテーブルのサイズを8と仮定して説明しているため、8つに区分け(区分0から区分7)する。区分けに使われるデータは、全インデックスからポインタテーブルとSPTのインデックスに使われているビットからの3ビットである。例えば、ポインタテーブルのインデックスが全インデックス、(例えば32ビット)の31ビットから16ビットであるならば、SPTのインデックスはビット15、ビット14、およびビット13である。このため、ローカルテーブルのインデックスはビット12、ビット11、およびビット10である。それらを(ビット12、ビット11、ビット10)で表す。この場合、区分0は(000)、区分1は(001)、同様に区分7は(111)で表す。
8エントリーを持つローカルテーブルを固定長データテーブルメモリ560に構築し、初期化する。ローカルテーブルのインデックス(000)のメモリアドレス、すなわちベースアドレスとローカルテーブルのパラメータを家(P)の室管理テーブル741の上位アドレスが示すSPTのエントリーのエントリー制御データに書き込む。固定長データテーブルの一部の家はローカルテーブルに予約されている。
区分0に属する固定長データをベースアドレスでインデックスされる固定長データテーブルの家に移す(S6408)。このときの動作は単純付加機能630で説明したとおりである。その家の室管理テーブル741のLTビットをセットすることによりその団体は、付加命令および削減命令によりその家から移動することは無い。最後にその家のエントリー制御データの次工程000を書き込む。この作業を区分1から区分7まで行う。構造管理テーブルの変更を行う。そして家Pを空家テーブル701に登録し、ローカルテーブルへの構造変更は終了する(S6411)。
構造管理テーブル761の手順番号が4のとき、付加する固定長データが所属するポインタテーブルのエントリーに属する全ての固定長データと付加する固定長データとが構造変更の対象になる(S6409)。全ての家が持つ固定長データは、その家の団体の中で大小順に並んでいる。このため、付加する固定長データが所属するポインタテーブルのエントリーに属するSPTとローカルテーブルの固定長データは大小順に並んでいると考えられる。例えば、ローカルテーブルを含まないSPTのインデックス0を(000)と、ローカルテーブル(そのインデックス0)を含むSPTのインデックス1を(001、000)と表わせば、固定長データの大小順は大きいほうから(111)、(110)、(101)、(100)、(011)、(010)、(001,111)、(001,110)、(001,101)、(001,100)、(001,011)、(001,010)、(001,001)、(001,000)、(000)となる。この順序にポインタテーブルの次に読み込まれる固定長データテーブルの家(P)の固定長データが割り込む。
大小順に並べられた固定長データの大小比較の方法を説明する。上記例を使えば、ポインタテーブルのインデックスが全インデックス、(例えば32ビット)の31ビットから16ビットであるならば、SPTのインデックスはビット15、ビット14、およびビット13である。ローカルテーブルのインデックスはビット12、ビット11、およびビット11である。これらはあくまで各テーブルに分類するために使われ方法であり、大小比較を全インデックスのビット15からビット0に対して行っても、今までの説明に問題は起こらない。また、マスク付の大小比較であるため、マスクされるビットは比較しても意味が無い。すなわち、マスクが23であれば、全インデックスのビット31からビット8までが比較され、ビット7からビット0までは意味の無い。このため、マスクされるビットは0として扱う。NVC形式の固定長データテーブルの要素は、抽出されたインデックス(全インデックスのビット15からビット0)と、このインデックスとの大小比較の結果、参照される固定長データテーブルインデックスから構成される(図8参照)。又、手順5は固定長データテーブルでNVC形式の家をふたつまで持つことができる。一つの家に固定長データは8個まで格納できるが、NVC形式のデータは一つの家に16個まで格納できるので、二つの家に最高256個のNVC形式のデータを格納できる。NVC形式への構造変更はこの性質を利用する。
上記例でSPTと一つのローカルテーブルが存在すると仮定すれば、インデックス数は15である。このため、付加する固定長データと付加される家の8個の固定長データを二つに分解し、全部で16個の家を持つ。これからは図9で記述された作業3、作業4、そして作業5を行う(S6411)。空家テーブル701から家(P)を入手する。各家の最小値を持つ固定長データのビット15からビット0を抽出し、大きい順に家(P)に格納する。それらの固定値データに相当する家のインデックスを各抽出インデックスの固定長データテーブルインデックスとして格納する。家(P)のインデックスをポインタテーブルのエントリーデータに保存し、次工程はNVC形式をセットする。構造管理テーブルを修正する。ローカルテーブルを構成する家の室管理テーブル741のLTビットは変更しない。以上により構造変更は完了する。
上記、付加する固定長データと付加される家(R)の8個の固定長データを二つに分解する方法を説明する。付加する固定長データが付加される8個の固定長データの大きい順のm番目と仮定する。mは0から8の値である。0は付加する固定長データが最大であり、8は付加する固定長データが最小である。mが1、2、3の時、m+1の空き室を持つ家(S)を空室テーブル721から入手し、大きい順からm個の固定長データと付加する固定長データを移動する。家(R)をm個の空室テーブルに登録しそのアドレスを家(R)の室管理テーブルに書き込む。全てにおいて家の室管理テーブルの上位アドレスにポインタテーブルのインデックスを書き込む。mが1、2、3以外の時、mの空き室を持つ家(S)を空室テーブル721から入手し、小さい順から(8−m)個の固定長データを移動する。家(R)に付加する固定長データを保存し、(7−m)個の空室テーブルに登録しそのアドレスを家(R)の室管理テーブルに書き込む。全てにおいて家の室管理テーブルの上位アドレスにポインタテーブルのインデックスを書き込む。
NVC形式のテーブルの構築変更は一つのローカルテーブルを例に説明したが、ローカルテーブルが複数存在しても、説明した手法は使える。SPTの全てのエントリーがローカルテーブルをもった場合、64個の家が存在する。しかし、NVC形式の家は説明では一つであったが、二つまでもてるため、256個の家が処理できる。すなわち、手順4から手順5の構造変更の手法の上記説明は、手順4が、いかなるテーブル構造を持っていても手順5のNVC形式のテーブル構造に変更可能である。
図29に、入力命令・実行機能670の要請で構造変更の必要の無い削除機能(単純削除機能650)を実行するコントローラまたはシークエンサーの動作例の一部を示す。単純削除機能650の全てのケースを図29に記述することは複雑となるため、詳細な機能は説明により行う。入力命令・実行機能670から単純削除命令の実行を受付けると、まず、削除命令内の固定長データを検索する(S6500)。単純削除機能650は削除命令内の固定長データを入力固定値データ処理手段100の管理データ699から入力する。入力検索番号はテーブル管理制御手段600に割り当てられた検索番号である、又入力統計データはゼロが入力される。テーブル管理制御手段600に割り当てられた検索番号を伴う検索動作は出力制御機能840により、レジスターS812にデータが格納された時点で終了する。又、図7のポインタ処理手段200において、テーブル管理制御手段600に割り当てられた検索番号のインデックスを発生させるとき、そのインデックスはレジスターP217に保存される。検索過程の中でレジスターP217はポインタ処理手段200がテーブルインデックス252を発生するたびに改定される。このため、検索終了時、レジスターP217は固定長データテーブルを読み込んだ最後のインデックスが保持されている。それに加え、削除命令内の固定長データに関する検索結果、固定長データ名、およびユーザーデータは、テーブル管理制御手段600に割り当てられた検索番号のレジスターS812に格納され、単純削除機能650に読み込まれる。
図29には記述されていないが、一致した検索結果が得られたとき、単純削除機能650の実行は続けられる。一致しない結果が得られた時、単純削除機能650の実行を中止して、その結果をホスト制御装置に報告する。これからは、検索結果が一致した場合を説明する。
ポインタ処理手段200のレジスターP217が保持するインデックスで、室管理テーブル741を参照し(S6501)、家が満室(8室が単一団体で占められている)か否かを確認する。満室でない場合、二つの団体により家が構成されている。このとき、家の占有の状況と固定長データが削除される団体とを用いて場合分けをすると、次のケースが考えられる。(1)家には大団体と小団体が同居しており、大団体から削除される、(2)家には大団体と小団体が同居しており、小団体から削除される、(3)家には大団体と小団体が同居できるが、大団体だけが存在し、そこから削除される、(4)家にはサイズの等しい二団体が同居しており、その一つの団体から削除される、(5)家にはサイズの等しい二団体が同居できるが、一つだけが存在し、その団体から削除される。図29に(1)と(2)と満室の場合を示す。以下、(1)から(5)の説明を行う。
(1)家(P)には大団体と小団体が同居しており、大団体から削除される場合、小団体を移動し(S6503)、大団体から削除した後、家(P)を(小団体の室数+1)の空室テーブル721に登録する(S6504)。作業の順番は最初に空室テーブル721から小団体の持つ室数の空き室を持つ家(Q)のインデックスを得る。家(Q)に小団体を移す。そして家(Q)の室管理テーブル741に小団体に関連するパラメータを写し、室管理テーブル741が持つ上位アドレスを使い上位テーブルのエントリー制御データに家(Q)のインデックスを書き込む。次に大団体の家(P)から削除命令内の固定長データを削除し、家(P)の室管理テーブル741と構造管理テーブル761のパラメータを変更する。家(P)を(小団体の室数+1)の空室テーブル721に登録する(S6505)。
(2)家(P)には大団体と小団体が同居しており、小団体から削除される場合、小団体の室数より一つ小さな空室をもつ家(Q)を空室テーブル721から入手し、小団体から削除命令内の固定長データを削除し、小団体を家(Q)に移動する(S6506)。そして家(Q)の室管理テーブル741に小団体に関連するパラメータを写し、室管理テーブル741が持つ上位アドレスを使い上位テーブルのエントリー制御データと構造管理テーブル761を変更する。次に大団体の家(P)を削除前の小団体の室数の空室テーブル721に登録し(S6507)、家(P)の室管理テーブルの上位アドレスに空室テーブル721に登録したアドレスを書き込み、それらに対応するパラメータを変更する(S6505)。
(3)家には大団体と小団体が同居できるが、大団体だけが存在し、そこから削除される場合、大団体の家から削除命令内の固定長データとその関連するデータを削除する。空き室であった小団体の室数の空室テーブル721からこの家を削除する。その家の室管理テーブル741と構造管理テーブル761のパラメータを変更する、そして家を(空き室であった小団体の室数+1)の空室テーブル721に登録する。
(4)家(P)にはサイズの等しい二団体(AとBと呼ぶ)が同居しており、その一つの団体Aから削除される場合、団体の室数が2、3、または4のとき、団体Aの室数より一つ小さな空室をもつ家(Q)を空室テーブル721から入手する。団体Aから削除命令内の固定長データとその関連するデータを削除後、団体Aを家(Q)に移動する。そして家(Q)の室管理テーブル741の団体Aに関連するパラメータを写し、室管理テーブル741が持つ上位アドレスを使い、上位テーブルのエントリー制御データに家(Q)のインデックスを書き込み、構造管理テーブル761を変更する。次に家(P)を団体Bの室数の空室テーブル721に登録し、そして団体Bの家(P)の室管理テーブル741の団体Aのパラメータを登録された空室テーブル721のアドレスに変更する。団体の室数が1の場合、団体Aから削除命令内の固定長データとその関連するデータを削除する。そしてこの家(P)の団体Aの上位アドレスで示されるテーブルの次工程およびそれに関するパラメータを変更する。次に家(P)を1の室数の空室テーブル721に登録し、そして団体Bの家(P)の室管理テーブル741の団体Aのパラメータを登録された空室テーブル721のアドレスに変更する。
(5)家にはサイズの等しい二団体(AとBと呼ぶ)が同居できるが、一つ(団体A)だけが存在し、その団体から削除される場合、団体Aの家から削除命令内の固定長データとその関連データを削除する。団体の室数が2、3、または4のとき、空き室であった団体(B)の室数の空室テーブル721からこの家を削除する。家を(空き室であった団体Bの室数―1)の空室テーブル721に登録する。その家の室管理テーブル741の空き室の上位アドレスに登録した空室テーブル721のアドレスを書き込み、構造管理テーブル761のパラメータを変更する。団体の室数が1のとき、その家を空家テーブル701に登録する。そしてこの家の団体Aの上位アドレスで示されるテーブルの次工程およびそれに関するパラメータを変更する。
図29において、家が満室(8室が単一団体で占められている)の場合、その家から削除命令内の固定長データとその関連データを削除する。そして、その家を1の室数を持つ空室テーブル721に登録する(S6508)。最後に構造管理テーブル761のパラメータを変更する(S6509)。
図29に、入力命令・実行機能670の要請で構造変更の必要のある削除機能(構造変更削除機能660)を実行するコントローラまたはシークエンサーの動作例の一部を示す。単純削除機能650の説明と同様に、構造変更削除機能660の全てのケースを図29に記述することは複雑となるため、詳細な機能は説明により行う。入力命令・実行機能670から構造変更削除命令の実行を受付けると、まず、削除命令内の固定長データを検索する(S6600)。構造変更削除機能660は、削除命令内の固定長データを入力固定値データ処理手段100の管理データ699から入力する(S6600)。入力検索番号はテーブル管理制御手段600に割り当てられた検索番号である、又入力統計データとしては、ゼロが入力される。テーブル管理制御手段600に割り当てられた検索番号を伴う検索動作は出力制御機能840により、レジスターS812にデータが格納された時点で終了する。又、図7のポインタ処理手段200において、テーブル管理制御手段600に割り当てられた検索番号のインデックスを発生させるとき、そのインデックスはレジスターP217に保存される。検索過程の中でレジスターP217はポインタ処理手段200がテーブルインデックス252を発生するたびに改定される。このため、検索終了時、レジスターP217は固定長データテーブルを読み込んだ最後のインデックスが保持されている。それに加え、付加命令内の固定長データに関する検索結果、固定長データ名、およびユーザーデータは、テーブル管理制御手段600に割り当てられた検索番号のレジスターS812に格納され、構造変更削除機能660に読み込まれる。
図29には記述されていないが、一致した検索結果が得られたとき、構造変更削除機能660の実行が続けられる。一致しない結果が得られた時、構造変更削除機能660の実行を中止して、その結果をホスト制御装置に報告する。これからは、検索結果が一致した場合を説明する。
ポインタ処理手段200のレジスターP217が保持するインデックスで、室管理テーブル741を参照し(S6601)、上位アドレスを得る。次に構造管理テーブル761を参照し、手順番号と構造変更理由を確認する。手順3の場合、SPTを分解する。手順4の場合、ローカルテーブルを分解する。手順5の場合、NVC形式のテーブル構造を分解する。
構造管理テーブル761の手順番号が3のとき、SPTが管理する家とポインタテーブルが管理する家に格納されている固定長データとそれに関連するデータを二つの家に移動し(S6604、S6605)、ポインタテーブルが管理する形式を構築する。SPTのサイズを8と仮定して説明しているため、9つの家に区分け(区分0から区分8)されている。区分けに使われるデータは、全インデックスからポインタテーブルのインデックスに使われているビットからの3ビットである。例えば、ポインタテーブルのインデックスが全インデックス、(例えば32ビット)の31ビットから16ビットであるならば、SPTのインデックスはビット15、ビット14、およびビット13である。それらを(ビット15、ビット14、ビット13)で表す。この場合、区分0は(000)、区分1は(001)、同様に区分7は(111)で表す。区分8は17個の固定長データのうち、そのマスクの長さが17ビット(32ビットー15ビット)か18ビット(32ビット−14ビット)を持つ固定長データを扱う。区分0から区分7はSPTにより管理され、区分8はポインタテーブルにより管理される家である。又、各家に格納されている固定長データは大小順に並べられている。
区分0から区分8の家にある固定長データを二つの家に移動する方法を述べる。最初に二つの家(PとQ)を空家テーブル701から入手する。そして区分7と8の家の最大値を持つ固定長データを大小比較する。その結果大きいほうを家Pの最大値の位置する場所に移動・格納する。大小比較は全インデックスのビット15からビット0で行われる。次に、比較結果の小さいほうと、大きいほうの次の固定長データを大小比較する。この作業を区分8の家が持つ固定長データが移動・格納されるまで行う。その後、残った区分に属する固定長データを順次、家Pと家Qに移動・格納する。この場合、削除命令内の固定長データは大小比較、そして移動・格納の対象から除かれる。
区分0から区分8に属する家を空家テーブル701に登録する。この場合、区分によっては最初から固定長データを持たない家が存在する。この場合、その家に対し移動・格納は行われず、空家テーブル701への登録も行われない。最後に、家Pと家Qのパラメータをおのおののエントリー制御データに書き込み、家Pのアドレスをポインタテーブルの対応するエントリーに書き込み、そのエントリーに対応する構造管理テーブル761を変更する。以上により、SPTからの構造変更は終了する(S6606)。
構造管理テーブル761の手順番号が4のとき、ポインタ処理手段200のレジスターP217が保持するインデックスから得られた、上位アドレス、すなわちSPTのエントリーアドレスが管理するローカルテーブルを分解し、ローカルテーブルが管理していた固定長データの内、削除命令内の固定長データを除き、一つの家に移動・格納する(S6607、S6608)。これらの固定長データはSPTの一つのエントリーに格納できないためにローカルテーブルを構築していたが、削除命令で一つの家に格納可能になった。ローカルテーブルのインデックスは、全インデックスからポインタテーブルとSPTのインデックスに使われているビットからの3ビットである。例えば、ポインタテーブルのインデックスが全インデックス、(例えば32ビット)の31ビットから16ビットであるならば、SPTのインデックスはビット15、ビット14、およびビット13である。このため、ローカルテーブルのインデックスはビット12、ビット11、およびビット10である。それらを(ビット12、ビット11、ビット10)で表す。この場合、区分0は(000)、区分1は(001)、同様に区分7は(111)で表す。
その作業の最初は、一つの家Pを空家テーブル701から入手する。ローカルテーブルのサイズを8と仮定して説明しているため、8つに区分け(区分0から区分7)されている家に格納されている固定長データを区分7の家から、順次、移動・格納する。区分7の家の固定長データの処理が終了した後で、区分6の家の固定長データの処理を行う。このような処理を区分0の家の固定長データに対して行う。この場合、削除命令内の固定長データは移動・格納の対象から除かれる。
区分0から区分7に属する家を空家テーブル701に登録する。この場合、区分によっては最初から固定長データを持たない家が存在する。この場合、その家に対し移動・格納は行われず、空家テーブル701への登録も行われない。最後に、家Pのパラメータを自身のエントリー制御データに書き込み、家PのアドレスをSPTの対応するエントリーに書き込み、そのエントリーに対応する構造管理テーブル761を変更する。以上により、ローカルテーブルからの構造変更は終了する。
構造管理テーブル761の手順番号が5のとき、手順5のNVC形式のテーブル構造はSPTとローカルテーブルの組み合わせのテーブル構造に変換される。このとき大事なポイントを指摘する。削除命令内の固定長データが属するポインタテーブルのエントリーはその次工程でNVC動作による検索を指示し、そのエントリーにつながるテーブル構造はNVC形式である。しかし、そのエントリーに対応する構造管理テーブル761はSPTとローカルテーブルの組み合わせで、NVC形式で動作する固定長データを管理していることである。このため、NVC形式の対応する構造管理テーブル761が構造変更動作の大きく関与する。構造変更動作を説明する前に、NVC形式の構造管理テーブル761の構造を説明する。
例えば構造変更付加命令の説明のように、ローカルテーブルを含まないSPTのインデックス0を(000)と、ローカルテーブル(そのインデックス0)を含むSPTのインデックス1を(001、000)と表す。構造管理テーブル761のNVC形式に対応するエントリーデータは左から順番に、構造制御データ、ポインタテーブルのエントリーが持つ固定長データ数、次の家が持つ固定長データ数、そしてSPTとローカルテーブルの各エントリーが格納する固定長データ数である。SPTとローカルテーブルの各エントリーが格納する固定長データ数は、エントリー順に並べられており、大きいほうから(111)、(110)、(101)、(100)、(011)、(010)、(001,111)、(001,110)、(001,101)、(001,100)、(001,011)、(001,010)、(001,001)、(001,000)、(000)となる。上記順番はNVC形式が構造管理テーブルによりSPTと一つのローカルテーブルの形で管理されている例を示す。もし複数のローカルテーブルにより管理されていれば、(7*ローカルテーブル数)だけ固定長データ数を格納するエントリー数が増加する。又、構造変更削除命令を発生させる判断は、構造管理テーブルのエントリーの、次の家が持つ固定長データ数、そしてSPTとローカルテーブルの各エントリーが格納する固定長データ数がある指定された数以下になった時、行われる。
大小順に並べられた固定長データの大小比較の方法を説明する。上記例を使えば、ポインタテーブルのインデックスが全インデックス、(例えば32ビット)の31ビットから16ビットであるならば、SPTのインデックスはビット15、ビット14、およびビット13である。ローカルテーブルのインデックスはビット12、ビット11、およびビット10である。これらはあくまで各テーブルに分類するために使われ方法であり、大小比較を全インデックスのビット15からビット0に対して行っても、今までの説明に問題は起こらない。また、マスク付の大小比較であるため、マスクされるビットは比較しても意味が無い。すなわち、マスクが23であれば、全インデックスのビット31からビット8までが比較され、ビット7からビット0までは意味の無い。このため、マスクされるビットは0として扱う。NVC形式の固定長データテーブルの要素は抽出されたインデックス(全インデックスのビット15からビット0)と、このインデックスとの大小比較の結果、参照される固定長データテーブルインデックスから構成される。(図8参照)
以上の説明で、構造変更削除命令の手順5の構造変更動作を説明する。構造変更削除命令の構造変更動作は構造変更付加命令の構造変更動作の逆である。最初に構造管理テーブル761を参照し(S6609)、SPTとローカルテーブルを構築し(S6610とS6611)、空家テーブル701から家(P)を入手する。ポインタテーブルのエントリーの次工程にB‘101’をセットし、固定長データテーブルのインデックスに家(P)のインデックスをセットする。家(P)のエントリー制御データの次工程にB‘010’をセットし、ポインタテーブルメモリのアドレスにSPTのエントリー0のアドレスをセットし、その他のパラメータをセットする(S6610)。そしてローカルテーブルを持つSPTのエントリーのエントリー制御データの次工程にB‘011’をセットし、固定長データテーブルのインデックスにローカルテーブルのエントリー0のインデックスをセットし、その他のパラメータをセットする(S6611)。これで構造変更動作の準備が終了する。
ポインタテーブルのエントリーに保持されていた、NVC形式の家のインデックスでNVC形式のテーブル構造を解析・構造変更を行う。基本的に構造管理テーブル761が持つSPTとローカルテーブルの構造で家が構成されているので、上記構造管理テーブル761のエントリーの例を使って説明する。上記例では、SPTとローカルテーブルの各エントリーが格納する固定長データ数は、エントリー順に並べられており、大きいほうから(111)、(110)、(101)、(100)、(011)、(010)、(001,111)、(001,110)、(001,101)、(001,100)、(001,011)、(001,010)、(001,001)、(001,000)、(000)となる。すなわち、15個の数に対応する家が存在する、これが基本的な考え方である。もちろん、固定長データ数が0の場合、家は存在せず、あるエントリーは固定長データ数が指定した数以下でも、いくつかの家に分割されて格納されている場合もある。NVC形式の家のインデックスで最高位の要素が上記(111)に相当すれば、その要素に含まれる固定長データテーブルインデックスをSPTのエントリー(111)に格納し、その次工程はB‘101’をセットする。この場合、マスクがビット15からビット11の間に位置する固定長データはその家から家(P)に移動する。又、構造変更命令にある固定長データは当然その家から削除される。その家の固定長データ数に変化があるとき、単純削除機能の説明で行われた各種テーブルの修正が行われる。
上記例でSPTのエントリーが(001)の場合、ローカルテーブルに属する家の処理となる。NVC形式の家のインデックスでその要素が上記(001、111)に相当すれば、その要素に含まれる固定長データテーブルインデックスをローカルテーブルのエントリー(111)に格納し、その次工程はB‘101’をセットする(S6612)。SPTと同様に、この場合、マスクがビット15からビット11の間に位置する固定長データはその家から家(P)に移動する。又、構造変更命令にある固定長データは当然その家から削除される。その家の固定長データ数に変化があるとき、単純削除機能の説明で行われた各種テーブルの修正が行われる。
例えば、NVC形式の家のインデックスでその複数の要素が上記(001、100)に相当すれば、その中で最高値を持つ家にそれから続く家の固定長データを移動・格納する。(001、100)に相当する全ての要素の家の固定長データを移動・格納後、空き室になった家は空き室数の空室テーブルに登録され、空室テーブルのアドレスはその家の空室管理テーブルのパラメータに格納される。そして、全ての固定長データを格納した家のインデックスはローカルテーブルのエントリー(100)に格納され、その次工程はB‘101’をセットする(S6612)。SPTと同様に、この場合、マスクがビット15からビット11の間に位置する固定長データはその家から家(P)に移動する。又、構造変更命令にある固定長データは当然その家から削除される。その家に移動・格納される固定長データは、単純削除機能により行われる。以上により構造変更は完了する。
図30にテーブル管理制御手段600により実行された命令(図24に示された命令)の実行結果を出力する管理出力機能の実施例である。入力命令・実行機能670から送られた実行結果をレジスターXに格納し、それに付属するデータをFIFOレジスターに格納する。FIFOレジスターは多数のデータが送られてきたとき、その順序を守り、ライトポインタでFIFOレジスター内に保持する。全てのデータが送られてきた時、出力制御機能840はレジスターXに格納されている実行結果を最初に出力し、次にデータが存在すれば、FIFOレジスターに保持されているデータをリードポインタにしたがって出力する。
図30に管理出力データの内容を示す。付加命令の実行の結果としては、実行結果データだけが送られる。実行結果データの内容は、(1)問題なく実行完了、(2)付加する固定長データは存在するため、付加しないこと、または(2)付加する固定長データは存在するが実行完了したこと、(3)付加するメモリの不足のため、付加できなかったこと等を示すデータである。削除命令の実行の結果としては、実行結果データだけが送られる。この場合の実行結果データの内容は(1)問題なく実行完了したこと、(2)削除する固定長データは存在しないこと等を示すデータである。統計データ引出命令の実行の結果、実行結果データと、統計データと、固定長データ名が出力される。この場合、実行結果データは実行完了データが出力される。自動削除名引出命令の実行の結果、実行結果データと、命令で指定された数の、または存在する全ての、自動的に削除された固定長データ名が出力される。この場合、実行結果データは実行完了データが出力される。
図31に本発明のコンピュータプログラムおよび記録媒体の適用可能なハードウェアの構成例を示すブロック図を示す。図31において、コンピュータシステム90は、システムバス94に接続されたCPU(Central Processing Unit)91と、記憶装置92と、入出力装置93とを含む。CPU91は、少なくとも演算装置と制御装置とを備え、記憶装置92は例えば内蔵主記憶メモリ、ハードディスクドライブ、フロッピーディスクドライブなどで構成される。コンピュータシステム90に本発明のコンピュータプログラムがインストールされると、前記コンピュータプログラムは前記ハードディスクドライブ内に格納され、必要に応じて前記主記憶メモリにロードされる。記憶装置55の前記主記憶メモリにより、またはCPU91が備えるキャッシュメモリにより、本発明におけるポインタ・テーブル・メモリ、固定長データテーブルメモリ、データテーブルメモリ、および空家テーブルメモリ、空室テーブルメモリ、空室管理テーブルメモリ、構造管理テーブルメモリ等が構成される。入出力装置93は、複数の入出力ポートを備えて外部とのデータ通信を行うことが出来る。記憶装置92内の例えばハードディスクドライブやフロッピーディスクドライブなどにより、本発明のコンピュータプログラムが記録された記録媒体からプログラムが読み出される。
以上、詳細に説明したように、本発明を適用した実施の形態によれば、多数の固定長データが格納された固定長データテーブルの検索処理がいろいろな検索ルールで、2から3メモリーサイクル程度の速度で実行することができる。又、パイプライン構成が可能なため、一秒間あたりの検索処理数は膨大な数になる。検索処理に加えて、ユーザーデータ、統計データの管理を行うため、検索後のデータ処理を削減でき、検索処理の高速化、および検索処理数の増大が図れる。それらに加えて、固定長データの付加、削除、および自動削除を行うため、ホスト制御装置が行っていた重い処理を削減できる。又、本発明固定長データ検索装置と固定長データ検索および管理装置および管理方法と検索方法は、実施例で説明したように、ネットワーク通信で多用されるIPアドレスの検索や各種フィルターに適用可能である。又、本発明は、本発明の固定長データ検索および管理装置または管理・検索方法を適用した情報処理装置として、コンピュータを機能させるためのコンピュータプログラムに適用することが可能である。さらに本発明は、前記コンピュータプログラムを記録したコンピュータ読取可能な記録媒体に適用することも可能である。
以上のように、いくつかの例示的な実施形態が本発明に関して詳細に説明された。当業者には、本発明の新規な開示および効果から実質的に離れることなくこれら実施形態を様々に改良することが可能であることが分るであろう。したがって、そのような改良も全て本発明の範囲に含められるべきことが意図されている。