(57)【要約】【課題】外部メモリよりも内部メモリでのヒット率を向上させることにより、検索処理の効率を向上させる。【解決手段】データを格納する内部メモリと外部メモリとを備える情報処理装置であって、データの処理リクエストを受け付ける受付部と、処理リクエストに応じて処理を実行する処理部と、内部メモリまたは外部メモリに格納された各データのパラメータを監視する監視部と、処理の実行に際して、パラメータに基づき内部メモリと外部メモリとの各メモリ内または各メモリ間でデータを移動する移動部とを備える。【選択図】  図１
2015149023.tif 000002
【特許請求の範囲】
【請求項１】
データを格納する内部メモリと外部メモリとを備える情報処理装置であって、
前記データの処理リクエストを受け付ける受付手段と、
前記処理リクエストに応じて処理を実行する処理手段と、
前記内部メモリまたは前記外部メモリに格納された各データのパラメータを監視する監視手段と、
前記処理の実行に際して、前記パラメータに基づき前記内部メモリと前記外部メモリとの各メモリ内または各メモリ間でデータを移動する移動手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記パラメータは、各データのソケットステータスを含むことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記パラメータは、前記ソケットステータスへ遷移してからの経過時間をさらに含むことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記移動手段は、各データのソケットステータスが同じである場合、前記経過時間の比較結果に基づいてデータの移動を行うことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記処理リクエストは、データ登録リクエスト、データ削除リクエスト、データ更新リクエストまたはデータ検索リクエストであることを特徴とする請求項１乃至４の何れか１項に記載の情報処理装置。
【請求項６】
前記処理リクエストがデータ更新リクエストである場合、
前記移動手段は、前記処理手段により更新されたデータについてデータの移動を行うことを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記処理リクエストがデータ検索リクエストである場合、
前記移動手段は、前記処理手段により検索されたデータについてデータの移動を行うことを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項８】
前記移動手段は、前記処理手段による前記内部メモリまたは前記外部メモリへのアクセス中以外のタイミングでデータの移動を行うことを特徴とする請求項１乃至７の何れか１項に記載の情報処理装置。
【請求項９】
データを格納する内部メモリと外部メモリとを備える情報処理装置の制御方法であって、
受付手段が、前記データの処理リクエストを受け付ける工程と、
処理手段が、前記処理リクエストに応じて処理を実行する工程と、
監視手段が、前記内部メモリまたは前記外部メモリに格納された各データのパラメータを監視する工程と、
移動手段が、前記処理の実行に際して、前記パラメータに基づき前記内部メモリと前記外部メモリとの各メモリ内または各メモリ間でデータを移動する工程と、
を有することを特徴とする情報処理装置の制御方法。
【請求項１０】
請求項９に記載の情報処理装置の制御方法の各工程をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置の制御方法およびプログラムに関する。
【背景技術】
【０００２】
近年、組み込み機器の多くが通信インターフェイスを備え、ネットワークへの接続が可能となっており、より高速な通信を行うことが要求されている。一方で、高速な通信を実現するための通信処理は、組み込み機器に搭載されるＣＰＵに大きな負荷をかける。組み込み機器においては、高速な通信を実現するために通信処理に特化したデバイスを搭載する手法が一般的となっている。
【０００３】
ＴＣＰ／ＩＰ通信を高速化するデバイスとしてＴＯＥ（ＴＣＰ／ＩＰ  Ｏｆｆｌｏａｄ  Ｅｎｇｉｎｅ）がある。ＴＯＥは、組み込み機器に搭載されるＣＰＵからＴＣＰ／ＩＰプロトコル処理を肩代わりし、ＣＰＵに負荷をかけずに高速な通信を可能とする。
【０００４】
ＴＯＥが実行するプロトコル処理の一つとして、ＴＣＰ処理におけるソケット検索がある。ＴＣＰ／ＩＰでは、ＩＰアドレスとポート番号との組み合わせであるソケットを用いて通信が実現されているため、通信中にソケットの検索処理が頻発する。検索テーブルはメモリ上に構成されるため、検索テーブルに登録可能なソケット数はメモリの容量に制限される。
【０００５】
そこで、ＴＯＥが有する内部メモリと組み込み機器のメインメモリ（外部メモリ）とにそれぞれ検索テーブルを構成する手法がある。特許文献１では、内部メモリおよび外部メモリを使用してデータを格納する技術として、アクセス履歴情報に基づいてファイルを外部メモリに格納する検索システムが提案されている。また、特許文献２では、データをグループに分割し一定期間アクセスが行われないグループを外部メモリへ移動させる手法が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開2009-53961号公報
【特許文献２】特開2010-182075号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、外部メモリにおける検索は、アクセス速度が遅いため時間がかかる。ＴＣＰのソケット検索処理においては、検索にヒットするソケットが発見された時点で検索完了となる。つまり、内部メモリでヒットする場合には短時間で検索を完了できるが、外部メモリでヒットする場合には検索完了まで時間を要することになる。
【０００８】
特許文献１および特許文献２の技術では、検索が外部メモリでヒットするケースが頻発すると、検索処理の効率が低下してしまうという課題がある。
【０００９】
上記の課題に鑑み、本発明は、外部メモリよりも内部メモリでのヒット率を向上させることにより、検索処理の効率を向上させることを目的とする。
【課題を解決するための手段】
【００１０】
上記の目的を達成する本発明に係る情報処理装置は、
データを格納する内部メモリと外部メモリとを備える情報処理装置であって、
前記データの処理リクエストを受け付ける受付手段と、
前記処理リクエストに応じて処理を実行する処理手段と、
前記内部メモリまたは前記外部メモリに格納された各データのパラメータを監視する監視手段と、
前記処理の実行に際して、前記パラメータに基づき前記内部メモリと前記外部メモリとの各メモリ内または各メモリ間でデータを移動する移動手段と、
を備えることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、外部メモリよりも内部メモリでのヒット率が向上し、検索処理の効率を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に係る情報処理装置の構成例を示す図。
【図２】本発明の一実施形態に係るＴＣＰソケットペアのエントリデータ格納フォーマットの一例を示す図。
【図３】本発明の一実施形態に係るサブＣＰＵおよび検索装置の動作シーケンス図。
【図４】本発明の一実施形態に係る内部メモリおよびメインメモリへのエントリ格納方法の一例を示す図。
【図５】本発明の一実施形態に係る検索部におけるエントリ移動処理の手順を示すフローチャート。
【図６】本発明の一実施形態に係るＴＣＰソケットにおけるソケットステータスの遷移図。
【図７】本発明の一実施形態に係るエントリ監視部の処理手順を示すフローチャート。
【図８】本発明の一実施形態に係るエントリ監視部の処理手順を示すフローチャート。
【図９】本発明の一実施形態に係るエントリ監視部の処理手順を示すフローチャート。
【発明を実施するための形態】
【００１３】
以下、添付の図面を参照しながら、本発明の実施の形態を説明する。
【００１４】
＜１．情報処理装置の構成＞
図１は、本発明の一実施形態に係る情報処理装置の構成を示す。情報処理装置１０は、主処理部（メインシステム）１０１と、通信処理部（サブシステム）１０５とを有する。主処理部１０１は、情報処理装置１０のアプリケーションを制御する。例えば、情報処理装置１０がプリンタであれば印刷に関する制御を、カメラであれば撮像に関する制御を行う。また、主処理部１０１は通信に関する処理を行わず、通信処理部１０５が通信に関する処理を行う。
【００１５】
主処理部１０１は、メインＣＰＵ１０２、メインメモリ１０３（外部メモリ）、メインバス１０４を備えている。メインＣＰＵ１０２は、情報処理装置１０全体のアプリケーション制御を担う。メインメモリ１０３は、メインＣＰＵ１０２および後述する通信処理部１０５のサブＣＰＵ１０７〜サブＣＰＵ１１１が実行するプログラムを格納しており、またデータ用バッファメモリとしての役割を担う。さらに、本実施形態では、メインメモリ１０３は、検索対象となるデータの格納場所としての役割も担う。メインバス１０４は、メインＣＰＵ１０２からメインメモリ１０３、通信処理部１０５へのアクセスおよびデータ転送に使用される。
【００１６】
通信処理部１０５は、ローカルバス１０６、サブＣＰＵ１０７〜サブＣＰＵ１１１、データ移動部１１２、有線インターフェイス１１３、無線インターフェイス１１４及び検索装置１１５を備えている。ローカルバス１０６は、サブＣＰＵ１０７〜サブＣＰＵ１１１からデータ移動部１１２、検索装置１１５、および主処理部１０１へのアクセスおよびデータ転送に使用される。
【００１７】
本実施形態においては、複数のサブＣＰＵ（サブＣＰＵ１０７、１０８、１０９、１１０、１１１）により通信処理を行う構成として以下に説明する。各サブＣＰＵにより、主処理部１０１からＴＣＰ／ＩＰプロトコル処理および無線ＬＡＮ処理などの通信処理をオフロードし、高速に実行する。各サブＣＰＵは、メインメモリ１０３に格納されたプログラムを内蔵するキャッシュメモリにロードして、プログラムを実行する。各サブＣＰＵが実行するプログラムは共通であっても良いし、各サブＣＰＵ個別のものであっても良い。
【００１８】
データ移動部１１２は、主処理部１０１と通信処理部１０５間のデータ転送を行う。有線インターフェイス１１３は通信ケーブルを介して、情報処理装置をネットワークに接続する。有線通信として、ＩＥＥＥ８０２．３が適用可能である。無線インターフェイス１１４は、電波により大気を介して、情報処理装置をネットワークに接続する。無線通信として、ＩＥＥＥ８０２．１１無線ＬＡＮが適用可能である。
【００１９】
各インターフェイスにより、例えば情報処理装置１０がプリンタであれば、ネットワークを介して印刷指示を行うことにより、情報処理装置に印刷処理を行わせることが可能である。
【００２０】
検索装置１１５は、リクエスト受付部１１６、処理結果通知部１１７、検索部１１８、内部メモリ１１９及びタイマー部１２６を含む。検索装置１１５は、サブＣＰＵ１０７〜サブＣＰＵ１１１から発行される処理リクエスト（データ登録リクエスト、データ更新リクエスト、データ削除リクエスト、データ検索リクエスト）に従って動作する。処理リクエストに応じて検索装置１１５が実行する処理は、エントリ登録、エントリ更新、エントリ削除およびエントリ検索である。エントリとは、検索装置１１５が扱うデータの一単位であり、エントリはデータ群によって構成されている。
【００２１】
エントリ登録では、動作リクエストにより指定されたデータの登録を行う。エントリ更新では、動作リクエストにより指定されたデータの更新を行う。エントリ削除では、動作リクエストにより指定されたエントリの削除を行う。エントリ検索では、動作リクエストにより指定された検索キーに適合するデータの検索処理を行う。
【００２２】
エントリ登録リクエストには、エントリの識別番号（エントリＩＤ）および登録するエントリの内容が含まれる。エントリ更新リクエストには、エントリＩＤおよび更新するエントリ内容が含まれる。エントリ削除リクエストには、エントリＩＤが含まれる。エントリ検索リクエストには、検索に使用するデータ（検索キー）が含まれる。
【００２３】
リクエスト受付部１１６は、サブＣＰＵ１０７〜サブＣＰＵ１１１から動作リクエストを受信し、検索部１１８に対し動作リクエストに応じた動作指示を行う。検索部１１８が処理を実行中である場合に新規に動作リクエストを受信した場合は、内蔵するリクエストキューに動作リクエストを保持する。検索部１１８から動作可能状態である旨の信号が通知されている場合に、次リクエストに応じた動作指示を行う。
【００２４】
処理結果通知部１１７は、検索部１１８が実行した処理結果が格納され、動作リクエストを発行したサブＣＰＵに対し処理が完了したことを通知する。処理結果として、エントリ登録の成否、エントリ更新の成否、エントリ削除の成否、検索に適合したエントリがある。また検索において適合するエントリが存在しなかった場合には、検索の結果としてエラーを出力する。サブＣＰＵ１０７〜サブＣＰＵ１１１は、処理結果通知部１１７を参照することで、発行した動作リクエストに応じた結果を得ることができる。
【００２５】
検索部１１８は、リクエスト受付部１１６から動作指示を受けると、動作指示に応じた処理を実行する。検索部１１８は、検索制御部１２０、比較部１２１、内部メモリ制御部１２２、外部メモリ制御部１２３、エントリ移動部１２４及びエントリ監視部１２５を有する。
【００２６】
検索制御部１２０は、リクエスト受付部１１６から受けた動作指示に基づいて、検索部１１８内の制御を行う。検索制御部１２０は、リクエストの処理が完了すると次リクエストの受付が可能であることをリクエスト受付部１１６へ通知する。リクエストの処理中である場合は、次リクエストの受付が不可能であることをリクエスト受付部１１６へ通知する。また、エントリ移動部１２４がエントリ移動動作を実行中である場合にも、検索制御部１２０は次リクエストの受付が不可能である通知を行う。
【００２７】
検索制御部１２０は、動作指示がエントリ登録であった場合、内部メモリ制御部１２２を介して内部メモリ１１９にエントリの登録を行う。内部メモリ１１９にエントリ登録を行える容量が空いていない場合には、外部メモリ制御部１２３を介してメインメモリ１０３にエントリ登録を行う。検索制御部１２０は、登録処理完了後、処理完了通知を処理結果通知部１１７へ通知し、登録先の管理ＩＤ（管理ＩＤについては、後述する）をエントリ監視部１２５へ通知する。
【００２８】
検索制御部１２０は、動作指示がエントリ更新であった場合、内部メモリ１１９およびメインメモリ１０３に格納されているエントリから指定されたエントリを検索し、該当するエントリに更新内容を上書きする。更新処理完了後、処理完了通知を処理結果通知部１１７へ通知し、更新したエントリの管理ＩＤをエントリ監視部１２５へ通知する。
【００２９】
検索制御部１２０は、動作指示がエントリ削除であった場合、内部メモリ１１９およびメインメモリ１０３に格納されているエントリから指定されたエントリを検索し、該当するエントリの削除を行う。削除処理完了後、処理完了通知を処理結果通知部１１７へ通知し、削除したエントリの管理ＩＤをエントリ監視部１２５へ通知する。
【００３０】
検索制御部１２０は、動作指示がエントリ検索であった場合、内部メモリ１１９およびメインメモリ１０３に格納されているエントリから該当するエントリの検索を行う。内部メモリ１１９内のエントリ検索が終了し該当するエントリが見つからなかった場合、メインメモリ１０３内のエントリ検索が続けて実行される。
【００３１】
比較部１２１は、動作指示により指定された検索キーと、内部メモリ１１９およびメインメモリ１０３から読み出したエントリデータとの比較を行う。比較部１２１は、検索キーと一致するエントリのエントリＩＤを検索結果として処理結果通知部１１７へ通知し、管理ＩＤをエントリ監視部１２５へ通知する。また検索キーと一致するエントリが見つかった時点で検索処理は完了となり、内部メモリ制御部１２２および外部メモリ制御部１２３が実行するエントリデータの読み出しも終了する。
【００３２】
内部メモリ制御部１２２は、検索制御部１２０の指示に従って、内部メモリ１１９に対し、エントリデータの書き込み、削除および読み出しを行う。エントリ検索時には、内部メモリ１１９から読み出したエントリデータを比較部１２１へ転送する。エントリ検索時のエントリデータ読み出しは内部メモリ１１９の先頭アドレスから順に実行される。
【００３３】
外部メモリ制御部１２３は、検索制御部１２０の指示に従って、メインメモリ１０３に対しエントリデータの書き込み、削除および読み出しを行う。エントリ検索時には、メインメモリ１０３から読み出したエントリデータを比較部１２１へ転送する。エントリ検索時のエントリデータ読み出しはメインメモリ１０３のエントリデータ格納領域の先頭アドレスから順に実行される。
【００３４】
内部メモリ制御部１２２による内部メモリ１１９のエントリデータ読み出しは、外部メモリ制御部１２３によるメインメモリ１０３のエントリデータ読み出しに比べ高速に実行される。そのため、内部メモリ１１９内の検索処理はメインメモリ１０３内の検索処理に比べ高速に実行できる。
【００３５】
エントリ移動部１２４は、エントリ監視部１２５から管理ＩＤで指定されたエントリの移動を行う。内部メモリ１１９、メインメモリ１０３の各メモリ内および各メモリ間のエントリデータの移動を可能とする。エントリデータの移動は、リクエスト処理中以外のタイミングで実行される。すなわち、内部メモリ１１９またはメインメモリ１０３へのアクセス中以外のタイミングでデータの移動を行う。
【００３６】
エントリ監視部１２５は、各エントリに対し特定のエントリ操作が行われてからの時間経過を監視する。時間経過はタイマー部１２６に時間計測指示を行うことにより計測する。時間計測を開始するエントリ操作としては、エントリ登録、エントリ更新、エントリ検索がある。エントリが削除された場合は、削除されたエントリの時間経過監視を停止する。またエントリ監視部１２５は、内部メモリ制御部１２２および外部メモリ制御部１２３に管理ＩＤを指定し、該当するエントリの情報を読み出すことができる。
【００３７】
エントリ監視部１２５は、検索制御部１２０の指示により各管理ＩＤの時間経過、エントリ情報に基づいて移動すべきエントリが存在するかの判断を行う。移動すべきエントリが存在している場合には、エントリ移動部１２４に対し管理ＩＤを通知し、エントリ移動指示を通知する。
【００３８】
時間計測はエントリ監視部１２５がタイマー部１２６に計測指示を通知することにより行う。計測を開始するタイミングは、エントリの登録時、エントリ検索ヒット時およびエントリ内のソケットステータスの更新時である。ソケットステータスにおける、各ステータスに滞在している時間を計測する。検索にヒットする、もしくはソケットステータスが更新されると、計測されていた時間はリセットされ、再計測を開始する。また、エントリ監視部１２５は各メモリ内の各グループにおける先頭管理ＩＤ（先頭管理ＩＤについては後述する）を保持している。
【００３９】
内部メモリ１１９には、検索対象となるエントリデータが格納される。内部メモリ１１９へのアクセスは、内部メモリ制御部１２２のみ可能である。
【００４０】
メモリに格納されるＴＣＰソケットペアのエントリデータ格納フォーマット例を図２に示す。ひとつのエントリデータは、通信相手ポート番号、自機ポート番号、通信相手ＩＰアドレス、エントリＩＤ、ソケットステータス、ヒット回数を含む。エントリＩＤは、サブＣＰＵ１０７〜サブＣＰＵ１１１によって管理されているソケットペアの識別番号である。
【００４１】
ソケットステータスには、エントリＩＤに対応するソケットの状態が格納される。ソケットの状態は更新リクエストにより更新される。ヒット回数には、エントリが登録されてから検索にヒットした回数が格納される。検索にヒットする毎に１が加算される。各エントリ登録領域には管理ＩＤがメモリアドレス順に割り当てられており、エントリが登録される際は、内部メモリ内の空きエントリ管理ＩＤ順に登録される。管理ＩＤは、検索部１１８の内部で使用されるエントリ識別番号である。エントリ登録時に内部メモリ１１９に空きエントリが無い場合は、内部メモリ１１９内のエントリのうちひとつをメインメモリ１０３へ移動させることで空きエントリを生成し、そこに登録を行う。
【００４２】
また、内部メモリ１１９とメインメモリ１０３に登録されるエントリデータのフォーマットと管理ＩＤは共通であり、論理的にひとつの検索テーブルが構成される。タイマー部１２６は、エントリ監視部１２５の指示に従って時間計測を行う。
【００４３】
なお上記機能ブロックは一例であり、複数の機能ブロックが一つの機能ブロックを構成してもよいし、何れかの機能ブロックが更に複数の機能ブロックを構成してもよい。
【００４４】
＜２．処理のシーケンス＞
図３は、本実施形態におけるサブＣＰＵ１（サブＣＰＵ１０７）、サブＣＰＵ３（サブＣＰＵ１０９）、検索装置１１５の動作を表すシーケンス図である
まずサブＣＰＵ３がＴＣＰ通信の接続を要求するパケットであるパケットＡを受信する（Ｆ３０１）。サブＣＰＵ３は、パケットＡの解析を行いＴＣＰ通信接続要求であることを判断する(Ｆ３０２）。サブＣＰＵ３は、ソケットを登録するためエントリＩＤを取得し(Ｆ３０３）、検索装置１１５に対してエントリ登録リクエストを通知する(Ｆ３０４）。エントリ登録リクエストには、自機ポート番号、通信相手ポート番号、通信相手ＩＰアドレス、エントリＩＤ、ソケットステータスが含まれる。
【００４５】
検索装置１１５は、エントリ登録リクエストを受けるとエントリ移動処理を行う(Ｆ３０５）。エントリ移動処理は、内部メモリ１１９にエントリ登録可能な領域が残っていない場合のみ実行される。内部メモリ１１９に格納されているエントリのうち一つをメインメモリ１０３へ移動する。移動するエントリは、エントリ監視部１２５により決定され、エントリ移動部１２４により移動が実行される。
【００４６】
検索装置１１５は、エントリ移動処理が完了するとエントリ登録処理を実行する(Ｆ３０６）。登録されるエントリは内部メモリ１１９に格納される。検索装置１１５がエントリ登録処理を行っている間に、サブＣＰＵ１がデータパケットＢを受信したとする(Ｆ３０７）。サブＣＰＵ１は、パケットＢの解析を行いデータパケットであることを判断し(Ｆ３０８）、パケットＢの通信が該当するソケットペアを特定するためにソケット検索を行う(Ｆ３０９）。サブＣＰＵ１は、検索装置１１５に対してエントリ検索リクエストを通知する(Ｆ３１０）。エントリ検索リクエストには検索キーが含まれる。ソケット検索における検索キーは、自機ポート番号、通信相手ポート番号、通信相手ＩＰアドレスである。検索装置１１５は、エントリ登録処理中(Ｆ３０６）であるため、リクエスト受付部１１６にエントリ検索リクエストを保持する。
【００４７】
検索装置１１５は、エントリ登録処理(Ｆ３０６）が完了すると、サブＣＰＵ３にエントリ登録完了通知を行う(Ｆ３１１）。エントリ登録完了通知により、サブＣＰＵ３は自身が通知したリクエスト処理が実行されたことを確認できる。
【００４８】
検索装置１１５は、サブＣＰＵ３にエントリ登録完了通知（Ｆ３１０）を行った後、エントリ検索処理を実行する(Ｆ３１２）。エントリ検索処理が完了すると、エントリ検索完了通知をサブＣＰＵ１に通知する(Ｆ３１３）。検索装置１１５は、エントリ検索処理(Ｆ３１２）が完了すると、エントリ移動処理を実行する(Ｆ３１４）。エントリ移動処理(Ｆ３１４）は、エントリ監視部１２５から移動すべきエントリがエントリ移動部１２４に通知されている場合に実行される。検索装置１１５は、エントリ移動処理(Ｆ３１４）が完了すると、次リクエストの受付が可能な状態となる。
【００４９】
＜３．エントリ格納方法の一例＞
図４は、内部メモリ１１９およびメインメモリ１０３へのエントリ格納方法の一例を示す。内部メモリ１１９は、メモリの全ての領域がエントリ格納領域として使用される。メインメモリ１０３は、一部の領域がエントリ格納領域として使用される。各エントリ領域には、図４に示すように管理ＩＤが割り当てられており、各エントリの内容は図２に示した通りである。
【００５０】
また、各メモリ内はグループに分けられている。内部メモリ１１９がグループＡ、グループＢの二つのグループに分けられている。管理ＩＤ０〜管理ＩＤ５０に格納されるエントリがグループＡ、管理ＩＤ５１〜管理ＩＤ１２７に格納されるエントリがグループＢとなる。同様にメインメモリ１０３内のエントリ格納用領域がグループａ、グループｂ、グループｃの三つのグループに分けられている。各メモリ内のグループ分割数は二つ以上であれば、いくつであっても構わない。
【００５１】
前述したように、検索処理は内部メモリ１１９の先頭アドレスから実行されるため、本実施形態においては、グループＡの先頭エントリから順に検索される。
【００５２】
また、各グループの先頭管理ＩＤがエントリ監視部１２５に記憶されている。図４においては、管理ＩＤ０がグループＡの先頭管理ＩＤ、管理ＩＤ５１がグループＢの先頭管理ＩＤとなる。エントリ移動部１２４により、内部メモリ１１９内のグループ間のエントリ移動、メインメモリ１０３内のグループ間のエントリ移動、内部メモリ１１９とメインメモリ１０３との間のエントリ移動が可能である。
【００５３】
内部メモリ１１９からメインメモリ１０３へ移動可能なエントリは、内部メモリ１１９の最も後方に位置するグループに含まれているエントリのみである。さらに内部メモリ１１９からメインメモリ１０３へ移動するエントリは、メインメモリ１０３の最も先方に位置するグループへ移動される。本実施形態においては、内部メモリ１１９からメインメモリ１０３への移動は、グループＢに含まれるエントリがグループａに移動するのみとなる。
【００５４】
同様に、メインメモリ１０３から内部メモリ１１９へ移動可能なエントリは、メインメモリ１０３の最も先方に位置するグループに含まれているエントリのみである。さらに、メインメモリ１０３から内部メモリ１１９へ移動するエントリは、内部メモリ１１９の最も後方に位置するグループへ移動される。本実施形態においては、メインメモリ１０３から内部メモリ１１９へ移動するエントリは、グループａに含まれるエントリがグループＢに移動するのみとなる。
【００５５】
次に、内部メモリ１１９内におけるグループＡおよびグループＢ間のエントリ移動について、以下に説明する。エントリ監視部１２５が、エントリ移動部１２４へグループＢ内のエントリのひとつをグループＡに移動する指示を行うとする。移動指示は、移動するエントリの管理ＩＤを指定することにより行われる。エントリ移動部１２４は、指定された管理ＩＤのエントリとグループＢの先頭管理ＩＤのエントリの情報を読み出し、格納場所を入れ替える。エントリ監視部１２５は、グループＢの先頭管理ＩＤ値に１を加算し、エントリ移動処理は終了となる。メインメモリ１０３内におけるグループ間の移動も同様の手順で実行される。
【００５６】
さらに、内部メモリ１１９とメインメモリ１０３との間のエントリ移動について、以下に説明する。エントリ監視部１２５が、エントリ移動部１２４へグループＢ内のエントリのひとつをメインメモリ１０３へ移動する指示を行うとする。エントリ移動部１２４は、指定された管理ＩＤ、グループｂの先頭管理ＩＤ、グループｃの先頭管理ＩＤの各エントリの情報を読み出す。グループＢから読み出したエントリ情報をグループｂの先頭エントリに格納し、グループｂの先頭エントリから読み出したエントリ情報をグループｃの先頭エントリに格納する。グループｃの先頭エントリから読み出したエントリ情報は、空きエントリに格納する。エントリ監視部１２５は、グループＢの先頭管理ＩＤ値、グループＣの先頭管理ＩＤおよび空きエントリの先頭管理ＩＤに１を加算し、エントリ移動処理は終了となる。
【００５７】
また、エントリ監視部１２５が、エントリ移動部１２４へグループａ内のエントリのひとつをメインメモリ１０３へ移動する指示を行うとする。グループＢ内に空きがある場合には、グループａから移動するエントリ情報を空きエントリに移動させ移動処理を終了する。グループＢ内に空きが無い場合には、グループＢ内のエントリから一つ選択し、グループａから移動させるエントリとエントリ情報の入替を行い、移動処理を終了する。エントリの移動は、エントリ一つ毎に行われても良いし、複数のエントリを同時に移動させても良い。
【００５８】
＜４．検索部が実施する処理＞
図５は、検索部１１８におけるエントリ移動処理の手順を示すフローチャートである。通信処理部１０５が起動した後複数のエントリが登録されると、図５に示すフローが開始される。ただし内部メモリ１１９に空きエントリがある場合には、内部メモリ１１９内のグループ間移動しか発生しない。本フローにおいては、図４に示したようにメインメモリ１０３にのみ空きエントリが存在している状態とする。検索部１１８は、起動後には、サブＣＰＵからの処理リクエストを常に待ち受けている。
【００５９】
Ｓ５０１において、検索部１１８は、エントリ登録リクエストを受信したか否かを判定する。エントリ登録リクエストを受信したと判定された場合（Ｓ５０１；Ｙｅｓ）、Ｓ５０２へ進む。一方、エントリ登録リクエストを受信していないと判定された場合（Ｓ５０１；Ｎｏ）、Ｓ５０４へ進む。
【００６０】
Ｓ５０２において、検索部１１８は、内部メモリ１１９に空きエントリが存在するか否かを判定する。空きエントリの存在は、検索制御部１２０がエントリ監視部１２５の空きエントリ先頭管理ＩＤを確認することにより行う。空きエントリが存在すると判定された場合（Ｓ５０２；Ｙｅｓ）、エントリ移動は発生せず、本フローは終了する。一方、空きエントリが存在していないと判定された場合（Ｓ５０２；Ｎｏ）、Ｓ５０３へ進む。
【００６１】
Ｓ５０３において、検索部１１８は、内部メモリ１１９からひとつのエントリを選択し、メインメモリ１０３へ移動する処理を行う。エントリの選択は、検索制御部１２０の指示によりエントリ監視部１２５によって実行され、移動処理はエントリ移動部124により実行される。移動処理が完了すると、本フローは終了する。移動処理が完了した後に、検索制御部１２０によりエントリ登録処理が実行され、新規エントリは内部メモリ１１９内に登録される。
【００６２】
Ｓ５０４において、検索部１１８は、エントリ削除リクエストを受信したか否かを判定する。エントリ削除リクエストを受信したと判定された場合（Ｓ５０４；Ｙｅｓ）、Ｓ５０５へ進む。一方、エントリ削除リクエストを受信していないと判定された場合（Ｓ５０４；Ｎｏ）、Ｓ５０６へ進む。
【００６３】
Ｓ５０５において、検索制御部１２０は、エントリ削除が完了すると、エントリ監視部１２５に指示してエントリ移動部１２４にエントリ移動処理を開始させる。削除されたエントリが内部メモリ１１９内のエントリであった場合には、メインメモリ１０３からひとつのエントリを選択し、内部メモリ１１９へ移動処理を行う。エントリの選択はエントリ監視部１２５によって実行され、移動処理はエントリ移動部１２４により実行される。削除されたエントリがメインメモリ１０３内のエントリであった場合には、特に移動処理は行わない。移動処理が完了すると、本フローは終了する。
【００６４】
Ｓ５０６において、検索制御部１２０は、エントリ更新リクエストを受信したか否かを判定する。エントリ更新リクエストを受信したと判定された場合（Ｓ５０６；Ｙｅｓ）、Ｓ５０７へ進む。一方、エントリ更新リクエストを受信していないと判定された場合（Ｓ５０６；Ｎｏ）、Ｓ５０８へ進む。
【００６５】
Ｓ５０７において、検索制御部１２０は、エントリ更新が完了すると、エントリ監視部１２５に指示してエントリ移動部１２４にエントリ移動処理を開始させる。そして更新したエントリの移動処理を行う。移動処理が完了すると、本フローは終了する。
【００６６】
Ｓ５０８において、検索制御部１２０は、エントリ検索リクエストを受信したか否かを判定する。エントリ検索リクエストを受信したと判定された場合（Ｓ５０８；Ｙｅｓ）、Ｓ５０９へ進む。一方、エントリ検索リクエストを受信していないと判定された場合（Ｓ５０８；Ｎｏ）、Ｓ５１１へ進む。
【００６７】
Ｓ５０９において、検索制御部１２０は、エントリ検索の完了後、検索がヒットしたか否かを判定する。検索がヒットしたと判定された場合（Ｓ５０９；Ｙｅｓ）、Ｓ５１０へ進む。一方、検索がヒットしていないと判定された場合（Ｓ５０９；Ｎｏ）、Ｓ５１１へ進む。
【００６８】
Ｓ５１０において、検索制御部１２０は、エントリ監視部１２５に指示してエントリ移動部１２４にエントリ移動処理を開始させ、検索にヒットしたエントリの移動処理を行う。エントリ移動処理が完了すると、本フローは終了する。
【００６９】
Ｓ５１１において、エントリ監視部１２５によりエントリ移動の必要があると判断された場合には、エントリ移動部１２４にエントリ移動処理を行わせる。Ｓ５１１の処理は、検索部１１８がリクエストを何も受信しておらず、アイドル状態にある場合に実行される。エントリ移動処理の必要が無い場合はエントリ移動処理を開始せず本フローを終了する。また、エントリ移動処理が必要と判断された場合、エントリ移動処理を実行し、完了すると本フローを終了する。
【００７０】
＜５．エントリ監視部が実施する処理＞
次に、図５を参照して説明したエントリ移動処理が実行される際のエントリ監視部１２５の動作について説明を行う。まず図６は、ＴＣＰソケットにおけるソケットステータスの遷移例を示す。
【００７１】
以下図６について説明する。ＴＣＰソケットの各ステータスはＲＦＣ（Ｒｅｑｕｅｓｔ  Ｆｏｒ  Ｃｏｍｍｅｎｔ）７９３に記載されているものに従っている。Ｆ６０１は"ＣＬＯＳＥ"であり、未使用状態を意味する。通信相手からＳＹＮ（通信開始要求）を待ち受ける場合はＦ６０２へ遷移する。また通信相手に対し、ＳＹＮを送信する場合はＦ６０４へ遷移する。
【００７２】
Ｆ６０２は"ＬＩＳＴＥＮ"であり、ＳＹＮ受信待ち状態を意味する。ＳＹＮを受信するとＦ６０３へ遷移する。Ｆ６０３は"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"であり、通信相手からＳＹＮを受信した状態を意味する。ＳＹＮに対するＳＹＮ／ＡＣＫ（応答）を通信相手に送信し、それに対するＡＣＫを受信するとＦ６０５へ遷移する。Ｆ６０４は"ＳＹＮ＿ＳＥＮＴ"であり、通信相手に送信したＳＹＮに対するＡＣＫ受信待ち状態を意味する。通信相手からＳＹＮ／ＡＣＫを受信すると、それに対するＡＣＫの送信を行いＦ６０５へ遷移する。
【００７３】
Ｆ６０５は"ＥＳＴＡＢＬＩＳＨＥＤ"であり、ＴＣＰの接続が確立している状態を意味する。データ通信はこのステータスにおいて行われる。通信相手からＦＩＮ（送信終了）を受信するとＦ６０６へ遷移する。また通信相手に対しＦＩＮを送信した場合には、Ｆ６０８へ遷移する。Ｆ６０６は、"ＣＬＯＳＥ＿ＷＡＩＴ"であり、通信相手からＦＩＮを受信した状態を意味する。通信相手に対しＦＩＮを送信するとＦ６０７へ遷移する。Ｆ６０７は、"ＬＡＳＴ＿ＡＣＫ"であり、通信相手から送信したＦＩＮに対するＡＣＫの受信待ち状態を意味する。ＡＣＫを受信するとＦ６０１の"ＣＬＯＳＥＤ"に遷移する。
【００７４】
Ｆ６０８は、"ＦＩＮ＿ＷＡＩＴ＿１"であり、通信相手にＦＩＮを送信した状態を意味する。ＦＩＮに対するＡＣＫを受信するとＦ６０９へ遷移する。ただし、通信相手からのＡＣＫ受信より先にＦＩＮを受信した場合はＦ６１０へ遷移する。
【００７５】
Ｆ６０９は"ＦＩＮ＿ＷＡＩＴ＿２"であり、通信相手からＦＩＮに対するＡＣＫを受信した状態を意味する。通信相手からＦＩＮを受信し、それに対するＡＣＫを送信するとＦ６１１へ遷移する。Ｆ６１０は、"ＣＬＯＳＩＮＧ"であり、通信相手からＦＩＮに対するＡＣＫを受信すると、Ｆ６１１へ遷移する。Ｆ６１１は"ＴＩＭＥ＿ＷＡＩＴ"であり、ソケット終了待ち状態である。しばらく待ったあと、Ｆ６０１の"ＣＬＯＳＥＤ"に遷移する。一般的に"ＴＩＭＥ＿ＷＡＩＴ"状態は３０秒から１２０秒程度の時間が設定されている。
【００７６】
[エントリ登録リクエスト時の処理]
次に、図５及び図７のフローチャートを参照して、エントリ登録リクエスト時におけるエントリ監視部１２５の処理手順を説明する。
【００７７】
図５におけるＳ５０３の処理は、エントリ登録リクエスト時におけるエントリ移動である。エントリ監視部１２５は、内部メモリ１１９内のグループＢからエントリを一つ選択し、エントリ移動部１２４へ通知する。図５においてＳ５０３へフローが進むと、エントリ選択処理が開始される。エントリ監視部１２５はエントリ選択にあたり、グループＢ内のエントリのソケットステータスと、必要に応じてさらに当該ソケットステータスに遷移してからの経過時間をパラメータとして参照する。
【００７８】
まず、Ｓ７０１において、エントリ監視部１２５は、ソケットステータスが"ＴＩＭＥ＿ＷＡＩＴ"のものがあるか否かを判定する。"ＴＩＭＥ＿ＷＡＩＴ"が存在すると判定された場合（Ｓ７０１；Ｙｅｓ）、Ｓ７０２へ進む。一方、"ＴＩＭＥ＿ＷＡＩＴ"が存在しないと判定された場合（Ｓ７０１；Ｎｏ）、Ｓ７０５へ進む。
【００７９】
Ｓ７０２において、エントリ監視部１２５は、"ＴＩＭＥ＿ＷＡＩＴ"が複数存在するか否かを判定する。"ＴＩＭＥ＿ＷＡＩＴ"はタイムアウト待ちの状態であるため、検索される可能性は低い。そのため、検索開始位置から離れてしまっても検索処理時間に影響する可能性は低い。"ＴＩＭＥ＿ＷＡＩＴ"が複数存在すると判定された場合（Ｓ７０２；Ｙｅｓ）、Ｓ７０４へ進む。一方、"ＴＩＭＥ＿ＷＡＩＴ"が一つ存在すると判定された場合（Ｓ７０２；Ｎｏ）、Ｓ７０３へ進む。
【００８０】
Ｓ７０３において、エントリ監視部１２５は、その一つを移動するエントリとして決定する。その後本フローは終了する。Ｓ７０４において、エントリ監視部１２５は、複数存在するエントリについて、タイマー部１２６の時間計測値を参照し比較を行う。そして、当該比較結果に基づいて例えば時間計測値が最も大きいものを移動するエントリとして選択する。その後本フローは終了する。
【００８１】
Ｓ７０５において、エントリ監視部１２５は、ソケットステータスが"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"かつ一定時間以上経過しているものが存在するか否かを判定する。"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"は通信相手からのＡＣＫを待ち受けている状態である。一般的にこのステータスは短時間で終了するが、ＳＹＮ ｆｌｏｏｄ攻撃を受けたときはこのステータスに留まることになる。実際にＳＹＮ ｆｌｏｏｄ攻撃であった場合には、検索されることは無い。そのため、検索開始位置から離れてしまっても検索処理時間に影響する可能性は低い。一定時間以上経過した"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"が存在すると判定された場合（Ｓ７０５；Ｙｅｓ）、Ｓ７０６へ進む。一方、一定時間以上経過した"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"が存在しないと判定された場合（Ｓ７０５；Ｎｏ）、Ｓ７０９へ進む。
【００８２】
Ｓ７０６において、エントリ監視部１２５は、"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"が複数存在するか否かを判定する。"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"が複数存在すると判定された場合（Ｓ７０６；Ｙｅｓ）、Ｓ７０８へ進む。一方、"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"が一つのみ存在すると判定された場合（Ｓ７０６；Ｎｏ）、Ｓ７０７へ進む。
【００８３】
Ｓ７０７において、エントリ監視部１２５は、その一つを移動するエントリとして決定する。その後本フローは終了する。Ｓ７０８において、エントリ監視部１２５は、タイマー部１２６の時間計測値を参照して比較を行う。そして当該比較結果に基づいて計測値が最も大きいものを移動するエントリとして選択する。その後本フローは終了する。
【００８４】
Ｓ７０９において、エントリ監視部１２５は、"ＥＳＴＡＢＬＩＳＨＥＤ"以外のステータスであるソケットが存在するか否かを判定する。当該ソケットが存在すると判定された場合（Ｓ７０９；Ｙｅｓ）、Ｓ７１０へ進む。一方、当該ソケットが存在しないと判定された場合（Ｓ７０９；Ｎｏ）、Ｓ７１３へ進む。
【００８５】
Ｓ７１０において、エントリ監視部１２５は、"ＥＳＴＡＢＬＩＳＨＥＤ"以外のステータスであるソケットが複数存在するか否かを判定する。当該ソケットが複数存在すると判定された場合（Ｓ７１０；Ｙｅｓ）、Ｓ７１２へ進む。一方、当該ソケットが一つのみ存在すると判定された場合（Ｓ７１０；Ｎｏ）、Ｓ７１１へ進む。
【００８６】
Ｓ７１１において、エントリ監視部１２５は、その一つを移動するエントリとして決定する。その後本フローは終了する。Ｓ７１２において、エントリ監視部１２５は、タイマー部１２６の時間計測値を参照して比較を行う。そして当該比較結果に基づいて計測値が最も大きいものを移動するエントリとして選択する。その後本フローは終了する。
【００８７】
Ｓ７１３において、エントリ監視部１２５は、"ＥＳＴＡＢＬＩＳＨＥＤ"のソケットに対して、タイマー部１２６の時間計測値を参照して比較を行う。そして当該比較結果に基づいて計測値が最も大きいものを移動するエントリとして選択する。"ＥＳＴＡＢＬＩＳＨＥＤ"のステータスであるソケットは通信中であることを意味している。しかし常に通信しているとは限らず、長時間に渡り検索が行われない場合もある。そのため、通信頻度が低いソケットに関しては検索開始位置から離れてしまっても検索処理時間に影響する可能性は低いと言える。その後本フローは終了する。
【００８８】
[エントリ削除リクエスト時の処理]
次に、図５及び図８のフローチャートを参照して、エントリ削除リクエスト時におけるエントリ監視部１２５の処理手順を説明する。図５におけるＳ５０５の処理は、エントリ削除リクエスト時におけるエントリ移動である。削除するエントリが内部メモリ１１９内のエントリであった場合、図８のエントリ選択処理が開始される。エントリ監視部１２５は、メインメモリ１０３のグループａからエントリを一つ選択し、エントリ移動部１２４へ通知する。
【００８９】
Ｓ８０１において、エントリ監視部１２５は、一定時間経過していない"ＥＳＴＡＢＬＩＳＨＥＤ"のソケットが存在するか否かを判定する。ＴＣＰ通信では、パケットが連続で送信されることが統計的に多いため、一度検索にヒットしたものは直近に再び検索対象となる可能性が高い。よって一定時間内に検索された履歴のある"ＥＳＴＡＢＬＩＳＨＥＤ"のソケットは、より検索開始位置に近づけることで検索処理にかかる時間が短縮される可能性が高くなる。当該ソケットが存在すると判定された場合（Ｓ８０１；Ｙｅｓ）、Ｓ８０２へ進む。一方、当該ソケットが存在しないと判定された場合（Ｓ８０１；Ｎｏ）、Ｓ８０３へ進む。
【００９０】
Ｓ８０２において、エントリ監視部１２５は、各ソケットに対して、タイマー部１２６の時間計測値を参照して比較を行う。そして当該比較結果に基づいて計測値が最も小さいものを移動するエントリとして選択する。その後本フローは終了する。
【００９１】
Ｓ８０３において、エントリ監視部１２５は、受信待ちのステータスであるソケットが存在するか否かを判定する。具体的には"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"、"ＳＹＮ＿ＳＥＮＴ"、"ＦＩＮ＿ＷＡＩＴ＿１"、"ＦＩＮ＿ＷＡＩＴ＿２"、"ＣＬＯＳＩＮＧ"、"ＬＡＳＴ＿ＡＣＫ"の六つが該当する。一般的にこれらのステータスは短時間で終了するとされており、直近に検索対象となる可能性がある。何れかのステータスを持つソケットが存在すると判定された場合（Ｓ８０３；Ｙｅｓ）、Ｓ８０４へ進む。一方、該当するソケットが存在しないと判定された場合（Ｓ８０３；Ｎｏ）、Ｓ８０５へ進む。
【００９２】
Ｓ８０４において、エントリ監視部１２５は、各受信待ちソケットに対して、タイマー部１２６の時間計測値を参照して比較を行う。そして当該比較結果に基づいて計測値が最も小さいものを移動するエントリとして選択する。その後本フローは終了する。
【００９３】
Ｓ８０５において、エントリ監視部１２５は、一定時間内に検索された"ＥＳＴＡＢＬＩＳＨＥＤ"または受信待ちソケット以外のソケットに対して、タイマー部１２６の時間計測値を参照して比較を行う。そして当該比較結果に基づいて計測値が最も小さいものを移動するエントリとして選択する。その後本フローは終了する。
【００９４】
[エントリ検索ヒット時の処理]
さらに、エントリ更新時およびエントリ検索ヒット時におけるエントリ監視部１２５の動作について説明する。図５におけるＳ５０７およびＳ５１０において適用される。
【００９５】
エントリ更新の対象であるエントリ、および検索処理の結果ヒットしたエントリに対して移動処理を行う。例えばグループＢ内にあるエントリが更新対象であった場合、更新処理を完了した後、グループＡへ移動を行う。また、例えばグループｃ内にあるエントリが検索にヒットした場合、グループｂへの移動を行う。ただし、エントリ更新処理がメインメモリ１０３内に格納されているエントリに対するソケットステータスを"ＴＩＭＥ＿ＷＡＩＴ"に変更するものであった場合は、移動処理は行われないものとする。
【００９６】
ソケット情報が更新された場合、直近に該ソケットに対して何らかの通信が行われる可能性が高い。また一度検索にヒットしたものは直近に再び検索対象となる可能性が高い。よってこれらのソケットを、より検索開始位置に近づけることで検索処理にかかる時間が短縮される可能性が高くなる。
【００９７】
また、更新対象のエントリもしくは検索にヒットしたエントリがグループａ内のエントリであった場合は、グループＢ内のエントリと入れ替える。入れ替えるエントリをグループＢ内から選択する方法は図７のフローチャートに従うものとする。
【００９８】
[リクエスト未発行時の処理]
さらに、検索装置１１５が実行すべきリクエストが発行されない間におけるエントリ監視部１２５の動作について説明する。また、エントリ検索にヒットするものが無かった場合にも同様の動作を行う。
【００９９】
リクエストが発行されていない間も、エントリ監視部１２５は各エントリの監視を継続し、移動させるべきエントリが存在するか否かを判定する。グループＡ内にあるエントリに関しては、経過時間によって判定を行う。時間計測開始から一定時間経過したエントリについては、グループＢへ移動することを決定してエントリ移動部１２４へ通知する。
【０１００】
グループＢ内にあるエントリに関しては、経過時間およびソケットステータスにより判定を行う。判定方法は図７に示したフローチャートに従うものとする。移動するエントリに決定したものはグループａ内にあるエントリと入れ替えを行う。グループａからグループＢへ移動するエントリは図８のフローチャートに従って決定される。
【０１０１】
また、この場合グループＢ、グループａから選択された各エントリについて比較を行い、どちらのエントリをグループＢへ格納しておくか判定する。グループａから選択したエントリをグループＢへ格納しておくことを決定した場合のみ、エントリの入れ替えを行う。
【０１０２】
より具体的に、図９のフローチャートを参照して、エントリ監視部１２５がどちらのエントリを選択するかを判定する処理手順を説明する。エントリ監視部１２５がグループＢ内のエントリを移動するとの判定を行い、グループａ内の移動するエントリが選択されるとフローが開始される。
【０１０３】
Ｓ９０１において、エントリ監視部１２５は、選択された二つのエントリに"ＴＩＭＥ＿ＷＡＩＴ"が存在するか否かを判定する。"ＴＩＭＥ＿ＷＡＩＴ"が存在すると判定された場合（Ｓ９０１；Ｙｅｓ）、Ｓ９０２へ進む。一方、"ＴＩＭＥ＿ＷＡＩＴ"が存在しないと判定された場合（Ｓ９０１；Ｎｏ）、Ｓ９０３へ進む。
【０１０４】
Ｓ９０２において、エントリ監視部１２５は、一方のエントリのみ"ＴＩＭＥ＿ＷＡＩＴ"である場合は、該エントリをメインメモリ１０３へ格納する判定を行う。両エントリが"ＴＩＭＥ＿ＷＡＩＴ"である場合は、経過時間の比較を行い、経過時間の長い方をメインメモリ１０３へ格納する判定を行う。その後本フローは終了する。
【０１０５】
Ｓ９０３において、エントリ監視部１２５は、選択された二つのエントリに"ＥＳＴＡＢＬＩＳＨＥＤ"が存在するか否かを判定する。"ＥＳＴＡＢＬＩＳＨＥＤ"が存在すると判定された場合（Ｓ９０３；Ｙｅｓ）、Ｓ９０４へ進む。一方、"ＥＳＴＡＢＬＩＳＨＥＤ"が存在しないと判定された場合（Ｓ９０３；Ｎｏ）、Ｓ９０５へ進む。
【０１０６】
Ｓ９０４において、エントリ監視部１２５は、一方のエントリのみ"ＥＳＴＡＢＬＩＳＨＥＤ"である場合は、該エントリを内部メモリ１１９へ格納する判定を行う。両エントリが"ＥＳＴＡＢＬＩＳＨＥＤ"である場合は、経過時間の比較を行い、経過時間の長い方をメインメモリ１０３へ格納する判定を行う。その後本フローは終了する。
【０１０７】
Ｓ９０５において、エントリ監視部１２５は、選択された二つのエントリに、"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"へ遷移した後、一定時間経過したものが存在するか否かを判定する。該当エントリが存在すると判定された場合（Ｓ９０５；Ｙｅｓ）、Ｓ９０６へ進む。一方、該当エントリが存在しないと判定された場合（Ｓ９０５；Ｎｏ）、Ｓ９０７へ進む。
【０１０８】
Ｓ９０６において、エントリ監視部１２５は、一方のエントリのみ"ＳＹＮ＿ＲＥＣＥＩＶＥＤ"かつ一定時間経過したものである場合は、該エントリをメインメモリ１０３へ格納する判定を行う。両エントリ共に該当する場合は、経過時間の比較を行い、経過時間の長い方をメインメモリ１０３へ格納する判定を行う。その後本フローは終了する。
【０１０９】
Ｓ９０７において、エントリ監視部１２５は、両エントリの経過時間の比較を行い、経過時間の長い方をメインメモリ１０３へ格納する判定を行う。その後本フローは終了する。図９のフローが終了し、入れ替えを行う判定が行われた場合には、エントリ監視部１２５は両エントリの管理ＩＤをエントリ移動部１２４へ通知する。
【０１１０】
さらに、グループａ内にあるエントリに関しては、経過時間およびヒット回数によって判定する。時間計測開始から一定時間経過したエントリをグループｂ若しくはグループｃへ移動する。この時エントリデータ内のヒット回数に応じてどちらのグループへ移動させるかを決定する。例えばヒット回数に閾値を設け、閾値を超えているものをグループｂへ、閾値以下であればグループｃへ移動する。これにより、より検索された回数が多いものが検索開始位置に近い場所に格納されることになる。また、グループｂとグループｃとの間におけるエントリ移動は行わないものとする。
【０１１１】
本実施形態においてはヒット回数を判定基準の一つとしたが、ＴＣＰ通信におけるパラメータであっても構わない。例えば、ＲＴＴ（Ｒｏｕｎｄ  Ｔｒｉｐ  Ｔｉｍｅ）値を判定基準としても良い。ＲＴＴ値はＴＣＰ通信における往復遅延時間である。ＲＴＴ値が小さい程、通信相手からの応答時間が短いと言えるため、エントリ検索頻度が高くなると言える。ＲＴＴ値が小さいものをグループｂへ、大きいものをグループｃへ移動する判定基準としても構わない。
【０１１２】
また本実施形態においては、内部メモリ１１９に格納されるエントリとメインメモリ１０３に格納されるエントリとは、共有されないように管理されている。本発明は、メインメモリ１０３に全てのエントリが登録されていて、検索にヒットする可能性が高いエントリが内部メモリ１１９にキャッシュされる管理方法においても適用可能である。
【０１１３】
また本実施形態においては、複数のサブＣＰＵによりプロトコル処理を行う構成としたが、ひとつのサブＣＰＵによりプロトコル処理を実施しても同様の効果が得られる。
【０１１４】
以上説明したように、本発明の一実施形態に係る情報処理装置は、データ（エントリ）を格納する内部メモリ（内部メモリ１１９）と外部メモリ（メインメモリ１０３）とを備える情報処理装置１０であって、データの処理リクエスト（エントリ登録リクエスト、エントリ削除リクエスト、エントリ更新リクエスト、エントリ検索リクエスト）を受け付ける受付部（リクエスト受付部１１６）と、処理リクエストに応じて処理（登録処理、削除処理、更新処理、検索処理）を実行する処理部（検索部１１８）と、内部メモリまたは外部メモリに格納された各データのパラメータ（ソケットステータス、経過時間等）を監視する監視部（エントリ監視部１２５）と、処理の実行に際して、パラメータに基づき内部メモリと外部メモリとの各メモリ内または各メモリ間でデータを移動する移動部（データ移動部１１２、エントリ移動部１２４）とを備えている。
【０１１５】
本実施形態によれば、検索対象となるエントリの内検索ヒットの可能性が高いエントリを内部メモリに保持することで、検索処理開始から検索処理完了までの処理時間を短縮することが可能となる。
【０１１６】
（その他の実施形態）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【０１１７】
１０１…主処理部、１０２…メインＣＰＵ、１０３…メインメモリ、１０４…メインバス、１０５…通信処理部、１０６…ローカルバス、１０７〜１１１…サブＣＰＵ１〜サブＣＰＵ５、１１２…データ移動部、１１３…有線インターフェイス、１１４…無線インターフェイス、１１５…検索装置、１１６…リクエスト受付部、１１７…処理結果通知部、１１８…検索部、１１９…内部メモリ、１２０…検索制御部、１２１…比較部、１２２…内部メモリ制御部、１２３…外部メモリ制御部、１２４…エントリ移動部、１２５…エントリ監視部、１２６…タイマー部
【図１】
2015149023.tif 000003
【図２】
2015149023.tif 000004
【図３】
2015149023.tif 000005
【図４】
2015149023.tif 000006
【図５】
2015149023.tif 000007
【図６】
2015149023.tif 000008
【図７】
2015149023.tif 000009
【図８】
2015149023.tif 000010
【図９】
2015149023.tif 000011