(57)【特許請求の範囲】
【請求項１】
処理装置と接続される記憶装置であって、
固定長ブロック形式のデータを格納するディスク装置と、
前記ディスク装置に接続され、複数のキャッシュメモリと、
前記キャッシュメモリ毎に前記キャッシュメモリを管理する管理手段とを有する制御装置とを有し、
前記制御装置は、前記処理装置からライトデータを受信して前記キャッシュメモリに格納し、
前記処理装置に応答を送信し、
前記ライトデータが前記ディスク装置内の第一の記憶領域に書き込まれるデータ及び第二の記憶領域に書き込まれるデータを含み、前記第一の記憶領域が前記第二の記憶領域とは連続しない記憶領域である場合に、前記ディスク装置内の、前記第一の記憶領域及び前記第二の記憶領域を含む連続した第三の記憶領域に格納されるデータを、前記キャッシュメモリから読み出して前記ディスク装置に書き込み、
前記処理装置からのアクセスが終了し、前記アクセス対象となったデータが前記複数のキャッシュメモリに存在する場合、前記制御装置は、前記複数のキャッシュメモリの１つに存在する前記データがキャッシュメモリから追い出される優先順位と、前記複数のキャッシュメモリのうち、前記１つとは異なる他のキャッシュメモリに存在する前記データがキャッシュメモリから追い出される優先順位を、互いに異なるように設定することを特徴とする記憶装置。
【請求項２】
請求項１記載の記憶装置において、
前記制御装置は更に、前記ライトデータを前記キャッシュメモリに格納する前に、前記ディスク装置内の、前記第三の記憶領域に格納されているデータが前記キャッシュメモリに格納されているかを確認し、該データが前記キャッシュメモリに格納されていない場合には、前記ディスク装置から該データを読み出して前記キャッシュメモリに格納することを特徴とする記憶装置。
【請求項３】
請求項２記載の記憶装置において、
前記制御装置は更に、
前記第三の記憶領域に格納されているデータが二以上のキャッシュメモリ各々に格納されているかを確認し、該データが二以上のキャッシュメモリに格納されていない場合には、該データを前記ディスク装置から読み出して二以上のキャッシュメモリに格納し、
前記ライトデータを前記二以上のキャッシュメモリ各々に格納し、
前記二以上のキャッシュメモリのいずれかから、前記第三の記憶領域に格納されるデータを読み出して、前記ディスク装置に書き込むことを特徴とする記憶装置。
【請求項４】
請求項１記載の記憶装置において、
前記制御装置は更に、
前記第三の記憶領域に格納されているデータが一つのキャッシュメモリにのみ格納されている場合に、該キャッシュメモリから前記第三の記憶領域に格納されているデータを他のキャッシュメモリに複写し、
前記第三の記憶領域に格納されているデータを格納している複数のキャッシュメモリ各々に前記ライトデータを格納し、
前記複数のキャッシュメモリのいずれかから、前記第三の記憶領域に格納されるデータを読み出して前記ディスク装置に書き込むことを特徴とする記憶装置。
【請求項５】
請求項２記載の記憶装置において、
前記ディスク装置は、前記制御装置と接続するためのSCSIインタフェースを有することを特徴とする記憶装置。
【請求項６】
請求項５記載の記憶装置において、
前記制御装置は、前記処理装置からCKDデータ形式のライトデータを受信し、該ライトデータを固定長データに変換して前記ディスク装置に書き込むことを特徴とする記憶装置。
【請求項７】
記憶装置が、処理装置から受信したデータを格納するか、記憶装置が、処理装置からのアクセスに対して処理を行う、方法であって、
処理装置によって送信されたデータを受信する受信ステップと、
前記処理装置から受信したデータをキャッシュメモリに格納するキャッシュ格納ステップと、
前記処理装置に応答を送信する応答ステップと、
前記データが、前記記憶装置が有する固定長ブロック形式に従うディスク装置内の、複数の離れた記憶領域に記憶されるデータである場合に、前記データが記憶される複数の離れた記憶領域と、該複数の離れた記憶領域の間に存在する記憶領域とを含む連続な記憶領域に格納されるデータを、前記キャッシュメモリから読み出して前記ディスク装置に格納するディスク格納ステップと、
前記処理装置からのアクセスが終了し、前記アクセス対象となったデータが複数のキャッシュメモリに存在する場合、前記複数のキャッシュメモリの何れかに存在する前記データがキャッシュメモリから追い出される優先順位と、前記複数のキャッシュメモリのうち、前記何れかとは異なる他のキャッシュメモリに存在する前記データがキャッシュメモリから追い出される優先順位を、互いに異なるように設定する設定ステップとを有することを特徴とする方法。
【請求項８】
請求項７記載の方法において、
更に、前記キャッシュ格納ステップの前に、前記連続な記憶領域に格納されているデータが前記キャッシュメモリに格納されているか否か判断し、該データが前記キャッシュメモリに格納されていない場合には、該データを前記ディスク装置から読み出して前記キャッシュメモリに格納するステップを有することを特徴とする方法。
【請求項９】
請求項７記載の方法において、
更に、前記キャッシュ格納ステップの前に、前記連続な記憶領域に格納されているデータが複数のキャッシュメモリに格納されているか否かを判断し、該データが一つのキャッシュメモリのみに格納されている場合には、該データを他のキャッシュメモリに複写する複写ステップを有し、
前記キャッシュ格納ステップは、前記連続な記憶領域に格納されているデータが格納されている二以上のキャッシュメモリ各々に、前記処理装置から受信したデータを格納するステップを有し、
前記ディスク格納ステップは、前記処理装置から受信したデータを格納している二以上のキャッシュメモリのいずれかから、前記連続な記憶領域に格納されるデータを前記ディスク装置に格納するステップを有することを特徴とする方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、キャッシュメモリを有するディスクキャッシュ制御装置に係り、具体的には、キャッシュメモリを用いて、固定長記録形式のディスク装置により可変長記録形式のディスク装置をエミュレ−トするディスクキャッシュ制御装置に関する。
【０００２】
【従来の技術】
ディスク装置は、情報処理システムにおいてデ−タの記録媒体として一般的に用いられている記録装置である。ディスク装置の障害が、情報処理システムに与える影響は多大であり、ディスク装置の高信頼化が必須である。
特許文献１には、記憶装置の高信頼化技術の一例が示されている。
本従来技術は、処理装置から転送されたデ−タを記憶サブシステムにおいて、当該記憶サブシステムに接続される記憶装置の数より少なくても１だけ少ない数のセグメントに等分割する。分割した個々のセグメントの排他的論理和を求めることによって、セグメントと同じバイト長の検査合計、すなわちパリティを生成する。個々のデ−タセグメントとパリティセグメントを故障の点で互いに独立している異なった記憶装置に記録し、これにより、一台の記憶装置が故障しても、それに記録されているデ−タが再生でき、高い信頼性が実現できる。
前記従来技術では、パリティを用いた高信頼化技術であるため、個々のデ−タセグメントとパリティセグメントは、同一のバイト数となり、このような固定長のデ−タを記録する記録媒体は、固定長記録形式（固定ブロックア−キテクチャ（ＦＢＡ）形式）が望ましい。一方、多くの大規模情報処理システムは、ディスク空間を効率良く利用するため、レコ−ドのバイト長に応じてディスクトラック記録形式を分割する可変長記録形式、すなわちカウント、キ−、デ−タ（ＣＫＤ）形式を用いている。
ＦＢＡ形式のディスク装置を用いて、ＣＫＤ形式のディスク装置をエミュレ−トする方式（ＣＫＤエミュレ−ト方式）については、特許文献２に一例が示されている。前記従来技術では、ＣＫＤ形式のレコ−ドのバイト
変位相対位置を維持しながらＦＢＡ形式のディスク装置に記録することにより、ＣＫＤ形式のデ−タのアドレッシングが可能となる。
以上、ディスク装置の高信頼化に関する従来技術を示したが、ディスク装置の性能も情報システムに多大な影響を与える。ディスク装置の性能を向上させる技術としてディスクキャッシュがある。従来のディスクキャッシュ制御装置については、非特許文献１において論じられている。
【特許文献１】
特開昭５３−１４８９２８号公報
【特許文献２】
特開平１−３０６９１７号公報
【非特許文献１】
アイ・ビ−・エム  システムズジャ−ナル（ＩＢＭ  ＳＹＳＴＥＭＳ  ＪＯＵＲＮＡＬ）、Ｖｏｌ．２８、Ｎｏ．２、１９８９年、ｐｐ．１９６−２２６
【０００３】
【発明が解決しようとする課題】
上記ＣＫＤエミュレ−ト方式は、ディスク装置へデ−タ出力中の障害について考慮されていない。つまり、ＦＢＡ形式のディスク装置によりＣＫＤ形式のディスク装置をエミュレ−トする場合、ＣＫＤ形式のレコ−ドは、ＦＢＡ形式のブロックとデ−タ境界が一致していない。
このため、処理装置からＣＫＤ形式のレコ−ドの更新要求が発行されると、更新対象となったＣＫＤ形式レコ−ドに対応する部分以外のデ−タを含めてディスク装置に格納することになる。従って、ディスク装置へデ−タ書き込み中に障害が発生すると、処理装置から要求された更新対象ＣＫＤレコ−ド以外のＣＫＤレコ−ドを破壊してしまうという問題がある。
上記アイ・ビ−・エム  システムズジャ−ナルで論じられたディスクキャッシュに関する従来技術では、ライトキャッシュ方式が開示されている。
具体的には、制御装置内に揮発性のキャッシュメモリとバッテリ電源により不揮発化されたメモリ（Ｎｏｎｖｏｌａｔｉｌｅ  Ｓｔｏａｇｅ：ＮＶＳ）を持ち、処理装置からライト要求が発行された場合、更新レコ−ドをキャッシュメモリとＮＶＳの両方に同時に格納する。ＮＶＳに更新レコ−ドを格納した時点でライト処理の終了を処理装置に報告し、更新レコ−ドは、処理装置からのライト要求とは非同期にディスク装置に書き込まれる。これにより、電源障害や、ディスク書き込み障害が発生しても、更新レコ−ドは、ＮＶＳ内に保持されるため、レコ−ド更新処理おいてもディスクキャッシュの効果が期待できる。しかし、ＣＫＤエミュレ−ト方式の基本的問題は解決されていなかった。
【０００４】
一方、各社で開発されたＦＢＡ形式のディスク装置等を共通に使用できるようにするためのインタフェ−スとして、ＡＮＳＩ（米国規格協会）で定められたＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｆａｃｅ）がある。
このＳＣＳＩにおいてディスク装置上のデ−タをアクセスするためにはＣＤＢ（コマンド記述ブロック）にアクセス対象なるＦＢＡブロックのアドレスと転送バイト数を指定する。この際、複数ＦＢＡブロックのアクセスを１回のＣＤＢで指定することは可能であるが、この場合、アクセス対象ＦＢＡブロックは論理的に連続でなければならない。
これに対しＣＫＤ形式のディスク装置をアクセスする場合のインタフェ−スは、不連続のＣＫＤレコ−ドに対しても、１回の入出力要求でアクセス可能である。このため、ＦＢＡ形式のディスク装置のインタフェ−スとしてＳＣＳＩを用い、ＣＫＤエミュレ−ションを行なった場合、ディスク装置に対し複数回の入出力要求を発行しなければならず、ＣＤＢ発行オ−バヘッドのみならず、ディスク回転待ちが多数発生する。
この問題は、デ−タの読出し要求に対しては、予め処理装置が要求するアクセス範囲のデ−タをキャッシュメモリにロ−ディングすることにより回避可能であるが、デ−タの書き込み要求に対しては、ディスク装置へのアクセス回数を削減することはできない。
【０００５】
本発明の目的は、ディスク装置にデ−タ書き込み動作中に障害が発生してもデ−タを消失しないＣＫＤエミュレ−ト方式を提供することと、ＣＫＤエミュレ−トに適したディスクキャッシュ制御方式を提供することにある。
他の目的は、ＦＢＡ形式のディスク装置のインタフェ−スとしてＳＣＳＩを用いた場合においてもディスク装置へのアクセス回数が増えないＣＫＤエミュレ−ト方式を提供することにある。
【０００６】
【課題を解決するための手段】
上記目的を達成するために、処理装置から更新対象となったＣＫＤレコ−ド（ＣＫＤ形式におけるレコ−ド）を含むＦＢＡブロック（ＦＢＡ形式ディスク装置上の固定長ブロック）を複数のキャッシュメモリに格納するようにしたものである。これを実現する手段として以下を用いる。
（１）処理装置から更新対象となったＣＫＤレコ−ドを含むＦＢＡブロックが、一つのキャッシュメモリ（キャッシュメモリａ）上にのみ存在する場合、当該ＦＢＡブロック内の当該ＣＫＤレコ−ド以外の領域をキャッシュメモリａ以外の一つ以上のキャッシュメモリにコピ−する。
（２）処理装置により更新されたＣＫＤレコ−ドを当該ＣＫＤレコ−ドを含むＦＢＡブロックが存在するキャッシュメモリの全てに格納する。
（３）処理装置からアクセス対象となったＣＫＤレコ−ドを含むＦＢＡブロックがいずれのキャッシュメモリにも存在しない場合、当該ＦＢＡブロックをディスク装置から読出し、一つ以上のキャッシュメモリに格納する。
処理装置からアクセス対象となったＣＫＤレコ−ドを含むＦＢＡブロックがいずれのキャッシュメモリにも存在しない場合、一つのキャッシュメモリにアクセス対象となったＣＫＤレコ−ドを含むＦＢＡブロックを格納し、処理装置からの入出力要求がデ−タ更新要求のときのみ上記（１）、（２）の手段を実行する方式も考えられる。但し、この方式は、ＦＢＡブロックのキャッシュメモリへの格納処理に加え、キャッシュメモリ間のコピ−処理が必要となる。一方、（３）の方式では、２つのキャッシュメモリへのＦＢＡブロックの格納処理は同時に行なわれるため、キャッシュメモリ間コピ−処理分の時間を短縮することができる。
上記制御により同一のＦＢＡブロックが複数のキャッシュメモリに存在することになり、キャッシュメモリの利用効率が低下するという問題がある。この問題に対して、更新ＣＫＤレコ−ドを含まないＦＢＡブロックを格納している各キャッシュメモリスロットをＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｎｔｅｒｙ  Ｕｓｅｄ）チェインの異なる位置に接続する。
上記他の目的を達成するために更新ＣＫＤレコ−ドを含むＦＢＡブロックの間のＦＢＡブロックについても複数のキャッシュメモリに格納するようにしたものである。これを実現する手段として以下を用いる。
（４）更新ＣＫＤレコ−ドを含むＦＢＡブロックの間のＦＢＡブロックが、一つのキャッシュメモリ（キャッシュメモリａ）上にのみ存在する場合、当該ＦＢＡブロック内の当該ＣＫＤレコ−ド以外の領域をキャッシュメモリａ以外の一つ以上のキャッシュメモリにコピ−する。
（５）更新ＣＫＤレコ−ドを含むＦＢＡブロックをＦＢＡ形式のディスク装置へ格納する際、一方のキャッシュメモリａを用いディスク装置への格納処理を実行し、他のキャッシュメモリにより処理装置からのデ−タ読出し要求を実行する。
【０００７】
【作用】
処理装置は、ディスクキャッシュ制御装置に対してＣＫＤレコ−ドのアドレスを指定して出力要求を発行する。
この出力要求を受領したディスクキャッシュ制御装置は、ＣＫＤレコ−ドアドレスから当該ＣＫＤレコ−ドを含むＦＢＡブロックのアドレスを算出する。このＦＢＡブロックアドレスを用い、当該ＦＢＡブロックがキャッシュメモリ上に存在するかを判定するヒット／ミス判定を行なう。
ヒット／ミス判定により、当該ＦＢＡブロックが一つのキャッシュメモリにのみ格納されていると判定された場合は、上記（１）の処理を実行する。
また、当該ＦＢＡブロックがいずれのキャッシュメモリにも格納されていないと判定された場合、上記（３）の処理を実行する。
その後、処理装置よりデ−タを受領し、キャッシュメモリ上のＦＢＡブロックに格納する上記（２）の処理を実行する。
これにより、複数のキャッシュメモリ上に処理装置から転送された出力デ−タを含むＦＢＡブロックが格納される。
これにより、いずれかのキャッシュメモリに障害が発生しても一つ以上のキャッシュメモリ上に処理装置から転送されたデ−タが保持されるため、処理装置に出力デ−タをキャッシュメモリ上に格納した時点で出力処理の終了を報告しても問題ない。
さらに、一つ以上のキャッシュメモリにバッテリ電源等の不揮発化機構を備え、処理装置から転送されたデ−タを不揮発化されたキャッシュメモリに格納することにより、電源障害に対しても処理装置から転送されたデ−タを保証できる。
さらに、キャッシュメモリへの格納単位をＦＢＡブロックとしているためディスク装置へデ−タ格納中に電源等に障害が発生しても、障害復旧後、障害により出力処理が中断されたＦＢＡブロックを不揮発化されたキャッシュメモリから再出力することにより障害回復が可能となる。
【０００８】
キャッシュメモリ上のＦＢＡブロックは、エミュレ−ト対象となるＣＫＤ形式のディスク装置のトラック単位にまとめられ管理されており、この管理単位をキャッシュスロット呼ぶ。処理装置より入出力要求が発行され、当該入出力要求の対象となるトラックがキャッシュメモリ上に存在しない場合、最も長い間アクセスされていないキャッシュスロットを選択し、このキャッシュスロットに処理装置からアクセス対象となったトラックに対応するＦＢＡブロックを読み込む。
このキャッシュスロットの選択にＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｅｒｙ  Ｕｓｅｄ）チェインを用いる。ＬＲＵチェインには、処理装置から読出し対象となったキャッシュスロット、およびディスク装置へ書き込みを終了したキャッシュスロットが登録されている。
本発明では、キャッシュスロットを各キャッシュメモリ毎に管理し、ＬＲＵチェインへのキャッシュスロットの登録位置を各キャッシュメモリ単位に変更する。これにより、エミュレ−ト対象となるＣＫＤディスク装置のトラックに対応するキャッシュスロットを保持するキャッシュメモリ数は、処理装置からのアクセス頻度により決定される。
【０００９】
処理装置より更新されたＣＫＤレコ−ドを含むＦＢＡブロック（更新ＦＢＡブロック）は、上記（１）、（２）、および（３）の処理により複数のキャッシュメモリに存在することになる。
さらに（４）の処理により、更新ＦＢＡブロックの間の未更新ＦＢＡブロックを複数のキャッシュメモリに配置される。それによって、未更新ＦＢＡブロックをディスク装置に書き込み中にキャッシュメモリに障害が発生しても、他の正常なキャッシュメモリから書き込み動作を再実行できる。
このため、ＦＢＡ記録形式のディスク装置のインタフェ−スとしてＳＣＳＩを用いても、１回の出力処理により、複数の更新ＦＢＡブロックをディスク装置に格納でき、かつ無駄な回転待ちが発生しないため、効率的にディスク装置へのデ−タ格納処理が実行できる。
また（５）の処理により、更新ＦＢＡブロックをディスク装置に格納中であっても、他のキャッシュメモリにより処理装置からのデ−タ読出し処理が実行できる。
【００１０】
【実施例】
以下、本発明の一実施例を図面を参照して説明する。
図１は、本発明の一実施例の制御構成を示す図である。
処理装置１は、可変長記録形式の代表的インタフェ−スであるＣＫＤインタフェ−スを使用するプログラム（以下プログラムと呼ぶ）１０を実行し、演算装置（図示せず）、主記憶装置（図示せず）、および入出力プロセッサ（図示せず）から構成される。処理装置１は、制御装置２を介して固定長記録形式のディスク装置（ＦＢＡディスク装置）３に接続される。
制御装置２は、チャネル制御部２１により処理装置１と接続され、ドライブ制御部２４によりＦＢＡディスク装置３に接続される。さらに制御装置２内には、複数のキャッシュメモリ（図示の例では、バッテリ電源等により不揮発化された不揮発キャッシュメモリ２２、２３の２つのキャッシュメモリが存在する場合が示されている）、チャネル制御プロセッサ２５、ドライブ制御プロセッサ２６、および制御メモリ２７を含んでいる。なお、制御メモリ２７も、バッテリ電源等により不揮発化されている。
【００１１】
プログラム１０が外部記憶装置との間でデ−タを入出力する場合は、主記憶装置上にチャネルプログラムを配置し、入出力起動命令を実行する。入出力起動命令を契機にチャネルプロセッサが起動され、チャネルプロセッサは、主記憶装置上のチャネルプログラムを読出し、制御装置２へ入出力要求を発行する。
制御装置２へ発行される入出力要求は、ＣＫＤ形式デ−タであり、直接ＦＢＡディスク装置３への入出力要求とすることはできない。プログラム１０からの入出力要求をＦＢＡディスク装置において実行するため、チャネル制御プロセッサ２５、およびドライブ制御プロセッサ２６にエミュレ−ションプログラムが格納されている。
【００１２】
処理装置１から転送されるＣＫＤ形式デ−タは、制御装置２においてエミュレ−トするＣＫＤディスク装置のトラック（ＣＫＤトラックと呼ぶ）単位にまとめられ、ＦＢＡディスク装置３に記憶される。
例えば、６０ＫＢの物理トラック容量のＣＫＤディスク装置を２ＫＢの容量を持つ固定長ブロックのＦＢＡディスク装置によりエミュレ−トする場合、ＣＫＤトラックは、３０個の固定長ブロックにマッピングされる。
図２は、ＣＫＤ形式デ−タをＦＢＡ形式デ−タによりエミュレ−トする際のデ−タ形式を示す。
ＣＫＤトラックは、ＩＮＤＥＸ  １００によりトラックの開始位置が示され、トラック上の各フィ−ルドは、ギャップにより区切られている。
ギャップＧ１  １０１は、ＩＮＤＥＸ  １００と、トラックの状態およびトラック番号を管理するトラックの最初のフィ−ルドであるＨＡ  １０２を分離する。ギャップＧ２’  １０３は、ＨＡ  １０２とＲ０レコ−ド−１２１を分離する。ギャップＧ３  １０７、１１４、１２０は、レコ−ドを分割するギャップであり、ギャップＧ２  １０５等は、レコ−ド内の各フィ−ルドを分割する。
各レコ−ドは、レコ−ドの状態、位置、および長さを示す制御フィ−ルド（ＣＦ）と、アクセス対象となるレコ−ドを検索するための情報を格納するキ−フィ−ルド（ＫＦ）、およびデ−タを格納するデ−タフィ−ルド（ＤＦ）から構成される。キ−フィ−ルド、およびデ−タフィ−ルドの長さは、制御フィ−ルド内に格納されている。
本発明において用いられるエミュレ−ションプログラムは、キャッシュメモリ上に上記ＣＫＤトラックを仮想ＣＫＤトラックとして展開し、図２においては、キャッシュ格納形式として図示されている。
【００１３】
図２にキャッシュ格納形式として示された仮想ＣＫＤトラックは、固定長のブロックに分割されており、各ブロックの先頭に制御情報２００を含んでいる。この制御情報はブロック内の最初のカウントフィールド（ＣＦ）のアドレスを格納している。ＣＫＤトラックに格納される各ＣＫＤレコ−ドは、その開始アドレスがＣＫＤトラック上のバイト変位（ＩＮＤＥＸからのバイト変位）と一致するようギャップが埋め込まれている（Ｇ１（１０１）→Ｇ（２０１）、Ｇ２’（１０３）→Ｇ（２０２））。また、仮想ＣＫＤトラックにはＣＫＤトラック上に存在したギャップＧ２  １０５等が削除されているが、ギャップＧ３と削除したギャップＧ２のバイト数からなるギャップを直後のＣＫＤレコ−ドの前に配置する（｛Ｇ２（１０５）＋Ｇ３（１０７）｝→Ｇ（２０３））。これにより、ＨＡフィ−ルド、および各ＣＫＤレコ−ドの開始アドレスはＣＫＤトラック上のバイト変位と一致する。
仮想ＣＫＤトラックを構成する各固定長ブロックが、ＦＢＡレコ−ドとしてＦＢＡディスク３に記憶されている。ＦＢＡレコ−ド２５１は、仮想ＣＫＤトラックの第１のブロックを記憶するものとして示されており、当該レコ−ドを物理的に識別するためのＦＢＩＤ２５０が直前に配置されている。
【００１４】
〈入出力要求処理〉
次に処理装置１から発行される入出力要求処理の流れについて説明する。
プログラム１０は、外部記憶装置のデ−タをアクセスするために処理装置１内の主記憶装置上にチャネルプログラムを用意し、入出力起動命令を実行する。入出力起動命令を契機に処理装置１内のチャネルプロセッサは、主記憶装置上にチャネルプログラムを読出す。
そして、制御装置２に入出力動作の内容を示すコマンドとパラメタを転送する。処理装置１から転送されたコマンドとパラメタはチャネル制御部２１を経由してチャネル制御プロセッサ２５に送られ、各コマンドに対応する処理が実行される。
【００１５】
〈外部記憶装置のデ−タの読出し〉
図３は、外部記憶装置のデ−タを読出すために用いるチャネルプログラムの流れ図である。
まず、処理３０１によりディスク装置のポジショナ（読み書きヘッドを動かす機構部）を指定されたシリンダに移動させ、読み書きヘッドを選択するための「シ−ク要求」を実行する。これによりシ−クコマンドと、シ−クアドレス（シリンダアドレス（ＣＣ）、トラックアドレス（ＨＨ））が制御装置２に転送される。
（シ−クコマンド処理）
シ−クコマンドを受け取った制御装置２は、チャネル制御プロセッサ２５においてシ−クコマンド処理を実行する。図４にチャネル制御プロセッサ２５が実行するシ−クコマンド処理の流れ図を示す。
シ−クコマンドを受け取ったチャネル制御プロセッサ２５は、まず処理４０１を実行し、シ−クパラメタの妥当性のチェックを行なう。この結果、シ−クパラメタが不当であると判断された場合は、処理４０４に進み、処理装置１に対しコマンドの異常終了を報告し処理を終了する。
また処理４０１により、シ−クパラメタが妥当であると判断された場合は、処理４０２に進み、シ−クパラメタであるシリンダアドレス（ＣＣ）とトラックアドレス（ＨＨ）を制御メモリ２７に記録する。
その後、処理４０３に進み、処理装置１に対し、コマンドの正常終了を報告し処理を終了する。
チャネルプロセッサは、制御装置２よりコマンドの異常終了を受け取ると、チャネルプログラムの実行を中断し、プログラム１０に対しチャネルプログラムの異常終了を報告する。
また、制御装置２よりコマンドの正常終了を受け取ると、後続の処理を実行する。つまり、「シ−ク要求」処理の正常終了を制御装置２より受領すると、次に
処理３０２により、アクセス対象となるＣＫＤレコ−ドが存在する近傍のセクタに読み書きヘッドを位置付ける「セットセクタ要求」３０２を実行し、制御装置２にセットセクタコマンドとセクタ番号（Ｓ）を転送する。
（セットセクタコマンド処理）
セットセクタコマンドを受領したチャネル制御プロセッサ２５は、図５に示すセットセクタコマンド処理を実行する。
セットセクタコマンド処理は、シ−クコマンド処理と同様であり、パラメタの妥当性のチェックを行ない（５０１）、当該パラメタ、つまりセクタ番号（Ｓ）
を制御メモリ２７に記憶する（５０２）。
【００１６】
チャネルプロセッサは、「セットセクタ要求」に引き続き「レコ−ド探索要求」３０３を実行する。「レコ−ド探索要求」は、ＣＫＤレコ−ドの制御部に記録されている識別子（ＣＣＨＨＲ）をパラメタとするサ−チコマンドを制御装置２に転送する。
【００１７】
（サ−チコマンド処理）
サ−チコマンドを受領したチャネル制御プロセッサ２５は、図６に示すサ−チコマンド処理を実行する。以下サ−チコマンド処理について説明する。
サ−チコマンドを受領すると、チャネル制御プロセッサ２５は、サ−チパラメタの妥当性のチェックを処理６０１にて行なう。この判定においてサ−チパラメタが不当であると判断された場合は、処理６１０に進みコマンドの異常終了を処理装置１に報告し処理を終了する。
またサ−チパラメタが妥当であると判断された場合は、処理６０２に進みサ−チパラメタ（ＣＣＨＨＲ）を、制御メモリ２７に記憶する。その後、処理６０３において先のシ−クコマンドにおいて指定されたアクセス対象ＣＫＤトラックがキャッシュメモリ上に存在するかを判定する（後述のＨｉｔ／Ｍｉｓｓ判定テーブルを用いて判定する）。この結果、アクセス対象ＣＫＤトラックがキャッシュメモリに存在しない、つまりＭｉｓｓであると判定された場合、処理６０４において当該ＣＫＤトラックをＦＢＡディスク装置３からキャッシュメモリへ格納するロ−ド処理を行ない処理６０５へ進む。
本実施例では、不揮発キャッシュメモリ２２と２３の両方のキャッシュメモリにＣＫＤトラックを格納するロ−ド方式であり、詳細については後に記述する。
処理６０３においてアクセス対象ＣＫＤトラックがキャッシュメモリに存在する、つまりＨｉｔと判断された場合には、キャッシュメモリへのＣＫＤトラックのロ−ド処理は行なわず処理６０５へ進む。
処理６０５では、不揮発キャッシュメモリ２２、２３のいずれかを選択する処理を行なう。この選択基準は、それぞれのキャッシュメモリの負荷（利用要求数）を測定し、負荷の軽いキャッシュメモリを選択する。
その後、処理６０６において、処理６０５で選択したキャッシュメモリ上のデ−タを読出し、サ−チパラメタで指定されたアクセス対象ＣＫＤレコ−ドがキャッシュメモリ上に存在するかを判定する。
処理６０６によりアクセス対象ＣＫＤレコ−ドがキャッシュメモリ上に存在しないと判断された場合（ＣＫＤレコ−ドＭｉｓｓの場合）、ＣＫＤトラック上の全てのＣＫＤレコ−ドを検索し、アクセス対象レコード無しかを判定する処理６０７を実行する。
この判定は、キャッシュメモリ上にＣＫＤトラック内の全てのＣＫＤレコ−ドを必ずしも格納していないためである。これはキャッシュメモリの有効利用と、ロ−ド処理オ−バヘッドの削減のため、１つのＣＫＤトラック内のレコ−ドであっても、アクセス頻度が低いレコ−ドについては、キャッシュメモリに格納しないことによる。
これにより、当該ＣＫＤトラック上にアクセス対象レコ−ドが存在しないと判断された場合、処理６１０によりコマンドの異常終了を処理装置１に報告し、処理を終了する。
また、ＣＫＤトラック上に未検索のＣＫＤレコ−ドが存在する場合は、処理６０８へ進み、キャッシュメモリ上の格納されていないＣＫＤレコ−ドをＦＢＡディスク装置３からキャッシュメモリ上へ格納し、処理６０６へ戻る。
処理６０６によりアクセス対象のＣＫＤレコ−ドがキャッシュメモリ上に存在すると判定された場合は、処理６０９に進み、処理装置１にコマンドの正常終了を報告して、処理を終了する。
【００１８】
（リードコマンド処理）
処理装置１のチャネルプロセッサは、ＣＫＤレコ−ドの検索処理の正常終了を制御装置２から受領すると、ＣＫＤレコ−ドを主記憶装置上に転送する「デ−タ読出し要求」を実行する。これによりリ−ドコマンドが制御装置２に転送される。
リ−ドコマンドを受領したチャネル制御プロセッサ２５は、図７に示すリ−ドコマンド処理を実行する。
リ−ドコマンド処理では、まず処理７０１により不揮発キャッシュメモリ２２、２３のいずれかを選択する処理を行い、処理７０３により選択したキャッシュメモリに対しデ−タ転送をセットアップする。
このセットアップ処理とは、チャネル制御部２１にデ−タ転送対象となるＣＫＤレコ−ドの格納アドレスと、転送バイト数を設定することである。ＣＫＤレコ−ド格納アドレスは、サ−チコマンド処理において検索したＣＫＤレコ−ド内のフィ−ルドのアドレスを設定する。
制御フィ−ルド、キ−フィ−ルド、またはデ−タフィ−ルドのいずれを選択するかは、リ−ドコマンドの種類による。例えば、デ−タ部の転送要求コマンドである「ＲＥＡＤ  ＤＡＴＡコマンド」の場合は、デ−タフィ−ルドの先頭のアドレスと、制御フィ−ルド内に格納されているデ−タフィ−ルドの長さをチャネル制御部２１に設定する。その後、処理７０３によりチャネル制御部２１に対し、デ−タ転送の開始を指示する。
デ−タ転送開始指示を受けたチャネル制御部２１は、処理７０２により設定されたＣＫＤレコ−ド格納アドレスで示されるデ−タをキャッシュメモリから読出し処理装置１に転送する。チャネル制御プロセッサ２５は、チャネル制御部２１によるデ−タ転送処理の終了を処理７０４により監視する。
処理７０４によりデ−タ転送の終了を検知すると、処理７０５に進み、デ−タ転送が正常に終了したかを判定する。この判定によりデ−タ転送が正常に終了したと判断された場合は、処理７０６においてリ−ドコマンドの正常終了を処理装置１に報告する。また、デ−タ転送が異常終了したと判断された場合は、処理７０７において、リ−ドコマンドの異常終了を処理装置１に報告し処理を終了する。
リ−ドコマンドの終了を制御装置２から受領したチャネルプロセッサは、後続の処理が存在しないことからチャネルプログラムの終了と判断し、プログラム１０に対し、入出力処理の終了を報告する。
【００１９】
（キャッシュメモリへのＦＢＡディスク装置からのロ−ド処理）
以上が、外部記憶装置のデ−タを読出すための処理装置１と制御装置２の動作概要であるが、サ−チコマンド処理の一部であるキャッシュメモリへのＦＢＡディスク装置３からのロ−ド処理について詳細に説明する。
ＦＢＡディスク装置３から不揮発キャッシュメモリ２２、２３へのロ−ド処理は、チャネル制御プロセッサ２５の指示によりドライブ制御プロセッサ２６が実行する。チャネル制御プロセッサ２５からドライブ制御プロセッサ２６への処理要求は、制御メモリ２７を介して行なわれる。
図８にチャネル制御プロセッサ２５からドライブ制御プロセッサ２６へ処理要求を行なうリクエストブロック（ＲＢ）８０の構成を示す。
不揮発キャッシュメモリ２２、２３へのロ−ド処理要求の場合、チャネル制御プロセッサ２５は、ＲＢ８０内の要求コ−ドに「ロ−ド処理要求」を設定し、ロ−ド対象ＦＢＡブロックを規定する「デバイス番号８０２」、「シリンダ番号８０３」、「トラック番号８０４」、および「セクタ番号８０５」をパラメ−タとして設定する。なお、上記パラメ−タは、エミュレ−ト対象となるＣＫＤディスク装置に関する情報である。
チャネル制御プロセッサ２５は、上記ＲＢ８０を制御メモリ２７に設定すると共に、キャッシュメモリ上のデ−タを管理するスロットコントロ−ルブロック（ＳＣＢ）にどのＦＢＡブロックがロ−ドされた時点で処理を再開するかを示すＰＯＳＴ制御用ビットマップ（後述する）の所望ビット位置にビットを設定し、ＷＡＩＴする。
【００２０】
以下にＲＢ８０を受け取ったドライブ制御プロセッサ２６のロ−ド処理の流れを図９を用いて説明する。
ドライブ制御プロセッサ２６は、ＲＢ８０によりキャッシュメモリへのロ−ド処理要求を受け取ると、処理９０１によりＲＢ８０内の「シリンダ番号８０３」、「トラック番号８０４」により示されるＣＫＤトラックがキャッシュメモリ上に存在するかを判定するＨｉｔ／Ｍｉｓｓ判定処理９０１を実行する。
このＨｉｔ／Ｍｉｓｓ判定処理は、チャネル制御プロセッサ２５のサ−チコマンド処理の流れで説明した処理６０３と同様の処理を行なう。以下にその詳細を説明する。
図１０は、Ｈｉｔ／Ｍｉｓｓ判定テ−ブルとＳＣＢとの関係図であり、これらは、制御メモリ２７上に存在する。不揮発キャッシュメモリ２２、２３は、２重化されたキャッシュメモリであり、その内容は同一である。
キャッシュメモリは、キャッシュスロットと呼ぶ単位に分割され、各キャッシュスロットは、図１１に示すＳＣＢ１１０により管理されている。１キャッシュスロットは、１つ以上のキャッシュセグメントから構成されており、その最大長は、エミュレ−ト対象となるＣＫＤディスク装置の１トラック分のデ−タを格納できる大きさである。
例えば、エミュレ−ト対象のＣＫＤトラックのサイズが６０ＫＢで、キャッシュセグメントサイズが１６ＫＢの場合、１トラック全てのデ−タを格納するためには、４つのキャッシュセグメントが必要となる。
【００２１】
Ｈｉｔ／Ｍｉｓｓ判定テ−ブルは、デバイス表１００、シリンダ表１０１、およびトラック表１０２から構成されている。
デバイス表１００のエントリは、エミュレ−ト対象となるＣＫＤディスク装置対応に存在し、各エントリには、シリンダ表１０１のアドレスが設定されている。
シリンダ表１０１のエントリには、トラック表１０２のアドレスが格納されており、トラック表１０２のエントリにはＳＣＢ１１０のアドレスが格納されている。
各エントリにｎｕｌｌが設定されている場合は、以降の情報が存在しないことを意味する。例えば、シリンダ表１０１の２番目のエントリにｎｕｌｌが設定されている場合には、当該シリンダを構成する全てのトラックのデ−タはキャッシュメモリ上に存在しないことを意味する。図１０ではｎｕｌｌの設定をアース記号で示してある。
【００２２】
Ｈｉｔ／Ｍｉｓｓ判定処理は、このＨｉｔ／Ｍｉｓｓ判定テ−ブルを検索することにより行なわれる。つまり、エミュレ−ト対象となるＣＫＤディスク装置のデバイス番号、シリンダ番号、およびトラック番号からデバイス表１００、シリンダ表１０１、およびトラック表１０２を検索することによりアクセス対象となるＣＫＤトラックがキャッシュメモリ上に存在するかを判定できる。
トラック表１０２からポイントされるＳＣＢ１１０の内、更新デ−タを含まないキャッシュスロットを管理するＳＣＢ１１０は、ＭＲＵ（Ｍｏｓｔ  Ｒｅｃｅｎｔｒｙ  Ｕｓｅｄ）ポインタ１０３、ＬＲＵ（Ｌｅａｓｔ  ＲｅｃｅｎｔｒｙＵｓｅｄ）ポインタ１０５、前方向ポインタ１１０２、および後方向ポインタ１１０３でチェインされている。このチェインを再利用可能ＳＣＢチェインと呼び、このチェインには、処理装置１がアクセスを終了した時点でＭＲＵ側に接続される。
前方向ポインタ１１０２と後方向ポインタ１１０３は、ＣＫＤトラックに割当てられたＳＣＢ１１０をＭＲＵ順にチェインするためのポインタである。
ＭＲＵポインタ１０３は、最も現在時刻に近い時刻に処理装置１からの入出力対象となったＣＫＤトラックに対応するＳＣＢ１１０をさし、ＬＲＵポインタ１０５は、最も長い時間入出力対象となっていないＣＫＤトラックに対応するＳＣＢ１１０をさす。
ＣＫＤトラックに割当てられていないキャッシュスロットを管理するＳＣＢ１１０は、空きＳＣＢポインタ１０４、前方向ポインタ１１０２、および後方向ポインタ１１０３でチェインする。
空きＳＣＢポインタ１０４は、ＣＫＤトラックに割当てられていないキャッシュスロットを管理するＳＣＢ１１０をチェインするための先頭ポインタでありこれらＳＣＢ１１０のうち、ひとつをポイントする。
残りのＣＫＤトラックに割当てられていないキャッシュスロットを管理するＳＣＢ１１０は、前方向ポインタ１１０３、および後方向ポインタ１１０４でチェインする。ＣＫＤトラックに割当てられていないキャッシュスロットを管理するＳＣＢが存在しない場合は、空きＳＣＢポインタ１０４は、ｎｕｌｌとなる。
【００２３】
処理９０１におけるＨｉｔ／Ｍｉｓｓ判定処理により、Ｍｉｓｓと判定された場合は、処理９０２によりＣＫＤトラックにキャッシュスロットを割当てるスロットアロケ−ト処理９０２を実行する。
このスロットアロケ−ト処理は、空きＳＣＢ１１０が存在する場合は、空きＳＣＢポインタ１０４からポイントされているＳＣＢ１１０を、空きＳＣＢ１１０が存在しない場合は、ＬＲＵポインタ１０５からポイントされるＳＣＢ１１０を、アクセス対象となったＣＫＤトラックに割当てる。
【００２４】
処理９０１によりＣＫＤトラックがキャッシュメモリ上に存在する、すなわちＨｉｔと判定された場合、または処理９０２実行後、処理９０３を実行する。処理９０３では、ＲＢ８０内の「シリンダ番号８０３」、「トラック番号８０４」、および「セクタ番号８０５」からＦＢＡディスク装置３上の読出し開始ＦＢＡブロック番号を以下の式により計算する。
0003861061.tif 000002
上記計算式において、・・・は、切捨てを意味する。
処理９０３に続く処理９０４では、ＦＢＡデイスク装置３に対し処理９０３で求めたＦＢＡブロック番号からのデ−タ読出し要求を発行する。その後、処理９０５にて不揮発キャッシュメモリ２２、２３に対しデ−タ転送をセットアップする。このセットアップ処理は、ドライブ制御部２４にＦＢＡブロックの格納を開始する不揮発キャッシュメモリ２２、２３のアドレスと、転送バイト数を設定することである。
ＦＢＡブロックの格納開始アドレスは、ロ−ド処理を行なう最初のＦＢＡブロックが対応するＣＫＤトラック上アドレスである。また、転送バイト数は、当該ＣＫＤトラックの最終までのバイト数か、あるいは、既に後方のＦＢＡブロックのロ−ド処理が行なわれている場合には、該ロ−ド処理の行なわれている後方のＦＢＡブロックの直前までのバイト数である。
続く処理９０６によりデ−タ転送を開始すると、ドライブ制御部２４は、設定された不揮発キャッシュメモリ２２、２３上のアドレスにＦＢＡディスク装置３から読出したＦＢＡブロックを格納する。ドライブ制御部２４のデ−タ転送は、処理９０７により監視される。
【００２５】
処理９０７の詳細な流れ図を図１２に示す。
ドライブ制御部２４は、１つのＦＢＡブロックをキャッシュメモリに転送すると、そのデ−タ転送結果をドライブ制御プロセッサ２６へ報告する。
ドライブ制御プロセッサ２６は、処理１２０１によりこのＦＢＡブロックのデ−タ転送終了を監視する。これにより１つのＦＢＡブロックのデ−タ転送終了を検出すると、処理１２０２により、正常にデ−タ転送が終了したかを判定する。
この結果、デ−タ転送が正常に終了したと判断された場合、処理１２０３を実行する。処理１２０３では、ＳＣＢ１１０内のロ−ド済みビットマップ１１０８にデ−タ転送を終了したＦＢＡブロックを登録する。
処理１２０２によりＦＢＡブロックのデ−タ転送が異常終了したと判断された場合、処理１２０４により、ＳＣＢ１１０内の障害ＦＢＡブロックビットマップ１１１１にデ−タ転送が異常終了したＦＢＡブロックを登録する。
ＳＣＢ１１０上のロ−ド済みＦＢＡブロックビットマップ１１０８、更新ＦＢＡブロックビットマップ１１０９、ＰＯＳＴ制御用ビットマップ１１１０、および障害ＦＢＡブロックビットマップ１１１１は、夫々複数ビットからなり、各ビットが１つのＦＢＡブロックに対応している。これを図解したものが図１３にＳＣＢ１１０のロード済みＦＢＡブロックビットマップ１１０８として示されている。
処理１２０３、または処理１２０４によりデ−タ転送が終了したＦＢＡブロックに対応するビットマップをＳＣＢ１１０上に登録すると、処理１２０５によりチャネル制御プロセッサ２５に対しＰＯＳＴ処理が必要であるかを（ＳＣＢ１１０のＰＯＳＴ制御用ビットマップ１１１０にビットが設定されているかを）判定する。
この判定は、ＳＣＢ１１０内にチャネル制御プロセッサ２５がロ−ド要求の際設定したＰＯＳＴ制御用ビットマップ１１１０と、ロ−ド済みＦＢＡブロックビットマップ１１０８、または障害ＦＢＡブロックビットマップ１１１１の論理積を行なう。
この結果がゼロでない場合、チャネル制御プロセッサ２５に対するＰＯＳＴ処理が必要と判断され、処理１２０６を実行し、結果がゼロの場合、処理１２０６をスキップする。
処理１２０６では、チャネル制御プロセッサ２５をＰＯＳＴする処理を実行し
、ＰＯＳＴ制御用ビットマップ１１１０をクリアする。
その後、処理１２０７によりチャネル制御プロセッサ２５より要求された全てのＦＢＡブロックのロ−ド処理が終了したかを判定する。この判定の結果、ロ−ド処理が必要なＦＢＡブロックが存在する場合は、処理１２０１に戻る。また、全てのＦＢＡブロックのロ−ド処理が終了した場合は、処理を終了する。
【００２６】
以上示した処理装置１からのデ−タ読出し処理をまとめて、図１の制御装置２を図解すると、図１３のようになる。
チャネル制御プロセッサ２５からのロ−ド要求は、制御メモリ２７に設定されたＲＢ８０によりドライブ制御プロセッサ２６に伝達され、ドライブ制御プロセッサ２６は、ドライブ制御部２４を制御し、ＦＢＡディスク装置３からデ−タを読出し、不揮発キャッシュメモリ２２と２３に格納する。
ドライブ制御プロセッサ２６は、ドライブ制御部２４のデ−タ転送の進行状況を監視し、ロ−ド済みＦＢＡブロックビットマップあるいは障害ＦＢＡブロックビットマップにビットを立て、ＳＣＢ１１０にその結果を反映する。チャネル制御プロセッサ２５は、ＳＣＢ１１０を参照することにより処理装置１からアクセス対象となったＣＫＤレコ−ドがキャッシュメモリ上にロ−ドされたかを監視する。
この監視によりアクセス対象となったＣＫＤレコ−ドがキャッシュメモリ上にロ−ドされると、いずれか一方の負荷の軽いキャッシュメモリ上のＣＫＤレコ−ドを処理装置１へ転送する。
この結果、ＦＢＡディスク装置３からキャッシュメモリへのロ−ド処理と並行して、キャッシュメモリ上のデ−タを処理装置１へ転送できる。
【００２７】
（外部記憶装置のデータ更新処理）
次に処理装置１から外部記憶装置上のデ−タを更新する処理について説明する。
図１４は、プログラム１０が外部記憶装置上のデ−タを更新するために用いるチャネルプログラムの流れ図である。処理３０１から処理３０３により外部記憶装置上のアクセス対象ＣＫＤレコ−ドに位置付ける処理を行なう。これら処理（３０１〜３０３）は、図３の外部記憶装置上のデ−タを読出すためのチャネルプログラムの処理と同様であり、説明を省略する。
チャネルプロセッサは、処理３０１から３０３の処理を正常に終了すると、処理１４０１により主記憶装置上デ−タによりＣＫＤレコ−ドを更新する「デ−タ書き込み要求」を実行する。これによりライトコマンドが制御装置２に転送される。
【００２８】
ライトコマンドを受領したチャネル制御プロセッサ２５は、図１５に示すライトコマンド処理を実行する。
ライトコマンド処理では、まず処理１５０１により不揮発キャッシュメモリ２２、２３に対しデ−タ転送をセットアップする。このセットアップ処理とは、チャネル制御部２１にデ−タ転送対象となるＣＫＤレコ−ドの格納アドレスと、転送バイト数を設定することである。
ＣＫＤレコ−ドの格納アドレスは、サ−チコマンド処理において検索したＣＫＤレコ−ド内のフィ−ルドのアドレスを設定する。制御フィ−ルド、キ−フィ−ルド、またはデ−タフィ−ルドのいずれかを選択するかは、ライトコマンドの種類による。例えば、デ−タ部のデ−タ更新要求コマンドである「ＷＲＩＴＥ  ＤＡＴＡコマンド」の場合、デ−タフィ−ルドの先頭アドレスと、制御フィ−ルド内に格納されているデ−タフィ−ルドの長さをチャネル制御部２１に設定する。ただし、ＣＫＤトラックの初期設定を行なう形式書き込みコマンド（「ＷＲＩＴＥ  ＣＯＵＮＴ，ＫＥＹ，ＡＮＤ  ＤＡＴＡコマンド」等）の場合は、当該ＣＫＤトラックの指定されたＣＫＤレコ−ド以降のデ−タを削除するための設定を行なう。
その後、処理１５０２によりチャネル制御部２１に対し、デ−タ転送の開始を指示する。デ−タ転送開始指示を受けたチャネル制御部２１は、処理１５０１により設定されたＣＫＤレコ−ド格納アドレスで示されるキャッシュメモリ上の領域に処理装置１から転送されたデ−タを格納する。
チャネル制御プロセッサ２５は、チャネル制御部２１によるデ−タ転送処理の終了を処理１５０３により監視する。
【００２９】
処理１５０３のデ−タ転送終了判定処理の詳細を図１６に示す。
デ−タ転送終了判定処理では、まず処理１６０１によりデ−タ転送対象となったＦＢＡブロックに対応するＳＣＢ１１０内の更新ＦＢＡブロックビットマップ１１０９上にデータ転送の開始時に当該ＦＢＡブロックが更新されたことを記録する。
その後、処理１６０２によりチャネルデ−タ転送が終了したかを判定する。この結果、チャネルデ−タ転送が終了していないと判断された場合は、処理１６０３にてデ−タ転送がＦＢＡブロックの境界に達したかを判定する。この判定の結果、ＦＢＡブロック境界に達したと判断された場合、処理１６０１に戻り、次のデータ転送の開始時に更新ＦＢＡブロックビットマップ１１０９を更新する。また、処理処理１６０３によりＦＢＡブロックの境界に達していないと判断された場合は、処理１６０２に戻り、チャネルデ−タ転送の終了を判定する。
処理１６０２によりチャネルデ−タ転送の終了を検知すると、処理１６０４により処理装置１からのデ−タ更新要求が形式書き込み系のコマンドであるかを判定する。
処理装置１からのデ−タ更新要求が形式書き込み系コマンドである場合、処理１６０５によりデ−タ転送を終了したＦＢＡブロックの次のＦＢＡブロックからアクセス対象となったＣＫＤトラックの最後のＦＢＡブロックに対応する更新ＦＢＡブロックビットマップ１１０９を設定する。これは、形式書き込み系のコマンドの場合、アクセス対象となったＣＫＤレコ−ド以降のＣＫＤレコ−ド消去する必要があり、消去対象となるＣＫＤレコ−ドが格納されているＦＢＡブロックを更新する必要があるためである。なお、このＣＫＤレコ−ドの消去処理は、チャネル制御部２１により自動的に実行される。
【００３０】
以上がライトコマンド処理におけるデ−タ転送監視処理１５０３の詳細であるが、処理１５０３によりデ−タ転送の終了を検知すると処理１５０４によりデ−タ転送が正常に終了したかを判定する。
この結果、デ−タ転送が異常終了したと判断された場合、処理１５０６によりライトコマンドの異常終了を処理装置１に報告する。また、処理１５０４によりデ−タ転送が正常終了したと判断された場合は、処理１５０５によりライトコマンドの正常終了を処理装置１に報告する。
その後、処理１５０７により処理装置１から要求された入出力要求処理が、形式書き込み系コマンドあるかを判定する。処理１５０７により、処理装置１から要求された入出力要求が形式書き込みであると判断された場合は、処理１５０８によりチャネル制御部２１の形式書き込み処理の終了を待って処理を終了する。また、形式書き込み以外のデ−タ更新要求の場合は、そのまま処理を終了する。
【００３１】
以上示したデ−タ更新処理をまとめて、図１の制御装置２を図解すると、図１７のようになる。
処理装置１からの入出力処理対象となったＣＫＤレコ−ドがキャッシュメモリ上に存在しない場合は、デ−タ読出し処理と同様にチャネル制御プロセッサ２５からロ−ド要求をＲＢ８０によりドライブ制御プロセッサ２６に伝達する。
ドライブ制御プロセッサ２６は、ドライブ制御部２４を制御し、ＦＢＡディスク装置３からアクセス対象となったＣＫＤレコ−ドを含むＦＢＡブロックを読出し、不揮発キャッシュメモリ２２と２３に格納する。
ドライブ制御プロセッサ２６は、ドライブ制御部２４のデ−タ転送の進行状況を監視し、ＳＣＢ１１０内のロ−ド済ＦＢＡブロックビットマップ１１０８にその結果を反映する。チャネル制御プロセッサ２５は、ＳＣＢ１１０を参照することによりキャッシュメモリへのロ−ド処理の実行状態を監視する。
この監視により、アクセス対象となったＣＫＤレコ−ドがキャッシュメモリ上にロ−ドされると、チャネル制御プロセッサ２５は、チャネル制御部２１を制御し、処理装置１から転送されたデ−タを不揮発キャッシュメモリ２２と２３に格納する。
この際、デ−タ更新対象となったＦＢＡブロックをＳＣＢ１１０内の更新ＦＢＡブロックビットマップ１１０９に反映する。この結果、ＦＢＡディスク装置３からのロ−ド処理と並行して、処理装置１からの更新デ−タをキャッシュメモリ上に格納できる。
【００３２】
（更新デ−タのＦＢＡディスク装置への格納処理）
次に、処理装置１から更新されたデ−タをＦＢＡディスク装置３へ格納する処理について説明する。
本発明では、先のデ−タ更新処理の説明のように、処理装置１からデ−タ更新要求が発行された時点では、ＦＢＡディスク装置３にデ−タを書き込まない。これは、ライト系コマンドの応答時間を短縮することを目的としており、制御装置２内の２つのキャッシュメモリと制御メモリ２７の不揮発化は、処理装置１にコマンドの終了を報告したライトデ−タをＦＢＡディスク装置３に格納する間の電源障害によりデ−タを消失することを防ぐためである。
【００３３】
図１８は、ＦＢＡデイスク装置３への未反映更新デ−タを含むキャッシュスロットを管理するＳＣＢ１１０（以降、このようなＳＣＢをライトペンディングＳＣＢと呼ぶ）の関係図である。
ライトペンディングＳＣＢ１１０は、ライトペンディングＳＣＢＭＲＵポインタ１８０、ライトペンディングＳＣＢＬＲＵポインタ１８１、前方向ポインタ１１０２、および後方向ポインタ１１０３でチェインされている。このライトペンディングＳＣＢチェインは、ＦＢＡディスク装置毎に存在する。
このチェインへのＳＣＢ１１０の登録処理は、チャネル制御プロセッサ２５においてデ−タ更新処理を行なった際に行なわれ、チェインのＭＲＵ側に登録される。
ドライブ制御プロセッサ２６は、一定時間間隔でライトペンディングＳＣＢチェインを参照し、ライトペンディングＳＣＢが存在する場合、当該ＳＣＢが管理するキャッシュスロット上の更新デ−タをＦＢＡデイスク装置３へ格納するデステ−ジ処理を起動する。
複数のライトペンディングＳＣＢがチェイン上に存在する場合は、ＬＲＵ側のライトペンディングＳＣＢよりデステ−ジ処理を実行する。
【００３４】
（デステ−ジ処理）
以下、図１９を参照してデステ−ジ処理を説明する。
デステ−ジ処理においては、まず処理１９０１により不揮発キャッシュメモリ２２、２３のいずれかを選択し、処理１９０２により選択したキャッシュメモリに対しデ−タ転送をセットアップする。このセットアップ処理とは、ドライブ制御部２４にデ−タ転送対象となるＦＢＡブロックの格納アドレスと転送バイト数を設定することである。
ＦＢＡブロックの格納アドレスは、ＳＣＢ１１０内の更新ＦＢＡブロックビットマップを参照することにより求めることができる。また、転送バイト数は、デステ−ジ対象となるＣＫＤトラック内の最初の更新デ−タを含むＦＢＡブロックから最後の更新デ−タを含むＦＢＡブロック数分だけ設定する。この処理の概要を図２０を参照して説明する。
【００３５】
ＣＫＤトラック内に６つのＣＫＤレコ−ド（１２１から１２５）が存在し、ＣＫＤレコ−ド１２２と１２５が処理装置１から更新されていると、更新ＦＢＡブロックビットマップ１１０９にＦＢＡブロック２５１、２５２、および２５４に更新デ−タが含まれることが表示される。
この更新ＦＢＡブロックビットマップを参照し、デステ−ジ範囲をＦＢＡブロック２５１からＦＢＡブロック２５４の連続した４つのＦＢＡブロックをデステ−ジ範囲とする。
このように更新デ−タを含まないＦＢＡブロック（２５３）もデステ−ジ対象とする理由は、ＦＢＡディスク装置３のインタフェ−スがＳＣＳＩの場合、１回のライトコマンドでは連続した領域のデ−タ格納処理のみである。したがって、上記例において更新デ−タを含むＦＢＡブロックのみをＦＢＡデイスク装置に書き込むためには、２回のライトコマンドを発行しなければならないためである。
【００３６】
処理１９０２によりドライブ制御部２４に対しデ−タ転送をセットアップした後、処理１９０３によりデステ−ジを開始するＦＢＡブロック番号を、ＳＣＢ１１０内のシリンダ番号１１０５、トラック番号１１０６、および更新ＦＢＡブロックビットマップ１１０９から計算する。
続く処理１９０４によりＦＢＡディスク装置３に対し、処理１９０３で求めたＦＢＡブロックのライト要求を発行する。その後、処理１９０５によりデ−タ転送の開始を指示し、処理１９０６によりデ−タ転送の終了を監視する。
処理１９０６によりデ−タ転送の終了を検出すると、処理１９０７において、ＦＢＡデイスク装置３のデ−タ格納処理の終了を監視する。処理１９０７によりＦＢＡディスク装置３のデ−タ格納処理の終了を検知すると、処理１９０８によりＦＢＡディスク装置３へのデ−タ格納処理を終了したＦＢＡブロックに対応する更新ＦＢＡブロックビットマップ１１０９をクリアする。
【００３７】
以上示したデステ−ジ処理をまとめて、図１の制御装置２を図解すると、図２１のようになる。ドライブ制御プロセッサ２６は、制御メモリ２７上のライトペンディングＳＣＢ１１０を検索し、更新ＦＢＡブロックビットマップ１１０９を参照してデステ−ジ範囲を決定する。その後、いずれかのキャッシュメモリからデステ−ジ範囲のＦＢＡブロックをＦＢＡデイスク装置３に格納する。
【００３８】
本発明によれば、処理装置１からアクセス要求のあったＣＫＤレコ−ドを含むＦＢＡブロックの全てが２つの不揮発キャッシュメモリ２２、２３に格納される。
デステ−ジ処理中に一方の不揮発キャッシュメモリに障害が発生しても、他の不揮発キャッシュメモリからデステ−ジ処理が再開できる。このため、ＦＢＡディスク装置において、ＣＫＤディスク装置をエミュレ−トしても、処理装置１からのアクセス対象以外のレコ−ドを破壊するという問題が解決できる。
これにより、ＦＢＡディスク装置においてＣＫＤディスク装置をエミュレ−トする場合にも、処理装置１からのデ−タ更新要求とは非同期にＦＢＡディスク装置へのデ−タ格納処理を実行するライトアフタキャッシュ方式が適応できる。
また、ＦＢＡデイスク装置３とキャッシュメモリ間のデ−タ転送と、キャッシュメモリと処理装置１とのデ−タ転送を並行して実行でき、かつその排他単位がＦＢＡブロックであるため、処理装置１から入出力要求を受け取ってから、実際にデ−タ転送を開始するまでの時間を短縮できる。
【００３９】
〈第２実施例〉
次に、第２の実施例について説明する。
本実施例の構成図は、第１の実施例と同一であり説明を省略する。第１の実施例は、処理装置１からアクセス対象となったＣＫＤレコ−ドを２つの不揮発キャッシュメモリ２２、２３に常に格納する方式であった。
この方式では、更新デ−タを含まないキャッシュスロットであっても、２つの不揮発キャッシュメモリ２２、２３に格納されている。本来、更新デ−タを含まないキャッシュスロットは、どちらか一方のキャッシュメモリに存在すれば良い。
このように、第１の実施例では、キャッシュメモリの有効利用という観点からは問題があり、本実施例では、この問題を解決する。
【００４０】
本実施例では、キャッシュメモリ上のキャッシュスロットを管理するＳＣＢを各々のキャッシュメモリ毎に設ける。これにより、ＳＣＢは、図２２に示すような構成となる。
第１の実施例との違いは、当該ＳＣＢが管理するキャッシュスロットが属するキャッシュメモリ番号を示すエントリ１１１２が追加されている。このキャッシュメモリ番号は、制御装置２内を構成している複数の不揮発キャッシュメモリに対して割当てた一連の番号であり、不揮発キャッシュメモリ２２をキャッシュメモリ０、不揮発キャッシュメモリ２３をキャッシュメモリ１とする。
ただし、これによりキャッシュメモリ上のデ−タ格納形式が変更されることはなく、第１の実施例の図２で示したデ−タ格納形式と同様である。
【００４１】
処理装置１からアクセスされたＣＫＤトラックがキャッシュメモリ上に存在するかを判定するＨＩＴ／ＭＩＳＳ判定テ−ブルとＳＣＢ１１０の関係図を図２３に示す。
この図より分かるように、各キャッシュメモリ毎にＨｉｔ／Ｍｉｓｓ判定テ−ブルを設ける。
つまり、キャッシュメモリ０上のキャッシュスロットを管理するＳＣＢ１１０は、デバイス表１００−０、シリンダ表１０１−０、およびトラック表１０２−０からなるＨｉｔ／Ｍｉｓｓ判定テ−ブルにより管理され、キャッシュメモリ１上のキャッシュスロットを管理するＳＣＢ１１０は、デバイス表１００−１、シリンダ表１０１−１、およびトラック表１０２−１からなるＨｉｔ／Ｍｉｓｓ判定テ−ブルにより管理されている。
トラック表１０２−０、および１０２−１からポイントされる更新デ−タを含まないキャッシュスロットを管理するＳＣＢ１１０は、再利用可能ＳＣＢチェインに接続されている。
この再利用可能ＳＣＢチェインは、ＭＲＵポインタ１０３、ＬＲＵポインタ１０５、前方向ポインタ１１０２、および後方向ポインタ１１０３で管理されている。このチェインは、キャッシュメモリ０、１に関係なく一本のチェインである。また、このＳＣＢ１１０のチェインの中心のＳＣＢ１１０を中央ポインタ１０６によりポイントしている。
処理装置１からのアクセスが終了した時点で、アクセス対象となったキャッシュスロットが、キャッシュメモリ０と、キャッシュメモリ１の両方に存在する場合は、どちらか一方のキャッシュスロットを管理するＳＣＢ１１０を再利用可能ＳＣＢチェインのＭＲＵ側に接続し、他のキャッシュスロットを管理するＳＣＢ１１０を中央ポインタ１０６が示すチェインの位置に接続する。
【００４２】
ＣＫＤトラックに割当てられていないキャッシュスロットを管理するＳＣＢ１１０は、図２４のように各キャッシュメモリ毎にチェインされている。
キャッシュメモリ０上の空きキャッシュスロットを管理するＳＣＢ１１０は、空きＳＣＢポインタ１０４−０、前方向ポインタ１１０２、および後方向ポインタ１１０３でチェインする。
また、キャッシュメモリ１上の空きキャッシュスロットを管理するＳＣＢ１１０は、空きＳＣＢポインタ１０４−１、前方向ポインタ１１０２、および後方向ポインタ１１０３でチェインする。
空きＳＣＢポインタ１０４−０と１０４−１は、ＣＫＤトラックに割当てられていないキャッシュスロットを管理するＳＣＢ１１０をチェインするための先頭ポインタであり、これらＳＣＢ１１０のうち、ひとつをポイントする。残りのＣＫＤトラックに割当てられていないキャッシュスロットを管理するＳＣＢ１１０は、前方向ポインタ１１０２、および後方向ポインタ１１０３でチェインする。
ＣＫＤトラックに割当てられていないキャッシュスロットが存在しない場合は、空きＳＣＢポインタ１０４−０、１０４−１は、ｎｕｌｌとなる。
処理装置１からの入出力要求により新たなキャッシュスロットが必要となった場合、空きＳＣＢが存在する場合は、そのＳＣＢを利用するが、存在しない場合は、再利用可能ＳＣＢチェインに登録されている、ＬＲＵ側のＳＣＢ１１０を利用する。
【００４３】
（第１実施例と異なる処理）
以下に第１の実施例と異なる処理を説明する。
本実施例では、２つの不揮発キャッシュメモリ２２，２３上のキャッシュスロットをそれぞれ独立のＳＣＢ１１０により管理する。したがって、図２５に示すように、図３に示すサ−チコマンド処理におけるＣＫＤトラックのＨｉｔ／Ｍｉｓｓ判定処理６０３は、ＣＫＤトラックがいずれかのキャッシュメモリに存在する場合、Ｈｉｔ状態とするよう制御する。
つまり、処理２５０１によりキャッシュメモリ０上に、処理装置１からアクセス対象となったＣＫＤトラックが存在するかを判定する。この結果、当該ＣＫＤトラックがキャッシュメモリ０上に存在しないと判断された場合、処理２５０２によりキャッシュメモリ１上に当該ＣＫＤトラックが存在するかを判定する。
この判定の結果、いずれのキャッシュメモリにも当ＣＫＤトラックが存在しないと判断された場合、処理２５０３によりＨｉｔ／Ｍｉｓｓ判定結果をＭｉｓｓとする。
また、処理２５０１、または処理２５０２によりキャッシュメモリ０、またはキャッシュメモリ１のいずれかに当該ＣＫＤトラックが存在すると判断された場合、処理２５０４によりＨｉｔ／Ｍｉｓｓ判定結果をＨｉｔとする。
また、処理６０５におけるキャッシュメモリの選択処理は、アクセス対象となったＣＫＤトラックが存在するキャッシュメモリを選択する。
【００４４】
なお、図２５に示したＨｉｔ／Ｍｉｓｓ判定処理では、キャッシュメモリ０とキャッシュメモリ１の両方のキャッシュメモリにアクセス対象となったＣＫＤトラックが存在すると、必ずキャッシュメモリ０、すなわち不揮発キャッシュメモリ２２を選択してしまう。これにより、２つのキャッシュメモリ間で負荷の不均衡が発生してしまう。
これの対策として、シリンダ番号の偶数、奇数によりキャッシュメモリ０とキャッシュメモリ１のＨｉｔ／Ｍｉｓｓ判定順序を入れ替える方法等がある。
また、図７に示すリ−ドコマンド処理においては、処理７０１のキャッシュメモリの選択処理が、先に説明したサ−チコマンド処理におけるキャッシュメモリ選択処理同様、アクセス対象となったＣＫＤレコ−ドが存在するキャッシュメモリを選択する。
【００４５】
（ライトコマンド処理）
次にライトコマンド処理について説明する。
第１の実施例の場合、更新対象となるＣＫＤレコ−ドを含むキャッシュスロットは、必ず２つの不揮発キャッシュメモリに存在した。
しかし、本実施例では、上記に示したようなキャッシュ管理方式を採用しているため更新対象となったキャッシュスロットが一つのキャッシュメモリにのみに存在する場合がある。この場合、新たに他方のキャッシュメモリ上にキャッシュスロットを割当て、更新対象となったＣＫＤレコ−ドが格納されているＦＢＡブロックが２つのキャッシュメモリに存在するよう制御する。
【００４６】
図２６にライトコマンド処理の流れ図を、図２７にライトコマンド処理におけるデ−タの流れを示す。
チャネル制御プロセッサ２５は、処理装置１よりライトコマンドを受領すると、処理２６０１により更新対象となるＣＫＤレコ−ドが格納されている最初のＦＢＡブロックがキャッシュメモリ０と、キャッシュメモリ１の両方に格納されているかを確認する。
図２７の例では、処理装置からの更新対象は、ＣＫＤレコ−ド１２５（Ｒ５）のデ−タフィ−ルドであり、Ｒ５  １２５は、ＦＢＡブロック２５４とＦＢＡブロック２５５にまたがって格納されている。
処理２６０１の判定では、ＦＢＡブロック２５４がキャッシュメモリ１とキャッシュメモリ２の両方に存在するかを判定する。
この判定により、ＦＢＡブロック２５４が一方のキャッシュメモリにのみ存在すると判断された場合、処理２６０２により不揮発キャッシュメモリ２２、２３に対し、コピ−転送をセットアップする。このセットアップ処理は、以下の２つの処理からなる。
第１の処理は、転送先のキャッシュメモリ上にアクセス対象となったＣＫＤトラックに対応するキャッシュスロットが確保されていない場合、転送元のキャッシュスロットと同じ容量のキャッシュスロットを確保する処理である。
第２の処理は、転送元のキャッシュメモリとそのアドレス、転送先のキャッシュメモリとそのアドレス、およびコピ−転送バイト数をチャネル制御部２１に設定する処理である。
図２７の例では、不揮発キャッシュメモリ２３上に不揮発キャッシュメモリ２２上のキャッシュスロット２７５と同じ容量を持つキャッシュスロット２７６を割当てる。その後、キャッシュスロット２７５内のＦＢＡブロック２５４−０の先頭アドレスをコピ−元アドレスとして設定する。
またコピ−先アドレスとしてキャッシュスロット２７６内のＦＢＡブロック２５４−１の先頭アドレスを設定し、転送バイト数としてＦＢＡブロック２５４−０の先頭からＲ５  １２５のデ−タフィ−ルドまでのバイト数を設定する。
以上によりコピ−転送のセットアップ処理が終了し、続く処理２６０３によりコピ−転送の開始をチャネル制御部２１に指示する。これによりコピ−転送２７１（図２７）が開始される。なお、上記の転送バイト数としては、ＦＢＡブロック２５４−０の先頭からＲ５  １２５のカウントフィ−ルド（Ｃ）までのバイト数を設定するようにしてもよいし、ＦＢＡブロック２５５−０の最終アドレスまでのバイト数を設定するようにしてもよい。
キャッシュメモリ間のコピ−転送処理は、チャネル制御部２１に実行され、チャネル制御プロセッサは、処理２６０４によりコピ−処理の実行状態を監視する
。
処理２６０４によりコピ−転送処理の終了を検知すると処理２６０５によりコピ−転送が正常に終了したかを判定する。この判定によりコピ−処理が異常終了したと判断された場合、処理１５０６によりライトコマンドの異常終了を処理装置１に報告し処理を終了する。
処理２６０５によりコピ−処理が正常終了したと判断された場合、もしくは処理２６０１により処理装置１から更新デ−タを受領する前のコピ−処理が不要であると判断された場合は、処理１５０１を実行する。処理１５０１から処理１５０８までの処理は、第１の実施例の図１５と同じであるため説明を省略する。
【００４７】
処理１５０７により処理装置１からのライトコマンドが形式書き込み系のコマンドでないと判断された場合、処理２６０６により転送を終了したＦＢＡブロックの残りのデ−タをキャッシュメモリ間でコピ−が必要であるかを判定する。
図２７の例では、処理装置１からのデ−タ転送は、ＦＢＡブロック２５５の途中で終わっている。この状態では、ＦＢＡブロックとして完全に２つのキャッシュメモリ上に存在することにならない。したがって、ＦＢＡブロック２５５−０のＲ５以降のデ−タをＦＢＡブロック２５５−１にコピ−する必要がある。処理２６０６から処理２６０９においてこのコピ−処理２７３（図２７）を実行する。コピ−手順については先に説明したＦＢＡブロック２５４−０のコピ−手順と同様であるため説明を省略する。
以上のライトコマンド処理により処理装置１より更新対象となったＣＫＤレコ−ドを格納するＦＢＡブロックは、必ず２つの不揮発キャッシュメモリ上に存在することになる。
【００４８】
（デステ−ジ処理）
次に、処理装置１から更新されたデ−タをＦＢＡディスク装置３へ格納するデステ−ジ処理について説明する。
本実施例においても第１の実施例同様、ＦＢＡディスク装置３へのデ−タ格納処理は、処理装置１からのデ−タ更新要求とは非同期に実行する。
ライトペンディングＳＣＢ１１０の管理方式は、第１の実施例と同様の管理であるが、本実施例では、２重化されたキャッシュスロットを、それぞれ独立したライトペンディングＳＣＢ１１０により管理するが、図１８に示すライトペンディングＳＣＢチェインには、いずれか一方のライトペンディングＳＣＢ１１０を登録する。
ライトペンディングＳＣＢ１１０が存在する場合、ドライブ制御プロセッサ２６は、ライトペンディングＳＣＢＬＲＵポインタによりポイントされるＳＣＢを確保して図２８に示すデステ−ジ処理を実行する。
【００４９】
デステ−ジ処理では、まず処理２８０１によりキャッシュスロット内のＦＢＡブロックのキャッシュメモリ間コピ−処理が必要であるかを判定する。
この判定は、１回のＦＢＡディスク装置へのライト要求により一つのＣＫＤトラック内の更新デ−タを一括して書き込みを行なっても、障害によりデ−タを消失させないようにするためである。具体的な例を、図２９を参照して説明する。
あるＣＫＤトラックに対応するキャッシュスロットが４つのＦＢＡブロックから構成されていて、第３のＦＢＡブロック２５３を除く３つのＦＢＡブロックに更新デ−タが含まれると仮定する。この場合、キャッシュスロット内の更新デ−タを含むＦＢＡブロックを１回のＦＢＡディスク装置へのライト要求により書き込みを行なうためには、上記４つのＦＢＡブロックを一括して書き込む必要がある。
ＦＢＡブロック２５３は、更新デ−タを含んでいないため、一つのキャッシュメモリにしか存在しない場合がある。このような状態において、ＦＢＡブロック２５３をＦＢＡディスク装置３へ書き込み中にキャッシュメモリに障害が発生すると、ＦＢＡブロック２５３を消失してしまう。
したがって、ＦＢＡブロック２５３を含めてＦＢＡディスク装置３への書き込み要求範囲のＦＢＡブロックの全てを２つのキャッシュメモリに２重化することにより上記問題を解決する。
【００５０】
処理２８０１により、キャッシュメモリ間コピ−が必要であると判断された場合、処理２８０２により不揮発キャッシュメモリ２２、２３に対し、コピ−転送をセットアップする。このセットアップ処理は、転送元のキャッシュメモリとそのアドレス、転送先のキャッシュメモリとそのアドレス、およびコピ−転送バイト数をチャネル制御部２１に設定する処理である。
図２９の例では、ＦＢＡブロック２５３−０の先頭アドレスをコピ−元アドレスとして設定する。またコピ−先アドレスとしてＦＢＡブロック２５３−１の先頭アドレスを設定し、転送バイト数として一ＦＢＡブロック分のバイト数を設定する。以上によりコピ−転送のセットアップ処理が終了し、続く処理２８０３によりコピ−転送を開始をドライブ制御部２４に指示する。これによりコピ−転送２９１（図２９）が開始される。
【００５１】
キャッシュメモリ間のコピ−転送処理は、ドライブ制御部２４に実行され、ドライブ制御プロセッサ２６は、処理２８０４によりコピ−処理の実行状態を監視する。処理２８０４によりコピ−転送処理の終了を検知すると、処理１９０１により不揮発キャッシュメモリ２２、２３のいずれかを選択し、処理２８０５を実行する。
処理２８０５では、処理１９０１で選択したキャッシュメモリ以外のキャッシュメモリ上のデステ−ジ対象となったＣＫＤトラックに対応するキャッシュスロットを管理するＳＣＢ１１０−１内のＳＣＢ状態フラグ１１０１にリ−ド属性フラグを設定する。
これは、ＦＢＡディスク装置３へのデステ−ジ処理中にデステ−ジ対象となったＣＫＤトラックに対し、処理装置１からアクセス要求があった場合、処理装置１からのアクセス要求がデ−タ読出し要求ならば、デステ−ジ処理に利用していないキャッシュスロットにより当該アクセス要求を実行させるためである。
なお、処理装置１からのアクセス要求がデ−タ更新要求の場合、またはアクセス対象ＣＫＤレコ−ドがデステ−ジ処理に利用していないキャッシュスロットに存在しない場合は、デステ−ジ処理が終了するまで処理装置からのアクセス要求は待ち状態となる。
処理２８０５に続く処理１９０２から、処理１９０７までの処理は、キャッシュスロット上の更新デ−タを含むＦＢＡブロックのＦＢＡディスク装置３への書き込み処理であり、第１の実施例の図１９と同じため説明を省略する。
ＦＢＡディスク装置３への書き込み処理が終了すると、処理２８０６により書き込みを終了したキャッシュスロットを管理するＳＣＢ１１０内の更新ＦＢＡブロックビットマップ１１０９を消去する。
この消去処理は、２重化されたキャッシュスロットを管理する２つのＳＣＢ１１０に対し実行され、続く処理２８０７により処理２８０５により設定したＳＣＢのリ−ド属性を解除し、処理を終了する。
【００５２】
なお、デステ−ジ処理が終了したキャッシュスロットを管理するＳＣＢ１１０は、再利用可能ＳＣＢチェインに登録される。この登録処理は、２重化された一方のキャッシュスロットを管理するＳＣＢ１１０を再利用可能ＳＣＢチェインのＭＲＵ側に登録し、他のキャッシュスロットを管理するＳＣＢ１１０を再利用可能ＳＣＢチェインの中央に登録する。
【００５３】
本発明によれば、ＦＢＡディスク装置から読出された直後のキャッシュスロットは、２つの不揮発キャッシュメモリ２２、２３上に２重化されて格納される。
当該キャッシュスロットに更新デ−タが存在せず、処理装置１からのアクセス頻度が低い場合、一方のキャッシュメモリ上のキャッシュスロットが削除され１重化され、さらにアクセス頻度が低いキャッシュスロットは、いずれのキャッシュメモリにも存在しなくなる。
これにより、キャッシュメモリの有効利用が図れ、処理装置１からアクセス対象となるデ−タがキャッシュメモリ上に存在する確率が高くなり、高性能なディスクキャッシュ装置が提供できる。
【００５４】
また、１重化状態となったキャッシュスロットに対して処理装置１からデ−タ更新要求が発行された場合、更新デ−タを含むＦＢＡブロックは２つの不揮発キャッシュメモリ２２、２３に２重化される。
これにより、ＦＢＡデイスク装置においてＣＫＤディスク装置をエミュレ−トする際にも、ライトアフタキャッシュ制御が適応できる。
さらに、ＦＢＡディスク装置３へのライトコマンド発行回数を削減するため、一つのキャッシュスロット上の更新デ−タを含むＦＢＡブロックは一括書き込みを行なう。この際、更新デ−タを含まないＦＢＡブロックもＦＢＡデイスク装置に書き込むことがあるが、このようなＦＢＡブロックも２つの不揮発キャッシュメモリに２重化されて格納されているため、ＦＢＡディスク装置３への書き込み中に障害が発生してもデ−タを消失することはない。
【００５５】
【発明の効果】
本発明は、以上説明したように構成されているので以下に記載されるような効果を奏する。
（１）処理装置からアクセス要求のあったＣＫＤレコ−ドを含むＦＢＡブロックの全てが複数のキャッシュメモリにＦＢＡディスク装置から読出され格納される。キャッシュメモリ上の更新デ−タを含むＦＢＡブロックのＦＢＡデイスク装置への書き込み処理、すなわちデステ−ジ処理中に一方のキャッシュメモリに障害が発生しても、他のキャッシュメモリからデステ−ジ処理が再開できる。
このため、ＦＢＡディスク装置において、ＣＫＤディスク装置をエミュレ−トしても、処理装置からのアクセス対象以外のレコ−ドを破壊することがないという効果が得られる。
また、ＦＢＡディスク装置においてＣＫＤディスク装置をエミュレ−トする場合にも、処理装置１からのデ−タ更新要求とは非同期にＦＢＡディスク装置へのデ−タ格納処理を実行するライトアフタキャッシュ方式が適応できるという効果、また、処理装置からのデ−タ更新処理の際、ディスク装置の機械的動作時間を削減できるという効果が得られる。
また、ＦＢＡデイスク装置３とキャッシュメモリ間のデ−タ転送と、キャッシュメモリと処理装置１とのデ−タ転送を並行して実行でき、かつその排他単位がＦＢＡブロックであるため、処理装置から入出力要求を受け取ってから、実際にデ−タ転送を開始するまでの時間を短縮できるという効果が得られる。
（２）ＦＢＡディスク装置から読出された直後のキャッシュスロットは、２つのキャッシュメモリ２２、２３上に２重化されて格納される。当該キャッシュスロットに更新デ−タが存在せず、処理装置１からのアクセス頻度が低い場合、一方のキャッシュメモリ上のキャッシュスロットが削除され１重化され、さらにアクセス頻度が低いキャッシュスロットは、いずれのキャッシュメモリにも存在しなくなる。
これにより、キャッシュメモリの有効利用が図れ、処理装置からアクセス対象となるデ−タがキャッシュメモリ上に存在する確率が高くなり、高性能なディスクキャッシュ装置を提供できるという効果が得られる。
（３）１重化状態となったキャッシュスロットに対して処理装置からデ−タ更新要求が発行された場合、更新デ−タを含むＦＢＡブロックは２つのキャッシュメモリに２重化される。
これにより、１重化状態となったキャッシュスロットに対してもライトアフタキャッシュ方式が適応でき、処理装置からのデ−タ更新処理の応答時間を短縮できるという効果が得られる。
（４）更新デ−タを含むＦＢＡブロックａとｃの間に更新デ−タを含まないＦＢＡブロックｂが存在しても、更新デ−タを含まないＦＢＡブロックｂを２つのキャッシュメモリに２重化する。
これにより、ＦＢＡブロックａからｃを一括してＦＢＡディスク装置に格納してもディスク装置への書き込み中に障害が発生してもデ−タを消失することはなく、デステ−ジ処理の際のＦＢＡディスク装置へのライト要求発行回数を削減できるという効果が得られる。
（５）キャッシュメモリを不揮発キャッシュメモリとすることにより、電源障害が発生してもキャッシュメモリ中の更新レコードを保持できるという効果が得られる。
【図面の簡単な説明】
【図１】本発明の一実施例を示す制御構成を示すブロック図である。
【図２】ＣＫＤディスク装置をＦＢＡディスク装置においてエミュレ−トする際のデ−タ格納形式である。
【図３】デ−タ読出し用チャネルプログラムの流れ図である。
【図４】シ−クコマンド処理の流れ図である。
【図５】セットセクタコマンドの処理の流れ図である。
【図６】サ−チコマンド処理の流れ図である。
【図７】リ−ドコマンド処理の流れ図である。
【図８】ドライブ制御プロセッサへのリクエストブロック（ＲＢ）の構成図である。
【図９】キャッシュメモリへのロ−ド処理の流れ図である。
【図１０】Ｈｉｔ／Ｍｉｓｓ判定テ−ブルとＳＣＢとの関係図である。
【図１１】スロットコントロ−ルブロック（ＳＣＢ）の構成図である。
【図１２】図９の処理９０７の詳細な流れ図である。
【図１３】デ−タ読出し処理を説明する概略図である。
【図１４】デ−タ書き込み用チャネルプログラムの流れ図である。
【図１５】ライトコマンド処理の流れ図である。
【図１６】図１５の処理１５０３の詳細な流れ図である。
【図１７】デ−タ更新処理を説明する概略図である。
【図１８】更新デ−タを含むキャッシュスロットを管理するＳＣＢの関係図である。
【図１９】デステ−ジ処理の流れ図である。
【図２０】デステ−ジ対象ＦＢＡブロックの範囲を示す図である。
【図２１】デステ−ジ処理を説明する概略図である。
【図２２】第２の実施例におけるスロットコントロ−ルブロック（ＳＣＢ）の構成図である。
【図２３】第２の実施例におけるＨｉｔ／Ｍｉｓｓ判定テ−ブルとＳＣＢの関係図である。
【図２４】第２の実施例における空きＳＣＢの関係図である。
【図２５】第２の実施例におけるＨｉｔ／Ｍｉｓｓ判定処理の流れ図である。
【図２６】第２の実施例におけるライトコマンド処理の流れ図である。
【図２７】第２の実施例のライトコマンド処理におけるデ−タの流れを示す図である。
【図２８】第２の実施例におけるデステ−ジ処理の流れ図である。
【図２９】第２の実施例のデステ−ジ処理におけるデ−タの流れを示す図である。
【符号の説明】
１  処理装置
２  制御装置
２１  チャネル制御
２１  ドライブ制御
２２、２３  不揮発キャッシュメモリ
２５  チャネル制御プロセッサ
２６  ドライブ制御プロセッサ
２７  制御メモリ
３  固定長記録形式のディスク装置
【図１】
0003861061.tif 000003
【図２】
0003861061.tif 000004
【図３】
0003861061.tif 000005
【図４】
0003861061.tif 000006
【図５】
0003861061.tif 000007
【図６】
0003861061.tif 000008
【図７】
0003861061.tif 000009
【図８】
0003861061.tif 000010
【図９】
0003861061.tif 000011
【図１０】
0003861061.tif 000012
【図１１】
0003861061.tif 000013
【図１２】
0003861061.tif 000014
【図１３】
0003861061.tif 000015
【図１４】
0003861061.tif 000016
【図１５】
0003861061.tif 000017
【図１６】
0003861061.tif 000018
【図１７】
0003861061.tif 000019
【図１８】
0003861061.tif 000020
【図１９】
0003861061.tif 000021
【図２０】
0003861061.tif 000022
【図２１】
0003861061.tif 000023
【図２２】
0003861061.tif 000024
【図２３】
0003861061.tif 000025
【図２４】
0003861061.tif 000026
【図２５】
0003861061.tif 000027
【図２６】
0003861061.tif 000028
【図２７】
0003861061.tif 000029
【図２８】
0003861061.tif 000030
【図２９】
0003861061.tif 000031