JP2000513854A - タグビットのスタック・キャッシュを用いて厳密なガーベッジ・コレクションを支援するための装置及びその方法 - Google Patents
タグビットのスタック・キャッシュを用いて厳密なガーベッジ・コレクションを支援するための装置及びその方法Info
- Publication number
- JP2000513854A JP2000513854A JP10546328A JP54632898A JP2000513854A JP 2000513854 A JP2000513854 A JP 2000513854A JP 10546328 A JP10546328 A JP 10546328A JP 54632898 A JP54632898 A JP 54632898A JP 2000513854 A JP2000513854 A JP 2000513854A
- Authority
- JP
- Japan
- Prior art keywords
- stack
- tag
- item
- value
- program
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99953—Recoverability
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage collection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
(57)【要約】
プログラム・スタック内で参照とプリミティブ値を本質的に区別しないコンピュータ・システムにおいて、厳密なガーベッジ・コレクションを支援するための方法及びその装置はプログラム・スタックと関連して動作するスタック・タグ・キャッシュを使用してプロセス・スタックの全てのエントリにタグ項目を供給する。タグ項目の値は、スタック・エントリが別のメモリ・ロケーションへの参照か又はプリミティブ値か、即ち整数か又は浮動小数点数かを表わす。タグ項目の構成と値はプログラム・スタックの変化に相関する。スタック・タグ・キャッシュはトラップ又はコンテクスト・スイッチの発生時にキャッシュ内容を入れ換えるための装備、並びに意図した命令オペランドの種類でタグ値を冗長検査するための手段を含む。
Description
【発明の詳細な説明】
タグビットのスタック・キャッシュを用いて
厳密なガーベッジ・コレクションを支援するための
装置及びその方法
関連出願への相互参照
本出願は、本出願日と同日に出願され共に譲渡された3件の特許出願の内の1
件であり、その3件の残りの2件は、発明者Ole Agesen及びDavid Ungarによる
「プログラム・データスタックのライブポインタ・マスクをデルタ符号化するた
めの方法及び装置」と題する米国特許出願第XX/XXX,XXX号(訳注:出願
番号未送達のため)、及び、発明者Guy L.Steele,Jr.による「スタック内容を
サブスタックに分離することで厳密(exact)なガーベッジ・コレクションを支
援するための装置及びその方法」と題する米国特許出願第XX/XXX,XXX
号(訳注:出願番号未送達のため)である。上記同時出願中の特許出願の内容は
参照により本願発明に含まれる。
発明の分野
本願発明はデータ処理システムに関し、更に詳しくは、メモリ管理を支援する
ための装置及ひその方法に関する。
発明の背景
データ処理システム内で最も重要な資源の1つが実行中のタスクでの利用に直
接使用可能なメモリ量である。そのためメモリの効率的利用とメモリ管理ストラ
テジには多くの関心が向けられて来た。メモリ管理で重要な概念は、メモリをタ
スクに割り当て、割り当て解
除し、しかるのち再請求する方法である。
メモリの割り当て解除と再請求は実行プログラムによって明示されて制御され
るか、未使用のメモリを検索して再請求する別の特殊用途プログラムによって実
行されるが、明示的に割り当て解除されることはなかった。「ガーベッジ・コレ
クション(garbage collection)」は、記憶管理とくに自動メモリ再請求を実行す
るために使用されるアルゴリズムのクラスを表わすために技術文献や関連技術分
野で用いられる用語である。参照カウント、マーク−スイープ、世代ガーベッジ
・コレクション・アルゴリズムを含め多くの周知のガーベッジ・コレクション・
アルゴリズムが存在する。これらの技術とその他のガーベッジ・コレクション技
術はRichard Jones及びRaphael Lins著「Garbage Collection,Algorithms For
Automatic Dynamic Memory Management」John Wiley & Sons出版社、1996年
に詳細に説明されている。残念なことに、ガーベッジ・コレクションについて記
述された技術の多くが、以下に説明するように実装上の問題を惹起する特有の条
件を有している。
本明細書の目的のために「オブジェクト」という言葉は計算機システム(comp
uting system)のメモリの中に表現されるデータ構造を表わす。オブジェクトと
いう言葉の用法は、「オブジェクト指向」システムでの「オブジェクト」という
言葉の用法とは明らかに違い、オブジェクト指向システムではオブジェクトには
関連「メソッド」、即ち関連するコード部分があり、このコードがオブジェクトの
参照を介して呼び出される。しかし、本願発明はこうしたオブジェクト指向シス
テムに応用できるものである。
オブジェクトは「参照」により、又は、データ構造にアクセスするために使用
できる少量の情報によって検索できる。参照を実現す
る1つの方法としては、「ポインタ」又は多数ビットの情報を使用する「マシン
・アドレス」を用いるが、他の実現方法も可能である。汎用プログラミング言語
及びその他プログラムされたシステムでは参照を使用してオブジェクトを特定し
アクセスすることが多い。こうしたオブジェクトはそれ自体にデータ、例えば整
数又は浮動小数点数への参照、及び、更に別のオブジェクトへの参照を含む。こ
のようにして、各々の参照がオブジェクトをポイントし、そのオブジェクトが更
に別のオブジェクトをポイントするといった参照の連鎖が作成できる。
ガーベッジ・コレクション技術は、直接的手段又はポインタ連鎖経由のどちら
かで実行プログラムからデータ構造に到達できなくなる時点を決定する。データ
構造に到達できないようになったときに、データ構造が占有しているメモリを再
請求しプログラムから明示的に割り当て解除されていなかったとしても再使用で
きる。有効なものにするには、ガーベッジ・コレクション技術は、第1に実行プ
ログラムへ直接アクセス可能な参照を認識し、第2に、オブジェクトへの参照が
与えられたらそのオブジェクト内部に含まれる参照を認識してガーベッジ・コレ
クタが参照連鎖を一時的にトレースできるようにしなければならない。
「再配置」ガーベッジ・コレクタとして知られているガーベッジ・コレクタの
サブクラスは実行プログラムによって未だ到達できるデータ構造を再配置する。
データ構造の再配置はデータ構造のコピーをメモリの別の領域に作り、次にオリ
ジナルのデータ構造へ到達可能な参照全部を新しいコピーへの参照に置換する。
オリジナルのデータ構造によって占有されていたメモリが再請求され再使用され
る。再配置ガーベッジ・コレクタは実行プログラムによって使用されたメ
モリを圧縮することでメモリ断片化を減少させる望ましい特性を有している。
ガーベッジ・コレクション処理中に再配置ガーベッジ・コレクタは参照を変更
するため、参照を認識し、かつガーベッジ・コレクションの目的で変更すること
のできない非参照情報、例えばデータと区別することが重要である。結果的に完
全再配置ガーベッジ・コレクタは「厳密(exact)」ガーベッジ・コレクタとして
知られているガーベッジ・コレクション法のサブクラスに属し、メモリ内の任意
の情報部分が参照か又はプリミティブ値かの知識を必要とする。本明細書の目的
のためには、「プリミティブ値」又は「プリミティブ・データ」は参照として機
能しないデータ、例えば整数又は浮動小数点数などと定義する。
厳密ガーベッジ・コレクションの使用を容易にするために、ある種の計算機シ
ステムでは全てのメモリ・ロケーションについて「タグ付き」表現を用いてデー
タから参照を明確に区別している。こうしたシステムでは、参照と、例えば整数
や浮動小数点数などのプリミティブ・データがメモリ内において常に参照がプリ
ミティブ値とは異なるビットパターンを有するような方法で表現される。これは
メモリ・ロケーションを保持するビットに加えてタグビットを各々のメモリ・ロ
ケーションに含めることによって一般に行なわれるものである。参照値を保持す
るメモリ・ロケーションのタグ・ビットはデータ値を保持するメモリ・ロケーシ
ョンのタグビットとは必ず異なっている。MIT LISPマシンはガーベッジ
・コレクションを用いた最初のアーキテクチャの1つで、明示的にメモリ値にタ
グを付けた単一のスタックを有していた。これの後継機でマサチューセッツ州ケ
ンブリッジのシンボリクス社(Symbolics,Inc.,Cambridge,
MA)から市販されているシンボリクス3600(Symbolics 3600)も明示的にタグ
の付いたメモリ値を使用している。シンボリクス3600は36ビット・ワードを用い
、そのうちの4ビットをタグ情報に永久に割り当てたことにより、単一スタック
内で32ビット参照又は32ビットプリミティブ・データのどちらかに対応すること
ができた。このようにすると、36ビット・ワード内の参照のためのビットパター
ンはプリミティブ整数又は浮動小数点値のためのビットパターンとは必ず識別す
ることができた。
永久に割り当てられたタグビットは、計算データを記憶するために使用するこ
とのできるメモリ空間を消費するという欠点を有している。結果的に、多くのコ
ンピュータ・システムではメモリ・ワード全体をデータ値の表現に割くことがで
きる「タグ無し」データ表現を使用している。こうしたシステムでは、同じビッ
トパターンが参照又はプリミティブ値を表わすことがある。その結果、こうした
システムでは、参照とプリミティブ値の間の区別は、外部的な考察又は表現、例
えばデータに対して演算すべき命令、又はオブジェクト内部でのデータ位置など
で行なわれることが多い。しかし、この区別を行なうために外部的考察を使用す
ることは全てのシステムで可能であるというものではなかった。
例えば、Javaプログラミング言語は本来はタグ無しデータ表現を使用するシス
テムで用いるように設計されていた。Javaプログラミング言語は、ジェームス・
ゴスリング(James Gosling)、ビル・ジョイ(Bill Joy)、ガイ・スティール(Guy
Steele)共著「Java言語仕様("The Java Language Specification")」(Addison
-Wesley出版社、1996年)と題する書籍に詳細に記述されている。Java言語は、
ティム・リンドーム(Tim Lindholm)、フランク・
イエリン(Frank Yellin)共著「Java仮想マシン仕様("The Java Virtual Machi
ne Specification")」(Addison-Wesley出版社、1996年)に詳細に記述されてい
るJava仮想マシン仕様によって指定される特性を備えた計算機システム上で動作
するように設計された。
Java仮想マシン(JVM)仕様によれば、32ビット・メモリワードを使用する
計算機システムにおいてローカル変数又はスタック・スロットが32ビット整数、
32ビット浮動小数点数、又は32ビット参照のいずれかを含む。結果として、タグ
付きデータ表現は全ての場合で使用できるものではなくなる(32ビット・コンピ
ュータでタグ付きデータ表現を使用するプログラミング言語は典型的には整数の
大きさを30ビットに制限している)。しかし、Java命令を検証してデータから参
照を区別することは、多くの命令が参照とデータに対して無差別に(indiscrimi
nately)演算するため、全ての場合において可能であるというものではない。
結果的に、ガーベッジ・コレクションの目的のために、タグ付きデータ表現が
許されておらず参照とデータを全ての場合で区別できるような命令セットを有し
ていないシステムにおいて参照とデータを区別する必要がある。
発明の要約
本願発明の原理によれば、タグ情報をプログラム・スタック上に現われる各デ
ータ項目に関連付けることによりデータ値から参照値が区別される。タグ情報は
スタックが配置されるメモリ領域とは別のメモリ領域に記憶される。プログラム
動作中に、タグ情報は各スタック項目に関連付けられプリミティブ・データ値か
ら参照値を識
別するために使用できる。
1つの実施態様によれば、関連付けは、タグ情報メモリ領域からロードされス
タック内に見られるデータ項目の少なくとも幾つかの項目についてのタグ情報を
記憶している小さなハードウェアであるスタック・タグキャッシュ・メモリを用
いて実行される。次にスタック上の参照値はキャッシュメモリからタグ情報を取
り出してスタック項目に関連したタグ情報を検証することによりプリミティブ・
データ値から区別することができる。
本願発明の1つの観点ではプログラム・スタック内の多ビット項目のセットの
各々について追加の(extra)1ビットを記憶するキャッシュメモリを含むスタ
ック・タグキャッシュ機構の使用を想定している。プロセッサがスタック上の多
ビット・ワードにアクセスするときは常に、本願発明のスタック・タグキャッシ
ュ機構がスタック・ワードのメモリアドレスを検証して2種類の動作の内の1種
類の動作を行う。タグ情報がキャッシュメモリ内に記憶されている項目セット内
にスタック・ワードがあることをメモリアドレスが示す場合、本願発明の機構は
スタック項目に関連する追加ビットの現在値を供給し、これによってスタック項
目が参照か又はプリミティブ値かの区別ができる。本願発明の機構ではキャッシ
ュメモリをこの時点で更新しても良い。これ以外に、本願発明のキャッシュ機構
はプロセッサに信号を出してスタック項目のメモリアドレスがタグ情報の記憶さ
れているセット内にはないことを表わすトラップ条件をプロセッサに生成させる
ことができる。これに応じて、プロセッサは主メモリの選択されたメモリ・ロケ
ーションからこの関連付けられたタグ情報を取り出し、このタグ情報をスタック
・タグキャッシュ・メモリ内に記憶することができる。
別の観点では、本願発明のスタック・タグキャッシュ機構は更に複数ビット・
ワードを有するタグキャッシュ・メモリの内容をロードし記憶するためのデータ
・パスを提供し、これによってトラップ処理を容易にし、並びに複数制御スレッ
ド間でのコンテクスト・スイッチを行う過程でのタグキャッシュ・メモリの内容
の保存及び再生(restore)を促進する。
本願発明の更に別の観点では、データ・エントリのプログラム・スタックを有
するコンピュータ・システムで使用するためのスタック・タグキャッシュは、複
数のタグ項目を記憶するように構成したアドレス可能なメモリを含み、データ・
エントリに関連した各々のタグ項目は関連付けられたデータ・エントリが参照又
はプリミティブ値を含むかどうか識別する値を有する。スタック・タグキャッシ
ュは更に、スタック・エントリに関連したタグ項目がアドレス可能なメモリ内に
存在しているかどうかを決定するように構成された比較論理と、アドレス可能な
メモリに供給されたアドレスに応答する出力論理であって、アドレスによって選
択されたタグ項目の値を提示するように構成された出力論理も含む。アドレス可
能メモリ内に記憶されていないタグビットの値を書き込むように構成された論理
、及び少なくとも2個のタグ項目値の同時アドレシングと同時提示を可能にする
論理が含まれることもある。
本願発明の更なる観点では、第1のメモリ領域内に記憶されたスタック・エン
トリ内に配置されたデータが参照か又はプリミティブ値かを決定するための方法
は、第2のメモリ領域内に複数のタグ項目を保持するステップであって、この各
々のタグ項目がスタック・エントリに関連付けられていることを特徴とするステ
ップと、選択したスタック・エントリに対応するタグ項目の1つを取り出すステ
ップと、
対応するスタック・エントリ内に含まれるデータが参照又はプリミティブ値かど
うかを取り出したタグ項目の値から決定するステップとを含む。
本願発明の更に別の観点では、プロセッサとメモリを有するコンピュータ・シ
ステムは更にプロセッサに応答して複数のタグ項目を記憶するように構成された
スタック・タグキャッシュを含む。各タグ項目はスタック・エントリ内のデータ
に関連付けられスタック・エントリ内に含まれるデータが参照又はプリミティブ
値かどうかを表わす値を有する。スタック・タグキャッシュは更に選択したスタ
ック・エントリに対応して取り出されたタグ項目がキャッシュ内に常駐している
かどうかを決定するように構成された論理と、メモリアドレスに応答するロジッ
クであって、スタック・タグキャッシュに適用されたアドレスによって選択され
たタグ項目の値をキャッシュ出力に提示するように構成された論理とを含む。
本願発明の更なる観点では、プロセッサとメモリとを有するコンピュータ・シ
ステムで使用するコンピュータ・プログラム製品はコンピュータ・プログラムコ
ードが実現されるメモリであって、コンピュータで使用可能なメモリを含み、こ
のプログラムコードは複数のタグ項目をメモリ内に保持するためのプログラムコ
ードであって、この各タグ項目がスタック・エントリ内のデータに関連付けられ
ていることを特徴とするプログラムコードと、選択したスタック・エントリに対
応する複数のタグ項目のうちの1つを取り出すためのプログラムコードと、メモ
リアドレスに応答するプログラムコードであって、選択したスタック・エントリ
に関連付けられたタグ項目の値を提示するためのプログラムコードとを含む。
図面の簡単な説明
本願発明の上記及びその他の特徴、目的、利点は添付の図面との関連で以下の
説明を参照することによってより良く理解されよう。図面において、
図1Aは、本願発明で使用するのに適したコンピュータ・アーキテクチャを示
す摸式的ブロック図である。
図1Bは、従来のプログラム・データスタックの概念図である。
図1Cは、本願発明で使用するのに適した、フレームを含むプログラム・スタ
ックの概念図である。
図2は、本願発明の第1の実施態様によるスタック・タグキャッシュの摸式的
ブロック図である。
図3は、本願発明の第2の実施態様によるスタック・タグキャッシュの摸式的
ブロック図である。
図4は、スタック項目読み込み動作中にスタック・タグ情報を取り出すための
方法を実現する例示的ルーチンのフローチャートである。
図5、はスタック項目書き込み動作中にスタック・タグ情報を取り出すための
方法を実現する例示的ルーチンのフローチャートである。
発明を実施するための最良の形態
本願発明は厳密ガーベッジ・コレクション・アルゴリズムの要件に対処する方
法並びに装置を提供する。更に詳しくは、本願発明は参照とプリミティブ値が同
じサイズとなるようにデータ表現の使用を構造が奨励しているコンピュータ・ア
ーキテクチャでタグ無しデータ表現が名目上使用されているデータスタック内で
参照を非参照から区別する要件に対処する。
例示の実施態様では、Javaプログラミング言語とJava仮想マシ
ン仕様を実装しているコンピュータ・システムを参照して説明しているが、本願
発明は同様の要件を有する他のコンピュータ・システムにも等しく応用可能であ
る。更に詳しくは、本願発明はオブジェクト指向プログラミング・システム及び
非オブジェクト指向プログラミング・システムの両方に実装できる。更に、本願
発明は単一スレッドと単一のプログラム・スタックを有するシステム、並びに複
数の同時的プログラム・スタックを有するマルチスレッド・システムでも実装で
きる。本願発明を詳細に説明する前に、本願発明を使用するのに適したコンピュ
ータ・システム、プログラム・スタック構造、Java仮想マシン環境に準拠したプ
ログラミング命令の説明を、読者の利便のために提供する。
コンピュータ・システムとプログラム・スタック・アーキテクチャ
図1Aは、本願発明を実装できるコンピュータ・システムのシステム・アーキ
テクチャを示す。図1に例示したコンピュータ・システムは説明のためだけのも
のである。説明では特定のコンピュータ・システム、例えばIBM PS/2パ
ーソナル・コンピュータなどを説明する際に共通に使用される用語を参照するが
、説明並びに概念はネットワーク・コンピュータ、ワークステーション、及びメ
インフレーム・コンピュータなど図1Aと異なるアーキテクチャを有するその他
のコンピュータ・システムにも等しく適用される。
コンピュータ・システム100は、従来のマイクロプロセッサで実現し得る中央
演算処理ユニット(CPU)105、一時的な情報記憶のためのランダム・アクセ
ス・メモリ(RAM)110、永久的な情報記憶のためのリード・オンリー・メモ
リ(ROM)115を含む。メモリ・制御装置120はRAM110を制御するために提
供される。
バス130はコンピュータ・システム100の構成要素を相互接続する。バス・コン
トローラ125はバス130を制御するために提供される。割り込みコントローラ135
はシステム構成要素からの各種割り込み信号を受信し処理するために使用される
。
大容量記憶はディスケット142、CD−ROM147又はハードディスクドライブ
装置152により提供される。データ及びソフトウェアはリムーバブル媒体例えば
ディスケット142及びCD−ROM147経由でコンピュータ・システム100と交換
できる。ディスケット142はディスケット・ドライブ装置141に挿入でき、当該装
置がコントローラ140によりバス130に接続される。同様に、CD−ROM147は
CD−ROMドライブ装置146に挿入でき、当該装置はコントローラ145によりバ
ス130へ接続される。ハードディスク152は固定ディスクドライブ装置151の一部
であり、当該装置はコントローラ150によりバス130へ接続される。
コンピュータ・システム100へのユーザ入力は多数の装置により提供される。
例えば、キーボード156とマウス157はコントローラ155によりバス130へ接続され
る。オーディオ変換器196はマイクロホン及びスピーカの両方として機能するこ
とも可能であり、図示してあるようにオーディオ・コントローラ197によりバス1
30へ接続される。。他の入力装置、例えばペン及び/又はタブロイドなども必要
に応じてバス130と適当なコントローラ及びソフトウェアで接続できることは当
業者には明らかなはずである。DMAコントローラ160はシステムRAM110への
直接メモリアクセスを実行するために提供される。視覚的表示はビデオ・コント
ローラ165によって生成され、当該コントローラがビデオディスプレイ170を制御
する。コンピュータ・システム100はバス191及びネットワーク195によ
って模式的に図示されているローカル・エリア・ネットワーク(LAN)又は広
域ネットワーク(WAN)へシステムを相互接続できるようにする通信アダプタ
190も含む。
コンピュータ・システム100の動作はシングルスレッド化又はマルチスレッド
化されているオペレーティング・システム・ソフトウェアによって一般に制御さ
れ調節されている。オペレーティング・システムはシステム資源の割り当てを制
御したり、特にプロセスのスケジューリング、メモリ管理、ネットワーク及びI
/Oサービスなどのタスクを実行する。
従来のコンピュータ・システムにおいて、進行中の計算はプロシージャ・コー
ルをサポートするためと中間計算量例えば参照やプリミティブ値を保持するため
の「スタック」を使用する。スタックは内部メモリの未使用部分を含み、これが
一時的記憶に必要とされるレジスタ数を減らしプログラム内で必要とされるステ
ップ数を減少させる一方でプッシュ・ダウン型記憶を容易にする。図1Bはシス
テム・メモリに常駐する従来のプログラム・スタックの構造を概念的に示してい
る。メモリ内の3箇所の重要な位置でスタックを定義する:スタック・ベース、
スタックポインタ即ち現在のスタックの最上部、及びスタック・リミットである
。典型的にはこれらの位置は3個のマシン・レジスタに保持されているメモリア
ドレスによって識別される。
データをスタック上にプッシュすべき場合、スタックポインタに最も近い未使
用のメモリ・ロケーションに格納される。スタックポインタはスタック・リミッ
トに向かって前進する。スタックポインタがスタック・リミットに近付きすぎた
場合、スタックは「オーバフローした」といわれ、例えばエラー信号を出すか又
はスタックを保持するために更にメモリを割り当てるといった、何らかの特別な
動作を取る必要がある。
データをスタックからポップすべき場合、スタックポインタはスタック・ベー
スに向かって後退し、データを保持しているメモリを又未使用メモリと見なせる
ようにする。スタックポインタがスタック・ベースに近付きすぎると、スタック
は「アンダーフローした」と呼ばれ、例えばエラー信号を出すか又は更にスタッ
ク・データを保持しているメモリの別の領域にスイッチするなど何らかの特別な
動作を取る必要がある。実装によっては、スタック・ベースはスタック・リミッ
トより高いメモリアドレスに常駐することもある。
Javaプログラミング言語においては、スタック上のデータは図1Cに図示した
ように「フレーム」にグループ化されている。各フレームはサブルーチン呼び出
し又はメソッド呼び出しの1つのレベルに対応する。どのフレームも3つの領域
に分割される:パラメータ、ローカル変数、評価テンポラリである。パラメータ
はスタック・ベースに最も近く評価テンポラリはスタック・ベースから最も遠い
。これら3つの領域の各々はそのフレームに対して実行される特定のサブルーチ
ンによっては空になることがある。サブルーチンを実行すると、評価テンポラリ
の個数はスタックに項目をプッシュするか又はポップすると変化するが、パラメ
ータとローカル変数の個数は変化しないのが典型である。その結果、異なるフレ
ームが異なるサイズを有することができる。
パラメータとローカル変数のアドレシングを単純化するには、典型的にはマシ
ン・レジスタに保持される「フレームポインタ」である追加アドレスで現在のス
タック・フレーム内のパラメータ領域の開始を表示する。命令は現在のフレーム
ポインタからのオフセットを指定することにより現在のフレーム内でパラメータ
又はローカル
変数にアクセスできる。
サブルーチン又はメソッドを呼び出すべき場合、評価スタック最上部にある幾
つかの項目は新規フレーム内部のパラメータになる。現在のフレームポインタは
プログラム・カウンタと一緒にスタック上に保存される。次にフレームポインタ
に新規フレームのアドレスがロードされ、一方でプログラム・カウンタにサブル
ーチンのコードのアドレスがロードされる。
ある種の計算機システムは「マルチスレッド化」されており、この場合、多数
進行する計算プロセスが単一のアドレス空間又はオブジェクトの単一プールを共
有している。こうしたプロセスのセットは1つ以上のスタック又は各プロセスに
1つのスタックを有するのが代表的である。こうした多数のプロセスは単一の記
憶管理ストラテジによって操作することができる。
Javaプログラミング命令
Javaプログラミング言語をサポートするコンピュータ・システムにおいて、ス
タック上で演算する命令の多くはデータを参照データとするかプリミティブ・デ
ータとするかを指定する。例えば、「iadd」命令はスタックから2個のオペラン
ドをポップし、この場合のオペランドは整数でなければならない。これらの和が
整数としてスタックにプッシュされる。同様に「aaload」命令は2項目をスタッ
クからポップし、この場合の項目は参照と整数インデックスとからなる配列への
参照でなければならない。この命令は配列からの参照をインデックス値で示され
たように選択し、選択した参照のコピーをスタックにプッシュする。
逆に、Java仮想マシンの幾つかの命令はオペランドが参照又はプ
リミティブ・データに演算するかどうかを指定しておらず、無差別にどちらの種
類のデータでも動作することを想定している。例えば、「pop」命令はスタック
から1つの項目をポップし、参照又は32ビット・プリミティブ値のどちらかを破
棄するために使用することがある。「dup」命令はスタック最上部にこの項目の
コピーをプッシュし、参照又は32ビット・プリミティブ値を複製するために使用
できる。「dup2」命令は1個の64ビット・プリミティブ値、2個の32ビット・プ
リミティブ値、2個の参照、又は1個の参照と1個の32ビット・プリミティブ値
をいずれかの順番で複製するために使用できる。
こうした「無差別な」使用を許容しているJava仮想マシン命令の完全なリスト
は次の通りである:
全ての命令記述において:
x1は命令が実行を開始した時にスタックの一番上にある項目を表わす。
x2は命令が実行を開始した時にスタックの一番上から2番目の項目を表わ
す。
x3はスタックの一番上から3番目にある項目を表わす。
x4は命令が実行を開始した時に参照スタックの一番上から4番目にある項目
を表わす。
Pop
x1をスタックからポップして破棄する。
Pop2
x1をスタックからポップして破棄し、次にx2をスタックからポップして破
棄する。
dup
x1のコピーをスタックにプッシュする。
dup2
x2のコピーをスタックにプッシュし、次にx1のコピーをスタックにプッシュ
する。
dup_x1
x1をスタックからポップし、
x2をスタックからポップし、
x1のコピーをスタックにプッシュし、
x2のコピーをスタックにプッシュし、
x1のコピーをもう1つスタックにプッシュする。
dup_x2
x1をスタックからポップし、
x2をスタックからポップし、
x3をスタックからポップし、
x1のコピーをスタックにプッシュし、
x2のコピーをスタックにプッシュし、
x1のコピーをもう1つスタックにプッシュする。
dup2_x1
x1をスタックからポップし、
x2をスタックからポップし、
x3をスタックからポップし、
x2のコピーをスタックにプッシュし、
x1のコピーをスタックにプッシュし、
x3のコピーをスタックにプッシュし、
x2のコピーをもう1つスタックにプッシュし、
x1のコピーをもう1つスタックにプッシュする。
dup2_x2
x1をスタックからポップし、
x2をスタックからポップし、
x3をスタックからポップし、
x4をスタックからポップし、
x2のコピーをスタックにプッシュし、
x1のコピーをスタックにプッシュし、
x4のコピーをスタックにプッシュし、
x3のコピーをスタックにプッシュし、
x2のコピーをもう1つスタックにプッシュし、
x1のコピーをもう1つスタックにプッシュする。
swap
x1をスタックからポップし、
x2をスタックからポップし、
x1のコピーをスタックにプッシュし、
x2のコピーをスタックにプッシュする。
Java仮想マシンの多くの実装において、命令の実際の実装は作業量を減少する
ように最適化できる。例えば、「swap」演算は最上部スタック項目2つを読み込
んで各々の値を別のスタック・スロットに書き込み、実際にスタックポインタの
調整は行なわない。更に、Java仮想マシンの幾つかの実装ではいわゆる「クイッ
ク」命令を使用している。クイック命令はインターネット上に送信されるような
Javaでコンパイルしたプログラムでは有効でない追加命令コードである。しかし
、JVM実装は命令が実行される最初の時にリンクを解決し、更に命令をもっと
高速な「クイック」バリアント(variant)で置
き換えることによって、例えば別のクラスで定義されているフィールドの名前な
どシンボリック・リンクの解決を必要とする幾つかの遅い命令を処理することが
時々ある。時にはこうしたクイック・バリアントか参照とプリミティブ・データ
の両方を処理するために使用される。こうしたクイック命令には次のようなもの
が含まれる:
getfield_quick
getfield_quick_w
getstatic_quick
ldc_quick
ldc_w_quick
putfield_quick_w
putstatic_quick
これらのクイック命令は「無差別」であり参照データ又はプリミティブ・デー
タに対して使用できる。クイック命令は無差別でない遅い命令に置き換えられる
。残念ながら、その特定の命令が必ず参照又はデータを転送するかどうかを表わ
し遅い命令又はそのオペランドに関連していた情報は、遅い命令が無差別であら
かじめ解決されているがそれらは等価なクイック命令によって置き換えられる時
に失われる。
Java仮想マシンの実装は「ベリファイア(verifier)」と呼ばれるプロセスを含
み、これの目的の1つは、ロードされた時に全てのメソッドのコードを検証して
命令シーケンスが何らかの制約にしたがうことを保証することである。更に詳し
く説明すると、ベリファイアは、静的に、コードが実行される前に、スタック上
の項目が参照であることを命令が想定している場合に、その特定の命令のあらゆ
る実行で参照であるように保証し、又スタック上の項目がプリミテ
ィブ・データであることを命令が想定している場合に、その特定の命令のあらゆ
る実行で項目が参照であるように保証する。
検証処理の一部として、無差別な使用を許容する標準(非クイック)JVM命
令の特定の発生時に、即ちpop、pop2、dup、dup2、dup_x1、dup_x2、dup2_
x1、dup2_x2、又は、swap命令で、ベリファイアはその命令の何らかの特定の
スタックオペランドが必ず参照であるか絶対に参照でないかのどちらかを決定で
きる。
Java仮想マシンはフレームのベースに対して計算したアドレスを介してアクセ
スされアドレスが代表的にはフレーム・ポインタ・レジスタに保持されているロ
ーカル変数に対して演算する次のようなバイトコード命令を提供する:
iload iload_0 iload_1 iload_2 iload_3
fload fload_0 fload_1 fload_2 fload_3
lload lload_0 lload_1 lload_2 lload_3
dload dload_0 dload_1 dload_2 dload_3
aload aload_0 aload_1 aload_2 aload_3
istore istore_0 istore_1 istore_2 istore_3
fstore fstore_0 fstore_1 fstore_2 fstore_3
lstore lstore_0 lstore_1 lstore_2 lstore_3
dstore dstore_0 dstore_1 dstore_2 dstore_3
astore astore_0 astore_1 astore_2 astore_3
名前に下線(アンダースコア)と整数Kか含まれている上記に示したバイトコ
ード命令はフレームのベースからオフセットKにあるローカル変数にアクセスす
る。他のバイトコード命令は1つ又は2つ
以上の追加命令バイトにオフセットを符号化することによってもっと広い範囲の
オフセットが許容できる。
名前に「load」が含まれている上記に示したバイトコード命令はスタック上に
ローカル変数の内容のコピーをプッシュする。名前に「store」が含まれている
バイトコード命令はスタックから値をポップしてポップしたデータをローカル変
数に記憶する。名前が「a」で始まるバイトコード命令は参照値と組み合わせて
使用される。それ以外のバイトコード命令はプリミティブ値、即ち整数(integer
)、浮動小数点数(float)、ロング(long)、ダブル(double)と組み合わせて使用
される。
スタック・タグキャッシュ
本願発明は、各スタック・ワードについて追加タグビットを含め、通常のメモ
リ・ワードの幅を越えて各スタック・ワードの幅を効果的に増加させることによ
り、スタック内の参照とプリミティブ値の間の区別の問題に対処する。追加タグ
ビットはデータを含むプログラム・スタックと相関する方法でプッシュ、ポップ
、検証、更新し得るような疑似スタック方式で記憶される。この第2又は疑似ス
タックはタグキャッシュとしてハードウェア内に実現できる。
本願発明の第1の実施態様によるスタック・タグキャッシュ200が図2に図示
してある。スタック・タグ200はマルチポート・ランダム・アクセス・メモリ(
RAM)202とサポート論理204〜224を含む。例示の実施態様において、RAM2
02は64×32ビットで、第1と第2の読み出しポート、1つの書き込みポート、及
び「フロースルー」機能を有し、同じワードが同一クロックサイクルで読み出し
と書き込み両方行なわれる場合にRAM202から読み出された値はそのクロ
ックサイクルでRAM202に書き込まれる値と同じであるようにする。
タグスタック・ローリミット・レジスタ204Aとタグスタック・ハイリミット
・レジスタ204Bは各々長さ30ビットで、タグスタックの各々ローリミット及び
ハイリミットを記憶するために使用する。中央演算処理ユニットはタグスタック
・リミット・レジスタの内容を当業者には理解される方法で読み出し書き込みす
るための適当なコマンドを実行する。
4個の30ビット・コンパレータ206A〜Dは各々が1ビットの結果を発生する
、即ち、第1の入力(図2ては左手の入力)が第2の入力(図2では右手の入力
)より大きい場合には論理値1、それ以外には論理値0を用いてRAM202の読
み出しポートに供給されたアドレスと、ハイ・タグスタック・リミット及びロー
・タグスタック・リミットとを比較する。更に詳しく説明すると、タグスタック
・ローリミット・レジスタ204Aの出力がコンパレータ206Aと206Cの第1の入
力に供給される。タグスタック・ハイリミット・レジスタ204Bの出力はコンパ
レータ206Bと206Dの第2の入力に供給される。第1のメモリアドレスr1_addr
はコンパレータ206Aの第2の入力とコンパレータ206Bの第1の入力に供給され
る。同様に、第2のメモリアドレスr2_addrはコンパレータ206Cの第2の入力と
コンパレータ206Dの第1の入力に供給される。コンパレータ206Aと206Bの出力
は2入力ORゲート222Aに供給され、その出力か論理値1の場合には第1のメ
モリアドレスr1_addrのトラップ・リミットを表わす。同様に、コンパレータ20
6Cと206Dの出力は2入力ORゲート222Bに供給され、その出力が論理値1の
場合には第2のメモリアドレスr2_addrのトラップ・リミットを表わす。
第2の読み込みアドレスの11ビット部分(r2_addr 12:2)は
11ビット・ラッチ212へ供給される。ラッチ212の11ビット出力は書き込みアドレ
スとしてRAM202に供給される6ビット部分(w_ addr 12:7)とデコー
ダ224へ供給される5ビット部分(w_addr 6:2)に分割される。第1の1
ビット32対1マルチプレクサ214Aは入力として、図示したように、RAM202の
第1の読み出しポートの32ビット出力と、5ビット選択信号として第1の読み
出しアドレスの5ビット部分(r1_addr 6:2)を受信する。第2の1ビット
32対1マルチプレクサ214Bは、図示したように、入力としてRAM202の第2の
読み出しポートの32ビット出力と、5ビット選択信号として第2のアドレス(r2
_addr 6:2)の5ビット部分を受信する。第1と第2の読み出しアドレスの
6ビット部分(r1_addr 12:7、r2_addr 12:7)も同様に図示したように
RAM202へ供給される。マルチプレクサ214Aの1ビット出力は第1のタグビッ
トとして供用し、一方で、第2のマルチプレクサ214Bの1ビット出力は第2の
タグビットとして供用し、これら両方がCPU105によって読み取り可能である
。マルチプレクサ214A〜Bの1ビット出力は1ビット4対1マルチプレクサ220
にも供給され、図示したようにこのマルチプレクサは入力に論理値0と論理値1
も受信する。マルチプレクサ220は図示してあるようにこれの制御入力に2ビッ
ト書き込みビット選択信号(w_bit_select 1:0)を受信する。
32ビット・ラッチ208Aは図示してあるように32ビット書き込みデータ信号(
w_data 31:0)を受信する。ラッチ208Aの出力は32ビット2対1マルチプ
レクサ216の第1の入力に供給される。マルチプレクサ216の32ビット出力は図示
したようにRAM202の書き込みポートへ供給される。マルチプレクサ216は1ビ
ット・ラッチ210Bから受信した1ビット制御信号によって制御される。ラッ
チ210Bへの入力は図示したように1ビット書き込みデータ選択信号(w data
select)である。ラッチ210Aの出力は図示したようにRAM202へ供給される
。
第2の32ビット・ラッチ208Bは入力として、図示したようにRAM202の第2の
読み出しポートの32ビット出力(r_data 31:0)を受信する。ラッチ208B
の出力は図示したように1ビット対1マルチプレクサ218A〜nの各々の第1の
入力に供給される。各マルチプレクサ218A〜nの第2の入力は1ビット・ラッ
チ210Cから受信し、これの入力は図示したようにマルチプレクサ220の出力から
受信する。各マルチプレクサ218A〜nの出力は図示したようにマルチプレクサ2
16の第2の32ビット入力に供給される。各マルチプレクサ218への制御信号は図
示したようにデコーダ224の32本の出力線のうちの1本により供給される。
図示した実施態様において、多ビット信号のビットは「リトルエンディアン(
little-endian)」順序で番号が付けてある。例えば、32ビット信号はビット31
:0(31から0まで、0を含む)として記述でき、ここで、多ビット信号を2進
数として見なす場合にはビット31が最上位ビット、又ビット0が最下位ビットで
ある。
スタック・タグキャッシュ200の動作について以下で説明する。全てのクロッ
クサイクルで、CPU105は多くとも2つのスタック・ロケーションを読み込み
多くとも1つのスタック・ロケーションに書き込むものと仮定する。更に、CP
U105が1つのスタック・ロケーションに書き込み2つのスタック・ロケーショ
ンも読み込む場合、読み込まれるスタック・ロケーションの一方は書き込まれる
スタック・ロケーションと同じでなければならない。
いずれか任意のクロックサイクルで、CPU105はスタック・タグ
キャッシュ200に2つのスタック・ロケーションのメモリアドレスr1_addrとr2
_addrを提示する。これらのアドレスはバイトアドレスされるものと仮定するが
、ワード整列されるべきである。従って、アドレスのビット31:2だけをスタッ
ク・タグキャッシュ200に提示すれば良い。書き込まれる又は読み書きされるス
タック・ロケーションのアドレスはr2_addrとして提示できる。アドレスr1_ad
drは読み込まれはするが書き込まれないスタック・ロケーションのために使用で
きる。
2つのアドレスは各々タグスタック・ローリミット・レジスタ204A及びタグ
スタック・ハイリミット・レジスタ204Bの内容と比較される。どちらかのアド
レスがローリミットより小さいかハイリミットより大きい場合、入力としてその
アドレスを有している4個の30ビット・コンパレータ206A〜Dのうちの1つが
出力として論理値1を生成し、これに対応する2入力ORゲート222が結果とし
て論理値1を発生する、即ちr1_addrに対してlimit_trap_1又r2_addrに対し
てlimit_trap_2を発生する。limit_trap_1又はlimit_trap_2のどちらかが
論理値1の場合、スタック・タグキャッシュ200はこのクロックサイクルで意図
した演算をうまく完了できない。CPU105は現在の命令の実行を終了させてト
ラップを実行することにより応答し、トラップハンドラ・プロセスが詳細には後
述するトラップ・シナリオにアドレスできるようにする。
2つのアドレスr1_addrとr2_addrはRAM202から2つのタグビットを抽出
するためにも使用される。各アドレスについて、6ビット(ビット12:7)が
RAM202の読み出しポートの一方の読み出しアドレスとして用いられ、1個の3
2ビット・ワードを読み出して32対1マルチプレクサ214A〜Bの一方に供給す
る。別の5ビット
(ビット6:2)は同じマルチプレクサの制御セレクタとして使用され、これに
よって1ビットを選択する。このように選択した2つのビットはr1_addrによっ
て選択されたtag_bit_1信号及びr2_addrによって選択されたtag_bit_2信号
としてCPU105で利用できるようになる。CPU105は2つのデータスタック・
ロケーションから読み出した32ビット・ワード2個を受信し、tag_bit_1及びt
ag_bit_2ビットは各々CPU105によって32ビット・データワードに付加され
2つの33ビット量を発生する。33番目のビットの値は32ビット・スタック項目が
参照か又はプリミティブ値のどちらであるかを表わす。好適実施態様において、
33番目のビットが論理値1だと参照を表わし、33番目のビットが論理値0だとプ
リミティブ値を表わす。
図示した実施態様において、スタック・タグキャッシュ200は全ての32ビット
・スタック項目に1追加ビットを提供する。
r1_addrビット12:7によって選択されRAM202から読み出された32ビット
・ワード全体も又r_data 31:0としてCPU105で利用できるようになるので
、これによってRAM202から1つ又は2つ以上のワードを迅速に読み出すため
のパスを提供する。
同じクロックサイクルで、CPU105はスタック・タグキャッシュ200に情報を
書き込む適当な信号を生成する。実際の書き込み動作は次のクロックサイクルで
行なわれるので、前述したラッチのセットを用いて、現在のクロックサイクルか
ら次のクロックサイクルまでデータ及び制御信号を保持する。w_enable信号は
ワードをRAM202に書き込もうとする場合に論理値1、書き込むべきワードが
ない場合に論理値0である。
後述の信号は書き込み動作に関連する。r2_addrビット12:2が
11ビット・ラッチ212にラッチされると、r2_addrのビット12:7を用いて、32
ビット・ワードが書き込まれるRAM202内部のロケーションにアドレスする。r
2_addrのビット6:2は1対32デコーダ224に供給される。デコーダ224の32個
の出力は32個の1ビット・マルチプレクサ218A〜Nを制御するために使用する
。これら32個の制御信号のうち、厳密に1つだけが論理値1で、残りは論理値0
になる。
CPU105はw_data信号を含む32ビット・データワードを供給する。
w_data_select信号が論理値1の場合、w_data信号としてCPU105から
供給された32ビット・ワードはRAM202に書き込まれる。w_data_select信
号が論理値0の場合、RAM202へ書き込まれるデータは32個の1ビット・マル
チプレクサ218A〜nによって発生した32ビット「更新値」である。r2_ addr
ビット12:7によって指定されたRAM202ロケーションから読み出されたワー
ドはラッチ208Bと32個のマルチプレクサ218A〜nの第1の入力へ供給され、こ
の場合、各マルチプレクサへ1ビットづつ供給される。4対1マルチプレクサ22
0の出力である「更新ビット」は32個の2対1マルチプレクサ218A〜nの全部の
第2の入力へ供給される。その結果、「更新値」はr_dataに等しくなり厳密に
その内のビットの1つが「更新ビット」に置き換えられている。このようにする
と32ビット・ワードのリード・モディファイ・ライト方式(読み取り・変更・書
き込み方式)で、個々のビットまでアドレスできるかのようにRAM202を使用
できる。
「更新ビット」の値は2ビットのw_bit_select信号によって制御される。
w_bit_select信号が2進値00を有する場合、更新ビ
ットはtag_bit_1に等しい。w_bit_selectが2進値01を有する場合、更新ビ
ットはtag_bit_2に等しい。w_bit_selectが2進値10を有する場合、更新ビ
ットは論理値0に等しい。最後に、w_bit_selectが2進値11を有する場合、
更新ビットは論理値1に等しい。
CPU105はlimit_trap_1信号とlimit_trap_2信号を任意のクロックサイ
クルで使用して同じクロックサイクルのw_enable信号をゲートできる。このよ
うにすると、トラップが発生した場合RAM202への書き込みが抑圧される。
例示の実施態様において、CPU105がマイクロプロセッサで実現されている
場合、本明細書で説明したスタック・タグキャッシュのハードウェアはマイクロ
プロセッサとして同じ集積回路パッケージ内に実装できる。スタック最上部にあ
る又はその付近の項目を含むハードウェアとしてのスタック・データキャッシュ
との関連でスタック・タグキャッシュ200を使用することができる。こうしたハ
ードウェアとしてのスタック・データキャッシュの構成と動作は当業者の範囲内
である。スタック・タグキャッシュのエントリ数はスタック・データキャッシュ
のエントリ数と等しいか異なることがある。
別の実施態様において、スタック・データキャッシュ並びにスタック・タグキ
ャッシュはシステム・メモリに常駐できる。こうしたソフトウェアとしてのスタ
ック・タグキャッシュの実装はスタック・タグキャッシュ200の前述の説明と本
文書の残りの説明に鑑みて当業者の範囲内であろう。
前述の説明から、本願発明がスタック内に記憶された参照とプリミティブ値に
タグ付き表現を使用し、一方でヒープのオブジェクト内にある参照及びプリミテ
ィブ値にはタグ無し表現を使用する方法
と装置を提供することが読者には理解されよう。スタック・ワードに関連したタ
グビットはCPU105がスタックに項目をプッシュする命令を実行するか、又は
スタックのアクティブ領域内にすでにロケーションを更新している際にCPU10
5により自動更新される。
本願発明において、データスタックは必ずしもメモリの連続した領域を占有し
ないものと想定している。その代わり、データスタックには連続メモリの初期量
が割り当てられる。スタックがオーバフローした場合、連続メモリの追加領域を
割り当てる。単一スタックを表わす2つ又は3つ以上のこうした連続領域をリス
ト状に連鎖できる。現在のスタックのアンダーフローが発生すると現在のスタッ
ク領域が放棄され後にリサイクルされる。スタックポインタとフレームポインタ
はリストの直前の領域を参照するように調節される。メモリの新規な連続領域が
スタックに割り当てられる時には、領域は少なくともスタック上にプッシュされ
ようとするフレームを保持するのに充分な大きさでなければならない。CPU10
5が1つのスレッド実行から別のスレッドへコンテクスト・スイッチを行なう場
合、CPUはスタックポインタ・レジスタ、フレーム・ポインタ・レジスタ、ス
タック・データリミット・レジスタ、スタック・データの現在の内容を主メモリ
に保存するのが典型的である。次にCPU105は新しい値をスタックポインタ、
フレームポインタ、及びスタックリミット・レジスタにロードする。本願発明に
よれば、CPU105はタグスタック・リミット・レジスタ204A〜BとRAM202
の内容も主メモリに保存する。CPU105はその後でリミット・レジスタ204A〜
Bへ新規の値をロードする。
スタック・タグキャッシュ200の設計はRAM202の内容を保存し易くする。更
に詳しく説明すると、CPU105はr2_addrとして
アドレスを提示し32ビット信号(r_data 31:0)としてデータを読み取るこ
とによりRAM202から一度に32ビットを読み出すことかできる。CPU105はr2
_addrとしてアドレス、w_enable、及びw_data_selectの値、及び32ビッ
トのデータ(w_data 31:1)を提示することによってRAM202へ一度に32
ビット書き込むことができる。一度にRAMへ32ビットを読み書きできる能力で
トラップの高速処理が容易になる一方、トラップの頻度を最小限に抑さえ高速な
コンテクスト・スイッチングを可能にする。
タグビットを保持するのに必要な主メモリ110の量はトラップ又はコンテクス
ト・スイッチの時点で割り当てることができ、スタック・データを保持するため
に使用されているメモリの付近に配置できる。Java仮想マシンの典型的な実装に
おいて、プログラム・スタックはチャンクとしてまとまった状態(chunk)で割
り当てられている。1つのまとまりには5ワードのブックキーピング情報と2000
ワードの実際のスタック・データを含むことができるが数値2000は任意である。
本願発明の好適実施態様において、スタックは2キロワード(2048ワード)のま
とまりに割り当てられる。これらのワードのうちの5個はブックキーピング情報
として使用され、62ワードはスタック・タグビットを保持する(1984タグビット
を提供する)ために予約され1981ワードが実際のスタック・データを保持するた
めに使用できる。タグビットのうちの3個は使用されないことに注意する。この
実装により、常にスタックフレームのタグビット全部を2048ビットのスタック・
タグキャッシュRAMに適合させることができる。スタックのサイズに割り当て
られる実際のメモリのサイズは設計要件によって変化し得ることは当業者には明
らかであろう。例えば、本願発明は32×32ビットのRAMと4096ワードの主メモ
リ・スタッ
ク・チャンクサイズ又は両方に実装できる。しかし、こうした実施態様において
は、必ずスタック・タグキャッシュRAMにスタックフレームのタグビット全部
を適合させることはできない。
選択したスタック・エントリのアドレスが所定のリミットの外にあって希望す
るタグ項目がスタック・タグキャッシュ200にないことを表わしていることでト
ラップが発生する場合、トラップ処理プロシージャは主メモリからキャッシュメ
モリへタグ情報をコピーすることを含む。特定のシステムによってキャッシュ全
体が置き換えられるか、又はキャッシュの一部が置き換えられる。キャッシュ「
ミス」を誘発したスタック・タグキャッシュ200のリストアはスタック・タグキ
ャッシュ200の前述の説明と本文書の残りの説明に鑑みて当業者の範囲内である
。いずれの場合にも、希望するタグ・エントリを含む最少量の情報を主メモリか
ら取り出してキャッシュメモリに記憶する必要がある。
本願発明の前述の説明から、単一のスタックを一緒に増大縮小する2つの協調
スタックとして表現できることが理解されよう。32ビット項目がデータスタック
上へ論理的にプッシュされる時には、1ビット・タグがスタック・タグキャッシ
ュへ論理的にプッシュされる。32ビット項目をデータスタック内から取り出す場
合又はその中で更新する場合には、これに対応する1ビット・タグをスタック・
タグキャッシュ内から取り出すか又はその中で更新する。
スタック・タグキャッシュの代替実装
本願発明の第2の実施態様によるスタック・タグキャッシュ300が図3に図示
してある。スタック・タグキャッシュ300の実装と共通するスタック・タグキャ
ッシュ200の全ての構成要素は図3におい
て同様の番号が付けてあり、こうした構成要素の説明及び動作は本明細書ですで
に述べた通りである。スタック・タグキャッシュ200とスタック・タグキャッシ
ュ300の違いは、RAM202、リミット・レジスタ204A〜B、コンパレータ206A
〜Dが完全結合キャッシュ302(fully associative cache 302)に置き換え
られていることである。本実施態様において、キャッシュ302は4線式マルチポ
ート完全結合キャッシュを含み、各々の栓は25ビットのアドレスと32ビットのデ
ータ、即ちスタック・エントリのタグ情報で構成される。キャッシュ302は2個
の読み出しポートと1個の書き込みポート、及び「フロースルー」機能を有して
おり同じ32ビット・データワード即ち同じ関連アドレスを有するデータワードに
ついて同じクロックサイクルで読み込みと書き込みの両方が行なわれる場合、キ
ャッシュ302から読み出した値はそのクロックサイクルでキャッシュ302に書き込
まれる値と同じである。読み込みアドレスがキャッシュ302に提示されると、こ
れに対応する「ヒット」信号を発生し、キャッシュ線のどれかが現在そのアドレ
スを含む場合には論理値1である。
更に、30ビット・ラッチ312をキャッシュ200の11ビット・ラッチ212の変わり
にスタック・タグキャッシュ300で使用する。ラッチ312の構造と機能はラッチ21
2を参照して前述したのと同様であるが、図3に図示してあるようにラッチ312は
r2_addr信号(r2_addr 31:2)の30ビットを記憶しこれらのビットのうち25
ビット(w_addr31:7)をキャッシュ302へ、又5ビット(w_addr 6:2
)をデコーダ224へ提供する点で異なっている。更に、2入力NOTゲート314A
と314Bの対を各々cache_hit_1及びcache_hit_2線へ接続する。キャッシュ3
02がゲート314Aへ論
理値0の値を提示するとlimit_trap_1の値が論理値1にされ、このことはキャ
ッシュ・ミスが発生したのでトラップ・ルーチンを実行しなければならないこと
を表わす。同様に、キャッシュ302がゲート314Bへ論理値0の値を提示すると、
limit_trap_2の値が論理値1にされ、キャッシュの「ミス入力」か発生したの
でトラップ・ルーチンを実行しなければならないことを表わす。
スタック・タグキャッシュ300の動作と機能はスタック・タグキャッシュ200の
それと同様で、主要な相違点はキャッシュ・ミスの管理、キャッシュ302のロー
ディング及びアンローディングである。前述のスタック・タグキャッシュ200を
参照して提供した説明に鑑みると、こうした動作上の相違点は当業者の範囲内で
ありこれ以上詳細には説明しない。
典型的な命令実行
本願発明の典型的実施態様の動作を更に示すため、Java仮想マシン命令セット
に準拠した命令を実装しているマイクロプロセッサ又は中央演算処理ユニットを
想定して以下の例を提供する。最大限効率的な命令タイミングの図示の目的で、
実施態様ではスタック・データは2個の読み出しポートと1個の書き込みポート
を有するマルチポート・キャッシュメモリにも保持されるものと仮定するが、他
のデータスタック実装も使用する。
iadd命令
「iadd」命令は2つのオペランドをスタックからポップするが、どちらのオペ
ランドも整数でなければならない。次に、これらの和が整数としてスタックにプ
ッシュされる。マイクロプロセッサは2個の
スタック・オペランドを読み込み、これらを加算してその和をスタックに書き戻
す。スタックポインタもスタックから1項目ポップするように(2回のポップと
1回のプッシュで結局1回ポップしたことになる)調整される。スタック・デー
タキャッシュのスタック・データにより、命令は1クロックサイクルで全て実行
できる。
同様に、CPUは2個のスタック項目のメモリアドレスを生成する。スタック
最上部にある項目のアドレスはr1_addrとしてRAM202に提示され、一方でス
タック最上部より下にある項目のアドレスはr2_addrとしてRAM202に提示さ
れる。スタック・タグキャッシュ200はリミット比較を行なって2つのスタック
・ロケーションに対応するタグビットが論理的にRAM202内部にあることを保
証する。r1_addrで示されたスタック・ロケーションのタグビットがキャッシュ
内に存在しない場合、limit_trap_1信号は論理値1の値を有することになる。
r2_addrで表わされるスタック・ロケーションのタグビットがキャッシュ内に存
在しない場合は、limit_trap_2信号が論理値1の値となる。
RAM202と2個の32対1マルチプレクサ214A〜Bが一緒に2つのスタック・
ロケーションに対応するタグビットを取り出して、タグビットをtag_bit_1及
びtag_bit_2としてCPU105に提示する。CPU105は冗長エラー検査にタグ
ビットを使用する。エラー検査は、適当なタグビットによって示されるスタック
・データの性質とスタック・データに関連する命令との比較を内包する。例えば
、プリミティブ値だけで演算する命令は参照としてタグビットによって示されて
いるオペランドで実行することができない。このようにすると、タグビットは厳
密ガーベッジ・コレクション技術を支援するだけでなく、スタック・エントリ内
部のデータの有効性の検証に
も役立つ。iadd命令の例に戻ると、どちらかのビットが論理値1の場合、スタッ
ク・ロケーションは参照を含みiadd命令の実行は誤りである。よってCPU105
は命令実行を中断する。CPU105はtag_bit_1、tag_bit_2、limit_trap_
1、limit_trap_2のいずれかが論理値1に等しい場合トラップを実行する。C
PU105はトラップを行なわない場合にw_enable信号に論理値1の値を提示す
る。CPU105はw_data_selectに論理値0、w_bit_selectに2進値10を
提示する。結果的に、トラップが発生しない場合、その結果についてスタック項
目に対応するタグビットは論理値0となるように更新され、結果がプリミティブ
値であることを表わす。冗長エラー検査を用いてオペランドかプリミティブ値で
ない場合にトラップを強行する場合この動作は冗長である。エラー検査が実行さ
れないような実装において、この更新は冗長ではない。
aaload命令
「aaload」命令はスタックから2項目をポップする。一番上が整数インデック
スで、その下の項目が参照配列への参照である。この命令は、インデックス値で
表わされる通りに配列からの参照を選択し選択した参照のコピーをスタックにプ
ッシュする。スタックポインタもスタックから1項目をポップしたように調節さ
れる、即ち2回のポップと1回のプッシュで結局1回ポップしたことになる。こ
の命令は主メモリからの読み込みを行なうので、複数クロックサイクルを必要と
する。
最初のクロックサイクルの間に、CPU105は2つのスタック項目のメモリア
ドレスを生成する。スタック最上部にある項目のアドレスはr1_addrとして提示
され、スタック最上部の下にある項目の
アドレスはr2_addrとして提示される。スタック・タグキャッシュ200はリミッ
ト比較を実行して2つのスタック・ロケーションに対応するビットが論理的にキ
ャッシュ内に存在することを保証する。r1_addrで表わされるスタック・ロケー
ションのタグビットがキャッシュ内に存在しない場合、limit_trap_1信号に論
理値1が生成される。r2_addrで表わされたスタック・ロケーションのビットが
キャッシュ内に存在しない場合、limit_trap_2信号に論理値1が生成される。
RAM202と2個の32対1マルチプレクサ214A〜Bが一緒に2つのスタック・
ロケーションに対応するタグビットを取り出して、タグビットをtag_bit_1及
びtag_bit_2としてCPU105に提示する。CPU105は関連する命令による冗
長エラー検査にタグビットを使用する。tag_bit_1が論理値1の場合、tag_bi
t_2が論理値0の場合、又はlimit_trap_1又はlimit_trap_2のどちらかが論
理値1の場合にはトラップを行なうべきである。このクロックサイクルで、CP
U105はw_enable信号に論理値0を提示する。
選択した配列要素が主メモリから到着した後、CPU105は後続のクロックサ
イクルでスタック結果のアドレス、即ち当初は最上部から2番目であったスタッ
ク項目と同じアドレスをもう一度r2_addrとして提示する。CPU105はw_ena
ble信号について論理値1の値、w_data_selectについて論理値0の値、w_b
it_selectについて2進値11を提示する。結果的に、結果のスタック項目に対応
するタグビットは論理値1に更新され、このことが結果が参照値であることを表
わす。冗長エラー検査を用いて第1のオペランド即ち最上部から2番目のスタッ
ク・エントリが参照値でない場合にトラップを強行する場合こうした更新は冗長
である。エラー検査が行なわれな
い実施態様においてこうした更新は冗長ではない。
iaload命令
「iaload」命令の実行は、配列オペランドが整数値の配列であり、スタックに
プッシュされる結果が参照ではなく整数値である点を除けば「aaload」命令と全
ての面で同一である。更に、直前に説明したクロックサイクルにおいて、aaload
命令への参照内で、CPU105はw_bit_select信号に2進値10を提示する。結
果的に、命令結果についてスタック項目に相当するタグビットは論理値0となる
ように更新され、このことにより、結果がプリミティブ値であることを表わす。
この更新は論理値1から論理値0へタグビットを変更するので冗長ではない。
dup命令
「dup」命令はスタックの一番上の項目のコピーをスタックにプッシュする。
CPU105は一番上のスタック項目を読み出してそのすぐ上のスタック・スロッ
トに書き込む。スタック・オーバフローが発生した場合には、スタックポインタ
も上向きに調節されトラップが行なわれる。
CPU105は2つのスタック・スロットのメモリアドレスを生成する。スタッ
クの一番上にある項目のアドレスはr1_addrとして提示されすぐ上のスロットの
アドレス、つまり新しく一番上の項目になる項目のアドレスがr2_addrとして提
示される。スタック・タグキャッシュ200はリミット比較を実行して2つのスタ
ック・ロケーションに対応するタグビットが論理的にRAM202内部に存在する
ことを確認する。r1_addrで表わされるスタック・ロケーションのタ
グビットがキャッシュ内部に存在しない場合、limit_trap_1信号に論理値1が
生成される。r2_addrで示されたスタック・ロケーションのビットがキャッシュ
内部に存在しない場合、limit_trap_2信号に論理値1が生成される。limit_t
rap_1又はlimit_trap_2が論理値1の場合トラップが行なわれる。
RAM202と32対1マルチプレクサ214A〜Bが一緒に2つのスタック・ロケー
ションに対応するタグビットを取り出して、タグビットをtag_bit_1及びtag_
bit_2としてCPU105に提示する。「dup」命令を処理する場合に、CPU105
がtag_bit_2信号を使用することはない。
トラップを行わない場合には、CPU105はw_enable信号に対して、論理値
1の値を提示する。CPU105はw_data_selectに論理値0の値w_bit_sele
ctに2進値00を提示する。結果的に、トラップが発生しない場合、命令結果につ
いてのスタック項目に対応するタグビットがtag_bit_1のコピーとなるように
更新される。従って、新規に複製されたスタック項目がもともと一番上であった
スタック項目と同じタグビット値を担う。
swap命令
「swap」命令は一番上のスタック項目を一番上から2番目のスタック項目で
交換する。スタックポインタの実質的調節は行なわれない。スタック・データが
スタック・データキャッシュに保持されるシステムでは、この命令は2クロック
サイクルで実行できる。
最初のクロックサイクルで、CPU105は2つのスタック・スロットのメモリアド
レスを生成する。スタックの一番上の項目のアドレスはr1_addrとしてRAM20
2に提示されスタックの最上部のすぐ
下のスロットのアドレスがr2_addrとして提示される。スタック・タグキャッシ
ュ200はリミット比較を実行して2つのスタック・ロケーションに対応するタグ
ビットが論理的にRAM202内部に存在することを確認する。r1_addrで指定さ
れたスタック・ロケーションのタグビットがRAM202内部に存在しない場合、l
imit_trap_1信号に論理値1が発生する。r2_addrで指定されたスタック・ロ
ケーションのタグビットがRAM202内部に存在しない場合にはlimit_trap_2
信号に論理値1が発生する。limit_trap_1又はlimit_trap_2のどちらかが論
理値1の場合トラップが行なわれる。RAM202と32対1マルチプレクサ214A〜
Bが一緒に2つのスタック・ロケーションに対応するタグビットを取り出して、
タグビットをtag_bit_1及びtag_bit_2としてCPU105に提示する。CPU1
05はトラップが行なわれない場合にはw_enable信号に論理値1を提示する。C
PU105は又w_data_select信号に論理値0の値、w_bit_selectに2進値00
を提示する。結果的に、トラップが発生しない場合、最上部から2番目のスタッ
ク項目に対応するタグビットはtag_bit_1のコピーとなるように更新される。
CPU105はtag_bit_2として提示された値も保存する。
第2のクロックサイクルで、CPU105は一番上のスタック・スロットのメモ
リアドレスを生成してr2_addrとして提示する。CPU105はw_enable信号に
論理値1,又w_data_select信号に論理値0を提示する。CPU105は直前のク
ロックサイクルから保存したtag_bit_2の値が論理値0の場合にはw_bit_s
elect信号に2進値10を提示する。CPU105は保存したtag_bit_2の値が論理
値1の場合w_bit_selectに2進値11を提示する。このようにすると、一番上
のスタック項目に対応するタグビットは保存してあるtag_
bit_2のコピーとなるように更新される。実質的な効果は2つのスタック項目
について2つのタグビットを交換したことである。
dup及びswap命令について、1クロックサイクルでRAM202内部の1つのビッ
ト・ロケーションから別のビット・ロケーションへタグビットの値を直接コピー
でき、書き込み動作が実際にはラッチ遅延のため後続のクロックサイクルで完了
することが容易に理解される。これ以外に、1つのクロックサイクルでタグビッ
トを読み出して後のクロックサイクルでRAM202の別のロケーションへの値に
保存するためにCPU105が保存しても良い。
上記の説明によると、どのようにすれば命令dup2、dup_x1、dup_x2、dup
2_x1、dup2_x2にも同様に必要とされるタグビット値のコピーを実行でき
るかが容易に理解されるであろうから、これらの詳細な説明は本明細書では簡潔
にするため提供しない。
iload命令
「iload」命令はフレームポインタからのオフセットとしてアドレスが計算さ
れる整数スタック項目のコピーをスタックにプッシュする。アドレスは整数メソ
ッド・パラメータ又はローカル変数の値を取り出すために使用される。
CPU105はスタック項目を読み出して一番上のスタック項目のすぐ上のスタ
ック・スロットにこの項目を書き込む。スタックポインタも上向きに調節される
。スタック・オーバフローが発生するとトラップが行なわれる。スタック・デー
タがスタック・データキャッシュに存在する場合、この命令は1クロックサイク
ルで実行できる。iload命令の動作はdup命令のそれとほとんど似ており、主な相
違点はオペランドが整数である必要がある点である。よってtag_bit
_1を調べれば論理値0を保証することができ、結果のタグビットは論理値0に
なる。従ってw_bit_select信号は2進数00ではなく2進数10になる。
フレームがRAM202より大きいメソッドでは、少なくとも2つのオプション
が存在する。第1に、スタック・タグキャッシュ200はオペランドが参照ではな
いことの冗長エラー検査を先行する。第2に、又これ以外に、トラップを行ない
、CPU105に命令をエミュレーションさせておく。
好適実施態様において、CPU105は2つのスタック・スロットのメモリアド
レスを生成する。フレームポインタからのオフセットとして計算されたアドレス
はr1_addrとして提示され、スタックの現在の最上部より上のスロット、即ち新
しく一番上の項目になろうとする項目のアドレスはr2_addrとして提示される。
スタック・タグキャッシュ200はリミット比較を実行するが、limit_trap_1信
号が論理値1の場合トラップは行なわれない。その代わり、limit_trap_1が論
理値0でtag_bit_1が論理値1の場合、又はlimit_trap_2が論理値1の場合
にトラップを行なう。つまり必要なタグビットがスタック・タグキャッシュ200
に存在するかも知れない場合に冗長エラー検査が実行される。それ以外の場合、
トラップを行なうのではなく、冗長エラー検査を実行しない。
スタックにプッシュしようとするデータは同じサイクル又は後続のサイクルの
間に到着する。どちらのサイクルでも実際にはデータは新しくスタック最上部の
項目になるスタック・スロットに書き込まれることになるので、CPU105はト
ラップを行なわない場合w_enable信号に論理値1を提示する。CPU105はw
_bit_select信号に2進値10も提示する。結果的に、命令結果についてのスタ
ッ
ク項目に対応するタグビットは論理値0になるように更新され、結果がプリミテ
ィブ値であることを表わす。
istore命令
「istore」命令はスタックから整数をポップして、フレームポインタからのオ
フセットとしてアドレスが計算されるスタック・スロットに格納する、即ちこの
項目を用いて整数メソッド・パラメータ又はローカル変数の値を更新する。CP
U105は一番上のスタック項目を読み込みアドレスしたスタック・スロットに書
き込む。スタックポインタも下向きに調節される。スタック・アンダーフローが
発生した場合にはトラップが行なわれる。
フレームがRAM202より大きいメソッドでは、トラップを行なう必要がある
が、これは候補スタック記憶スロットに記憶されるタグビットを更新して本願発
明の正しい動作を維持する必要があるためである。CPU105は更新したスタッ
ク・スロットに関連するタグビットの更新を含め、命令の動作をエミュレートす
る必要がある。
CPU105は2つのスタック・スロットのメモリアドレスを生成する。フレー
ムポインタからのオフセットとして計算されるアドレスがr2_addrとして提示さ
れ、スタックの現在の最上部のアドレス、即ちポップされることになる項目がr1
_addrとしてて維持される。スタック・タグキャッシュ200はリミット比較を実
行する。RAM202と32対1マルチプレクサ214A〜Bが一緒に2つのスタック・
ロケーションに対応するタグビットを取り出して、tag_bit_1及びtag_bit_2
としてCPU105に提示する。CPU105は冗長エラー検査にこれらのタグを使用
できるようになる。tag_bit_1、limit_trap_1、又はlimit_trap_2のどれ
かが論理値1の場合トラップを起
こすべきである。tag_bit_2信号はCPU105によるistore命令の処理では使用
されない。CPU105はトラップを行なわない場合にw_enable信号に論理値1
を提示する。CPU105はw_bit_select信号に対して2進値10を提示する。結
果的に、命令結果についてのスタック項目に対応するタグビットは論理値0にな
るように更新され、このことにより結果がプリミティブ値であることを表わす。
limit_trap_1又はlimit_trap_2が論理値1であるためにトラップが発生し
た場合、CPU105はトラップを誘発した命令、並びにトラップハンドラ・ルー
チンによって提供された他の情報を調べて適当な動作を起こさなければならない
。命令がtag_stack_low_limit又はtag_stack_high_limitによって示され
る境界より外側にあるスタック・スロットのタグビットにアクセスする必要があ
る場合、CPU105はRAM202に必要なタグビットをロードし、これに合わせて
tag_stack_low_limit及びtag_stack_high_limitの値を調節することがで
きる。RAM202からデータを読み取りRAM110に格納することによって最初に
スタック・タグキャッシュに空きを作る必要がある。
クイック命令の考察
オブジェクトのフィールドであるオペランドか参照又はプリミティブ値である
かについて無差別な「クイック」命令を使用するJava実装では、本願発明は全て
の関連する区別を実行する新規命令の追加を企図している。
シンボリック名の解決後に遅い命令をクイック命令で置き換えたJava機構はJa
vaインタプリータ又はJITコンピュータとも呼ばれる「ジャストインタイム」コ
ンピュータのどちらか又は両方である。
好適実施態様において、2つの考えられるクイック命令の一方を置換命令として
選択するようにJavaインタプリータ及び/又はJITコンパイラを変更する。この
選択は何らかの特定のオブジェクト・フィールド・オペランドが参照かどうかに
ついての情報を失わないように行なう。以下の半標準JVMクイック命令は常に
プリミティブ値に対して演算するように解釈される:
getfield_quick
getfield_quick_w
getstatic_quick
idc_quick
idc_w_quick
putfield_quick
putfield_quick_w
putstatic_quick
本願発明の追加クイック命令はこれに対応する前述した既存の半標準JVMク
イック命令と正確に同じだが、参照値に対して演算を行なうのは次の通りである
:
agetfield_quick
agetfield_quick_w
agetstatic_quick
aldc_quick
aputfield_quick
aputfield_quick_w
aputstatic_quick
遅い命令であるgetfield、getstatic、ldc、ldc_w、putfield、putstaticを
クイック命令により遅い命令を実行するプロセスの間
に置換しようとするときに、シンボリック名解決プロセスでスタックへ又はスタ
ックから転送しようとするデータが参照であると分かった場合、名前が「a」で
始まっているクイック命令を選択する。それ以外の場合には通常のクイック命令
を選択する。例えば、agetfield_quick命令はgetfield_quickと機能的に同一
であるが、この命令は参照値を転送する点で異なっている。上記で言及した他の
7種類のクイック命令についても同様のことがいえる。
好適実施態様において、Javaバイトコード命令セット・オプコードは次のよう
に新規命令に割り当てられる:
232 agetfield_quick
233 agetfield_quick_w
234 agetstatic_quick
235 aldc_quick
236 aldc_w_quick
231 aputfield_quick
229 aputfield_quick_w
230 aputstatic_quick
agetfield_quick命令
「agetfield_quick」命令はオブジェクトへの参照をスタックからポップして
、オブジェクト内のオフセットとしてアドレスを計算した参照値のコピーをスタ
ックにプッシュする。参照はオブジェクトの参照値フィールドの値を取り出すた
めに使用する。agetfield_quick命令の動作は「aaload」命令と類似しているが
、配列参照と整数インデックスの代わりに、単一のオペランドであるオブジェク
ト参照がスタックからポップされる点で異なっている。
本願発明の精神と範囲を維持しつつも本願発明のスタック・タグキャッシュの
読み込み及び書き込み動作の正確なタイミングに多少の変動が発生することがあ
ることは当業者には明らかであろう。例えば、RAM202へのタグ情報ワードの
書き込みは次のクロックではなくRAM202から情報を読み出すのと同じクロッ
クで行なえる。
更に別の実施態様において、本願発明はコンピュータ・システムで使用するコ
ンピュータ・プログラム製品として実装できる。このような実装において、タグ
情報はスタック項目を記憶するために使用されるのと同じシステムRAMの第2
の領域に記憶される。この実施態様において、タグ情報を取り出してシステムR
AMに直接記憶でき、これによってハードウェア・キャッシュ・メモリ202の機
能とアドレス・リミット・チェック及びキャッシュ「ミス」を処理するためのト
ラップ命令の必要性を排除できる。これ以外に、キャッシュメモリ202の機能を
別のシステムRAM装置、例えば高速スタティックRAMの一部など、他の目的
でも使用される装置で実現できる。この後者の実施態様において、スタック・タ
グキャッシュ200又はスタック・タグキャッシュ300内部のハードウェア構成要素
によって実行される機能の全部その全体をこれに対応するプロセッサ命令に置き
換え、類似の機能を実行して同じ結果を実現するようにできる。この実施態様で
は、各スタック・エントリについてのタグビット情報かシステムRAMに記憶で
きる。プロセッサで実行可能な特定の命令でRAM内部のタグビット情報を読み
出し、書き込み、変更する。大半のプロセッサ命令セット、アセンブリ言語やC
プログラミング言語を含めた多数のプログラミング言語がデータワード内の個別
のビットの操作を行ない本願発明のこのような完全ソフトウェア実施態様の実現
に適した装備を提供している。スタック・タグキャ
ッシュ200及び300を含む論理構成要素の前述の説明に鑑みて、類似の機能を実装
するために使用される基本的処理ステップはプログラミング技術の当業者の範囲
内にあり図4及び図5に模式的に図示してある。
図4は本願発明のハードウェア実施態様又はソフトウェア実施態様によって実
行されてプログラム・スタック読み込み中にタグ情報を取り出すためのステップ
の例示的フローチャートである。この方法はステップ400で始まり、ステップ402
に進み、ここで実装によっては1つ又は2つの読み込みアドレスを生成し記憶す
る。単一のスタックを処理している場合には、単一のアドレスを使用し、ハード
ウェア実装に関連して前述したように2つのスタックを同時に処理している場合
は第2のアドレスを使用できる。これらのアドレスはスタック項目ロケーション
を指定するもので、前述のように、スタック・キャッシュ又はタグ情報が記憶さ
れているシステムRAMの他のロケーションをアドレスするためにも使用される
。
ステップ404において、ステップ402で記憶したアドレスで指定されたロケーシ
ョンにあるスタック項目が取り出される。次に、ステップ406において、アドレ
スをハイトラップ・リミットに対してチェックし、ステップ408において、アド
レスをロートラップ・リミットに対してチェックする。アドレスが各々のトラッ
プ・リミットによって定義されたアドレス・インターバルの外にある場合には、
すでに議論したように、トラップ処理を開始する。この処理によって、ステップ
412において、要求されたタグ情報がシステムRAMから取り出されることにな
る。ステップ414において、少なくともシステムRAMから取り出したタグ情報
を記憶し、可能なら上記の議論に従ってキャッシュメモリ内に追加タグ情報を記
憶することで、キ
ャッシュメモリをリストアする機構が開始される。ステップ416において、取り
出されたタグ情報がステップ404で取り出されたスタック項目に追加され、ルー
チンはステップ418で終了する。
プログラム・スタック書き込み動作中にタグ情報を記憶するのにも同様な方法
が用いられる。この方法が図5に図示してありステップ500で始まる。ルーチン
はステップ502に進み、ここで書き込みアドレスが記憶され、当該アドレスはス
タック項目を書き込もうとするプログラム・スタック・ロケーションに対応する
。記憶されたアドレスをステップ504でハイトラップ・リミットと比較し、ステ
ップ506でロートラップ・リミットと比較する。アドレスがトラップ・リミット
によって定義されたアドレス・インターバル以内に納まる場合、ルーチンはステ
ップ508に進み、ここでタグ情報がプログラム・スタック書き込みアドレスから
求めたロケーションでキャッシュメモリ内に記憶される。
これ以外に、ステップ502で記憶したアドレスがステップ504又は506のどちら
かで求めたトラップ・リミットの外にある場合、ステップ510でトラップ処理を
開始する。前述のように、このトラップ処理は従来のキャッシュメモリ「ミス」
処理に従って行なわれる。例えば、当業者には周知の方法で、タグ情報はキャッ
シュメモリとシステムRAMメモリ・ロケーションの両方に書き込まれるか、又
は情報がキャッシュメモリに書き込まれてから後でシステムRAMロケーション
へ「フラッシュ」される。
ステップ508と510のどちらにおいても、要求されたタグ情報がをキャッシュメ
モリへ記憶される。ルーチンはステップ512で終了する。
ソフトウェアによる実装は、有形媒体例えばコンピュータで読み
取り可能な媒体例えば図1Aのディスケット142、CD−ROM147、ROM115
、又は固定ディスク装置152上に固定されるか、又はコンピュータ・システムへ
、モデム又はその他のインタフェース装置例えば媒体191上でネットワーク195に
接続された通信アダプタ190などを経由して送信可能な、一連のコンピュータ命
令を含む。媒体191は光又はアナログ通信線を含みこれに限定されない有形の媒
体とするか、又はマイクロ波、赤外線又はその他の伝送技術を含みこれに制限さ
れない無線技術で実現できる。一連のコンピュータ命令は本願発明に関連して本
明細書で前述し多機能の全部又は一部を実現する。このようなコンピュータ命令
は多くのコンピュータ・アーキテクチャ又はオペレーティング・システムで使用
するための多数のプログラム言語で書けることが当業者には理解されよう。更に
、こうした命令は半導体、磁気、光又はその他のメモリ装置を含みこれに限定さ
れない現在又は将来のあらゆるメモリ技術を使用して記憶するか、又は光、赤外
線、マイクロ波、又はその他の伝送技術を含みこれに限定されない現在又は将来
のあらゆる通信技術を使用して伝送できる。この様なコンピュータ・プログラム
製品は例えばシュリンクラップ・ソフトウェアなど印刷又は電子文書を添付した
リムーバブル媒体として配布する、例えばシステムROM又は固定ディスク上で
コンピュータ・システムへ導入済みソフトウェアとして、又はインターネット又
はワールドワイドウェブなどネットワーク上のサーバ又は電子掲示板から配布す
ることができる。
本願発明の典型的な実施態様を開示したが、本願発明の精神と範囲から逸脱す
ることなく本願発明の利点の幾つかを実現する様々な変化及び変更を成し得るこ
とは当業者には明らかであろう。例えば、スタック・タグキャッシュ200及び300
はハードウェア論理構成要
素を用いての実施を説明したが、本願発明の方法は適当なプロセッサ命令を使用
した完全ソフトウェア実装として、又はハードウェア論理とソフトウェア論理の
組み合わせを使用して同じ結果を達成するハイブリッド実装としてのどちらかで
実現できる。更に、メモリのサイズ、データ又は信号を表現するために使用され
るビット数、データワードのサイズ、命令を実行するのに必要なクロックサイク
ル数、及び特定の機能を実現するために用いられる論理及び/又は命令の特定の
構成などの側面並びに本願発明の概念に対するその他の変更は添付の請求の範囲
で包含されることを意図している。
─────────────────────────────────────────────────────
フロントページの続き
(72)発明者 オコナー、ジェイムス・マイケル
アメリカ合衆国、カリフォルニア州
94043、マウンテン・ビュー、ルツ・アヴ
ェニュー 345
(72)発明者 スティール、ガイ・エル・ジュニア
アメリカ合衆国、マサチューセッツ州
02173、レキシントン、ランターン・レー
ン 9
(72)発明者 トレンブレイ、マーク
アメリカ合衆国、カリフォルニア州
94301、パロ・アルト、ウェイバーリー・
ストリート 801
Claims (1)
- 【特許請求の範囲】 1.第1のメモリ領域に複数のスタック項目を有するプログラム・データスタッ クを保持することができ、前記複数のスタック項目の各々は参照又はプリミティ ブ値のどちらかとして定義可能なデータを含むコンピュータ・システムにおいて 、選択したプログラム・スタック項目のデータが参照か又はプリミティブ値かを 決定するための方法であって、 A.第2のメモリ領域に複数のタグ項目を保持するステップであって、前記複 数のタグ項目の各々はスタック項目に関連し、各タグ項目は前記関連するスタッ ク項目が参照か又はプリミティブ値かを表わす値を有することを特徴とするステ ップと、 B.前記選択したスタック項目に関連する前記複数のタグ項目の1つを取り出 すステップと、 C.前記関連するスタック項目内部に含まれるデータが参照か又はプリミティ ブ値かを前記取り出したタグ項目の値から決定するステップと、 を含むことを特徴とする方法。 2.前記ステップAは、 A.1.前記プログラム・スタックの少なくとも一部分をエミュレーションする 順番に前記複数のタグ項目を構成するステップと、 A.2.前記プログラム・スタックの操作に応じてタグ項目を選択的に操作する ステップと、 を含むことを特徴とする請求の範囲1記載の方法。 3.前記ステップA.2.は更に、 A.2.A.選択したスタック項目の順番の操作に応じて、選択したタグ項目の 順番を操作するステップ を含むことを特徴とする請求の範囲2記載の方法。 4.前記ステップA.2.は更に、 A.2.A.対応するスタック項目のデータの操作に応じて、タグ項目の値を操 作するステップ を含むことを特徴とする請求の範囲2記載の方法。 5.前記ステップBは、 B.1.前記選択したスタック項目に対応するタグ項目が前記第2のメモリ領域 内に存在するかどうかを決定するステップ を含むことを特徴とする請求の範囲1記載の方法。 6.前記ステップB.1.は更に、 B.2.前記タグ項目が前記第2のメモリ領域内に存在していない場合には第 3のメモリ領域から前記タグ項目を取り出して前記第2のメモリ領域へ前記タグ 項目を書き込むステップ を含むことを特徴とする請求の範囲5記載の方法。 7.前記ステップBは更に、 B.1.前記関連するタグ項目のロケーションに対応するアドレスを前記第2の メモリ領域に提供するステップ を含むことを特徴とする請求の範囲1記載の方法。 8.前記ステップCは更に、 C.1.前記第2のメモリ領域の出力に前記取り出したタグ項目の値を提示す るステップと、 C.2.前記タグ項目の提示された値とこれに対応するスタック項目のデータ とを比較するステップと、 を含むことを特徴とする請求の範囲1記載の方法。 9.前記ステップBは更に、 B.1.第2の選択したスタック項目に対応する前記複数のタグ項目の第2の 項目を第1のタグ項目と同時に選択するステップと、 B.2.前記関連する第2のスタック項目内部に含まれるデータが参照か又は プリミティブ値かを前記第2の選択したタグ項目の値から決定するステップと、 を含むことを特徴とする請求の範囲1記載の方法。 10.複数のスタック・エントリを含むプログラム・データスタックを有するコ ンピュータ・システムて使用するスタック・タグキャッシュであって、各々のス タック・エントリは、タスクの実行中に前記コンピュータ・システムが使用する データを含み、 A.複数のタグ項目を記憶するように構成されたアドレス可能なメモリであ って、各タグ項目は、スタック・エントリに関連しており、かつ、前記関連する スタック・エントリが参照か又はプリミティブ値かを識別する値を有することを 特徴とするアドレス可能なメモリと、 B.前記アドレス可能なメモリに接続されており、かつ、、選択したスタッ ク・エントリに関連するタグ項目が前記アドレス可能なメモリ内部に存在するか を決定するように構成された比較論理と、 C.前記アドレス可能なメモリに供給されたアドレスに応答する出力論理で あって、前記アドレスによって選択され前記選択したスタック・エントリに関連 する前記タグ項目の値を提示するように構成された出力論理と、 を含むことを特徴とするスタック・タグキャッシュ。 11.更に、 D.選択したスタック・エントリに関連するタグ項目が前記アドレス可能な メモリ内部に存在しないことを前記比較論理が決定した場合には前記アドレス可 能なメモリの外のメモリからタグ項目を取り出すように構成され、かつ、前記取 り出したタグ項目を前記アドレス可能なメモリへ書き込むように構成された書き 込み論理 を含むことを特徴とする請求の範囲10記載の装置。 12.前記書き込み論理は更に前記第1と第2の選択したスタック・エントリに 各々関連する第1と第2のタグ項目が前記アドレス可能なメモリ内部に存在する かどうか決定するように構成されていることを特徴とする請求の範囲10記載の 装置。 13.前記出力論理は、第1と第2のアドレスに応答するようになっ ており、かつ、第1と第2の選択したスタック・エントリに各々対応する第1と 第2のタグ項目の値を提示するように構成されていることを特徴とする請求の範 囲10記載の装置。 14.前記アドレス可能なメモリに記憶されている前記複数のタグ項目は前記複 数のプログラム・スタック・エントリより少ないことを特徴とする請求の範囲10 記載の装置。 15.プロセッサと、 前記プロセッサに接続されたメモリと、 前記プロセッサ及び前記メモリに動作的に接続され、かつ、複数のスタッ ク・エントリを記憶してプログラム命令実行中に前記スタック・エントリを操作 するように構成されたプログラム・スタック論理であって、各々のスタック・エ ントリはプログラム命令の実行に有用なデータを収容しデータ部分とタグ部分と を含み、前記タグ部分には複数の予め規定されたオペランド形式のどれを前記デ ータが表わすかを示す情報を含むことを特徴とするプログラム・スタック論理と を含ムコンピュータ・システムであって、 各プログラム・スタック・エントリのデータ部分はメモリの第1の領域に 格納され、前記データ部分の構成と値は前記プロセッサによる前記プログラム命 令の実行中に前記プロセッサにより操作され、 前記複数のプログラム・スタック・エントリの各々のタグ部分はメモリの 第2領域に格納され、前記タグ部分の構成と値は前記対応するプログラム・スタ ック・エントリのデータ部分と相 関する方法で操作される ことを特徴とするコンピュータ・システム。 16.前記プロセッサと前記メモリの第2の部分とに動作的に接続され、かつ、 選択した複数のタグ部分を各スタック・エントリのデータ部分とは独立して記憶 して前記タグ部分の構成と値を操作するように構成されたスタック・タグキャッ シュ を更に含むことを特徴とする請求の範囲15記載のコンピュータ・システム 。 17.前記スタック・タグキャッシュは更に、 プログラム・スタック・エントリのタグ部分が前記スタック・タグキャッ シュ内部に存在するかどうか決定するように構成された比較論理 を含むことを特徴とする請求の範囲15記載のコンピュータ・システム。 18.前記スタック・タグキャッシュは更に、 前記スタック・タグキャッシュに供給されるアドレスに応答し、かつ、前 記供給されたアドレスにより選択された値をプログラム・スタック・エントリの タグ部分に対して提示するように構成された出力論理 を含むことを特徴とする請求の範囲15記載のコンピュータ・システム。 19.前記スタック・タグキャッシュ内部のタグ部分の個数はスタ ック・エントリの個数より少ないことを特徴とする請求の範囲15記載のコンピュ ータ・システム。 20.プロセッサと、第1のメモリ領域に複数のスタック・エントリを記憶して プログラム命令実行中に前記スタック・エントリを操作するように構成されたメ モリとプログラム・スタック論理とを有するコンピュータ・システムで使用する ためのコンピュータ・プログラム製品であって、各スタック・エントリは参照値 又はプリミティブ値のいずれかとして定義可能なデータを収容することができる 特徴を有し、コンピュータで使用可能な媒体を含む前記コンピュータ・プログラ ム製品は、参照又はプリミティブ値のいずれかとしてスタック・エントリの区別 を行なえるようにするために前記媒体に実現されたプログラム・コードを有し、 前記プログラム・コードは、 第2のメモリ領域に、複数のタグ項目を保持するためのプログラム・コー ドであって、各タグ項目がスタック・エントリに関連していることを特徴とする プログラム・コードと、 選択したスタック項目に対応する前記複数のタグ項目の1つを取り出すた めのプログラム・コードと、 前記取り出すためのプログラム・コードに応答するプログラム・コードで あって、前記選択したスタック・エントリに関連するタグ項目の値を提示するた めのプログラム・コードと、 を含むことを特徴とするコンピュータ・プログラム製品。 21.前記選択するためのプログラム・コードは更に、 前記選択したスタック・エントリに対応するタグ項目が前記 第2のメモリ領域内に存在するかどうかを決定するためのプログラム・コード を含むことを特徴とする請求の範囲20記載のコンピュータ・プログラム製 品。 22.前記選択するためのプログラム・コードは更に、 前記第2のメモリ領域内に存在しないタグ項目を取り出すためと前記第2 のメモリ領域に前記タグ項目を書き込むためのプログラム・コード を含むことを特徴とする請求の範囲20記載のコンピュータ・プログラム製 品。 23.選択した第2のスタック・エントリに対応する前記複数のタグ項目の第2 の項目を同時に選択するためのプログラム・コード を更に含むことを特徴とする請求の範囲20記載のコンピュータ・プログラ ム製品。 24.各タグ項目は前記対応するスタック・エントリ内部に含まれるデータが参 照か又はプリミティブ値かを表わす値を有することを特徴とする請求の範囲20記 載のコンピュータ・プログラム製品。 25.メモリを有するコンピュータ・システム上でガーベッジ・コレクションを 実行するための装置であって、 前記メモリ内に複数のスタック・エントリを記憶してプログラム命令実行 中に前記スタック・エントリを操作するように構 成されたプログラム・スタック論理であって、各スタック・エントリはプログラ ム命令の実行に有用なデータを収容しデータ部分とタグ部分とを含み、前記タグ 部分には複数の予め規定されたオペランド形式のどれを前記データが表わすかを 示す情報を含むことを特徴とするプログラム・スタック論理と、 第1のメモリ領域に記憶された各プログラム・スタック・エントリのデー タ部分を記憶するように構成された第1の記憶要素であって、前記データ部分の 構成と値がプログラム命令実行中に操作されることを特徴とする第1の記憶要素 と、 前記第1のメモリ領域とは異なる第2のメモリ領域に前記複数のプログラ ム・スタック・エントリの各々のタグ部分を記憶するように構成された第2の記 憶要素であって、前記タグ部分の構成と値がこれに対応するプログラム・スタッ ク・エントリの前記データ部分と相関する方法で操作されることを特徴とする第 2の記憶要素と、 未使用メモリ・ロケーションのアドレスを決定するために、前記第2のメ モリ領域を調べて前記未使用メモリ・ロケーションを再請求するように動作可能 なガーベッジ・コレクション機構と、 を含むことを特徴とする装置。 26.前記第2のメモリ領域は前記メモリとは別のキャッシュメモリであること を特徴とする請求の範囲25記載の装置。 27.前記複数のプログラム・スタック・エントリの各々の前記タグ部分は前記 プログラム・スタック・エントリが参照か又はプリミティブ値かを表わすことを 特徴とする請求の範囲25記載の 装置。 28.前記ガーベッジ・コレクション機構は前記プログラム・スタック・エント リが参照であることを関連タグ部分が表わしている第1のメモリ領域に記憶され た各プログラム・スタック・エントリのデータ部分を用いることによって、前記 未使用のメモリ・ロケーションのアドレスを決定することを特徴とする請求の範 囲26記載の装置。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/838,971 US6101580A (en) | 1997-04-23 | 1997-04-23 | Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits |
| US08/838,971 | 1997-04-23 | ||
| PCT/US1998/008163 WO1998048354A1 (en) | 1997-04-23 | 1998-04-23 | Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2000513854A true JP2000513854A (ja) | 2000-10-17 |
Family
ID=25278530
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP10546328A Pending JP2000513854A (ja) | 1997-04-23 | 1998-04-23 | タグビットのスタック・キャッシュを用いて厳密なガーベッジ・コレクションを支援するための装置及びその方法 |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US6101580A (ja) |
| EP (1) | EP0912942B1 (ja) |
| JP (1) | JP2000513854A (ja) |
| DE (1) | DE69802056D1 (ja) |
| WO (1) | WO1998048354A1 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US11687519B2 (en) | 2021-08-11 | 2023-06-27 | T-Mobile Usa, Inc. | Ensuring availability and integrity of a database across geographical regions |
Families Citing this family (39)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6295640B1 (en) * | 1998-05-08 | 2001-09-25 | Apple Computer, Inc. | Method and apparatus for distinguishing reference values from non-reference values in a runtime environment |
| US6308319B1 (en) * | 1999-02-22 | 2001-10-23 | Sun Microsystems, Inc. | Thread suspension system and method using trapping instructions in delay slots |
| US6349314B1 (en) * | 1999-09-29 | 2002-02-19 | Motorola, Inc. | Adaptive scheduler for mark and sweep garbage collection in interactive systems |
| US6691308B1 (en) * | 1999-12-30 | 2004-02-10 | Stmicroelectronics, Inc. | Method and apparatus for changing microcode to be executed in a processor |
| US20010034558A1 (en) * | 2000-02-08 | 2001-10-25 | Seagate Technology Llc | Dynamically adaptive scheduler |
| US6578094B1 (en) * | 2000-03-02 | 2003-06-10 | International Business Machines Corporation | Method for preventing buffer overflow attacks |
| US6996813B1 (en) | 2000-10-31 | 2006-02-07 | Sun Microsystems, Inc. | Frameworks for loading and execution of object-based programs |
| US20040015912A1 (en) * | 2000-11-20 | 2004-01-22 | Bottomley Thomas Mark Walter | Method of byte code quickening: quick instructions for method invocation |
| US6598141B1 (en) | 2001-03-08 | 2003-07-22 | Microsoft Corporation | Manipulating interior pointers on a stack during garbage collection |
| US6892212B2 (en) * | 2001-03-22 | 2005-05-10 | International Business Machines Corporation | Method for efficient garbage collection based on object type |
| US7210122B2 (en) * | 2001-03-22 | 2007-04-24 | International Business Machines, Corporation | Method for reducing write barrier overhead |
| US7096466B2 (en) | 2001-03-26 | 2006-08-22 | Sun Microsystems, Inc. | Loading attribute for partial loading of class files into virtual machines |
| US7020874B2 (en) * | 2001-03-26 | 2006-03-28 | Sun Microsystems, Inc. | Techniques for loading class files into virtual machines |
| US7543288B2 (en) | 2001-03-27 | 2009-06-02 | Sun Microsystems, Inc. | Reduced instruction set for Java virtual machines |
| US6957428B2 (en) * | 2001-03-27 | 2005-10-18 | Sun Microsystems, Inc. | Enhanced virtual machine instructions |
| US6804681B2 (en) * | 2001-05-08 | 2004-10-12 | Sun Microsystems, Inc. | Identifying and tracking object references in a java programming environment |
| US7065747B2 (en) * | 2001-05-08 | 2006-06-20 | Sun Microsystems, Inc. | Identifying references to objects during bytecode verification |
| US7058934B2 (en) * | 2001-08-24 | 2006-06-06 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for instantiating Java objects |
| US7228533B2 (en) * | 2001-08-24 | 2007-06-05 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for performing programming loops |
| US7039904B2 (en) * | 2001-08-24 | 2006-05-02 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for storing values into local variables |
| US6988261B2 (en) | 2001-08-24 | 2006-01-17 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions in Java computing environments |
| US6912554B2 (en) * | 2001-11-14 | 2005-06-28 | Omron Corporation | Method and apparatus for garbage collection using advanced marking techniques and restricted barrier to protect the data |
| US7178002B2 (en) * | 2002-07-24 | 2007-02-13 | Sun Microsystems, Inc. | Methods and systems for dynamically growing multiple stacks |
| US7089273B2 (en) | 2003-08-01 | 2006-08-08 | Intel Corporation | Method and apparatus for improving the performance of garbage collection using stack trace cache |
| US7313789B1 (en) * | 2004-02-27 | 2007-12-25 | Sun Microsystems, Inc. | Methods and systems for reducing a program size |
| US20100293206A1 (en) * | 2009-05-12 | 2010-11-18 | Tatu Ylonen Oy Ltd | Clustering related objects during garbage collection |
| US9405637B2 (en) | 2011-01-18 | 2016-08-02 | Texas Instruments Incorporated | Locking/unlocking CPUs to operate in safety mode or performance mode without rebooting |
| US8862640B2 (en) | 2011-04-25 | 2014-10-14 | Microsoft Corporation | Conservative garbage collecting and tagged integers for memory management |
| US8898376B2 (en) | 2012-06-04 | 2014-11-25 | Fusion-Io, Inc. | Apparatus, system, and method for grouping data stored on an array of solid-state storage elements |
| CN104699627B (zh) * | 2013-12-06 | 2019-05-07 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
| US20160112061A1 (en) * | 2014-10-21 | 2016-04-21 | International Business Machines Corporation | Non-recursive cascading reduction |
| US9490813B2 (en) * | 2014-11-06 | 2016-11-08 | Qualcomm Incorporated | High-speed level-shifting multiplexer |
| US9720819B2 (en) * | 2015-06-12 | 2017-08-01 | Intel Corporation | Concurrent, moving, garbage collector |
| US10127151B2 (en) * | 2016-05-13 | 2018-11-13 | Microsoft Technology Licensing, Llc. | Dynamically sized locals with precise garbage collection reporting |
| US11163675B1 (en) | 2021-04-07 | 2021-11-02 | State Farm Mutual Automobile Insurance Company | Mutation testing in parallel threads |
| US11237952B1 (en) * | 2021-04-07 | 2022-02-01 | State Farm Mutual Automobile Insurance Company | Runtime class recompilation during mutation testing |
| US12072790B1 (en) | 2021-04-07 | 2024-08-27 | State Farm Mutual Automobile Insurance Company | Mutation testing within continuous integration systems |
| CN114579208B (zh) * | 2022-05-05 | 2022-08-26 | 广州万协通信息技术有限公司 | 一种Java卡的自适应调整执行速度提升方法 |
| CN115187072B (zh) * | 2022-07-12 | 2025-05-13 | 上海太的信息科技有限公司 | 垃圾点位置识别方法及设备 |
Family Cites Families (19)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5043870A (en) * | 1982-02-24 | 1991-08-27 | At&T Bell Laboratories | Computer with automatic mapping of memory contents into machine registers during program execution |
| JPS59188879A (ja) * | 1982-12-17 | 1984-10-26 | シンボリツクス・インコ−ポレ−テツド | デ−タプロセツサ |
| US4757438A (en) * | 1984-07-12 | 1988-07-12 | Texas Instruments Incorporated | Computer system enabling automatic memory management operations |
| US5045995A (en) * | 1985-06-24 | 1991-09-03 | Vicom Systems, Inc. | Selective operation of processing elements in a single instruction multiple data stream (SIMD) computer system |
| US4920483A (en) * | 1985-11-15 | 1990-04-24 | Data General Corporation | A computer memory for accessing any word-sized group of contiguous bits |
| US5222221A (en) * | 1986-06-17 | 1993-06-22 | Yeda Research And Development Co., Ltd. | Method and apparatus for implementing a concurrent logic program |
| US5097407A (en) * | 1986-08-08 | 1992-03-17 | Integrated Inference Machines | Artificial intelligence processor |
| US4907151A (en) * | 1988-09-30 | 1990-03-06 | Digital Equipment Corporation | System and method for garbage collection with ambiguous roots |
| US5107457A (en) * | 1989-04-03 | 1992-04-21 | The Johns Hopkins University | Stack data cache having a stack management hardware with internal and external stack pointers and buffers for handling underflow and overflow stack |
| WO1991014986A1 (en) * | 1990-03-23 | 1991-10-03 | Eastman Kodak Company | Virtual memory management and allocation arrangement for digital data processing system |
| US5193180A (en) * | 1991-06-21 | 1993-03-09 | Pure Software Inc. | System for modifying relocatable object code files to monitor accesses to dynamically allocated memory |
| US5355483A (en) * | 1991-07-18 | 1994-10-11 | Next Computers | Asynchronous garbage collection |
| EP0606461B1 (en) * | 1992-07-24 | 1999-11-24 | Microsoft Corporation | Computer method and system for allocating and freeing memory |
| US5560003A (en) * | 1992-12-21 | 1996-09-24 | Iowa State University Research Foundation, Inc. | System and hardware module for incremental real time garbage collection and memory management |
| US5408650A (en) * | 1993-06-29 | 1995-04-18 | Digital Equipment Corporation | Memory analysis system for dynamically displaying memory allocation and de-allocation events associated with an application program |
| EP0637156B1 (en) * | 1993-07-30 | 2001-10-24 | Honeywell Inc. | Memory interface system using tag words |
| US5566321A (en) * | 1993-12-13 | 1996-10-15 | Cray Research, Inc. | Method of managing distributed memory within a massively parallel processing system |
| US5813031A (en) * | 1994-09-21 | 1998-09-22 | Industrial Technology Research Institute | Caching tag for a large scale cache computer memory system |
| US5636362A (en) * | 1994-09-28 | 1997-06-03 | Intel Corporation | Programmable high watermark in stack frame cache using second region as a storage if first region is full and an event having a predetermined minimum priority |
-
1997
- 1997-04-23 US US08/838,971 patent/US6101580A/en not_active Expired - Lifetime
-
1998
- 1998-04-23 JP JP10546328A patent/JP2000513854A/ja active Pending
- 1998-04-23 DE DE69802056T patent/DE69802056D1/de not_active Expired - Lifetime
- 1998-04-23 EP EP98919851A patent/EP0912942B1/en not_active Expired - Lifetime
- 1998-04-23 WO PCT/US1998/008163 patent/WO1998048354A1/en not_active Ceased
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US11687519B2 (en) | 2021-08-11 | 2023-06-27 | T-Mobile Usa, Inc. | Ensuring availability and integrity of a database across geographical regions |
| US12045226B2 (en) | 2021-08-11 | 2024-07-23 | T-Mobile Usa, Inc. | Ensuring availability and integrity of a database across geographical regions |
| US12411836B2 (en) | 2021-08-11 | 2025-09-09 | T-Mobile Usa, Inc. | Ensuring availability and integrity of a database across geographical regions |
Also Published As
| Publication number | Publication date |
|---|---|
| WO1998048354A1 (en) | 1998-10-29 |
| US6101580A (en) | 2000-08-08 |
| EP0912942B1 (en) | 2001-10-17 |
| EP0912942A1 (en) | 1999-05-06 |
| DE69802056D1 (de) | 2001-11-22 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP2000513854A (ja) | タグビットのスタック・キャッシュを用いて厳密なガーベッジ・コレクションを支援するための装置及びその方法 | |
| US5903899A (en) | System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks | |
| US5944815A (en) | Microprocessor configured to execute a prefetch instruction including an access count field defining an expected number of access | |
| KR101025354B1 (ko) | 가상 트랜잭션 메모리를 위한 글로벌 오버플로우 방법 | |
| US6295594B1 (en) | Dynamic memory allocation suitable for stride-based prefetching | |
| KR100334479B1 (ko) | 컴퓨터 처리 시스템에서 로드 동작의 순서 변경 방법 및 장치 | |
| US5893121A (en) | System and method for swapping blocks of tagged stack entries between a tagged stack cache and an untagged main memory storage | |
| JP3548616B2 (ja) | 情報処理装置 | |
| US7000072B1 (en) | Cache memory allocation method | |
| CN1196994C (zh) | 采用细粒度转换鉴别的方法和装置 | |
| US6456891B1 (en) | System and method for transparent handling of extended register states | |
| US6314513B1 (en) | Method and apparatus for transferring data between a register stack and a memory resource | |
| US5644746A (en) | Data processing apparatus with improved mechanism for executing register-to-register transfer instructions | |
| US6134633A (en) | Prefetch management in cache memory | |
| JP5120832B2 (ja) | 効率的かつ柔軟なメモリ・コピー動作 | |
| US7210026B2 (en) | Virtual register set expanding processor internal storage | |
| JPH0782438B2 (ja) | コンピュータ・システム | |
| JP2007172610A (ja) | 半同期メモリ・コピー動作において用いられるアドレス範囲の妥当性 | |
| JPH1196074A (ja) | 交換アルゴリズム動的選択コンピュータシステム | |
| KR100368166B1 (ko) | 컴퓨터 처리 시스템에서 스택 레퍼런스를 변경하는 방법 | |
| WO2018189511A1 (en) | Cache-based communication between execution threads of a data processing system | |
| US8473722B2 (en) | Processor architecture for exact pointer identification | |
| CA1160351A (en) | Virtual memory terminal | |
| EP0262301B1 (en) | Paging supervisor | |
| EP0101718B1 (en) | Computer with automatic mapping of memory contents into machine registers |