JPH10232838A - ディスク記憶システム - Google Patents

ディスク記憶システム

Info

Publication number
JPH10232838A
JPH10232838A JP9302387A JP30238797A JPH10232838A JP H10232838 A JPH10232838 A JP H10232838A JP 9302387 A JP9302387 A JP 9302387A JP 30238797 A JP30238797 A JP 30238797A JP H10232838 A JPH10232838 A JP H10232838A
Authority
JP
Japan
Prior art keywords
data
cache
block
blocks
track
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP9302387A
Other languages
English (en)
Inventor
Kiyohiro Obara
清弘 小原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP9302387A priority Critical patent/JPH10232838A/ja
Publication of JPH10232838A publication Critical patent/JPH10232838A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 【課題】 圧縮された複数のレコードのそれぞれを読み
出し容易なようにディスク記憶システムのキャッシュメ
モリに記憶する。 【解決手段】 キャッシュメモリへ格納されるデータ
を、そのデータが属するトラックブロックに対応して、
ともに2つのキャッシュブロックの大きさを有する複数
のデータブロックに分割して圧縮する。圧縮後の各デー
タブロックを一つ又は複数のキャッシュブロックに記憶
する。それらのキャッシュブロックをそのデータブロッ
クのトラック内アドレスから検索するための情報をキャ
ッシュメモリに対する検索情報の一部として記憶する。
いずれかのレコードの各データブロックを読み出すとき
には、そのデータブロックのトラック内アドレスと上記
検索情報とに基づいて、圧縮後のそのデータブロックを
記憶したキャッシュブロックを判別する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、データを圧縮して
メモリに記憶する方法およびその方法をキャッシュメモ
リに適用したディスク記憶システムに関する。
【0002】
【従来の技術】近年、少なくとも一つのディスク記憶装
置を有するディスク記憶システムにおいては、キャッシ
ュメモリを装備することが一般的である。特に、複数の
ディスクドライブを用いて冗長性を持たせ、性能や耐障
害性を高めたディスクアレイシステムの多くは、数百ギ
ガバイトの容量を有するため、数ギガバイトのもの容量
のキャッシュメモリを持つ。
【0003】ディスク記憶システムでは、記憶媒体への
アクセス時間とキャッシュメモリへのアクセス時間の差
が非常に大きい。このために、ディスク記憶システムで
は、キャッシュメモリの導入によるレスポンスタイムの
向上の効果は顕著に表れる。キャッシュメモリの容量を
増やせばキャッシュメモリのヒット率が向上し、レスポ
ンスタイムが向上する。一方、大量のキャッシュメモリ
の装備は、ディスク記憶システム全体のコストを顕著に
上昇させる。
【0004】ところで、少ない記憶領域を有効に利用す
る手段として、データ圧縮技術がある。例えば、植松友
彦著、“文書データ圧縮アルゴリズム”CQ出版社、第
227頁から第244頁によれば、圧縮アルゴリズムや
被圧縮データに依存するが、概して元データの半分以下
の容量までデータを圧縮可能である。
【0005】
【発明が解決しようとする課題】本発明者は、上記圧縮
技術をディスク記憶システムのキャッシュメモリに適用
することを検討した。その結果、以下のことを見いだし
た。
【0006】ディスク記憶システムにおいて、入力され
たデータを圧縮してキャッシュメモリに格納すると、非
圧縮データの倍以上のデータがキャッシュメモリに格納
可能となる。これは、キャッシュメモリの容量を倍以上
に増やした場合と実効的に等価である。コスト的な観点
から見た場合でも、従来の半分の容量で従来と同様なキ
ャッシュメモリの効果が得られ、高価なメモリの使用量
を削減できる。
【0007】しかしながら、圧縮技術をキャッシュメモ
リに適用するには、圧縮データをキャッシュメモリにど
のように記憶し、記憶された圧縮データをどのように検
索するかが問題である。
【0008】従来のディスク記憶システムにおいては、
各トラックにはホストから供給された複数のデータ(レ
コード)が記憶される。各レコードは、制御データと書
き込みデータとを有し、制御データは、レコード番号お
よびレコード長を含む。あるトラックに最初のレコード
L1を記憶した後に次のレコードを記憶するときには、
レコードL1を読み出し、その中の制御コードに含まれ
たレコード長から、次のレコードL2の先頭を書き込む
位置を決定する。後続のレコードL3,L4等を書き込
む場合にも同じ処理を先行するレコードL1,L2,L
3等に対して繰り返す。このことは、複数のレコードが
記憶された後に、いずれかのレコードを読み出すとき
に、そのレコードの先頭位置を判定するのにも使用され
る。
【0009】ディスク記憶システム内のキャッシュメモ
リに複数のレコードを圧縮しないで保持させる場合に
も、同様の方法で、目的のレコードに属するデータを読
み出すことができると期待できる。
【0010】しかし、上記レコードの記憶位置の判定方
法は、各レコードを圧縮してキャッシュメモリに記憶す
るときにそのままでは使用できない。たとえば、レコー
ドL1を圧縮してキャッシュメモリに記憶した後に、レ
コードL2の先頭のデータを書き込む位置を判別するこ
とは、上記の方法を少し修正するだけで実現できる。す
なわち、圧縮後のレコードL1をキャッシュメモリから
読み出し、伸張する。伸張後のレコードL1の制御デー
タによりレコードL2の先頭のデータの書き込み位置を
決定できる。しかし、その後レコードL2を圧縮してキ
ャッシュメモリに記憶した後で、レコードL3を記憶す
る場合、レコードL3の先頭データを記憶すべき記憶位
置を上記の方法のみでは決定できない。すなわち、圧縮
されたレコードL1,L2をそれぞれ記憶した後では、
レコードL1内の制御データを読み出そうとするには、
圧縮後のレコードL1の長さが分からないと、レコード
L1として読み出すべきデータを判別できない。このこ
とはレコードL2についても同じである。したがって、
圧縮後の各レコードをキャッシュメモリに記憶するとき
には、圧縮後の各レコードの長さを記憶しておくかある
いはそれに代わる情報が必要である。
【0011】しかし、圧縮後のレコードの長さをキャッ
シュディレクトリ等に記憶するという方法も、問題があ
ることが判明した。実際にはホストから供給される書き
込みデータは複数のレコードを含む場合もある。このよ
うな書き込みデータを圧縮しても、その書き込みデータ
に含まれた個々のレコードの圧縮後の長さを知ることが
できない。
【0012】このような書き込みデータに含まれた個々
のレコードの圧縮後の長さを検出するには、たとえば次
のような処理が必要である。この書き込みデータを圧縮
する前に、その書き込みデータに含まれた個々のレコー
ドに対する制御データを切り出し、それぞれの制御デー
タの中のレコード長を切り出す。上記書き込みデータを
切り出された個々のレコードの長さに応じて複数のデー
タに分離し、それぞれのデータを区別して圧縮する。
【0013】しかし、このような方法は、ホストから供
給された書き込みデータの内容を判別することを必要と
する。実際には、ホストから供給された書き込みデータ
の内容を判別するための時間により、書き込みデータを
キャッシュメモリに連続して書き込むことができなくな
る。実用的な観点からは、ホストから連続して供給され
る書き込みデータを連続してキャッシュメモリに書き込
めることが望ましい。従って、上に考えた方法はディス
ク記憶システムのキャッシュメモリに適用するには実用
的でない。
【0014】従って、複数のレコードを含む可能性があ
る書き込みデータを圧縮してキャッシュメモリに記憶す
るという方法により、同じトラックに書き込まれるべき
複数のレコードをキャッシュメモリに書き込んだ場合、
後続のレコードを書き込むキャッシュメモリに書き込む
には、すでにキャッシュメモリに書き込まれた、同じト
ラックに書き込まれるべきデータの全体をキャッシュメ
モリから読み出し、伸張する必要がある。しかし、この
ような多量のデータを伸張するのは時間が掛かる。この
ことは、同じトラックに記憶されるべき複数のレコード
をキャッシュメモリに記憶した後に、いずれかのレコー
ドを読み出す場合にも同じである。
【0015】このように、あるトラックに書き込まれる
べきデータを圧縮してキャッシュメモリに記憶するに
は、すでに記憶された同じトラックに属すべきデータの
全体を伸張する必要があり、この伸張処理に時間が掛か
るという第1の問題が生じる。
【0016】さらに、そのレコードがその後更新された
ときに、更新後の圧縮レコードの長さが更新前の圧縮レ
コードの長さとは異なる。圧縮レコードの長さは、レコ
ードの内容により異なるからである。したがって、更新
前の圧縮レコードの記憶領域に更新後の圧縮レコードを
記憶することができなくなるケースがあるという第2の
問題が生じる。この場合、その更新後の圧縮データを記
憶する領域を変更するかあるいは更新前の圧縮データの
記憶領域の前後の記憶領域に記憶された他の圧縮データ
を移動することが必要になる。更新後の圧縮データを記
憶する領域を変更した場合には、更新前の圧縮データを
記憶した領域が空き状態になり、上記他の圧縮データを
移動した場合には、データ移動という余分な処理が必要
になる。
【0017】したがって、本発明の目的は、圧縮された
複数のレコードをキャッシュメモリに記憶することがで
き、同じトラックに属する圧縮された複数のレコードの
任意の一つをそのキャッシュメモリから簡単な処理によ
り読み出すことができるディスク記憶システムを提供す
ることである。
【0018】本発明の他の目的は、キャッシュメモリに
記憶された任意の圧縮されたレコードを更新したときに
生じる圧縮後のレコードの容量の変化に簡単に対応でき
るキャッシュメモリを有するディスク記憶システムを提
供することである。
【0019】
【課題を解決するための手段】上記目的を達成するため
に、本発明によるディスク記憶システム内の、キャッシ
ュメモリに対するコントロール回路は、上記ディスクド
ライブに記憶されるべき上位装置が供給した書き込みデ
ータを、上記上位装置が指定した論理的なディスクアド
レスに従って複数のデータブロックに区分して圧縮し、
上記圧縮後の複数のデータブロックを上記キャッシュメ
モリ内の一群のキャッシュブロックに、各キャッシュブ
ロックが一つのデータブロックに属するデータを記憶
し、異なるデータブロックに属するデータを記憶しない
ように記憶する。
【0020】ここで、上記上位装置が指定した論理的な
ディスクアドレスが指定する論理的なトラックは、互い
に同じ容量を有する複数のトラックブロックに区分さ
れ、上記複数のデータブロックの各々が上記複数のトラ
ックブロックの同じ一つに属する論理的なディスクアド
レスを有するデータのみからなるように、上記複数のデ
ータブロックが定められる。
【0021】上記コントロール回路は、上記区分された
複数のデータブロックの一つを上記キャッシュメモリか
ら読み出すときに、上記一群のキャッシュブロック内
の、上記読み出すべき一つのデータブロックに対する一
つの圧縮後のデータブロックを記憶した少なくとも一つ
のキャッシュブロックを判別し、その少なくとも一つの
キャッシュブロックに記憶されたデータを読み出し、上
記読み出されたデータを伸長する。
【0022】ここで、上記一群のキャッシュブロック
は、それぞれ第1の容量を有し、上記複数のトラックブ
ロックの各々の上記容量は、上記第1の容量より大きな
第2の容量となるように予め定められている。
【0023】より具体的には、上記コントロール回路
は、上記圧縮後の複数のデータブロックが上記キャッシ
ュメモリ内の一群のキャッシュブロックに記憶されたと
きに、上記一群のキャッシュブロックの各々を、そこに
記憶された圧縮後のデータブロックに属する少なくとも
一部のデータの論理的なディスクアドレスに基づいて検
索するための情報を、上記キャッシュメモリに対する検
索情報の一部として記憶し、上記読み出すべき一つのデ
ータブロックに対する上記一つの圧縮後のデータブロッ
クを記憶した上記少なくとも一つのキャッシュブロック
の上記判別を、上記記憶された検索情報と、上記読み出
すべき少なくとも一つのデータブロックの上記論理的な
ディスクアドレスとに基づいて行う。
【0024】このコントロール回路によれば、書き込み
データに含まれたレコード内の一部のデータを含むデー
タブロックは、一つもしくは複数のキャッシュブロック
に記憶される。上記一部のデータを読み出すときには、
それらの複数のキャッシュブロックは、上記データブロ
ックに対応する一つのトラックブロックの論理的なディ
スクアドレスにより判別することができ、そのデータブ
ロックをキャッシュメモリから容易に読み出すことがで
きる。
【0025】たとえば、あるトラックに最初のレコード
L1を記憶する処理は、論理的なディスクアドレスを使
用して次のように行うことができる。そのレコードL1
は、論理的なディスクアドレスが指定するトラック内ア
ドレスの先頭値から始まり、レコード長で決まるレコー
ド末尾に対するトラック内アドレスまでの範囲のアドレ
スを有する。このアドレス範囲によりレコードL1を複
数のデータブロックに区分され、各データブロックが圧
縮されて一つ又は複数のキャッシュブロックに記憶され
る。したがって、そのレコードの先頭に位置する制御デ
ータを含むデータブロックはトラック内アドレスの先頭
値を有する。したがって、レコードL1のこの制御デー
タを含む圧縮後のデータブロックを記憶したキャッシュ
ブロックは簡単に判別できる。
【0026】レコードL2をキャッシュメモリに記憶す
るときには、上記制御データを含む圧縮後のデータブロ
ックを読み出し、伸張する。その伸張されたデータブロ
ックから制御データを切り出し、その中のデータ長か
ら、レコードL2の先頭のデータのトラック内アドレス
を決定できる。したがって、レコードL2に属するデー
タが有するトラック内アドレスが分布する範囲が決定さ
れ、そのアドレスの範囲に基づいて、レコードL2が複
数のデータブロックに分割され、各データブロックが圧
縮されて一つ又は複数のキャッシュブロックに記憶され
る。レコードL2をその後読み出すときあるいは高速の
レコードL3を記憶しあるいは読み出すときも同様に行
うことができる。以上のごとく、あるレコードの制御デ
ータをキャッシュメモリから読み出すには、圧縮され
た、その制御データを含む一つのデータブロックを読み
出し、伸張すればよい。
【0027】
【発明の実施の形態】以下、本発明に係る圧縮データの
記憶方法を適用したディスク記憶システムを図面に示し
たいくつかの実施例を参照してさらに詳細に説明する。
なお、以下においては、同じ参照番号は同じものもしく
は類似のものを表わすものとする。また、第2の実施例
以降においては、第1の実施例との相違点を主に説明す
るに止める。
【0028】<発明の実施例1>図5において、ディス
クアレイシステム8は、複数のホスト1の一つとそれぞ
れ接続している複数のホストインタフェース2、共有メ
モリ3、キャッシュメモリ4、複数のディスクドライブ
6に接続された複数のディスクインタフェース5および
これらの装置を接続する共通バス7により構成されてい
る。複数のホストインタフェース2の各々の接続先のホ
スト1が同一であってもよい。
【0029】共有メモリ3とキャッシュメモリ4は、複
数のホストインタフェース2と複数のディスクインタフ
ェース5が参照可能な共有資源である。すなわち、キャ
ッシュメモリ4には、ホスト1からディスクアレイシス
テム8へ供給されたデータとディスクドライブ6から読
み出され、ホスト1に出力されたデータが一時的に保存
される。共有メモリ3とキャッシュメモリ4は、実際に
は物理的に同じメモリ上に構成されるが、図では、これ
らのメモリ4は区別して図示されている。
【0030】入出力データは、キャッシュメモリ4に格
納され、キャッシュメモリ4内のデータの管理に使用す
るキャッシュディレクトリ等の制御情報は共有メモリ3
に格納される。複数のホストインタフェース2と複数の
ディスクインタフェース5が能動的にこれらの共有資源
をアクセスし、共有資源とのデータのやりとりを行う。
なお、本発明は、ディスク記憶システム全体として共通
のCPUを持ち、そのCPUによって複数のホストイン
タフェース2と複数のディスクインタフェース5の各々
と共有資源との間のデータのやりとりを制御するディス
ク記憶システムにも適用可能である。
【0031】各ディスクインタフェース5は、ディスク
ドライブ5とキャッシュメモリ4との間でデータを転送
するためのSCSIインタフェース回路からなる。図6
に示すように、ホストインタフェース2は、プロトコル
コントローラ28、ホストインタフェースコントローラ
29、圧縮/伸張回路30、バスアダプタ31により構
成されている。
【0032】プロトコルコントローラ28は、ホスト1
から共通規格のプロトコルでもって送られてくる、ディ
スク入出力コマンドとディスクドライブ6に書き込まれ
るべきデータを、それぞれホストインタフェースコント
ローラ29および圧縮/伸張回路30へ送出する。さら
に、プロトコルコントローラ28は、ホスト1からの入
出力コマンドにより読み出しを要求されたデータをホス
ト1に転送するための、応答コマンドに含まれるべきコ
マンド部分とデータ部分を、それぞれホストインタフェ
ースコントローラ29と圧縮/伸張回路30から受け取
り、共通規格のプロトコルでもってホスト1に送る。
【0033】バスアダプタ31は、ホストインタフェー
スコントローラ29および圧縮/伸張回路30と、共通
バス7との間のプロトコル変換、およびホストインタフ
ェースコントローラ29から指定されたキャッシュメモ
リ4内の領域とホストインタフェース2との間での実際
のデータ転送を行う。
【0034】ホストインタフェースコントローラ29
は、内部にCPUとメモリを含み、そのメモリに記憶さ
れたプログラムに従って、以下の制御を行う。すなわ
ち、ホスト1からの入出力コマンドのコマンド部分を解
析し、このコマンド内容で指定されるディスクアドレス
情報に従って、バスアダプタ31を通して共有メモリ3
からキャッシュディレクトリを参照し、そのコマンドが
要求するデータのキャッシュヒット/ミス判定を行う。
さらに、このコマンドの内容に応じてデータ圧縮/伸張
回路30の起動および動作を制御し、さらに、キャッシ
ュメモリ4とホスト1間のデータの流れおよびキャッシ
ュメモリ4とディスクドライブ6との間のデータの流れ
を制御する。従って、本実施例では、ホストインタフェ
ースコントローラ29,圧縮/伸張回路30、共有メモ
リ3が、キャッシュメモリ4に対するデータの読み書き
を実現することになる。
【0035】より具体的には、デスクアレイシステム8
へホスト1からデータが書き込まれる処理では、ホスト
インタフェースコントローラ29は、ホスト1から与え
られた入出力コマンドに含まれたディスクアドレスに基
づいて、共有メモリ3内のキャッシュディレクトリを参
照し、キャッシュメモリ4のヒットミスを判定する。キ
ャッシュヒットならば、ホストインタフェースコントロ
ーラ29は、キャッシュメモリ4上のデータを圧縮/伸
張回路30により与えられる新たな書き込みデータによ
り更新する。キャッシュミスならば、プロトコルコント
ローラ28は、キャッシュメモリ4内にすでに格納済み
のデータを、圧縮/伸張回路30により与えられる新た
な書き込みデータにより置換する。置換されたデータ
は、ディスクインタフェース回路5によりディスクドラ
イブ6に書き込まれる。本実施例では、ホスト1から送
られたデータを圧縮したデータがキャッシュメモリ4に
記憶され、ディスクドライブ6には圧縮前のデータが記
憶される。
【0036】デスクアレイシステムからホスト1へデー
タが読み出される処理では、最初に、ホストインタフェ
ースコントローラ29が、ホスト1より与えられた入出
力コマンドにより指定されるディスクアドレスに対して
キャッシュメモリ4のヒット/ミスを判定する。キャッ
シュヒットならば、このディスクアドレスのデータをキ
ャッシュメモリ4から読み出し、圧縮/伸張回路30に
より、このデータを伸張し、プロトコルコントローラ2
8を介してホスト1に送る。キャッシュミスならば、こ
のディスクアドレスのデータをディスクドライブ6から
読み出し、プロトコルコントローラ28を介してホスト
1に送るとともに、圧縮/伸張回路30により、このデ
ータを圧縮し、キャッシュメモリ4に格納する。
【0037】以下、本実施例での装置の動作の詳細を説
明する。ホスト1を制御するオペレーティングシステム
(OS)はIBM社により開発されたMVSであると仮
定する。このOSが発行するコマンドは、OSが想定し
ている論理的なディスク記憶システムに対するコマンド
として扱われる。このコマンドが指定するディスクアド
レスはその論理的なディスク記憶システムに対するもの
である。ディスクアレイシステム8は、OSが想定する
論理的なディスク記憶システムをエミュレートする。
【0038】ディスクアレイシステムがこのエミュレー
トを行うためには、いくつかのRAIDレベルが使用で
きることが知られているが、本実施例ではRAID5を
使用する。より具体的には、ディスクアレイシステム8
は、論理的なディスク記憶システム内の各論理的なドラ
イブの各トラックに対応して一つのディスクドライブ6
内の一つのトラックを割り当てる。各ディスクドライブ
6内の各トラックの容量は、一般的には、論理的なトラ
ックの容量と等しいかあるいはそれより大きくなるよう
に定められる。本実施例では、簡単化のためにそれらの
2種類のトラックの容量は等しいと仮定する。すなわ
ち、OSが前提とする一つのトラックは、ディスクアレ
イシステム8による実際のディスクドライブ6への書き
込みにおいても、一つのディスクドライブ上の一つのト
ラックに対応している。したがって、以下では、一つの
論理的なトラックとそれに対応して定められた物理的な
トラックを区別しないこともある。
【0039】上記OSが発行するコマンドは一つの論理
的なドライブの一つの論理的なトラックに属する一つま
たは複数のレコードの書き込みを要求する。ディスクア
レイシステム8は、その書き込みコマンドが指定するデ
ィスクアドレスを有するトラックに対して割り当てられ
た物理的なトラックに対してそのコマンドを実行する。
このために、ディスクアレイシステム8は、OSが発行
した書き込みコマンドあるいは読み出しコマンドが指定
する論理的なディスクアドレスを対応する物理的な一つ
のトラックに対する物理的なディスクアドレスに変換す
る。しかし、ディスクアレイシステム8は、キャッシュ
メモリ4をアクセスするときには、OSが発行した書き
込みコマンドあるいは読み出しコマンドが指定する論理
的なディスクアドレスをそのまま使用する。
【0040】ディスクアレイシステム8の動作は、論理
的には二つの部分に分かれる。一つは、ホストインタフ
ェースコントローラ29による、ホスト1とキャッシュ
メモリ4との間でのデータの交換である。他は、ディス
クインタフェース5による、キャッシュメモリ4とディ
スクドライブ6との間でのデータ交換である。
【0041】ディスクアレイシステム8においては、ホ
スト1とディスクドライブ6との間で交換される全ての
データは、キャッシュメモリ4を経由される。ホスト1
が供給する書き込みデータは後に説明する方法で圧縮さ
れてキャッシュメモリ4に記憶される。ディスクインタ
フェース5による、キャッシュメモリ4とディスクドラ
イブ6との間でのデータ交換においては、ディスクアレ
イシステム8が採用するRAIDレベルに従って、ホス
トから供給されキャッシュメモリ4に格納されたデータ
がいずれかのディスクドライブ6のいずれかのトラック
に書き込む。
【0042】本実施例では、ホスト1から転送されてく
るデータを圧縮してキャッシュメモリ4に格納するモー
ドがホスト1からあらかじめ指定されている場合または
事前にディスクアレイシステム8内にそのモードが設定
されている場合には、このホストインタフェースコント
ローラ29が、圧縮/伸張回路30を制御することによ
って、ホスト1からディスクアレイシステム8へ転送さ
れてくる書き込みデータを圧縮してキャッシュメモリ4
に格納する。このときに、この書き込みデータを複数の
データブロックに区分し、各データブロックを圧縮す
る。書き込みデータを区分する位置は、OSが想定して
いる論理的なトラック内に定められた複数のトラックブ
ロックにより定める。一つのトラックブロックは、2つ
のキャッシュブロック長に等しいデータ量を記憶可能で
ある。したがって、各データブロックの大きさは2キャ
ッシュブロック長かもしくはそれより小さくなる。圧縮
後のデータが1キャッシュブロック長より大きいとき、
圧縮されたデータの内のキャッシュブロック長の部分を
第1のキャッシュブロックに記憶し、キャッシュブロッ
ク長より大きい部分(あふれデータ)を第1のキャッシ
ュブロックとは非連続な第2のキャッシュブロックに格
納する。このとき、バスアダプタは31は、圧縮された
データの内のキャッシュブロック長の部分とあふれデー
タを第1,第2のキャッシュブロックに連続して転送可
能に構成されている。
【0043】ここでは、ホストインタフェース2中に圧
縮/伸張回路30が設けられているが、この回路は、キ
ャッシュメモリ4、共通バス7に接続されたその他のコ
ンポーネント等に設けられてもよい。また、圧縮/伸張
回路30はすでに公知の圧縮/伸張アルゴリズムの一つ
に従って動作するが、他のアルゴリズムも適用可能であ
る。なお、データの圧縮・伸張処理は、ホスト1と圧縮
/伸張回路30とのデータの転送処理もしくは、圧縮/
伸張回路30とキャッシュメモリ4とのデータ転送処理
とに対してパイプライン的に同時に実行されるので、ホ
スト1がディスクドライブ6をアクセスする時間にはほ
とんど影響を与えない。
【0044】上記OSは、同じトラックには、レコード
番号の順に順次複数のレコードを書き込むように、それ
ぞれのレコードに対するSEARCHコマンドおよびW
RITEコマンドを供給する。一つのトラックには、第
1のレコードはそのトラックの先頭位置から書き込ま
れ、第2のレコードは、第1のレコードが記憶領域の後
続の記憶領域に書き込まれる。後続のレコードに関して
も同じである。各トラックには、可変長の複数のレコー
ドを書き込み可能である。
【0045】SEARCHコマンドは、ディスク記憶シ
ステムに対して、読みとりヘッドの位置づけを要求す
る。このコマンドは、アクセスすべきレコードに対する
ディスクアドレスを指定する。アドレスはCCHHRと
呼ばれるディスクアドレスであり、CCはシリンダアド
レスを指す2バイトのデータであり、HHは、ヘッドア
ドレスを指す2バイトのデータであり、Rはレコード番
号を指す1バイトのデータである。その後、OSは、W
RITEコマンドを発行するとともに、書き込むべきレ
コードをディスクアレイシステム8に供給する。このコ
マンドも、上記アドレスCCHHRとレコード長とを指
定する。OSが供給するレコードには、書き込むべきデ
ータ部分とその前に位置する制御データとを含む。制御
データはレコード長、レコード番号等を含む。
【0046】OSが、既に書き込まれたレコードを読み
出すときには、OSは、そのレコードを指定するSEA
RCHコマンドとともに、そのレコードを指定するRE
ADコマンドを発行する。このREADコマンドは、上
記ディスクアドレスを指定するがレコード長は指定しな
い。
【0047】共有メモリ3には、キャッシュディレクト
リと呼ばれる、キャッシュメモリ4上のデータの管理情
報が格納される。ホストインタフェース2とディスクイ
ンタフェース5は、このキャッシュディレクトリの情報
を参照することにより、読み書きの対象としているデー
タが、キャッシュメモリ4上にない(キャッシュミス)
かあるいはキャッシュメモリ4上にあるか(キャッシュ
ヒット)の判断、およびキャッシュヒットの場合はその
データのキャッシュメモリ4上の記憶位置(以下、この
位置をキャッシュメモリアドレスと呼ぶことがある)を
取得できる。
【0048】図2において、キャッシュディレクトリ3
0は、ドライブテーブル9と、論理的なディスクドライ
ブの数に等しい数のキャッシュスロットコントロールブ
ロック(SLCB)10と、キャッシュセグメントコン
トロールブロック(SGCB)11とよりなる。ドライ
ブテーブル9は、ホスト1のOSが想定している論理的
なディスク記憶システムに含まれる論理的なディスクド
ライブを表現している。すなわち、ドライブテーブル9
の一つのエントリが一つの論理的なディスクドライブに
対応する。ドライブテーブル9の各エントリは、そのエ
ントリに対応する論理的なディスクドライブに対応して
設けられたキャッシュスロットコントロールブロック1
0の先頭を示すポインタを保持している。
【0049】キャッシュスロットコントロールブロック
10の各エントリ(以下、SLCBブロックと呼ぶこと
がある)は、対応する論理的なディスクドライブの一つ
の論理的なトラックに対応している。各SLCBエント
リは、キャッシュセグメントコントロールブロック11
内の一つのエントリ(以下、SGCBエントリと呼ぶこ
とがある)を示すポインタを持つ。各SGCBエントリ
は、キャッシュメモリ4内の、後に説明する一つのキャ
ッシュセグメントを管理する情報を有する。ドライブテ
ーブル9と各キャッシュスロットコントロールブロック
10は、システム初期化時に生成され、ドライブテーブ
ル9の各エントリに対応するキャッシュスロットコント
ロールブロック10へのポインタも同時に生成される。
【0050】キャッシュメモリ4内の記憶領域は、キャ
ッシュセグメントと呼ばれる、一定長、たとえば16K
バイトの長さの領域に論理的に区切られている。本実施
例では、各論理的なトラックも物理的なトラックも、6
4Kバイトの容量を有すると仮定する。したがって、各
論理的なトラックの全データは、4つのキャッシュセグ
メントにより保持可能である。このように、一般には、
キャッシュセグメントの容量は、論理駅なトラックの容
量の整数分の1に等しくするのが望ましい。図1に示す
ように、各キャッシュセグメント13は、一定の大きさ
の複数のキャッシュブロック22と呼ばれる複数の領域
に区分されている。たとえば、各キャッシュブロック2
2の容量を2Kバイトとすると、各キャッシュセグメン
ト13は8個のキャッシュブロック22よりなる。一般
には、一つのキャッシュセグメント内のキャッシュブロ
ックの総数は、キャッシュセグメントの容量と一時に圧
縮されるデータの長さとの比の整数倍であることが望ま
しい。本実施例では、二つのキャッシュブロックの容量
を単位としてデータを圧縮するので、一つのキャッシュ
セグメント内のキャッシュブロックの総数は、偶数個で
あることが望ましい。キャッシュメモリ4内の全てのキ
ャッシュセグメント13の状態を管理するのが、キャッ
シュセグメントコントロールブロック11である。SG
CBエントリの数は、キャッシュメモリ4内のキャッシ
ュセグメント13の総数に等しい。例えば、キャッシュ
メモリ4が16Mバイトの大きさを有する場合、キャッ
シュセグメント13の総数は1024であり、したがっ
て、1024個のエントリを持つキャッシュセグメント
コントロールブロック11を用いる。各キャッシュセグ
メントは、いずれか一つのSGCBエントリに対応させ
ることができる。後に説明するように、同一の論理的な
ディスクドライブ上の同一の論理的なトラックに属する
データを保持する複数のキャッシュセグメント13に対
応する複数のSGCBエントリは、互いにポインタでリ
ンクされる。これは、同一の論理的なトラックへのデー
タの連続書き込み時に、そのデータを書き込むべき複数
のキャッシュセグメントを高速にアクセスするためであ
る。
【0051】システム初期化時には、実装されているキ
ャッシュメモリ4の容量に対応する数のエントリを有す
るように、キャッシュセグメントコントロールブロック
11のエントリ数が決められる。さらに、これらのエン
トリは全て未使用キューポインタ12に連結され、未使
用キューを構成する。これらのエントリは、相互にポイ
ンタでリンクされる。未使用キューポインタ12は、こ
れらのリンクされた複数の未使用エントリの先頭のエン
トリおよび末尾のエントリをそれぞれ指す先頭ポインタ
12A、末尾ポインタ12Bを有する。各SGCBエン
トリには、キャッシュメモリ4内の一つのキャッシュセ
グメントをポイントするために、その対応するキャッシ
ュセグメントの先頭アドレスが書き込まれる。こうして
決められた各SGCBエントリと一つのキャッシュセグ
メントとの連結はその後も変わらない。キャッシュスロ
ットコントロールブロック10の各エントリにはヌル値
(無効値)が設定される。これは、キャッシュメモリ4
のいずれのキャッシュセグメントにも有効なデータが無
いことを表している。
【0052】図3に示すように、一つのSGCBエント
リ14は、対応するキャッシュセグメントの先頭アドレ
ス15と、そのキャッシュセグメントのトラック内の位
置16、そのキャッシュセグメントに書き込まれたデー
タのダーティー/クリーンに関するビットマップ17、
同じ論理的なトラックに属するデータを保持する他のキ
ャッシュセグメントに対応して設けられた他のSGCB
エントリにこのSGCBエントリを連結するための前方
ポインタ18と後方ポインタ19およびブロック内利用
サイズリスト32を持っている。
【0053】図1において、20は、一つの論理的なデ
ィスクドライブ内の一つの論理的なトラック内の記憶領
域を示す。本実施例では、キャッシュメモリに書き込ま
れるデータに付されるアドレスは、この論理的なトラッ
ク内の記憶領域のアドレスであり、OSが指定した論理
的なディスクアドレスにより指定される。このアドレス
は、本実施例ではその論理的なトラックに対応する物理
的なトラック内の対応する記憶領域のアドレスを表す。
論理的なトラック20は複数の一定の容量の領域S1,
S2,S3,,,に区分される。これらの領域をトラッ
クセグメントと呼ぶ。図1内の縦の2重線は、トラック
セグメントS1,S2,S3,,,の境界を示す。本実
施例ではトラックセグメントの容量が、キャッシュセグ
メントの容量(ここでは16Kバイト)に等しくなるよ
うに選ばれる。すでに述べたように、本実施例では一つ
の論理的なトラックおよび物理的なトラックは、キャッ
シュセグメントの4倍の容量を有すると仮定されてい
る。したがって、論理的なトラック20は、4つのトラ
ックセグメントS1,S2,S3,,,に区分可能であ
る。複数のトラックセグメントは、トラックの先頭位置
より順に番号が付けられる。上記トラック内の位置16
は、SGCBエントリ14に対応するキャッシュセグメ
ントに保持されたデータが属するトラックセグメントの
番号を表す。本実施例では、連続する二つのトラックセ
グメントに属するデータが、一つのキャッシュセグメン
トに保持可能である。トラック内位置16は、対応する
キャッシュセグメントに保持可能な二つのトラックセグ
メントの番号の内の若い方の番号で表わされる。
【0054】各トラックセグメントは、一定の容量の複
数の部分領域21A,21B,,,21Hにさらに区分
される。本実施例では、各部分領域の容量は、キャッシ
ュブロックの2倍になるように選ばれる。したがって、
本実施例では各トラックセグメントは4個の部分領域に
区分可能である。これらの部分領域をトラックブロック
あるいはブロックと呼ぶ。あるいはそれぞれのトラック
ブロック、例えば21Aに属するトラック内アドレスを
有する一群のデータをデータブロックあるいはデータブ
ロック21Aあるいは単にブロック等と呼ぶこともあ
る。図1において、縦の実線はトラックブロックの境界
を示す。
【0055】縦の点線は、トラックブロックの半分の領
域の境界を示す。これらのトラックブロックの半分の領
域の容量は、そこに属するキャッシュブロックの容量に
等しくなる。本実施例では、一つのキャッシュセグメン
トは、二つのトラックセグメントに含まれる8個のトラ
ックブロックに属するデータを圧縮した後のデータを保
持可能である。ビットマップ17は、エントリ14に対
応するキャッシュセグメント内の8個のキャッシュブロ
ックに対応する8ビットを有するビットマップである。
各ビットは、対応するキャッシュブロックに保持される
データに関するダーティー/クリーン情報、すなわちそ
のキャッシュブロック内のデータがホスト1により更新
されたか否かに関する情報を表す。
【0056】図4に示すように、ブロック内利用サイズ
リスト32の各エントリは、そのリストが含まれたSG
CBエントリ14が対応する一つのキャッシュセグメン
ト内の一つのキャッシュブロックに対応する。各エント
リ内のフィールド34には、対応するキャッシュブロッ
クに記憶された有効なデータの長さを表す利用バイト数
かもしくは、後述するあふれデータを格納したキャッシ
ュセグメントを管理する他のSGCBエントリへのポイ
ンタを格納する。両者の区別は、タグフィールド33の
値により行う。
【0057】図1には、論理的なトラック20に記憶さ
れる複数のレコードL1,L2,L3,,,の記憶領域
の例が示されている。それぞれの記憶領域は、それぞれ
のレコードが圧縮されないでその論理的なトラックに記
憶されたときのそれぞれのレコードの記憶領域を示す。
レコードL1は、第1のトラックセグメントS1の先頭
から第2のトラックセグメントS2の途中までに位置
し、レコード2は、トラックセグメントS2の途中に位
置し、レコードL3は、トラックセグメントS2の途中
から後続のトラックセグメントS3に位置する。
【0058】ホスト1から供給されたレコードL1をキ
ャッシュメモリ4に新たに書き込む場合、圧縮後のレコ
ードL1を保持するための複数対のキャッシュセグメン
トを確保する。各キャッシュセグメント対の内の一方
は、圧縮されたレコードの内の、所定の容量以下の部分
を保持するのに使用され、以下では主キャッシュセグメ
ントと呼ぶ。他方は、各セグメント対の他方は、圧縮さ
れたレコードの内、主キャッシュセグメントに格納でき
なかったデータ(あふれデータ)を格納するのに使用さ
れ、以下では従キャッシュセグメントと呼ぶ。図1で
は、13A、13Bがそれぞれ主キャッシュセグメン
ト、従キャッシュセグメントの例である。確保するセグ
メント対の数は、書き込むレコードの長さとそのレコー
ドが圧縮されないでトラックに書き込まれるとしたとき
のトラック内位置に依存する。レコードL1は、先頭の
レコードであり、トラックセグメントS1、S2内に位
置する。したがって、このレコードに対しては一対のキ
ャッシュセグメント、例えば13A、13Bを確保すれ
ばよい。
【0059】各対のキャッシュセグメントの確保は以下
のようにして行われる。キャッシュメモリ4内に未使用
の二つのキャッシュセグメントがあるときには、それぞ
れの未使用のキャッシュセグメントを使用する。すなわ
ち、未使用キューポインタ12に基づいて、キャッシュ
セグメントコントロールブロック11内の、未使用の二
つのエントリを取り出し、これらのエントリによりポイ
ントされた二つのキャッシュセグメントが圧縮された後
のレコードL1の書き込みに使用される。キャッシュメ
モリ4内には未使用の一つのキャッシュセグメントしか
ないときあるいは未使用のキャッシュセグメントが一つ
もないとき、後述するキャッシュセグメントの置換によ
り、すでに使用中の一つまたは二つのキャッシュセグメ
ントをレコードL1の書き込み用に確保する。すなわ
ち、置換により一つの使用中のキャッシュセグメントを
ポイントするSGCBエントリを、レコードL1を書き
込むためのキャッシュセグメントを管理するエントリと
して使用する。
【0060】以上の方法により、レコードL1を書き込
むための二つのキャッシュセグメントを管理する二つの
SGCBエントリが確保される。以下では主キャッシュ
セグメント、従キャッシュセグメントをそれぞれポイン
トするSGCBエントリを主SGCBエントリ、従SG
CBエントリと呼ぶ。レコードL1を書き込もうとして
いる論理的なドライブの番号に対応するキャッシュスロ
ットコントロールブロック10内の、その論理的なドラ
イブ内のレコードL1を書き込もうとしている論理的な
トラックに対応するエントリに、上記確保された主SG
CBエントリのアドレスが書き込まれる。
【0061】主SGCBエントリと従SGCBエントリ
には以下の情報が書き込まれる。主SGCBエントリ内
のキャッシュセグメントの先頭アドレス15には、対応
する主キャッシュセグメント13Aのアドレスが格納さ
れ、トラック内の位置16には、主キャッシュセグメン
ト13に格納されるべきデータが属するトラックセグメ
ントS1、S2の番号1,2の内の若い方の番号1が格
納される。ビットマップ17内の全ビットの内、レコー
ドL1が属する全てのトラックブロックに対応するビッ
トが全てダーティを表す値1にセットされる。後に説明
するように、今の例では、レコードL1はキャッシュブ
ロック22Aから22Fに書き込まれる。ブロック内利
用サイズリスト32の全エントリのタグフィールド33
には、初期値としてあふれデータの存在を示す値1が書
き込まれ、それぞれのエントリのフィールド34には、
初期値として従SGCBエントリのアドレスが格納され
る。前方ポインタ18と後方ポインタ19は今の場合無
効な値を有するままである。
【0062】従SGCBエントリ内のキャッシュセグメ
ントの先頭アドレス15には、対応する従キャッシュセ
グメント13Bのアドレスが格納され、トラック内の位
置16には、主キャッシュセグメント13Bに格納され
るべきデータが属するトラックセグメントS1、S2の
番号1,2の内の若い方の番号1が格納される。ビット
マップ17内の全ビットが全てクリーンを表す値0にセ
ットされる。ブロック内利用サイズリスト32内の各エ
ントリのタグフィールドには初期値としてあふれデータ
がないことを示す値0が書き込まれ、フィールド34に
は、利用バイト数が0であることを示す情報が書き込ま
れる。前方ポインタ18と後方ポインタ19は無効な値
を有するままである。こうして、レコードL1を書き込
むためのキャッシュセグメントを確保をする処理が終了
する。
【0063】確保された一対のキャッシュセグメント1
3A、13Bには以下のようにして圧縮後のレコードL
1が書き込まれる。圧縮/伸張回路30は、圧縮すべき
レコードL1を各トラックブロックを境界にして圧縮す
る。つまり、そのレコード、例えばL1をそれぞれ同一
のトラックブロックに属するデータブロック21Aから
21Fに分割し、それぞれのデータブロックを圧縮す
る。各データブロックは基本的には4Kバイトを有す
る。但し、最後のデータブロック21Fは4Kバイトよ
り小さいが、そのデータブロックをそのまま圧縮する。
圧縮後のデータブロックの容量は、圧縮アルゴリズムと
圧縮されるデータブロックの内容に依存するが、概して
元データの半分以下の容量に圧縮可能である。すなわ
ち、圧縮率を、圧縮後のデータの容量と圧縮前のデータ
の容量との比でもって定義すると、多くの場合、圧縮率
を50%以下にすることができる。したがって、大部分
の圧縮前のデータブロックに対しては、圧縮後のデータ
は2Kバイト以下となり、一つのキャッシュブロック中
に格納できる。このような圧縮後のデータブロックは、
主キャッシュセグメント内の、圧縮前のデータブロック
に対応するキャッシュブロックに格納される。
【0064】一般に圧縮率は50%以下にできるが、ま
れなケースとして、圧縮前のデータブロックによって
は、圧縮率が50%以上となり圧縮後のデータブロック
を一つのキャッシュブロックに格納しきれないことも生
じる。この場合は、圧縮後のデータブロックの先頭の2
Kバイトの部分(以下、この部分をキャッシュブロック
長部分と呼ぶことがある)を主キャッシュセグメント内
の、圧縮前のデータブロックに対応するキャッシュブロ
ックに格納する。圧縮後のデータブロックの内の2Kバ
イトを超える部分(以下、この部分をあふれデータ部分
と呼ぶことがある)を従キャッシュセグメント13B内
の、圧縮前のデータブロックに対応するキャッシュブロ
ックに格納される。当該キャッシュブロックの空き領域
は後続のデータの格納には使用しない。
【0065】図1の場合、レコードL1の最初のデータ
ブロック21Aに対する圧縮後のデータは2Kバイト以
下であると仮定している。この圧縮後のデータブロック
は、主キャッシュセグメント13Aの先頭のキャッシュ
ブロック22Aに書き込まれる。このとき、このキャッ
シュブロックの余った領域は後続の圧縮されたデータの
格納には使用されない。従キャッシュブロック13Bの
先頭のキャッシュブロック24Aには何も書き込まれな
い。レコードL1の第2のデータブロック21Bに対す
る圧縮後のデータは2Kバイトより大きいと仮定してい
る。この圧縮後のデータブロック21B内のキャッシュ
ブロック長部分は、主キャッシュセグメント13Aの第
2のキャッシュブロック22Bに書き込まれ、この圧縮
後のデータブロック内のあふれデータ部分は、従キャッ
シュセグメント13Bの第2のキャッシュブロック24
Bに書き込まれる。
【0066】このように、あふれデータ部分を、キャッ
シュブロック長部分が書き込まれたキャッシュブロック
に対応するキャッシュブロック24Bに格納することに
より、あふれデータ部分が記憶された、キャッシュセグ
メント13B内のキャッシュブロックの番号をキャッシ
ュセグメントコントロールブロック11に記憶しなくて
済む。したがって、キャッシュセグメントコントロール
ブロック11に必要なメモリ量を削減することができ、
かつあふれデータ部分の格納、読み出し操作が簡単とな
り、キャッシュメモリ4へのアクセスのオーバヘッドを
減らせる。レコードL1の後続のデータブロック21C
から21Fも同様にして順次圧縮され、主キャッシュセ
グメント13Aのキャッシュブロック22Cから22F
および必要に応じて従キャッシュセグメント13B内の
キャッシュブロック24Cから24Fに書き込まれる。
【0067】以上の書き込み動作の間に、主キャッシュ
セグメント13A、従キャッシュセグメント13Bに対
応する主SGCBエントリおよび従SGCBエントリが
次のように更新される。まず、レコードL1に含まれる
いずれかのデータブロックに対する圧縮後のデータがキ
ャッシュブロック長を超えていないときには、主SGC
Bエントリのブロック内利用サイズリスト32内の、上
記データブロックに対応するエントリが更新される。す
なわち、そのエントリのタグフィールド33にあふれデ
ータがないことを示す値0が書き込まれ、フィールド3
4にその圧縮後のデータブロックの容量が書き込まれ
る。レコードL1に含まれるいずれかのデータブロック
に対する圧縮後のデータがキャッシュブロック長を超え
ているときには、主SGCBエントリのブロック内利用
サイズリスト32内の、上記データブロックに対応する
エントリには、そのエントリのフィールド34に、従S
GCBエントリの先頭アドレスが書き込まれる。従SG
CBエントリのブロック内利用サイズリスト32内の、
上記データブロックに対応するエントリのフィールド3
4には、その圧縮後のデータの内のあふれデータの容量
が書き込まれる。従SGCBエントリのビットマップ1
7内の、上記データブロックに対応するビットが、ダー
ティを示す値1に更新される。
【0068】以上により、レコードL1のキャッシュメ
モリ4への書き込みが終了する。もし、レコード1をキ
ャッシュメモリ4に格納した結果、従キャッシュメモリ
13Bが使用されなかったときには、キャッシュセグメ
ントコントロールブロック11内に既に確保された従S
GCBエントリも未使用エントリとして扱われ、そのキ
ャッシュセグメント13Bは、未使用キャッシュセグメ
ントとして扱われる。レコードL1が後続のトラックセ
グメントS3等にも属すべきデータを含むとき、以上と
同様にして、一対または複数対のキャッシュセグメント
がキャッシュメモリ4内に確保される。それらに対応す
る一対または複数対のSGCBエントリを、キャッシュ
セグメントコントロールブロック11内に確保し、レコ
ードL1の内、上記トラックセグメントS3以降に属す
べきデータに対して、既に述べた動作がこれらのSGC
Bエントリおよびこれらのキャッシュセグメントに対し
て繰り返される。
【0069】その後ホスト1よりレコードL1の後続の
レコードL2の書き込みを要求するコマンドがディスク
アレイシステム8に対して発行された場合、このレコー
ドL2は、以下のようにしてキャッシュメモリ4内に書
き込まれる。本実施例では、レコードL2は、トラック
セグメントS2のトラックブロック21Fから21Hに
属するデータであることが容易に判別可能である。この
判別の方法は、後に説明するREADコマンドによるレ
コードL2の読み出しの場合と同じである。したがっ
て、圧縮後のレコードL2は、レコードL1が書き込ま
れた主キャッシュセグメント13A内のキャッシュブロ
ック22Fから22HにレコードL1の場合と同様にし
て書き込まれる。今の例では、レコードL2に対して新
たなキャッシュセグメント対を確保する必要はない。
【0070】なお、キャッシュセグメント22Fにはト
ラックブロック21Fに属するレコードL1のデータブ
ロックがすでに圧縮されて記憶されている。したがっ
て、このデータブロックを圧縮する前に、キャッシュブ
ロック22Fに記憶されたデータが読み出され、圧縮/
伸張回路30により伸張される。伸張後のデータと、ト
ラックブロック21Fに属するレコードL2のデータと
の組が、圧縮/伸張回路30により圧縮され、圧縮後の
データがキャッシュブロック22Fに書き込まれる。こ
のレコードL2の先頭の部分データも、レコード2のた
めの制御データを含むのはレコードL1の場合と同じで
ある。なお、レコード1の書き込みの結果、従キャッシ
ュセグメント13Bが解放済みであるときには、レコー
ドL2の書き込み前に、キャッシュセグメントコントロ
ールブロック11内に従SGCBエントリが再度確保さ
れ、従キャッシュセグメントも確保される。レコードL
2のデータを圧縮した結果あふれデータが発生したとき
には、レコードL1の場合と同様にして、あふれデータ
がこの従キャッシュセグメント内のキャッシュブロック
に書き込まれる。
【0071】さらに後続のレコードL3をキャッシュメ
モリ4に書き込むときには、レコードL3のデータの
内、トラックセグメントS2に属する先頭のデータブロ
ックが圧縮されてキャッシュブロック22Hに書き込ま
れる。このときの書き込みは、レコードL2の先頭のデ
ータブロックの書き込みと同様である。レコードL3の
データの内、トラックセグメントS3に属する後続のデ
ータの書き込みのときには、新たなキャッシュセグメン
ト対が確保され、以上と同様にして書き込まれる。
【0072】新たにキャッシュセグメント対が確保する
ときには、キャッシュセグメントコントロールブロック
11内に新たに一対の主SGCBエントリと従SGCB
エントリが確保されるのはレコードL1の場合と同じで
ある。同じトラックに書き込むべきデータに対して複数
対の主SGCBエントリと従SGCBエントリが確保さ
れた場合には、それぞれの対の主SGCBエントリ内の
前方ポインタ18と後方ポインタ19にそれらの主SG
CBエントリを連結するためのアドレスが書き込まれ
る。こうして、同じトラックに書き込まれるべきデータ
が複数の主キャッシュセグメントに書き込まれた場合、
それらに対応する複数の主SGCBエントリがポインタ
により連結される。同様に、それらの主SGCBエント
リに対応する複数の従SGCBエントリがキャッシュセ
グメントコントロールブロック11内に存在するときに
は、それらの従SGCBエントリもポインタにより連結
される。
【0073】すでにキャッシュメモリ4に書き込まれた
レコードを読み出すREADコマンドをホスト1が発行
し、キャッシュメモリ4がこのコマンドに対してヒット
した場合には、以下のようにして、キャッシュメモリ4
がアクセスされる。
【0074】読み出すべきレコードが記憶されるべき論
理的なドライブと論理的なトラックに対応する、キャッ
シュセグメントコントロールブロック11内の連結され
た主SGCBエントリの先頭の主SGCBエントリが、
ディレクトリ30内のドライブテーブル9,キャッシュ
スロットコントロールブロック10を用いて読み出され
る。この先頭の主SGCBエントリ内のキャッシュセグ
メント先頭アドレス15は、その論理的なトラックに属
すべき、先頭のトラックセグメントS1に属するデータ
を保持する主キャッシュセグメントを指定する。したが
って、上記READコマンドが指定するレコードが、先
頭のレコードL1であるとき、この主キャッシュセグメ
ントの先頭のキャッシュブロックが読み出され、圧縮/
伸張回路30により伸張される。ホストインタフェース
コントローラ29は、その伸張されたキャッシュブロッ
クに含まれた、レコードL1の制御データ中のレコード
長を切り出す。
【0075】本実施例では、ホストインタフェースコン
トローラ29は、このレコード長により、読み出すべき
キャッシュブロックを容易に判断できる。すなわち、主
キャッシュセグメント、例えば13A内の各キャッシュ
ブロックは、一つのトラックブロックに対応している。
したがって、トラック内アドレスが0からレコード長に
等しい値までのアドレス範囲を有する複数のトラックブ
ロックに属する複数のデータブロックを保持する複数の
キャッシュブロックをこの主キャッシュセグメント13
Aから読み出せばよい。レコードL1の場合には、これ
らのトラックブロックは21Aから21Fまでである。
したがって、キャッシュブロック22Aから22Fまで
読み出せばよいことが容易に判別できる。したがって、
この主キャッシュセグメント13A内のキャッシュブロ
ックの内、上記キャッシュブロックだけが順次読み出さ
れる。
【0076】この際、主キャッシュセグメント13A内
のいずれかのキャッシュブロック、例えば22Aに記憶
されたデータが2Kバイトより小さいときには、そのキ
ャッシュブロックから読み出すべきデータの長さは、そ
のキャッシュセグメントに対応する主SGCBエントリ
内のリスト32に保持された利用バイト数34により判
別可能である。また、そのキャッシュセグメント13A
内のいずれかのキャッシュブロック、例えば22Bに記
憶されたデータに対してあふれデータがあるか否かは、
同じリスト32内のタブフィールド33により判別可能
である。もしあふれデータがあるときには、そのキャッ
シュブロック22Bに続いて、対応する従キャッシュセ
グメント13B内の対応するキャッシュブロック24B
が読み出される。
【0077】こうして、主キャッシュセグメント13A
および従キャッシュセグメント13Bから読み出された
複数のキャッシュブロックのデータが順次圧縮/伸張回
路30により伸張され、伸張後のデータがホスト1に転
送される。この伸張動作時には、主キャッシュセグメン
ト13A内のあるキャッシュブロック、例えば22B内
のデータに対しあふれデータを保持したキャッシュブロ
ック24Bが従キャッシュセグメント13Bにあるとき
には、これらの二つのキャッシュブロックのデータは連
結して伸張される。
【0078】なお、読み出すべき最後のキャッシュブロ
ック22F内のデータを伸張した結果得られるデータブ
ロックには、レコード1、2に属するデータが含まれて
いる。レコードL1に属するデータ部分の長さは、先頭
のキャッシュブロック24Bからすでに読み出されたレ
コード長と、キャッシュブロック22Aから22Fから
すでに読み出され伸張されたデータの長さとの差に等し
い。後者の長さはキャッシュブロック22Aから22F
の数と4Kバイトとの積により計算できる。以上から明
らかなように、同じキャッシュセグメント13A内の他
のキャッシュブロック22G、22Hは読み出す必要が
ない。本実施例では、先頭のレコードを読み出すときで
も、必要なデータをキャッシュメモリ4から読み出し、
伸張することができ、READコマンドが要求しない不
必要なデータの読み出しを減らすことができる。
【0079】レコードL2を読み出す場合には、上と同
様にしてまずレコードL1の制御データが読み出され、
この制御データに基づいて、レコードL1の末尾のアド
レスがレコードL1の長さにより決定される。レコード
L1の末尾のアドレスに基づいて、レコードL2の先頭
のアドレスが決定される。今の場合には、このアドレス
は、トラックブロック21Fに属することが分かる。し
たがって、レコードL2の先頭のデータブロックが、キ
ャッシュブロック22Fから読み出され、圧縮/伸張回
路30により伸張される。
【0080】ここで、読み出すべきキャッシュブロック
の判別は、以下のようにして行われる。読み出すべきデ
ータが属するトラックブロック21Fが属するトラック
セグメントS1の番号により、このレコードが属する論
理的なトラックに対する連結された主SGCBエントリ
列をアクセスし、このセグメントの番号をトラック内位
置16内に有する一つの主SGCBエントリを見つけ
る。この主SGCBエントリ内のキャッシュセグメント
先頭アドレス15によりポイントされるキャッシュセグ
メント、例えば13AがトラックセグメントS1に属す
るデータを保持する。したがって、トラックブロック2
1Fは、トラックセグメントS1内の6番目であるの
で、キャッシュセグメント13A内の6番目のキャッシ
ュブロック22Fがアクセスすべきキャッシュブロック
であると判断される。
【0081】こうして読み出されたレコードL2の先頭
の伸張後のデータの内、レコードL2に属するデータが
切り出される。切り出されたデータに含まれた制御デー
タ内の、レコードL2の長さが切り出され、その長さに
基づいて、レコードL2の末尾のアドレスが決定され
る。こうして決定されたレコードL1の先頭アドレスと
末尾アドレスから、レコードL2がトラックブロック2
1Fから21Hに属することが判別される。従って、キ
ャッシュブロック22G、22Hも読み出される。以上
において、キャッシュブロック22Fに対応するあふれ
データがキャッシュブロック24Fにあるときには、キ
ャッシュブロック24Fのデータが読み出され、これら
のキャッシュブロックのデータの組が伸張され、伸張後
のデータに基づいて、レコードL2の先頭のデータブロ
ックが切り出される。
【0082】このように、レコードL2を読み出す場合
に、レコードL1の制御データが含まれるキャッシュブ
ロック21Aを読み出すことにより、レコードL2の先
頭のデータブロックが記憶されているキャッシュブロッ
クの判別(頭出し)を容易に行うことができる。先行す
るレコードL1を全て読み出し、伸張する必要はない。
また、レコードL2の先頭のデータブロックを読み出す
ことにより、レコードL2の末尾に位置するデータブロ
ックが記憶されているキャッシュブロックの判別も容易
に行うことができる。
【0083】すでにキャッシュメモリ4に書き込まれた
レコードを書き換えるデータをホスト1が供給した場合
には、以下のようにして、キャッシュメモリ4に書き込
み済みのレコードが更新される。本実施例では、既に書
き込まれたレコードを書き換える場合には、そのレコー
ドの長さは変わらないものとする。書き換え対象のレコ
ードがレコードL1の時には、すでに述べた方法によ
り、レコードL1が記憶されている主キャッシュセグメ
ント13Aと、その中のキャッシュブロック22Aから
22Fとが検出される。したがって、レコードL1の新
たなデータは、レコードL1の最初の書き込みの場合と
同様に圧縮されて、これらのキャッシュブロックに書き
込まれる。
【0084】もし元のレコードL1に対して従キャッシ
ュセグメント13Bが存在し、圧縮後の新たなレコード
L1に対してあふれデータが発生すれば、すでにあるそ
の従キャッシュセグメント13Bがこのあふれデータの
格納に使用される。もし元のレコードL1に対して従キ
ャッシュセグメント13Bが存在しなくて、圧縮後の新
たなレコードL1に対してあふれデータが発生すれば、
新たなレコードL1のあふれデータに対して新たな従キ
ャッシュセグメントが確保される。逆に、もし元のレコ
ードL1に対して従キャッシュセグメント13Bが存在
し、圧縮後の新たなレコードL1に対してあふれデータ
が発生しなければ、すでにあるその従キャッシュセグメ
ント13Bが不使用状態にされる。
【0085】キャッシュメモリ4には未使用のキャッシ
ュセグメントがないときに、新しいデータをキャッシュ
メモリ4に記憶する必要が生じた場合、ホストインタフ
ェースコントローラ29は、その中のキャッシュ制御プ
ログラムに従って、キャッシュデータの置換を実行す
る。キャッシュメモリ4内のデータの置換は、トラック
単位で行われる。すなわち、置換アルゴリズムにより追
い出しのために選択されるのは、ある論理的なトラック
であり、実際にはそのトラックのデータを保持している
複数のキャッシュセグメントが追い出される。同様に、
トラック中の任意のレコードを読み出した場合、そのト
ラックの全ての内容がキャッシュ上に置かれる。置換す
べき論理的なトラックの選択は、予め定められたキャッ
シュ置換アルゴリズムに従って行われる。最も古くから
存在するエントリを選択するというLRU置換アルゴリ
ズムがその一例である。この置換アルゴリズムに従って
論理的なトラックを選択するには、各論理的なトラック
に対して、その論理的なトラックが最近に使用されてか
らの経過時間等をキャッシュディレクトリ30内に記憶
する必要がある。図3においては、この情報は、簡単化
のために示されていない。
【0086】この選択された論理的なトラックに属する
全ての主SGCBエントリと従エントリが選択される。
選択されたSGCBエントリが未使用にするために、未
使用キューポインター12に接続する。こうして複数の
未使用のSGCBエントリを確保する。このようにして
確保された複数の未使用のSGCBエントリとそれらに
対応する複数のキャッシュセグメントが新たな論理的な
トラックに属するデータの記憶に使用される。その記憶
の方法はすでにレコードL1の書き込みに関して説明し
たとおりである。
【0087】上で確保されたいずれかの主SGCBエン
トリに対応する主キャッシュセグメント内のいずれかの
キャッシュブロックの内容が変更されていることを、そ
の主SGCBエントリ内のダーティ/クリーンビットマ
ップ17が示すとき、その主キャッシュセグメント内の
全キャッシュブロック内のデータは、圧縮/伸張回路3
0により伸張され、適当なディスクドライブ6に書き戻
される。なお、上記選択された論理的なトラックに属す
る主キャッシュセグメントと従キャッシュセグメント内
のデータの書き戻し先の物理的なディスクアドレスは、
その論理的なトラックの番号により決められる。
【0088】本実施例では、ディスクドライブ6にはデ
ータは圧縮されずに記憶されるので、各ディスクドライ
ブ6上のデータは、そのまま従来の方法によりアクセス
できる。すなわち、ディスクドライブ6へのデータの読
み書き時には、本実施例におけるキャッシュメモリ内の
データの読み書きのときに必要となる、そのデータが属
する論理的なトラック内のセグメントの番号あるいはそ
のデータが属するデータブロックの番号の識別というよ
うな処理を必要としない。また、万一圧縮/伸張回路3
0が誤動作により使用できなくなったときでも、ディス
クドライブ6上のデータはそのまま使用可能である。ま
た、キャッシュメモリ4が誤動作により使用できなくな
ったときでも、ディスクドライブ上のデータを直接アク
セスするいう方法を採用することができる。このときに
は、圧縮/伸張回路30は使用しない。なお、キャッシ
ュメモリ4の容量は限定されているが、それに比べてデ
ィスクドライブの容量は大きい。したがって、ディスク
ドライブにはデータは圧縮しないで記憶しても容量の問
題はそれほど大きくはない。
【0089】本実施例でのキャッシュメモリのヒット/
ミスヒットは以下のようにして実行される。キャッシュ
メモリ4がミスヒットするのは、ホスト1があるトラッ
クに対してあるレコードを最初に書き込むことを要求し
たときと、ホスト1が既に書き込まれたレコード内のデ
ータを読み出しあるいは書き込みのためにアクセスする
ことを要求したが、そのデータを含むトラックのデータ
がキャッシュメモリ4に存在しないときである。いずれ
の場合にも、ホストが要求したレコードが格納されてい
るトラックに対応するSGCBエントリを読み出す。そ
のSGCBエントリが、有効なキャッシュセグメントを
ポイントしていれば、目的のレコードのデータがキャッ
シュメモリ4に保持されていることになり、キャッシュ
メモリ4はヒットしたと判断することができる。しか
し、そのSGCBエントリが、有効なキャッシュセグメ
ントをポイントしていなければ、キャッシュメモリ4は
ミスヒットしたと判断される。この場合には、目的のレ
コードをいずれかのディスクドライブ6から読み出し、
キャッシュメモリ4に格納する。その格納に当たり、必
要ならば前述の置換動作が起動される。
【0090】なお、以上のようにしてレコードL1,L
2,L3がキャッシュメモリ4に書き込まれた後に、中
間のレコードL2が削除されることがあると、キャッシ
ュセグメント13A、13B内に空き領域が生じる可能
性がある。しかし、本実施例で使用するOSは、レコー
ドL2を削除するときには、その後続のレコードL3等
も削除するようになっている。したがって、このような
空き領域は生じない。すなわち、削除されたレコードL
2、L3のために使用されたキャッシュセグメント13
A内のキャッシュブロックは後に新たにレコードL2を
記憶するのに使用され、レコードL3のために先に確保
された新たなキャッシュセグメントは、新たなレコード
L2あるいはL3のためにあるいは他のトラックに属す
るレコードのために使用可能である。
【0091】本実施例では、あふれ部分を格納する従キ
ャッシュセグメントの構造、容量及びその管理方式は、
固定長データ部分を格納する主キャッシュセグメントと
同じ物を用いる。このため本実施例は、キャッシュブロ
ックのあふれる割合、すなわち圧縮率に依存せずに使用
可能である。一つのセグメントの全てのキャッシュブロ
ックにあふれが生じたとしても、キャッシュメモリの利
用効率は、非圧縮データを格納した場合と同じになるだ
けで、キャッシュメモリの利用効率の低下しない。即
ち、本実施例は、2倍以下の範囲で実効的なキャッシュ
メモリの容量を増やす方式を提供していると言える。あ
ふれが生じない場合、圧縮操作を行うことでキャッシュ
メモリに格納できるデータ量は、圧縮を行わない場合の
データ量の2倍となる。また、あふれがある場合には、
あふれデータ部分を格納している従キャッシュセグメン
トを検索するコストが加算されるだけである。このコス
トは小さく、このようなケースは非常にまれである。
【0092】<発明の実施例2>圧縮されたデータは図
8に示すような方式によっても格納できる。ここでは、
データブロックを圧縮して得られたデータが2Kバイト
を超えている場合、この圧縮後のデータをキャッシュセ
グメント13A内のキャッシュブロックに順次格納す
る。例えば、レコードL1をキャッシュメモリに記憶す
るときに、データブロック21Aの圧縮データは2Kバ
イトを超えていないのでキャッシュブロック22Aに格
納される。しかし、データブロック21Bの圧縮データ
は2Kバイトを超えているので、圧縮後のデータブロッ
ク21Bのキャッシュセグメント長部分とあふれデータ
部分がそれぞれキャッシュブロック22B、22Cに格
納される。レコード1に属するデータブロック21Cか
ら21Fの圧縮データがいずれも2Kバイト以下と仮定
すると、これらのデータブロック21Cから21Fに対
する圧縮後のデータが順次キャッシュブロック22Dか
ら22Gに格納される。
【0093】次のレコードL2を記憶するときには、デ
ータブロック21F、21G、21Hの圧縮後のデータ
がいずれも2Kバイト以下であると仮定すると、これら
のデータはキャッシュブロック22G、22H、24H
に記憶される。データブロック21Hは、キャッシュセ
グメント13Bの先頭のキャッシュブロック24Aに記
憶される。この場合、キャッシュブロック13Aに対応
するSGCBエントリのブロック内利用サイズリスト3
2の最後のエントリに、新たに持ってきたキャッシュセ
グメント13Bを管理する、キャッシュセグメントコン
トロールブロック11のエントリの先頭を示すポインタ
を格納し、すぐにこのキャッシュセグメント13Bを検
索できるようにする。
【0094】この実施例では、レコードL2の頭出しを
行うには、レコード1の制御データを読み出し、そこに
含まれたレコード長により、レコードL2の先頭のアド
レスを判別した後、そのアドレスを有するデータブロッ
クが書き込まれたキャッシュブロックを検出するのは実
施例1と同じである。但し、本実施例では、レコード1
の圧縮データにあふれデータ部分があるか否かを、キャ
ッシュセグメント13A内の各キャッシュブロックにつ
いて順次判定する必要がある。この判定は、このキャッ
シュブロックに対応する主SGCBエントリ内のブロッ
ク内利用サイズリスト32により行う。したがって、本
実施例では実施例1よりもこのリスト32のチェックと
いう余分な処理が必要であるが、レコードLの圧縮デー
タを全て伸長する必要はないことは実施例1と同様であ
る。逆に、本実施例では、あふれデータ部分もキャッシ
ュブロック長部分に続けて記憶するので、キャッシュブ
ロックの空きが少ないという利点がある。ただし、本実
施例では、実施例1と異なり、いずれかのレコード例え
ばL2が更新され、圧縮後のレコードL2の容量が変更
されたときには、元の圧縮されたレコードL2の記憶領
域には新たな圧縮後のレコードL2を記憶することがで
きないという欠点を有する。したがって、本実施例はこ
のようにレコードの更新がない固定されたデータが記憶
されるディスク記憶システムに適している。
【0095】<変形例>本発明は以上の実施例に限定さ
れるのではなく、以下に例示する複数の変形例を含むい
ろいろの変形例によっても実現可能である。
【0096】(1)本発明は、ディスクアレイシステム
に限定されず、一つのディスクドライブを有するディス
ク記憶システムを含む任意のディスク記憶システムに適
用可能である。また、ホストが想定する論理的なディス
ク記憶システムの構造と同じ構造を有し、したがって、
論理的なディスク記憶システムをエミュレートしない
で、ホストが発行したコマンドをそのまま実行するディ
スク記憶システムにも適用できる。この場合には、ホス
トが発行するコマンドが指定するディスクアドレスは、
物理的なディスクアドレスに等しい。本発明は、このよ
うな場合にも、ホストが発行するコマンドが指定するデ
ィスクアドレスは、論理的なディスクアドレスと考え
る。
【0097】(2)本発明は、ディスクドライブにデー
タを圧縮して記憶する場合にも適用できる。この場合に
は、キャッシュメモリに記憶された圧縮されたデータを
そのままディスクドライブに記憶するのが処理の簡単さ
の点で望ましい。しかし、キャッシュメモリに記憶され
た圧縮されたデータを一度伸長して、ディスクドライブ
に適した他の圧縮アルゴリズムにより圧縮してディスク
ドライブに記憶してもよい。
【0098】(3)トラックセグメントの容量とキャッ
シュセグメントの容量の比率あるいはトラックブロック
の容量とキャッシュブロックの容量の比率は実施例1の
それらとは異なるものでもよい。また、実施例1で使用
した圧縮の単位であるデータブロックに代えて、他の大
きさのブロックを使用してもよい。とくに、圧縮の単位
となるデータブロックの長さをキャッシュブロックの容
量の2倍とは異なる大きさにしてもよい。
【0099】(4)実施例1においては、キャッシュセ
グメントと、キャッシュブロックの容量を16Kバイト
と2Kバイトとしているが、これらの容量、キャッシュ
ブロックの容量およびキャッシュセグメント中のキャッ
シュブロックの数などの最適な値は、キャッシュメモリ
の容量、内部バスの転送速度、ホストがディスク記憶シ
ステムへアクセスする容量などにより変化する。本発明
は、キャッシュセグメントやキャッシュブロックの容量
やキャッシュセグメント中のキャッシュブロックの数に
依存せず適用可能である。
【0100】(5)図4に示したブロック内利用リスト
32のフィールド34において、従キャッシュセグメン
ト13Bに対応する従SGCBエントリへのポインタと
合わせて、従キャッシュセグメント13B内でのあふれ
データ部分を格納する位置も示すようにすれば、メモリ
量および操作は複雑となるが、従キャッシュセグメント
13B内の任意の位置にあふれデータ部分を格納するこ
とができる。この場合、主キャッシュセグメント13A
を管理する主SGCBエントリに含まれたブロック内利
用サイズリスト内の、あふれたキャッシュブロックに対
応するブロック内利用容量フィールド34は、上記従S
GCBエントリの先頭を示すポインタとなる。
【0101】(6)図4に示したブロック内利用リスト
32は、図7に示すような構造でも実現できる。すなわ
ち、リスト32は、あふれデータを格納した従キャッシ
ュセグメントがあるときには、その従キャッシュセグメ
ントを管理する従SGCBエントリへのポインタ36
と、対応するキャッシュセグメント内の8個のキャッシ
ュブロック内での利用バイト数を表す8個のフィールド
37とから構成される。
【0102】(7)実施例1においては、キャッシュメ
モリにレコードを書き込むためにキャッシュセグメント
を新たに確保するときには、主キャッシュセグメントと
従キャッシュセグメントの対を確保し、その後もし従キ
ャッシュセグメントが不要と判明したときにその従キャ
ッシュセグメントを不使用状態にした。しかし、このよ
うな方法に代えて次の方法も可能である。すなわち、キ
ャッシュメモリにレコードを書き込むためにキャッシュ
セグメントを新たに確保するときには、主キャッシュセ
グメントのみをまず確保し、レコードの圧縮データを書
き込む過程であふれデータが発生したときに、従キャッ
シュセグメントを確保する。
【0103】(8)実施例1を論理的ドライブ毎や論理
的トラック毎に圧縮/非圧縮の指定をするようにも変更
できる。すなわち、ドライブテーブル9とSGCBのエ
ントリに、圧縮有効/無効の制御情報を格納し、これに
基づいてホスト1からキャッシュメモリ4にデータを転
送する時点、又はキャッシュメモリ4からデータを読み
出してホスト1へデータを転送する時点で、圧縮/伸張
を行うか否かを上記制御情報により切り替える処理を行
う。この際、キャッシュメモリ管理方式やキャッシュヒ
ット/ミス判定の部分は、この圧縮/伸長を行うか否か
とは関係がなく同じ手順で実行される。
【0104】この変形例はディスクアレイシステム8へ
格納するデータが、ホスト1で圧縮された画像等のデー
タと、通常の圧縮可能なデータが混在する場合などに有
効である。すなわち、非圧縮指定した論理的ドライブに
は、ホストで圧縮された画像等のデータをそのまま格納
し、圧縮指定した論理的ドライブには通常のデータを圧
縮して格納する。
【0105】なお、非圧縮指定された論理的ドライブあ
るいは論理的トラックにデータを圧縮しないで書き込む
ように実施例1を変更することは簡単である。すなわ
ち、基本的には実施例1で行った処理に含まれる圧縮/
伸長処理およびそれに伴って行われた処理を実行しなけ
ればよい。そのデータに対してはブロック内利用サイズ
リスト32のフィールド32は使用されないことにな
る。
【0106】(9)キャッシュメモリ上に、利用者が指
定したディスクドライブ中の特定の内容を常駐させる、
パーマネントキャッシュという技術が知られている。こ
こでは、利用者が指定した内容がキャッシュ上に常駐す
るため、見かけ上キャッシュメモリの容量が減少したよ
うに見える。これに対し、本発明により、キャッシュメ
モリ上に常駐するデータを圧縮することにより、見かけ
上のキャッシュメモリの容量の減少分を約半分に抑える
事ができる。さらに、キャッシュメモリに非常駐なデー
タに対しては圧縮をしない運用、すなわち、キャッシュ
メモリの一部は圧縮を行い、他の部分は圧縮を行わない
運用を行っても、本発明によりキャッシュメモリ管理コ
スト増加分を非常に低く抑えられ、実効的なキャッシュ
メモリ増加によるレスポンスタイム向上を十分に享受で
きる。
【0107】(10)実施例1で使用した装置構成はい
ろいろ変更可能である。例えば、キャッシュメモリ4に
対する読み書きを制御するコントロール回路を実現する
回路部分の構造はいろいろの変形が可能である。例え
ば、キャッシュディレクトリ30の構造を他のものにし
てもよい。また、キャッシュメモリのヒットチェック
を、キャッシュディレクトリを記憶した専用のメモリと
そのメモリをアクセスしてヒットチェックする回路によ
り実行させてもよい。
【0108】
【発明の効果】以上から明らかなように、本発明によれ
ば、メモリに記憶された複数の圧縮されたデータの任意
の一つの頭出しを簡単に行うことができる。
【0109】とくに、ディスクドライブに記憶される複
数の可変長のレコードを圧縮してキャッシュメモリに記
憶する場合に本発明を適用すると、同じトラックに属す
る複数のレコードの任意の一つをキャッシュメモリから
読み出すことが容易になる。
【図面の簡単な説明】
【図1】本発明の実施例により記憶されるデータの論理
的なディスクアドレスとキャッシュメモリ内記憶位置と
の関係を示す。
【図2】本発明に係るディスク記憶システムに使用され
るキャッシュディレクトリの一例を示す。
【図3】図2のキャッシュディレクトリに含まれたキャ
ッシュセグメントコントロールブロックの各エントリの
構造を示す。
【図4】図3のエントリ内に含まれたブロック内利用サ
イズリストの一例を示す。
【図5】本発明に係る圧縮データの記憶方法の上記実施
例を示すディスクアレイシステムの概略構成を示す。
【図6】図5の装置に使用されるホストインタフェース
の概略構成を示す。
【図7】ブロック内利用サイズリストの他の構成例を示
す。
【図8】本発明の他の実施例により記憶されるデータの
論理的なディスクアドレスとキャッシュメモリ内記憶位
置との関係を示す。
【符号の説明】
1…ホストコンピュータ、6…ディスクドライブ、8…
ディスクアレイシステム、13…キャッシュセグメン
ト、13A…主キャッシュセグメント、13B…従キャ
ッシュセグメント、20…論理的トラック内の記憶領
域、21A〜21I…トラックブロック、22A〜22
H、24A〜24H…キャッシュブロック、S1〜S3
…トラックセグメント、L1〜L3…レコード。

