(57)【特許請求の範囲】
【請求項１】
大きさが限定された記憶領域に新たなログ情報を記録する際に、直近のログ情報を密に記憶する第１ログ領域に記録するか、長期のログ情報を疎に記憶する第２ログ領域に記録するかを判定する判定部と、
前記判定部により前記第１ログ領域に記憶すると判定された場合に、前記新たなログ情報を第１ログ領域に書き込む第１書込部と、
前記判定部により前記第２ログ領域に記憶すると判定された場合に、前記新たなログ情報を第２ログ領域に書き込む第２書込部と、
前記記憶領域に空きがない場合に、前記第１ログ領域及び第２ログ領域の位置情報を修正する修正部と
を有することを特徴とする情報処理装置。
【請求項２】
前記第１書込部は、正の整数ｐについてｐ個のログ情報のうちｐ−１個のログ情報を第１ログ領域に書き込み、
前記第２書込部は、ｐ個のログ情報のうち１個のログ情報を第２ログ領域に書き込み、
前記修正部は、前記第２ログ領域に空きがない場合に、１個のログ情報を記憶する要素領域を前記第１ログ領域の大きさをｐで割った商の数だけ前記第１ログ領域から前記第２ログ領域に変更し、前記第１ログ領域の大きさを前記商にｐ−１を乗じた数に変更して前記位置情報を修正することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
正の整数ｍについて少なくとも直近のｍ個のログ情報を前記第１ログ領域に連続保持する場合、前記修正部は、前記商にｐ−１を乗じた数がｍに（ｐ−１）／ｐを乗じた数以上でない場合に、前記第２ログ領域から所定の個数の要素領域を古いログ情報を格納する順番に前記第１ログ領域に変更して前記位置情報を修正することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
コンピュータが、
大きさが限定された記憶領域に新たなログ情報を記録する際に、直近のログ情報を密に記憶する第１ログ領域に記録するか、長期のログ情報を疎に記憶する第２ログ領域に記録するかを判定し、
前記第１ログ領域に記憶すると判定された場合に、前記新たなログ情報を第１ログ領域に書き込み、
前記第２ログ領域に記憶すると判定された場合に、前記新たなログ情報を第２ログ領域に書き込み、
前記記憶領域に空きがない場合に、前記第１ログ領域及び第２ログ領域の位置情報を修正する
処理を実行することを特徴とするログ記録方法。
【請求項５】
コンピュータに、
大きさが限定された記憶領域に新たなログ情報を記録する際に、直近のログ情報を密に記憶する第１ログ領域に記録するか、長期のログ情報を疎に記憶する第２ログ領域に記録するかを判定し、
前記第１ログ領域に記憶すると判定された場合に、前記新たなログ情報を第１ログ領域に書き込み、
前記第２ログ領域に記憶すると判定された場合に、前記新たなログ情報を第２ログ領域に書き込み、
前記記憶領域に空きがない場合に、前記第１ログ領域及び第２ログ領域の位置情報を修正する
処理を実行させることを特徴とするログ記録プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、ログ記録方法及びログ記録プログラムに関する。
【背景技術】
【０００２】
大きさが有限のバッファにログデータを記録する場合、直近のデータは密に残し、古いデータは疎でもよいのでできるだけ長い期間残すことが望まれる。図１１は、このようなログデータの記録方法を説明するための図である。図１１に示す方法では、少なくとも直近のｍ個のデータは保持され、直近のｍ個以外の古いデータについては、ｐ個に１個のデータができるだけ古い時刻まで保持される。
【０００３】
図１２は、ログデータの記録例を示す図である。図１２では、バッファのサイズは２０である。バッファの各データの格納場所である要素領域は、Ａ〜Ｔのアドレスが付けられる。また、できるだけ多くのデータを残し、直近の１０個の連続データを残し、かつ、５個に１個のデータを残すことによりできるだけ長い期間のデータを長期データとして残すようにデータがバッファに記録される。
【０００４】
図１２に示すように、１循目では、シーケンス番号が０番〜１９番のデータがそれぞれＡ〜Ｔに順番に書き込まれる。そして、２循目では、２０番のデータは０番のデータを残すためにＢに上書きされる。そして、２１〜２３のデータがそれぞれＣ〜Ｅに上書きされる。次に、２４番のデータについては、５個に１個のデータを残すために５番のデータを記憶するＦには上書きされず、Ｇに上書きされる。同様に、１０番のデータを記憶するＫ、１５番のデータを記憶するＰにはデータが上書きされず、これらの要素領域はスキップされる。
【０００５】
そして、３循目では、０番、２０番、５番、２５番、１０番、３０番、１５番、３５番のデータをそれぞれ記憶するＡ、Ｂ、Ｆ、Ｈ、Ｋ、Ｎ、Ｐ、Ｔにはデータが上書きされず、これらの要素領域はスキップされる。同様に、４循目では、０番、２０番、５番、２５番、４０番、１０番、３０番、１５番、４５番、３５番のデータをそれぞれ記憶するＡ、Ｂ、Ｆ、Ｈ、Ｉ、Ｋ、Ｎ、Ｐ、Ｑ、Ｔにはデータが上書きされず、これらの要素領域はスキップされる。
【０００６】
そして、５循目では、０番、２０番のデータをそれぞれ記憶するＡ、Ｂがスキップされた後、５８番、５９番のデータがそれぞれＣ、Ｄに書き込まれる。そして、５０番、５番のデータをそれぞれ記憶するＥ、Ｆがスキップされた後、Ｇが記憶するデータは５１番のデータであって直近の１０個のデータに含まれるため、Ｇはスキップされる。同様に、Ｈ〜Ｔは、５個に１個の長期データを記憶するか直近の１０個に含まれるデータを記憶するため、スキップされる。
【０００７】
そして、６循目で、最も古い長期データである０番のデータを記憶するＡに６０番のデータが上書きされる。そして、Ｂ〜Ｆは５個に１個の長期データを記憶するか直近の１０個に含まれるデータを記憶するためスキップされ、６１番のデータがＧに上書きされる。そして、Ｈ、Ｉは５個に１個の長期データを記憶するためスキップされ、６２番のデータがＪに上書きされる。そして、Ｋは５個に１個の長期データを記憶するためスキップされ、６３番、６４番のデータがそれぞれＬ、Ｍに上書きされる。そして、Ｎ〜Ｔは、５個に１個の長期データを記憶するか直近の１０個に含まれるデータを記憶するため、スキップされる。そして、７循目で、最も古い長期データである５番のデータを記憶するＦに６５番のデータが上書きされ、６６番、６７番のデータがそれぞれＲ、Ｓに上書きされる。
【０００８】
なお、データの記録に関連する技術として、キャッシュメモリをＮ個のセル毎に分割し、ディスク上のアドレスを所定値Ｎで除したときの余りに対応する位置からキャッシュメモリへの書込みを行うことで、キャッシュメモリの検索速度を高める技術がある。
【０００９】
また、不揮発性メモリのアクセスにおいて、第１の消去単位の未書込領域がなくなると、第２の消去単位の有効データを第３の消去単位に書き込んで新第１の消去単位に置き換えることでアクセスの高速化を図る技術がある。また、分割された各メモリ領域内に設けられた書き換え用のバッファ領域を利用して、分割された各メモリ領域に記録されたデータを更新することで高速にデータを検索することを可能とする技術がある。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００３−３３０７９６号公報
【特許文献２】特開２０１１−１２８８２６号公報
【特許文献３】特開２００８−０４０５９４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、図１２に示したログ記録方法では、バッファにデータを上書きする場合、（１）上書きするデータのシーケンス番号がｐの倍数でなく、ｍ個以上古いデータを記憶する要素領域、又は（２）上書きするデータがｐの倍数で最も古いデータを記憶する要素領域を探す必要がある。図１２に示した例では、２循目の２０番〜２３番がそれぞれ上書きされるＢ〜Ｅが（１）の要素領域の例であり、６循目の６０番が上書きされるＡが（２）の要素領域の例である。このような上書きできる要素領域を探す処理は、時間がかかるため、ログデータを高速に記録することができないという問題がある。
【００１２】
図１３は、図１２に示したログ記録方法の処理の疑似コードの例を示す図である。図１３において、ｖａｌはデータであり、ｂｕｆ[]．ｖａｌは、データの格納場所であり、ｂｕｆ[]．ｓｅｑは、対応するシーケンス番号であり、ａｄｄｒはバッファのインデックスである。また、代入文（ａ）により（１）の要素領域にデータが格納され、代入文（ｂ）により（２）の要素領域にデータが格納される。また、ｗｈｉｌｅ（１）と代入文（ｃ）によりａｄｄｒが１ずつ増加されながら、データを格納する要素領域が探索される。この探索に時間がかかる。また、ログデータの記録は、通常割込み処理で行われるため、高速に実行される必要があり、ログデータの書き込みは高速に実行される必要がある。なお、代入文（ｃ）において、ｘ＋＋は、ｘ＝ｘ＋１を表す。
【００１３】
本発明は、１つの側面では、ログデータを高速に記録することを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示する情報処理装置は、１つの態様において、判定部と、第１書込部と、第２書込部と、修正部とを有する。前記判定部は、大きさが限定された記憶領域に新たなログ情報を記録する際に、直近のログ情報を密に記憶する第１ログ領域に記録するか、長期のログ情報を疎に記憶する第２ログ領域に記録するかを判定する。前記第１書込部は、前記判定部により前記第１ログ領域に記憶すると判定された場合に、前記新たなログ情報を第１ログ領域に書き込む。前記第２書込部は、前記判定部により前記第２ログ領域に記憶すると判定された場合に、前記新たなログ情報を第２ログ領域に書き込む。前記修正部は、前記記憶領域に空きがない場合に、前記第１ログ領域及び第２ログ領域の位置情報を修正する。
【発明の効果】
【００１５】
１実施態様によれば、ログデータを高速に記録することができる。
【図面の簡単な説明】
【００１６】
【図１Ａ】図１Ａは、実施例に係る情報処理装置によるログ記録方法を説明するための第１の図である。
【図１Ｂ】図１Ｂは、実施例に係る情報処理装置によるログ記録方法を説明するための第２の図である。
【図１Ｃ】図１Ｃは、実施例に係る情報処理装置によるログ記録方法を説明するための第３の図である。
【図１Ｄ】図１Ｄは、実施例に係る情報処理装置によるログ記録方法を説明するための第４の図である。
【図１Ｅ】図１Ｅは、実施例に係る情報処理装置によるログ記録方法を説明するための第５の図である。
【図１Ｆ】図１Ｆは、実施例に係る情報処理装置によるログ記録方法を説明するための第６の図である。
【図１Ｇ】図１Ｇは、実施例に係る情報処理装置によるログ記録方法を説明するための第７の図である。
【図２】図２は、実施例に係る情報処理装置の機能構成を示す図である。
【図３】図３は、ログ記録部による処理のフローを示すフローチャートである。
【図４】図４は、バッファ分割処理のフローを示すフローチャートである。
【図５】図５は、バッファ分割処理の擬似コードを示す図である。
【図６】図６は、長期データ格納処理のフローを示すフローチャートである。
【図７】図７は、長期データ格納処理の擬似コードを示す図である。
【図８】図８は、連続データ格納処理のフローを示すフローチャートである。
【図９】図９は、連続データ格納処理の擬似コードを示す図である。
【図１０】図１０は、実施例に係るログ記録プログラムを実行するコンピュータのハードウェア構成を示す図である。
【図１１】図１１は、ログデータの記録方法を説明するための図である。
【図１２】図１２は、ログデータの記録例を示す図である。
【図１３】図１３は、図１２に示したログ記録方法の処理の疑似コードの例を示す図である。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する情報処理装置、ログ記録方法及びログ記録プログラムの実施例を図面に基づいて詳細に説明する。なお、実施例では、「ログデータ」を単に「データ」と表す。また、ｐ個に１個の割合でログデータが長期保存されるとともに、直近のｍ個の連続データが保持される。また、この実施例は開示の技術を限定するものではない。
【実施例】
【００１８】
まず、実施例に係るログ記録方法について説明する。図１Ａ〜図１Ｇは、実施例に係る情報処理装置によるログ記録方法を説明するための図である。図１Ａに示すように、実施例に係る情報処理装置は、バッファを１：（ｐ−１）に分割する。長期間保持される長期データはバッファの１の割合の長期データ領域に格納され、直近で連続保持される連続データはバッファの（ｐ−１）の割合の連続データ領域に格納される。図１Ａでは、バッファサイズは２０であり、ｐ＝５であるので、長期データ領域のサイズは４となり、連続データ領域のサイズは１６となる。バッファの各データの格納場所である要素領域には、Ａ〜Ｔのアドレスが付けられる。Ａ〜Ｄが長期データをそれぞれ格納する要素領域であり、Ｅ〜Ｔが連続データをそれぞれ格納する要素領域である。
【００１９】
図１Ａに示すように、情報処理装置は、１循目に、シーケンス番号が０番のデータをＡに格納し、１番〜４番のデータをそれぞれＥ〜Ｈに格納し、５番のデータをＢに格納し、６番〜９番のデータをそれぞれＩ〜Ｌに格納する。また、情報処理装置は、１０番のデータをＣに格納し、１１番〜１４番のデータをそれぞれＭ〜Ｐに格納し、１５番のデータをＤに格納し、１６番〜１９番のデータをそれぞれＱ〜Ｔに格納する。
【００２０】
そして、図１Ｂに示すように、情報処理装置は、バッファがいっぱいになると、連続データ領域を上書き領域として使用するとともに、いっぱいになった長期データ領域を拡張する。ここで、連続データ領域を新たにバッファとすると、バッファのサイズは１６であり、ｐ＝５であるので、バッファ分割により追加される長期データ領域のサイズは３となり、連続データ領域のサイズは１２となる。また、最初の長期データ領域はそのまま残され、使用されないあまりのサイズが１となる。
【００２１】
図１Ｂでは、最初の長期データ領域に隣接するＥ〜Ｇの領域が追加される長期データ領域となり、Ｈがあまりとなり、Ｉ〜Ｔが新たな連続データ領域となる。そして、情報処理装置は、２循目に、２０番のデータをＥに上書きし、２１番〜２４番のデータをそれぞれＩ〜Ｌに上書きし、２５番のデータをＦに上書きし、２６番〜２９番のデータをそれぞれＭ〜Ｐに上書きする。そして、情報処理装置は、３０番のデータをＧに上書きし、３１番〜３４番のデータをそれぞれＱ〜Ｔに上書きする。
【００２２】
そして、図１Ｃに示すように、情報処理装置は、バッファがいっぱいになると、連続データ領域を上書き領域として使用する。また、情報処理装置は、前回のあまりを今回の上書き領域に含める。したがって、上書き領域を新たにバッファとすると、バッファのサイズは１３であり、ｐ＝５であるので、追加される長期データ領域のサイズは２となり、連続データ領域のサイズは８となる。また、これまでの長期データ領域はそのまま残され、使用されないあまりのサイズが３となる。
【００２３】
図１Ｃでは、これまでの長期データ領域に隣接するＨ〜Ｉの領域が追加される長期データ領域となり、Ｊ〜Ｌがあまりとなり、Ｍ〜Ｔが新たな連続データ領域となる。そして、情報処理装置は、３循目に、３５番のデータをＨに上書きし、３６番〜３９番のデータをそれぞれＭ〜Ｐに上書きし、４０番のデータをＩに上書きし、４１番〜４４番のデータをそれぞれＱ〜Ｔに上書きする。
【００２４】
そして、図１Ｄに示すように、情報処理装置は、バッファがいっぱいになると、連続データ領域を上書き領域として使用する。また、情報処理装置は、前回のあまりを今回の上書き領域に含める。したがって、上書き領域を新たにバッファとすると、バッファのサイズは１１であり、ｐ＝５であるので、追加される長期データ領域のサイズは２となり、連続データ領域のサイズは８となる。また、これまでの長期データ領域はそのまま残され、使用されないあまりのサイズが１となる。
【００２５】
図１Ｄでは、これまでの長期データ領域に隣接するＪ〜Ｋの領域が追加される長期データ領域となり、Ｌがあまりとなり、Ｍ〜Ｔが新たな連続データ領域となる。そして、情報処理装置は、４循目に、４５番のデータをＪに上書きし、４６番〜４９番のデータをそれぞれＭ〜Ｐに上書きし、５０番のデータをＫに上書きし、５１番〜５４番のデータをそれぞれＱ〜Ｔに上書きする。
【００２６】
そして、図１Ｅに示すように、情報処理装置は、バッファがいっぱいになると、連続データ領域を上書き領域として使用する。また、情報処理装置は、前回のあまりを今回の上書き領域に含める。したがって、上書き領域を新たにバッファとすると、バッファのサイズは９であり、ｐ＝５であるので、追加される長期データ領域のサイズは１となり、連続データ領域のサイズは４となる。
【００２７】
ここで、直近ｍ個の連続データを保持するためには、連続データ領域は、ｍ＊（ｐ−１）／ｐ以上確保される必要がある。しかしながら、ｍ＊（ｐ−１）／ｐ＝８なので、連続データ領域が足りない。この場合、情報処理装置は、長期データ領域の古いデータを記憶する方から（ｐ−１）個だけ要素領域をバッファに加える。すると、バッファのサイズは１３であり、ｐ＝５であるので、追加される長期データ領域のサイズは２となり、連続データ領域のサイズは８となる。使用されないあまりのサイズが３となる。
【００２８】
図１Ｅでは、これまでの長期データ領域に隣接するＬ〜Ｍの領域が追加される長期データ領域となり、Ｎ〜Ｐがあまりとなり、長期データ領域からバッファに加えられたＡ〜Ｄと、Ｑ〜Ｔとが新たな連続データ領域となる。
【００２９】
そして、情報処理装置は、５循目に、５５番のデータをＬに上書きする。そして、情報処理装置は、５６番のデータをＱに上書きしようとするが、Ｑには５１番のデータが記憶されているため、Ｑに上書きすると、直近のｍ個前より新しいデータを上書きしてしまう。このように、長期データ領域の一部をバッファに加えた場合、従来の連続データ領域に新しいデータを上書きすると直近のｍ個前より新しいデータが上書きされる場合がある。このような場合、情報処理装置は、長期データ領域からバッファに加えた領域から順に連続データ領域として使用する。
【００３０】
すなわち、情報処理装置は、図１Ｆに示すように、５６番〜５９番のデータを長期データ領域からバッファに加えられたＡ〜Ｄにそれぞれ上書きする。そして、情報処理装置は、６０番のデータをＭに上書きし、６１番〜６４番のデータをそれぞれＱ〜Ｔに上書きする。
【００３１】
そして、情報処理装置は、図１Ｇに示すように、６循目に、６５番のデータをＮに上書きし、６６番〜６９番のデータをそれぞれＡ〜Ｄに上書きし、７０番のデータをＯに上書きし、７１番〜７４番のデータをそれぞれＱ〜Ｔに上書きする。そして、情報処理装置は、７循目に、７５番のデータをＰに上書きし、７６番〜７９番のデータをそれぞれＡ〜Ｄに上書きし、８０番のデータをＱに上書きし、８１番〜８４番のデータをそれぞれＥ〜Ｈに上書きする。
【００３２】
このように、情報処理装置は、バッファを１：（ｐ−１）の割合で長期データ領域と連続データ領域に分割し、長期間保持したいデータは長期データ領域に格納し、直近の連続データを連続データ領域に格納することで、データを高速に記録することができる。その理由は、情報処理装置は、一定の規則にしたがって決められる格納場所にデータを格納することで、格納場所の探索が必要ないためである。
【００３３】
次に、実施例に係る情報処理装置の構成について説明する。図２は、実施例に係る情報処理装置の機能構成を示す図である。図２に示すように、情報処理装置１は、データ採取部１ａとログ記録部１ｂとを有する。
【００３４】
データ採取部１ａは、情報処理装置１のデータを採取する。ログ記録部１ｂは、データ採取部１ａにより採取されたデータを記録する。ログ記録部１ｂは、バッファ１０と、バッファ分割部１１と、振分部１２と、長期データ格納部１３と、連続データ格納部１４とを有する。
【００３５】
バッファ１０は、データを記録する領域である。バッファ１０のサイズは有限であり、バッファ１０がいっぱいになるとデータは上書きされる。バッファ１０は、長期データ領域と連続データ領域を有する。なお、「バッファ」という用語は、バッファ分割の際には、バッファ１０の一部の上書き領域に対しても用いられる。そこで、元のバッファを表す場合には、「バッファ１０」を用い、バッファ分割における上書き領域を表す場合には、「バッファ」を用いる。
【００３６】
バッファ分割部１１は、バッファを１：（ｐ−１）の割合で長期データ領域と連続データ領域にバッファ分割する。バッファ分割部１１は、データがバッファ１０に上書きされる過程で、バッファ１０を動的に長期データ領域と連続データ領域に分割する。すなわち、バッファ分割部１１は、長期データ領域又は連続データ領域が不足すると、長期データ領域及び連続データ領域の位置情報を修正する。
【００３７】
バッファ分割部１１は、長期データ領域が不足すると、図１Ｂ〜図１Ｇに示した方法で、連続データ領域から長期データ領域を獲得する。また、バッファ分割部１１は、連続データ領域が不足すると、図１Ｅ〜図１Ｇに示した方法で、長期データ領域から連続データ領域を獲得する。
【００３８】
振分部１２は、データ採取部１ａが採取したデータを受け取り、データのシーケンス番号に基づいて長期データとして保存するデータか否かを判定する。そして、振分部１２は、長期データとして保存するデータである場合には、データを長期データ格納部１３に渡し、長期データとして保存するデータでない場合には、データを連続データ格納部１４に渡す。
【００３９】
長期データ格納部１３は、振分部１２から受け取ったデータを長期データ領域に格納する。長期データ格納部１３は、長期データ領域がいっぱいになるとバッファ分割部１１にバッファ分割を要求する。
【００４０】
連続データ格納部１４は、振分部１２から受け取ったデータを連続データ領域に格納する。連続データ格納部１４は、図１Ｆに示したように、データを書き込もうとする要素領域が記憶するデータがｍ個前より新しい場合には、バッファ分割部１１がバッファ分割の際に長期データ領域から獲得した連続データ領域から先にデータを格納する。
【００４１】
次に、ログ記録部１ｂによる処理のフローについて説明する。図３は、ログ記録部１ｂによる処理のフローを示すフローチャートである。図３に示すように、ログ記録部１ｂは、初期化処理として、バッファ分割を行うバッファ分割処理を行う（ステップＳ１）。
【００４２】
そして、ログ記録部１ｂは、データ採取部１ａからデータを取得し（ステップＳ２）、データのシーケンス番号に基づいて、取得したデータを長期データとして記録するか否かを判定する（ステップＳ３）。
【００４３】
その結果、ログ記録部１ｂは、長期データとして記録する場合には、データを長期データ領域に格納する長期データ格納処理を行う（ステップＳ４）。一方、長期データとして記録しない場合には、ログ記録部１ｂは、データを連続データ領域に格納する連続データ格納処理を行う（ステップＳ５）。
【００４４】
そして、ログ記録部１ｂは、ログ記録を終了したか否かを判定し（ステップＳ６）、ログ記録を終了していない場合には、ステップＳ２に戻り、ログ記録を終了した場合には、処理を終了する。
【００４５】
このように、ログ記録部１ｂは、バッファ１０を長期データ領域と連続データ領域に分割し、データを長期データ領域と連続データ領域に分けて記憶することで、データの格納場所の探索を不要とし、データを高速に記録することができる。
【００４６】
次に、バッファ分割処理のフローについて説明する。図４は、バッファ分割処理のフローを示すフローチャートである。図４に示すように、バッファ分割部１１は、バッファ１０を初めて使用するか否かを判定する（ステップＳ１１）。
【００４７】
その結果、バッファ１０を初めて使用する場合には、バッファ分割部１１は、初回用の処理を行う（ステップＳ１２）。具体的には、バッファ分割部１１は、ＲをＮに初期設定し、ｓｐｈｅａｄを０に初期設定する。ここで、Ｒは今回のバッファ分割で使用するバッファのサイズであり、Ｎはバッファ１０のサイズすなわちバッファ分割で使用するバッファの初期サイズである。また、ｓｐｈｅａｄは、長期データ領域の先頭を示すポインタである。
【００４８】
一方、バッファ１０を初めて使用するのではない場合には、バッファ分割部１１は、二循目以降の処理を行う（ステップＳ１３）。具体的には、バッファ分割部１１は、ｓｐｈｅａｄにｓｐｔａｉｌを設定し、Ｒにｄｐｓｉｚｅ＋ｒｅｓｔを設定する。ここで、ｓｐｔａｉｌは、長期データ領域の最後の次を示すポインタである。すなわち、前回のバッファ分割での長期データ領域の最後の次が今回のバッファ分割で使用する長期データ領域の先頭となる。また、ｄｐｓｉｚｅは連続データ領域の大きさであり、ｒｅｓｔはあまりである。
【００４９】
そして、バッファ分割部１１は、ｓｐｓｉｚｅにＲ／ｐを設定し、ｄｐｓｉｚｅにｓｐｓｉｚｅ＊（ｐ−１）を設定し、ｒｅｓｔにＲ−ｄｐｓｉｚｅ−ｓｐｓｉｚｅを設定する（ステップＳ１４）。ここで、ｓｐｓｉｚｅは、長期データ領域の大きさである。
【００５０】
そして、バッファ分割部１１は、ｄｐｓｉｚｅがｍ＊ｐ／（ｐ−１）より小さいか否か、すなわち、連続データ領域が十分にとれないか否かを判定する（ステップＳ１５）。その結果、ｄｐｓｉｚｅがｍ＊ｐ／（ｐ−１）より小さい場合には、バッファ分割部１１は、Ｒにｐ−１を加え（ステップＳ１６）、ステップＳ１４に戻る。なお、ステップＳ１６において、Ｒ＋＝ｐ−１はＲ＝Ｒ＋（ｐ−１）を表す。
【００５１】
一方、ｄｐｓｉｚｅがｍ＊ｐ／（ｐ−１）より小さくない場合には、バッファ分割部１１は、バッファ分割に基づいて、長期データ領域及び連続データ領域の位置情報、空き数及び現在の格納場所を設定する（ステップＳ１７）。具体的には、バッファ分割部１１は、ｓｐｔａｉｌにｓｐｈｅａｄ＋ｓｐｓｉｚｅを設定し、ｄｐｈｅａｄにｓｐｔａｉｌ＋ｒｅｓｔを設定し、ｄｐｔａｉｌにｄｐｈｅａｄ＋ｄｐｓｉｚｅを設定する。また、バッファ分割部１１は、ｓｐｒｅｍａｉｎにｓｐｓｉｚｅを設定し、ｄｐｒｅｍａｉｎにｄｐｓｉｚｅを設定し、ｓｐｃｕｒにｓｐｈｅａｄを設定し、ｄｐｃｕｒにｄｐｈｅａｄを設定する。
【００５２】
ここで、ｄｐｈｅａｄは連続データ領域の先頭を示すポインタであり、ｄｐｔａｉｌは連続データ領域の最後の次を示すポインタであり、ｓｐｒｅｍａｉｎは長期データ領域の空き数であり、ｄｐｒｅｍａｉｎは連続データ領域の空き数である。また、ｓｐｃｕｒは長期データの書き込み位置を示す書き込みポインタであり、ｄｐｃｕｒは連続データの書き込み位置を示すポインタである。
【００５３】
このように、バッファ分割部１１がバッファを１：（ｐ−１）に分割することによって、長期データ領域と連続データ領域を作成することができる。
【００５４】
図５は、バッファ分割処理の擬似コードを示す図である。図５に示すように、最初のｉｆ文（ｄ）によりバッファ１０を初めて使用するか否かの判定が行われ、初回用の処理又は二循目以降の処理が行われる。また、２つ目のｉｆ文（ｅ）により、連続データ領域が十分にとれないか否かの判定が行われ、連続データ領域が十分にとれない場合には、長期データ領域から連続データ領域を獲得する処理が行われる。
【００５５】
次に、長期データ格納処理のフローについて説明する。図６は、長期データ格納処理のフローを示すフローチャートである。図６に示すように、長期データ格納部１３は、長期データ領域が残っていないかを判定する（ステップＳ２１）。すなわち、長期データ格納部１３は、ｓｐｒｅｍａｉｎが０以下であるかを判定する。
【００５６】
その結果、長期データ領域が残っていない場合には、長期データ格納部１３は、バッファ分割部１１にバッファ分割処理を実行させる（ステップＳ２２）。そして、長期データ格納部１３は、長期データ領域にデータを書き込む（ステップＳ２３）。すなわち、ｂｕｆ[ＩＤＸ(ｓｐｃｕｒ)]．ｖａｌにｖａｌを設定する。ここで、ｂｕｆ[]．ｖａｌは、バッファ１０のデータ格納部であり、ＩＤＸ(ｓｐｃｕｒ)は、ｓｐｃｕｒをＮで割った余りである。ｓｐｃｕｒは単調に増加していくためＩＤＸによりバッファ１０のインデックスに変換される。ｖａｌはバッファに格納されるデータである。
【００５７】
そして、長期データ格納部１３は、長期データの書き込み位置を示す書き込みポインタを１増やし、長期データ領域の空き要素領域数を１減らす（ステップＳ２４）。すなわち、長期データ格納部１３は、ｓｐｃｕｒを１増やし、ｓｐｒｅｍａｉｎを１減らす。なお、ステップＳ２４において、ｘ−−は、ｘ＝ｘ−１を表す。
【００５８】
このように、長期データ格納部１３は、長期データ領域が残っていない場合には、バッファ分割部１１にバッファ分割処理を実行させることで、長期データの格納領域を新たに確保することができる。
【００５９】
図７は、長期データ格納処理の擬似コードを示す図である。図７に示すように、最初のｉｆ文（ｆ）により長期データ領域が残っていないかが判定され、残っていない場合には、バッファ分割処理が実行される。
【００６０】
次に、連続データ格納処理のフローについて説明する。図８は、連続データ格納処理のフローを示すフローチャートである。図８に示すように、連続データ格納部１４は、書き込もうとする要素領域が記憶するデータがｍ個前よりも新しいか否かを判定する（ステップＳ３１）。すなわち、連続データ格納部１４は、ｂｕｆ[ＩＤＸ(ｄｐｃｕｒ)]．ｓｅｑ＋ｍがｓｅｑよりも大きいか否かを判定する。ここで、ｂｕｆ[]．ｓｅｑは、バッファ１０のシーケンス番号格納部であり、ｓｅｑは、格納されるデータのシーケンス番号である。
【００６１】
その結果、書き込もうとする要素領域が記憶するデータがｍ個前よりも新しい場合には、連続データ格納部１４は、バッファ分割により新しく獲得した領域の先頭に書き込みポインタを移動する（ステップＳ３２）。すなわち、連続データ格納部１４は、ｄｐｃｕｒにｄｐｔａｉｌ−（ｐ−１）を設定する。
【００６２】
そして、連続データ格納部１４は、連続データ領域にデータを書き込む（ステップＳ３３）。すなわち、ｂｕｆ[ＩＤＸ(ｄｐｃｕｒ)]．ｖａｌにｖａｌを設定する。そして、連続データ格納部１４は、連続データの書き込み位置を示す書き込みポインタを１増やし、連続データ領域の空き要素領域数を１減らす（ステップＳ３４）。
【００６３】
そして、連続データ格納部１４は、連続データ領域の最後であり、かつ、連続データ領域に空きがあるかを判定する（ステップＳ３５）。すなわち、連続データ格納部１４は、ｄｐｃｕｒとｄｐｔａｉｌが等しく、かつ、ｄｐｒｅｍａｉｎが０でないかを判定する。ステップＳ３５において、ｄｐｃｕｒ＝＝ｄｐｔａｉｌは、ｄｐｃｕｒとｄｐｔａｉｌが等しければ１であり、ｄｐｃｕｒとｄｐｔａｉｌが等しくなければ０であることを表す。
【００６４】
そして、連続データ領域の最後であり、かつ、連続データ領域に空きがある場合には、連続データ格納部１４は、元々の連続データ領域の先頭へ移動する（ステップＳ３６）。すなわち、連続データ格納部１４は、ｄｐｃｕｒにｄｐｈｅａｄを設定する。
【００６５】
このように、連続データ格納部１４は、書き込もうとする要素領域が記憶するデータがｍ個前よりも新しい場合には、バッファ分割により新しく獲得した領域の先頭に書き込みポインタを移動することで、ｍ個前よりも新しいデータへの上書きを防ぐことができる。
【００６６】
図９は、連続データ格納処理の擬似コードを示す図である。図９に示すように、最初のｉｆ文（ｇ）により、書き込もうとする要素領域が記憶するデータがｍ個前よりも新しいかが判定され、新しい場合には、新しく獲得した領域の先頭に書き込みポインタが移動される。
【００６７】
上述してきたように、実施例では、振分部１２が、データのシーケンス番号に基づいてデータを長期データ領域に格納するか否かを判定する。その結果、振分部１２は、長期データ領域に格納する場合には長期データ格納部１３にデータを振り分け、長期データ領域に格納しない場合には連続データ格納部１４にデータを振り分ける。そして、長期データ格納部１３はデータを長期データ領域に格納し、連続データ格納部１４はデータを連続データ領域に格納する。そして、長期データ領域に空きがなくなると、バッファ分割部１１が、バッファ分割を行って、連続データ領域から追加の長期データ領域を獲得する。また、連続データ領域に空きがなくなると、バッファ分割部１１が長期データ領域から追加の連続データ領域を獲得する。したがって、ログ記録部１ｂは、データをバッファ１０に書き込む場合に、上書きできる要素領域を探す必要がなく、高速にデータを記録することができる。
【００６８】
また、実施例では、長期データ領域に空きがなくなると、バッファ分割部１１は、連続データ領域とあまりを加えた領域を新たなバッファとしてバッファの大きさをｐで割った商の数だけ連続データ領域から要素領域を獲得して長期データ領域に追加する。したがって、ログ記録部１ｂは、直近のデータを連続データ領域に保持するとともに、できるだけ多くの長期データを保持することができる。
【００６９】
また、実施例では、連続データ領域に直近のｍ個のデータを保持できなくなると、バッファ分割部１１は、古いデータを記憶する方からｐ−１個の要素領域を長期データ領域から獲得して連続データ領域に追加する。したがって、ログ記録部１ｂは、直近のｍ個のデータを必ずバッファ１０に保持することができる。
【００７０】
なお、実施例では、ログ記録部１ｂについて説明したが、ログ記録部１ｂが有する構成をソフトウェアによって実現することで、同様の機能を有するログ記録プログラムを得ることができる。そこで、ログ記録プログラムを実行するコンピュータについて説明する。
【００７１】
図１０は、実施例に係るログ記録プログラムを実行するコンピュータのハードウェア構成を示す図である。図１０に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ５２と、ＬＡＮ（Local  Area  Network）インタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００７２】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ５２は、メインメモリ５１からプログラムを読出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【００７３】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００７４】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００７５】
そして、コンピュータ５０において実行されるログ記録プログラムは、ＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読出されてコンピュータ５０にインストールされる。あるいは、ログ記録プログラムは、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読出されてコンピュータ５０にインストールされる。そして、インストールされたログ記録プログラムは、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【符号の説明】
【００７６】
１    情報処理装置
１ａ    データ採取部
１ｂ    ログ記録部
１１    バッファ分割部
１２    振分部
１３    長期データ格納部
１４    連続データ格納部
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１Ａ】
0006601077.tif 000002
【図１Ｂ】
0006601077.tif 000003
【図１Ｃ】
0006601077.tif 000004
【図１Ｄ】
0006601077.tif 000005
【図１Ｅ】
0006601077.tif 000006
【図１Ｆ】
0006601077.tif 000007
【図１Ｇ】
0006601077.tif 000008
【図２】
0006601077.tif 000009
【図３】
0006601077.tif 000010
【図４】
0006601077.tif 000011
【図５】
0006601077.tif 000012
【図６】
0006601077.tif 000013
【図７】
0006601077.tif 000014
【図８】
0006601077.tif 000015
【図９】
0006601077.tif 000016
【図１０】
0006601077.tif 000017
【図１１】
0006601077.tif 000018
【図１２】
0006601077.tif 000019
【図１３】
0006601077.tif 000020