(57)【要約】【課題】データ部に制御情報部が付加されたセクタデータを読み出し／書き込みするためのキャッシュアクセスが、最小のアクセス回数で高速に行えるようにする。【解決手段】アドレス変換回路２１は、キャッシュメモリ内のデータ部格納領域及び制御情報部格納領域へのアクセスのために、データ部アドレスを制御情報部アドレスに変換する。データ分離・復元回路２２は、データ部アドレス及び当該アドレスから変換された制御情報部アドレスに従ってそれぞれキャッシュメモリをアクセスし、セクタデータの書き込み時には、セクタデータをデータ部のデータ及び制御情報部のデータに分離して、データ部格納領域及び制御情報部格納領域に書き込み、セクタデータの読み出し時には、セクタデータのデータ部のデータ及び制御情報部のデータを、それぞれデータ部格納領域及び制御情報部格納領域から読み出した後、対応するセクタデータを復元する。【選択図】      図２
2005293118.tif 000002
【特許請求の範囲】
【請求項１】
データ部と当該データ部に付加される当該データ部より小さなサイズの制御情報部とで構成される１セクタのデータを最小のアクセス単位とするディスクデータの一部を保持するディスクキャッシュとしての、複数セクタのデータを前記データ部のデータ及び前記制御情報部のデータに分離して保持するためのデータ部格納領域及び制御情報部格納領域が確保されたキャッシュメモリを備えたディスク制御装置に適用される、前記キャッシュメモリへのアクセスを制御するディスクキャッシュ制御回路であって、
前記データ部格納領域内の任意のデータ部を指定するデータ部アドレスを、当該データ部に対応する前記制御情報部格納領域内の制御情報部を指定する制御情報部アドレスに変換するアドレス変換回路と、
前記データ部のデータに対応する前記データ部アドレス及び当該データ部アドレスをもとに前記アドレス変換回路によって変換された制御情報部アドレスに従ってそれぞれ前記キャッシュメモリをアクセスすることにより、前記キャッシュメモリへのセクタデータの書き込み時には、当該セクタデータを前記データ部のデータ及び前記制御情報部のデータに分離して、それぞれ前記データ部格納領域及び前記制御情報部格納領域に書き込み、前記キャッシュメモリからのセクタデータの読み出し時には、当該セクタデータの前記データ部のデータ及び前記制御情報部のデータを、それぞれ前記データ部格納領域及び前記制御情報部格納領域から読み出した後、対応するセクタデータを復元するデータ分離・復元回路と
を具備することを特徴とするディスクキャッシュ制御回路。
【請求項２】
前記制御情報部のデータを複数セクタ分格納する、前記キャッシュメモリのアクセス単位と同一サイズの制御情報部格納レジスタを更に具備し、
前記データ分離・復元回路は、前記キャッシュメモリへの連続する複数セクタのデータの書き込み時には、当該複数セクタの前記データ部のデータを前記データ部格納領域に順に書き込む毎に、当該データ部のデータに対応する前記制御情報部のデータを、前記アドレス変換回路によって変換された前記制御情報部アドレスに対応する前記制御情報部格納レジスタ内の領域に書き込み、前記制御情報部格納レジスタに複数セクタ分の前記制御情報部のデータが格納された段階で、当該複数セクタ分の前記制御情報部のデータを、当該複数セクタ分の前記制御情報部に対応する前記制御情報部アドレスに共通の、前記キャッシュメモリの１アクセス単位に対応する上位制御情報部アドレスに従い、前記制御情報部格納領域にまとめて書き込む
ことを特徴とする請求項１記載のディスクキャッシュ制御回路。
【請求項３】
前記データ分離・復元回路は、前記キャッシュメモリからの複数セクタのデータの読み出しのために、当該複数セクタの前記データ部のデータを前記データ部格納領域から順に読み出す際には、当該データ部のデータに対応する前記制御情報部のデータを含む、前記制御情報部格納レジスタのサイズに一致する複数セクタ分の前記制御情報部のデータを前記制御情報部格納領域から読み出して前記制御情報部格納レジスタに格納し、前記データ部格納領域から前記データ部のデータを読み出した際には、前記制御情報部格納レジスタから当該データ部のデータに対応する前記制御情報部のデータを取り出して、セクタデータを復元することを特徴とする請求項２記載のディスクキャッシュ制御回路。
【請求項４】
前記アドレス変換回路は、
前記制御情報部アドレスを保持する制御情報部アドレスレジスタと、
前記制御情報部アドレスレジスタに保持されている前記制御情報部アドレスを、前記制御情報部格納レジスタに前記制御情報部のデータが格納される毎に更新する制御情報部アドレス更新回路と、
前記制御情報部格納レジスタに格納されている前記制御情報部のデータを前記制御情報部格納領域にまとめて書き込む際の、当該制御情報部のデータに対応する前記制御情報部アドレスに共通の、前記キャッシュメモリの１アクセス単位に対応する上位制御情報部アドレスを保存する制御情報部アドレス保存レジスタと、
前記制御情報部アドレス更新回路によって更新された制御情報部アドレスの前記キャッシュメモリの１アクセス単位に対応する上位制御情報部アドレスと前記制御情報部アドレス保存レジスタに保存されている前記上位制御情報部アドレスとの一致／不一致を検出する一致検出器とを含み、
前記データ分離・復元回路は、前記一致検出器により不一致が検出された場合に、前記制御情報部格納レジスタに格納されている前記制御情報部のデータを、前記制御情報部アドレス保存レジスタに保存されている前記上位制御情報部アドレスに従い、前記制御情報部格納領域にまとめて書き込む、
ことを特徴とする請求項２記載のディスクキャッシュ制御回路。
【請求項５】
前記アドレス変換回路は、前記制御情報部格納レジスタに格納されている前記制御情報部のデータが、前記データ分離・復元回路により前記制御情報部格納領域にまとめて書き込まれた場合、前記制御情報部アドレス保存レジスタに保存されている前記上位制御情報部アドレスを、その時点において前記制御情報部アドレス保存レジスタに保持されている前記制御情報部アドレスの前記上位制御情報部アドレスに更新する上位制御情報部アドレス更新回路を更に含むことを特徴とする請求項４記載のディスクキャッシュ制御回路。
【請求項６】
前記アドレス変換回路は、
前記データ部格納領域内のアクセスすべきデータ部を指定する前記データ部アドレスを保持するデータ部アドレスレジスタと、
前記データ部アドレスレジスタに保持されている前記データ部アドレスを、前記データ部格納領域へのアクセスに応じて更新するデータ部アドレス更新回路とを更に含み、
前記ディスクキャッシュ制御回路は、
前記キャッシュメモリへのセクタデータの書き込み時に、当該セクタデータの前記データ部と前記制御情報部との間でデータ転送が中断した場合、前記データ部アドレスレジスタに保持されているデータ部アドレスを前記ディスク制御装置の主コントローラに通知するデータ転送中断通知手段を更に具備する
ことを特徴とする請求項１記載のディスクキャッシュ制御回路。
【請求項７】
前記データ部アドレス更新回路は、前記データ部の最後のデータを前記データ部格納領域に書き込んだ際には、当該データ部に付加されている前記制御情報部のデータを受信した後に、前記データ部アドレスレジスタに保持されている前記データ部アドレスを更新することを特徴とする請求項６記載のディスクキャッシュ制御回路。
【請求項８】
ホストからの要求に応じてディスクアクセスを制御するディスク制御装置において、
データ部と当該データ部に付加される当該データ部より小さなサイズの制御情報部とで構成される１セクタのデータを最小のアクセス単位とするディスクデータの一部を保持するディスクキャッシュとしてのキャッシュメモリであって、複数セクタのデータを前記データ部のデータ及び前記制御情報部のデータに分離して保持するためのデータ部格納領域及び制御情報部格納領域が確保されたキャッシュメモリと、
前記キャッシュメモリへのアクセスを制御するディスクキャッシュ制御回路であって、前記データ部格納領域内の任意のデータ部を指定するデータ部アドレスを、当該データ部に対応する前記制御情報部格納領域内の制御情報部を指定する制御情報部アドレスに変換するアドレス変換回路と、前記データ部のデータに対応する前記データ部アドレス及び当該データ部アドレスをもとに前記アドレス変換回路によって変換された制御情報部アドレスに従ってそれぞれ前記キャッシュメモリをアクセスすることにより、前記キャッシュメモリへのセクタデータの書き込み時には、当該セクタデータを前記データ部のデータ及び前記制御情報部のデータに分離して、それぞれ前記データ部格納領域及び前記制御情報部格納領域に書き込み、前記キャッシュメモリからのセクタデータの読み出し時には、当該セクタデータの前記データ部のデータ及び前記制御情報部のデータを、それぞれ前記データ部格納領域及び前記制御情報部格納領域から読み出した後、対応するセクタデータを復元するデータ分離・復元回路とを含むディスクキャッシュ制御回路と
を具備することを特徴とするディスク制御装置。
【請求項９】
データ部と当該データ部に付加される当該データ部より小さなサイズの制御情報部とで構成される１セクタのデータを最小のアクセス単位とするディスクデータの一部を保持するディスクキャッシュとしての、複数セクタのデータを前記データ部のデータ及び前記制御情報部のデータに分離して保持するためのデータ部格納領域及び制御情報部格納領域が確保されたキャッシュメモリを備えたディスク制御装置に適用される、前記キャッシュメモリへのアクセスを制御するためのディスクキャッシュ制御方法において、
前記データ部格納領域内の任意のデータ部を指定するデータ部アドレスを、当該データ部に対応する前記制御情報部格納領域内の制御情報部を指定する制御情報部アドレスに変換するステップと、
前記データ部のデータに対応する前記データ部アドレス及び当該データ部アドレスをもとに変換された前記制御情報部アドレスに従って、前記キャッシュメモリへのセクタデータの書き込みを制御するステップであって、当該セクタデータを前記データ部のデータ及び前記制御情報部のデータに分離して、それぞれ前記データ部格納領域及び前記制御情報部格納領域に書き込むステップと、
前記データ部のデータに対応する前記データ部アドレス及び当該データ部アドレスをもとに変換された前記制御情報部アドレスに従って、前記キャッシュメモリからのセクタデータの読み出しを制御するステップであって、当該セクタデータの前記データ部のデータ及び前記制御情報部のデータを、それぞれ前記データ部格納領域及び前記制御情報部格納領域から読み出した後、対応するセクタデータを復元するステップと
を具備することを特徴とするディスクキャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスクデータの一部を保持するディスクキャッシュとして用いられるキャッシュメモリを備えたディスク制御装置に係り、特に当該キャッシュメモリへのアクセスを制御するディスクキャッシュ制御回路、ディスク制御装置及びディスクキャッシュ制御方法に関する。
【背景技術】
【０００２】
ホストコンピュータ（以下、ホストと称する）によって利用される外部記憶装置として、ディスク装置、或いはディスクアレイ装置が知られている。この種の装置、例えばディスクアレイ装置は、一般に複数のディスク装置とディスク制御装置とを備えている。ディスク制御装置は、複数のディスク装置とホストとの間に設けられており、当該ホストからの要求に応じて複数のディスク装置を制御する。最近のディスク制御装置はディスクデータの一部を一時的に保持する、いわゆるディスクキャッシュとして用いられるキャッシュメモリと、ディスクキャッシュ制御回路（データ転送制御回路）とを備えている（例えば特許文献１参照）。このような構成のディスク制御装置を備えたディスクアレイ装置によれば、ディスクデータの一部を、ディスクキャッシュ制御回路（データ転送制御回路）の制御によりディスク制御装置内のキャッシュメモリに格納することで、ホストから要求されたデータのライトまたはリード処理を高速に実行することが可能となる。
【０００３】
ホストからのデータアクセスは、ディスク装置のアクセスの最小単位であるセクタを基本単位として実行される。一般的には、ディスク装置の１セクタは５１２バイト（５１２Ｂ）である。このため、キャッシュメモリには、ディスクデータが５１２バイト単位で格納される。
【０００４】
ところでキャッシュメモリは、ＤＲＡＭ（Dynamic Random Access Memory）を用いて構成されるのが一般的である。このＤＲＡＭは、数クロックサイクルのデータ転送を連続して実行することによってデータの転送効率を上げるように構成されている。このような転送はバースト転送と呼ばれる。
【０００５】
バースト転送の単位を大きくすると、バースト転送の単位が小さい場合と比較して、ディスクキャッシュ制御回路（データ転送制御回路）の構成が簡単になるというメリットがある。その反面、キャッシュメモリへのアクセスが、バースト転送の単位で実行されることから、開始アドレス、或いは終了アドレスがバースト転送の境界にない場合には、アクセスサイクルが増加するというデメリットがある。しかし、バースト転送単位を小さくすると、ディスクキャッシュ制御回路（データ転送制御回路）の構成がバースト転送の単位が大きい場合と比較して複雑になるというデメリットがある。
【特許文献１】特開２００１−１６６９９３号公報（段落００１７乃至００２１、図１及び２）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
最近、ディスク装置のアクセスの最小単位であるセクタ（例えば５１２バイト）を単位に、制御情報としての例えば８バイト（８Ｂ）のエラーチェックコードを付加し、セクタ単位でのエラーチェックを行うことによって、ディスクアレイ装置のデータのエラーチェック機能を強化する手法が提案されている。この手法を採用した場合、ディスク装置の１セクタのデータが５１２バイトから、５２０バイトになる。この５２０バイトのうち、データの部分、つまり５１２バイトの部分をデータ部と呼び、エラーチェックコード（制御情報）の部分、つまり残りの８バイトの部分をコード部（制御情報部）と呼ぶ。
【０００７】
従来の１セクタ５１２バイトの場合、キャッシュメモリのアクセス単位を例えば６４バイトとし、当該キャッシュメモリのバースト転送単位を８バイト幅＊８クロックの６４バイト単位にすると、当該５１２バイトはキャッシュメモリのアクセス単位の倍数（８倍）となる。この場合、キャッシュメモリアクセスの開始アドレス及び終了アドレスが、必ずバースト転送の境界となり、１セクタのデータの開始位置と終了位置とは、キャッシュメモリのアクセス単位の境界に一致する。したがって、当該キャッシュメモリのデータは図１１（ａ）のように配置される。また、１セクタのデータアクセスは、キャッシュメモリとの間のバースト転送（キャッシュメモリアクセス）を８回実行することにより実現される。
【０００８】
ところが、１セクタを、８バイトのエラーチェックコードが付加された５２０バイトとした場合、キャッシュメモリのアクセス単位の倍数とはならないため、端数のアクセスが必ず発生する。つまり、キャッシュメモリアクセスの開始アドレス及び終了アドレスは、必ずしもバースト転送の境界となるとは限らず、１セクタのデータの開始位置または終了位置が、キャッシュメモリのアクセス単位の境界に一致するとは限らない。この場合、キャッシュメモリのデータは図１１（ｂ）のように配置される。ここでは、１セクタをアクセスするには、キャッシュメモリとの間のバースト転送（キャッシュメモリアクセス）を９回実行する必要がある。また、キャッシュの管理単位が、５２０バイト単位となるために、キャッシュを管理するためのファームウェアをフォーマットに合わせて変更する必要がある。
【０００９】
本発明は上記事情を考慮してなされたものでその目的は、データ部に制御情報部が付加されたセクタデータを読み出し／書き込みするためのキャッシュメモリアクセスの制御が簡略化でき、当該キャッシュアクセスが高速化に行えるディスクキャッシュ制御回路、ディスク制御装置及びディスクキャッシュ制御方法を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の１つの観点によれば、データ部と当該データ部に付加される当該データ部より小さなサイズの制御情報部とで構成される１セクタのデータを最小のアクセス単位とするディスクデータの一部を保持するディスクキャッシュとしての、複数セクタのデータを上記データ部のデータ及び上記制御情報部のデータに分離して保持するためのデータ部格納領域及び制御情報部格納領域が確保されたキャッシュメモリを備えたディスク制御装置に適用される、上記キャッシュメモリへのアクセスを制御するディスクキャッシュ制御回路が提供される。このディスクキャッシュ制御回路は、上記データ部格納領域内の任意のデータ部を指定するデータ部アドレスを、当該データ部に対応する上記制御情報部格納領域内の制御情報部を指定する制御情報部アドレスに変換するアドレス変換回路と、上記データ部のデータに対応する上記データ部アドレス及び当該データ部アドレスをもとに上記アドレス変換回路によって変換された制御情報部アドレスに従ってそれぞれ上記キャッシュメモリをアクセスすることにより、上記キャッシュメモリへのセクタデータの書き込み時には、当該セクタデータを上記データ部のデータ及び上記制御情報部のデータに分離して、それぞれ上記データ部格納領域及び上記制御情報部格納領域に書き込み、上記キャッシュメモリからのセクタデータの読み出し時には、当該セクタデータの上記データ部のデータ及び上記制御情報部のデータを、それぞれ上記データ部格納領域及び上記制御情報部格納領域から読み出した後、対応するセクタデータを復元するデータ分離・復元回路とを備えている。
【００１１】
上記の構成においては、セクタデータを構成するデータ部のデータと制御情報部のデータ（例えば、データ部のデータのエラーチェックのためのエラーチェックコード）とが、キャッシュメモリ上では分離して保持される。これにより、複数の連続するセクタを扱う場合、データ部のデータ及び制御情報部のデータをキャッシュメモリ上でシーケンシャルに取り扱うことができるようになり、キャッシュ制御が簡略化されて、キャッシュアクセスが高速に行える。
【００１２】
ここで、上記制御情報部のデータを複数セクタ分格納する、上記キャッシュメモリのアクセス単位と同一サイズの制御情報部格納レジスタを追加し、上記データ分離・復元回路では、上記キャッシュメモリへの連続する複数セクタのデータの書き込み時には、当該複数セクタの上記データ部のデータを上記データ部格納領域に順に書き込む毎に、当該データ部のデータに対応する上記制御情報部のデータを、上記アドレス変換回路によって変換された上記制御情報部アドレスに対応する上記制御情報部格納レジスタ内の領域に書き込み、上記制御情報部格納レジスタに複数セクタ分の上記制御情報部のデータが格納された段階で、当該複数セクタ分の上記制御情報部のデータを、当該複数セクタ分の上記制御情報部に対応する上記制御情報部アドレスに共通の、上記キャッシュメモリの１アクセス単位に対応する上位制御情報部アドレスに従い、上記制御情報部格納領域にまとめて書き込む構成とすると良い。このようにすると、キャッシュメモリに対するアクセス回数を削減でき、シーケンシャルアクセスのアクセス性能を向上させることが可能になる。
【００１３】
また、上記アドレス変換回路に、上記データ部格納領域内のアクセスすべきデータ部を指定する上記データ部アドレスを保持するデータ部アドレスレジスタと、このデータ部アドレスレジスタに保持されているデータ部アドレスを、上記データ部格納領域へのアクセスに応じて更新するデータ部アドレス更新回路とを追加し、更に上記ディスクキャッシュ制御回路に、上記キャッシュメモリへのセクタデータの書き込み時に、当該セクタデータの上記データ部と上記制御情報部との間でデータ転送が中断した場合、上記データ部アドレスレジスタに保持されているデータ部アドレスを上記ディスク制御装置の主コントローラに通知するデータ転送中断通知手段を追加すると良い。このようにすると、キャッシュメモリへのセクタデータの書き込み時に、当該セクタデータのデータ部と制御情報部との間でデータ転送が中断しても、その時点においてデータ部アドレスレジスタに保持されているデータ部アドレスで指定されるデータ部のデータ（または当該データ部のデータのうち最後にデータ部格納領域に書き込まれるデータ及び制御情報部のデータ）から、データ転送を再開させてキャッシュメモリに書き込むことができる。
【発明の効果】
【００１４】
本発明によれば、セクタデータを構成するデータ部のデータと制御情報部のデータとを、キャッシュメモリ上で分離して保持・管理することにより、複数の連続するセクタを扱う場合、データ部のデータ及び制御情報部のデータをキャッシュメモリ上でシーケンシャルに取り扱うことができる。これにより、キャッシュ制御を簡略化でき、セクタデータを読み出し／書き込みするためのキャッシュアクセスが高速に行える。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の一実施形態につき図面を参照して説明する。  
図１は本発明の一実施形態に係るディスクアレイ装置を備えた計算機システムの構成を示すブロック図である。この計算機システムは、ディスクアレイ装置１と、当該ディスクアレイ装置１を外部記憶装置として利用するホスト（ホストコンピュータ）２とから構成される。
【００１６】
ディスクアレイ装置１は、ディスク制御装置１１と、当該ディスク制御装置１１によって制御されるディスクアレイ１２とから構成される。ディスクアレイ１２は、複数のディスク装置、例えば６台のハードディスクドライブ（以下、ＨＤＤと称する）１２１-1〜１２１-6から構成される。
【００１７】
ディスク制御装置１１は、ホスト２と、ホストインタフェースバス１３を介して接続されている。ディスク制御装置１１はまた、ディスクアレイ１２（を構成するＨＤＤ１２１-1〜１２１-6）と、ディスクインタフェースバス１４を介して接続されている。ホストインタフェースバス１３は、例えばＳＣＳＩ（Small Computer System Interface）バス、或いはファイバチャネル（Fibre Channel）である。ディスクインタフェースバス１４も、ＳＣＳＩバス、或いはファイバチャネルである。なお、ディスク制御装置１１とホスト２とがネットワークを介して接続されていても構わない。
【００１８】
ディスク制御装置１１は、ＣＰＵ１１１と、入出力制御回路（以下、ＩＯ制御回路と称する）１１２と、ディスク制御回路１１３と、キャッシュメモリ１１４と、ディスクキャッシュ制御回路１１５とから構成される。ＣＰＵ１１１、ＩＯ制御回路１１２、ディスク制御回路１１３及びディスクキャッシュ制御回路１１５は、内部バス１１６によって相互接続されている。内部バス１１６は、例えばＰＣＩバス（Peripheral Component Interconnect Bus）である。
【００１９】
ＣＰＵ１１１は、ディスク制御装置１１の主コントローラである。ＩＯ制御回路１１２は、ホスト２との間の書き込み／読み出しデータの送受信を制御する。ディスク制御回路１１３は、ディスクアレイ１２を構成するＨＤＤ１２１-1〜１２-6との間の書き込み／読み出しデータの送受信を制御する。キャッシュメモリ１１４は、ディスクアレイ１２（を構成するＨＤＤ１２１-1〜１２-6）のデータ（ディスクデータ）の一部を一時的に保持するディスクキャッシュとして用いられる。ディスクキャッシュ制御回路１１５は、キャッシュメモリ１１４へのアクセスを制御する。
【００２０】
図２はディスク制御装置１１内のディスクキャッシュ制御回路１１５のブロック構成を示す。このディスクキャッシュ制御回路１１５は、アドレス変換回路２１と、データ分離・復元回路２２と、データ部サイズレジスタ２３と、コード部サイズレジスタ２４と、オフセットレジスタ２５と、コード部格納レジスタ２６とを備えている。このディスクキャッシュ制御回路１１５内の各部の役割については後述する。
【００２１】
ところで、ＨＤＤ１２１-i（ｉ＝１〜６）に対するアクセスの最小単位はセクタと呼ばれる。従来、１セクタは５１２バイトのデータ部分で構成されるのが一般的である。しかし本実施形態で適用されるＨＤＤ１２１-i上の各セクタは、５１２バイトのデータ部分（以下、データ部と称する）と、制御情報部分、例えばエラーチェックコードを格納する例えば８バイトのコード部分（以下、コード部と称する）とから構成される。つまり、１セクタは、５１２バイトのデータと、当該データに付加される８バイトのエラーチェックコードとの合計５２０バイトで構成される。このように、セクタ毎にエラーチェックコードを付加することにより、当該コードに基づくセクタ単位のエラーチェックが、ＨＤＤ１２１-iの外部で可能となる。
【００２２】
この５２０バイトのセクタデータを、従来技術に従ってキャッシュメモリ１１４に配置すると、当該キャッシュメモリ１１４のバースト転送単位が８バイト幅＊８クロックの６４バイト単位、つまりキャッシュメモリ１１４のアクセス単位が６４バイト単位であるものとすると、当該キャッシュメモリ内でのセクタデータの配置は図１１（ｂ）に示したようになる。ここでは、１セクタのデータの開始位置または終了位置が、キャッシュメモリのアクセス単位の境界に一致するとは限らないため制御が難しく、１セクタをアクセスするには、キャッシュメモリとの間のバースト転送（キャッシュメモリアクセス）を９回実行する必要がある。
【００２３】
そこで本実施形態では、キャッシュメモリ１１４内では、１セクタのデータを、データ部のデータ（５１２バイト）とコード部のデータ（８バイト）とに分離して保持・管理するようにしている。
【００２４】
図３はキャッシュメモリ１１４における領域割り当てとセクタデータの配置例を示す。図３に示すように、キャッシュメモリ１１４の記憶領域内には、データ部格納領域３１及びコード部格納領域３２の両領域が確保される。ここでは、キャッシュメモリ１１４の開始位置から連続する記憶領域内に、データ部格納領域３１及びコード部格納領域３２が配置されるものとする。キャッシュメモリ１１４において、データ部格納領域３１の開始位置からコード部格納領域３２の開始位置までのオフセット（コード部格納領域オフセット）はＭである。データ部格納領域３１及びコード部格納領域３２は、５２０バイトのセクタデータのうちの、それぞれデータ部のデータ（５１２バイト）及びコード部のデータ（８バイト）を格納するのに用いられる。このように、１セクタのデータを、データ部のデータ（５１２バイト）とコード部のデータ（８バイト）とに分離して扱うことにより、１セクタのデータ部のデータを、８回のバースト転送（キャッシュメモリアクセス）でアクセスすることが可能となる。また、１セクタのデータ部のデータの開始位置及び終了位置を、キャッシュメモリのアクセス単位の境界に一致させることができる。
【００２５】
再び図２を参照すると、アドレス変換回路２１は、キャッシュメモリ１１４におけるデータ部のデータのアドレス（データ部アドレス）Ａ１を、当該データ部に対応するコード部のデータのアドレス（コード部アドレス）Ａ２に変換する。即ちアドレス変換回路２１は、データ部アドレスＡ１から、コード部アドレスＡ２を計算する。ここでは、データ部のサイズをＢ１（＝５１２バイト）、コード部のサイズをＢ２（＝８バイト）、キャッシュメモリ１１４内でのデータ部格納領域３１の開始位置からコード部格納領域３２の開始位置までのオフセット（コード部格納領域オフセット）をＭとすると、アドレス変換回路２１は、コード部アドレスＡ２を、次式
Ａ２＝Ｍ＋（（Ａ１／Ｂ１）＊Ｂ２）  …（１）
に従って計算する。これら、データ部アドレスＡ１、データ部のサイズＢ１、コード部のサイズＢ２（＝８バイト）、コード部格納領域オフセットＭ及びコード部アドレスＡ２を、１セクタのデータがデータ部とコード部とに分離されて、それぞれデータ部格納領域３１及びコード部格納領域３２に格納されている状態と対応付けて図４に示す。
【００２６】
データ分離・復元回路２２は、キャッシュメモリ１１４へのセクタデータ書き込み時には、セクタデータをデータ部とコード部とに分離して書き込む。またデータ分離・復元回路２２は、キャッシュメモリ１１４からのセクタデータ読み出し時には、当該キャッシュメモリ１１４からデータ部とコード部の両データを別々に読み出して、１つのセクタデータを復元する。
【００２７】
データ部サイズレジスタ２３はデータ部のサイズＢ１を設定するのに用いられ、コード部サイズレジスタ２４はコード部のサイズＢ２を設定するのに用いられる。またオフセットレジスタ２５は、コード部格納領域オフセットＭを設定するのに用いられる。これらのレジスタ２３，２４，２５へのＢ１，Ｂ２，Ｍの設定は、ＣＰＵ１１１によって行われる。コード部格納レジスタ２６は、コード部のデータを連続する８セクタ分格納することが可能な６４バイトのレジスタである。
【００２８】
次に、本実施形態の特徴である、ディスクキャッシュ制御回路１１５によるキャッシュメモリ１１４に対するアクセス制御について、１セクタデータのキャッシュ読み出し／書き込みを例に、図５のデータの流れを示す図を参照して説明する。
【００２９】
（１）アドレスＮからの１セクタのデータのキャッシュ読み出し
ＣＰＵ１１１からディスクキャッシュ制御回路１１５に対し、キャッシュメモリ１１４のアドレスＮ（Ｎ＊０x２００）から１セクタのデータのキャッシュ読み出しが指示されたものとする。ここで、０x２００中の０xは、“２００”が１６進表現であることを示す。本実施形態において、キャッシュメモリ１１４のアドレスは３２ビットで表される。データ部のサイズが５１２バイト（２9バイト）の本実施形態では、上記データ部アドレスＡ１の下位９ビット（ビット８〜ビット０）は全て“０”である。そこでデータ部アドレスを、３２ビットのデータ部アドレスＡ１の下位９ビットを除く上位アドレスで表現することもある。上記アドレスＮは、このデータ部アドレスＡ１の下位９ビットを除く上位アドレスに相当する。なお、ＣＰＵ１１１では、セクタデータをデータ部とコード部とに分離して認識しておらず、したがってアドレスＮはデータ部アドレスではなくてセクタデータ全体のアドレスとして認識される。
【００３０】
さて、ＣＰＵ１１１からキャッシュメモリ１１４のアドレスＮ（Ｎ＊０x２００）から１セクタのデータのキャッシュ読み出しが指示された場合、ディスクキャッシュ制御回路１１５内のアドレス変換回路２１は、上記（１）式に従って（但し、データ部アドレスＡ１をＮ＊０x２００とする）、コード部アドレスＡ２を算出する。本実施形態では、キャッシュメモリ１１４のアクセス単位は６４バイト（２6バイト）である。したがって、コード部アドレスＡ２の下位６ビットを除く上位アドレスは、キャッシュメモリ１１４のコード部格納領域３２において対応するコード部のデータ（８バイト）が格納されている８バイト領域を含む、１回でアクセス可能な６４バイト領域を指し示す。このコード部アドレスＡ２の下位６ビットを除く上位アドレスをコード部アドレスＮ２で表して、コード部アドレスＡ２に代えて用いることもある。上記６４バイト領域においてコード部のデータ（８バイト）が格納される８バイト領域は、コード部アドレスＡ２の下位６ビットのうちの上位側の３ビット（つまりコード部アドレスＮ２の下位３ビット）で指し示される。
【００３１】
ディスクキャッシュ制御回路１１５内のデータ分離・復元回路２２は、キャッシュメモリ１１４のアドレスＮ（から始まる５１２バイトの領域）から、目的の１セクタに含まれる５１２バイトのデータ部のデータ５１を、６４バイト単位の８回のアクセスで読み出す。またデータ分離・復元回路２２は、キャッシュメモリ１１４のアドレスＮ２から、上記１セクタに含まれる８バイトのコード部のデータ（エラーチェックコード）５２を１回のアクセスで読み出し、ディスクキャッシュ制御回路１１５内のコード部格納レジスタ２６に格納後に、データ部のデータ５１に付加して１セクタの読み出しデータ５３を復元して、ＩＯ制御回路１１２またはディスク制御回路１１３に送信する。
【００３２】
（２）アドレスＮへの１セクタのデータのキャッシュ書き込み
次に、ＣＰＵ１１１からディスクキャッシュ制御回路１１５に対し、キャッシュメモリ１１４のアドレスＮ（から始まる領域）に１セクタの書き込みデータ５４のキャッシュ書き込みが指示されたものとする。この場合、ディスクキャッシュ制御回路１１５内のアドレス変換回路２１は、上記（１）式に従って（但し、データ部アドレスＡ１をＮ＊０x２００とする）、コード部アドレスＡ２に相当するコード部アドレスＮ２を算出する。
【００３３】
ディスクキャッシュ制御回路１１５内のデータ分離・復元回路２２は、１セクタの書き込みデータ５４を５１２バイトのデータ部のデータ５５と、８バイトのコード部のデータ５６とに分離する。そしてデータ分離・復元回路２２は、データ部のデータ５５を、キャッシュメモリ１１４のアドレスＮに、６４バイト単位の８回のアクセスで書き込む。またデータ分離・復元回路２２は、コード部のデータ５６を、ディスクキャッシュ制御回路１１５内のコード部格納レジスタ２６に格納後に、キャッシュメモリ１１４のアドレスＮ２に１回のアクセスで書き込む。
【００３４】
上述した、１セクタのキャッシュ読み出し／書き込みの場合、コード部のデータのアクセスのために、キャッシュアクセス回数は従来技術と同じ９回となる。但し、データ部のデータのキャッシュアクセスでは、キャッシュメモリアクセスの開始アドレス及び終了アドレスが、必ずバースト転送の境界となり、１セクタのデータの開始位置と終了位置とは、キャッシュメモリのアクセス単位の境界に一致する。このため、キャッシュアクセスの制御が簡単になる。
【００３５】
更に本実施形態では、複数の連続するセクタのキャッシュ読み出し／書き込みの場合には、複数のセクタのコード部のデータをまとめて読み出し／書き込みできるため、キャッシュアクセス回数を削減することができる。そこで、この複数の連続するセクタのキャッシュ読み出し／書き込み制御について説明する。
【００３６】
（１）連続するｎセクタのデータのキャッシュ読み出し
まず、連続するｎセクタのデータのキャッシュ読み出し制御について、図６を参照して説明する。今、ＣＰＵ１１１からディスクキャッシュ制御回路１１５に対し、キャッシュメモリ１１４のアドレスＮ（から始まる領域）から連続するｎセクタ（この例ではｎ＝１６とする）のデータのキャッシュ読み出しが指示されたものとする。この場合、ディスクキャッシュ制御回路１１５内のアドレス変換回路２１は、上記（１）式に従って（但し、データ部アドレスＡ１をＮ＊０x２００とする）、コード部アドレスＡ２に相当するコード部アドレスＮ２を算出する。
【００３７】
ディスクキャッシュ制御回路１１５内のデータ分離・復元回路２２は、キャッシュメモリ１１４のアドレスＮ（から始まる５１２バイトの領域）から、目的の先頭のセクタに含まれるデータ部のデータ６１-0を、６４バイト単位の８回のアクセスで読み出す。またデータ分離・復元回路２２は、キャッシュメモリ１１４のアドレスＮ２から、連続する８セクタ分のコード部のデータを１回のアクセスで読み出して、ディスクキャッシュ制御回路１１５内の６４バイトのコード部格納レジスタ２６（図６では、作図の都合上、ディスクキャッシュ制御回路１１５の外側に配置されている）に格納する。そしてデータ分離・復元回路２２は、コード部格納レジスタ２６の先頭の８バイト領域のデータを、データ部のデータ６１-0に対応するコード部のデータ６２-0として当該データ部のデータ６１-0に付加することにより、先頭のセクタの読み出しデータ６３-0を復元して、ＩＯ制御回路１１２またはディスク制御回路１１３に送信する。
【００３８】
次にデータ分離・復元回路２２は、キャッシュメモリ１１４のアドレスＮ＋１（から始まる５１２バイトの領域）から、目的とする２番目のセクタに含まれるデータ部のデータ６１-1を読み出す。またデータ分離・復元回路２２は、コード部格納レジスタ２６の２番目の８バイト領域のデータを、データ部のデータ６１-1に対応するコード部のデータ６２-1として当該データ部のデータ６１-1に付加することにより、１セクタの読み出しデータ６３-1を復元して、ＩＯ制御回路１１２またはディスク制御回路１１３に送信する。
【００３９】
以下、同様にしてキャッシュメモリ１１４のＮ＋２〜Ｎ＋７からデータ部のデータ６１-2〜６１-7が順に読み出される。そして、このデータ部のデータ６１-2〜６１-7の読み出しに応じて、当該データ部のデータ６１-2〜６１-7に、コード部格納レジスタ２６の３番目乃至８番目の８バイト領域のデータが付加されて、それぞれ３番目乃至８番目のセクタの読み出しデータ６３-2〜６３-7として、ＩＯ制御回路１１２またはディスク制御回路１１３に送信される。
【００４０】
これにより、連続する８セクタのキャッシュ読み出しを、８＊８＋１＝６５回のキャッシュアクセスで実現できる。これに対して従来技術では、８＊９＝７２回のキャッシュアクセスを必要とする。
【００４１】
次に、キャッシュメモリ１１４のＮ＋８からデータ部のデータ６１-8が読み出され、更にキャッシュメモリ１１４のアドレスＮ２＋０x４０（アドレスＮ２の次の６４バイト領域）から、後続する８セクタ分（９番目乃至１６番目のセクタ）のコード部のデータが読み出されてコード部格納レジスタ２６に格納される。そして、データ部のデータ６１-8に、コード部格納レジスタ２６の先頭の８バイト領域のデータが付加されて、９番目のセクタの読み出しデータ６３-8として、ＩＯ制御回路１１２またはディスク制御回路１１３に送信される。以降、上記と同様のキャッシュ制御が行われる。
【００４２】
（２）連続するｎセクタのデータのキャッシュ書き込み
次に、連続するｎセクタのデータのキャッシュ書き込み制御について、図７を参照して説明する。今、ＣＰＵ１１１からディスクキャッシュ制御回路１１５に対し、キャッシュメモリ１１４のアドレスＮ（から始まる領域）から連続するｎセクタ（この例ではｎ＝１６とする）のデータのキャッシュ書き込みが指示されたものとする。この場合、ディスクキャッシュ制御回路１１５内のアドレス変換回路２１は、上記（１）式に従って（但し、データ部アドレスＡ１をＮ＊０x２００とする）、コード部アドレスＡ２に相当するコード部アドレスＮ２を算出する。
【００４３】
ディスクキャッシュ制御回路１１５内のデータ分離・復元回路２２は、まず先頭のセクタの書き込みデータ７１-0を５１２バイトのデータ部のデータ７２-0と、８バイトのコード部のデータ７３-0とに分離する。そしてデータ分離・復元回路２２は、データ部のデータ７２-0を、キャッシュメモリ１１４のアドレスＮに、６４バイト単位の８回のアクセスで書き込む。またデータ分離・復元回路２２は、コード部のデータ７３-0を、ディスクキャッシュ制御回路１１５内のコード部格納レジスタ２６（図７では、作図の都合上、ディスクキャッシュ制御回路１１５の外側に配置されている）の先頭の８バイト領域に格納する。
【００４４】
次にデータ分離・復元回路２２は、２番目のセクタの書き込みデータ７１-1を、データ部のデータ７２-1とコード部のデータ７３-1とに分離する。そしてデータ分離・復元回路２２は、データ部のデータ７２-1を、キャッシュメモリ１１４のアドレスＮ＋１に書き込む。またデータ分離・復元回路２２は、コード部のデータ７３-1を、コード部格納レジスタ２６の２番目の８バイト領域に格納する。
【００４５】
以下、同様にして、３番目乃至８番目のセクタの書き込みデータ７１-2〜７２-7が、順次データ部のデータ７２-2〜７２-7とコード部のデータ７３-2〜７３-7とに分離され、その都度、データ部のデータ７２-2〜７２-7が、キャッシュメモリ１１４のアドレスＮ＋２〜Ｎ＋７に書き込まれると共に、その書き込みに応じて、コード部のデータ７３-2〜７３-7が順次コード部格納レジスタ２６の３番目乃至８番目の８バイト領域に格納される。そして、データ部のデータ７２-7がキャッシュメモリ１１４のアドレスＮ＋７に書き込まれ、コード部のデータ７３-7がコード部格納レジスタ２６の８番目の８バイト領域に格納されると、当該レジスタ２６に格納されている８セクタ分（１番目乃至８番目のセクタ）のコード部のデータ７３-0〜７３-7が、１回のアクセスでキャッシュメモリ１１４のアドレスＮ２に書き込まれる。
【００４６】
これにより、連続する８セクタのキャッシュ書き込みを、８＊８＋１＝６５回のキャッシュアクセスで実現できる。これに対して従来技術では、８＊９＝７２回のキャッシュアクセスを必要とする。
【００４７】
次に、９番目のセクタの書き込みデータ７１-8が、データ部のデータ７２-8とコード部のデータ７３-8とに分離され、データ部のデータ７２-8がキャッシュメモリ１１４のアドレスＮ＋８に書き込まれると共に、コード部のデータ７３-8がコード部格納レジスタ２６の先頭の８バイト領域に格納される。以降、上記と同様のキャッシュ制御が行われる。
【００４８】
このように本実施形態においては、１セクタデータのサイズが５２０バイトというように、キャッシュメモリ１１４のメモリアクセス単位の倍数とならないサイズでありながら、連続したセクタのアクセス、つまりシーケンシャルアクセスを、従来技術に比較して少ないキャッシュアクセス回数で実現でき、シーケンシャルアクセスのアクセス性能を向上させることが可能になる。
【００４９】
次に、上記アドレス変換回路２１の詳細なハードウェア構成について説明する。  
図８は、アドレス変換回路２１のハードウェア構成を示すブロック図である。図８において、ＣＰＵ１１１から与えられる３２ビットのデータ部アドレスＡ１＜３１：０＞は、データ部アドレスレジスタ８０１（ＲＥＧ１）に、次に新たなデータ部アドレスがＣＰＵ１１１から与えられるまで保持される。ここで、＜ｘ：ｙ＞の表記は、対応する情報がビットｘ（ＭＳＢ）〜ビットｙ（ＬＳＢ）から構成されることを示す。また、データ部アドレスＡ１の＜３１：９＞、つまりデータ部アドレスＡ１の下位９ビットを除く上位アドレスは、上位アドレスレジスタ８０２（ＲＥＧ２）に保持される。データ部アドレスＡ１中の＜３１：９＞は、データ部のサイズＢ１が５１２バイト（２9バイト）である本実施形態では、キャッシュメモリ１１４における、対応するデータ部のデータを格納する５１２バイト格納領域を指し示す。つまり、データ部アドレスＡ１の上位アドレス＜３１：９＞は、図６及び図７におけるアドレスＮに相当し、上記（１）式中のＡ１／Ｂ１に相当する。
【００５０】
ＲＥＧ２（上位アドレスレジスタ８０２）に保持されている上位アドレス＜３１：９＞の下位に値が全て０の３ビット（“０００”）を連結するならば、その連結後のアドレス＜３１：６＞は、上記（１）式中の（Ａ１／Ｂ１）＊Ｂ２に相当する。一方、（１）式において当該（Ａ１／Ｂ１）＊Ｂ２に加算されるコード部格納領域オフセットＭは、データ部のサイズＢ１、つまり５１２バイトの倍数であることから、当該オフセットＭの下位８ビットは全て“０”である。したがって、上記（１）式の計算で、下位３ビットを省略することができる。
【００５１】
そこで本実施形態では、ＲＥＧ２（上位アドレスレジスタ８０２）に保持されている上記上位アドレス＜３１：９＞をアドレス＜２５：０＞として加算器８０３に入力する。また、オフセットレジスタ２５に設定されているコード部格納領域オフセットＭの＜３１：０＞のうちの下位３ビットを除く＜３１：３＞を、加算器８０３に入力する。但し、以降の説明では、コード部格納領域オフセットＭの＜３１：０＞のうちの＜３１：３＞をコード部格納領域オフセットＭと呼ぶこともある。加算器８０３は、上記上位アドレス＜３１：９＞であるアドレス＜２５：３＞にコード部格納領域オフセットＭの＜３１：３＞を加算する。この加算器８０３の加算結果＜３１：３＞の下位に値が全て０の３ビット（“０００”）を連結するならば、その連結後のアドレス＜３１：０＞は、上記コード部アドレスＡ２を表す。つまり、上位アドレスレジスタ８０２及び加算器８０３により、上記（１）式に示す計算が実現される。但し、コード部アドレスＡ２の下位の３ビット“０００”は冗長である。このため本実施形態では、加算器８０３の加算結果＜３１：３＞をコード部アドレスＡ２として扱う。なお、サイズＢ２が２mバイトであれば、上位アドレス＜３１：９＞をアドレス＜（ｍ＋２２）：ｍ＞として、コード部格納領域オフセットＭの＜３１：ｍ＞と加算することにより、上記コード部アドレスＡ２（の下位ｍビットを除く上位アドレス）を計算できる。また、データ部のデータのサイズＢ１が２pバイトであるならば、ＲＥＧ２２（上位アドレスレジスタ８０２）に保持される上位アドレスを、上記の例の＜３１：９＞から＜３１：ｐ＞に切り替えれば良い。
【００５２】
加算器８０３の加算結果であるコード部アドレスＡ２＜３１：３＞は、コード部アドレスレジスタ８０４（ＲＥＧ４）に保持される。加算器８０５は、ＲＥＧ４（コード部アドレスレジスタ８０４）に保持されているコード部アドレスＡ２に１を加算することで、更新されたコード部アドレスＡ２を生成する。この更新（加算）後のコード部アドレスＡ２は、キャッシュメモリ１１４における次のコード部の格納領域を指し示す。
【００５３】
マルチプレクサ８０６は、加算器８０３の加算結果である新たなコード部アドレスＡ２、加算器８０５の加算結果である更新されたコード部アドレスＡ２、及びＲＥＧ４（コード部アドレスレジスタ８０４）に保持されている現在のコード部アドレスＡ２のいずれか１つを、２ビットの選択信号ＳＥＬ１に応じて選択する。この選択信号ＳＥＬ１については後述する。
【００５４】
マルチプレクサ８０６によって選択されたコード部アドレスＡ２は、ＲＥＧ４（コード部アドレスレジスタ８０４）に保持される。このコード部アドレスＡ２＜３１：３＞のうちの＜３１：６＞は、上記アドレスＮ２を表し、キャッシュメモリ１１４内の、対応するコード部のデータ（８バイト）を格納する８バイト領域を含む、１回でアクセス可能な６４バイト領域を指し示す。また、コード部アドレスＡ２＜３１：０＞のうちの＜５：３＞は、対応するコード部のデータ（８バイト）の８バイト領域が、６４バイト領域中のどの部分にあるかを示すポインタＰとして用いられる。このポインタＰは、コード部格納レジスタ２６内のコード部のデータ（８バイト）の格納位置をも示す。
【００５５】
ＲＥＧ４（コード部アドレスレジスタ８０４）に保持されたコード部アドレスＡ２のビット＜３１：６＞は、後述する条件の成立時にコード部アドレス保存レジスタ８０７（ＲＥＧ５）に保持される。マルチプレクサ８０８は、ＲＥＧ４に保持されたコード部アドレスＡ２のビット＜３１：６＞（コードアドレスＮ２）及びＲＥＧ５に保持されたコード部アドレスのいずれか一方を選択信号ＳＥＬ３に応じて選択する。この選択信号ＳＥＬ３については後述する。
【００５６】
マルチプレクサ８０８によって選択されたコード部アドレスは、ＲＥＧ５（コード部アドレス保存レジスタ８０７）に保持される。一致検出器８０９は、ＲＥＧ５及びＲＥＧ４にそれぞれ保持されているコード部アドレスの一致／不一致を検出し、その検出結果に応じて、コード部格納レジスタ２６の内容をキャッシュメモリ１１４に書き込むタイミングを表すタイミング信号ＳＩＧ２を出力する。
【００５７】
データ部アドレスＡ１＜３１：０＞のうちのビット＜８：６＞は、キャッシュメモリ１１４における対応するデータ部のデータを格納する５１２バイト領域をキャッシュメモリ１１４のアクセス単位（６４バイト）で８つの６４バイト領域に分割した場合に、そのうちの先頭の６４バイト領域を指す。このビット＜８：６＞は、データ部内相対位置レジスタ８１０（ＲＥＧ３）に保持される。ＲＥＧ３に保持された３ビット情報は、キャッシュメモリ１１４におけるデータ部の５１２バイト領域内のアクセスすべき６４バイト領域の相対位置を指し示す。加算器８１１は、ＲＥＧ３（データ部内相対位置レジスタ８１０）に保持されている３ビットの値に１を加算することで、当該３ビットの値が上記５１２バイト領域内の次にアクセスすべき６４バイト領域を指すように更新する。
【００５８】
マルチプレクサ８１２は、新たなデータ部アドレスＡ１のうちのビット＜８：６＞の値、加算器８１０の加算結果、及びＲＥＧ４（コード部アドレスレジスタ８０４）に現在保持されている３ビットの値のいずれか１つを、２ビットの選択信号ＳＥＬ２に応じて選択する。この選択信号ＳＥＬ２については後述する。
【００５９】
一致検出器８１３は、ＲＥＧ３に保持されている３ビットが全て１（つまり“１１１”）であること検出して、コード部格納レジスタ２６にコード部のデータ（８バイト）を格納するタイミングを表すタイミング信号ＳＩＧ１を出力する。ＲＥＧ３に保持されている３ビットが“１１１”であることは、キャッシュメモリ１１４におけるデータ部の５１２バイト領域内の最後の６４バイト領域へのアクセスであることを表す。
【００６０】
データ部アドレスＡ１＜３１：０＞のうちの上位アドレス＜３１：６＞は、データ部アドレスレジスタ８１４（ＲＥＧ６）に保持される。ＲＥＧ６に保持された上位アドレス＜３１：６＞は、データ部のデータの読み出し／書き込みのためにキャッシュメモリ１１４を６４バイト単位でアクセスする場合における当該キャッシュメモリ１１４内の６４バイト領域のアドレスＡを示す。アドレスＡ中のビット＜３１：９＞は、前記アドレスＮを表す。加算器８１１は、ＲＥＧ６（データ部アドレスレジスタ８１４）に保持されているアドレス＜３１：６＞に１を加算することで、当該アドレスが次にアクセスすべき６４バイト領域を指すように更新する。マルチプレクサ８１６は、新たなデータ部アドレスＡ１のうちの上位アドレス＜３１：６＞、加算器８１５の加算結果、及びＲＥＧ６（データ部アドレスレジスタ８１４）に現在保持されているアドレスのいずれか１つを、前記選択信号ＳＥＬ２に応じて選択する。
【００６１】
次に、アドレス変換回路２１を中心とするディスクキャッシュ制御回路１１５の詳細な動作について、キャッシュ書き込みを例に、図９のフローチャートを参照して説明する。ディスクキャッシュ制御回路１１５は、ＣＰＵ１１１からの書き込み指示に応じて当該ＣＰＵ１１１からデータ部アドレスＡ１（及び転送セクタ数の情報）を受信する（ステップ９０１）。このデータ部アドレスＡ１はＲＥＧ１（データ部アドレスレジスタ８０１）に保持される。また、データ部アドレスＡ１の上位アドレス＜３１：９＞，＜３１：６＞が、それぞれＲＥＧ２（上位アドレスレジスタ８０２），ＲＥＧ６（データ部アドレスレジスタ８１４）に保持される。更に、データ部アドレスＡ１のビット＜８：６＞がＲＥＧ３（データ部内相対位置レジスタ８１０）に保持される。
【００６２】
加算器８０３は、ＲＥＧ２（上位アドレスレジスタ８０２）に保持されているアドレス＜３１：９＞をアドレス＜２５：３＞として、当該アドレス＜２５：３＞にコード部格納領域オフセットＭ＜３１：３＞を加算する。これにより加算器８０３は、データ部アドレスＡ１に対応する新たなコード部アドレスＡ２を算出する。
【００６３】
アドレス変換回路２１は、選択信号ＳＥＬ１により、加算器８０３の加算結果である新たなコード部アドレスＡ２をマルチプレクサ８０６により選択させてコード部アドレスレジスタ８０４に保持させる（ステップ９０２）。このステップＳ９０２において、アドレス変換回路２１は更に、選択信号ＳＥＬ２により、データ部アドレスＡ１のビット＜８：６＞，＜３１：６＞を、それぞれマルチプレクサ８１２，８１６により選択させてＲＥＧ３（データ部内相対位置レジスタ８１０），ＲＥＧ６（データ部アドレスレジスタ８１４）に保持させる。データ部アドレスＡ１のビット＜８：６＞は“０００”である。
【００６４】
ディスクキャッシュ制御回路１１５内のデータ分離・復元回路２２は、ＩＯ制御回路１１２またはディスク制御回路１１３からキャッシュメモリ１１４に書き込むセクタデータの最初の６４バイトを内部バス１１６を介して受信する（ステップ９０３）。データ分離・復元回路２２は、受信した６４バイトのデータを、ＲＥＧ６（データ部アドレスレジスタ８１４）に保持されているアドレス＜３１：６＞中のビット＜３１：９＞で示されるアドレスＮの６４バイト領域に書き込む（ステップ９０４）。
【００６５】
さて、データ部データのうちの６４バイトがキャッシュメモリ１１４に書き込まれた際に、タイミング信号ＳＩＧ１が“１”でない場合（ステップ９０５）、つまりキャッシュメモリ１１４におけるデータ部の５１２バイト領域内の最後の６４バイト領域へのアクセス（データ書き込み）でない場合、選択信号ＳＥＬ２は、加算器８１１，８１５の加算結果が、それぞれマルチプレクサ８１２，８１６によって選択されるように設定される（ステップ９０６）。これにより、加算器８１１の加算結果、即ちＲＥＧ３（データ部内相対位置レジスタ８１０）に保持されている３ビットの値が＋１された値が選択されて、当該ＲＥＧ３に保持される。つまりデータ部内相対位置レジスタ８１０の値が、上記５１２バイト領域内の次の６４バイト領域の相対位置を指し示すように更新される。同時に、加算器８１５の加算結果、即ちＲＥＧ６（データ部アドレスレジスタ８１４）に保持されているアドレス＜３１：６＞が＋１された値が選択されて、当該ＲＥＧ６に保持される。つまりＲＥＧ６に保持されているアドレスが、データ部のデータの後続する６４バイトの書き込み先となる、キャッシュメモリ１１４における次の６４バイト領域を指し示すように更新される。この段階で、キャッシュメモリ１１４との間のデータ転送が完了しない場合には（ステップ９０７）、後続する６４バイトのデータの受信と、上記５１２バイト領域内の次の６４バイト領域へのデータ書き込みとが行われる（ステップ９０３，９０４）。
【００６６】
やがて、上記５１２バイト領域内の最後の６４バイト領域へのデータ書き込みが行われたものとする（ステップ９０４）。このとき、ＲＥＧ３（データ部内相対位置レジスタ８１０）に保持されている３ビットは“１１１”となっており、一致検出器８１３から論理“１”の有効なタイミング信号ＳＩＧ１が出力されている。
【００６７】
タイミング信号ＳＩＧ１が“１”で、且つ転送完了でない場合には（ステップ９０８）、データ分離・復元回路２２は、後続のコード部のデータ（８バイト）を受信する（ステップ９０９）。このとき、タイミング信号ＳＩＧ２が“１”であるものとする。タイミング信号ＳＩＧ２が“１”となるのは、ＲＥＧ５に保持されているコード部アドレス＜３１：６＞と、ＲＥＧ４に保持されているコード部アドレス＜３１：３＞中の上位コード部アドレス＜３１：６＞とが一致している場合である。ここで、ＲＥＧ５に保持されているコード部アドレス＜３１：６＞は、現在コード部データを格納中のコード部格納レジスタ２６の内容をキャッシュメモリ１１４に書き込む際の書き込み先（６４バイト領域）を示す。ＲＥＧ５の内容は、コード部格納レジスタ２６の内容をキャッシュメモリ１１４に書き込むまでは更新されない。一方、ＲＥＧ４に保持されているコード部アドレス＜３１：３＞は、１セクタのデータ部のデータの書き込む毎に＋１される。
【００６８】
したがって、＋１後のコード部アドレス＜３１：３＞の上位コード部アドレス＜３１：６＞が、ＲＥＧ５に保持されているコード部アドレス＜３１：６＞と一致している場合、コード部格納レジスタ２６の内容をキャッシュメモリ１１４に書き込むタイミングが到来していないことを示す。そこでデータ分離・復元回路２２は、上記のコード部アドレス＜３１：６＞が一致している場合、即ちタイミング信号ＳＩＧ２が“１”の場合（ステップ９１０）、ステップ９０９で受信したコード部のデータ（８バイト）を、ＲＥＧ４に保持されているコード部アドレス＜３１：３＞のビット＜５：３＞（ポインタＰ）により指し示されるコード部格納レジスタ２６内の８バイト領域に格納する（ステップ９１１）。すると、選択信号ＳＥＬ１は、加算器８０５の加算結果がマルチプレクサ８０６によって選択されるように設定され、同時に選択信号ＳＥＬ２は、加算器８１１，８１５の加算結果がそれぞれマルチプレクサ８１２，８１６によって選択されるように設定される（ステップ９１２）。
【００６９】
このステップ９１２により、ＲＥＧ４（コード部アドレスレジスタ８０４）に保持されているコード部アドレス＜３１：３＞が＋１された結果、当該コード部アドレス＜３１：３＞の上位コード部アドレス＜３１：６＞が１増加したものとする。この場合、ＲＥＧ５に保持されているコード部アドレス＜３１：６＞及びＲＥＧ４に保持されているコード部アドレス＜３１：３＞中の上位アドレス＜３１：６＞は不一致となり、一致検出器８０９から出力されるタイミング信号ＳＩＧ２は“０”に遷移する。
【００７０】
ここでデータ転送が完了しない場合には（ステップ９１３）、後続するセクタのデータ部の先頭の６４バイトが受信され、当該６４バイトのデータが上記次の５１２バイト領域の先頭の６４バイト領域に書き込まれる（ステップ９０３，９０４）。その後、ＲＥＧ３（データ部内相対位置レジスタ８１０），ＲＥＧ６（データ部アドレスレジスタ８１４）の内容を＋１しながら（ステップ９０６）、データ部のデータを６４バイト単位で書き込む動作（ステップ９０３，９０４）が繰り返されて、５１２バイト領域の最後の６４バイト領域にデータ部の最後の６４バイトが書き込まれたものとする。そして、ステップ９０５，９０８を経てステップ９０９まで進んだものとする。このステップ９０９では、データ分離・復元回路２２は、後続の８バイトのコード部のデータを受信する。このとき、上述のようにタイミング信号ＳＩＧ２が“０”であるものとすると、データ分離・復元回路２２は、その時点におけるコード部格納レジスタ２６の内容を、ＲＥＧ４に保持されているコード部アドレスＡ２＜３１：３＞の上位コード部アドレスＮ２で指定される６４バイト領域に書き込む（ステップ９１４）。
【００７１】
なお、ステップ９１４は、コード部格納レジスタ２６に８セクタ分のコード部データが格納された場合にのみ実行されるとは限らない。このような場合には、以下に述べるメモリのマスク機能を用いて書き込みが行われる。最近の一般的なメモリはバースト中のマスク機能を有している。例えば、８バイト＊８回のバースト転送で６４バイト単位でキャッシュメモリ１１４にデータ書き込む場合、Ａ〜Ｈをそれぞれ８バイトデータとすると、ＡＢＣＤＥＦＧＨが書き込まれる。もし、ＥＦＧＨのみを書き込む場合には、ＭＭＭＭＥＦＧＨ（Ｍはマスクして書き込まない）として、キャッシュメモリ１１４へ書き込めば良い。つまりマスク機能により、６４バイト単位でのアクセスでありながら、必要な部分だけを書き込むことができる。このような機能を用いれば、データ部アドレスＡ１の位置と書き込むべきセクタ数との関係から、コード部格納レジスタ２６の一部のデータをキャッシュメモリ１１４に書き込むことが簡単に行える。
【００７２】
さて、コード部格納レジスタ２６の内容がキャッシュメモリ１１４に書き込まれると、選択信号ＳＥＬ３は、ＲＥＧ４（コード部アドレスレジスタ８０４）に保持されているコード部アドレスＡ２＜３１：３＞の上位コード部アドレスＮ２＜３１：６＞がマルチプレクサ８０８によって選択されるように設定される（ステップ９１５）。このステップ９１５により、ＲＥＧ５（コード部アドレス保存レジスタ８０７）の内容が、最新のコード部アドレスＮ２に更新される。するとデータ分離・復元回路２２は、ステップ９０９で受信したコード部のデータ（８バイト）を、ＲＥＧ４に保持されているコード部アドレスＡ２＜３１：３＞のビット＜５：３＞（ポインタＰ）により指し示される、コード部格納レジスタ２６内の８バイト領域に格納する（ステップ９１１）。
【００７３】
ここでデータ転送が完了しない場合には（ステップ９１３）、上記したように、後続するセクタのデータ部の先頭の６４バイトが受信され、当該６４バイトのデータが上記次の５１２バイト領域の先頭の６４バイト領域に書き込まれる（ステップ９０３，９０４）。その後、ＲＥＧ３，ＲＥＧ６の内容を＋１しながら（ステップ９０６）、データ部のデータを６４バイト単位で書き込む動作（ステップ９０３，９０４）が繰り返された後、ステップ９０５を経てステップ９０８に進んだものとする。そして、この段階で、データ転送が中断、つまり書き込み実行中のセクタデータの転送がデータ部とコード部との間で中断されて、転送完了となったものとする。
【００７４】
このセクタデータの転送がデータ部とコード部との間で中断された場合の動作について、図１０を併用して説明する。まず、データ部アドレスレジスタ８１４に保持されているデータ部アドレスＡ＜３１：６＞の上位アドレスＮ＜３１：９＞で指定される、キャッシュメモリ１１４内の領域に対する、１セクタデータ（５２０Ｂ）の書き込みが開始されたものとする（ステップ１０１）。そして、キャッシュメモリ１１４内のアドレスＮの領域（５１２Ｂ領域）にデータ部のデータ（５１２Ｂ）を転送し終えた時点で、データ転送が中断されたものとする（ステップ１０２）。
【００７５】
このとき、一致検出器８１３から出力される選択信号ＳＥＬ１は“１”となっており（ステップ９０５）、したがってステップ９０８に進む。このステップ９０８では、データ部とコード部の間でデータ転送が中断したために転送完了が判定される。この場合、ディスクキャッシュ制御回路１１５はデータ転送中断通知手段として機能して、例えば割り込み（ステップ９１６）により、データ転送がデータ部とコード部との間で中断したことをＣＰＵ１１１に通知する（ステップ１０３）。
【００７６】
以下、この割り込みについて説明する。アドレスＮへの５２０バイトのセクタデータ（つまりＣＰＵ１１１から認識されるセクタデータ）の書き込み中のデータ転送の中断は、例えば、キャッシュメモリ１１４への書き込みよりも優先順位の高いアクセスが発生して、内部バス１１６を解放しなければならない場合などに生じる。もし、図１１（ｂ）に示されるように、各セクタのデータ部とコード部とが分離されておらず、当該データ部とコード部とにキャッシュメモリ上で連続したアドレスが割り当てられるものとすると、連続するセクタデータの書き込みがアドレスＮまで進んだ状態でデータ転送が中断された場合、次のアドレスＮ＋１からデータ転送を再開できる。
【００７７】
ところが本実施形態のように、各セクタのデータ部とコード部とを分離してキャッシュメモリ１１４に格納する場合に、例えばアドレスＮへの５２０バイトのセクタデータ（つまりＣＰＵ１１１から認識されるセクタデータ）のデータ転送が、データ部とコード部との間で中断されたものとすると、アドレスＮ＋１の領域への書き込みからではなくて、アドレスＮを変換することにより生成されるアドレスＮ２の領域への書き込みから、対応するデータの転送を再開する必要がある。つまり本実施形態では、アドレスＮ＋１で転送されたデータが、アドレスＮのコード部のデータであるか、或いはアドレスＮ＋１のデータ部のデータであるか判別する必要がある。
【００７８】
そこで本実施形態では、アドレス変換回路２１内のＲＥＧ６（データ部アドレスレジスタ８１４）に保持されているアドレスＡ＜３１：６＞、つまりデータ部のデータを６４バイト単位でキャッシュメモリ１１４に書き込む際の、当該キャッシュメモリ１１４内の６４バイト領域を指定するアドレスＡ＜３１：６＞を利用する。即ちディスクキャッシュ制御回路１１５は、セクタデータの転送が、データ部とコード部との間で中断された場合（ステップ９０８）、例えば割り込みにより、その時点においてＲＥＧ６（コード部アドレスレジスタ８１４）に保持されているコード部アドレスＡ＜３１：６＞をＣＰＵ１１１に通知する（ステップ９１６）。このときのコード部アドレスＡ＜３１：６＞の上位アドレスＮ＜３１：９＞は、ＣＰＵ１１１から認識される５２０バイトの１セクタデータのアドレス、つまりディスクキャッシュ制御回路１１５から認識される１セクタデータのデータ部のアドレスを表している。また、コード部アドレスＡ＜３１：６＞は、ＣＰＵ１１１から認識される、１セクタデータのデータ部の最後の６４バイトデータ＋コード部の８バイトデータのアドレス、つまりディスクキャッシュ制御回路１１５から認識される１セクタデータのデータ部の最後の６４バイトデータのアドレスを表している。したがって、上記の割り込みにより、ＲＥＧ６に保持されているコード部アドレスＡ＜３１：６＞がＣＰＵ１１１に通知されることで、ディスクキャッシュ制御回路１１５は、例えば図１０（ｂ）に示すように、コード部アドレスＡ＜３１：６＞の上位アドレスＮ＜３１：９＞で指定される１セクタデータ（５２０Ｂ）の転送から、キャッシュ書き込みのためのデータ転送を再開できる。この他に、図１０（ｃ）に示すように、コード部アドレスＡ＜３１：６＞で指定される、１セクタデータ（５２０Ｂ）のデータ部の最後の６４バイトデータ＋コード部の８バイトデータの転送から、キャッシュ書き込みのためのデータ転送を再開することもできる。また、ＣＰＵ１１１への通知に必ずしも割り込みを用いる必要はない。
【００７９】
上記実施形態では、本発明を、ディスクアレイ装置１のディスク制御装置１１に設けられたディスクキャッシュ制御回路に適用している。しかし本発明は、ディスク装置のディスク制御装置のディスクキャッシュ制御回路にも適用可能である。
【００８０】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【図面の簡単な説明】
【００８１】
【図１】本発明の一実施形態に係るディスクアレイ装置を備えた計算機システムの構成を示すブロック図。
【図２】図１中のディスク制御装置１１内のディスクキャッシュ制御回路１１５のブロック構成を示す。
【図３】図１中のキャッシュメモリ１１４における領域割り当てとセクタデータの配置例を示す。
【図４】データ部アドレスＡ１、データ部のサイズＢ１、コード部のサイズＢ２、コード部格納領域オフセットＭ及びコード部アドレスＡ２を、１セクタのデータがデータ部とコード部とに分離されて、それぞれデータ部格納領域３１及びコード部格納領域３２に格納されている状態と対応付けて示す図。
【図５】同実施形態における、１セクタデータのキャッシュ読み出し／書き込み時のデータの流れを示す図。
【図６】連続するｎセクタのデータのキャッシュ読み出し時のデータの流れを示す図。
【図７】連続するｎセクタのデータのキャッシュ書き込み時のデータの流れを示す図。
【図８】図２中のアドレス変換回路２１のハードウェア構成を示すブロック図。
【図９】上記アドレス変換回路２１を中心とするディスクキャッシュ制御回路１１５の詳細な動作の手順を示すフローチャート。
【図１０】セクタデータの書き込みがデータ部とコード部との間で中断される場合の動作の流れを示す図。
【図１１】従来技術によるキャッシュメモリ上でのデータ配置の例を、コード部を含まないセクタデータを配置する場合と、コード部が付加されたセクタデータを配置する場合、それぞれについて示す図。
【符号の説明】
【００８２】
１…ディスクアレイ装置、２…ホスト、１１…ディスク制御装置、１２…ディスクアレイ、１２１-1〜１２１-6…ＨＤＤ（ハードディスクドライブ）、２１…アドレス変換回路、２２…データ分離・復元回路、２５…オフセットレジスタ、２６…コード部格納レジスタ（制御情報部格納レジスタ）、３１…データ部格納領域、３２…コード部格納領域（制御情報部格納領域）、１１１…ＣＰＵ（主コントローラ）、１１２…ＩＯ制御回路、１１３…ディスク制御回路、１１４…キャッシュメモリ、８０３…加算器、８０４…コード部アドレス（制御情報部アドレス）レジスタ（ＲＥＧ４）、８０５…加算器（制御情報部アドレス更新回路）、８０６…マルチプレクサ（制御情報部アドレス更新回路）、８０７…コード部アドレス（上位制御情報部アドレス）保存レジスタ（ＲＥＧ５）、８０８…マルチプレクサ（上位制御情報部アドレス更新回路）、８０９，８１３…一致検出器、８１０…データ部内相対位置レジスタ（ＲＥＧ３）、８１４…データ部アドレスレジスタ（ＲＥＧ６）、８１５…加算器（データ部アドレス更新回路）、８１６…マルチプレクサ（データ部アドレス更新回路）。
【図１】
2005293118.tif 000003
【図２】
2005293118.tif 000004
【図３】
2005293118.tif 000005
【図４】
2005293118.tif 000006
【図５】
2005293118.tif 000007
【図６】
2005293118.tif 000008
【図７】
2005293118.tif 000009
【図８】
2005293118.tif 000010
【図９】
2005293118.tif 000011
【図１０】
2005293118.tif 000012
【図１１】
2005293118.tif 000013