(57)【要約】【課題】バッチ処理において、複数のアプリケーションにおける並列処理を効率的に実行する。【解決手段】制御装置１は、バッチ処理によって実行される複数のアプリケーション２１それぞれについて、アプリケーション２１が処理対象ファイル３０の記憶領域にアクセスした際のアクセス位置およびアクセス領域のサイズに対応する領域の排他情報５０を蓄積する。制御装置１は、蓄積する処理によって蓄積された領域の排他情報５０に基づいて、複数のアプリケーション２１のいずれかのアプリケーション２１が記憶領域にアクセスした際に、記憶領域における領域の排他情報５０で特定される領域を対象に排他制御を実行する。【選択図】図１
2015127924.tif 000002
【特許請求の範囲】
【請求項１】
バッチ処理によって実行される複数のアプリケーションそれぞれについて、前記アプリケーションが記憶部の記憶領域にアクセスした際のアクセス位置およびアクセス領域のサイズに対応する領域の情報を蓄積し、
前記蓄積する処理によって蓄積された前記領域の情報に基づいて、前記複数のアプリケーションのいずれかのアプリケーションが前記記憶領域にアクセスした際に、前記記憶領域における前記領域の情報で特定される領域を対象に排他制御を実行する
処理をコンピュータに実行させることを特徴とするアクセス制御プログラム。
【請求項２】
前記蓄積する処理は、前記記憶領域を所定の長さのブロックに論理的に分割し、前記領域の情報の領域に対応するブロックの情報を蓄積し、
前記実行する処理は、前記アクセスした領域に対応するブロックを対象に排他制御を実行する
処理を実行させる請求項１に記載のアクセス制御プログラム。
【請求項３】
前記蓄積する処理は、アプリケーション毎に、読み出し領域に対応するブロックの情報および書き込み領域のうち書き込むデータと値が異なる領域に対応するブロックの情報を蓄積し、
前記実行する処理は、前記蓄積する処理によって蓄積された複数のアプリケーションに対応するブロックの情報を参照し、現に書き込む領域のうち書き込むデータと値が異なる領域に対応するブロックと同じブロックの情報が蓄積されており、かつ、参照したブロックの情報が書き込みに関わるブロックの情報である場合に、前記ブロックを対象に排他制御を実行する
処理を実行させる請求項１に記載のアクセス制御プログラム。
【請求項４】
前記蓄積する処理は、前記ブロックの長さを、現に値が更新されたデータのサイズを用いた長さとし、前記記憶領域を当該長さのブロックに分割し、前記領域の情報の領域に対応するブロックの情報を蓄積する
処理を実行させる請求項２に記載のアクセス制御プログラム。
【請求項５】
バッチ処理によって実行される複数のアプリケーションそれぞれについて、前記アプリケーションが記憶部の記憶領域にアクセスした際のアクセス位置およびアクセス領域のサイズに対応する領域の情報を蓄積する蓄積部と、
前記蓄積部によって蓄積された前記領域の情報に基づいて、前記複数のアプリケーションのいずれかのアプリケーションが前記記憶領域にアクセスした際に、前記記憶領域における前記領域の情報で特定される領域を対象に排他制御を実行する実行部と
を有することを特徴とする制御装置。
【請求項６】
コンピュータが、
バッチ処理によって実行される複数のアプリケーションそれぞれについて、前記アプリケーションが記憶部の記憶領域にアクセスした際のアクセス位置およびアクセス領域のサイズに対応する領域の情報を蓄積し、
前記蓄積する処理によって蓄積された前記領域の情報に基づいて、前記複数のアプリケーションのいずれかのアプリケーションが前記記憶領域にアクセスした際に、前記記憶領域における前記領域の情報で特定される領域を対象に排他制御を実行する
各処理を実行することを特徴とするアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセス制御プログラムなどに関する。
【背景技術】
【０００２】
従来より、バッチ処理では、アプリケーションからのデータの受け渡しに、データベースで用いられるテーブルと異なる一般的なファイルが用いられている。一般的なファイルは、例えばテキストファイルである。一般的なファイルに対する排他制御では、アプリケーションからファイルにアクセスが発生している場合に、このファイルへの他のアプリケーションからのアクセスを抑止する。これにより、排他制御は、データの整合性を保っている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平３−２６８１４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のバッチ処理では、複数のアプリケーションにおける並列処理を効率的に実行できないという問題がある。すなわち、１つのファイルの異なるデータ領域に複数のアプリケーションからアクセスされる場合でも、バッチ処理では、ファイルが同じであることからファイルが排他されてしまい、複数のアプリケーションにおける並列処理を効率的に実行できない。
【０００５】
１つの側面では、バッチ処理において、複数のアプリケーションにおける並列処理を効率的に実行することを目的とする。
【課題を解決するための手段】
【０００６】
１つの案では、アクセス制御プログラムは、バッチ処理によって実行される複数のアプリケーションそれぞれについて、前記アプリケーションが記憶部の記憶領域にアクセスした際のアクセス位置およびアクセス領域のサイズに対応する領域の情報を蓄積し、前記蓄積する処理によって蓄積された前記領域の情報に基づいて、前記複数のアプリケーションのいずれかのアプリケーションが前記記憶領域にアクセスした際に、前記記憶領域における前記領域の情報で特定される領域を対象に排他制御を実行する処理をコンピュータに実行させる。
【発明の効果】
【０００７】
１つの態様によれば、バッチ処理において、複数のアプリケーションにおける並列処理を効率的に実行することができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施例に係る制御装置の機能構成を示すブロック図である。
【図２】図２は、アプリケーション間でデータの競合が発生する一例を説明する図である。
【図３】図３は、実施例に係るアクセス制御処理で用いられる情報の展開イメージを示す図である。
【図４】図４は、実施例に係るアクセス制御処理の概略を説明する図である。
【図５Ａ】図５Ａは、統計情報のデータ構造を示す図である。
【図５Ｂ】図５Ｂは、統計情報内の統計情報エントリのデータ構造を示す図である。
【図５Ｃ】図５Ｃは、統計情報エントリの具体例を示す図である。
【図６Ａ】図６Ａは、排他情報内のリソース情報のデータ構造を示す図である。
【図６Ｂ】図６Ｂは、リソース情報内のリソース情報エントリのデータ構造を示す図である。
【図６Ｃ】図６Ｃは、リソース情報エントリ内のブロック情報のデータ構造を示す図である。
【図７Ａ】図７Ａは、排他情報内のトランザクション情報のデータ構造を示す図である。
【図７Ｂ】図７Ｂは、トランザクション情報内のトランザクションエントリのデータ構造を示す図である。
【図８】図８は、排他情報内のアクセス情報のデータ構造を示す図である。
【図９】図９は、排他情報内の排他キューのデータ構造を示す図である。
【図１０】図１０は、排他対象のブロックについて説明する図である。
【図１１】図１１は、実施例に係るアクセス制御処理の排他制御を説明する図である。
【図１２】図１２は、実施例に係るオープン処理の手順を示すフローチャートである。
【図１３】図１３は、実施例に係る読み出し処理の手順を示すフローチャートである。
【図１４Ａ】図１４Ａは、実施例に係る書き込み処理の手順を示すフローチャート（１）である。
【図１４Ｂ】図１４Ｂは、実施例に係る書き込み処理の手順を示すフローチャート（２）である。
【図１５】図１５は、実施例に係るシーク処理の手順を示すフローチャートである。
【図１６】図１６は、実施例に係るクローズ処理の手順を示すフローチャートである。
【図１７】図１７は、実施例に係るアクセス制御処理の具体例を説明する図である。
【図１８】図１８は、実施例に係る制御装置の具体的な構成例を示す図である。
【図１９】図１９は、アクセス制御プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【０００９】
以下に、本願の開示するアクセス制御プログラム、制御装置およびアクセス制御方法の実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。
【実施例】
【００１０】
［実施例に係る制御装置の構成］
図１は、実施例に係る制御装置の構成を示すブロック図である。図１に示すように、制御装置１は、制御部２と、ＨＤＤ（Hard  Disk  Drive）３と、ＲＡＭ（Random  Access  Memory）４とを有する。
【００１１】
制御部２は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部２は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路の電子回路に対応する。または、制御部２は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路に対応する。さらに、制御部２は、アプリケーション２１と、ライブラリ２２と、ＯＳ（Operating  System）２３とを有する。
【００１２】
アプリケーション２１は、バッチ処理によって実行されるプログラムである。ライブラリ２２は、アプリケーション２１から呼び出される複数のモジュールを含む。モジュールは、例えば、ファイルに関するオープン処理であったり、読み出し処理であったり、書き込み処理であったり、シーク処理であったり、クローズ処理であったりする。オープン処理は、後述するオープン処理部２２１に対応する。読み出し処理は、後述する読み出し処理部２２２に対応する。書き込み処理は、後述する書き込み処理部２２３に対応する。シーク処理は、後述するシーク処理部２２４に対応する。クローズ処理は、後述するクローズ処理部２２５に対応する。ＯＳ２３は、ライブラリ２２の各モジュールから呼び出されるファイルの入出力制御機能に関するモジュールを有する。
【００１３】
ＨＤＤ３には、処理対象ファイル３０が記憶される。処理対象ファイル３０は、アプリケーション２１によって読み書きされる対象である。この処理対象ファイル３０は、データベース（ＤＢ：DataBase）で用いられるテーブルと異なる一般的なファイルであり、例えばテキストファイルである。なお、処理対象ファイル３０は、アクセス領域の一例である。
【００１４】
ここで、一般的なファイル、ここでは処理対象ファイル３０からデータを読み出したり、書き込んだりするバッチ処理における問題について説明する。バッチ処理によって実行される複数のアプリケーション２１は、同一の処理対象ファイル３０からデータを読み出したり、書き込んだりする。このとき、複数のアプリケーション２１が、同一の処理対象ファイル３０の同じ領域に書き込んだりすることがある。すなわち、アプリケーション２１間でデータの競合が発生することがある。
【００１５】
図２は、アプリケーション間でデータの競合が発生する一例を説明する図である。なお、バッチ処理によって実行される２つのアプリケーション２１を、バッチアプリケーションＡとバッチアプリケーションＢとして説明する。図２に示すように、バッチアプリケーションＡとバッチアプリケーションＢとが並列に処理されていることとする。バッチアプリケーションＡとバッチアプリケーションＢは、同一の処理対象ファイル３０を処理対象としている。処理対象ファイル３０には、あらかじめ、支店名毎に、商品番号と実績とが対応付けて記憶されている。バッチアプリケーションＡは、支店名が「東京」、商品番号が「Ａ−１００」に対応付けられた実績の値に１００を加算する処理を処理内容としている。一方、バッチアプリケーションＢは、支店名が「東京」、商品番号が「Ａ−１００」に対応付けられた実績の値に２００を加算する処理を処理内容としている。
【００１６】
このような状況の下、バッチアプリケーションＡが、処理対象ファイル３０からデータを順に読み出し、支店名が「東京」、商品番号が「Ａ−１００」に合致するデータを読み出す。ここでは、バッチアプリケーションＡは、支店名が「東京」、商品番号が「Ａ−１００」、実績が「５０００」のデータを読み出す（ａ１）。
【００１７】
次に、バッチアプリケーションＢが処理対象ファイル３０からデータを順に読み出し、支店名が「東京」、商品番号が「Ａ−１００」に合致するデータを取り出す。ここでは、バッチアプリケーションＢは、支店名が「東京」、商品番号が「Ａ−１００」、実績が「５０００」のデータを読み出す（ａ１）。続いて、バッチアプリケーションＢが、読み出したデータの実績の値「５０００」に「２００」を加算し、加算した実績の値「５２００」を含むデータを処理対象ファイル３０に書き込む。ここでは、処理対象ファイル３０の支店名が「東京」、商品番号が「Ａ−１００」に対応付けられた実績の値は、「５２００」（ａ２）と記憶される。
【００１８】
次に、バッチアプリケーションＡが、読み出したデータの実績の値「５０００」に「１００」を加算し、加算した実績の値「５１００」を含むデータを処理対象ファイル３０に書き込む。ここでは、処理対象ファイル３０の支店名が「東京」、商品番号が「Ａ−１００」に対応付けられた実績の値は、「５１００」（ａ３）と記憶される。すなわち、バッチアプリケーションＢによって書き込まれた実績の値「５２００」がバッチアプリケーションＡによって書き込まれた実績の値「５１００」によって更新されてしまう。つまり、バッチアプリケーションＡとバッチアプリケーションＢとの間で競合が発生してしまう。
【００１９】
そこで、制御装置１は、アプリケーション２１間でデータの競合が発生した場合にデータの整合性を保つために、競合した処理をエラーとする。すなわち、制御装置１は、バッチ処理によって実行される複数のアプリケーション２１それぞれについて、アプリケーション２１から処理対象ファイル３０に現にアクセスした際のアクセス位置およびアクセスサイズに対応する領域の情報を蓄積する。そして、制御装置１は、蓄積された領域の情報に基づいて、複数のアプリケーション２１のいずれかのアプリケーション２１が処理対象ファイル３０に現にアクセスした際に、アクセスした領域を対象に排他制御を実行する。排他制御を実行する単位は、所定の長さの固定長のブロック長である。ブロック長は、予め定められた長さであっても良いし、過去に値が更新されたデータのサイズから統計的に割り出された長さであっても良い。このような制御装置１について、以降では、詳細に説明する。
【００２０】
図１に戻って、ＲＡＭ４には、統計情報４０と、排他情報５０と、更新後ログ６０とが展開される。ここでは、統計情報４０、排他情報５０および更新後ログ６０の展開イメージについて、図３を参照しながら説明する。図３は、実施例に係るアクセス制御処理で用いられる情報の展開イメージを示す図である。
【００２１】
統計情報４０は、ファイルのブロック長を定めるために用いられる情報である。統計情報４０には、アプリケーション２１が処理対象ファイル３０を更新した際の、「実際に更新されたサイズ」などの統計情報エントリ４１が含まれる。図３に示すように、統計情報エントリ４１は、アプリケーション２１および処理対象ファイル３０毎に生成される。なお、統計情報４０の詳細なデータ構造は、後述する。
【００２２】
排他情報５０は、ライブラリ２２内の各処理部が排他制御を行うために用いられる情報である。排他情報５０には、リソース情報５１とトランザクション情報５２とアクセス情報５３と排他キュー５４とが含まれる。
【００２３】
リソース情報５１は、リソースである処理対象ファイル３０毎に、オープンしているアプリケーション２１の数、現時点のブロック長、使用されているブロックのブロック情報５１２などのリソース情報エントリ５１１が含まれる。リソース情報エントリ５１１のうちブロック情報５１２には、リソースである処理対象ファイル３０の中のブロック毎に、ブロックをアクセスした遷移が示され、後述する排他キュー５４の先頭と最後のアドレスとが記憶される。図３に示すように、ブロック情報５１２は、ブロック毎に生成される。
【００２４】
トランザクション情報５２には、トランザクションエントリ５２１が含まれる。トランザクションエントリ５２１には、アプリケーション２１毎に、各アプリケーション２１がリソースである処理対象ファイル３０の中のブロックをアクセスした遷移が示され、後述する排他キュー５４の先頭と最後のアドレスとが記憶される。図３に示すように、トランザクションエントリ５２１は、アプリケーション２１毎に生成される。
【００２５】
アクセス情報５３は、アプリケーション２１がファイルをアクセスする際に用いられる。図３に示すように、アクセス情報５３は、アプリケーション２１毎に生成される。排他キュー５４には、ブロックがアクセスされた際の排他モード、アプリケーション２１の処理方向で前後に獲得された他の排他キュー５４のアドレス、ブロックのアクセス方向で前後に獲得された他の排他キュー５４のアドレスが記憶される。ここでいう排他モードとは、ブロックを占有することを示す占有モード（ＥＸ）とブロックを占有しないことを示す共有モード（ＳＨ）とが存在する。一例として、更新対象のブロックの場合、占有モードが記憶され、参照対象のブロックの場合、共有モードが記憶される。図３に示すように、排他キュー５４は、アプリケーション２１がブロックにアクセスする毎に生成される。なお、排他情報５０の詳細なデータ構造は、後述する。
【００２６】
更新後ログ６０には、実際に更新されるデータがブロック単位で記憶される。更新後ログ６０に記憶されたデータは、処理対象ファイル３０へのアクセス終了時に一括して処理対象ファイル３０に書き込まれる。これは、処理対象ファイル３０を並行してアクセスしている全てのアプリケーション２１について、同じブロックに対して更新処理が行われないことを確認してから当該ブロックにデータを書き込むためである。図３に示すように、排他キュー５４が更新対象のブロックに対応する場合、更新されるデータを記憶する更新後ログ６０のアドレスは、当該排他キュー５４に記憶される。
【００２７】
このような統計情報４０および排他情報５０を用いて、制御装置１は、バッチ処理によって実行されるアプリケーション２１からアクセスされる処理対象ファイル３０のアクセス制御処理を実行する。図４は、実施例に係るアクセス制御処理の概略を説明する図である。なお、バッチ処理によって実行される２つのアプリケーション２１を、アプリケーションＡとアプリケーションＢとして説明する。図４に示すように、アプリケーションＡとアプリケーションＢとが並列に処理されている。アプリケーションＡとアプリケーションＢは、共に同一の処理対象ファイル３０としてファイルａを処理対象とする。
【００２８】
アクセス制御処理は、アプリケーション２１によって処理されるオープン時に、統計情報４０に記憶された「実際に更新されたデータのサイズ」を元にファイルａをブロック単位に分割する。ここでは、統計情報４０に記憶された「実際に更新されたデータのサイズ」が３２バイトであるとすると、アクセス制御処理は、３２バイトをブロック長として、ファイルａを分割する。
【００２９】
そして、アクセス制御処理は、アプリケーションＡについて、ファイルａにアクセスした際のアクセス位置およびアクセスサイズに対応する領域の情報を蓄積する。例えば、アクセス制御処理は、アプリケーションＡからファイルａに対して９６バイトの読み出し要求があると、実際に読み出した領域、読み出した領域であるブロックのアクセス情報を排他情報５０に蓄積する。ここでは、アクセス制御処理は、ブロック１，２，３に対応する排他キュー５４をアプリケーションＡの処理方向でつなげる。排他キュー５４には、排他モードとして共有モード「ＳＨ」が記憶される。そして、アクセス制御処理は、アプリケーションＡからファイルａに対して９６バイトのデータの書き込み要求があると、書き込み対象の領域であるブロックのアクセス情報を排他情報５０に蓄積する。ここでは、アクセス制御処理は、書き込み要求のデータのうちブロック３に対応する部分だけが実際に更新されるとすると、ブロック３に対応する排他キュー５４をアプリケーションＡの処理方向でつなげる。排他キュー５４には、排他モードとして排他モード「ＥＸ」が記憶される。なお、実際に更新される部分は、ブロック単位で更新後ログ６０に書き込まれる。
【００３０】
そして、アクセス制御処理は、アプリケーションＢについて、ファイルａにアクセスした際のアクセス位置およびアクセスサイズに対応する領域の情報を蓄積する。例えば、アクセス制御処理は、アプリケーションＢからファイルａに対して６４バイトの読み出し要求があると、実際に読み出した領域、読み出した領域であるブロックのアクセス情報を排他情報５０に蓄積する。ここでは、アクセス制御処理は、ブロック１，２に対応する排他キュー５４をアプリケーションＢの処理方向でつなげる。排他キュー５４には、排他モードとして共有モード「ＳＨ」が記憶される。さらに、アクセス制御処理は、同じブロック同士について、ブロックのアクセス方向で排他キュー５４をつなげる。ここでは、アクセス制御処理は、ブロック１に対応するアプリケーションＡの排他キュー５４の次にアプリケーションＢの排他キュー５４をつなげる。
【００３１】
そして、アクセス制御処理は、排他情報５０に基づいて、実際に更新される部分を含むブロックを対象に排他制御を実行する。ここでは、アクセス制御処理は、実際に更新される部分を含むブロック３を対象に排他制御を実行する。仮に、アプリケーションＢがその後の処理で、ブロック３に対応するデータの書き込み要求があると、このブロック３を排他対象とし、このブロック３への処理をエラーとする。
【００３２】
図１に戻って、ライブラリ２２は、オープン処理部２２１、読み出し処理部２２２、書き込み処理部２２３、シーク処理部２２４およびクローズ処理部２２５を有する。ライブラリ２２の各処理部は、アプリケーション２１によって呼び出される。なお、読み出し処理部２２２および書き込み処理部２２３は、蓄積部の一例である。また、書き込み処理部２２３は、実行部の一例である。
【００３３】
オープン処理部２２１は、アプリケーション２１によって指定された処理対象ファイル３０をオープンする。
【００３４】
例えば、オープン処理部２２１は、指定された処理対象ファイル３０のファイル名が、リソース情報５１に存在しているか否かを判定する。そして、オープン処理部２２１は、処理対象ファイル３０のファイル名がリソース情報５１に存在していないと判定した場合、処理対象ファイル３０に対応する新たなリソース情報エントリ５１１をリソース情報５１に登録する。加えて、オープン処理部２２１は、アプリケーション２１且つ処理対象ファイル３０に対応する統計情報エントリ４１にデフォルトを設定する。一方、オープン処理部２２１は、処理対象ファイル３０のファイル名がリソース情報５１に存在していると判定した場合、他のアプリケーション２１がオープン中であれば、オープン中のアプリケーション２１と同じブロック長を、使用するブロック長とする。そして、オープン処理部２２１は、オープン中でなければ、統計情報４０の処理対象ファイル３０に対応するブロック長を取り出し、取り出したブロック長を使用するブロック長とする。そして、オープン処理部２２１は、アプリケーション２１に対応するトランザクションエントリ５２１を獲得して、処理対象ファイル３０をオープンする。
【００３５】
ここで、統計情報のデータ構造の一例を、図５Ａ〜図５Ｃを参照して説明する。図５Ａは、統計情報のデータ構造を示す図である。図５Ｂは、統計情報内の統計情報エントリのデータ構造を示す図である。図５Ｃは、統計情報エントリの具体例を示す図である。
【００３６】
図５Ａに示すように、統計情報４０は、エントリ数４０ａと統計情報エントリ４１とを記憶する。エントリ数４０ａは、統計情報エントリ４１の数を示す。統計情報エントリ４１は、実際の統計情報の管理テーブルを示す。統計情報エントリ４１は、処理対象ファイル３０のファイル名およびアプリケーション名毎に存在する。
【００３７】
図５Ｂに示すように、統計情報エントリ４１は、総量４１ｃ、回数４１ｄ、最大値４１ｅ、最小値４１ｆ、平均値４１ｇ、チューニング種別４１ｈおよびチューニングブロック長４１ｉをファイル名４１ａおよびアプリケーション名４１ｂに対応付けて記憶する。ファイル名４１ａは、処理対象ファイル３０のファイル名を示す。すなわち、ファイル名４１ａは、バッチ処理を実行するアプリケーション２１からアクセスする処理対象ファイル３０のファイル名である。アプリケーション名４１ｂは、バッチ処理を実行するアプリケーション２１のファイル名である。
【００３８】
総量４１ｃは、アプリケーション名４１ｂで示されるアプリケーション２１がファイル名４１ａで示される処理対象ファイル３０に対して過去に更新した総サイズを示す。回数４１ｄは、アプリケーション名４１ｂで示されるアプリケーション２１がファイル名４１ａで示される処理対象ファイル３０に対して過去に更新した回数を示す。最大値４１ｅは、アプリケーション名４１ｂで示されるアプリケーション２１がファイル名４１ａで示される処理対象ファイル３０に対して過去に更新した際の最大サイズを示す。最小値４１ｆは、アプリケーション名４１ｂで示されるアプリケーション２１がファイル名４１ａで示される処理対象ファイル３０に対して過去に更新した際の最小サイズを示す。平均値４１ｇは、アプリケーション名４１ｂで示されるアプリケーション２１がファイル名４１ａで示される処理対象ファイル３０に対して過去に更新した際の平均サイズを示す。すなわち、最大値４１ｅ、最小値４１ｆおよび平均値４１ｇは、「実際に更新されたデータのサイズ」に対応する。
【００３９】
チューニング種別４１ｈは、ブロック長のチューニング種別を示す。すなわち、チューニング種別４１ｈは、オープン処理部２２１がブロック長を決定する際に用いられるチューニング種別である。チューニング種別４１ｈには、例えば、最大値４１ｅをブロック長とする場合「ＭＡＸ」、最小値４１ｆをブロック長とする場合「ＭＩＮ」、平均値４１ｇをブロック長とする場合「ＡＶＥ」が設定される。チューニング種別４１ｈには、後述するチューニングブロック長４１ｉをブロック長とする場合「ＤＥＦ」が設定される。なお、チューニング種別４１ｈが省略されている場合には、例えば「ＡＶＥ」が設定される。チューニングブロック長４１ｉは、あらかじめ設定されたブロック長を示す。なお、チューニング種別４１ｈおよびチューニングブロック長４１ｉは、例えばユーザによって指定される。
【００４０】
図５Ｃに示すように、一例として、ファイル名４１ａが「日次売り上げ」である場合、アプリケーション名４１ｂとして「アプリ（東京）」、総量４１ｃとして「６４００ｂｙｔｅ」、回数４１ｄとして「１００」と記憶している。最大値４１ｅとして「１２８ｂｙｔｅ」、最小値４１ｆとして「８ｂｙｔｅ」、平均値４１ｇとして「６４ｂｙｔｅ」、チューニング種別４１ｈとして「ＡＶＥ」、チューニングブロック長４１ｉとして「」と記憶している。
【００４１】
図１に戻って、読み出し処理部２２２は、アプリケーション２１によって指定された処理対象ファイル３０のアクセス位置およびアクセスサイズより、対応するブロックのデータを読み出す。例えば、読み出し処理部２２２は、アプリケーション２１によって指定された処理対象ファイル３０のアクセス位置およびアクセスサイズより、アクセス対象となるブロックを算出する。そして、読み出し処理部２２２は、排他情報５０内に、算出した各ブロックの共有モード（ＳＨ）の排他キュー５４をつなげる。具体的に、読み出し処理部２２２は、算出したブロックに対応する排他キュー５４を、アプリケーション２１に対応するトランザクションエントリ５２１から接続される方向、つまりアプリケーション２１の処理方向でつなげる。また、読み出し処理部２２２は、算出したブロックに対応する排他キュー５４を、リソース情報５１内のブロック情報５１２から接続される方向、つまりブロックのアクセス方向でつなげる。そして、読み出し処理部２２２は、算出した各ブロックのデータを読み出し、アクセス位置を更新する。
【００４２】
ここで、排他情報５０のデータ構造の一例を、図６〜図９を参照して説明する。図６Ａ〜図６Ｃは、排他情報内のリソース情報のデータ構造を示し、図７Ａ〜図７Ｂは、排他情報内のトランザクション情報のデータ構造を示す。図８は、排他情報内のアクセス情報のデータ構造を示し、図９は、排他情報内の排他キューのデータ構造を示す。
【００４３】
図６Ａは、排他情報内のリソース情報のデータ構造を示す図である。図６Ａに示すように、リソース情報５１は、エントリ数５１ａとリソース情報エントリ５１１とを記憶する。エントリ数５１ａは、リソース情報エントリ５１１の数を示す。リソース情報エントリ５１１は、実際のリソース情報の管理テーブルを示す。リソース情報エントリ５１１は、処理対象ファイル３０のファイル名毎に存在する。
【００４４】
図６Ｂは、リソース情報内のリソース情報エントリのデータ構造を示す図である。図６Ｂに示すように、リソース情報エントリ５１１は、オープン数５１１ｂ、ブロック長５１１ｃ、ブロック数５１１ｄおよびブロック情報５１２をファイル名５１１ａに対応付けて記憶する。ファイル名５１１ａは、当リソース情報エントリ５１１が管理する処理対象ファイル３０のファイル名を示す。オープン数５１１ｂは、ファイル名５１１ａが示す処理対象ファイル３０をオープンしているアプリケーション２１の数を示す。ブロック長５１１ｃは、現時点のブロック長を示す。ブロック長５１１ｃには、オープン処理部２２１によって統計情報４０から取り出されたブロック長がオープン時に格納される。ブロック数５１１ｄは、ブロック情報５１２の総数を示す。ブロック情報５１２は、ファイル名５１１ａが示す処理対象ファイル３０のリソースであるブロックの情報である。ブロック情報５１２は、ブロック毎に存在する。
【００４５】
図６Ｃは、リソース情報エントリ内のブロック情報のデータ構造を示す図である。図６Ｃに示すように、ブロック情報５１２は、ブロック番号５１２ａ、先頭排他キューアドレス５１２ｂおよび最終排他キューアドレス５１２ｃを対応付けて記憶する。ブロック番号５１２ａは、当ブロック情報５１２が管理するブロックの番号を示す。先頭排他キューアドレス５１２ｂは、ブロック番号５１２ａが示すブロックに関する排他キューのうち先頭の排他キューのアドレスを示す。最終排他キューアドレス５１２ｃは、ブロック番号５１２ａが示すブロックに関する排他キューのうち最終の排他キューのアドレスを示す。すなわち、ブロック情報５１２は、ブロック番号５１２ａが示すブロックに対するアクセス方向を管理する。
【００４６】
図７Ａは、排他情報内のトランザクション情報のデータ構造を示す図である。図７Ａに示すように、トランザクション情報５２は、エントリ数５２ａとトランザクションエントリ５２１とを記憶する。エントリ数５２ａは、トランザクションエントリ５２１の数を示す。トランザクションエントリ５２１は、実際のトランザクションの管理テーブルを示す。トランザクションエントリ５２１は、アプリケーション２１毎に存在する。
【００４７】
図７Ｂは、トランザクション情報内のトランザクションエントリのデータ構造を示す図である。図７Ｂに示すように、トランザクションエントリ５２１は、トランザクションＩＤ（identification）５２１ａ、先頭アクセス情報アドレス５２１ｂ、先頭排他キューアドレス５２１ｃおよび最終排他キューアドレス５２１ｄを対応付けて記憶する。トランザクションＩＤ５２１ａは、当トランザクションエントリ５２１が管理するトランザクションのＩＤを示す。先頭アクセス情報アドレス５２１ｂは、当トランザクションエントリ５２１が管理するトランザクションでアクセスしているファイルのアクセス情報５３のうち先頭のアクセス情報５３のアドレスを示す。先頭排他キューアドレス５２１ｃは、トランザクションＩＤ５２１ａが示すトランザクションに関する排他キューのうち先頭の排他キューのアドレスを示す。最終排他キューアドレス５２１ｄは、トランザクションＩＤ５２１ａが示すトランザクションに関する排他キューのうち最終の排他キューのアドレスを示す。すなわち、トランザクションエントリ５２１は、トランザクションＩＤ５２１ａが示すトランザクションで処理されるアプリケーション２１の処理方向を管理する。
【００４８】
図８は、排他情報内のアクセス情報のデータ構造を示す図である。図８に示すように、アクセス情報５３は、ファイル名５３ａ、アクセス位置５３ｂ、ファイルポインタ５３ｃおよび次アドレス５３ｄを対応付けて記憶する。ファイル名５３ａは、当アクセス情報が管理する処理対象ファイル３０のファイル名を示す。すなわち、ファイル名５３ａは、トランザクションＩＤ５２１ａが示すトランザクションでアクセスしている処理対象ファイル３０のファイル名である。アクセス位置５３ｂは、ファイル名５３ａで示される処理対象ファイル３０の最新のアクセス位置を示す。すなわち、アクセス位置５３ｂは、ファイルの先頭からのオフセットで表される。ファイルポインタ５３ｃは、ファイル名５３ａが示すファイルのファイルポインタを示す。次アドレス５３ｄは、次のアクセス情報のアドレスを示す。すなわち、次アドレス５３ｄには、同じトランザクションでさらに異なるファイルがアクセスされる場合には、次のアクセス情報が設定される。
【００４９】
図９は、排他情報内の排他キューのデータ構造を示す図である。図９に示すように、排他キュー５４は、排他モード５４ｂ、前トランザクションアドレス５４ｃ、次トランザクションアドレス５４ｄ、前ブロックアドレス５４ｅおよび次ブロックアドレス５４ｆをブロック情報アドレス５４ａに対応付けて記憶する。また、排他キュー５４は、待ち状態５４ｇ、ステータス５４ｈおよび更新後ログ域５４ｉをブロック情報アドレス５４ａに対応付けて記憶する。
【００５０】
排他キュー５４は、処理対象ファイル３０のブロックへのアクセス毎に生成される。ブロック情報アドレス５４ａは、当排他キュー５４が管理するブロック情報５１２のアドレスを示す。排他モード５４ｂは、当排他キュー５４の排他モードを示す。一例として、ブロックを占有することを示す占有モードとして「ＥＸ」が設定され、ブロックを占有しないことを示す共有モードとして「ＳＨ」が設定される。
【００５１】
前トランザクションアドレス５４ｃは、当排他キュー５４で管理するブロック情報５１２に関し、前に獲得している他のトランザクションの排他キューのアドレスを示す。例えば、前トランザクションアドレス５４ｃには、先頭の場合、ＮＵＬＬが設定され、先頭でない場合、当トランザクションの前で獲得した他のトランザクションの排他キューのアドレスが設定される。次トランザクションアドレス５４ｄは、当排他キュー５４で管理するブロック情報５１２に関し、次に獲得したトランザクションの排他キューのアドレスを示す。例えば、次トランザクションアドレス５４ｄには、最後の場合、ＮＵＬＬが設定され、最後でない場合、当トランザクションの次に獲得した他のトランザクションの排他キューのアドレスが設定される。すなわち、ライブラリ２２は、前トランザクションアドレス５４ｃ、次トランザクションアドレス５４ｄおよびブロック情報５１２を用いることで、ブロック情報５１２内のブロック番号５１２ａが示すブロックに対するアクセスの遷移を辿ることができる。
【００５２】
前ブロックアドレス５４ｅは、当排他キュー５４で管理するトランザクションに関し、前に獲得したブロック情報５１２の排他キューのアドレスを示す。例えば、前ブロックアドレス５４ｅには、先頭の場合、ＮＵＬＬが設定され、先頭でない場合、当トランザクションで当ブロックの前に獲得したブロックの排他キューのアドレスが設定される。次ブロックアドレス５４ｆは、当排他キュー５４で管理するトランザクションに関し、次に獲得したブロック情報５１２の排他キューのアドレスを示す。例えば、次ブロックアドレス５４ｆには、最後の場合、ＮＵＬＬが設定され、最後でない場合、当トランザクションで当ブロックの次に獲得したブロックの排他キューのアドレスが設定される。すなわち、ライブラリ２２は、前ブロックアドレス５４ｅ、次ブロックアドレス５４ｆおよびトランザクションエントリ５２１を用いることで、トランザクションエントリ５２１のトランザクションで処理されるアプリケーション２１の処理の遷移を辿ることができる。
【００５３】
待ち状態５４ｇは、当排他キュー５４で管理するブロックの競合解消待ちの有無を示す。例えば、待ち状態５４ｇには、待ち状態にない場合はＮＵＬＬが設定され、待ち状態にある場合はＮＵＬＬ以外が設定される。ステータス５４ｈは、当排他キュー５４で管理するブロックの競合解消待ちに対する結果通知域を示す。例えば、ステータス５４ｈには、正常である場合正常であることを示す「ＮＯＲＭＡＬ」が設定され、異常である場合異常であることを示す「ＥＲＲＯＲ」が設定される。更新後ログ域５４ｉは、当排他キュー５４で管理するブロックに書き込まれるデータを指す更新後ログ６０のアドレスを示す。例えば、後述する書き込み処理部２２３は、当排他キュー５４で管理するブロックに対し更新処理が行われた場合に、トランザクションのコミット時に処理対象ファイル３０に書き込まれるデータを記憶した更新後ログ６０のアドレスを設定する。
【００５４】
図１に戻って、書き込み処理部２２３は、アプリケーション２１によって指定された処理対象ファイル３０のアクセス位置およびアクセスサイズより、対応するブロックへのデータの書き込み処理を行う。例えば、書き込み処理部２２３は、書き込みサイズより、書き込み対象となるブロックを算出する。そして、書き込み処理部２２３は、算出した全ブロックのデータを読み込み、読み込んだデータと書き込み依頼されているデータとを比較し、ブロック毎に変更の有無を判定する。
【００５５】
変更が無いブロックについて、書き込み処理部２２３は、参照対象であると判断し、排他情報５０内に、算出した各ブロックの共有モード（ＳＨ）の排他キュー５４をつなげる。一例として、書き込み処理部２２３は、該当ブロックに対応する排他キュー５４を、アプリケーション２１に対応するトランザクションエントリ５２１から接続される方向、つまりアプリケーション２１の処理方向でつなげる。また、読み出し処理部２２２は、該当ブロックに対応する排他キュー５４を、リソース情報５１内のブロック情報５１２から接続される方向、つまりブロックのアクセス方向でつなげる。
【００５６】
変更が有るブロックについて、書き込み処理部２２３は、更新対象、すなわち排他対象であると判断し、排他情報５０内に、算出した各ブロックの占有モード（ＥＸ）の排他キュー５４をつなげる。一例として、書き込み処理部２２３は、該当ブロックに対応する排他キュー５４を、アプリケーション２１に対応するトランザクションエントリ５２１から接続される方向、つまりアプリケーション２１の処理方向でつなげる。また、読み出し処理部２２２は、該当ブロックに対応する排他キュー５４を、リソース情報５１内のブロック情報５１２から接続される方向、つまりブロックのアクセス方向でつなげる。そして、書き込み処理部２２３は、変更が有るブロックに対応する更新後のデータを更新後ログ６０に一時的に書き込む。
【００５７】
そして、書き込み処理部２２３は、排他情報５０を参照し、排他対象のブロックについて、他に占有モード（ＥＸ）の排他キュー５４が存在しているか否かを判定する。一例として、書き込み処理部２２３は、リソース情報５１内の排他対象のブロックに対応するブロック情報５１２から排他キュー５４を辿り、他の排他キュー５４のうち占有モード（ＥＸ）の排他キュー５４が存在しているか否かを判定する。そして、書き込み処理部２２３は、他に占有モード（ＥＸ）の排他キュー５４が存在している場合、排他エラーとする。これにより、複数のアプリケーション２１は、並行に動作していても、同じアクセス対象の処理対象ファイル３０に対して相互に影響を及ぼすことなくアクセスすることができる。
【００５８】
そして、書き込み処理部２２３は、他に占有モード（ＥＸ）の排他キュー５４が存在している場合、当該排他キュー５４が待ち状態にあれば、排他エラーを通知すべく、当該排他キュー５４に対して異常であることを設定する。一例として、書き込み処理部２２３は、当該排他キュー５４の待ち状態５４ｇがＮＵＬＬ以外であれば、待ち状態であると判断し、ステータス５４ｈを異常でスケジュールする。なお、待ち状態にある場合とは、後述するクローズ処理部２２５によって排他情報５０がメモリロックされる場合である。
【００５９】
そして、書き込み処理部２２３は、他に占有モード（ＥＸ）の排他キュー５４が存在していない場合、統計情報４０の該当する統計情報エントリ４１を更新する。
【００６０】
ここで、排他対象のブロックについて、図１０を参照して説明する。図１０は、排他対象のブロックについて説明する図である。図１０では、処理対象ファイル３０のブロックが５バイトであるとする。また、アプリケーション２１によって指定された書き込みサイズは、２８バイトであるとする。
【００６１】
図１０上図に示すように、書き込み対象領域の更新前のデータが表されている。ここでは、書き込み対象となるブロックは、１〜６ブロックである。
【００６２】
図１０下図に示すように、書き込み依頼されているデータが実際に更新された場合の更新後のデータが表されている。書き込み処理部２２３は、書き込み対象となる全ブロックのデータを読み込み、読み込んだデータと書き込み依頼されているデータとを比較し、ブロック毎に変更の有無を判定する。ここでは、変更が有るのは、ブロック２とブロック５である。ブロック２では、更新前のデータが「“，  １０」であるのに対し、更新後のデータが「“，１０５」であるので、変更が有ると判定される。ブロック５では、更新前のデータが「“，２５０」であるのに対し、更新後のデータが「“，１００」であるので、変更が有ると判定される。すなわち、ブロック２，５は、排他対象のブロックと判断される。
【００６３】
図１に戻って、シーク処理部２２４は、指定された位置にアクセス位置を変更し、処理対象ファイル３０のオフセットを変更する。
【００６４】
クローズ処理部２２５は、処理対象ファイル３０のクローズ処理として、排他情報５０を用いて、他のアプリケーション２１とデータの競合が発生しているか否かを判定する。なお、クローズ処理部２２５は、クローズ処理の間、他のアプリケーション２１の処理と同時に動作しないように、排他情報５０をメモリロックする。これは、クローズ処理の間、他のアプリケーション２１の処理が同時に動作していると、動作に伴い排他情報５０が追加されるからである。すなわち、クローズ処理部２２５は、排他情報５０が追加されなくなるまで、排他情報５０を用いたデータの競合の判定を待たされることになるからである。
【００６５】
例えば、クローズ処理部２２５は、自身のアプリケーション２１におけるトランザクションエントリ５２１から接続される方向に排他キュー５４を検索する。そして、クローズ処理部２２５は、排他モードが占有モード（ＥＸ）である排他キュー５４があれば、さらに、当該排他キュー５４の前に排他モードが共有モード（ＳＨ）である他のアプリケーション２１の排他キュー５４を検索する。この検索は、排他キュー５４が管理するブロックに対応するブロック情報５１２から接続される方向に辿る。そして、クローズ処理部２２５は、前に排他モードが共有モード（ＳＨ）である他のアプリケーション２１の排他キュー５４があれば、他のアプリケーション２１のトランザクションが終了するのを待つ。そして、クローズ処理部２２５は、他のアプリケーション２１からの書き込み処理部２２３によってステータス５４ｈを異常でスケジュールされた場合、データの競合が発生したと判断し、エラーで復帰する。一方、クローズ処理部２２５は、排他モードが共有モード（ＳＨ）である排他キュー５４があれば、さらに、当該排他キュー５４の後ろに排他モードが占有モード（ＥＸ）である他のアプリケーション２１の排他キュー５４を検索する。そして、そして、クローズ処理部２２５は、後ろに排他モードが占有モード（ＥＸ）である他のアプリケーション２１の排他キュー５４があれば、その排他キュー５４のステータス５４ｈを正常でスケジュールする。
【００６６】
また、クローズ処理部２２５は、処理対象ファイル３０のクローズ処理として、排他キュー５４の検索後に、処理対象ファイル３０への更新処理を行う。例えば、クローズ処理部２２５は、自身のアプリケーション２１におけるトランザクションエントリ５２１から接続される方向に、排他モードが占有モード（ＥＸ）である排他キュー５４を検索する。そして、クローズ処理部２２５は、排他モードが占有モード（ＥＸ）である排他キュー５４について、更新後ログ域５４ｉが指す更新後ログ６０のデータを処理対象ファイル３０に書き込む。
【００６７】
また、クローズ処理部２２５は、処理対象ファイル３０のクローズ処理として、処理対象ファイル３０をクローズする。
【００６８】
次に、実施例に係るアクセス制御処理の排他制御について、図１１を参照して説明する。図１１は、実施例に係るアクセス制御処理の排他制御を説明する図である。図１１では、アプリケーションＡおよびアプリケーションＢが並行して処理対象ファイル３０を用いたバッチ処理を実行している。リソース情報５１には、処理対象ファイル３０に対応するブロック情報５１２がブロック１〜１２毎に記憶されている。トランザクション情報５２には、アプリケーションに対応するトランザクションエントリ５２１がアプリケーションＡ，Ｂ毎に記憶されている。図１１に示すように、アプリケーションＡでは、処理対象ファイル３０について、ブロック１〜４に関する、読み出しサイズのデータを読み出し、ブロック１〜４に関する、書き込み依頼されているデータを書き込む処理をする。この際、実際に更新されるのは、ブロック２〜３であるとする。また、アプリケーションＢでは、処理対象ファイル３０について、ブロック１〜４に関する、読み出しサイズのデータを読み出し、ブロック１〜４に関する、書き込み依頼されているデータを書き込む処理をする。この際、実際に更新されるのは、ブロック３〜４であるとする。すると、アプリケーションＡとアプリケーションＢとは、ブロック３が競合する。
【００６９】
このような状況の下、例えば、アプリケーションＡから書き込み処理部２２３が呼び出されると、書き込み処理部２２３は、ブロック３を更新対象、すなわち排他対象であると判断する。そして、書き込み処理部２２３は、リソース情報５１内の排他対象のブロック３に対応するブロック情報５１２から排他キュー５４を辿り、他の排他キュー５４のうち占有モード（ＥＸ）の排他キュー５４が存在しているか否かを判定する。ここでは、書き込み処理部２２３は、アプリケーションＢに占有モード（ＥＸ）の排他キュー５４が存在していると判定する。そこで、書き込み処理部２２３は、ブロック３が占有モード（ＥＸ）で排他されているので、競合が発生したと判断し、排他エラーとする。これにより、アプリケーションＡ，Ｂは、並行に動作していても、同じアクセス対象の処理対象ファイル３０に対して相互に影響を及ぼすことなく書き込む処理をすることができる。
【００７０】
［オープン処理の手順］
次に、図１２を参照して、オープン処理の手順を説明する。図１２は、実施例に係るオープン処理の手順を示すフローチャートである。なお、図１２では、アプリケーション２１からオープンする処理対象ファイル３０のファイル名が指定されたとする。
【００７１】
オープン処理部２２１は、アプリケーション２１から指定されたファイルのリソース情報５１があるか否かを判定する（ステップＳ１１）。例えば、オープン処理部２２１は、リソース情報５１を参照して、アプリケーション２１から指定されたファイルのファイル名に対応するリソース情報エントリ５１１があるか否かを判定する。
【００７２】
ファイルのリソース情報５１があると判定した場合（ステップＳ１１；Ｙｅｓ）、オープン処理部２２１は、ステップＳ１４に移行する。一方、ファイルのリソース情報５１がないと判定した場合（ステップＳ１１；Ｎｏ）、オープン処理部２２１は、リソース情報５１内に新たなリソース情報エントリ５１１を登録する（ステップＳ１２）。そして、オープン処理部２２１は、統計情報４０内に、アプリケーション２１および指定されたファイルに対応する新たな統計情報エントリ４１を登録し、デフォルトを設定する（ステップＳ１３）。そして、オープン処理部２２１は、ステップＳ１４に移行する。
【００７３】
ステップＳ１４では、オープン処理部２２１は、統計情報４０からブロック長を取り出す（ステップＳ１４）。例えば、オープン処理部２２１は、統計情報４０から、アプリケーション２１および指定されたファイルに対応するブロック長を、チューニング種別４１ｈに応じて取り出す。一例として、オープン処理部２２１は、チューニング種別４１ｈが「ＡＶＥ」であれば、平均値４１ｇに設定された値をブロック長として取り出す。
【００７４】
続いて、オープン処理部２２１は、指定されたファイルをオープン中の他のアプリケーション２１が存在するか否かを判定する（ステップＳ１５）。例えば、オープン処理部２２１は、指定されたファイルに対応するリソース情報エントリ５１１を参照して、オープン数５１１ｂの値が０より大きいか否かを判定する。
【００７５】
指定されたファイルをオープン中の他のアプリケーション２１が存在すると判定した場合（ステップＳ１５；Ｙｅｓ）、オープン処理部２２１は、オープン中のアプリケーション２１と同じブロック長を使用させる（ステップＳ１６）。すなわち、オープン処理部２２１は、指定されたファイルに対応するリソース情報エントリ５１１を参照して、ブロック長５１１ｃの値をブロック長として取り出す。そして、オープン処理部２２１は、ステップＳ１８に移行する。
【００７６】
一方、指定されたファイルをオープン中の他のアプリケーション２１が存在しないと判定した場合（ステップＳ１５；Ｎｏ）、オープン処理部２２１は、統計情報４０から取り出したブロック長をそのまま使用させる（ステップＳ１７）。そして、オープン処理部２２１は、ステップＳ１８に移行する。
【００７７】
そして、オープン処理部２２１は、アクセスを開始するアクセス開始位置を初期化する（ステップＳ１８）。そして、オープン処理部２２１は、トランザクション情報５２からアプリケーション２１に対応するトランザクションエントリ５２１を獲得する（ステップＳ１９）。このとき、オープン処理部２２１は、アプリケーション２１からアクセスするファイルに対応するアクセス情報５３を獲得し、獲得したアクセス情報５３内のアクセス位置５３ｂにアクセス開始位置を設定する。そして、オープン処理部２２１は、指定されたファイルのオープン処理を実行する（ステップＳ２０）。
【００７８】
［読み出し処理の手順］
次に、図１３を参照して、読み出し処理の手順を説明する。図１３は、実施例に係る読み出し処理の手順を示すフローチャートである。なお、図１３では、アプリケーション２１から処理対象ファイル３０のファイル名、アクセス位置およびアクセスサイズが指定されたとする。
【００７９】
読み出し処理部２２２は、アプリケーション２１から指定されたアクセス位置、アクセスサイズより、アクセス対象となるブロックのブロック番号を算出する（ステップＳ２１）。
【００８０】
そして、読み出し処理部２２２は、算出した全てのブロック番号に対する全ブロックの排他情報５０を設定する（ステップＳ２２）。すなわち、読み出し処理部２２２は、リソースに関するキューに共有モード（ＳＨ）の排他キュー５４をつなぐ。例えば、読み出し処理部２２２は、算出した全ブロックに対応する共有モード（ＳＨ）の排他キュー５４を、アプリケーション２１に対応するトランザクションエントリ５２１から接続される方向でつなげる。一例として、読み出し処理部２２２は、アプリケーション２１に対応するトランザクションエントリ５２１の先頭排他キューアドレス５２１ｃおよび最終排他キューアドレス５２１ｄを設定するとともに、排他キュー５４の前ブロックアドレス５４ｅおよび次ブロックアドレス５４ｆを設定する。また、読み出し処理部２２２は、算出した全ブロックに対応する共有モード（ＳＨ）の排他キュー５４を、各ブロックについてリソース情報５１内のブロック情報５１２から接続される方向でつなげる。一例として、読み出し処理部２２２は、ブロックに対応する先頭排他キューアドレス５１２ｂおよび最終排他キューアドレス５１２ｃを設定するとともに、排他キュー５４の前トランザクションアドレス５４ｃおよび次トランザクションアドレス５４ｄを設定する。
【００８１】
そして、読み出し処理部２２２は、算出したブロック番号のブロックのデータを、指定されたファイルから読み出す（ステップＳ２３）。そして、読み出し処理部２２２は、アクセス位置を更新し、該当するアクセス情報５３のアクセス位置５３ｂに設定する（ステップＳ２４）。
【００８２】
［書き込み処理の手順］
次に、図１４Ａおよび図１４Ｂを参照して、書き込み処理の手順を説明する。図１４Ａおよび図１４Ｂは、実施例に係る書き込み処理の手順を示すフローチャートである。なお、図１４Ａでは、アプリケーション２１から処理対象ファイル３０のファイル名、アクセス位置、アクセスサイズおよび書き込み依頼データが指定されたとする。
【００８３】
書き込み処理部２２３は、アプリケーション２１から指定されたアクセス位置、アクセスサイズより、アクセス対象となるブロックのブロック番号を算出する（ステップＳ３１）。そして、書き込み処理部２２３は、算出した全ブロック番号に対する全ブロックのデータを読み出し、書き込み依頼データとの比較処理を実行する（ステップＳ３２）。なお、比較処理は、図１４Ｂで説明する。
【００８４】
続いて、書き込み処理部２２３は、比較処理の結果、変更があるか否かを判定する（ステップＳ３２Ａ）。変更がないと判定した場合（ステップＳ３２Ａ；Ｎｏ）、書き込み処理部２２３は、算出した全てのブロック番号に対する全ブロックの排他情報５０を設定する（ステップＳ３３）。すなわち、書き込み処理部２２３は、リソースに関するキューに共有モード（ＳＨ）の排他キュー５４をつなぐ。例えば、書き込み処理部２２３は、算出した全ブロックに対応する共有モード（ＳＨ）の排他キュー５４を、アプリケーション２１に対応するトランザクションエントリ５２１から接続される方向でつなげる。また、書き込み処理部２２３は、算出した全ブロックに対応する共有モード（ＳＨ）の排他キュー５４を、各ブロックについてリソース情報５１内のブロック情報５１２から接続される方向でつなげる。そして、書き込み処理部２２３は、ステップＳ４０に移行する。
【００８５】
一方、変更があると判定した場合（ステップＳ３２Ａ；Ｙｅｓ）、書き込み処理部２２３は、リソースに関するキューに占有モード（ＥＸ）の排他キュー５４をつなぐ。例えば、書き込み処理部２２３は、変更があったブロックに対応する占有モード（ＥＸ）の排他キュー５４を、変更があったブロックについてリソース情報５１内のブロック情報５１２から接続される方向でつなげる。そして、書き込み処理部２２３は、変更があったブロックに対応する更新後のデータを更新後ログ６０に書き込む（ステップＳ３４）。このとき、書き込み処理部２２３は、排他キュー５４の更新後ログ域５４ｉに、更新後ログ６０に書き込まれた更新後のデータの先頭アドレスを設定する。
【００８６】
そして、書き込み処理部２２３は、変更があったブロックと同じブロックに対応する他の排他キュー５４が存在するか否かを判定する（ステップＳ３５）。例えば、書き込み処理部２２３は、リソース情報５１内の該当ブロックに対応するブロック情報５１２から排他キュー５４を辿り、他の排他キュー５４が存在するか否かを判定する。
【００８７】
変更があったブロックと同じブロックに対応する他の排他キュー５４が存在しないと判定した場合（ステップＳ３５；Ｎｏ）、書き込み処理部２２３は、ステップＳ３８に移行する。一方、変更があったブロックと同じブロックに対応する他の排他キュー５４が存在すると判定した場合（ステップＳ３５；Ｙｅｓ）、書き込み処理部２２３は、当該排他キュー５４が占有モード（ＥＸ）であるか否かを判定する（ステップＳ３６）。当該排他キュー５４が占有モード（ＥＸ）でないと判定した場合（ステップＳ３６；Ｎｏ）、書き込み処理部２２３は、ステップＳ３８に移行する。
【００８８】
一方、当該排他キュー５４が占有モード（ＥＸ）であると判定した場合（ステップＳ３６；Ｙｅｓ）、書き込み処理部２２３は、同じブロックについてデータが競合すると判断し、排他エラーとする。その際、書き込み処理部２２３は、自分の排他キュー５４の後ろにつながっている他のトランザクションの排他キュー５４を検索する。そして、書き込み処理部２２３は、待ち状態５４ｇにＮＵＬＬ以外が設定されていれば、同じブロックについてデータが競合しているので、ステータス５４ｈを「異常」と設定してスケジュールする（ステップＳ３７）。そして、書き込み処理部２２３は、書き込み処理をエラーとして終了する。
【００８９】
ステップＳ３８では、書き込み処理部２２３は、変更があったブロックに対応する占有モード（ＥＸ）の排他キュー５４を、アプリケーション２１に対応するトランザクションエントリ５２１から接続される方向でそのままつなぐ（ステップＳ３８）。そして、書き込み処理部２２３は、ＲＡＭ４の作業用メモリ上の統計情報を更新する（ステップＳ３９）。例えば、書き込み処理部２２３は、指定されたファイルへのアクセスについて、変更があったブロックの「実際に更新されたサイズ」の総量、これまでに更新した回数、更新した際の最大サイズおよび最小サイズを、作業用メモリに統計情報として一時的に記憶する。そして、書き込み処理部２２３は、ステップＳ４０に移行する。
【００９０】
ステップＳ４０では、書き込み処理部２２３は、アクセス位置を更新し、該当するアクセス情報５３のアクセス位置５３ｂに設定する（ステップＳ４０）。
【００９１】
次に、比較処理について説明する。書き込み処理部２２３は、全ブロックの比較処理を実施したか否かを判定する（ステップＳ４１）。一方、全ブロックの比較処理を実施していないと判定した場合（ステップＳ４１；Ｎｏ）、書き込み処理部２２３は、実施していないブロックを選択する（ステップＳ４１Ａ）。
【００９２】
そして、書き込み処理部２２３は、選択したブロックについて、読み出しデータおよび書き込み依頼データの比較元／比較先を位置づける（ステップＳ４２）。そして、書き込み処理部２２３は、選択したブロック内の全データを比較したか否かを判定する（ステップＳ４３）。選択したブロック内の全データを比較したと判定した場合（ステップＳ４３；Ｙｅｓ）、書き込み処理部２２３は、次のブロックを選択すべく、ステップＳ４１に移行する。
【００９３】
一方、選択したブロック内の全データを比較していないと判定した場合（ステップＳ４３；Ｎｏ）、書き込み処理部２２３は、比較元のデータと比較先のデータとを比較する（ステップＳ４４）。書き込み処理部２２３は、比較元のデータと比較先のデータとが一致しているか否かを判定する（ステップＳ４５）。
【００９４】
一致していると判定した場合（ステップＳ４５：Ｙｅｓ）、書き込み処理部２２３は、ステップＳ４７に移行する。一方、一致していないと判定した場合（ステップＳ４５；Ｎｏ）、書き込み処理部２２３は、一致していないデータについて「実際に更新されたサイズ」を加算する（ステップＳ４６）。そして、書き込み処理部２２３は、ステップＳ４７に移行する。
【００９５】
ステップＳ４７では、書き込み処理部２２３は、比較元のデータと比較先のデータとの位置を更新する（ステップＳ４７）。そして、書き込み処理部２２３は、更新した位置でのデータの比較をすべく、ステップＳ４３に遷移する。
【００９６】
そして、ステップＳ４１では、書き込み処理部２２３は、全ブロックの比較処理を実施したと判定した場合（ステップＳ４１；Ｙｅｓ）、判定処理を終了する。
【００９７】
［シーク処理の手順］
次に、図１５を参照して、シーク処理の手順を説明する。図１５は、実施例に係るシーク処理の手順を示すフローチャートである。なお、図１５では、アプリケーション２１から処理対象ファイル３０のアクセス位置が指定されたとする。
【００９８】
シーク処理部２２４は、指定されたアクセス位置を更新し、該当するアクセス情報５３のアクセス位置５３ｂに設定する（ステップＳ５１）。そして、シーク処理部２２４は、指定されたアクセス位置に応じて、ファイルのオフセットを変更する（ステップＳ５２）。
【００９９】
［クローズ処理の手順］
次に、図１６を参照して、クローズ処理の手順を説明する。図１６は、実施例に係るクローズ処理の手順を示すフローチャートである。なお、図１６では、アプリケーション２１から処理対象ファイル３０のクローズ処理命令が発行されたとする。
【０１００】
まず、クローズ処理部２２５は、リソース情報５１および排他キュー５４の全体にメモリロックを獲得する（ステップＳ６１）。クローズ処理命令が発行されたアプリケーション２１からのクローズ処理が終了するまで、他のアプリケーション２１の処理が同時に動作しないようにするためである。
【０１０１】
そして、クローズ処理部２２５は、次の排他キュー５４は存在するか否かを判定する（ステップＳ６２）。例えば、クローズ処理部２２５は、自身のアプリケーション２１におけるトランザクションエントリ５２１に設定された先頭排他キューアドレス５２１ｃから順番に次に接続される排他キュー５４が存在するか否かを判定する。次の排他キュー５４が存在すると判定した場合（ステップＳ６２；Ｙｅｓ）、クローズ処理部２２５は、次の排他キュー５４を選択し、選択した排他キュー５４が占有モード（ＥＸ）であるか否を判定する（ステップＳ６３）。
【０１０２】
選択した排他キュー５４が占有モード（ＥＸ）であると判定した場合（ステップＳ６３；Ｙｅｓ）、クローズ処理部２２５は、自己の排他キュー５４の前に他のアプリケーション２１の共有モード（ＳＨ）の排他キュー５４があるか否かを判定する（ステップＳ６４）。例えば、クローズ処理部２２５は、自己の排他キュー５４が管理するブロックに対応するブロック情報５１２から接続される方向にある排他キュー５４を辿る。そして、クローズ処理部２２５は、自己の排他キュー５４の前に他のアプリケーション２１の共有モード（ＳＨ）の排他キュー５４があるか否かを判定する。
【０１０３】
自己の排他キュー５４の前に他のアプリケーション２１の共有モード（ＳＨ）の排他キュー５４がないと判定した場合（ステップＳ６４；Ｎｏ）、クローズ処理部２２５は、次の排他キュー５４を判定すべく、ステップＳ６２に移行する。一方、自己の排他キュー５４の前に他のアプリケーション２１の共有モード（ＳＨ）の排他キュー５４があると判定した場合（ステップＳ６４；Ｙｅｓ）、クローズ処理部２２５は、他のアプリケーション２１のトランザクションが終了するまで待つ（ステップＳ６５）。他のアプリケーション２１のトランザクションが終了するまで、他のアプリケーション２１が自己の排他キュー５４によって管理されるブロックと同一のブロックに対して書き込み処理をするかしないか不明であるからである。
【０１０４】
他のアプリケーション２１のトランザクションが終了した後、クローズ処理部２２５は、自己の排他キュー５４のステータス５４ｈが正常であるか否かを判定する（ステップＳ６９）。すなわち、クローズ処理部２２５は、他のアプリケーション２１からの書き込み処理部２２３によって自己の排他キュー５４のステータス５４ｈが異常でスケジュールされていないかどうかを判定する。自己の排他キュー５４のステータス５４ｈが正常であると判定した場合（ステップＳ６９；Ｙｅｓ）、クローズ処理部２２５は、次の排他キュー５４を判定すべく、ステップＳ６２に移行する。
【０１０５】
一方、自己の排他キュー５４のステータス５４ｈが正常でないと判定した場合（ステップＳ６９；Ｎｏ）、クローズ処理部２２５は、データの競合が発生したと判断し、エラーで処理を終了する。
【０１０６】
ステップＳ６３では、選択した排他キュー５４が占有モード（ＥＸ）でないと判定した場合（ステップＳ６３；Ｎｏ）、クローズ処理部２２５は、自己の排他キュー５４の後に他のアプリケーション２１の占有モード（ＥＸ）の排他キュー５４があるか否かを判定する（ステップＳ６６）。例えば、クローズ処理部２２５は、自己の排他キュー５４が管理するブロックに対応するブロック情報５１２から接続される方向にある排他キュー５４を辿る。そして、クローズ処理部２２５は、自己の排他キュー５４の後に他のアプリケーション２１の占有モード（ＥＸ）の排他キュー５４があるか否かを判定する。
【０１０７】
自己の排他キュー５４の後に他のアプリケーション２１の占有モード（ＥＸ）の排他キュー５４がないと判定した場合（ステップＳ６６；Ｎｏ）、クローズ処理部２２５は、次の排他キュー５４を判定すべく、ステップＳ６２に移行する。一方、自己の排他キュー５４の後に他のアプリケーション２１の占有モード（ＥＸ）の排他キュー５４があると判定した場合（ステップＳ６６；Ｙｅｓ）、クローズ処理部２２５は、他の排他キュー５４のトランザクションが終了待ち状態か否かを判定する（ステップＳ６７）。例えば、クローズ処理部２２５は、他の排他キュー５４の待ち状態５４ｇがＮＵＬＬ以外であるか否かを判定する。
【０１０８】
他の排他キュー５４のトランザクションが終了待ち状態であると判定した場合（ステップＳ６７；Ｙｅｓ）、クローズ処理部２２５は、ステータス５４ｈを「正常」と設定してスケジュールする（ステップＳ６８）。これは、同じブロックについてデータが競合していないと判断されるからである。そして、クローズ処理部２２５は、次の排他キュー５４を判定すべく、ステップＳ６２に移行する。
【０１０９】
一方、他の排他キュー５４のトランザクションが終了待ち状態でないと判定した場合（ステップＳ６７；Ｎｏ）、クローズ処理部２２５は、次の排他キュー５４を判定すべく、ステップＳ６２に移行する。
【０１１０】
ステップＳ６２では、次の排他キュー５４が存在しないと判定した場合（ステップＳ６２；Ｎｏ）、クローズ処理部２２５は、自己のトランザクションで管理している占有モード（ＥＸ）の排他キュー５４を検索する。そして、クローズ処理部２２５は、更新後データをファイルに書き込む（ステップＳ７０）。例えば、クローズ処理部２２５は、自己のアプリケーション２１におけるトランザクションエントリ５２１から接続される方向に、占有モード（ＥＸ）の排他キュー５４を検索する。そして、クローズ処理部２２５は、占有モード（ＥＸ）の排他キュー５４の更新後ログ域５４ｉが指す更新後ログ６０のデータをファイルに書き込む。
【０１１１】
そして、クローズ処理部２２５は、ファイルのクローズ処理を実行する。そして、クローズ処理部２２５は、作業用メモリ上の統計情報を統計情報４０内の該当する統計情報エントリ４１に更新する（ステップＳ７１）。そして、クローズ処理部２２５は、自己のトランザクションの全ての排他キュー５４および更新後データを開放し、トランザクションを終了する（ステップＳ７２）。
【０１１２】
［アクセス制御処理の具体例］
次に、実施例に係るアクセス制御処理の具体例について、図１７を参照して説明する。図１７は、実施例に係るアクセス制御処理の具体例を説明する図である。図１７に示すように、バッチアプリケーション２１が定期的に実行される。バッチアプリケーション２１は、東京、大阪、名古屋それぞれについて、日次売上から月次売上を算出し、月次売上用の処理対象ファイル３０に書き込むトランザクションを実行する。
【０１１３】
各バッチアプリケーション２１は、プログラミングに応じてライブラリ２２のｏｐｅｎ＿ＥＸ（）のモジュール、ｒｅａｄ＿ＥＸ（）のモジュール、ｗｒｉｔｅ＿ＥＸ（）のモジュール、ｓｅｅｋ＿ＥＸ（）のモジュール、ｃｌｏｓｅ＿ＥＸ（）のモジュールを呼び出す。ここでは、ｏｐｅｎ＿ＥＸ（）は、オープン処理部２２１に対応する。ｒｅａｄ＿ＥＸ（）は、読み出し処理部２２２に対応する。ｗｒｉｔｅ＿ＥＸ（）は、書き込み処理部２２３に対応する。ｓｅｅｋ＿ＥＸ（）は、シーク処理部２２４に対応する。ｃｌｏｓｅ＿ＥＸ（）は、クローズ処理部２２５に対応する。
【０１１４】
各モジュールは、統計情報４０および排他情報５０を用いて処理する。すなわち、東京に関するバッチアプリケーション２１は、東京に関する日次売上を読み出すために、ｒｅａｄ＿ＥＸ（）を呼び出して読み込みファイルから東京に対応するデータを読み出す。そして、バッチアプリケーション２１は、読み出したデータを用いて月次売上を算出し、東京に関する月次売上を書き込むために、ｗｒｉｔｅ＿ＥＸ（）を呼び出して処理対象ファイル３０へ東京に対応するデータを書き込む。そして、バッチアプリケーション２１は、ｃｌｏｓｅ＿ＥＸ（）を呼び出して、読み込みファイルおよび処理対象ファイル３０をクローズする。大阪、名古屋に関するバッチアプリケーション２１も、東京の場合と同様に、それぞれ大阪、名古屋に対応するデータを処理対象ファイル３０へ書き込む。
【０１１５】
アクセス制御処理は、東京、大阪、名古屋のバッチアプリケーション２１を並列して実行しても、処理対象ファイル３０に書き込むブロックが競合しなければ、それぞれの地名に対応する部分に算出結果を正しく書き込むことができる。アクセス制御処理は、仮に処理対象ファイル３０に書き込むブロックが競合しても、エラーとすることができる。したがって、アクセス制御処理は、東京、大阪、名古屋のバッチアプリケーション２１を並列して実行しても、相互に影響を及ぼすことなく、同じ処理対象ファイル３０にアクセスすることができる。
【０１１６】
［制御装置の具体例］
次に、実施例に係る制御装置１の具体的な構成例について、図１８を参照して説明する。図１８は、実施例に係る制御装置の具体的な構成例を示す図である。図１８に示すように、アプリケーション２１は、ライブラリ２２で提供される各モジュールでプログラミングされたプログラムである。
【０１１７】
ライブラリ２２には、各モジュールが提供されている。ここでは、ｏｐｅｎ＿ＥＸ（）のモジュール、ｒｅａｄ＿ＥＸ（）のモジュール、ｗｒｉｔｅ＿ＥＸ（）のモジュール、ｃｌｏｓｅ＿ＥＸ（）のモジュールが提供されている。ｏｐｅｎ＿ＥＸ（）は、オープン処理部２２１に対応する。ｒｅａｄ＿ＥＸ（）は、読み出し処理部２２２に対応する。ｗｒｉｔｅ＿ＥＸ（）は、書き込み処理部２２３に対応する。ｃｌｏｓｅ＿ＥＸ（）は、クローズ処理部２２５に対応する。
【０１１８】
そして、各モジュールは、それぞれ統計情報４０および排他情報５０にアクセスする。加えて、各モジュールは、それぞれＯＳ２３が提供しているモジュールを呼び出す。すなわち、ｏｐｅｎ＿ＥＸ（）のモジュールは、ＯＳ２３が提供するｏｐｅｎ（）を呼び出す。ｒｅａｄ＿ＥＸ（）のモジュールは、ＯＳ２３が提供するｒｅａｄ（）を呼び出す。ｗｒｉｔｅ＿ＥＸ（）のモジュールは、ＯＳ２３が提供するｗｒｉｔｅ（）を呼び出す。ｃｌｏｓｅ＿ＥＸ（）のモジュールは、ＯＳ２３が提供するｃｌｏｓｅ（）を呼び出す。そして、ＯＳ２３が提供されたモジュールから処理対象ファイル３０がアクセスされる。
【０１１９】
このような構成を有する制御装置１は、アクセス制御処理を実行する。
【０１２０】
［実施例の効果］
上記実施例によれば、制御装置１は、バッチ処理によって実行される複数のアプリケーション２１それぞれについて、アプリケーション２１が処理対象ファイル３０の記憶領域にアクセスした際のアクセス位置およびアクセス領域のサイズに対応する領域であるブロックの排他情報５０を蓄積する。そして、制御装置１は、蓄積されたブロックの排他情報５０に基づいて、複数のアプリケーション２１のいずれかのアプリケーション２１が処理対象ファイル３０の記憶領域にアクセスした際に、記憶領域におけるブロックの排他制御５０で特定される領域を対象に排他制御を実行する。かかる構成によれば、制御装置１は、複数のアプリケーション２１を並列して処理しても、いずれか一方のアプリケーション２１での処理対象ファイル３０単位での待ちがなくなり、バッチ処理を効率的に実現できる。すなわち、制御装置１は、複数のアプリケーションによってアクセスされる処理対象ファイル３０への影響を相互に及ぼすことなくアクセス可能となる。また、ユーザは事前に処理対象ファイル３０をＤＢ（DataBase）に移行させなくても、制御装置１は、項目（ブロック）単位で排他制御を実現できる。
【０１２１】
また、上記実施例によれば、制御装置１は、処理対象ファイル３０の記憶領域を所定の長さのブロックに論理的に分割し、ブロックの排他情報５０を蓄積する。そして、制御装置１は、アクセスした領域に対応するブロックを対象に排他制御を実行する。かかる構成によれば、制御装置１は、ブロック単位で排他制御することで、複数のアプリケーション２１を並列して処理してもファイル単位での待ちがなくなり、バッチ処理を効率的に実現できる。
【０１２２】
また、上記実施例によれば、制御装置１は、アプリケーション２１毎に、読み出し領域に対応するブロックの排他情報５０および書き込み領域のうち書き込むデータと値が異なる領域に対応するブロックの排他情報５０を蓄積する。そして、制御装置１は、蓄積された他のアプリケーション２１に対応するブロックの排他情報５０を参照し、現に書き込む領域のうち書き込むデータと値が異なる領域に対応するブロックと同じブロックの排他情報５０があるか否かを判定する。そして、制御装置１は、同じブロックの排他情報５０があれば、参照したブロックの排他情報５０が書き込みに関わるブロックの排他情報５０である場合に、当該ブロックを対象に排他制御を実行する。かかる構成によれば、制御装置１は、書き込むデータと値が異なる領域に対応するブロックを対象に排他制御を実行することで、排他制御の範囲を局所化できる。
【０１２３】
また、上記実施例によれば、制御装置１は、ブロックの長さを、現に値が更新されたデータのサイズを用いた長さとし、処理対象ファイル３０の記憶領域を当該長さのブロックに分割し、アクセスされたブロックの情報を蓄積する。かかる構成によれば、制御装置１は、ブロック長を実際に値が更新されたデータのサイズに則して変えることで、ブロック長を最適化できる。
【０１２４】
［プログラムなど］
なお、実施例では、ＨＤＤ３に、１つの処理対象ファイル３０が記憶されるとしたが、複数の処理対象ファイル３０が記憶されるとしても良い。ＨＤＤ３には、アプリケーション２１がアクセスするファイルを記憶するようにすれば良い。
【０１２５】
制御装置１は、既知のパーソナルコンピュータ、ワークステーションなどの情報処理装置に、上記した制御部２、ＨＤＤ３およびＲＡＭ４などの各機能を搭載することによって実現することができる。
【０１２６】
また、図示した装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ライブラリ２２をＯＳ２３と統合しても良い。一方、オープン処理部２２１を、処理対象ファイル３０のブロック長を決定する処理部と処理対象ファイル３０をオープンする処理部とに分散しても良い。また、ＨＤＤ３を制御装置１の外部装置としてネットワーク経由で接続するようにしても良い。
【０１２７】
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１に示した制御装置１と同様の機能を実現するアクセス制御プログラムを実行するコンピュータの一例を説明する。図１９は、アクセス制御プログラムを実行するコンピュータの一例を示す図である。
【０１２８】
図１９に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０３と、ユーザからのデータの入力を受け付ける入力装置２１５と、表示装置２０９を制御する表示制御部２０７とを有する。また、コンピュータ２００は、記憶媒体からプログラムなどを読取るドライブ装置２１３と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部２１７とを有する。また、コンピュータ２００は、各種情報を一時記憶するメモリ２０１と、ＨＤＤ２０５を有する。そして、メモリ２０１、ＣＰＵ２０３、ＨＤＤ２０５、表示制御部２０７、ドライブ装置２１３、入力装置２１５、通信制御部２１７は、バス２１９で接続されている。
【０１２９】
ドライブ装置２１３は、例えばリムーバブルディスク２１１用の装置である。ＨＤＤ２０５は、アクセス制御プログラム２０５ａおよびアクセス制御関連情報２０５ｂを記憶する。
【０１３０】
ＣＰＵ２０３は、アクセス制御プログラム２０５ａを読み出して、メモリ２０１に展開し、プロセスとして実行する。かかるプロセスは、制御装置１の各機能部に対応する。また、ＣＰＵ２０３は、プロセスを実行時に、制御装置１の統計情報４０、排他情報５０を展開する。アクセス制御関連情報２０５ｂは、処理対象ファイル３０に対応する。そして、例えばリムーバブルディスク２１１が、アクセス制御プログラム２０５ａなどの各情報を記憶する。
【０１３１】
なお、アクセス制御プログラム２０５ａについては、必ずしも最初からＨＤＤ２０５に記憶させておかなくても良い。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ２００がこれらからアクセス制御プログラム２０５ａを読み出して実行するようにしても良い。
【符号の説明】
【０１３２】
１  制御装置
２  制御部
２１  アプリケーション
２２  ライブラリ
２２１  オープン処理部
２２２  読み出し処理部
２２３  書き込み処理部
２２４  シーク処理部
２２５  クローズ処理部
２３  ＯＳ
３  ＨＤＤ
３０  処理対象ファイル
４  ＲＡＭ
４０  統計情報
４１  統計情報エントリ
５０  排他情報
５１  リソース情報
５１１  リソース情報エントリ
５１２  ブロック情報
５２  トランザクション情報
５２１  トランザクションエントリ
５３  アクセス情報
５４  排他キュー
６０  更新後ログ
【図１】
2015127924.tif 000003
【図２】
2015127924.tif 000004
【図３】
2015127924.tif 000005
【図４】
2015127924.tif 000006
【図５Ａ】
2015127924.tif 000007
【図５Ｂ】
2015127924.tif 000008
【図５Ｃ】
2015127924.tif 000009
【図６Ａ】
2015127924.tif 000010
【図６Ｂ】
2015127924.tif 000011
【図６Ｃ】
2015127924.tif 000012
【図７Ａ】
2015127924.tif 000013
【図７Ｂ】
2015127924.tif 000014
【図８】
2015127924.tif 000015
【図９】
2015127924.tif 000016
【図１０】
2015127924.tif 000017
【図１１】
2015127924.tif 000018
【図１２】
2015127924.tif 000019
【図１３】
2015127924.tif 000020
【図１４Ａ】
2015127924.tif 000021
【図１４Ｂ】
2015127924.tif 000022
【図１５】
2015127924.tif 000023
【図１６】
2015127924.tif 000024
【図１７】
2015127924.tif 000025
【図１８】
2015127924.tif 000026
【図１９】
2015127924.tif 000027