JP2009514043A5 - - Google Patents
Download PDFInfo
- Publication number
- JP2009514043A5 JP2009514043A5 JP2006516089A JP2006516089A JP2009514043A5 JP 2009514043 A5 JP2009514043 A5 JP 2009514043A5 JP 2006516089 A JP2006516089 A JP 2006516089A JP 2006516089 A JP2006516089 A JP 2006516089A JP 2009514043 A5 JP2009514043 A5 JP 2009514043A5
- Authority
- JP
- Japan
- Prior art keywords
- pointer
- processor
- processor architecture
- register
- stack
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 230000003068 static Effects 0.000 claims description 17
- 238000011068 load Methods 0.000 claims description 14
- 230000000875 corresponding Effects 0.000 claims description 9
- 230000001419 dependent Effects 0.000 claims description 3
- 238000010276 construction Methods 0.000 claims 3
- 238000000034 method Methods 0.000 description 5
- 238000005056 compaction Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 241000667869 Psix Species 0.000 description 2
- 230000001427 coherent Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000029578 entry into host Effects 0.000 description 1
- 230000002452 interceptive Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
Description
本発明はプロセッサアーキテクチャに関し、メモリへのアクセスがオブジェクトを参照するポインタを介して行われるものに関する。
ソフトウェアの複雑さを管理することは、ソフトウェア開発における最大の要求である。ソフトウェアが、理解可能であって制御可能であるモジュールに分解されて理論的に表わされる場合、高品質で信頼性の高いシステムだけが実行されることとなる。これを達成するために、オブジェクト指向プログラミング言語が何年にもわたって使用されてきた。
オブジェクト指向プログラミング言語の実行における主要な問題はダイナミックメモリ管理である。C++のようないくつかのオブジェクト指向言語は、いまだに、例えばプログラマの責任の下でメモリが要求され、また再び解放されるような、マニュアルメモリ管理に基づいている。しかしながら、このアプローチは、その問題に合わせて調整されるシステムの自然なモデリングがしばしば可能でないという欠点を持つ。これは、メモリ管理がそのシステムの設計の間においても実行されるためである。さらに、メモリのマニュアル解放はプログラムエラーの全クラスの原因である。例えば、メモリエリアに対する参照がいまだ存在しているにもかかわらず、メモリエリアが解放された場合、このことはさらなるプログラムの実行において壊滅的な結果となるかもしれない。すでに解放されたメモリエリアに対していまだ存在しているポインタ(ダングリング参照)によって引き起こされるエラーの連続が多くの要因の機能であって、それゆえほとんど再生不可能であり、辛うじてローカライズできるということは、この場合には特に深刻である。これらの理由のため、Java(登録商標)のような、ほとんどすべての最新のプログラミング言語は、自動ガーベッジコレクションを実行するダイナミックメモリ管理に基づいている。このダイナミックメモリ管理を持つシステムにおいて、メモリエリアはそのプログラムの責任の下で復帰されないかもしれない。その代わりに、メモリエリアがプログラムによってもはや確実に参照されないときには、ガーベッジコレクターが自動的にそのメモリエリアの解放だけを行う。この原則のおかげで、"ダングリング参照"が発生することはない。さらに、プログラマが実際の問題の解決に全力で取り組むために、この技術の使用はプログラマの生産性を上昇させる。最終的に、ダイナミックメモリ管理を持つシステムにおける隠れたプログラムエラーの可能性がマニュアルメモリ管理を持つシステムにおけるものよりも著しく低くなるので、用意されるプログラムが高品質なものとなる。
関連技術
ダイナミックに構築されるメモリエリアの自動解放に関するアルゴリズムは多数存在し、参照カウント、コピー、及びマークスイープコレクションの概念の下の技術として知られている。これらのアルゴリズムの概観については「R.ジョーンズ、R.リンズ:"ガーベッジコレクション:自動ダイナミックメモリ管理のためのアルゴリズム"、ジョン・ウィリー&ソンズ、1996年」を参照している。
ダイナミックに構築されるメモリエリアの自動解放に関するアルゴリズムは多数存在し、参照カウント、コピー、及びマークスイープコレクションの概念の下の技術として知られている。これらのアルゴリズムの概観については「R.ジョーンズ、R.リンズ:"ガーベッジコレクション:自動ダイナミックメモリ管理のためのアルゴリズム"、ジョン・ウィリー&ソンズ、1996年」を参照している。
これらのアルゴリズムの単純な実行は、ガーベッジコレクションサイクルの全期間にわたってそのアプリケーションプログラムを中断する。それらは、典型的には、プログラムの実行において長く予測不可能なポーズを引き起こす。それゆえ、それらは、インタラクティブシステムやリアルタイム環境にはふさわしくない。
インクリメンタルでありコンカレントな方法は、当該プログラムの実行をガーベッジコレクションサイクルの間にわたって継続することを許可する。しかしながら、それらは、アプリケーションプログラムとガーベッジコレクターとの間の同期を要求する。しかしながら、ソフトウェアにおけるこの同期のコストは深刻なものである。なぜならば、使用される方法によって、関連するオブジェクトがすでにガーベッジコレクターによって処理されたかどうかを決定するために、各ポインタロード(リードバリア)前又は各ポインタストア(ライトバリア)前のいずれかに、ショートコードシーケンスを組み込まなければならないからである。
多くのインクリメンタルな方法は"リアルタイムケーパブル"として表わされる。なぜならば、ガーベッジコレクターによって引き起こされるポーズはほとんどの場合において短すぎて、ユーザによって登録することはできないからである。しかしながら、ハードなリアルタイムケーパビリティは、そのシステムのレスポンスタイムのコンスタントな上限の保証を要求する。ソフトウェアベースの方法は、典型的には、ルートセット(レジスタ及びスタック)のすべてのポインタの試験やオブジェクト全体の処理のような割り込み可能でないオペレーションに依存するので、それらはハードなリアルタイム要求を満たさない。無期限の不可分オペレーションなしで管理するソフトウェア解法が知られているが、時間やメモリを計算するこれらの解法に費やすコストは深刻なものである。
自動ガーベッジコレクションのためのすべての技術の基本的な問題は、ポインタを発見し識別することである。もしもポインタが非ポインタと明確に区別することができなければ、コンサバティブなガーベッジコレクションだけが実行される。このことは、ポインタを表現できる各ビットパターンが、いまだ使用中であるメモリの解放を避けるために、ポインタとして見なされなければならないということを意味する。それゆえ、オブジェクトを移動してポインタをアップデートするようなコンパクト化方法はコンサバティブなガーベッジコレクションにおいては使用されない。しかしながら、そのメモリは、コンパクト化方法を用いなければ断片化される。
これらの問題を避け、正確なガーベッジコレクションを実行するために、より多くの経費がポインタのサーチ及び識別に使用される。多くのオブジェクト指向言語において、ポインタやオブジェクトは、オブジェクト毎に含まれるタイプデスクリプタを介して識別される。しかしながら、プログラムスタックやプロセスレジスタにおけるポインタを突き止めることは、特にコンパイラを最適化することに関しては、より困難である。スタックポジションや、ポインタを現在含んでいるプロセッサレジスタが特定されるデータ構造を維持することは可能であるが、プログラムが実行されている間にわたってこの種のデータ構造を提供するためのコストはとても高いものである。この理由から、ほとんどのソフトウェアベースの方法では、プログラムスタックやレジスタ内のポインタの位置を表現するコンプライヤによって生成されるテーブルを使用する。ガーベッジコレクションの実行対象である各プログラムポイントで、このタイプのテーブルのセットが準備される。しかしながら、この技術の実施によって、プログラムコードの膨張が深刻なものになってしまう。さらに、停止しているスレッドが、制限された時間内にこのタイプの次のプログラムポイントに届くことを、リアルタイムシステムは保証しなければならない。
それゆえ、多くの問題が、自動ガーベッジコレクションを主としてソフトウェアで使用する現在のシステムを用いて克服されなければならない。これは、とりわけ、ハードウェアが根本的に提供しない機能をソフトウェアがシミュレートするからである。もしも、プロセッサ自身がハードウェアにおいて、全体的に或いは部分的に、自動ガーベッジコレクションを実行すれば、効率性やリアルタイムケーパビリティに関する多くの問題が克服されるであろう。しかしながら、プロセッサがこの目的のためにポインタを識別することができることが絶対に必要である。
以下では、多くの既知のアーキテクチャのうちの2つ、すなわち、正確なポインタ識別及び/又は自動ガーベッジコレクションをサポートする模範的な目的と、本発明の主題が重要であることを記述する。
このように、メモリエリアをアドレス指定するためにダイレクトなポインタに代わってケーパビリティを使用するアーキテクチャが1996年以来知られている。ケーパビリティには、アクセス権限やオブジェクトの識別に関するステートメントが含まれる。それらにはオブジェクトの物理的なアドレスではなく、むしろオブジェクトの位置、大きさ及び属性を表現するデスクリプタへの参照が含まれる。このタイプのアーキテクチャを持つプロセッサの例として、例えば、「H.M.レビィ:ケーパビリティベースのコンピュータシステム、ディジタルプレス、1984年、159〜186ページ」に記述されているような、インテルiAPX432がある。このアーキテクチャにおいて、ケーパビリティは2段階のマッピングプロセスを通して、関連するオブジェクトに関連付けられる。オブジェクトテーブルにおけるユニークなエントリが各オブジェクト毎に存在するが、それはオブジェクトの位置、大きさ及びステータスを表わす。各オブジェクトは2つのエリア、すなわち、データエリアとケーパビリティのためのエリアとから構成される。正確なケーパビリティの識別はこのように行われる。
iAPX432は、レジスタセットの欠落と、ケーパビリティとオブジェクトデスクリプタとを介したオブジェクトの二重の間接的なアドレス指定のために、極めて非効率なものである。さらに、それは自動ガーベッジコレクション自身を実行しない。当該ガーベッジコレクションはソフトウェア内で実行されるべきであり、リアルタイムケーパブルでない。
ダイレクトポインタを識別するための全ての既知の方法は、ポインタと非ポインタとの間を差別化するためにあらゆるメモリワードに特別な識別ビット(タグ)を使用する。この一例としては、米国特許第5,560,003号に記載されたリアルタイムでのインクリメンタルガーベッジコレクションのためのシステム及びハードウェアモジュールがある。これは、2つのメモリバンクと、ガーベッジコレクションを実行する1つのローカルプロセッサとから構成される。各メモリバンクは、それぞれのメモリアクセスに対応するオブジェクトの開始アドレスにアドレスをマップするオブジェクト空間マネージャによってサポートされる。その複雑性のために、このオブジェクト空間マネージャは、類似するチップエリアをメモリとして占有する、分離したASICとして実行される。この種のシステムは大変コストが高くなる。さらに、識別ビットを用いたポインタの識別は、要求されるコンピューティング時間やメモリという形で追加費用が必要になる。
組み込みシステムにおけるソフトウェアの複雑性の連続する増加のため、自動ガーベッジコレクションの利点をこの経済的に重要な分野にさらに使用するために、何年もの間にわたって大きな努力がなされてきた。重要である最大の点は、最新の情報技術のこのエリアで正確に達成されることである。製品のサイクルは連続するイノベーションを通じてますます短くなっているので、現在のオブジェクト指向言語のための組み込みシステムのロバストでリアルタイムケーパブルなプラットフォームの要求は増加する一方である。しかしながら、これらのアプリケーションにとって、自動ガーベッジコレクションは、ほとんどの場合において贅沢であると考えられ、その議論の余地もない利点があるにもかかわらず自動ガーベッジコレクションを持つ余裕はない。
この関連技術から続けると、本発明の目的は、オブジェクトベースのオブジェクト指向プログラムのためのプロセッサアーキテクチャを明確にすることである。それは、費用対効果が高く正確なポインタ識別を可能とし、それゆえにハードウェア内の全部又は一部で実行される、効率的でリアルタイムケーパブルな自動ガーベッジコレクションのためのパスを開くものである。
発明の詳細
目的は、請求項1に係るプロセッサアーキテクチャによって達成される。このプロセッサアーキテクチャの有利な実施態様は従属請求項の主題であって、或いは下記の詳細や模範的な実施態様から参照される。
目的は、請求項1に係るプロセッサアーキテクチャによって達成される。このプロセッサアーキテクチャの有利な実施態様は従属請求項の主題であって、或いは下記の詳細や模範的な実施態様から参照される。
本特許出願の範囲において、用語ワードは、単一のプロセッサ命令を用いて当該メモリからロードできる、或いはメモリ内に格納できるデータユニットとして理解される。オブジェクトは、メモリワードのコヒーレントなセットとして理解され、そのメモリワード中の全てのワードは単一のオブジェクトに排他的に関連付けられている。ポインタは、オブジェクトを参照するワードとして理解される。用語空値は、オブジェクトがないことを参照するために使用される、不変に定められたポインタ値を表わす。
オブジェクトベースのオブジェクト指向プログラムのための本プロセッサアーキテクチャにおいて、メモリは、オブジェクトを直接参照するポインタを介して排他的にアクセスされる。オブジェクトは、コヒーレントなメモリエリア、例えば重なり合わない2つのオブジェクトによって占有されるメモリエリア、に排他的に格納される。それぞれのオブジェクトにおいて、ポインタはポインタエリアに、データはデータエリアに、互いに別々に格納される。さらに、ポインタエリアの長さやデータエリアの長さについての情報が、それぞれのオブジェクトに格納される。この長さ情報は、後述するような属性として参照される。その属性を用いて、オブジェクトのサイズを決定したり、オブジェクト内のポインタとデータとを互いから一意に区切ることが、いつでも可能である。
本プロセッサアーキテクチャは、別々のポインタレジスタとデータレジスタのセットを提供する。この場合、ポインタレジスタは、オブジェクトを用いるオペレーション、例えばメモリアクセスに排他的に提供され、他のタスクに対しては用いられない。それゆえ、特に、ポインタレジスタには任意の値を書き込めないことや、ポインタレジスタを用いて算術演算を実行できないことが保証される。
オブジェクトのポインタエリアやポインタレジスタにおけるポインタは、メモリ内のオブジェクトのアドレスを直接的に含んでいる。
本オブジェクトベースプロセッサアーキテクチャを使用して、ポインタと非ポインタ(データ)の厳格な分離がこのように実行され、その結果、識別ビットを必要とせずに正確なポインタ識別ができる。プロセッサレジスタ内やメモリ内のポインタを識別するためのこの正確な能力、それはハードウェアによって保証されるものであるが、その能力を通して、ハードウェアにおいて全体的に或いは部分的に実行できる自動ガーベッジコレクションが、プロセッサレベルで統合される。この基盤上に、特に効果的に実行される自動ガーベッジコレクションを持つリアルタイムケーパブルなシステムが実行できる。それゆえ、そのプロセッサ上で実行しなければならないソフトウェアは、ガーベッジコレクションアルゴリズムそのもののためにも、プロセッサとガーベッジコレクターとの間で必要な同期のためにも、必要ない。プロセッサは単に、ガーベッジコレクターに対してメモリ帯域幅の一部分を譲るだけにすぎない。
当該アーキテクチャのさらなる利点は、ガーベッジコレクションがコンプライヤ及び/又はランタイムシステムの協力なしで遂行でき、それゆえ特にロバストに実行できることである。
ガーベッジコレクションの実行に対するハードウェア上の努力は、プロセッサ自身に対する努力と比較して比較的低い。この理由から、そのようなプロセッサは、典型的なマイクロプロセッサやマイクロコントローラと同様に、費用対効果を高くして製造される。
本プロセッサアーキテクチャにおいて、ポインタとして識別されるあらゆるワードは、存在するオブジェクトのアドレスを含むか空値かのいずれかであることが、プロセッサによって好ましくは保証される。本好適な実施態様では、それゆえに固定ルール(システムの不変条件)がプロセッサアーキテクチャによって維持される。ここで、固定ルールとは、それぞれのメモリワードやレジスタが、それがポインタであるか否か、さらには、それぞれのポインタ値が空値か、存在するオブジェクトのアドレスを含むかどうかについて、識別することである。これらのシステムの不変条件を維持することにより、システムにおけるポインタの正確な識別が各クロックサイクルで可能である。
好ましくは、生成されるオブジェクトの属性がパラメータとして転送される特別なオブジェクト生成命令によって新たなオブジェクトが生成される。このオブジェクト生成命令は、オブジェクトがアクセスされる前に、空値でポインタエリアの全てのポインタを初期化する。システム不変条件は、このように侵されることはない。
ハードなリアルタイム要求のための改良において、オブジェクト生成命令が割り込み可能に実行される。もしオブジェクト生成命令が割り込まれた場合、不完全に初期化されたオブジェクトは、割り込まれた生成命令が後で再開できるように、生成される。不完全に初期化されたオブジェクトは、プロセッサによって一意に識別される。
好ましくは、プログラムが開始する前にも、リードオンリーメモリエリアの部分として存在するコンスタントなオブジェクトがプロセッサアーキテクチャによってサポートされる。コンスタントなオブジェクトへのポインタは、プロセッサによって一意に識別される。
本プロセッサアーキテクチャにおいて、メモリのエリアは、好ましくは既知の方法でプログラムスタックとして用意される。プログラムスタックは、この目的のためにポインタスタックエリア、データスアックエリアに分けられる。そこでは、それぞれのケースにおいてスタックによって占有されない第1の位置が、それぞれのケースにおいて用意されたデータレジスタ内で管理されるスタックインデックスによって特定される。
もし複数のスタックが使用された場合は、現在非活動のスタックのスタックインデックスが、好ましくは関連するスタックオブジェクト内で属性として格納される。さらに、スタックオブジェクトは、ヒープ内ではなく、むしろオペレーティングシステムによって管理されるスタティックなメモリの中に、スタティックなオブジェクトとして好ましくは格納され、この種のオブジェクトへのポインタ(スタティックなポインタ)は特別な方法で識別される。
プロセッサアーキテクチャの効率的な実行のために、各ポインタレジスタは、ポインタレジスタ中のポインタによって参照されるオブジェクトに属するオブジェクトの属性が格納される属性レジスタを、好ましくは伴っている。本実施態様では、属性をロードするための追加パイプラインステージが提供される。さらに、アクセスを加速するための属性キャッシュが、このパイプラインで好ましくは使用される。
本プロセッサアーキテクチャの実行に関する関連技術によれば、命令及びデータキャッシュ、或いは分岐予測のためのユニットのような、プログラムの実行や典型的な最適化を要求する全てのさらなるパイプラインステージや機能ユニットが実行される。
発明を実行する方法
以下では、本発明に係るプロセッサアーキテクチャの実施態様の一例が説明される。それは、中でも、識別ビット(タグ)を使用することなく正確なポインタ識別を達成するオブジェクトに基づくものであり、一般に適用可能な、効果的に適用され得るRISC命令セットに基づくものであり、実行時間がいくつかのクロックサイクルを超える不可分のオペレーションを要求しないものである。
以下では、本発明に係るプロセッサアーキテクチャの実施態様の一例が説明される。それは、中でも、識別ビット(タグ)を使用することなく正確なポインタ識別を達成するオブジェクトに基づくものであり、一般に適用可能な、効果的に適用され得るRISC命令セットに基づくものであり、実行時間がいくつかのクロックサイクルを超える不可分のオペレーションを要求しないものである。
説明されるプロセッサアーキテクチャは、以下のシステムの不変条件を保証する。すなわち、
1.すべてのメモリワード又はレジスタは、それがポインタを表わすか否かについて識別し得ること、
2.すべてのポインタ値が、空値であるか、又は存在するオブジェクトに一意に関連付けられること。
1.すべてのメモリワード又はレジスタは、それがポインタを表わすか否かについて識別し得ること、
2.すべてのポインタ値が、空値であるか、又は存在するオブジェクトに一意に関連付けられること。
本プロセッサアーキテクチャは、図1に概略的に示されるように、分離したデータレジスタ及びポインタレジスタのセットを提供する。右側に示されるデータレジスタは多目的レジスタとして使用され、一方、左側に示されるポインタレジスタはメモリ内のオブジェクトにアクセスするために使用される。Npはポインタレジスタ数を特定し、Ndはデータレジスタ数を特定する。システムの不変条件を満足するために、ポインタレジスタ内に任意の値をライトすること、例えばポインタレジスタ内にデータレジスタの値をコピーしたり、ポインタレジスタを用いて算術的なオペレーションを実行するようなこと、はできないことが保証されなければならない。
本プロセッサアーキテクチャのメモリモデルはオブジェクトベースである。各オブジェクトは、互いに厳格に分離されているデータエリアとポインタエリアとから構成される。図2は、オブジェクトのポインタエリア(図の左側)における対応するポインタワードとデータエリア(図の右側)におけるデータワードを持つこの種のオブジェクトの概略構造を示す。データエリアにおけるデータワード数はδ属性(δ≧0)によって記述される。また、ポインタエリアにおけるポインタ数はπ属性(π≧0)によって記述される。オブジェクトが生成されて後ほど変化しない場合、その属性によって記述されるオブジェクトのサイズは固定される。その属性はオブジェクトの一部分であり、分離した属性エリアのその中に格納される。
本プロセッサアーキテクチャのための命令セットの特定部分は、ロード及び格納命令を含むポインタ関連の命令だけから構成される。算術命令やプログラムコントロールの命令のような他の命令の実施態様は、記述されるアーキテクチャとは無関係に選択され、本発明の部分ではない。
説明されるアーキテクチャの命令セットは、新しいオブジェクトやこのオブジェクトへのポインタを生成するために用いられる特別なオブジェクト生成命令を持つ。オブジェクト生成命令(オブジェクトの割り当て)は引数として、生成されるオブジェクトのπ及びδ属性の値を受け取り、新たに生成されたオブジェクトへのポインタをポインタレジスタ内に格納する。生成されたオブジェクトのポインタエリア内のそれぞれのポインタ値は、そのオブジェクトへのポインタがプログラムに見えるようになる前に、空値を用いて初期化される。オブジェクトを削除する命令はない。オブジェクトはプロセッサレベル上で自動ガーベッジコレクションによってのみ削除され得る。
ロード及び格納命令は、オブジェクト内でのワードへのアクセスのために使用される。プロセッサアーキテクチャは、ポインタ値やデータワードへのアクセスための、異なるロード及び格納命令を提供する。"ロードデータ"及び"格納データ"命令は、オブジェクトのデータエリアとデータレジスタとの間で排他的にデータワードを移動する。"ロードポインタ"及び"格納ポインタ"命令は、オブジェクトのポインタエリアとポインタレジスタとの間で排他的にポインタを移動する。ロード及び格納命令は、オブジェクトへのポインタを含むポインタレジスタを用いて、及び正の整数インデックスを用いて、アクセスされるメモリワードを識別する。インデックスを計算するために、従来のアーキテクチャのアドレス指定モードに対するものと同じように、例えば、データレジスタ、コンスタントオフセット及びスケーリンクファクターを用いて、異なる"インデキシングモード"が使用され得る。
オブジェクトへのアクセスにおいて、特定の参照されたオブジェクトの外部のワードへのアクセスが不可能であることを保証するために、範囲のチェックが実行される。このようなアクセスは壊滅的な結果となり、システムの不変条件を侵すこととなる。この理由のため、バウンスバイオレーションの場合には、メモリアクセスが終了して、対応する例外的な取り扱いが開始される。同様の理由のため、空値ポインタの参照先を取得しようとする命令は打ち切られる。
オブジェクトの属性は2つの"リード属性"命令によって問い合わせされ得る。
データレジスタに関するオペレーションを典型的に実行する複数の"レジスタからレジスタ"への命令に対比して、ポインタ関連の"レジスタからレジスタ"への命令のための2つの命令から成る強く制限されたセットが、本アーキテクチャによって定義される。"コピーポインタ"命令は、あるポインタレジスタの内容を他のポインタレジスタにコピーする。一方、"比較ポインタ"命令は、2つのポインタが同じオブジェクトを参照するか否かをチェックする。
図4は、本プロセッサアーキテクチャによって定義されるポインタ関連の命令の概要を示しており、それらがポインタレジスタをリードするか、ポインタレジスタをライトするか、或いはポインタレジスタの参照先を取得するかどうかによって分類するものである。それぞれの場合においてリードされ、ライトされ、或いは参照先を取得されるレジスタは、ボールド体でプリントされている。
プログラムスタックの体系化されていない、高度にダイナミックな特性のために、これらは、自動ガーベッジコレクションの範囲におけるポインタ識別に関して、最高度の要求の一つを表わす。本プロセッサアーキテクチャにおいて、プログラムスタックは、何らかのオブジェクトのようにデータエリアやポインタエリアを持つスタックオブジェクトとして見なされ、それゆえ2つの分離したスタックとして見なされ得る。ポインタレジスタは、スタックオブジェクトへのポインタを維持するために用意される。スタックインデックスは、対応するエリアを実際のスタックエリアと現在占有されていないエリアとに分けるために、2つのスタックエリアのそれぞれにおいて使用される。スタックインデックスは、本例において、第1の占有されていないメモリ位置に関連する。0のスタックインデックスは空スタックを表わす。2つのスタックインデックスは、データスタックインデックス(dsix)とポインタスタックインデックス(psix)として識別される。これらのインデックスのそれぞれは、この目的のために用意される特別のデータレジスタ内に維持される。
スタックオブジェクトが典型的なオブジェクトように取り扱われる場合、システムは、ポインタが現在占有されているポインタスタックに属するか、又は、ポインタスタックエリアの占有されていない部分に属しているかを、区別しないかもしれない。ポインタスタックエリアにおける各ワードがポインタとして識別されるので、ポインタスタックエリアの未使用エリアがもはや必要とされていないオブジェクトを参照する多くのポインタを含んでいるかもしれない。ガーベッジコレクターは、これらのオブジェクトへのポインタがまだ存在しているので、これらのオブジェクトを解放しないかもしれない。このオブジェクトの可能性のある解決策は、対応するポインタがスタックから取り除かれると同時に、空値で各ポインタ値を上書きすることである。しかしながら、例えばサブプログラムの終わりでスタックフレームのディスアロケーション間の場合のように、特にもし複数のポインタがスタックから取り除かれた場合、このことは不要な経費がかかるという結果をもたらす。
本プロセッサアーキテクチャの有利な実施態様についてここで述べた例として、スタックのダイナミックなサイズを考慮するオブジェクトの達成がそれゆえ選択される。この目的のため、図3に示されるようなスタックオブジェクトは2組の属性によって表現される。一つ目の組の(π,δ)は現在のスタックサイズを特定し、二つ目の組の(Π,Δ)は最大スタックサイズを特定する。この場合において、π属性はポインタスタックインデックスpsixの値に対応し、δ属性はデータスタックインデックスdsixの値に対応する。スタック属性Π及びΔは、ユーザプログラムに見えないシステムレジスタにおいて維持される。πよりも小さなインデックスを持つポインタのみがポインタ識別及びシステムの不変条件に関連するポインタとして見なされる。
スタック内のメモリワードは標準的なロード及び格納命令によってアドレス指定される。標準の算術的な命令を用いてスタックインデックスに対応する値を減少することにより、スタックからワードが取り除くことができる。システムの不変条件を維持するために、特別な命令がポインタスタックへポインタをプッシュするために提供される。ここで、当該命令は、ポインタスタックエリアの第1の占有されていないメモリ位置上に、割り込みを許さずにポインタを格納し、ポインタスタックインデックスを増加する。これは、ポインタスタックインデックスを増加するために許可される唯一の命令である。
この点について説明されたプロセッサアーキテクチャにおいて、メモリはポインタを介して独占的にアクセスされ、ポインタを生成するための唯一つの可能性は、オブジェクト生成命令を用いて新たなオブジェクトを生成することである。しかしながら、例えばプログラムの開始前であっても、プログラムコードのような部分として存在するコンスタントなデータをアクセスすることもまた可能である。そのようなコンスタントなデータの例が、ブランチテーブルやタイプデスクリプタのようなコンパイラによって生成される、コンスタントにリンクされたリストや構造である。
それゆえに、プロセッサアーキテクチャの有利な実施態様の本例が、コンスタントなオブジェクトを紹介する。コンスタントなオブジェクトは不変のオブジェクトであり、プログラムコードの一部分として、或いはコンスタントなオブジェクトのために用意される特別なエリア内に格納される。特別な"コンスタントなポインタの生成"命令は、コンスタントなオブジェクトへのポインタの生成のために使用され、コンスタントなポインタとして以下のように参照される。コンスタントなポインタを介したメモリアクセスは、リードアクセスに限定され、コンスタントなオブジェクトのポインタエリアはコンスタントなポインタ又は空値ポインタを独占的に含む。コンスタントなオブジェクトは、オブジェクトの特別なタイプを区別するために提供されるφ属性によって、普通のオブジェクトから区別される。
多くのシステムにおいて、分離したプログラムスタックが、ユーザモードやオペレーティングシステムモードのようなオペレーションの異なるタイプのために使用される。さらに、複数のコンカレントな実行スレッドを持つシステム(マルチスレッドシステム)が、それぞれの実行スレッドのための分離したプログラムスタックを要求する。
これらのスタックの全てが典型的にオペレーティングシステムによって管理され、ガーベッジコレクション(ヒープ)によって監視されるメモリエリア内に位置付けられない。
オペレーティングシステムにヒープメモリエリアの外側のメモリエリアを管理させるために、スタティックなオブジェクトが提供される。スタティックなオブジェクトは、オペレーティングシステムモードにおいて独占的に生成され、この目的のために特に提供されたメモリエリア内に配置される。スタティックなオブジェクトはまた、φ属性を介して識別される。スタティックなオブジェクトへのポインタ(スタティックなポインタ)は決してユーザプログラムからは見えない。
システムの不変条件を維持するために、関連するオブジェクト生成命令が終了する前に、新たに生成されたオブジェクトにおける各ポインタが空値で初期化される。それゆえ、オブジェクト生成命令のための実行時間は、少ない時間定数によって制限されない。これはハードなリアルタイムアプリケーションのためには認められない。
オブジェクト生成命令を割り込み可能なように実行するために、イニシャライズされていない(より正確には、不完全に初期化された)オブジェクトが、述べられたプロセッサアーキテクチャの有利な実施態様に取り入れられる。イニシャライズされていないオブジェクトは、オブジェクト生成命令が完結する前に割り込まれた場合にだけ、生成される。イニシャライズされていないオブジェクトへのポインタは、オペレーティングシステムモードにおいてのみ見ることができ、それは決して参照先が取得されることはない。イニシャライズされていないオブジェクトは、スタティックでコンスタントなオブジェクトのように、φ属性によって識別される。
それゆえに述べられたプロセッサアーキテクチャの模範的な有利な実施態様は、4つの異なるタイプのオブジェクト、すなわち、通常のダイナミックなオブジェクト、イニシャライズされていないダイナミックなオブジェクト、コンスタントなオブジェクト、及びスタティックなオブジェクト、をサポートする。φ属性は、オブジェクトのタイプを区別するために使用され、4つの値(norm,uini,const,stat)の一つを担う。アーキテクチャの実行において、φ属性はオブジェクトへのポインタ内、及び/又は、オブジェクト自身内に格納される。
通常のダイナミックなオブジェクトとイニシャライズされていないダイナミックなオブジェクトはヒープメモリエリア内に位置付けられ、スタティックなオブジェクトはスタティックなメモリエリア内に位置付けられ、コンスタントなオブジェクトはプログラムコード及び/又はコンスタントなデータのために提供されるメモリエリア内に位置付けられる。スタティックでイニシャライズされていないオブジェクトはオペレーションシステムモードに限定されるので、それらはシステムオブジェクトとして識別される。
自動ガーベッジコレクションの観点からすれば、オブジェクトの4つのタイプは、それらが、コンパクト化を行うガーベッジコレクターによってどのように取り扱われるかによって特徴付けられる。典型的なダイナミックなオブジェクトはポインタが探索され、コンパクト化の間中移動する。スタティックなオブジェクトはポインタが探索されるが、移動はしない。その一方で、イニシャライズされていないオブジェクトはコンパクト化の間中移動するが、正しくないポインタを含んでいるので、ポインタは探索されない。最後に、コンスタントなオブジェクトは、ガーベッジコレクターによるポインタの探索も移動もされない。
以下では、示唆的なプロセッサアーキテクチャの可能性のある実行が、模範的な目的のために説明される。32ビットのワード値がその実行のために仮定される。バイトやハーフワードをデータエリア内でアクセス可能にするために、メモリはバイト単位でアドレス指定可能である。ワードは4つに分割可能にアドレス指定するために一列に並べられる。
メモリ内のオブジェクトの模範的なレイアウトが図5に示される。各オブジェクトは、データエリア、ポインタエリア及び属性エリアから構成される。効率性の理由から、2つのオブジェクト間のパディングエリアがある環境下で要求されるように、オブジェクトは8つに分割可能にアドレス指定するために一列に並べられている。属性エリアは、ユーザプログラムからは見えておらず、オブジェクトのπ及びδ属性を含む。バイト及びハーフワードオペランドのサポートによって、本実行は、π及びδが対応するエリアにおけるワード数の代わりにバイト数を表わしているので、それらの定義をわずかに変える。
πは4の倍数であるので、2ビットがπ属性のために使用されるメモリワード内で非占有のままになっている。これらはφ属性(或いは、その部分)を格納するために使用され、及び/又は、ガーベッジコレクターに使用される。
ポインタは直接的にオブジェクトの物理的なメモリアドレスを含んでいる。オブジェクトは2倍のワードに従って一列に並べられているので、オブジェクトアドレスはポインタワードの29ビットのみを占有する。残りの3ビットはφ属性(或いは、その部分)を格納するために使用され、及び/又は、ガーベッジコレクターによって使用される。
オブジェクトへのアクセス前に、オブジェクトの属性が知られる。これらは、アクセス前に範囲のチェックのために必要であり、図5に係るオブジェクトレイアウトの場合において、データアクセスの場合でのアドレス生成にさらに要求されるからである。
それぞれのオブジェクトアクセス前のメモリからの属性のロードが膨大な経費に結び付くので、図6に概略的に示されるように、複数の属性レジスタが各ポインタレジスタに提供される。もしポインタレジスタが空値でない値を含んでいる場合、対応する属性レジスタは、ポインタレジスタが参照するオブジェクトの属性を含んでいる。このように、ポインタレジスタの参照先を取得するための費用は、通常のアーキテクチャにおけるアドレス生成のための費用と同じくらい少ない。範囲のチェック自身は、アドレス計算に並行して実行されるので、どんなパフォーマンスロスにも結び付かない。
しかしながら、属性レジスタは自身の対価を持っている。すなわち、ポインタがメモリからロードされる場合、関連する属性もまた属性レジスタにロードされる。さらに、メモリ内の属性の位置は、ポインタのロードが終了した場合にだけ知られる。
この問題は、RISCアーキテクチャの場合における典型的なメモリステージの後の追加的なパイプラインステージによって効果的に解決されるであろう。この追加的なステージは属性ステージとして参照され、属性アクセスを実行するために、パフォーマンスロスなしで、ほとんどの場合で属性キャッシュを使用する。属性キャッシュの構成は、典型的なデータキャッシュの構成と類似している。属性キャッシュは、ポインタの最大29ビットによってアドレス指定され、単一のステップにおいてπ及びδ属性のリード又はライトを許可する。データキャッシュからの本質的な差異は、キャッシュラインのサイズである。データキャッシュにおけるキャッシュラインは典型的に8ワードから構成される一方で、属性キャッシュのラインは2ワードの幅を持ち、単一のオブジェクトの属性のみを含んでいる。
図7は実行されるパイプラインの基本的な構成を示す図であり、図8は個々のパイプラインステージへの全てのポインタ関連の命令を示す分解図である。2つの最も複雑な命令の処理が模範的な目的のために図示されている。
1."ポインタロード"命令:
パイプラインの実行ステージにおいて、アドレス生成ユニット(AGU)は、ロードされるポインタのメモリアドレスを計算し、それと並行して、アーキテクチャによって規定された、範囲のチェックや空値ポインタテストのようなランタイムテストを実行する。メモリステージでは、計算されたアドレスがオブジェクトキャッシュからポインタをリードするために使用される。そして、ロードされたポインタは、ロードされたポインタが参照するオブジェクトからその属性をロードするために、属性キャッシュをアドレス指定する。最後に、ロードされたポインタは、ロードされた属性と共にレジスタセット内にライトされる。
パイプラインの実行ステージにおいて、アドレス生成ユニット(AGU)は、ロードされるポインタのメモリアドレスを計算し、それと並行して、アーキテクチャによって規定された、範囲のチェックや空値ポインタテストのようなランタイムテストを実行する。メモリステージでは、計算されたアドレスがオブジェクトキャッシュからポインタをリードするために使用される。そして、ロードされたポインタは、ロードされたポインタが参照するオブジェクトからその属性をロードするために、属性キャッシュをアドレス指定する。最後に、ロードされたポインタは、ロードされた属性と共にレジスタセット内にライトされる。
2.オブジェクト生成命令:
生成されるオブジェクトのサイズは、デコードステージから実行ステージまでを中継する2つのデータオペランドを利用して決定される。実行ステージにおいて、ポインタ生成ユニット(PGU)は新たなオブジェクトへのポインタの生成する責任がある。コンパクト化ガーベッジコレクターの場合において、PGUは、新たなオブジェクトの生成のために使用されるヒープのエリア内で最後に占有したワードを常に参照するアシスタントレジスタの内容にオブジェクトサイズを付加することによって、新たなオブジェクトの開始アドレスを大変簡単に決定する。PGUは、ポインタの初期化を要求するアドレスを生成するAGUによってサポートされる。8ワードのキャッシュラインを持つオブジェクトキャッシュにおいて、8ポインタワードまでが一クロックサイクル内で同時に初期化される。このように、もしオブジェクトの開始アドレスが一クロックサイクル内で計算された場合、及び、もしオブジェクト内の全てのポインタが同じキャッシュラインに属する場合は、オブジェクト生成命令は遅れることなく実行ステージを通過する。もしこれがその場合でなければ、初期化が終了するか割り込みが発生するまで、パイプラインは停止する。最終的に、新たに生成されたオブジェクトの属性が属性キャッシュにライトされ、レジスタセット内にその属性と共にポインタがライトされる。もし割り込まれたオブジェクト生成命令がパイプラインの終端に到達した場合、割り込まれたオブジェクト生成のステータスはシステムレジスタ内にライトされ、不完全に初期化されたオブジェクトは、イニシャライズされていないオブジェクトのφ属性により識別される。割り込まれたプログラムの実行のコンテキスト(命令カウンター、システムレジスタ)が再度回復するとすぐに、初期化が再開される。
生成されるオブジェクトのサイズは、デコードステージから実行ステージまでを中継する2つのデータオペランドを利用して決定される。実行ステージにおいて、ポインタ生成ユニット(PGU)は新たなオブジェクトへのポインタの生成する責任がある。コンパクト化ガーベッジコレクターの場合において、PGUは、新たなオブジェクトの生成のために使用されるヒープのエリア内で最後に占有したワードを常に参照するアシスタントレジスタの内容にオブジェクトサイズを付加することによって、新たなオブジェクトの開始アドレスを大変簡単に決定する。PGUは、ポインタの初期化を要求するアドレスを生成するAGUによってサポートされる。8ワードのキャッシュラインを持つオブジェクトキャッシュにおいて、8ポインタワードまでが一クロックサイクル内で同時に初期化される。このように、もしオブジェクトの開始アドレスが一クロックサイクル内で計算された場合、及び、もしオブジェクト内の全てのポインタが同じキャッシュラインに属する場合は、オブジェクト生成命令は遅れることなく実行ステージを通過する。もしこれがその場合でなければ、初期化が終了するか割り込みが発生するまで、パイプラインは停止する。最終的に、新たに生成されたオブジェクトの属性が属性キャッシュにライトされ、レジスタセット内にその属性と共にポインタがライトされる。もし割り込まれたオブジェクト生成命令がパイプラインの終端に到達した場合、割り込まれたオブジェクト生成のステータスはシステムレジスタ内にライトされ、不完全に初期化されたオブジェクトは、イニシャライズされていないオブジェクトのφ属性により識別される。割り込まれたプログラムの実行のコンテキスト(命令カウンター、システムレジスタ)が再度回復するとすぐに、初期化が再開される。
提案されたアーキテクチャの機能的な可能性は、機能するプロトタイプに基づいて証明される。このプロトタイプにおいて、ガーベッジコレクターは、メインプロセッサのパイプラインと緊密に連携するマイクロプログラム式コプロセッサとして実行される。プロセッサとコプロセッサとの間の同期は、完全にハードウェア内で実行される。ガーベッジコレクションのためのプロセッサとコプロセッサは、VHDLにおいて表わされ、最新のプログラム可能な論理回路に対して連帯して合成される。さらに、原型的なJava(登録商標)コンプライヤーやアーキテクチャのJava(登録商標)クラシックライブラリーのサブセットの実行がある。
図9は本装置の一例を示す概略図である。ガーベッジコレクターはマイクロプログラム可能なコプロセッサによって本例のように形成される。本発明に係るプロセッサアーキテクチャは、メインプロセッサ1内で実行される。メインプロセッサ1及びコプロセッサ2のために複数の別々のポートを持つメモリコントローラ3は、メインメモリとの接続を実現する。メインプロセッサとコプロセッサとの間の同期は、異なるレベルで発生する。キャッシュコヒーレンスを確保するために必要な場合には、ガーベッジコレクターはフラッシュし、データや属性キャッシュの複数ラインを空にする。プロセッサパイプラインに組み込まれたハードウェアリードバリアは、ガーベッジコレクター内で割り込みを引き起こす。ガーベッジコレクターはまた、マイクロコード内のクリティカルなエリアを保護するために、メインプロセッサ1を停止する。
本発明に係るプロセッサアーキテクチャは、下記図面に関連して模範的な実施態様に基づいてより詳細に記載される。
Claims (20)
- メモリへのアクセスがオブジェクトを参照するポインタを介して行われるプロセッサアーキテクチャであって、
前記オブジェクト中で互いに別々に、ポインタがポインタエリアに格納され、データがデータエリアに格納され、
前記ポインタは、該ポインタが参照する前記オブジェクトのメモリアドレスを含み、前記オブジェクトは、該オブジェクト自身に格納される属性であって、前記ポインタエリアの長さ及び前記データエリアの長さを表わす属性が与えられており、
前記プロセッサは、別々のデータレジスタとポインタレジスタとを有するレジスタセットを備え、前記ポインタレジスタは、前記メモリ内のオブジェクトへのアクセスのために用いられることを特徴とするプロセッサアーキテクチャ。 - 前記プロセッサは、いずれのポインタにも所定の空値又は存在するオブジェクトの前記メモリアドレスのいずれかのみが含まれることを保証することを特徴とする請求項1に記載のプロセッサアーキテクチャ。
- データ操作とポインタ操作のための別々の命令を持つ命令セットが用いられることを特徴とする請求項1又は2に記載のプロセッサアーキテクチャ。
- ポインタのロード及び格納操作が、前記オブジェクトの前記ポインタエリアから前記ポインタレジスタにポインタを排他的にロードし、及び/又は、前記ポインタレジスタの内容を前記オブジェクトの前記ポインタエリアに格納し、
データのロード及び格納操作が、データレジスタ内の前記オブジェクトの前記データエリアからデータを排他的にロードし、及び/又は、前記オブジェクトの前記データエリア内に前記データレジスタの内容を格納することを特徴とする請求項1から3までのいずれか1項に記載のプロセッサアーキテクチャ。 - オブジェクト構築命令を持つ命令セットであって、構築されるオブジェクトにアクセスすることができる前に、構築される該オブジェクトの前記ポインタエリアのすべてのポインタを空値で初期化する命令セットが用いられることを特徴とする請求項1から4までのいずれか1項に記載のプロセッサアーキテクチャ。
- 前記オブジェクト構築命令が、割り込みとその後の再開が可能であることを特徴とする請求項5に記載のプロセッサアーキテクチャ。
- 前記オブジェクト構築命令に割り込みがあった場合に、不完全に初期化されたオブジェクトが構築され、該オブジェクトは、完全に初期化されたオブジェクトとは前記プロセッサによって明確に区別されることを特徴とする請求項6に記載のプロセッサアーキテクチャ。
- 前記プロセッサが、プログラムの実行時に排他的に読み出される別々のメモリエリアにおいて保持されるコンスタントなオブジェクトをサポートし、
コンスタントなオブジェクトへのポインタが、前記プロセッサによって明確に識別されることを特徴とする請求項1から7までのいずれか1項に記載のプロセッサアーキテクチャ。 - ポインタスタックエリアとデータスタックエリアに分けられるプログラムスタックであって、2つのスタックエリアのそれぞれにおける占有部分の長さが、本目的のために用意されたデータレジスタ内で管理されるスタックインデックスによって示されるプログラムスタックが用いられることを特徴とする請求項1から8までのいずれか1項に記載のプロセッサアーキテクチャ。
- 前記ポインタスタック上にポインタをプッシュするための命令であって、割り込みを許さずに前記ポインタスタック上に対応するポインタを格納し、また前記ポインタスタックインデックスを増加する命令が用いられることを特徴とする請求項9に記載のプロセッサアーキテクチャ。
- 前記プロセッサが、オペレーティングシステムによって管理される別々のメモリエリアに保持されるスタティックなオブジェクトをサポートし、
スタティックなオブジェクトへのポインタが前記プロセッサによって明確に識別されることを特徴とする請求項1から10までのいずれか1項に記載のプロセッサアーキテクチャ。 - スタティックなオブジェクトが、前記プログラムスタックのために使用され、前記オブジェクトに含まれる属性は、プログラムスタックが活動していない場合に前記スタックエリアの実際の占有部分の長さを表わすことを特徴とする請求項9に従属する請求項11、又は請求項10に従属する請求項11に記載のプロセッサアーキテクチャ。
- 属性レジスタがポインタレジスタ毎に割り当てられており、前記ポインタレジスタ中の前記ポインタが参照する前記オブジェクトの属性がその中に記述されていることを特徴とする請求項1から12までのいずれか1項に記載のプロセッサアーキテクチャ。
- 追加パイプラインステージを持つパイプラインが前記属性をロードするために用いられることを特徴とする請求項13に記載のプロセッサアーキテクチャ。
- 属性キャッシュが用いられることを特徴とする請求項13又は14に記載のプロセッサアーキテクチャ。
- RISC命令セットが用いられることを特徴とする請求項1から15までのいずれか1項に記載のプロセッサアーキテクチャ。
- 前記プロセッサが自動ガーベッジコレクションを実行することを特徴とする請求項1から16までのいずれか1項に記載のプロセッサアーキテクチャ。
- 前述した請求項のいずれか1項に係るプロセッサアーキテクチャが実装されたプロセッサ。
- 請求項1から16までのいずれか1項に係るプロセッサアーキテクチャが実装されたメインプロセッサ(1)と、自動ガーベッジコレクションを実行し、効率的な同期のために前記メインプロセッサ(1)に密結合するコプロセッサ(2)とを持つデバイス。
- 請求項1から17までのいずれか1項に係るプロセッサアーキテクチャの埋め込みシステムのための使用。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE10329680.8 | 2003-07-01 | ||
DE10329680A DE10329680A1 (de) | 2003-07-01 | 2003-07-01 | Prozessorarchitektur für exakte Zeigeridentifizierung |
PCT/EP2004/007175 WO2005003960A2 (de) | 2003-07-01 | 2004-07-01 | Prozessorarchitektur für exakte zeigeridentifizierung |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2009514043A JP2009514043A (ja) | 2009-04-02 |
JP2009514043A5 true JP2009514043A5 (ja) | 2010-12-16 |
JP4763598B2 JP4763598B2 (ja) | 2011-08-31 |
Family
ID=33559786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006516089A Expired - Fee Related JP4763598B2 (ja) | 2003-07-01 | 2004-07-01 | プロセッサおよびデバイス |
Country Status (9)
Country | Link |
---|---|
US (1) | US8473722B2 (ja) |
EP (1) | EP1639475B1 (ja) |
JP (1) | JP4763598B2 (ja) |
KR (1) | KR101116989B1 (ja) |
CN (1) | CN100517269C (ja) |
AT (1) | ATE480824T1 (ja) |
DE (2) | DE10329680A1 (ja) |
HK (1) | HK1092236A1 (ja) |
WO (1) | WO2005003960A2 (ja) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7802148B2 (en) * | 2005-02-23 | 2010-09-21 | Broadcom Corporation | Self-correcting memory system |
DE102008036479A1 (de) * | 2008-08-05 | 2010-02-11 | Giesecke & Devrient Gmbh | Speicherverwaltung in einem portablen Datenträger |
DE102008051576A1 (de) * | 2008-10-14 | 2010-04-15 | Giesecke & Devrient Gmbh | Speicherverwaltung in einem portablen Datenträger |
US8635415B2 (en) * | 2009-09-30 | 2014-01-21 | Intel Corporation | Managing and implementing metadata in central processing unit using register extensions |
US8326886B2 (en) * | 2010-01-21 | 2012-12-04 | Microsoft Corporation | Per-thread, per-instance data storage |
US8577936B2 (en) * | 2010-11-29 | 2013-11-05 | International Business Machines Corporation | Fixup cache tool for object memory compaction in an information handling system |
US20130086359A1 (en) * | 2011-09-29 | 2013-04-04 | Qualcomm Incorporated | Processor Hardware Pipeline Configured for Single-Instruction Address Extraction and Memory Access Operation |
US8972705B2 (en) * | 2011-11-16 | 2015-03-03 | Andes Technology Corporation | Executing instructions for managing constant pool base register used for accessing constants during subroutine execution |
CN103336744B (zh) * | 2013-06-20 | 2015-11-04 | 华中科技大学 | 一种固态存储设备的垃圾回收方法及其系统 |
US10180902B2 (en) * | 2015-06-30 | 2019-01-15 | International Business Machines Corporation | Pauseless location and object handle based garbage collection |
US9734052B2 (en) | 2015-06-30 | 2017-08-15 | International Business Machines Corporation | Multi-section garbage collection |
US10176093B2 (en) * | 2015-06-30 | 2019-01-08 | International Business Machines Corporation | Pauseless location and object handle based garbage collection |
US9734053B2 (en) | 2015-06-30 | 2017-08-15 | International Business Machines Corporation | Garbage collection handler to update object pointers |
US10042752B2 (en) | 2016-05-27 | 2018-08-07 | Hewlett Packard Enterprise Development Lp | Object descriptors |
US10628306B2 (en) * | 2017-02-01 | 2020-04-21 | Microsoft Technology Licensing, Llc | Garbage collector |
CN113312278B (zh) * | 2021-07-29 | 2021-11-05 | 常州楠菲微电子有限公司 | 一种静态可分配共享多队列缓存的装置及方法 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3656178A (en) * | 1969-09-15 | 1972-04-11 | Research Corp | Data compression and decompression system |
JPS5569855A (en) * | 1978-11-20 | 1980-05-26 | Panafacom Ltd | Data processing system |
DE3136387C2 (de) * | 1981-09-14 | 1984-11-29 | Deutsche Gerätebau GmbH, 4796 Salzkotten | Vorrichtung zum Messen von Flüssigkeitsmengen |
US5778395A (en) * | 1995-10-23 | 1998-07-07 | Stac, Inc. | System for backing up files from disk volumes on multiple nodes of a computer network |
JPH09297677A (ja) * | 1996-05-02 | 1997-11-18 | Fujitsu Ltd | 一部のデータ群を消去可能としたfifoバッファ |
US5897656A (en) * | 1996-09-16 | 1999-04-27 | Corollary, Inc. | System and method for maintaining memory coherency in a computer system having multiple system buses |
US5860092A (en) * | 1997-02-14 | 1999-01-12 | Lsi Logic Corporation | Apparatus and method for addressing a cache memory in a computer system utilizing cache tag memory with integrated adder and pre-decode circuit |
FI102426B (fi) * | 1997-03-14 | 1998-11-30 | Nokia Telecommunications Oy | Menetelmä muistin toteuttamiseksi |
US5946318A (en) * | 1997-03-21 | 1999-08-31 | International Business Machines Corporation | Method and apparatus for processing and packetizing data from a data stream |
US5920876A (en) * | 1997-04-23 | 1999-07-06 | Sun Microsystems, Inc. | Performing exact garbage collection using bitmaps that identify pointer values within objects |
US5903900A (en) * | 1997-04-23 | 1999-05-11 | Sun Microsystems, Inc. | Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap |
US5900001A (en) * | 1997-04-23 | 1999-05-04 | Sun Microsystems, Inc. | Method and apparatus for optimizing exact garbage collection using a bifurcated data structure |
US5903899A (en) * | 1997-04-23 | 1999-05-11 | Sun Microsystems, Inc. | System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks |
WO1999009469A1 (en) * | 1997-08-18 | 1999-02-25 | Koninklijke Philips Electronics N.V. | Stack oriented data processing device |
US6473777B1 (en) | 1998-10-30 | 2002-10-29 | National Semiconductor Corporation | Method for accelerating java virtual machine bytecode verification, just-in-time compilation and garbage collection by using a dedicated co-processor |
US6385113B1 (en) * | 1999-04-30 | 2002-05-07 | Madrone Solutions, Inc | Method for operating an integrated circuit having a sleep mode |
US6751583B1 (en) * | 1999-10-29 | 2004-06-15 | Vast Systems Technology Corporation | Hardware and software co-simulation including simulating a target processor using binary translation |
US6574711B2 (en) * | 1999-12-27 | 2003-06-03 | Matsushita Electric Industrial Co., Ltd. | Semiconductor integrated circuit |
EP1160662A1 (en) * | 2000-03-10 | 2001-12-05 | Texas Instruments France | Processor with pointer tracking to eliminate redundant memory fetches |
US6804681B2 (en) * | 2001-05-08 | 2004-10-12 | Sun Microsystems, Inc. | Identifying and tracking object references in a java programming environment |
US6895579B2 (en) * | 2001-07-31 | 2005-05-17 | Intel Corporation | Method and apparatus for maintaining exception reporting for register promotion |
US20040184470A1 (en) * | 2003-03-18 | 2004-09-23 | Airspan Networks Inc. | System and method for data routing |
US7454555B2 (en) * | 2003-06-12 | 2008-11-18 | Rambus Inc. | Apparatus and method including a memory device having multiple sets of memory banks with duplicated data emulating a fast access time, fixed latency memory device |
-
2003
- 2003-07-01 DE DE10329680A patent/DE10329680A1/de not_active Withdrawn
-
2004
- 2004-07-01 JP JP2006516089A patent/JP4763598B2/ja not_active Expired - Fee Related
- 2004-07-01 CN CNB2004800188369A patent/CN100517269C/zh not_active Expired - Fee Related
- 2004-07-01 US US10/563,122 patent/US8473722B2/en active Active
- 2004-07-01 WO PCT/EP2004/007175 patent/WO2005003960A2/de active Application Filing
- 2004-07-01 AT AT04740540T patent/ATE480824T1/de active
- 2004-07-01 DE DE502004011642T patent/DE502004011642D1/de active Active
- 2004-07-01 EP EP04740540A patent/EP1639475B1/de not_active Not-in-force
- 2004-07-01 KR KR1020067000018A patent/KR101116989B1/ko not_active IP Right Cessation
-
2006
- 2006-11-17 HK HK06112643.0A patent/HK1092236A1/xx not_active IP Right Cessation
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9952972B2 (en) | Iterator register for structured memory | |
US5560003A (en) | System and hardware module for incremental real time garbage collection and memory management | |
JP4763598B2 (ja) | プロセッサおよびデバイス | |
EP0912942B1 (en) | Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits | |
US5819304A (en) | Random access memory assembly | |
KR100230105B1 (ko) | 간략화된 명령 세트 프로세서의 성능 개선 방법 및 그 프로세서 시스템 | |
US5274811A (en) | Method for quickly acquiring and using very long traces of mixed system and user memory references | |
US6651132B1 (en) | System and method for emulating the operation of a translation look-aside buffer | |
CN101233489B (zh) | 自适应进程分派的方法和系统 | |
US7036118B1 (en) | System for executing computer programs on a limited-memory computing machine | |
US6865736B2 (en) | Static cache | |
US20120216015A1 (en) | System and method to concurrently execute a plurality of object oriented platform independent programs by utilizing memory accessible by both a processor and a co-processor | |
JP2009514043A5 (ja) | ||
KR100309615B1 (ko) | 고속프로그램가능로직컨트롤러(plc) | |
CN115769188A (zh) | 用于执行二进制翻译的系统和方法 | |
KR100368166B1 (ko) | 컴퓨터 처리 시스템에서 스택 레퍼런스를 변경하는 방법 | |
Mayer | The architecture of the Burroughs B5000: 20 years later and still ahead of the times? | |
CN117193882A (zh) | 一种基于微内核操作系统的elf加载方法 | |
CN103140834A (zh) | 用于填充存储器区域的处理器支持 | |
Glossner et al. | Delft-Java link translation buffer | |
US20100223433A1 (en) | Configurable object graph traversal with redirection for garbage collection | |
Ferres | Memory management in C: The heap and the stack | |
Yang et al. | A RISC-V On-chip Operating System Based on Rust | |
Entrup et al. | Architecture of the Linux kernel | |
Groote et al. | Computer Organization |