Claims (16)

    【特許請求の範囲】
  1. 【請求項1】少なくとも一つのディスクドライブと、 上記ディスクドライブのためのキャッシュメモリと、 上記キャッシュメモリに対するデータの読み書きを制御
    するコントロール回路とを有し、 上記コントロール回路は、 上記ディスクドライブに記憶されるべき、上位装置から
    供給された書き込みデータを、上記上位装置が指定する
    論理的なディスクアドレスに基づいて、複数のデータブ
    ロックに区分して圧縮し、 上記圧縮後の複数のデータブロックを上記キャッシュメ
    モリ内の一群のキャッシュブロックに、各キャッシュブ
    ロックが一つのデータブロックに属するデータを記憶
    し、異なるデータブロックに属するデータを記憶しない
    ように記憶し、 上記区分された複数のデータブロックの一つを上記キャ
    ッシュメモリから読み出すときに、上記一群のキャッシ
    ュブロック内の、上記読み出すべき一つのデータブロッ
    クに対する一つの圧縮後のデータブロックを記憶した少
    なくとも一つのキャッシュブロックを判別し、 その少なくとも一つのキャッシュブロックに記憶された
    データを読み出し、 上記読み出されたデータを伸長し、 ここで、上記上位装置が指定する上記論理的なディスク
    アドレスで指定される論理的なトラックは、互いに同じ
    容量を有する複数のトラックブロックに区分され、 上記複数のデータブロックの各々が上記複数のトラック
    ブロックの一つに属する論理的なディスクアドレスを有
    するデータのみからなるように、上記複数のデータブロ
    ックが定められ、 上記一群のキャッシュブロックは、それぞれ第1の容量
    を有し、 上記複数のトラックブロックの各々の上記容量は、上記
    第1の容量より大きな第2の容量となるように予め定め
    られているディスク記憶システム。
  2. 【請求項2】上記コントロール回路は、 上記複数の圧縮後のデータブロックを上記一群のキャッ
    シュブロックに記憶するときには、いずれかの圧縮後の
    データブロックの容量が、上記第1の容量より大きくな
    いときには、その圧縮後のデータブロックを、上記キャ
    ッシュメモリ内の上記第1の容量を有する一つのキャッ
    シュブロックに記憶し、 いずれかの圧縮後のデータブロックの容量が、上記第1
    の容量より大きいときには、その第1の容量によりその
    圧縮後のデータブロックを複数の分割データブロックに
    分割し、上記複数の分割データブロックを上記キャッシ
    ュメモリ内のそれぞれ上記第1の容量を有する複数のキ
    ャッシュブロックに記憶請求項1記載のディスク記憶シ
    ステム。
  3. 【請求項3】上記第2の容量は上記第1の容量の2倍で
    ある請求項1記載のディスク記憶システム。
  4. 【請求項4】上記論理的なトラックは、互いに同じサイ
    ズを有し、それぞれ同じ複数のトラックブロックを含む
    複数のトラックセグメントに区分され、 上記キャッシュメモリは、複数のキャッシュセグメント
    からなり、 各キャッシュセグメントは、連続したメモリアドレスを
    有し、それぞれ一つのトラックセグメントに含まれるト
    ラックブロックの上記数と同数のキャッシュブロックか
    らなり、 上記コントロール回路は、 上記圧縮後の複数のデータブロックを上記一群のキャッ
    シュブロックに記憶するときに、上記書き込みデータを
    構成する圧縮前の複数のデータブロックの少なくとも一
    つの論理的なディスクアドレスが属するトラックセグメ
    ントに対応して、第1のキャッシュセグメントを選択
    し、 上記少なくとも一つの圧縮前のデータブロックに対する
    圧縮後のデータブロックが上記第1の容量より大きくな
    いときには、第1のキャッシュセグメント内の、上記一
    つの圧縮前のデータブロックが属するトラックブロック
    に対応する第1のキャッシュブロックにその圧縮後のデ
    ータブロックを記憶し、 上記少なくとも一つの圧縮前のデータブロックに対する
    圧縮後のデータブロックが上記第1の容量より大きいと
    きには、その圧縮後のデータブロックを複数の分割デー
    タブロックに分割し、上記複数の分割データブロックの
    内の先頭の分割データブロックを上記第1のキャッシュ
    ブロックに記憶し、 第2のキャッシュセグメントを選択し、 上記第2のキャッシュセグメント内の、上記圧縮前のデ
    ータブロックが属する上記トラックブロックに対応する
    第2のキャッシュブロックに、上記複数の分割データブ
    ロックの内の他の少なくとも一つの分割データブロック
    を記憶し、 上記複数のデータブロックの一つを読み出すときには、
    そのデータブロックの論理的なディスクアドレスが属す
    る、トラックセグメントとそのトラックセグメント内の
    トラックブロックとに基づいて、上記第1、第2のキャ
    ッシュブロック内のデータを読み出す請求項1記載のデ
    ィスク記憶システム。
  5. 【請求項5】上記コントロール回路は、 上記書き込みデータを上記キャッシュメモリに記憶した
    後に、上記書き込みデータに含まれた上記レコードの後
    続のレコードを上記キャッシュメモリに記憶するとき
    に、その後続のレコードの先頭に位置するデータブロッ
    クが、上記書き込みデータの末尾に位置するデータブロ
    ックが属するトラックブロックに属する場合、上記トラ
    ックブロックの論理的なディスクアドレスに基づいて、
    圧縮後の上記末尾に位置するデータブロックを上記一群
    のキャッシュブロックの少なくとも一つから読み出し、 読み出された圧縮後の上記末尾に位置するデータブロッ
    クを伸長し、 伸長後の上記末尾に位置するデータブロックと、上記先
    頭に位置するデータブロックとの組みデータを圧縮し、 上記組みデータを上記一つのキャッシュブロックに書き
    込む請求項1記載のディスク記憶システム。
  6. 【請求項6】上記コントロール回路は、 上記圧縮後の複数のデータブロックが上記キャッシュメ
    モリ内の一群のキャッシュブロックに記憶されたとき
    に、上記一群のキャッシュブロックの各々を、そこに記
    憶された圧縮後のデータブロックに属する少なくとも一
    部のデータの論理的なディスクアドレスに基づいて検索
    するための情報を、上記キャッシュメモリに対する検索
    情報の一部として記憶し、 上記読み出すべき一つのデータブロックに対する上記一
    つの圧縮後のデータブロックを記憶した上記少なくとも
    一つのキャッシュブロックの上記判別を、上記記憶され
    た検索情報と、上記読み出すべき少なくとも一つのデー
    タブロックの上記論理的なディスクアドレスとに基づい
    て行う請求項1記載のディスク記憶システム。
  7. 【請求項7】上記第2の容量は上記第1の容量の2倍で
    ある請求項6記載のディスク記憶システム。
  8. 【請求項8】上記コントロール回路は、 上記複数の圧縮後のデータブロックを上記一群のキャッ
    シュブロックに記憶するときには、いずれかの圧縮後の
    データブロックが、上記第1の容量より大きくないとき
    には、その圧縮後のデータブロックを、上記キャッシュ
    メモリ内の上記第1の容量を有する一つのキャッシュブ
    ロックに記憶し、 いずれかの圧縮後のデータブロックが、上記第1の容量
    より大きいときには、その第1の容量によりその圧縮後
    のデータブロックを複数の分割データブロックに分割
    し、上記複数の分割データブロックを上記キャッシュメ
    モリ内のそれぞれ上記第1の容量を有する複数のキャッ
    シュブロックに記憶し、 上記検索情報として、上記第1の容量より大きい上記圧
    縮後のデータブロックに対する上記分割データブロック
    が記憶された上記複数のキャッシュブロックを検索する
    ための情報を記憶し、 上記読み出すべき一つのデータブロックに対する上記一
    つの圧縮後のデータブロックを記憶した上記少なくとも
    一つのキャッシュブロックを判別するときには、上記一
    つの圧縮されたデータブロックが上記第1の容量より大
    きい場合、上記一つの圧縮されたデータブロックに対す
    る複数の分割データブロックが記憶されている複数のキ
    ャッシュブロックを上記検索情報に基づいて判別する請
    求項6記載のディスク記憶システム。
  9. 【請求項9】上記上位装置が指定した上記論理的なディ
    スクアドレスにより指定される論理的なトラックは、互
    いに同じサイズを有し、それぞれ同じ複数のトラックブ
    ロックを含む複数のトラックセグメントに区分され、 上記キャッシュメモリは、複数のキャッシュセグメント
    からなり、 各キャッシュセグメントは、連続したメモリアドレスを
    有し、それぞれ一つのトラックセグメントに含まれるト
    ラックブロックの上記数と同数のキャッシュブロックか
    らなり、 上記コントロール回路は、 上記圧縮後の複数のデータブロックを上記キャッシュメ
    モリ内の上記一群のキャッシュブロックに記憶するとき
    に、上記書き込みデータを構成する圧縮前の複数のデー
    タブロックの少なくとも一つの論理的なディスクアドレ
    スが属するトラックセグメントに対応して、第1のキャ
    ッシュセグメントを選択し、 上記少なくとも一つの圧縮前のデータブロックに対する
    圧縮後のデータブロックが上記第1の容量より大きくな
    いときには、第1のキャッシュセグメント内の、上記一
    つの圧縮前のデータブロックが属するトラックブロック
    に対応する第1のキャッシュブロックにその圧縮後のデ
    ータブロックを記憶し、 上記少なくとも一つの圧縮前のデータブロックに対する
    圧縮後のデータブロックが上記第1の容量より大きいと
    きには、その圧縮後のデータブロックを複数の分割デー
    タブロックに分割し、上記複数の分割データブロックの
    内の先頭の分割データブロックを上記第1のキャッシュ
    ブロックに記憶し、 第2のキャッシュセグメントを選択し、 上記第2のキャッシュセグメント内の、上記圧縮前のデ
    ータブロックが属する上記トラックブロックに対応する
    第2のキャッシュブロックに、上記複数の分割データブ
    ロックの内の他の少なくとも一つの分割データブロック
    を記憶し、 上記複数のデータブロックの一つを読み出すときには、
    そのデータブロックの論理的なディスクアドレスが属す
    るトラックセグメントと、そのトラックセグメント内の
    トラックブロックとに基づいて、上記第1、第2のキャ
    ッシュブロック内のデータを読み出す請求項6記載のデ
    ィスク記憶システム。
  10. 【請求項10】上記コントロール回路は、上記第1のキ
    ャッシュセグメントに対応する上記トラックセグメント
    を上記第1のキャッシュセグメントに関連付ける情報を
    上記検索情報の一部として記憶する請求項9記載のディ
    スク記憶システム。
  11. 【請求項11】上記関連付ける情報は、上記第1のキャ
    ッシュセグメントに対応して記憶された、上記第1のキ
    ャッシュセグメントに対応する上記トラックセグメント
    の番号である請求項10記載のディスク記憶システム。
  12. 【請求項12】上記コントロール回路は、上記第1のキ
    ャッシュセグメントに対応して、上記第2のキャッシュ
    セグメントを上記第1のキャッシュセグメントに関連付
    ける情報を上記検索情報の一部として記憶する請求項9
    記載のディスク記憶システム。
  13. 【請求項13】上記コントロール回路は、 上記書き込みデータを上記キャッシュメモリに記憶した
    後に、上記書き込みデータに含まれた上記レコードの後
    続のレコードを上記キャッシュメモリに記憶するとき
    に、その後続のレコードの先頭に位置するデータブロッ
    クが、上記書き込みデータの末尾に位置するデータブロ
    ックが属するトラックブロックに属する場合、上記トラ
    ックブロックの論理的なディスクアドレスに基づいて、
    圧縮後の上記末尾に位置するデータブロックを上記一群
    のキャッシュブロックの少なくとも一つから読み出し、 読み出された圧縮後の上記末尾に位置するデータブロッ
    クを伸長し、伸長後の上記末尾に位置するデータブロッ
    クと、上記先頭に位置するデータブロックとの組みデー
    タを圧縮し、 上記組みデータを上記一つのキャッシュブロックに書き
    込む請求項6記載のディスク記憶システム。
  14. 【請求項14】ディスクドライブと、 上記ディスクドライブ用のキャッシュメモリと、 上記ディスクドライブから上記キャッシュメモリに転送
    すべき第1のデータを圧縮し、圧縮された後の上記第1
    のデータを上記キャッシュメモリに書き込み、上記キャ
    ッシュメモリから上記ディスクドライブに転送すべき第
    2のデータを伸長し、伸長後の上記第2のデータを上記
    ディスクドライブに書き込むコントロール回路とを有す
    るディスク記憶システム。
  15. 【請求項15】ディスクドライブと、 データの記録単位がブロックである、前記ディスクドラ
    イブ用のキャッシュメモリと、 前記キャッシュメモリへ格納されるデータを2ブロック
    単位で圧縮する圧縮手段と、 上記圧縮手段による圧縮により得られた圧縮後のデータ
    が、1ブロックサイズ以下である場合には、前記キャッ
    シュメモリ上の一つのブロックに当該圧縮後のデータを
    格納し、当該ブロックの残りの部分をデータ格納禁止部
    とし、上記圧縮後のデータが1ブロックサイズより大き
    い場合には、前記キャッシュメモリ上の一つのブロック
    に当該圧縮されたデータの内、1ブロックサイズ分を格
    納し、あふれたデータを当該ブロックとは別のブロック
    に格納する格納手段とを有するディスク記憶システム。
  16. 【請求項16】ディスクドライブと、 データの記録単位が固定長である前記ディスク用のキャ
    ッシュメモリと、 前記キャッシュメモリへ格納されるべきデータを2記録
    単位毎に圧縮する圧縮手段とを有するディスク記憶シス
    テム。
