(57)【特許請求の範囲】
【請求項１】
交換機のファイルシステム上へのアクセスに可変長のバッファを用いるバッファキャッシュ方法において、
各ノードが、連続した１つ以上のブロックからなる可変長のバッファの前記ブロックの番号を保持できるＢｔｒｅｅと、複数のサイズからなり、解放されたバッファのリストを持つフリーリストとを用い、
データの獲得要求で指示されるブロック番号で表される領域を、Ｂｔｒｅｅ上に検索し、
Ｂｔｒｅｅ上に前記獲得要求データの領域を含んだバッファがある場合は、そのバッファを使用し、
Ｂｔｒｅｅ上に前記獲得要求データの領域を含んだバッファがない場合は、前記獲得要求データの領域のサイズ以上であって、前記獲得要求データの領域のサイズに最も近いサイズのバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入して、このバッファを使用し、
Ｂｔｒｅｅ上の１つのバッファ内に前記獲得要求データの領域の一部がある場合は、そのバッファをＢｔｒｅｅから削除して、フリーリストにつないで解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入して、このバッファを使用し、
前記獲得要求データの領域がＢｔｒｅｅ上の複数のバッファ内にある場合は、その全てのバッファをＢｔｒｅｅから削除して、フリーリストにつないで解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入して、このバッファを使用することを特徴とする交換機ファイルシステムにおけるバッファキャッシュ方法。
【請求項２】
前記バッファの挿入および削除により、Ｂｔｒｅｅにアンバランスが生じた場合に、所定のタイミングでＢｔｒｅｅのバランスを修正することを特徴とする請求項１記載の交換機ファイルシステムにおけるバッファキャッシュ方法。
【請求項３】
前記Ｂｔｒｅｅのバランスの修正は、アンバランスが生じた直後に、またはＣＰＵの空き時間に行うことを特徴とする請求項２記載の交換機ファイルシステムにおけるバッファキャッシュ方法。
【請求項４】
交換機ファイルシステム上へのアクセスに可変長のバッファを用いるバッファキャッシュ装置において、
データを獲得する要求を受付ける要求受付手段と、
各ノードが、連続した複数のブロックからなる可変長のバッファの前記ブロックの番号を保持できるＢｔｒｅｅと、複数のサイズからなり、解放されたバッファのリストを持つフリーリストとを含むバッファキャッシュ手段と、
データの獲得要求があると、データの獲得要求で指示されるブロック番号で表される領域を、Ｂｔｒｅｅ上に検索するＢｔｒｅｅ検索手段と、
Ｂｔｒｅｅ上に前記獲得要求データの領域を含んだバッファがない場合は、フリーリストを検索し解放されたバッファを検索する解放バッファ検索手段と、
フリーリストの検索の際に、前記獲得要求データの領域のサイズ以上であって、前記獲得要求データの領域のサイズに最も近いサイズのバッファを検索する最適バッファ検索手段と、
Ｂｔｒｅｅ上の１つのバッファ内に前記獲得要求データの領域の一部がある場合は、そのバッファをＢｔｒｅｅから削除して、フリーリストにつないで解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入し、前記獲得要求データの領域がＢｔｒｅｅ上の複数のバッファ内にある場合は、その全てのバッファをＢｔｒｅｅから削除して、フリーリストにつないで解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入するバッファ挿入削除手段と、
を備えることを特徴とする交換機ファイルシステムにおけるバッファキャッシュ装置。
【請求項５】
前記バッファの挿入および削除により、Ｂｔｒｅｅにアンバランスが生じた場合に、Ｂｔｒｅｅのバランスを整えるＢｔｒｅｅ修正手段をさらに備えることを特徴とする請求項４記載の交換機ファイルシステムにおけるバッファキャッシュ装置。
【請求項６】
交換機のファイルシステム上へのアクセスに可変長のバッファを用いるバッファキャッシュ方法を実行するプログラムを記録した記憶媒体において、
ａ）データを獲得する要求を受付けるステップと、
ｂ）データの獲得要求で指示されるブロック番号で表される領域が、Ｂｔｒｅｅ上のバッファに存在するか否かを判断するステップと、
ｃ）前記ステップｂにおいて存在する場合には、前記獲得要求データの領域の一部がＢｔｒｅｅ上の１つのバッファ内に存在するか否かを判断するステップと、
ｄ）前記ステップｃにおいて存在しない場合には、前記獲得要求データの領域がＢｔｒｅｅ上の複数のバッファ内に存在するか否かを判断するステップと、
ｅ）前記ステップｄにおいて存在しない場合には、前記獲得要求データの領域がＢｔｒｅｅのバッファにそのまま存在すると判断して、そのバッファを使用するステップと、
ｆ）前記ステップｂにおいて存在しないと判断された場合には、前記獲得要求データの領域のサイズ以上であって、前記獲得要求データの領域のサイズに最も近いサイズの解放されたバッファをフリーリストから検索し、検索されたバッファを使用するステップと、
ｇ）前記ステップｃにおいて１つのバッファ内に存在すると判断された場合には、そのバッファをＢｔｒｅｅから削除して解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入し、このバッファを使用するステップと、
ｈ）前記ステップｄにおいて複数のバッファ内に存在すると判断された場合には、それらのバッファをＢｔｒｅｅから削除して解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入し、このバッファを使用するステップと、
を含むプログラムを記録した記憶媒体。
【請求項７】
前記バッファの挿入および削除により、Ｂｔｒｅｅにアンバランスが生じた場合に、Ｂｔｒｅｅのバランスを整えるステップをさらに含むことを特徴とする請求項６に記載のプログラムを記録した記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ファイルシステム、特に交換機のファイルシステムにおけるバッファキャッシュ方法および装置に関する。
【０００２】
【従来の技術】
交換機システムは、図１７に示すように、電話加入者１０が会話できるように電話線を制御する通信路系装置１２を備えており、この通信路系装置は、コンピュータに代表される中央処理系装置１４により制御される。すなわち、中央制御装置１６が、主記憶装置１８および補助記憶装置２０のような記憶装置のプログラムを読みとって解読・判断を行い、必要な命令やデータを通信路系装置１２に送り、課金や呼処理など全ての機能を管理・処理している。また、保守運用系装置（コンソール）２２は、オペレーターと中央制御装置１６との間の情報のやりとりを行っている。
【０００３】
このような交換機システムのファイルには、さまざまなものがあるが、従来の技術では一定のブロックサイズのバッファキャッシュを用いてキャッシングを行っている。図１７を参照して、交換機の一般的なファイル操作を説明する。主記憶装置である磁気ディスク装置１８にファイルａａａがあるものとする。このファイルａａａは、磁気ディスク上では、ブロック単位に分かれている（ブロック１００，１０１，１０２，２０５，２０６，２５５，２５６，３００）。ファイルの容量が大きくなると、一番後につながっているブロックからブロックをのばす。のばせないときは異なるところにブロックを確保する。例えば、ブロック番号３０１が使われていなければ使用し、使われていたら解放されているブロックを使用する。
【０００４】
ファイルａａａをバッファキャッシュに全て読取ることは、メモリ使用率が大きいのでできない。そこで、必要な部分を含むブロックの内容をバッファキャッシュに読取っている。例えば、ファイルａａａのブロック１０１，１０２，２０５に必要なデータがあるときは、ブロック１０１，１０２，２０５を、ファイルａａａのブロック１０２だけに必要なデータがある場合には、ブロック１０２をバッファキャッシュに読取っている。
【０００５】
一定のブロックサイズのバッファキャッシュを用いてキャッシングを行う方法では、ファイルを構成するブロックへのアクセスサイズがバッファキャッシュのサイズより小さければ高速化が図れる。しかし、交換機のファイルシステムにおけるように、アクセスサイズが大きくなり、いくつかのブロックを連続してアクセスする場合には、複数のＩ／Ｏ処理に分割されてしまい効果が薄れていた。このため、例えば特開平５−１５８７９２号公報に記載の技術では、入出力バッファを設け、アクセスサイズが大きい場合には一旦入出力バッファに取り込んで、データを分割してバッファキャッシュに入力している。
【０００６】
また、一定のブロックサイズのバッファキャッシュを用いてキャッシングを行う方法では、ファイルのブロックサイズに関係なしに固定長のアクセスを行っているので、バッファキャッシュのブロックサイズを大きくとると、小さいファイルを扱う際にブロックに無駄が生じていた。
【０００７】
このような問題に対処するためのバッファキャッシュのブロックサイズを可変長にする考え方がある。例えば特開平１０−６９４２９号公報には、メモリ上のバッファメモリ領域を、アプリケーション・プログラムの要求に応じて割り当て管理する技術が開示されている。しかし、この可変長方式は、通信制御プログラムを目的とするものであり、ある決まった大きさのデータを多く扱うのを考えている。交換機のファイルシステムでは、要求するデータの大きさは多々あるので適していない。
【０００８】
また、特開平７−３１１７１０号公報には、ハッシュリストを用いるバッファキャッシュ管理方法が開示されているが、ハッシュリストは可変長のバッファキャッシュに適用するには高速アクセスという点では有利ではない。
【０００９】
【発明が解決しようとする課題】
交換機のファイルシステムでは、大きいサイズのデータ領域が要求されるので、前述したような各公開公報に記載の従来技術は、高速アクセスを実現するという点では用いることができず、依然として、一定のブロックサイズのバッファキャッシュを用いてキャッシングを行う方法しか用いられていなかった。このような方法では、高速アクセスができなかった。
【００１０】
本発明の目的は、種々のサイズのバッファブロックを予め用意することにより、バッファキャッシュのサイズを可変長にし、さまざまなファイルアクセスサイズにおいてもアクセスを高速化できるバッファキャッシュ方法および装置を提供することにある。
【００１１】
本発明の他の目的は、要求データサイズに応じて、バッファを使用するために解放・削除や確保・挿入などをして適したバッファを確保するバッファキャッシュ・プログラムを記録した記憶媒体を提供することにある。
【００１２】
【線題を解決するための手段】
本発明の第１の態様は、ファイルシステム上へのアクセスに可変長のバッファを用いるバッファキャッシュ方法である。この方法によれば、各ノードが、連続した１つ以上のブロックからなる可変長のバッファの前記ブロックの番号を保持できるＢｔｒｅｅと、複数のサイズからなり、解放されたバッファのリストを持つフリーリストとを用いることで、Ｉ／Ｏアクセス回数を減らしてファイルアクセスを高速化できる。
【００１３】
この場合に、データの獲得要求で指示されるブロック番号で表される領域を、Ｂｔｒｅｅ上に検索し、Ｂｔｒｅｅ上に前記獲得要求データの領域を含んだバッファがある場合は、そのバッファを使用し、Ｂｔｒｅｅ上に前記獲得要求データの領域を含んだバッファがない場合は、前記獲得要求データの領域のサイズ以上であって、前記獲得要求データの領域のサイズに最も近いサイズのバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入して、このバッファを使用し、Ｂｔｒｅｅ上の１つのバッファ内に前記獲得要求データの領域の一部がある場合は、そのバッファをＢｔｒｅｅから削除して、フリーリストにつないで解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入して、このバッファを使用し、前記獲得要求データの領域がＢｔｒｅｅ上の複数のバッファ内にある場合は、その全てのバッファをＢｔｒｅｅから削除して、フリーリストにつないで解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入する。
【００１４】
本発明の第２の態様は、ファイルシステム上へのアクセスに可変長のバッファを用いるバッファキャッシュ装置である。
【００１５】
この装置によれば、データを獲得する要求を受付ける要求受付手段と、各ノードが、連続した複数のブロックからなる可変長のバッファの前記ブロックの番号を保持できるＢｔｒｅｅと、複数のサイズからなり、解放されたバッファのリストを持つフリーリストとを含むバッファキャッシュ手段と、データの獲得要求があると、データの獲得要求で指示されるブロック番号で表される領域を、Ｂｔｒｅｅ上に検索するＢｔｒｅｅ検索手段と、Ｂｔｒｅｅ上に前記獲得要求データの領域を含んだバッファがない場合は、フリーリストを検索し解放されたバッファを検索する解放バッファ検索手段と、フリーリストの検索の際に、前記獲得要求データの領域のサイズ以上であって、前記獲得要求データの領域のサイズに最も近いサイズのバッファを検索する最適バッファ検索手段と、Ｂｔｒｅｅ上の１つのバッファ内に前記獲得要求データの領域の一部がある場合は、そのバッファをＢｔｒｅｅから削除して、フリーリストにつないで解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入し、前記獲得要求データの領域がＢｔｒｅｅ上の複数のバッファ内にある場合は、その全てのバッファをＢｔｒｅｅから削除して、フリーリストにつないで解放し、前記獲得要求データの領域のサイズに合うバッファをフリーリストからはずして確保し、Ｂｔｒｅｅに挿入するバッファ挿入削除手段とを備えている。
【００１６】
本発明の第２の態様は、ファイルシステム上へのアクセスに可変長のバッファの使用を可能とするステップを含むプログラムを記録した記憶媒体である。
【００１７】
好適には、ファイルシステム上のアクセスに可変長のバッファを用い、各ノードが、連続した１つ以上のブロックからなる可変長のバッファを保持できるＢｔｒｅｅと、複数のサイズからなり、解放されたバッファのリストを持つフリーリストとを用いて、要求データに応じて、バッファを使用するために削除および挿入を行って、適したバッファを獲得するステップを含むプログラムを記録した記憶媒体である。
【００１８】
【発明の実施の形態】
図１は、本発明が適用される交換機システムの基本構造を示す。基本的には、図１７で示したものと同様であり、図１７に対応する要素には、同一の参照番号を付して示してある。図１の交換機システムは、さらに、バッファキャッシュ装置２３を備えている。本発明に係るバッファキャッシュ・プログラムは、バッファキャッシュ装置２３で動くものである。
【００１９】
なお以下の説明において、“解放”という用語は、バッファをフリーリストにつなぐことを、“確保”という用語はバッファをフリーリストからはずして使用することの意味で用いる。また、“挿入”という用語は、Ｂｔｒｅｅにバッファをつなぐことを、“削除”という用語はバッファをＢｔｒｅｅからはずすことの意味で用いるものとする。
【００２０】
図２は、バッファキャッシュ装置の機能ブロック図である。このバッファキャッシュ装置は、機能的には、バッファ獲得要求およびＢｔｒｅｅの修正要求を受付ける要求受付装置２４と、バッファ検索のためにＢｔｒｅｅを検索するＢｔｒｅｅ検索装置２６と、フリーリストを検索し解放されたバッファを検索する解放バッファ検索装置２８と、フリーリストの検索の際に最適なサイズのバッファを検索する最適バッファ検索装置３０と、Ｂｔｒｅｅ上でバッファを挿入および削除するバッファ挿入削除装置３２と、Ｂｔｒｅｅのバランスを整えるＢｔｒｅｅ修正装置３４と、磁気ディスク１８との入出力を管理する入出力管理装置３６と、バッファキャッシュ３８と、バッファキャッシュとのアクセスを管理するバッファ管理装置４０とから構成されている。
【００２１】
以下、本発明のバッファキャッシュ方法を、図３および図４をも参照して説明する。図３は、磁気ディスク１８のファイルシステム（ブロック１００〜１７８）と、バッファキャッシュとを示す図であり、図示のようにバッファキャッシュは、バッファ検索のためのＢｔｒｅｅ（Ｂａｌａｎｃｅｄ  ｔｒｅｅ）４４と、複数のサイズからなり解放されたバッファのリストを持つフリーリスト４６とを含んでいる。Ｂｔｒｅｅを構成する各ノードは、連続した１つ以上のブロックからなる可変長のバッファを保持する。このＢｔｒｅｅは、２分探索木であり、ノードが保持するブロックの番号より小さい番号のブロックは左部分木内にあり、ノードが保持するブロックの番号より大きい番号ブロックは右部分木内にある。このようにＢｔｒｅｅにおける探索は、根から始まる。ノードのブロックの番号と比較し、目的のブロックの番号が左右どちらの部分木にあるかを判断し、分岐して目的のブロックを探索していく。
【００２２】
このように、Ｂｔｒｅｅ４４上にある各ノードのバッファは、有効なデータを保持し、連続した１つ以上のデータブロックをまとめて保持することを可能にしている。
【００２３】
図３において、Ｂｔｒｅｅ４４の各バッファに示す数字は、保持するブロックの番号を示している。図３では、各バッファは、２ブロックまたは３ブロックよりなる可変長のバッファブロックで構成されている状態を示している。
【００２４】
図４は、フリーリスト４６の構造を示す。フリーリスト４６は、αキロバイト（ｋＢ）のバッファサイズ（複数ブロック）を持つリスト、βキロバイトのバッファサイズ（複数ブロック）を持つリストなど、様々な大きさを持つバッファサイズ毎のリストに分けられる。図４の右部分には、リストにつながれた１つ以上のブロックよりなる解放されたバッファを示している。
【００２５】
磁気ディスク１８のファイルシステムへのアクセスの際、バッファを獲得するには、まずＢｔｒｅｅ４４上に要求するデータの領域が存在するか否かを検索し、見つからなければその要求データのサイズを満たす最も近いサイズの解放バッファをフリーリスト４６から検索し、検索により得られたバッファにファイルからデータを格納する。使用したブロックの先頭アドレスと最終アドレスをＢｔｒｅｅ４４上のバッファに格納する。
【００２６】
このようにして、無駄の少ないバッファ管理と高速なファイルアクセスを可能にする。
【００２７】
【実施例】
以下、本発明の実施例を説明するが、本発明の実施例の動作の理解を助けるために、Ｂｔｒｅｅ上のバッファの状態の変化について一般的な説明をまず行っておく。
【００２８】
（１）システムを起動したとき、およびファイルが削除されたときはＢｔｒｅｅ上のバッファにデータを残しておく必要がないため、解放状態で有効なデータがバッファに無く、バッファはフリーリストだけにつながれている。
【００２９】
（２）Ｂｔｒｅｅ上のバッファのデータがプログラムによって使用されるとき（コピー中などのようにバッファのデータを使用しているときなど、まさにそのバッファのデータが使用されているとき）には、使用中で有効なデータがバッファにあるので、バッファがＢｔｒｅｅだけにつながれている。
【００３０】
（３）Ｂｔｒｅｅのバッファのデータがプログラムに使用されていないとき（上記２以外で有効なデータがバッファにあるときはこの状態である。）には、解放状態で有効なデータがＢｔｒｅｅのバッファにあるので、バッファはＢｔｒｅｅとフリーリストにつながれている。
【００３１】
以下に、本発明の実施例を、図５，図６，図７，図８のフローチャートをも参照して説明する。
【００３２】
バッファキャッシュの獲得状況は４パターンある。第１のパターンは、要求するデータの領域がＢｔｒｅｅのバッファにそのまま存在する場合である（図５のパターン１）。第２のパターンは、要求するデータの領域がＢｔｒｅｅ上に存在しない場合である（図６のパターン２）。第３のパターンは、要求するデータの領域の一部がＢｔｒｅｅの１つのバッファ内に存在する場合（図７のパターン３）である。第４のパターンは、要求するデータの領域がＢｔｒｅｅの複数のバッファ内に存在する場合である（図８のパターン４）。
【００３３】
図５のフローチャートにおいて、データ獲得の要求がＣＰＵ１６からあると（ステップＳ１）、図２のバッファキャッシュ装置２２の要求受付装置２４が、この要求を受付け、Ｂｔｒｅｅ検索装置２６は、バッファ管理装置４０を介して、バッファキャッシュ３８にアクセスし、Ｂｔｒｅｅを探索して要求するデータの領域（ブロックの番号で指示される）がＢｔｒｅｅ上のバッファに存在するか否かを判断する（ステップＳ２）。
【００３４】
要求するデータの領域がＢｔｒｅｅ上のバッファに存在する場合には、要求するデータの領域の一部がＢｔｒｅｅ上の１つのバッファ内に存在するか否かを判断する（ステップＳ３）。存在しなければ、次に、要求するデータの領域がＢｔｒｅｅ上の複数のバッファ内に存在するか否かを判断する（ステップＳ４）。存在しなければ、前述した要求するデータの領域がＢｔｒｅｅ上にそのまま存在していると判断して、そのまま存在するバッファを使用する（ステップＳ５）。すなわち、そのバッファから有効データを読出す。この場合、Ｂｔｒｅｅの状態は変化しない。以上のことは、前述した第１のパターンに相当している。
【００３５】
ステップＳ２において、要求するデータの領域がＢｔｒｅｅ上のバッファに存在しない場合には、最適バッファ検索装置３０および解放バッファ探索装置２８は、バッファ管理装置４０を介して、バッファキャッシュ３８にアクセスし、フリーリスト４６内の検索を開始する。
【００３６】
フリーリスト内検索では、最適バッファ検索装置３０はフリーリストの中から最小バッファサイズを検索する（ステップＳ２１）。次に、メモリ領域に格納しようとするデータのサイズ（以下、単にデータサイズという）と、フリーリスト中に検索された最小バッファサイズとを比較する（ステップＳ２２）。
【００３７】
データサイズが最小バッファサイズより大きいと、次に大きいバッファサイズを持つフリーリストを検索し（ステップＳ２３）、ステップＳ２２でデータサイズと比較する。データサイズ以上のバッファサイズを持つフリーリストが検索されるまで、以上のステップＳ２２，Ｓ２３を繰り返す。
【００３８】
ステップＳ２２において、データサイズ以上のバッファサイズを持つフリーリストが検索されると、解放バッファ検索装置２８は、そのフリーリストにつながれた解放バッファがあるか否か、すなわち解放バッファが見つかったか否かを判断する（ステップＳ２４）。ステップＳ２４において、解放バッファが見つからない場合には、まだ大きなサイズのバッファを持つフリーリストがあるか否かを判断する（ステップＳ２６）。まだ大きなバッファを持つフリーリストがある場合には、そのフリーリストを検索し（ステップＳ２７）、そこに解放バッファが見つかったか否かを判断する（ステップＳ２４）。解放バッファが見つかったと判断されれば、この解放バッファを確保し、確保したバッファをＢｔｒｅｅに挿入する。そして、このバッファを使用し磁気ディスク上のデータを格納する（ステップＳ２５）。これは、前述した第２のパターンに相当している。
【００３９】
ステップＳ２６において、利用できるバッファがなければ、利用できるバッファが解放されるまで処理をスリープする（ステップＳ２８）。
【００４０】
図５のフローチャートのステップＳ３において、要求するデータの領域の一部がＢｔｒｅｅ上の１つのバッファ内に存在する場合、バッファ挿入削除装置３２は、バッファ管理装置４０を介してバッファキャッシュ３８をアクセスし、まずそのバッファのデータを磁気ディスク１８に書き出し（ステップＳ３１）、そのバッファをＢｔｒｅｅからはずす、すなわち削除し、フリーリストにつなぐ、すなわち解放する。バッファ削除・解放後、データサイズに合う新しいバッファをフリーリストからはずして使用する、すなわち確保し、Ｂｔｒｅｅにつなぐ、すなわち挿入する（ステップＳ３３）。これは、前述した第３のパターンに相当している。
【００４１】
図５のフローチャートのステップＳ４において、要求するデータの領域がＢｔｒｅｅ上の複数のバッファ内に存在する場合、まずこれら複数のすべてのバッファのデータを磁気ディスク１８に書き出し（ステップＳ４１）、すべてのバッファを解放・削除する（ステップＳ４２）。そして、データサイズに合う新しいバッファを確保・挿入する（ステップＳ４３）。これは、前述した第４のパターンに相当している。
【００４２】
以上の４つのパターンについて、Ｂｔｒｅｅの状態を具体的に説明する。
【００４３】
まず、全ての場合でＢｔｒｅｅ４４の初めの状態が図９の状態になっているところから考える。
【００４４】
第１のパターンでは、Ｂｔｒｅｅ上に存在するバッファをそのまま利用するので、Ｂｔｒｅｅの状態は変わらないが、データを確保しているバッファの内容が更新されている。
【００４５】
第２のパターンでは、要求するデータの領域が例えばブロック７５−７８の場合には、このデータの領域は、図９のＢｔｒｅｅには存在していない。そのため、データサイズを満たす最も近いサイズのバッファのフリーリストから解放バッファを確保する。確保したバッファは、図１０に示すようにＢｔｒｅｅに挿入する（ブロック７５−７８）。
【００４６】
第３のパターンでは、要求するデータの領域が例えばブロック１５−１７の場合には、このデータ領域は図９のＢｔｒｅｅ上の１つのバッファ（ブロック１５−１８）内に存在している。そのため、一度そのバッファのデータを全て磁気ディスク１８に書き出し解放する。解放されたバッファは、Ｂｔｒｅｅから削除される。そして、あらためてそのデータサイズに合うバッファを確保する。確保したバッファは、図１１に示すようにＢｔｒｅｅに挿入する（ブロック１５−１７）。
【００４７】
このようにすることによって、磁気ディスク上に書き出されたブロック１８のデータを他のプログラムが使用できるようになる。
【００４８】
パターン４では、要求するデータの領域が例えばブロック１６５−１６７の場合には、このデータの領域は図９のＢｔｒｅｅでは、２つのバッファ（ブロック１６５−１６６および１６７−１６８）内に存在している。そのため、これら２つのバッファのデータを磁気ディスク１８に書き出し解放する。解放されたバッファは、Ｂｔｒｅｅから削除される。そして、あらためてそのデータサイズに合うバッファを確保する。確保したバッファは、図１３に示すようにＢｔｒｅｅに挿入する（ブロック１６５−１６７）。
【００４９】
このようにすることによって、図１２のＢｔｒｅｅでは、ブロック１６５−１６７よりなるデータの領域の検索において２つのノードを検索しなければならないが、図１３のＢｔｒｅｅでは１つのノードの検索で済むので検索速度が向上する。また、磁気ディスク上に書き出されたブロック１８のデータを他のプログラムが使用できるようになっている。
【００５０】
以上のようにＢｔｒｅｅ上でバッファの挿入や削除を繰り返していると、Ｂｔｒｅｅのバランスが悪くなる。Ｂｔｒｅｅのバランスが悪くなるとツリーの探索に要する時間が大きくなるので、適当なタイミングでツリーのバランスを整えるように修正する必要がある。
【００５１】
次に、Ｂｔｒｅｅの修正について説明する。Ｂｔｒｅｅの状態が図１４に示す状態にある場合に、新たなバッファ（ブロック１４８−１５０）が確保され、図１５に示すようにＢｔｒｅｅに挿入され、アンバランスが起こる。図１５では、アンバランスを生じたツリー部分を点線で囲んで示している。このようなアンバランスの発生は、Ｂｔｒｅｅの検索時間を増大し、望ましくない。また、このようなＢｔｒｅｅのアンバランスは、バッファが削除されたときにも生じる。このようなアンバランスを修正するタイミングとしては、以下の２通りのうちのいずれかで行う。
【００５２】
（１）Ｂｔｒｅｅ上でバッファの挿入または削除時にアンバランスが生じたら、すぐに修正する。このような修正は、修正箇所が少ないときに適している。図１６は、図１５のＢｔｒｅｅを修正してバランスが整えられたＢｔｒｅｅを示す。
【００５３】
（２）修正が多岐にわたって行われる場合は、ＣＰＵの空き時間に修正する。ＣＰＵの空き時間に修正する場合には、全体修正を行うか、あるいは部分修正を行うかは、空き時間の大きさによって適宜選択される。
【００５４】
【発明の効果】
本発明によれば、バッファキャッシュを可変長にし、Ｂｔｒｅｅを採用したため、大きさがばらばらなデータでも高速アクセスできる。
【図面の簡単な説明】
【図１】本発明が適用される交換機システムの基本構造を示す図である。
【図２】バッファキャッシュ装置の機能ブロック図である。
【図３】Ｂｔｒｅｅを示す図である。
【図４】フリーリストの構成を示す図である。
【図５】本発明の動作を説明するためのフローチャートである。
【図６】本発明の動作を説明するためのフローチャートである。
【図７】本発明の動作を説明するためのフローチャートである。
【図８】本発明の動作を説明するためのフローチャートである。
【図９】Ｂｔｒｅｅの状態を示す図である。
【図１０】Ｂｔｒｅｅの状態を示す図である。
【図１１】Ｂｔｒｅｅの状態を示す図である。
【図１２】Ｂｔｒｅｅの状態を示す図である。
【図１３】Ｂｔｒｅｅの状態を示す図である。
【図１４】Ｂｔｒｅｅの修正を示す図である。
【図１５】Ｂｔｒｅｅの修正を示す図である。
【図１６】Ｂｔｒｅｅの修正を示す図である。
【図１７】交換機システムの基本構成を示す図である。
【図１８】交換機の一般的なファイル操作を説明する図である。
【符号の説明】
１０  電話加入者
１２  通話路系装置
１６  プロセッサ（ＣＰＵ）
１８  磁気ディスク
２０  磁気テープ
２２  コンソール
２３  バッファキャッシュ装置
２４  要求受付装置
２６  Ｂｔｒｅｅ検索装置
２８  バッファ検索装置
３０  最適バッファ検索装置
３２  バッファ確保解放装置
３４  Ｂｔｒｅｅ修正装置
３８  バッファキャッシュ
４０  バッファ管理装置
【図１】
0003543661.tif 000002
【図２】
0003543661.tif 000003
【図３】
0003543661.tif 000004
【図４】
0003543661.tif 000005
【図５】
0003543661.tif 000006
【図６】
0003543661.tif 000007
【図７】
0003543661.tif 000008
【図８】
0003543661.tif 000009
【図９】
0003543661.tif 000010
【図１０】
0003543661.tif 000011
【図１１】
0003543661.tif 000012
【図１２】
0003543661.tif 000013
【図１３】
0003543661.tif 000014
【図１４】
0003543661.tif 000015
【図１５】
0003543661.tif 000016
【図１６】
0003543661.tif 000017
【図１７】
0003543661.tif 000018
【図１８】
0003543661.tif 000019