(57)【特許請求の範囲】
【請求項１】
データを記憶するための記憶域をそれぞれ有する複数のメモリ・ユニットと、
マッパーであって、
複数のマッピング
を有し、
バス・アドレスを含んでデータ値にアクセスする要求を受け取り、
前記バス・アドレスを、前記複数のマッピングのいずれかを用いて、前記記憶域のいずれかを識別する記憶域アドレスに変換する
マッパーと、
前記データ値を、前記複数のメモリ・ユニットのいずれかにある移動元の元記憶域から、他の前記メモリ・ユニットにある移動先の宛先記憶域に移動させるシステム・マネージャであって、
前記元記憶域を識別するポインタを、前記移動が終了するまで保たれるように、前記宛先記憶域に記憶し、
前記ポインタが、前記宛先記憶域に記憶されている間に、前記バス・アドレスを、前記元記憶域の記憶域アドレスに変換するマッピングを、前記バス・アドレスを、前記宛先記憶域の記憶域アドレスに変換するように更新する
システム・マネージャと
を有し、
前記マッパーは、
前記要求に含まれるバス・アドレスが、前記マッピングのいずれかを用いて、前記ポインタを記憶している記憶域の記憶域アドレスに変換されるときには、前記要求に含まれるバス・アドレスを、このポインタが示す前記元記憶域の記憶域アドレスに変換する
コンピュータシステム。
【請求項２】
データを記憶する複数の記憶域の中のデータを移動させる方法であって、前記複数の記憶域それぞれは、複数のメモリ・ユニットのいずれかに含まれ、バス・アドレスを含んでデータ値にアクセスする要求は、前記複数のマッピングのいずれかを用いて、前記データ値を記憶している前記記憶域のいずれかを識別する記憶域アドレスに変換され、
前記データ値を、前記複数のメモリ・ユニットのいずれかにある移動元の元記憶域から、他の前記メモリ・ユニットにある移動先の宛先記憶域に移動させるステップであって、
前記元記憶域を識別するポインタを、前記移動が終了するまで保たれるように、前記宛先記憶域に記憶し、
前記ポインタが、前記宛先記憶域に記憶されている間に、前記バス・アドレスを、前記元記憶域の記憶域アドレスに変換するマッピングを、前記バス・アドレスを、前記宛先記憶域の記憶域アドレスに変換するように更新する
ステップと、
前記要求に含まれるバス・アドレスが、前記マッピングのいずれかを用いて、前記ポインタを記憶している記憶域の記憶域アドレスに変換されるときには、前記要求に含まれるバス・アドレスを、このポインタが示す前記元記憶域の記憶域アドレスに変換するステップと
を含む方法。
【請求項３】
データを複数の記憶域の間で動的に再配置する方法であって、前記複数の記憶域それぞれは、複数のメモリ・ユニットのいずれかに含まれ、
特定のバス・アドレスを、前記複数のメモリ・ユニットのいずれかにあるデータの移動元の元記憶域の記憶域アドレスにマップするマッピングをそれぞれ有する複数のマッパーを用意する段階と、
バス・アドレスを受け取る段階と、
前記マッピングに基づき前記バス・アドレスを記憶域アドレスにマップする段階と、
前記バス・アドレスからマップされた前記記憶域アドレスに基づきデータにアクセスする段階と、
前記マッパーそれぞれによって、前記特定のバス・アドレスが、他の前記メモリ・ユニットにあるデータの移動先の宛先記憶域を識別する記憶域アドレスにマップされるように、前記マッパーそれぞれを更新する段階と、
データの移動が終了するまで保たれるように、前記宛先記憶域に、前記元記憶域を識別するポインタを記憶する段階と、
前記元記憶域から前記宛先記憶域にデータ値を移動させる段階と、
前記更新する段階の間、前記宛先記憶域にアクセスする段階と、
前記アクセスされた宛先記憶域に前記ポインタが記憶されているときに、このポインタが識別する前記元記憶域のデータ値にアクセスする段階と
を含む方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般に、データ処理技術に関し、詳細には、再割当てによってデータ・エラーが生じないようにしながらコンピュータ・システムにおいてメモリを動的に再割当てする方法に関する。
【０００２】
【従来の技術】
大型コンピュータ・システム（または、サーバ）は、様々なアプリケーションに十分な命令およびデータ記憶容量を提供するために複数のメモリ・ユニットを使用することが多い。各メモリ・ユニットは、データを記憶することができる１つまたは複数のビットからなる多数の記憶域を有し、各記憶域は、今後「メモリ・ユニット・アドレス」と呼ぶ特定のメモリ・アドレスと関連付けられ、それにより識別される。データを記憶する命令が実行されるとき、実際にデータを記憶する記憶域を識別するメモリ・ユニット・アドレスを得るために、命令によって定義されたバス・アドレスが使用される。この点について、マッパーが、そのバス・アドレスをバス・アドレスと異なる値を有するメモリ・ユニット・アドレスにマップまたは変換することが多い。異なるメモリ・ユニット・アドレスにマップしたバス・アドレスを利用することに関連した様々な利点がある。
【０００３】
たとえば、多くのコンピュータ・アプリケーションは、バス・アドレスを連続的に使用するようにプログラムされる。換言すると、データを記憶するために最初に使用されるバス・アドレスとしてバス・アドレスの１つが選択される。新しいバス・アドレスをデータの記憶に利用するときは、前に使用したバス・アドレスを増分することにより新しいバス・アドレスを得る。
【０００４】
同じメモリ・ユニット内のメモリ・ユニット・アドレスに連続したバス・アドレスがマップされる場合は、むだが生じることがある。この点に関して、メモリ・ユニットからのデータを記憶し取り出すためにある程度の時間が必要とされる。連続した２つのデータ記憶が同じメモリ・ユニットに行われる場合、第２のデータ記憶は、第１のデータ記憶が完了するまで待たなければならず、その後で第２のデータ記憶を行うことができるる。しかしながら、連続した２つのデータ記憶が、異なるメモリ・ユニットに行われる場合は、第１のデータ記憶が完了する前に第２のデータ記憶が始まることがある。メモリ待ち時間を最小にしメモリ帯域幅を最大にするためには、連続したバス・アドレスが、できるだけ多くのメモリ・ユニットにアクセスしなければならない。このことは、また、メモリ・インターリーブを最大にするように説明することができる。
【０００５】
その結果、前述のマッパーは、しばしば、連続した各バス・アドレスが異なるメモリ・ユニット内のメモリ・ユニット・アドレスに変換されるようにバス・アドレスをメモリ・ユニット・アドレスにマップするように設計される。たとえば、第１の値を有するバス・アドレスが、第１のメモリ・ユニットの記憶域を識別するメモリ・ユニット・アドレスにマップされ、次に高い値を有するバス・アドレスが、メモリ・ユニットの記憶域を識別するメモリ・ユニット・アドレスにマップされる。したがって、単一のコンピュータ・アプリケーションからの２つの連続したデータ記憶が同じメモリ・ユニット内に行われない可能性がある。換言すると、コンピュータ・アプリケーションからの連続したデータ記憶が、メモリ・ユニット全体にわたってインターリーブされる可能性がある。
【０００６】
１つまたは複数のメモリ・ユニットのいくつかの記憶域に記憶されたデータ値を、１つまたは複数のメモリ・ユニット内の他の記憶域に移動することが望ましい状況がある。たとえば、メモリ・ユニットが低い信頼度で動作しているときにメモリ・ユニットのうちの１つを除去することが望ましい場合がある。除去されたメモリ・ユニットに記憶されている可能性のあるデータの損失を防ぐために、メモリ・ユニットを除去する前にメモリ・ユニットを使用するコンピュータ・システムがシャット・ダウンされることがある。メモリ・ユニットを除去した後、コンピュータ・システムが再起動される。この再起動が完了するまでコンピュータ・システムはどのアプリケーションも実行できないため、コンピュータ・システムのシャットダウンと再起動は、メモリ・ユニットを除去することによる望ましくない結果であることは明らかである。
【０００７】
コンピュータ・システムをシャットダウンすることなくメモリ・ユニットをコンピュータ・システムから除去することができるいくつかの技術が開発された。たとえば、プロセッサの仮想記憶マッピング・システムを使用して、物理アドレスを再マップすることができる。その結果、除去されたメモリ・ユニットが新しいメモリ・ユニットと交換されるまで、アプリケーションが一時的に停止し、除去するメモリ・ユニットからディスクやその他のデータ記憶装置にデータが複写される。アプリケーションの実行を停止させる主な理由は、除去するメモリ・ユニットに記憶しかつ／または取出す試みを防ぎデータ・エラーを防止することである。マルチスレッド・アプリケーションのすべてのスレッドならびに入出力システムは、常に、記憶域の見方が一貫していなければならない。
【０００８】
除去したメモリ・ユニットが交換された後、除去されたメモリ・ユニットから複写された前述のデータが、新しいメモリ・ユニットに書き込まれる。次に、アプリケーションの実行が再開される。以上の方法は、コンピュータ・システムがアプリケーションを実行できない時間を短縮するが、コンピュータ・システムがアプリケーションを実行できない時間がまだある程度ある。
【０００９】
データを移動させることが望ましい他の状況があることに注意されたい。たとえば、メモリ内のデータの移動が望ましい場合があるもう１つの状況は、メモリ・レンジのインターリーブを改善し、それによりシステムのパフォーマンスを改善することである。データを別のメモリ・ユニットとの間で移動するときは、コンピュータ・システムが、アプリケーションを実行できない時間を最小限に抑えることが望ましい。
【００１０】
【発明が解決しようとする課題】
したがって、当業界において、コンピュータ・システムにアプリケーションの実行の停止を必要とすることなくデータが様々な記憶域間で移動されるように、コンピュータ・システム内のメモリを動的に再割当てするシステムおよび方法を提供するこれまで取り組まれなかった必要性が存在する。
【００１１】
【課題を解決するための手段】
本発明は、以上考察したような従来技術の欠点および欠陥を克服する。一般に、本発明は、コンピュータ・メモリを動的に再割当てするシステムおよび方法を提供する。
【００１２】
アーキテクチャにおいて、本発明のシステムは、複数のメモリ・ユニット、マッパーおよびシステム・マネージャを利用する。各メモリ・ユニットは、データを記憶する記憶域を含む。そのようなデータ値は、マッパーに結合された１つまたは複数の処理装置から送られる要求に応じてアクセスされる。マッパーが、データ値にアクセスする要求を受け取ると、マッパーは、マッパーによって維持されている複数のマッピングのうちの１つに基づいて、要求に含まれているバス・アドレスをメモリ・ユニット・アドレスに変換する。メモリ・ユニット・アドレスは、要求されたデータ値を記憶している記憶域のうちの１つを識別する。
【００１３】
データ値を元記憶域（source  memory  location）から宛先記憶域（destination  memory  location）に移動させる際、元記憶域を識別するポインタが、宛先記憶域に記憶される。そのポインタが宛先記憶域に記憶されている間に、システム・マネージャは、前述のバス・アドレスを宛先記憶域を識別するメモリ・ユニット・アドレスに変換するようにマッパーが構成されるようにマッピングを更新する。マッパーが受け取った要求のバス・アドレスが、前述のデータ値が元記憶域から宛先記憶域に移動される前に、宛先記憶域を識別するメモリ・ユニット・アドレスに変換された場合は、その要求に応じてポインタがアクセスされる。したがって、ポインタのアクセスは、要求されたデータ値が、宛先記憶域ではなく元記憶域からアクセスされなければならないことを示す。
【００１４】
本発明は、また、１つの記憶域から別の記憶域にデータを動的に移動させる方法を提供することとらえることができる。この方法は、バス・アドレスを含む要求を受け取ってデータにアクセスする段階と、そのバス・アドレスを、複数のマッピングに基づいて、宛先記憶域と元記憶域を含むの複数の記憶域を識別するメモリ・ユニット・アドレスにマップする段階と、バス・アドレスからマップされたメモリ・ユニット・アドレスに基づいてデータにアクセスする段階と、元記憶域から宛先記憶域にデータ値を動的に移動させる段階と、元記憶域を識別するメモリ・ユニット・アドレスにマップされたバス・アドレスが、宛先記憶域を識別するメモリ・ユニット・アドレスにマップされるようにマッピングを更新する段階とによって広義に概念化することができる。
【００１５】
本発明の他の特徴および利点は、以下の詳細な説明を添付図面と共に読み検討することによって当業者に明らかになるであろう。そのようなすべて特徴および利点は、本発明の範囲に含まれ特許請求の範囲により保護されるものである。
【００１６】
本発明は、添付図面を参照することによってより良く理解することができる。図面の要素は、必ずしも互いに原寸ではなく、発明の原理を明確に示すことに重点が置かれている。さらに、同じ参照数字は、いくつかの図面にわたって対応する部分を指す。
【００１７】
【発明の実施の形態】
本発明は、一般に、コンピュータ・メモリを動的に再割当てするシステムおよび方法に関する。図１は、本発明を実施するために利用することができるコンピュータ・システム１２を示す。図１に示したように、コンピュータ・システム１２は、処理システム１５に含まれるメモリに記憶されることが好ましいコンピュータ・アプリケーションの命令を実行するように構成された処理システム１５を含む。処理システム１５は、１つまたは複数のバスを含むことができるローカル・インタフェース２３を介してコンピュータ・システム１２内の他の要素と通信しそれを駆動する。さらに、たとえばキーボードやマウスなどの入力装置２４を使用して、システム１２のユーザからデータを入力することができ、画面表示装置２５またはプリンタ２６を使用してユーザにデータを出力することができる。ディスク記憶機構２７が、ローカル・インタフェース２３に接続されており、不揮発性ディスク（たとえば、磁気的、光学的な）と間でデータをやりとりすることができる。システム１２は、システム１２がネットワーク３４とデータを交換することを可能にするネットワーク・インタフェース３３に接続されることができる。
【００１８】
コンピュータ・システム１２は、また、後でより詳細に説明するように、コンピュータ・システム１２の動作を制御するために使用されるシステム・マネージャ３６を含む。システム・マネージャ３６は、ソフトウェア、ハードウェアまたはそれらの組合せで実施することができる。システム・マネージャ３６は、ソフトウェアで実施されるとき、コンピュータ・ベース・システム、プロセッサ内蔵システム、あるいは命令実行システム、機器または装置から命令を取り出しその命令を実行することができる他のシステムのような命令実行システム、機器または装置よって使用されまたはそれらと関連して使用される任意のコンピュータ可読媒体上に記憶し移植することができることに注意されたい。たとえば、システム・マネージャ３６によって定義される命令は、処理システム１５の１つまたは複数のプロセッサによって実行することができる。
【００１９】
この文書の文脈において、「コンピュータ可読媒体」は、命令実行システム、機器または装置によって使用されまたはそれらと関連して使用されるプログラムを収容、記憶、通信、伝播または伝送することができる任意の手段でよい。コンピュータ可読媒体は、たとえば、電子的、磁気的、光学的、電磁気的、赤外線、あるいは半導体システム、機器、装置または伝搬媒体でよいが、これらに制限されない。コンピュータ可読媒体のより具体的な例（網羅的なリストでない）は、１つまたは複数の線を有する電気接続（電子）、携帯型コンピュータ・ディスケット（磁気）、ランダム・アクセス・メモリ（ＲＡＭ）（磁気）、読取り専用メモリ（ＲＯＭ）（磁気）、消去可能書込み可能な読取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）（磁気）、光ファイバ（光学）および携帯型コンパクトディスク読取り専用メモリ（ＣＤＲＯＭ）（光学）を含む。コンピュータ可読媒体は、プログラムを、たとえば紙やその他の媒体の光学的走査によって電子的に捕捉し、コンパイルし、解釈し、あるいは必要に応じて適切な形で処理し、次にコンピュータ・メモリに記憶することができるような、プログラムが印刷された紙または別の適切な媒体でもよいことに注意されたい。
【００２０】
図２に示したように、処理システム１５は、複数のメモリ・システム３９ａ〜３９ｃに結合された複数の処理ユニット３７ａ〜３７ｅを含む。図３に示したように、各処理ユニット３７ａ〜３７ｅは、当技術分野で周知の技術によって命令を実行するように構成された１つまたは複数のプロセッサ４２を含む。そのような命令は、メモリ・システム３９ａ〜３９ｃの１つまたは複数に記憶されたコンピュータ・アプリケーションによって定義されることが好ましい。
【００２１】
プロセッサ４２のうちの１つによる命令の実行に応じてデータ値を記憶するとき、プロセッサ４２は、マッパー４６に記憶要求を送る。記憶要求は、記憶するデータ値と、前述のデータ値を記憶する場所を示すバス・アドレスとを含む。マッパー４６は、バス・アドレスを、メモリ・システム識別子とメモリ・ユニット・オフセットを含むメモリ・ユニット・アドレスにマップするように構成される。メモリ・システム識別子は、メモリ・システム３９ａ〜３９ｃのうちの１つを識別する。マッパー４６は、記憶するデータ値、メモリ・システム識別子、およびメモリ・システム３９ａ〜３９ｃのそれぞれに対するメモリ・ユニット・オフセットを含む書込み要求を送るように構成される。
【００２２】
図４に示したように、メモリ・システム３９ａ〜３９ｃはそれぞれ、それぞれメモリ・コントローラ５２ａ〜５２ｃとそれぞれメモリ・ユニット５５ａ〜５５ｃを含む。メモリ・ユニット５５ａ〜５５ｃはそれぞれ、データを記憶し取り出すことができる複数の記憶域を含む。前述のメモリ・システム識別子によって識別されたメモリ・システム３９ａ、３９ｂまたは３９ｃのメモリ・コントローラ５２ａ、５２ｂまたは５２ｃは、前述のデータ値（すなわち、メモリ・システム識別子およびメモリ・ユニット・オフセットと一緒に受け取ったデータ値）を、メモリ・ユニット・オフセットに基づいて、識別したメモリ・システム３９ａ、３９ｂまたは３９ｃのメモリ・ユニット５５ａ、５５ｂまたは５５ｃに記憶するように構成される。この点に関して、メモリ・ユニット・オフセットは、各メモリ・ユニット５５ａ〜５５ｃ内の記憶域を識別し、識別したメモリ・システム３９ａ、３９ｂまたは３９ｃ内のメモリ・コントローラ５２ａ、５２ｂまたは５２ｃは、前述のメモリ・ユニット５５ａ、５５ｂまたは５５ｃに、メモリ・ユニット・オフセットによって識別された記憶域に受け取ったデータ値を記憶するように構成される。
【００２３】
処理システム１５の性能を高めるために、マッパー４６は、異なるメモリ・システム３９ａ〜３９ｃ全体に連続したバス・アドレスをインターリーブ方式でマップするように構成され、たとえば、プロセッサ４２からの各バス・アドレスが、８ビットの２進情報であり、００００００００〜１１１１１１１１の範囲になることができる仮定する。最初の４つの連続したメモリ・アドレスは、００００００００、０００００００１、００００００１０および００００００１１である。プログラマは、一般に、メモリ・アドレスを連続した順序で利用する。したがって、データ値の記憶にアドレス００００００００が最初に使用された場合は、データの記憶に次に使用される新しいバス・アドレスはおそらくアドレス０００００００１になる。次に、アドレス００００００１０が使用され、次にアドレス００００００１１に使用される見込みがある。このパターンは、おそらく、新しいバス・アドレスがもう必要なくなるか、バス・アドレスがすべて使用されるまで続く。
【００２４】
メモリ・システム３９ａ〜３９ｃ全体に前述の連続したバス・アドレスをインターリーブ方式でマップするために、マッパー４６は、最初のバス・アドレス（００００００００）を、メモリ・システム３９ａを識別するメモリ・システム識別子を有するメモリ・ユニット・アドレスにマップすることができる。次に、マッパー４６は、第２のバス・アドレス（０００００００１）を、メモリ・システム３９ｂを識別するメモリ・システム識別子を有するメモリ・ユニット・アドレスにマップすることができる。次に、マッパー４６は、第３のバス・アドレス（００００００１０）を、残りのメモリ・システム３９ｃを識別するメモリ・システム識別子を有するメモリ・ユニット・アドレスにマップすることができる。このプロセスは、マッパー４６が受け取るそれぞれの新しいバス・アドレスごとに繰り返される。たとえば、マッパー４６が、第４のバス・アドレス（００００００１１）を含む記憶要求を受け取ると、マッパー４６は、第４のバス・アドレスを、メモリ・システム３９ａを識別するメモリ・システム識別子を有するメモリ・ユニット・アドレスにマップする。
【００２５】
同じメモリ・システム３９ａ、３９ｂまたは３９ｃにマップされる各バス・アドレスが、異なるメモリ・ユニット・オフセットを有するメモリ・ユニット・アドレスにマップされることが好ましい。したがって、１組のバス・アドレスが、同じメモリ・システム３９ａ、３９ｂまたは３９ｃにマップされるが、それぞれのバス・アドレスは、固有のメモリ・ユニット・アドレスにマップされる。したがって、前述の１組のバス・アドレスはそれぞれ、同じメモリ・システム３９ａ、３９ｂまたは３９ｃの異なる記憶域にマップされる。
【００２６】
本明細書で前に説明した技術と類似の技術により、メモリ・ユニット５５ａ〜５５ｃからデータを取り出すことができる。この点に関して、プロセッサ４２のうちの１つが、データを取り出す命令を実行するとき、プロセッサ４２は、取出し要求をプロセッサ４２に結合されたマッパー４６に送る。取出し要求は、データを取り出す記憶域を示すバス・アドレスを含む。マッパー４６は、バス・アドレスを、メモリ・システム識別子とメモリ・ユニット・オフセットを含むメモリ・ユニット・アドレスにマップする。メモリ・システム識別子は、要求されたデータを記憶するメモリ・システム３９ａ、３９ｂまたは３９ｃを識別し、メモリ・ユニット・オフセットは、識別されたメモリ・システム３９ａ、３９ｂまたは３９ｃのメモリ・ユニット５５ａ、５５ｂまたは５５ｃ内のデータを実際に記憶する記憶域を識別する。
【００２７】
マッパー４６は、取出し要求に応じて、メモリ・システム３９ａ〜３９ｃのそれぞれに読出し要求を送る。読出し要求は、取出し要求のバス・アドレスから変換された前述のメモリ・ユニット・アドレスを含む。識別されたメモリ・システム３９ａ、３９ｂまたは３９ｃのメモリ・コントローラ５２ａ、５２ｂまたは５２ｃは、メモリ・ユニット・オフセットによって識別された記憶域にある連想メモリ・ユニット５５ａ、５５ｃまたは５５ｃ内のデータ値を取り出し、そのデータ値を、要求処理ユニット３７ａ、３７ｂ、３７ｃ、３７ｄまたは３７ｅに送る。この点に関して、メモリ・コントローラ５２ａ、５２ｂまたは５２ｃは、前述のデータ値をマッパー４６に戻し、マッパー４６が、このデータ値を要求処理ユニット３７ａ、３７ｂ、３７ｃ、３７ｄまたは３７ｅに送るか、あるいはメモリ・コントローラ５２ａ、５２ｂまたは５２ｃが、マッパー４６を利用せずにデータ値を要求処理ユニット３７ａ、３７ｂ、３７ｃ、３７ｄまたは３７ｅに送ることができる。
【００２８】
特定のバス・アドレスにマップされるメモリ・ユニット・アドレスを変更したいときには様々な状況がある。たとえば、従来の技術の節で説明したように、メモリ・システム３９ａ、３９ｂまたは３９ｅの１つにあるメモリ・ユニット５５ａ、５５ｂまたは５５ｃの１つを除去したい場合がある。したがって、除去されるメモリ・ユニット５５ａ、５５ｂまたは５５ｃの内容を別のメモリ・ユニット５５ａ、５５ｂまたは５５ｃに移動させなければならない。さらに、この移動を考慮して、様々な処理ユニット３７ａ〜３７ｅ内のマッパー４６をそれぞれ更新しなければならない。
【００２９】
この点に関して、メモリ・ユニット５５ａが、除去され、第１のメモリ・ユニット・オフセットによって識別された記憶域に記憶されたデータ値を含むと仮定する。さらに、この記憶域にあるデータ値が、メモリ・ユニット５５ｂに移動され、このメモリ・ユニット５５ｂ内の第２のメモリ・ユニット・オフセットによって識別された記憶域に記憶されると仮定する。第１および第２のメモリ・ユニット・オフセット値の値は、同じ場合もあり異なる場合もある。さらに、データ値を移動した後で第１のメモリ・ユニット・オフセットで識別されたメモリ・ユニット５５ａ内の記憶域からのデータ取出しとデータ記憶を防ぐために、それぞれのマッパー４６のマッピングを変更しなければならない。特に、第１のメモリ・ユニット・オフセットによって識別されたメモリ・ユニット５５ａ内の記憶域にマップされたバス・アドレスが、第２のメモリ・ユニット・オフセットによって識別されたメモリ・ユニット５５ｂ内の記憶域にマップされるようにマッピングを変更しなければならない。
【００３０】
前述のデータ値が動的に移動され、マッパー４６がシステム１５の効率を最大にするように動的に更新されることが好ましい。本明細書で使用されるとき、「動的」という用語は、１つまたは複数のコンピュータ・アプリケーションが同時に、１つまたは複数の処理ユニット３７ａ〜３７ｅ上で動作し、１つまたは複数のメモリ・システム３９ａ〜３９ｃからのデータ値を処理している間にコンピュータ・システム１２内で起こることを指すように定義される。
【００３１】
以下に説明する技術のうちのいずれかを使用しないと、動的なデータの移動と動的なマッパーの更新をエラーなしに実現することは困難である。この点に関して、メモリ・ユニット５５ａからデータが移動され、マッパー４６が更新されているため、メモリ・ユニット５５ａ〜５５ｃへの記憶または取出しを、データが首尾良く移動される前および／または各マッパー４６が更新される前に行うことができる。たとえば、まだ更新されていないマッパー４６は、記憶要求と関連したバス・アドレスを、第１のメモリ・オフセットによって識別されたメモリ・ユニット５５ａ内の記憶域を識別するメモリ・ユニット・アドレスに、その記憶域のデータが移動された後でマップすることができる。そのような可能性を考慮するステップを踏まない限り、記憶要求と関連したデータが、メモリ・ユニット５５ａに記憶されることがあり、メモリ・ユニット５５ａが除去するときにその新しく記憶されたデータ値が失われることがある。
【００３２】
もう１つの例において、更新されたマッパー４６は、取出し要求と関連したバス・アドレスを、第２のメモリ・オフセットによって識別されたメモリ・ユニット５５ｂ内の記憶域を識別するメモリ・ユニット・アドレスに、メモリ・ユニット５５ａから移された前述のデータをメモリ・ユニット５５ｂに記憶する前にマップすることができる。そのような可能性を考慮するステップを踏まない限り、取出し要求に応えるために取り出されたデータが間違っていることがあり、最終的にデータ・エラーが生じることがある。
【００３３】
本発明は、マッピングの変更の結果データ・エラーが生じないようにしながら、バス・アドレスをメモリ・ユニット・アドレスにマップするマッピングを動的に変更することを可能にする。換言すると、本発明は、再割当ての結果データ・エラーが生じないようにしながら、メモリ・システム３９ａ〜３９ｃ内のメモリを再割当てすることを可能にする。本発明の技術を利用して、第１のメモリ・ユニット５５ａ、５５ｂまたは５５ｃを除去する前に、第１のメモリ・ユニット５５ａ、５５ｂまたは５５ｃから別のメモリ・ユニット５５ａ、５５ｂまたは５５ｃにデータを安全に移動させることができる。しかしながら、前に説明したように、処理システム１５内のメモリの再割当てには他の理由があることがあり、本発明の技術を利用して、様々な理由のためにメモリを再割当てすることができる。
【００３４】
本発明を例示するために、この場合も、メモリ・システム３９ａのメモリ・ユニット５５ａを処理システム１５から取り出すと仮定する。さらに、第１のメモリ・ユニット・オフセットと関連した記憶域にあるデータ値をメモリ・ユニット５５ａに記憶すると仮定する。したがって、メモリ・ユニット５５ａを除去する前に、データ値を別のメモリ・ユニット５５ｂまたは５５ｃ内の記憶域に移動し、メモリ・ユニット５５ａ内の前述の記憶域にマップされたバス・アドレスを、別のメモリ・ユニット５５ｂまたは５５ｃ内の前述の記憶域にマップしなければならない。たとえば、データ値を移動する「他の」メモリ・ユニットが、メモリ・ユニット５５ｂであると仮定する。簡略化するため、以後、これから移動するデータ値を記憶するメモリ・ユニット５５ａ内の記憶域を「元記憶域」と呼び、移動されたデータ値を受け取って記憶するメモリ・ユニット５５ｂ内の記憶域を「宛先記憶域」と呼ぶ。
【００３５】
以上の事柄を達成するために、システム・マネージャ３６は、宛先記憶域にポインタを記憶するように構成される。この点に関して、システム・マネージャ３６は、メモリ・システム３９ａ〜３９ｃに書込み要求を送ることがある。この要求は、ポインタを記憶する記憶域を識別するポインタとメモリ・ユニット・アドレスを定義するデータを含むことがある。書込み要求に応じて、書込み要求内のメモリ・ユニット・アドレスによって識別されたメモリ・システム３９ｂのメモリ・コントローラ５２ｂは、前述のメモリ・ユニット・アドレスによって識別された記憶域にポインタを定義するデータを記憶する。
【００３６】
前述のポインタを宛先記憶域に書き込むために使用することができる様々な他の方法がある。たとえば、メモリ・システム・マネージャ３６は、プロセッサ４２のうちの１つに指示して、宛先記憶域にポインタを書き込ませる記憶要求を発行させることができる。本発明の原理から逸脱することなく他のそのような方法を使用することができる。
【００３７】
宛先記憶域に記憶された前述のポインタは、元記憶域を指しまたは換言すると元記憶域を識別し、以後「ソース・ポインタ」と呼ばれる。この点に関して、ソース・ポインタは、元記憶域のメモリ・ユニット・アドレス（すなわち、メモリ・システム識別子とメモリ・ユニット・オフセット）を含む。
【００３８】
好ましい実施形態において、各記憶域は、ディレクトリ・タグとデータ部分とを含む。データ部分は、記憶域に記憶されたデータ値を定義するビットの集まりである。したがって、メモリ・ユニット５５ａ〜５５ｃのうちの１つの記憶域にソース・ポインタが記憶されるとき、記憶域のデータ部分は、ソース・ポインタによって指定された元記憶域のメモリ・ユニット・アドレスを定義する。
【００３９】
ディレクトリ・タグは、ある一定の制御情報を維持するために使用される１組（すなわち、１つまたは複数）のビットである。たとえば、メモリ・ユニット５５ａ〜５５ｃ内の各記憶域のディレクトリ・タグの特定ビットは、記憶域のデータ部分に記憶されたデータ値が、ポインタ・データを定義するかまたは非ポインタ・データを定義するかを示すことが好ましい。この特定ビットは、本明細書では「データ・タイプ・ビット」と呼ばれる。例示のために、データ・タイプ・ビットは、アサートされた場合、同じ記憶域のデータ部分に記憶されたデータ値がポインタ・データを定義することを示し、アサート解除された場合、データ・タイプ・ビットは、前述のデータ値が非ポインタ・データ値であることを示すと仮定する。
【００４０】
ソース・ポインタが宛先記憶域に記憶された後で、システム・マネージャ３６は、処理ユニット３７ａ〜３７ｅのマッパー４６内のマッピングを変更または更新するように構成される。この点に関して、システム・マネージャ３６は、各マッパー４６にメッセージを送って各マッパー４６に指示して、元記憶域を識別するメモリ・ユニット・アドレスにマップされたバス・アドレスが代わりに宛先記憶域を識別するメモリ・ユニット・アドレスにマップされるようにマッピングを変更することができる。しかしながら、各マッパー４６のマッピングを変更するには時間がかかる。マッピングを変更している間、まだ更新されていないマッパー４６の１つが、元記憶域からデータを取り出しまたはそこにデータを記憶する要求を受け取ることがある。この点に関して、要求と関連したバス・アドレスは、マッパー４６によって、元記憶域を識別するメモリ・ユニット・アドレスにマップされる。通常、この状況で、データは、前に本明細書で説明した技術にしたがって、要求が記憶要求であるかまたは取出し要求であるかにより、元記憶域に記憶されるかまたは元記憶域から取り出される。
【００４１】
しかしながら、前述の要求が、既に更新されているマッパー４６によって受け取られた場合は、前述のバス・アドレスがマッパー４６によって、宛先記憶域を識別するメモリ・ユニット・アドレスにマップされる。したがって、前述の例において、メモリ・システム３９ｂは、前述のメモリ・ユニット・アドレスによって識別される。通常、メモリ・システム３９ｂを識別するメモリ・ユニット・アドレスに応じて、メモリ・コントローラ３２ｂは、メモリ・ユニット・アドレス５５ｂに含まれるメモリ・ユニット・オフセットと関連したメモリ・ユニット５５ｂ内の記憶域にアクセスする（すなわち、データを記憶するかデータを取り出す）ように構成される。
【００４２】
しかしながら、宛先記憶域（すなわち、この例では、受け取ったメモリ・ユニット・オフセットと関連した記憶域）に記憶された値のデータ・タイプ・ビットが、宛先記憶域内のデータがポインタ・データであることを示している場合、メモリ・コントローラ３２ｂは、宛先記憶域のソース・ポインタを、前述のメモリ・ユニット・アドレスを送ったマッパー４６に戻すように構成される。これに応じて、マッパー４６は、前述の要求のバス・アドレスを、ソース・ポインタによって指定された記憶域を示すメモリ・ユニット・アドレスにマップする。換言すると、マッパー４６は、前述の要求のバス・アドレスを、元記憶域を識別するメモリ・ユニット・アドレスにマップする。次に、元記憶域を識別するメモリ・ユニット・アドレスを使用して前述の要求に応える。
【００４３】
以上の説明をより良く例示するために、前述の要求が取出し要求であり、特定のマッパー４６が、マッパー４６が更新されている間の特定のマッパー４６が更新された後で取出し要求を受け取ると仮定する。図５に、そのような例を示す流れ図を示す。図５の各矢印は、１つの構成要素から別の構成要素への伝送を表す。図５の矢印１〜６と関連した番号は、前述の例では伝送シーケンスを示す。この点に関して、矢印１〜６と関連した伝送は、矢印１がシーケンスの最初の伝送を表し、矢印６がシーケンスの最後の伝送を表すように、それぞれの矢印の番号に基づく順序で、最も低いものから最も高いものの順に行われる。
【００４４】
図５を参照すると分かるように、矢印１で示したように、特定のマッパー４６が、取出し要求を受け取る。前述の例では、特定のマッパー４６が既に更新されているため、特定のマッパー４６は、メモリ・システム３９ｂ内に配置された宛先記憶域６７を識別するメモリ・ユニット・アドレスに、取出し要求のバス・アドレスをマップする。次に、図５に矢印２で表したように、マッパー４６は、前述のメモリ・ユニット・アドレスを含む読取り要求を送る。前述のメモリ・ユニット・アドレスに含まれるメモリ・システム識別子で識別されたメモリ・システム３９ｂは、要求を受け取り、図５に矢印３で表したように、宛先記憶域６７に記憶されているデータをマッパー４６に戻す。このデータは、元記憶域６４を指すポインタを含むデータ部分と、そのデータ部分がポインタ・データを含むことを示すディレクトリ・タグ部分とを含まなければならない。
【００４５】
ディレクトリ・タグ部分が、マッパー４６が受け取ったデータ部分がポインタ・データであることを示しているため、マッパー４６は、受け取ったデータを取出し要求を発行したプロセッサ４２に送ることを控える。その代わりに、マッパー４６は、データ部分によって定義されたポインタに基づいて元記憶域６４のメモリ・ユニット・アドレスを決定し、図５に矢印４で表したように、元記憶域６４のメモリ・ユニット・アドレスを含む読取り要求を送る。前述の例において、元記憶域６４は、メモリ・システム３９ａ内になければならず、取出し要求を発行したプロセッサ４２に戻されるデータを記憶していなければならない。その読出し要求に応じて、メモリ・システム３９ａは、図５に矢印５で表したように、元記憶域６４に記憶されたデータをマッパー４６に送る。このデータは、データ部分と、データ部分が非ポインタ・データを含むことを示すディレクトリ・タグ部分を含まなければならない。ディレクトリ・タグ部分が、データ部分が非ポインタ・データを含むことを示しているため、図６の矢印６で表したように、マッパー４６は、取出し要求を発行したプロセッサ４２にデータ部分を返す。これにより、マッパー４６は取出し要求に適切に応える。
【００４６】
前述の要求が取出し要求ではなく記憶要求であった場合は、本質的に、前述の要求に同じプロセスが使用されることになることに注意されたい。そのような例において、図５の矢印１は、マッパー４６への記憶要求の伝送を表す。矢印２は、宛先記憶域６７を識別する書込み要求の伝送を表す。矢印３は、マッパー４６へのソース・ポインタの伝送を表す。矢印４は、元記憶域６４を識別する書込み要求の伝送を表す。この伝送に基づいて、データが、元記憶域６４に書き込まれる。この例において、矢印５は、必ずしも必要でないが、書込み要求が満たされたという肯定応答を表すことができる。同様に、矢印６は、必ずしも必要でないが、記憶要求が満たされたという肯定応答を表すことができる。
【００４７】
代替の実施形態において、メモリ・システム３９ａ〜３９ｃのメモリ・コントローラ５２ａ〜５２ｃは、ソース・ポインタをアクセスする試みを行うときに適切なメモリ・システム３９ａ〜３９ｃに要求を転送するように構成することができる。たとえば、前述の例において、メモリ・システム３９ｂのメモリ・コントローラ５２ｂは、宛先記憶域６７を識別するマッパー４６から送られた要求に応じて（すなわち、図５に矢印２として表された要求に応じて）、元記憶域６４を識別する要求をメモリ・システム３９ａに直接送るように構成されることがある。メモリ・システム３９ｂから送られた要求に応じて、メモリ・システム３９ａは、メモリ・システム３９ｂから送られた要求が読出し要求であるか書込み要求であるかによって、元記憶域６４に記憶されたデータを取り出すかまたは元記憶域にデータを書き込む。メモリ・システム３９ｂから送られた要求が読出し要求であるとき、メモリ・システム３９ａは、前述のように、読出し要求に応じて元記憶域６４から取り出したデータをマッパー４６に送るように設計されている。
【００４８】
図６に、そのような例を示す。図６と図５を比較すると分かるように、前述の実施形態は両方とも、図５の矢印３および４が図６の１つの矢印３４と置き換えられていること以外同じである。矢印３４は、メモリ・システム３９ｂからメモリ・システム３９ａへの要求の伝送を表す。この要求は、矢印２として表された要求と同じタイプ（すなわち、読み取りまたは書き込み）で、メモリ・システム３９ａを識別するメモリ・システム識別子と、元記憶域６４に対応するメモリ・ユニット・オフセットとを有するメモリ・ユニット・アドレスを含まなければならない。
【００４９】
さらに、いずれかの実施形態において、マッパー４６が更新されている間に前述の要求のうちの１つを受け取った任意のマッパー４６は、システム・マネージャ３６によってどのマッパー４６が更新されたかに関係なく、最終的に、受け取った要求のバス・アドレスを、元記憶域６４を識別するメモリ・ユニット・アドレスにマップする。その結果、マッパー４６の更新中にマッパー４６によって受け取られた記憶および／または取出し要求の同じバス・アドレスが、同じメモリ・ユニット・アドレスにマップされ、それにより更新ステップで生じる可能性のある潜在的なデータ・エラーがなくなる。
【００５０】
マッパー４６の更新が完了した後で、システム・マネージャ３６は、元記憶域６４にあるデータ値を宛先記憶域６７に複写させる。システム・マネージャ３６は、メモリ・システム３９ａおよび３９ｂに直接複写するための読出し要求と書込み要求を発行し、あるいは１つまたは複数のマッパー４６に複写するための取出し要求と記憶要求を発行することができる。あるいは、システム・マネージャ３６は、処理ユニット３７ａ〜３７ｅの１つまたは複数内の１つまたは複数のプロセッサ４２に、適切な取出し要求と記憶要求を発行するように指示することができる。もう１つの代替の実施形態において、システム・マネージャ３６は、複写要求を発行することができ、元記憶域６４のメモリ・システム３９ａのメモリ・コントローラ４２ａは、元記憶域６４からデータを取り出し、そのデータを、書込み要求によって宛先記憶域６７の適切なメモリ・コントローラ４２ｂに送ることができる。元記憶域６４のデータを宛先記憶域６７に複写するために使用することができる様々な他の実施形態がある。
【００５１】
前述のそれぞれの実施形態において、宛先記憶域６７に記憶されたソース・ポインタは、元記憶域６４からのデータによって置き換えられるかまたは上書きされる。たとえば、システム・マネージャ３６が、プロセッサ４２に適切な取出し要求と記憶要求を発行するように指示することによって複写を達成すると仮定する。この実施形態において、システム・マネージャ３６は、最初に、プロセッサ４２に命令を送って、データを元記憶域６４から宛先記憶域６７に複写する。これに応じて、プロセッサ４２は、そのマッパー４６に、元記憶域データの取出しを要求する取出し要求を送る。この点に関して、取出し要求は、マッパー１６によってマップされたときに、元記憶域６４を識別するメモリ・ユニット・アドレスにマップされるバス・アドレスを含まなければならない。取出し要求に応じて、マッパー４６は、元記憶域６４を識別するメモリ・ユニット・アドレスへ取出し要求のバス・アドレスをマップする。次に、マッパー４６は、メモリ・システム３９ａ〜３９ｃに、元記憶域６４を識別するメモリ・ユニット・アドレスを含む読出し要求を送る。
【００５２】
識別されたメモリ・システム３９ａのメモリ・コントローラ５２ａは、元記憶域６４からデータ値を取り出し、そのデータ値をマッパー４６に返し、マッパー４６は、そのデータ値を、前述の取出し要求を発行したプロセッサ４２に返す。次に、このプロセッサ４２は、記憶要求内のデータ値を、マッパー４６によってマップされるときに宛先記憶域６７を識別するメモリ・ユニット・アドレスにマップされるバス・アドレスと共に含む。これに応じて、マッパー４６は、前述のバス・アドレスを、宛先記憶域６７を識別するメモリ・ユニット・アドレスにマップし、メモリ・システム３９ａ〜３９ｃに前述のメモリ・ユニット・アドレスと元記憶域６４から前に取り出したデータ値を含む書込み要求を送る。この書込み要求に応じて、書込み要求内のメモリ・ユニット・アドレスによって識別されたメモリ・システム３９ｂのメモリ・コントローラ５２ｂは、書込み要求内のデータ値を宛先記憶域６７に記憶する。
【００５３】
宛先記憶域６７にデータ値を複写している間に元記憶域６４にあるデータ値が元記憶域６４から読み取られるとき、元記憶域６４にあるディレクトリ・タグの特定ビット（以下では、「複写ビット」と呼ぶ）がアサートされ、元記憶域６４にあるデータ値が複写されたことを示すことが好ましい。以上の事柄を達成するために、メモリ・システム３９ｂは、システム・マネージャ３６から、たとえば宛先記憶域６７への元記憶域６４の複写を実現する際に元記憶域６４の読み取りが実行されることを知らされなければならない。
【００５４】
複写ビットがアサートされたとき、メモリ・コントローラ５２ａは、元記憶域６４にデータを記憶したり取り出したりするのを控えるように構成される。元記憶域６４から宛先記憶域６７への複写は、マッパー４６内のマッピングが更新された後で行われるため、複写ビットがアサートされたときに元記憶域６４にアクセスする試みは、（１）ソース宛先の複写が開始された後で、宛先記憶域６７のデータ値にアクセスする試みが行われたときと、（２）宛先記憶域６７が、元記憶域６４のデータ値によって更新される前だけ行われなければならない。
【００５５】
たとえば、前述のデータ移動（すなわち、元記憶域６４から宛先記憶域６７へのデータ移動）を考慮するために、マッパー４６のうちの１つによって受け取られる要求のバス・アドレスが、各マッパー４６が更新された後で１つのマッパー４６に受け取られる状況を検討する。さらに、元記憶域６４にあるデータが、元記憶域６４から読み取られたが宛先記憶域６７にまだ書き込まれていないと仮定する。換言すると、元記憶域６４から宛先記憶域６７へのデータの複写は、開始されたがまだ完了していない。その結果、宛先記憶域６７は、元記憶域６４へのポインタを記憶していなければならず、前述の方法により、前述の要求を満たすために元記憶域６４のデータ値にアクセスする試みが行われる。しかしながら、このとき、元記憶域６４のデータ値を宛先記憶域６７に複写するプロセスが開始されたことを示すために元記憶域６４の複写ビットがアサートされなければならない。
【００５６】
これが行われるとき、元記憶域６４へのアクセスを試みるメモリ・コントローラ５２ａは、前述のマッパー４６にメッセージを送って、要求を満たす試みを再試行すべきであることを示す。その結果、マッパー４６は、要求のバス・アドレスを、宛先記憶域６７を識別するメモリ・ユニット・アドレスにマップし、宛先記憶域６７にあるデータにアクセスする別の試みが行われる。この時までに、元記憶域６４から宛先記憶域６７へのデータの複写が完了することがあり、その結果、宛先記憶域６７が、元記憶域６４にポインタをもう記憶しておらずに元記憶域６４から複写されたデータ値を記憶する。その結果、宛先記憶域６７は、前に説明した方法によって前述の要求を満たすように首尾良くアクセスされる。
しかしながら、元記憶域６４から宛先記憶域６７へのデータの複写が完了しない場合は、宛先記憶域６７は、ソース・ポインタをまだ記憶していなければならず、元記憶域６４からのデータが宛先記憶域６７に首尾良く書き込まれるまで前述のプロセスを繰り返さなければならない。
【００５７】
前述の詳細をさらによく説明するために、プロセッサ４２が、移動するデータ値の取出し要求を元記憶域６４から宛先記憶域６７に送ると仮定する。このデータ値は、元記憶域６４から既に読み取られたが、まだ宛先記憶域６７に書き込まれていない。図７に、そのような例を示す流れ図を示す。図７の各矢印は、ある構成要素から別の構成要素への伝送を表す。図７の矢印１〜８と関連した番号は、前述の例における伝送シーケンスを示す。この点に関して、矢印１〜８と関連した伝送は、各矢印の番号に基づいて、矢印１がシーケンスの最初の伝送を表し、矢印８がシーケンスの最後の伝送を表すように、最も小さいものから最も大きいものに順番に行われる。
【００５８】
図７を参照し、マッパー４６への取出し要求の伝送を矢印１として表す。マッパー４６は、宛先記憶域６７を識別するメモリ・システム識別子に取出し要求のバス・アドレスをマップする。次に、マッパー４６は、図７に矢印２として表した読出し要求をメモリ・システム３９ｂに送って、宛先記憶域６７にあるデータ値の取り出しを要求する。メモリ・システム３９ｂ内のメモリ・コントローラ５２ｂは、図７に矢印３で表したように、宛先記憶域６７に記憶されたソース・ポインタをマッパー４６に返す。
【００５９】
これに応じて、マッパー４６は、図７に矢印４で表したように、読出し要求をメモリ・システム３９ａに送り、以上説明した方法によって元記憶域６４を識別する。しかしながら、元記憶域６４の複写ビットがアサートされ、それにより元記憶域６４のデータ部分が別の記憶域に複写されるため、メモリ・システム３９ａのメモリ・コントローラ５２ａは、元記憶域６４からデータを取り出すことを控える。さらに、メモリ・コントローラ５２ａは、図７に矢印５で表したように、通知メッセージをマッパー４６送って、元記憶域６４にあるデータ値が既に複写されたことを示す。
【００６０】
これに応じて、マッパー４６は、再度、取出し要求に応えることを試みる。この点に関して、マッパー４６は、図７に矢印６で表したように、読出し要求を送り、宛先記憶域６７（すなわち、満たされた取出し要求のバス・アドレスからマップされたメモリ・ユニット・アドレスで識別された場所）を識別する。この時までに、元記憶域６４から複写または移動されたデータ値を宛先記憶域６７に書き込むことができる。そのような場合、宛先記憶域６７は、ソース・ポインタをもう記憶しておらず、代わりに元記憶域６４から複写されたデータ値を記憶する。
【００６１】
したがって、以上説明した技術により、メモリ・システム３９ｂのメモリ・コントローラ５２ｂは、前述の読出し要求を受け取り、それに応じて、宛先記憶域６７に記憶されたデータを取り出す。次に、メモリ・コントローラ５２ｂは、矢印７として表されたこのデータをマッパー４６に送り、このデータに基づいて、マッパー４６は、図７に矢印８で表したように、プロセッサ４２によって要求されたデータ値をプロセッサ４２に送る。このように、元記憶域６４からのデータ値を宛先記憶域６７に移動している間にプロセッサ４２から取出し要求を発行した場合でも、プロセッサ４２に正確なデータが返される。
【００６２】
しかしながら、元記憶域６４から複写または移動されたデータ値が、図７の矢印６の発生時に宛先記憶域６７にまだ書き込まれていない場合は、元記憶域６４から複写または移動されたデータ値が宛先記憶域６７に書き込まれるまで矢印３〜６が繰り返される。これが行われた後で、矢印７および８を行うことができる。
【００６３】
前述の要求が、取出し要求ではなく記憶要求であった場合は、本質的に、前述の要求を満たすために同じプロセスが使用されることになることに注意されたい。そのような例において、図７の矢印１は、マッパー４６に記憶要求の伝送を表す。矢印２は、宛先記憶域６７を識別する書込み要求の伝送を表す。矢印３は、マッパー４６へのソース・ポインタの伝送を表す。矢印４は、元記憶域６４を識別する書込み要求の伝送を表す。矢印５は、元記憶域６４にあるデータが複写されたという通知の伝送を表す。矢印６は、宛先記憶域６７を識別する書込み要求の伝送を表す。この伝送に基づいて、元記憶域６４から複写または移動されたデータ値が、既に宛先記憶域６７に書き込まれている場合には、データが宛先記憶域６７に書き込まれる。この例では、矢印７は、必ずしも必要ではないが、書込み要求が満たされたという肯定応答を表すことができる。同様に、矢印８は、必ずしも必要ではないが、記憶要求が満たされたという肯定応答を表すことができる。元記憶域６４から複写または移動されたデータ値が、矢印６の発生時に宛先記憶域６７に書き込まれていない場合は、前述のように矢印３〜６が繰り返される。
【００６４】
代替の実施形態において、メモリ・システム３９ａ〜３９ｃのメモリ・コントローラ５２ａ〜５２ｃは、ソース・ポインタにアクセスする試みまたはアサートされた複写ビットと関連したデータにアクセスする試みが行われるときに適切なメモリ・システム３９ａ〜３９ｃに要求が転送されるように構成することができる。図８に、そのような例を示す。図７を図８と比較すると分かるように、前述の実施形態は両方とも、図７の矢印５および６が図８の単一の矢印３４と置き換えられ、図７の矢印３および４が図８の単一の矢印５６と置き換えられていること以外は同じである。矢印３４は、メモリ・システム３９ｂからメモリ・システム３９ａへの要求の伝送を表す。この要求は、矢印２として表された要求と同じタイプ（すなわち、読み取りまたは書き込み）のものでなければならず、メモリ・システム３９ａを識別するメモリ・システム識別子と、元記憶域６４に対応するメモリ・ユニット・オフセットとを有するメモリ・ユニット・アドレスを含まなければならない。さらに、矢印５６は、メモリ・システム３９ａからメモリ・システム３９ｂへの要求の伝送を表す。この要求は、矢印３４として表された要求と同じタイプ（すなわち、読取りまたは書込み）のものでなければならず、メモリ・システム３９ａを識別するメモリ・システム識別子と、元記憶域６４に対応するメモリ・ユニット・オフセットとを有するメモリ・ユニット・アドレスを含まなければならない。
【００６５】
さらに、元記憶域６４からのデータ値が、宛先記憶域６７内のソース・ポインタと置き換わると、元記憶域６４の宛先記憶域６７への再割当てが、本質的に完了する。この点に関して、元記憶域６４からのデータ値が、宛先記憶域６７に書き込まれており、どのマッパー４６によって受け取られたバス・アドレスも、元記憶域６４を識別するメモリ・ユニット・アドレスにマップされてはならない。前述のデータ値にアクセスするすべての要求のバス・アドレスは、元記憶域６４ではなく宛先記憶域６７にマップされなければならない。
【００６６】
前述のプロセスをメモリ・ユニット５５ａに記憶された各データ値ごとに実行した後で、データ・エラーを発生させることなくメモリ・ユニット５５ａをシステム１５から取り外すことができる。しかしながら、元記憶域６４を宛先記憶域６７に再割当てするための前述の方法は、様々な理由のために利用されることがあり、メモリ・ユニット５５ａの除去を可能にするために再割当てを行うことは必ずしも必要でないことを再度強調しなければならない。たとえば、付加メモリ・ユニットを追加するときにメモリを再割当てすることが望ましいことがあり、様々な保護領域間にメモリを再割当てすることが望ましいこともある。本発明の方法によりメモリを再割当てする他の理由があることもある。
【００６７】
本明細書で説明したディレクトリ・タグ情報をメモリ・ユニット５５ａ〜５５ｃ内に維持することは必ずしも必要でないことに注意されたい。たとえば、ディレクトリ・タグ情報をメモリ・ユニット５５ａ〜５５ｃに記憶されたデータ情報と適切に関連付けることができれば、制御レジスタ（図示せず）内にそのような情報を維持することができる。
【００６８】
本発明の前述の実施形態、特に任意の「好ましい」実施形態は、単に実施形態の例であり、単に本発明の原理を明確に理解するための説明であることに注意されたい。本発明の趣旨および原理から実質的に逸脱することなく、本発明の前述の実施形態に多くの様々な変更および改良を行うことができる。そのような改良および変更はすべて、この開示の範囲および本発明の範囲に含まれ、併記の特許請求の範囲によって保護されるものである。
【００６９】
以下に本発明の実施態様の例を列挙する。
【００７０】
〔実施態様１〕データを処理し、メモリ内のデータを動的に移動させるコンピュータ・システム（１２）であって、
データを記憶するための記憶域をそれぞれ有する複数のメモリ・ユニット（５５ａ、５５ｂ、５５ｃ）と、
複数のマッピングを有し、データ値にアクセスする要求を受け取るように構成されたマッパー（４６）であって、前記要求がバス・アドレスを含み、前記マッパーが、前記バス・アドレスを、前記マッピングのうちの１つに基づいてメモリ・ユニット・アドレスに変換するように構成され、前記メモリ・ユニット・アドレスが、前記データ値を記憶している前記記憶域のうちの１つを識別するマッパー（４６）と、
前記データ値を前記１つの記憶域から前記記憶域のうちの他の記憶域に移動させるように構成され、ポインタを前記他の記憶域にポインタに記憶させるように構成されたシステム・マネージャ（３６）であって、前記ポインタが、前記１つの記憶域を識別し、さらに前記ポインタが前記他の記憶域に記憶されている間に前記１つのマッピングを更新させるように構成され、その結果前記マッパー（４６）が前記バス・アドレスをメモリ・ユニットに変換するように構成されたシステム・マネージャ（３６）とを含むコンピュータ・システム（１２）。
〔実施態様２〕前記メモリ・ユニット（５５ａ、５５ｂ、５５ｃ）のうちの１つに結合され、前記他の記憶域を識別する前記メモリ・ユニット・アドレスに基づいて前記他の記憶域内の前記ポインタにアクセスするように構成され、前記ポインタに応じて前記１つの記憶域を識別する前記メモリ・ユニット・アドレスを送るように構成された第１のメモリ・コントローラ（５２ａ、５２ｂ、５２ｃ）をさらに含む実施態様１に記載のシステム（１２）。
〔実施態様３〕前記システム・マネージャ（３６）が、さらに、前記データ値が前記１つの記憶域から複写されたときに、前記１つの記憶域と関連付けられたデータの少なくとも１つのビットを異なる論理値に変更するように構成され、前記システム（１２）が、さらに、
前記メモリ・ユニット（５５ａ、５５ｂ、５５ｃ）のうちの１つに結合され、前記マッパー（４６）から送られたメモリ・ユニット・アドレスに基づいて、前記１つの記憶域にあるデータにアクセスするように構成され、さらに、前記マッパー（４６）から送られた前記メモリ・ユニット・アドレスに応じて、前記データの少なくとも１つのビットが異なる論理状態を示すときに、前記データの少なくとも１つのビットに基づいて前記マッパー（４６）にメッセージを送るように構成されたメモリ・コントローラ（５２ａ、５２ｂ、５２ｃ）を含み、
前記マッパー（４６）が、前記メッセージに応じて前記他の記憶域を識別する前記メモリ・ユニット・アドレスを送るように構成されたシステム（１２）。
〔実施態様４〕データを１つの記憶域から他の記憶域に動的に移動させる方法であって、
複数のマッピングに基づいて、バス・アドレスを、宛先記憶域と元記憶域を含む複数の記憶域を識別するメモリ・ユニット・アドレスにマップする段階と、
前記宛先記憶域に、前記元記憶域を識別するポインタを記憶する段階と、
前記ポインタが前記宛先記憶域に記憶されている間に、前記バス・アドレスのうちの１つを前記元記憶域を識別する前記メモリ・ユニット・アドレスのうちの１つと関連付ける前記マッピングの少なくとも１つを、前記少なくとも１つのマッピングが、前記１つのバス・アドレスを前記宛場所を識別する前記メモリ・ユニット・アドレスのうちの１つと関連付けるように更新する段階と、
前記更新段階の次に、前記元記憶域からのデータ値を前記宛先記憶域に記憶する段階と、
前記宛先記憶域から前記ポインタにアクセスする段階と、
前記ポインタに基づいて、前記ポインタにアクセスする段階に応じて前記元記憶域から前記データ値にアクセスする段階と、
を含む方法。
〔実施態様５〕プロセッサ（４２）からの要求に応じて、前記ポインタにアクセスする段階を実行する段階をさらに含み、前記要求が、前記１つのバス・アドレスを含み、前記マッピング・ステップが、前記要求内の前記１つのバス・アドレスを、前記宛先記憶域を識別する前記１つのメモリ・ユニット・アドレスにマップする段階を含む実施態様４に記載の方法。
〔実施態様６〕前記元記憶域から前記データ値を読み取る段階と、
前記読取り段階に応じて、前記元記憶域と関連付けられたデータの少なくとも１つのビットを変更する段階と、
前記少なくとも１つのビットを分析する段階と、
前記変更する段階の次に、前記少なくとも１つのビットに基づいて前記宛先記憶域から前記データ値にアクセスする段階と、
をさらに含む実施態様４に記載の方法。
〔実施態様７〕１つの記憶域から他の記憶域にデータを動的に移動させる方法であって、
バス・アドレスを含む要求を受け取って、データにアクセスする段階と、
複数のマッピングに基づいて、前記バス・アドレスを、宛先記憶域と元記憶域を含む複数の記憶域を識別するメモリ・ユニット・アドレスにマッピングする段階と、
前記バス・アドレスからマップされた前記メモリ・ユニット・アドレスに基づいてデータにアクセスする段階と、
前記元記憶域から前記宛先記憶域にデータ値を動的に移動させる段階と、
前記元記憶域を識別するメモリ・ユニット・アドレスにマップされたバス・アドレスが、前記宛先記憶域を識別するメモリ・ユニット・アドレスにマップされるように前記マッピングを更新する段階と、
を含む方法。
〔実施態様８〕前記動的に移動する段階が、前記宛先記憶域に、前記元記憶域を識別するポインタを記憶する段階と、
前記元記憶域から前記データ値を読み取る段階と、
前記宛先記憶域内に、前記読取り段階で読み取られた前記データ値を記憶する段階とを含む実施態様７に記載の方法。
〔実施態様９〕前記１つのバス・アドレスを含む前記要求のうちの１つに応じて、前記元記憶域と関連付けられ、前記読取り段階が行われたかどうかを示すデータの少なくとも１つのビットを分析する段階と、
前記少なくとも１ビットが前記読取り段階が行われたことを示すときに、前記少なくとも１つのビットに基づいて前記宛先記憶域から前記データ値にアクセスする段階とをさらに含む実施態様８に記載の方法。
〔実施態様１０〕前記１つのバス・アドレスを含む前記要求のうちの１つに応じて、前記宛先記憶域に記憶された前記ポインタにアクセスする段階と、
前記ポインタにアクセスする段階に応じて前記元記憶域から前記データ値にアクセスする段階と、
をさらに含む実施態様８に記載の方法。
【図面の簡単な説明】
【図１】本発明による処理システムを使用するコンピュータ・システムを示すブロック図である。
【図２】図１に示した処理システムのより詳細な考えを示すブロック図である。
【図３】図２に示した処理ユニットのより詳細な考えを示すブロック図である。
【図４】図２に示したメモリ・ユニットのより詳細な考えを示すブロック図である。
【図５】図２に示したシステムのマッパーのデータ移動が更新されている間にデータにアクセスする要求の例示的な伝送シーケンスを示す図表である。
【図６】図５に示した伝送シーケンスの代替の実施形態を示す図表である。
【図７】データが元記憶域から宛先記憶域に複写されている間にデータにアクセスする要求に関して図２に示したシステムにおける例示的な伝送シーケンスを示す図表である。
【図８】図７に示した伝送シーケンスの代替の実施形態を示す図表である。
【符号の説明】
１２  コンピュータ・システム
３６  システム・マネージャ
４２  プロセッサ
４６  マッパー
５２ａ、５２ｂ、５２ｃ  メモリ・コントローラ
５５ａ、５５ｂ、５５ｃ  メモリ・ユニット
【図１】
0003872968.tif 000002
【図２】
0003872968.tif 000003
【図３】
0003872968.tif 000004
【図４】
0003872968.tif 000005
【図５】
0003872968.tif 000006
【図６】
0003872968.tif 000007
【図７】
0003872968.tif 000008
【図８】
0003872968.tif 000009