(57)【要約】【課題】ストレージエリアネットワーク内の共有ファイルシステムに高速にアクセスする処理をカーネルの処理と分離することができるストレージエリアネットワーク上の共有ディスク装置へのアクセスシステムを提供する。【解決手段】クライアント２０が、ストレージエリアネットワーク４０上の１以上の共有ディスク装置３０に構成されたファイルシステムのファイルへアクセスするアクセスシステムであり、クライアント２０の共有ディスク装置３０のファイルシステム６０へのアクセス機能を、ダイナミックリンクライブラリを使用して、クライアントのユーザプログラム２０１の一部として実装する。【選択図】    図１
2005018643.tif 000002
【特許請求の範囲】
【請求項１】
複数のクライアントが、ストレージエリアネットワーク上の１以上の共有ディスク装置に構成されたファイルシステムのファイルへアクセスするアクセスシステムであって、
前記クライアントの前記共有ディスク装置のファイルシステムへのアクセス機能を、ダイナミックリンクライブラリを使用して、前記クライアントのユーザプログラムの一部として実装することを特徴とするストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム。
【請求項２】
前記クライアントの前記共有ディスク装置のファイルシステムへのアクセス機能として、通常のファイルアクセス処理に、前記共有ディスク装置のファイルシステムへのアクセス処理を挿入するダイナミックリンクライブラリであるアクセス処理部を備えることを特徴とする請求項１に記載のストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム。
【請求項３】
前記ストレージエリアネットワーク上のサーバに、前記クライアントがアクセスする前記ファイルシステムのファイルに対するファイルハンドルを取得して、前記クライアントへ送信するファイルハンドル取得プロセスを備えることを特徴とする請求項１又は請求項２に記載のストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム。
【請求項４】
前記クライアントの前記アクセス処理部は、カーネルが備えるソケット機能を利用して前記サーバのファイルハンドル取得プロセスからのファイルハンドルを取得することを特徴とする請求項３に記載のストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム。
【請求項５】
前記クライアントに、特権モードで動作し、前記共有ディスク装置をアクセスするドライバのオープン処理を行う代理プロセスを備えることを特徴とする請求項１から請求項４の何れか１項に記載のストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム。
【請求項６】
前記クライアントの前記ユーザプログラムが、通常のファイルアクセス処理を行うダイナミックリンクライブラリより先に、前記アクセス処理部がダイナミックリンクされるように、ダイナミックリンクライブラリの検索パスを設定することを特徴とする請求項２から請求項５に記載のストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム。
【請求項７】
前記クライアントの前記アクセス処理部は、カーネルが備える前記ソケット機構を利用して前記共有ディスク装置をアクセスするドライバを非特権モードで実行することを特徴とする請求項２から請求項６に記載のストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム。
【請求項８】
ストレージエリアネットワーク上の１以上の共有ディスク装置に構成されたファイルシステムのファイルへアクセスするクライアントであって、
前記共有ディスク装置のファイルシステムへのアクセス機能を、ダイナミックリンクライブラリを使用して、前記クライアントのユーザプログラムの一部として実装することを特徴とするストレージエリアネットワーク上のクライアント。
【請求項９】
前記共有ディスク装置のファイルシステムへのアクセス機能として、通常のファイルアクセス処理に、前記共有ディスク装置のファイルシステムへのアクセス処理を挿入するダイナミックリンクライブラリであるアクセス処理部を備えることを特徴とする請求項８に記載のストレージエリアネットワーク上のクライアント。
【請求項１０】
前記ストレージエリアネットワーク上のサーバのファイルハンドル取得プロセスから、アクセスする前記ファイルシステムのファイルに対するファイルハンドルを取得することを特徴とする請求項８又は請求項９に記載のストレージエリアネットワーク上のクライアント。
【請求項１１】
前記アクセス処理部は、カーネルが備えるソケット機能を利用して前記サーバのファイルハンドル取得プロセスからのファイルハンドルを取得することを特徴とする請求項１０に記載のストレージエリアネットワーク上のクライアント。
【請求項１２】
特権モードで動作し、前記共有ディスク装置をアクセスするドライバのオープン処理を行う代理プロセスを備えることを特徴とする請求項８から請求項１１の何れか１項に記載のストレージエリアネットワーク上のクライアント。
【請求項１３】
前記ユーザプログラムが、通常のファイルアクセス処理を行うダイナミックリンクライブラリより先に、前記アクセス処理部がダイナミックリンクされるように、ダイナミックリンクライブラリの検索パスを設定することを特徴とする請求項９から請求項１２に記載のストレージエリアネットワーク上のクライアント。
【請求項１４】
前記アクセス処理部は、カーネルが備える前記ソケット機構を利用して前記共有ディスク装置をアクセスするドライバを非特権モードで実行することを特徴とする請求項９から請求項１３に記載のストレージエリアネットワーク上のクライアント。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ストレージエリアネットワーク（ＳＡＮ：Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に関し、特に複数のコンピュータシステムが、ストレージエリアネットワーク上の１以上の共有ディスク装置に構成された単一のファイルシステムへ各々高速にデータをアクセスするアクセスシステムに関する。
【０００２】
【従来の技術】
近年、外部記憶装置間および記憶装置とコンピュータの間を結ぶ高速なネットワークである、ストレージエリアネットワークが実現されている。このストレージエリアネットワークは、例えば、複数のサーバが連携して一つの機能を提供する場合や、１つの大容量の共有ディクス装置を複数のサーバで共有する場合に特に有効であり、このような構成にストレージエリアネットワークを導入することにより、サーバの処理性能が向上し、クライアントとの通信に使うＬＡＮやＷＡＮなどのコンピュータ間ネットワークの負荷を軽減することができる。
【０００３】
従来、上記のストレージエリアネットワーク上の共有ディスク装置へアクセスするためのクライアント機能については、クライアント側のカーネルにその機能を実装していた。
【０００４】
従来のネットワークを介して複数のコンピュータ間でディスク装置を共有するシステムとしては、例えば、特開平１１−１２００６３号公報（特許文献１）に開示されるシステムがある。
【０００５】
この特許文献１のシステムでは、ファイル管理を行うサーバの負荷を少なくし、ファイルデータの転送がネットワークを経由しないようにして処理の高速化を図るものであり、ネットワーク上のクライアントからの要求に応じ、サーバが要求のあったファイルの管理情報を要求元のクライアントに送り、当該クライアントが送られたファイルの管理情報に基づいて共有ディスクを直接アクセスする構成となっている。
【０００６】
【特許文献１】
特開２００１−１１１４３８号公報
【０００７】
【発明が解決しようとする課題】
上述した従来のストレージエリアネットワーク上の共有ディスク装置へのアクセス方式には、次のような問題点があった。
【０００８】
第１の問題点は、ストレージエリアネットワークへのアクセス機能をクライアントのカーネルに実装しているため、カーネルのバージョンに依存することになり、ストレージエリアネットワークへのアクセスを行うためにカーネルのバージョンごとに実装をやりなおす必要が生じることである。
【０００９】
第２の問題点は、ストレージエリアネットワークへのアクセス実現方法が、プラットフォーム（ＯＳ）により多様であるため、プラットフォーム毎に再コンパイルや再リンクなどの手段によりクライアントのカーネルを改造する必要があり、移植への手間とコストがかかることである。
【００１０】
第３の問題点は、カーネル機能にストレージエリアネットワークのアクセス機能が実装されている場合、当該機能にバグがあった場合、ストレージエリアネットワークのシステム全体に影響を与える可能性があることである。
【００１１】
本発明の目的は、ストレージエリアネットワーク内の共有ファイルシステムに高速にアクセスする処理をカーネルの処理と分離することができるストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム及びそのクライアントを提案することができる。
【００１２】
本発明の他の目的は、ストレージエリアネットワークへのクライアントのアクセス機能をカーネルへの改造をすることなく実装でき、プラットフォームへの移植も容易に行うことができるストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム及びそのクライアントを提供することにある。
【００１３】
【課題を解決するための手段】
上記目的を達成する本発明は、複数のクライアントが、ストレージエリアネットワーク上の１以上の共有ディスク装置に構成されたファイルシステムのファイルへアクセスするアクセスシステムであって、前記クライアントの前記共有ディスク装置のファイルシステムへのアクセス機能を、ダイナミックリンクライブラリを使用して、前記クライアントのユーザプログラムの一部として実装することを特徴とする。
【００１４】
請求項２の本発明のアクセスシステムは、前記クライアントの前記共有ディスク装置のファイルシステムへのアクセス機能として、通常のファイルアクセス処理に、前記共有ディスク装置のファイルシステムへのアクセス処理を挿入するダイナミックリンクライブラリであるアクセス処理部を備えることを特徴とする。
【００１５】
請求項３の本発明のアクセスシステムは、前記ストレージエリアネットワーク上のサーバに、前記クライアントがアクセスする前記ファイルシステムのファイルに対するファイルハンドルを取得して、前記クライアントへ送信するファイルハンドル取得プロセスを備えることを特徴とする。
【００１６】
請求項４の本発明のアクセスシステムは、前記クライアントの前記アクセス処理部は、カーネルが備えるソケット機能を利用して前記サーバのファイルハンドル取得プロセスからのファイルハンドルを取得することを特徴とする。
【００１７】
請求項５の本発明のアクセスシステムは、前記クライアントに、特権モードで動作し、前記共有ディスク装置をアクセスするドライバのオープン処理を行う代理プロセスを備えることを特徴とする。
【００１８】
請求項６の本発明のアクセスシステムは、前記クライアントの前記ユーザプログラムが、通常のファイルアクセス処理を行うダイナミックリンクライブラリより先に、前記アクセス処理部がダイナミックリンクされるように、ダイナミックリンクライブラリの検索パスを設定することを特徴とする。
【００１９】
請求項７の本発明のアクセスシステムは、前記クライアントの前記アクセス処理部は、カーネルが備える前記ソケット機構を利用して前記共有ディスク装置をアクセスするドライバを非特権モードで実行することを特徴とする。
【００２０】
請求項８の本発明は、ストレージエリアネットワーク上の１以上の共有ディスク装置に構成されたファイルシステムのファイルへアクセスするクライアントであって、前記共有ディスク装置のファイルシステムへのアクセス機能を、ダイナミックリンクライブラリを使用して、前記クライアントのユーザプログラムの一部として実装することを特徴とする。
【００２１】
請求項９の本発明のストレージエリアネットワーク上のクライアントは、前記共有ディスク装置のファイルシステムへのアクセス機能として、通常のファイルアクセス処理に、前記共有ディスク装置のファイルシステムへのアクセス処理を挿入するダイナミックリンクライブラリであるアクセス処理部を備えることを特徴とする。
【００２２】
請求項１０の本発明のストレージエリアネットワーク上のクライアントは、前記ストレージエリアネットワーク上のサーバのファイルハンドル取得プロセスから、アクセスする前記ファイルシステムのファイルに対するファイルハンドルを取得することを特徴とする。
【００２３】
請求項１１の本発明のストレージエリアネットワーク上のクライアントは、前記アクセス処理部は、カーネルが備えるソケット機能を利用して前記サーバのファイルハンドル取得プロセスからのファイルハンドルを取得することを特徴とする。
【００２４】
請求項１２の本発明のストレージエリアネットワーク上のクライアントは、特権モードで動作し、前記共有ディスク装置をアクセスするドライバのオープン処理を行う代理プロセスを備えることを特徴とする。
【００２５】
請求項１３の本発明のストレージエリアネットワーク上のクライアントは、前記ユーザプログラムが、通常のファイルアクセス処理を行うダイナミックリンクライブラリより先に、前記アクセス処理部がダイナミックリンクされるように、ダイナミックリンクライブラリの検索パスを設定することを特徴とする。
【００２６】
請求項１４の本発明のストレージエリアネットワーク上のクライアントは、前記アクセス処理部は、カーネルが備える前記ソケット機構を利用して前記共有ディスク装置をアクセスするドライバを非特権モードで実行することを特徴とする。
【００２７】
【発明の実施の形態】
以下、本発明の好ましい実施の形態について図面を参照して詳細に説明する。
【００２８】
図１は、本発明の第１の実施の形態によるストレージエリアネットワーク上の共有ディスク装置へのアクセスシステムの全体構成を示すブロック図である。
【００２９】
図１を参照すると、本発明の第１の実施の形態によるストレージエリアネットワーク上の共有ディスク装置へのアクセスシステムは、サーバホスト１０と、クライアントホスト２０と、共有ディスク装置３０と、ストレージエリアネットワーク４０と、ＬＡＮ（ローカルエリアネットワーク）５０とから構成されている。
【００３０】
サーバホスト１０とクライアントホスト２０はＬＡＮ５０を経由してネットワークで接続されている。また、サーバホスト１０とクライアントホスト２０と、共有ディスク装置３０は、ストレージエリアネットワーク４０に接続されている。
【００３１】
共有ディスク装置３０には、サーバホスト１０上のローカルな共有ファイルシステム６０が構成されている。サーバホスト１０は、その共有ディスク装置３０に構成された共有ファイルシステム６０を管理している。共有ファイルシステム６０には、メタデータ７０とファイル８０が配置されている。
【００３２】
共有ディスク装置３０には、サーバホスト１０及びサーバホスト２０からストレージエリアネットワーク４０を経由して、物理ディスクアドレスとデータサイズ（ＩＯサイズ）をパラメータにして、ＳＣＳＩプロトコルでアクセスする。
【００３３】
共有ファイルシステム６０は、サーバホスト１０で管理されるメタデータ７０とファイル８０が配置されており、ファイル８０をアクセスするためには、サーバホスト１０が管理するメタデータ７０を使用する必要がある。
【００３４】
一方、クライアントホスト２０は、共有ファイルシステム６０をネットワークファイルシステム（ＮＦＳ）の機能を使用して、ネットワーク経由でマウントしている。クライアントホスト２０はＮＦＳを使用してファイル８０の存在を知ることができる。
【００３５】
クライアントホスト２０が共有ファイルシステム６０をアクセスするとき、クライアントホスト２０はサーバホスト１０に対して、アクセスするファイル８０を特定するための情報（サーバホスト１０が管理するファイル識別子）であるファイルハンドルと、そのファイル８０についての先頭からのオフセット値と、ＩＯサイズを、ＬＡＮ５０を経由して送信する。
【００３６】
そして、サーバホスト１０はクライアントホスト２０に対して、共有ファイルシステム６０に記録されている、ファイル８０についての先頭からのオフセット値に対応する共有ディスク装置３０の物理ディスクアドレス（開始アドレス）と、ＩＯサイズと、ファイル８０の先頭からのオフセットアドレスを、ＬＡＮ５０を経由して送信する。
【００３７】
そして、クライアントホスト２０がサーバホスト１０から送信されたそれらの情報に従って、ストレージエリアネットワーク４０を経由して共有ディスク装置３０に直接アクセスすることにより、クライアントホスト２０から共有ファイルシステム６０のファイルへの高速アクセスが実現される。
【００３８】
本実施の形態では、クライアントホスト２０が実現する上述した共有ファイル６０へのアクセス機能を、ＯＳが持つアプリケーションインタフェース（ＡＰＩ）のみで実現できるように構成している。これにより、機能実現のためにカーネルに手を加える必要がなくなり、様々なプラットフォームへの移植を容易とする。
【００３９】
図２はサーバホスト１０とクライアントホスト２０の詳細な内部構造を示している。
【００４０】
図２を参照すると、サーバホスト１０では、カーネル機能１０１が実装されており、カーネル機能１０１は共有ファイルシステムサーバ機構１０１１、ファイルシステム制御機構１０１２、ＳＣＳＩドライバ１０１３を含んでいる。また、サーバホスト１０では、ユーザ空間で動作するプロセスである、ファイルハンドル取得デーモン１０２が動作している。ここで、デーモンとは、システムの機能を実現したり、何らかのバックグラウンドサービスを実行するためのプロセスである。
【００４１】
クライアントホスト２０では、カーネル機能２０３が実装されており、カーネル機能２０３は、ＲａｗＩＯドライバ２０３１、ＳＣＳＩドライバ２０３３、ソケット機構２０３４及びファイルシステム制御機構２０３５を含んでいる。またＲａｗＩＯドライバ２０３１には、ユーザ空間へ転送するためのメモリ領域であるバッファ２０３２を含んでいる。
【００４２】
また、クライアントホスト２０上には、ＩＯ発行プロセスである、ユーザプログラム２０１があり、それはＩＯ用のメモリ領域２０１０をアロケートして動作する。
【００４３】
さらに、ダイナミックリンクライブラリとして提供される共有ファイルシステムクライアントＩＯ発行処理部２０２及び標準ＩＯ発行処理部２０５がクライアントホスト２０上に存在する。さらに、クライアントホスト２０では、代理ｏｐｅｎデーモン２０６が動作している。
【００４４】
なお、サーバホスト１０のカーネル機能１０１、ファイルハンドラ取得デーモン１０２、クライアントホスト２０のカーネル機能２０３、ユーザプログラム２０１、共有ファイルシステムクライアントＩＯ発行処理部２０２、標準ＩＯ発行処理部２０５及び代理ｏｐｅｎデーモン２０６は、サーバホスト１０及びクライアントホスト２０のプログラム制御可能なコンピュータ処理部（ＣＰＵ）上で実行されることにより、各機能を実現する。
【００４５】
ダイナミックリンクライブラリである共有ファイルシステムＩＯ発行処理部２０２及び標準ＩＯ発行処理部２０５は、ｏｐｅｎ（オープン）、ｒｅａｄ（リード）、ｗｒｉｔｅ（ライト）、ｃｌｏｓｅ（クローズ）の各関数が、同じシンボル名で定義されいる。
【００４６】
ユーザプログラム２０１がｏｐｅｎ、ｒｅａｄ、ｗｒｉｔｅ、ｃｌｏｓｅ関数を呼び出すと、カーネル機能２０３によって、シンボル名を解決するため、ダイナミックリンクライブラリに含まれる関数がユーザプログラムの一部となって実行される。
【００４７】
また、クライアントホスト２０上には、ユーザ空間で動作する、代理ｏｐｅｎデーモン２０６が動作しており、カーネル機能２０３に含まれるソケット機構２０３４を利用して、ユーザプログラム２０１と通信できる。
【００４８】
ここで、クライアントホスト２０上のユーザプログラム２０１がファイル８０に対してアクセスする場合について述べる。
【００４９】
ユーザプログラム２０１からファイル８０に対してアクセスするときには、共有ファイルシステム６０上のファイル８０に対するファイルハンドルを共有ファイルシステムサーバ機構１０１１に送信する必要がある。しかし、共有ファイルシステム６０はサーバホスト１０上のローカルファイルシステムであり、通常のＯＳが提供するＡＰＩではファイル８０のファイルハンドルを得ることができない。
【００５０】
そこで、サーバホスト１０上にファイルハンドル取得デーモン１０２を配置する。
【００５１】
このファイルハンドル取得デーモン１０２は、サーバホスト１０上で、特権モードで動作し、ファイルシステム制御機構１０１２から共有ファイルシステム６０上に構築した任意のファイル名のファイルハンドルを取得することができる。
【００５２】
共有ファイルシステムクライアントＩＯ発行処理部２０２は、ファイルの絶対パス名を送信し、その戻りとして、サーバホスト１０上のファイル８０に対するファイルハンドルを取得する。
【００５３】
次に、ユーザプログラム２０１を改変することなくアクセスする本発明による方式について述べる。
【００５４】
共有ディスク装置３０へアクセスするためのユーザプログラム２０１が動作する場合、ユーザプログラム２０１は、共有ファイルシステムクライアントＩＯ発行処理部２０２とダイナミックリンクされ、１つのユーザプログラムとして動作する。
【００５５】
共有ファイルシステムクライアントＩＯ発行処理部２０２は、カーネル機能のＩＯ処理用ＡＰＩであるｏｐｅｎ、ｒｅａｄ、ｗｒｉｔｅ、ｃｌｏｓｅの関数が実装されており、それらの関数はカーネル機能２０３に実装されているＲａｗＩＯドライバ２０３１とソケット機構２０３４のＡＰＩを使用して実装されている。
【００５６】
ＲａｗＩＯドライバ２０３１は、共有ディスク装置３０への低レベルアクセス処理機能で、ＳＣＳＩプロトコルによるＩＯ処理をユーザプログラム２０１から使用するためのＡＰＩを提供している。
【００５７】
ユーザプログラム２０１は、通常のファイルシステムにアクセスする場合は、システム上にあらかじめ準備されている標準ＩＯ発行処理部２０５とダイナミックリンクされ、ｏｐｅｎ、ｒｅａｄ、ｗｒｉｔｅ、ｃｌｏｓｅのＡＰＩを使用することによりデータの入出力を行うが、本実施の形態では、先に共有ファイルシステムクライアントＩＯ発行処理部２０２がダイナミックリンクされるように、ダイナミックリンクライブラリの検索パスを変更し、最初にクライアント発行処理部２０２のライブラリがリンクされるようにする。
【００５８】
これにより、ダイナミックリンクライブラリのリンクが、共有ファイルシステムクライアントＩＯ発行処理部２０２、標準ＩＯ発行処理部２０５の順で行われる。
【００５９】
この結果、ｏｐｅｎ、ｒｅａｄ、ｗｒｉｔｅ、ｃｌｏｓｅ処理においては、先に共有ファイルシステムクライアントＩＯ発行処理部２０２に含まれる関数が実行されることになり、これらの関数内に共有ファイルシステムアクセス用のクライアント処理を挿入することができる。
【００６０】
次に、ＲａｗＩＯアクセスの方法について述べる。
【００６１】
通常、ＲａｗＩＯドライバ２０３１に対しては特権モードでアクセスする必要がある。しかしながら、ユーザプログラム２０１は、非特権モードで動作することが多く、この場合、ＲａｗＩＯドライバ２０３１にはアクセスできない。
【００６２】
ただし、ＲａｗＩＯドライバ２０３１の機能として、共有ディスク装置３０のアクセス権の管理は、共有ディスク装置３０へのｏｐｅｎ処理が特権モードで行なわれていればよく、それ以降の実際のディスク操作であるｒｅａｄ、ｗｒｉｔｅ、ｃｌｏｓｅは、ｏｐｅｎ処理の過程で得られる共有ディスク装置３０のファイルハンドルを用いて行われる。
【００６３】
すなわち、この共有ディスク装置３０のファイルハンドルのコピーをユーザプログラム２０１が保持することにより、ＲａｗＩＯドライバ２０３１へのアクセスは、非特権モードであっても可能となる。
【００６４】
そのため、本実施の形態においては、クライアントホスト２０上に特権モードで動作する代理ｏｐｅｎデーモン２０６を配置する。
【００６５】
この代理ｏｐｅｎデーモン２０６は、特権モードで動作し、ＲａｗＩＯドライバ２０３１にアクセスすることができ、共有ファイルシステムクライアントＩＯ発行処理部２０２とソケット機構２０３４を経由して通信する。
【００６６】
このとき共有ファイルシステムクライアントＩＯ発行処理部部２０２は、共有ディスク装置３０のＲａｗＩＯドライバのｏｐｅｎ処理を代理ｏｐｅｎデーモン２０６に実行させ、そのファイルハンドルのコピーをソケット機構２０３４のＡＰＩを使用して取得する。
【００６７】
これにより、以降の共有ディスク装置３０へＲａｗＩＯドライバ２０３１を経由させたｒｅａｄ、ｗｒｉｔｅの操作を、代理ｏｐｅｎデーモン２０６で取得したファイルハンドルのコピーを使用することにより、非特権モードで実行することができるようになる。
【００６８】
上記の方式により、クライアントホスト２０から、サーバホスト１０上の共有ファイルシステム６０へアクセスする手段をカーネル機能と分離することができる。それによって、ユーザプログラム２０１のみで共有ファイルシステム６０上のファイル８０にアクセスすることが可能となる。
【００６９】
次に、図１と、図２及び図３、図４、図５、図６のフローチャートを参照して本実施の形態によるシステム全体の動作について詳細に説明する。
【００７０】
クライアントホスト２０上のユーザプログラム２０１が、共有ファイルシステム６０上のファイル８０に対してアクセスする場合、まずユーザプログラム２０１は、データ用の領域であるメモリ領域２０１０を確保する、ユーザプログラム２０１はこのメモリ領域２０１０にデータを書込み、または、ここに書き込まれたデータを読み出す。
【００７１】
ユーザプログラム２０１は、共有ディスク装置３０上のファイル８０をアクセスするとき、ファイル８０をオープンするためｏｐｅｎ関数を呼び出す（図３のステップ３０１）。
【００７２】
このときカーネル機能２０３は、システムからｏｐｅｎ関数をダイナミックリンクしようとする。この場合、ダイナミックリンクの検索パスを共有ファイルシステムクライアントＩＯ発行処理部部２０２を最初に検索するように設定しておくことで、ｏｐｅｎ関数について、共有ファイルシステムクライアントＩＯ発行処理部部２０２が最初にダイナミックリンクされて、共有ファイルシステムクライアントＩＯ発行処理部部２０２に含まれるｏｐｅｎ関数が呼び出される（ステップ３０２）。続いて、標準ＩＯ発行処理部部２０５に含まれるｏｐｅｎ関数が呼び出される（ステップ３０３）。
【００７３】
次に、ファイル８０が共有ファイルシステム６０上のファイルかどうかをチェックする（ステップ３０４）。
【００７４】
ファイル８０が、共有ファイルシステム６０上のファイルである場合は、ソケット機構２０３４を使用して、ファイルハンドル取得デーモン１０２と通信し、サーバホスト１０が管理するファイル８０のファイルハンドルを取得する（ステップ３０５）。以降、共有ファイルシステムサーバ機能１０１１と通信するときに、ここで取得したファイルハンドルを使用してファイルの識別を行う。
【００７５】
ユーザプログラムがファイル８０のリード（ｒｅａｄ関数）を実行する場合の動作について図４を参照して説明する。
【００７６】
まず、ユーザプログラムはｒｅａｄ関数を呼び出す（図４のステップ４０１）。このときのｒｅａｄ関数は、ダイナミックリンクの検索パスの順序に従い、共有ファイルシステムクライアント２０２に含まれるｒｅａｄ関数が呼び出される（ステップ４０２）。
【００７７】
次に、ファイル８０が共有ファイルシステム６０上のファイルかどうかをチェックする（ステップ４０３）。
【００７８】
ファイル８０が、共有ファイルシステム６０上のファイルでない場合は、標準ＩＯ発行処理部２０５に含まれるｒｅａｄ関数を呼び出す（ステップ４０４）。
【００７９】
ファイル８０が、共有ファイルシステム６０上のファイルである場合は、共有ファイルシステムサーバ機構１０１１に、図３のステップ３０５で取得したファイルハンドルを含むＩＯ要求を、ソケット機構２０３４を経由して送信する（ステップ４０５）。
【００８０】
その応答として、共有ファイルシステムサーバ機能１０１１は、ファイル８０の物理アドレスとＩＯサイズとオフセット値をクライアントホスト２０に対して送信し、共有ファイルシステムクライアントＩＯ発行処理部２０２は、そのｒａｗＩ／Ｏ要求を受け取る（ステップ４０６）。
【００８１】
このときｒａｗＩ／Ｏ要求には、共有ディスク装置３０のデバイスファイル名が含まれている。
【００８２】
次に、ｒａｗＩ／Ｏ要求に含まれている共有ディスク装置３０がｏｐｅｎされているかどうかをチェックする（ステップ４０７）。
【００８３】
もし、共有ディスク装置３０がｏｐｅｎされていなかったら、代理ｏｐｅｎデーモン２０６に共有ディスク装置３０へのｏｐｅｎを依頼する。
【００８４】
代理ｏｐｅｎデーモン２０６は、特権モードで共有ディスク装置３０をｏｐｅｎし、ソケット機構２０３４を経由して共有ディスク装置３０へのファイルハンドルを送信する。通常、これはソケット機構２０３４に含まれている拡張メッセージＳＣＭ＿ＲＩＧＨＴＳを使用する。
【００８５】
そして、共有ファイルシステムクライアントＩＯ発行処理部２０２は、共有ディスク装置３０へのファイルハンドルを取得する（ステップ４０８）。
【００８６】
以降、共有ディスク装置３０へのアクセスは、ステップ４０８で取得したファイルハンドルを用いて行うことができる。
【００８７】
次に、ステップ４０６にて取得したｒａｗＩＯ要求と、ステップ４０８で取得した共有ディスク装置３０へのファイルハンドルを利用して、ＲａｗＩＯドライバ２０３１を使用し、共有ディスク装置３０へアクセスする（ステップ４０９）。
【００８８】
このときのアクセス権は、代理ｏｐｅｎデーモン２０６によりｏｐｅｎされているファイルハンドラを使用するため、ＲａｗＩ／Ｏドライバ２０３１のアクセス権のチェックを通過できる。
【００８９】
ＲａｗＩＯドライバ２０３１は、ＳＣＳＩドライバ２０３３を経由して共有ディスク装置３０へアクセスし、ｒｅａｄデータはバッファ２０３２に転送され、そしてＲａｗＩＯドライバ２０３１によりユーザプログラムのメモリ領域２０１０にコピーされる。
【００９０】
その後、ｒａｗＩＯ終了通知を共有ファイルシステムサーバ機構１０１１に送信し（ステップ４１０）、共有ファイルシステムクライアントＩＯ発行処理部２０２はＩＯ終了通知を受信する（ステップ４１１）。
【００９１】
そして、ｒｅａｄで発行したサイズとおなじサイズをｓｅｅｋしてファイル位置を合わせる（ステップ４１２）。
【００９２】
ユーザプログラムがファイル８０のｗｒｉｔｅを実行する場合の動作について図５を参照して説明する。
【００９３】
まず、ユーザプログラムはｗｒｉｔｅ関数を呼び出す（図５のステップ５０１）。このときのｗｒｉｔｅ関数は、ダイナミックリンクの検索パス順序により、共有ファイルシステムクライアント２０２に含まれるｗｒｉｔｅ関数が呼び出される（ステップ５０２）。
【００９４】
次に、ファイル８０が共有ファイルシステム６０上のファイルかどうかをチェックする（ステップ５０３）。
【００９５】
ファイル８０が、共有ファイルシステム６０上のファイルでない場合は、標準ＩＯ発行処理部２０５に含まれるｗｒｉｔｅ関数を呼び出す（ステップ５０４）。
【００９６】
次にファイル８のキャッシュをフラッシュする（ステップ５０５）。
【００９７】
ファイル８０が、共有ファイルシステム６０上のファイルである場合は、共有ファイルシステムサーバ機構１０１１に、図３のステップ４で取得したファイルハンドルを含むＩＯ要求を、ソケット機構２０３４を経由してｓｅｎｄする（ステップ５０６）。
【００９８】
その応答として共有ファイルシステムサーバ機能１０１１は、ファイル８の物理アドレスとＩＯサイズとオフセット値をクライアントホスト２に対して送信し、共有ファイルシステムクライアントＩＯ発行処理部２０２は、そのｒａｗＩＯ要求をｒｅｃｅｉｖｅする（ステップ５０７）。
【００９９】
このとき、ｒａｗＩＯ要求には、共有ディスク装置３０のデバイスファイル名が含まれている。
【０１００】
次に、ｒａｗＩＯ要求に含まれている共有ディスク装置３０がｏｐｅｎされているかどうかをチェックする。（ステップ５０８）
もし共有ディスク装置３０がｏｐｅｎされていなかったら、代理ｏｐｅｎデーモン２０６に共有ディスク装置３０へのｏｐｅｎを依頼する。
【０１０１】
代理ｏｐｅｎデーモンは、特権モードで共有ディスク装置３０をｏｐｅｎし、ソケット機構２０３４を経由して共有ディスク装置３０へのファイルハンドルを送信する。通常これはソケット機構２０３４に含まれている拡張メッセージＳＣＭ＿ＲＩＧＨＴＳを使用する。
【０１０２】
そして、共有ファイルシステムクライアントＩＯ発行処理部２０２は、共有ディスク装置３０へのファイルハンドルを取得する（ステップ５０９）。
【０１０３】
以降、共有ディスク装置３０へのアクセスは、ステップ５０９で取得したファイルハンドルを用いて行うことができる。
【０１０４】
次に、ステップ５０７で取得したｒａｗＩＯ要求と、ステップ５０９で取得した共有ディスク装置３０へのファイルハンドルを利用して、ＲａｗＩＯドライバ２０３１を使用し、共有ディスク装置３０へアクセスする（ステップ４１０）。
【０１０５】
このときのアクセス権は、代理ｏｐｅｎデーモン２０６によりｏｐｅｎされているファイルハンドラを使用するため、ＲａｗＩＯドライバ２０３１のアクセス権のチェックを通過できる。
【０１０６】
ＲａｗＩＯドライバはＳＣＳＩドライバ２０３３を経由して共有ディスク装置３０へアクセスする、ｗｒｉｔｅデータはユーザプログラムのメモリ２０１０からバッファ２０３２に転送され、そしてＲａｗＩＯドライバにより共有ディスク装置３０へ転送される。
【０１０７】
その後、ｒａｗＩＯ終了通知を共有ファイルシステムサーバ機構１０１１に送信し（ステップ５１１）、共有ファイルシステムクライアントＩＯ発行処理部２０２はＩＯ終了通知を受信する（ステップ５１２）。そして、ｗｒｉｔｅで発行したサイズとおなじサイズをｓｅｅｋしてファイル位置を合わせる（ステップ５１３）。
【０１０８】
ユーザプログラム２０１がファイル８０のｃｌｏｓｅを行う場合の動作について図６を参照して説明する。
【０１０９】
ユーザプログラム２０１がファイル８０をｃｌｏｓｅするときは、まず、ユーザプログラム２０１はｃｌｏｓｅ関数を呼び出す（図６のステップ６０１）。このときのｃｌｏｓｅ関数は、ダイナミックリンクの検索パス順序により、共有ファイルシステムクライアント２０２に含まれるｃｌｏｓｅ関数が呼び出される（ステップ６０２）。
【０１１０】
次に、ファイル８０が共有ファイルシステム６０上のファイルかどうかをチェックする。（ステップ６０３）
ファイル８０が共有ファイルシステム６０上のファイルの場合は、先にｏｐｅｎしていた共有ディスク装置３０をｃｌｏｓｅする（ステップ６０４）。そして、ファイル８０のｃｌｏｓｅを行う（ステップ６０５）。
【０１１１】
本実施の形態によるストレージエリアネットワーク上の共有ディスク装置へのアクセスシステムでは、上記のように構成され、かつ動作するので、ユーザプログラム２０１を改変することなく、ストレージエリアネットワーク４０内の共有ファイルシステムに高速にアクセスする処理をカーネルの処理と分離して実行することができるようになる。それにより、クライアント機能がカーネルへの改造をすることなく実装でき、プラットフォームへの移植の工数を削減できる。その理由は、ダイナミックリンクライブラリを使用して、データアクセス部をユーザプログラムの一部として実装すること、特権モードでアクセスしなければならないＲａｗＩＯ処理を、代理ｏｐｅｎデーモンを配置することで回避すること、ネットワークファイルシステムのファイルハンドルを取得するデーモンをサーバホストに配置するためである。
【０１１２】
以上好ましい実施の形態及び実施例をあげて本発明を説明したが、本発明は必ずしも上記実施の形態及び実施例に限定されるものではなく、その技術的思想の範囲内において様々に変形して実施することができる。
【０１１３】
例えば、ＬＡＮ５０については、ストレージエリアネットワーク４０内にも持つことが可能である。また、共有ディスク装置３０については、図１のように１つでなく複数備えることもできるし、共有ディスク装置のファイルについて複数存在してもよい。
【０１１４】
【発明の効果】
以上説明したように本発明のストレージエリアネットワーク上の共有ディスク装置へのアクセスシステムによれば、以下に述べるような優れた効果が得られる。
【０１１５】
ストレージエリアネットワーク内の共有ファイルシステムに高速にアクセスする処理をカーネルの処理と分離することができる。よって、クライアントのストレージエリアネットワークへのアクセス機能をカーネルへの改造をすることなく実装でき、プラットフォームへの移植の工数を削減でき、また、ストレージエリアネットワークへのアクセスを行うためにカーネルのバージョンごとに実装をやりなおすといった不都合もなくなる。
【０１１６】
また、カーネルにストレージエリアネットワークのアクセス機能を実装しないので、バグがあった場合でも、ストレージエリアネットワークのシステム全体に影響を与えることがなくなる。
【０１１７】
その理由は、ダイナミックリンクライブラリを使用して、データアクセス機能をユーザプログラムの一部として実装すること、特権モードでアクセスしなければならないＲａｗＩＯ処理を、代理ｏｐｅｎデーモンを配置することで回避すること、ネットワークファイルシステムのファイルハンドルを取得するデーモンをサーバホストに配置したためである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態によるストレージエリアネットワーク上の共有ディスク装置へのアクセスシステムの全体構成示すブロック図である。
【図２】本発明の第１の実施の形態によるサーバホストとクライアントホストの内部構成を示すブロック図である。
【図３】本発明の第１の実施の形態によるアクセスシステムにおいてユーザプログラムが共有ディスク装置上のファイルをオープンする場合の動作を説明するフローチャートである。
【図４】本発明の第１の実施の形態によるアクセスシステムにおいてユーザプログラムが共有ディスク装置上のファイルをリードする場合の動作を説明するフローチャートである。
【図５】本発明の第１の実施の形態によるアクセスシステムにおいてユーザプログラムが共有ディスク装置上のファイルにライトする場合の動作を説明するフローチャートである。
【図６】本発明の第１の実施の形態によるアクセスシステムにおいてユーザプログラムが共有ディスク装置上のファイルをクローズする場合の動作を説明するフローチャートである。
【符号の説明】
１０：サーバホスト
２０：クライアントホスト
３０：共有ディスク装置
４０：ストレージエリアネットワーク
５０：ＬＡＮ
６０：共有ファイルシステム
７０：メタデータ
８０：ファイル
１０１：カーネル機能
１０２：ファイルハンドル取得デーモン
１０１１：共有ファイルシステムサーバ機構
１０１２：ファイルシステム制御機構
１０１３：ＳＣＳＩドライバ
２０１：ユーザプログラム
２０２：共有ファイルシステムクライアントＩＯ発行処理部
２０３：カーネル機能
２０５：標準ＩＯ発行処理部
２０６：代理ｏｐｅｎデーモン
２０１０：メモリ領域
２０２１：メモリ領域
２０３２：バッファ
２０３１：ＲａｗＩＯドライバ
２０３２：バッファ
２０３３：ＳＣＳＩドライバ
２０３４：ソケット機構
【図１】
2005018643.tif 000003
【図２】
2005018643.tif 000004
【図３】
2005018643.tif 000005
【図４】
2005018643.tif 000006
【図５】
2005018643.tif 000007
【図６】
2005018643.tif 000008