(57)【要約】【課題】  同一の論理ブロックアドレスのデータに対する参照と更新の競合を防止すると共にファイルへの入出力回数の増加を抑えることが可能な技術を提供する。【解決手段】  計算機とディスク装置との間のデータのキャッシュへの格納を制御するキャッシュ制御方法において、計算機から読み込み要求の行われたデータが更新前データとしてキャッシュに格納されていない場合に、その要求されたデータをディスク装置から読み込んで計算機へ転送し、当該データを更新前データとしてキャッシュへ格納するステップと、計算機から読み込み要求の行われたデータが更新前データとしてキャッシュに格納されている場合に、その要求されたデータをキャッシュから読み込んで計算機へ転送するステップと、計算機から書き込み要求の行われたデータを、更新後データとしてキャッシュへ格納するステップと、前記キャッシュへ格納した更新後データをディスク装置へ格納するステップとを有するものである。【選択図】図１
2007179178.tif 000002
【特許請求の範囲】
【請求項１】
計算機とディスク装置との間のデータのキャッシュへの格納を制御するキャッシュ制御方法において、
計算機から読み込み要求の行われたデータが更新前データとしてキャッシュに格納されていない場合に、その要求されたデータをディスク装置から読み込んで計算機へ転送し、当該データを更新前データとしてキャッシュへ格納するステップと、
計算機から読み込み要求の行われたデータが更新前データとしてキャッシュに格納されている場合に、その要求されたデータをキャッシュから読み込んで計算機へ転送するステップと、
計算機から書き込み要求の行われたデータを、更新後データとしてキャッシュへ格納するステップと、前記キャッシュへ格納した更新後データをディスク装置へ格納するステップとを有することを特徴とするキャッシュ制御方法。
【請求項２】
計算機から書き込みデータを有効にする要求を受けた場合に、前記キャッシュに格納した更新後データを前記キャッシュにおける更新前データに変更することにより当該書き込みデータによる更新を確定させることを特徴とする請求項１に記載されたキャッシュ制御方法。
【請求項３】
計算機から書き込みデータを無効にする要求を受けた場合に、前記キャッシュに格納した更新後データを解放することにより当該書き込みデータによる更新を取り消すことを特徴とする請求項１に記載されたキャッシュ制御方法。
【請求項４】
計算機とディスク装置との間のデータのキャッシュへの格納を制御するディスク制御装置において、
計算機から読み込み要求の行われたデータが更新前データとしてキャッシュに格納されていない場合に、その要求されたデータをディスク装置から読み込んで計算機へ転送すると共に当該データを更新前データとしてキャッシュへ格納し、計算機から読み込み要求の行われたデータが更新前データとしてキャッシュに格納されている場合に、その要求されたデータをキャッシュから読み込んで計算機へ転送する読み込み処理部と、
計算機から書き込み要求の行われたデータを、更新後データとしてキャッシュへ格納する書き込み処理部と、前記キャッシュへ格納した更新後データをディスク装置へ格納する書き出し処理部とを備えることを特徴とするディスク制御装置。
【請求項５】
計算機とディスク装置との間のデータのキャッシュへの格納を制御するキャッシュ制御方法をコンピュータに実行させる為のプログラムにおいて、
計算機から読み込み要求の行われたデータが更新前データとしてキャッシュに格納されていない場合に、その要求されたデータをディスク装置から読み込んで計算機へ転送し、当該データを更新前データとしてキャッシュへ格納するステップと、
計算機から読み込み要求の行われたデータが更新前データとしてキャッシュに格納されている場合に、その要求されたデータをキャッシュから読み込んで計算機へ転送するステップと、
計算機から書き込み要求の行われたデータを、更新後データとしてキャッシュへ格納するステップと、前記キャッシュへ格納した更新後データをディスク装置へ格納するステップとをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は計算機又はプログラム間のアクセスに応じた効果的なキャッシング制御を行うストレージシステムに関するものである。
【背景技術】
【０００２】
従来、異なる業務を行う計算機、又は、プログラムで同一なファイル（論理ブロックアドレス）を使用する場合、論理的な不整合が発生することを防止するため、共有なファイルを排他的に使用する排他制御が行われている。この技術によると、特定の計算機、又は、プログラムによるファイルに対するデータ更新要求等の処理の実行が終了するまで、他のプログラムによる当該ファイルへのアクセスは抑止される。そこで、特許文献１に開示される様に、ファイルを二重化し、参照用と更新用に交互に切替えて使用する方式がある。
【０００３】
【特許文献１】特開平３−２６６０４６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
前記従来技術では参照と更新の競合はなくなるが、更新用ファイルから参照用ファイルへのコピー処理を行うため、トータルで入出力回数は２倍程度増えるという問題がある。
【０００５】
本発明の目的は上記問題を解決し、同一の論理ブロックアドレスのデータに対する参照と更新の競合を防止すると共にファイルへの入出力回数の増加を抑えることが可能な技術を提供することにある。
【課題を解決するための手段】
【０００６】
本発明は、キャッシュ内の更新前データによりデータの参照を行い、キャッシュ内の更新後データによりデータの更新を行うものである。
【０００７】
本発明のストレージシステムでは、計算機からデータの読み込み要求を受けると、要求された論理ブロックアドレスのデータが更新前データとしてキャッシュに格納されているかどうかを調べ、当該データが更新前データとしてキャッシュに格納されていない場合には、その要求されたデータをディスク装置から読み込んで計算機へ転送し、当該データを更新前データとしてキャッシュへ格納する。前記要求されたデータが更新前データとしてキャッシュに格納されている場合には、そのデータを読み込んで計算機へ転送する。
【０００８】
また、計算機からデータの書き込み要求を受けると、そのデータを、更新後データとして前記更新前データとは異なるキャッシュ領域へ格納する。その後、所定時間の経過等、所定の条件に応じて、前記キャッシュへ格納した更新後データをディスク装置へ格納する処理を行う。
【発明の効果】
【０００９】
本発明によれば、同一の論理ブロックアドレスのデータに対する参照と更新の競合を防止すると共にファイルへの入出力回数の増加を抑えることが可能である。
【発明を実施するための最良の形態】
【００１０】
以下に計算機とディスク装置との間のデータのキャッシュへの格納を制御する一実施形態のストレージシステムについて説明する。
【００１１】
図１は本実施形態のデータ処理システムの構成を示す図である。１０１及び１０２は計算機であり、ストレージシステム１０３を制御してデータの参照、及び、更新を行う。ディスク１０７は、データが格納される装置であり、低速な装置であるため、キャッシュ１０４を設ける。
【００１２】
キャッシュ１０４は、計算機１０１がデータを参照する場合、キャッシュ１０４に更新前データがある場合にはキャッシュ１０４からデータを計算機１０１に返信する。キャッシュ１０４に更新前データ１０５が格納されていない場合にはディスク１０７からデータを読込み計算機１０１にデータを返信しキャッシュ１０４に格納する。
【００１３】
計算機１０２からデータの更新を行った場合には、キャッシュ１０４に更新後データ１０６を格納し更新データと同じアドレスのデータがキャッシュ１０４にない場合には、ディスクから更新前のデータをキャッシュ１０４に格納する。その後、キャッシュ１０４に格納している更新後のデータを所定の条件でドライブに書き込む処理を行う。計算機１０２は更新したデータを無効にするか有効にするか制御するものである。更新したデータを有効にする場合には、キャッシュ１０４に格納されている更新データと同じアドレスのデータ（更新前データ１０５）をキャッシュ１０４から無効にする。更新したデータを無効にする場合には、キャッシュ１０４に格納されている更新データと同じアドレスのデータ（更新前データ１０５）をドライブに書き込む。
【００１４】
図２は本実施形態のストレージシステムの概略構成を示す図である。２０１及び２０２は計算機であり、２１６はディスク制御装置である。２１４はドライブであり、ディスク制御装置２１６と接続される。計算機２０１及び２０２とディスク制御装置２１６は、ネットワーク２１５に接続される。
【００１５】
計算機２０１から入出力要求コマンドがディスク制御装置２１６に発行されると、ディスク制御装置２１６は入出力要求コマンドを解釈し、ドライブ２１４に対して入出力を行う。ディスク制御装置２１６は、更に詳細には、ネットワーク制御部２０３、制御プロセッサ２０４、メモリ２０７、ドライブ制御部２０５、及びこれを接続するバス２０６から構成される。ネットワーク制御部２０３は、計算機２０１及び２０２から発行される入出力コマンドの受付や、処理終了及びデータを計算機２０１及び２０２へ知らせる制御を行う。ドライブ制御部２０５は、ドライブ２１４に対するデータの入出力制御を行う。ネットワーク制御部２０３とドライブ制御部２０５は、制御プロセッサ２０４から起動／終了、データ転送指示が発行され動作する。制御プロセッサ２０４の動作は、メモリ２０７内に格納されているプログラムやテーブルに記述されている。
【００１６】
読み込みプログラム２０８は、計算機２０１及び２０２から発行された入力要求を制御し、書き込みプログラム２０９は計算機２０１及び２０２から発行される出力要求を制御する制御プログラムである。有効プログラム２１０は、更新したデータを有効に確定する。無効プログラム２１１は、更新したデータを無効に確定し、更新前に状態にデータを戻す。書き出しプログラム２１７は、キャッシュ領域２１３の内容を追い出し、又は、定期的にドライブに書き出す為のプログラムである。
【００１７】
制御テーブル２１２には、キャッシュ領域２１３に関する情報が格納されている。キャッシュ領域２１３は、ドライブ２１４から読み込んだデータを一時的に格納しておく領域であり、再度同一データの読み込みが計算機２０１及び２０２から要求された場合に、キャッシュ領域２１３から計算機２０１及び２０２へデータを返送することで読み込みを高速化することが可能となる。また計算機２０１及び２０２から書き込み要求が発生した場合には、キャッシュ領域２１３内に書き込みデータを一時的に保持する為に使用される。計算機２０１及び２０２へはキャッシュ領域２１３へデータを書き込んだ時点で書き込み完了報告を行うので、書き込みを高速に行った様に見せることができる。キャッシュ領域２１３から追い出された時、または、定期時間毎に起動する書き込み制御によりドライブ２１４にデータは書き込まれる。
【００１８】
本実施形態において、ディスク制御装置２１６を、更新前データを読み込んで計算機へ転送する読み込み処理部、計算機からの更新後データを書き込む書き込み処理部、更新後データによる更新を確定する有効処理部、更新後データによる更新を無効にする無効処理部や更新後データをドライブ２１４のディスク装置へ書き出す書き出し処理部として機能させる為の前記プログラムは、ＣＤ−ＲＯＭ等の記録媒体に記録され磁気ディスク等に格納された後、メモリ２０７にロードされて実行されるものとする。なお前記プログラムを記録する記録媒体はＣＤ−ＲＯＭ以外の他の記録媒体でも良い。また前記プログラムを当該記録媒体からディスク制御装置２１６にインストールして使用しても良いし、ネットワーク２１５を通じて当該記録媒体にアクセスして前記プログラムを使用するものとしても良い。
【００１９】
図３は本実施形態のキャッシュ領域の基本的な動作を示す図である。図３では、計算機３０１内ではプログラムＡ３０２、計算機３０３内ではプログラムＢ３０４が同時に起動されている状態を表しており、キャッシュ領域３０５内では、ドライブへの更新前のデータを格納する更新前データ３０７、ドライブへの書き込みを行う更新後データ３０６が格納されている状態を示している。
【００２０】
プログラムＡ３０２の要求したデータがキャッシュ領域３０５に格納されていなかった場合には、ドライブ３０８からデータを読み出して更新前データ３０７に格納し、プログラムＡへデータを転送する。プログラムＢ３０４の要求した書き込みデータは、更新後データ３０６に格納する。更新後データ３０６のデータをドライブ３０８に書き込む前に、キャッシュ領域３０５に書き込むアドレスと同じ論理ブロックアドレスを持つ更新前データ３０７が無いか確認し、ない場合には、ドライブから更新前のデータを読み込み、更新前データ３０７に格納し、更新後データ３０６をドライブに書き込む。更新したデータはプログラムＢ３０４に指示により有効、又は、無効が決まる。プログラムＢ３０４から有効の指示が行われた場合には、キャッシュ領域３０５に格納されている更新前データ３０７を無効にする。プログラムＢ３０４から無効の指示が行われた場合には、キャッシュ領域３０５に格納されている更新前データをドライブ３０８に書き込む。
【００２１】
図４〜７はディスク制御装置を制御する入出力コマンドの一例を示している。
【００２２】
図４は本実施形態のストレージシステムからデータを読み込むコマンドの一例を示す図である。図４に示す様にコマンド４０１は、命令コード４０２、ＬＢＡ４０３（ＬＢＡ：論理ブロックアドレス）、データ長４０４、グループ番号４０５から構成される。
【００２３】
図５は本実施形態のストレージシステムにデータを書き込むコマンドの一例を示す図である。図５に示す様にコマンド４０６は、命令コード４０７、ＬＢＡ４０８、データ長４０９、グループ番号４１０から構成される。
【００２４】
図６は本実施形態のストレージシステムに書き込んだデータを有効にするコマンドの一例を示す図である。図６に示す様にコマンド４１１は、命令コード４１２、グループ番号４１３から構成される。
【００２５】
図７は本実施形態のストレージシステムに書き込んだデータを無効にするコマンドの一例を示す図である。図７に示す様にコマンド４１６は、命令コード４１７、グループ番号４１８から構成される。
【００２６】
命令コード４０２、４０７、４１２、４１７には、それぞれ、リード、ライト、コミット、ロールバックがある。ＬＢＡ４０３、４０８は、ドライブ中のデータの場所を示す。データ長４０４、４０９は、入出力のデータの長さを示す。グループ番号４０５、４１０、４１３、４１８は、トランザクション処理等の一連の処理で使用するデータのグループを識別する情報を示しており、アプリケーションによって設定されるものとする。
【００２７】
図８は本実施形態のディスク制御装置で命令コードを受けた場合の処理手順を示すフローチャートである。まず命令コード解読５０１では、受け付けたコマンドの命令コードの内容を読み出して命令の意味を解読する。
【００２８】
ステップ５０２では、前記解読した命令コードが読込み要求であるかをチェックする。そしてリード処理５０３では、図１０に示すフローのデータの読み出し処理を行いデータの読み出しを行う。
【００２９】
ステップ５０４では、前記解読した命令コードが書き込み要求であるかをチェックする。そしてライト処理５０５では、図１４に示すフローの書き込み処理を行いデータの書き込みを行う。
【００３０】
ステップ５０６では、前記解読した命令コードがコミット要求であるかをチェックする。そして有効処理５０７では、図１８に示すフローの有効処理を行い、ライト処理５０５で行った書き込みデータを有効にする。また、図２に示すキャッシュ領域、制御テーブルが使用される。
【００３１】
ステップ５０８では、前記解読した命令コードがロールバックであるかをチェックする。そして無効処理５０９では、図１９に示すフローの無効処理を行い、ライト処理５０５で行った書き込みデータを無効にする。
【００３２】
図９は本実施形態の図２の制御テーブル２１２の構成を示す図である。グループ管理部６０１及び６０２は、図４〜７のグループ番号に対応する制御テーブルである。
【００３３】
グループ管理部６０１及び６０２では、グループ番号に対応したＬＢＡ管理部６０６及び６０７を管理する。グループ管理部には、グループ番号６０８、前方グループポインタ６０９、後方グループポインタ６１０、ＬＢＡポインタ６１１から構成される。６０８〜６１１がグループ番号毎の管理単位である。
【００３４】
グループ番号６０８はグループに属するＬＢＡ管理部を識別する情報であり、ＬＢＡポインタ６１１でグループに属するＬＢＡ管理部へのポインタを格納する領域であり、前方グループポインタ、後方グループポインタは、各グループ管理部を連結する為のポインタであり、グループ管理部の削除や登録が生じた場合に変更が生じる。
【００３５】
ＬＢＡ管理部６０６及び６０７は、データを格納しているキャッシュ部を管理する。ＬＢＡ管理部には、更新フラグ６１５、論理ブロックアドレス６１６、参照キャッシュ部ポインタ６１７、更新キャッシュ部ポインタ６１８、前方ＬＢＡポインタ６１９、後方ＬＢＡポインタ６２０、グループ管理ポインタ６２１、参照キャッシュ部サイズ６２２、更新キャッシュ部サイズ６２３、グループＬＢＡポインタ６２４から構成される。
【００３６】
論理ブロックアドレス６１６は、管理しているデータの論理ブロックアドレスを格納する領域であり、参照キャッシュ部ポインタ６１７は、ドライブから読み込んだデータが格納されているキャッシュへのポインタが設定される。そのキャッシュ部のサイズを参照キャッシュ部サイズ６２２に格納する。
【００３７】
更新キャッシュ部ポインタ６１８は、ドライブへ書き込むデータが格納されているキャッシュへのポインタが設定される。そのキャッシュ部のサイズは更新キャッシュ部サイズ６２３に格納する。以後、参照キャッシュ部ポインタで管理するキャッシュ部を更新前データ、更新キャッシュ部ポインタで管理するキャッシュ部を更新後データとする。
【００３８】
更新フラグ６１５は、更新後データ、又は、更新前データをドライブへ書き込む必要があることを示す領域であり、この更新フラグの設定により、一定時間毎に実行される書き込みプログラムによってデータがドライブに書き込まれたり、データがドライブから読み込まれたりする。
【００３９】
グループ管理ポインタ６２１は、ＬＢＡ管理部が属するグループ管理部へのポインタを格納する領域であり、グループＬＢＡポインタ６２４でグループに関連するＬＢＡブロックを管理し、グループへの削除や登録が発生した場合に変更が生じる。前方ＬＢＡポインタ６１９、後方ＬＢＡポインタ６２０は、各ＬＢＡ管理部を連結する為のポインタであり、ＬＢＡ管理部の削除や登録が生じた場合に変更が生じる。一つのＬＢＡ管理部は、一つの論理ブロックアドレスを管理し、更新前データと更新後データを管理する。
【００４０】
図１０は本実施形態のデータの読み出し処理の処理手順を示すフローチャートである。ＬＢＡ管理部検索８０１は、読み出し処理の対象となるＬＢＡ管理部を検索する。ＬＢＡ管理部の検索は、ＬＢＡ管理部を作成した際に設定している論理ブロックアドレス（ＬＢＡ）をコマンドのＬＢＡで検索することで行われ、検索した結果をステップ８０２で判定する。ステップ８０２で対象となるＬＢＡ管理部がある場合にはステップ８０３に進む。また対象となるＬＢＡ管理部がない場合にはＬＢＡ管理部設定８０５に進む。これは、図１１に示す様にドライブからデータを読み込む場合である。
【００４１】
図１１は本実施形態のドライブからデータを読み込む場合のデータの流れを示す図である。図１１では、ドライブ１２０６から更新前データ１２０４を読み込み、計算機１２０１へ返信する処理を表している。
【００４２】
ＬＢＡ管理部設定８０５では、ドライブ１２０６から読み込むデータを管理する為の対象ＬＢＡ管理部を作成して読み込みを行うデータの情報を格納し、キャッシュ部確保８０８に進む。
【００４３】
キャッシュ部確保８０８では、ドライブから読み込んだデータを格納する領域をキャッシュ部１２０３から確保し、データを格納する領域としてＬＢＡ管理部に記憶し、ドライブリード８０９に進む。
【００４４】
ドライブリード８０９では、ドライブから論理ブロックアドレスに対応したデータを読込み、リードデータ転送８１０で読み込みデータを返信し、キャッシュ部設定８１１でドライブから読み込んだデータをキャッシュ部１２０３に格納して終了する。
【００４５】
一方、ステップ８０２で対象ＬＢＡ管理ブロックである場合、つまり、キャッシュ部１２０３にデータがある場合には、ステップ８０３では、対象ＬＢＡ管理部が対象グループであるかを判定する。対象グループの判定では、ＬＢＡ管理部のグループ管理ポインタを参照してグループ管理部のグループ番号がコマンドのグループ番号と一致するかを判定する。グループ管理部を持たないＬＢＡ管理部ではグループ番号を「０」として扱う。
【００４６】
ステップ８０３で対象グループである場合にはステップ８０４に進み、対象グループではないと判定した場合にはステップ８０６に進む。
【００４７】
ステップ８０６では、対象ＬＢＡ管理部で更新前データを管理しているかを判定する。この判定では参照キャッシュ部ポインタを参照し、ポインタが格納されているかどうかで判定する。ステップ８０６で更新前データを管理していない場合、これは、図１４のライトフロー処理に示す処理において、ＬＢＡ管理部では更新後データのみを管理している状態であることを示しており、その場合にはキャッシュ部確保８０８へ進み、更新前データをドライブから読み込んで返信する。更新前データを管理している場合には、図１２に示す様なデータの流れとなり、更新前データ１２０４を返信することとなる。
【００４８】
図１２は本実施形態の更新前データ１２０４をキャッシュ部１２０３で管理している場合のデータの流れを示す図である。図１２に示す様にキャッシュ部１２０３で管理している更新前データ１２０４を計算機１２０１へ返信して処理を終了する。
【００４９】
一方、ステップ８０４では更新後データを管理しているかを判定する。これは、対象ＬＢＡ管理部の更新キャッシュ部ポインタで判定する。更新後データがない場合には、キャッシュ部確保８０８に進み、更新後データを格納する領域を確保し、ドライブから読み込んだデータを格納して返信する。
【００５０】
図１３は本実施形態の更新後データをキャッシュ部１２０３で管理している場合のデータの流れを示す図である。図１３では、キャッシュ部１２０３で管理している更新後データ１２０５を計算機１２０１へ返信する処理を表している。ステップ８０４で更新後データがある場合、これは、図１４のライトフロー処理に示す処理でライトした情報を読み込む場合を示しており、その場合には図１３に示す様なデータの流れとなり、更新後データ転送８１２で更新後データを返信して処理を終了する。
【００５１】
図１４は本実施形態のデータの書き込み処理の処理手順を示すフローチャートである。まずＬＢＡ管理部検索９０１は、対象となるＬＢＡ管理部を検索する。ＬＢＡ管理部の検索は、ＬＢＡ管理部を作成した際に設定している論理ブロックアドレス（ＬＢＡ）をコマンドのＬＢＡで検索することで行われ、検索した結果をステップ９０２で判定する。ステップ９０２で対象となるＬＢＡ管理部がある場合にはステップ９１１に進み、対象となるＬＢＡ管理部がない場合にはグループ管理部検索９０３に進む。
【００５２】
グループ管理検索はグループ管理部を作成したときに設定しているグループ番号をコマンドのグループ番号で検索することで行われ、検索した結果をステップ９０４で判定する。ステップ９０４で対象グループ管理部がある場合にはＬＢＡ管理部設定９０７へ進み、対象グループ管理部がない場合にはグループ管理確保９０５へ進む。
【００５３】
グループ管理確保９０５では、コマンドで設定されているグループ番号を管理する為のグループ管理ブロックを確保し、グループ管理設定９０６でコマンドに付加されているグループ番号を前記確保したグループ管理ブロックに設定し、ＬＢＡ管理部設定９０７へ進む。
【００５４】
ＬＢＡ管理部設定９０７では、書き込むデータを管理するＬＢＡ管理ブロックを確保し、キャッシュ部確保９０８でＬＢＡ管理ブロックから、書き込みデータを格納するキャッシュ領域を割当て、更新後データとしてキャッシュ部設定９０９に進み、キャッシュ部設定９０９で確保したキャッシュ領域にデータを格納して更新フラグ設定９１０に進む。
【００５５】
図１５は本実施形態の書き込みデータの流れを示す図である。図１５では、更新後データ１２０５をキャッシュ部１２０３へ書き込む処理を表している。
【００５６】
図１６は本実施形態のキャッシュに書き込んだデータがドライブに書き込まれる前の読み込みデータの流れを示す図である。図１６では、ドライブ１２０６から更新前データ１２０４を読み込んだ後に、更新後データ１２０５をドライブ１２０６へ書き込む処理を表している。
【００５７】
更新フラグ設定９１０では、図２２の書き出し処理フローで、図１６に示す様に、キャッシュに書き込んだデータがドライブに書き込まれる前のデータのキャッシュへの読み込みを行った後に、そのキャッシュに書き込んだデータがドライブに書き込まれる様にする為の更新フラグを設定し、図１５に示す様に、計算機１２０２から書き込みを行ったデータをキャッシュ部１２０３の更新後データ１２０５に格納して処理を終了する。
【００５８】
ステップ９０２で、対象ＬＢＡ管理部がある場合には、ステップ９１１で対象ＬＢＡ管理部を管理するグループ管理部があるかを判定する。管理するグループ管理部の判定は更新キャッシュ部ポインタの状態で行う。
【００５９】
図１７は本実施形態の更新前データ１２０４を読み込んだ後、読み込んだデータと同じアドレスのデータを書き込み要求した際のデータの流れを示す図である。ステップ９１１で、管理するグループ管理部がない場合、これは図１４のリード処理フローで更新前データのみキャッシュに読み込んだ状態であり、図１７で示す様に、更新前データ１２０４を読み込んだ後に読み込んだデータと同じアドレスのデータを書き込み要求した状態を示している。この様に管理するグループ管理部がない場合にはグループ管理部検索処理９０３に進み、対象ＬＢＡ管理部を対応するグループ管理部に設定し、書き込みデータをキャッシュに設定する。
【００６０】
ステップ９１１でグループ管理部がある場合には、ステップ９１２に進み、対象グループ番号であるかを判定する。ステップ９１２の判定では、グループ管理部設定時に設定したグループ番号がコマンドのグループ番号と同じであるかを判定する。グループ番号が異なる場合には処理を終了する。グループ番号が同じであれば、ステップ９１３に進み、更新後データがあるかを判定する。
【００６１】
ステップ９１３の判定では、更新後キャッシュ部ポインタにキャッシュ部へのポインタがあるかを判定し、キャッシュ部へのポインタがない場合には、キャッシュ部確保９０８に進み、ドライブに書き込むデータを、確保したキャッシュ部に設定する。ステップ９１３でキャッシュ部へのポインタがある場合には、キャッシュ解放９１４に進み、更新後データが設定されているキャッシュ部を解放し、キャッシュ部確保９０８に進む。
【００６２】
図１８は本実施形態の書き込みデータを有効にする処理の処理手順を示すフローチャートである。図１８では、図１４のライトフロー処理で示した処理でライトしたデータを有効にする場合のフローを表している。
【００６３】
グループ管理検索１００１は、対象となるグループ管理部を検索する。グループ管理部の検索は、グループ管理部を作成した際に設定しているグループ番号をコマンドのグループ番号で検索することで行われ、検索した結果は、ステップ１００２で判定する。
【００６４】
ステップ１００２で対象となるグループ番号がない場合には処理を終了する。対象グループ管理部がある場合には、ステップ１００５へ進み、処理するＬＢＡ管理部があるかを判定する。これは、ＬＢＡポインタを参照して判定する。処理するＬＢＡ管理部がない場合にはグループ管理部解放１００８へ進み、グループ管理部解放１００８では対象となったグループ管理部を解放し、処理を終了する。
【００６５】
またステップ１００５で処理するＬＢＡ管理部がある場合には、ステップ１００３に進む。ステップ１００３では、対象ＬＢＡ管理部で更新前データを管理しているかを判定する。これは、ＬＢＡ管理部の参照前ＬＢＡポインタを参照することで判定する。更新前データがない場合にはステップ１００４へ進み、更新前データがある場合には更新前データ解放１００６へ進む。更新前データ解放１００６では、更新前ＬＢＡポインタで管理しているキャッシュ部を解放する。
【００６６】
図２０は本実施形態の更新後データ１２０５またはドライブに書き込んだデータを有効にする処理の概要を示す図である。図２０では、キャッシュ部にある更新前データが解放されることで、更新後データ１２０５、または、ドライブに書き込んだデータが有効になることを表している。
【００６７】
ステップ１００４では、更新後データがあるかを判定する。更新後データの判定では、更新キャッシュ部ポインタを参照する事で判定する。更新後データがない場合にはグループ管理部変更１０１０へ進み、更新後データがある場合には更新後データ変更１００７へ進む。
【００６８】
更新後データ変更１００７では、更新後データを更新前データに変更する。図２０では、更新後データ１２０５を更新前データ１２０４に変更する事を示しており、更新キャッシュ部ポインタで管理しているキャッシュ部を参照キャッシュ部ポインタで管理する様に変更することを表している。そして更新フラグ変更１００９へ進み、図２０で示した様に、更新後データを更新前データに変更した更新前データをドライブへ書き込む。これは書き出し処理で更新前データをドライブへ書き込む様に更新フラグを変更することで行う。更新フラグを変更することで書き出し処理により更新前データがドライブへ書き込まれる。
【００６９】
その後、グループ管理部変更１０１０へ進み、グループ管理部変更１０１０では、処理を行ったＬＢＡ管理部を管理対象から外す。この処理は、ＬＢＡ管理ポインタから処理を完了したＬＢＡ管理部へのポインタを外すことで行う。そしてステップ１００５へ進み、管理しているＬＢＡ管理部が無くなるまで繰り返す。
【００７０】
図１９は本実施形態の書き込みデータを無効にする処理の処理手順を示すフローチャートである。図１９では、図１４のライトフロー処理で示した処理でライトしたデータを無効にする場合のフローを表している。
【００７１】
グループ管理検索１１０１では、対象となるグループ管理部を検索する。グループ管理部の検索は、グループ管理部を作成した際に設定しているグループ番号をコマンドのグループ番号で検索することで行われ、検索した結果は、ステップ１１０２で判定する。
【００７２】
ステップ１１０２で対象となるグループ番号がない場合には処理を終了する。対象グループ管理部がある場合には、ステップ１１０５へ進み、処理するＬＢＡ管理部があるかを判定する。これは、ＬＢＡポインタを参照して判定する。処理するＬＢＡ管理部がない場合には、グループ管理部解放１１０８へ進み、グループ管理部解放１１０８では対象となったグループ管理部を解放して処理を終了する。
【００７３】
またステップ１１０５で処理するＬＢＡ管理部がある場合には、ステップ１１０３に進む。ステップ１１０３では、対象ＬＢＡ管理部で更新前データを管理しているかを判定する。これは、ＬＢＡ管理部の参照前ＬＢＡポインタを参照することで判定する。更新前データがない場合にはステップ１１０４へ進み、更新前データがある場合には、更新フラグ変更１１０６へ進む。
【００７４】
図２１は本実施形態の更新後データ１２０５またはドライブに書き込んだデータを無効にする処理の概要を示す図である。更新フラグ変更１１０６では、図２１に示す様に書き出し処理で更新前データをドライブへ書き込む様に更新フラグを変更する。更新フラグを変更することで書き出し処理により更新前データがドライブへ書き込まれる。
【００７５】
次にステップ１１０４へ進み、ステップ１１０４では更新後データがあるかを判定する。更新後データの判定では、更新キャッシュ部ポインタを参照して判定する。更新後データがない場合にはグループ管理部変更１１０９へ進み、更新後データがある場合には、更新後データ解放１１０７へ進む。
【００７６】
更新後データ解放１１０７では、更新キャッシュ部ポインタで管理しているキャッシュ部を解放する。これは、図２１で示す様なキャッシュ部にある更新後データが解放されることで、ライトフロー処理で書き込んだデータを無効にすることになる。
【００７７】
その後、グループ管理部変更１１０９へ進み、グループ管理部変更１１０９では、処理を行ったＬＢＡ管理部を管理対象から外す。この処理は、ＬＢＡ管理ポインタから処理を完了したＬＢＡ管理部へのポインタを外すことで行う。そしてステップ１１０５へ進み、管理しているＬＢＡ管理部が無くなるまで繰り返す。
【００７８】
図２２は本実施形態の書き出し処理の処理手順を示すフローチャートである。図２２では、ＬＢＡ管理部で管理しているキャッシュ部のデータをキャッシュから追い出すとき、及び、定期的に実行する書き出しプラグラムのフローを表している。
【００７９】
ステップ１３０１では、更新前データや更新後データのドライブへの書き込みが必要か、すなわちデータが更新されているかを判定する。これは、更新フラグの状態で判定する。データが更新されていなければ処理を終了し、更新されていれば、ステップ１３０２へ進む。
【００８０】
ステップ１３０２では、更新前データをドライブへ書き込む必要があるか、すなわちそのデータが更新後データから更新前データへ変更されたものであるかを判定する。これは、更新フラグの状態で判定する。更新前データのドライブへの書き込みが不要であれば、ステップ１３０４へ進み、更新前データをドライブへ書き込む必要があれば、更新前データ書き込み１３０３へ進む。更新前データ書き込み１３０３では、参照キャッシュ部ポインタで管理しているキャッシュ部をドライブへ書き込み、更新フラグ変更１３１１へ進む。更新フラグ変更１３１１では、ドライブへ書き込むデータがなくなったことを示すため、更新フラグを初期化して処理を終了する。
【００８１】
ステップ１３０４では更新前データの読み込みが必要であるかを判定する。これは、更新フラグの状態で判定する。更新前のデータの読み込みが必要でなければ、ステップ１３１２へ進み、更新前データの読み込みが必要であれば、ステップ１３０５へ進む。
【００８２】
ステップ１３０５では、既に更新前データがキャッシュ部にあるかを判定する。これは、参照キャッシュ部ポインタを参照することで判定する。更新前データがあれば、ステップ１３１２へ進み、更新データがない場合には、キャッシュ部確保１３０６へ進む。
【００８３】
図２３は本実施形態の更新後データ１２０５をドライブ１２０６へ書き込む際のデータの流れを示す図である。図２３では、更新後データ１２０５をドライブ１２０６へ書き込む前にドライブ１２０６から更新前データ１２０４を読み込むことを表している。キャッシュ部確保１３０６では、更新前データを格納するキャッシュ部を確保し、ドライブリード１３０７でドライブからデータを読み込み、キャッシュ部設定１３０８では、確保したキャッシュ部にドライブから読み込んだデータを格納し、ステップ１３１２へ進む。
【００８４】
ステップ１３１２では、更新後データをドライブへ書き込む必要があるかを判定する。これは、更新フラグの状態で判定する。更新後データの書き込みが不要であればステップ１３１１へ進み、更新後データの書き込みが必要であれば更新後データ書き込み１３０９へ進む。更新後データ書き込み１３０９は、更新キャッシュ部ポインタで管理しているキャッシュ部をドライブへ書き込み、更新後データ解放１３１０へ進む。更新後データ解放１３１０は、更新キャッシュ部ポインタで管理するキャッシュ部を解放し、更新フラグ変更１３１１へ進む。この処理により、図２３に示す様に更新後データ１２０５をドライブ１２０６へ書き込んだこととなる。
【００８５】
以上説明した様に本実施形態のストレージシステムによれば、キャッシュ内の更新前データによりデータの参照を行い、キャッシュ内の更新後データによりデータの更新を行うので、同一の論理ブロックアドレスのデータに対する参照と更新の競合を防止すると共にファイルへの入出力回数の増加を抑えることが可能である。
【図面の簡単な説明】
【００８６】
【図１】本実施形態のデータ処理システムの構成を示す図である。
【図２】本実施形態のストレージシステムの概略構成を示す図である。
【図３】本実施形態のキャッシュ領域の基本的な動作を示す図である。
【図４】本実施形態のストレージシステムからデータを読み込むコマンドの一例を示す図である。
【図５】本実施形態のストレージシステムにデータを書き込むコマンドの一例を示す図である。
【図６】本実施形態のストレージシステムに書き込んだデータを有効にするコマンドの一例を示す図である。
【図７】本実施形態のストレージシステムに書き込んだデータを無効にするコマンドの一例を示す図である。
【図８】本実施形態のディスク制御装置で命令コードを受けた場合の処理手順を示すフローチャートである。
【図９】本実施形態の図２の制御テーブル２１２の構成を示す図である。
【図１０】本実施形態のデータの読み出し処理の処理手順を示すフローチャートである。
【図１１】本実施形態のドライブからデータを読み込む場合のデータの流れを示す図である。
【図１２】本実施形態の更新前データ１２０４をキャッシュ部１２０３で管理している場合のデータの流れを示す図である。
【図１３】本実施形態の更新後データをキャッシュ部１２０３で管理している場合のデータの流れを示す図である。
【図１４】本実施形態のデータの書き込み処理の処理手順を示すフローチャートである。
【図１５】本実施形態の書き込みデータの流れを示す図である。
【図１６】本実施形態のキャッシュに書き込んだデータがドライブに書き込まれる前の読み込みデータの流れを示す図である。
【図１７】本実施形態の更新前データ１２０４を読み込んだ後、読み込んだデータと同じアドレスのデータを書き込み要求した際のデータの流れを示す図である。
【図１８】本実施形態の書き込みデータを有効にする処理の処理手順を示すフローチャートである。
【図１９】本実施形態の書き込みデータを無効にする処理の処理手順を示すフローチャートである。
【図２０】本実施形態の更新後データ１２０５またはドライブに書き込んだデータを有効にする処理の概要を示す図である。
【図２１】本実施形態の更新後データ１２０５またはドライブに書き込んだデータを無効にする処理の概要を示す図である。
【図２２】本実施形態の書き出し処理の処理手順を示すフローチャートである。
【図２３】本実施形態の更新後データ１２０５をドライブ１２０６へ書き込む際のデータの流れを示す図である。
【符号の説明】
【００８７】
１０１及び１０２…計算機、１０３…ストレージシステム、１０４…キャッシュ、１０５…更新前データ、１０６…更新後データ、１０７…ディスク、２０１及び２０２…計算機、２０３…ネットワーク制御部、２０４…制御プロセッサ、２０５…ドライブ制御部、２０６…バス、２０７…メモリ、２０８…読み込みプログラム、２０９…書き込みプログラム、２１０…有効プログラム、２１１…無効プログラム、２１２…制御テーブル、２１３…キャッシュ領域、２１４…ドライブ、２１５…ネットワーク、２１６…ディスク制御装置、２１７…書き出しプログラム、３０１…計算機、３０２…プログラムＡ、３０３…計算機、３０４…プログラムＢ、３０５…キャッシュ領域、３０６…更新後データ、３０７…更新前データ、３０８…ドライブ、４０１…コマンド、４０２…命令コード、４０３…ＬＢＡ、４０４…データ長、４０５…グループ番号、４０６…コマンド、４０７…命令コード、４０８…ＬＢＡ、４０９…データ長、４１０…グループ番号、４１１…コマンド、４１２…命令コード、４１３…グループ番号、４１６…コマンド、４１７…命令コード、４１８…グループ番号、６０１及び６０２…グループ管理部、６０３…キャッシュ部、６０６及び６０７…ＬＢＡ管理部、６０８…グループ番号、６０９…前方グループポインタ、６１０…後方グループポインタ、６１１…ＬＢＡポインタ、６１５…更新フラグ、６１６…論理ブロックアドレス、６１７…参照キャッシュ部ポインタ、６１８…更新キャッシュ部ポインタ、６１９…前方ＬＢＡポインタ、６２０…後方ＬＢＡポインタ、６２１…グループ管理ポインタ、６２２…参照キャッシュ部サイズ、６２３…更新キャッシュ部サイズ、６２４…グループＬＢＡポインタ、１２０１及び１２０２…計算機、１２０３…キャッシュ部、１２０４…更新前データ、１２０６…ドライブ、１２０５…更新後データ。
【図１】
2007179178.tif 000003
【図２】
2007179178.tif 000004
【図３】
2007179178.tif 000005
【図４】
2007179178.tif 000006
【図５】
2007179178.tif 000007
【図６】
2007179178.tif 000008
【図７】
2007179178.tif 000009
【図８】
2007179178.tif 000010
【図９】
2007179178.tif 000011
【図１０】
2007179178.tif 000012
【図１１】
2007179178.tif 000013
【図１２】
2007179178.tif 000014
【図１３】
2007179178.tif 000015
【図１４】
2007179178.tif 000016
【図１５】
2007179178.tif 000017
【図１６】
2007179178.tif 000018
【図１７】
2007179178.tif 000019
【図１８】
2007179178.tif 000020
【図１９】
2007179178.tif 000021
【図２０】
2007179178.tif 000022
【図２１】
2007179178.tif 000023
【図２２】
2007179178.tif 000024
【図２３】
2007179178.tif 000025