JP2004510249A - Javaアレイの低オーバーヘッド境界チェックのためのシステム及び方法 - Google Patents
Javaアレイの低オーバーヘッド境界チェックのためのシステム及び方法 Download PDFInfo
- Publication number
- JP2004510249A JP2004510249A JP2002530999A JP2002530999A JP2004510249A JP 2004510249 A JP2004510249 A JP 2004510249A JP 2002530999 A JP2002530999 A JP 2002530999A JP 2002530999 A JP2002530999 A JP 2002530999A JP 2004510249 A JP2004510249 A JP 2004510249A
- Authority
- JP
- Japan
- Prior art keywords
- array
- register
- value
- index
- maximum
- 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.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
ハードウェアをベースにした、Java環境におけるアレイ境界チェックを実行するためのアレイ境界チェック方法を開示する。現在のアレイアクセスコマンドの最初のマシンサイクル中に、アレイ基準値が、システム・データアドレスコントローラ及びアレイ境界チェッカーにロードされる。次に、現在のアレイアクセスコマンドの次のマシンサイクル中に、アレイインデックス値が、システム・データアドレスコントローラ及びアレイ境界チェッカーに書込まれる。また、現在のアレイアクセスコマンドの次のマシンサイクル中に、最大アレイインデックス値が、Javaアレイから読出され、かつアレイ境界チェッカーに書込まれる。アレイ境界チェッカーは、これらの値を用い、現在のアレイアクセスコマンドの有効性を決定する。そして、3番目のマシンサイクル中に、アレイ値が、メモリ内でアクセスされる。本発明においては、該アレイ値は、現在のアレイアクセスコマンドが有効である場合にのみアクセスされる。
Description
【0001】
(関連出願の引用)
本出願は、2000年5月4日にファイルされ、「JAVAスタック、演算論理ユニット及び複数のスタックポインタを有する統合サブシステムのためのアーキテクチャー、及びそれを用いるための方法」と題された米国特許出願第09/565,679号に関連するものであり、これ全体を本願明細書に援用する。
【0002】
また本出願は、「JAVAアクセラレーター環境における消費電力管理のためのシステム及び方法」と題された米国特許出願第09/645,468号(代理人番号PHILP336)に関連するものであり、これ全体を本願明細書に援用する。
【0003】
(発明の背景)
1.発明の分野
本発明は、Javaシステムの性能に関し、特に、低オーバーヘッドのJavaアレイ境界チェックのためのシステム及び方法に関する。
【0004】
2.背景技術
今日のコンピュータプログラミングの世界には、多数の高水準プログラミング言語がある。例えば、Javaは、比較的短期間のうちに広まり、インターネットの大成功をもたらした。Javaの人気は、少なくともその一部はそのプラットフォームの独立性、オブジェクト指向及びダイナミックな性質のおかげである。また、Javaは、メモリ管理及び複数のプラットフォームに対応した移植性を含む、アプリケーションプログラマーによって実行しなければならない、単調でエラーしやすい多数のタスクを除去する。このようにして、Javaプログラマーは、設計及び機能性により集中することができる。
【0005】
Javaアプリケーションを実行するために、Javaプロセッサが用いられ、該Javaプロセッサは、一般に、Java仮想マシン(JVM)の形態のソフトウェアによってのみ実行される。しかし、ソフトウェアにおけるプロセスを実行することに関連する問題のため、JVMは、遅い実行に悩まされる。さらに、JVMに対するJava認証を得るために要する一定のエラー強さは、従来のJVMが遭っていた遅い実行性を悪化させる。
【0006】
このようなエラー強さの一つは、アレイ境界チェックである。即ち、JVMに関して認証を得るために、境界チェックは、アレイがアクセスされる度に実行されなければならない。
【0007】
背景として、多くのJavaアプリケーションはアレイを用い、該アレイは、一次元又はそれ以上の次元における情報の配置、例えば、リスト、表、あるいは多次元のデータの配置である。Javaを用いてメモリ内でアレイが実行される度に、該アレイのサイズが、該アレイによって参照された何れかのデータと共に、メモリに記憶される。通常、Javaアレイサイズは、該アレイ内の先頭の要素として記憶される。
【0008】
例えば、Javaにおける100の要素のアレイは、アレイの先頭の要素として記憶された100の数を有する。即ち、データ記憶システムに制限のない必要な数の要素を保持するためには、Javaにおけるアレイは、通常、特定の数の要素を記憶するために必要な場合よりも大きい。
【0009】
上述したように、インストラクションはJVMによって解釈されるので、インタープリターにより実行されなければならない動作の一つは、アレイ境界チェックである。具体的には、JavaアレイがJavaアプリケーションによってアクセスされる度に、アレイ境界チェックが実行されなければならず、アレイがアクセスされる前に、該アレイのサイズをチェックし、アクセスしようとする要素が、該アレイの境界外でないことを確かめるということを確実にする。またアレイ基準自体もチェックされ、それが有効なアレイ基準であることを確実にする。
【0010】
アレイアクセスコマンドが、アレイの境界外の要素にアクセスしようとする場合には、例外が発生する。また、アレイアクセスコマンドが、無効なアレイ基準と共に試みられた場合には、例外が発生する。一般に、発生した例外は、例外が発生したときにメモリアクセスを禁止するように構成されている。
【0011】
アレイ境界チェックにより、アレイアクセスコマンドが、該アレイによって定義されたデータ要素のみへのアクセスを有するのでよりエラーに強いシステムが得られ、また隣接するデータへのアクセスは不可能であるので、より少ないバグとなり、改良されたシステムの安全性が得られる。しかし、通常、ステップごとに少なくとも1サイクル要する、アレイ境界チェックに必要な段階的な比較及び確認は、確認が発生するまでに、貴重な処理時間を消費する。
【0012】
従来、JVMは、ソフトウェア内で実施されてきたので、JAVAにおける境界チェックは、一般に、アレイがアクセスされる度に余計なマシンサイクルを追加するプロセスとなる。アレイ境界チェックのために使われるこの余計なマシンサイクルは、システムの処理効率を大幅に低減し、このことは、元々遅い、ソフトウェアをベースにした解釈プロセスをますます悪化させるだけである。
【0013】
上記したことを考慮して、改良されたアレイ境界チェック方法の必要性がある。該方法は、アレイ境界チェックに関連するオーバーヘッドを低減すべきであり、それによりアレイ情報を検索するのに要する時間及びアレイのサイズを確認するのに要する時間を、従来のシステムと比較して著しく低減する。
【0014】
(発明の要約)
概して、本発明は、アレイアクセスコマンドを実行するのに用いられる同じマシンサイクル中に、アレイ境界チェックを実行することによって、これらの要求を満たす。アレイアクセスコマンドと同時に、アレイ境界チェックを実行することによって、本発明のアレイ境界チェッカーは、従来アレイ境界チェックに関連していた追加的なオーバーヘッドを回避する。
【0015】
一つの実施の形態においては、ハードウェアをベースにした、Java環境におけるアレイ境界チェックを実行するアレイ境界チェック方法を開示する。現在のアレイアクセスコマンドの最初のマシンサイクル中に、アレイ基準値をシステム・データアドレスコントローラ及びアレイ境界チェッカーにロードする。次いで、現在のアレイアクセスコマンドの次のマシンサイクル中に、アレイインデックス値をシステム・データアドレスコントローラ及びアレイ境界チェッカーに書込む。また、現在のアレイアクセスコマンドの次のマシンサイクル中に、最大アレイインデックス値をアレイ境界チェッカーに書込む。アレイ境界チェッカーは、これらの値を用い、現在のアレイアクセスコマンドの有効性を決定する。そして、3番目のマシンサイクル中に、アレイ値が、メモリ内でアクセスされる。本発明においては、該アレイ値は、現在のアレイアクセスコマンドが有効である場合にのみアクセスされる。
【0016】
他の実施の形態においては、Java環境におけるアレイ境界チェックを実行するアレイ境界チェックシステムを開示する。該アレイ境界チェックシステムは、第1のアレイ基準レジスタと第1のアレイインデックスレジスタとを有するシステム・データアドレスコントローラを有する。さらに、アレイ境界チェックシステムは、第1のデータバス及び第2のデータバスを介してシステム・データアドレスコントローラに結合されたアレイ境界チェッカーを有する。該アレイ境界チェッカーは、第2のアレイ基準レジスタと、第2のアレイインデックスレジスタと、最大アレイインデックスレジスタとを有する。動作中には、第2のアレイインデックスレジスタ及び最大アレイインデックスレジスタは、第1のデータバス及び第2のデータバスを介して単一のマシンサイクル中にロードすることができ、これにより、アレイ境界チェックを実行する際にマシンサイクルをセーブする。
【0017】
ハードウェアをベースにした、Java環境におけるアレイ境界チェックを実行するための他のアレイ境界チェック方法を、本発明のさらに別の実施の形態に開示する。該方法は、第1のデータバスを介してアレイ基準レジスタに書込まれるアレイ基準値で始まる。そして、第1のデータバスを用いてアレイインデックス値をアレイインデックスレジスタにロードする。アレイインデックスレジスタがロードされるマシンサイクルと同じマシンサイクル中に、第2のデータバスを用いて最大アレイインデックス値を最大アレイインデックスレジスタにロードする。現在のアレイアクセスコマンドの有効性を決定するために、アレイ基準値とアレイインデックス値と最大アレイインデックス値とが解析される。
【0018】
有利には、本発明は、追加的なオーバーヘッドをシステムに付加することなく、アレイ境界チェックを実行できる。現時点のアレイアクセスと並行してアレイ境界チェックを実行することによって、本発明は、余分なマシンサイクルを要することなく、Javaアレイ境界チェック規約に従意、これによってJavaプロセッサの能力を大幅に高める。また、二重のデータバスを用いることによって、単一のマシンサイクル中に、複数のレジスタをロードすることができ、それによりJavaプロセッサの能力がさらに高まる。
【0019】
本発明のその他の態様及び効果は、本発明の原理を一例として図解した添付図面に照らし合わせて以下の詳細な説明から明らかになるであろう。
【0020】
本発明は、その別の効果と共に、添付図面に照らし合わせて以下の説明を参照することにより最も良く理解することができる。
【0021】
(好適な実施の形態の説明)
Java環境で使用するアレイ境界チェッカーの発明を開示する。本発明は、アレイを参照するのに用いられる同じマシンサイクル中に、アレイ境界チェックを実行することによって、余計な付加がないアレイ境界チェックを実行する。以下の説明においては、本発明の完全な理解を可能にするために、多数の特定の細部について記載する。しかし、当業者には、本発明がそれらの特定の細部のうちのいくつかまたは全てがなくとも実施することができることは明らかであろう。また、本発明を不必要に分かりにくくすることがないように、公知の処理工程については詳細に記載していない。
【0022】
本発明のアレイ境界チェッカーは、好ましくは、3段ハードウェアをベースとするJavaプロセッサに内蔵されている。次に、図1を参照して、一つの具体例としてのJavaプロセッサについて説明する。
【0023】
図1は、本発明の実施の形態に係る、アレイ境界チェッカー50を有するJavaプロセッサ10を示すブロック図である。Javaプロセッサ10は、インストラクションサブシステムと関連する3段パイプラインを有し、該3段パイプラインは、フェッチ段12と、デコード段14と、実行段16とを含む。フェッチ段12は、インストラクションキャッシュ17からマシンサイクルごとに1バイトコードフェッチし、1つずつプログラムカウンタ(PC)アドレスコントローラ18をインクリメントすることによりインストラクションを獲得する。必要に応じて、フェッチ段12は、複数のバイトコードを要する単一のJavaインストラクションを生成するために、複数のフェッチを実行する。
【0024】
そしてインストラクションはデコード段14を通過し、該デコード段はインストラクションを翻訳処理する。具体的には、デコード段14は、インストラクションを一つまたはそれ以上のマシンマイクロコードインストラクションにデコードし、これらのマシンマイクロコードインストラクションは、その後、実行段16により実行される。一般に、一つのマイクロコードインストラクションは、各マシンサイクルの初めに実行段16を通過する。
【0025】
最後のマイクロコードインストラクションが実行段16を通過した後、PCアドレスコントローラ18がアップデートされる。PCアドレスコントローラ18は、現在実行されているJavaインストラクションにおけるバイトコードの数にしたがってアップデートされる。
【0026】
実行段16の出力は、Javaプロセッサ10全体を回る制御信号を含む。さらに、実行段16の出力は、アドレスフィールドを含み、該アドレスフィールドは、Aデータバス24を利用してローカル可変メモリ20及び即時データフィールド22を回る。
【0027】
Javaプロセッサ10には、Aデータバス24とBデータバス26の2つのデータバスが含まれている。また、Javaプロセッサ10は、2つのデータサブシステムを含む。一方のデータサブシステムは、ローカル可変メモリ20と、実行中にJavaインストラクションによって用いられるスタック/ALUサブシステム28とを含む。他方のデータサブシステムは、システム・データキャッシュ30とアレイ境界チェッカー50とを含む。
【0028】
ローカル可変メモリ20は、高性能非同期SRAMを含み、該SRAMは、単一のポートであり、かつJavaプロセッサ10及び関連するホストプロセッサ(図示せず)の両方によりアクセス可能である。Javaプロセッサ10が演算中のとき、ホストプロセッサは、好ましくは、ローカル可変メモリ20からロックされる。マイクロコードインストラクションにおけるADR/16は、アドレスレジスタとして機能し、該ADR/16は、SRAMに提示される前に、マイクロコントロールに従って随意に一つだけインクリメントすることができる。該SRAMは、好ましくは、512×32ビットであり、かつデータ32ビットごとにアクセスできる。好ましくは、該SRAMの出力データポートは、Aバス24に結合されており、該SRAMの入力データポートは、Bデータバス26に結合されている。
【0029】
スタック/ALUサブシステム28もまたJavaプロセッサ10内に含まれている。スタック282は、好ましくは、レジスタファイルから構成され、かつ4つのバンク内に構成された、64 32ビットワイドワードを含み、各バンクは16ワード程度の深さである。スタック/ALUサブシステム28は、Aデータバス24から入力を得て、Bデータバス26に出力を供給する。算術演算が実行されている場合、ALU284は、適切なバンクからデータを読み出し、算術演算が終了し、かつその結果を上記適切なバンクに書込むまでWAIT信号を示す。
【0030】
システム・データキャッシュ30は、高性能ライトバック・キャッシュを含み、好ましくは、ライト・アロケートポリシーを実行し、新しいラインが書込みミスのために割当てられる。一般に、システム・データキャッシュ30は、Javaヒープ及び一定のプールに対する高性能の入口として用いられる。好ましくは、システム・データキャッシュ30は、8ビット及び16ビットアクセスのためのサポートを有する512×32ビットワイドメモリとして構成される。
【0031】
アレイアクセス中に、システム・データキャッシュ30は、アレイ境界チェッカー50と共に動作する。具体的には、アレイがアクセスされると、アレイの位置がスタック/ALUサブシステム28から検索され、システム・データアドレスコントローラ32に記憶される。アレイの位置は、アレイ基準の形で記憶され、該アレイ基準はアレイの基本アドレスである。アレイ基準を検索した後、アレイインデックスがスタック/ALUサブシステム28から検索され、システム・データアドレスコントローラ32に記憶される。そして、アレイ基準及びアレイインデックスによって特定された位置において、システム・データキャッシュコントローラ34を用いて、データがシステム・データキャッシュ30から読出され、あるいは、該キャッシュに書込まれる。
【0032】
アレイ境界チェッカー50は、アレイアクセス中に、上記の動作と同時に動作する。Aデータバス24及びBデータバス26の両方を用いて、アレイ境界チェッカー50は、各アレイアクセス中に、2種類のアレイ境界チェッックを行う。具体的には、アレイ境界チェッカー50は、NULLアレイ基準と、範囲外のアレイインデックスエラーとをチェックする。NULL基準は、アレイアクセスコマンドが、Javaアプリケーションによってまだ定義されていないアレイ基準によって試みられたときに発生する。範囲外のアレイインデックスエラーは、アレイアクセスコマンドが、最大アレイインデックス値よりも大きいアレイインデックスを用いて試みられたときに発生する。
【0033】
上記のエラーのいずれかが検知された場合、適切なエラー信号が生成され、該エラー信号は、アレイに対する書込みアクセスをブロックし、かつアレイに対する読出しアクセスを効果的に無視する。また、該エラー信号は、エラーの種類を識別するのに用いられる2つの値のうちの一つを用いて、制御/ステータスレジスタブロック36内の例外ステータスレジスタをアップデートする。エラー信号は、適切な値を選択し、それを制御/ステータスレジスタブロック36内の例外ステータスレジスタにラッチし、例外信号がホストプロセッサに送られる。そしてJavaプロセッサ10は、停止する。
【0034】
図2は、本発明の実施の形態に係る、システムメモリ及びアレイ境界チェッカーサブシステム100を示すブロック図である。システムメモリ及びアレイ境界チェッカーサブシステム100は、システム・データキャッシュ30、システム・データアドレスコントローラ32、システム・データキャッシュコントローラ34及びアレイ境界チェッカー50に結合されたAデータバス24とBデータバス26とを含む。
【0035】
システム・データアドレスコントローラ32は、ヒープベースレジスタ102、アレイ基準レジスタ104及びアレイインデックスレジスタ106を有する。動作時において、アレイアクセスコマンドが実行された場合、ホストプロセッサは、一般に、ヒープベースレジスタ102を既にロードしており、該ヒープへのアクセスを可能にする。そして、Bデータバス26は、アレイ基準値を、システム・データアドレスコントローラ32のアレイ基準レジスタ104内にロードするために用いられる。上述したように、アレイ基準値は、Bデータバス26を用いて、スタック/ALUサブシステム28から得られる。
【0036】
次に、アレイインデックス値が、アレイインデックスレジスタ106にロードされる。アレイ基準値と同様に、アレイインデックス値は、Bデータバス26を用いて、スタック/ALUサブシステムから得られる。そして、アレイ基準レジスタ102に記憶されたアレイ基準値と、アレイインデックスレジスタ106に記憶されたアレイインデックス値とは、システム・データキャッシュコントローラ34を介してシステムデータキャッシュ30に記憶されたアレイデータにアクセスするために用いられる。
【0037】
一般に、上記の動作は、3つのマシンサイクルを用いて実行する。それらの3つのマシンサイクル中、アレイ境界チェッカー50は、システム・データアドレスコントローラ32と同時に動作して、アレイ境界チェックを実行する。
【0038】
アレイ境界チェッカー50は、アレイ基準レジスタ108、アレイインデックスレジスタ110及び最大アレイインデックスレジスタ112を有する。第1のコンパレータ114は、アレイ基準レジスタ108及びNULL値117に結合されており、第2のコンパレータ116は、アレイインデックスレジスタ110及び最大アレイインデックスレジスタ112に結合されている。第1のコンパレータ114の出力は、NULL基準信号118をシステムに供給し、第2のコンパレータ116の出力は、範囲外のインデックス信号120を供給する。
【0039】
アレイアクセスに用いられる3つのマシンサイクルのうちの最初のマシンサイクル中に、アレイ基準レジスタ108がロードされる。アレイ基準値がスタック/ALUサブシステムから読出されると、それが、Bデータバス26を用いて、アレイ境界チェッカー50のアレイ基準レジスタ108へ供給される。図2を見て分かるように、Bデータバス26は、システム・データアドレスコントローラ32にも結合されている。従って、最初のマシンサイクル中に、アレイ基準値は、Bデータバス26を用いてシステム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方に供給される。
【0040】
アレイ境界チェッカー50のアレイ基準レジスタ108内にアレイ基準値が得られると、第1のコンパレータ114は、アレイ基準値とNULL値117とを比較するのに用いられる。アレイ基準レジスタ108内に記憶されたアレイ基準値がNULL値117と等しい場合には、NULL基準信号118は第1のコンパレータ114により示される。
【0041】
アレイインデックスレジスタ110及び最大アレイインデックスレジスタ112は、アレイにアクセスするのに用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中にロードされる。アレイ基準値と同様に、アレイインデックス値は、スタック/ALUサブシステムから読出され、Bデータバス26を用いて、アレイ境界チェッカー50のアレイインデックスレジスタ110へ供給される。アレイ基準値の場合と同様に、アレイインデックス値は、システム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方にBデータバス26を用いて供給され、該データバスは、両システムに結合されている。
【0042】
アレイインデックス値に加えて、最大アレイインデックス値が、2番目のマシンサイクル中に、アレイ境界チェッカー50に供給される。最大アレイインデックス値は、アレイから読み出され、Aデータバス24を用いてアレイ境界チェッカー50の最大アレイインデックスレジスタ112に記憶される。上述したように、Java言語における全てのアレイは、一般にアレイのデータと共に、アレイのサイズを記憶する。境界チェッカー50は、このアレイサイズ値を最大アレイインデックス値として利用する。
【0043】
本発明のアレイ境界チェッカー50は、2つのデータバス、即ち、Aデータバス24及びBデータバス26があるので、同じマシンサイクル中に、アレイインデックスレジスタ110及び最大アレイインデックスレジスタ112の両方をロードすることが可能であることに注意すべきである。即ち、Aデータバス24は、最大アレイインデックスレジスタ112をロードするのに用いられ、Bデータバスは、最大アレイインデックスレジスタ112と同時に、アレイインデックスレジスタ110をロードするのに用いられる。
【0044】
アレイインデックス値及び最大アレイインデックス値が得られると、第2のコンパレータ116は、アレイインデックスレジスタ110に記憶されたアレイインデックス値と、最大アレイインデックスレジスタ112に記憶された最大アレイインデックス値とを比較する。アレイインデックス値が最大アレイインデックス値よりも大きい場合には、第2のコンパレータ116は、範囲外のインデックス信号120を示す。
【0045】
このようにして、本発明のアレイ境界チェッカー50は、余計なマシンサイクルを用いることなく、アレイ境界チェックを実行する。本発明は、境界チェッカー50が、システム・データアドレスコントローラ32によって用いられるのと同じマシンサイクルを利用してアレイ値を実際にロードするので、このように動作することができる。より具体的には、本発明のアレイ境界チェッカー50は、アレイにアクセスするのに必要な3つのマシンサイクルのうちの最初と2番目のマシンサイクルを用いて、アレイ境界チェックを実行する。エラーの場合、アレイ境界チェッカー50は、図3を参照して以下に詳細に説明するように、アレイ信号エラー信号118及び120を示し、これらの信号は、アレイアクセスをブロックまたは無視する。
【0046】
図3は、本発明の実施の形態に係る、アレイ境界チェックを実行するための方法200を示すフローチャートである。初期動作202において、プロセス動作が実行される。該プロセス動作は、アレイアクセスコマンドのフェッチ及びデコードを及び当業者には明らかなその他のプロセス動作を含む。
【0047】
アレイ基準値動作204において、アレイ基準値が、アレイにアクセスするのに必要な3つのマシンサイクルのうちの最初のマシンサイクル中に、システム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方にロードされる。上述したように、アレイ基準値は、アレイアクセスが実行された時間によって、スタック/ALUサブシステム28に記憶される。このアレイ基準値は、その後スタック/ALUサブシステム28から読出され、Bデータバス26を用いてシステム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方に供給される。
【0048】
図4は、本発明の実施の形態に係る、アレイ値にアクセスするために用いられる3つのマシンサイクルのうちの最初のマシンサイクル300を示すタイミング図である。最初のマシンサイクル300中に、32ビットアレイ基準値が、「先頭−1」の位置におけるスタックから読出され、Bデータバス26上に配置される。図4に示すように、アレイ基準値は、最初のマシンサイクル300の先頭端部302におけるスタックから読出される。
【0049】
そして、アレイ基準値は、最初のマシンサイクル300の立ち下がり縁部304において、システム・データアドレスコントローラ内のアレイ基準レジスタ及びアレイ境界チェッカー50内のアレイ基準レジスタ108両方に書込まれる。従って、システム・データアドレスコントローラ32内のアレイ基準レジスタ104をロードするのに必要な同じ信号が、アレイ境界チェッカー50内のアレイ基準レジスタ108のロードも同時に実行する。
【0050】
その後、システム・データアドレスコントローラ32内のアレイ基準レジスタ104及びアレイ境界チェッカー50内のアレイ基準レジスタ108は、要求されたアレイの最初の位置を指すアドレスを含む。そして、アレイ境界チェッカー50は、アレイ基準値をNULL値と比較することによってその有効性をチェックし、アレイ基準値がNULLの場合にはNULL基準信号を生成する。
【0051】
図3に戻って、アレイインデックス値動作206において、アレイインデックス値は、アレイにアクセスするのに必要な3つのマシンサイクルのうちの2番目のマシンサイクル中に、システム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方にロードされる。アレイ基準値と同様に、アレイインデックス値は、スタック/ALUサブシステム28に記憶される。アレイインデックス値は、スタック/ALUサブシステム28から読み出され、Bデータバス26を用いてシステム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方に供給される。
【0052】
図5Aは、本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中のBデータバス信号を示すタイミング図400である。2番目のマシンサイクル400中に、32ビットのアレイインデックス値は、「先頭」位置におけるスタックから読出され、Bデータバス26上に配置される。図5Aに示すように、アレイインデックス値は、2番目のマシンサイクル400の先頭端部402におけるスタックから読出される。
【0053】
そして、アレイインデックス値は、2番目のマシンサイクル400の立ち上がり縁部404において、システム・データアドレスコントローラ32内のアレイインデックスレジスタ106及びアレイ境界チェッカー50内のアレイインデックスレジスタ110の両方に書込まれる。
【0054】
その後、システム・データアドレスコントローラ32内のアレイインデックスレジスタ106及びアレイ境界チェッカー50内のアレイインデックスレジスタ110の両者は、アレイ内の要求されたデータを指し示すインデックス値を含む。
【0055】
再び図3に戻って、最大アレイインデックス値は、最大インデックス値動作208において、2番目のマシンサイクル中システム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方にロードされる。Java言語におけるアレイの最初の位置は、アレイが保持できる要素の数を含み、該数は最大アレイインデックス値である。システム・データアドレスコントローラ32内のアレイ基準レジスタ104は、このアドレスを含み、かつ直前のマシンサイクル中にロードされたので、システム・データアドレスコントローラ32内のアレイ基準レジスタ104は、最大アレイインデックス値を得るために用いられ、バスA24を用いて、それをアレイ境界チェッカー50に供給する。
【0056】
図5Bは、本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中のAデータバス信号を示すタイミング図450である。2番目のマシンサイクル450中に、最大アレイインデックス値は、システム・データキャッシュ30から読出され、Aデータバス24上に配置される。図5Bに示すように、最大アレイインデックス値は、2番目のマシンサイクル450の先頭端部452において、システム・データキャッシュ30から読出され、2番目のマシンサイクル450の立ち上がり縁部454において、アレイ境界チェッカー50内の最大アレイインデックスレジスタ112に書込まれる。
【0057】
従って、2番目のマシンサイクル400、450は、Aデータバス及びBデータバス上にトラフィックを生成させる。本発明は、2つのデータバスを用いるので、アレイ境界チェッカー50内のアレイインデックスレジスタ110及び最大アレイインデックスレジスタ112は、同じマシンサイクル、即ち、2番目のマシンサイクル400、450中にロードできる。アレイインデックス値及び最大アレイインデックス値の両方をアレイ境界チェッカー50にロードすると、アレイ境界チェッカー50は、アレイインデックス値が最大アレイインデックス値よりも大きいか否かを計算することによって、アレイインデックスの有効性をチェックする。アレイ境界チェッカーは、アレイインデックス値が最大アレイインデックス値よりも大きい場合、範囲外のインデックス信号120を示す。
【0058】
図3に戻って、アレイ値は、アレイ値動作210において、アレイにアクセスするのに用いられる3つのマシンサイクルのうちの3番目のマシンサイクル中に、メモリ内でアクセスされる。一般に、アレイ値は、この動作中に、システム・データアドレスコントローラ32を用いて、システム・データキャッシュ30内でアクセスされる。
【0059】
図6は、本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの3番目のマシンサイクル500を示すタイミング図である。3番目のマシンサイクル500中に、アレイ値は、システム・データキャッシュ30から読出され、Aデータバス24上に配置される。図6に示すように、アレイ値は、3番目のマシンサイクル500の先頭部502において、システム・データキャッシュ30から読出される。そしてアレイ値は、3番目のマシンサイクル500の立ち上がり縁部504において、スタックに書込まれる。
【0060】
上述したように、アレイ境界チェックは、アレイ値にアクセスするのに必要な前の2つのマシンサイクル、即ち、最初及び2番目のマシンサイクル中に既に実行されている。NULL基準信号118又は範囲外のインデックス信号120のいずれかが示されていた場合、例外がホストプロセッサに送られ、好ましくはアレイ値がアクセスされる前に、Javaプロセッサ10が停止される。
【0061】
図3に戻って、方法200は、動作212において終了し、ポストプロセス動作が実行される。ポストプロセス動作は、次のJavaインストラクション、および当業者には明らかなその他のポストプロセス動作をフェッチ及びデコードすることを含む。有利には、アレイアクセスと同時に境界チェックを実行することによって、本発明は、余計なオーバーヘッドなしで速いJavaアレイ境界チェックを実行できる。
【0062】
図7は、本発明の実施の形態に係る、Javaアレイの境界チェックを実行するための方法600を示すフローチャートである。最初の動作602において、プリプロセス動作が実行される。プリプロセス動作は、アレイアクセスコマンド、および当業者には明らかなその他のプリプロセス動作をフェッチ及びデコードすることを含む。
【0063】
アレイ基準動作604において、アレイ基準は、スタックから読出される。上述したように、アレイ基準値は、アレイアクセスが実行された時間によってスタック/ALUサブシステム28に記憶される。この値は、スタックから読出され、Bデータバス26を用いてアレイ境界チェッカー50に供給される。具体的には、最初のマシンサイクル中に、32ビットアレイ基準値が、「先頭−1」の位置においてスタックから読出され、Bデータバス26上に配置される。そして、アレイ基準値は、最初のマシンサイクル中に、システム・データアドレスコントローラ32内のアレイ基準レジスタ104及びアレイ境界チェッカー50内のアレイ基準レジスタ108の両方に書込まれる。
【0064】
動作606において、アレイ基準値がNULLであるか否かについて決定がなされる。NULLアレイ基準値は、一般に、未定義のアレイのアレイアクセスに起因する。アレイ基準値がNULLに等しい場合、プロセス600は、NULL基準動作608を継続する。しかし、アレイ基準値がNULLと等しくない場合には、プロセス600はアレイインデックス動作610を継続する。
【0065】
NULL基準動作608中に、NULL基準信号が示され、該NULL基準信号は、エラーが検出されていることをシステムに知らせる。NULL基準が使われているか否かを決定するために、アレイ境界チェッカー50内の第1のコンパレータ114は、アレイ境界チェッカー50のアレイ基準レジスタ108に記憶されたアレイ基準値をNULL値117と比較する。アレイ基準値がNULLと等しい場合には、NULL基準信号118が示される。その後、動作618において、方法600が終了し、Javaプロセッサ10が停止する。
【0066】
アレイインデックス動作610において、アレイインデックス値が、スタックから読出される。アレイ基準値と同様に、アレイインデックス値は、スタック/ALUサブシステム28に記憶される。アレイインデックス値は、スタック/ALUサブシステム28から読出され、Bデータバス26を用いてアレイ境界チェッカー50に供給される。具体的には、2番目のマシンサイクル中に、32ビットアレイインデックス値が、「先頭」位置におけるスタックから読出され、Bデータバス26上に配置される。その後、アレイインデックス値は、2番目のマシンサイクル中に、システム・データアドレスコントローラ32内のアレイインデックスレジスタ106及びアレイ境界チェッカー50内のアレイインデックスレジスタ110の両方に書込まれる。
【0067】
最大アレイインデックス値は、最大アレイインデックス動作612において、システム・データキャッシュ30から読出される。上述したように、Java言語におけるアレイの最初の位置は、アレイが保持できる要素の数を含み、該要素の数は最大アレイインデックス値である。システム・データアドレスコントローラ32内のアレイ基準レジスタ104はこのアドレスを含み、かつ直前のマシンサイクル中にロードされるので、システム・データアドレスコントローラ32内のアレイ基準レジスタ104は、最大アレイインデックス値を得るのに用いられ、かつそれをバスA24を用いてアレイ境界チェッカー50へ供給する。
【0068】
即ち、2番目のマシンサイクル中に、最大アレイインデックス値は、システム・データキャッシュ30から読み出され、Aデータバス24上に配置される。最大アレイインデックス値は、2番目のマシンサイクル中に、アレイ境界チェッカー50内の最大アレイインデックスレジスタ112にも書込まれる。
【0069】
本発明は、2つのデータバスを用いるので、アレイ境界チェッカー内のアレイインデックスレジスタ及び最大アレイインデックスレジスタは、同じマシンサイクル、即ち、2番目のマシンサイクル中に、ロードすることができる。
【0070】
動作614において、アレイインデックス値が最大アレイインデックス値よりも大きいか否かについて、決定がなされる。アレイインデックス値は、一般に、Javaプログラムが、規定されたアレイの境界内にないインデックス値を有するアレイにアクセスしようとする場合に、最大アレイインデックス値よりも大きい。従って、アレイインデックス値が最大アレイインデックス値よりも大きい場合、方法600は、範囲外のエラー動作616を継続する。さもなければ、方法600は、動作618で終了する。
【0071】
範囲外信号120は、範囲外エラー動作616において示される。アレイインデックス値及び最大アレイインデックス値の両方をアレイ境界チェッカー50にロードすると、アレイ境界チェッカー50は、アレイインデックスの有効性をチェックする。
【0072】
アレイインデックス値の有効性を決定するために、アレイ境界チェッカー50内の第2のコンパレータ116は、アレイインデックス値を最大アレイインデックス値と比較し、アレイインデックス値が最大アレイインデックス値よりも大きい場合には、範囲外のインデックス信号120を示す。その後、動作618において、方法600は終了し、Javaプロセッサは停止する。
【0073】
動作618において、方法600は停止し、ポストプロセス動作が実行される。ポストプロセス動作は、Javaプロセッサ10を停止すること、Javaアプリケーションの連続解釈、および当業者には明らかなその他のポストプロセス動作を含む。特に、Javaプロセッサ10は、動作618が、NULL基準動作608あるいは範囲外のインデックスエラー動作616のいずれかから来た場合には、停止する。さもなければ、Javaプロセッサ10は、Javaアプリケーションが終了するまで、即ち制御がホストプロセッサに戻るポイントにおいて、Javaインストラクションを解釈することを継続する。
【0074】
本発明を、理解を明白にするために、いくつかの詳説において説明してきたが、請求項の範囲内で、変形、変更が実施可能であることは明らかである。従って、本願の実施の形態は、実例として考慮すべきであり、かつ限定されるものではなく、また本発明は、本願明細書に示された詳説に限定されるものではなく、請求項の範囲内で変更することができる。
【図面の簡単な説明】
【図1】
本発明の実施の形態に係る、アレイ境界チェッカーを有するJavaプロセッサを示すブロック図である。
【図2】
本発明の実施の形態に係る、システムメモリ及びアレイ境界チェッカーサブシステムを示すブロック図である。
【図3】
本発明の実施の形態に係る、アレイ境界チェックを実行するための方法を示すフローチャートである。
【図4】
本発明の実施の形態に係る、アレイ値にアクセスするために用いられる3つのマシンサイクルのうちの最初のマシンサイクルを示すタイミング図である。
【図5A】
本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中のBデータバス信号を示すタイミング図である。
【図5B】
本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中のAデータバス信号を示すタイミング図である。
【図6】
本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの3番目のマシンサイクルを示すタイミング図である。
【図7】
本発明の実施の形態に係る、Javaアレイの境界チェックを実行するための方法を示すフローチャートである。
(関連出願の引用)
本出願は、2000年5月4日にファイルされ、「JAVAスタック、演算論理ユニット及び複数のスタックポインタを有する統合サブシステムのためのアーキテクチャー、及びそれを用いるための方法」と題された米国特許出願第09/565,679号に関連するものであり、これ全体を本願明細書に援用する。
【0002】
また本出願は、「JAVAアクセラレーター環境における消費電力管理のためのシステム及び方法」と題された米国特許出願第09/645,468号(代理人番号PHILP336)に関連するものであり、これ全体を本願明細書に援用する。
【0003】
(発明の背景)
1.発明の分野
本発明は、Javaシステムの性能に関し、特に、低オーバーヘッドのJavaアレイ境界チェックのためのシステム及び方法に関する。
【0004】
2.背景技術
今日のコンピュータプログラミングの世界には、多数の高水準プログラミング言語がある。例えば、Javaは、比較的短期間のうちに広まり、インターネットの大成功をもたらした。Javaの人気は、少なくともその一部はそのプラットフォームの独立性、オブジェクト指向及びダイナミックな性質のおかげである。また、Javaは、メモリ管理及び複数のプラットフォームに対応した移植性を含む、アプリケーションプログラマーによって実行しなければならない、単調でエラーしやすい多数のタスクを除去する。このようにして、Javaプログラマーは、設計及び機能性により集中することができる。
【0005】
Javaアプリケーションを実行するために、Javaプロセッサが用いられ、該Javaプロセッサは、一般に、Java仮想マシン(JVM)の形態のソフトウェアによってのみ実行される。しかし、ソフトウェアにおけるプロセスを実行することに関連する問題のため、JVMは、遅い実行に悩まされる。さらに、JVMに対するJava認証を得るために要する一定のエラー強さは、従来のJVMが遭っていた遅い実行性を悪化させる。
【0006】
このようなエラー強さの一つは、アレイ境界チェックである。即ち、JVMに関して認証を得るために、境界チェックは、アレイがアクセスされる度に実行されなければならない。
【0007】
背景として、多くのJavaアプリケーションはアレイを用い、該アレイは、一次元又はそれ以上の次元における情報の配置、例えば、リスト、表、あるいは多次元のデータの配置である。Javaを用いてメモリ内でアレイが実行される度に、該アレイのサイズが、該アレイによって参照された何れかのデータと共に、メモリに記憶される。通常、Javaアレイサイズは、該アレイ内の先頭の要素として記憶される。
【0008】
例えば、Javaにおける100の要素のアレイは、アレイの先頭の要素として記憶された100の数を有する。即ち、データ記憶システムに制限のない必要な数の要素を保持するためには、Javaにおけるアレイは、通常、特定の数の要素を記憶するために必要な場合よりも大きい。
【0009】
上述したように、インストラクションはJVMによって解釈されるので、インタープリターにより実行されなければならない動作の一つは、アレイ境界チェックである。具体的には、JavaアレイがJavaアプリケーションによってアクセスされる度に、アレイ境界チェックが実行されなければならず、アレイがアクセスされる前に、該アレイのサイズをチェックし、アクセスしようとする要素が、該アレイの境界外でないことを確かめるということを確実にする。またアレイ基準自体もチェックされ、それが有効なアレイ基準であることを確実にする。
【0010】
アレイアクセスコマンドが、アレイの境界外の要素にアクセスしようとする場合には、例外が発生する。また、アレイアクセスコマンドが、無効なアレイ基準と共に試みられた場合には、例外が発生する。一般に、発生した例外は、例外が発生したときにメモリアクセスを禁止するように構成されている。
【0011】
アレイ境界チェックにより、アレイアクセスコマンドが、該アレイによって定義されたデータ要素のみへのアクセスを有するのでよりエラーに強いシステムが得られ、また隣接するデータへのアクセスは不可能であるので、より少ないバグとなり、改良されたシステムの安全性が得られる。しかし、通常、ステップごとに少なくとも1サイクル要する、アレイ境界チェックに必要な段階的な比較及び確認は、確認が発生するまでに、貴重な処理時間を消費する。
【0012】
従来、JVMは、ソフトウェア内で実施されてきたので、JAVAにおける境界チェックは、一般に、アレイがアクセスされる度に余計なマシンサイクルを追加するプロセスとなる。アレイ境界チェックのために使われるこの余計なマシンサイクルは、システムの処理効率を大幅に低減し、このことは、元々遅い、ソフトウェアをベースにした解釈プロセスをますます悪化させるだけである。
【0013】
上記したことを考慮して、改良されたアレイ境界チェック方法の必要性がある。該方法は、アレイ境界チェックに関連するオーバーヘッドを低減すべきであり、それによりアレイ情報を検索するのに要する時間及びアレイのサイズを確認するのに要する時間を、従来のシステムと比較して著しく低減する。
【0014】
(発明の要約)
概して、本発明は、アレイアクセスコマンドを実行するのに用いられる同じマシンサイクル中に、アレイ境界チェックを実行することによって、これらの要求を満たす。アレイアクセスコマンドと同時に、アレイ境界チェックを実行することによって、本発明のアレイ境界チェッカーは、従来アレイ境界チェックに関連していた追加的なオーバーヘッドを回避する。
【0015】
一つの実施の形態においては、ハードウェアをベースにした、Java環境におけるアレイ境界チェックを実行するアレイ境界チェック方法を開示する。現在のアレイアクセスコマンドの最初のマシンサイクル中に、アレイ基準値をシステム・データアドレスコントローラ及びアレイ境界チェッカーにロードする。次いで、現在のアレイアクセスコマンドの次のマシンサイクル中に、アレイインデックス値をシステム・データアドレスコントローラ及びアレイ境界チェッカーに書込む。また、現在のアレイアクセスコマンドの次のマシンサイクル中に、最大アレイインデックス値をアレイ境界チェッカーに書込む。アレイ境界チェッカーは、これらの値を用い、現在のアレイアクセスコマンドの有効性を決定する。そして、3番目のマシンサイクル中に、アレイ値が、メモリ内でアクセスされる。本発明においては、該アレイ値は、現在のアレイアクセスコマンドが有効である場合にのみアクセスされる。
【0016】
他の実施の形態においては、Java環境におけるアレイ境界チェックを実行するアレイ境界チェックシステムを開示する。該アレイ境界チェックシステムは、第1のアレイ基準レジスタと第1のアレイインデックスレジスタとを有するシステム・データアドレスコントローラを有する。さらに、アレイ境界チェックシステムは、第1のデータバス及び第2のデータバスを介してシステム・データアドレスコントローラに結合されたアレイ境界チェッカーを有する。該アレイ境界チェッカーは、第2のアレイ基準レジスタと、第2のアレイインデックスレジスタと、最大アレイインデックスレジスタとを有する。動作中には、第2のアレイインデックスレジスタ及び最大アレイインデックスレジスタは、第1のデータバス及び第2のデータバスを介して単一のマシンサイクル中にロードすることができ、これにより、アレイ境界チェックを実行する際にマシンサイクルをセーブする。
【0017】
ハードウェアをベースにした、Java環境におけるアレイ境界チェックを実行するための他のアレイ境界チェック方法を、本発明のさらに別の実施の形態に開示する。該方法は、第1のデータバスを介してアレイ基準レジスタに書込まれるアレイ基準値で始まる。そして、第1のデータバスを用いてアレイインデックス値をアレイインデックスレジスタにロードする。アレイインデックスレジスタがロードされるマシンサイクルと同じマシンサイクル中に、第2のデータバスを用いて最大アレイインデックス値を最大アレイインデックスレジスタにロードする。現在のアレイアクセスコマンドの有効性を決定するために、アレイ基準値とアレイインデックス値と最大アレイインデックス値とが解析される。
【0018】
有利には、本発明は、追加的なオーバーヘッドをシステムに付加することなく、アレイ境界チェックを実行できる。現時点のアレイアクセスと並行してアレイ境界チェックを実行することによって、本発明は、余分なマシンサイクルを要することなく、Javaアレイ境界チェック規約に従意、これによってJavaプロセッサの能力を大幅に高める。また、二重のデータバスを用いることによって、単一のマシンサイクル中に、複数のレジスタをロードすることができ、それによりJavaプロセッサの能力がさらに高まる。
【0019】
本発明のその他の態様及び効果は、本発明の原理を一例として図解した添付図面に照らし合わせて以下の詳細な説明から明らかになるであろう。
【0020】
本発明は、その別の効果と共に、添付図面に照らし合わせて以下の説明を参照することにより最も良く理解することができる。
【0021】
(好適な実施の形態の説明)
Java環境で使用するアレイ境界チェッカーの発明を開示する。本発明は、アレイを参照するのに用いられる同じマシンサイクル中に、アレイ境界チェックを実行することによって、余計な付加がないアレイ境界チェックを実行する。以下の説明においては、本発明の完全な理解を可能にするために、多数の特定の細部について記載する。しかし、当業者には、本発明がそれらの特定の細部のうちのいくつかまたは全てがなくとも実施することができることは明らかであろう。また、本発明を不必要に分かりにくくすることがないように、公知の処理工程については詳細に記載していない。
【0022】
本発明のアレイ境界チェッカーは、好ましくは、3段ハードウェアをベースとするJavaプロセッサに内蔵されている。次に、図1を参照して、一つの具体例としてのJavaプロセッサについて説明する。
【0023】
図1は、本発明の実施の形態に係る、アレイ境界チェッカー50を有するJavaプロセッサ10を示すブロック図である。Javaプロセッサ10は、インストラクションサブシステムと関連する3段パイプラインを有し、該3段パイプラインは、フェッチ段12と、デコード段14と、実行段16とを含む。フェッチ段12は、インストラクションキャッシュ17からマシンサイクルごとに1バイトコードフェッチし、1つずつプログラムカウンタ(PC)アドレスコントローラ18をインクリメントすることによりインストラクションを獲得する。必要に応じて、フェッチ段12は、複数のバイトコードを要する単一のJavaインストラクションを生成するために、複数のフェッチを実行する。
【0024】
そしてインストラクションはデコード段14を通過し、該デコード段はインストラクションを翻訳処理する。具体的には、デコード段14は、インストラクションを一つまたはそれ以上のマシンマイクロコードインストラクションにデコードし、これらのマシンマイクロコードインストラクションは、その後、実行段16により実行される。一般に、一つのマイクロコードインストラクションは、各マシンサイクルの初めに実行段16を通過する。
【0025】
最後のマイクロコードインストラクションが実行段16を通過した後、PCアドレスコントローラ18がアップデートされる。PCアドレスコントローラ18は、現在実行されているJavaインストラクションにおけるバイトコードの数にしたがってアップデートされる。
【0026】
実行段16の出力は、Javaプロセッサ10全体を回る制御信号を含む。さらに、実行段16の出力は、アドレスフィールドを含み、該アドレスフィールドは、Aデータバス24を利用してローカル可変メモリ20及び即時データフィールド22を回る。
【0027】
Javaプロセッサ10には、Aデータバス24とBデータバス26の2つのデータバスが含まれている。また、Javaプロセッサ10は、2つのデータサブシステムを含む。一方のデータサブシステムは、ローカル可変メモリ20と、実行中にJavaインストラクションによって用いられるスタック/ALUサブシステム28とを含む。他方のデータサブシステムは、システム・データキャッシュ30とアレイ境界チェッカー50とを含む。
【0028】
ローカル可変メモリ20は、高性能非同期SRAMを含み、該SRAMは、単一のポートであり、かつJavaプロセッサ10及び関連するホストプロセッサ(図示せず)の両方によりアクセス可能である。Javaプロセッサ10が演算中のとき、ホストプロセッサは、好ましくは、ローカル可変メモリ20からロックされる。マイクロコードインストラクションにおけるADR/16は、アドレスレジスタとして機能し、該ADR/16は、SRAMに提示される前に、マイクロコントロールに従って随意に一つだけインクリメントすることができる。該SRAMは、好ましくは、512×32ビットであり、かつデータ32ビットごとにアクセスできる。好ましくは、該SRAMの出力データポートは、Aバス24に結合されており、該SRAMの入力データポートは、Bデータバス26に結合されている。
【0029】
スタック/ALUサブシステム28もまたJavaプロセッサ10内に含まれている。スタック282は、好ましくは、レジスタファイルから構成され、かつ4つのバンク内に構成された、64 32ビットワイドワードを含み、各バンクは16ワード程度の深さである。スタック/ALUサブシステム28は、Aデータバス24から入力を得て、Bデータバス26に出力を供給する。算術演算が実行されている場合、ALU284は、適切なバンクからデータを読み出し、算術演算が終了し、かつその結果を上記適切なバンクに書込むまでWAIT信号を示す。
【0030】
システム・データキャッシュ30は、高性能ライトバック・キャッシュを含み、好ましくは、ライト・アロケートポリシーを実行し、新しいラインが書込みミスのために割当てられる。一般に、システム・データキャッシュ30は、Javaヒープ及び一定のプールに対する高性能の入口として用いられる。好ましくは、システム・データキャッシュ30は、8ビット及び16ビットアクセスのためのサポートを有する512×32ビットワイドメモリとして構成される。
【0031】
アレイアクセス中に、システム・データキャッシュ30は、アレイ境界チェッカー50と共に動作する。具体的には、アレイがアクセスされると、アレイの位置がスタック/ALUサブシステム28から検索され、システム・データアドレスコントローラ32に記憶される。アレイの位置は、アレイ基準の形で記憶され、該アレイ基準はアレイの基本アドレスである。アレイ基準を検索した後、アレイインデックスがスタック/ALUサブシステム28から検索され、システム・データアドレスコントローラ32に記憶される。そして、アレイ基準及びアレイインデックスによって特定された位置において、システム・データキャッシュコントローラ34を用いて、データがシステム・データキャッシュ30から読出され、あるいは、該キャッシュに書込まれる。
【0032】
アレイ境界チェッカー50は、アレイアクセス中に、上記の動作と同時に動作する。Aデータバス24及びBデータバス26の両方を用いて、アレイ境界チェッカー50は、各アレイアクセス中に、2種類のアレイ境界チェッックを行う。具体的には、アレイ境界チェッカー50は、NULLアレイ基準と、範囲外のアレイインデックスエラーとをチェックする。NULL基準は、アレイアクセスコマンドが、Javaアプリケーションによってまだ定義されていないアレイ基準によって試みられたときに発生する。範囲外のアレイインデックスエラーは、アレイアクセスコマンドが、最大アレイインデックス値よりも大きいアレイインデックスを用いて試みられたときに発生する。
【0033】
上記のエラーのいずれかが検知された場合、適切なエラー信号が生成され、該エラー信号は、アレイに対する書込みアクセスをブロックし、かつアレイに対する読出しアクセスを効果的に無視する。また、該エラー信号は、エラーの種類を識別するのに用いられる2つの値のうちの一つを用いて、制御/ステータスレジスタブロック36内の例外ステータスレジスタをアップデートする。エラー信号は、適切な値を選択し、それを制御/ステータスレジスタブロック36内の例外ステータスレジスタにラッチし、例外信号がホストプロセッサに送られる。そしてJavaプロセッサ10は、停止する。
【0034】
図2は、本発明の実施の形態に係る、システムメモリ及びアレイ境界チェッカーサブシステム100を示すブロック図である。システムメモリ及びアレイ境界チェッカーサブシステム100は、システム・データキャッシュ30、システム・データアドレスコントローラ32、システム・データキャッシュコントローラ34及びアレイ境界チェッカー50に結合されたAデータバス24とBデータバス26とを含む。
【0035】
システム・データアドレスコントローラ32は、ヒープベースレジスタ102、アレイ基準レジスタ104及びアレイインデックスレジスタ106を有する。動作時において、アレイアクセスコマンドが実行された場合、ホストプロセッサは、一般に、ヒープベースレジスタ102を既にロードしており、該ヒープへのアクセスを可能にする。そして、Bデータバス26は、アレイ基準値を、システム・データアドレスコントローラ32のアレイ基準レジスタ104内にロードするために用いられる。上述したように、アレイ基準値は、Bデータバス26を用いて、スタック/ALUサブシステム28から得られる。
【0036】
次に、アレイインデックス値が、アレイインデックスレジスタ106にロードされる。アレイ基準値と同様に、アレイインデックス値は、Bデータバス26を用いて、スタック/ALUサブシステムから得られる。そして、アレイ基準レジスタ102に記憶されたアレイ基準値と、アレイインデックスレジスタ106に記憶されたアレイインデックス値とは、システム・データキャッシュコントローラ34を介してシステムデータキャッシュ30に記憶されたアレイデータにアクセスするために用いられる。
【0037】
一般に、上記の動作は、3つのマシンサイクルを用いて実行する。それらの3つのマシンサイクル中、アレイ境界チェッカー50は、システム・データアドレスコントローラ32と同時に動作して、アレイ境界チェックを実行する。
【0038】
アレイ境界チェッカー50は、アレイ基準レジスタ108、アレイインデックスレジスタ110及び最大アレイインデックスレジスタ112を有する。第1のコンパレータ114は、アレイ基準レジスタ108及びNULL値117に結合されており、第2のコンパレータ116は、アレイインデックスレジスタ110及び最大アレイインデックスレジスタ112に結合されている。第1のコンパレータ114の出力は、NULL基準信号118をシステムに供給し、第2のコンパレータ116の出力は、範囲外のインデックス信号120を供給する。
【0039】
アレイアクセスに用いられる3つのマシンサイクルのうちの最初のマシンサイクル中に、アレイ基準レジスタ108がロードされる。アレイ基準値がスタック/ALUサブシステムから読出されると、それが、Bデータバス26を用いて、アレイ境界チェッカー50のアレイ基準レジスタ108へ供給される。図2を見て分かるように、Bデータバス26は、システム・データアドレスコントローラ32にも結合されている。従って、最初のマシンサイクル中に、アレイ基準値は、Bデータバス26を用いてシステム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方に供給される。
【0040】
アレイ境界チェッカー50のアレイ基準レジスタ108内にアレイ基準値が得られると、第1のコンパレータ114は、アレイ基準値とNULL値117とを比較するのに用いられる。アレイ基準レジスタ108内に記憶されたアレイ基準値がNULL値117と等しい場合には、NULL基準信号118は第1のコンパレータ114により示される。
【0041】
アレイインデックスレジスタ110及び最大アレイインデックスレジスタ112は、アレイにアクセスするのに用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中にロードされる。アレイ基準値と同様に、アレイインデックス値は、スタック/ALUサブシステムから読出され、Bデータバス26を用いて、アレイ境界チェッカー50のアレイインデックスレジスタ110へ供給される。アレイ基準値の場合と同様に、アレイインデックス値は、システム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方にBデータバス26を用いて供給され、該データバスは、両システムに結合されている。
【0042】
アレイインデックス値に加えて、最大アレイインデックス値が、2番目のマシンサイクル中に、アレイ境界チェッカー50に供給される。最大アレイインデックス値は、アレイから読み出され、Aデータバス24を用いてアレイ境界チェッカー50の最大アレイインデックスレジスタ112に記憶される。上述したように、Java言語における全てのアレイは、一般にアレイのデータと共に、アレイのサイズを記憶する。境界チェッカー50は、このアレイサイズ値を最大アレイインデックス値として利用する。
【0043】
本発明のアレイ境界チェッカー50は、2つのデータバス、即ち、Aデータバス24及びBデータバス26があるので、同じマシンサイクル中に、アレイインデックスレジスタ110及び最大アレイインデックスレジスタ112の両方をロードすることが可能であることに注意すべきである。即ち、Aデータバス24は、最大アレイインデックスレジスタ112をロードするのに用いられ、Bデータバスは、最大アレイインデックスレジスタ112と同時に、アレイインデックスレジスタ110をロードするのに用いられる。
【0044】
アレイインデックス値及び最大アレイインデックス値が得られると、第2のコンパレータ116は、アレイインデックスレジスタ110に記憶されたアレイインデックス値と、最大アレイインデックスレジスタ112に記憶された最大アレイインデックス値とを比較する。アレイインデックス値が最大アレイインデックス値よりも大きい場合には、第2のコンパレータ116は、範囲外のインデックス信号120を示す。
【0045】
このようにして、本発明のアレイ境界チェッカー50は、余計なマシンサイクルを用いることなく、アレイ境界チェックを実行する。本発明は、境界チェッカー50が、システム・データアドレスコントローラ32によって用いられるのと同じマシンサイクルを利用してアレイ値を実際にロードするので、このように動作することができる。より具体的には、本発明のアレイ境界チェッカー50は、アレイにアクセスするのに必要な3つのマシンサイクルのうちの最初と2番目のマシンサイクルを用いて、アレイ境界チェックを実行する。エラーの場合、アレイ境界チェッカー50は、図3を参照して以下に詳細に説明するように、アレイ信号エラー信号118及び120を示し、これらの信号は、アレイアクセスをブロックまたは無視する。
【0046】
図3は、本発明の実施の形態に係る、アレイ境界チェックを実行するための方法200を示すフローチャートである。初期動作202において、プロセス動作が実行される。該プロセス動作は、アレイアクセスコマンドのフェッチ及びデコードを及び当業者には明らかなその他のプロセス動作を含む。
【0047】
アレイ基準値動作204において、アレイ基準値が、アレイにアクセスするのに必要な3つのマシンサイクルのうちの最初のマシンサイクル中に、システム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方にロードされる。上述したように、アレイ基準値は、アレイアクセスが実行された時間によって、スタック/ALUサブシステム28に記憶される。このアレイ基準値は、その後スタック/ALUサブシステム28から読出され、Bデータバス26を用いてシステム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方に供給される。
【0048】
図4は、本発明の実施の形態に係る、アレイ値にアクセスするために用いられる3つのマシンサイクルのうちの最初のマシンサイクル300を示すタイミング図である。最初のマシンサイクル300中に、32ビットアレイ基準値が、「先頭−1」の位置におけるスタックから読出され、Bデータバス26上に配置される。図4に示すように、アレイ基準値は、最初のマシンサイクル300の先頭端部302におけるスタックから読出される。
【0049】
そして、アレイ基準値は、最初のマシンサイクル300の立ち下がり縁部304において、システム・データアドレスコントローラ内のアレイ基準レジスタ及びアレイ境界チェッカー50内のアレイ基準レジスタ108両方に書込まれる。従って、システム・データアドレスコントローラ32内のアレイ基準レジスタ104をロードするのに必要な同じ信号が、アレイ境界チェッカー50内のアレイ基準レジスタ108のロードも同時に実行する。
【0050】
その後、システム・データアドレスコントローラ32内のアレイ基準レジスタ104及びアレイ境界チェッカー50内のアレイ基準レジスタ108は、要求されたアレイの最初の位置を指すアドレスを含む。そして、アレイ境界チェッカー50は、アレイ基準値をNULL値と比較することによってその有効性をチェックし、アレイ基準値がNULLの場合にはNULL基準信号を生成する。
【0051】
図3に戻って、アレイインデックス値動作206において、アレイインデックス値は、アレイにアクセスするのに必要な3つのマシンサイクルのうちの2番目のマシンサイクル中に、システム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方にロードされる。アレイ基準値と同様に、アレイインデックス値は、スタック/ALUサブシステム28に記憶される。アレイインデックス値は、スタック/ALUサブシステム28から読み出され、Bデータバス26を用いてシステム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方に供給される。
【0052】
図5Aは、本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中のBデータバス信号を示すタイミング図400である。2番目のマシンサイクル400中に、32ビットのアレイインデックス値は、「先頭」位置におけるスタックから読出され、Bデータバス26上に配置される。図5Aに示すように、アレイインデックス値は、2番目のマシンサイクル400の先頭端部402におけるスタックから読出される。
【0053】
そして、アレイインデックス値は、2番目のマシンサイクル400の立ち上がり縁部404において、システム・データアドレスコントローラ32内のアレイインデックスレジスタ106及びアレイ境界チェッカー50内のアレイインデックスレジスタ110の両方に書込まれる。
【0054】
その後、システム・データアドレスコントローラ32内のアレイインデックスレジスタ106及びアレイ境界チェッカー50内のアレイインデックスレジスタ110の両者は、アレイ内の要求されたデータを指し示すインデックス値を含む。
【0055】
再び図3に戻って、最大アレイインデックス値は、最大インデックス値動作208において、2番目のマシンサイクル中システム・データアドレスコントローラ32及びアレイ境界チェッカー50の両方にロードされる。Java言語におけるアレイの最初の位置は、アレイが保持できる要素の数を含み、該数は最大アレイインデックス値である。システム・データアドレスコントローラ32内のアレイ基準レジスタ104は、このアドレスを含み、かつ直前のマシンサイクル中にロードされたので、システム・データアドレスコントローラ32内のアレイ基準レジスタ104は、最大アレイインデックス値を得るために用いられ、バスA24を用いて、それをアレイ境界チェッカー50に供給する。
【0056】
図5Bは、本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中のAデータバス信号を示すタイミング図450である。2番目のマシンサイクル450中に、最大アレイインデックス値は、システム・データキャッシュ30から読出され、Aデータバス24上に配置される。図5Bに示すように、最大アレイインデックス値は、2番目のマシンサイクル450の先頭端部452において、システム・データキャッシュ30から読出され、2番目のマシンサイクル450の立ち上がり縁部454において、アレイ境界チェッカー50内の最大アレイインデックスレジスタ112に書込まれる。
【0057】
従って、2番目のマシンサイクル400、450は、Aデータバス及びBデータバス上にトラフィックを生成させる。本発明は、2つのデータバスを用いるので、アレイ境界チェッカー50内のアレイインデックスレジスタ110及び最大アレイインデックスレジスタ112は、同じマシンサイクル、即ち、2番目のマシンサイクル400、450中にロードできる。アレイインデックス値及び最大アレイインデックス値の両方をアレイ境界チェッカー50にロードすると、アレイ境界チェッカー50は、アレイインデックス値が最大アレイインデックス値よりも大きいか否かを計算することによって、アレイインデックスの有効性をチェックする。アレイ境界チェッカーは、アレイインデックス値が最大アレイインデックス値よりも大きい場合、範囲外のインデックス信号120を示す。
【0058】
図3に戻って、アレイ値は、アレイ値動作210において、アレイにアクセスするのに用いられる3つのマシンサイクルのうちの3番目のマシンサイクル中に、メモリ内でアクセスされる。一般に、アレイ値は、この動作中に、システム・データアドレスコントローラ32を用いて、システム・データキャッシュ30内でアクセスされる。
【0059】
図6は、本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの3番目のマシンサイクル500を示すタイミング図である。3番目のマシンサイクル500中に、アレイ値は、システム・データキャッシュ30から読出され、Aデータバス24上に配置される。図6に示すように、アレイ値は、3番目のマシンサイクル500の先頭部502において、システム・データキャッシュ30から読出される。そしてアレイ値は、3番目のマシンサイクル500の立ち上がり縁部504において、スタックに書込まれる。
【0060】
上述したように、アレイ境界チェックは、アレイ値にアクセスするのに必要な前の2つのマシンサイクル、即ち、最初及び2番目のマシンサイクル中に既に実行されている。NULL基準信号118又は範囲外のインデックス信号120のいずれかが示されていた場合、例外がホストプロセッサに送られ、好ましくはアレイ値がアクセスされる前に、Javaプロセッサ10が停止される。
【0061】
図3に戻って、方法200は、動作212において終了し、ポストプロセス動作が実行される。ポストプロセス動作は、次のJavaインストラクション、および当業者には明らかなその他のポストプロセス動作をフェッチ及びデコードすることを含む。有利には、アレイアクセスと同時に境界チェックを実行することによって、本発明は、余計なオーバーヘッドなしで速いJavaアレイ境界チェックを実行できる。
【0062】
図7は、本発明の実施の形態に係る、Javaアレイの境界チェックを実行するための方法600を示すフローチャートである。最初の動作602において、プリプロセス動作が実行される。プリプロセス動作は、アレイアクセスコマンド、および当業者には明らかなその他のプリプロセス動作をフェッチ及びデコードすることを含む。
【0063】
アレイ基準動作604において、アレイ基準は、スタックから読出される。上述したように、アレイ基準値は、アレイアクセスが実行された時間によってスタック/ALUサブシステム28に記憶される。この値は、スタックから読出され、Bデータバス26を用いてアレイ境界チェッカー50に供給される。具体的には、最初のマシンサイクル中に、32ビットアレイ基準値が、「先頭−1」の位置においてスタックから読出され、Bデータバス26上に配置される。そして、アレイ基準値は、最初のマシンサイクル中に、システム・データアドレスコントローラ32内のアレイ基準レジスタ104及びアレイ境界チェッカー50内のアレイ基準レジスタ108の両方に書込まれる。
【0064】
動作606において、アレイ基準値がNULLであるか否かについて決定がなされる。NULLアレイ基準値は、一般に、未定義のアレイのアレイアクセスに起因する。アレイ基準値がNULLに等しい場合、プロセス600は、NULL基準動作608を継続する。しかし、アレイ基準値がNULLと等しくない場合には、プロセス600はアレイインデックス動作610を継続する。
【0065】
NULL基準動作608中に、NULL基準信号が示され、該NULL基準信号は、エラーが検出されていることをシステムに知らせる。NULL基準が使われているか否かを決定するために、アレイ境界チェッカー50内の第1のコンパレータ114は、アレイ境界チェッカー50のアレイ基準レジスタ108に記憶されたアレイ基準値をNULL値117と比較する。アレイ基準値がNULLと等しい場合には、NULL基準信号118が示される。その後、動作618において、方法600が終了し、Javaプロセッサ10が停止する。
【0066】
アレイインデックス動作610において、アレイインデックス値が、スタックから読出される。アレイ基準値と同様に、アレイインデックス値は、スタック/ALUサブシステム28に記憶される。アレイインデックス値は、スタック/ALUサブシステム28から読出され、Bデータバス26を用いてアレイ境界チェッカー50に供給される。具体的には、2番目のマシンサイクル中に、32ビットアレイインデックス値が、「先頭」位置におけるスタックから読出され、Bデータバス26上に配置される。その後、アレイインデックス値は、2番目のマシンサイクル中に、システム・データアドレスコントローラ32内のアレイインデックスレジスタ106及びアレイ境界チェッカー50内のアレイインデックスレジスタ110の両方に書込まれる。
【0067】
最大アレイインデックス値は、最大アレイインデックス動作612において、システム・データキャッシュ30から読出される。上述したように、Java言語におけるアレイの最初の位置は、アレイが保持できる要素の数を含み、該要素の数は最大アレイインデックス値である。システム・データアドレスコントローラ32内のアレイ基準レジスタ104はこのアドレスを含み、かつ直前のマシンサイクル中にロードされるので、システム・データアドレスコントローラ32内のアレイ基準レジスタ104は、最大アレイインデックス値を得るのに用いられ、かつそれをバスA24を用いてアレイ境界チェッカー50へ供給する。
【0068】
即ち、2番目のマシンサイクル中に、最大アレイインデックス値は、システム・データキャッシュ30から読み出され、Aデータバス24上に配置される。最大アレイインデックス値は、2番目のマシンサイクル中に、アレイ境界チェッカー50内の最大アレイインデックスレジスタ112にも書込まれる。
【0069】
本発明は、2つのデータバスを用いるので、アレイ境界チェッカー内のアレイインデックスレジスタ及び最大アレイインデックスレジスタは、同じマシンサイクル、即ち、2番目のマシンサイクル中に、ロードすることができる。
【0070】
動作614において、アレイインデックス値が最大アレイインデックス値よりも大きいか否かについて、決定がなされる。アレイインデックス値は、一般に、Javaプログラムが、規定されたアレイの境界内にないインデックス値を有するアレイにアクセスしようとする場合に、最大アレイインデックス値よりも大きい。従って、アレイインデックス値が最大アレイインデックス値よりも大きい場合、方法600は、範囲外のエラー動作616を継続する。さもなければ、方法600は、動作618で終了する。
【0071】
範囲外信号120は、範囲外エラー動作616において示される。アレイインデックス値及び最大アレイインデックス値の両方をアレイ境界チェッカー50にロードすると、アレイ境界チェッカー50は、アレイインデックスの有効性をチェックする。
【0072】
アレイインデックス値の有効性を決定するために、アレイ境界チェッカー50内の第2のコンパレータ116は、アレイインデックス値を最大アレイインデックス値と比較し、アレイインデックス値が最大アレイインデックス値よりも大きい場合には、範囲外のインデックス信号120を示す。その後、動作618において、方法600は終了し、Javaプロセッサは停止する。
【0073】
動作618において、方法600は停止し、ポストプロセス動作が実行される。ポストプロセス動作は、Javaプロセッサ10を停止すること、Javaアプリケーションの連続解釈、および当業者には明らかなその他のポストプロセス動作を含む。特に、Javaプロセッサ10は、動作618が、NULL基準動作608あるいは範囲外のインデックスエラー動作616のいずれかから来た場合には、停止する。さもなければ、Javaプロセッサ10は、Javaアプリケーションが終了するまで、即ち制御がホストプロセッサに戻るポイントにおいて、Javaインストラクションを解釈することを継続する。
【0074】
本発明を、理解を明白にするために、いくつかの詳説において説明してきたが、請求項の範囲内で、変形、変更が実施可能であることは明らかである。従って、本願の実施の形態は、実例として考慮すべきであり、かつ限定されるものではなく、また本発明は、本願明細書に示された詳説に限定されるものではなく、請求項の範囲内で変更することができる。
【図面の簡単な説明】
【図1】
本発明の実施の形態に係る、アレイ境界チェッカーを有するJavaプロセッサを示すブロック図である。
【図2】
本発明の実施の形態に係る、システムメモリ及びアレイ境界チェッカーサブシステムを示すブロック図である。
【図3】
本発明の実施の形態に係る、アレイ境界チェックを実行するための方法を示すフローチャートである。
【図4】
本発明の実施の形態に係る、アレイ値にアクセスするために用いられる3つのマシンサイクルのうちの最初のマシンサイクルを示すタイミング図である。
【図5A】
本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中のBデータバス信号を示すタイミング図である。
【図5B】
本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの2番目のマシンサイクル中のAデータバス信号を示すタイミング図である。
【図6】
本発明の実施の形態に係る、アレイにアクセスするために用いられる3つのマシンサイクルのうちの3番目のマシンサイクルを示すタイミング図である。
【図7】
本発明の実施の形態に係る、Javaアレイの境界チェックを実行するための方法を示すフローチャートである。
Claims (20)
- ハードウェアをベースにしたJava環境におけるアレイ境界チェックを、実行するためのアレイ境界チェック方法であって、
現在のアレイアクセスコマンドの最初のマシンサイクル中に、アレイ基準値を、システム・データアドレスコントローラ及びアレイ境界チェッカーにロードする動作と、
現在のアレイアクセスコマンドの次のマシンサイクル中に、アレイインデックス値を、システム・データアドレスコントローラ及びアレイ境界チェッカーに書込む動作と、
現在のアレイアクセスコマンドの次のマシンサイクル中に、最大アレイインデックス値を、アレイ境界チェッカーに書込む動作と、
現在のアレイアクセスコマンドが、有効である場合に、3番目のマシンサイクル中に、アレイ値を、メモリ内でアクセスする動作とを備えることを特徴とするアレイ境界チェック方法。 - アレイ基準値が、NULLである場合に、NULL基準信号を、生成する動作と、
現在のアレイインデックス値が、最大アレイインデックス値よりも大きい場合に、範囲外のインデックス信号を、立上げる動作と、
をさらに備えることを特徴とする請求項1に記載のアレイ境界チェック方法。 - 第1のコンパレータを用いて、アレイ基準値を、NULL値と比較する動作と、
第2のコンパレータを用いて、アレイインデックス値を、最大アレイインデックス値と比較する動作と、
をさらに備えることを特徴とする請求項2に記載のアレイ境界チェック方法。 - 前記NULL基準信号が生成されたとき、前記範囲外のインデックス信号が、立上ったときに前記アレイアクセスコマンドが、有効となり、前記アレイアクセスコマンドが、有効になることを特徴とする請求項2に記載のアレイ境界チェック方法。
- 前記アレイアクセスコマンドが、有効である場合に、メモリに対する読込みアクセス及び書込みアクセスを、禁止する動作をさらに備えることを特徴とする請求項4に記載のアレイ境界チェック方法。
- 第1のデータバスを用いて、前記アレイ基準値及びアレイインデックス値を、メモリにロードし、第2のデータバスを用いて前記最大アレイインデックス値を、メモリにロードすることを特徴とする請求項1に記載のアレイ境界チェック方法。
- Java環境におけるアレイ境界チェックを、実行するためのアレイ境界チェックシステムであって、
第1のアレイ基準レジスタと第1のアレイインデックスレジスタとを有するシステム・データアドレスコントローラと、
第1のデータバス及び第2のデータバスを介して前記システム・データアドレスコントローラに結合されたアレイ境界チェッカーであって、第2のアレイ基準レジスタと、第2のアレイインデックスレジスタと最大アレイインデックスレジスタとを有するアレイ境界チェッカーとを備え、
前記第2のアレイインデックスレジスタと前記最大アレイインデックスレジスタとは、前記第1のデータバス及び第2のデータバスを介して単一のマシンサイクル中にロードすることができることを特徴とするアレイ境界チェックシステム。 - 前記第1のアレイ基準レジスタと前記第2のアレイ基準レジスタとは、前記第1のデータバスを用いて最初のマシンサイクル中にロードされることを特徴とする請求項7に記載のアレイ境界チェックシステム。
- 前記第1のアレイインデックスレジスタと前記第2のアレイインデックスレジスタとは、前記第1のデータバスを用いて次のマシンサイクル中にロードされ、前記最大アレイインデックスレジスタは、前記第2のデータバスを用いて前記次のマシンサイクル中にロードされることを特徴とする請求項8に記載のアレイ境界チェックシステム。
- 現在のアレイアクセスコマンドが有効である場合、3番目のマシンサイクル中にアレイ値がメモリから読出されることを特徴とする請求項9に記載のアレイ境界チェックシステム。
- 前記アレイ境界チェッカーが、前記第2のアレイ基準レジスタに結合された第1のコンパレータと、前記第2のアレイインデックスレジスタ及び前記最大アレイインデックスレジスタに結合された第2のコンパレータを、さらに有することを特徴とする請求項7に記載のアレイ境界チェックシステム。
- 前記第2のアレイ基準レジスタに記憶されたアレイ基準値がNULLである場合に、前記第1のコンパレータが、NULL基準信号を生成することを特徴とする請求項11に記載のアレイ境界チェックシステム。
- 前記第2のアレイインデックスレジスタに記憶されたアレイインデックス値が、前記最大アレイインデックスレジスタに記憶された最大アレイインデックス値よりも大きい場合に、前記第2のコンパレータが、範囲外のインデックス信号を、生成することを特徴とする請求項12に記載のアレイ境界チェックシステム。
- 前記NULL基準信号が、生成されたときはアレイアクセスコマンドが、無効であり、前記範囲外のインデックス信号が、生成されたときは該アレイアクセスコマンドが、無効であることを特徴とする請求項13に記載のアレイ境界チェックシステム。
- 前記アレイアクセスコマンドが、無効であるときは、メモリに対する読込みアクセス及び書込みアクセスが、禁止されることを特徴とする請求項14に記載のアレイ境界チェックシステム。
- ハードウェアをベースにした、Java環境におけるアレイ境界チェックを、実行するためのアレイ境界チェック方法であって、
アレイ基準値を、第1のデータバスを介してアレイ基準レジスタに書込む動作と、
前記第1のデータバスを用いてアレイインデックス値を、アレイインデックスレジスタにロードする動作と、
第2のデータバスを用いて最大アレイインデックス値を、最大アレイインデックスレジスタにロードする動作であって、該最大アレイインデックスレジスタが、前記アレイインデックスレジスタが、ロードされるマシンサイクルと同じマシンサイクル中にロードされる動作と、
前記アレイ基準値と、アレイインデックス値と、最大アレイインデックス値とを解析して、現在のアレイアクセスコマンドの有効性を、決定する動作と、
を備えるアレイ境界チェック方法。 - 前記アレイ基準値と、アレイインデックス値と、最大アレイインデックス値とを解析する動作が、
前記アレイ基準値が、NULLであるときにNULL基準信号を、生成する動作と、
前記アレイインデックス値が、前記最大アレイインデックス値よりも大きい場合に、範囲外のインデックス信号を、生成する動作とを備える、
ことを特徴とする請求項16に記載のアレイ境界チェック方法。 - 前記NULL基準信号が、生成された場合、前記現在のアレイアクセスコマンドは、無効であり、前記範囲外のインデックス信号が、生成された場合、前記現在のアレイアクセスコマンドは、無効であることを特徴とする請求項17に記載のアレイ境界チェック方法。
- 前記現在のアレイアクセスコマンドが、無効である場合、メモリに対する読出しアクセス及び書込みアクセスを、禁止する動作をさらに備えることを特徴とする請求項18に記載のアレイ境界チェック方法。
- 前記現在のアレイアクセスコマンドが、有効である場合、メモリからアレイ値を、読出す動作をさらに備えることを特徴とする請求項19に記載のアレイ境界チェック方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/670,496 US6782407B1 (en) | 2000-09-26 | 2000-09-26 | System and method for low overhead boundary checking of java arrays |
PCT/EP2001/010990 WO2002027488A2 (en) | 2000-09-26 | 2001-09-21 | System and method for low overhead boundary checking of java arrays |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004510249A true JP2004510249A (ja) | 2004-04-02 |
Family
ID=24690621
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002530999A Withdrawn JP2004510249A (ja) | 2000-09-26 | 2001-09-21 | Javaアレイの低オーバーヘッド境界チェックのためのシステム及び方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6782407B1 (ja) |
EP (1) | EP1451681B1 (ja) |
JP (1) | JP2004510249A (ja) |
KR (1) | KR100802686B1 (ja) |
AT (1) | ATE375550T1 (ja) |
DE (1) | DE60130933T2 (ja) |
WO (1) | WO2002027488A2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9207958B1 (en) | 2002-08-12 | 2015-12-08 | Arm Finance Overseas Limited | Virtual machine coprocessor for accelerating software execution |
US7752424B2 (en) * | 2007-08-08 | 2010-07-06 | Arm Limited | Null value checking instruction |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3401376A (en) * | 1965-11-26 | 1968-09-10 | Burroughs Corp | Central processor |
EP0540155A3 (en) | 1991-10-29 | 1993-07-21 | Advanced Micro Devices, Inc. | Digital limit checking system |
US6026484A (en) | 1993-11-30 | 2000-02-15 | Texas Instruments Incorporated | Data processing apparatus, system and method for if, then, else operation using write priority |
US6116768A (en) | 1993-11-30 | 2000-09-12 | Texas Instruments Incorporated | Three input arithmetic logic unit with barrel rotator |
US5983340A (en) | 1995-12-07 | 1999-11-09 | Conexant Systems, Inc. | Microprocessor system with flexible instruction controlled by prior instruction |
WO1997027536A1 (en) | 1996-01-24 | 1997-07-31 | Sun Microsystems, Inc. | Instruction folding for a stack-based machine |
KR100466722B1 (ko) | 1996-01-24 | 2005-04-14 | 선 마이크로시스템즈 인코퍼레이티드 | 어레이경계검사방법및장치와,이를포함하는컴퓨터시스템 |
US5991863A (en) | 1996-08-30 | 1999-11-23 | Texas Instruments Incorporated | Single carry/borrow propagate adder/decrementer for generating register stack addresses in a microprocessor |
US6009505A (en) | 1996-12-02 | 1999-12-28 | Compaq Computer Corp. | System and method for routing one operand to arithmetic logic units from fixed register slots and another operand from any register slot |
-
2000
- 2000-09-26 US US09/670,496 patent/US6782407B1/en not_active Expired - Lifetime
-
2001
- 2001-09-21 JP JP2002530999A patent/JP2004510249A/ja not_active Withdrawn
- 2001-09-21 KR KR1020027006708A patent/KR100802686B1/ko not_active IP Right Cessation
- 2001-09-21 AT AT01969757T patent/ATE375550T1/de not_active IP Right Cessation
- 2001-09-21 WO PCT/EP2001/010990 patent/WO2002027488A2/en active IP Right Grant
- 2001-09-21 DE DE60130933T patent/DE60130933T2/de not_active Expired - Lifetime
- 2001-09-21 EP EP01969757A patent/EP1451681B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
WO2002027488A2 (en) | 2002-04-04 |
EP1451681B1 (en) | 2007-10-10 |
KR20020087389A (ko) | 2002-11-22 |
DE60130933D1 (de) | 2007-11-22 |
US6782407B1 (en) | 2004-08-24 |
EP1451681A2 (en) | 2004-09-01 |
DE60130933T2 (de) | 2008-02-07 |
ATE375550T1 (de) | 2007-10-15 |
WO2002027488A3 (en) | 2004-06-10 |
KR100802686B1 (ko) | 2008-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6321314B1 (en) | Method and apparatus for restricting memory access | |
US8024506B1 (en) | Maintaining address translations during the software-based processing of instructions | |
EP1955153B1 (en) | Method and apparatus for converting program code with access coordination for a shared resource | |
US6542990B1 (en) | Array access boundary check by executing BNDCHK instruction with comparison specifiers | |
EP0729103B1 (en) | Method and apparatus for implementing non-faulting load instruction | |
US6415379B1 (en) | Method and apparatus for maintaining context while executing translated instructions | |
US20060190769A1 (en) | Method and system for setting a breakpoint | |
US7725677B1 (en) | Method and apparatus for improving segmented memory addressing | |
JPH08278886A (ja) | データ処理システムでの拡張システム管理操作のための方法およびシステム | |
JP2001504957A (ja) | 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置 | |
US7269825B1 (en) | Method and system for relative address translation | |
US6728846B2 (en) | Method and data processing system for performing atomic multiple word writes | |
US20210311997A1 (en) | Binary search procedure for control table stored in memory system | |
US6260191B1 (en) | User controlled relaxation of optimization constraints related to volatile memory references | |
JP2021512400A (ja) | メモリ・アクセスにおける保護タグ・チェックの制御 | |
Venkataramani et al. | Memtracker: An accelerator for memory debugging and monitoring | |
US20020082822A1 (en) | Method and data processing system for performing atomic multiple word reads | |
US6324635B1 (en) | Method and apparatus for address paging emulation | |
JPH08161169A (ja) | Vliw方式の計算機システム及びvliwの解釈・実行方法 | |
US6782407B1 (en) | System and method for low overhead boundary checking of java arrays | |
CN111651379B (zh) | Dax设备地址转换缓存方法及系统 | |
US7076771B2 (en) | Instruction interpretation within a data processing system | |
JP3105110B2 (ja) | 演算装置 | |
EP0389886A2 (en) | Ring reduction logic mechanism | |
JP2001306320A (ja) | 電源投入時あるいはマシンの特定の状態を通してアレイを既知の状態にリセットし、初期化するための装置及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20080626 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080922 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20090918 |