(57)【特許請求の範囲】
【請求項１】
第1の計算機上で動作するクライアントプログラムから、前記第1の計算機と計算機間網を通じて相互に通信可能な第2の計算機に接続されている二次記憶装置上のデータに対してアクセスする方法であって、
前記第1の計算機においては、前記クライアントプログラムによるリード／ライト呼び出しを、一定サイズのデータへのリード／ライト要求に分割し、
該分割して得られたリード／ライト要求の送信に先立ち、該リード／ライト要求の総数を分割数とし、予約の要求に含めて前記第2の計算機に対して送信し、
前記送信した予約の要求に対する前記第2の計算機からの応答に含まれる予約数からスレッショルド値を決定し、
前記分割して得られたリード／ライト要求の数が前記スレッショルド値以下のときは全部一度に前記第2の計算機に送信し、スレッショルド値を超えているときは最初にスレッショルド値分のリード／ライト要求を前記第2の計算機に送信した後、リード／ライト要求に対応する前記第2の計算機からの応答を1つ確認する毎に残りのリード／ライト要求を1つ前記第2の計算機に送信し、
前記送信した全てのリード／ライト要求について前記第2の計算機から応答が返却されていることを確認した後、前記第2の計算機に対して予約解除を要求すると共に、前記クライアントプログラムにリード／ライト呼び出しの結果を戻し、
前記第2の計算機においては、
前記第1の計算機からの予約の要求に対し、自計算機の総メモリ量を1つのリード／ライト要求で使用するデータサイズで除した商を処理負荷上限とし、該処理負荷上限から現時点での予約済みの総予約数を減じた差を許容数とし、該許容数、前記第1の計算機からの予約の要求に含まれる分割数、および、1クライアントプログラム当たりに付与する最大許容数の内、最小の値を予約数として決定し、該予約数を前記第1の計算機に通知すると共に、該予約数に見合ったメモリ量を確保し、
前記第1の計算機からのリード／ライト要求を受け取り、受け取ったリード／ライト要求1つに対し、要求された二次記憶装置上のデータにアクセスをした後、要求元のクライアントプログラムに応答1つを送信するという処理を、複数のリード／ライト要求に対し、多重化して実行し、
前記第1の計算機からの予約解除の要求に対し、前記確保していたメモリ量を解放し、
且つ、前記第2の計算機における処理の多重化は、要求の受け取りから応答の返却までの1つの要求にかかる一連のアクションの中断点で他の要求のアクションを実行することで実現し、然も、前記二次記憶装置に対するI／Oを発行したアクションの続きのアクションは優先的に処理することを特徴とする二次記憶装置への遠隔アクセス方法。
【請求項２】
第1の計算機上で動作するクライアントプログラムから、前記第1の計算機と計算機間網を通じて相互に通信可能な第2の計算機に接続されている二次記憶装置上のデータに対してアクセスする方法であって、
前記第1の計算機においては、
前記クライアントプログラムによるリード／ライト呼び出しを、一定サイズのデータへのリード／ライト要求に分割し、
該分割して得られたリード／ライト要求のうちの1つのリード／ライト要求に、該リード／ライト要求の総数を分割数として含めた予約の要求を付加し、予約＋リード／ライト一括要求として前記第2の計算機に対して送信し、
前記送信した予約の要求に対する前記第2の計算機からの応答に含まれる予約数からスレッショルド値を決定し、
前記分割して得られたリード／ライト要求の残りの数が前記スレッショルド値以下のときは、1つのリード／ライト要求に予約解除の要求を付加して予約解除＋リード／ライト一括要求とした上で、全部一度に前記第2の計算機に送信し、スレッショルド値を超えているときは最初にスレッショルド値分のリード／ライト要求を前記第2の計算機に送信した後、リード／ライト要求に対応する前記第2の計算機からの応答を1つ確認する毎に残りのリード／ライト要求を1つ前記第2の計算機に送信していき、且つ、最後の1つのリード／ライト要求は予約解除の要求を付加した予約解除＋リード／ライト一括要求として送信し、
前記送信した全てのリード／ライト要求について前記第2の計算機から応答が返却されていることを確認した後、前記クライアントプログラムにリード／ライト呼び出しの結果を戻し、
前記第2の計算機においては、
前記第1の計算機から受け取った要求が予約＋リード／ライト一括要求のときは、自計算機の総メモリ量を1つのリード／ライト要求で使用するデータサイズで除した商を処理負荷上限とし、該処理負荷上限から現時点での予約済みの総予約数を減じた差を許容数とし、該許容数、前記第1の計算機からの予約の要求に含まれる分割数、および、1クライアントプログラム当たりに付与する最大許容数の内、最小の値を予約数として決定し、該予約数を前記第1の計算機に通知すると共に、該予約数に見合ったメモリ量を確保した後、要求された二次記憶装置上のデータにアクセスをして要求元のクライアントプログラムに応答1つを送信するという処理を、受け取った要求がリード／ライト要求のときは要求された二次記憶装置上のデータにアクセスをした後、要求元のクライアントプログラムに応答1つを送信するという処理を、受け取った要求が予約解除＋リード／ライト一括要求のときは要求された二次記憶装置上のデータにアクセスをした後、要求元のクライアントプログラムから発生した処理中のリード／ライト要求が全部完了した時点で前記確保したメモリ量を解放するという処理を、複数の要求に対し、多重化して実行し、
且つ、前記第2の計算機における処理の多重化は、要求の受け取りから応答の返却までの1つの要求にかかる一連のアクションの中断点で他の要求のアクションを実行することで実現し、然も、前記二時記憶装置に対するI／Oを発行したアクションの続きのアクションは優先的に処理することを特徴とする二次記憶装置への遠隔アクセス方法。
【請求項３】
前記第2の計算機に、複数台の前記第1の計算機を前記計算機間接続網を通じて接続したことを特徴とする請求項１または２記載の二次記憶装置への遠隔アクセス方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は二次記憶装置への遠隔アクセス方法に関し、より詳細には、複数の計算機が計算機間接続網で接続されている環境において、或る計算機で動くアプリケーションプログラムから、別の計算機に接続されている二次記憶装置上のデータに対してアクセスする方法に関する。
【０００２】
【従来の技術】
別の計算機に接続されている二次記憶装置（遠隔二次記憶装置）にアクセスする方法は幾つか存在する。
【０００３】
１つの方法は、図１７（Ａ）に示すような、Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ（ＮＦＳ）による方法である。ＮＦＳにおけるデータアクセスは、ＲＰＣという通信プロトコルレイヤを設け、ソフトウェアで実現されている（参考文献「ＮＦＳ＆ＮＩＳ」アスキー出版局）。
【０００４】
ＮＦＳでは、クライアントプログラムからのリード／ライトの呼び出しをＲＰＣ要求という形に変換し、サーバ計算機上で動作するＮＦＳデーモンというプロセスにＲＰＣプロトコルを使って送信する。例えば、ライト呼び出しであれば、要求と共にライトデータが送信されるが、ＮＦＳデーモンでこのデータを取り込んでから、二次記憶装置に書き込み、応答をクライアントプログラムに転送する。リード呼び出しであれば、ＮＦＳデーモンは二次記憶装置から目的とするデータを読み出し、ＲＰＣ要求の応答としてデータを返却する。
【０００５】
クライアントプログラムからのリード／ライト呼び出しをＲＰＣ要求に変換する際は、固定サイズデータへのリード／ライト要求として複数のＲＰＣ要求に分解される。通常は、１回のＲＰＣ要求でアクセスされるデータのサイズは８ＫＢｙｔｅとなっている。アクセス要求は１つずつＮＦＳデーモンに送信され、その応答を待ってから次のＲＰＣ要求が送信される。つまり、ＮＦＳデーモンは同時には１つのＲＰＣ要求しか処理しないため、８ＫＢｙｔｅのデータを取り込む領域さえ確保していれば良い。ただし、１つのクライアントプログラムに対して１つのＮＦＳデーモンが占有されるため、複数のクライアントプログラムからの要求を処理するためには、サイズ計算機上にＮＦＳデーモンを複数立ち上げておく必要がある。
【０００６】
別の方法として、例えば特開平４−９２９４３号公報に見られる高速ＬＡＮのディスクサーバがある。この方法では、図１７（Ｂ）に示すように、計算機間接続網を高速ＬＡＮとし、二次記憶装置（ディスクと限定している）を管理するディスクサーバと複数のワークステーションから構成される環境を想定している。
ディスクを管理するディスクサーバは専用のハードウェアとし、複数のリード／ライト要求を同時に処理できる構造となっている。
【０００７】
ワークステーション上ではクライアントプログラムが動作し、クライアントプログラムからの遠隔ディスクへのリード／ライト要求を、通信によってディスクサーバに送信する。例えば、ライト要求であれば、要求と共にデータを送信する。これに対しディスクサーバでは、受信したデータをデータバッファに一旦格納してからディスクにデータを書き込み、通信によって要求元のワークステーションに結果を通知する。また、リード要求であれば、ディスクサーバでデータバッファ中に目的のデータがあるかどうかを調べ、なければディスクからデータを読み出し、データバッファに格納する。更に、格納したデータを通信によって要求元のワークステーションに送信する。
【０００８】
この方法では、計算機間接続網と二次記憶装置との間でデータを中継するために、ディスクサーバ内にデータバッファを持つ。データバッファは、各ワークステーション毎に領域を区切って使用する。リード／ライト要求はフレームと言う固定長単位で行われる。
【０００９】
以上に挙げた２つの方法は、何れもクライアントプログラムからのリード／ライト呼び出しを、複数の固定長データへの断片的なリード／ライト要求として分解し、二次記憶装置を管理する部分（サーバ計算機，ディスクサーバ）に送信することによって、遠隔二次記憶装置へのリード／ライト呼び出しの処理を可能としている。
【００１０】
【発明が解決しようとする課題】
しかしながら、分解された各断片リード／ライト要求を１つずつ送信し、処理結果を待ってから次の断片リード／ライト要求を送信するため、通信を何回も行うことになる。１つのリード／ライト呼び出しの処理の流れを見ると図１７（Ｃ）のようになり、（断片リード／ライト要求送信）→（二次記憶装置リード／ライト）→（応答返信）→（断片リード／ライト要求送信）→……と処理され、全ての断片リード／ライト要求が完了してからクライアントプログラムのリード／ライト呼び出しの結果が返ってくる。そのため、クライアントプログラムから見た遠隔二次記憶装置アクセスのための時間は、断片リード／ライト要求の数だけの往復の通信時間が余分にかかっているように見える。
【００１１】
そこで、本発明では、遠隔二次記憶装置へのデータアクセス時間における通信時間のほとんどをクライアントプログラムから見えなくし、あたかもその二次記憶装置がクライアントプログラムの動作する計算機に接続されているかのようなアクセス時間を達成することを目的とする。
【００１２】
【課題を解決するための手段】
本発明は上記の目的を達成するために、第１の計算機上で動作するクライアントプログラムから、前記第１の計算機と計算機間接続網を通じて相互に通信可能な第２の計算機に接続されている二次記憶装置上のデータに対してアクセスする方法において、第１の計算機および第２の計算機で以下の（３）乃至（４）のうちの何れかの処理を実行するようにしている。
【００１３】
（１）第１の計算機は、クライアントプログラムによるリード／ライト呼び出しを、一定サイズのデータへのリード／ライト要求に分割し、該分割して得られたリード／ライト要求を全部一度に前記第２の計算機に送信し、前記送信した全てのリード／ライト要求について前記第２の計算機から応答が返却されていることを確認した後、前記クライアントプログラムにリード／ライト呼び出しの結果を戻す。他方、第２の計算機は、第１の計算機からのリード／ライト要求を受け取り、受け取ったリード／ライト要求１つに対し、要求された二次記憶装置上のデータにアクセスをした後、要求元のクライアントプログラムに応答１つを送信するという処理を、複数のリード／ライト要求に対し、多重化して実行する。
【００１４】
このように、クライアントプログラムによるリード／ライト呼び出しを一定サイズのデータへのリード／ライト要求に分割して全部一度に第２の計算機に送信し、第２の計算機において複数のリード／ライト要求を多重処理することにより、第２の計算機での二次記憶装置の物理リード／ライト処理と計算機間接続網での通信処理が並行して行われることになり、通信の時間のほとんどが物理リード／ライト処理の時間と重なり、全体の処理時間が短縮される。
【００１５】
（２）第１の計算機は、クライアントプログラムによるリード／ライト呼び出しを、一定サイズのデータへのリード／ライト要求に分割し、該分割して得られたリード／ライト要求の数が予め定められたスレッショルド値以下のときは全部一度に前記第２の計算機に送信し、スレッショルド値を超えているときは最初にスレッショルド値分のリード／ライト要求を前記第２の計算機に送信した後、リード／ライト要求に対応する前記第２の計算機からの応答を１つ確認する毎に残りのリード／ライト要求を１つ前記第２の計算機に送信し、前記送信した全てのリード／ライト要求について前記第２の計算機から応答が返却されていることを確認した後、前記クライアントプログラムにリード／ライト呼び出しの結果を戻す。第２の計算機は、前記（１）と同じ処理を実行する。
【００１６】
このように、第２の計算機で一度に受け取ることのできる要求数としてスレッショルド値を設定し、最初に送信するリード／ライト要求数をスレッショルド値以下に抑えることにより、第２の計算機での最初の負荷を一定値以下に抑えることができる。さらに、１つの応答に対して１つのリード／ライト要求を送信するので、第２の計算機で受け取っているリード／ライト要求数は常にスレッショルド値以下となり、引続き第２の計算機での負荷を一定値以下に抑えることができる。
【００１７】
（３）第１の計算機は、クライアントプログラムによるリード／ライト呼び出しを、一定サイズのデータへのリード／ライト要求に分割し、該分割して得られたリード／ライト要求の送信に先立って前記第２の計算機に対して予約の要求を送信し、前記送信した予約の要求に対する前記第２の計算機からの応答に含まれる予約数からスレッショルド値を決定し、前記分割して得られたリード／ライト要求の数が前記スレッショルド値以下のときは全部一度に前記第２の計算機に送信し、スレッショルド値を超えているときは最初にスレッショルド値分のリード／ライト要求を前記第２の計算機に送信した後、リード／ライト要求に対応する前記第２の計算機からの応答を１つ確認する毎に残りのリード／ライト要求を１つ前記第２の計算機に送信し、前記送信した全てのリード／ライト要求について前記第２の計算機から応答が返却されていることを確認した後、前記第２の計算機に対して予約解除を要求すると共に、前記クライアントプログラムにリード／ライト呼び出しの結果を戻す。他方、第２の計算機は、第１の計算機からの予約の要求に対し、自計算機の現在の負荷状況に応じて１つのクライアントプログラムに対して許容するリード／ライト要求数を予約数として前記第１の計算機に通知すると共にその予約数に見合ったメモリ量を確保し、第１の計算機からのリード／ライト要求を受け取り、受け取ったリード／ライト要求１つに対し、要求された二次記憶装置上のデータにアクセスをした後、要求元のクライアントプログラムに応答１つを送信するという処理を、複数のリード／ライト要求に対し、多重化して実行し、第１の計算機からの予約解除の要求に対し、前記確保していたメモリ量を解放する。
【００１８】
このように、動的に変化する第２の計算機の負荷状況に応じて、１つのクライアントプログラムに対して許容する予約数を第１の計算機に知らせ、第１の計算機はその予約数をスレッショルド値として、以降、このスレッショルド値に従ってリード／ライト要求を行うことにより、第２の計算機に発生する負荷が一定値を超えないように制御することができる。従って、第２の計算機が複数のクライアントプログラムを相手にしても、第２の計算機の処理能力を超えることはない。
【００１９】
（４）第１の計算機は、クライアントプログラムによるリード／ライト呼び出しを、一定サイズのデータへのリード／ライト要求に分割し、該分割して得られたリード／ライト要求のうちの１つのリード／ライト要求に予約の要求を付加した予約＋リード／ライト一括要求を前記第２の計算機に対して送信し、前記送信した予約＋リード／ライト一括要求に対する前記第２の計算機からの予約応答に含まれる予約数からスレッショルド値を決定し、前記分割して得られたリード／ライト要求の残りの数が前記スレッショルド値以下のときは、１つのリード／ライト要求に予約解除の要求を付加して予約解除＋リード／ライト一括要求とした上で、全部一度に前記第２の計算機に送信し、スレッショルド値を超えているときは最初にスレッショルド値分のリード／ライト要求を前記第２の計算機に送信した後、リード／ライト要求に対応する前記第２の計算機からの応答を１つ確認する毎に残りのリード／ライト要求を１つ前記第２の計算機に送信していき且つ最後の１つのリード／ライト要求は予約解除の要求を付加した予約解除＋リード／ライト一括要求として送信し、前記送信した全ての要求について前記第２の計算機から応答が返却されていることを確認した後、前記クライアントプログラムにリード／ライト呼び出しの結果を戻す。他方、第２の計算機は、第１の計算機から要求を受け取り、受け取った要求が予約＋リード／ライト一括要求のときは自計算機の現在の負荷状況に応じて１つのクライアントプログラムに対して許容するリード／ライト要求数を予約数として前記第１の計算機に通知すると共にその予約数に見合ったメモリ量を確保した後、要求された二次記憶装置上のデータにアクセスをして要求元のクライアントプログラムに応答１つを送信するという処理を、受け取った要求がリード／ライト要求のときは要求された二次記憶装置上のデータにアクセスをした後、要求元のクライアントプログラムに応答１つを送信するという処理を、受け取った要求が予約解除＋リード／ライト一括要求のときは要求された二次記憶装置上のデータにアクセスをした後、要求元のクライアントプログラムから発生した処理中のリード／ライト要求が全部完了した時点で前記確保したメモリ量を解放するという処理を、複数の要求に対し、多重化して実行する。
【００２０】
このように、予約要求とリード／ライト要求とを一括して要求する予約＋リード／ライト一括要求を導入することにより、第１の計算機側では予約要求を別要求として最初に送らずに済むとともに、第２の計算機側では予約応答に引き続いてリード／ライト処理が行われるので、予約応答の通信時間を物理リード／ライトの時間と重ねることができる。また、第２の計算機での物理リード／ライトの最中に、第１の計算機から後続のリード／ライト要求の送信が行われれば、それらの通信時間も物理リード／ライトの時間に重ねることができる。さらに、予約解除要求とリード／ライト要求とを一括して要求する予約解除＋リード／ライト一括要求を導入することにより、予約解除の要求を別要求として最後に送らずに済み、その分の通信時間を削減することができる。
【００２１】
【発明の実施の形態】
次に本発明の実施の形態の例について図面を参照して詳細に説明する。
【００２２】
図１を参照すると、本発明を適用した計算機システムの一例は、クライアントプログラムの動作する計算機１と、サーバ計算機２と、これらを相互に通信可能に接続する計算機間接続網３と、サーバ計算機２に接続された二次記憶装置４とから構成されている。
【００２３】
サーバ計算機２上ではファイルサーバ１０と呼ぶプロセスが動作している。ファイルサーバ１０は、リード／ライト要求を、通信によって受け付け、要求内容に従ってサーバ計算機２に接続されている二次記憶装置４上のデータをリード／ライトし、通信によって応答を返却する。図１の例では、汎用的な計算機上にファイルサーバ１０というプロセスを動作させることによってサーバ計算機の持つべき機能を実現しているが、他にも、汎用計算機のＯＳに同様の機能を実装する実施例や、専用の計算機にファームウエアを付加して実現する実施例も考えられる。
【００２４】
クライアントプログラムの動作する計算機１では、アプリケーションプログラムであるクライアントプログラム５が動作している。図１の例では、このクライアントプログラム５からのリード／ライト呼び出しをサーバ計算機２に伝えるため、ライブラリ１１と呼ぶ専用のプログラムをクライアントプログラム５にリンクしてある。このライブラリ１１は、クライアントプログラム５からのリード／ライト呼び出しに従って、適切なリード／ライト要求を生成し、ファイルサーバ１０に伝える。ライブラリ１１とファイルサーバ１０との間の要求／応答のやりとりは後述する転送方式に従うが、要求の送信はこのライブラリ１１が制御する。なお、ライブラリ１１の代わりに、それと同様の機能を汎用計算機のＯＳに実装する実施例も考えられる。
【００２５】
以下、幾つかの実施例について説明するが、その前に、それらの前提となる、ファイルサーバ１０で複数の要求を多重処理するための基本的な考え方を説明する。
【００２６】
１つの要求に着目した場合、その典型的な処理シーケンスは図２（Ａ）に示すように、幾つかの中断を挟んだ一連のアクションの処理から成り立っている。即ち、要求の種類に応じて該当する初期アクションが決められており、その後の処理の進行に従い幾つかの中間アクションを経て、最終アクションにおいてクライアントプログラム５の動作する計算機１に応答を返却することによって、１つの要求の処理が完結する。従って、中断点において他の要求のアクションを処理することによって、要求の多重処理が実現できる。
【００２７】
ファイルサーバ１０では、上述のようなアクションをキュー（アクションキュー）によって管理し、図２（Ｂ）に示すようなメインループを実行する。ファイルサーバ１０は要求を受け取るための口（受信ポート）を持っており、ここを読むことにより要求を受け取る（Ｓ１）。次に、受け取った要求に該当する初期アクションをアクションキューの末尾に登録する（Ｓ２）。次に、アクションキューの先頭からアクションを１つ取り出す（Ｓ３）。そして、そのアクションを処理し（Ｓ４）、ステップＳ１に戻る。このようなメインループによって、ファイルサーバ１０は複数の要求のアクションを交互に処理し、要求の多重処理を実現する。
【００２８】
また、要求処理の中断点の１つに物理Ｉ／Ｏの発行がある。このとき、Ｉ／Ｏを非同期で発行してからアクション処理を終了し、別の要求のアクションを処理することによって、多重処理を実現する。非同期Ｉ／Ｏの完了時には非同期Ｉ／Ｏ完了ハンドラ（図示せず）が動作するが、この非同期Ｉ／Ｏ完了ハンドラによって図２（Ｃ）に示す処理が実行される。
【００２９】
先ず、Ｉ／Ｏを発行したアクションの続きのアクションを決定する。この決定方法は以下のように幾つか考えられる。１）ハンドラの引数にアクションを指定して直接決定する方法。２）Ｉ／Ｏを発行したアクションの続きのアクションをキューに登録しておき、ハンドラがキューを検索することにより該当するアクションを決定する方法。
【００３０】
次に、決定したアクションをアクションキューの先頭に登録する。この登録されたアクションは、その後ファイルサーバ１０のメインループで取り出され処理される。
【００３１】
なお、非同期Ｉ／Ｏ完了ハンドラは、ファイルサーバ１０の動作中の任意のタイミングで割り込んで起動するが、アクションキューは、ファイルサーバ１０と非同期Ｉ／Ｏ完了ハンドラとが同時に操作しないように排他する。
【００３２】
以下、計算機１上で動作するクライアントプログラム５からサーバ計算機２に接続されている二次記憶装置４上のデータをアクセスする方法について、幾つかの実施例を挙げて説明する。
【００３３】
（実施例１）本実施例では、クライアントプログラム５からリード／ライト呼び出しがあった場合、ライブラリ１１は図３に示す処理を実行する。
【００３４】
先ず、クライアントプログラム５からのリード／ライト呼び出しを解析し、或る一定サイズのデータへのリード／ライト要求に分割する（Ｌ１１）。例えば、或る一定サイズを８ＫＢｙｔｅとする場合、クライアントプログラム５からのリード／ライト呼び出しが、例えば２４ＫＢｙｔｅのデータのリードあるいはライトであったとすると、要求されたデータの先頭から８ＫＢｙｔｅ分に対するリード／ライト要求と、次の８ＫＢｙｔｅ分に対するリード／ライト要求と、最後の８ＫＢｙｔｅ分に対するリード／ライト要求に分割する。
【００３５】
次に、分割して得られた全てのリード／ライト要求を全部一度に計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信する（Ｌ１２）。そして、サーバ計算機２から返されてくる応答を待つ（Ｌ１３）。応答を待つとは、クライアントプログラム５の持つ応答受信用のポートを読む処理であり、応答が受信されていなければ受信されるまで待つことになる。リード／ライト要求を複数送信した場合、応答は複数返ってくることになる。
【００３６】
次に、サーバ計算機２からの応答を受信すると、今までに返却された応答の数を調べ、全応答が返却されたかどうかを確認する（Ｌ１４）。応答の数がリード／ライト要求の分割数より少ない、すなわち、全ての応答が返却されていなければ、再びステップＬ１３に戻って応答を待つ。全ての応答が返却されていれば、クライアントプログラム５の呼び出しに対してリターンする。
【００３７】
他方、ファイルサーバ１０では、ライブラリ１１からリード／ライト要求を受け取り、受け取ったリード／ライト要求１つに対し、要求された二次記憶装置４上のデータにアクセスをした後、要求元に応答１つを送信するという処理を、複数のリード／ライト要求に対し、多重化して実行する。要求を多重化して実行する方法は前述したので、ここでは１つのリード／ライト要求に着目したシーケンスを図４を参照して説明する。
【００３８】
ファイルサーバ１０は、先ず、当該リード／ライト要求にかかるリード／ライトデータを一旦格納するための中継となるメモリ（データバッファ）を確保する（Ｓ１１）。次に、二次記憶装置４に物理リード／ライトを非同期で発行し、その完了を待つ（Ｓ１２）。ここで最初のアクションが終了し、要求処理としては中断する。次に、物理リード／ライトが終了すると、リード／ライト応答を要求元に送信する（Ｓ１３）。これがリード／ライト要求の最終アクションとなる。
【００３９】
このように本実施例では、クライアントプログラム５によるリード／ライト呼び出しを一定サイズのデータへのリード／ライト要求に分割して全部一度にサーバ計算機２に送信し、この送信されてきた複数のリード／ライト要求をサーバ計算機２が多重処理するようにしており、サーバ計算機２での二次記憶装置の物理リード／ライト処理と計算機間接続網３での通信処理が並行して行われることになる。このことによって、通信の時間が物理リード／ライト処理の時間と重なり、全体の処理時間が短縮される。
【００４０】
通信処理の時間と物理リード／ライト処理の時間とが重なる様子を図５を用いて説明する。図５では、クライアントプログラム５からのリード／ライト呼び出しを４つのリード／ライト要求に分割して要求した場合を示す。先ず、ライブラリ１１は最初に４つのリード／ライト要求をサーバ計算機２に一度に送る。すると、サーバ計算機２のファイルサーバ１０では４つのリード／ライト要求を多重処理するが、最初の要求を受けた時点で物理リード／ライトが開始されるため、後続の要求の通信時間が最初のリード／ライト処理時間と重なる。これによって、要求の通信時間のほとんどがクライアントプログラム５から見えなくなる。さらに、各要求の終了時には応答をライブラリ１１に返却することになるが、その間、サーバ計算機２のファイルサーバ１０では、次の要求の物理リード／ライトを重ねて処理する。これによって、応答の通信時間のほとんどがクライアントプログラム５から見えなくなる。
【００４１】
図５を見ると、通信の時間のほとんどがサーバ計算機２での物理リード／ライトの時間と重なっていることが判る。これによって、ほとんどの通信時間はクライアントプログラム５から見えなくなり、リード／ライト呼び出しの処理時間が短縮される。但し、図５中の通信時間２４はクライアントプログラム５から見えなくなるが、最初の要求と最後の応答の通信時間２３はクライアントプログラム５に見えてしまう。しかし、アクセスするデータが大量で分割数が多くなる程、この時間２３は物理リード／ライトの時間２２の総和に比べ相対的に小さくなり、リード／ライト呼び出しの処理時間２１は、物理リード／ライトの時間２２の総和と同等になる。
【００４２】
また、サーバ計算機２からクライアントプログラム５の動く計算機１に応答が次々と戻ってくる。これに対し、ライブラリ１１は全ての要求の処理が完了したことを把握することによって、クライアントプログラム５からのリード／ライト呼び出しの完了をみきわめることができる。
【００４３】
（実施例２）本実施例では、クライアントプログラム５からリード／ライト呼び出しがあった場合、ライブラリ１１は図６に示す処理を実行する。
【００４４】
先ず、実施例１と同様に、クライアントプログラム５からのリード／ライト呼び出しを解析し、或る一定サイズのデータへのリード／ライト要求に分割する（Ｌ２１）。
【００４５】
次に、分割数が予め定められたスレッショルド値より大きいかどうかを調べる（Ｌ２２）。そして、分割数がスレッショルド値より大きくない場合は、分割して得られた全てのリード／ライト要求を全部一度に計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信し（Ｌ２４）、分割数がスレッショルド値より大きい場合は、分割して得られたリード／ライト要求のうち、スレッショルド値に等しい個数のリード／ライト要求だけを一度に計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信する（Ｌ２３）。このとき、未だ送信されなかったリード／ライト要求は内部に保持しておく。そして、サーバ計算機２から返されてくる応答を待つ（Ｌ２５）。
【００４６】
次に、サーバ計算機２からの応答を受信すると、未だ送信していないリード／ライト要求が残っているかどうかを確認する（Ｌ２６）。未だ送信していないリード／ライト要求が残っている場合は、その内の１つのリード／ライト要求をサーバ計算機２のファイルサーバ１０に送信し、ステップＬ２５の応答待ちに移る。ステップＬ２６の確認で未送信リード／ライト要求が残っていないと判断した場合は、今までに返却された応答の数を調べ、全応答が返却されたかどうかを確認する（Ｌ２８）。応答の数がリード／ライト要求の分割数より少ない、すなわち、全ての応答が返却されていなければ、再びステップＬ２５に戻って応答を待つ。全ての応答が返却されていれば、クライアントプログラム５の呼び出しに対してリターンする。
【００４７】
ファイルサーバ１０の処理は実施例１と同じであり、ライブラリ１１からリード／ライト要求を受け取り、受け取ったリード／ライト要求１つに対し、要求された二次記憶装置４上のデータにアクセスをした後、要求元に応答１つを送信するという処理を、複数のリード／ライト要求に対し、多重化して実行する。
【００４８】
本実施例の基本的な効果は、実施例１と同様に、通信時間のほとんどを物理リード／ライトと重ねてクライアントプログラムから見えなくするという効果を含んでいる。ただし、実施例１では分割して得られた全てのリード／ライト要求を全部一度に送信するため、クライアントプログラム５からのリード／ライト呼び出しのデータ量が大きい場合、一度に送信するリード／ライト要求の数が多くなり、サーバ計算機２および計算機間通信網３の負荷が過大になる。サーバ計算機２等の負荷が異常に高まると、リード／ライト要求の幾つかが消滅し処理されなくなる場合が生じるため、クライアントプログラム５からのリード／ライト呼び出しが失敗してしまうことがある。
【００４９】
これに対して本実施例では、サーバ計算機２で一度に受け取ることのできる要求数としてスレッショルド値を設定し、最初に送信するリード／ライト要求数をスレッショルド値以下に抑えているため、サーバ計算機２での最初の負荷を一定値以下に抑えることができる。さらに、１つの応答に対して１つのリード／ライト要求を送信するので、サーバ計算機２で受け取っているリード／ライト要求数は常にスレッショルド値以下となり、引続きサーバ計算機２での負荷を一定値以下に抑えることができる。
【００５０】
本実施例におけるサーバ計算機２とクライアントプログラム５との間で発生する要求／応答のやり取りの一例を図７に示す。この例では、クライアントプログラム５からのリード／ライト呼び出しが８つのリード／ライト要求に分割され、またスレッショルド値は４に設定されている。
【００５１】
先ず、スレッショルド値が４なので、ライブラリ１１は最初に４つだけのリード／ライト要求をサーバ計算機２に送信している。これにより、サーバ計算機２が最初に受け取るリード／ライト要求の数を４以下に抑えることができる。
【００５２】
その後、サーバ計算機２のファイルサーバ１０では個々のリード／ライト要求を多重処理し、１つずつ応答を返却する。これに対し、ライブラリ１１では、１つの応答を受ける毎に、１つのリード／ライト要求をサーバ計算機２に送信する。これにより、サーバ計算機２で多重処理しているリード／ライト要求の数は常に４つ以下となる。
【００５３】
（実施例３）本実施例では、クライアントプログラム５からリード／ライト呼び出しがあった場合、ライブラリ１１は図８に示す処理を実行する。
【００５４】
先ず、実施例１と同様に、クライアントプログラム５からのリード／ライト呼び出しを解析し、或る一定サイズのデータへのリード／ライト要求に分割する（Ｌ３１）。
【００５５】
次に、この分割数を指定した予約要求を計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信し、その応答を待つ（Ｌ３２）。
【００５６】
次に、サーバ計算機２のファイルサーバ１０から上記の予約要求に対する応答を受信すると、その応答に含まれる予約数を取り出し、スレッショルド値とする（Ｌ３３）。
【００５７】
次に、ステップＬ３１での分割数がこのスレッショルド値より大きいかどうかを調べる（Ｌ３４）。そして、分割数がスレッショルド値より大きくない場合は、分割して得られた全てのリード／ライト要求を全部一度に計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信し（Ｌ３６）、分割数がスレッショルド値より大きい場合は、分割して得られたリード／ライト要求のうち、スレッショルド値に等しい個数のリード／ライト要求だけを一度に計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信する（Ｌ３５）。このとき、未だ送信されなかったリード／ライト要求は内部に保持しておく。そして、サーバ計算機２から返されてくる応答を待つ（Ｌ３７）。
【００５８】
次に、サーバ計算機２からの応答を受信すると、未だ送信していないリード／ライト要求が残っているかどうかを確認する（Ｌ３８）。未だ送信していないリード／ライト要求が残っている場合は、その内の１つのリード／ライト要求をサーバ計算機２のファイルサーバ１０に送信し（Ｌ３９）、ステップＬ３７の応答待ちに移る。ステップＬ３８の確認で未送信リード／ライト要求が残っていないと判断した場合は、今までに返却された応答の数を調べ、全応答が返却されたかどうかを確認する（Ｌ３ａ）。応答の数がリード／ライト要求の分割数より少ない、すなわち、全ての応答が返却されていなければ、再びステップＬ３７に戻って応答を待つ。
【００５９】
全ての応答が返却されていれば、サーバ計算機２における予約を解除するための要求（予約解除要求）を計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信し、その応答を待つ（Ｌ３ｂ）。そして、予約解除要求に対する応答が返却された後、クライアントプログラム５の呼び出しに対してリターンする。
【００６０】
本実施例の場合、ファイルサーバ１０は、リード／ライト要求処理以外に、予約要求処理と予約解除要求処理とを行う。リード／ライト要求処理は実施例１，２とほぼ同じなので、以下、予約要求処理と予約解除要求処理とを説明する。
【００６１】
図９は１つの予約要求処理に着目したシーケンスを示している。前述したようにライブラリ１１から予約要求が送信されてくると、ファイルサーバ１０は、先ず、当該クライアントプログラムに対して許容できるリード／ライト要求の数を計算する（Ｓ３１）。
【００６２】
この許容数は現在のファイルサーバ１０の負荷状況によって決まる。具体的には、ファイルサーバ１０がリード／ライト要求を処理するために使える現時点のメモリ残量によってほぼ決まる。例えば、ファイルサーバ１０がリード／ライト要求を処理するために使える全メモリ量をＡとし、１つのリード／ライト要求を処理するために必要なメモリ量をＢとすると、［Ａ／Ｂ］がファイルサーバ１０の処理負荷上限となる。また、現時点でＣ個のリード／ライト要求の予約を受け付けている場合、現在の許容数の総計（総許容数）はＣなので、現時点でのリード／ライト要求の許容数は、処理負荷上限−Ｃである。そこで、ファイルサーバ１０では、処理負荷の上限となる数から、現在の許容数の総計（総許容数）を引いたものを、当該クライアントプログラムに対する許容数として求める。
【００６３】
次に、ステップＳ３１で求めた許容数と予約要求で指定された分割数のうち小さい方の値を予約数として決定する（Ｓ３２）。そして、現在の許容数の総計を今回の予約数の分だけ増やし（Ｓ３３）、ステップＳ３２で求めた予約数を指定した応答を要求元に送信する（Ｓ３４）。今回の予約数の分だけ現在の許容数の総計を増やすことにより、今回の予約数に見合ったメモリ量を他のクライアントプログラムから発生したリード／ライト要求処理で使われないようにすることができる。従って、当該クライアントプログラムからのリード／ライト要求にかかるリード／ライトデータを一旦格納するための中継となるメモリを確保する際にメモリ不足が生じるのを防止できる。
【００６４】
なお、ステップＳ３２の処理内容を、予約数＝ｍｉｎ（許容数，分割数，１クライアントプログラム当たりに付与する最大許容数）に変更する実施例も考えられる。こうすれば、１クライアントプログラムに付与する最大許容数を制限でき、１つのクライアントプログラムが現時点の許容数を全て占有してしまうことを防止できる。
【００６５】
以上のような予約要求処理は１つのアクションから成り立つ。
【００６６】
他方、図１０は１つの予約解除要求の処理に着目したシーケンスを示している。前述したようにライブラリ１１から予約解除要求が送信されてくると、ファイルサーバ１０は現在の許容数の総計から、当該クライアントプログラムに与えていた予約数を差し引いて更新する（Ｓ３５）。これにより予約されていたメモリ量が解放され、他のクライアントプログラムからのリード／ライト要求の処理のために使用できるメモリ量がその分だけ増加する。そして、予約解除要求処理の終了を応答によってライブラリ１１に伝える（Ｓ３６）。このような予約解除要求処理は１つのアクションから成り立つ。
【００６７】
実施例２のように、サーバ計算機２の処理能力によってスレッショルド値を予め決めておいた場合、クライアントプログラムが１つならば、サーバ計算機２の処理能力を超えた数のリード／ライト要求が来ることはない。しかし、サーバ計算機２に対してリード／ライト要求を送信するクライアントプログラムが複数存在する場合、サーバ計算機２の処理能力を超えてしまうことがある。
【００６８】
これに対して本実施例では、動的に変化するサーバ計算機２のファイルサーバ１０の負荷状況に応じて、１つのクライアントプログラムに対して許容する予約数をライブラリ１１に知らせ、ライブラリ１１はその予約数をスレッショルド値として、以降、このスレッショルド値に従ってリード／ライト要求を行うため、サーバ計算機２に発生する負荷が一定値を超えないように制御することができる。つまり、サーバ計算機２が複数のクライアントプログラムを相手にしても、サーバ計算機２の処理能力を超えることはない。また、クライアントプログラムからのリード／ライト要求が全て終了した際には予約数がリセットされるため、以降に発生するクライアントプログラムの予約要求に対してメモリを有効に活用することができる。
【００６９】
本実施例におけるサーバ計算機２とクライアントプログラム５との間で発生する要求／応答のやり取りの一例を図１１に示す。予約処理（イ）と予約解除処理（ロ）以外は実施例２と同様のやり取りとなる。図１１の例では、クライアントプログラム５からのリード／ライト呼び出しを５つのリード／ライト要求に分割しているが、ファイルサーバ１０からの予約数が３であった場合を想定している。このため、ライブラリ１１はスレッショルド値に３を設定し、最初に３つのリード／ライト要求をサーバ計算機２に送っている。以後の処理は実施例２の処理手順と同様であるが、全てのリード／ライト要求を処理した後、予約解除処理（ロ）が行われ、クライアントプログラム５からのリード／ライト呼び出しへ戻っている。
【００７０】
（実施例４）本実施例では、クライアントプログラム５からリード／ライト呼び出しがあった場合、ライブラリ１１は図１２に示す処理を実行する。
【００７１】
先ず、実施例１と同様に、クライアントプログラム５からのリード／ライト呼び出しを解析し、或る一定サイズのデータへのリード／ライト要求に分割する（Ｌ４１）。
【００７２】
次に、この分割数が１より大きいかどうかを調べる（Ｌ４２）。分割数が１つなら、予約要求することなく、その１つのリード／ライト要求を計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信し、応答の受信を待つ（Ｌ４４）。
【００７３】
他方、上記の分割数が１より大きいときは、分割して得られたリード／ライト要求のうちの１つのリード／ライト要求に予約要求を付加した予約＋リード／ライト一括要求を、１つの要求としてサーバ計算機２のファイルサーバ１０に送信し、予約応答の受信を待つ（Ｌ４３）。予約応答の受信を待つとは、クライアントプログラム５の持つ応答受信用のポートを読む処理であり、予約応答が受信されていなければ受信されるまで待つことになる。
【００７４】
次に、サーバ計算機２から予約の応答が返却されると、その応答に含まれる予約数を取り出し、スレッショルド値とする（Ｌ４５）。
【００７５】
次に、ステップＬ４１での分割数−１がこのスレッショルド値より大きいかどうかを調べる（Ｌ４６）。そして、分割数−１がスレッショルド値より大きくない場合は、分割して得られた残りの全てのリード／ライト要求を全部一度に計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信する（Ｌ４８）。但し、その内の１つのリード／ライト要求は、予約解除要求を付加して、予約解除＋リード／ライト一括要求とし、これを１つの要求として送信する。また、分割数−１がスレッショルド値より大きい場合は、分割して得られた残りのリード／ライト要求のうち、スレッショルド値に等しい個数のリード／ライト要求だけを一度に計算機間接続網３を介してサーバ計算機２のファイルサーバ１０に送信する（Ｌ４７）。このとき、未だ送信されなかったリード／ライト要求は内部に保持しておく。そして、サーバ計算機２から返されてくるリード／ライトの応答を待つ（Ｌ４９）。
【００７６】
次に、サーバ計算機２からのリード／ライトの応答を受信すると、未だ送信していないリード／ライト要求が残っているかどうかを確認する（Ｌ４ａ）。未だ送信していないリード／ライト要求が残っている場合は、その数が１つかどうかを調べ（Ｌ４ｃ）、１つでなければ、即ち未だ送信していないリード／ライト要求が２つ以上残っている場合は、その内の１つのリード／ライト要求をサーバ計算機２のファイルサーバ１０に送信し（Ｌ４ｄ）、ステップＬ４９の応答待ちに移る。他方、未だ送信していないリード／ライト要求が１つの場合は、それに予約解除要求を付加して予約解除＋リード／ライト一括要求とした１つの要求をサーバ計算機２のファイルサーバ１０に送信し（Ｌ４ｅ）、ステップＬ４９の応答待ちに移る。
【００７７】
そして、ステップＬ４ａの確認で未送信リード／ライト要求が残っていないと判断した場合は、今までに返却された応答の数を調べ、全応答が返却されたかどうかを確認し（Ｌ４ｂ）、応答の数がリード／ライト要求の分割数より少ない、すなわち、全ての応答が返却されていなければ、再びステップＬ４９に戻って応答を待つ。全ての応答が返却されていれば、クライアントプログラム５の呼び出しに対してリターンする。
【００７８】
本実施例の場合、ファイルサーバ１０は、リード／ライト要求処理以外に、予約＋リード／ライト一括要求処理と予約解除＋リード／ライト一括要求処理とを、多重化して実行する。
【００７９】
図１３は１つのリード／ライト要求に着目したシーケンスを示している。ファイルサーバ１０は、先ず、当該リード／ライト要求にかかるリード／ライトデータを一旦格納するための中継となるメモリを確保する（Ｓ４１）。次に、二次記憶装置４に非同期で物理リード／ライトを行い、その完了を待つ（Ｓ４２）。
【００８０】
次に、物理リード／ライトが終了すると、同じクライアントプログラム５からの要求で、予約解除＋リード／ライト一括要求の処理が中断しているかどうかを調べる（Ｓ４３）。若し、中断しているならば、同じクライアントプログラム５からの処理中のリード／ライト要求が他にあるかどうかを調べ（Ｓ４４）、あれば、中断している予約解除＋リード／ライト一括要求を要求キューに登録し（Ｓ４５）、前記物理リード／ライトの終了したリード／ライト要求に対する応答を要求元に送信する（Ｓ４６）。他方、予約解除＋リード／ライト一括要求の処理が中断していないか或いはそのような予約解除＋リード／ライト一括要求が存在しない場合、あるいは中断している予約解除＋リード／ライト一括要求があっても同じクライアントプログラムからの処理中のリード／ライト一括要求があれば、ステップＳ４５をスキップして、当該リード／ライト要求の応答を要求元に送信する（Ｓ４６）。
【００８１】
図１４は１つの予約＋リード／ライト一括要求の処理に着目したシーケンスを示している。前述したようにライブラリ１１から予約＋リード／ライト一括要求が送信されてくると、ファイルサーバ１０は、先ず、当該クライアントプログラムに対して許容できるリード／ライト要求の数を計算する（Ｓ４７）。この許容数は現在のファイルサーバ１０の負荷状況によって決まる。具体的には、ファイルサーバ１０の処理負荷の上限となる数から、現在の許容数の総計（総許容数）を引いたものとして計算される。
【００８２】
次に、ステップＳ４７で求めた許容数と予約要求で指定された分割数−１のうち小さい方の値を予約数として決定する（Ｓ４８）。そして、現在の許容数の総計を今回の予約数の分だけ増やしておき（Ｓ４９）、ステップＳ４８で求めた予約数を指定した応答を要求元に非同期で送信する（Ｓ４ａ）。
【００８３】
なお、ステップＳ４８の処理内容を、予約数＝ｍｉｎ（許容数，分割数−１，１クライアントプログラム当たりに付与する最大許容数）に変更する実施例も考えられる。こうすれば、１クライアントプログラムに付与する最大許容数を制限でき、１つのクライアントプログラムが現時点の許容数を全て占有してしまうことを防止できる。
【００８４】
ここまでの処理は実施例３のファイルサーバ１０での予約要求処理とほぼ同様である。但し、本実施例では、予約応答を非同期で送信した後、引続きリード／ライト要求の処理に移るため、リード／ライト要求の処理の時間と予約応答の通信時間とが重なる。
【００８５】
リード／ライト要求の処理では、まず、当該リード／ライト要求にかかるリード／ライトデータを一旦格納するための中継となるメモリを確保する（Ｓ４ｂ）。次に、二次記憶装置４に非同期で物理リード／ライトを行い、その完了を待つ（Ｓ４ｃ）。そして、物理リード／ライトが終了すると、リード／ライト応答を要求元に送信する（Ｓ４ｄ）。
【００８６】
他方、図１５は１つの予約解除＋リード／ライト一括要求に着目したシーケンスを示している。前述したようにライブラリ１１から予約解除＋リード／ライト一括要求が送信されてくると、先ずリード／ライト要求処理を行い、次いで予約解除処理を行う。リード／ライト要求処理では、当該リード／ライト要求にかかるリード／ライトデータを一旦格納するための中継となるメモリを確保し（Ｓ４ｅ）、二次記憶装置４に非同期で物理リード／ライトを行い、その完了を待つ（Ｓ４ｆ）。物理リード／ライトが終了すると、同じクライアントプログラム５からの処理中のリード／ライト要求が他にあるかどうかを調べ（Ｓ４ｇ）、若しあれば、処理中のリード／ライト要求がなくなるまで中断する。中断の方法は、当該要求を中断キューに登録することで行う。中断キューに登録された要求は、前述の図１３のステップＳ４５で中断キューから要求キューに登録しなおされる。
【００８７】
他に処理中のリード／ライト要求がなくなると、予約解除の処理となり、現在の総許容数から予約数を差し引いて更新する（Ｓ４ｈ）。これにより当該クライアントプログラムに対して予約されていたメモリ量が解放される。そして、リード／ライト応答に予約解除の応答を含めて要求元に送信する（Ｓ４ｉ）。
【００８８】
本実施例によれば、予約＋リード／ライト一括要求を導入したので、ライブラリ１１側では予約要求を別要求として最初に送らずに済むとともに、ファイルサーバ１０側では予約応答に引き続いてリード／ライト処理が行われるので、予約応答の通信時間を物理リード／ライトの時間と重ねることができる。また、サーバ計算機での物理リード／ライトの最中に、クライアントプログラムから後続のリード／ライト要求の送信が行われれば、それらの通信時間も物理リード／ライトの時間に重ねることができる。
【００８９】
また、予約解除＋リード／ライト一括要求を導入したので、予約解除の要求を別要求として最後に送らずに済み、その分の通信時間を削減することができる。
【００９０】
以上のことから、最初と最後の予約／予約解除のための通信時間を削減することができる。図１６はサーバ計算機２とクライアントプログラム５との間で発生する要求／応答のやり取りの一例を示している。最初の予約＋リード／ライト一括要求（ハ）は１要求としてサーバ計算機２に送られる。サーバ計算機２では、まず予約処理を行い、予約応答を返却し、同時にリード／ライト処理に移る。この際、物理リード／ライトと予約応答の通信時間が重なっている。
【００９１】
クライアントプログラム５の動作する計算機１のライブラリ１１で予約応答を受け取った後のリード／ライト要求処理は、実施例３と同様である。ただし、最後の要求が予約解除＋リード／ライト一括要求となる点が異なる。最後の要求の処理は、図１６に示す予約解除＋リード／ライト（ニ）の処理に相当する。図１６の例では、クライアントプログラム５からのリード／ライト呼び出しを５つのリード／ライト要求に分割しているが、ファイルサーバ１０からの予約数が３であった場合を想定している。このため、ライブラリ１１はスレッショルド値に３を設定し、予約応答受信後、最初に３つのリード／ライト要求をサーバ計算機２に送っている。以後の処理は実施例２，３の処理手順と同様であるが、リード／ライト要求の残りが１つになったとき、予約解除とリード／ライトを一緒にした要求（予約解除＋リード／ライト一括要求）を行う。サーバ計算機では、この要求に対してリード／ライトの処理と予約解除の処理を行い、１つの応答として返却する。これにより、最後の通信時間を削減することができる。
【００９２】
以上本発明の実施例について説明したが、本発明は以上の実施例にのみ限定されずその他各種の付加変更が可能である。例えば、図１では、１つのサーバ計算機２に、１つのクライアントプログラム５が動作する計算機１を計算機間通信網３を介して接続しているが、１つ又は複数のクライアントプログラム５が動作する計算機を複数台、計算機間通信網３に接続した計算機システムに対しても適用可能である。また、サーバ計算機２には１つの二次記憶装置４のみ接続されている例を示したが、複数の二次記憶装置が接続されていても良い。
【００９３】
【発明の効果】
以上説明したように本発明によれば以下のような効果を得ることができる。
【００９４】
本発明によれば、遠隔二次記憶装置へのデータアクセス時における通信時間のほとんどをクライアントプログラムから見えなくし、あたかもその二次記憶装置がクライアントプログラムの動作する計算機に接続されているかのようなアクセス時間を達成することができる。
【００９５】
また本発明によれば、クライアントプログラムが大容量のデータをアクセスする場合であっても、即ち分割されたリード／ライト要求の数が多くなる場合であっても、一度に要求するリード／ライトの量を抑制でき、第２の計算機での処理負荷が過大にならないようにすることができる。
【００９６】
更に本発明によれば、１台の第２の計算機に対して複数のクライアントプログラムがリード／ライト要求を行う場合でも、第２の計算機の負荷に応じて一度に要求するリード／ライトの量を抑制でき、第２の計算機の処理負荷が過大にならないようにすることができる。
【００９７】
また更に本発明によれば、第１の計算機側では予約要求を別要求として最初に送らずに済み、第２の計算機側では予約応答に引き続いてリード／ライト処理が行われるので、予約応答の通信時間を物理リード／ライトの時間と重ねることができる。また、第２の計算機での物理リード／ライトの最中に、第１の計算機から後続のリード／ライト要求の送信が行われれば、それらの通信時間も物理リード／ライトの時間に重ねることができる。さらに、第１の計算機側では予約解除の要求を別要求として最後に送らずに済み、その分の通信時間を削減することができる。
【図面の簡単な説明】
【図１】本発明を適用した計算機システムの一例を示すブロック図である。
【図２】ファイルサーバで複数の要求を多重処理するための処理の一例を示すフローチャートである。
【図３】実施例１におけるライブラリの処理の一例を示すフローチャートである。
【図４】実施例１におけるファイルサーバの、１つのリード／ライト要求に着目した処理の一例を示すフローチャートである。
【図５】実施例１におけるクライアントプログラムとサーバ計算機との要求／応答のやり取りを示すタイミングチャートである。
【図６】実施例２におけるライブラリの処理の一例を示すフローチャートである。
【図７】実施例２におけるクライアントプログラムとサーバ計算機との要求／応答のやり取りを示すタイミングチャートである。
【図８】実施例３におけるライブラリの処理の一例を示すフローチャートである。
【図９】実施例３におけるファイルサーバの、１つの予約要求に着目した処理の一例を示すフローチャートである。
【図１０】実施例３におけるファイルサーバの、１つの予約解除要求に着目した処理の一例を示すフローチャートである。
【図１１】実施例３におけるクライアントプログラムとサーバ計算機との要求／応答のやり取りを示すタイミングチャートである。
【図１２】実施例４におけるライブラリの処理の一例を示すフローチャートである。
【図１３】実施例４におけるファイルサーバの、１つのリード／ライト要求に着目した処理の一例を示すフローチャートである。
【図１４】実施例４におけるファイルサーバの、１つの予約＋リード／ライト一括要求に着目した処理の一例を示すフローチャートである。
【図１５】実施例４におけるファイルサーバの、１つの予約解除＋リード／ライト一括要求に着目した処理の一例を示すフローチャートである。
【図１６】実施例４におけるクライアントプログラムとサーバ計算機との要求／応答のやり取りを示すタイミングチャートである。
【図１７】遠隔二次記憶装置への従来のアクセス方法の説明図である。
【符号の説明】
１…クライアントプログラムの動作する計算機
２…サーバ計算機
３…計算機間接続網
４…二次記憶装置
５…クライアントプログラム
１０…ファイルサーバ
１１…ライブラリ
【図１】
0003698031.tif 000002
【図２】
0003698031.tif 000003
【図３】
0003698031.tif 000004
【図４】
0003698031.tif 000005
【図５】
0003698031.tif 000006
【図６】
0003698031.tif 000007
【図７】
0003698031.tif 000008
【図８】
0003698031.tif 000009
【図９】
0003698031.tif 000010
【図１０】
0003698031.tif 000011
【図１１】
0003698031.tif 000012
【図１２】
0003698031.tif 000013
【図１３】
0003698031.tif 000014
【図１４】
0003698031.tif 000015
【図１５】
0003698031.tif 000016
【図１６】
0003698031.tif 000017
【図１７】
0003698031.tif 000018