JP9302387A 1996-11-05 1997-11-05 ディスク記憶システム Pending JPH10232838A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP9302387A JPH10232838A (ja) 1996-11-05 1997-11-05 ディスク記憶システム

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP8-292393 1996-11-05
JP29239396 1996-11-05
JP9302387A JPH10232838A (ja) 1996-11-05 1997-11-05 ディスク記憶システム

Publications (1)

Publication Number Publication Date
JPH10232838A true JPH10232838A (ja) 1998-09-02

Family

ID=26558967

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9302387A Pending JPH10232838A (ja) 1996-11-05 1997-11-05 ディスク記憶システム

Country Status (1)

Country Link
JP (1) JPH10232838A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103543959A (zh) * 2013-10-08 2014-01-29 深圳市国泰安信息技术有限公司 海量数据高速缓存的方法及装置
JP2017532657A (ja) * 2014-09-11 2017-11-02 クアルコム,インコーポレイテッド 圧縮アルゴリズムのためのキャッシュバンク分散
JP2022521465A (ja) * 2019-02-27 2022-04-08 インターナショナル・ビジネス・マシーンズ・コーポレーション メモリ境界の収容のためのオーバーフロー管理方法、システム、プログラム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103543959A (zh) * 2013-10-08 2014-01-29 深圳市国泰安信息技术有限公司 海量数据高速缓存的方法及装置
JP2017532657A (ja) * 2014-09-11 2017-11-02 クアルコム,インコーポレイテッド 圧縮アルゴリズムのためのキャッシュバンク分散
JP2022521465A (ja) * 2019-02-27 2022-04-08 インターナショナル・ビジネス・マシーンズ・コーポレーション メモリ境界の収容のためのオーバーフロー管理方法、システム、プログラム

