(57)【要約】【課題】電子デバイスの電力消費量を少なくするようメモリをできるだけ少なくすること。【解決手段】データサブシステムをキャッシュメモリとして作動すべきか、または外部メモリからのラインフェッチを抑制するスクラッチパッドメモリとして作動すべきかを判断し、前記判断に応じて前記データサブベースをキャッシュメモリまたはスクラッチパッドメモリのいずれかとして作動させるよう、制御ビットをプログラムする。【選択図】図１
2005011353.tif 000002
【特許請求の範囲】
【請求項１】
データサブシステムをキャッシュメモリとして作動すべきか、または外部メモリからのラインフェッチを抑制するスクラッチパッドメモリとして作動すべきかを判断する工程と、
前記判断に応じて前記データサブベースをキャッシュメモリまたはスクラッチパッドメモリのいずれかとして作動させるよう、制御ビットをプログラムする工程とを備えた方法。
【請求項２】
メインメモリにアクセスするためのメモリアドレスを発生する処理コアを備え、前記処理コアにおいて複数の方法が作動し、各方法が自己の組のローカル変数を有し、
レジスタ内に記憶されたアドレスによって定められたメモリの連続ブロックをホールドするマルチラインデータメモリを備えたキャッシュサブシステムを更に備え、前記データメモリにローカル変数が記憶されており、
各ラインが関連する有効ビットおよびダーティビットを有し、前記プロセッサがクリーンコマンドを実行し、前記ラインが有効データおよびダーティデータを含むことを有効ビットおよびダーティビットがそれぞれ表示する各ラインを前記クリーンコマンドが前記プロセッサの外部メモリへコピーさせるようになっているプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般的にはプロセッサに関し、より詳細には、プロセッサにおけるスタックをベースとするメモリの利用の管理に関する。
【背景技術】
【０００２】
多くのタイプの電子デバイスは電池で作動するので、できるだけ少ない電力しか消費しないことが好ましい。このようなデバイスの一例として携帯電話が挙げられる。更に、携帯電話のような電子デバイスでは種々のタイプのマルチメディア機能を実現することが望ましい。これらマルチメディア機能の例としてゲーム、オーディオデコーダ、デジタルカメラなどを挙げることができるが、これらに限定されるものではない。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従って、他のすべてと同じように高速であり、できるだけ少ない電力しか消費せず、できるだけ少ないメモリしか必要としないように、電子デバイスにおけるかかる機能を実現することが好ましい。この分野での改善が望まれている。
【課題を解決するための手段】
【０００４】
一部の実施例では、方法Ｃは、データサブシステムがキャッシュメモリとして作動するのか、または外部メモリからのラインフェッチを抑制するスクラッチパッドメモリとして作動するのかを判断する工程と、この判断に応じてデータサブシステムをキャッシュまたはスクラッチパッドメモリとして作動させるように制御ビットをプログラムする工程とを含む。
【０００５】
別の実施例では、プロセッサは処理コアを含むことができ、この処理コアはメインメモリにアクセスするためのアドレスを発生し、このコアで複数の方法を実行するようにメモリアクセスを発生する。各方法は自己の組のローカル変数を使用できる。プロセッサはレジスタに記憶されたアドレスによって定められるメモリの連続するブロックをホールドするマルチラインデータメモリを備えたキャッシュサブシステムを含むこともできる。データメモリにはローカル変数を記憶できる。各ラインは関連する有効ビットおよびダーティビットを有し、プロセッサはクリーンコマンドを実現することができ、このクリーンコマンドはラインが有効データおよびダーティデータを含むことを有効ビットおよびダーティビットが表示している各ラインを前記プロセッサの外部のメモリにコピーさせる。別の実施例ではデータメモリ内のラインの一部またはすべてを無効にするフラッシュコマンドおよびデータメモリに対する割り当てポリシーをプログラムするセットされたポリシーコマンドを実施できる。
【０００６】
表記および用語
次の説明および特許請求の範囲において、特定のシステム部品を示すのに所定の用語を使用する。当業者であれば理解できるように、半導体製造会社は１つの部品を異なる名称で表示することがある。この明細書では、名称は異なるが機能は異なっていない部品を区別しようとするものではない。次の説明および特許請求の範囲では「含む」および「備える」なる用語は他の要素も含むことができるように使用されているので、「〜を含み、〜に限定されない」ことを意味するように解釈すべきであり、「結合」なる用語は間接または直接の接続のいずれかを意味するものである。従って、第１デバイスが第２デバイスに結合している場合、この接続は直接接続を介したものでもよいし、または他のデバイスおよび接続部を介した間接接続によるものでもよい。
以下、本発明の好ましい実施例をより詳細に説明するため、添付図面を参照する。
【実施例】
【０００７】
次の説明は、本発明の種々の実施例に関するものである。これら実施例の１つ以上が好ましいが、開示した実施例は特に指定しない限り特許請求の範囲を含む開示の範囲を限定するものとして解釈すべきではなく、そのように使用すべきではない。更に、当業者であれば、次の説明が広義の出願であり、実施態様の説明は実施例しか意味しないものではなく、また、特許請求の範囲を含む開示の範囲はこの実施態様だけに限定されることを暗示するものではないことが理解できよう。
【０００８】
本明細書に開示する要旨は、プログラマブル電子デバイス、例えばスタックベース言語（例えばＪａｖａ（登録商標））に関連するローカル変数およびこれらローカル変数に関連するポインタを記憶できるメモリを有するプロセッサに関する。「ローカル変数」なる用語はプロセッサで実行される方法によって使用される一時的変数を示す。プロセッサでは多数の方法を実行でき、各方法は自己の組のローカル変数を有することが好ましい。一般に、ローカル変数はそれに関連する方法が実行中である場合にしか意味を有しない。スタックベース言語としてはＪａｖａバイトコードを挙げることができるが、本開示はこれだけに限定されるものではない。Ｊａｖａバイトコードではローカル変数（ＬＶ）の表記は他のプログラム言語（例えばＣ言語）における自動変数および他のプログラム言語における他の名称の変数に等しい。しかしながら、本明細書はＪａｖａ、Ｊａｖａ方法およびＪａｖａローカル変数に限定されない。下記に開示する原則はスタックを管理し、スタックにデータのブロックをプッシュするプッシュブロック操作、スタックからデータのブロックをポップするポップブロック操作を含む。
【０００９】
次の記載は、方法およびローカル変数が作動し、これらを使用できるかかるプロセッサの好ましい実施例の作動を説明するものである。他のプロセッサアーキテクチャおよび実施態様を使用することもできるので、この開示および次のこの詳細な説明および特許請求の範囲は特定タイプのプロセッサだけに限定されない。ローカル変数および関連するポインタの記憶に関する詳細は、プロセッサの説明に従う。
【００１０】
本明細書に説明するプロセッサは特にＪａｖａバイトコードまたは相当するコードを実行するのに特に適す。周知のように、Ｊａｖａは特に埋め込みアプリケーションに適す。Ｊａｖａは比較的密な言語であるので、平均として各命令は他の種々のプログラム言語と比較してかなりの数の機能を実行できる。Ｊａｖａの密な性質はスペースおよび電力を節約するためにメモリをできるだけ少なくすることが好ましい、ポータブルの電池駆動デバイスに対して特に有益である。しかしながら、Ｊａｖａコードを実行する理由は、次の詳細な説明または特許請求の範囲では重要ではない。
【００１１】
次に図１を参照すると、ここには本発明の好ましい実施例に係わるシステム１００が示されている。図示されるように、システムは少なくとも２つのプロセッサ１０２と１０４とを含む。この開示の目的のために、プロセッサ１０２をＪａｖａスタックマシン（ＪＳＭ）と称し、プロセッサ１０４をメインプロセッサユニット（ＭＰＵ）と称すことができる。システム１００はメモリ１０６も含むことができ、このメモリはＪＳＭ１０２およびＭＰＵ１０４の双方に結合されているので、双方のプロセッサからアクセスできる。メモリ１０６の少なくとも一部は双方のプロセッサによって共用できるので、このことは双方のプロセッサが同じ共用メモリロケーションにアクセスできることを意味する。更に所望すれば、メモリ１０６の一部を一方のプロセッサまたは他のプロセッサに対するプライベートメモリとして指定できる。システム１００はＪａｖａバーチャルマシン（ＪＶＭ）１０８、コンパイラー１１０およびディスプレイ１１４も含む。ＪＳＭ１０２は、ユーザーがシステム１００の種々の機能を制御できるようにするための１つ以上の入出力（Ｉ／Ｏ）デバイス、例えばキーパッドに対するインターフェースを含むことが好ましい。更にＩ／ＯスペースからＪＳＭ１０２へデータストリームを受信し、ＪＳＭ１０２で処理してもよい。所望する場合には別の部品（特に図示せず）を含んでもよい。このように、システム１００は広範な種々の電子システムを示すか、またはこれらに適合できるが、電子システム例は図２に示されるような電池駆動式移動携帯電話を含むことができる。図２に示されるように、移動通信デバイスは一体化されたキーパッド４１２およびディスプレイ４１４を含む。上記のようなＪＳＭ１０２およびＭＰＵ１０４、およびその他の部品を電子パッケージ４１０内に収納してもよく、パッケージ４１０をキーパッド４１２、ディスプレイ４１４およびアンテナ４１８に接続できる高周波（ＲＦ）回路４１６に結合できる。
【００１２】
再度図１を参照すると、一般に周知のように、Ｊａｖａコードは複数のバイトコード１１２を含む。これらバイトコード１１２はＪＶＭ１０８に与えられ、コンパイラー１１０でコンパイルされ、内部で実行するためにＪＳＭ１０２および／またはＭＰＵ１０４へ与えられる。本発明の好ましい実施例では、ＪＳＭ１０２はＪａｖａバイトコードの少なくとも一部、および一般にはそのほとんどを実行できる。しかしながら、適当な場合、ＪＳＭ１０２はＪＳＭ１０２で実行されないか、または実行できない１つ以上のＪａｖａバイトコードを実行することをＭＰＵ１０４にリクエストしてもよい。ＭＰＵ１０４はＪａｖａコードを実行する他に非Ｊａｖａ命令を実行してもよい。ＭＰＵ１０４はオペレーティングシステムＯ／Ｓ（特に図示せず）のホストでもあり、オペレーティングシステムはシステムメモリ管理、ＪＶＭ１０８のスケジュールを定めるシステムタスク管理、およびシステムで実行する他のほとんどまたはすべてのネイティブタスク、ディスプレイ１１４の管理、入力デバイスなどからの入力の受信を含む種々の機能を実行する。Ｊａｖａコードは限定をすることなくシステム１００内でマルチメディア、ゲームまたはウェブに基づくアプリケーションを含む種々のアプリケーションのうちの１つを実行するように使用できるが、Ｏ／Ｓおよびその他のネイティブアプリケーションを含むことがある非ＪａｖａコードもＭＰＵ１０４上のシステムで作動できる。
【００１３】
ＪＭＶ１０８は一般にソフトウェアとハードウェアとの組み合わせを含む。ソフトウェアはコンパイラー１１０を含むことができ、ハードウェアはＪＳＭ１０２を含むことができる。ＪＭＶはクラスローダ、バイトコードヴェリファイア、ガーベイジコレクタおよびＪＳＭプロセッサ１０２で実行されないバイトコードを解読するためのバイトコード解読ループを含むことができる。
【００１４】
本発明の好ましい実施例によれば、ＪＳＭ１０２は少なくとも２つの命令セットを含むことができる。１つの命令セットは標準Ｊａｖａバイトコードを含むことができる。周知のようにＪａｖａは複数の命令が一般に１つのスタックをターゲットとする、スタックをベースとするプログラム言語である。例えばｉｎｔｅｇｅｒ  ａｄｄ（ＩＡＤＤ）Ｊａｖａ命令はスタックの頂部から２つの整数をポップし、これらを共に加算し、それらの和をスタックに戻すようにプッシュする。後により詳細に説明するように、ＪＳＭ１０２はスタックに基づくＪａｖａコードの実行を加速する種々の機能を有する、スタックをベースとするアーキテクチャを含む。
【００１５】
ＪＳＭ１０２によって実行される別の命令セットは標準Ｊａｖａ命令を除く命令も含むことができる。この他の命令セットは一般にＪａｖａ命令セットを補足するものであるので、補足命令セットアーキテクチャ（Ｃ−ＩＳＡ）と称すことができる。補足とは、アドレス計算が容易にＪＭＶデータ構造を通過するようにできるようにするＣ−ＩＳＡ命令を使用するマイクロシーケンスに種々の複素Ｊａｖａバイトコードの実行を置換できることを意味する。
【００１６】
図３はＪＳＭ１０２のブロック図の例を示す。図示するようにＪＳＭはデータ記憶装置１２２および命令記憶装置１３０に結合されたコア１２０を含む。このコアは図示するように１つ以上の部品を含むことができる。これら部品は複数のレジスタ１４０、３つのアドレス発生ユニット（ＡＧＵ）１４２、１４７、マイクロ変換ルックアサイドバッファ（マイクロＴＬＢ）１４４、１５６、マルチエントリーマイクロスタック１４６、代数論理ユニット（ＡＬＵ）１４８、乗算器１５０、デコードロジック１５２および命令フェッチロジック１５４を含むことが好ましい。一般に、データ記憶装置１２２またはマイクロスタック１４６からオペランドを検索し、ＡＬＵ１４８で処理できるが、命令はフェッチロジック１５４により命令記憶装置１３０からフェッチし、デコードロジック１５２によりデコードできる。レジスタ１４０に含まれるデータに少なくとも部分的に基づき、アドレスを計算するのに、アドレス発生ユニット１４２を使用できる。マイクロＴＬＢ１４４、１５６は一般にＭＰＵ１０４で作動中のオペレーティングシステムの制御下にあることが好ましいアドレス変換およびメモリ保護情報ビットのためのキャッシュの機能を実行する。
【００１７】
次に図４を参照すると、レジスタ１４０はＲ０〜Ｒ１５と表示された１６個のレジスタを含むことができる。レジスタＲ０〜Ｒ３、Ｒ５、Ｒ８〜Ｒ１１およびＲ１３〜Ｒ１４は、プログラマーにより任意の目的のために使用できる汎用（ＧＰ）レジスタとして使用できる。特定機能のために他のレジスタおよびＧＰレジスタの一部を使用してもよい。例えば、２つのプログラムカウンタを記憶するのにレジスタＲ４およびＲ１２を使用でき、プログラムカウンタ（ＰＣ）を記憶するのにレジスタＲ１４を使用することが好ましく、マイクロプログラムカウンタ（マイクロＰＣ）を記憶するのにレジスタＲ１２を使用することが好ましい。ＧＰレジスタとして使用する他に、現在実行中のＪａｖａ命令によって使用されるときにＪａｖａローカル変数を記憶できるメモリの一部のベースアドレスを記憶するのにレジスタＲ５を使用できる。マイクロスタック１４６の頂部はレジスタＲ６およびＲ７内の値により基準とすることができる。アドレスインデックス０（ＡＩ０）およびアドレスインデックス１（ＡＩ１）をホールドするのに、レジスタＲ８およびＲ９も使用できる。間接レジスタインデックス（ＩＲＩ）をホールドするのに、レジスタＲ１４を使用することもできる。ＪＳＭ１０９のステータスおよび制御のためにレジスタＲ１５を使用できる。
【００１８】
再度図３を参照すると、上記のようにＪＳＭ１０２はＪａｖａバイトコードを含むことができるスタックをベースとする命令セットからの命令を処理し、実行するようになっている。Ｊａｖａバイトコードは空でなければマイクロスタック１４６からデータをポップし、データをマイクロスタック１４６へプッシュする。マイクロスタック１４６はデータ記憶装置１２２内で実行される、より大きいスタックの頂部のｎ個のエントリーを含むことが好ましい。
【００１９】
データ記憶装置１２２は一般にデータキャッシュ（Ｄキャッシュ）１２４およびデータランダムアクセスメモリ（Ｄ−ＲＡＭｓｅｔ）１２６を一般に含む。２０００年６月５日に出願された継続中の米国特許出願第09/591,537号（代理人整理番号TI-29884）、２０００年６月９日に出願された米国特許出願第09/591,656号（代理人整理番号TI-29960）および２００１年８月１７日に出願された米国特許出願第09/932,794号（代理人整理番号TI-31351）を参照することができる。本書ではこれら米国特許出願のいずれも、参考例として援用する。（マイクロスタック１４６を除く）スタック、アレイおよび重要でないデータはＤキャッシュ１２４に記憶できるが、下記のようなＪａｖａローカル変数および関連するポインタだけでなく、重要なデータおよび非Ｊａｖａ変数（例えばＣ、Ｃ＋＋）はＤ−ＲＡＭｓｅｔ１２６に記憶できる。命令記憶装置１３０は命令ＲＡＭ（Ｉ−ＲＡＭｓｅｔ）１３２および命令キャッシュ（Ｉキャッシュ）１３４を含むことができる。複素マイクロシーケンス化されたバイトコードまたはコードのマイクロシーケンスまたは所定のシーケンスを記憶するのに、Ｉ−ＲＡＭｓｅｔ１３２を使用できる。
【００２０】
本発明の好ましい実施例によれば、ＪＳＭ１０２によって実行される少なくとも一部のアプリケーションは１つ以上の方法を含む。１つの方法は実行可能な命令を含み、１つ以上の機能を実行する。方法に対する他の用語としてサブルーチン、コードセグメントおよび機能を挙げることができるが、これら用語は本明細書の範囲を狭くするのに使用すべきではない。
【００２１】
１つの方法（コール方法）は別の方法（コールされた方法）をコールできる。コールされた方法が一旦その機能を実行すると、プログラム制御はコールした方法にリターンする。３つの方法（方法Ａ、方法Ｂおよび方法Ｃ）の間の相互作用を示す図５に示されるように、方法の多数の階層的レベルが可能である。図５の一例の目的のために、方法Ａが方法Ｂをコールし、方法Ｂが方法Ｃをコールする。このように方法Ａは方法Ａに対してコールされた方法である方法Ｂに対するコール側の方法である。同様に、方法Ｂは方法Ｃに対するコール側方法であり、方法Ｃは方法Ｂに対するコールされた方法と見なされる。
【００２２】
１つの方法は、前に説明したように、１つ以上のローカル変数を有することができる。ローカル変数は方法がそのタスクを実行する際にデータまたは他の方法で一時的に記憶するのに使用できる。ローカル変数はこれら変数が関係する方法に固有のものであることが好ましい。すなわち方法ＡおよびＡのローカル変数（ＬＶＡ）は一般に方法Ａにしかアクセスできず、方法Ａだけにしか意味を有しない。一旦方法Ａが完了すると、方法Ａのローカル変数は無意味になる。同様に、ＬＶＤおよびＬＶＣは方法ＢおよびＣにそれぞれ関連するローカル変数を含む。Ｊａｖａバイトコードはインデックスを使用してローカル変数を参照する。ＪＶＭは現在の方法のローカル変数を含むメモリのベースアドレスをポイントするローカル変数ポインタ（ＰＴＲ  ＬＶ）を維持する。特定のローカル変数にアクセスするために、所望するローカル変数のアドレスを得るのに、ベースアドレスに対して適当なインデックス値が加算される。一般に、１つの方法に関連するローカル変数は別の方法に関連するローカル変数と異なるサイズを有することができる。
【００２３】
図５は各方法ＢおよびＣが呼び出されるときのイベント５００、５１０および５２０の時間シーケンスに従ったＤ−ＲＡＭｓｅｔ１２６のステートを一般に示す。シーケンス５００では方法Ａが呼び出され、そのローカル変数（ＬＶＡ）に対して記憶スペース５０２が割り当てられる。ＬＶＡ記憶スペース５０２のベース部分をポイントするように、ベースポインタ（ＰＴＲ  ＬＶＡ）５０４も決定され、または選択される。ポインタＰＴＲ  ＬＶＡを使用するときに、ＰＴＲ  ＬＶＡの値に対するインデックスまたはオフセットを計算することにより、方法Ａのローカル変数セット５０２内の任意のローカル変数を参照できる。
【００２４】
ＪＳＭ１０２では複数の方法を実行できるが、一般に一度に１つの方法しかアクティブにならず、その命令はＪＳＭ１０２でアクティブに実行される。現在アクティブな方法のベースポインタは前に述べたようにレジスタＲ５に記憶することが好ましい。一般にアクティブ方法に対するベースポインタはアクティブ方法の呼び出しバイトコードを実行しながら、ＪＶＭ１０８で計算できる。
【００２５】
シーケンス５１０は方法Ａが方法ＢをコールするときのＤ−ＲＡＭｓｅｔ１２６のステートを示す。本発明の好ましい実施例によれば、方法Ｂに関連するローカル変数ＬＶＢは（図５で見たときにＬＶＡの頂部にある）一般にＬＶＡに隣接する記憶スペース５１２にスタックされる。矢印５０５に従い、ＬＶＡのためのベースポインタ（ＰＴＲ  ＬＶＡ）も、ロケーション５０４ＡにあるＬＶＢデータに隣接する（例えば下方の）Ｄ−ＲＡＭｓｅｔ１２６内にも記憶することが好ましい。従って、２つのローカル変数セットＬＶＡとＬＶＢとはＬＶＡおよび可能な場合には他のデータのためのベースポインタ（ＰＴＲ  ＬＶＡ）によって分離できる。ＬＶＢデータセット５０２に対して反転されたスペースに隣接して（下方に）ＬＶＡに対するベースポインタ５０４が一旦記憶されると、ＬＶＢデータセットと共に使用するためのベースポインタ５１４によりレジスタＲ５が更新（すなわちロード）される。
【００２６】
タイムシーケンス５２０に対する矢印５０７に従い、方法Ｃが呼び出される（方法Ｂによってコールされる）と、図示されるようにＬＶＢの頂部にあり、ＰＴＲ  ＬＶＣの下方にあるロケーション５１４Ａに方法Ｂのためのベースポインタ（ＰＴＲ  ＬＶＢ）が記憶され、ＬＶＣデータセット５２２のベースに対するベースポインタ５２４（ＰＴＲ  ＬＶＣ）がレジスタＲ５にロードされる。図示するように、ＬＶＢ５１２（の頂部）およびＰＴＲ  ＬＶＢ５１４Ａに一般に隣接する記憶スペース５２２に方法Ｃのローカル変数（ＬＶＣ）が割り当てられる。上記計算に類似する計算に従い、ロケーション５１４ＡにＰＴＲ  ＬＶＢ値が記憶される。
【００２７】
図６は、各方法（方法ＣおよびＢ）が完了し、コール側方法（方法ＢおよびＣ）にリターンするときのリターンプロセスを示す。ローカル変数フレームがＬＶＡおよびＬＶＢに対するポインタＰＴＲ  ＬＶＡおよびＰＴＲ  ＬＶＢと共にＬＶＡ、ＬＶＢおよびＬＶＣを含むタイムシーケンス５３０と共に開始し、方法Ｃが完了する。プログラム制御は方法Ｂにリターンし、ターゲットアドレスとしてＰＴＲ  ＬＶＣからの固定オフセットを含むロード命令を通してＰＴＲ  ＬＶＢをアクセスすることにより、タイムシーケンス５３２における矢印５１９が示すように、ロケーション５１４ＡからレジスタＲ５へＬＶＢのベースポインタがロードされる。次に方法Ｂが完了すると、タイムシーケンス５３４における矢印５２１が示すように、ロケーション５０４ＡからレジスタＲ５へＬＶＡのポインタ（ＰＴＲ  ＬＶＡ）がロードされる。ベースポインタは現在のアクティブな方法のベースポインタからオフセット値（例えば１）を引いた値によりポイントされたロケーションにある値をロードすることにより、データキャッシュ１２６内のロケーションからベースポインタを検索することができる。
【００２８】
本発明の好ましい実施例によれば、Ｄ−ＲＡＭｓｅｔ１２６は次の性質の１つ以上またはすべてを提供するように構成されている。以下、これら性質を提供するためのＤ−ＲＡＭｓｅｔ１２６の実現例について詳細に説明する。Ｄ−ＲＡＭｓｅｔ１２６に記憶されたローカル変数およびポインタは所定位置にロックすることが好ましい。このことは、Ｄ−ＲＡＭｓｅｔ１２６はキャッシュメモリとして実現されるが、一般にローカル変数の追い立ては制御された態様で阻止できることを意味する。Ｄ−ＲＡＭｓｅｔ１２６のロックする性質は有利となり得るが、キャッシュの不一致のペナルティを受けないように方法が実行される。更に、（下記に指定する）少なくとも一部の状況では、メインメモリ１０６への有効でダーティなローカル変数の書き戻しが防止される。更にすべての所望するローカル変数を収納するのにＤ−ＲＡＭｓｅｔ１２６が不十分な容量しか有しない場合の機構を使用できる。更に方法が一旦完了すると、完了した方法のローカル変数に対して割り当てられたＤ−ＲＡＭｓｅｔ部分は有効としてマークされたままである。このように、かかる方法または任意の新しい方法が実行され、（上記継続中の１つ以上の出願に記載され、本明細書に参考例として援用するような）ＲＡＭｓｅｔ空間を再利用する場合、かかる方法の関連するローカル変数はＤ−ＲＡＭｓｅｔの同じ部分にマッピングされる。ＲＡＭｓｅｔラインに既に有効とマークされている場合、新しいローカル変数へのアクセスは不一致を発生しない。ローカル変数は重要性しか有しないので、メモリからデータを検索することは不要であるが、１つの方法が実行され、新しい実行方法はまずローカル変数を使用する前にそのローカル変数のすべてを初期化する。不一致を発生しないので、外部メモリからラインをフェッチすることを防止することにより、レイテンシーおよび電力消費量が低減する。Ｊａｖａプログラムの実行の開始の後の比較的短い時間の後で、ＲＡＭｓｅｔのすべての対応するラインは有効とマークされ、新しくコールされた方法のローカル変数へのアクセスは不一致を発生せず、よって０待機ステートメモリの優れた性能が提供される。更にＲＡＭｓｅｔのキャッシュ性質によって、必要なときはいつもメインメモリ内のデータを廃棄したりセーブすることが可能となる。
【００２９】
本発明の好ましい実施例によれば、Ｄ−ＲＡＭｓｅｔ１２６にローカル変数（ＬＶＡ−ＬＶＣ）および関連するポインタ（ＰＴＲ  ＬＶＡ−ＰＴＲ  ＬＶＣ）を記憶できる。Ｄ−ＲＡＭｓｅｔ１２６は後述する好ましい実施例および２０００年６月９日に出願された「多数のフィルモードを有するキャッシュ」を発明の名称とする継続中の米国特許出願第09/591,656号、２０００年６月９日に出願された「スマートキャッシュ」を発明の名称とする米国特許出願第09/591,537号および公開番号第2002/0065990号に従って実現でき、本書ではこれら引用明細書のいずれも参考例として援用する。
【００３０】
後により詳細に説明するように、好ましい実施例ではデータ記憶装置１２２（図３）は３−ウェイキャッシュを含むことが好ましく、このうちの少なくとも１つのキャッシュウェイはＤ−ＲＡＭｓｅｔ１２６を含む。メインメモリのアドレスロケーションからスタートするメモリの隣接するブロック（例えば上記ローカル変数およびポインタ）をキャッシュするのにＤ−ＲＡＭｓｅｔ（または単にＲＡＭｓｅｔと称す）キャッシュ１２６を使用できる。その他の２つのキャッシュウェイ１２４はＲＡＭｓｅｔキャッシュメモリとして構成してもよいし、また、所望する別のアーキテクチャを使用してもよい。例えば１つのＲＡＭｓｅｔキャッシュ１２６および２−ウェイセット関連キャッシュ１２４としてデータ記憶装置１２２を構成してもよい。このようにデータ記憶装置１２２は一般に１つ以上の形態のキャッシュメモリを含む。所望する場合、命令記憶装置１３０も同じように構成してもよい。
【００３１】
作動時には、プロセッサコア１０２は所定アドレススペース内のメインメモリ１０６（図１）にアクセスできる。データ記憶装置１２２にはメインメモリ１０６内のリクエストされたアドレスにある情報も記憶する場合、このデータはデータキャッシュ１２４、１２６から検索される。リクエストされた情報がデータキャッシュに記憶されない場合、このデータはメインメモリ１０６から検索し、データキャッシュ１２４、１２６を検索されたデータで更新してもよい。
【００３２】
図７はＲＡＭｓｅｔキャッシュおよび２−ウェイセットの関連キャッシュを備えた、好ましい実施例に係わるデータ記憶装置１２２のより詳細なブロック図を示す。データ記憶装置１２２の作動をキャッシュコントローラ２２２が制御できる。キャッシュコントローラ２２２は、ＲＡＭ＿ｆｉｌｌ＿ｍｏｄｅ２２４、Ｃａｃｈｅ＿Ｅｎａｂｌｅ２２６、ＤＭ／２ＳＡ２２８およびＦｕｌｌ＿ＲＡＭ＿ｂａｓｅ２３０を含む（これらだけに限定されるものではない）４つのステータスビットを含む複数のステータスビット、およびローカルＲＡＭキャッシュ（ＬＲ／Ｃ）２３１だけでなく、図７に特に示されていない他のビットを含む複数のステータスビットを含むことができる。２−ウェイ関連キャッシュはダイレクトマップとして構成でき、他のウェイはＲＡＭｓｅｔとして構成できる。これとは異なり、本書で参考例として援用する引用明細書のうちの少なくとも１つに記載されているように、キャッシュ制御ビットＤＭ／２ＳＡ２３８およびＦＵＬＬ＿ＲＡＭ＿Ｓｅｔ＿ｂａｓｅ２３０に応じて２−ウェイセット関連キャッシュを２つの追加ＲＡＭｓｅｔとして構成してもよい。しかしながら、この好ましい構成は標準データキャッシュに結合された単一のＲＡＭｓｅｔを含む。このＲＡＭｓｅｔはサイズが限定されないし、またＲＡＭｓｅｔは他のキャッシュウェイと同じサイズを有する必要はない。従って、容量の理由から、別のＲＡＭｓｅｔが必要な場合、容量のより大きい単一のＲＡＭｓｅｔが好ましい。
【００３３】
図示するように、キャッシュコントローラ２２２はＦｕｌｌ＿Ｓｅｔ＿Ｔａｇ２３２（各々はレジスタ２３２ａ〜２３２ｃと表示）、Ｇｌｏｂａｌ＿Ｖａｌｉｄビット２３４（各々はビット２３４ａ〜２３４ｃと表示）、タグメモリ２３６（各々はタグメモリ２３６ｂおよび２３６ｃと表示）、有効エントリービットアレイ２３７（各々はビットアレイ２３７ａ〜２３７ｃと表示）およびデータアレイ２３８（およびはデータアレイ２３８ａ〜２３８ｃと表示）に結合されている。コンパレータ２４０（各々はコンパレータ２４０ａ〜２４０ｃと表示）はそれぞれのＦｕｌｌ＿Ｓｅｔ＿Ｔａｇレジスタ２３２に結合できる。コンパレータ２４２（各々はコンパレータ２４２ｂおよび２４２ｃと表示）はそれぞれのタグメモリ２３６に結合している。出力バッファ２４４（各々はバッファ２４４ａ〜２４４ｃと表示）はそれぞれのデータアレイ２３８に結合できる。一致／不一致ロジック２４６（各々はロジック２４６ａ〜２４６ｃと表示）はコンパレータ２４０、グローバル有効ビット２３４、有効ビット２３７、ＲＡＭ＿ｆｉｌｌ＿ｍｏｄｅビット２４４およびＣａｃｈｅ＿Ｅｎａｂｌｅビット２２６に結合できる。
【００３４】
作動の際に制御ビット２２４、２２６、２２８および２３０を使用するようにデータ記憶装置１２２を構成できる。標準キャッシュアーキテクチャの場合のように、Ｃａｃｈｅ＿Ｅｎａｂｌｅ２２６によってデータ記憶装置をイネーブルしたり、またはディスエーブルできる。データ記憶装置１２２がディスエーブルされる場合（すなわちＣａｃｈｅ＿Ｅｎａｂｌｅ＝０）、データ記憶装置１２２を使用することなくメインメモリ１０６でデータ読み出しアクセスを実行してもよい。データ記憶装置１２２がイネーブルされている場合（すなわちＣａｃｈｅ＿Ｅｎａｂｌｅ＝１）、データ記憶装置１２２でデータをアクセスしてもよく、この場合、かかるデータはデータ記憶装置に存在している。不一致が生じた場合、メインメモリ１０６からライン（すなわち１６バイト）をフェッチし、コア１２０へ与えることができる。
【００３５】
キャッシュの他のウェイに対してデータアレイ２３８ａのサイズはデータアレイ２３８ｂ、ｃのサイズと異なっていてもよい。データアレイ２３８ｂおよび２３８ｃの各々はサイズが８Ｋバイトであり、５１２ラインとして構成されており、各ラインは８つの２バイトデータ値をホールドしていると仮定するが、これは説明のためであって、発明の開示を限定するものではない。データアレイ２３８ａはサイズを１６Ｋバイトとし、１０２４のラインとして構成でき、各ラインは８つの２バイトデータ値をホールドできる（データアレイ２３８および有効ビットアレイ２３７（および適用できる場合にはタグメモリ２３６）の１つのラインをアドレス指定するのに、ＡＤＤＲ［Ｌ］信号を使用できる。従って、１０２４のラインの最初のウェイに対し、ＡＤＤＲ［Ｌ］はコアからの１０ビット［１３：４］のアドレスを含むことができる。５１２のラインの第２および第３ウェイに対し、ＡＤＤＲ［Ｌ］はコアからの９ビット［１２：４］のアドレスを含むことができる。ＡＤＤＲ［Ｈ］信号はどのセットをラインにマップするかを定める。従って、４ギガバイトのアドレススペースを仮定した場合、ＡＤＤＲ［Ｈ］はキャッシュ１３０の第１ウェイに対してはコアからのビット［３１：１４］のアドレスを使用し、キャッシュ１３０の第２および第３ウェイの各々に対してはビット［３１：１３］を使用する。
【００３６】
２ウェイセット関連キャッシュ（すなわち図３におけるＤキャッシュ１２４）に対してタグメモリ２３６およびコンパレータ２４２を使用できる。コア１２０がメモリアクセスを実行するとき、低位ビットのアドレス（ＡＤＤＲ［Ｌ］）でタグメモリ２３６にアクセスする。タグメモリロケーションはデータアレイ２３８の対応するラインに記憶されたメインメモリアドレスの高位ビットを記憶する。これら高位アドレスビットはコア１２０からのアドレスの高位アドレスビット（ＡＤＤＲ［Ｈ］）と比較できる。ＡＤＤＲ［Ｈ］がＡＤＤＲ［Ｌ］におけるタグメモリの内容と一致した場合、キャッシュエントリーが有効であることを低位ビットに関連する有効ビットが表示すれば一致が生じる。キャッシュの一致が生じた場合、対応する出力バッファ２４４をイネーブルすることにより、ＡＤＤＲ［Ｌ］における対応するデータアレイ２３８からのデータをコア１２０へ与えることができる。下記のように、ＲＡＭｓｅｔキャッシュで不一致が生じた場合、２ウェイキャッシュからのデータがコア１２０へ与えられる。２ウェイセット関連キャッシュおよび直接マップキャッシュの作動はそれ自体、従来どおりでよく、ＲＡＭｓｅｔキャッシュ１２６によって影響されないことがある。２ウェイキャッシュ１２４の代わりにその他のキャッシュ技術を使用することもできる。
【００３７】
ＲＡＭｓｅｔキャッシュ１２６はこのＲＡＭｓｅｔのためのＦｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２により定められるアドレスでスタートし、メインメモリ１０６の連続ブロックを記憶することが好ましい。情報のこの連続ブロック（すなわちローカル変数／ポインタ）はＲＡＭｓｅｔの対応するデータアレイ２３８にマップできる。少なくとも一部の実施例ではＦｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２にはスタートアドレスの高位ビットしか記憶されない。図８は、単一ＲＡＭｓｅｔに対するこのマッピングを示している。図示するように、Ｆｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２ａの内容は、データアレイ２３８ａでキャッシュされるメモリの連続ブロックに対するスタートアドレスを定める。
【００３８】
再び図７を参照すると、コア１２０からのアドレスの高位ビットがＦｕｌｌ＿ｓｅｔ＿ＴＡＧレジスタ２３２の内容に一致しないか、グローバル有効ビットが０であるとき、ＲＡＭｓｅｔの不一致が生じ得る。いずれもの場合においても、ＲＡＭの不一致が生じると、データ記憶装置１２２は従来の２ウェイキャッシュロジックのように働くことができる。このように、２ウェイ関連キャッシュ内で一致が生じた場合、２ウェイセット関連キャッシュからコア１２０へデータが与えられる。そうでない場合、メインメモリ１０６からデータが検索され、コアへ転送され、２ウェイ関連キャッシュの「ｖｉｃｔｉｍ（ヴィクティム）」エントリーへロードされる。
【００３９】
コア１２０からのアドレスの高位ビットがＦｕｌｌ＿ｓｅｔ＿ＴＡＧレジスタ２３２の内容と一致し、グローバル有効ビットが１に等しい場合（グローバル有効ビットの設定については後により詳細に説明する）、ＲＡＭｓｅｔの一致状況が生じ得る。デフォルトによりＲＡＭｓｅｔの比較は他のキャッシュウェイよりもより高い優先権を有していることが好ましい。一致状況はＲＡＭｓｅｔにリクエストされたデータがマッピングされたことを表示している。データを含むラインに対応するＶａｌｉｄ  ｅｎｔｒｙビット２３７が１にセットされた場合、アドレスがＲＡＭｓｅｔに一致し、ＲＡＭｓｅｔ内にデータが存在しているので、コンパレータ２４０は一致／不一致ロジック２４６に一致・一致信号を発生させる。ＲＡＭｓｅｔのエントリーの対応する有効ビット２３７が０であれば、ロジック２４０は一致・不一致信号を発生する。この理由は、アドレスがＲＡＭｓｅｔに一致するが、ＲＡＭｓｅｔ内にはまだデータが存在していないからである。この後者のケースでは、メインメモリ１０６からデータをフェッチし、これをＲＡＭｓｅｔのデータアレイ２３８へロードできる。ＲＡＭｓｅｔロジックにおける一致は通常のキャッシュロジックよりも高い優先度を有することが好ましい。ＲＡＭｓｅｔロジックが一致信号を発生すると、２ウェイキャッシュの標準ロジックは不一致信号を発生する。コードミスを生じさせることなく、ＲＡＭｓｅｔおよび２ウェイキャッシュの双方に情報が存在でき、２ウェイキャッシュの置換機構により２ウェイキャッシュ内の重複したキャッシュ入力は最終的に追い立てられる。その理由は、かかるデータが使用されないからである。しかしながら、好ましい実施例ではＲＡＭｓｅｔにマップされたデータはまずキャッシュから除かれ、データコヒーレンシーの問題を防止する。ＲＡＭｓｅｔとして構成されているとき、適当なコンフィギュレーションビット（例えばＬＲ／Ｃビット２３１）の設定に応じて、データアレイ２３８ａ、ｂ、ｃをローカルＲＡＭとして、またはキャッシュされたセグメントとして構成できる。しかしながら、ローカルＲＡＭとして構成されているときでも、個々の有効ビットを更新してもよいが、不一致の場合でも外部メモリへのアクセスは生じない。
【００４０】
ＲＡＭｓｅｔを作動できるように構成するには、Ｆｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２にスタートアドレス（ｓｅｔ＿ｓｔａｒｔ＿ａｄｄｒ）をロードし、ＲＡＭ＿ｆｉｌｌ＿ｍｏｄｅビット２２４を所望するフィルモードに構成することが好ましい。キャッシュをフィルするための回路はセット関連キャッシュのラインをフィルするのに使用されるキャッシュと同じものにすることができる。少なくとも１つのフィルモードを実現することができ、これを下記に説明するようにｌｉｎｅ−ｂｙ−ｌｉｎｅのフィルモードと称す。所望すれば、本明細書参考例として援用する上記明細書のうちの少なくとも１つに記載されているｓｅｔ  ｆｉｌｌモードのような他のフィルモードも実現できる。
【００４１】
ｌｉｎｅ−ｂｙ−ｌｉｎｅ  ｆｉｌｌの場合（ＲＡＭ＿ｆｉｌｌ＿ｍｏｄｅ＝０）、Ｆｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２にスタートアドレスをロードするときにはグローバル有効ビット３４を１にセットし、有効エントリービット２３の各々を０にセットする。このポイントでは、データアレイ２３８は空である（Ｃａｃｈｅ＿Ｅｎａｂｌｅビット２２６はデータ記憶装置１２２の作動を可能にするように１にセットされると仮定する）。コア１２０からのアドレスを受信すると、アドレスの低位ビットに基づき、有効エントリービット２３７が選択される。上記のようにＲＡＭｓｅｔのサイズが１６Ｋバイトであり、１Ｋ×１６バイト（ここで１６バイトは関連する２ウェイキャッシュにおけるブロックラインに等しい）のアレイとして構成されている場合、Ｆｕｌｌ＿ｓｅｔ＿ＴＡＧレジスタ２３２はスタートアドレスの１８ビット［３１：１４］を記憶できる。ＲＡＭｓｅｔのアドレスインデクシングの各エントリー（ＡＤＤＲ［Ｌ］）は１０ビット［１３：４］を含むことができるが、ライン内の１つのデータ値にアクセスするのに使用されるデータアドレスは４ビット［３：０］（データアクセスを１バイトと仮定）を含むことができる。Ｊａｖａでは、ローカル変数は４つのバイトエンティティを含むが、上記のようにローカル変数およびその他の生じ得るクリティカルなデータとの間でＲＡＭｓｅｔを共用してもよい。一致・不一致状況が生じるたびにメインメモリ１０６から（ＡＤＤＲ［Ｌ］における）データアレイ２３８のラインがロードされる。その理由は、コンパレータ２４０がＡＤＤＲ［Ｈ］とＦｕｌｌ＿ｓｅｔ＿ＴＡＧの内容の間の一致を判断し、グローバルビット３４が１にセットされ、ＡＤＤＲ［Ｌ］におけるラインに関連する有効ビット２３７が０となるからである。このような状況は、選択されたラインがＲＡＭｓｅｔにマッピングされるが、ＲＡＭｓｅｔのデータアレイ２３８にはまだロードされていないことを示している。メインメモリ１０６からデータアレイ２３８へラインがロードされると、このラインに対応する有効ビット２３７が１にセットされる。
【００４２】
（有効データの存在を表示するように有効ビットがセットされる結果を生じさせる）このようなロード手順は、通常のキャッシュラインロードと同じ時間ペナルティを有するが、Ｆｕｌｌ＿Ｓｅｔ＿Ｔａｇの内容が変更されない限り、エントリーはＲＡＭｓｅｔ内にロックされたままとなる（すなわち有効ビットがセットされたままとなる）ので、処理デバイスはその後のアクセスでペナルティを受けることはない。このように、その後の方法によってラインを再使用しても、メインメモリ１０６にアクセスする必要がないように、完了した方法が使用するラインは有効なままである。更に、完了した方法のためにローカル変数のスペースをフリーにしておくことは、一般に対応するベースポインタを無視することにしか関係しない。更に、方法の終了時にメインメモリ１０６へローカル変数をコピーする必要はない。その理由は、かかる消滅したローカル変数はそれ以上使用されないからである。
【００４３】
ある状況では、ＤＲＡＭｓｅｔ１２６の容量が所望するすべてのローカル変数をホールドするのに十分でなくなることがあり得る。少なくとも１つの実施例によれば、非Ｄ−ＲＡＭｓｅｔのデータアレイ２３８に余分なローカル変数を記憶することができる。別の実施例によれば、非Ｄ−ＲＡＭｓｅｔキャッシュウェイにローカル変数のより大きいブロック（すなわち余分なローカル変数よりも大きい）をマッピングすることができる。方法コールを開始する呼び出しバイトコード中に、コールされた方法のローカル変数サイズはＪＶＭ１０８によって知られる。ＪＶＭは（読み出し可能なコンフィギュレーションレジスタを介し）全体のＲＡＭｓｅｔのサイズおよび既に利用されたＲＡＭサイズも知る。従って、この情報に基づき、ＪＶＭはＲＡＭｓｅｔへの新しいローカル変数エリアをマップするかを判断してもよいし、判断しなくてもよい。１つの方法は、大きな量のローカル変数を有したり、各コールでこれら変数を使用しないことがあり得る。従って、ＲＡＭｓｅｔにこれらローカル変数をマッピングすることは、コール側方法のベースポインタの不必要なＲＡＭｓｅｔ管理およびローカル変数の節約／回復を強制することがあり得る。その代わりにＪＶＭ１０８はより大きいチャンクのローカル変数を有する方法を非ＲＡＭｓｅｔデータキャッシュにマッピングし、よってより少ない数のローカル変数を有する方法のためにＲＡＭｓｅｔ内により広いスペースを保留し得る。一部の実施例では、多くの方法は１０個未満のローカル変数を有し、ほとんどすべての方法は約４０個未満のローカル変数を有するが、当然ながらこれら数値の特徴はアプリケーションに応じて決まる。ローカル変数の多い方法に対し、このシステムはＲＡＭｓｅｔの外にこれらローカル変数をマッピングし、他の方法にペナルティを加えることを防止している。このような技術は一般にコール側方法のＰＴＲ＿ＬＶの管理によりリターン機構に対してトランスペアレントである。方法終了時にこの方法のローカル変数を含むラインは有効としてマークされたままとなり得る。上記のように、かかるラインを有効としてマークし続けることは、新しい方法のコール時に不一致が生じるのを防止できる。
【００４４】
一部の実施例によれば、Ｄ−ＲＡＭｓｅｔのデータアレイ２３８に外部メモリ１０６の２つ以上の隣接ブロックをマッピングできる。図９に示されるように、例えばＤ−ＲＡＭｓｅｔ１２６に外部メモリ１０６の２つの隣接ブロック６００および６０２をマッピングできる。ブロック６００は０ｘ００００〜０ｘ３ＦＦＦのアドレスレンジからの１６Ｋの隣接バイトを含む。同じように、ブロック６０２は０ｘ８０００〜０ｘＢＦＦＦまでのアドレスレンジからの１６Ｋの隣接バイトを含む。これまで説明したように、Ｄ−ＲＡＭｓｅｔのＦｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２を再プログラムすることにより、Ｄ−ＲＡＭｓｅｔ１２６に一度に１つのブロック６００、６０２をマッピングできる。
【００４５】
データ記憶装置１２２に関連して、複数のコマンドを実現できる。かかるコマンドはＤ−ＲＡＭｓｅｔ−Ｃｌｅａｎ、Ｄ−ＲＡＭｓｅｔ−ＦｌｕｓｈおよびＤ−ＲＡＭｓｅｔ−ｐｏｌｉｃｙ−ｓｅｔを含むことができるが、これらだけに限定されるものではない。各ラインのための有効ビット２３７の他にラインがダーティデータを含むかどうかを示すためのダーティビットも提供し得る。Ｄ−ＲＡＭｓｅｔ−Ｃｌｅａｎコマンドは各ラインに関連する有効ビットおよびダーティビットを検査することによって実行できる。次にこのＤ−ＲＡＭｓｅｔ−Ｃｌｅａｎコマンドは有効データおよびダーティデータを有するラインだけの外部メモリ１０６にコピーし戻される。ダーティビットのない実施例の場合、Ｄ＿ＲＡＭｓｅｔ−ＣｌｅａｎはＤ＿ＲＡＭｓｅｔ１２６から外部メモリ１０６へすべての有効エントリーをコピーすることが好ましい。Ｄ−ＲＡＭｓｅｔ−Ｆｌｕｓｈコマンドは対応する有効ビット２３７をクリアすることにより、Ｄ−ＲＡＭｓｅｔ１２６内のラインを無効にする。少なくとも３つの変形例のうちの１つでは、Ｄ−ＲＡＭｓｅｔ−ＣｌｅａｎおよびＤ−ＲＡＭｓｅｔ−Ｆｌｕｓｈコマンドを実行できる。１つの変形例では、Ｄ−ＲＡＭｓｅｔ−ＣｌｅａｎおよびＤ−ＲＡＭｓｅｔ−ＦｌｕｓｈコマンドはＤ−ＲＡＭｓｅｔ１２６（Ｄ−ＲＡＭｓｅｔ−ＣｌｅａｎＡｌｌおよびＤ−ＲＡＭｓｅｔ−ＦｌｕｓｈＡｌｌ）のラインのすべてでそれぞれの動作を実行する。別の変形例では、Ｄ−ＲＡＭｓｅｔ−Ｃｌｅａｎコマンドはコマンド内のオペランドとして指定されるアドレスのレンジ（Ｄ−ＲＡＭｓｅｔ−ＣｌｅａｎＲａｎｇｅおよびＤ−ＲＡＭｓｅｔ−ＦｌｕｓｈＲａｎｇｅ）内に入るＤ−ＲＡＭｓｅｔ１２６内のラインでそれぞれの動作を実行する。第３変形例は、Ｄ−ＲＡＭｓｅｔ１２６内の単一アドレス（Ｄ−ＲＡＭｓｅｔ−ＣｌｅａｎＥｎｔｒｙおよびＤ−ＲＡＭｓｅｔ−ＦｌｕｓｈＥｎｔｒｙ）にＤ−ＲＡＭｓｅｔ−ＣｌｅａｎおよびＤ−ＲＡＭｓｅｔ−Ｆｌｕｓｈコマンドが作用することを認め、セーブするかまたは無効にすべき、対応するデータアドレスを提供している。
【００４６】
Ｄ−ＲＡＭｓｅｔ−ｐｏｌｉｃｙ−ｓｅｔコマンドはＲＡＭｓｅｔとして構成されたデータアレイ２３８がローカルＲＡＭとして機能するか、キャッシュとして機能するかを指定することが好ましい。Ｄ−ＲＡＭｓｅｔ−ｐｏｌｉｃｙ−ｓｅｔコマンドはデータアレイ２３８をどのように使用すべきかを表示するためのビットをレジスタにセットできる。Ｄ−ＲＡＭｓｅｔ−ｐｏｌｉｃｙ−ｓｅｔコマンドによって設定されるビットはステータスレジスタＲ１５内のビットと、図７に示されるようにキャッシュコントローラ２２２内のレジスタまたはＪＳＭ１０２内の（特に示されていない）別の制御レジスタ内のＬＲ／Ｃビット２３１を含むことができる。関連するデータアレイの所望する挙動を指定するようにこのビットが一旦設定されると、キャッシュコントローラ２２２は実現すべき所望する割り当てポリシーを決定するために、ビットのステートを読み出す。このビットは、例えば（スクラッチパッドと称される）ローカルＲＡＭの挙動を指定するようにセットできる。このモードでは、上記のように外部メモリからのフェッチが省略される。これとは異なり、ターゲットデータにアクセスする前の不一致時に外部メモリからのフェッチを実行する、キャッシュに基づく割り当てポリシーを指定するようにビットをセットしてもよい。Ｄ−ＲＡＭｓｅｔ−ｐｏｌｉｃｙ−ｓｅｔコマンドの実行は実行時間中にダイナミックに実行できる。
【００４７】
図１０はオーバーフロー状態を示す。６１０にてＤ−ＲＡＭｓｅｔ１２６は方法Ａに関連するローカル変形例６１２と関連するメタデータ６１４を含むことができる。このメタデータ６１４はこれまで説明した種々の実行時間に依存したデータおよびローカル変数ポインタを含むことができる。６１５にて方法Ａは方法Ｂを呼び出す。この例では、メモリブロック６１６内の方法Ｂのローカル変数６２０およびメタデータ６２２のサイズは１２６ｃｕｒｒｅｎｔと識別されたそのときのＤ−ＲＡＭｓｅｔにおけるローカル変数へ割り当てるのに利用できるメモリ６２１の量よりも多い。本発明の一部の実施例によれば、方法Ｂのローカル変数およびメタデータは上記のように２ウェイセットの関連するキャッシュへマッピングできる。別の実施例では、新しいメモリページを割り当て、これを図９に示されるようなＤ−ＲＡＭｓｅｔ１２６にマッピングできる。Ｄ−ＲＡＭｓｅｔ１２６をリマッピングすることはＲＡＭｓｅｔのそのときのデータから望まれるような１つ以上のローカル変数およびメタデータをセーブすることを含み得る。方法Ｂのローカル変数のサイズがＤ−ＲＡＭｓｅｔ１２６の全サイズよりも大きい場合、Ｄ−ＲＡＭｓｅｔに方法Ｂのローカル変数の一部しか記憶しない。任意のレートにおいて、６２５で方法Ｂが完了し、再スタートすると、ＪＶＭ１０８は方法Ａのローカル変数およびメタデータによりＤ−ＲＡＭｓｅｔを再マッピングすることが好ましい。
【００４８】
次に図１１を参照する。次のようにオーバーフロー状態を取り扱い、コンテクストスイッチに適用することもできる。６５０において、新しいメモリページに切り換わる前にＤ−ＲＡＭｓｅｔ１２６内に存在する、終了していない方法からのすべてのローカル変数および関連するメタデータを、好ましくはＤ−ＲＡＭｓｅｔ−ＣｌｅａｎＲａｎｇｅコマンドを使用して、外部メモリ１０６にコピーすることが好ましい。上記のように、このコマンドはＤ−ＲＡＭｓｅｔ−Ｃｌｅａｎコマンドおよびクリーンにする（外部メモリ１０６へコピーバックする）アドレスのレンジを指定するオペランドを含む。クリーンにすべきアドレスのレンジはＦｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２に記憶されたベースアドレスからローカル変数ポインタ（ＰＴＲ  ＬＶ）６５１とそのときのローカル変数スペースのサイズに対応する値６５３との和に対応するアドレスまでのアドレスを含む。これとは異なり、全Ｄ−ＲＡＭｓｅｔをクリーンにするのに、Ｄ−ＲＡＭｓｅｔ−ＣｌｅａｎＡｌｌコマンドを使用できる。更に、所望するレンジをクリーンにするのにＤ−ＲＡＭｓｅｔ−ＣｌｅａｎＥｎｔｒｙコマンドの１つ以上の繰り返しを実行できる。６５２にてＤ−ＲＡＭｓｅｔ１２６に新しいページを割り当てることが好ましい。Ｄ−ＲＡＭｓｅｔに記憶された新しいメタデータにＦｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２の前の値がセーブされ、新しいページベースアドレスでＦｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２が再プログラムされる。最後に、上記のように、Ｄ−ＲＡＭｓｅｔ  ｐｏｌｉｃｙをＬｏｃａｌ  ＲＡＭ（スクラッチパッド）モードにセットすることが好ましい。この機能は呼び出しコードシーケンスで次の例のように実行できる。
【００４９】
2005011353.tif 000003
【００５０】
図１２はアンダーフロー状態を示し、この状態はコンテクストのスイッチ時にも適用できる。方法からのリターンはＤ−ＲＡＭｓｅｔの別のページ（すなわちＲＡＭｓｅｔ１２６に前にマッピングされたページ）への変化を促すことができる。一般にＤ−ＲＡＭｓｅｔの再ローディングは各対応ラインの最初のアクセス時だけの外部メモリ１０６からの値のフェッチを含むことが好ましい。本明細書で説明するように、ＪＳＭ１０２はロードポリシーをダイナミックに設定する能力を有する。本発明の好ましい実施例によれば、Ｄ−ＲＡＭｓｅｔのアンダーフロー状況のこのような再ローディングは次のように扱うことができる。６６０において、（Ｆｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２からのメタデータに記憶されているものとしてこれまで説明した）Ｄ−ＲＡＭｓｅｔベースの前の値が、Ｄ−ＲＡＭｓｅｔのメタデータから検索され、Ｆｕｌｌ＿ｓｅｔ＿ｔａｇレジスタ２３２へ再ロードされる。６６２において、前にセーブされたローカル変数およびメタデータの値をレストアする前に、Ｄ−ＲＡＭｓｅｔ−ＦｌｕｓｈＡｌｌコマンド（このコマンドは全Ｄ−ＲＡＭｓｅｔを無効にする）によって、Ｄ−ＲＡＭｓｅｔ１２６内のデータを無効にすることが好ましい。最後に、Ｄ−ＲＡＭｓｅｔ割り当てポリシーは最初に特定のラインにアクセスがなされたときに外部メモリ１０６からのフェッチが生じることができるようにするキャッシュモードに構成される。この機能はリターンコードシーケンスで次の例のように実現できる。
【００５１】
2005011353.tif 000004
【００５２】
以上で、本発明の好ましい実施例について図示し、説明したが、当業者であれば本発明の要旨から逸脱することなく、実施例について変形することができよう。本明細書で説明した実施例は単なる例であり、発明を限定するものではない。本明細書に開示した発明の多数の変形および変更が可能であり、これらは本発明の範囲内のものである。従って、発明の保護範囲は上記詳細な説明では限定されない。本明細書では特許請求の範囲を本発明の実施例として援用する。
【００５３】
以上の説明に関して、更に以下の項を開示する。
（１）  データサブシステムをキャッシュメモリとして作動すべきか、または外部メモリからのラインフェッチを抑制するスクラッチパッドメモリとして作動すべきかを判断する工程と、
前記判断に応じて前記データサブベースをキャッシュメモリまたはスクラッチパッドメモリのいずれかとして作動させるよう、制御ビットをプログラムする工程とを備えた方法。
（２）  データのブロックをスタックにプッシュする際に制御ビットを再プログラムする工程を更に備えた、第１項記載の方法。
（３）  データのブロックをスタックからポップする際に制御ビットを再プログラムする工程を更に備えた、第１項記載の方法。
（４）  方法のコールの発生時、およびその後のこの方法からのリターン時に前記制御ビットを再プログラムする工程を更に備えた、第１項記載の方法。
（５）  方法の最初の呼び出し時に前記データサブシステムをスクラッチパッドメモリとして作動させるように前記制御ビットをプログラムする工程を備えた、第１項記載の方法。
【００５４】
（６）  前にコールされており、ローカル変数が外部メモリにセーブされ、前記プロセッサのデータサブシステムから除かれている方法へプログラムがリターンした時に、前記データサブシステムをキャッシュとして作動させるように前記制御ビットをプログラムする工程を更に備えた、第１項記載の方法。
（７）オーバーフロー状態を判断し、前記オーバーフロー状態に応答して前記ローカル変数を前記外部メモリにセーブする工程を更に備えた、第６項記載の方法。
（８）  コンテクストスイッチを判断し、前記コンテクストスイッチに応答して前記ローカル変数を前記外部メモリにセーブする工程を更に備えた、第６項記載の方法。
（９）  オーバーフロー時、またはコンテクストスイッチ時にシステムメモリからキャッシュメモリとして構成されている前記データサブシステムへデータをレストアする工程を備え、前記スクラッチパッドメモリで不一致が生じたときにデータのレストアを行う、第１項記載の方法。
（１０）  スクラッチパッドまたはキャッシュメモリとして構成されている前記データサブシステムにおけるオーバーフローを検出し、前記オーバーフローが生じたときに前記スクラッチパッドメモリを無効にしない工程を更に備える、第１項記載の方法。
（１１）  スクラッチパッドまたはキャッシュメモリとして構成されている、前記データサブシステムにおけるオーバーフローを検出し、前記データサブシステムの内容を無効にし、前記データサブシステムをキャッシュとして構成する工程を更に備えた、第１項記載の方法。
【００５５】
（１２）  メインメモリにアクセスするためのメモリアドレスを発生する処理コアを備え、前記処理コアにおいて複数の方法が作動し、各方法が自己の組のローカル変数を有し、
レジスタ内に記憶されたアドレスによって定められたメモリの連続ブロックをホールドするマルチラインデータメモリを備えたキャッシュサブシステムを更に備え、前記データメモリにローカル変数が記憶されており、
各ラインが関連する有効ビットおよびダーティビットを有し、前記プロセッサがクリーンコマンドを実行し、前記ラインが有効データおよびダーティデータを含むことを有効ビットおよびダーティビットがそれぞれ表示する各ラインを前記クリーンコマンドが前記プロセッサの外部メモリへコピーさせるようになっているプロセッサ。
（１３）  前記クリーンコマンドが有効データおよびダーティデータを有するすべてのラインを前記データメモリから外部メモリへ自動的にコピーする、第１２項記載のプロセッサ。
（１４）  前記クリーンコマンドがアドレスの特定されたレンジ内に有効データおよびダーティデータを有するラインを前記データメモリから外部メモリへコピーするだけである、第１２項記載のプロセッサ。
（１５）  前記クリーンコマンドが有効データおよびダーティデータを有する単一ラインを前記データメモリから外部メモリへコピーするだけであり、前記単一ラインがクリーンコマンドの一部として特定される、第１２項記載のプロセッサ。
【００５６】
（１６）  前記プロセッサが前記データメモリに関連する割り当てポリシーを少なくとも２つのポリシーのうちの１つとするようにプログラムするポリシーセットコマンドを更に実行し、一方のポリシーがデータメモリのアンダーフロー状態の発生時に外部メモリからのフェッチが生じることができるようにし、不一致の発生時に別のポリシーが外部メモリからのフェッチを防止するようになっている、第１２項記載のプロセッサ。
（１７）  前記プロセッサが前記データメモリ内のすべてのラインを無効にするフラッシュコマンドを更に実行する、第１２項記載のプロセッサ。
（１８）  前記プロセッサが所定のレンジのアドレスの間の前記データメモリ内のすべてのラインを無効にするフラッシュコマンドを更に実行する、第１２項記載のプロセッサ。
（１９）  前記プロセッサが前記データメモリ内の指定された単一ラインを無効にするフラッシュコマンドを更に実行する、第１２項記載のプロセッサ。
（２０）  外部メモリの新ページを前記データメモリに再マッピングする際に前記クリーンコマンドを実行する、第１２項記載のプロセッサ。
【００５７】
（２１）  メインメモリにアクセスするためのメモリアドレスを発生する処理コアを備え、前記処理コアにおいて複数の方法が作動し、各方法が自己の組のローカル変数を有し、
レジスタ内に記憶されたアドレスによって定められたメモリの連続ブロックをホールドするマルチラインデータメモリを備えたキャッシュサブシステムを更に備え、前記データメモリにローカル変数が記憶されており、
前記プロセッサが前記データメモリに関連する割り当てポリシーを少なくとも２つのポリシーのうちの１つとするようにプログラムするポリシーセットコマンドを更に実行し、一方のポリシーがデータメモリのアンダーフロー状態の発生時に外部メモリからのフェッチが生じることができるようにし、別のポリシーが不一致の発生時に外部メモリからのフェッチを防止するようになっている、プロセッサ。
（２２）  前記プロセッサが前記データメモリ内のすべてのラインを無効にするフラッシュコマンドを更に実行する、第２１項記載のプロセッサ。
（２３）  前記プロセッサが所定のレンジのアドレスの間の前記データメモリ内のすべてのラインを無効にするフラッシュコマンドを更に実行する、第２１項記載のプロセッサ。
（２４）  前記プロセッサが前記データメモリ内の単一の指定されたラインを無効にするフラッシュコマンドを更に実行する、第２１項記載のプロセッサ。
【００５８】
（２５）  有効データおよびダーティデータを含むデータメモリのラインを前記プロセッサ外部のメモリへコピーする第１コマンドを実行する工程と、
不一致が生じても外部メモリからのフェッチを実行させないポリシーとなるように、前記プロセッサにおけるデータメモリのための割り当てポリシーをプログラムする第２コマンドを実行する工程とを備えた、プロセッサと共に使用できる方法。
（２６）  前記データメモリが新しいデータを記憶するのに十分な容量を有するかどうかを判断する工程を更に含む、第２５項記載の方法。
（２７）  前記データメモリが新しいデータを記憶するのに十分な容量を有しないと判断したときに、第１コマンドを実行する、第２６項記載の方法。
【００５９】
（２８）  第１プロセッサと、
前記第１プロセッサと結合された第２プロセッサと、
前記第１プロセッサおよび第２プロセッサの双方に結合されており、これらプロセッサの外部にあるメモリとを備え、
前記第２プロセッサがメインメモリにアクセスするためのメモリアドレスを発生する処理コアを備え、該処理コアに複数の方法が作動し、各方法が自己の組のローカル変数を使用するようになっており、
更に前記第２プロセッサが、
メインメモリにアクセスするためのメモリアドレスを発生する処理コアを備え、前記処理コアにおいて複数の方法が作動し、各方法が自己の組のローカル変数を有し、
レジスタ内に記憶されたアドレスによって定められたメモリの連続ブロックをホールドするマルチラインデータメモリを備えたキャッシュサブシステムを更に備え、前記データメモリにローカル変数が記憶されており、
各ラインが関連する有効ビットおよびダーティビットを有し、前記プロセッサがクリーンコマンドを実行し、前記ラインが有効データおよびダーティデータを含むことを有効ビットおよびダーティビットがそれぞれ表示する各ラインを前記クリーンコマンドが前記プロセッサの外部メモリへコピーさせるようになっているプロセッサ。
（２９）  アンテナを更に備え、前記システムが無線通信デバイスを含む、第２８項記載のシステム。
【００６０】
（３０）  プロセッサ外部のメインメモリにアクセスするためのメインアドレスを発生するための処理コアと、
レジスタ内に記憶されたアドレスによって定められたメモリの連続ブロックをホールドするマルチラインデータメモリを備えたキャッシュサブシステムとを備え、前記データメモリにローカル変数が記憶されており、
各ラインが関連する有効ビットおよびダーティビットを有し、前記プロセッサがクリーンコマンドを実行し、前記ラインが有効データおよびダーティデータを含むことを有効ビットおよびダーティビットがそれぞれ表示する各ラインを前記クリーンコマンドが前記プロセッサの外部メモリへコピーさせるようになっているプロセッサ。
（３１）  前記データメモリをキャッシュとして機能させるように構成できるか、または前記データメモリをスクラッチパッドとして機能させるように構成できる制御ビットを更に含む、第３０項記載のプロセッサ。
（３２）  データのブロックをスタックにプッシュするように前記制御ビットが構成されている、第３１項記載のプロセッサ。
（３３）  データのブロックをスタックからポップするように前記制御ビットが構成されている、第３１項記載のプロセッサ。
（３４）  データの前記ブロックがスタックをベースとするプログラム言語に関連したローカル変数を含む、第３１項記載のプロセッサ。
【００６１】
（３５）  データサブシステムをキャッシュメモリとして作動すべきか、または外部メモリからのラインフェッチを抑制するスクラッチパッドメモリとして作動すべきかを判断する工程と、前記判断に応じて前記データサブベースをキャッシュメモリまたはスクラッチパッドメモリのいずれかとして作動させるよう、制御ビットをプログラムする工程とを備えた方法が開示されている。本明細書には他の実行例も同じように開示されている。
【図面の簡単な説明】
【００６２】
【図１】Ｊａｖａスタックマシン（ＪＳＭ）およびメインプロセッサユニット（ＭＰＵ）を含む、本発明の好ましい実行例に係わるシステムの図を示す。
【図２】本明細書において、通信デバイス（例えば携帯電話）として説明されているシステムの実行例を示す。
【図３】本発明の好ましい実行例に係わる図１のＪＳＭのブロック図を示す。
【図４】図１および３のＪＳＭで使用される種々のレジスタを示す。
【図５】好ましい実行例に係わるローカル変数およびポインタの記憶装置を示す。
【図６】方法からリターンしたときのローカル変数ポインタの使用を示す。
【図７】図３のＪＳＭにおける（ＲＡＭｓｅｔを含む）キャッシュをベースとするデータ記憶装置の好ましい実行例を示す。
【図８】ＲＡＭｓｅｔへのメインメモリの連続ブロックのマッピングを示す。
【図９】ＲＡＭｓｅｔへのメインメモリの連続ブロックの別のマッピングを示す。
【図１０】オーバーフロー状態におけるＲＡＭｓｅｔの作動を示す。
【図１１】オーバーフロー状態におけるＲＡＭｓｅｔの作動を示す。
【図１２】アンダーフロー状態におけるＲＡＭｓｅｔの作動を示す。
【符号の説明】
【００６３】
１００  システム
１０６  メモリ
１１０  コンパイラー
１１２  バイトコード
１１４  ディスプレイ
【図１】
2005011353.tif 000005
【図２】
2005011353.tif 000006
【図３】
2005011353.tif 000007
【図４】
2005011353.tif 000008
【図５】
2005011353.tif 000009
【図６】
2005011353.tif 000010
【図７】
2005011353.tif 000011
【図８】
2005011353.tif 000012
【図９】
2005011353.tif 000013
【図１０】
2005011353.tif 000014
【図１１】
2005011353.tif 000015
【図１２】
2005011353.tif 000016