(57)【特許請求の範囲】
【請求項１】
データ格納手段に格納されているデータを予めキャッシュするキャッシュ格納手段と、前記キャッシュ格納手段にキャッシュされたデータに対応付けて当該キャッシュデータの内容を要約して生成した識別子を予め保持するキャッシュデータテーブルと、キャッシュインデックステーブルとを備えるキャッシュ装置に適用されるキャッシュ方法であって、
ユーザの操作に応じて運用モードが設定されている場合に、
前記データ格納手段に格納されるデータ、及び、当該データと他のデータとの間の配置関係を示すインデックスを入力するステップと、
前記入力されたデータの内容を要約して識別子を生成するステップと、
前記生成された識別子が前記キャッシュデータテーブルに保持されているかを判定するステップと、
前記生成された識別子が保持されていると判定された場合、前記入力されたインデックスに対応付けて当該識別子を前記キャッシュインデックステーブルに登録するステップと
を具備することを特徴とするキャッシュ方法。
【請求項２】
前記判定するステップにおいて、前記生成された識別子が保持されていないと判定された場合、前記入力されたインデックスに対応付けて前記キャッシュインデックステーブルに保持されている識別子を無効とすることを特徴とする請求項１記載のキャッシュ方法。
【請求項３】
前記ユーザの操作に応じて設定モードが設定されている場合に、
前記データ格納手段に格納されるデータであって、ユーザによって指定されたデータを入力するステップと、
前記ユーザによって指定されたデータの内容を要約して識別子を生成するステップと、
前記ユーザによって指定されたデータを前記キャッシュ格納手段にキャッシュするステップと、
前記ユーザによって指定されたデータの内容を要約して生成した識別子を前記キャッシュされた当該データに対応付けて前記キャッシュデータテーブルに登録するステップと
を更に具備することを特徴とする請求項１記載のキャッシュ方法。
【請求項４】
前記ユーザの操作に応じて設定モードが設定されている場合に、
ユーザの操作に応じて、データ格納手段に格納されているデータの読み込みを要求するための読み込み要求を発行するステップと、
前記発行された読み込み要求に応じて、前記データ格納手段からデータを読み込むステップと、
前記読み込まれたデータの内容を要約して識別子を生成するステップと、
前記読み込まれたデータを前記キャッシュ格納手段にキャッシュするステップと、
前記生成された識別子を前記キャッシュされたデータに対応付けて前記キャッシュデータテーブルに登録するステップと
を更に具備することを特徴とする請求項１記載のキャッシュ方法。
【請求項５】
データ格納手段に格納されているデータの内容を要約して生成した識別子を予め保持するキャッシュデータテーブルと、キャッシュ格納手段と、キャッシュインデックステーブルとを備えるキャッシュ装置に適用されるキャッシュ方法であって、
ユーザの操作に応じて運用モードが設定されている場合に、
前記データ格納手段に格納されるデータ、及び、当該データと他のデータとの間の配置関係を示すインデックスを入力するステップと、
前記入力されたデータの内容を要約して識別子を生成するステップと、
前記生成された識別子が前記キャッシュデータテーブルに保持されているかを判定するステップと、
前記生成された識別子が保持されていると判定された場合、前記入力されたデータを前記キャッシュ格納手段にキャッシュするステップと、
前記キャッシュされたデータを、前記生成された識別子に対応付けて前記キャッシュデータテーブルに登録するステップと、
前記入力されたインデックスに対応付けて前記生成された識別子を前記キャッシュインデックステーブルに登録するステップと
を具備することを特徴とするキャッシュ方法。
【請求項６】
前記判定するステップにおいて、前記生成された識別子が保持されていないと判定された場合、前記入力されたインデックスに対応付けて前記キャッシュインデックステーブルに保持されている識別子を無効とすることを特徴とする請求項５記載のキャッシュ方法。
【請求項７】
前記ユーザの操作に応じて設定モードが設定されている場合に、
前記データ格納手段に格納されるデータであって、ユーザによって指定されたデータを入力するステップと、
前記ユーザによって指定されたデータの内容を要約して識別子を生成するステップと、
前記ユーザによって指定されたデータの内容を要約して生成した識別子を前記キャッシュデータテーブルに登録するステップと
を更に具備することを特徴とする請求項５記載のキャッシュ方法。
【請求項８】
前記ユーザの操作に応じて設定モードが設定されている場合に、
ユーザの操作に応じて、データ格納手段に格納されているデータの読み込みを要求する読み込み要求を発行するステップと、
前記発行された読み込み要求に応じて、前記データ格納手段からデータを読み込むステップと、
前記読み込まれたデータの内容を要約して識別子を生成するステップと、
前記生成された識別子を前記キャッシュデータテーブルに登録するステップと
を更に具備することを特徴とする請求項５記載のキャッシュ方法。
【請求項９】
前記ユーザの操作に応じて運用モードが設定されている場合に、
前記データ格納手段に格納されているデータの読み込みを要求するための、当該データと他のデータとの間の配置関係を示すインデックスを含む読み込み要求を入力するステップと、
前記入力された読み込み要求に含まれるインデックスに対応付けて前記キャッシュインデックステーブルに識別子が保持されているかを判定するステップと、
前記キャッシュインデックステーブルに識別子が保持されていると判定された場合、前記キャッシュデータテーブルに当該識別子が保持されているかを判定するステップと、
前記キャッシュデータテーブルに識別子が保持されていると判定された場合、当該キャッシュデータテーブルによって当該識別子に対応付けられているデータを、前記キャッシュ格納手段から取得するステップと、
前記取得されたデータを、前記入力されたデータ読み込み要求の要求元に対して送信するステップと
を更に具備することを特徴とする請求項１または５のいずれか１項に記載のキャッシュ方法。
【請求項１０】
ユーザの操作に応じて、前記キャッシュ格納手段にキャッシュされているデータ、前記キャッシュデータテーブルまたは前記キャッシュデータテーブルに保持されている識別子を削除するステップを更に具備することを特徴とする請求項１または５のいずれか１項に記載のキャッシュ方法。
【請求項１１】
前記キャッシュ格納手段、前記キャッシュデータテーブルまたは前記キャッシュインデックステーブルを前記キャッシュ装置の電源遮断時に当該キャッシュ装置の外部に退避させるステップと、
前記退避させたキャッシュ格納手段、キャッシュデータテーブルまたはキャッシュインデックステーブルを、前記キャッシュ装置の起動時に取得するステップと
を更に具備することを特徴とする請求項１または５のいずれか１項に記載のキャッシュ方法。
【請求項１２】
データ格納手段に格納されているデータを予めキャッシュするキャッシュ格納手段と、
前記キャッシュ格納手段にキャッシュされたデータに対応付けて当該キャッシュデータの内容を要約して生成した識別子を予め保持するキャッシュデータテーブルと、
ユーザの操作に応じて運用モードが設定されている場合に、前記データ格納手段に格納されるデータ、及び、当該データと他のデータとの間の配置関係を示すインデックスを入力する入力手段と、
前記入力されたデータの内容を要約して識別子を生成する識別子生成手段と、
前記生成された識別子が前記キャッシュデータテーブルに保持されているかを判定する判定手段と、
前記生成された識別子が保持されていると判定された場合、前記入力されたインデックスに対応付けて当該識別子を前記キャッシュインデックステーブルに登録する登録手段と
を具備することを特徴とするキャッシュ装置。
【請求項１３】
前記キャッシュ格納手段、前記キャッシュデータテーブルまたは前記キャッシュインデックステーブルは、不揮発性の記憶領域に格納されることを特徴とする請求項１２記載のキャッシュ装置。
【請求項１４】
前記キャッシュ格納手段、前記キャッシュデータテーブルまたは前記キャッシュインデックステーブルは、揮発性の記憶領域に格納されることを特徴とする請求項１２記載のキャッシュ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びクライアント装置間で転送されるデータをキャッシュするキャッシュ方法及びキャッシュ装置に関する。
【背景技術】
【０００２】
近年、例えば企業や官公庁におけるクライアントＰＣ（以下、クライアント装置と表記）からの情報漏洩が問題となっており、当該クライアント装置から情報の持ち出しをさせないようにするための方法の１つとして、シンクライアントシステムが注目されている。
【０００３】
シンクライアントシステムにおいては、例えばクライアント装置には最低限の機能しか持たせず、当該クライアント装置によって利用されるデータ（アプリケーションソフトまたはファイル等）は情報漏洩のおそれが少ないサーバルーム等に配置されたストレージ装置に格納される。このような構成とすることで、クライアント装置からの情報漏洩を防止することができる。
【０００４】
ところで、シンクライアントシステムは、その実現方法からいくつかの種類に分類できる。その実現方法の１つに、クライアント装置及びストレージ装置間でＮＦＳ（Network File System）、ＣＩＦＳ（Common Internet File System）またはｉＳＣＳＩ（Internet Small Computer System Interface）等の通信プロトコルを利用することで、当該クライアント装置が当該ストレージ装置から直接ＯＳ（Operation System）をブートするというネットワークブート型シンクライアントシステムがある。
【０００５】
このネットワークブート型シンクライアントシステムにおいては、例えば多数のクライアント装置が一斉にネットワークブートを行った場合、ストレージ装置へのアクセスが集中するためブート性能が低下することがある。また、ストレージ装置とクライアント装置との間が例えばＷＡＮ（Wide Area Network）で接続されているようなネットワークブート型シンクライアントシステムにおいては、当該ＷＡＮは例えばＬＡＮ（Local Area Network）と比較して帯域が細く遅延が大きい回線であるため、その回線速度の遅さが課題となり当該システムの導入は難しい。
【０００６】
そこで、例えばＷＷＷ（World Wide Web）の世界におけるプロシキ（Proxy）のように、ストレージ装置とクライアント装置との間に中継装置を導入し、当該中継装置上でキャッシュを行うことによりストレージ装置への負荷を分散させることで性能を向上させる技術（以下、先行技術と表記）が開示されている（例えば、特許文献１を参照）。
【０００７】
しかしながら、上記した先行技術においては、例えば中継装置上でキャッシュされたデータの漏洩（キャッシュからの情報漏洩）を防止する必要がある。
【０００８】
このキャッシュからの情報漏洩に対する対策としては、例えば中継装置上においてキャッシュされるデータを、漏洩しても問題のないデータ、例えばＯＳのファイルまたはアプリケーションプログラムファイル等に限定するということが考えられる。
【０００９】
これを簡単に実現するためには、例えば漏洩しても問題がなく、かつ、キャッシュの効果が得られるようなデータ（つまり、キャッシュ可能なデータ）をシステム管理者が予め選別し、当該データを中継装置にキャッシュとして予め登録（設定）しておく方法（以下、第１の方法と表記）が考えられる。また、別の方法として、例えばストレージ装置に格納されているデータの各々にキャッシュの許可／不許可を設定しておくという方法（以下、第２の方法と表記）が考えられる。
【特許文献１】特開２００５−１４９３３４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上記した第１及び第２の方法のようにキャッシュ可能なデータ（キャッシュデータ）を予め設定しておく場合、例えばユーザ（あるいはクライアント装置）毎にボリュームイメージをストレージ装置内に用意して運用するようなネットワークブート型シンクライアントシステムにおいては、そのキャッシュデータについても例えばユーザ毎に個別に設定（用意）する必要がある。
【００１１】
この場合、上記した第１の方法によりユーザ毎に個別にキャッシュデータを登録する作業は、システム管理者にとっては大きな負担となる。また、上記した第２の方法の場合も、同様に、キャッシュの許可／不許可を設定する作業はシステム管理者にとっては大きな負担となる。
【００１２】
本発明の目的は、ユーザ毎に個別に設定することなく、全てのユーザが利用できるキャッシュデータを設定することが可能なキャッシュ方法及びキャッシュ装置を提供することにある。
【課題を解決するための手段】
【００１３】
本発明の１つの態様によれば、データ格納手段に格納されているデータを予めキャッシュするキャッシュ格納手段と、前記キャッシュ格納手段にキャッシュされたデータに対応付けて当該キャッシュデータの内容を要約して生成した識別子を予め保持するキャッシュデータテーブルと、キャッシュインデックステーブルとを備えるキャッシュ装置に適用されるキャッシュ方法であって、ユーザの操作に応じて運用モードが設定されている場合に、前記データ格納手段に格納されるデータ、及び、当該データと他のデータとの間の配置関係を示すインデックスを入力するステップと、前記入力されたデータの内容を要約して識別子を生成するステップと、前記生成された識別子が前記キャッシュデータテーブルに保持されているかを判定するステップと、前記生成された識別子が保持されていると判定された場合、前記入力されたインデックスに対応付けて当該識別子を前記キャッシュインデックステーブルに登録するステップとを具備するキャッシュ方法が提供される。
【発明の効果】
【００１４】
本発明によれば、ユーザ毎に個別に設定することなく、全てのユーザが利用できるキャッシュデータを設定することを可能とする。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照して、本発明の各実施形態について説明する。
【００１６】
［第１の実施形態］
図１は、本発明の第１の実施形態に係る中継装置（キャッシュ装置）のハードウェア構成を示すブロック図である。図１に示すように、コンピュータ１０は、例えばハードディスクドライブ（ＨＤＤ）のような外部記憶装置２０と接続されている。この外部記憶装置２０は、コンピュータ１０によって実行されるプログラム２１を格納する。コンピュータ１０及び外部記憶装置２０は、中継装置３０を構成する。
【００１７】
図２は、本実施形態に係る中継装置３０の主として機能構成を示すブロック図である。中継装置３０は、クライアント装置４０及びストレージ装置５０と通信可能に接続されている。中継装置３０とクライアント装置４０との間では、例えばｉＳＣＳＩ（Internet Small Computer System Interface）による通信が実行される。中継装置３０とストレージ装置５０との間についても同様である。
【００１８】
この中継装置３０、クライアント装置４０及びストレージ装置５０は、例えばネットワークブート型シンクライアントシステムを構成する。
【００１９】
クライアント装置４０は、例えばストレージ装置５０に対してアクセスする装置である。また、クライアント装置４０は、例えばｉＳＣＳＩ（ＳＣＳＩ）でのイニシエータ（Initiator）としての機能を有する。なお、ストレージ装置５０に対してアクセスするクライアント装置は、複数存在する。図２においては、便宜的に、クライアント装置４０以外のクライアント装置については省略されている。上記したネットワークブート型シンクライアントシステムを構成するクライアント装置４０を含む複数のクライアント装置のオペレーティングシステム（ＯＳ：Operating System）またはアプリケーションプログラムの環境は統一されているものとする。
【００２０】
ストレージ装置５０は、各種データを格納するディスクボリュームを備える。ストレージ装置５０は、クライアント装置４０に対して当該ストレージ装置５０のディスクボリュームへのアクセスを提供する。ストレージ装置５０は、例えばｉＳＣＳＩ（ＳＣＳＩ）でのターゲット（Target）としての機能を有する。なお、ストレージ装置５０に備えられているディスクボリュームは、例えばクライアント装置４０（を利用するユーザ）毎に用意されている。つまり、クライアント装置４０は、ストレージ装置５０内に備えられている自己のディスクボリュームに対してアクセスすることができる。
【００２１】
中継装置３０は、例えばクライアント装置４０及びストレージ装置５０の通信を中継する。中継装置３０は、例えばユーザの操作に応じて、設定モードまたは運用モードのいずれかの動作モードが設定される。中継装置３０では、設定された動作モードに応じた処理が実行される。設定モードが設定されている場合には、中継装置３０は、キャッシュデータの設定（登録）処理を行う。一方、運用モードが設定されている場合には、中継装置３０は、設定モード時に設定されたキャッシュデータを利用する処理を実行する。この中継装置３０に設定される動作モード（設定モード及び運用モード）は、例えば当該中継装置３０の管理者等の操作に応じて切り替えられる。また、この切り替えを、中継する全ての、または任意のｉＳＣＳＩセッションに対して実行したり、ある期間だけ指定した動作モードで動作するようにすることも可能である。なお、設定モードまたは運用モードが設定されている際の中継装置３０の各処理の詳細については後述する。
【００２２】
クライアント装置４０からは、中継装置３０のクライアント装置４０側インタフェイスを指定してストレージ装置５０への接続を試みる。それを受け付けた中継装置３０では、ストレージ装置５０側インタフェイスからストレージ装置５０に対して接続を行う。これにより、クライアント装置４０とストレージ装置５０間の接続が確立される。
【００２３】
なお、クライアント装置４０側／ストレージ装置５０側インタフェイスは物理的に１つのインタフェイスであってもよい。例えばｉＳＣＳＩであれば、ＴＣＰ／ＩＰのＩＰアドレスやポート番号で別インタフェイスであることが識別可能であれば十分である。
【００２４】
中継装置３０は、中継部３１、キャッシュ管理部３２及び識別子生成部３３を含む。本実施形態において、中継部３１、キャッシュ管理部３２及び識別子生成部３３は、図１に示すコンピュータ１０が外部記憶装置２０に格納されているプログラム２１を実行することにより実現されるものとする。このプログラム２１は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラム２１が、例えばネットワークを介してコンピュータ１０にダウンロードされても構わない。
【００２５】
また、中継装置３０は、キャッシュ格納部２２、キャッシュデータテーブル２３及びキャッシュインデックステーブル２４を含む。本実施形態において、キャッシュ格納部２２、キャッシュデータテーブル２３及びキャッシュインデックステーブル２４は、例えば外部記憶装置２０（不揮発性の記憶領域）に格納される。
【００２６】
中継部３１は、例えばクライアント装置４０及びストレージ装置５０間でｉＳＣＳＩ−ＰＤＵを中継する。このｉＳＣＳＩ−ＰＤＵが、データ転送に関わるもの（ＲＥＡＤ＆ＳＣＳＩ  ＤＡＴＡＩＮ／ＷＲＩＴＥ＆ＤＡＴＡＯＵＴ）であれば、キャッシュ管理部３２を通してキャッシュへのアクセスが実行される。一方、このｉＳＣＳＩ−ＰＤＵがデータ転送に関わらないものであれば、当該ＰＤＵは、そのまま相手先に対して中継部３１により転送される。
【００２７】
ここで、例えばクライアント装置４０がストレージ装置５０からデータの読み込み（リード）を行う場合を想定する。この場合、クライアント装置４０は、リード要求（読み込み要求）を中継装置３０に送信する。このリード要求には、例えば読み込み（リード）の対象となるデータ（読み込みデータ）を示すインデックスが含まれる。インデックスは、例えば読み込みデータのファイル名または当該読み込みデータが格納されているストレージ装置５０内のアドレス等を含む。中継部３１は、クライアント装置４０によって送信されたリード要求を入力する。中継部３１は、入力されたリード要求をストレージ装置５０に転送する。これにより、中継部３１は、転送されたリード要求に含まれるインデックスによって示される読み込みデータをストレージ装置５０から入力する（読み込む）。
【００２８】
一方、例えばクライアント装置４０がストレージ装置５０に対してデータの書き込み（ライト）を行う場合を想定する。この場合、クライアント装置４０は、ライト要求（書き込み要求）を中継装置３０に送信する。このライト要求には、例えば書き込み（ライト）の対象となるデータ（書き込みデータ）及び当該書き込みデータを示すインデックスが含まれる。インデックスは、例えば書き込みデータのファイル名又は当該書き込みデータの書き込み先であるストレージ装置５０内のアドレス等を含む。中継部３１は、クライアント装置４０によって送信されたライト要求を入力する。中継部３１は、入力されたライト要求をストレージ装置５０に転送する。これにより、ストレージ装置５０に書き込みデータが書き込まれる。
【００２９】
キャッシュ管理部３２は、例えば読み込みデータまたは書き込みデータ（以下、対象データと表記）に対するキャッシュ制御を実行する。
【００３０】
上記した設定モードが中継装置３０に対して設定されている場合には、キャッシュ管理部３２は、対象データをキャッシュデータとしてキャッシュ格納部２２にキャッシュ（設定）する。このキャッシュ格納部２２は、例えばストレージ装置５０に格納されているデータをキャッシュするために用いられる。
【００３１】
また、キャッシュ管理部３２は、キャッシュ格納部２２にキャッシュされたデータ（キャッシュデータ）の内容に対応する識別子を、当該データに対応付けてキャッシュデータテーブル２３に登録（設定）する。
【００３２】
なお、設定モード時においてキャッシュ格納部２２及びキャッシュデータテーブル２３に設定されるキャッシュデータは、例えばＯＳのファイルまたはアプリケーションプログラムファイルのような漏洩しても問題がないようなデータに限定される。
【００３３】
一方、運用モードが中継装置３０に対して設定されている場合には、キャッシュ管理部３２は、対象データの内容に対応する識別子がキャッシュデータテーブル２３に保持されているか否かを判定する。キャッシュ管理部３２は、対象データの内容に対応する識別子がキャッシュデータテーブル２３に保持されている場合には、当該対象データを示すインデックスに対応付けて当該識別子をキャッシュインデックステーブル２４に登録する処理を実行する。また、キャッシュ管理部３２は、対象データの内容に対応する識別子がキャッシュデータテーブル２３に保持されていない場合には、当該対象データを示すインデックスに対応付けてキャッシュインデックステーブル２４に保持されている識別子を削除（無効化）する。
【００３４】
また、運用モードが中継装置３０に対して設定されている場合、キャッシュ管理部３２は、中継部３１によって入力されたリード要求に含まれるインデックスに対応付けてキャッシュインデックステーブル２４に識別子が保持されているか否かを判定する。キャッシュ管理部３２は、識別子が保持されていると判定された場合、当該識別子がキャッシュデータテーブル２３に保持されているか否かを判定する。これにより、キャッシュ管理部３２は、例えばクライアント装置４０からリード要求が送信された（つまり、中継部３１によってリード要求が入力された）場合に、キャッシュヒット判定処理を実行する。キャッシュ管理部３２は、キャッシュデータテーブル２３に識別子が保持されていると判定された場合、キャッシュヒットと判定する。この場合、キャッシュ管理部３２は、キャッシュデータテーブル２３によって当該識別子に対応付けられているデータを、キャッシュ格納部２２から取得する。キャッシュ管理部３１は、取得されたデータを、リード要求に対する応答として中継部３１を介してクライアント装置４０に送信する。
【００３５】
なお、キャッシュ管理部３２は、例えばユーザによって指定されたキャッシュデータをキャッシュ格納部２２から削除（無効化）する機能を有する。また、キャッシュ管理部３２は、ユーザによって指定された識別子をキャッシュデータテーブル２３及びキャッシュインデックステーブル２４から削除する機能を有する。
【００３６】
識別子生成部３３は、キャッシュ管理部３２から例えば対象データを受け取る。識別子生成部３３は、受け取られた例えば対象データの内容に対応する識別子としてハッシュ値を生成する。このとき、識別子生成部３３は、識別子の生成に例えばＭＤ５またはＳＨＡ１のような予め定められたハッシュ関数を用いてハッシュ値を生成する。識別子生成部３３によって生成されたハッシュ値は、キャッシュ管理部３２によって例えばキャッシュデータテーブル２３及びキャッシュインデックステーブル２４に登録される。
【００３７】
上記したキャッシュデータテーブル２３には、例えばキャッシュ格納部２２にキャッシュされたキャッシュデータに対応付けて当該キャッシュデータの内容に対応する識別子（ハッシュ値）が保持される。
【００３８】
また、キャッシュインデックステーブル２４には、ストレージ装置５０に格納されているデータを示すインデックスに対応付けて当該データの内容に対応するハッシュ値が保持される。以下では、例えばデータが読み込まれる、または書き込まれるディスクボリュームのシリアル番号及び論理ブロックアドレス（ＬＢＡ：Logical Block Address）の組合せをインデックスとする。シリアル番号は、ストレージ装置３０内にあるディスクボリュームを識別するための番号であり、ストレージ装置３０に対して例えばＣＤＢ（Command Descriptor Block）を発行することで取得される。また、ｉＳＣＳＩの場合は、ｉＳＣＳＩ−ＩｎｉｔｉａｔｏｒＮａｍｅ及びＬＵＮ（Logical Unit Number）の組をシリアル番号として利用することも可能であり、様々な実現方法がある。
【００３９】
なお、キャッシュインデックステーブル２４は、ストレージ装置５０内に備えられているディスクボリューム毎、つまり、当該ディスクボリュームにアクセス可能なクライアント装置４０（を利用するユーザ）毎に用意されている。つまり、ストレージ装置５０内に備えられているディスクボリュームの各々に対応するキャッシュインデックステーブル２４が存在する。また、例えばストレージ装置５０内に新たにディスクボリュームが作成された場合には、当該作成されたディスクボリュームに対応するキャッシュインデックステーブル２４が作成される。
【００４０】
また、キャッシュデータテーブル２３及びキャッシュインデックステーブル２４に登録されるハッシュ値は、例えば論理ブロックアドレスのａセクタ（５１２バイトの倍数）単位のデータのハッシュ値である。以下では、便宜的に１セクタ（５１２バイト）単位であるものとする。
【００４１】
また、本実施形態ではｉＳＣＳＩによるブロック型転送プロトコルを例として、キャッシュデータテーブル１１３及びキャッシュインデックステーブル１１４の説明を行うが、当該ｉＳＣＳＩに限定されるわけではない。例えばインデックスとしてパス名等を利用することで、ＮＦＳ（Network File System）またはＣＩＦＳ（Common Internet File System）等のファイル転送プロトコルにも適用可能である。
【００４２】
図３は、キャッシュデータテーブル２３のデータ構造の一例を示す。図３に示すように、キャッシュデータテーブル２３には、キャッシュデータ（格納先のアドレス）及び識別子が対応付けて登録されている。このアドレス（キャッシュデータのアドレス）は、キャッシュデータがキャッシュ格納部２２に格納されているアドレスであり、例えば８バイトで表される。また、識別子は、予め定められたハッシュ関数（例えば、ＳＨＡ１）を用いて、対応付けられているキャッシュデータの内容から生成されたハッシュ値である。また、このハッシュ値は、例えば２０バイトで表される。
【００４３】
図３に示す例では、キャッシュデータのアドレス「０ｘ１５Ａ０００１００００２００００（８バイト）」に対応付けてハッシュ値「０ｘ５Ｃ３ＥＢ８００６６４２０００２ＢＣ３ＤＣＣ７ＣＡ４ＡＢ６ＥＦＡＤ７ＥＤ４ＡＥ５（２０バイト）」が登録されている。キャッシュデータのアドレス「０ｘ１５Ａ０００１００００２０２００」に対応付けてハッシュ値「０ｘＦ２８Ｅ８ＢＤＢ１Ｆ９５０３３Ｄ３１Ｄ３３２ＡＤ１Ｃ１９２Ｅ５２６３６８７Ｆ２７」が登録されている。また、キャッシュデータのアドレス「０ｘ１５Ａ０００１００００２０４００」に対応付けてハッシュ値「０ｘＢ３７６８８５ＡＣ８４５２Ｂ６ＣＢＦ９ＣＥＤ８１Ｂ１０８０ＢＦＤ５７０Ｄ９Ｂ９１」が登録されている。
【００４４】
図４は、キャッシュインデックステーブル２４のデータ構造の一例を示す。図４に示すように、キャッシュインデックステーブル２４には、ディスクボリュームのシリアル番号、論理ブロックアドレス（ＬＢＡ）及び識別子が登録されている。キャッシュインデックステーブル２４では、ディスクボリュームのシリアル番号及び論理ブロックアドレスの組合せをインデックスとしている。また、キャッシュインデックステーブル２４は、ディスクボリューム（ディスクボリュームのシリアル番号）毎に存在する。
【００４５】
また、図４に示すように、キャッシュインデックステーブル２４には、シリアル番号によって識別されるディスクボリューム内の論理ブロックアドレス毎に対応付けて識別子が登録されている。
【００４６】
ここでは、ディスクボリュームのシリアル番号は、例えば１０バイトで表される。また、論理ブロックアドレスは、４バイトで表される。識別子は、ディスクボリュームのシリアル番号及び論理ブロックアドレスによって示される（論理ブロックアドレスに格納されている）データの内容から、予め定められたハッシュ関数（例えば、ＳＨＡ１）を用いて生成されたハッシュ値である。このハッシュ値は、例えば２０バイトで表される。
【００４７】
図４には、シリアル番号が「０ｘＦ４ＢＡＡＣＤＤＤ８ＦＡ４ＡＣＢＦ８３４」によって識別されるディスクボリュームに対応するキャッシュインデックステーブル２４が示されている。図４に示す例では、論理ブロックアドレス「０ｘ００００００００（４バイト）」に対応付けてハッシュ値「０ｘ５Ｃ３ＥＢ８００６６４２０００２ＢＣ３ＤＣＣ７ＣＡ４ＡＢ６ＥＦＡＤ７ＥＤ４ＡＥ５（２０バイト）」が登録されている。論理ブロックアドレス「０ｘ０００００００１」に対応付けてハッシュ値「０ｘＦ２８Ｅ８ＢＤＢ１Ｆ９５０３３Ｄ３１Ｄ３３２ＡＤ１Ｃ１９２Ｅ５２６３６８７Ｆ２７」が登録されている。論理ブロックアドレス「０ｘ０００００００３」に対応付けてハッシュ値「０ｘＢ３７６８８５ＡＣ８４５２Ｂ６ＣＢＦ９ＣＥＤ８１Ｂ１０８０ＢＦＤ５７０Ｄ９Ｂ９１」が登録されている。また、論理ブロックアドレス「０ｘ０００００００７」に対応付けてハッシュ値「０ｘ５Ｃ３ＥＢ８００６６４２０００２ＢＣ３ＤＣＣ７ＣＡ４ＡＢ６ＥＦＡＤ７ＥＤ４ＡＥ５」が登録されている。
【００４８】
次に、図５を参照して、キャッシュデータテーブル２３及びキャッシュインデックステーブル２４の関係について説明する。なお、図５においては、上記した図３及び図４とは異なり、キャッシュデータテーブル２３及びキャッシュインデックステーブル２４に保持（登録）されているディスクボリュームのシリアル番号、論理ブロックアドレス、識別子（ハッシュ値）及びデータのアドレスについては、便宜的に簡略化して記載されている。
【００４９】
図５では、ディスクボリュームのシリアル番号「１」によって識別されるストレージ装置５０内のディスクボリュームに対応するキャッシュインデックステーブル２４について説明する。
【００５０】
このキャッシュインデックステーブル２４には、論理ブロックアドレス「１」に対応付けて識別子「ハッシュ値１」が登録されている。また、論理ブロックアドレス「２」に対応付けて識別子「ハッシュ値２」、論理ブロックアドレス「３」に対応付けて識別子「ハッシュ値３」、論理ブロックアドレス「４」に対応付けて識別子「ハッシュ値１」が登録されている。つまり、論理ブロックアドレス「１」に格納されているデータ及び論理ブロックアドレス「４」に格納されているデータは同一データである。換言すれば、論理ブロックアドレス「１」及び論理ブロックアドレス「４」は、同一データをポイントしている状態である。
【００５１】
一方、キャッシュデータテーブル２３には、識別子「ハッシュ値１」に対応付けてキャッシュデータのアドレスとして「アドレス１」が登録されている。また、識別子「ハッシュ値２」に対応付けてキャッシュデータのアドレスとして「アドレス２」、識別子「ハッシュ値３」に対応付けてキャッシュデータのアドレスとして「アドレス３」が登録されている。
【００５２】
また、キャッシュ格納部２２の「アドレス１」にはデータＡが格納されている。キャッシュ格納部２２の「アドレス２」にはデータＢが格納されている。また、キャッシュ格納部２２の「アドレス３」にはデータＣが格納されている。
【００５３】
なお、データＡは、キャッシュ格納部２２の「アドレス１」にキャッシュされているデータであり、ストレージ装置５０のディスクボリュームシリアル番号「１」の論理ブロックアドレス「１」及び論理ブロックアドレス「４」に格納されているデータ（と同一）である。
【００５４】
データＢは、キャッシュ格納部２２の「アドレス２」にキャッシュされているデータであり、ストレージ装置５０のディスクボリュームシリアル番号「１」の論理ブロックアドレス「２」に格納されているデータ（と同一）である。
【００５５】
また、データＣは、キャッシュ格納部２２の「アドレス３」にキャッシュされているデータであり、ストレージ装置５０のディスクボリュームシリアル番号「１」の論理ブロックアドレス「３」に格納されているデータ（と同一）である。
【００５６】
上記したように、キャッシュデータテーブル２３及びキャッシュインデックステーブル２４は、識別子（ハッシュ値）により関連付けられている。これにより、例えばクライアント装置４０からストレージ装置５０に対してリード要求があった場合には、中継装置３０は、当該リード要求に含まれるインデックス（ディスクボリュームシリアル番号及び論理ブロックアドレス）からキャッシュ格納部２２に格納（キャッシュ）されているキャッシュデータを特定できる。
【００５７】
次に、図６のフローチャートを参照して、前述した設定モードが設定されている場合における中継装置３０の処理手順について説明する。この設定モードは、前述したように例えばキャッシュデータを設定（登録）する際の動作モードである。
【００５８】
本実施形態に係る中継装置３０では、例えば中継装置３０の管理者（ユーザ）の操作に応じてクライアント装置４０から送信されたリード要求に応じて対象データをストレージ装置５０から読み込み、当該対象データをキャッシュデータとして登録する処理が実行される。換言すれば、例えばクライアント装置４０がストレージ装置５０から対象データを読み込むことにより、ネットワークブートを実行することでキャッシュデータが登録される。
【００５９】
この場合、中継装置３０の管理者（ユーザ）は、クライアント装置４０を操作することによって、ストレージ装置５０に格納されているデータのうち例えば漏洩しても問題のないデータであって、かつ、キャッシュデータとして登録するデータを対象データとして指定する。
【００６０】
まず、中継装置３０に含まれる中継部３１は、クライアント装置４０によって送信されたリード要求を入力（受信）する（ステップＳ１）。このリード要求には、中継装置３０の管理者によって指定されたデータ（対象データ）を示すインデックスが含まれる。このインデックスには、対象データが格納されているストレージ装置５０内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。
【００６１】
中継部３１は、入力されたリード要求をストレージ装置５０に対して転送（送信）する（ステップＳ２）。
【００６２】
ストレージ装置５０は、中継部３１によって転送されたリード要求に応じて、対象データを中継装置３０に返す。これにより、中継装置３０に含まれる中継部３１は、対象データをストレージ装置５０から読み込む（ステップＳ３）。この読み込まれた対象データは、リード要求に含まれるインデックスによって示されるデータである。具体的には、ストレージ装置５０内に備えられるディスクボリュームのうち、リード要求に含まれるディスクボリュームシリアル番号によって識別されるディスクボリューム内の当該リード要求に含まれる論理ブロックアドレスに格納されているデータである。
【００６３】
次に、識別子生成部３３は、ストレージ装置５０から読み込まれた対象データの内容に対応する識別子としてハッシュ値を生成する（ステップＳ４）。識別子生成部３３は、生成されたハッシュ値をキャッシュ管理部３２に渡す。
【００６４】
キャッシュ管理部３２は、識別子生成部３３から渡されたハッシュ値がキャッシュデータテーブル２３に保持されている（存在する）か否かを判定する（ステップＳ５）。
【００６５】
ハッシュ値がキャッシュデータテーブル２３に保持されていないと判定された場合（ステップＳ５のＮＯ）、キャッシュ管理部３２は、ストレージ装置５０から読み込まれた対象データをキャッシュデータとしてキャッシュ格納部２２にキャッシュ（設定）する（ステップＳ６）。
【００６６】
キャッシュ管理部３２は、識別子生成部３３から渡されたハッシュ値を対象データに対応付けてキャッシュデータテーブル２３に登録（設定）する（ステップＳ７）。これにより、対象データがキャッシュデータとして登録される。
【００６７】
一方、ステップＳ５においてハッシュ値がキャッシュデータテーブル２３に保持されていると判定された場合、対象データは既にキャッシュ格納部２２にキャッシュ（設定）されており、かつ、当該ハッシュ値はキャッシュデータテーブル２３に保持されているため、ステップＳ８の処理が実行される。
【００６８】
中継部３１は、上記したようなキャッシュ管理部３２による処理が実行されると、リード要求の要求元であるクライアント装置４０に対象データを送信する（ステップＳ８）。
【００６９】
上記したように、ネットワークブート型シンクライアントシステムにおいて、例えば中継装置３０管理者が任意のクライアント装置４０を利用してネットワークブートを実行することにより、当該ストレージ装置５０から読み込まれたデータがキャッシュデータとしてキャッシュ格納部２２及びキャッシュデータテーブル２３に設定される。
【００７０】
なお、例えばキャッシュ格納部２２及びキャッシュデータテーブル２３において例えば予め定められた容量を超過した場合については特に記していないが、例えばＬＲＵ（Least Recent Used）等を適用することによって各種データが整理される。
【００７１】
また、ここでは、クライアント装置４０から送信されたリード要求に応じてキャッシュデータが登録されるものとして説明したが、当該クライアント装置４０から送信されたライト要求に応じてキャッシュデータが登録される構成であっても構わない。この場合、ライト要求に含まれる対象データ（書き込みデータ）に対して、上記したステップＳ４〜ステップＳ７の処理が実行される。このとき、ステップＳ５においてハッシュ値がキャッシュデータテーブル２３に保持されていると判定された場合には、ライト要求がストレージ装置５０に送信され、当該ライト要求に含まれる対象データがストレージ装置５０に書き込まれる。
【００７２】
次に、図７のフローチャートを参照して、前述した運用モードが設定されている場合にクライアント装置４０からストレージ装置５０に対してリード要求が送信された際の中継装置３０の処理手順について説明する。この運用モードは、例えば上記した設定モード時に設定されたキャッシュデータを利用する際の動作モードである。
【００７３】
ここでは、上記した設定モードにおいて、キャッシュ格納部２２にキャッシュデータが予め設定されているものとする。また、同様に、キャッシュデータに対応付けて当該キャッシュデータの内容に対応するハッシュ値がキャッシュデータテーブル２３に予め設定されているものとする。なお、中継装置３０に対して運用モードが設定されている場合には、キャッシュ格納部２２及びキャッシュデータテーブル２３への書き込みが保護（つまり、ライトプロテクト）される。
【００７４】
まず、中継装置３０に含まれる中継部３１は、クライアント装置４０によって送信されたリード要求を入力（受信）する（ステップＳ１１）。入力されたリード要求には、読み込みの対象となるデータ（対象データ）を示すインデックスが含まれる。このインデックスには、対象データが格納されているストレージ装置５０内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。
【００７５】
次に、キャッシュ管理部３２は、中継部３１によって入力されたリード要求に含まれるインデックスに基づいて、キャッシュヒット判定処理を実行する（ステップＳ１２）。つまり、キャッシュ管理部３２は、中継部３１によって入力されたリード要求に応じてストレージ装置５０から読み込まれる対象データ対象データがキャッシュデータとしてキャッシュ格納部２２にキャッシュ（設定）されているか否かを判定する。このキャッシュヒット判定処理の詳細については、後述する。
【００７６】
キャッシュヒット判定処理の結果がキャッシュヒットである場合（ステップＳ１３のＹＥＳ）、キャッシュ管理部３２は、キャッシュ格納部２２にキャッシュされている対象データを、リード要求の要求元であるクライアント装置４０に対して送信する（ステップＳ１４）。キャッシュ管理部３２は、中継部３１を介して、対象データを送信する。
【００７７】
一方、キャッシュヒット判定処理の結果がキャッシュミスヒットであると判定された場合（ステップＳ１３のＮＯ）、キャッシュ管理部３２は、中継部３１を介して、リード要求をストレージ装置５０に転送する（ステップＳ１５）。
【００７８】
ストレージ装置５０は、中継部３１によって転送されたリード要求に応じて対象データを中継部３１に返す。これにより、中継部３１は、対象データをストレージ装置５０から読み込む（ステップＳ１６）。
【００７９】
中継部３１は、読み込まれた対象データをリード要求に対する応答として、当該リード要求の要求元であるクライアント装置４０に送信する（ステップＳ１７）。
【００８０】
また、キャッシュ管理部３２は、上記したステップＳ１７においてクライアント装置４０に対してリード要求の応答を行うと同時に、中継部３１によって読み込まれた（入力された）対象データ及び中継部３１によって入力されたリード要求に含まれるインデックスに基づいてキャッシュインデックステーブル２４への登録処理（キャッシュへの登録処理）を実行する（ステップＳ１８）。このキャッシュインデックステーブル２４への登録処理の詳細については、後述する。
【００８１】
次に、図８のフローチャートを参照して、上記したキャッシュヒット判定処理（図７に示すステップ１２の処理）の詳細な処理手順について説明する。
【００８２】
まず、キャッシュ管理部３２は、中継部３１によって入力されたリード要求に含まれるインデックスに基づいて、キャッシュインデックステーブル２４を特定する（ステップＳ２１）。この場合、例えばインデックスに含まれるディスクボリュームシリアル番号によって識別されるディスクボリュームに対応するキャッシュインデックステーブル２４が特定される。
【００８３】
次に、キャッシュ管理部３２は、インデックスに含まれる論理ブロックアドレスに対応付けてキャッシュインデックステーブル２４にハッシュ値が保持されている（存在する）か否かを判定する（ステップＳ２２）。このキャッシュインデックステーブル２４は、上記したステップＳ２１において特定されたキャッシュインデックステーブル２４である。
【００８４】
キャッシュインデックステーブル２４にハッシュ値が保持されていると判定された場合（ステップＳ２２のＹＥＳ）、キャッシュ管理部３２は、当該ハッシュ値をキャッシュインデックステーブル２４から取得する（ステップＳ２３）。
【００８５】
キャッシュ管理部３２は、取得されたハッシュ値がキャッシュデータテーブル２３に保持されているか否かを判定する（ステップＳ２４）。
【００８６】
ここで、取得されたハッシュ値がキャッシュデータテーブル２３に保持されていると判定された場合には、キャッシュデータテーブル２３によって当該ハッシュ値に対応付けられているデータ（対象データ）がキャッシュ格納部２２にキャッシュされている。したがって、取得されたハッシュ値がキャッシュデータテーブル２３に保持されている場合（ステップＳ２４のＹＥＳ）、キャッシュ管理部３２は、キャッシュヒットと判定する。
【００８７】
キャッシュヒットと判定された場合には、対象データがキャッシュ格納部２２から取得され、リード要求の応答としてクライアント装置４０に送信される。
【００８８】
一方、ステップＳ２２においてキャッシュインデックステーブル２４にハッシュ値が保持されていないと判定された場合、キャッシュ管理部３２は、キャッシュミスヒットと判定する。また、ステップＳ２４において、取得されたハッシュ値がキャッシュデータテーブル２３に保持されていないと判定された場合には、キャッシュ管理部３２は、キャッシュミスヒットと判定する。
【００８９】
ここでは、リード要求にはインデックスとして１つの論理ブロックアドレスのみが含まれているものとして説明したが、リード要求に複数の論理ブロックアドレスが含まれている構成であってもよい。この場合、リード要求には、ディスクボリュームシリアル番号及び論理ブロックアドレスに加えて、データ長が含まれる。この場合には、リード要求に含まれる論理ブロックアドレスからデータ長の間に該当する複数の論理ブロックアドレスの全てに対して上記したような処理が実行される。
【００９０】
具体的には、リード要求に含まれる複数の論理ブロックアドレスの各々に対して上記したような処理が実行され、キャッシュヒットと判定された場合には当該論理ブロックアドレスに対応する対象データが例えば出力バッファ上に配置される。このようにして、リード要求に含まれる複数の論理ブロックアドレスの全てについてキャッシュヒットと判定された場合には全体としてキャッシュヒットと判定される。この場合、出力バッファ上に配置された対象データがリード要求の応答としてクライアント装置４０に送信される。
【００９１】
一方、リード要求に含まれる複数の論理ブロックアドレスのうち、少なくとも１つがキャッシュミスヒットである場合には出力バッファ上に配置されているデータがクリアされ、全体としてキャッシュミスヒットと判定される。
【００９２】
次に、図９のフローチャートを参照して、前述した運用モードが設定されている場合にクライアント装置４０からストレージ装置５０に対してライト要求が送信された際の中継装置３０の処理手順について説明する。
【００９３】
まず、中継装置３０に含まれる中継部３１は、クライアント装置４０から送信されたライト要求を入力（受信）する（ステップＳ３１）。このライト要求には、書き込みの対象となるデータ（対象データ）を示すインデックスが含まれる。このインデックスには、対象データが書き込まれるストレージ装置５０内のディスクボリュームを識別するディスクボリュームシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。
【００９４】
中継部３１は、入力されたライト要求をストレージ装置５０に転送する（ステップＳ３２）。これにより、ストレージ装置５０に対象データが書き込まれる。この場合、対象データは、インデックスに含まれるディスクボリュームシリアル番号によって識別されるディスクボリューム内の当該インデックスに含まれる論理ブロックアドレスに書き込まれる。
【００９５】
また、キャッシュ管理部３２は、中継部３１によって入力されたライト要求に含まれる対象データ及びインデックスに基づいてキャッシュインデックステーブル２４への登録処理（キャッシュへの登録処理）を実行する（ステップＳ３３）。このキャッシュインデックステーブル２４への登録処理の詳細については、後述する。
【００９６】
次に、図１０のフローチャートを参照して、上記した図７に示すステップＳ１８及び図９に示すステップＳ３３のキャッシュインデックステーブル２４への登録処理（キャッシュへの登録処理）の処理手順について説明する。
【００９７】
図７及び図９において説明したように、キャッシュインデックステーブル２４への登録処理は、クライアント装置４０にからの要求の種類（リード要求またはライト要求）に応じて実行されるタイミングは異なる。しかしながら、このキャッシュインデックステーブル２４への登録処理は、中継装置３０（の中継部３１）によって入力されたディスクボリュームシリアル番号、論理ブロックアドレス及びデータ（読み込みデータまたは書き込みデータ）に基づいて実行される。このため、上記した図７に示すステップＳ１８及び図９に示すステップＳ３３のキャッシュインデックステーブル２４への登録処理は同一の処理であるものとして説明する。
【００９８】
なお、ディスクボリュームシリアル番号及び論理ブロックアドレスは、例えばリード要求またはライト要求に含まれるインデックスである。また、中継装置３０の中継部３１によって入力されるデータ（読み込みデータまたは書き込みデータ）を対象データとして説明する。
【００９９】
中継部３１は、入力されたディスクボリュームシリアル番号、論理ブロックアドレス及び対象データをキャッシュ管理部３２に渡す。キャッシュ管理部３２は、中継部３１から渡された対象データを識別子生成部３３に送出する。
【０１００】
識別子生成部３３は、キャッシュ管理部３２によって送出された対象データの内容に対応する識別子としてハッシュ値を生成する（ステップＳ４１）。このハッシュ値は、例えばＳＨＡ１のような予め定められたハッシュ関数を用いて生成される。
【０１０１】
次に、キャッシュ管理部３２は、識別子生成部３３によって生成されたハッシュ値がキャッシュデータテーブル２３に保持されているか否かを判定する（ステップＳ４２）。
【０１０２】
識別子生成部３３によって生成されたハッシュ値がキャッシュデータテーブル２３に保持されていると判定された場合（ステップＳ４２のＹＥＳ）、キャッシュ管理部３２は、キャッシュデータテーブル２３において当該ハッシュ値に対応付けられているデータをキャッシュ格納部２２から取得する。この場合、キャッシュ管理部３２は、識別子生成部３３によって生成されたハッシュ値に対応付けてキャッシュデータテーブル２３に保持されているアドレスを特定する。キャッシュ管理部３２は、キャッシュ格納部２２の特定されたアドレスに格納されているデータ（キャッシュデータ）を取得する。
【０１０３】
キャッシュ管理部３２は、取得されたキャッシュデータ及び中継部３１から渡された対象データが同一であるか否かを判定する（ステップＳ４３）。
【０１０４】
取得されたキャッシュデータ及び対象データが同一であると判定された場合（ステップＳ４３のＹＥＳ）、キャッシュ管理部３２は、中継部３１から渡されたディスクボリュームシリアル番号によって識別されるディスクボリュームに対応するキャッシュインデックステーブル２４を特定する（ステップＳ４４）。なお、中継部３１から渡されたディスクボリュームシリアル番号によって識別されるディスクボリュームに対応するキャッシュインデックステーブル２４が存在しない場合には、当該ディスクボリュームに対応するキャッシュインデックステーブル２４が新たに追加（作成）される。
【０１０５】
キャッシュ管理部３２は、特定されたキャッシュインデックステーブル２４において、中継部３１から渡された論理ブロックアドレスに対応付けてハッシュ値が保持されているか否かを判定する（ステップＳ４５）。
【０１０６】
中継部３１から渡された論理ブロックアドレスに対応付けてハッシュ値が保持されていると判定された場合（ステップＳ４５のＹＥＳ）、キャッシュ管理部３２は、当該ハッシュ値を識別子生成部３３によって生成されたハッシュ値に書き換える（ステップＳ４６）。これにより、識別子生成部３３によって生成されたハッシュ値がキャッシュインデックステーブル２４に登録される。
【０１０７】
一方、中継部３１から渡された論理ブロックアドレスに対応付けてハッシュ値が保持されていないと判定された場合（ステップＳ４５のＮＯ）、キャッシュ管理部３２は、識別子生成部３３によって生成されたハッシュ値を当該論理ブロックアドレスに対応付けてキャッシュインデックステーブル２４に追加（登録）する（ステップＳ４７）。
【０１０８】
また、ステップＳ４２において識別子生成部３３によって生成されたハッシュ値がキャッシュデータテーブル２３に保持されていないと判定された場合、キャッシュ管理部３２は、中継部３１から渡されたディスクボリュームシリアル番号によって識別されるディスクボリュームに対応するキャッシュインデックステーブル２４を特定する。キャッシュ管理部３２は、特定されたキャッシュインデックステーブル２４において、中継部３１から渡された論理ブロックアドレスに対応付けてハッシュ値が保持されているか否かを判定する（ステップＳ４８）。
【０１０９】
中継部３１から渡された論理ブロックアドレスに対応付けてハッシュ値が保持されていると判定された場合（ステップＳ４８のＹＥＳ）、キャッシュ管理部３２は、特定されたキャッシュインデックステーブル２４から当該ハッシュ値を削除する（ステップＳ４９）。換言すれば、キャッシュ管理部３２は、特定されたキャッシュインデックステーブル２４において中継部３１から渡された論理ブロックアドレスに対応付けられているハッシュ値を無効化する。なお、中継部３１から渡された論理ブロックアドレスに対応付けてハッシュ値が保持されていないと判定された場合（ステップＳ４８のＮＯ）、処理は終了される。
【０１１０】
一方、ステップＳ４３において、取得されたキャッシュデータ及び対象データが同一でないと判定された場合には、同一のハッシュ値が複数のデータ（ここでは、キャッシュデータ及び対象データ）に対応しているため、いわゆるハッシュ衝突が検出される。この場合、ステップＳ４９の処理が実行される。
【０１１１】
上記したように、中継部３１によって入力された対象データが、例えば設定モード時にキャッシュデータテーブル２３（キャッシュ格納部２２）にキャッシュデータとして設定（登録）されている場合には、当該対象データに対応するハッシュ値が当該対象データを示すインデックスに対応付けてキャッシュインデックステーブル２４に登録される。これにより、例えばこの対象データを示すインデックスを含むリード要求がクライアント装置４０から送信された場合にはキャッシュヒットと判定されるため、ストレージ装置５０から対象データを読み込む必要がない。
【０１１２】
上記したように本実施形態においては、中継装置３０に対して設定モードが設定されている場合に例えば管理者が任意のクライアント装置４０を利用してネットワークブートを実行する（データを読み込む）だけで、キャッシュ格納部２２及びキャッシュデータテーブル２３に対してキャッシュデータを予め設定（登録）することが可能となる。また、キャッシュデータテーブル２３及びキャッシュインデックステーブル２４はハッシュ値で対応付けられている（つまり、データとインデックスとが切り離されている）ため、ネットワークブートを実行したクライアント装置４０とは異なるクライアント装置４０が自己のディスクボリュームに対してアクセスした場合、つまり、インデックスが異なる場合であっても、データ（ＯＳのファイルまたはアプリケーションプログラムファイル等）が同一であれば予め設定されたキャッシュデータにキャッシュヒットする。このように、例えばストレージ装置５０上にクライアント装置４０を利用するユーザ毎にディスクボリュームが用意されているようなネットワークブート型シンクライアントシステムにおいても、ユーザ毎に個別にキャッシュデータを設定することなく、全てのユーザ（クライアント装置４０）が利用できるキャッシュデータを設定することが可能となる。
【０１１３】
また、本実施形態においては、例えばユーザ毎にキャッシュデータを設定する必要がないため、キャッシュに用いられる領域を節約することが可能となる。
【０１１４】
また、本実施形態においては、設定モード時に予め設定されたキャッシュデータを示すインデックスについてのみキャッシュインデックステーブル２４に登録されるため、当該キャッシュデータ以外のデータについてはキャッシュとして設定されない。このため、例えば中継装置３０の管理者によって指定されたＯＳのファイルまたはアプリケーションプログラムファイルのような情報漏洩しても問題のないデータのみをキャッシュデータとして設定しておくことで、当該設定されたデータ以外のデータの漏洩を防止することができる。
【０１１５】
また、本実施形態においては、キャッシュ格納部２２、キャッシュデータテーブル２３及びキャッシュインデックス２４は、外部記憶装置２０のような不揮発性の記憶領域に格納（記憶）されている。これにより、例えば中継装置３０の電源が遮断された場合であっても、キャッシュ格納部２２、キャッシュデータテーブル２３及びキャッシュインデックステーブル２４の内容は消失しないため、中継装置３０の起動時に新たにキャッシュデータの設定（登録）処理を行うことなく、当該キャッシュ格納部２２、キャッシュデータテーブル２３及びキャッシュインデックス２４をそのまま利用することができる。また、この場合に、例えばキャッシュ格納部２２、キャッシュデータテーブル２３及びキャッシュインデックステーブル２４の内容を暗号化しておくことで、例えば中継装置３０が持ち出された（盗難にあった）場合の不用意な情報漏洩を防止することが可能となる。
【０１１６】
なお、本実施形態においては、キャッシュ格納部２２、キャッシュデータテーブル２３またはキャッシュインデックス２４が揮発性の記憶領域に格納される構成であっても構わない。この場合には、例えば中継装置３０の電源が遮断された際に、キャッシュ格納部２２、キャッシュデータテーブル２３またはキャッシュインデックステーブル２４の内容を消失させることで、例えば中継装置３０が持ち出された場合の情報漏洩の被害を軽減することができる。
【０１１７】
また、本実施形態においては、例えば中継装置３０の動作を終了する（電源が遮断される）際に、当該中継装置３０の外部の不揮発性記憶領域にキャッシュ格納部２２、キャッシュデータテーブル２３またはキャッシュインデックステーブル２４（の一部または全部）を退避させ、当該中継装置３０の起動時に当該キャッシュ格納部２２、キャッシュデータテーブル２３またはキャッシュインデックステーブル２４を当該外部の不揮発性記憶領域から読み込む（取得する）構成であっても構わない。これにより、中継装置３０が持ち出された場合の情報漏洩を防止し、かつ、当該中継装置３０の起動時に新たにキャッシュデータの設定処理を行うことなく、電源遮断時のキャッシュ格納部２２、キャッシュデータテーブル２３またはキャッシュインデックステーブル２４をそのまま利用することが可能となる。
【０１１８】
また、本実施形態においては、設定モード時にキャッシュ格納部２２にはデータ（キャッシュデータ）は設定されず、当該データに対応するハッシュ値のみがキャッシュデータテーブル２３に設定される構成でも構わない。この場合、例えば運用モード時に、キャッシュデータテーブル２３に設定されているハッシュ値に対応するデータ（対象データ）が中継装置３０に入力された場合に、当該対象データをキャッシュデータとしてキャッシュ格納部２２及びキャッシュデータテーブル２３に登録する。これにより、キャッシュデータテーブル２３に登録されているハッシュ値に対応するデータを入力するまで、当該データをキャッシュデータとして用意しておく必要がないため、キャッシュに用いられる領域を節約することが可能となる。
【０１１９】
また、本実施形態において、設定モード時にキャッシュ格納部２２及びキャッシュデータテーブル２３に対して対象データをキャッシュデータとして登録する際に、中継部３１によって入力されたインデックスに対応付けて当該対象データに対応するハッシュ値をキャッシュインデックステーブル２４にも登録する構成であってもよい。これにより、運用モード時に、当該インデックスを含むリード要求がクライアント装置４０から送信された場合には、キャッシュインデックステーブル２４への登録処理を行うことなくキャッシュヒットが判定され、キャッシュデータを利用することができる。
【０１２０】
［第２の実施形態］
次に、図１１を参照して、本発明の第２の実施形態について説明する。図１１は、本実施形態に係る中継装置（キャッシュ装置）３００の主として機能構成を示すブロック図である。なお、前述した図２と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図２と異なる部分について主に述べる。なお、本実施形態に係る中継装置３００のハードウェア構成は、前述した第１の実施形態と同様であるため、図１を用いて説明する。
【０１２１】
図１１に示すように、中継装置３００は、読み込み命令発行部３０１を含む。本実施形態において、読み込み命令発行部３０１は、図１に示すコンピュータ１０が外部記憶装置２０に格納されているプログラム２１を実行することにより実現されるものとする。
【０１２２】
読み込み命令発行部３０１は、例えば中継装置３００が設定モードに設定されている場合において、例えば中継装置３００の管理者（ユーザ）の操作に応じて、ストレージ装置５０に格納されているデータの読み込みを要求するためのリード要求（読み込み要求）を発行する。このリード要求には、読み込みの対象となるデータ（読み込みデータ）を示すインデックスを含む。このインデックスには、例えば読み込みデータが読み込まれるディスクボリュームのシリアル番号及び当該ディスクボリューム内の論理ブロックアドレスが含まれる。
【０１２３】
また、読み込み命令発行部３０１は、発行されたリード要求に基づいてストレージ装置５０から読み込まれた読み込みデータを読み捨てる処理を実行する。
【０１２４】
次に、図１２のフローチャートを参照して、本実施形態に係る中継装置３００の処理手順について説明する。なお、中継装置３００の動作モードとして、例えば当該中継装置３００の管理者の操作に応じて設定モードが設定されているものとする。
【０１２５】
まず、読み込み命令発行部３０１は、例えば中継装置３００の管理者の操作に応じて、ストレージ装置５０に格納されているデータの読み込みを要求するリード要求をストレージ装置５０に対して発行する（ステップＳ５１）。読み込み命令発行部３０１によって発行されたリード要求には、例えば読み込みの対象となるデータ（以下、対象データと表記）を示すインデックス（ディスクボリュームシリアル番号及び論理ブロックアドレス）が含まれる。なお、中継装置３００の管理者は、例えば当該中継装置３００を操作することによって、ストレージ装置５０の任意のクライアント装置４０に対応するディスクボリュームに格納されているデータのうち例えば漏洩しても問題のないデータであって、かつ、キャッシュデータとして登録するデータを対象データとして指定する。
【０１２６】
中継部３１は、読み込み命令発行部３０１によって発行されたリード要求をストレージ装置５０に対して転送する（ステップＳ５２）。
【０１２７】
次に、図６に示すステップＳ３〜ステップＳ７の処理に相当するステップＳ５３〜ステップＳ５７の処理が実行される。
【０１２８】
上記したステップＳ５３〜ステップＳ５７の処理が実行されると、読み込み命令発行部３０１は、ステップＳ５３においてストレージ装置５０から読み込まれた対象データを、例えばクライアント装置４０に送信することなく読み捨てる（ステップＳ５８）。
【０１２９】
上記したように本実施形態においては、中継装置３００に対して設定モードが設定されている場合において、管理者が中継装置３００を操作することによって指定されたデータの読み込みを要求するためのリード要求が読み込み発行部３０１から発行されることによって、キャッシュ格納部２２及びキャッシュデータテーブル２３に対してキャッシュデータを予め設定することが可能となる。つまり、前述した第１の実施形態においてはクライアント装置４０がネットワークブートを実行することによりキャッシュデータを設定するのに対して、本実施形態においては、クライアント装置４０を用いることなく（ネットワークブートを実行することなく）、キャッシュデータを設定することができる。
【０１３０】
このように、本実施形態においては、管理者が中継装置３００を操作することによって指定された例えば任意のクライアント装置４０に対応するディスクボリューム（に格納されているデータ）の読み込み処理を実行するだけで、その他のクライアント装置４０でも利用可能なキャッシュデータを設定することが可能となる。
【０１３１】
なお、本願発明は、上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【０１３２】
【図１】本発明の第１の実施形態に係る中継装置のハードウェア構成を示すブロック図。
【図２】本実施形態に係る中継装置３０の主として機能構成を示すブロック図。
【図３】キャッシュデータテーブル２３のデータ構造の一例を示す図。
【図４】キャッシュインデックステーブル２４のデータ構造の一例を示す図。
【図５】キャッシュデータテーブル２３及びキャッシュインデックステーブル２４の関係について説明するための図。
【図６】設定モードが設定されている場合における中継装置３０の処理手順を示すフローチャート。
【図７】運用モードが設定されている場合にリード要求が送信された際の中継装置３０の処理手順を示すフローチャート。
【図８】キャッシュヒット判定処理の詳細な処理手順を示すフローチャート。
【図９】運用モードが設定されている場合にライト要求が送信された際の中継装置３０の処理手順を示すフローチャート。
【図１０】キャッシュインデックステーブル２４への登録処理の処理手順を示すフローチャート。
【図１１】本発明の第２の実施形態に係る中継装置３００の主として機能構成を示すブロック図。
【図１２】設定モードが設定されている場合における本実施形態に係る中継装置３００の処理手順を示すフローチャート。
【符号の説明】
【０１３３】
１０…コンピュータ、２０…外部記憶装置、２２…キャッシュ格納部、２３…キャッシュデータテーブル、２４…キャッシュインデックステーブル、３０，３００…中継装置（キャッシュ装置）、３１…中継部、３２…キャッシュ管理部、３３…識別子生成部、４０…クライアント装置、５０…ストレージ装置（データ格納手段）、３０１…読み込み命令発行部。
【図１】
0004607937.tif 000002
【図２】
0004607937.tif 000003
【図３】
0004607937.tif 000004
【図４】
0004607937.tif 000005
【図５】
0004607937.tif 000006
【図６】
0004607937.tif 000007
【図７】
0004607937.tif 000008
【図８】
0004607937.tif 000009
【図９】
0004607937.tif 000010
【図１０】
0004607937.tif 000011
【図１１】
0004607937.tif 000012
【図１２】
0004607937.tif 000013