(57)【要約】【課題】  データブロック取得処理及び解放処理のいずれも高速化する。【解決手段】  空データブロックを取得する際、空データブロックの情報を格納したエントリを有する空データブロック管理表２２に空データブロックの情報がない場合、領域共用ファイル３のＢＡＭ部５のＢＡＭ記述の複製を有するメモリＢＡＭ２５を参照し、当該ＢＡＭ記述に基づき空データブロックが含まれるデータブロック群を検索し、空データブロックが発見された場合は当該空データブロックの情報を空データブロック管理表２２に登録すると共にメモリＢＡＭ２５を更新する。また、データブロックを解放する際、上記エントリが一杯であれば、メモリＢＡＭ２５を参照し、そのＢＡＭ記述に基づき解放対象となるデータブロックが含まれるデータブロック群を検索して解放してメモリＢＡＭ２５を更新する。【選択図】  図１
2006293542.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータブロックから構成されるデータ部と、
前記データ部中のデータブロックを複数のデータブロック群にグループ分けし、各データブロック群に対応したブロック割当マップブロックを有し、各ブロック割当マップブロックが対応するデータブロック群の各データブロックについてメンバに割当済みか否かを示すビットマップ情報を格納したブロック割当マップ部と、
前記メンバに対応し、当該メンバのメンバ名と当該メンバに割り当てられた前記データブロックのアドレスが格納されたディレクトリエントリを有するディレクトリ部とを有し、
前記メンバが１つのディレクトリエントリと１つ以上のデータブロックとから構成される領域共用ファイルを管理する領域共用ファイル管理装置であって、
空データブロックの情報を格納したエントリを有する第１の管理テーブル及び前記ブロック割当マップ部の前記ビットマップ情報の複製を有する第２の管理テーブルを参照し、データブロックの取得及び／又は解放処理を行うデータブロック処理部を有する領域共用ファイル管理装置。
【請求項２】
前記データブロック処理部は、前記第１の管理テーブル及び第２の管理テーブルを参照し、前記空データブロックを取得するデータブロック取得部を有する
ことを特徴とする請求項１記載の領域共用ファイル管理装置。
【請求項３】
前記データブロック取得部は、前記第１の管理テーブルのエントリがいずれも前記空データブロックの情報を格納していない空エントリである場合、前記第２の管理テーブルを参照し、前記ビットマップ情報に基づき空データブロックが含まれるデータブロック群を検索し、空データブロックが発見された場合は当該空データブロックの情報を前記第１の管理テーブルに登録すると共に前記第２の管理テーブルを更新する
ことを特徴とする請求項２記載の領域共用ファイル管理装置。
【請求項４】
前記データブロック処理部は、前記第１の管理テーブル及び第２の管理テーブルを参照し、解放対象となるデータブロックを解放するデータブロック解放部を有する
ことを特徴とする請求項１記載の領域共用ファイル管理装置。
【請求項５】
前記データブロック解放部は、前記第１の管理テーブルのエントリのいずれにも前記空データブロックの情報が格納されている場合、前記第２の管理テーブルを参照し、前記ビットマップ情報に基づき前記解放対象となるデータブロックが含まれるデータブロック群を検索して更新する
ことを特徴とする請求項４記載の領域共用ファイル管理装置。
【請求項６】
前記領域共用ファイルのオープン時に前記ブロック割当マップ部における前記ビットマップ情報を読み出し前記第２の管理テーブルを生成する
ことを特徴とする請求項１記載の領域共用ファイル管理装置。
【請求項７】
前記領域共用ファイルのクローズ時に前記第２の管理テーブルの前記ビットマップ情報を前記ブロック割当マップ部に書き戻す
ことを特徴とする請求項１記載の領域共用ファイル管理装置。
【請求項８】
複数のデータブロックから構成されるデータ部と、
前記データ部中のデータブロックを複数のデータブロック群にグループ分けし、各データブロック群に対応したブロック割当マップブロックを有し、各ブロック割当マップブロックが対応するデータブロック群の各データブロックについてメンバに割当済みか否かを示すビットマップ情報を格納したブロック割当マップ部と、
前記メンバに対応し、当該メンバのメンバ名と当該メンバに割り当てられた前記データブロックのアドレスが格納されたディレクトリエントリを有するディレクトリ部とを有し、
前記メンバが１つのディレクトリエントリと１つ以上のデータブロックとから構成される領域共用ファイルを管理する領域共用ファイル管理方法であって、
空データブロックの情報を格納したエントリを有する第１の管理テーブル及び前記ブロック割当マップ部の前記ビットマップ情報の複製を有する第２の管理テーブルを参照し、データブロックの取得及び／又は解放処理を行う領域共用ファイル管理方法。
【請求項９】
空データブロックを取得する際には、
前記第１の管理テーブルのエントリを検索し、当該エントリがいずれも前記空データブロックの情報を格納していない空エントリである場合、前記第２の管理テーブルを参照し、
前記第２の管理テーブルの前記ビットマップ情報に基づき空データブロックが含まれるデータブロック群を検索し、空データブロックが発見された場合は当該空データブロックの情報を前記第１の管理テーブルに登録すると共に前記第２の管理テーブルを更新する
ことを特徴とする請求項８記載の領域共用ファイル管理方法。
【請求項１０】
解放対象となるデータブロックを解放する際には、
前記第１の管理テーブルのエントリにいずれも前記空データブロックの情報が格納されている場合、前記第２の管理テーブルを参照し、
前記ビットマップ情報に基づき前記解放対象となるデータブロックが含まれるデータブロック群を検索して更新する
ことを特徴とする請求項８記載の領域共用ファイル管理方法。
【請求項１１】
複数のデータブロックから構成されるデータ部と、
前記データ部中のデータブロックを複数のデータブロック群にグループ分けし、各データブロック群に対応したブロック割当マップブロックを有し、各ブロック割当マップブロックが対応するデータブロック群の各データブロックについてメンバに割当済みか否かを示すビットマップ情報を格納したブロック割当マップ部と、
前記メンバに対応し、当該メンバのメンバ名と当該メンバに割り当てられた前記データブロックのアドレスが格納されたディレクトリエントリを有するディレクトリ部とを有し、
前記メンバが１つのディレクトリエントリと１つ以上のデータブロックとから構成される領域共用ファイルを管理する動作をコンピュータに実行させるためのプログラムであって、
空データブロックの情報を格納したエントリを有する第１の管理テーブル及び前記ブロック割当マップ部の前記ビットマップ情報の複製を有する第２の管理テーブルを参照し、データブロックの取得及び／又は解放処理を行うことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のメンバによってデータ部が共用される領域共用ファイル管理装置、領域共用ファイル管理及びプログラムに関し、特に、領域共用ファイルからのデータ管理を高速化することができる領域共用ファイル管理装置、領域共用ファイル管理方法及びプログラムに関する。
【背景技術】
【０００２】
従来のこの種の技術として、領域共用ファイルのデータ領域を連続した定数個のデータブロックからなる論理トラックに分割し、この論理トラックをメンバに対する割り当て及び解放の単位とし、論理トラックを論理トラック使用状況ビットマップ（ブロック割り当てマップ（Block Allocation Map（ＢＡＭ））ブロック）で管理する場合に、ＢＡＭブロックの一部をテーブル化した空論理トラック管理テーブルをメモリ上に作成することにより、ＢＡＭブロックへのアクセス回数を減らし、メンバの削除処理を高速化する技術が知られている（例えば、特許文献１参照）。即ち、上述した従来の技術では、メンバの削除時、データブロック間のチェーンを辿りながらメンバが占有していた論理トラックを空論理トラック管理テーブルに返却し、空論理トラック管理テーブルが満杯になり、返却できない場合には、直接ＢＡＭブロックに論理トラックを返却するようにしている。
【０００３】
従来の領域共用ファイルのデータブロック取得・解放方式について説明する。図１５は、従来の領域共用ファイル管理装置を示す模式図、図１６は、ＭＡＭブロック管理表を示す模式図、図１７は従来のデータブロックの取得処理を示すフローチャート、図１８は、従来のデータブロック解放処理を示すフローチャートである。
【０００４】
図１５に示すように、領域共用ファイル管理装置１０１０は、プログラム制御により動作するホストコンピュータ１００１と、領域共用ファイル１００３とを有する。領域共用ファイル１００３は、ディレクトリ部１００４、ＢＡＭ部１００５、及びデータ部１００６を有する。データ部１００６は、複数個のデータブロック１０６１で構成される。データブロック１０６１は、データ（ファイル）を格納するための物理的な最小単位である。ＢＡＭ部１００５は、複数個のＢＡＭブロック１０５１から構成され、各ＢＡＭブロックは、複数個のデータブロックからなるデータブロック群における各データブロックの使用状態を示すビットマップ、すなわちデータブロック群の各データブロックについて、メンバに割り当てられているか否かを示す１又は０のｂｉｔを有している。また、ディレクトリ部１００４は、複数個のディレクトリブロック１０４１から構成される。各ディレクトリブロック１０４１は、１つのブロックヘッダ１０４２と複数個のディレクトリエントリ１０４３とを有する。
【０００５】
ホストコンピュータ１は、データブロック取得部１０１１及びデータブロック解放部１０１２と、メモリ領域１００２と有する。データブロック取得部１０１１は、空データブロック１０６１へのメンバへの割り当てを行う。データブロック解放部１０１２は、メンバへ割り当てられていたデータブロック１０６１の解放を行う。メモリ領域１００２には、空データブロックを管理するためのテーブルとして空データブロック管理表２１及びＢＡＭブロック管理表２７を有する。ＢＡＭブロック管理表２７は、ＢＡＭブロック管理用ビットマップを有する。これは、ＢＡＭブロック内の空データブロックの存在の有無を管理するビットマップ（０又は１のｂｉｔ）であり、図１６に示すように、ＢＡＭブロックに空データブロックが１つでも存在する場合は１Ｂ、全く存在しない場合が０Ｂとし、先頭ビットが先頭のＢＡＭブロックに対応するビットマップとなっている。
【０００６】
この領域共用ファイル管理装置１０１０においては、領域共用ファイル１００３に登録されているメンバは、１つのディレクトリエントリ１０４３と幾つかのデータブロック１０６１とから構成されている。メンバを構成する先頭データブロックと最終データブロックのブロックアドレスはディレクトリエントリ１０４３内に格納されており、各データブロック１０６１は、前後のデータブロックのブロックアドレスを格納しており、お互いにリンクされている。
【０００７】
この従来の領域共用ファイル管理装置１０１０が空データブロックへメンバの割り当てをする際には、データブロック取得部１０１１が以下のように処理する。すなわち、図１７に示すように、空データブロック管理表１０２１から、空データブロックが登録されたエントリを検索し（ステップＣ１）、エントリがある場合（ステップＣ２：ＹＥＳ）、当該エントリに登録されている空データブロックの情報を読み出し（ステップＣ３）、当該読み出したエントリをクリアする（ステップＣ４）。
【０００８】
一方、ステップＣ２にてエントリが見つからない場合、ＢＡＭブロック管理表１０２７を検索し（ステップＣ５）、空データブロックが存在するか否かをチェックする（ステップＣ６）。すなわち、ＢＡＭブロック管理表１０２７のビットマップに１がある場合には、領域共用ファイル１００３のＢＡＭ部１００６の該当ＢＡＭブロックを読み出し（ステップＣ７）、空データブロック情報を空データブロック管理表１０２１のエントリに登録する（ステップＣ８）。そして、登録したデータブロックを、ＢＡＭ部１００５のＢＡＭブロック上、割当状態とする（ステップＣ９）。すなわち、ＢＡＭブロックにおいて、対応するデータブロックのビットを１にする。次いで、空データブロック管理表１０２１の全エントリに空データブロック情報が登録済みか否かをチェックし（ステップＣ１１）、空エントリがある場合には、ステップＣ７で読み出したＢＡＭブロック内に空データブロックが残っている場合にはステップＣ８からの処理を繰り返す。また、残っていない場合には、ＢＡＭブロック管理表１０２７の当該ＢＡＭブロックのビットを０にし（ステップＣ１２）、更新したＢＡＭブロックを領域共用ファイル１００３のＢＡＭ部１００６に上書きする（ステップＣ１３）。そして、更にＢＡＭブロック管理表１０２７を検索し、空データブロックが存在するＢＡＭブロックがあるか否かをチェックし、存在する場合は、ステップＣ７からの処理を繰り返す。
【０００９】
一方、ステップＣ１０において、空データブロック管理表１０２１のエントリが全部埋まっている場合には更新したＢＡＭブロックを領域共用ファイル１００３のＢＡＭ部１００６に上書きし（ステップＣ１６）、ステップＣ２の処理に戻る。また、ステップＣ１５において空データブロックが存在するＢＡＭブロックなしと判断された場合にもステップＣ２の処理にもどる。更に、ステップＣ６において、空データブロックが存在するＢＡＭブロックがなしと判断された場合には、空データブロックは存在しないとして、エラー情報を出力する（ステップＣ１７）。
【００１０】
この従来の領域共用ファイル管理装置が、メンバに割り当てられていたデータブロックを解放する際には、データブロック解放部１０１２が以下のように処理する。すなわち、図１８に示すように、空データブロック管理表１０２１のエントリを検索し（ステップＤ１）、空エントリがある場合（ステップＤ２：ＹＥＳ）、解放対象のデータブロックの情報を空データブロック管理表１０２１のエントリに登録する（ステップＤ３）。
【００１１】
一方、空エントリがない場合、すなわち空データブロック管理表１０２１の全エントリに空データブロックが登録されている場合には、解放対象のデータブロックを有するＢＡＭブロックを領域共用ファイル１００３のＢＡＭ部１００６から読み出し（ステップＤ４）、ＢＡＭブロックに空データブロックとして登録する（ステップＤ５）。このときＢＡＭブロック管理表１０２７の当該ＢＡＭブロックのビットが立っていない場合はビットを立て（ステップＤ６）、更新したＢＡＭブロックを領域共用ファイル１００３のＢＡＭ部１００６に書き戻す（ステップＤ７）。
【００１２】
このように、データブロック取得部１０１１は空データブロック管理表１０２１にエントリが存在しなかった場合、また、データブロック解放部１０１２は空データブロック管理表１０２１に空エントリが存在しなかった場合、領域共用ファイル１００３のＢＡＭ部１００６からＢＡＭブロックを読み出し、更新し、書き込みを行う必要がある。すなわち、領域共用ファイル１００３への入出力が発生し、データブロック取得部１０１１、データブロック解放部１０１２の処理が遅くなるという問題点があった。
【００１３】
そこで、本件出願人は先に、ＢＡＭブロックの入出力回数を減らすことにより、メンバの削除処理を高速化できるようにした領域共用ファイル管理装置について出願している（特許文献２参照）。この領域共用管理装置は、メンバの削除時、削除対象となるメンバを構成するデータブロックを、データブロック間のチェーンを辿りながら求めると共に、この求めたデータブロックのアドレスをメモリ領域の拡張データブロック管理表に格納し、メンバを構成する全てのデータブロックのアドレスをこの拡張データブロック管理表に格納した後、解放されるデータブロックを複数含むデータブロック群に対応するＢＡＭブロックについては、拡張データブロック管理表に基づいて一回の入出力でＢＡＭ記述を更新することでメンバ削除を行うものである。
【特許文献１】特開昭６２−１５４１４９号公報
【特許文献２】特開２００４−３３４２５５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかしながら、特許文献２に記載の技術においては、拡張データブロック管理表をメンバ削除時に一時的にメモリ上に作成することで、メンバ削除処理は高速化できるものの、空データブロックに対するメンバの割り当て処理を高速化することができない。また、拡張空データブロック管理表は、空データブロックと１対１のテーブルであり、検索効率が悪く、メモリ量が多くなるという問題点もある。
【００１５】
本発明は、このような問題点を解決するためになされたものであり、データブロック取得処理及び解放処理のいずれも高速化することができる領域共用ファイル管理装置、領域共用ファイル管理方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
上述した目的を達成するために、本発明にかかる領域共用ファイル管理装置は、複数のデータブロックから構成されるデータ部と、前記データ部中のデータブロックを複数のデータブロック群にグループ分けし、各データブロック群に対応したブロック割当マップブロックを有し、各ブロック割当マップブロックが対応するデータブロック群の各データブロックについてメンバに割当済みか否かを示すビットマップ情報を格納したブロック割当マップ部と、前記メンバに対応し、当該メンバのメンバ名と当該メンバに割り当てられた前記データブロックのアドレスが格納されたディレクトリエントリを有するディレクトリ部とを有し、前記メンバが１つのディレクトリエントリと１つ以上のデータブロックとから構成される領域共用ファイルを管理する領域共用ファイル管理装置であって、空データブロックの情報を格納したエントリを有する第１の管理テーブル及び前記ブロック割当マップ部の前記ビットマップ情報の複製を有する第２の管理テーブルを参照し、データブロックの取得及び／又は解放処理を行うデータブロック処理部を有するものである。
【００１７】
本発明においては、空データブロックの情報を格納したエントリを有する第１の管理テーブルの他に、データブロック群の各データブロックについてメンバに割当済みか否かを示すビットマップ情報の複製が格納された第２の管理テーブルを有するので、第１の管理テーブルのエントリに空データブロックが格納されていなくても、第２の管理テーブルを参照して空データブロックを取得することができる。また、エントリが全て空であっても、第２の管理テーブルを参照してデータブロックを解放させることができる。
【００１８】
すなわち、前記データブロック処理部は、前記第１の管理テーブル及び第２の管理テーブルを参照し、前記空データブロックを取得するデータブロック取得部を有することができる。
【００１９】
この場合、前記データブロック取得部は、前記第１の管理テーブルのエントリがいずれも前記空データブロックの情報を格納していない空エントリである場合、前記第２の管理テーブルを参照し、前記ビットマップ情報に基づき空データブロックが含まれるデータブロック群を検索し、空データブロックが発見された場合は当該空データブロックの情報を前記第１の管理テーブルに登録すると共に前記第２の管理テーブルを更新することができる。これにより、データブロック取得の際に、領域共用ファイルからＢＡＭブロックを読み出し又は書き込む必要がない。
【００２０】
また、前記データブロック処理部は、前記第１の管理テーブル及び第２の管理テーブルを参照し、解放対象となるデータブロックを解放するデータブロック解放部を有することができる。
【００２１】
この場合、前記データブロック解放部は、前記第１の管理テーブルのエントリのいずれにも前記空データブロックの情報が格納されている場合、前記第２の管理テーブルを参照し、前記ビットマップ情報に基づき前記解放対象となるデータブロックが含まれるデータブロック群を検索して更新することができる。これにより、データブロック解放の際に、領域共用ファイルからＢＡＭブロックを読み出し又は書き込む必要がない。
【００２２】
また、前記領域共用ファイルのオープン時に前記ブロック割当マップ部における前記ビットマップ情報を読み出し前記第２の管理テーブルを生成することができ、ファイルのオープン時にＢＡＭ部を読み出すのみでよい。
【００２３】
更に、前記領域共用ファイルのクローズ時に前記第２の管理テーブルの前記ビットマップ情報を前記ブロック割当マップ部に書き戻すことができ、これにより、ファイルのＢＡＭ部を最新の状態に更新することができる。
【００２４】
本発明にかかる領域共用ファイル管理方法は、複数のデータブロックから構成されるデータ部と、前記データ部中のデータブロックを複数のデータブロック群にグループ分けし、各データブロック群に対応したブロック割当マップブロックを有し、各ブロック割当マップブロックが対応するデータブロック群の各データブロックについてメンバに割当済みか否かを示すビットマップ情報を格納したブロック割当マップ部と、前記メンバに対応し、当該メンバのメンバ名と当該メンバに割り当てられた前記データブロックのアドレスが格納されたディレクトリエントリを有するディレクトリ部とを有し、前記メンバが１つのディレクトリエントリと１つ以上のデータブロックとから構成される領域共用ファイルを管理する領域共用ファイル管理方法であって、空データブロックの情報を格納したエントリを有する第１の管理テーブル及び前記ブロック割当マップ部の前記ビットマップ情報の複製を有する第２の管理テーブルを参照し、データブロックの取得及び／又は解放処理を行うものである。
【００２５】
また、本発明に係るプログラムは、上述した領域共用ファイル管理動作をコンピュータに実行させるものである。
【発明の効果】
【００２６】
本発明によれば、データブロック取得処理及び解放処理のいずれも高速化することができる領域共用ファイル管理装置、領域共用ファイル管理方法及びプログラムを提供することができる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。この実施の形態は、本発明を、領域共用ファイルにおいて、データブロックのメンバへの取得処理、及びデータブロックのメンバからの解放処理をいずれも高速に行う領域共用ファイル管理装置に適用したものである。
【００２８】
図１は、本発明の実施の形態にかかる領域共用ファイル管理装置を示すブロック図である。領域共用ファイル管理装置１０は、プログラム制御により動作するホストコンピュータ１と、領域共用ファイル３とを有する。ホストコンピュータ１は、中央処理装置、プロセッサ又はデータ処理装置などとも呼ばれる。
【００２９】
領域共用ファイル３は、ディスクなどの記録媒体上に設けられ、ディレクトリ部４、ＢＡＭ部５、及びデータ部６を有する。
【００３０】
データ部６は、１又は複数個のデータブロック６１で構成される。データブロック６１は、データ（ファイル）を格納するための物理的な最小単位である。データブロック６１は、図２に示すように、１つのブロックヘッダ６２と、複数のレコード６３１〜６３ｎとから構成されている。ブロックヘッダ６２には、図３に示すように、次データブロックアドレス６２１と、前データブロックアドレス６２２と、メンバ識別子６２３と、レコード数６２４と、バイト数６２５とが格納されている。次データブロックアドレス６２１は、当該データブロックが割り当てられているメンバの次（１つ後）のデータブロックアドレスを示すもので、メンバの最終データブロックの場合は、オール０に設定される。
【００３１】
前データブロックアドレス６２２は、当該データブロックが割り当てられているメンバの１つ前のデータブロックのアドレスを示すアドレスを示すもので、メンバの先頭データブロックの場合は、オール０に設定される。
【００３２】
メンバ識別子６２３は、当該データブロック６１に割り当てられたメンバを識別するための識別子であり、メンバ毎に一意に決められたメンバを識別するための識別番号を示す。また、レコード数６２４は、当該データブロック６１に存在するレコード数（＝ｎ）を示す。さらに、バイト数６２５は、当該データブロック６１に存在するレコードの総バイト数を示す。
【００３３】
ＢＡＭ部５は、１又は複数個のＢＡＭブロック５１を有する。各ＢＡＭブロック５１は、図４に示すように、１つのブロックヘッダ５２と１つのＢＡＭ記述５３を有する。ＢＡＭ記述５３は、当該ＢＡＭブロック５１が対応するデータブロック群の各データブロックのメンバへの割り当て状況を管理しているビットマップ情報（データブロック管理用ビットマップ）である。例えば、データブロック６１がメンバへ割り当てられていない場合、すなわち未使用の場合は１Ｂ、データブロック６１がメンバに割当られている場合、すなわち使用中の場合は０Ｂとなる。ブロックヘッダ５２は、当該ＢＡＭブロック５１に対応するデータブロック群中に存在する、未使用のデータブロック数を示す。
【００３４】
具体的には、例えば、図１に示したＢＡＭブロック５１４は、アドレス[１６]〜[２０]（なお、図中のデータブロックの右に示す数値がアドレスを示すものとする。）の５個のデータブロック６１から構成されるデータブロック群Ｇ４に対応するものである。この場合のＢＡＭブロック５１４のＢＡＭ記述５３４は、「１００１１」であり、すなわち、アドレス[１６][１９][２０]のデータブロック６１が未使用であり、アドレス[１７][１８]のデータブロック６１が割り当て済みであることを示している。そして、未使用のデータブロック数＝３であるため、この場合のＢＡＭブロック５１４のブロックヘッダ５２４は、３となる。
【００３５】
ディレクトリ部４は、１又は複数個のディレクトリブロック４１を有する。各ディレクトリブロック４１は、図５に示すように、１つのブロックヘッダ４２と１又は複数個のディレクトリエントリ４３とを有する。ディレクトリヘッダ４２は、ディレクトリブロック４１に含まれるディレクトリエントリ４３の使用バイト数を格納する。ディレクトリエントリ４３はディレクトリブロック４１の先頭から順番に格納されていくが、ディレクトリエントリ４３のデータ長は可変である。このため、先頭から何バイトが既にディレクトリエントリ４３として使用されているかを示す使用バイト数をディレクトリヘッダ４２に格納しておくことにより、次に当該ディレクトリ４２にディレクトリエントリ４３を格納する際の登録位置を認識することができる。
【００３６】
各ディレクトリエントリ４３は、図６に示すように、メンバ名４３１と、メンバ識別子４３２と、先頭データブロックアドレス４３３と、最終データブロックアドレス４３４とが格納される。メンバ名４３１は、データブロック６１を割り当てたメンバの名前を示し、その長さは可変である。メンバ識別子４３２は、メンバ毎に一意に決められたメンバを識別するための識別番号を示す。また、先頭データブロックアドレス４３３は、メンバに割り当てられた先頭のデータブロック６１のアドレスを示し、最終データブロックアドレス４３３は、メンバに割り当てられた終端のデータブロック６１のアドレスを示す。
【００３７】
ホストコンピュータ１は、データブロック処理部としてのデータブロック取得部１１及びデータブロック解放部１２と、メモリ領域２と有する。メモリ領域２には、第１の管理テーブルとしての空データブロック管理表２１及び第２の管理テーブルとしてのメモリＢＡＭ２４が格納されている。
【００３８】
データブロック取得部１１は、空データブロック６１へのメンバへの割り当てを行う。具体的には、メンバ名をキーとして、ディレクトリ部４にディレクトリエントリ４３を登録すると共に、空データブロックをメンバに割り当て、データの出力を行う。データブロック解放部１２は、メンバへ割り当てられていたデータブロック６１の解放を行う。具体的には、メンバ名をキーとして、ディレクトリ部４に登録されているディレクトリエントリ４３を削除すると共に、当該メンバのデータが格納されていたデータブロックの解放を行う。
【００３９】
メモリ領域２における空データブロック管理表２１は、図７に示すように、１つのブロックヘッダ部２２と、複数のブロックエントリ部２３とから構成される。ブロックヘッダ部２２には、図８に示すように、当該空データブロック管理表２１の総エントリ数２２１が格納される。
【００４０】
エントリ部２３は、図９に示すように、データ部６に存在する空データブロックの内の、一部の空データブロックブロックアドレス２３２及び当該空データブロックのビットマップが格納されているＢＡＭブロック５１のアドレスであるＢＡＭブロックアドレス２３１が格納されている。エントリ部２３に空データブロックの情報が格納されていない空きエントリの場合は、ＢＡＭブロックアドレス２３１及び空データブロックブロックアドレス２３２はいずれも０を格納する。
【００４１】
メモリＢＡＭ２４は、図１０に示すように、１つのヘッダ部２５と、複数のエントリ部２６とから構成される。メモリＢＡＭ２４のヘッダ部２５は、図１１に示すように、エントリ数２５１が格納される。エントリ数２５１には、メモリＢＡＭの総エントリ数、すなわち、当該領域共用ファイル３のＢＡＭブロック数が格納される。
【００４２】
メモリＢＡＭ２４のエントリ部２６は、図１２に示すように、ＢＡＭブロック情報２６２及び更新情報２６１を有する。ＢＡＭブロック情報２６２は、図４に示すＢＡＭブロック５１の内容、すなわちブロックヘッダ５２及びＢＡＭ記述５３を複製したものである。すなわち、メモリＢＡＭ２４は、領域共用ファイル３のオープン時において、領域共用ファイル３のＢＡＭ部５を読み出し作成する。更新情報２６１は、当該エントリ部２６のＢＡＭブロック情報２６２を、領域共用ファイル３のオープン時にＢＡＭブロック５１から読み出した状態から更新したか否かを管理する情報であり、例えば、更新なしの場合は[００ｘ]が格納され、更新有りの場合は[０１ｘ]が格納される。
【００４３】
メモリＢＡＭ２４は、領域共用ファイル３のクローズ時に削除されるが、領域共用ファイル３上のＢＡＭ部５の新鮮さを保つために、メンバのクローズ時にメモリＢＡＭ２４のエントリ部２６のＢＡＭブロック情報２６２がＢＡＭブロック５１に書き戻される。ここで、例えば更新情報２６１が全て更新なしであればＢＡＭブロック５１に書き戻す処理は不要である。
【００４４】
その他、図示せぬディスク、半導体メモリ又はその他の記録媒体を有し、ホストコンピュータ１上にデータブロック取得部１１、データブロック解放部１２を実現するためのプログラムが記録されている。このプログラムは、ホストコンピュータ１によって読み取られ、その動作を制御することにより、ホストコンピュータ１上にデータブロック取得部１１、データブロック解放部１２を実現する。
【００４５】
この領域共用ファイル管理装置１０においては、領域共用ファイル３に登録されているメンバは、１つのディレクトリエントリ４３と幾つかのデータブロック６１とから構成されている。メンバを構成する先頭データブロックと最終データブロックのブロックアドレスはディレクトリエントリ４３内の先頭データブロックアドレス４３３、最終データブロックアドレス４３４（図６参照）に格納されており、各データブロック６１は、ブロックヘッダ６２内の次データブロックアドレス６２１、前データブロックアドレス６２２（図３参照）に前後のデータブロックのブロックアドレスを格納しており、お互いにリンクされている。
【００４６】
すなわち、メンバを読み出す際には、ディレクトリ部４のディレクトリエントリ４３に含まれる先頭データブロックアドレス４３３を読み出し、その先頭データブロック６１にアクセスする。データブロック６１のブロックヘッダ６２には、次のデータブロックアドレス６２１が格納されており、データブロック６１のレコード６３１〜６３ｎを読み出したら、次のデータブロック６１をアクセスすることができる。こうして、例えば、ディレクトリブロック４１２のディレクトリエントリ４３２にアクセスすることで、データブロック[０１]、[１２]、[０９]、[１８]、[１５]、[０４]の順でデータブロック６１を読み出すことができる。
【００４７】
同じく、ディレクトリブロック４１８のディレクトリエントリ４３８にアクセスすることで、データブロック[０２]、[０６]、[１１]、[１７]、[１３]、[１０]、[０５]の順でデータブロック６１を読み出すことができる。メンバから解放する場合は、同様にデータブロック間のチェーンを辿りながら解放すべきデータブロックを求めることができる。
【００４８】
データブロック６１がメンバに割り当て済みかどうかは、空データブロック管理表２１、メモリＢＡＭ２４、およびＢＡＭ部５により管理されている。ここで、本実施の形態においては、ホストコンピュータ１におけるデータブロック取得部１１及びデータブロック解放部１２は、ディスク（領域共用ファイル３）上へのＢＡＭ部５の入出力を行うことなく、空データブロック管理表２１及びメモリＢＡＭ２４上のみでデータブロックの取得・解放を行うことによって、高速にデータブロックの取得・解放を行うことができる。
【００４９】
次に、本実施の形態にかかる領域共用ファイル管理装置１０の動作について説明する。図１３は、データブロック取得部１１における空データブロック６１へのメンバへの割り当方法を示すフローチャート、図１４は、データブロック解放部１２におけるメンバへ割り当てられていたデータブロック６１の解放方法を示すフローチャートである。
【００５０】
図１３に示すように、データブロック取得部１１は、先ず、空データブロック管理表２１の検索を行い（ステップＡ１）、データブロック６１のうち、空データブロック６１を格納しているエントリ部２３が存在するか否かをチェックする（ステップＡ２）。空データブロック６１を格納したエントリ部２３が存在した場合は、当該空データブロック６１を割当データブロックとし、このデータブロック６１の情報をデータブロック取得部１１が取得し（ステップＡ３）、当該割当データブロックが格納されていたエントリ部２３を０クリアして（ステップＡ４）処理を終了する。エントリ部２３をクリアすることで、当該エントリ部は、空データブロックが未登録の空エントリとなる。
【００５１】
一方、ステップＡ２で空データブロック管理表２１上に空データブロック６１を格納したエントリ部２３が存在しなかった場合、すなわち空データブロックが１つも空データブロック管理表２１に登録されていなかった場合は、メモリＢＡＭ２４を検索し（ステップＡ５）、空データブロック６１が存在するエントリ部２６が存在するかどうかをチェックする（ステップＡ６）。空データブロック６１が存在するエントリ部２６が存在しない場合は、エラー情報を出力し（ステップＡ１３）処理を終了する。
【００５２】
ステップＡ６で空データブロック６１が存在するエントリ部２６が存在した場合は、そのＢＡＭブロック情報２６２から、空データブロックのアドレス及びそのＢＡＭブロックアドレスを空データブロック管理表２１のエントリ部２３に登録する（ステップＡ７）。ここで、例えば上述のＢＡＭブロック５１４に対応するＢＡＭブロック情報２６２を有する場合は、場合、ＢＡＭブロック５１４には３つの空データブロック[１６]、[１９]、[２０]が存在するため、空データブロック管理表２１のエントリ部２３のうち３つのエントリ部２３に空データブロックの情報が登録されることとなる。そして、当該エントリ部２６のＢＡＭブロック情報２６２において、登録した空データブロック６１を割り当て済み状態（１Ｂを立てる）とし（ステップＡ８）、更新したエントリ部２６の更新情報２６１を更新ありにする（ステップＡ９）。これにより、領域共用ファイル３をクローズする際、メモリＢＡＭ２４がＢＡＭブ５に書き戻される。
【００５３】
次に、空データブロック管理表２１の全エントリ部２３に空データブロック情報が登録されているか否かを判断し（ステップＡ１０）、全エントリ部２３に空データブロック情報が登録されている場合は、ステップＡ１からの処理を繰り返す。ステップＡ１０で全エントリ部２３が１以上の空エントリを有する場合、再度メモリＢＡＭ２４を検索し（ステップＡ１１）、空データブロック６１が存在するＢＡＭブロック情報２６２を有するエントリ部２６が存在するか否かをチェックする（ステップＡ１２）。空データブロック６１が存在するエントリ部２６が存在しない場合は、ステップＡ１からの処理を繰り返す。空データブロック６１が存在するエントリ部２６が存在する場合は、ステップＡ７からの処理を繰り返す。
【００５４】
一方、メンバへ割り当てられていたデータブロック６１を解放する場合には、図１４に示すように、データブロック解放部１２が、空データブロック管理表２１を検索し（ステップＢ１）、空データブロック管理表２１のエントリ部２３に、空データブロックが未登録の空エントリが存在するか否かをチェックする（ステップＢ２）。空エントリが存在した場合は、解放対象のデータブロック６１の情報を空データブロック管理表２１のエントリ部２３に登録して（ステップＢ３）処理を終了する。ステップＢ２でエントリ部２３に空エントリが存在しない場合は、メモリＢＡＭ２４において該当データブロックを有するエントリ部２６を検索し、そのデータブロックを空データブロックとする（ステップＢ４）。そして、当該エントリ部２６のＢＡＭブロック情報２６２において、当該データブロック６１を未使用状態（０Ｂを立てる）とし、更新したエントリ部２６の更新情報２６１を更新ありにして（ステップＢ５）処理を終了する。
【００５５】
本実施の形態においては、データブロック取得部１１及びデータブロック解放部１２がメモリＢＡＭ２４を使用することによって、ＢＡＭブロック５１の入出力を行わずにデータブロックの取得・解放を行うことで、空データブロック６１へのメンバへの割り当て時及びメンバへ割り当てられていたデータブロック６１の解放時において領域共用ファイル３への入出力が不要となる。このことにより、領域共用ファイル３におけるデータブロック取得部１１及びデータブロック解放部１２の高速化を図ることができる。
【００５６】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述の実施の形態における任意の処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の伝送媒体を介して伝送することにより提供することも可能である。
【図面の簡単な説明】
【００５７】
【図１】本発明の実施の形態にかかる領域共用ファイル管理装置を示すブロック図である。
【図２】同領域共用ファイル管理装置における領域共用ファイルのディレクトリ部のディレクトリブロックを示す模式図である。
【図３】同ディレクトリ部のディレクトリブロックのディレクトリエントリを示す模式図である。
【図４】本発明の実施の形態にかかる領域共用ファイル管理装置における領域共用ファイルのＢＡＭブロックを示す模式図である。
【図５】同領域共用ファイルのデータブロックを示す模式図である。
【図６】同データブロックのブロックヘッダを示す模式図である。
【図７】本発明の実施の形態にかかる領域共用ファイル管理装置における空データブロック管理表を示す模式図である。
【図８】同空データブロック管理表のヘッダ部を示す模式図である。
【図９】同空データブロック管理表のエントリ部を示す模式図である。
【図１０】本発明の実施の形態にかかる領域共用ファイル管理装置におけるメモリＢＡＭを示す模式図である。
【図１１】同メモリＢＡＭのヘッダ部を示す模式図である。
【図１２】同メモリＢＡＭのエントリ部を示す模式図である。
【図１３】本発明の実施の形態にかかる領域共用ファイル管理装置におけるデータブロック取得処理を示すフローチャートである。
【図１４】本発明の実施の形態にかかる領域共用ファイル管理装置におけるデータブロック解放処理を示すフローチャートである。
【図１５】従来の領域共用ファイル管理装置を示す模式図である。
【図１６】従来の領域共用ファイル管理装置のＭＡＭブロック管理表を示す模式図である。
【図１７】従来の領域共用ファイル管理装置におけるデータブロック取得処理を示すフローチャートである。
【図１８】従来の領域共用ファイル管理装置におけるデータブロック解放処理を示すフローチャートである。
【符号の説明】
【００５８】
２  メモリ領域
３  領域共用ファイル
４  ディレクトリ部
５  ＢＡＭ部
６  データ部
１０  領域共用ファイル管理装置
１１  データブロック取得部
１２  データブロック解放部
２１  空データブロック管理表
２２  ブロックヘッダ部
２３  エントリ部
２３  ブロックエントリ部
２５  ヘッダ部
２６  エントリ部
２７  ブロック管理表
４１  ディレクトリブロック
４２  ブロックヘッダ
４３  ディレクトリエントリ
５１  ブロック
５２  ブロックヘッダ
５３  ＢＡＭ記述
６１  データブロック
６２  ブロックヘッダ
６３  レコード
２２１  総エントリ数
２３１  ブロックアドレス
２３２  データブロックブロックアドレス
２５１  エントリ数
２６１  更新情報
２６２  ブロック情報
４３１  メンバ名
４３２  メンバ識別子
４３３  最終データブロックアドレス
４３３  先頭データブロックアドレス
４３４  最終データブロックアドレス
６２１  次データブロックアドレス
６２２  前データブロックアドレス
６２３  メンバ識別子
６２４  レコード数
６２５  バイト数
【図１】
2006293542.tif 000003
【図２】
2006293542.tif 000004
【図３】
2006293542.tif 000005
【図４】
2006293542.tif 000006
【図５】
2006293542.tif 000007
【図６】
2006293542.tif 000008
【図７】
2006293542.tif 000009
【図８】
2006293542.tif 000010
【図９】
2006293542.tif 000011
【図１０】
2006293542.tif 000012
【図１１】
2006293542.tif 000013
【図１２】
2006293542.tif 000014
【図１３】
2006293542.tif 000015
【図１４】
2006293542.tif 000016
【図１５】
2006293542.tif 000017
【図１６】
2006293542.tif 000018
【図１７】
2006293542.tif 000019
【図１８】
2006293542.tif 000020