(57)【要約】【課題】有効なライトデータが存在するキャッシュメモリへ更にライトデータを転送する場合に停電が発生しても、ライトデータを正しくディスクに書き込むこと。【解決手段】本発明は、ホスト計算機１７からのデータの、ディスク１５への書き込みを制御するディスクコントローラ１０であって、ディスクへ書き込まれるホスト計算機からのデータを記憶する不揮発性のキャッシュメモリ１２と、ホスト計算機からのデータを記憶する不揮発性の記憶領域１１と、データ転送手段３１とを備えている。データ転送手段は、ホスト計算機からデータを取得し、取得したデータを記憶領域に書き込み、記憶領域に書き込まれたデータをキャッシュメモリに転送し、ホスト計算機から次のデータを取得し、この取得したデータを記憶領域に書き込む。停電によりデータ転送が中断した場合には、記憶領域に書き込まれているデータを、復電時にキャッシュメモリに再度転送する。【選択図】      図１
2008015918.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機からのデータの、ディスクへの書き込みを制御するディスクコントローラであって、
前記ディスクへ書き込まれる前記ホスト計算機からのデータを記憶する不揮発性キャッシュメモリと、
前記ホスト計算機からの所定量のデータを記憶する不揮発性記憶領域と、
前記ホスト計算機から所定量のデータを取得し、取得した所定量のデータを前記不揮発性記憶領域に書き込み、しかる後に、前記不揮発性記憶領域に書き込まれた所定量のデータを前記不揮発性キャッシュメモリに転送し、転送後に、前記ホスト計算機から所定量の次のデータを取得し、前記不揮発性記憶領域に、この取得したデータを書き込むデータ転送手段とを備え、
前記データ転送手段は、停電によりデータ転送が中断した場合には、前記不揮発性記憶領域に書き込まれている所定量のデータを、復電時に、前記不揮発性キャッシュメモリに再度転送するようにした
ディスクコントローラ。
【請求項２】
前記不揮発性記憶領域を、前記不揮発性キャッシュメモリ又は前記データ転送手段に備えた請求項１に記載のディスクコントローラ。
【請求項３】
ホスト計算機からのデータの、ディスクへの書き込みを制御するディスクコントローラであって、
前記ホスト計算機からのデータを、前記ディスクへ書き込まれるキャッシュデータとして記憶することが可能な２つの記憶領域を備えた不揮発性キャッシュメモリと、
前記ホスト計算機からデータを取得し、取得したデータを前記不揮発性キャッシュメモリに転送するデータ転送手段とを備え、
前記不揮発性キャッシュメモリは、前記データ転送手段からデータが転送されてきた場合には、前記２つの記憶領域のうちの何れか一方の記憶領域に前記キャッシュデータとして記憶し、前記２つの記憶領域のうちの何れか一方の記憶領域にキャッシュデータを記憶している状態で前記データ転送手段からデータが転送されてきた場合には、前記転送されたデータを前記２つの記憶領域のうちの他方の記憶領域に記憶し、この転送が完了した後に、前記他方の記憶領域に記憶されているデータを新たなキャッシュデータとするとともに、前記一方の記憶領域へデータを記憶できるようにした
ディスクコントローラ。
【請求項４】
ディスクを備え、ホスト計算機からのデータを、前記ディスクへ書き込むディスク装置であって、
前記ディスクへ書き込まれる前記ホスト計算機からのデータを記憶する不揮発性キャッシュメモリと、
前記ホスト計算機からの所定量のデータを記憶する不揮発性記憶領域と、
前記ホスト計算機から所定量のデータを取得し、取得した所定量のデータを前記不揮発性記憶領域に書き込み、しかる後に、前記不揮発性記憶領域に書き込まれた所定量のデータを前記不揮発性キャッシュメモリに転送し、転送後に、前記ホスト計算機から所定量の次のデータを取得し、前記不揮発性記憶領域に、この取得したデータを書き込むデータ転送手段とを備え、
前記データ転送手段は、停電によりデータ転送が中断した場合には、前記不揮発性記憶領域に書き込まれている所定量のデータを、復電時に、前記不揮発性キャッシュメモリに再度転送するようにした
ディスク装置。
【請求項５】
前記不揮発性記憶領域を、前記不揮発性キャッシュメモリ又は前記データ転送手段に備えた請求項４に記載のディスク装置。
【請求項６】
ディスクを備え、ホスト計算機からのデータを、前記ディスクへ書き込むディスク装置であって、
前記ホスト計算機からのデータを、前記ディスクへ書き込まれるキャッシュデータとして記憶することが可能な２つの記憶領域を備えた不揮発性キャッシュメモリと、
前記ホスト計算機からデータを取得し、取得したデータを前記不揮発性キャッシュメモリに転送するデータ転送手段とを備え、
前記不揮発性キャッシュメモリは、前記データ転送手段からデータが転送されてきた場合には、前記２つの記憶領域のうちの何れか一方の記憶領域に前記キャッシュデータとして記憶し、前記２つの記憶領域のうちの何れか一方の記憶領域にキャッシュデータを記憶している状態で前記データ転送手段からデータが転送されてきた場合には、前記転送されたデータを前記２つの記憶領域のうちの他方の記憶領域に記憶し、この転送が完了した跡に、前記他方の記憶領域に記憶されているデータを新たなキャッシュデータとするとともに、前記一方の記憶領域へデータを記憶できるようにした
ディスク装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスク装置へのデータ転送を制御するディスクコントローラ、及びこのようなディスクコントローラを内蔵したディスク装置に関し、更に詳しくは、ホスト計算機からのデータの転送中に停電が発生した場合であっても、データを保護するディスク装置及びディスクコントーラに関する。
【背景技術】
【０００２】
図１９は、ホスト計算機２００からのデータを、ディスク１９２に書き込むためのディスク装置１９０を示す。このディスク装置１９０は、不揮発性のキャッシュメモリ１９１を備えており、ディスク１９２へのライトデータ（図１９に示す例では、すべて値は１）をホスト計算機２００から取得し、ディスク１９２に書き込む前にキャッシュメモリ１９１に一旦保持している状態を示す。
【０００３】
通常は、この後、一定時間経過、あるいは、キャッシュメモリ１９１の不足等のイベントにより、ライトデータは、ディスク１９２へ書き込まれる。ディスク１９２への書き込みが実施されるまでの間に、万が一、停電が発生した場合には、キャッシュメモリ１９１のデータは、バッテリ等によりバックアップされて保持される。
【０００４】
そして、再び電力が供給されるようになると、ディスク装置１９０は起動処理を行う際に、キャッシュメモリ１９１にディスク１９２へ書き込んでいないデータがあることを認識し、ライトデータをディスク１９２へ書き込むことで、停電によるデータの消失が防止されている。
【０００５】
一方、図１９に示す状態において、ホスト計算機２００が、さらに同一のディスク位置６０へ別のライトコマンドを実行すると、図２０に示すように、ホスト計算機２００からの新たなライトデータ（図２０に示す例では、すべて値は２）が、ＤＭＡ（ダイレクトメモリアクセス）により、キャッシュメモリ１９１へ転送される。図２１は、この転送途中の様子を示している。
【０００６】
図２１に示すような転送途中の状態において停電が発生すると、ライトデータはＤＭＡ転送中であるために、一部が新データ（値は２）で、一部が旧データ（値は１）となってしまう。
【０００７】
この状態で再び電力が供給されると、ディスク装置１９０はこれらライトデータをディスク１９２へ書き込むために、値が２である新データと、値が１である旧データとが混合した状態となる。
【０００８】
一般に、遅延書き込み用のキャッシュメモリを持たないディスク装置では、停電に対し、最小単位である１セクタ（通常は５１２バイト）に対しての書き込みで、以下の（１）から（３）のうちの何れかの状態となる。
【０００９】
（１）旧データ（例えば、値は全て１）が全領域（５１２バイト）に書き込まれており、読み出すと、値１を読み出すことができる。
【００１０】
（２）新データ（例えば、値は全て２）が全領域（５１２バイト）に書き込まれており、読み出すと、値２を読み出すことができる。
【００１１】
（３）メディアエラーとなり、全領域（５１２バイト）が読み出せなくなる。
【特許文献１】特開２００３−３３０６２７号公報
【特許文献２】特開２００４−３４２０３７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、このような従来のディスク装置では、以下のような問題がある。
【００１３】
すなわち、図２１に示すような場合、従来のディスク装置では、上記（１）乃至（３）のうちの何れの状態とも異なり、例えば値が１である旧データと、例えば値が２である新データとが入り混じったデータを読み出すことになる。これは、遅延書き込み用のディスクと異なる動作を行うこととなり、不具合をもたらす可能性があるという問題がある。
【００１４】
また、ＤＭＡ転送において、ホスト計算機２００からのデータを暗号、あるいは、復号するような仕組みを備えたディスク装置１９０では、暗号アルゴリズムにブロック暗号を採用した場合、図２１の状態からデータを読み出すと、例えば値が１であるような旧データでも、例えば値が２であるような新データでもないデータが読み出され、不具合をもたらす可能性があるという問題がある。
【００１５】
これら問題の解決に関連する技術としては、例えば特許文献１があるが、これは、停電による電圧低下が起こった時点で、ＤＭＡ中のデータを不揮発性メモリに退避させるものであり、上記課題を解決するものではない。また、特許文献２には、ＤＭＡ転送を行う前にキャッシュメモリの内容をディスク装置に書き戻す方式が開示されているが、この方式では、ＤＭＡ転送を即時に行うことができない。
【００１６】
本発明はこのような事情に鑑みてなされたものであり、有効なライトデータが存在するキャッシュメモリへ更にライトデータを転送する場合に停電が発生しても、ライトデータを正しくディスクに書き込むことが可能なディスク装置及びディスコントローラを提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記の目的を達成するために、本発明では、以下のような手段を講じる。
【００１８】
すなわち、請求項１の発明は、ホスト計算機からのデータの、ディスクへの書き込みを制御するディスクコントローラであって、ディスクへ書き込まれるホスト計算機からのデータを記憶する不揮発性キャッシュメモリと、ホスト計算機からの所定量のデータを記憶する不揮発性記憶領域と、データ転送手段とを備えている。
【００１９】
このデータ転送手段は、ホスト計算機から所定量のデータを取得し、取得した所定量のデータを不揮発性記憶領域に書き込み、しかる後に、不揮発性記憶領域に書き込まれた所定量のデータを不揮発性キャッシュメモリに転送し、転送後に、ホスト計算機から所定量の次のデータを取得し、不揮発性記憶領域に、この取得したデータを書き込む。そして、停電によりデータ転送が中断した場合には、不揮発性記憶領域に書き込まれている所定量のデータを、復電時に、不揮発性キャッシュメモリに再度転送する。
【００２０】
また、請求項２の発明は、不揮発性記憶領域を、不揮発性キャッシュメモリ又はデータ転送手段に備えた請求項１に記載のディスクコントローラである。
【００２１】
更に、請求項３の発明は、ホスト計算機からのデータの、ディスクへの書き込みを制御するディスクコントローラであって、ホスト計算機からのデータを、ディスクへ書き込まれるキャッシュデータとして記憶することが可能な２つの記憶領域を備えた不揮発性キャッシュメモリと、ホスト計算機からデータを取得し、取得したデータを不揮発性キャッシュメモリに転送するデータ転送手段とを備えている。
【００２２】
そして、不揮発性キャッシュメモリは、データ転送手段からデータが転送されてきた場合には、２つの記憶領域のうちの何れか一方の記憶領域にキャッシュデータとして記憶し、２つの記憶領域のうちの何れか一方の記憶領域にキャッシュデータを記憶している状態でデータ転送手段からデータが転送されてきた場合には、転送されたデータを２つの記憶領域のうちの他方の記憶領域に記憶し、この転送が完了した後に、他方の記憶領域に記憶されているデータを新たなキャッシュデータとするとともに、一方の記憶領域へデータを記憶できるようにした。
【００２３】
請求項４乃至６の発明は、請求項１乃至３の発明のディスクコントローラをそれぞれ備えたディスク装置である。
【発明の効果】
【００２４】
本発明によれば、有効なライトデータが存在するキャッシュメモリへ更にライトデータを転送する場合に停電が発生しても、ライトデータを正しくディスクに書き込むことが可能なディスク装置及びディスコントローラを実現することができる。
【発明を実施するための最良の形態】
【００２５】
以下に、本発明を実施するための最良の形態について図面を参照しながら説明する。
【００２６】
（第１の実施の形態）
第１の実施の形態に係るディスクコントローラについて説明する。
【００２７】
図１は、第１の実施の形態に係るディスクコントローラ１０の構成例を示す機能ブロック図である。
【００２８】
すなわち、本実施の形態に係るディスクコントローラ１０は、ホスト計算機１７に内蔵され、ホスト計算機１７のメモリ１８からのデータを、ディスク装置１６内のディスク１５に書き込むためのものであり、ＤＭＡコントローラ１１、キャッシュメモリ１２、ディスク制御部１３、及びキャッシュ管理テーブル１４を備えている。
【００２９】
なお、図１では、ホスト計算機１７に関しては、簡略のために、ディスクコントローラ１０の他には、本実施の形態に関連する構成要素であるメモリ１８とドライバ１９のみを示している。
【００３０】
メモリ１８は、ディスク１５へ書き出す、あるいは、ディスク１５から読み込むデータを格納する。
【００３１】
ドライバ１９は、ＲＡＩＤコントローラ等のディスクコントローラ１０へ、リード（読み出し）やライト（書き込み）のコマンドをディスク制御部１３へ送信し、ディスク１５へのアクセスを仲介する。
【００３２】
ＲＡＩＤコントローラ等のディスクコントローラ１０は、ホスト計算機１７に内蔵され、ＰＣＩ、ＰＣＩ−Ｘ、ＰＣＩエクスプレスなどのＩＯバスを介してホスト計算機１７内の各部位と接続している。
【００３３】
ディスク制御部１３は、ディスク（あるいはＲＡＩＤ）１５の構成管理、ディスク１５の制御などを行う。本実施の形態で特に関連するのは、ドライバ１９からコマンドを受信し、その処理を行い、結果をドライバ１９へ返却する機能である。また、コマンドの処理において、ＤＭＡコントローラ１１、キャッシュメモリ１２、及びキャッシュ管理テーブル１４を用いる。
【００３４】
キャッシュメモリ１２は、ディスク１５へ書き込むべきデータや、ディスク１５から読み出したデータを保持する。ディスク１５へ書き込むべきデータを一時的に蓄積するため、停電などによる処理の中断でデータを消失しないように、ディスクコントローラ１０への電源供給が途絶えても、内容が消えない、不揮発性記憶媒体で構成する。
【００３５】
キャッシュ管理テーブル１４は、キャッシュメモリ１２と同様、不揮発性の記憶媒体上に配置され、図２にその一例を示すように、キャッシュメモリ１２上に保持するデータの管理情報を保持する。この管理情報の項目は、キャッシュブロック番号１４ａ、ディスク番号１４ｂ、ディスクアドレス１４ｃ、使用・未使用状態１４ｄ、ライトデータの有無１４ｅ、ロック状態１４ｆからなる。
【００３６】
本明細書では、説明のために、キャッシュメモリ１２の管理単位（キャッシュブロック）は、ディスク１５のセクタと同一サイズとする。キャッシュブロックのサイズは、性能や、管理の効率化のために、ディスクセクタの倍数であることがあり、その場合にはキャッシュ管理テーブル１４の構造が一部図２と異なる場合があるが、本実施の形態での利用とは関係がないため、これ以上の説明は行わない。
【００３７】
キャッシュ管理テーブル１４は、キャッシュメモリ１２上の全キャッシュブロック分のエントリを、キャッシュブロック番号１４ａとして持つ。すなわち、１つのエントリは、キャッシュブロックに１対１で対応する。ディスク番号１４ｂと、ディスクアドレス１４ｃとは、キャッシュブロックに格納するデータと対応するディスクの位置を示す情報である。使用・未使用状態１４ｄの項目は、キャッシュブロックを使用しているか、使用していないかを示す。ライトデータの有無１４ｅは、キャッシュブロック上にディスク１５が書き出していないデータが存在するかどうかを示す。ロック状態１４ｆは、このエントリがロックされているかどうかを示す。
【００３８】
ＤＭＡコントローラ１１は、ディスク制御部１３から、データ転送のコマンドを受信し、ホスト計算機１７とキャッシュメモリ１２と間のデータ転送を制御する部位である。このようなＤＭＡコントローラ１１の構成例を図３の機能ブロック図に示す。図３に示すように、ＤＭＡコントローラ１１は、コマンドバッファ３０、転送制御部３１、第１及び第２の転送エンジン３２，３３、データバッファ３４、送信ポインタ３５、及び受信ポインタ３６を備えている。
【００３９】
コマンドバッファ３０は、ＤＭＡコントローラ１１が行うデータ転送の具体的な指示コマンド、パラメータを格納する。
【００４０】
転送制御部３１は、コマンドバッファ３０に格納された具体的な指示を行うコマンドを元に、第１及び第２の転送エンジン３２，３３を制御してデータ転送を行い、その返答をディスク制御部１３に返す。
【００４１】
第１及び第２の転送エンジン３２，３３は、データバッファ３４と、キャッシュメモリ１２あるいはホスト計算機１７のメモリ１８へのデータ転送を司る。
【００４２】
データバッファ３４は、不揮発性記憶媒体からなり、転送中のデータを保持する。データバッファの大きさは、ホスト計算機１７とディスクコントローラ１０のデータ転送の最小単位であるディスク１５のセクタサイズ（通常は５１２バイト）より大きいサイズとする。
【００４３】
送信ポインタ３５及び受信ポインタ３６も同様に不揮発性記憶媒体上にあり、データバッファ３４上のデータの送受信管理に用いる。
【００４４】
コマンドバッファ３０に格納するＤＭＡコントローラ１１のためのコマンドには、（１）ディスクコントローラ１０のキャッシュメモリ１２からホスト計算機１７への転送、あるいはその逆方向への転送を行うデータ転送（送信又は受信）コマンドがある。このデータ転送コマンドには、パラメータとして、送信元、送信先のアドレスと、転送サイズがある。また、その他のコマンドとして、（２）データバッファ３４のデータ再送コマンドがある。このコマンドは、データバッファ３４に蓄積しているデータの再転送を行うためのコマンドである。
【００４５】
次に、このようなコマンドを用いて行われる転送制御部３１による処理の流れを図４のフローチャートを用いて示す。
【００４６】
コマンドバッファ３０が、ディスク制御部１３から送られたコマンドを転送制御部３１を介して受信する（Ｓ４１）。そして、このコマンドが、データ転送コマンドである場合（Ｓ４２：Ｙｅｓ）であって、送信元がホスト計算機１７のメモリ１８であれば（Ｓ４３：Ｙｅｓ）、ホスト計算機１７からキャッシュメモリ１２へのデータ転送処理が行われる（Ｓ４４）。
【００４７】
一方、データ転送コマンドの送信元が、ホスト計算機１７のメモリ１８でなければ（Ｓ４３：Ｎｏ）、キャッシュメモリ１２のデータをホスト計算機１７のメモリ１８へ転送するデータ転送処理が行われる（Ｓ４５）。
【００４８】
更に、ステップＳ４２において、データ転送コマンドではない場合（Ｓ４２：Ｎｏ）には、データ再転送処理がなされる（Ｓ４６）。
【００４９】
ステップＳ４４乃至Ｓ４６の処理の後、転送制御部３１は、コマンド完了をディスク制御部１３に返却する（Ｓ４７）。
【００５０】
データバッファ３４では、ホスト計算機１７のメモリ１８と、キャッシュメモリ１２との間でなされるデータ転送処理において、送信ポインタ３５と受信ポインタ３６とを用いている。すなわち、データ転送処理においては、キャッシュメモリ１２への送信を完了したデータの最後を示す送信ポインタ３５と、ホスト計算機１７からのデータの先頭を示す受信ポインタ３６とを用いることによってデータバッファ３４をリングバッファとして制御している。このような送信ポインタ３５と受信ポインタ３６との利用方法を図５を用いて説明する。
【００５１】
図５（ａ）は、データバッファ３４内のデータにおける送信ポインタ３５と受信ポインタ３６との初期位置を示している。データバッファ３４がデータを受信すると、送信ポインタ３５と受信ポインタ３６との間に受信データが蓄積されることによって、受信ポインタ３６が図５（ｂ）に示すように図中右方向に進む。すなわち、受信ポインタ３６は、ホスト計算機１７から受信したデータの先頭を示し、送信ポインタ３５は、キャッシュメモリ１２への送信を完了したデータの最後を示している。
【００５２】
ステップＳ４４で行われるホスト計算機１７のメモリ１８からのキャッシュメモリ１２への転送処理（第１の転送エンジン３２が行う）と、ステップＳ４５で行われるキャッシュメモリ１２からのメモリ１８への転送処理（第２の転送エンジン３３が行う）とは、転送効率の向上のために、並行して行われる。図６は、ステップＳ４４における処理と、ステップＳ４５における処理とを行う場合に、転送制御部３１が第１の転送エンジン３２及び第２の転送エンジン３３に指示を送る処理の流れを示すフローチャートである。図６では、先ず、ステップＳ６１において、第１の転送エンジン３２に処理開始を指示し、ステップＳ６２において、第２の転送エンジン３３に処理開始を指示し、ステップＳ６３において、第１の転送エンジン３２及び第２の転送エンジン３３の処理完了を待つように示しているが、ステップＳ６１とステップＳ６２との処理は同時に行われても、あるいは逆の順序で行われても良い。
【００５３】
図７は、ステップＳ６１で行われる第１の転送エンジン３２による処理の流れの詳細を示すフローチャートである。
【００５４】
第１の転送エンジン３２は、コマンドバッファ３０に格納されているコマンドの転送サイズ分のデータをホスト計算機１７のメモリ１８からデータバッファ３４へ転送する。そして、このデータ転送が完了していれば（Ｓ７１：Ｙｅｓ）、処理を終了する。
【００５５】
完了していなければ（Ｓ７１：Ｎｏ）、データバッファ３４に空きがあるかどうかを確認する（Ｓ７２）。データバッファ３４は、図８に示すように、受信データで一杯になり、受信ポインタ３６が送信ポインタ３５と隣り合う状態になるまでデータを受信できるので、図８に示すように受信ポインタ３６が送信ポインタ３５と隣り合っていれば空きがなく（Ｓ７２：Ｎｏ）、隣り合っていなければ空きがある（Ｓ７２：Ｙｅｓ）と判定する。空きがなければ、ステップＳ７２の処理を繰り返し、空きがあればステップＳ７３の処理に進む。実際には、リングバッファのため、この条件判定だけでは十分でない場合があるが（境界の部分にまたがった場合）、その説明は割愛する。
【００５６】
ステップＳ７３では、ホスト計算機１７のメモリ１８からデータバッファ３４へデータを転送する（Ｓ７３）。この際、転送するデータ量は、データバッファ３４の空き容量（送信ポインタ３５と受信ポインタ３６との差分から計算できる）か、転送すべきデータ量の残りかの小さい量とし、データの転送を実行する。転送を実行したら、受信ポインタ３６を転送量の分だけ進める（Ｓ７４）。
【００５７】
また、図９は、ステップＳ６２で行われる第２の転送エンジン３３による処理の流れの詳細を示すフローチャートである。
【００５８】
すなわち、第２の転送エンジン３３は、コマンドバッファ３０に格納されているコマンドの転送サイズ分のデータをデータバッファ３４からキャッシュメモリ１２に転送する。そして、このデータ転送が完了していれば（Ｓ９１：Ｙｅｓ）、処理を終了する。
【００５９】
完了していなければ（Ｓ９１：Ｎｏ）、データバッファ３４に５１２バイト以上データがあるかどうかを確認し（Ｓ９２）、なければ、ステップＳ９２の処理を繰り返し、あればステップＳ９３の処理に進む。
【００６０】
ステップＳ９３では、データバッファ３４からキャッシュメモリ１２へデータを転送する（Ｓ９３）。転送を実行したら、受信ポインタ３６を転送量の分だけ進める（Ｓ９４）。
【００６１】
このように、第２の転送エンジン３３は、データバッファ３４に５１２バイト分のデータが蓄積されたら、５１２バイト分のデータごとにキャッシュメモリ１２へデータを転送する。このように転送することで、データ転送中のキャッシュメモリが５１２バイト分の領域のみであるように限定できる。また、データバッファ３４に５１２バイトのデータが必ず蓄積されているので、停電等により処理を中断してしまった場合でも、次の実行時にデータバッファ３４には転送中だったデータが５１２バイト分は必ず残されており、図１０のフローチャートに示すように、データバッファ３４に５１２バイト以上のデータが残っているか否かを判定する（Ｓ１０１）。これは、上述したように受信ポインタ３６及び送信ポインタ３５の値から判定する。そして、残っている場合（Ｓ１０１：Ｙｅｓ）には、５１２バイトの倍数分だけデータバッファ３４からキャッシュメモリ１２へデータを転送することにより再度転送する（Ｓ１０２）ことで、前回転送中だったデータをキャッシュメモリ１２に完全に反映する。
【００６２】
次にディスク制御部１３の処理について図１１に示すフローチャートを用いて説明する。
【００６３】
ディスク制御部１３は、ホスト計算機１７のドライバ１９からディスク１５へのアクセスコマンドを処理する。図１１は、ホスト計算機１７のドライバ１９からの処理の流れを示している。ホスト計算機１７のドライバ１９は、ＯＳのモジュールとして動作し、ファイルシステムや、アプリケーションからディスク１５へのアクセス要求を受信すると、ディスク制御部１３に受け渡す（Ｓ１１１）。ディスク制御部１３は、このアクセス要求を処理し（Ｓ１１２）、例えばホスト計算機１７へ割り込むことによって応答を返す（Ｓ１１３）。その際、データのやりとりのために、ホスト計算機１７上のメモリ１８をバッファとして使用する。すると、ドライバ１９の割り込み処理が動作し、ディスク１５への要求処理を完了させる（Ｓ１１４）。
【００６４】
なお、ディスク１５からのリード要求の場合には、ディスク１５から読み出したデータは、最終的にホスト計算機１７のメモリ１８に読み込まれる。ディスク１５へのライト要求の場合には、ホスト計算機１７のメモリ１８のデータがディスク１５へ書き込まれることになる。
【００６５】
次に、ディスク制御部１３が要求を処理する流れを、図１２のフローチャートを用いて示す。本発明では、ディスク１５へのライト要求時の処理において、その効果があるため、図１２は、ライト要求時の処理を示している。
【００６６】
ディスク制御部１３が受信するライト要求は、実際は、対象となるディスク１５と、そのオフセット、ライトデータのサイズ、ライトすべきデータが格納されているホスト計算機１７のメモリアドレスからなる。そして、対象のディスク１５とオフセット、そのサイズを元に、キャッシュメモリ１２上に対応する領域を確保するための処理を行う。ここで確保したキャッシュメモリ１２上に、ホスト計算機１７のメモリ１８からのデータを格納する。
【００６７】
図１２に示すフローチャートでは、ライトデータの全領域に対応するキャッシュメモリ１２を確保するために、キャッシュメモリ１２の割り当てと、ロックとを繰り返し実施している（Ｓ１２０）。キャッシュメモリ１２の割り当ては、すでに該当するディスク１５とオフセットに対応するエントリがキャッシュ管理テーブル１４にあるかどうかを検索することで判定することができる。
【００６８】
ライトデータの全てに対して、キャッシュメモリ１２が割り当てられていない場合（Ｓ１２０：Ｎｏ）であり、キャッシュメモリ１２がすでに割り当てられていて（Ｓ１２６：Ｙｅｓ）、ロックされている場合（Ｓ１２７：Ｙｅｓ）には、上書きができないため、ロックが解除されるまで、ロック待ちを行う。ロックされていない場合（Ｓ１２７：Ｎｏ）には、ロックを実施し（Ｓ１２８）、ステップＳ１２０に戻る。ロックの状態は、図２に示すキャッシュ管理テーブル１４のロック状態１４ｆの値にて管理する。
【００６９】
キャッシュメモリ１２が割り当てられていない場合（Ｓ１２６：Ｎｏ）には、キャッシュメモリ１２の空きを探し、対応するエントリをキャッシュ管理テーブル１４に作成し（Ｓ１２９）、ステップＳ１２８に進む。内容として、ディスク番号１４ｂ、使用・未使用（使用中）１４ｄ、オフセットをセットする。
【００７０】
このようにしてキャッシュメモリ１２がすべて確保できたら(Ｓ１２０：Ｙｅｓ)、ＤＭＡコントローラ１１にデータの転送を指示する（Ｓ１２１）。ＤＭＡコントローラ１１は、図６に示すホスト計算機１７とキャッシュメモリ１２との間のデータ転送処理を開始する（Ｓ１２２）。
【００７１】
データ転送が完了したら、キャッシュ管理テーブル１４にて、対応するエントリに対し、ライトデータが存在することを記録し（Ｓ１２３）、ドライバ１９に対して、要求の完了を返答し（Ｓ１２４）、各エントリのロックを解除し（Ｓ１２５）、処理を完了する。
【００７２】
次に、キャッシュメモリ１２からディスク１５へのデータの書き出しについて説明する。
【００７３】
図１２に示すようなライトコマンドの処理では、ライトすべきデータはキャッシュメモリ１２上にコピーされているが、ディスク１５には実際に書き込まれていない。そこで、ディスク制御部１３は、一定時間ごと、あるいは、キャッシュメモリ１２の使用状態などに応じて、図１３に示すようにして、キャッシュメモリ１２上のデータをディスク１５に書き込む処理を行う。
【００７４】
すなわち、キャッシュデータの書き出しを続ける場合（Ｓ１３１：Ｎｏ）、キャッシュメモリ１２上に有効なデータが存在すれば（Ｓ１３２：Ｎｏ）、キャッシュデータを選択し（Ｓ１３３）、ロックし（Ｓ１３４）、ディスク１５への書き込みを行い（Ｓ１３５）、ライトデータ無しに設定し（Ｓ１３６）、ロックを解除し（Ｓ１３７）、ステップＳ１３１の処理に戻る。
【００７５】
このように、キャッシュデータの書き出しの終了は、一定量、あるいは、キャッシュメモリ１２上のライトデータの比率などにより、書き出しを終了するかどうか、などにより、決定する。書き出しを行う場合には、キャッシュ管理テーブル１４を検索して、ライトデータを保持するエントリを選ぶ。エントリは、ＬＲＵなどの方法を用いて選択する。選択したキャッシュメモリ１２のデータは、キャッシュ管理テーブル１４を用いてロックされ、ディスク１５に書き込まれる。
【００７６】
次に、停電などの不意の停止からの再起動において、キャッシュメモリ１２のデータをディスク１５に書き戻す復旧方法について、図１４に示すフローチャートを用いて説明する。
【００７７】
図１４のフローチャートに示す処理が、通常のキャッシュデータの書き戻しと異なるのは、ステップＳ１４２にてなされるＤＭＡコントローラ１１に再転送を指示する処理である。これにより、ＤＭＡコントローラ１１内に保持している転送中のデータをディスク１５のセクタ単位でキャッシュメモリ１２に再転送する。この処理により、キャッシュメモリ１２上で転送途中でデータが途切れた状態となっているキャッシュデータが、ディスク１５のセクタ単位で正しくなり、停電等による不意の停止にともなう、キャッシュデータの内容の不整合を回避する。
【００７８】
上述したように、本実施の形態に係るディスクコントローラ１０においては、上記のような作用により、有効なライトデータが存在するキャッシュメモリ１２へ更にライトデータを転送する場合に停電が発生しても、キャッシュメモリ１２上で転送途中でデータが途切れた状態となっているキャッシュデータが、ディスク１５のセクタ単位で正しくなり、キャッシュデータの内容の不整合を回避することが可能となる。
【００７９】
（第２の実施の形態）
図１５は、第２の実施の形態に係るディスクコントローラ１５０の構成例を含む機能ブロック図である。
【００８０】
本実施の形態に係るディスクコントローラ１５０は、第１の実施の形態に係るディスクコントローラ１０の変形例である。したがって、同一箇所については同一符番を付すことにより、重複説明を避け、異なる点について説明する。
【００８１】
第１の実施の形態に係るディスクコントローラ１０は、ホスト計算機１７に内蔵されていたが、本実施の形態に係るディスクコントローラ１５０は、ディスク装置１６に内蔵されている。
【００８２】
ホスト計算機１７ではなくディスク装置１６に内蔵されていることの他に第１の実施の形態と異なる点は、ホスト計算機１７と通信するためのインタフェースとしてＳＣＳＩ（登録商標）コントローラ１５１を付加した点である。
【００８３】
同様に、ホスト計算機１７にも、ディスクコントローラ１０と通信するためのインタフェースであるＳＣＳＩ（登録商標）コントローラ１５２を付加している。
【００８４】
そして、ＳＣＳＩコントローラ１５１と、ＳＣＳＩコントローラ１５２とを接続することによって、ホスト計算機１７とディスク装置１６との通信を可能としている。
【００８５】
第１の実施の形態では、図１に示すように、ＤＭＡコントローラ１１とメモリ１８とでデータの授受を直接行っていたが、本実施の形態では、ＤＭＡコントローラ１１とメモリ１８との間のデータ授受の際には、ＳＣＳＩコントローラ１５１,１５２を介して行う。この点を除けば、ディスクコントローラ１５０内のその他の部位であるＤＭＡコントローラ１１、キャッシュメモリ１２、ディスク制御部１３、及びキャッシュ管理テーブル１４は、第１の実施の形態で説明したものと同じ機能を有する。
【００８６】
なお、ディスク装置１６とホスト計算機１７とのインタフェースは、ＳＣＳＩコントローラに限定される訳ではなく、ＦＣ（ＦｉｂｅｒＣｈａｎｎｅｌ）や、その他のインタフェースであっても、同様の実装を取ることができる。
【００８７】
また、ＳＣＳＩコントローラ１５１とＤＭＡコントローラ１１とが一体となった実装を取り、ＳＣＳＩコントローラ１５１が、第１の実施の形態におけるＤＭＡコントローラ１１の機能をも備えるようにしても良い。
【００８８】
上述したように、本実施の形態に係るディスクコントローラ１５０においては、上記のような作用により、ホスト計算機１７ではなく、ディスク装置１６に内蔵されている場合であっても、第１の実施の形態のディスクコントローラ１０と同様に、有効なライトデータが存在するキャッシュメモリ１２へ更にライトデータを転送する場合に停電が発生しても、ライトデータを正しくディスク１５に書き込むことが可能である。
【００８９】
（第３の実施の形態）
図１６は、第３の実施の形態に係るディスクコントローラ１６０の構成例を含む機能ブロック図である。
【００９０】
本実施の形態に係るディスクコントローラ１６０もまた、第１の実施の形態に係るディスクコントローラ１０の変形例である。したがって、同一箇所については同一符番を付すことにより、重複説明を避け、異なる点について説明する。
【００９１】
すなわち、本実施の形態に係るディスクコントローラ１６０は、図１に示す第１の実施の形態に係るディスクコントローラ１０におけるＤＭＡコントローラ１１の代わりに、データ転送部１６１を備えた点のみが異なる。
【００９２】
データ転送部１６１は、データ転送のみを行い、ＤＭＡコントローラ１１とは異なり、データバッファ３４、送信ポインタ３５、受信ポインタ３６のような不揮発性記憶媒体を備えていない。また、コマンドバッファ３０や転送制御部３１をも備えていない。
【００９３】
このような構成の本実施の形態に係るディスクコントローラ１６０は、データ転送時におけるキャッシュメモリ１２の管理方式が第１の実施の形態と異なる。
【００９４】
すなわち、本実施の形態に係るディスクコントローラ１６０では、すでにライトデータを保持するキャッシュメモリ１２への再度のライトデータの転送の場合には、キャッシュメモリ１２上に仮領域を確保し、データ転送を行う。そして、データ転送が完了したら、仮の領域を本来のキャッシュデータとし、それまでのキャッシュ領域を解放する。こうすることで、キャッシュメモリ１２上のライトデータへのデータ転送による上書きの状態を回避することができ、データ転送の中断によるデータの不整合が発生しないようにしている。
【００９５】
このような構成の本実施の形態に係るディスクコントローラ１６０によるライト要求処理時のキャッシュ管理の方法を図１７に示すフローチャートを用いて説明する。
【００９６】
図１７に示すフローチャートは、図１２に示すフローチャートと同じ処理を行うステップについては、同一のステップ番号を付している。したがって、ここでは、ステップＳ１７０乃至ステップＳ１７２について説明する。
【００９７】
ステップＳ１７０では、すでにキャッシュメモリ１２上にライトデータがある場合、上書きを避けるために、キャッシュメモリ１２上に仮領域を確保する。
【００９８】
ステップＳ１７１では、データ転送部１６１に対して、ホスト計算機１７のメモリ１８から、ステップＳ１７０で確保した仮領域を、データ転送先として指定する。
【００９９】
ステップＳ１７２では、仮領域をキャッシュ領域とし、これまでデータを保持していたキャッシュ領域を解放する。
【０１００】
上述したように、本実施の形態に係るディスクコントローラ１６０においては、上記のような作用により、データバッファ３４、送信ポインタ３５、受信ポインタ３６のような不揮発性記憶領域を持つＤＭＡコントローラ１１を備えていない場合であっても、データ転送機能を備えたデータ転送部１６１を用いるとともに、キャッシュメモリ１２上に仮のキャッシュ領域を確保することによって、有効なライトデータが存在するキャッシュメモリ１２へ更にライトデータを転送する場合に停電が発生しても、ライトデータを正しくディスク１５に書き込むことが可能となる。
【０１０１】
（第４の実施の形態）
図１８は、第４の実施の形態に係るディスクコントローラ１８０の構成例を含む機能ブロック図である。
【０１０２】
本実施の形態に係るディスクコントローラ１８０は、第１の実施の形態に係るディスクコントローラ１０の変形例である。したがって、同一箇所については同一符番を付すことにより、重複説明を避け、異なる点について説明する。
【０１０３】
すなわち、本実施の形態に係るディスクコントローラ１８０は、第１の実施の形態に係るディスクコントローラ１０におけるＤＭＡコントローラ１１とキャッシュメモリ１２との間に暗号化装置１８１を付加した構成としている。
【０１０４】
暗号化装置１８１は、ホスト計算機１７のメモリ１８のデータをＤＭＡコントローラ１１から渡され、そのデータを暗号化して、キャッシュメモリ１２へ格納する。逆に、キャッシュメモリ１２からＤＭＡコントローラ１１経由でホスト計算機１７のメモリ１８へデータを格納する際には、そのデータを復号化してＤＭＡコントローラ１１に渡す。なお、暗号化装置１８１が実施する暗号のアルゴリズムは、ＡＥＳやＤＥＳなどのブロック暗号を想定しているが、これらは一例であって、限定されるものではない。
【０１０５】
このような実装では、ホスト計算機１７からのデータは、キャッシュメモリ１２上ではすべて暗号化されていることになる。従って、ホスト計算機１７からのデータは、全て暗号化された後にディスク１５に保存される。
【０１０６】
この場合、停電等により転送が中断した場合、既に［背景技術］において説明したように、最初にホスト計算機１７から転送されたデータと、ＤＭＡ転送中だったデータの暗号化したデータが、キャッシュメモリ１２上に入り混じる状態が発生する。図２１では、一例として、キャッシュメモリ１９１に、値が１又は２のみのデータが記憶された状態を示しているが、それに代わって、値が暗号化されたデータが記憶されていることになる。
【０１０７】
仮にこのような状態から、再度動作を開始し、このキャッシュメモリ１２の内容をディスク１５に書き込んでしまうと、このディスク１５の内容をホスト計算機１７からリードした場合、旧データと新データの暗号文が入り混じったデータをディスク１５からキャッシュメモリ１２へ読み出し、そのデータを復号することになる。そして、その後のリードアクセスでは、旧データでも新データでもないデータを読み出す事態が発生する。
【０１０８】
このように暗号文が混合してしまった場合には、正しく復号を行うことができず、旧データでも新データでもないデータを復号してしまい、ホスト計算機１７に返却する可能性がある。
【０１０９】
本実施の形態においては、暗号化の処理以外の部分に対して、第１の実施の形態と同様の処理を行うことで、キャッシュメモリ１２上に転送中だったデータの暗号文を完全に転送するので、暗号文が入り混じる状態を回避する。
【０１１０】
上述したように、本実施の形態に係るディスクコントローラ１８０においては、上記のような作用により、データの暗号化を伴う場合であっても、暗号化の処理以外の部分に対して、第１の実施の形態と同様の処理を行うことで、キャッシュメモリ１２上に転送中だったデータの暗号文を完全に転送することができる。
【０１１１】
その結果、暗号文が入り混じる状態が回避され、有効なライトデータが存在するキャッシュメモリ１２へ更にライトデータを転送する場合に停電が発生しても、ライトデータを正しくディスク１５に書き込むことが可能となる。
【０１１２】
以上、本発明を実施するための最良の形態について、添付図面を参照しながら説明したが、本発明はかかる構成に限定されない。特許請求の範囲の発明された技術的思想の範疇において、当業者であれば、各種の変更例及び修正例に想到し得るものであり、それら変更例及び修正例についても本発明の技術的範囲に属するものと了解される。
【図面の簡単な説明】
【０１１３】
【図１】第１の実施の形態に係るディスクコントローラの構成例を示す機能ブロック図。
【図２】キャッシュ管理テーブルの一例を示すデータ構成図。
【図３】ＤＭＡコントローラの構成例を示す機能ブロック図。
【図４】転送制御部による転送処理の流れを示すフローチャート。
【図５】送信ポインタと受信ポインタとによってリングバッファとして用いられるデータバッファを示す図。
【図６】転送制御部が第１及び第２の転送エンジンに指示を送る処理の流れを示すフローチャート。
【図７】ステップＳ６１で行われる第１の転送エンジンによる処理の流れの詳細を示すフローチャート。
【図８】受信データで一杯になった状態のデータバッファを示す図。
【図９】ステップＳ６２で行われる第２の転送エンジンによる処理の流れの詳細を示すフローチャート。
【図１０】データ転送処理を再開する場合における処理の流れを示すフローチャート。
【図１１】ディスク制御部の処理の流れを示すフローチャート。
【図１２】ディスク制御部が要求する処理の流れを示すフローチャート。
【図１３】ディスク制御部がキャッシュメモリ上のデータをディスクに書き込む処理の流れを示すフローチャート。
【図１４】再起動時にキャッシュメモリのデータをディスクに書き戻す復旧処理の流れを示すフローチャート。
【図１５】第２の実施の形態に係るディスクコントローラの構成例を含む機能ブロック図。
【図１６】第３の実施の形態に係るディスクコントローラの構成例を含む機能ブロック図。
【図１７】第３の実施の形態に係るディスクコントローラによるライト要求処理時のキャッシュ管理の処理の流れを示すフローチャート。
【図１８】第４の実施の形態に係るディスクコントローラの構成例を含む機能ブロック図。
【図１９】キャッシュメモリが、ライトデータをホスト計算機から取得し、ディスクに書き込む前に一旦保持している状態を示す図。
【図２０】ホスト計算機からの新たなライトデータが転送されている途中におけるキャッシュメモリの状態を示す図。
【図２１】ホスト計算機からのライトデータの転送途中に停電が発生した場合、復電後にディスクに書き込まれるデータの状態を示す図。
【符号の説明】
【０１１４】
１０…ディスクコントローラ，１１…ＤＭＡコントローラ，１２…キャッシュメモリ，１３…ディスク制御部，１４…キャッシュ管理テーブル，１５…ディスク，１６…ディスク装置，１７…ホスト計算機，１８…メモリ，１９…ドライバ，３０…コマンドバッファ，３１…転送制御部，３２…第１の転送エンジン，３３…第２の転送エンジン，３４…データバッファ，３５…送信ポインタ，３６…受信ポインタ，１５０…ディスクコントローラ，１５１，１５２…ＳＣＳＩコントローラ，１６０…ディスクコントローラ，１６１…データ転送部，１８０…ディスクコントローラ，１８１…暗号化装置，１９０…ディスク装置，１９１…キャッシュメモリ，１９２…ディスク，２００…ホスト計算機
【図１】
2008015918.tif 000003
【図２】
2008015918.tif 000004
【図３】
2008015918.tif 000005
【図４】
2008015918.tif 000006
【図５】
2008015918.tif 000007
【図６】
2008015918.tif 000008
【図７】
2008015918.tif 000009
【図８】
2008015918.tif 000010
【図９】
2008015918.tif 000011
【図１０】
2008015918.tif 000012
【図１１】
2008015918.tif 000013
【図１２】
2008015918.tif 000014
【図１３】
2008015918.tif 000015
【図１４】
2008015918.tif 000016
【図１５】
2008015918.tif 000017
【図１６】
2008015918.tif 000018
【図１７】
2008015918.tif 000019
【図１８】
2008015918.tif 000020
【図１９】
2008015918.tif 000021
【図２０】
2008015918.tif 000022
【図２１】
2008015918.tif 000023