(57)【要約】【課題】ファイル内のサブファイルへの出力の高性能化を図る。【解決手段】静的に確保したファイルスペース内で、任意の数のブロックを含む任意の数のサブファイルをファイル内で動的に作成し、サブファイルに対するブロックの追加、削除を動的に行うことによりサブファイルの拡張、縮小を可能とするファイル管理システムにおいて、サブファイルへのデータ出力後、最終ブロックの格納データ量が基準値を超えた場合、事前に空きブロックを追加する。また、サブファイルへのデータ出力時に最終ブロックの格納データ量及び総データ量を記録し、データブロック追加の基準値を超えた場合、データ出力要求とは別のプロセスでサブファイルへ空きブロックを追加することにより、データ出力要求が空きブロックの確保、及び、空き管理領域へのアクセス集中による性能劣化を防ぎながら、一定数量を確保せず、他サブファイルでも空きブロックを利用する。【選択図】図１
2009217357.tif 000002
【特許請求の範囲】
【請求項１】
ファイル内のサブファイルの更新要求に応じて、前記サブファイルの最終ブロックにデータを格納し、前記最終ブロックのデータ格納量が閾値を超えたかどうか判断するサブファイル更新プロセス実行部と、
前記最終ブロックのデータ格納量が閾値を超えた場合に前記サブファイル更新プロセス実行部からの呼び出しに応じて起動し、空きブロックを前記サブファイルに追加するサブファイル拡張プロセス実行部と
を具備する
ファイルスペース追加システム。
【請求項２】
請求項１に記載のファイルスペース追加システムであって、
前記ファイルは、
前記ファイル内の空きブロックの数量及び空きブロックのアドレスを管理する空き管理領域と、
前記ファイル内の空きブロックの集合である空き領域と、
サブファイル単位に先頭ブロック及び最終ブロックのポインタの情報を管理するディレクトリ領域と、
前記ファイル内に作成されたサブファイルのサブファイル名及び前記ディレクトリ領域のサブファイル情報へのポインタを管理するサブファイル管理領域と、
空きブロック追加基準となる空きブロック追加閾値と、
出力データ長が加算される総データ長と、
出力データ件数である総データ件数と
を含む
ファイルスペース追加システム。
【請求項３】
請求項２に記載のファイルスペース追加システムであって、
前記空き領域は、前記ファイル内でサブファイルに割り当てられていない空きブロックを任意の順序に並べ、前記並べられた空きブロックの各々に前後の空きブロックのポインタを格納する
ファイルスペース追加システム。
【請求項４】
請求項３に記載のファイルスペース追加システムであって、
前記サブファイルは、ユーザデータを格納する複数のデータブロックを前記ユーザデータの順序に従って並べ、前記並べられたデータブロックの各々に前後のデータブロックのアドレスを格納する
ファイルスペース追加システム。
【請求項５】
請求項４に記載のファイルスペース追加システムであって、
前記ディレクトリ領域は、
前記サブファイルの先頭のデータブロックのアドレスを格納する先頭ブロックポインタと、
最終のデータブロックのアドレスを格納する最終ブロックポインタと、
最終ブロックの総データ長である最終ブロックデータ長と
を含む
ファイルスペース追加システム。
【請求項６】
請求項５に記載のファイルスペース追加システムであって、
前記空き管理領域は、
前記空き領域内の先頭の空きブロックのアドレスを格納する先頭空きブロックポインタと、
前記空き領域内の最後の空きブロックのアドレスを格納する最終空きブロックポインタと
を含む
ファイルスペース追加システム。
【請求項７】
請求項６に記載のファイルスペース追加システムであって、
前記空きブロック及び前記データブロックの各々は、
各々のブロックの直後のブロックのアドレスを格納する次ブロックポインタと、
各々のブロックの直前のブロックのアドレスを格納する前ブロックポインタと、
各々のブロックがサブファイルに割り当てられた時にユーザデータを格納するためのユーザデータ領域と
を含む
ファイルスペース追加システム。
【請求項８】
請求項７に記載のファイルスペース追加システムであって、
前記サブファイル更新プロセス実行部は、
要求されたデータの出力長がブロック長と前記最終ブロックデータ長の差分より大きい場合、第１空きブロックに前記最終ブロックポインタを位置付け、前記最終ブロックデータ長を初期化し、前記要求されたデータを前記最終ブロックポインタの指すデータブロックに格納し、前記最終ブロックデータ長に前記要求されたデータの出力長を加えた値で前記最終ブロックデータ長を更新し、総データ長に前記要求されたデータの出力長を加えた値で前記総データ長を更新し、総データ件数に１を加算するデータ格納部と、
前記総データ長を前記総データ件数で割った値を空きブロック追加閾値に格納し、前記空きブロック追加閾値が前記要求されたデータの出力長と前記最終ブロックデータ長を合わせた値より小さい場合、前記サブファイル拡張プロセス実行部を呼び出して起動するブロック追加判定部と
を具備する
ファイルスペース追加システム。
【請求項９】
請求項８に記載のファイルスペース追加システムであって、
前記サブファイル更新プロセス実行部は、
空きブロックを優先的に割り当てることを示すブロック優先度を参照し、前記空きブロック追加閾値が前記要求されたデータの出力長と前記最終ブロックデータ長を合わせた値より大きく、前記ブロック優先度が高優先度の場合、前記サブファイル拡張プロセス実行部を呼び出して起動するブロック優先判定部
を更に具備する
ファイルスペース追加システム。
【請求項１０】
請求項８又は９に記載のファイルスペース追加システムであって、
前記サブファイル拡張プロセス実行部は、
前記サブファイル拡張プロセス実行部が前記サブファイル更新プロセス実行部からの呼び出しに応じて起動すると、前記空き管理領域の先頭ブロックである前記第１空きブロックを前記サブファイルの最終ブロックであるデータブロックの次になるようブロックポインタを設定し、前記先頭空きブロックポインタを第２空きブロックに位置付けるブロック追加部
を具備する
ファイルスペース追加システム。
【請求項１１】
（ａ）静的に確保したファイルスペース内で、任意の数のブロックを含む任意の数のサブファイルを動的に作成し、前記サブファイルに対するブロックの追加、削除を動的に行うステップと、
（ｂ）前記サブファイルへのデータ出力後、最終ブロックの格納データ量が基準値を超えた場合、空きブロックを追加するステップと
を含む
ファイルスペース追加方法。
【請求項１２】
請求項１１に記載のファイルスペース追加方法であって、
前記（ｂ）ステップは、
（ｂ１）前記サブファイルにデータを出力するためのサブファイル更新要求を受け付けると、要求されたデータの出力長がブロック長と最終ブロックデータ長の差分より大きいか判断するステップと、
（ｂ２）前記要求されたデータの出力長がブロック長と前記最終ブロックデータ長の差分より大きい場合、第１空きブロックに最終ブロックポインタを位置付け、前記最終ブロックデータ長を初期化し、前記要求されたデータを前記最終ブロックポインタの指すデータブロックに格納し、前記最終ブロックデータ長に前記要求されたデータの出力長を加えた値で前記最終ブロックデータ長を更新し、総データ長に前記要求されたデータの出力長を加えた値で前記総データ長を更新し、前記総データ長に１を加算するステップと、
（ｂ３）前記総データ長を総データ件数で割った値を空きブロック追加閾値に格納し、前記空きブロック追加閾値が前記要求されたデータの出力長と前記最終ブロックデータ長を合わせた値より小さいか判断するステップと、
（ｂ４）前記空きブロック追加閾値が前記要求されたデータの出力長と前記最終ブロックデータ長を合わせた値より小さい場合、空き管理領域の先頭ブロックである前記第１空きブロックを前記サブファイルの最終ブロックであるデータブロックの次になるようブロックポインタを設定し、先頭空きブロックポインタを第２空きブロックに位置付けるステップと
を含む
ファイルスペース追加方法。
【請求項１３】
請求項１２に記載のファイルスペース追加方法であって、
前記（ｂ）ステップは、
（ｂ５）前記空きブロック追加閾値が前記要求されたデータの出力長と前記最終ブロックデータ長を合わせた値より大きく、空きブロックを優先的に割り当てることを示すブロック優先度が高優先度の場合、前記空き管理領域の先頭ブロックである前記第１空きブロックを前記サブファイルの最終ブロックであるデータブロックの次になるようブロックポインタを設定し、先頭空きブロックポインタを前記第２空きブロックに位置付けるステップと
を更に含む
ファイルスペース追加方法。
【請求項１４】
（ａ）静的に確保したファイルスペース内で、任意の数のブロックを含む任意の数のサブファイルを動的に作成し、前記サブファイルに対するブロックの追加、削除を動的に行うステップと、
（ｂ）前記サブファイルへのデータ出力後、最終ブロックの格納データ量が基準値を超えた場合、空きブロックを追加するステップと
をコンピュータに実行させるための
ファイルスペース追加プログラム。
【請求項１５】
請求項１４に記載のファイルスペース追加プログラムであって、
前記（ｂ）ステップは、
（ｂ１）前記サブファイルにデータを出力するためのサブファイル更新要求を受け付けると、要求されたデータの出力長がブロック長と最終ブロックデータ長の差分より大きいか判断するステップと、
（ｂ２）前記要求されたデータの出力長がブロック長と前記最終ブロックデータ長の差分より大きい場合、第１空きブロックに最終ブロックポインタを位置付け、前記最終ブロックデータ長を初期化し、前記要求されたデータを前記最終ブロックポインタの指すデータブロックに格納し、前記最終ブロックデータ長に前記要求されたデータの出力長を加えた値で前記最終ブロックデータ長を更新し、総データ長に前記要求されたデータの出力長を加えた値で前記総データ長を更新し、前記総データ長に１を加算するステップと、
（ｂ３）前記総データ長を総データ件数で割った値を空きブロック追加閾値に格納し、前記空きブロック追加閾値が前記要求されたデータの出力長と前記最終ブロックデータ長を合わせた値より小さいか判断するステップと、
（ｂ４）前記空きブロック追加閾値が前記要求されたデータの出力長と前記最終ブロックデータ長を合わせた値より小さい場合、空き管理領域の先頭ブロックである前記第１空きブロックを前記サブファイルの最終ブロックであるデータブロックの次になるようブロックポインタを設定し、先頭空きブロックポインタを第２空きブロックに位置付けるステップと
を含む
ファイルスペース追加プログラム。
【請求項１６】
請求項１５に記載のファイルスペース追加プログラムであって、
前記（ｂ）ステップは、
（ｂ５）前記空きブロック追加閾値が前記要求されたデータの出力長と前記最終ブロックデータ長を合わせた値より大きく、空きブロックを優先的に割り当てることを示すブロック優先度が高優先度の場合、前記空き管理領域の先頭ブロックである前記第１空きブロックを前記サブファイルの最終ブロックであるデータブロックの次になるようブロックポインタを設定し、先頭空きブロックポインタを前記第２空きブロックに位置付けるステップと
を更に含む
ファイルスペース追加プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルスペース追加システムに関し、特に１つのファイル内に複数のサブファイルを含むファイルスペース追加システムに関する。
【背景技術】
【０００２】
通常、１つのファイルを使用して大量のデータ入出力を短時間で行いたい場合には、そのファイルをサブファイルに分割し、サブファイルごとにデータの入出力を行う処理を並列で動作させる手法がとられていた。例えば、これまでは、静的に確保されたファイル内でサブファイルのサイズを動的に拡張、縮小可能とするために、ファイル内にサブファイルとして使用されているブロックを管理するためのサブファイル管理領域と、サブファイルとして使用されていない空きブロックを管理するための空き管理領域を設けていた。そして、新規にサブファイルを作成する場合及びサブファイルを拡張する場合は、空き管理領域から必要な数の空きブロックを取り出し、先頭のブロックをサブファイル管理領域に、それ以降のブロックを直前のブロックに関連付けることによってサブファイルの領域を確保するファイル管理手法がとられていた。
【０００３】
しかしながら、この方法では、一旦サブファイルに割り当てられたブロックについてはサブファイル単位での並列アクセスが可能となるが、サブファイルへのデータ出力要求が頻繁に行われると、データ出力処理の空きブロック追加に時間を費やすことによる性能劣化や、さらには空き管理領域へのアクセスが集中して空き管理領域の排他待ちによる性能劣化が発生するという問題があった。
【０００４】
これに対し、予め一定数量の予備のブロックを各サブファイルに割り当てておき、これについては空き領域として解放しないという手法も存在するが、この場合は、空き領域として使えるブロックが限られてしまうため、実際には使用されていないブロックがあるにもかかわらず他のサブファイルで利用できないといった問題があった。
【０００５】
関連する技術として、特開２００１−０７５８４８号公報（特許文献１）に「ファイルシステムのファイル管理方法」が開示されている。この技術では、第１のデータブロックに関連のあるデータを格納するために第２のデータブロックを確保する時、主記憶装置上の管理ブロックの使用状況の情報を検索し、未使用を示す領域があると過渡状況を示す情報を過渡中とし使用状況の情報を使用中として、第２のデータブロックにあるデータブロックを管理する領域を初期化し、第１のデータブロックのデータブロックを管理する領域に第２のデータブロックの位置を格納し、第２のデータブロックのデータブロックを管理する領域に第１のデータブロックの位置を格納し、主記憶装置上の管理ブロックの各情報を記憶装置上の管理ブロックへ複写し、過渡状況の情報の過渡中を外すことを特徴とする。
【０００６】
また、特開平０５−１２００９４号公報（特許文献２）に「ファイル管理方式」が開示されている。この技術では、ファイルの作成時には、データ領域割り当て部により要求されたファイルの領域を確保し、ファイルのサイズがファイル作成時に確保された領域を超えるようなことがあれば、データ領域拡張部により新たに領域を確保し、ファイルのサイズがファイル作成時に確保された領域より小さくなった場合、データ領域解放部がデータ領域拡張部で確保された領域のみを解放し、ファイル削除時には、データ領域削除部によりファイルに割り当てられた領域を解放する。
【０００７】
また、特開平０９−１６０８１４号公報（特許文献３）に「ファイルの管理システム」が開示されている。この技術では、ファイルシステム管理機構の残量把握機構はファイル記憶領域の空き領域を監視する。ファイル削除部は、残量把握機構により空き容量が足りなくなったことが検出されると、削除順序情報管理部を介して削除候補ファイルを調べると共に、削除条件情報管理部を介して削除条件情報を参照して、既成ファイルを削除する。この時、ファイル／ディレクトリ対応情報管理部からファイル／ディレクトリ対応情報を取得して、データブロック内に作成されている当該ディレクトリから上記削除されたファイルのエントリを削除する。
【０００８】
【特許文献１】特開２００１−０７５８４８号公報
【特許文献２】特開平０５−１２００９４号公報
【特許文献３】特開平０９−１６０８１４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
サブファイルへのデータ出力時に最終ブロックの格納データ量及び総データ量を記録し、データブロック追加の基準値を超えた場合、データ出力要求とは別のプロセスでサブファイルへ空きブロックを追加することにより、データ出力要求が空きブロックの確保、及び、空き管理領域へのアクセス集中による性能劣化を防ぎながら、一定数量を確保せず、他のサブファイルでも空きブロックを利用する。
【課題を解決するための手段】
【００１０】
以下に、［発明を実施するための最良の形態］で使用される番号を括弧付きで用いて、課題を解決するための手段を説明する。これらの番号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために付加されたものである。但し、それらの番号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１１】
本発明のファイルスペース追加システムは、ファイル（１３０）内のサブファイル（２５０）の更新要求に応じて、サブファイル（２５０）の最終ブロックにデータを格納し、最終ブロックのデータ格納量が閾値を超えたかどうか判断するサブファイル更新プロセス実行部（１１０）と、最終ブロックのデータ格納量が閾値を超えた場合にサブファイル更新プロセス実行部（１１０）からの呼び出しに応じて起動し、空きブロックをサブファイル（２５０）に追加するサブファイル拡張プロセス実行部（１２０）とを具備する。
【００１２】
本発明に係るファイルは、ファイル（１３０）内の空きブロックの数量及び空きブロックのアドレスを管理する空き管理領域（２１０）と、ファイル（１３０）内の空きブロックの集合である空き領域（２２０）と、サブファイル単位に先頭ブロック及び最終ブロックのポインタの情報を管理するディレクトリ領域（２４０）と、ファイル（１３０）内に作成されたサブファイル（２５０）のサブファイル名及びディレクトリ領域（２４０）のサブファイル情報へのポインタを管理するサブファイル管理領域（２３０）と、空きブロック追加基準となる空きブロック追加閾値（２６０）と、出力データ長が加算される総データ長（２７０）と、出力データ件数である総データ件数（２８０）とを含む。
【００１３】
空き領域（２２０）は、ファイル（１３０）内でサブファイル（２５０）に割り当てられていない空きブロックを任意の順序に並べ、並べられた空きブロックの各々に前後の空きブロックのポインタを格納する。
【００１４】
サブファイル（２５０）は、ユーザデータを格納する複数のデータブロックをユーザデータの順序に従って並べ、並べられたデータブロックの各々に前後のデータブロックのアドレスを格納する。
【００１５】
ディレクトリ領域（２４０）は、サブファイル（２５０）の先頭のデータブロックのアドレスを格納する先頭ブロックポインタ（３０１）と、最終のデータブロックのアドレスを格納する最終ブロックポインタ（３０２）と、最終ブロックの総データ長（２７０）である最終ブロックデータ長（３０３）とを含む。
【００１６】
空き管理領域（２１０）は、空き領域（２２０）内の先頭の空きブロックのアドレスを格納する先頭空きブロックポインタ（４０１）と、空き領域（２２０）内の最後の空きブロックのアドレスを格納する最終空きブロックポインタ（４０２）とを含む。
【００１７】
空きブロック及びデータブロックの各々は、各々のブロックの直後のブロックのアドレスを格納する次ブロックポインタ（５０１）と、各々のブロックの直前のブロックのアドレスを格納する前ブロックポインタ（５０２）と、各々のブロックがサブファイル（２５０）に割り当てられた時にユーザデータを格納するためのユーザデータ領域（５０３）とを含む。
【００１８】
サブファイル更新プロセス実行部（１１０）は、要求されたデータの出力長がブロック長と最終ブロックデータ長（３０３）の差分より大きい場合、第１空きブロックに最終ブロックポインタ（３０２）を位置付け、最終ブロックデータ長（３０３）を初期化し、要求されたデータを最終ブロックポインタ（３０２）の指すデータブロックに格納し、最終ブロックデータ長（３０３）に要求されたデータの出力長を加えた値で最終ブロックデータ長（３０３）を更新し、総データ長（２７０）に要求されたデータの出力長を加えた値で総データ長（２７０）を更新し、総データ件数（２８０）に１を加算するデータ格納部（１１１）と、総データ長（２７０）を総データ件数（２８０）で割った値を空きブロック追加閾値（２６０）に格納し、空きブロック追加閾値（２６０）が要求されたデータの出力長と最終ブロックデータ長（３０３）を合わせた値より小さい場合、サブファイル拡張プロセス実行部（１２０）を呼び出して起動するブロック追加判定部（１１２）とを具備する。
【００１９】
サブファイル更新プロセス実行部（１１０）は、空きブロックを優先的に割り当てることを示すブロック優先度（３０４）を参照し、空きブロック追加閾値（２６０）が要求されたデータの出力長と最終ブロックデータ長（３０３）を合わせた値より大きく、ブロック優先度（３０４）が高優先度の場合、サブファイル拡張プロセス実行部（１２０）を呼び出して起動するブロック優先判定部（１１３）を更に具備する。
【００２０】
サブファイル拡張プロセス実行部（１２０）は、サブファイル拡張プロセス実行部（１２０）がサブファイル更新プロセス実行部（１１０）からの呼び出しに応じて起動すると、空き管理領域（２１０）の先頭ブロックである第１空きブロックをサブファイル（２５０）の最終ブロックであるデータブロックの次になるようブロックポインタを設定し、先頭空きブロックポインタ（４０１）を第２空きブロックに位置付けるブロック追加部（１２１）を具備する。
【発明の効果】
【００２１】
第１の効果は、１つのファイル内に含まれる複数のサブファイルの拡張が、同時に実行される複数の業務処理から頻繁に行われるような場合に、ファイルのアクセス性能を向上させることができることにあり、大量データの場合に効果が大きくなる。その理由は、データ出力要求直後に必要なブロックを事前確保することにより、データ出力時に空き領域からのブロックの出し入れをせず、他のサブファイルとの競合を避けることができるためである。
第２の効果は、１つのファイル内に含まれる複数のサブファイルの拡張が頻繁に行われる場合に、ファイルスペースを有効活用できる。その理由は、各サブファイルに使用しない分も含めて均等に割り当てず、必要なブロックをデータ出力要求時点で割り当てることにより、空きブロックを他のサブファイルからも利用できるためである。
【発明を実施するための最良の形態】
【００２２】
以下に、本発明の第１実施形態について添付図面を参照して説明する。
図１を参照すると、本発明の第１実施形態では、ファイルスペース追加システムは、サブファイル更新プロセス１１０と、サブファイル拡張プロセス１２０と、ファイル１３０を備える。ここでは、サブファイル更新プロセス１１０及びサブファイル拡張プロセス１２０は、それぞれファイルスペース追加システム内において実行されるプログラムを示す。但し、実際には、サブファイル更新プロセス１１０及びサブファイル拡張プロセス１２０は、上記のプログラムを実行するプロセッサ等の処理装置を含むようにしても良い。或いは、サブファイル更新プロセス１１０及びサブファイル拡張プロセス１２０は、それぞれ所定の機能を有するハードウェアでも良い。ファイル１３０は、サブファイル更新プロセス１１０及びサブファイル拡張プロセス１２０により読み取られる。ファイル１３０は、少なくとも１つのサブファイルを有する。
【００２３】
サブファイル更新プロセス１１０は、データ格納部１１１と、ブロック追加判定部１１２とを含む。データ格納部１１１は、ファイル１３０内の所定のサブファイルの最終ブロックにデータを格納する。ブロック追加判定部１１２は、所定の条件に従って、サブファイル拡張プロセス１２０を呼び出す。
【００２４】
サブファイル拡張プロセス１２０は、ブロック追加部１２１を含む。ブロック追加部１２１は、ファイル１３０内の所定のサブファイルに空きブロックを追加する。
【００２５】
これらの構成要素はそれぞれ概略つぎのように動作する。
サブファイル更新プロセス１１０は、業務プログラム等からのファイル１３０内のサブファイルの更新要求に応じて、データ格納部１１１により、最終ブロックにデータを格納し、ブロック追加判定部１１２により、最終ブロックのデータ格納量が閾値を超えた場合にサブファイル拡張プロセス１２０を呼び出す。サブファイル拡張プロセス１２０は、ブロック追加部１２１により、空きブロックをファイル１３０内の該当サブファイルに追加する。
【００２６】
図２は、図１のファイル１３０の構造例を示したものである。
ファイル１３０は、空き管理領域２１０と、空き領域２２０と、サブファイル管理領域２３０と、ディレクトリ領域２４０と、サブファイル２５０と、空きブロック追加閾値２６０と、総データ長２７０と、総データ件数２８０を有する。
【００２７】
空き管理領域２１０は、ファイル１３０内の空きブロックの数量や空きブロックのアドレスを管理するための領域である。空き領域２２０は、ファイル１３０内の空きブロックの集合である。空き領域２２０は、空きブロック２２１（２２１−ｉ、ｉ＝１〜ｎ：ｎは空きブロック数）を有する。サブファイル管理領域２３０は、ファイル１３０内に作成された複数のサブファイルのサブファイル名とディレクトリ領域２４０の各サブファイル情報へのポインタを管理する。ディレクトリ領域２４０は、サブファイル単位にその先頭ブロック及び最終ブロックのポインタ等の情報を管理する。サブファイル２５０は、ディレクトリ領域２４０に格納されたサブファイルの１つであり、ユーザデータを格納する。サブファイル２５０は、データブロック２５１（２５１−ｊ、ｊ＝１〜ｍ：ｍはデータブロック数）を有する。ここでは、データブロック２５１−１が先頭ブロックであり、データブロック２５１−ｍが最終ブロックである。空きブロック追加閾値２６０は、空きブロック追加基準となる閾値である。総データ長２７０は、出力データ長の合計の長さである。総データ長２７０には、全ての出力データ長が加算される。総データ件数２８０は、全ての出力データ件数である。
【００２８】
空き領域２２０は、ファイル１３０内でどのサブファイルにも割り当てられていない全ての空きブロック２２１（２２１−ｉ、ｉ＝１〜ｎ）を任意の順序に並べ、それぞれの空きブロック２２１（２２１−ｉ、ｉ＝１〜ｎ）に前後の空きブロックのポインタを格納することにより管理する。サブファイル２５０は、サブファイルＡのユーザデータを格納する複数のデータブロック２５１（２５１−ｊ、ｊ＝１〜ｍ）をユーザデータの順序に従って並べ、それぞれのデータブロック２５１（２５１−ｊ、ｊ＝１〜ｍ）に前後のデータブロックのアドレスを格納することにより管理する。
【００２９】
図３は、図２のディレクトリ領域２４０内のある１つのサブファイルの情報と、そのサブファイルの構造例を示したものである。
ディレクトリ領域２４０は、先頭ブロックポインタ３０１と、最終ブロックポインタ３０２と、最終ブロックデータ長３０３を有する。先頭ブロックポインタ３０１は、サブファイル２５０の先頭のデータブロックのアドレスを格納する。最終ブロックポインタ３０２は、最終のデータブロックのアドレスを格納する。最終ブロックデータ長３０３は、最終ブロックの総データ長である。サブファイル２５０はデータブロックＡ〜Ｇを有し、データブロックが追加された場合、データブロックＡ〜Ｇの後ろにデータブロックＨがつながる。データブロックＡ〜Ｈは、データブロック２５１（２５１−ｊ、ｊ＝１〜ｍ）に相当する。
【００３０】
図４は、図２の空き管理領域２１０、空き領域２２０の構造例を示したものである。
空き管理領域２１０は、先頭空きブロックポインタ４０１と、最終空きブロックポインタ４０２を有する。先頭空きブロックポインタ４０１は、空き領域２２０内の先頭の空きブロックのアドレスを格納する。最終空きブロックポインタ４０２は、空き領域２２０内の最後の空きブロックのアドレスを格納する。空き領域２２０内の空きブロックＨ，Ｉ，Ｊは、空きブロック２２１（２２１−ｉ、ｉ＝１〜ｎ）に相当する。ここでは、空きブロックＨが先頭の空きブロック、空きブロックＪが最後の空きブロックである。
【００３１】
図５は、空きブロック２２１（２２１−ｉ、ｉ＝１〜ｎ）及びデータブロック２５１（２５１−ｊ、ｊ＝１〜ｍ）の構造例を示したものである。
空きブロック２２１（２２１−ｉ、ｉ＝１〜ｎ）及びデータブロック２５１（２５１−ｊ、ｊ＝１〜ｍ）の各々は、次ブロックポインタ５０１と、前ブロックポインタ５０２と、ユーザデータ領域５０３を含む。次ブロックポインタ５０１は、それぞれのブロックの直後のブロックのアドレスを格納する。前ブロックポインタ５０２は、それぞれのブロックの直前のブロックのアドレスを格納する。ユーザデータ領域５０３は、ブロックがサブファイルに割り当てられた時にユーザデータを格納する。
【００３２】
次に、図６を参照して、本発明の第１実施形態の動作について詳細に説明する。
（１）ステップＳ１０１
サブファイル更新プロセス１１０は、業務プログラム等からサブファイル２５０にデータを出力するようなサブファイル更新要求を受け付ける。
（２）ステップＳ１０２
サブファイル更新プロセス１１０のデータ格納部１１１は、サブファイル更新要求を受け付けると、要求されたデータ出力長の大きさを判断する。ここでは、要求されたデータ出力長が「ブロック長と最終ブロックデータ長３０３の差分」より大きいかどうか判断する。なお、要求されたデータ出力長とは、要求されたデータの出力時のデータ長である。要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分より大きくない場合は、この処理を終了し、サブファイル更新プロセス１１０が次のサブファイル更新要求を受け付けるまで待機する。なお、要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分と等しい場合、要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分より大きいと判断するか、小さいと判断するかは、任意である。
（３）ステップＳ１０３
データ格納部１１１は、要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分より大きい場合、次ブロックにデータを格納することを決定する。ここでは、データ格納部１１１は、次ブロックである空きブロックＨに最終ブロックポインタ３０２を位置付ける。
（４）ステップＳ１０４
なお、データ格納部１１１は、要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分より大きくない場合、該当ブロックにデータを格納することを決定する。この場合、データ格納部１１１は、該当ブロックに最終ブロックポインタ３０２を位置付ける。
（５）ステップＳ１０５
データ格納部１１１は、最終ブロックデータ長３０３を初期化し、要求されたデータを最終ブロックポインタの指すデータブロックに格納し、最終ブロックデータ長３０３に要求されたデータ出力長を加えた値で最終ブロックデータ長３０３を更新し、総データ長２７０に要求されたデータ出力長を加えた値で総データ長２７０を更新し、総データ件数２８０に１を加算する。
（６）ステップＳ１０６
次に、サブファイル更新プロセス１１０のブロック追加判定部１１２は、総データ長２７０を総データ件数２８０で割った値を空きブロック追加閾値２６０に格納し、空きブロック追加閾値２６０の大きさを判断する。ここでは、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値より小さいかどうか判断する。空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値より小さくない場合は、この処理を終了し、サブファイル更新プロセス１１０が次のサブファイル更新要求を受け付けるまで待機する。なお、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値と等しい場合、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値より大きいと判断するか、小さいと判断するかは、任意である。
（７）ステップＳ１０７
ブロック追加判定部１１２は、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値より小さい場合、サブファイル拡張プロセス１２０を呼び出す。
（８）ステップＳ１０８
サブファイル拡張プロセス１２０のブロック追加部１２１は、サブファイル拡張プロセス１２０がサブファイル更新プロセス１１０から呼び出されると、空き管理領域２１０の先頭ブロックである空きブロックＨをサブファイル２５０の最終ブロックであるデータブロックＧの次になるようブロックポインタを設定し、先頭空きブロックポインタ４０１を空きブロックＩに位置付ける。
【００３３】
なお、サブファイルをファイルに置き換えても、上記と同様な動作である。
【００３４】
次に、本発明の第２実施形態の構成について詳細に説明する。
本実施形態では、第１実施形態の図１の構成に加えて、空きブロックを優先的に割り当てるかどうかを判定するブロック優先判定部１１３が追加されている。
【００３５】
図７を参照すると、本発明の第２実施形態では、ファイルスペース追加システムは、サブファイル更新プロセス１１０と、サブファイル拡張プロセス１２０と、ファイル１３０を備える。ここでは、サブファイル更新プロセス１１０及びサブファイル拡張プロセス１２０は、それぞれファイルスペース追加システム内において実行されるプログラムを示す。但し、実際には、サブファイル更新プロセス１１０及びサブファイル拡張プロセス１２０は、上記のプログラムを実行するプロセッサ等の処理装置を含むようにしても良い。或いは、サブファイル更新プロセス１１０及びサブファイル拡張プロセス１２０は、それぞれ所定の機能を有するハードウェアでも良い。ファイル１３０は、サブファイル更新プロセス１１０及びサブファイル拡張プロセス１２０により読み取られる。ファイル１３０は、少なくとも１つのサブファイルを有する。
【００３６】
サブファイル更新プロセス１１０は、データ格納部１１１と、ブロック追加判定部１１２と、ブロック優先判定部１１３を含む。データ格納部１１１は、ファイル１３０内の所定のサブファイルの最終ブロックにデータを格納する。ブロック追加判定部１１２は、所定の条件に従って、サブファイル拡張プロセス１２０を呼び出す。ブロック優先判定部１１３は、各ブロックの優先度を判定する。
【００３７】
サブファイル拡張プロセス１２０は、ブロック追加部１２１を含む。ブロック追加部１２１は、ファイル１３０内の所定のサブファイルに空きブロックを追加する。
【００３８】
図８は、図２の空き管理領域２１０、空き領域２２０及び、ディレクトリ領域２４０内のある１つのサブファイルの情報と、そのサブファイルの構造例を示したものである。本実施形態では、ディレクトリ領域２４０がブロック優先度３０４を更に有することを特徴とする。
【００３９】
ディレクトリ領域２４０は、先頭ブロックポインタ３０１と、最終ブロックポインタ３０２と、最終ブロックデータ長３０３と、ブロック優先度３０４を有する。先頭ブロックポインタ３０１は、サブファイル２５０の先頭のデータブロックのアドレスを格納する。最終ブロックポインタ３０２は、最終のデータブロックのアドレスを格納する。最終ブロックデータ長３０３は、最終ブロックの総データ長である。ブロック優先度３０４は、空きブロックを優先的に割り当てることを示す。
【００４０】
サブファイル２５０は、データブロックＢ，Ｃ，Ｄを有し、データブロックが追加された場合、データブロックＢ，Ｃ，Ｄの後ろにデータブロックＨがつながる。データブロックＢ，Ｃ，Ｄ，Ｈは、データブロック２５１（２５１−ｊ、ｊ＝１〜ｍ）に相当する。
【００４１】
空き管理領域２１０は、先頭空きブロックポインタ４０１と、最終空きブロックポインタ４０２を有する。先頭空きブロックポインタ４０１は、空き領域２２０内の先頭の空きブロックのアドレスを格納する。最終空きブロックポインタ４０２は、空き領域２２０内の最後の空きブロックのアドレスを格納する。空き領域２２０内の空きブロックＨ，Ｉ，Ｊは、空きブロック２２１（２２１−ｉ、ｉ＝１〜ｎ）に相当する。ここでは、空きブロックＨが先頭の空きブロック、空きブロックＪが最後の空きブロックである。
【００４２】
次に、図９を参照して、本発明の第２実施形態の動作について詳細に説明する。
（１）ステップＳ２０１
サブファイル更新プロセス１１０は、業務プログラム等からサブファイル２５０にデータを出力するようなサブファイル更新要求を受け付ける。
（２）ステップＳ２０２
サブファイル更新プロセス１１０のデータ格納部１１１は、サブファイル更新要求を受け付けると、要求されたデータ出力長の大きさを判断する。ここでは、要求されたデータ出力長が「ブロック長と最終ブロックデータ長３０３の差分」より大きいかどうか判断する。要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分より大きくない場合は、この処理を終了し、サブファイル更新プロセス１１０が次のサブファイル更新要求を受け付けるまで待機する。なお、要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分と等しい場合、要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分より大きいと判断するか、小さいと判断するかは、任意である。
（３）ステップＳ２０３
データ格納部１１１は、要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分より大きい場合、次ブロックにデータを格納することを決定する。ここでは、データ格納部１１１は、次ブロックである空きブロックＨに最終ブロックポインタ３０２を位置付ける。
（４）ステップＳ２０４
なお、データ格納部１１１は、要求されたデータ出力長がブロック長と最終ブロックデータ長３０３の差分より大きくない場合、該当ブロックにデータを格納することを決定する。この場合、データ格納部１１１は、該当ブロックに最終ブロックポインタ３０２を位置付ける。
（５）ステップＳ２０５
データ格納部１１１は、最終ブロックデータ長３０３を初期化し、要求されたデータを最終ブロックポインタの指すデータブロックに格納し、最終ブロックデータ長３０３に要求されたデータ出力長を加えた値で最終ブロックデータ長３０３を更新し、総データ長２７０に要求されたデータ出力長を加えた値で総データ長２７０を更新し、総データ件数２８０に１を加算する。
（６）ステップＳ２０６
次に、サブファイル更新プロセス１１０のブロック追加判定部１１２は、空きブロック追加閾値２６０の大きさを判断する。ここでは、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値より小さいかどうか判断する。なお、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値と等しい場合、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値より大きいと判断するか、小さいと判断するかは、任意である。
（７）ステップＳ２０７
ブロック追加判定部１１２は、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値より小さい場合、サブファイル拡張プロセス１２０を呼び出す。
（８）ステップＳ２０８
また、サブファイル更新プロセス１１０のブロック優先判定部１１３は、総データ長２７０を総データ件数２８０で割った値を空きブロック追加閾値２６０に格納し、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値より大きい場合、ブロック優先度３０４が高優先度か判断する。ブロック優先度３０４が高優先度でない場合、この処理を終了し、サブファイル更新プロセス１１０が次のサブファイル更新要求を受け付けるまで待機する。ここでは、ブロック優先度３０４が最も高い場合に高優先度と判断する。或いは、ブロック優先度３０４が所定の順位内（上位３位以内等）にある場合に高優先度と判断する。なお、ブロック優先度３０４の優先度を数値で表す場合、予め基準となる閾値を設定し、この閾値よりも優先度が高ければ高優先度と判断するようにしても良い。この閾値と優先度が等しい場合、高優先度と判断するか、低優先度と判断するかは、任意である。
（９）ステップＳ２０９
ブロック優先判定部１１３は、空きブロック追加閾値２６０が要求されたデータ出力長と最終ブロックデータ長を合わせた値より大きく、ブロック優先度３０４が高優先度の場合、サブファイル拡張プロセス１２０を呼び出す。
（１０）ステップＳ２１０
サブファイル拡張プロセス１２０のブロック追加部１２１は、サブファイル拡張プロセス１２０がサブファイル更新プロセス１１０から呼び出されると、空き管理領域２１０の先頭ブロックである空きブロックＨをサブファイル２５０の最終ブロックであるデータブロックＤの次になるようブロックポインタを設定し、先頭空きブロックポインタ４０１を空きブロックＩに位置付ける。
【００４３】
なお、サブファイルをファイルに置き換えても、上記と同様な動作である。
【００４４】
本発明の第２実施形態では、優先度の高いサブファイルの場合、出力されるデータ量に依存せず、空きブロックを確保することが可能となり、特定サブファイルの出力を高性能化することが可能となる。
【００４５】
以上のように、本発明は、静的に確保したファイルスペース内で、任意の数のブロックからなる任意の数のサブファイルをファイル内で動的に作成し、サブファイルに対するブロックの追加、削除を動的に行うことによりサブファイルの拡張、縮小を可能とするファイル管理システムにおいて、サブファイルへのデータ出力後、最終ブロックの格納データ量が基準値を超えた場合、事前に空きブロックを追加することにより、高性能なサブファイルへの出力を可能とすることを特徴とする。なお、ここでいうサブファイルとは、「ファイルスペース内の業務ごとに個別にアクセスされる１つの業務ファイル」のことを意味している。
【００４６】
本発明は、業務プログラム間やシステム間で大量のデータをやりとりする場合の中間ファイルや、各種ログデータを格納するためのログファイルなどの用途に適用できる。
【図面の簡単な説明】
【００４７】
【図１】図１は、本発明の第１実施形態における構成例を示すブロック図である。
【図２】図２は、ファイル内の構成例を示す概念図である。
【図３】図３は、ディレクトリ領域の構成例を示す概念図である。
【図４】図４は、空き管理領域及び空き領域の構成例を示す概念図である。
【図５】図５は、空きブロック及びデータブロックの構成例を示す概念図である。
【図６】図６は、本発明の第１実施形態における動作を示すフローチャートである。
【図７】図７は、本発明の第２実施形態における構成例を示すブロック図である。
【図８】図８は、ディレクトリ領域、空き管理領域及び空き領域の構成例を示す概念図である。
【図９】図９は、本発明の第２実施形態における動作を示すフローチャートである。
【符号の説明】
【００４８】
１１０…  サブファイル更新プロセス
１１１…  データ格納部
１１２…  ブロック追加判定部
１１３…  ブロック優先判定部
１２０…  サブファイル拡張プロセス
１２１…  ブロック追加部
１３０…  ファイル
２１０…  空き管理領域
２２０…  空き領域
２２１（−ｉ、ｉ＝１〜ｎ）…  空きブロック
２３０…  サブファイル管理領域
２４０…  ディレクトリ領域
２５０…  サブファイル
２５１（−ｊ、ｊ＝１〜ｍ）…  データブロック
２６０…  空きブロック追加閾値
２７０…  総データ長
２８０…  総データ件数
３０１…  先頭ブロックポインタ
３０２…  最終ブロックポインタ
３０３…  最終ブロックデータ長
３０４…  ブロック優先度
４０１…  先頭空きブロックポインタ
４０２…  最終空きブロックポインタ
５０１…  次ブロックポインタ
５０２…  前ブロックポインタ
５０３…  ユーザデータ領域
【図１】
2009217357.tif 000003
【図２】
2009217357.tif 000004
【図３】
2009217357.tif 000005
【図４】
2009217357.tif 000006
【図５】
2009217357.tif 000007
【図６】
2009217357.tif 000008
【図７】
2009217357.tif 000009
【図８】
2009217357.tif 000010
【図９】
2009217357.tif 000011