(57)【要約】ハードウェアをベースにした、Ｊａｖａ環境におけるアレイ境界チェックを実行するためのアレイ境界チェック方法を開示する。現在のアレイアクセスコマンドの最初のマシンサイクル中に、アレイ基準値が、システム・データアドレスコントローラ及びアレイ境界チェッカーにロードされる。次に、現在のアレイアクセスコマンドの次のマシンサイクル中に、アレイインデックス値が、システム・データアドレスコントローラ及びアレイ境界チェッカーに書込まれる。また、現在のアレイアクセスコマンドの次のマシンサイクル中に、最大アレイインデックス値が、Ｊａｖａアレイから読出され、かつアレイ境界チェッカーに書込まれる。アレイ境界チェッカーは、これらの値を用い、現在のアレイアクセスコマンドの有効性を決定する。そして、３番目のマシンサイクル中に、アレイ値が、メモリ内でアクセスされる。本発明においては、該アレイ値は、現在のアレイアクセスコマンドが有効である場合にのみアクセスされる。【特許請求の範囲】
【請求項１】
ハードウェアをベースにしたＪａｖａ環境におけるアレイ境界チェックを、実行するためのアレイ境界チェック方法であって、
現在のアレイアクセスコマンドの最初のマシンサイクル中に、アレイ基準値を、システム・データアドレスコントローラ及びアレイ境界チェッカーにロードする動作と、
現在のアレイアクセスコマンドの次のマシンサイクル中に、アレイインデックス値を、システム・データアドレスコントローラ及びアレイ境界チェッカーに書込む動作と、
現在のアレイアクセスコマンドの次のマシンサイクル中に、最大アレイインデックス値を、アレイ境界チェッカーに書込む動作と、
現在のアレイアクセスコマンドが、有効である場合に、３番目のマシンサイクル中に、アレイ値を、メモリ内でアクセスする動作とを備えることを特徴とするアレイ境界チェック方法。
【請求項２】
アレイ基準値が、ＮＵＬＬである場合に、ＮＵＬＬ基準信号を、生成する動作と、
現在のアレイインデックス値が、最大アレイインデックス値よりも大きい場合に、範囲外のインデックス信号を、立上げる動作と、
をさらに備えることを特徴とする請求項１に記載のアレイ境界チェック方法。
【請求項３】
第１のコンパレータを用いて、アレイ基準値を、ＮＵＬＬ値と比較する動作と、
第２のコンパレータを用いて、アレイインデックス値を、最大アレイインデックス値と比較する動作と、
をさらに備えることを特徴とする請求項２に記載のアレイ境界チェック方法。
【請求項４】
前記ＮＵＬＬ基準信号が生成されたとき、前記範囲外のインデックス信号が、立上ったときに前記アレイアクセスコマンドが、有効となり、前記アレイアクセスコマンドが、有効になることを特徴とする請求項２に記載のアレイ境界チェック方法。
【請求項５】
前記アレイアクセスコマンドが、有効である場合に、メモリに対する読込みアクセス及び書込みアクセスを、禁止する動作をさらに備えることを特徴とする請求項４に記載のアレイ境界チェック方法。
【請求項６】
第１のデータバスを用いて、前記アレイ基準値及びアレイインデックス値を、メモリにロードし、第２のデータバスを用いて前記最大アレイインデックス値を、メモリにロードすることを特徴とする請求項１に記載のアレイ境界チェック方法。
【請求項７】
Ｊａｖａ環境におけるアレイ境界チェックを、実行するためのアレイ境界チェックシステムであって、
第１のアレイ基準レジスタと第１のアレイインデックスレジスタとを有するシステム・データアドレスコントローラと、
第１のデータバス及び第２のデータバスを介して前記システム・データアドレスコントローラに結合されたアレイ境界チェッカーであって、第２のアレイ基準レジスタと、第２のアレイインデックスレジスタと最大アレイインデックスレジスタとを有するアレイ境界チェッカーとを備え、
前記第２のアレイインデックスレジスタと前記最大アレイインデックスレジスタとは、前記第１のデータバス及び第２のデータバスを介して単一のマシンサイクル中にロードすることができることを特徴とするアレイ境界チェックシステム。
【請求項８】
前記第１のアレイ基準レジスタと前記第２のアレイ基準レジスタとは、前記第１のデータバスを用いて最初のマシンサイクル中にロードされることを特徴とする請求項７に記載のアレイ境界チェックシステム。
【請求項９】
前記第１のアレイインデックスレジスタと前記第２のアレイインデックスレジスタとは、前記第１のデータバスを用いて次のマシンサイクル中にロードされ、前記最大アレイインデックスレジスタは、前記第２のデータバスを用いて前記次のマシンサイクル中にロードされることを特徴とする請求項８に記載のアレイ境界チェックシステム。
【請求項１０】
現在のアレイアクセスコマンドが有効である場合、３番目のマシンサイクル中にアレイ値がメモリから読出されることを特徴とする請求項９に記載のアレイ境界チェックシステム。
【請求項１１】
前記アレイ境界チェッカーが、前記第２のアレイ基準レジスタに結合された第１のコンパレータと、前記第２のアレイインデックスレジスタ及び前記最大アレイインデックスレジスタに結合された第２のコンパレータを、さらに有することを特徴とする請求項７に記載のアレイ境界チェックシステム。
【請求項１２】
前記第２のアレイ基準レジスタに記憶されたアレイ基準値がＮＵＬＬである場合に、前記第１のコンパレータが、ＮＵＬＬ基準信号を生成することを特徴とする請求項１１に記載のアレイ境界チェックシステム。
【請求項１３】
前記第２のアレイインデックスレジスタに記憶されたアレイインデックス値が、前記最大アレイインデックスレジスタに記憶された最大アレイインデックス値よりも大きい場合に、前記第２のコンパレータが、範囲外のインデックス信号を、生成することを特徴とする請求項１２に記載のアレイ境界チェックシステム。
【請求項１４】
前記ＮＵＬＬ基準信号が、生成されたときはアレイアクセスコマンドが、無効であり、前記範囲外のインデックス信号が、生成されたときは該アレイアクセスコマンドが、無効であることを特徴とする請求項１３に記載のアレイ境界チェックシステム。
【請求項１５】
前記アレイアクセスコマンドが、無効であるときは、メモリに対する読込みアクセス及び書込みアクセスが、禁止されることを特徴とする請求項１４に記載のアレイ境界チェックシステム。
【請求項１６】
ハードウェアをベースにした、Ｊａｖａ環境におけるアレイ境界チェックを、実行するためのアレイ境界チェック方法であって、
アレイ基準値を、第１のデータバスを介してアレイ基準レジスタに書込む動作と、
前記第１のデータバスを用いてアレイインデックス値を、アレイインデックスレジスタにロードする動作と、
第２のデータバスを用いて最大アレイインデックス値を、最大アレイインデックスレジスタにロードする動作であって、該最大アレイインデックスレジスタが、前記アレイインデックスレジスタが、ロードされるマシンサイクルと同じマシンサイクル中にロードされる動作と、
前記アレイ基準値と、アレイインデックス値と、最大アレイインデックス値とを解析して、現在のアレイアクセスコマンドの有効性を、決定する動作と、
を備えるアレイ境界チェック方法。
【請求項１７】
前記アレイ基準値と、アレイインデックス値と、最大アレイインデックス値とを解析する動作が、
前記アレイ基準値が、ＮＵＬＬであるときにＮＵＬＬ基準信号を、生成する動作と、
前記アレイインデックス値が、前記最大アレイインデックス値よりも大きい場合に、範囲外のインデックス信号を、生成する動作とを備える、
ことを特徴とする請求項１６に記載のアレイ境界チェック方法。
【請求項１８】
前記ＮＵＬＬ基準信号が、生成された場合、前記現在のアレイアクセスコマンドは、無効であり、前記範囲外のインデックス信号が、生成された場合、前記現在のアレイアクセスコマンドは、無効であることを特徴とする請求項１７に記載のアレイ境界チェック方法。
【請求項１９】
前記現在のアレイアクセスコマンドが、無効である場合、メモリに対する読出しアクセス及び書込みアクセスを、禁止する動作をさらに備えることを特徴とする請求項１８に記載のアレイ境界チェック方法。
【請求項２０】
前記現在のアレイアクセスコマンドが、有効である場合、メモリからアレイ値を、読出す動作をさらに備えることを特徴とする請求項１９に記載のアレイ境界チェック方法。
【発明の詳細な説明】
【０００１】
（関連出願の引用）
本出願は、２０００年５月４日にファイルされ、「ＪＡＶＡスタック、演算論理ユニット及び複数のスタックポインタを有する統合サブシステムのためのアーキテクチャー、及びそれを用いるための方法」と題された米国特許出願第０９／５６５，６７９号に関連するものであり、これ全体を本願明細書に援用する。
【０００２】
また本出願は、「ＪＡＶＡアクセラレーター環境における消費電力管理のためのシステム及び方法」と題された米国特許出願第０９／６４５，４６８号（代理人番号ＰＨＩＬＰ３３６）に関連するものであり、これ全体を本願明細書に援用する。
【０００３】
（発明の背景）
１．発明の分野
本発明は、Ｊａｖａシステムの性能に関し、特に、低オーバーヘッドのＪａｖａアレイ境界チェックのためのシステム及び方法に関する。
【０００４】
２．背景技術
今日のコンピュータプログラミングの世界には、多数の高水準プログラミング言語がある。例えば、Ｊａｖａは、比較的短期間のうちに広まり、インターネットの大成功をもたらした。Ｊａｖａの人気は、少なくともその一部はそのプラットフォームの独立性、オブジェクト指向及びダイナミックな性質のおかげである。また、Ｊａｖａは、メモリ管理及び複数のプラットフォームに対応した移植性を含む、アプリケーションプログラマーによって実行しなければならない、単調でエラーしやすい多数のタスクを除去する。このようにして、Ｊａｖａプログラマーは、設計及び機能性により集中することができる。
【０００５】
Ｊａｖａアプリケーションを実行するために、Ｊａｖａプロセッサが用いられ、該Ｊａｖａプロセッサは、一般に、Ｊａｖａ仮想マシン（ＪＶＭ）の形態のソフトウェアによってのみ実行される。しかし、ソフトウェアにおけるプロセスを実行することに関連する問題のため、ＪＶＭは、遅い実行に悩まされる。さらに、ＪＶＭに対するＪａｖａ認証を得るために要する一定のエラー強さは、従来のＪＶＭが遭っていた遅い実行性を悪化させる。
【０００６】
このようなエラー強さの一つは、アレイ境界チェックである。即ち、ＪＶＭに関して認証を得るために、境界チェックは、アレイがアクセスされる度に実行されなければならない。
【０００７】
背景として、多くのＪａｖａアプリケーションはアレイを用い、該アレイは、一次元又はそれ以上の次元における情報の配置、例えば、リスト、表、あるいは多次元のデータの配置である。Ｊａｖａを用いてメモリ内でアレイが実行される度に、該アレイのサイズが、該アレイによって参照された何れかのデータと共に、メモリに記憶される。通常、Ｊａｖａアレイサイズは、該アレイ内の先頭の要素として記憶される。
【０００８】
例えば、Ｊａｖａにおける１００の要素のアレイは、アレイの先頭の要素として記憶された１００の数を有する。即ち、データ記憶システムに制限のない必要な数の要素を保持するためには、Ｊａｖａにおけるアレイは、通常、特定の数の要素を記憶するために必要な場合よりも大きい。
【０００９】
上述したように、インストラクションはＪＶＭによって解釈されるので、インタープリターにより実行されなければならない動作の一つは、アレイ境界チェックである。具体的には、ＪａｖａアレイがＪａｖａアプリケーションによってアクセスされる度に、アレイ境界チェックが実行されなければならず、アレイがアクセスされる前に、該アレイのサイズをチェックし、アクセスしようとする要素が、該アレイの境界外でないことを確かめるということを確実にする。またアレイ基準自体もチェックされ、それが有効なアレイ基準であることを確実にする。
【００１０】
アレイアクセスコマンドが、アレイの境界外の要素にアクセスしようとする場合には、例外が発生する。また、アレイアクセスコマンドが、無効なアレイ基準と共に試みられた場合には、例外が発生する。一般に、発生した例外は、例外が発生したときにメモリアクセスを禁止するように構成されている。
【００１１】
アレイ境界チェックにより、アレイアクセスコマンドが、該アレイによって定義されたデータ要素のみへのアクセスを有するのでよりエラーに強いシステムが得られ、また隣接するデータへのアクセスは不可能であるので、より少ないバグとなり、改良されたシステムの安全性が得られる。しかし、通常、ステップごとに少なくとも１サイクル要する、アレイ境界チェックに必要な段階的な比較及び確認は、確認が発生するまでに、貴重な処理時間を消費する。
【００１２】
従来、ＪＶＭは、ソフトウェア内で実施されてきたので、ＪＡＶＡにおける境界チェックは、一般に、アレイがアクセスされる度に余計なマシンサイクルを追加するプロセスとなる。アレイ境界チェックのために使われるこの余計なマシンサイクルは、システムの処理効率を大幅に低減し、このことは、元々遅い、ソフトウェアをベースにした解釈プロセスをますます悪化させるだけである。
【００１３】
上記したことを考慮して、改良されたアレイ境界チェック方法の必要性がある。該方法は、アレイ境界チェックに関連するオーバーヘッドを低減すべきであり、それによりアレイ情報を検索するのに要する時間及びアレイのサイズを確認するのに要する時間を、従来のシステムと比較して著しく低減する。
【００１４】
（発明の要約）
概して、本発明は、アレイアクセスコマンドを実行するのに用いられる同じマシンサイクル中に、アレイ境界チェックを実行することによって、これらの要求を満たす。アレイアクセスコマンドと同時に、アレイ境界チェックを実行することによって、本発明のアレイ境界チェッカーは、従来アレイ境界チェックに関連していた追加的なオーバーヘッドを回避する。
【００１５】
一つの実施の形態においては、ハードウェアをベースにした、Ｊａｖａ環境におけるアレイ境界チェックを実行するアレイ境界チェック方法を開示する。現在のアレイアクセスコマンドの最初のマシンサイクル中に、アレイ基準値をシステム・データアドレスコントローラ及びアレイ境界チェッカーにロードする。次いで、現在のアレイアクセスコマンドの次のマシンサイクル中に、アレイインデックス値をシステム・データアドレスコントローラ及びアレイ境界チェッカーに書込む。また、現在のアレイアクセスコマンドの次のマシンサイクル中に、最大アレイインデックス値をアレイ境界チェッカーに書込む。アレイ境界チェッカーは、これらの値を用い、現在のアレイアクセスコマンドの有効性を決定する。そして、３番目のマシンサイクル中に、アレイ値が、メモリ内でアクセスされる。本発明においては、該アレイ値は、現在のアレイアクセスコマンドが有効である場合にのみアクセスされる。
【００１６】
他の実施の形態においては、Ｊａｖａ環境におけるアレイ境界チェックを実行するアレイ境界チェックシステムを開示する。該アレイ境界チェックシステムは、第１のアレイ基準レジスタと第１のアレイインデックスレジスタとを有するシステム・データアドレスコントローラを有する。さらに、アレイ境界チェックシステムは、第１のデータバス及び第２のデータバスを介してシステム・データアドレスコントローラに結合されたアレイ境界チェッカーを有する。該アレイ境界チェッカーは、第２のアレイ基準レジスタと、第２のアレイインデックスレジスタと、最大アレイインデックスレジスタとを有する。動作中には、第２のアレイインデックスレジスタ及び最大アレイインデックスレジスタは、第１のデータバス及び第２のデータバスを介して単一のマシンサイクル中にロードすることができ、これにより、アレイ境界チェックを実行する際にマシンサイクルをセーブする。
【００１７】
ハードウェアをベースにした、Ｊａｖａ環境におけるアレイ境界チェックを実行するための他のアレイ境界チェック方法を、本発明のさらに別の実施の形態に開示する。該方法は、第１のデータバスを介してアレイ基準レジスタに書込まれるアレイ基準値で始まる。そして、第１のデータバスを用いてアレイインデックス値をアレイインデックスレジスタにロードする。アレイインデックスレジスタがロードされるマシンサイクルと同じマシンサイクル中に、第２のデータバスを用いて最大アレイインデックス値を最大アレイインデックスレジスタにロードする。現在のアレイアクセスコマンドの有効性を決定するために、アレイ基準値とアレイインデックス値と最大アレイインデックス値とが解析される。
【００１８】
有利には、本発明は、追加的なオーバーヘッドをシステムに付加することなく、アレイ境界チェックを実行できる。現時点のアレイアクセスと並行してアレイ境界チェックを実行することによって、本発明は、余分なマシンサイクルを要することなく、Ｊａｖａアレイ境界チェック規約に従意、これによってＪａｖａプロセッサの能力を大幅に高める。また、二重のデータバスを用いることによって、単一のマシンサイクル中に、複数のレジスタをロードすることができ、それによりＪａｖａプロセッサの能力がさらに高まる。
【００１９】
本発明のその他の態様及び効果は、本発明の原理を一例として図解した添付図面に照らし合わせて以下の詳細な説明から明らかになるであろう。
【００２０】
本発明は、その別の効果と共に、添付図面に照らし合わせて以下の説明を参照することにより最も良く理解することができる。
【００２１】
（好適な実施の形態の説明）
Ｊａｖａ環境で使用するアレイ境界チェッカーの発明を開示する。本発明は、アレイを参照するのに用いられる同じマシンサイクル中に、アレイ境界チェックを実行することによって、余計な付加がないアレイ境界チェックを実行する。以下の説明においては、本発明の完全な理解を可能にするために、多数の特定の細部について記載する。しかし、当業者には、本発明がそれらの特定の細部のうちのいくつかまたは全てがなくとも実施することができることは明らかであろう。また、本発明を不必要に分かりにくくすることがないように、公知の処理工程については詳細に記載していない。
【００２２】
本発明のアレイ境界チェッカーは、好ましくは、３段ハードウェアをベースとするＪａｖａプロセッサに内蔵されている。次に、図１を参照して、一つの具体例としてのＪａｖａプロセッサについて説明する。
【００２３】
図１は、本発明の実施の形態に係る、アレイ境界チェッカー５０を有するＪａｖａプロセッサ１０を示すブロック図である。Ｊａｖａプロセッサ１０は、インストラクションサブシステムと関連する３段パイプラインを有し、該３段パイプラインは、フェッチ段１２と、デコード段１４と、実行段１６とを含む。フェッチ段１２は、インストラクションキャッシュ１７からマシンサイクルごとに１バイトコードフェッチし、１つずつプログラムカウンタ（ＰＣ）アドレスコントローラ１８をインクリメントすることによりインストラクションを獲得する。必要に応じて、フェッチ段１２は、複数のバイトコードを要する単一のＪａｖａインストラクションを生成するために、複数のフェッチを実行する。
【００２４】
そしてインストラクションはデコード段１４を通過し、該デコード段はインストラクションを翻訳処理する。具体的には、デコード段１４は、インストラクションを一つまたはそれ以上のマシンマイクロコードインストラクションにデコードし、これらのマシンマイクロコードインストラクションは、その後、実行段１６により実行される。一般に、一つのマイクロコードインストラクションは、各マシンサイクルの初めに実行段１６を通過する。
【００２５】
最後のマイクロコードインストラクションが実行段１６を通過した後、ＰＣアドレスコントローラ１８がアップデートされる。ＰＣアドレスコントローラ１８は、現在実行されているＪａｖａインストラクションにおけるバイトコードの数にしたがってアップデートされる。
【００２６】
実行段１６の出力は、Ｊａｖａプロセッサ１０全体を回る制御信号を含む。さらに、実行段１６の出力は、アドレスフィールドを含み、該アドレスフィールドは、Ａデータバス２４を利用してローカル可変メモリ２０及び即時データフィールド２２を回る。
【００２７】
Ｊａｖａプロセッサ１０には、Ａデータバス２４とＢデータバス２６の２つのデータバスが含まれている。また、Ｊａｖａプロセッサ１０は、２つのデータサブシステムを含む。一方のデータサブシステムは、ローカル可変メモリ２０と、実行中にＪａｖａインストラクションによって用いられるスタック／ＡＬＵサブシステム２８とを含む。他方のデータサブシステムは、システム・データキャッシュ３０とアレイ境界チェッカー５０とを含む。
【００２８】
ローカル可変メモリ２０は、高性能非同期ＳＲＡＭを含み、該ＳＲＡＭは、単一のポートであり、かつＪａｖａプロセッサ１０及び関連するホストプロセッサ（図示せず）の両方によりアクセス可能である。Ｊａｖａプロセッサ１０が演算中のとき、ホストプロセッサは、好ましくは、ローカル可変メモリ２０からロックされる。マイクロコードインストラクションにおけるＡＤＲ／１６は、アドレスレジスタとして機能し、該ＡＤＲ／１６は、ＳＲＡＭに提示される前に、マイクロコントロールに従って随意に一つだけインクリメントすることができる。該ＳＲＡＭは、好ましくは、５１２×３２ビットであり、かつデータ３２ビットごとにアクセスできる。好ましくは、該ＳＲＡＭの出力データポートは、Ａバス２４に結合されており、該ＳＲＡＭの入力データポートは、Ｂデータバス２６に結合されている。
【００２９】
スタック／ＡＬＵサブシステム２８もまたＪａｖａプロセッサ１０内に含まれている。スタック２８２は、好ましくは、レジスタファイルから構成され、かつ４つのバンク内に構成された、６４　３２ビットワイドワードを含み、各バンクは１６ワード程度の深さである。スタック／ＡＬＵサブシステム２８は、Ａデータバス２４から入力を得て、Ｂデータバス２６に出力を供給する。算術演算が実行されている場合、ＡＬＵ２８４は、適切なバンクからデータを読み出し、算術演算が終了し、かつその結果を上記適切なバンクに書込むまでＷＡＩＴ信号を示す。
【００３０】
システム・データキャッシュ３０は、高性能ライトバック・キャッシュを含み、好ましくは、ライト・アロケートポリシーを実行し、新しいラインが書込みミスのために割当てられる。一般に、システム・データキャッシュ３０は、Ｊａｖａヒープ及び一定のプールに対する高性能の入口として用いられる。好ましくは、システム・データキャッシュ３０は、８ビット及び１６ビットアクセスのためのサポートを有する５１２×３２ビットワイドメモリとして構成される。
【００３１】
アレイアクセス中に、システム・データキャッシュ３０は、アレイ境界チェッカー５０と共に動作する。具体的には、アレイがアクセスされると、アレイの位置がスタック／ＡＬＵサブシステム２８から検索され、システム・データアドレスコントローラ３２に記憶される。アレイの位置は、アレイ基準の形で記憶され、該アレイ基準はアレイの基本アドレスである。アレイ基準を検索した後、アレイインデックスがスタック／ＡＬＵサブシステム２８から検索され、システム・データアドレスコントローラ３２に記憶される。そして、アレイ基準及びアレイインデックスによって特定された位置において、システム・データキャッシュコントローラ３４を用いて、データがシステム・データキャッシュ３０から読出され、あるいは、該キャッシュに書込まれる。
【００３２】
アレイ境界チェッカー５０は、アレイアクセス中に、上記の動作と同時に動作する。Ａデータバス２４及びＢデータバス２６の両方を用いて、アレイ境界チェッカー５０は、各アレイアクセス中に、２種類のアレイ境界チェッックを行う。具体的には、アレイ境界チェッカー５０は、ＮＵＬＬアレイ基準と、範囲外のアレイインデックスエラーとをチェックする。ＮＵＬＬ基準は、アレイアクセスコマンドが、Ｊａｖａアプリケーションによってまだ定義されていないアレイ基準によって試みられたときに発生する。範囲外のアレイインデックスエラーは、アレイアクセスコマンドが、最大アレイインデックス値よりも大きいアレイインデックスを用いて試みられたときに発生する。
【００３３】
上記のエラーのいずれかが検知された場合、適切なエラー信号が生成され、該エラー信号は、アレイに対する書込みアクセスをブロックし、かつアレイに対する読出しアクセスを効果的に無視する。また、該エラー信号は、エラーの種類を識別するのに用いられる２つの値のうちの一つを用いて、制御／ステータスレジスタブロック３６内の例外ステータスレジスタをアップデートする。エラー信号は、適切な値を選択し、それを制御／ステータスレジスタブロック３６内の例外ステータスレジスタにラッチし、例外信号がホストプロセッサに送られる。そしてＪａｖａプロセッサ１０は、停止する。
【００３４】
図２は、本発明の実施の形態に係る、システムメモリ及びアレイ境界チェッカーサブシステム１００を示すブロック図である。システムメモリ及びアレイ境界チェッカーサブシステム１００は、システム・データキャッシュ３０、システム・データアドレスコントローラ３２、システム・データキャッシュコントローラ３４及びアレイ境界チェッカー５０に結合されたＡデータバス２４とＢデータバス２６とを含む。
【００３５】
システム・データアドレスコントローラ３２は、ヒープベースレジスタ１０２、アレイ基準レジスタ１０４及びアレイインデックスレジスタ１０６を有する。動作時において、アレイアクセスコマンドが実行された場合、ホストプロセッサは、一般に、ヒープベースレジスタ１０２を既にロードしており、該ヒープへのアクセスを可能にする。そして、Ｂデータバス２６は、アレイ基準値を、システム・データアドレスコントローラ３２のアレイ基準レジスタ１０４内にロードするために用いられる。上述したように、アレイ基準値は、Ｂデータバス２６を用いて、スタック／ＡＬＵサブシステム２８から得られる。
【００３６】
次に、アレイインデックス値が、アレイインデックスレジスタ１０６にロードされる。アレイ基準値と同様に、アレイインデックス値は、Ｂデータバス２６を用いて、スタック／ＡＬＵサブシステムから得られる。そして、アレイ基準レジスタ１０２に記憶されたアレイ基準値と、アレイインデックスレジスタ１０６に記憶されたアレイインデックス値とは、システム・データキャッシュコントローラ３４を介してシステムデータキャッシュ３０に記憶されたアレイデータにアクセスするために用いられる。
【００３７】
一般に、上記の動作は、３つのマシンサイクルを用いて実行する。それらの３つのマシンサイクル中、アレイ境界チェッカー５０は、システム・データアドレスコントローラ３２と同時に動作して、アレイ境界チェックを実行する。
【００３８】
アレイ境界チェッカー５０は、アレイ基準レジスタ１０８、アレイインデックスレジスタ１１０及び最大アレイインデックスレジスタ１１２を有する。第１のコンパレータ１１４は、アレイ基準レジスタ１０８及びＮＵＬＬ値１１７に結合されており、第２のコンパレータ１１６は、アレイインデックスレジスタ１１０及び最大アレイインデックスレジスタ１１２に結合されている。第１のコンパレータ１１４の出力は、ＮＵＬＬ基準信号１１８をシステムに供給し、第２のコンパレータ１１６の出力は、範囲外のインデックス信号１２０を供給する。
【００３９】
アレイアクセスに用いられる３つのマシンサイクルのうちの最初のマシンサイクル中に、アレイ基準レジスタ１０８がロードされる。アレイ基準値がスタック／ＡＬＵサブシステムから読出されると、それが、Ｂデータバス２６を用いて、アレイ境界チェッカー５０のアレイ基準レジスタ１０８へ供給される。図２を見て分かるように、Ｂデータバス２６は、システム・データアドレスコントローラ３２にも結合されている。従って、最初のマシンサイクル中に、アレイ基準値は、Ｂデータバス２６を用いてシステム・データアドレスコントローラ３２及びアレイ境界チェッカー５０の両方に供給される。
【００４０】
アレイ境界チェッカー５０のアレイ基準レジスタ１０８内にアレイ基準値が得られると、第１のコンパレータ１１４は、アレイ基準値とＮＵＬＬ値１１７とを比較するのに用いられる。アレイ基準レジスタ１０８内に記憶されたアレイ基準値がＮＵＬＬ値１１７と等しい場合には、ＮＵＬＬ基準信号１１８は第１のコンパレータ１１４により示される。
【００４１】
アレイインデックスレジスタ１１０及び最大アレイインデックスレジスタ１１２は、アレイにアクセスするのに用いられる３つのマシンサイクルのうちの２番目のマシンサイクル中にロードされる。アレイ基準値と同様に、アレイインデックス値は、スタック／ＡＬＵサブシステムから読出され、Ｂデータバス２６を用いて、アレイ境界チェッカー５０のアレイインデックスレジスタ１１０へ供給される。アレイ基準値の場合と同様に、アレイインデックス値は、システム・データアドレスコントローラ３２及びアレイ境界チェッカー５０の両方にＢデータバス２６を用いて供給され、該データバスは、両システムに結合されている。
【００４２】
アレイインデックス値に加えて、最大アレイインデックス値が、２番目のマシンサイクル中に、アレイ境界チェッカー５０に供給される。最大アレイインデックス値は、アレイから読み出され、Ａデータバス２４を用いてアレイ境界チェッカー５０の最大アレイインデックスレジスタ１１２に記憶される。上述したように、Ｊａｖａ言語における全てのアレイは、一般にアレイのデータと共に、アレイのサイズを記憶する。境界チェッカー５０は、このアレイサイズ値を最大アレイインデックス値として利用する。
【００４３】
本発明のアレイ境界チェッカー５０は、２つのデータバス、即ち、Ａデータバス２４及びＢデータバス２６があるので、同じマシンサイクル中に、アレイインデックスレジスタ１１０及び最大アレイインデックスレジスタ１１２の両方をロードすることが可能であることに注意すべきである。即ち、Ａデータバス２４は、最大アレイインデックスレジスタ１１２をロードするのに用いられ、Ｂデータバスは、最大アレイインデックスレジスタ１１２と同時に、アレイインデックスレジスタ１１０をロードするのに用いられる。
【００４４】
アレイインデックス値及び最大アレイインデックス値が得られると、第２のコンパレータ１１６は、アレイインデックスレジスタ１１０に記憶されたアレイインデックス値と、最大アレイインデックスレジスタ１１２に記憶された最大アレイインデックス値とを比較する。アレイインデックス値が最大アレイインデックス値よりも大きい場合には、第２のコンパレータ１１６は、範囲外のインデックス信号１２０を示す。
【００４５】
このようにして、本発明のアレイ境界チェッカー５０は、余計なマシンサイクルを用いることなく、アレイ境界チェックを実行する。本発明は、境界チェッカー５０が、システム・データアドレスコントローラ３２によって用いられるのと同じマシンサイクルを利用してアレイ値を実際にロードするので、このように動作することができる。より具体的には、本発明のアレイ境界チェッカー５０は、アレイにアクセスするのに必要な３つのマシンサイクルのうちの最初と２番目のマシンサイクルを用いて、アレイ境界チェックを実行する。エラーの場合、アレイ境界チェッカー５０は、図３を参照して以下に詳細に説明するように、アレイ信号エラー信号１１８及び１２０を示し、これらの信号は、アレイアクセスをブロックまたは無視する。
【００４６】
図３は、本発明の実施の形態に係る、アレイ境界チェックを実行するための方法２００を示すフローチャートである。初期動作２０２において、プロセス動作が実行される。該プロセス動作は、アレイアクセスコマンドのフェッチ及びデコードを及び当業者には明らかなその他のプロセス動作を含む。
【００４７】
アレイ基準値動作２０４において、アレイ基準値が、アレイにアクセスするのに必要な３つのマシンサイクルのうちの最初のマシンサイクル中に、システム・データアドレスコントローラ３２及びアレイ境界チェッカー５０の両方にロードされる。上述したように、アレイ基準値は、アレイアクセスが実行された時間によって、スタック／ＡＬＵサブシステム２８に記憶される。このアレイ基準値は、その後スタック／ＡＬＵサブシステム２８から読出され、Ｂデータバス２６を用いてシステム・データアドレスコントローラ３２及びアレイ境界チェッカー５０の両方に供給される。
【００４８】
図４は、本発明の実施の形態に係る、アレイ値にアクセスするために用いられる３つのマシンサイクルのうちの最初のマシンサイクル３００を示すタイミング図である。最初のマシンサイクル３００中に、３２ビットアレイ基準値が、「先頭−１」の位置におけるスタックから読出され、Ｂデータバス２６上に配置される。図４に示すように、アレイ基準値は、最初のマシンサイクル３００の先頭端部３０２におけるスタックから読出される。
【００４９】
そして、アレイ基準値は、最初のマシンサイクル３００の立ち下がり縁部３０４において、システム・データアドレスコントローラ内のアレイ基準レジスタ及びアレイ境界チェッカー５０内のアレイ基準レジスタ１０８両方に書込まれる。従って、システム・データアドレスコントローラ３２内のアレイ基準レジスタ１０４をロードするのに必要な同じ信号が、アレイ境界チェッカー５０内のアレイ基準レジスタ１０８のロードも同時に実行する。
【００５０】
その後、システム・データアドレスコントローラ３２内のアレイ基準レジスタ１０４及びアレイ境界チェッカー５０内のアレイ基準レジスタ１０８は、要求されたアレイの最初の位置を指すアドレスを含む。そして、アレイ境界チェッカー５０は、アレイ基準値をＮＵＬＬ値と比較することによってその有効性をチェックし、アレイ基準値がＮＵＬＬの場合にはＮＵＬＬ基準信号を生成する。
【００５１】
図３に戻って、アレイインデックス値動作２０６において、アレイインデックス値は、アレイにアクセスするのに必要な３つのマシンサイクルのうちの２番目のマシンサイクル中に、システム・データアドレスコントローラ３２及びアレイ境界チェッカー５０の両方にロードされる。アレイ基準値と同様に、アレイインデックス値は、スタック／ＡＬＵサブシステム２８に記憶される。アレイインデックス値は、スタック／ＡＬＵサブシステム２８から読み出され、Ｂデータバス２６を用いてシステム・データアドレスコントローラ３２及びアレイ境界チェッカー５０の両方に供給される。
【００５２】
図５Ａは、本発明の実施の形態に係る、アレイにアクセスするために用いられる３つのマシンサイクルのうちの２番目のマシンサイクル中のＢデータバス信号を示すタイミング図４００である。２番目のマシンサイクル４００中に、３２ビットのアレイインデックス値は、「先頭」位置におけるスタックから読出され、Ｂデータバス２６上に配置される。図５Ａに示すように、アレイインデックス値は、２番目のマシンサイクル４００の先頭端部４０２におけるスタックから読出される。
【００５３】
そして、アレイインデックス値は、２番目のマシンサイクル４００の立ち上がり縁部４０４において、システム・データアドレスコントローラ３２内のアレイインデックスレジスタ１０６及びアレイ境界チェッカー５０内のアレイインデックスレジスタ１１０の両方に書込まれる。
【００５４】
その後、システム・データアドレスコントローラ３２内のアレイインデックスレジスタ１０６及びアレイ境界チェッカー５０内のアレイインデックスレジスタ１１０の両者は、アレイ内の要求されたデータを指し示すインデックス値を含む。
【００５５】
再び図３に戻って、最大アレイインデックス値は、最大インデックス値動作２０８において、２番目のマシンサイクル中システム・データアドレスコントローラ３２及びアレイ境界チェッカー５０の両方にロードされる。Ｊａｖａ言語におけるアレイの最初の位置は、アレイが保持できる要素の数を含み、該数は最大アレイインデックス値である。システム・データアドレスコントローラ３２内のアレイ基準レジスタ１０４は、このアドレスを含み、かつ直前のマシンサイクル中にロードされたので、システム・データアドレスコントローラ３２内のアレイ基準レジスタ１０４は、最大アレイインデックス値を得るために用いられ、バスＡ２４を用いて、それをアレイ境界チェッカー５０に供給する。
【００５６】
図５Ｂは、本発明の実施の形態に係る、アレイにアクセスするために用いられる３つのマシンサイクルのうちの２番目のマシンサイクル中のＡデータバス信号を示すタイミング図４５０である。２番目のマシンサイクル４５０中に、最大アレイインデックス値は、システム・データキャッシュ３０から読出され、Ａデータバス２４上に配置される。図５Ｂに示すように、最大アレイインデックス値は、２番目のマシンサイクル４５０の先頭端部４５２において、システム・データキャッシュ３０から読出され、２番目のマシンサイクル４５０の立ち上がり縁部４５４において、アレイ境界チェッカー５０内の最大アレイインデックスレジスタ１１２に書込まれる。
【００５７】
従って、２番目のマシンサイクル４００、４５０は、Ａデータバス及びＢデータバス上にトラフィックを生成させる。本発明は、２つのデータバスを用いるので、アレイ境界チェッカー５０内のアレイインデックスレジスタ１１０及び最大アレイインデックスレジスタ１１２は、同じマシンサイクル、即ち、２番目のマシンサイクル４００、４５０中にロードできる。アレイインデックス値及び最大アレイインデックス値の両方をアレイ境界チェッカー５０にロードすると、アレイ境界チェッカー５０は、アレイインデックス値が最大アレイインデックス値よりも大きいか否かを計算することによって、アレイインデックスの有効性をチェックする。アレイ境界チェッカーは、アレイインデックス値が最大アレイインデックス値よりも大きい場合、範囲外のインデックス信号１２０を示す。
【００５８】
図３に戻って、アレイ値は、アレイ値動作２１０において、アレイにアクセスするのに用いられる３つのマシンサイクルのうちの３番目のマシンサイクル中に、メモリ内でアクセスされる。一般に、アレイ値は、この動作中に、システム・データアドレスコントローラ３２を用いて、システム・データキャッシュ３０内でアクセスされる。
【００５９】
図６は、本発明の実施の形態に係る、アレイにアクセスするために用いられる３つのマシンサイクルのうちの３番目のマシンサイクル５００を示すタイミング図である。３番目のマシンサイクル５００中に、アレイ値は、システム・データキャッシュ３０から読出され、Ａデータバス２４上に配置される。図６に示すように、アレイ値は、３番目のマシンサイクル５００の先頭部５０２において、システム・データキャッシュ３０から読出される。そしてアレイ値は、３番目のマシンサイクル５００の立ち上がり縁部５０４において、スタックに書込まれる。
【００６０】
上述したように、アレイ境界チェックは、アレイ値にアクセスするのに必要な前の２つのマシンサイクル、即ち、最初及び２番目のマシンサイクル中に既に実行されている。ＮＵＬＬ基準信号１１８又は範囲外のインデックス信号１２０のいずれかが示されていた場合、例外がホストプロセッサに送られ、好ましくはアレイ値がアクセスされる前に、Ｊａｖａプロセッサ１０が停止される。
【００６１】
図３に戻って、方法２００は、動作２１２において終了し、ポストプロセス動作が実行される。ポストプロセス動作は、次のＪａｖａインストラクション、および当業者には明らかなその他のポストプロセス動作をフェッチ及びデコードすることを含む。有利には、アレイアクセスと同時に境界チェックを実行することによって、本発明は、余計なオーバーヘッドなしで速いＪａｖａアレイ境界チェックを実行できる。
【００６２】
図７は、本発明の実施の形態に係る、Ｊａｖａアレイの境界チェックを実行するための方法６００を示すフローチャートである。最初の動作６０２において、プリプロセス動作が実行される。プリプロセス動作は、アレイアクセスコマンド、および当業者には明らかなその他のプリプロセス動作をフェッチ及びデコードすることを含む。
【００６３】
アレイ基準動作６０４において、アレイ基準は、スタックから読出される。上述したように、アレイ基準値は、アレイアクセスが実行された時間によってスタック／ＡＬＵサブシステム２８に記憶される。この値は、スタックから読出され、Ｂデータバス２６を用いてアレイ境界チェッカー５０に供給される。具体的には、最初のマシンサイクル中に、３２ビットアレイ基準値が、「先頭−１」の位置においてスタックから読出され、Ｂデータバス２６上に配置される。そして、アレイ基準値は、最初のマシンサイクル中に、システム・データアドレスコントローラ３２内のアレイ基準レジスタ１０４及びアレイ境界チェッカー５０内のアレイ基準レジスタ１０８の両方に書込まれる。
【００６４】
動作６０６において、アレイ基準値がＮＵＬＬであるか否かについて決定がなされる。ＮＵＬＬアレイ基準値は、一般に、未定義のアレイのアレイアクセスに起因する。アレイ基準値がＮＵＬＬに等しい場合、プロセス６００は、ＮＵＬＬ基準動作６０８を継続する。しかし、アレイ基準値がＮＵＬＬと等しくない場合には、プロセス６００はアレイインデックス動作６１０を継続する。
【００６５】
ＮＵＬＬ基準動作６０８中に、ＮＵＬＬ基準信号が示され、該ＮＵＬＬ基準信号は、エラーが検出されていることをシステムに知らせる。ＮＵＬＬ基準が使われているか否かを決定するために、アレイ境界チェッカー５０内の第１のコンパレータ１１４は、アレイ境界チェッカー５０のアレイ基準レジスタ１０８に記憶されたアレイ基準値をＮＵＬＬ値１１７と比較する。アレイ基準値がＮＵＬＬと等しい場合には、ＮＵＬＬ基準信号１１８が示される。その後、動作６１８において、方法６００が終了し、Ｊａｖａプロセッサ１０が停止する。
【００６６】
アレイインデックス動作６１０において、アレイインデックス値が、スタックから読出される。アレイ基準値と同様に、アレイインデックス値は、スタック／ＡＬＵサブシステム２８に記憶される。アレイインデックス値は、スタック／ＡＬＵサブシステム２８から読出され、Ｂデータバス２６を用いてアレイ境界チェッカー５０に供給される。具体的には、２番目のマシンサイクル中に、３２ビットアレイインデックス値が、「先頭」位置におけるスタックから読出され、Ｂデータバス２６上に配置される。その後、アレイインデックス値は、２番目のマシンサイクル中に、システム・データアドレスコントローラ３２内のアレイインデックスレジスタ１０６及びアレイ境界チェッカー５０内のアレイインデックスレジスタ１１０の両方に書込まれる。
【００６７】
最大アレイインデックス値は、最大アレイインデックス動作６１２において、システム・データキャッシュ３０から読出される。上述したように、Ｊａｖａ言語におけるアレイの最初の位置は、アレイが保持できる要素の数を含み、該要素の数は最大アレイインデックス値である。システム・データアドレスコントローラ３２内のアレイ基準レジスタ１０４はこのアドレスを含み、かつ直前のマシンサイクル中にロードされるので、システム・データアドレスコントローラ３２内のアレイ基準レジスタ１０４は、最大アレイインデックス値を得るのに用いられ、かつそれをバスＡ２４を用いてアレイ境界チェッカー５０へ供給する。
【００６８】
即ち、２番目のマシンサイクル中に、最大アレイインデックス値は、システム・データキャッシュ３０から読み出され、Ａデータバス２４上に配置される。最大アレイインデックス値は、２番目のマシンサイクル中に、アレイ境界チェッカー５０内の最大アレイインデックスレジスタ１１２にも書込まれる。
【００６９】
本発明は、２つのデータバスを用いるので、アレイ境界チェッカー内のアレイインデックスレジスタ及び最大アレイインデックスレジスタは、同じマシンサイクル、即ち、２番目のマシンサイクル中に、ロードすることができる。
【００７０】
動作６１４において、アレイインデックス値が最大アレイインデックス値よりも大きいか否かについて、決定がなされる。アレイインデックス値は、一般に、Ｊａｖａプログラムが、規定されたアレイの境界内にないインデックス値を有するアレイにアクセスしようとする場合に、最大アレイインデックス値よりも大きい。従って、アレイインデックス値が最大アレイインデックス値よりも大きい場合、方法６００は、範囲外のエラー動作６１６を継続する。さもなければ、方法６００は、動作６１８で終了する。
【００７１】
範囲外信号１２０は、範囲外エラー動作６１６において示される。アレイインデックス値及び最大アレイインデックス値の両方をアレイ境界チェッカー５０にロードすると、アレイ境界チェッカー５０は、アレイインデックスの有効性をチェックする。
【００７２】
アレイインデックス値の有効性を決定するために、アレイ境界チェッカー５０内の第２のコンパレータ１１６は、アレイインデックス値を最大アレイインデックス値と比較し、アレイインデックス値が最大アレイインデックス値よりも大きい場合には、範囲外のインデックス信号１２０を示す。その後、動作６１８において、方法６００は終了し、Ｊａｖａプロセッサは停止する。
【００７３】
動作６１８において、方法６００は停止し、ポストプロセス動作が実行される。ポストプロセス動作は、Ｊａｖａプロセッサ１０を停止すること、Ｊａｖａアプリケーションの連続解釈、および当業者には明らかなその他のポストプロセス動作を含む。特に、Ｊａｖａプロセッサ１０は、動作６１８が、ＮＵＬＬ基準動作６０８あるいは範囲外のインデックスエラー動作６１６のいずれかから来た場合には、停止する。さもなければ、Ｊａｖａプロセッサ１０は、Ｊａｖａアプリケーションが終了するまで、即ち制御がホストプロセッサに戻るポイントにおいて、Ｊａｖａインストラクションを解釈することを継続する。
【００７４】
本発明を、理解を明白にするために、いくつかの詳説において説明してきたが、請求項の範囲内で、変形、変更が実施可能であることは明らかである。従って、本願の実施の形態は、実例として考慮すべきであり、かつ限定されるものではなく、また本発明は、本願明細書に示された詳説に限定されるものではなく、請求項の範囲内で変更することができる。
【図面の簡単な説明】
【図１】
本発明の実施の形態に係る、アレイ境界チェッカーを有するＪａｖａプロセッサを示すブロック図である。
【図２】
本発明の実施の形態に係る、システムメモリ及びアレイ境界チェッカーサブシステムを示すブロック図である。
【図３】
本発明の実施の形態に係る、アレイ境界チェックを実行するための方法を示すフローチャートである。
【図４】
本発明の実施の形態に係る、アレイ値にアクセスするために用いられる３つのマシンサイクルのうちの最初のマシンサイクルを示すタイミング図である。
【図５Ａ】
本発明の実施の形態に係る、アレイにアクセスするために用いられる３つのマシンサイクルのうちの２番目のマシンサイクル中のＢデータバス信号を示すタイミング図である。
【図５Ｂ】
本発明の実施の形態に係る、アレイにアクセスするために用いられる３つのマシンサイクルのうちの２番目のマシンサイクル中のＡデータバス信号を示すタイミング図である。
【図６】
本発明の実施の形態に係る、アレイにアクセスするために用いられる３つのマシンサイクルのうちの３番目のマシンサイクルを示すタイミング図である。
【図７】
本発明の実施の形態に係る、Ｊａｖａアレイの境界チェックを実行するための方法を示すフローチャートである。
【図１】
2004510249.tif 000002
【図２】
2004510249.tif 000003
【図４】
2004510249.tif 000004
【図５Ａ】
2004510249.tif 000005
【図５Ｂ】
2004510249.tif 000006
【図６】
2004510249.tif 000007
【国際公開パンフレット】
2004510249.tif 000008
2004510249.tif 000009
2004510249.tif 000010
2004510249.tif 000011
2004510249.tif 000012
2004510249.tif 000013
2004510249.tif 000014
2004510249.tif 000015
2004510249.tif 000016
2004510249.tif 000017
2004510249.tif 000018
2004510249.tif 000019
2004510249.tif 000020
2004510249.tif 000021
2004510249.tif 000022
2004510249.tif 000023
2004510249.tif 000024
2004510249.tif 000025
2004510249.tif 000026
2004510249.tif 000027
2004510249.tif 000028
2004510249.tif 000029
2004510249.tif 000030
2004510249.tif 000031
2004510249.tif 000032
2004510249.tif 000033