(57)【要約】  本発明はオブジェクトベースのプロセッサアーキテクチャに関し、メモリ内やプロセッサレジスタ内でポインタやデータを互いに厳密に分離することによって、正確なポインタ識別を行うものである。メモリへのアクセスは、オブジェクトを参照するポインタを介して独占的に実行される。オブジェクトはポインタやデータのための分離したエリアや、２つのエリアの長さを表わすための属性フィールドを含んでいる。ポインタレジスタ内のポインタとオブジェクトのポインタエリア内のポインタの両者は、それらが参照するオブジェクトのアドレスを直接的に含んでいる。提案されるプロセッサアーキテクチャは、ハードウェアにおいて全体的に、或いは部分的に実行される自動ガーベッジコレクションの統合を認める。リアルタイムケーパブルなガーベッジコレクションは、ハードウェアのサポートを通じて特に効果的に実行される。【特許請求の範囲】
【請求項１】
メモリへのアクセスがオブジェクトを参照するポインタを介して行われるプロセッサアーキテクチャであって、
前記オブジェクト中で互いに別々に、ポインタがポインタエリアに格納され、データがデータエリアに格納され、
前記ポインタは、該ポインタが参照する前記オブジェクトのメモリアドレスを含み、前記オブジェクトは、該オブジェクト自身に格納される属性であって、前記ポインタエリアの長さ及び前記データエリアの長さを表わす属性が与えられており、
前記プロセッサは、別々のデータとポインタレジスタで設定されたレジスタを提供し、前記ポインタレジスタは、前記メモリ内のオブジェクトへの前記アクセスのために用いられることを特徴とするプロセッサアーキテクチャ。
【請求項２】
前記プロセッサは、いずれのポインタにも所定の空値又は存在するオブジェクトの前記メモリアドレスのいずれかのみが含まれることを保証することを特徴とする請求項１に記載のプロセッサアーキテクチャ。
【請求項３】
データやポインタ操作のための別々の指示を持つ指示セットが用いられることを特徴とする請求項１又は２に記載のプロセッサアーキテクチャ。
【請求項４】
ポインタのロード及び格納操作が、前記オブジェクトの前記ポインタエリアから前記ポインタレジスタにポインタを独占的にロードし、及び／又は、前記ポインタレジスタのコンテンツを前記オブジェクトの前記ポインタエリアに格納し、
データのロード及び格納操作が、データレジスタ内の前記オブジェクトの前記データエリアからデータを独占的にロードし、及び／又は、前記オブジェクトの前記データエリア内に前記データレジスタのコンテンツを格納することを特徴とする請求項１から３までのいずれか１項に記載のプロセッサアーキテクチャ。
【請求項５】
オブジェクト構築指示を持つ指示セットであって、構築されるオブジェクトにアクセスすることができる前に、構築される該オブジェクトの前記ポインタエリアのすべてのポインタを空値で初期化する指示セットが用いられることを特徴とする請求項１から４までのいずれか１項に記載のプロセッサアーキテクチャ。
【請求項６】
前記オブジェクト構築指示が、時間内に、中断して再開することを特徴とする請求項５に記載のプロセッサアーキテクチャ。
【請求項７】
前記オブジェクト構築指示が中断した場合に、不完全に初期化されたオブジェクトが構築され、該オブジェクトは、完全に初期化されたオブジェクトからは前記プロセッサによって明確に区別されることを特徴とする請求項６に記載のプロセッサアーキテクチャ。
【請求項８】
前記プロセッサが、プログラムのランタイムで独占的にリードされる別々のメモリエリアにおいて保持されるコンスタントなオブジェクトをサポートし、
コンスタントなオブジェクトへのポインタが、前記プロセッサによって明確に識別されることを特徴とする請求項１から７までのいずれか１項に記載のプロセッサアーキテクチャ。
【請求項９】
ポインタスタックエリアとデータスタックエリアに分けられるプログラムスタックであって、２つのスタックエリアのそれぞれにおける占有部分の長さが、本目的のために用意されたデータレジスタ内で管理されるスタックインデックスによって示されるプログラムスタックが用いられることを特徴とする請求項１から８までのいずれか１項に記載のプロセッサアーキテクチャ。
【請求項１０】
前記ポインタスタック上にポインタをプッシュするための指示であって、両方が、前記ポインタスタック上に対応するポインタを格納し、また中断することなく前記ポインタスタックインデックスを増加する指示が用いられることを特徴とする請求項９に記載のプロセッサアーキテクチャ。
【請求項１１】
前記プロセッサが、オペレーティングシステムによって管理される別々のメモリエリアに保持されるスタティックなオブジェクトをサポートし、
スタティックなオブジェクトへのポインタが前記プロセッサによって明確に識別されることを特徴とする請求項１から１０までのいずれか１項に記載のプロセッサアーキテクチャ。
【請求項１２】
スタティックなオブジェクトが、前記プログラムスタックのために使用され、前記オブジェクトに含まれる属性は、プログラムスタックが活動していない場合に前記スタックエリアの実際の占有部分の長さを表わすことを特徴とする請求項９に従属する請求項１１、又は請求項１０に従属する請求項１１に記載のプロセッサアーキテクチャ。
【請求項１３】
属性レジスタがポインタレジスタ毎に割り当てられており、前記ポインタレジスタ中の前記ポインタが参照する前記オブジェクトの属性がその中に記述されていることを特徴とする請求項１から１２までのいずれか１項に記載のプロセッサアーキテクチャ。
【請求項１４】
追加パイプラインステージを持つパイプラインが前記属性をロードするために用いられることを特徴とする請求項１３に記載のプロセッサアーキテクチャ。
【請求項１５】
属性キャッシュが用いられることを特徴とする請求項１３又は１４に記載のプロセッサアーキテクチャ。
【請求項１６】
ＲＩＳＣ指示セットが用いられることを特徴とする請求項１から１５までのいずれか１項に記載のプロセッサアーキテクチャ。
【請求項１７】
前記プロセッサが自動ガーベッジコレクションを実行することを特徴とする請求項１から１６までのいずれか１項に記載のプロセッサアーキテクチャ。
【請求項１８】
前述した請求項のいずれか１項に係るプロセッサアーキテクチャが実装されたプロセッサ。
【請求項１９】
請求項１から１６までのいずれか１項に係るプロセッサアーキテクチャが実装されたメインプロセッサ（１）と、自動ガーベッジコレクションを実行し、効率的な同期のために前記メインプロセッサ（１）に密結合するコプロセッサ（２）とを持つデバイス。
【請求項２０】
請求項１から１７までのいずれか１項に係るプロセッサアーキテクチャの埋め込みシステムのための使用。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサアーキテクチャに関し、メモリへのアクセスがオブジェクトを参照するポインタを介して行われるものに関する。
【０００２】
ソフトウェアの複雑さを管理することは、ソフトウェア開発における最大の要求である。ソフトウェアが、理解可能であって制御可能であるモジュールに分解されて理論的に表わされる場合、高品質で信頼性の高いシステムだけが実行されることとなる。これを達成するために、オブジェクト指向プログラミング言語が何年にもわたって使用されてきた。
【０００３】
オブジェクト指向プログラミング言語の実行における主要な問題はダイナミックメモリ管理である。Ｃ＋＋のようないくつかのオブジェクト指向言語は、いまだに、例えばプログラマの責任の下でメモリが要求され、また再び解放されるような、マニュアルメモリ管理に基づいている。しかしながら、このアプローチは、その問題に合わせて調整されるシステムの自然なモデリングがしばしば可能でないという欠点を持つ。これは、メモリ管理がそのシステムの設計の間においても実行されるためである。さらに、メモリのマニュアル解放はプログラムエラーの全クラスの原因である。例えば、メモリエリアに対する参照がいまだ存在しているにもかかわらず、メモリエリアが解放された場合、このことはさらなるプログラムの実行において壊滅的な結果となるかもしれない。すでに解放されたメモリエリアに対していまだ存在しているポインタ（ダングリング参照）によって引き起こされるエラーの連続が多くの要因の機能であって、それゆえほとんど再生不可能であり、辛うじてローカライズできるということは、この場合には特に深刻である。これらの理由のため、Ｊａｖａ（登録商標）のような、ほとんどすべての最新のプログラミング言語は、自動ガーベッジコレクションを実行するダイナミックメモリ管理に基づいている。このダイナミックメモリ管理を持つシステムにおいて、メモリエリアはそのプログラムの責任の下で復帰されないかもしれない。その代わりに、メモリエリアがプログラムによってもはや確実に参照されないときには、ガーベッジコレクターが自動的にそのメモリエリアの解放だけを行う。この原則のおかげで、”ダングリング参照”が発生することはない。さらに、プログラマが実際の問題の解決に全力で取り組むために、この技術の使用はプログラマの生産性を上昇させる。最終的に、ダイナミックメモリ管理を持つシステムにおける隠れたプログラムエラーの可能性がマニュアルメモリ管理を持つシステムにおけるものよりも著しく低くなるので、用意されるプログラムが高品質なものとなる。
【０００４】
関連技術
ダイナミックに構築されるメモリエリアの自動解放に関するアルゴリズムは多数存在し、参照カウント、コピー、及びマークスイープコレクションの概念の下の技術として知られている。これらのアルゴリズムを概観すると、参照は「Ｒ．ジョーンズ、Ｒ．リンズ：”ガーベッジコレクション：自動ダイナミックメモリ管理のためのアルゴリズム”、ジョン・ウィリー＆ソンズ、１９９６年」に作られている。
【０００５】
これらのアルゴリズムの単純な実行は、ガーベッジコレクションサイクルの全期間にわたってそのアプリケーションプログラムを中断する。それらは、典型的には、プログラムの実行において長く予測不可能なポーズを引き起こす。それゆえ、それらは、インタラクティブシステムやリアルタイム環境にはふさわしくない。
【０００６】
インクリメンタルでありコンカレントな方法は、当該プログラムの実行をガーベッジコレクションサイクルの間にわたって継続することを許可する。しかしながら、それらは、アプリケーションプログラムとガーベッジコレクターとの間の同期を要求する。しかしながら、ソフトウェアにおけるこの同期のコストは深刻なものである。なぜならば、使用される方法によって、関連するオブジェクトがすでにガーベッジコレクターによって処理されたかどうかを決定するために、各ポインタロード（リードバリア）前又は各ポインタストア（ライトバリア）前のいずれかに、ショートコードシーケンスを組み込まなければならないからである。
【０００７】
多くのインクリメンタルな方法は”リアルタイムケーパブル”として表わされる。なぜならば、ガーベッジコレクターによって引き起こされるポーズはほとんどの場合において短すぎて、ユーザによって登録することはできないからである。しかしながら、ハードなリアルタイムケーパビリティは、そのシステムのレスポンスタイムのコンスタントな上限の保証を要求する。ソフトウェアベースの方法は、典型的には、ルートセット（レジスタ及びスタック）のすべてのポインタの試験や全オブジェクトの処理のような中断可能でないオペレーションに依存するので、それらはハードなリアルタイム要求を満たさない。無期限の不可分オペレーションなしで管理するソフトウェア解法が知られているが、時間やメモリを計算するこれらの解法に費やすコストは深刻なものである。
【０００８】
自動ガーベッジコレクションのためのすべての技術の基本的な問題は、ポインタを発見し識別することである。もしもポインタが非ポインタと明確に区別することができなければ、コンサバティブなガーベッジコレクションだけが実行される。このことは、ポインタを表現できる各ビットパターンが、いまだ使用中であるメモリの解放を避けるために、ポインタとして見なされなければならないということを意味する。それゆえ、オブジェクトを移動してポインタをアップデートするようなコンパクト化する方法はコンサバティブなガーベッジコレクションにおいては使用されない。しかしながら、そのメモリは、方法をコンパクト化することなく断片化される。
【０００９】
これらの問題を避け、正確なガーベッジコレクションを実行するために、より多くの経費がポインタのサーチ及び識別に使用される。多くのオブジェクト指向言語において、ポインタやオブジェクトは、オブジェクト毎に含まれるタイプデスクリプタを介して識別される。しかしながら、プログラムスタックやプロセスレジスタにおけるポインタのローカライゼーションは、特にコンパイラを最適化することに関しては、より困難である。スタックポジションや、ポインタを現在含んでいるプロセッサレジスタが特定されるデータ構造を維持することは可能であるが、プログラムが実行されている間にわたってこの種のデータ構造を提供するためのコストはとても高いものである。この理由から、ほとんどのソフトウェアベースの方法では、プログラムスタックやレジスタ内のポインタの位置を表現するコンプライヤによって生成されるテーブルを使用する。ガーベッジコレクションの実行対象である各プログラムポイントで、このタイプのテーブルのセットが準備される。しかしながら、この技術の実施によって、プログラムコードの膨張が深刻なものになってしまう。さらに、停止しているスレッドが、制限された時間内にこのタイプの次のプログラムポイントに届くことを、リアルタイムシステムは保証しなければならない。
【００１０】
それゆえ、多くの問題が、自動ガーベッジコレクションを主としてソフトウェアで使用する現在のシステムを用いて克服されなければならない。これは、とりわけ、ハードウェアが根本的に提供しない機能をソフトウェアがシミュレートするからである。もしも、プロセッサ自身がハードウェアにおいて、全体的に或いは部分的に、自動ガーベッジコレクションを実行すれば、効率性やリアルタイムケーパビリティに関する多くの問題が克服されるであろう。しかしながら、プロセッサがこの目的のためにポインタを識別することができることが絶対に必要である。
【００１１】
以下では、多くの既知のアーキテクチャのうちの２つ、すなわち、正確なポインタ識別及び／又は自動ガーベッジコレクションをサポートする模範的な目的と、本発明の主題が重要であることを記述する。
【００１２】
このように、メモリエリアをアドレス指定するためにダイレクトなポインタに代わってケーパビリティを使用するアーキテクチャが１９９６年以来知られている。ケーパビリティには、アクセス権限やオブジェクトの識別に関するステートメントが含まれる。それらにはオブジェクトの物理的なアドレスではなく、むしろオブジェクトの位置、大きさ及び属性を表現するデスクリプタへの参照が含まれる。このタイプのアーキテクチャを持つプロセッサの例として、例えば、「Ｈ．Ｍ．レビィ：ケーパビリティベースのコンピュータシステム、ディジタルプレス、１９８４年、１５９〜１８６ページ」に記述されているような、インテルｉＡＰＸ４３２がある。このアーキテクチャにおいて、ケーパビリティは２段階のマッピングプロセスを通して、関連するオブジェクトに関連付けられる。オブジェクトテーブルにおけるユニークなエントリが各オブジェクト毎に存在するが、それはオブジェクトの位置、大きさ及びステータスを表わす。各オブジェクトは２つのエリア、すなわち、データエリアとケーパビリティのためのエリアとから構成される。正確なケーパビリティの識別はこのように行われる。
【００１３】
ｉＡＰＸ４３２は、レジスタセットの欠落と、ケーパビリティとオブジェクトデスクリプタとを介したオブジェクトの二重の間接的なアドレス指定のために、極めて非効率なものである。さらに、それは自動ガーベッジコレクション自身を実行しない。当該ガーベッジコレクションはソフトウェア内で実行されるべきであり、リアルタイムケーパブルでない。
【００１４】
ダイレクトポインタを識別するための全ての既知の方法は、ポインタと非ポインタとの間を差別化するためにあらゆるメモリワードに特別な識別ビット（タグ）を使用する。この一例としては、米国特許第５，５６０，００３号に記載されたリアルタイムでのインクリメンタルガーベッジコレクションのためのシステム及びハードウェアモジュールがある。これは、２つのメモリバンクと、ガーベッジコレクションを実行する１つのローカルプロセッサとから構成される。各メモリバンクは、それぞれのメモリアクセスに対応するオブジェクトの開始アドレスにアドレスをマップするオブジェクト空間マネージャによってサポートされる。その複雑性のために、このオブジェクト空間マネージャは、類似するチップエリアをメモリとして占有する、分離したＡＳＩＣとして実行される。この種のシステムは大変コストが高くなる。さらに、識別ビットを用いたポインタの識別は、要求されるコンピューティング時間やメモリという形で追加費用が必要になる。
【００１５】
組み込みシステムにおけるソフトウェアの複雑性の連続する増加のため、自動ガーベッジコレクションの利点をこの経済的に重要な分野にさらに使用するために、何年もの間にわたって大きな努力がなされてきた。重要である最大の点は、最新の情報技術のこのエリアで正確に達成されることである。製品のサイクルは連続するイノベーションを通じてますます短くなっているので、現在のオブジェクト指向言語のための組み込みシステムのロバストでリアルタイムケーパブルなプラットフォームの要求は増加する一方である。しかしながら、これらのアプリケーションにとって、自動ガーベッジコレクションは、ほとんどの場合において贅沢であると考えられ、その議論の余地もない利点があるにもかかわらず自動ガーベッジコレクションを持つ余裕はない。
【００１６】
この関連技術から続けると、本発明の目的は、オブジェクトベースのオブジェクト指向プログラムのためのプロセッサアーキテクチャを明確にすることである。それは、費用対効果が高く正確なポインタ識別を可能とし、それゆえにハードウェア内の全部又は一部で実行される、効率的でリアルタイムケーパブルな自動ガーベッジコレクションのためのパスを開くものである。
【００１７】
発明の詳細
目的は、請求項１に係るプロセッサアーキテクチャによって達成される。このプロセッサアーキテクチャの有利な実施態様は従属請求項の主題であって、或いは下記の詳細や模範的な実施態様から参照される。
【００１８】
本特許出願の範囲において、データユニットとして理解されるタームワードは、メモリからロードされ、或いは単一のプロセッサ指示を用いて当該メモリ内に格納される。単一のオブジェクトに独占的に関連付けられる各ワードにおいて、オブジェクトは、メモリワードのコヒーレントなセットとして理解される。ポインタは、オブジェクトを参照するワードとして理解される。ターム空値は非オブジェクトを参照するために使用される所定のポインタ値を恒久的に表わす。
【００１９】
オブジェクトベースのオブジェクト指向プログラムのための本プロセッサアーキテクチャにおいて、メモリは、オブジェクトを直接参照するポインタを介して独占的にアクセスされる。オブジェクトは、コヒーレントなメモリエリア、例えば重なり合わない２つのオブジェクトによって占有されるメモリエリア、に独占的に格納される。それぞれのオブジェクトにおいて、ポインタはポインタエリアに格納され、データは互いに分離したデータエリアに格納される。さらに、ポインタエリアの長さやデータエリアの長さについての情報が、それぞれのオブジェクトに格納される。この長さ情報は、後述するような属性として参照される。その属性を用いて互いに、オブジェクトのサイズを決定したり、オブジェクト内のポインタやデータを一意に画定したりすることが、いつでも可能である。
【００２０】
本プロセッサアーキテクチャは、別々のポインタレジスタやデータレジスタセットを提供する。この場合、ポインタレジスタは、オブジェクトを用いるオペレーションを独占的に規定したり、例えばメモリアクセスに対するような、他のタスクに対しては用いられない。それゆえ、特に、ポインタレジスタに書き込まれる任意の値がないことや、ポインタレジスタを用いて実行される算術的なオペレーションがないことが確かになる。
【００２１】
オブジェクトのポインタエリアやポインタレジスタにおけるポインタは、メモリ内のオブジェクトのアドレスを直接的に含んでいる。
【００２２】
正確なポインタ識別が識別ビットを必要とせずにできるように、本オブジェクトベースプロセッサアーキテクチャを使用して、ポインタと非ポインタ（データ）の厳格な分離がこのように実行される。プロセッサレジスタやメモリ内のポインタを識別するためのこの正確な能力、それはハードウェアによって確実にされるものであるが、その能力を通して、ハードウェアにおいて全体的に或いは部分的に実行される自動ガーベッジコレクションが、プロセッサレベルで統合される。この基盤上に、特に効果的に実行される自動ガーベッジコレクションを持つリアルタイムケーパブルなシステムが実行できる。それゆえ、プロセッサ上で実行されるソフトウェアは、ガーベッジコレクション自身だけでなく、プロセッサとガーベッジコレクターとの間の同期に対しても必要はない。プロセッサは単に、ガーベッジコレクターに対してメモリ帯域幅の一部分を譲るだけにすぎない。
【００２３】
当該アーキテクチャのさらなる利点は、ガーベッジコレクションがコンプライヤ及び／又はランタイムシステムの協力なしで遂行でき、それゆえ特にロバストに実行できることである。
【００２４】
ガーベッジコレクションの実行に対するハードウェア上の努力は、プロセッサ自身に対する努力と比較して比較的低い。この理由から、そのようなプロセッサは、典型的なマイクロプロセッサやマイクロコントローラと同様に、費用対効果を高くして製造される。
【００２５】
本プロセッサアーキテクチャにおいて、存在するオブジェクトのアドレスを含むか空値かのいずれかをポインタとして各ワードが識別することが、プロセッサによって好ましくは確実にされる。本好適な実施態様では、それゆえに固定ルール（システムの不変条件）がプロセッサアーキテクチャによって維持される。ここで、固定ルールとは、それぞれのメモリワードやレジスタが、それがポインタであるか否か、さらには、それぞれのポインタ値が空値か、存在するオブジェクトのアドレスを含むかどうかについて、識別することである。これらのシステムの不変条件を維持するために、システムにおけるポインタの正確な識別が各クロックサイクルで可能である。
【００２６】
好ましくは、生成されるオブジェクトの属性がパラメータとして転送される特別なオブジェクト生成指示によって新たなオブジェクトが生成される。このオブジェクト生成指示は、オブジェクトがアクセスされる前に、空値でポインタエリアの全てのポインタを初期化する。システム不変条件は、このように侵されることはない。
【００２７】
ハードなリアルタイム要求のための改良において、オブジェクト生成指示が割り込んで実行される。もしオブジェクト生成指示が割り込まれた場合、不完全に初期化されたオブジェクトは、割り込まれた生成指示が後で再開できるように、生成される。不完全に初期化されたオブジェクトは、プロセッサによって一意に識別される。
【００２８】
好ましくは、プログラムが開始する前にも、リードオンリーメモリエリアの部分として存在するコンスタントなオブジェクトがプロセッサアーキテクチャによってサポートされる。コンスタントなオブジェクトへのポインタは、プロセッサによって一意に識別される。
【００２９】
本プロセッサアーキテクチャにおいて、メモリのエリアは、好ましくは既知の方法でプログラムスタックとして用意される。プログラムスタックは、この目的のためにポインタスタックエリア、データスアックエリアに分けられる。そこでは、スタックによって占有されない第１の位置が、それぞれのケースにおいて用意されたデータレジスタ内で管理されるスタックインデックスによって特定される。
【００３０】
もし複数のスタックが使用された場合は、現在非活動のスタックのスタックインデックスが、好ましくは関連するスタックオブジェクト内で属性として格納される。さらに、スタックオブジェクトは、ヒープ内ではなく、むしろオペレーティングシステムによって管理されるスタティックなメモリの中に、スタティックなオブジェクトとして好ましくは格納され、この種のオブジェクトへのポインタ（スタティックなポインタ）は特別な方法で識別される。
【００３１】
プロセッサアーキテクチャの効率的な実行のために、各ポインタレジスタは、ポインタレジスタ中のポインタによって参照されるオブジェクトに属するオブジェクトの属性が格納される属性レジスタによって好ましくは同時に発生する。本実施態様では、属性をロードするための追加パイプラインステージが提供される。さらに、アクセスを加速するための属性キャッシュが、このパイプラインで好ましくは使用される。
【００３２】
本プロセッサアーキテクチャの実行に関する関連技術によれば、指示及びデータキャッシュ、或いは分岐予測のためのユニットのような、プログラムの実行や典型的な最適化を要求する全てのさらなるパイプラインステージや機能ユニットが実行される。
【００３３】
発明を実行する方法
以下では、本発明に係るプロセッサアーキテクチャの実施態様の一例が説明される。それは、中でも、識別ビット（タグ）を使用することなく正確なポインタ識別を達成するオブジェクトに基づくものであり、一般に適用可能な、効果的に適用され得るＲＩＳＣ指示セットに基づくものであり、実行時間がいくつかのクロックサイクルを超える不可分のオペレーションを要求しないものである。
【００３４】
説明されるプロセッサアーキテクチャは、以下のシステムの不変条件を保証する。すなわち、
１．各メモリワード又はレジスタは、それがポインタを表わすか否かについて識別されないこと、
２．各ポインタ値が空値、又は存在するオブジェクトに一意に関連付けられること。
【００３５】
本プロセッサアーキテクチャは、図１に概略的に示されるように、分離したデータ及びポインタレジスタセットを提供する。右側に示されるデータレジスタは多目的レジスタとして使用され、一方、左側に示されるポインタレジスタはメモリ内のオブジェクトにアクセスするために使用される。Ｎpはポインタレジスタ数を特定し、Ｎdはデータレジスタ数を特定する。システムの不変条件を満足するために、ポインタレジスタ内に任意の値をライトすること、例えばポインタレジスタ内にデータレジスタの値をコピーしたり、ポインタレジスタを用いて算術的なオペレーションを実行するようなこと、はできないことが確定される。
【００３６】
本プロセッサアーキテクチャのメモリモデルはオブジェクトベースである。各オブジェクトは、互いに厳格に分離されているデータエリアとポインタエリアとから構成される。図２は、オブジェクトのポインタエリア（図の左側）における対応するポインタワードとデータエリア（図の右側）におけるデータワードを持つこの種のオブジェクトの概略構造を示す。データエリアにおけるデータワード数はδ属性（δ≧０）によって記述される。また、ポインタエリアにおけるポインタ数はπ属性（π≧０）によって記述される。オブジェクトが生成されて後ほど変化しない場合、その属性によって記述されるオブジェクトのサイズは固定される。その属性はオブジェクトの一部分であり、分離した属性エリアのその中に格納される。
【００３７】
本プロセッサアーキテクチャのための指示セットの特定部分は、単に指示のロード及び格納を含むポインタ関連の指示から構成される。算術的な指示やプログラムコントロールの指示のような他の指示の実施態様は、記述されるアーキテクチャとは無関係に選択され、本発明の部分ではない。
【００３８】
説明されるアーキテクチャの指示セットは、新しいオブジェクトやこのオブジェクトへのポインタを生成するために用いられる特別なオブジェクト生成指示を持つ。オブジェクト生成指示（オブジェクトの割り当て）は引数として、生成されるオブジェクトのπ及びδ属性の値を受け取り、新たに生成されたオブジェクトへのポインタをポインタレジスタ内に格納する。生成されたオブジェクトのポインタエリア内のそれぞれのポインタ値は、そのオブジェクトへのポインタがプログラムに見えるようになる前に、空値を用いて初期化される。オブジェクトを削除する指示はない。オブジェクトはプロセッサレベル上で自動ガーベッジコレクションによってのみ削除され得る。
【００３９】
指示のロード及び格納は、オブジェクト内でのワードへのアクセスのために使用される。プロセッサアーキテクチャは、ポインタ値やデータワードへのアクセスための、異なるロード及び格納指示を提供する。”ロードデータ”及び”格納データ”指示は、オブジェクトのデータエリアとデータレジスタとの間で独占的にデータワードを移動する。”ロードポインタ”及び”格納ポインタ”指示は、オブジェクトのポインタエリアとポインタレジスタとの間で独占的にポインタを移動する。ロード及び格納指示は、オブジェクトへのポインタを含むポインタレジスタを用いて、及び正の整数インデックスを用いてアクセスされたメモリワードを識別する。インデックスを計算するために、従来からのアーキテクチャのアドレス指定モデルに対するものと同じように、例えば、データレジスタ、コンスタントオフセット及びスケーリンクファクターを用いて、異なる”インデキシングモデル”が使用される。
【００４０】
オブジェクトへのアクセスにおいて、特別に参照されたオブジェクトの外部でワードへのアクセスが不可能であることを確実にするために、範囲のチェックが実行される。このようなアクセスは壊滅的な結果となり、システムの不変条件を侵することとなる。この理由のため、バウンスバイオレーションの場合には、メモリアクセスが終了して、対応する例外的な取り扱いが開始される。同様の理由のため、空値ポインタを修飾参照しようとする指示が受け入れられる。
【００４１】
オブジェクトの属性は２つの”リード属性”指示によって問い合わせされ得る。
【００４２】
データレジスタに関するオペレーションを典型的に実行する複数の”レジスタからレジスタ”への指示に対比して、ポインタ関連の”レジスタからレジスタ”への指示の２つの指示の強く制限されたセットが、本アーキテクチャによって定義される。”コピーポインタ”指示は、あるポインタレジスタの内容を他のポインタレジスタにコピーする。一方、”比較ポインタ”指示は、２つのポインタが同じオブジェクトを参照するか否かをチェックする。
【００４３】
図４は、本プロセッサアーキテクチャによって定義されるポインタ関連の指示の概要を示しており、それらがリード、ライト、或いは修飾参照するポインタレジスタかどうかによって分類するものである。それぞれの場合においてリードされ、ライトされ、或いは修飾参照されるレジスタは、ボールド体でプリントされている。
【００４４】
プログラムスタックの体系化されていない、高度にダイナミックな特性のために、これらは、自動ガーベッジコレクションの範囲におけるポインタ識別に関して、最高度の要求の一つを表わす。本プロセッサアーキテクチャにおいて、プログラムスタックは、何らかのオブジェクトのようにデータエリアやポインタエリアを持つスタックオブジェクトとして見なされ、それゆえ２つの分離したスタックとして見なされ得る。ポインタレジスタは、スタックオブジェクトへのポインタを維持するために用意される。スタックインデックスは、対応するエリアを実際のスタックエリアと現在占有されていないエリアとに分けるために、２つのスタックエリアのそれぞれにおいて使用される。スタックインデックスは、本例において、第１の占有されていないメモリ位置に関連する。０のスタックインデックスは空スタックを表わす。２つのスタックインデックスは、データスタックインデックス（ｄｓｉｘ）とポインタスタックインデックス（ｐｓｉｘ）として識別される。これらのインデックスのそれぞれは、この目的のために用意される特別のデータレジスタ内に維持される。
【００４５】
スタックオブジェクトが典型的なオブジェクトように取り扱われる場合、システムは、ポインタが現在占有されているポインタスタック、又は、ポインタスタックエリアの占有されていない部分に属しているかを、区別しないかもしれない。ポインタスタックエリアにおける各ワードがポインタとして識別されるので、ポインタスタックエリアの未使用エリアがもはや必要とされていないオブジェクトを参照する多くのポインタを含んでいるかもしれない。ガーベッジコレクターは、これらのオブジェクトへのポインタがまだ存在しているので、これらのオブジェクトを解放しないかもしれない。このオブジェクトの可能性のある解決策は、対応するポインタがスタックから取り除かれると同時に、空値で各ポインタ値を上書きすることである。しかしながら、例えばサブプログラムの終わりでスタックフレームのディスアロケーション間の場合のように、特にもし複数のポインタがスタックから取り除かれた場合、このことは不要な経費がかかるという結果をもたらす。
【００４６】
本プロセッサアーキテクチャの有利な実施態様についてここで述べた例として、スタックのダイナミックなサイズを考慮するオブジェクトの達成がそれゆえ選択される。この目的のため、図３に示されるようなスタックオブジェクトは２組の属性によって表現される。一つ目の組の（π，δ）は現在のスタックサイズを特定し、二つ目の組の（Π，Δ）は最大スタックサイズを特定する。この場合において、π属性はポインタスタックインデックスｐｓｉｘの値に対応し、δ属性はデータスタックインデックスｄｓｉｘの値に対応する。スタック属性Π及びΔは、ユーザプログラムに見えないシステムレジスタにおいて維持される。πよりも小さなインデックスを持つポインタのみがポインタ識別及びシステムの不変条件に関連するポインタとして見なされる。
【００４７】
スタック内のメモリワードは標準的なロード及び格納指示によってアドレス指定される。標準の算術的な指示を用いたスタックインデックスに対応する値を減少することにより、スタックからワードが取り除かれるかもしれない。システムの不変条件を維持するために、特別な指示がポインタスタック上のポインタをプッシュするために提供される。ここで、当該ポインタスタックは、ポインタスタックエリアの第１の占有されていないメモリ位置上に妨げられずにポインタを格納し、ポインタスタックインデックスを増加する。これは、ポインタスタックインデックスを増加するために許可される唯一の指示である。
【００４８】
この点について説明されたプロセッサアーキテクチャにおいて、メモリはポインタを介して独占的にアクセスされ、ポインタを生成するための唯一つの可能性は、オブジェクト生成指示を用いて新たなオブジェクトを生成することである。しかしながら、例えばプログラムの開始前であっても、プログラムコードのような部分として存在するコンスタントなデータをアクセスすることもまた可能である。そのようなコンスタントなデータの例が、ブランチテーブルやタイプデスクリプタのようなコンパイラによって生成される、コンスタントにリンクされたリストや構造である。
【００４９】
それゆえに、プロセッサアーキテクチャの有利な実施態様の本例が、コンスタントなオブジェクトを紹介する。コンスタントなオブジェクトは不変のオブジェクトであり、プログラムコードの一部分として、或いはコンスタントなオブジェクトのために用意される特別なエリア内に格納される。特別な”コンスタントなポインタの生成”指示は、コンスタントなオブジェクトへのポインタの生成のために使用され、コンスタントなポインタとして以下のように参照される。コンスタントなポインタを介したメモリアクセスは、リードアクセスに限定され、コンスタントなオブジェクトのポインタエリアはコンスタントなポインタ又は空値ポインタを独占的に含む。コンスタントなオブジェクトは、オブジェクトの特別なタイプを区別するために提供されるφ属性によって、普通のオブジェクトから区別される。
【００５０】
多くのシステムにおいて、分離したプログラムスタックが、ユーザモードやオペレーティングシステムモードのようなオペレーションの異なるタイプのために使用される。さらに、複数のコンカレントな実行スレッドを持つシステム（マルチスレッドシステム）が、それぞれの実行スレッドのための分離したプログラムスタックを要求する。
【００５１】
これらのスタックの全てが典型的にオペレーティングシステムによって管理され、ガーベッジコレクション（ヒープ）によって監視されるメモリエリア内に位置付けられない。
【００５２】
オペレーティングシステムにヒープメモリエリアの外側のメモリエリアを管理させるために、スタティックなオブジェクトが提供される。スタティックなオブジェクトは、オペレーティングモードにおいて独占的に生成され、この目的のために特に提供されたメモリエリア内に位置付けられる。スタティックなオブジェクトはまた、φ属性を介して識別される。スタティックなオブジェクトへのポインタ（スタティックなポインタ）は決してユーザプログラムからは見えない。
【００５３】
システムの不変条件を維持するために、関連するオブジェクト生成指示が終了する前に、新たに生成されたオブジェクトにおける各ポインタが空値で初期化される。それゆえ、オブジェクト生成指示のための実行時間は、少ない時間定数によって制限されない。これはハードなリアルタイムアプリケーションのために認められない。
【００５４】
オブジェクト生成指示を制限可能なように実行するために、アンイニシャライズされた（より正確には、不完全に初期化された）オブジェクトが、述べられたプロセッサアーキテクチャの有利な実施態様に取り入れられる。アンイニシャライズされたオブジェクトは、オブジェクト生成指示が完結する前に中断された場合にだけ、生成される。アンイニシャライズされたオブジェクトへのポインタは、オペレーティングモードにおいてのみ見ることができ、それは決して修飾参照されることはない。アンイニシャライズされたオブジェクトは、スタティックでコンスタントなオブジェクトのように、φ属性によって識別される。
【００５５】
それゆえに述べられたプロセッサアーキテクチャの模範的な有利な実施態様は、４つの異なるタイプのオブジェクト、すなわち、通常のダイナミックなオブジェクト、アンイニシャライズされたダイナミックなオブジェクト、コンスタントなオブジェクト、及びスタティックなオブジェクト、をサポートする。φ属性は、オブジェクトのタイプを区別するために使用され、４つの値（ｎｏｒｍ，ｕｉｎｉ，ｃｏｎｓｔ，ｓｔａｔ）の一つを担う。アーキテクチャの実行において、φ属性はオブジェクトへのポインタ内、及び／又は、オブジェクト自身内に格納される。
【００５６】
通常のダイナミックなオブジェクトとアンイニシャライズされたダイナミックなオブジェクトはヒープメモリエリア内に位置付けられ、スタティックなオブジェクトはスタティックなメモリエリア内に位置付けられ、コンスタントなオブジェクトはプログラムコード及び／又はコンスタントなデータのために提供されるメモリエリア内に位置付けられる。スタティックでアンイニシャライズされたオブジェクトはオペレーションシステムモードに限定されるので、それらはシステムオブジェクトとして識別される。
【００５７】
自動ガーベッジコレクションの観点からすれば、オブジェクトの４つのタイプは、それらがガーベッジコレクターをコンパクト化することによってどのように取り扱われるかによって特徴付けられる。典型的なダイナミックなオブジェクトはポインタが探索され、コンパクト化の間中移動する。スタティックなオブジェクトはポインタが探索されるが、移動はしない。その一方で、アンイニシャライズされたオブジェクトはコンパクト化の間中移動するが、正しくないポインタを含んでいるので、ポインタは探索されない。最後に、コンスタントなオブジェクトは、ガーベッジコレクターによるポインタの探索も移動もされない。
【００５８】
以下では、示唆的なプロセッサアーキテクチャの可能性のある実行が、模範的な目的のために説明される。３２ビットのワード値がその実行のために仮定される。バイトやハーフワードをデータエリア内にアクセス可能にするために、メモリはバイトによってアドレス指定可能なバイトである。ワードは４つに分割可能にアドレス指定するために一列に並べられる。
【００５９】
メモリ内のオブジェクトの模範的なレイアウトが図５に示される。各オブジェクトは、データエリア、ポインタエリア及び属性エリアから構成される。効率性の理由から、２つのオブジェクト間のパディングエリアがある環境下で要求されるように、オブジェクトは８つに分割可能にアドレス指定するために一列に並べられている。属性エリアは、ユーザプログラムからは見えておらず、オブジェクトのπ及びδ属性を含む。バイト及びハーフワードオペランドのサポートによって、本実行は、π及びδが対応するエリアにおけるワード数の代わりにバイト数を表わしているので、それらの定義をわずかに変える。
【００６０】
πは４の倍数であるので、２ビットがπ属性のために使用されるメモリワード内で非占有のままになっている。これらはφ属性（或いは、その部分）を格納するために使用され、及び／又は、ガーベッジコレクターに使用される。
【００６１】
ポインタは直接的にオブジェクトの物理的なメモリアドレスを含んでいる。オブジェクトは２倍のワードに従って一列に並べられているので、オブジェクトアドレスはポインタワードの２９ビットのみを占有する。残りの３ビットはφ属性（或いは、その部分）を格納するために使用され、及び／又は、ガーベッジコレクターによって使用される。
【００６２】
オブジェクトへのアクセス前に、オブジェクトの属性が知られる。これらは、アクセス前に範囲のチェックのために必要であり、図５に係るオブジェクトレイアウトの場合において、データアクセスの場合でのアドレス生成にさらに要求されるからである。
【００６３】
それぞれのオブジェクトアクセス前のメモリからの属性のロードが膨大な経費に結び付くので、図６に概略的に示されるように、複数の属性レジスタが各ポインタレジスタに提供される。もしポインタレジスタが空値でない値を含んでいる場合、対応する属性レジスタは、ポインタレジスタが参照するオブジェクトの属性を含んでいる。このように、ポインタレジスタを修飾参照するための費用は、通常のアーキテクチャにおけるアドレス生成のための費用と同じくらい少ない。範囲のチェック自身は、アドレス計算に並行して実行されるので、どんなパフォーマンスロスにも結び付かない。
【００６４】
しかしながら、属性レジスタは自身の対価を持っている。すなわち、ポインタがメモリからロードされる場合、関連する属性もまた属性レジスタにロードされる。さらに、メモリ内の属性の位置は、ポインタのロードが終了した場合にだけ知られる。
【００６５】
この問題は、ＲＩＳＣアーキテクチャの場合における典型的なメモリステージの後の追加的なパイプラインステージによって効果的に解決されるであろう。この追加的なステージは属性ステージとして参照され、属性アクセスを実行するために、パフォーマンスロスなしで、ほとんどの場合で属性キャッシュを使用する。属性キャッシュの構成は、典型的なデータキャッシュの構成と類似している。属性キャッシュは、ポインタの最大２９ビットによってアドレス指定され、単一のステップにおいてπ及びδ属性のリード又はライトを許可する。データキャッシュからの本質的な差異は、キャッシュラインのサイズである。データキャッシュにおけるキャッシュラインは典型的に８ワードから構成される一方で、属性キャッシュのラインは２ワードの幅を持ち、単一のオブジェクトの属性のみを含んでいる。
【００６６】
図７は実行されるパイプラインの基本的な構成を示す図であり、図８は個々のパイプラインステージへの全てのポインタ関連の指示を示す分解図である。２つの最も複雑な指示の処理が模範的な目的のために図示されている。
【００６７】
１．”ポインタロード”指示：
パイプラインの実行ステージにおいて、アドレス生成ユニット（ＡＧＵ）は、ロードされるポインタのメモリアドレスを計算し、それと並行して、アーキテクチャによって指示される範囲のチェックや空値ポインタテストのようなランタイムテストを実行する。メモリステージでは、計算されたアドレスがオブジェクトキャッシュからポインタをリードするために使用される。そして、ロードされたポインタは、ロードされたポインタが参照するオブジェクトからその属性をロードするために、属性キャッシュをアドレス指定する。最後に、ロードされたポインタはレジスタセット内にロードされた属性と共にライトされる。
【００６８】
２．オブジェクト生成指示：
生成されるオブジェクトのサイズは、デコードステージから実行ステージまでを中継する２つのデータオペランドを利用して決定される。実行ステージにおいて、ポインタ生成ユニット（ＰＧＵ）は新たなオブジェクトへのポインタの生成する責任がある。コンパクト化ガーベッジコレクターの場合において、ＰＧＵは、新たなオブジェクトの生成のために使用されるヒープのエリア内で最後に占有するワードを常に参照するアシスタントレジスタの内容にオブジェクトサイズを付加することによって、新たなオブジェクトの開始アドレスを大変簡単に決定する。ＰＧＵは、ポインタの初期化を要求するアドレスを生成するＡＧＵによってサポートされる。８ワードのキャッシュラインを持つオブジェクトキャッシュにおいて、８ポインタワードまでが一クロックサイクル内で同時に初期化される。このように、もしオブジェクトの開始アドレスが一クロックサイクル内で計算された場合、及び、もしオブジェクト内の全てのポインタが同じキャッシュラインに属する場合は、オブジェクト生成指示は遅れることなく実行ステージを通過する。もしこれがその場合でなければ、初期化が終了するか中断が発生するまで、パイプラインは停止する。最終的に、新たに生成されたオブジェクトの属性が属性キャッシュにライトされ、レジスタセット内にその属性と共にポインタがライトされる。もし中断されたオブジェクト生成指示がパイプラインの終端に到達した場合、中断されたオブジェクト生成のステータスはシステムレジスタ内にライトされ、不完全に初期化されたオブジェクトがアンイニシャライズされたオブジェクトのφ属性と同一であると見なされる。中断されるプログラムの実行のコンテキスト（中断カウンター、システムレジスタ）が再度回復するとすぐに、初期化が再度回復する。
【００６９】
提案されたアーキテクチャの機能的な可能性は、機能するプロトタイプに基づいて証明される。このプロトタイプにおいて、ガーベッジコレクターは、メインプロセッサのパイプラインと緊密に連携するマイクロプログラム式コプロセッサとして実行される。プロセッサとコプロセッサとの間の同期は、完全にハードウェア内で実行される。ガーベッジコレクションのためのプロセッサとコプロセッサは、ＶＨＤＬにおいて表わされ、最新のプログラム可能な論理回路に対して連帯して合成される。さらに、原型的なＪａｖａ（登録商標）コンプライヤーやアーキテクチャのＪａｖａ（登録商標）クラシックライブラリーのサブセットの実行がある。
【００７０】
図９は本装置の一例を示す概略図である。ガーベッジコレクターはマイクロプログラム可能なコプロセッサによって本例のように形成される。本発明に係るプロセッサアーキテクチャは、メインプロセッサ１内で実行される。メインプロセッサ１及びコプロセッサ２のために複数の別々のポートを持つメモリコントローラ３は、メインメモリとの接続を実現する。メインプロセッサとコプロセッサとの間の同期は、異なるレベルで発生する。キャッシュコヒーレンスを確保するために必要な場合には、ガーベッジコレクターはフラッシュし、データや属性キャッシュの複数ラインを空にする。プロセッサパイプラインに組み込まれたハードウェアリードバリアは、ガーベッジコレクター内で中断を引き起こす。ガーベッジコレクターはまた、マイクロコード内の危機的なエリアを保護するために、メインプロセッサ１を停止する。
【００７１】
本発明に係るプロセッサアーキテクチャは、下記図面に関連して模範的な実施態様に基づいてより詳細に記載される。
【図面の簡単な説明】
【００７２】
【図１】本プロセッサアーキテクチャのレジスタモデルを示す概略図である。
【図２】本プロセッサアーキテクチャのオブジェクトモデルを示す概略図である。
【図３】スタックオブジェクトとしてプログラムスタックの実行を概略的に示す図である。
【図４】ポインタに関連する指示の分類を持つテーブルを示す図である。
【図５】本プロセッサアーキテクチャのためのオブジェクトレイアウトの実行の一例を示す図である。
【図６】属性を持つポインタレジスタを示す概略図である。
【図７】本プロセッサアーキテクチャのためのパイプラインの実行の一例を示す概略図を示す図である（簡略図示）。
【図８】図７に係るパイプラインのステージへのポインタ関連指示の分解を示す概略図である。
【図９】本装置の一例を示す概略図である。
【図１】
2009514043.tif 000002
【図２】
2009514043.tif 000003
【図３】
2009514043.tif 000004
【図４】
2009514043.tif 000005
【図５】
2009514043.tif 000006
【図６】
2009514043.tif 000007
【図７】
2009514043.tif 000008
【図８】
2009514043.tif 000009
【図９】
2009514043.tif 000010
【手続補正書】
【提出日】平成19年6月29日(2007.6.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項３
【補正方法】変更
【補正の内容】
【請求項３】
データやポインタ操作のための別々の命令を持つ命令セットが用いられることを特徴とする請求項１又は２に記載のプロセッサアーキテクチャ。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項４
【補正方法】変更
【補正の内容】
【請求項４】
ポインタのロード及び格納操作が、前記オブジェクトの前記ポインタエリアから前記ポインタレジスタにポインタを独占的にロードし、又は、前記ポインタレジスタのコンテンツを前記オブジェクトの前記ポインタエリアに格納し、又はその両方を行い、
データのロード及び格納操作が、データレジスタ内の前記オブジェクトの前記データエリアからデータを独占的にロードし、又は、前記オブジェクトの前記データエリア内に前記データレジスタのコンテンツを格納し、又はその両方を行うことを特徴とする請求項１から３までのいずれか１項に記載のプロセッサアーキテクチャ。
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項５
【補正方法】変更
【補正の内容】
【請求項５】
オブジェクト構築命令を持つ命令セットであって、構築されるオブジェクトにアクセスすることができる前に、構築される該オブジェクトの前記ポインタエリアのすべてのポインタを空値で初期化する命令セットが用いられることを特徴とする請求項１から４までのいずれか１項に記載のプロセッサアーキテクチャ。
【手続補正４】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項６
【補正方法】変更
【補正の内容】
【請求項６】
前記オブジェクト構築命令が、時間内に、中断して再開することを特徴とする請求項５に記載のプロセッサアーキテクチャ。
【手続補正５】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項７
【補正方法】変更
【補正の内容】
【請求項７】
前記オブジェクト構築命令が中断した場合に、不完全に初期化されたオブジェクトが構築され、該オブジェクトは、完全に初期化されたオブジェクトからは前記プロセッサによって明確に区別されることを特徴とする請求項６に記載のプロセッサアーキテクチャ。
【手続補正６】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１０
【補正方法】変更
【補正の内容】
【請求項１０】
前記ポインタスタック上にポインタをプッシュするための命令であって、両方が、前記ポインタスタック上に対応するポインタを格納し、また中断することなく前記ポインタスタックインデックスを増加する命令が用いられることを特徴とする請求項９に記載のプロセッサアーキテクチャ。
【手続補正７】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１６
【補正方法】変更
【補正の内容】
【請求項１６】
ＲＩＳＣ命令セットが用いられることを特徴とする請求項１から１５までのいずれか１項に記載のプロセッサアーキテクチャ。
【国際調査報告】
2009514043.tif 000011
2009514043.tif 000012
2009514043.tif 000013
2009514043.tif 000014
2009514043.tif 000015
2009514043.tif 000016