Similar Documents

Publication Publication Date Title
US6115787A (en) Disc storage system having cache memory which stores compressed data
US6941420B2 (en) Log-structure array
JP3426385B2 (ja) ディスク制御装置
JP3399520B2 (ja) 圧縮メイン・メモリの仮想非圧縮キャッシュ
JP2783748B2 (ja) 動的マップド・データ蓄積システムにおける補助記憶装置へのデータ転送のための方法および装置
US6216199B1 (en) Hardware mechanism for managing cache structures in a data storage system
US6360300B1 (en) System and method for storing compressed and uncompressed data on a hard disk drive
US7117310B2 (en) Systems and methods for cache synchronization between redundant storage controllers
KR100211790B1 (ko) 직접 액세스 저장 장치에서 데이터 압축을 위한 디렉토리 재 구축 방법 및 장치
US6606682B1 (en) Cluster-based cache memory allocation
JP3422370B2 (ja) ディスクキャッシュ制御装置
US6449689B1 (en) System and method for efficiently storing compressed data on a hard disk drive
US5283884A (en) CKD channel with predictive track table
KR100216146B1 (ko) 직접 액세스 저장장치의 데이터 압축 방법 및 압축 데이터 구조
US6542960B1 (en) System and method for parity caching based on stripe locking in raid data storage
US8694563B1 (en) Space recovery for thin-provisioned storage volumes
US20040030813A1 (en) Method and system for storing memory compressed data onto memory compressed disks
US5420983A (en) Method for merging memory blocks, fetching associated disk chunk, merging memory blocks with the disk chunk, and writing the merged data
US5537658A (en) Distributed directory method and structure for direct access storage device (DASD) data compression
US5671390A (en) Log structured array storage subsystem using LSA directory and LSA sub-directory stored in different storage media
WO1993000635A1 (en) Data storage management systems
US20230021108A1 (en) File storage
US6513142B1 (en) System and method for detecting of unchanged parity data
JPH10232838A (ja) ディスク記憶システム
JPH11327802A (ja) ディスクシステム

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20061213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061219

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070410