(57)【要約】【課題】  処理システムにおけるアクセス待ち時間および競合を少なくするための方法および装置を提供する。【解決手段】  本発明は、使用可能なメモリの量が規定の範囲から外れたときを検出し、それに応答して、使用可能なメモリの量が所定の範囲内になるまで、圧縮のための（使用可能なメモリに加えるために）データ・ブロックを選択するか、または圧縮解除のための（非圧縮データのための余分な使用可能メモリを使用するために）データ・ブロックを選択する。データ・ブロックが圧縮されるとき、ＤＯＣが決定され、そのデータ・ブロックと関連するディレクトリ・エントリに属性として保存される。最近のデータ・ブロック・アドレスのうちの最近使用されたもののリストは、不十分なＤＯＣ属性を有するデータ・ブロックが再圧縮のために選択されないようにする。標準的な圧縮／圧縮解除オーバヘッドを回避するために、すべてゼロのデータ・ブロックが検出される。
2005535051.tif 000002
【特許請求の範囲】
【請求項１】
圧縮データ・ブロックおよび非圧縮データ・ブロックを含むデータ・ブロックのセクタを有するメモリと、
前記メモリに対して動作関係に接続され、前記メモリの使用済みメモリ・セクタ・カウントを維持するように適応するセクタ・カウンタと、
前記メモリに対して動作関係に接続された圧縮メモリ・マネージャと、
前記圧縮メモリ・マネージャに対して動作関係に接続され、圧縮メモリ閾値を含む圧縮メモリ閾値レジスタと、
前記圧縮メモリ・マネージャに対して動作関係に接続され、拡張メモリ閾値を含む拡張メモリ閾値レジスタと、
を含み、
前記圧縮メモリ・マネージャは、前記使用済みメモリ・セクタ・カウントが前記圧縮メモリ閾値よりも大きいとき、前記メモリにおけるデータ・ブロックを圧縮するように適応し、
更に、前記圧縮メモリ・マネージャは、前記使用済みメモリ・セクタ・カウントが前記拡張メモリ閾値よりも小さいとき、前記データ・ブロックを圧縮解除するように適応する、
コンピュータ・システム。
【請求項２】
前記メモリに対して動作関係に接続されたメモリ・コントローラを更に含み、
前記圧縮する動作および前記圧縮解除する動作は、前記メモリ・コントローラがメモリ・アクセス・リクエストを遂行していないときに前記圧縮メモリ・マネージャによって遂行される、請求項１に記載のコンピュータ・システム。
【請求項３】
前記圧縮メモリ・マネージャに対して動作関係に接続され、優先圧縮メモリ閾値を含む優先圧縮メモリ閾値レジスタを更に含み、
前記圧縮メモリ・マネージャは、前記メモリ・コントローラのメモリ・アクセス・リクエスト活動に関係なく、前記使用済みメモリ・セクタ・カウントが前記優先圧縮メモリ閾値よりも大きいとき、前記メモリにおける前記データ・ブロックを圧縮するように更に適応する、請求項２に記載のコンピュータ・システム。
【請求項４】
前記メモリに対して動作関係に接続され、前記データ・ブロックの圧縮属性を含むセクタ変換テーブルを更に含む、請求項１に記載のコンピュータ・システム。
【請求項５】
前記圧縮属性は、「すべてゼロ」のデータ・ブロックを表すゼロ属性を含み、
前記圧縮メモリ・マネージャは前記ゼロ属性を有するデータ・ブロックをゼロ・エントリとして前記メモリに保存するように更に適応し、
前記ゼロ・エントリはメモリ・セクタを使用することを回避する、
請求項４に記載のコンピュータ・システム。
【請求項６】
前記圧縮属性は、非圧縮可能属性、圧縮不可属性、および未知圧縮率属性を含む、請求項４に記載のコンピュータ・システム。
【請求項７】
前記圧縮メモリ・マネージャは、低圧縮率属性を有するデータ・ブロックを圧縮する前に高圧縮率属性を有するデータ・ブロックを圧縮するように更に適応する、請求項１に記載のコンピュータ・システム。
【請求項８】
圧縮データ・ブロックおよび非圧縮データ・ブロックを含むデータ・ブロックのセクタを有するメモリと、
前記メモリに対して動作関係に接続され、前記メモリの使用済みメモリ・セクタ・カウントを維持するように適応するセクタ・カウンタと、
前記メモリに対して動作関係に接続された圧縮メモリ・マネージャと、
前記圧縮メモリ・マネージャに対して動作関係に接続され、圧縮メモリ閾値を含む圧縮メモリ閾値レジスタと、
前記メモリに対して動作関係に接続され、前記データ・ブロックが最後にアクセスされた時を表すタッチ・ビットを含むセクタ変換テーブルと、
前記圧縮メモリ・マネージャに対して動作関係に接続され、拡張メモリ閾値を含む拡張メモリ閾値レジスタと、
を含み、
前記圧縮メモリ・マネージャは、前記使用済みメモリ・セクタ・カウントが前記圧縮メモリ閾値よりも大きいとき、前記メモリにおけるデータ・ブロックを圧縮するように適応し、
前記タッチ・ビットに基づいて、最近のアクセス頻度が低いデータ・ブロックが、最近のアクセス頻度が高いデータ・ブロックよりも前に圧縮され、
更に、前記圧縮メモリ・マネージャは、前記使用済みメモリ・セクタ・カウントが前記拡張メモリ閾値よりも小さいとき、前記データ・ブロックを圧縮解除するように適応する、
コンピュータ・システム。
【請求項９】
前記メモリに対して動作関係に接続されたメモリ・コントローラを更に含み、
前記圧縮する動作および前記圧縮解除する動作は、前記メモリ・コントローラがメモリ・アクセス・リクエストを遂行していないときに前記圧縮メモリ・マネージャによって遂行される、請求項８に記載のコンピュータ・システム。
【請求項１０】
前記圧縮メモリ・マネージャに対して動作関係に接続され、優先圧縮メモリ閾値を含む優先圧縮メモリ閾値レジスタを更に含み、
前記圧縮メモリ・マネージャは、前記メモリ・コントローラのメモリ・アクセス・リクエスト活動に関係なく、前記使用済みメモリ・セクタ・カウントが前記優先圧縮メモリ閾値よりも大きいとき、前記メモリにおける前記データ・ブロックを圧縮するように更に適応する、請求項９に記載のコンピュータ・システム。
【請求項１１】
前記セクタ変換テーブルは、「すべてゼロ」のデータ・ブロックを表すゼロ属性を含む前記データ・ブロックの圧縮属性を含み、
前記圧縮メモリ・マネージャは、前記ゼロ属性を有するデータ・ブロックをゼロ・エントリとして前記メモリに保存するように更に適応し、
前記ゼロ・エントリはメモリ・セクタを使用することを回避する、
請求項８に記載のコンピュータ・システム。
【請求項１２】
前記圧縮メモリ・マネージャは、低圧縮率属性を有するデータ・ブロックを圧縮する前に高圧縮率属性を有するデータ・ブロックを圧縮するように更に適応する、請求項８に記載のコンピュータ・システム。
【請求項１３】
前記セクタ変換テーブルは、非圧縮可能属性および圧縮不可属性を含む前記データ・ブロックの圧縮属性を含む、請求項８に記載のコンピュータ・システム。
【請求項１４】
コンピュータ・システムにおけるセクタ化された圧縮メモリを利用する方法であって、
前記メモリの使用済みメモリ・セクタ・カウントをモニタするステップと、
前記使用済みメモリ・セクタ・カウントが圧縮メモリ閾値よりも大きいとき、前記メモリにおけるデータ・ブロックを圧縮するステップと、
前記使用済みメモリ・セクタ・カウントが拡張メモリ閾値よりも小さいとき、前記データ・ブロックを圧縮解除するステップと、
を含む、方法。
【請求項１５】
前記圧縮するステップおよび前記圧縮解除するステップは、前記コンピュータ・システムにおける圧縮メモリ・マネージャがメモリ・アクセス・リクエストを遂行していないときに遂行される、請求項１４に記載の方法。
【請求項１６】
前記圧縮メモリ・マネージャのメモリ・アクセス・リクエスト活動に関係なく、前記使用済みメモリ・セクタ・カウントが優先圧縮メモリ閾値よりも小さいとき、前記メモリにおける前記データ・ブロックを圧縮するステップを更に含む、請求項１５に記載の方法。
【請求項１７】
「すべてゼロ」を有するデータ・ブロックをゼロ・エントリとして前記メモリに常に保存するステップを更に含み、
前記ゼロ・エントリはメモリ・セクタを使用することを回避する、請求項１４に記載の方法。
【請求項１８】
前記圧縮するステップは、低い圧縮率を有するデータ・ブロックを圧縮する前に高い圧縮率を有するデータ・ブロックを圧縮するステップを更に含む、請求項１４に記載の方法。
【請求項１９】
前記圧縮解除するステップは、非圧縮データ・ブロックを圧縮解除しないようにする、請求項１４に記載の方法。
【請求項２０】
前記圧縮するステップは、前記コンピュータ・システムのキャッシュに保持されたデータを圧縮しないようにする、請求項１４に記載の方法。
【請求項２１】
コンピュータ・システムおけるセクタ化された圧縮メモリを利用する方法であって、
前記メモリの使用済みメモリ・セクタ・カウントをモニタするステップと、
前記使用済みメモリ・セクタ・カウントが圧縮メモリ閾値よりも大きいとき、前記メモリにおけるデータ・ブロックを圧縮するステップと、
前記使用済みメモリ・セクタ・カウントが拡張メモリ閾値よりも小さいとき、前記データ・ブロックを圧縮解除するステップと、
を含み、
前記圧縮するステップは、最近のアクセス頻度が高いデータ・ブロックを圧縮する前に最近のアクセス頻度が低いデータ・ブロックを圧縮するステップを更に含む、方法。
【請求項２２】
前記圧縮するステップおよび前記圧縮解除するステップは、前記コンピュータ・システムにおける圧縮メモリ・マネージャがメモリ・アクセス・リクエストを遂行していないときに遂行される、請求項２１に記載の方法。
【請求項２３】
前記圧縮メモリ・マネージャのメモリ・アクセス・リクエスト活動に関係なく、前記使用済みメモリ・セクタ・カウントが優先圧縮メモリ閾値よりも小さいとき、前記メモリにおける前記データ・ブロックを圧縮するステップを更に含む、請求項２２に記載の方法。
【請求項２４】
「すべてゼロ」を有するデータ・ブロックをゼロ・エントリとして前記メモリに常に保存するステップを更に含み、
前記ゼロ・エントリはメモリ・セクタを使用することを回避する、請求項２１に記載の方法。
【請求項２５】
前記圧縮するステップは、低い圧縮率を有するデータ・ブロックを圧縮する前に高い圧縮率を有するデータ・ブロックを圧縮するステップを更に含む、請求項２１に記載の方法。
【請求項２６】
前記圧縮解除するステップは、非圧縮データ・ブロックを圧縮解除しないようにする、請求項２１に記載の方法。
【請求項２７】
前記圧縮するステップは、前記コンピュータ・システムのキャッシュに保持されたデータを圧縮しないようにする、請求項２１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して言えば、コンピュータ・システムにおける圧縮メイン・メモリ・アーキテクチャの分野に関し、詳しく云えば、圧縮メイン・メモリまたは関連する非圧縮キャッシュを管理するための方法および装置の改良に関するものである。
【背景技術】
【０００２】
今や、メイン・メモリとプロセッサとの間のデータ・フロー・パスにおいて高速度の圧縮／圧縮解除ハードウェアを使用するコンピュータ・メイン・メモリ・システムが一般的に利用可能である。これらのシステム内でのメイン・メモリに対するプロセッサ・アクセスは、圧縮装置および圧縮解除装置を通して間接的に遂行される。この圧縮装置および圧縮解除装置の両方とも、プロセッサのアクセス待ち時間オーバヘッドをかなり増大するが、ストレージの経費低減をかなり促進するものである。
【０００３】
圧縮メイン・メモリ（以下、「圧縮メモリ」と呼ぶ）に対するプロセッサの参照頻度を少なくして大きい圧縮／圧縮解除待ち時間の影響を軽減するために、プロセッサと圧縮装置および圧縮解除装置との間に大型のキャッシュ・メモリ（以下、「キャッシュ」と呼ぶ）が実装される。これらのキャッシュは非圧縮データを含み、一般には、圧縮および圧縮解除装置が必要とする一定のデータ・ブロック・サイズに等しいサイズのキャッシュ・ラインに区分けされる。キャッシュに未だ配置されてないデータをプロセッサが要求するとき、その要求されたデータを含むラインが圧縮メモリにおいて位置指定され、しかる後、圧縮メモリから読み出されて圧縮解除され、非圧縮キャッシュ内に配置される。非圧縮キャッシュにおいて空きのキャッシュ・ラインが得られないとき、１つの既存のキャッシュ・ラインが置換のために選択される。その既存のキャッシュ・ラインはキャッシュから排除され、圧縮されて圧縮メモリ内に保存され、キャッシュではその新たなキャッシュ・ラインによって置換される。その後、初期参照の局所性におけるプロセッサ参照およびそのキャッシュ・ライン内でのプロセッサ参照は非圧縮キャッシュ・データから直接にサービスされ、圧縮解除に関連した待ち時間を被らない。次に、非圧縮データをキャッシュする方法を説明する。
【０００４】
一般的な独立型キャッシュ・アレイおよび関連するディレクトリは最大のパフォーマンスを提供するが、それは最高のコストで提供されることになる。キャッシュおよびディレクトリ・ハードウェアはプロセッサによる最小待ち時間のアクセスを得るように最適化されるので、パフォーマンスは最大となり、メイン・メモリ・インターフェース・トラフィックはキャッシュ・インターフェースのトラフィックから分離される。しかし、コストは、キャッシュ・アレイ、ディレクトリ、および関連のハードウェア・インターフェースと関連している。
【０００５】
Hovis 他を発明者とする米国特許第５,８１２,８１７号は、メイン・メモリ内に非圧縮キャッシュ・メモリ領域を論理的に割り振る。キャッシュ・コントローラおよびメモリ・コントローラが同じ物理的インターフェースを介して同じ記憶装置アレイを共用する。キャッシュ・ラインの置換時に、データが、圧縮ハードウェアを通して圧縮メイン・メモリ領域および非圧縮キャッシュ領域の間で随時往復する。この方式の利点は、非圧縮キャッシュのサイズが特定のシステム・アプリケーションに対して容易に最適化できることであり、独立したキャッシュ・メモリ、ディレクトリ、および関連のインターフェースに関連したコストが不要にされることである。なお、待ち時間にセンシティブなキャッシュ・コントローラによるメイン・メモリの物理的インターフェースに対する競合によって、パフォーマンスは不利となる。
【０００６】
Benveniste 他を発明者とする米国特許第６,３４９,３７２Ｂ１号は、圧縮不可能なデータ・ブロックが保存される態様と同じ態様で圧縮メモリ内に非圧縮フォーマットで保存されることを許された所定数の非圧縮データ・ブロックから成る「仮想非圧縮キャッシュ」を開示している。プロセッサのデータ参照は、すべて、圧縮メモリ・ディレクトリから位置指定されるので、別個のキャッシュ・ディレクトリは必要ない。非圧縮のデータ・ブロックのＦＩＦＯリストが維持されており、新たなデータ・ブロックが非圧縮にされるとき、それはそのリストにおけるデータ・ブロックと置換する。データは、非圧縮リストにおけるデータ・ブロックの置換時に、圧縮／非圧縮ハードウェアを通して圧縮メイン・メモリの外および内を往復する。この方式は、特別のキャッシュ・メモリまたはディレクトリが存在しないので、コストが非常に低い。しかし、圧縮装置／非圧縮装置のデータ・フローがプロセッサのデータ参照およびディレクトリ参照と競合することにより、パフォーマンスは不利となる。
【０００７】
これらの方式はすべて、非圧縮フォーマットにおける一定量のデータまたはキャッシュを可能にするが、（実用上は）圧縮メモリのすべての内容を圧縮フォーマットで維持することを必要とする。データは、非圧縮データ・セットまたはキャッシュにおいて見つからないデータをプロセッサが要求するときだけ（要求時に）非圧縮にされる。これは、メイン・メモリにおける利用可能なスペースを最大にするが、そのスペースは使用されないことが多い。これらの方式は、データに対するアクセスが要求される前にデータを圧縮／圧縮解除するための手段を提供するものではない。従って、プロセッサがメモリに対するアクセスを要求すると同時に、メモリにおいて圧縮装置／非圧縮装置データ・トラフィック・ブロックが生成され、その結果、競合が生じる。更に、書き込みトラフィックは、すべての必要なデータが圧縮装置にとって使用可能になるまで実行することができず、圧縮装置は、メモリ書き込み機能停止が一般的であるように（数百サイクルの周期で）データを処理していた。これらの方式はすべて、大量の未使用のメモリを準備し、メモリ・プレッシャ（memory pressure）として知られた問題を軽減するために特殊なソフトウェアを頼りにしている。このメモリ・プレッシャの問題は、全体の圧縮率が不十分であり且つ実メモリ使用率が高いため、圧縮メモリにデータを保存するには、そのとき使用可能なメモリよりも多くのメモリが必要であるというときに生じる。
【０００８】
データを保存するためにメイン・メモリにおけるスペースを、それを未使用にするのとは対照的に、最大にし得ることが望ましいであろう。圧縮／圧縮解除オペレーションを回避することによって参照待ち時間を減少させるためには、実用的な量の非圧縮データをメイン・メモリに保存することも望ましいであろう。十分に圧縮し得ないデータ・ブロックに関するその後の不要な圧縮活動を軽減するために、圧縮オペレーションのオーバヘッドを被った後のデータ・ブロックに対する圧縮可能度を、各データ・ブロックに関連してメモリに保持することも望ましいであろう。更に、プロセッサがデータを必要とする前に圧縮解除活動／圧縮活動を遂行できること、および、メイン・メモリが使用されることがないときに、メモリに対するプロセッサのアクセスとの競合条件を緩和できることが望ましいであろう。最後に、圧縮メモリ・マネージャのハードウェアがメモリ・プレッシャ条件に即座に応答し、それによって無駄なメモリ予約のサイズを減少させることが望ましいであろう。
【特許文献１】米国特許第５,８１２,８１７号
【特許文献２】米国特許第６,３４９,３７２ Ｂ１号
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、圧縮メモリ・システムにおいて、データ・アクセスが圧縮および拡張に伴う待ち時間の不利を被らなければならない場合の条件を緩和するために、非圧縮フォーマットでデータを保存するために利用される圧縮メイン・メモリの量を最大にするためのデータ管理方法を提供することにある。
【００１０】
本発明のもう１つの目的は、使用可能なメモリの量が所定の閾値から外れたときを検出することによって圧縮メイン・メモリ全体の圧縮率を調整し、それに応答して、使用可能なメモリの量が所定の範囲内になるまで、メモリ・システムがビジーでないとき、またはビジー状態に関係なく優先的に、圧縮のための（使用可能なメモリに加えるために）データ・ブロックを選択すること、または圧縮解除のための（非圧縮データのための余分な使用可能なメモリを使用するために）データ・ブロックを選択することを開始する方法および装置を提供することにある。
【課題を解決するための手段】
【００１１】
本発明は、圧縮データ・ブロックおよび非圧縮データ・ブロックを含むデータ・ブロックのセクタを有するメモリを具備したコンピュータ・システムを含む。そのメモリに対して動作関係に接続されたセクタ・カウンタが、そのメモリの使用済みメモリ・セクタ・カウントを維持するように適応する。圧縮メモリ・マネージャがそのメモリに対して動作関係に接続される。更に、本発明は、圧縮メモリ・マネージャに対して動作関係に接続された、圧縮メモリ閾値を含む圧縮メモリ閾値レジスタを有する。セクタ変換テーブルがそのメモリに対して動作関係に接続され、データ・ブロックが最後にアクセスされた時を表すタッチ・ビットを含む。拡張メモリ閾値レジスタが圧縮メモリ・マネージャに対して動作関係に接続され、拡張メモリ閾値を含む。圧縮メモリ・マネージャは、使用済みメモリ・セクタ・カウントが圧縮メモリ閾値を越えたときにメモリにおけるデータ・ブロックを圧縮するように適応する。タッチ・ビットに基づいて、最近のアクセス頻度の小さいデータ・ブロックが、最近のアクセス頻度の大きいデータ・ブロックよりも前に圧縮される。圧縮メモリ・マネージャは、更に、使用済みメモリ・セクタ・カウントが拡張メモリ閾値よりも下になったときにデータ・ブロックを圧縮解除するように適応する。
【００１２】
本発明は、更に、メモリに対して動作関係に接続されたメモリ・コントローラを有し、そのメモリ・コントローラはメモリ・アクセス・リクエストを遂行してないときだけ圧縮メモリ・マネージャによる圧縮および圧縮解除が行われる。優先圧縮メモリ閾値を含む優先圧縮メモリ閾値レジスタが圧縮メモリ・マネージャに対して動作関係に接続される。圧縮メモリ・マネージャは、更に、使用済みメモリ・セクタ・カウントがメモリ・コントローラのメモリ・アクセス・リクエスト活動に関係なく、優先圧縮メモリ閾値を越えるときにメモリにおけるデータ・ブロックを圧縮するように適応することが可能である。セクタ変換テーブルが、「すべてゼロ」のデータ・ブロックを表すゼロ属性を含んだデータ・ブロックの圧縮属性を含む。圧縮メモリ・マネージャは、更に、ゼロ属性を有するデータ・ブロックをゼロ・エントリとしてメモリに保存するように適応する。なお、ゼロ・エントリが、メモリ・セクタを使用することを防止する。圧縮メモリ・マネージャは、更に、低圧縮率属性を有するデータ・ブロックを圧縮する前に高圧縮率属性を有するデータ・ブロックを圧縮するように適応する。
【００１３】
本発明は、コンピュータ・システムにおけるセクタ化された圧縮メモリを利用する方法を提供する。その方法は、メモリの使用済みメモリ・セクタ・カウントをモニタすること、その使用済みメモリ・セクタ・カウントが圧縮メモリ閾値を越えるとき、メモリにおけるデータ・ブロックを圧縮すること、および、その使用済みメモリ・セクタ・カウントが拡張メモリ閾値よりも小さいとき、データ・ブロックを圧縮解除することを含む。本発明は、最近のアクセス頻度の大きいデータ・ブロックを圧縮する前に、最近のアクセス頻度の小さいデータ・ブロックを圧縮する。圧縮および圧縮解除は、コンピュータ・システムにおける圧縮メモリ・マネージャがメモリ・アクセス・リクエストを遂行しようとしていないときに遂行される。更に、本発明は、圧縮メモリ・マネージャのメモリ・アクセス・リクエスト活動に関係なく、使用済みメモリ・セクタ・カウントが優先圧縮メモリ閾値よりも小さいときにメモリにおけるデータ・ブロックを圧縮する。本発明は、「すべてゼロ」を有するデータ・ブロックをゼロ・エントリとしてメモリに常に記憶し、ゼロ・エントリがメモリ・セクタを使用しないようにする。本発明は、低圧縮率属性を有するデータ・ブロックを圧縮する前に高圧縮率属性を有するデータ・ブロックを圧縮する。圧縮解除は、単に、非圧縮データ・ブロックだけを圧縮解除しないようにする。本発明は、コンピュータ・システムにおけるキャッシュに保持されたデータ・ブロックを圧縮しないようにする。
【００１４】
本発明によれば、所与の転送サイクルにおけるデータが「すべてゼロ」である時を示すことを目的として、ゼロ・データを検出するための手段が圧縮装置の書き込みバッファへのデータ・パスに存在する。所与のデータ・ブロックに対するいずれの転送サイクルもゼロでないとき、そのデータ・ブロックは非ゼロ・データ・ブロックである。十分なフリー・メモリが存在するとき、非ゼロ・データ・ブロックは、すべて、（圧縮装置を迂回して）非圧縮フォーマットで保存される。それ以外のデータは、スペース上の余裕が存在するとき、圧縮され、圧縮済みのものとして保存される。３ビットの圧縮可能度（Degree of Compressibility &#8211; ＤＯＣ）属性が導入され、すべてのデータ・ブロックに対する圧縮メモリ・ディレクトリ・エントリに保存される。使用可能なメモリの量が閾値境界から外れる場合、圧縮メモリ・マネージャは、それが圧縮メモリ・ディレクトリのＤＯＣフィールドをスキャンするとき、（圧縮または圧縮解除を通して）メモリを救済するための最も圧縮可能なデータ・ブロックまたはメモリを拡張するための圧縮済みデータ・ブロックの選択を開始することを可能にされる。このプロセスは、使用可能なメモリが所定の閾値境界内に戻るまで継続する。
【００１５】
本発明が非圧縮キャッシュを有するシステムに適用されるとき、キャッシュされていないデータ・ブロックだけが再圧縮に対する候補である。本発明は、更に、圧縮メイン・メモリから失効データを取り除く。そうしないと、非圧縮キャッシュが使用されないとき、メイン・メモリから最近読み出されたデータ・ブロックのアドレスの小型バッファ（一般には、３２、６４、または１２８エントリのバッファ）がハードウェアで維持され、従って、そのバッファにおいて見つからないデータ・ブロックだけが再圧縮のための候補である。
【発明を実施するための最良の形態】
【００１６】
図面、特に、図１を参照すると、コンピュータ・システム１００のブロック図が示される。コンピュータ・システム１００は、一般的な共用メモリ・コントローラ１０２に接続された１つまたは複数のプロセッサ１０１を含み、メモリ・コントローラはシステム・メイン・メモリ１０３に対してアクセスを行うものである。共用メモリ・コントローラ１０２は、メイン・メモリに最大限に保存するために一定サイズの情報ブロックをできるだけ小さいブロックに圧縮するための圧縮装置１０４、その保存された情報がそれ以後にメイン・メモリから検索された後で圧縮オペレーションを逆行するための圧縮解除装置１０５、および圧縮装置を宛先としたメイン・メモリ保存リクエストの情報ブロックを待ち行列に入れるための書き込みキュー１１３を含む。他のプロセッサおよび／または共用メモリ・コントローラの間で非圧縮情報を搬送するために、プロセッサ・データ・バス１０８が使用される。メイン・メモリ１０３から圧縮解除装置１０５を介してまたはそれを迂回して、更に、マルチプレクサ１１１を介してプロセッサ・データ・バス１０８に情報を転送することが可能である。同様に、プロセッサ・データ・バス１０８から書き込みキュー１１３および圧縮装置１０４を介してまたはそれを迂回して、更に、マルチプレクサ１１２を介してメイン・メモリ１０３に情報を転送することも可能である。
【００１７】
メイン・メモリ１０３は、一般に、メイン・メモリ・コントローラ１０６によって制御されるアクセスを伴うダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）から構成される。プロセッサ・アドレス／制御バス１０７上に生じるアドレスは実アドレスとして知られている。それはプログラミング環境では理解されており、周知である。メイン・メモリ・アドレス／制御バス１０９上に生じるアドレスは物理アドレスとして知られている。それはメモリ・コントローラおよびメイン・メモリＤＲＡＭの間でのみ使用され、意味のあるものである。メモリ・コントローラ１０６におけるメモリ管理ブロック（ＭＭＵ）ハードウェアは、実プロセッサ・アドレスを仮想物理アドレス・スペースに変換するために使用される。この変換は、圧縮された情報、従って、可変サイズの情報を効果的に保存および検索する目的で物理的メモリを小さいインクリメントで割り振るための手段を提供する。
【００１８】
圧縮装置１０４は、所定のサイズの情報ブロック、即ち、１０２４バイトを操作する。その操作は、そのブロックにおける反復したバイト・ストリングを見つけてそれを所与のストリングの第１インスタンスに対するポインタでもって置換することおよびプロトコルに従ってその結果をエンコードすることによって行われる。このプロセスは、所定の長さにわたるバイト単位の比較を通して生じ、シーケンス・カウンタによって速度調整され、その結果、一定の完成時間が生じる。圧縮装置が圧縮を保証するほど十分には始めのブロック・サイズを減少させ得なかったとき、後方のプロセスの出力ブロックは、数ブロックからオリジナル・ブロックのサイズまでの範囲になる。圧縮解除装置１０５は、その結果として生じた圧縮装置の出力ブロックをデコードし、上記のポインタにより指示された位置におけるブロックにバイト・ストリングを挿入し、それによってオリジナル情報ブロックを再構成することにより、圧縮装置のオペレーションを逆行することによって機能する。最良の環境においても、圧縮装置は、一般に、周辺のシステムにおけるデータ率帯域幅の１／４乃至１／２の能力しか持たない。圧縮および圧縮解除のプロセスは、本来、線形および直列的であり、ハードウェアを通して非常に長い待ち時間のメモリ・アクセスを意味する。
【００１９】
図２を参照すると、メイン・メモリを区分するための構造が項目２００として示される。圧縮メイン・メモリ２０５はプロセッサ・プログラムおよびデータ、並びに、情報をアクセスするにはなくてはならないすべての必要なデータ構造を含むので、この圧縮メイン・メモリ２０５は論理エンティティである。この論理圧縮メイン・メモリ２０５は、物理メモリ・アドレス・スペース２０６から物理的に区分される。ある場合には、メイン・メモリ２０５は、整数ディレクトリまたは外部に実装されたディレクトリを有するキャッシュとして働くための別の領域を提供するように使用可能な物理的メモリよりも小さい。キャッシュ・ストレージが実装されるとき、そのキャッシュ・ストレージは、物理メモリ２０６の領域２０１として、または管理された量の非圧縮セクタとして、または別のストレージ・アレイとして実装することが可能であることに留意すべきである。いずれの場合も、キャッシュ・コントローラが実装されるとき、そのキャッシュ・コントローラは、圧縮メイン・メモリに対するアクセスを、キャッシュが存在しない場合にプロセッサがそのようなアクセスを要求するのと同様に、要求するであろう。
【００２０】
論理圧縮メイン・メモリ２０５はセクタ変換テーブル２０２に区分される。残りのメモリは、圧縮情報または非圧縮情報、フリー・セクタ・ポインタ、あるいは、任意の他の情報（それがセクタに編成される限り）を含み得るセクタ・ストレージ２０３に割り振られる。そのセクタ変換テーブル領域のサイズは、システム内のプログラマブル・レジスタによって定義された実アドレス・スペースのサイズに比例して変わる。詳しく云えば、下記の式（１）が、セクタ変換テーブル領域のサイズの変換を管理する：
(数１)
セクタ変換テーブル・サイズ＝（実メモリ・サイズ／圧縮ブロック・サイズ）＊
変換テーブル・エントリ・サイズ                                        （１）
【００２１】
各エントリは、プロセッサの実アドレス・スペースにおける一定のアドレス範囲に直接にマップされ、リクエスト・アドレスは下記の式（２）に従って管理される：
(数２)
セクタ変換テーブル・エントリ・アドレス＝（実アドレス／圧縮ブロック・サイズ）＊変換テーブル・エントリ・サイズ＋オフセット・サイズ                      （２）
【００２２】
例えば、マッピングは、数量２５６バイト・セクタとして割り振られた１０２４バイト実アドレスの圧縮ブロックをリロケートするために１６バイト変換テーブル・エントリを使用する。なお、その２５６バイト・セクタの各々は、テーブル・エントリに保存された２５ビット・ポインタによって表された物理メモリ・アドレスで位置指定される。また、そのテーブル・エントリは、有効なセクタ・ポインタの番号、サイズ、またはその他の情報を表す属性ビット２０８も含む。メイン・メモリに対するすべての実アドレス参照は、リクエスト・アドレス２１０を含む実アドレス・ブロックに対応した変換テーブル・エントリ２０７をメモリ・コントローラに参照させる。
【００２３】
読み取りリクエストに関して、ＭＭＵは、属性ビット２０８をデコードし、有効なポインタ２０９を取り出し、指示されたセクタ２０４における位置指定された情報をメイン・メモリ記憶領域２０３から読み出すようにメモリ・コントローラに要求する。同様に、書き込みリクエストの結果、ＭＭＵおよびメモリ・コントローラは、情報がメイン・メモリに書き込まれることを除いて同じ動作を遂行する。しかし、書き込みリクエストが、変換テーブル・エントリにおいて既に有効である更なるセクタを要求する場合、書き込みが開始する前に追加のセクタがテーブル・エントリに割り当てられる必要がある。セクタは、一般に、スタックとして動的に維持された未使用セクタのリスト、または未使用セクタに保存されたポインタのリンクしたリストから割り振られる。データを保存するために割り振られたセクタの絶対数は、セクタ使用済みカウンタによって、または、セクタが未使用セクタ・リストに／から転送されるときにいつも調節されるセクタ・フリー・カウンタによって、常に知られている。この変換方式に関しては多くの可能な変更が存在するが、いずれもセクタ変換テーブルとしてマップされたメイン・メモリの領域およびセクタとしてマップされたメモリの領域を必要とする。ＤＲＡＭベースのメイン・メモリにおけるこれらのデータ構造のストレージは、最低のコストで最高のパフォーマンスを提供し、しかも、圧縮および変換なしにメモリ・システムを一般的なダイレクト・マップ・メモリに戻すことを容易にする。
【００２４】
代表的な圧縮メイン・メモリ・システムを説明したが、次に本発明の一実施例を詳細に説明する。本発明によれば、圧縮メモリ・マネージャ(ＣＭＭ)ハードウェアに圧縮メモリ内の非圧縮データの量を最大にさせる目的で、割り振られたメモリ・セクタ・カウントがある規定された範囲から外れた時を検出するために、３つのプログラマブル・レジスタが、所定閾値を設定する手段を提供する。拡張メモリ閾値（ＥＭＴ）レジスタ、圧縮メモリ閾値（ＣＭＴ）レジスタ、および優先圧縮メモリ閾値（ＰＣＭＴ）レジスタが、常に、セクタ使用済みカウンタと比較される。セクタ使用済みカウンタの値がＥＭＴよりも小さいとき、ＣＭＭハードウェアは、圧縮データ・ブロックを位置指定および拡張することが可能にされる。逆に、セクタ使用済みカウンタの値がＣＭＴまたはＰＣＭＴよりも大きいとき、ＣＭＭは、拡張データ・ブロックを位置指定および圧縮することが可能にされる。ＣＭＭは、それが上記のように可能にされるとき、それがＰＣＭＴによって可能にされるときを除いて、メモリがプロセッサ発生のアクセス・リクエストをサービスすることにビジーでないときにだけ動作する。この場合、ＣＭＭは、圧縮を通して未使用セクタのプールに開放されるメモリ・セクタの量を最大にするようプロセッサ活動に関係なく動作し、それによって、その未使用のセクタ・プールが危険なまでに少なくなるとき、メモリ・プレッシャ条件を緩和する。
【００２５】
ＣＭＭがＳＴＴを参照するとき、それはＳＴＴエントリ、一般には、４乃至６個のエントリのブロックをアクセスするであろう。ＣＭＭは、プログラマブル・レジスタに従って、ＳＴＴを周期的に参照するように実装することも可能である。新たなランタイム・メモリ要件に適応するよう調整境界を再定義するために、ソフトウェアがシステム・オペレーション中にいつでもそれらのレジスタを再プログラムすることが可能である。閾値付近のセクタ使用済みカウントをディザリングするとき、拡張モードと縮小モードとの間のＣＭＭ変動を回避するために、あるレベルのヒステリシスがそれらの閾値に適用される。例えば、ＣＭＭは、セクタ使用済みカウンタ値がＣＭＴよりも大きいときにイネーブルされ、セクタ使用済みカウンタ値がＣＭＴとヒステリシス・オフセットとの差（一般には、６４）よりも小さくなるまでそのままである。いずれの閾値に対するすべての更なる参照も、そのように明確に述べない場合、ヒステリシス・オフセットを意味する。
【００２６】
上記のように、あるデータ・ブロック・パターンは、圧縮結果が、それを表すための特殊ビットと共に関連のＳＴＴエントリ自体において適合するに十分なほど小さく、使用可能なメモリ・セクタを必要としないほど高度に圧縮可能である。本発明は、正規の圧縮装置および圧縮解除装置オーバヘッド（待ち時間および帯域幅）を被ることなくそのようなデータ・ブロック・パターンの「すべてゼロ」のケースを検出するための手段を提供し、従って、そのハードウェアが他のデータ・ブロックを並行して操作することを可能にする。「ゼロ・データ圧縮装置」は、所与の転送サイクルにおけるデータが「すべてゼロ」であるときを表す目的で、圧縮装置書き込みバッファへのパスにゼロが存在するときを検出する。所与のデータ・ブロックに対するいずれの転送サイクルもゼロでないとき、そのデータ・ブロックは非ゼロのデータ・ブロックである。そうでない場合、そのデータ・ブロックは、「ゼロ」ケースであり、特別にエンコードされたＳＴＴエントリとして直ちに保存することが可能である。常に「ゼロ」のデータ・ブロックは、すべて、圧縮効率を得るように圧縮されて保存される。メモリ読み取りアクセス中に「ゼロ」ケースがデコードされるとき、メモリ・コントローラは、単に、データ・ブロック圧縮解除オペレーションなしで「すべてゼロ」の応答を供給する。非ゼロのデータ・ブロックは、すべて、十分なフリー・メモリが存在するとき、（圧縮装置を迂回して）非圧縮フォーマットで保存される。十分なフリー・メモリが存在する場合、スペース上の有利性が存在するとき、データは圧縮され、圧縮済みとして保存される。
【００２７】
図６を参照すると、本発明の原理に従って、「すべてゼロ」のデータ・ブロックを検出するための手段を有するメモリ制御装置が示される。圧縮解除装置６０９の出力データ・バス６０１へのデータ・フローおよびプロセッサ・データ・バス６０３からのデータ・フローでは、プロセッサが、マルチプレクサ６０２によって改良される。即ち、マルチプレクサ６０２は、圧縮解除装置６０９の出力データを、ゼロ検出装置６０４および書き込みキュー６０５を介して圧縮装置６０６にラップするための手段を提供し、メモリ・コントローラ６０７が非圧縮メイン・メモリ・データ・ブロックの圧縮および圧縮メイン・メモリ・データ・ブロックの拡張を行うための手段を提供する。更に、ゼロ検出装置（バス・ワイド論理ＯＲ機能）６０４は、プロセッサ・データ・バス６０３または圧縮解除装置データ・バス６０１から圧縮装置６０６の書き込みキュー６０５へのデータ・ブロック転送と関連したいずれの特定のサイクルもゼロでない時を検出するための手段を提供する。この論理条件は論理信号６０８によってメモリ・コントローラ６０７に搬送される。メモリ制御の下での圧縮は、マルチプレクサ６１０によって非圧縮のデータ・ブロックに圧縮解除装置６０９を迂回させ、マルチプレクサ６０２およびゼロ検出装置６０４を介して書き込みキュー６０５へ循環させる。従って、データは、マルチプレクサ６１１によって圧縮装置６０６を通過または迂回してメモリに書き戻すことが可能である。メモリ制御の下での拡張は、圧縮されたデータ・ブロックに、圧縮解除装置６０９、マルチプレクサ６１０およびマルチプレクサ６０２、更にゼロ検出装置６０４を介して書き込みキュー６０５へ循環させる。従って、データは、「すべてゼロ」の特殊ケースまたは非圧縮の場合のように、マルチプレクサ６１１によって圧縮装置６０６を迂回してメモリに書き戻すことが可能である。
【００２８】
図３を参照すると、本発明の原理に従って修正され改良された圧縮メモリ・セクタ変換テーブル(ＳＴＴ)３０２が示される。プロセッサが特定のデータ・ブロックをアクセスしたときを表すために、タッチ（Ｔ）ビット３０４がＳＴＴエントリ３０１に含まれる。このビットは、ＳＴＴエントリが、プロセッサ読み取りまたは書き込みリクエストをサービスするためにアクセスされるたびにセットされる。ＣＭＭは、それがいずれかのＳＴＴを更新するときに、このビットをリセットする。
【００２９】
８個の独特の圧縮属性をデコードするために、３ビットの「圧縮可能度（ＤＯＣ）」属性フィールド３０３が各ＳＳＴエントリ３０１に含まれる。ＤＯＣは、データ・ブロックが「すべてゼロ」の特殊ケースであることを表すために「ゼロ」を含む。その「すべてゼロ」の特殊ケースは、圧縮メモリ・セクタを使用せずにＳＳＴに圧縮され、圧縮装置を迂回するものであり、圧縮解除されることがない。ＤＯＣは、データ・ブロックが総圧縮率（特殊ケースであるがゼロではない）を有することを表すために「特殊」も含む。その「特殊」ケースは、圧縮メモリ・セクタを使用せずにＳＳＴエントリに圧縮される。ＤＯＣは、データ・ブロックが高い圧縮率を有することを表すために「高」を含む。「高」圧縮データ・ブロックは、メイン・メモリ記憶装置の１つまたは２つのメモリ・セクタを含む。ＤＯＣは、データ・ブロックが中間の圧縮率を有することを表すために「中間」も含む。「中間」圧縮データ・ブロックは、メイン・メモリ記憶装置の３つのメモリ・セクタを必要とする。ＤＯＣは、データ・ブロックが低い圧縮率を有することを表すために「低」も含む。「低」圧縮データ・ブロックは、メイン・メモリ記憶装置の４つのメモリ・セクタを必要とするが、それは「無（nil）」ケースではない。ＤＯＣは、データ・ブロックが未知の圧縮率を有することを表すために「未知」を含む。「未知」の非圧縮データ・ブロックは、圧縮されてないか、圧縮装置を迂回したか、または、最後の圧縮以後に修正されている。ＤＯＣは、データ・ブロックが圧縮可能ではない、即ち、圧縮が実用的でないことを表すために「無」を含む。ＤＯＣは、データ・ブロックが圧縮されるべきでないことを表すために「不可（never）」を含む。「不可」は、圧縮が所与のデータ・ブロックに対して回避されるべきであるときにアプリケーション特有のパフォーマンス最適化のためのソフトウェアによってのみセットされる。
【００３０】
ＤＯＣの値「ゼロ」乃至「無」はハードウェアによって設定され、「不可」というＤＯＣの値はソフトウェアによって設定または変更される。ＣＭＭがメモリを圧縮しようとしているとき、それは、圧縮のための最も有益な非圧縮データ・ブロック、例えば、最高の圧縮率を有するデータ・ブロックを選択する。ＣＭＭがメモリを拡張しようとしているとき、圧縮データ・ブロックまたは未知のデータ・ブロックだけが圧縮解除のために選択される。本発明が非圧縮キャッシュを有するシステムに適用されるとき、キャッシュされないデータ・ブロックだけが再圧縮のための候補である。別の方法では、メイン・メモリから読み取られた最新のデータ・ブロック・アドレスの小型バッファ（一般には、３２または６４）がハードウェアで維持され、バッファにおいて見つからなかったデータ・ブロックだけが再圧縮のための候補である。初期設定時、有効なエラー訂正を設定するために、物理メモリ全体が１つのパターンで持って満たされる。デコードすることが可能である複製された充填パターンを可能にするために有効ＳＴＴの「すべてゼロ」ケースのような方法でＳＳＴエンコーディングが定義される。メモリは、この時点でできるだけ十分に圧縮される。データがソフトウェア「ブート」中にメモリに書き込まれるとき、メモリ・コントローラはデータ・ブロックの圧縮解除を開始し、新しいデータを収容するためにセクタを割り振り、そして関連のＴビットを設定するであろう。セクタ使用済みカウントがＥＭＴよりも上になるまで、データ・ブロックは決して圧縮されない。そのカウントがＥＭＴよりも下である間、ＣＭＭは、拡張可能な圧縮データに関してＳＴＴをスキャンしようとするだろうし、何も検出されなくても、Ｔビットがリセットされるであろう。セクタ使用済みカウントがＣＭＴを越えるとき、ＣＭＭは、データ・ブロックに関してＳＴＴのスキャンを開始し、非圧縮データを読み取り、圧縮し、しかる後、「低」または「無」以外のＤＯＣであってＴでないデータ・ブロックに対してその圧縮データを復元し、そして、すべてのケースにおいて、その計算されたＤＯＣを反映し、ＴビットをリセットするようにＳＴＴエントリを更新する。データの再圧縮はセクタを空き状態にし、セクタ使用済みカウントを減じる。そのカウントがＣＭＴよりも下になるとき、ＣＭＭは停止する。なお、このプロセスは、使用可能なメモリにおいて最大量の非圧縮データを維持すると同時に、最も圧縮可能な最も少ない参照のデータ・ブロックおよびゼロのデータ・ブロックすべてが圧縮されるという結果を生じる傾向がある。
【００３１】
図４を参照すると、圧縮メイン・メモリにおける非圧縮データの量を最大にすると共に、すべてのゼロ・データ・ブロックを特別に処理するための特殊な手段によってその圧縮メイン・メモリをアクセスする方法に関する状態図が示される。当初は、メモリのアクセスを求めるリクエストが表明されるまで、メモリ・コントローラはアイドル状態４０１のままである。そのような時、リクエスト状態(アドレス、読み取り／書き込み、サイズ、および「すべてゼロ」の表示)がリクエスト・バッファに捕捉され、リクエスト・フェーズが承認される。しかる後、ステップ４０３において、リクエスト・アドレスからインデックスされたダイレクト・マッピングのＳＴＴエントリがメモリから読み出され、デコードされる。
【００３２】
ステップ４０４におけるメモリ読み取りアクセス・リクエストの決定時に、ステップ４０５において検出された「すべてゼロ」のデータ・ブロックが、ステップ４１０におけるそのリクエストに対する即時データ応答後に完了する。ステップ４０６において検出された特殊ケースのデータ・ブロックは、先ず、ステップ４０９において圧縮解除されなければならず、しかる後、ステップ４１０においてデータ・リクエストに対するデータ応答が発生され、それと並行して、本発明は、ステップ４１２においてその非圧縮データをメモリに戻して保存する。その他のデータ・ケースは、すべて、ステップ４０４からステップ４０５および４０６を介してステップ４０７に進む。ステップ４０７では、ＳＴＴエントリによって表されたメモリ・セクタからデータが読み出される。ステップ４０８においてそのデータが圧縮されたことをＳＴＴエントリが表すとき、それは、ステップ４０９において圧縮解除され、しかる後、ステップ４１０において応答し、ステップ４１２において、非圧縮のものとして再保存される。それとは別に、ステップ４０８において、データが既に非圧縮のものであるとされるとき、ステップ４１０において、データ応答が直ちに遂行される。
【００３３】
ステップ４０４におけるメモリ書き込みアクセス・リクエストの決定時に、ステップ４１３においてデータ・ブロックが「すべてゼロ」であると決定された場合、ステップ４１２において、データ・ブロックは、特別にエンコードされたＳＴＴエントリとして保存される。ステップ４１４において十分なストレージが使用可能である場合（セクタ使用済みカウント＜ＥＭＴレジスタの場合）、非ゼロのデータ・ブロックがメモリに直接に保存され、そうでない場合、データは、先ず、ステップ４１５において圧縮され、しかる後、ステップ４１２においてそのデータの保存が行われる。
【００３４】
図５を参照すると、圧縮メイン・メモリが、指定された範囲内での記憶装置全体の利用を維持しながら最大量の非圧縮データを持つことを目的として、その圧縮メイン・メモリにおけるデータ圧縮を調整する方法に関する圧縮メモリ・マネージャ（ＣＭＭ）の状態図が示される。ＣＭＭは、最近の使用状態、圧縮可能度（ＤＯＣ）に従って、メイン・メモリにおけるデータ・ブロックを二者択一的に圧縮または拡張することによってメイン・メモリの利用を調整する。ＣＭＭは、メモリにおけるＳＴＴの範囲全体にわたってＳＴＴエントリの各ブロックを逐次に読み取りおよび書き込む。ＣＭＭは、先ず、バッファを空にし、しかる後、エントリの次のブロックを読み取る。ＳＴＴバッファに保持されたＳＴＴエントリの範囲に対するいずれのアクセスも、ＳＴＴメモリにおいてＳＴＴエントリを直接に参照する代わりに、そのバッファからサービスされる。ＣＭＭは、そのバッファがメモリに書き戻される前に、そのバッファにおける各ＳＴＴエントリを逐次に操作する。最初に、およびプログラマブル・イネーブル・ビットによってディセーブルされるとき、ＣＭＭはアイドル状態５０１にある。しかし、イネーブルされたときは、割り振られたメモリ・セクタ・カウントまたはセクタ使用済みカウンタが拡張メモリ閾値（ＥＭＴ）（データの拡張）レジスタ、圧縮メモリ閾値（ＣＭＴ）（データの縮小）レジスタ、または優先圧縮メモリ閾値（ＰＣＭＴ）（データの優先圧縮）レジスタによって定義された範囲の外にあるとき、条件５０２に応答する。そのような時、ステップ５０３において、バッファ・ポインタが進められ、ステップ５０４において、バッファが空であるかまたはバッファ・ポインタが第１エントリにラップされたとき、全バッファがメモリに書き戻され、ステップ５０５において、ＳＴＴエントリの次のブロックがメモリから読み出されてバッファを満たす。そうでない場合、ステップ５０４において、バッファ・ポインタは有効なＳＴＴエントリを選択する。ステップ５０６において、ＣＭＭは最近の読み取り（ＭＲＲ）バッファにおいて見つかったＳＴＴエントリをスキップするが、ステップ５１５において、タッチ（Ｔ）ビットがリセットされ、ＣＭＭ制御はアイドル状態５０１にループ・バックする。ＣＭＭは、ステップ５０８における拡張または縮小に関連して、ステップ５０６においてスキップされなかったエントリを評価する。
【００３５】
既に圧縮されているデータ（または、十分には圧縮し得ないデータ）を圧縮することは不必要である。データ・ブロックが最近参照され（Ｔセット）、メモリが優先的に圧縮されない場合、ステップ５０９において、ＣＭＭは、その選択されたデータ・ブロックの圧縮をスキップし、制御がアイドル状態５０１に戻される前にＴビットをリセットする。そうでない場合、ステップ５０９において、データは圧縮されるであろうが、ステップ５１０において、ＳＴＴで指定されたロケーションにおいてメモリから最初に読み出されなければならない。ステップ５１１において「すべてゼロ」を含むものとして検出されたデータ・ブロックは圧縮をスキップする。そうでない場合、ステップ５１２において、データ・ブロックが圧縮され、ステップ５１３においてＳＴＴに完全に圧縮したデータ・ブロックは、ＳＴＴエントリのＤＯＣ更新、Ｔビット、およびデータ・ブロック・メモリがステップ５１５において「フリー・メモリ」プールに割当解除されるという結果を生じる。Ｔビットおよびデータ・ブロック・メモリがステップ５１３において有益に圧縮可能でないデータ・ブロックはメモリにおいて未変更のままであり、ステップ５１５において、ＤＯＣ更新およびＴビット・リセットを受けるだけである。そうでない場合、ステップ５１３に続いて、ステップ５１４において、圧縮データがメイン・メモリに保存され、しかる後、ＳＴＴエントリＤＯＣが更新され、ステップ５１５において、新しい圧縮データ・ロケーションが更新され、データ・ブロック・メモリが「フリー・メモリ」プールに割当解除される。しかる後、制御がアイドル状態５０１に戻される。
【００３６】
ステップ５１６では、既に非圧縮のデータまたは「すべてゼロ」の圧縮データを拡張することは不必要であるので、ステップ５１５において、ＣＭＭ制御がアイドル状態５０１に再び戻る前にＴビットだけはリセットされる必要がある。ステップ５１６における別の場合では、ステップ５１９において、データが圧縮解除されることになる。従って、圧縮データは、ステップ５１７において、ＤＯＣ＝特殊であるときにＳＴＴエントリ自体から取り出されるか、または、ステップ５１８において、ＳＴＴエントリにより表されたメイン・メモリのロケーションから読み出され、しかる後、ステップ５１９において、それは圧縮解除される。その非圧縮データは、ステップ５１４において、メイン・メモリに保存され、ＳＴＴエントリがその非圧縮データの新しいロケーションでもって更新され、ＣＭＭ制御がアイドル状態５０１に戻される前にＴがリセットされる。
【００３７】
この実施例は、キャッシュ構造体を持たない最低コストの実施態様を表す。しかし、本発明は、より高いパフォーマンスを得るために一般的な独立したキャッシュと共に使用することが可能である。上記の実施例は、閾値条件５０２が正当であるときに機能するだけであるということを示唆するが、ＣＭＭ機能は、ＤＲＡＭにおいて累積することがあり得る「ソフト」エラーを検出および除去するためにＳＳＴメモリを「消し込む（scrubbing）」ための周期的インターバルに対するものであってもよい。好適な実施例はＳＳＴエントリにおける個別の「圧縮」フラッグを開示しているが、この状態は、更なる圧縮率属性に対するエンコーディング・スペースを提供するために圧縮可能度（ＤＯＣ）に集約させることが可能である。
【００３８】
好適な実施例は、特に、特殊な「ゼロ」データ・ブロック検出装置およびそのような状況に対して圧縮装置および圧縮解除装置を迂回するための方法を開示しているが、データ・フローのパスにおける固定長のパターンのいかなる反復も検出するように、そのような検出装置を容易に機能強化することが可能であることは当業者には明らかであろう。「ゼロ」ケースは、コンピュータ・システムにおける最も顕著なケースであるが、検出装置が所定の一定長の如何なる反復パターンをも検出するように設計されるとき、わずかなパフォーマンス・ゲインが実現可能であることが認められている。
【００３９】
本発明を使用する圧縮メイン・メモリ・システムは、メモリ圧縮によってもたらされる利点をこれまでどおり保持しながら、全体的により少ないメモリ読み取り待ち時間（より高いパフォーマンス）から恩恵を享受している。本発明は、使用可能なメモリがデータおよびプログラム・コードを保存するために最大限に利用されるよう、メモリ全体の圧縮率をプロセッサからの保存要求に均衡させるための自動的手段を提供する。メモリ圧縮を使用するいずれのシステムも、本発明からのパフォーマンス上の成果を具現することが可能である。そのようなシステムは、ネットワークまたはＩ／Ｏアダプタ・キャッシュ、ディスク・ストレージ・サブシステム・キャッシュ、およびプロセッサ・メイン・メモリ・システムを含むが、それに限定されない。他のシステムも、「ゼロ」で埋められたデータ・ブロックをハードウェアで検出および処理するための本発明の手段から恩恵を享受することが可能である。特に、データのブロックを転送することを必要とするアプリケーションは、これらのケースを検出すること、および、「ゼロ」データ・ブロックを表すコードを転送することによって、他の転送に対する通信チャネル帯域幅を自由化することから恩恵を享受することが可能である。
【００４０】
本発明を好適な実施例によって説明したが、本発明が「特許請求の範囲」の主旨および範囲内での修正によって具現化可能であることは当業者には明らかであろう。
【図面の簡単な説明】
【００４１】
【図１】ハードウェア圧縮装置および圧縮解除装置を持ったキャッシュおよびメイン・メモリ・システムを有するコンピュータのブロック図である。
【図２】メモリ・アドレス・スペースの区分化を示す図である。
【図３】本発明の原理に従って修正された圧縮メモリ・セクタ変換テーブルを示す図である。
【図４】本発明の原理に従ってキャッシュのない圧縮メイン・メモリ・アクセス制御をアクセスする方法に関する状態図である。
【図５】本発明の原理に従って、メモリ全体の圧縮率に関してキャッシュのない圧縮メモリ内に最適な量の非圧縮データを動的に維持する方法に関する状態図である。
【図６】本発明の原理に従ってメモリ制御装置を示す図である。
【図１】
2005535051.tif 000003
【図２】
2005535051.tif 000004
【図３】
2005535051.tif 000005
【図４】
2005535051.tif 000006
【図５】
2005535051.tif 000007
【図６】
2005535051.tif 000008
【国際調査報告】
2005535051.tif 000009