(57)【特許請求の範囲】
【請求項１】
Ｉ／Ｏ要求を処理している一次サーバが故障し、二次サーバが該一次サーバを継承する場合に、Ｉ／Ｏ要求が進行することを可能にする方法であって、該方法は、
クライアントが、該クライアント上で実行されているクライアントアプリケーションからＩ／Ｏ要求を受信することと、
該クライアントが、該Ｉ／Ｏ要求用のパラメータを記憶することと、
該クライアントが、該一次サーバに該Ｉ／Ｏ要求を送信することと、
該Ｉ／Ｏ要求が開始された後に、該クライアントに制御を戻すことと、
該Ｉ／Ｏ要求が処理されている間、該クライアントアプリケーションが実行し続けることを可能にすることと、
該一次サーバから該クライアントにＩ／Ｏ完了の通知を送信することであって、該クライアントが該一次サーバからＩ／Ｏ完了の通知を受信しない場合に、該クライアントは該一次サーバが故障したと決定する、ことと、
該Ｉ／Ｏ要求が該一次サーバに送信された後であって、Ｉ／Ｏ完了の通知が該一次サーバから戻る前に、該一次サーバが故障した場合に、該クライアントが、該クライアント上に記憶された該Ｉ／Ｏ要求用の該パラメータを用いて、該Ｉ／Ｏ要求を該二次サーバへ再試行することと
を含み、
該クライアント上で該Ｉ／Ｏ要求用のパラメータを記憶する動作は、
該クライアントが、分散オブジェクト指向のプログラミング環境内において規定された分散オブジェクトを作成することと、
該クライアントが、該一次サーバに該分散オブジェクトへの参照を送信することであって、該参照を送信することは、該一次サーバが該参照を記憶することを生じさせる、ことと
を含み、
該一次サーバが故障した場合に、該分散オブジェクトが参照されていないことを該クライアント上の分散オペレーティングシステムが該クライアントに通知し、これにより、該一次サーバが故障したことを該クライアントが結論付けることを可能にする、方法。
【請求項２】
前記Ｉ／Ｏ要求を前記二次サーバへ再試行する動作が、前記クライアントアプリケーションが前記一次サーバの故障に気づくことなく生じる、請求項１に記載の方法。
【請求項３】
前記Ｉ／Ｏ要求が前記一次サーバに送信される前に、該一次サーバが故障した場合に、前記クライアントが、該Ｉ／Ｏ要求を前記二次サーバへ送信することをさらに含む、請求項１に記載の方法。
【請求項４】
前記Ｉ／Ｏ要求用のパラメータを記憶する動作が、前記クライアントが、該Ｉ／Ｏ要求用のステータスインジケータを記憶することを含み、該ステータスインジケータは、該Ｉ／Ｏ要求が進行中であるか、あるいは完了したかを示す、請求項１に記載の方法。
【請求項５】
前記一次サーバが完了し、前記Ｉ／Ｏ完了の通知を前記クライアントへ戻す場合に、前記クライアントが、前記ステータスインジケータを該Ｉ／Ｏ要求が完了することを示す値に設定することをさらに含む、請求項４に記載の方法。
【請求項６】
前記一次サーバが完了し、前記Ｉ／Ｏ完了の通知を前記クライアントへ戻す場合に、前記クライアントが、前記Ｉ／Ｏ要求用の前記パラメータを取り除くことをさらに含む、請求項１に記載の方法。
【請求項７】
前記Ｉ／Ｏ要求を前記一次サーバへ送信する前に、前記クライアントが、該Ｉ／Ｏ要求に関連したメモリのページをロックすることと、
該一次サーバが完了し、前記Ｉ／Ｏ完了の通知を前記クライアントに戻す場合に、該クライアントが、該メモリのページをロック解除することと
をさらに含む、請求項１に記載の方法。
【請求項８】
前記Ｉ／Ｏ要求が、ファイルシステムアクセス、データベースシステムからのＩ／Ｏ要求、および仮想メモリシステムからのページング要求の内の１つである、請求項１に記載の方法。
【請求項９】
命令を記憶したコンピュータ読み出し可能記憶媒体であって、該命令は、コンピュータにより実行されたときに該コンピュータに、Ｉ／Ｏ要求を処理している一次サーバが故障し、二次サーバが該一次サーバを継承する場合に、該Ｉ／Ｏ要求が進行することを可能にする方法を実行させ、該方法は、
クライアントが、該クライアント上で実行されているクライアントアプリケーションからＩ／Ｏ要求を受信することと、
クライアントが、Ｉ／Ｏ要求用のパラメータを記憶することと、
クライアントが、該一次サーバに該Ｉ／Ｏ要求を送信することと、
該Ｉ／Ｏ要求が開始された後に、該クライアントに制御を戻すことと、
該Ｉ／Ｏ要求が処理されている間、該クライアントアプリケーションが実行し続けることを可能にすることと、
該クライアントへ該一次サーバからＩ／Ｏ完了の通知を送信することであって、該クライアントが該一次サーバからＩ／Ｏ完了の通知を受信しない場合に該クライアントは該一次サーバが故障したと決定する、ことと、
該Ｉ／Ｏ要求が該一次サーバに送信された後であって、Ｉ／Ｏ完了の通知が該一次サーバから戻る前に、該一次サーバが故障した場合に、該クライアントが、該クライアント上に記憶された該Ｉ／Ｏ要求用の該パラメータを用いて、該Ｉ／Ｏ要求を該二次サーバへ再試行することと
を含み、
該クライアント上で該Ｉ／Ｏ要求用のパラメータを記憶する動作は、
該クライアントが、分散オブジェクト指向のプログラミング環境内において規定された分散オブジェクトを作成することと、
該クライアントが、該一次サーバに該分散オブジェクトへの参照を送信することであって、該参照を送信することは、該一次サーバが該参照を記憶することを生じさせる、ことと
を含み、
該一次サーバが故障した場合に、該分散オブジェクトが参照されていないことを該クライアント上の分散オペレーティングシステムが該クライアントに通知し、これにより、該一次サーバが故障したことを該クライアントが結論付けることを可能にする、コンピュータ読み出し可能記憶媒体。
【請求項１０】
Ｉ／Ｏ要求を処理している一次サーバが故障し、二次サーバが該一次サーバを継承する場合に、該Ｉ／Ｏ要求が進行することを可能にする方法であって、該方法は、
クライアントが、該クライアント上で実行されているクライアントアプリケーションからＩ／Ｏ要求を受信することと、
該クライアントが、該Ｉ／Ｏ要求用のパラメータを記憶することであって、該パラメータは、該Ｉ／Ｏ要求が進行中であるか、あるいは完了したかを示すステータスインジケータを含む、ことと、
該クライアントが、該一次サーバに該Ｉ／Ｏ要求を送信することと、
該Ｉ／Ｏ要求が開始された後に、該クライアントに制御を戻すことと、
該Ｉ／Ｏ要求が処理されている間、該クライアントアプリケーションが実行し続けることを可能にすることと、
Ｉ／Ｏ完了の通知を該一次サーバから該クライアントに送信することであって、該クライアントが該一次サーバからＩ／Ｏ完了の通知を受信しない場合に該クライアントは該一次サーバが故障したと決定する、ことと、
該Ｉ／Ｏ要求が該一次サーバへ送信される前に該一次サーバが故障した場合に、該Ｉ／Ｏ要求を該二次サーバへ送信することと、
該Ｉ／Ｏ要求が該一次サーバに送信された後であって、Ｉ／Ｏ完了の通知が該一次サーバから戻る前に、該一次サーバが故障した場合に、該クライアントが、該クライアント上に記憶された該Ｉ／Ｏ要求用の該パラメータを用いて、該Ｉ／Ｏ要求を該二次サーバへ再試行することであって、該再試行することが、該クライアントアプリケーションが該一次サーバの故障に気づくことなく生じる、ことと、
該一次サーバが完了し、該Ｉ／Ｏ完了の通知を該クライアントへ戻す場合に、該ステータスインジケータを該Ｉ／Ｏ要求が完了することを示す値に設定することと
を含み、
該クライアント上で該Ｉ／Ｏ要求用のパラメータを記憶する動作は、
該クライアントが、分散オブジェクト指向のプログラミング環境内において規定された分散オブジェクトを作成することと、
該クライアントが、該一次サーバに該分散オブジェクトへの参照を送信することであって、該参照を送信することは、該一次サーバが該参照を記憶することを生じさせる、ことと
を含み、
該一次サーバが故障した場合に、該分散オブジェクトが参照されていないことを該クライアント上の分散オペレーティングシステムが該クライアントに通知し、これにより、該一次サーバが故障したことを該クライアントが結論付けることを可能にする、方法。
【請求項１１】
前記一次サーバが完了し、前記Ｉ／Ｏ完了の通知を前記クライアントへ戻す場合に、該クライアントが、前記Ｉ／Ｏ要求用の前記パラメータを取り除くことをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記Ｉ／Ｏ要求を前記一次サーバへ送信する前に、前記クライアントが、該Ｉ／Ｏ要求に関連したメモリのページをロックすることと、
該一次サーバが完了し、前記Ｉ／Ｏ完了の通知を前記クライアントに戻す場合に、該クライアントが、該メモリのページをロック解除することと
をさらに含む、請求項１０に記載の方法。
【請求項１３】
前記Ｉ／Ｏ要求が、ファイルシステムアクセス、データベースシステムからのＩ／Ｏ要求、および仮想メモリシステムからのページング要求の内の１つである、請求項１０に記載の方法。
【請求項１４】
Ｉ／Ｏ要求を処理している一次サーバが故障し、二次サーバが該一次サーバを継承する場合に、該Ｉ／Ｏ要求が進行することを可能にする装置であって、
該装置は、
一次サーバと二次サーバとに結合されたクライアントと
クライアント上で実行されているクライアントアプリケーションからＩ／Ｏ要求を受信し、該クライアント上に該Ｉ／Ｏ要求用のパラメータを記憶し、該一次サーバに該Ｉ／Ｏ要求を送信するように構成された、該クライアント内のＩ／Ｏ処理機構と、
該Ｉ／Ｏ要求が開始された後に該クライアントに制御を戻すように構成された、該クライアント内のリターン機構と、
該Ｉ／Ｏ要求が処理されている間、該クライアントアプリケーションが実行し続けることを可能にする、該クライアント内の実行機構と、
Ｉ／Ｏ完了の通知を該一次サーバから該クライアントに送信するように構成された、該クライアント内の送信機構であって、該クライアントが該一次サーバからＩ／Ｏ完了の通知を受信しない場合に、該クライアントは該一次サーバが故障したと決定する、送信機構と、
該Ｉ／Ｏ要求が該一次サーバに送信された後であって、Ｉ／Ｏ完了の通知が該一次サーバから戻る前に、該一次サーバが故障した場合に、該クライアント上に記憶された該Ｉ／Ｏ要求用の該パラメータを用いて、該Ｉ／Ｏ要求を該二次サーバへ再試行する、該クライアント内の再試行機構と
を含み、
該Ｉ／Ｏ要求を受け取ると、該Ｉ／Ｏ処理機構は、
分散オブジェクト指向のプログラミング環境内において規定された分散オブジェクトを作成することと、
該一次サーバに該分散オブジェクトへの参照を送信することであって、該参照を送信することは、該一次サーバが該参照を記憶することを生じさせる、ことと
を行うように構成されており、
該一次サーバが故障した場合に、該分散オブジェクトが参照されていないことを該クライアント上の分散オペレーティングシステムが該クライアントに通知し、これにより、該一次サーバが故障したことを該クライアントが結論付けることを可能にする、装置。
【請求項１５】
前記再試行機構が、前記クライアントアプリケーションが前記一次サーバの故障に気づくことなく、前記Ｉ／Ｏ要求を前記二次サーバへ再試行するように構成されている、請求項１４に記載の装置。
【請求項１６】
前記再試行機構が、前記Ｉ／Ｏ要求が前記一次サーバに送信される前に該一次サーバが故障した場合に、該Ｉ／Ｏ要求を前記二次サーバへ送信するように構成される、請求項１４に記載の装置。
【請求項１７】
前記Ｉ／Ｏ処理機構が、前記クライアント上に前記Ｉ／Ｏ要求用のステータスインジケータを記憶するように構成され、該ステータスインジケータは、該Ｉ／Ｏ要求が進行中であるか、あるいは完了したかを示す、請求項１４に記載の装置。
【請求項１８】
前記Ｉ／Ｏ要求を前記一次サーバへ送信する前に、該Ｉ／Ｏ要求に関連したメモリのページをロックするように構成され、かつ、該一次サーバが完了し、前記Ｉ／Ｏ完了の通知を前記クライアントに戻す場合に、該メモリのページをロック解除するように構成された、前記クライアント内のページロック機構をさらに含む、請求項１４に記載の装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般に、故障に強い分散コンピューティングシステムにおけるオペレーティングシステムに関する。より詳細には、本発明は、Ｉ／Ｏ要求用の一次サーバが故障した場合に、二次サーバに切り換えることができる、非同期Ｉ／Ｏ要求をサポートするシステムおよび方法に関する。
【０００２】
【従来の技術】
コンピュータネットワークが、独立したコンピュータシステムにリンクするためにますます共に用いられるにつれ、分散オペレーティングシステムは、コンピュータネットワーク上の複数のコンピュータシステム間における相互作用を制御するように開発されてきている。分散オペレーティングシステムは、一般に、クライアントコンピュータシステムがサーバコンピュータシステム上のリソースまたはサービスにアクセスすることを可能にする。例えば、クライアントコンピュータシステムは、サーバコンピュータシステム上のデータベース内に含まれる上方にアクセスし得る。しかし、サーバが故障した場合に、分散オペレーティングシステムが、ユーザクライアントがその故障に気づいて処理することなく、自動的にこの故障から回復することが望ましい。分散コンピュータシステムがそのようなワイヤの故障から回復する能力を処理することは、「高度に利用可能なシステム」と呼ばれ、そのような高度に利用可能なシステム上に記憶されたデータオブジェクトは、「高度に利用可能なデータオブジェクト」と呼ばれる。
【０００３】
正常に機能するために、高度に利用可能なシステムは一次サーバの故障を検出できなければならない。そして、故障した一次サーバが二次サーバ上のバックアップコピーにリダイレクトされるように、そのシステム自体を再設定する。この二次サーバ上のバックアップコピーへ切り換えるプロセスは、「フェイルオーバー」と呼ばれる。
【０００４】
【発明が解決しようとする課題】
非同期Ｉ／Ｏ要求は、特に高度に利用可能なシステムにおいて実現することは難しい。非同期Ｉ／Ｏ要求は、プロセスがＩ／Ｏ要求を初期化し、そしてＩ／Ｏ要求が処理されている間、処理し続けることを可能にする。このようにして、Ｉ／Ｏ要求が進行している間、プロセスは有益な活動を（ブロッキングする代わりに）行い続け、それによりシステムパフォーマンスを高める。あいにく、プロセスは通常、Ｉ／Ｏ要求が完了する際にはほとんど制御できない。Ｉ／Ｏ要求のタイミングに対するこの制御の欠如は、高度に利用可能なシステム（非同期Ｉ／Ｏ要求が進行中である間のいかなるときにも起こり得る、一次サーバの故障から回復できなければならない。）において問題を生じ得る。
【０００５】
ここで、Ｉ／Ｏ要求用の一次サーバが故障した場合に、二次サーバに切り換え可能な非同期Ｉ／Ｏ要求をサポートする、高度に利用可能なシステムが必要とされる。
【０００６】
【課題を解決するための手段】
本発明によるＩ／Ｏ要求を処理している一次サーバが故障し、そして二次サーバが該一次サーバを継承する場合に、Ｉ／Ｏ要求が進行することを可能にする方法は、クライアント上で駆動しているクライアントアプリケーションからのＩ／Ｏ要求を受信する工程と、該クライアント上のＩ／Ｏ要求用のパラメータを記憶する工程と、該一次サーバへのＩ／Ｏ要求を送信する工程と、該Ｉ／Ｏ要求が処理されている間、該クライアントアプリケーションが実行し続けることを可能にする工程と、該Ｉ／Ｏ要求が該一次サーバに送信された後であって、しかしＩ／Ｏ要求完了インジケータが該一次サーバから戻る前に、該一次サーバが故障した場合に、該クライアント上に記憶された該Ｉ／Ｏ要求用の該パラメータを用いて、該Ｉ／Ｏ要求を該二次サーバへ再試行する工程とを含み、それにより上記目的が達成される。
【０００７】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記Ｉ／Ｏ要求を前記二次サーバへ再試行する前記動作が、前記クライアントアプリケーションが前記一次サーバの故障に気づくことなく生じる方法であってもよい。
【０００８】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記クライアント上の前記Ｉ／Ｏ要求用の前記パラメータを記憶する前記動作が、分散オブジェクト指向のプログラミング環境内において規定された分散オブジェクトを作製する工程と、該分散オブジェクトについての参照を、前記一次サーバ上に記憶されるように送信する工程であって、分散オペレーティングシステムに該参照のトラックを辿らせる工程とを含み、該一次サーバが故障した場合に、該分散オペレーティングシステムが該クライアントに、該分散オブジェクトが非参照であることを通知し、該クライアントが、該一次サーバが故障したことを推測することを可能する方法であってもよい。
【０００９】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記Ｉ／Ｏ要求完了インジケータが前記一次サーバに送信される前に、該一次サーバが故障した場合に、該Ｉ／Ｏ要求を前記二次サーバへ送信する工程をさらに含んでもよい。
【００１０】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記Ｉ／Ｏ要求用のバラメータを記憶する前記動作が、前記クライアント上の該Ｉ／Ｏ要求用のステータスインジケータを記憶する工程を含み、該ステータスインジケータは該Ｉ／Ｏ要求が進行中であるか、あるいは完了したかを示す方法であってもよい。
【００１１】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記一次サーバが完了し、前記Ｉ／Ｏ要求完了インジケータを前記クライアントへ戻す場合に、前記ステータスインジケータを該Ｉ／Ｏ要求が完了することを示す値に設定する工程をさらに含んでもよい。
【００１２】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記一次サーバが完了し、前記Ｉ／Ｏ要求完了インジケータを前記クライアントへ戻す場合に、該クライアント上に予め記憶された該Ｉ／Ｏ要求用前記パラメータを取り除く工程をさらに含んでもよい。
【００１３】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記Ｉ／Ｏ要求を前記一次サーバへ送信する前に、該Ｉ／Ｏ要求に関連したメモリのページをロックする工程と、該一次サーバが完了し、前記Ｉ／Ｏ要求完了インジケータを前記クライアントに戻す場合に、該メモリのページをロック解除する工程とをさらに含んでもよい。
【００１４】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記Ｉ／Ｏ要求が、ファイルシステムアクセス、データベースシステムからのＩ／Ｏ要求、および視覚的メモリシステムからのページング要求の内の１つである方法であってもよい。
【００１５】
本発明によるＩ／Ｏ要求を処理している一次サーバが故障し、二次サーバが該一次サーバを継承する場合に、該Ｉ／Ｏ要求が進行することを可能にする方法を、コンピュータにより実行される際にコンピュータに行わせる命令を記憶する、コンピュータ読み出し可能記憶媒体は、該方法が、クライアント上で駆動しているクライアントアプリケーションからのＩ／Ｏ要求を受信する工程と、該クライアント上のＩ／Ｏ要求用のパラメータを記憶する工程と、該一次サーバへのＩ／Ｏ要求を送信する工程と、該クライアントアプリケーションが、該Ｉ／Ｏ要求が処理されている間、実行し続けることを可能にする工程と、該Ｉ／Ｏ要求が該一次サーバに送信された後であって、しかしＩ／Ｏ要求完了インジケータが該一次サーバから戻る前に、該一次サーバが故障した場合に、該クライアント上に記憶された該Ｉ／Ｏ要求用の該パラメータを用いて、該Ｉ／Ｏ要求を該二次サーバへ再試行する工程とを含み、それにより上記目的が達成される。
【００１６】
本発明によるＩ／Ｏ要求を処理している一次サーバが故障し、二次サーバが該一次サーバを継承する場合に、該Ｉ／Ｏ要求が進行することを可能にする方法を、コンピュータにより実行される際にコンピュータに行わせる命令を運ぶ、搬送波において実施されるコンピュータ命令信号は、該方法が、クライアント上で駆動しているクライアントアプリケーションからのＩ／Ｏ要求を受信する工程と、該クライアント上のＩ／Ｏ要求用のパラメータを記憶する工程と、該一次サーバへのＩ／Ｏ要求を送信する工程と、該クライアントアプリケーションが、該Ｉ／Ｏ要求が処理されている間、実行し続けることを可能にする工程と、該Ｉ／Ｏ要求が該一次サーバに送信された後であって、しかしＩ／Ｏ要求完了インジケータが該一次サーバから戻る前に、該一次サーバが故障した場合に、該クライアント上に記憶された該Ｉ／Ｏ要求用の該パラメータを用いて、該Ｉ／Ｏ要求を該二次サーバへ再試行する工程とを含み、それにより上記目的が達成される。
【００１７】
本発明によるＩ／Ｏ要求を処理している一次サーバが故障し、二次サーバが該一次サーバを継承する場合に、該Ｉ／Ｏ要求が進行することを可能にする方法は、クライアント上で駆動しているクライアントアプリケーションからの該Ｉ／Ｏ要求を受信する工程と、該クライアント上の該Ｉ／Ｏ要求用のパラメータを記憶する工程であって、該パラメータは該Ｉ／Ｏ要求が進行中であるか、あるいは完了したかを示すステータスインジケータを含む工程と、該Ｉ／Ｏ要求を該一次サーバへ送信する工程と該Ｉ／Ｏ要求が処理されている間、該クライアントアプリケーションが実行し続けることを可能にする工程と、該一次サーバが、該Ｉ／Ｏ要求が該一次サーバへ送信される前に故障した場合に、該Ｉ／Ｏ要求を該二次サーバへ送信する工程と、該Ｉ／Ｏ要求が該一次サーバに送信された後であって、しかしＩ／Ｏ要求完了インジケータが該一次サーバから戻る前に、該一次サーバが故障した場合に、該クライアント上に記憶された該Ｉ／Ｏ要求用の該パラメータを用いて、該Ｉ／Ｏ要求を該二次サーバへ再試行する工程であって、該再試行する工程が、該クライアントアプリケーションが該一次サーバの故障に気づくことなく生じる工程と、該一次サーバが完了し、該Ｉ／Ｏ要求完了インジケータを該クライアントへ戻す場合に、該ステータスインジケータを該Ｉ／Ｏ要求が完了することを示す値に設定する工程とを含み、それにより上記目的が達成される。
【００１８】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記クライアント上の前記Ｉ／Ｏ要求用の前記パラメータを記憶する前記動作が、分散オブジェクト指向のプログラミング環境内において規定された分散オブジェクトを作製する工程と、該分散オブジェクトについての参照を、前記一次サーバ上に記憶されるように送信する工程であって、分散オペレーティングシステムに該参照のトラックを辿らせる工程とを含み、該一次サーバが故障した場合に、該分散オペレーティングシステムが該クライアントに、該分散オブジェクトが非参照であることを通知し、該クライアントが、該一次サーバが故障したことを推測することを可能にする方法であってもよい。
【００１９】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記Ｉ／Ｏ要求完了インジケータが前記一次サーバに送信される前に、該一次サーバが故障し、該Ｉ／Ｏ要求を前記二次サーバへ送信する工程をさらに含んでもよい。
【００２０】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記Ｉ／Ｏ要求を前記一次サーバへ送信する前に、該Ｉ／Ｏ要求に関連したメモリのページをロックする工程と、該一次サーバが完了し、前記Ｉ／Ｏ要求完了インジケータを前記クライアントに戻す場合に、該メモリのページをロック解除する工程とをさらに含んでもよい。
【００２１】
Ｉ／Ｏ要求が進行することを可能にする方法は、前記Ｉ／Ｏ要求が、ファイルシステムアクセス、データベースシステムからのＩ／Ｏ要求、および視覚的メモリシステムからのページング要求の内の１つである方法であってもよい。
【００２２】
本発明によるＩ／Ｏ要求を処理している一次サーバが故障し、二次サーバが該一次サーバを継承する場合に、該Ｉ／Ｏ要求が進行することを可能にする装置は、
クライアント上で駆動するクライアントアプリケーションからの該Ｉ／Ｏ要求を受信するように構成されたＩ／Ｏ処理機構と、該Ｉ／Ｏ要求が処理されている間、該クライアントアプリケーションが実行し続けることを可能にする実行機構と、該Ｉ／Ｏ要求が該一次サーバに送信された後であって、しかしＩ／Ｏ要求完了インジケータが該一次サーバから戻る前に、該一次サーバが故障した場合に、該クライアント上に記憶された該Ｉ／Ｏ要求用の該パラメータを用いて、該Ｉ／Ｏ要求を該二次サーバへ再試行する再試行機構とを含み、それにより上記目的が達成される。
【００２３】
Ｉ／Ｏ要求が進行することを可能にする装置は、前記再試行機構が、前記Ｉ／Ｏ要求が前記二次サーバへ、前記クライアントアプリケーションが前記一次サーバの故障に気づくことなく再試行するように構成されてもよい。
【００２４】
Ｉ／Ｏ要求が進行することを可能にする装置は、前記Ｉ／Ｏ要求の受信により、該Ｉ／Ｏ処理機構が、分散オブジェクト指向のプログラミング環境内において規定された分散オブジェクトを作製し、該分散オブジェクトについての参照を、前記一次サーバ上に記憶されるように送信し、分散オペレーティングシステムに該参照のトラックを辿らせるように構成され、該一次サーバが故障した場合に、該分散オペレーティングシステムが該クライアントに、該分散オブジェクトが非参照であることを通知し、該クライアントが該一次サーバが故障したことを推測することを可能にする装置であってもよい。
【００２５】
Ｉ／Ｏ要求が進行することを可能にする装置は、前記再試行機構が、前記Ｉ／Ｏ要求が前記一次サーバに送信される前に該一次サーバが故障した場合に、該Ｉ／Ｏ要求を前記二次サーバへ送信するように構成されてもよい。
【００２６】
Ｉ／Ｏ要求が進行することを可能にする装置は、前記Ｉ／Ｏ処理機構が、前記Ｉ／Ｏ要求用のパラメータを記憶する前記動作が、前記クライアント上の該Ｉ／Ｏ要求用のステータスインジケータを記憶するように構成され、該ステータスインジケータは該Ｉ／Ｏ要求が進行中であるか、あるいは完了したかを示す装置であってもよい。
【００２７】
Ｉ／Ｏ要求が進行することを可能にする装置は、前記Ｉ／Ｏ要求を前記一次サーバへ送信する前に、該Ｉ／Ｏ要求に関連したメモリのページをロックし、かつ該一次サーバが完了し、前記Ｉ／Ｏ要求完了インジケータを前記クライアントに戻す場合に、該メモリのページをロック解除するように構成される、ページロック機構をさらに含んでもよい。
【００２８】
本発明の１つの実施の形態は、Ｉ／Ｏ要求を処理している一次サーバが故障し、二次サーバが一次サーバを継承する場合に、Ｉ／Ｏ要求が進行することを可能にするシステムを提供する。クライアント上で駆動しているアプリケーションからのＩ／Ｏ要求の受信により、システムはクライアント上のＩ／Ｏ要求用のパラメータを記憶し、そしてＩ／Ｏ要求を一次サーバへ送信する。次に、システムは、Ｉ／Ｏ要求が処理されている間、クライアント上のアプリケーションが実行し続けることを可能にする。Ｉ／Ｏ要求が一次サーバへ送信された後であって、しかしＩ／Ｏ要求完了インジケータが一次サーバから戻る前に一次サーバが故障した場合に、システムはクライアント上に記憶されたパラメータを用いてＩ／Ｏ要求を二次サーバへ再試行する。Ｉ／Ｏ要求は、多くの異なるソース（ファイルシステムアクセス、データベースシステムからのＩ／Ｏ要求、および視覚的メモリシステムからのページング要求を含む）から起こり得る。上記の実施の形態における多様性の中で、クライアント上のＩ／Ｏ要求用のパラメータを記憶する作業は、分散オブジェクト指向プログラミング環境内において規定された分散オブジェクトを作製すること、および分散オブジェクトについての参照を、一次サーバ上に記憶されるように送信することを含む。このことは、分散オペレーティングシステムがその参照のトラックを辿るようにし、一次サーバが故障した場合に、分散オブジェクト上の参照数は０まで落ち、そして分散オペレーティングシステムは分散オブジェクトが非参照であることをクライアントに通知する。それにより、クライアントは一次サーバが故障したことを推測できる。
【００２９】
上記の実施の形態の１つの局面は、Ｉ／Ｏ要求が一次サーバに送信される前に、Ｉ／Ｏ要求に関連するメモリのページをロックすることに関する。このことは、Ｉ／Ｏ要求が再試行される必要がある場合において、そのページが変更されないことを確実にする。このページは、Ｉ／Ｏ要求が完了し、一次サーバがＩ／Ｏ要求の完了をクライアントに知らせる際に、最終的にロック解除される。
【００３０】
また本発明の他の実施の形態は、以下の詳細な説明から当業者には容易に明らかなものとなる。ここでは、本発明を実施することを意図した実施態様を図示することにより、本発明の実施の形態のみを示し、説明している。後に理解されるように、本発明は他の、または異なる実施の形態を可能とし、またその詳細のいくつかは、本発明の精神および範囲から逸脱することなく、多様な明白な観点における改変も可能とする。よって、図面および詳細な説明は、本質的な説明として見なされるものであって、制限されるものではない。
【００３１】
【発明の実施の形態】
分散システムの説明
図１は、本発明の実施の形態による分散コンピューティングシステムを示す。この分散コンピューティングシステムは、クライアント１０２に連結するネットワーク１１０、一次サーバ１０６、および二次サーバ１０８を含む。ネットワーク１１０は、通常コンピュータ間のワイヤ（またはワイヤレス）リンクの任意のタイプを意味する。この任意のタイプとは、ローカルネットワーク、広域ネットワーク、もしくはネットワークの組合せを含む（しかし、これらに限定されない）。一般に、クライアント１０２のようなクライアントは、リソースまたはサービスを要求するエンティティを意味する。対応して、一次サーバ１０６または二次サーバ１０８のようなサーバは、リソースおよびサービス用の要求をサービスする。いくつかのケースにおいては、オブジェクト用のクライアントおよびサーバは、同じコンピューティングノード上に存在し得る。他のケースにおいては、クライアントおよびサーバは、異なるコンピューティングノード上のオブジェクト用に存在する。図１に示す実施の形態においては、クライアント１０２、一次サーバ１０６、および二次サーバ１０８は、独立したコンピューティングノード上に存在する。
【００３２】
一次サーバ１０６および二次サーバ１０８は、記憶デバイス１１２に連結する。記憶デバイス１１２は、一次サーバ１０６および二次サーバ１０８によりアクセスされるデータ用の非揮発性メモリを含む。図１は、記憶デバイス１１２から一次サーバ１０６へ、そして二次サーバ１０８への直接的な通信リンクを示しているが、これら通信リンクは、実際にはネットワーク１１０（または別の独立したネットワーク）を渡るメッセージにより実現され得る。
【００３３】
本発明に１つの実施の形態において、図１に示す分散コンピューティングシステム用のオペレーティングシステムは、Ｓｏｌａｒｉｓ  ＭＣオペレーティングシステムであり、これはＣａｌｉｆｏｒｎｉａ州、Ｐａｌｏ  ＡｌｔｏのＳｕｎＭｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．の製品である。Ｓｏｌａｒｉｓ  ＭＣオペレーティングシステムは、ＵＮＩＸ−ベースのオペレーティングシステムである。よって、現在の技術を説明するにあたって、ＵＮＩＸの用語法および概念は、頻繁に用いられる。しかし、この使用は説明を目的としたものであって、この特定のオペレーティングシステムに限定すると見なされるものではない。
【００３４】
説明している実施の形態において、クライアント１０２は高度に利用可能な非同期Ｉ／Ｏシステム１０４を含み、これはライブラリとして実現され得、またこれは、Ｉ／Ｏ要求を処理している一次サーバ１０６が故障した場合に、二次サーバ１０８に向けられ得る非同期Ｉ／Ｏ操作を促進する。例えば、クライアント１０２が一次サーバ１０６への未処理(outstanding) のＩ／Ｏ要求を有すると仮定する。Ｉ／Ｏ要求が未処理である間に一次サーバ１０６が故障すると、クライアント１０２は、最終的に分散オペレーティングシステムにより一次サーバ１０６が故障したことを通知される。それにより、クライアント１０２は、故障したＩ／Ｏ要求を二次サーバ１０８上で再試行する。二次サーバ１０８は、記憶デバイス１１２にもアクセスできることから、同じＩ／Ｏ要求を処理することができることに注目されたい。
【００３５】
非同期Ｉ／Ｏに関与する機能的構成要素
図２は、クライアント１０２および一次サーバ１０６内における機能的構成要素を示し、これらの構成要素は、本発明の実施の形態による高度に利用可能な非同期Ｉ／Ｏ操作に関与している。図示する実施の形態においては、図１からのクライアント１０２はユーザプロセス２０４を包含する。ユーザプロセス２０４は、システムライブラリ２０８からのＩ／Ｏ機能を呼び出すことにより、Ｉ／Ｏ要求を作製する。システムライブラリ２０８は、プロキシファイルシステム（ＰＸＦＳ）２１２と通信する機能を含む。ユーザプロセス２０４は、一次サーバ１０６へのＩ／Ｏ要求を生成することができるクライアント１０２内の任意のプロセスを含み得る。これは、ファイルシステム参照を生成するユーザプロセスに限定されないが、データベースアクセスを生成するデータベースプロセス、およびページ参照を生成するページングシステムを含む。図２は、図示的な目的として「ユーザ」プロセスを表すが、一般に、任意の「ユニット」または「システム」プロセスがＩ／Ｏ要求を生成し得る。
【００３６】
Ｉ／Ｏ要求を実行する機能を含むシステムライブラリ２０８は、多様なシステムコールを実現する機能の集まりを含む。システムライブラリ２０８内におけるＩ／Ｏルーチンは、典型的にはユーザプロセス２０４からのユーザレベルシステムコールをカーネルレベルシステムコールへ変換し、Ｉ／Ｏ操作を行う。
【００３７】
プロキシファイルシステム（ＰＸＦＳ）２１２は、高度に利用可能な分散ファイルシステムの一部であり、これは一次サーバ１０６が故障した場合に、一次サーバ１０６から二次サーバ１０８へのフェイルオーバーをサポートする。図示する実施の形態において、ＰＸＦＳ２１２はコールバックオブジェクト２１４を含み、これは関連非同期Ｉ／Ｏ操作に関する情報を包含する。
【００３８】
クライアント１０２内におけるＰＸＦＳ２１２は、一次サーバ１０６内におけるＰＸＦＳ２２２と通信する。クライアント１０２内におけるＰＸＦＳ２１２、および一次サーバ１０６内におけるＰＸＦＳ２２２は、同じ分散ファイルシステムの異なる部分である。ＰＸＦＳ２２２は、分散オブジェクトポインタ２２３を含み、これはクライアント１０２内におけるコールバックオブジェクト２１４についての参照である。実際には、分散オブジェクトポインタ２２３は、コールバックオブジェクト２１４への分散参照２２５を作製する。一次サーバ１０６が故障すると、分散参照２２５は消える。それにより、コールバックオブジェクト２１４についてのアクティブ参照の数は０まで落ち、従って分散オペレーティングシステムはクライアント１０２上のＰＸＦＳ２１２に、コールバックオブジェクト２１４が非参照であることを通知する。一次サーバ１０６はコールバックオブジェクト２１４についての参照を保持する唯一のエンティティであることから、クライアント１０２は、一次サーバ１０６が故障したと分析し得る。
【００３９】
一次サーバ１０６は、さらに記憶デバイスドライバ２２４を包含し、これはＰＸＦＳ２２２からコマンドを受信し、それらのコマンドに応答して、記憶デバイス１１２へアクセスする。
【００４０】
記憶デバイスドライバ２２４は、特定のＩ／Ｏ操作を記憶デバイス１１２に行うために、記憶デバイス１１２と通信する。
【００４１】
図３は、本発明の実施の形態によるコールバックオブジェクト２１４の内部構造の一部を示す。図３に示す実施の形態は、Ｉ／Ｏ要求３０２およびＩ／Ｏ要求ステータス３０４を指すポインタを含む。Ｉ／Ｏ要求３０２を指すポインタは、ペンディングＩ／Ｏ要求に関する情報を含むＩ／Ｏ要求オブジェクトを指すポインタである。このポインタは、一次サーバ１０６が故障した場合に、ペンディングＩ／Ｏ要求が二次サーバ１０８上で再試行されることを可能にする。図３に示すコールバックオブジェクト２１４の実施の形態は、オブジェクト指向プログラミングシステム内において規定されるオブジェクトの形をとるが、一般に、同等のデータを記憶する任意のタイプのデータ構造が用いられ得る。クライアント１０２は、各ペンディングＩ／Ｏ要求用に、独立したコールバックオブジェクト２１４を作製し、そして維持することに注目されたい。
【００４２】
非同期Ｉ／Ｏプロセス
図４は、本発明の実施の形態による非同期Ｉ／Ｏ操作を行う際に関与するいくつかの操作を示すフローチャートである。これらの要素を図２に示す機能的構成要素を参照しながら説明する。まず、ユーザプロセス２０４（図２より）にて、Ｉ／Ｏ要求（工程４０２）がなされる。上述したように、このＩ／Ｏ要求は、記憶デバイス１１２（図２より）への任意のタイプのＩ／Ｏ要求（ファイルシステムアクセス、データベースシステムからのＩ／Ｏ要求、または視覚的メモリシステムからのページング要求を含む）を含み得る。次に、Ｉ／Ｏ要求２０６は、システムライブラリ２０８からのシステムコールを実行する（工程４０４）。このシステムコールは、クライアント１０２上のプロキシファイルシステム（ＰＸＦＳ２１２）にアクセスする、カーネルシステムコール２１０を生成する。
【００４３】
Ｉ／Ｏ要求を処理する際に、ＰＸＦＳ２１２はコールバックオブジェクト２１４を作製し、そして記憶する（工程４０６）。そうする間に、ＰＸＦＳ２１２は図３からのＩ／Ｏ要求３０２を指すポインタを初期化し、関連Ｉ／Ｏ要求オブジェクトを（Ｉ／Ｏ要求の再試行が可能となるように）指し示し、同じくＩ／Ｏ要求ステータス３０４を「進行中」に設定する（工程４０８）。
【００４４】
次に、ＰＸＦＳ２１２が、一次サーバ１０６への呼出しをする（工程４１０）。この呼出しは、コールバックオブジェクト２１４についての参照を含む。呼出しに応答して、一次サーバ１０６内のＰＸＦＳ２２２は、分散オブジェクトポインタ２２３として、コールバックオブジェクト２１４についての参照を記憶する。このことは、分散オペレーティングシステムに、コールバックオブジェクト２１４についての分散参照２２５のトラックを辿らせる。一次サーバ１０６がが故障すると、分散オペレーティングシステムはクライアント１０２に、コールバックオブジェクト２１４が非参照であることを通知する。一次サーバ１０６はコールバックオブジェクト２１４についての参照を保持する唯一のエンティティであることから、クライアント１０２は、一次サーバ１０６が故障したことを推測し得、そしてクライアント１０２は適切な動作をとることができる。
【００４５】
その次に、一次サーバ１０６上のＰＸＦＳ２２２は記憶デバイスドライバ２２４を呼び出し、Ｉ／Ｏ操作を始める（工程４１２）。記憶デバイスドライバ２２４は、コマンドを記憶デバイス１１２へ送信することによりＩ／Ｏ操作を初期化する。この時点で、呼出しはクライアント１０２へ戻る（工程４１４）。その後、クライアント１０２上のＰＸＦＳ２１２は、ユーザプロセス２０４へのリターンを転送し、それによりユーザプロセス２０４は処理を継続し得る（工程４１６）。従って、ユーザプロセス２０４は、Ｉ／Ｏ操作の完了を待つ代わりに、有益な活動をし得る。しばらくの間、Ｉ／Ｏ操作が処理を続け、将来の未決定のときに完了する。
【００４６】
Ｉ／Ｏ要求が記憶デバイス１１２により完了したときに、記憶デバイス１２２は記憶デバイスドライバ２２４へ割り込みを送信する。この割り込みに応答して、記憶デバイスドライバ２２４はＩ／Ｏ済み機能を呼び出す（工程４２０）。この機能により、一次サーバ１０６はクライアント１０２に、Ｉ／Ｏ要求が完了したことを通知する（工程４２２）。さらに、Ｉ／Ｏ要求が読み出し操作のためのものであった場合に、記憶デバイス１１２からのデータ読み出しは、このときにクライアント１０２から一次サーバ１０６へ送り戻される。そして、クライアント１０２上のＰＸＦＳ２１２は、Ｉ／Ｏ要求ステータス３０４を「済み」に設定し、Ｉ／Ｏ要求中にロックされていた任意のページをロック解除する。Ｉ／Ｏ操作中、Ｉ／Ｏ操作が、Ｉ／Ｏが進行中のときにページがスワップアウトまたは消去を防ぐことを完了するまで、ページはロックされたままである。ページは、工程４１０においてＩ／Ｏ操作が一次サーバ１０６に送信される少し前にロックされることに注目されたい。また、割り込みは、工程４１２においてＩ／Ｏ要求が始まった後の任意のときに、完了し得ること(工程４２０）に注目されたい。これはＩ／Ｏ要求が独立したスレッド上で実行されているためである。よって、工程４２０は、破線により示されたようなステート４１２、４１４、および４１６のいずれの後にも続き得る。
【００４７】
次に、一次サーバ１０６は分散参照２２５をコールバックオブジェクト２１４へリリースする（工程４２６）。コールバックオブジェクト２１４についての参照は１つしかないことから、分散参照２２５がリリースされたときに、コールバックオブジェクト２１４は非参照である。分散オペレーティングシステムは、最終的にはこの事実を検出し、クライアント１０２は、コールバックオブジェクト２１４上の「非参照」メッセージを受信する（工程４２８）。この非参照メッセージに応答して、クライアント１０２はコールバックオブジェクト２１４内におけるＩ／Ｏ要求ステータス３０４を検査する。Ｉ／Ｏ要求は、Ｉ／Ｏ要求ステータスが完了したことを表示し、クライアント１０２は最後にコールバックオブジェクト２１４を消去する（工程４３０）。この時点で、Ｉ／Ｏ操作は完了する。
【００４８】
故障からの回復
図５は、本発明の実施の形態による非同期Ｉ／Ｏ操作中の故障から回復する際に関するいくつかの操作を示すフローチャートである。一次サーバ１０６が、Ｉ／Ｏ呼出しが一次サーバ１０６につくられる前に故障した場合に（図４の工程４１０）、呼出しは分散オペレーティングシステムにより、自動的に図１の二次サーバ１０８へ再試行される（工程５０４）。
【００４９】
次に、一次サーバ１０６へのＩ／Ｏ呼出しが工程４１０においてつくられた後に一次サーバ１０６が故障した場合であって、しかし呼出しが工程４１４においてクライアント１０２へ戻される前に、分散オペレーティングシステムのレプリカフレームワークは、二次サーバ１０８へＩ／Ｏ要求の再試行を行う（工程５０２）。図示する実施の形態において、レプリカフレームワークは、Ｃａｌｉｆｏｒｎｉａ州、Ｐａｌｏ  ＡｌｔｏのＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．により生産されるＳｏｌａｒｉｓ  ＭＣオペレーティングシステムの一部である。しかし、他のオペレーティングシステムでも、再試行を行うための類似の機構を用い得る。呼出しが一次サーバ１０６に届く前に、コールバックオブジェクト２１４についての分散参照２２５は存在し得ないことに注目されたい。よってクライアント１０２は、一次サーバ１０６が止まったケースにおいては、非参照通知を受信することを期待できない。
【００５０】
次に、呼出しがクライアント１０２へ戻った後に一次サーバ１０６が故障した場合に（工程４１４）であって、しかし一次サーバ１０６が工程４２２におけるＩ／Ｏ操作の完了をクライアント１０２に通知する前に、一連のイベントが起こる（工程５０６）。一次サーバ１０６が止まった場合に、コールバックオブジェクト２１４用の分散オペレーティングシステムにより維持される参照数は０まで落ちる。このことは、分散オペレーティングシステムにより検出され、そしてクライアント１０２は、コールバックオブジェクト２１４上の非参照メッセージを分散オペレーティングシステムから受信する。この非参照メッセージに応答して、クライアント１０２内のＰＸＦＳ２１２は、コールバックオブジェクト２１４内におけるＩ／Ｏ要求ステータス３０４が「進行中」に設定されることを確実にすることを検査する。その場合に、ＰＸＦＳ２１２は、コールバックオブジェクト２１４内におけるＩ／Ｏ要求３０２を指すポインタにより指標を付けられた最初の要求構造を用いて、Ｉ／Ｏ要求を二次サーバ１０８へ再試行する。ユーザプロセス２０４は、この故障に気づかないことに注目されたい。
【００５１】
一次サーバ１０６がＩ／Ｏ要求の完了をクライアント１０２に通知した後に一次サーバ１０６が故障した場合に、クライアント１０２はＩ／Ｏ要求ステータス３０４を「済み」に設定する（工程５０８）。一次サーバ１０６は、加えてＩ／Ｏ要求に関連したデータ構造をきれいにする。これはＩ／Ｏ要求に関与するページのロック解除、およびコールバックオブジェクト２１４の消去を含み得る。
【００５２】
結論
よって、本発明は、Ｉ／Ｏ要求用の一次サーバが故障した場合に二次サーバに切り換わり得る、高度に利用可能な非同期Ｉ／Ｏ要求をサポートする。
【００５３】
本発明は特に実施の形態を参照しながら図示し、説明してきたが、当業者には形式および詳細において、上述および他の変更が本発明の精神および範囲から逸脱することなく行われ得ることを理解する。
【００５４】
【発明の効果】
上述したように、本発明によるとＩ／Ｏ要求を処理している一次サーバが故障し、二次サーバが一次サーバを継承する場合に、Ｉ／Ｏ要求が進行することを可能にするシステムが提供される。
【図面の簡単な説明】
【図１】本発明による、分散コンピューティングシステムを示す図である。
【図２】本発明による、高度に利用可能な非同期Ｉ／Ｏ操作を実現する際に関与する、クライアントおよび一次サーバ内の機能的構成要素を示す図である。
【図３】本発明による、コールバックオブジェクトの内部構造の一部を示す図である。
【図４】本発明による、非同期Ｉ／Ｏ操作を行う際に関与する、いくつかの操作を示すフローチャートである。
【図５】本発明による非同期Ｉ／Ｏ操作中の故障から回復する際に関与する、いくつかの操作を示すフローチャートである。
【符号の説明】
１０２  クライアント
１０４  高度に利用可能な非同期Ｉ／Ｏシステム
１０６  一次サーバ
１０８  二次サーバ
１１２  記憶デバイス
２０４  ユーザプロセス
２０６  Ｉ／Ｏ要求
２０８  システムライブラリ
２１０  カーネルシステムコール
２１２  プロキシファイルシステム（ＰＸＦＳ）
２１４  コールバックオブジェクト
２２２  プロキシファイルシステム（ＰＸＦＳ）
２２３  分散オブジェクトポインタ
２２４  記憶デバイスドライバ
【図１】
0004885342.tif 000002
【図２】
0004885342.tif 000003
【図３】
0004885342.tif 000004
【図４】
0004885342.tif 000005
【図５】
0004885342.tif 000006