(57)【要約】Ｊａｖａ仮想マシンが、ハードウェア・トランスレータで認識したカスタム・メソッド呼出し命令で標準メソッドの呼出し命令を置き換えるＪａｖａメソッドを実装するシステムについて説明する。ハードウェア・トランスレータはマイクロコード・ユニットからの格納された命令を使用して、プロセッサが専用ハードウェア・ユニットをセットアップするようにする。
2005521933.tif 000002
【特許請求の範囲】
【請求項１】
中間言語命令を受け取ってネイティブ命令を生成するハードウェア・トランスレータ・ユニットを備えるシステムであって、
少なくとも１つの中間言語命令は、メソッドを実行する専用のハードウェア・ユニットをプロセッサが初期化するように、前記ハードウェア・トランスレータ・ユニットが前記プロセッサに送信される少なくとも１つのネイティブ命令を構成するカスタム・メソッド呼出しであるシステム。
【請求項２】
前記ネイティブ命令がレジスタベース命令である請求項１に記載のシステム。
【請求項３】
前記カスタム・メソッドによって前記専用のハードウェア・ユニットとの間でデータの書き込みまたは読み出しが直接実行される請求項１に記載のシステム。
【請求項４】
前記データがバスを介して前記専用のハードウェア・ユニットに送信される請求項３に記載のシステム。
【請求項５】
前記バスがプロセッサ・バスである請求項４に記載のシステム。
【請求項６】
前記バスがシステム・バスである請求項４に記載のシステム。
【請求項７】
前記カスタム・メソッド呼出しに対応する前記中間言語命令のインデックス・ビットが、実行するメソッドのタイプを指定するように定義される請求項１に記載のシステム。
【請求項８】
前記インデックス・ビットがデバイス、関数、タイプのフィールド・ビットを含む請求項７に記載のシステム。
【請求項９】
前記カスタム・メソッド呼出しのスタックのオペランド・フィールド・ビットが、実行するメソッドのタイプを指定するように再定義される請求項１に記載のシステム。
【請求項１０】
前記オペランド・フィールド・ビットが、デバイス、関数、タイプのフィールド・ビットを含む請求項１に記載のシステム。
【請求項１１】
スタックのオペランド・フィールド・ビットと前記カスタム・メソッド呼出しに対応する前記中間言語命令のインデックス・ビットが、実行するメソッドのタイプを指定するように定義される請求項１に記載のシステム。
【請求項１２】
前記オペランド・フィールド・ビットとインデックス・ビットがデバイス、関数、タイプのフィールド・ビットを含む請求項１１に記載のシステム。
【請求項１３】
前記ハードウェア・トランスレータがハードウェア・アクセラレータである請求項１に記載のシステム。
【請求項１４】
前記ハードウェア・トランスレータ・ユニットがマイクロコード・ユニットを含む請求項１に記載のシステム。
【請求項１５】
前記中間言語命令がＪａｖａバイトコードである請求項１に記載のシステム。
【請求項１６】
専用のメソッド呼出しがＪａｖａの仕様で定義されないバイトコードである請求項１に記載のシステム。
【請求項１７】
前記専用のメソッド呼出し命令の引数がメソッドのタイプを示す請求項１に記載のシステム。
【請求項１８】
前記専用のハードウェア・ユニットがグラフィックス・エンジンである請求項１に記載のシステム。
【請求項１９】
前記グラフィックス・エンジンがディスプレイ・バッファに関連付けられる請求項１に記載のシステム。
【請求項２０】
前記専用のハードウェア・ユニットがビデオ・ユニットである請求項１に記載のシステム。
【請求項２１】
前記専用のハードウェア・ユニットがＳＩＭＤユニットである請求項１に記載のシステム。
【請求項２２】
前記専用のハードウェア・ユニットがＤＳＰである請求項１に記載のシステム。
【請求項２３】
前記専用のメソッドの命令が仮想マシンによって生成される請求項１に記載のシステム。
【請求項２４】
一部のメソッドによって仮想マシンが標準のメソッド呼出しをメモリ内の専用のメソッド呼出しで置き換える請求項２３に記載のシステム。
【請求項２５】
前記プロセッサがＪａｖａ仮想マシンを実行する請求項１に記載のシステム。
【請求項２６】
独立したプロセッサが前記仮想マシンを実行する請求項１に記載のシステム。
【請求項２７】
前記プロセッサが専用のプロセッサである請求項１に記載のシステム。
【請求項２８】
前記プロセッサが、前記ハードウェア・トランスレータ・ユニットから提供された命令の他に、前記ハードウェア・トランスレータ・ユニットから提供されない命令を実行する汎用プロセッサである請求項１に記載のシステム。
【請求項２９】
前記ハードウェア・トランスレータ・ユニットがマイクロコード・ユニットを含み、前記マイクロコード・ユニットが前記ハードウェア・トランスレータ・ユニットのスタック・マネージャと対話してネイティブ命令を生成する請求項１に記載のシステム。
【請求項３０】
前記ハードウェア・トランスレータ・ユニットが、前記プロセッサに送信するレジスタベース命令を生成する命令構成ユニットにデータを送信するマイクロコード・ユニットを含む請求項１に記載のシステム。
【請求項３１】
中間言語命令を受け取ってレジスタベース命令を生成するハードウェア・トランスレータ・ユニットを備えるシステムであって、
少なくとも１つのメソッド呼出しによって前記ハードウェア・ユニットがソフトウェアで動作する仮想マシンに制御を渡し、前記仮想マシンはメモリ内のメソッド呼出し命令をカスタム・メソッド呼出し命令で置き換え、前記カスタム・メソッド呼出し命令によって、前記ハードウェア・トランスレータ・ユニットが、前記メソッドを実行する専用のハードウェア・ユニットをプロセッサが初期化するように前記プロセッサに送信される少なくとも１つのレジスタベース命令を構成するシステム。
【請求項３２】
前記ネイティブ命令がレジスタベース命令である請求項３１に記載のシステム。
【請求項３３】
前記ハードウェア・トランスレータ・ユニットがマイクロコード・ユニットを含む請求項３１に記載のシステム。
【請求項３４】
前記中間言語命令がＪａｖａバイトコードである請求項３１に記載のシステム。
【請求項３５】
前記カスタム・メソッド呼出し命令がＪａｖａの仕様で定義されない請求項３１に記載のシステム。
【請求項３６】
前記カスタム・メソッド呼出し命令の引数が前記メソッドのタイプを示す請求項３１に記載のシステム。
【請求項３７】
前記専用のハードウェア・ユニットがグラフィックス・エンジンである請求項３１に記載のシステム。
【請求項３８】
前記プロセッサがＪａｖａ仮想マシンを実行する請求項３１に記載のシステム。
【請求項３９】
独立したプロセッサがＪａｖａ仮想マシンを実行する請求項３１に記載のシステム。
【請求項４０】
前記ハードウェア・トランスレータ・ユニットがハードウェア・トランスレータ・ユニットのスタック・マネージャと対話してレジスタベース命令を生成するマイクロコード・ユニットを含む請求項３１に記載のシステム。
【請求項４１】
前記ハードウェア・トランスレータ・ユニット内の命令構成器が、マイクロコード・ユニットからデータを受け取り、レジスタベース命令を生成する請求項３１に記載のシステム。
【請求項４２】
中間言語命令を受け取ってネイティブ命令を生成するハードウェア・トランスレータ・ユニットを備えるシステムであって、少なくとも１つの中間言語命令は、メソッドを実行するグラフィックス・エンジンをプロセッサが初期化するように、前記ハードウェア・トランスレータ・ユニットが前記プロセッサに送信される少なくとも１つのネイティブ命令を構成するカスタム・グラフィックス・メソッド呼出しであるシステム。
【請求項４３】
前記ネイティブ命令がレジスタベース命令である請求項４２に記載のシステム。
【請求項４４】
前記ハードウェア・トランスレータ・ユニットがマイクロコード・ユニットを含む請求項４２に記載のシステム。
【請求項４５】
前記グラフィックス・エンジンがディスプレイ・バッファに関連付けられる請求項４２に記載のシステム。
【請求項４６】
前記グラフィックス・エンジンがディスプレイに関連付けられる請求項４２に記載のシステム。
【請求項４７】
前記グラフィックス・エンジンが液晶ディスプレイの表示を生成する請求項４２に記載のシステム。
【請求項４８】
前記中間言語命令がＪａｖａバイトコードである請求項４２に記載のシステム。
【請求項４９】
前記カスタム・メソッド呼出し命令がＪａｖａの仕様で定義されない請求項４２に記載のシステム。
【請求項５０】
前記カスタム・メソッド呼出し命令の引数が前記メソッドのタイプを示す請求項４２に記載のシステム。
【請求項５１】
前記カスタム・メソッドの命令が仮想マシンによって生成される請求項４２に記載のシステム。
【請求項５２】
一部のメソッドによって仮想マシンが前記標準のメソッド呼出し命令をカスタム・メソッド呼出し命令で置き換える請求項５１に記載のシステム。
【請求項５３】
前記プロセッサが仮想マシンを実行する請求項４２に記載のシステム。
【請求項５４】
独立したプロセッサが前記仮想マシンを実行する請求項４２に記載のシステム。
【請求項５５】
マイクロコード・ユニットが前記スタック・マネージャおよび前記ハードウェア・トランスレータ・ユニットと対話してレジスタベース命令を生成する請求項４２に記載のシステム。
【請求項５６】
前記ハードウェア・トランスレータ・ユニット内の命令構成ユニットがマイクロコード・ユニットからデータを受け取り、前記プロセッサに送信する前記ネイティブ命令を生成する請求項４２に記載のシステム。
【請求項５７】
ハードウェア・トランスレータ・ユニットにおいて、中間言語命令を受け取り、ネイティブ命令を生成する方法であって、少なくとも１つの中間言語命令は、前記ハードウェア・トランスレータ・ユニットがプロセッサに送信される少なくとも１つのネイティブ命令を構成するカスタム・メソッド呼出しであり、
前記プロセッサにおいて、ネイティブなカスタム命令に応答して、前記カスタム・メソッドを実行する専用のハードウェア・ユニットを初期化する方法。
【請求項５８】
前記カスタム・メソッドによってデータの書き込みまたは読み出しが前記専用のハードウェア・ユニットとの間で直接実行される請求項５７に記載の方法。
【請求項５９】
バスを介して前記専用のハードウェア・ユニットに前記データが送信される請求項５７に記載の方法。
【請求項６０】
前記バスがプロセッサ・バスである請求項５９に記載の方法。
【請求項６１】
前記バスがシステム・バスである請求項５７に記載の方法。
【請求項６２】
前記カスタム・メソッド呼出しに対応する前記中間言語命令のインデックス・ビットが、実行するメソッドのタイプを指定するように定義される請求項５７に記載の方法。
【請求項６３】
前記インデックス・ビットがデバイス、関数、タイプのフィールド・ビットを含む請求項６２に記載の方法。
【請求項６４】
前記カスタム・メソッド呼出しの前記スタックのオペランド・フィールド・ビットが、実行するメソッドのタイプを指定するように再定義される請求項５７に記載の方法。
【請求項６５】
前記オペランド・フィールド・ビットがデバイス、関数、タイプのフィールド・ビットを含む請求項５７に記載の方法。
【請求項６６】
前記スタックのオペランド・フィールド・ビットと前記カスタム・メソッド呼出しに対応する前記中間言語命令のインデックス・ビットが、実行するメソッドのタイプを指定するように定義される請求項５７に記載の方法。
【請求項６７】
前記オペランド・フィールド・ビットおよびインデックス・ビットがデバイス、関数、タイプのフィールド・ビットを含む請求項６６に記載の方法。
【請求項６８】
前記ハードウェア・トランスレータがハードウェア・アクセラレータである請求項５７に記載の方法。
【請求項６９】
前記ユニットがマイクロコード・ユニットを含む請求項５７に記載の方法。
【請求項７０】
前記中間言語命令がＪａｖａバイトコードである請求項５７に記載の方法。
【請求項７１】
前記カスタム・メソッド呼出しがＪａｖａの仕様で定義されないバイトコードである請求項５７に記載の方法。
【請求項７２】
前記カスタム・メソッド呼出し命令の引数がメソッドのタイプを示す請求項５７に記載の方法。
【請求項７３】
前記専用ハードウェア・ユニットがグラフィックス・エンジンである請求項５７に記載の方法。
【請求項７４】
前記グラフィックス・エンジンがディスプレイ・バッファに関連付けられる請求項５７に記載の方法。
【請求項７５】
前記専用のハードウェア・ユニットがビデオ・ユニットである請求項５７に記載の方法。
【請求項７６】
前記専用のハードウェア・ユニットがＳＩＭＤユニットである請求項５７に記載の方法。
【請求項７７】
前記専用のハードウェア・ユニットがＤＳＰである請求項５７に記載の方法。
【請求項７８】
前記カスタム・メソッドの命令が仮想マシンによって生成される請求項５７に記載の方法。
【請求項７９】
一部のメソッドによって前記仮想マシンが標準のメソッド呼出しをメモリ内のカスタム・メソッド呼出しで置き換える請求項７８に記載の方法。
【請求項８０】
前記プロセッサがＪａｖａ仮想マシンを実行する請求項５７に記載の方法。
【請求項８１】
独立したプロセッサがＪａｖａ仮想マシンを実行する請求項５７に記載の方法。
【請求項８２】
前記プロセッサが専用のプロセッサである請求項５７に記載の方法。
【請求項８３】
前記プロセッサが、前記ハードウェア・トランスレータ・ユニットから提供された命令の他に、前記ハードウェア・トランスレータ・ユニットから提供されない命令を実行する汎用プロセッサである請求項５７に記載の方法。
【請求項８４】
前記ユニットが前記スタック・マネージャおよび前記ハードウェア・トランスレータ・ユニットと対話してネイティブ命令を生成する請求項５７に記載の方法。
【請求項８５】
前記ユニットが、前記プロセッサに送信するネイティブ命令を生成する命令構成ユニットにデータを送信する請求項５７に記載の方法。
【請求項８６】
前記ネイティブ命令がレジスタベース命令である請求項５７に記載の方法。
【請求項８７】
未定義のバイトコードをカスタム・バイトコードとしてインタプリートし、前記カスタム・バイトコードによって、ネイティブ・メソッドを使用せずにカスタム・メソッドを実行する専用のハードウェア・ユニットをプロセッサが初期化するステップと、
前記専用のハードウェア・ユニットで前記カスタム・メソッドを実行するステップと
を含む方法。
【請求項８８】
前記カスタム・メソッドによってデータの書き込みまたは読み出しが専用のハードウェア・ユニットとの間で直接実行される請求項８７に記載の方法。
【請求項８９】
バスを介して専用のハードウェア・ユニットにデータが送信される請求項８８に記載の方法。
【請求項９０】
前記バスがプロセッサ・バスである請求項８９に記載の方法。
【請求項９１】
前記バスがシステム・バスである請求項８９に記載の方法。
【請求項９２】
前記カスタム・メソッド呼出しに対応する前記中間言語命令のインデックス・ビットが、実行するメソッドのタイプを指定するように定義される請求項８７に記載の方法。
【請求項９３】
前記インデックス・ビットがデバイス、関数、タイプのフィールド・ビットを含む請求項９２に記載の方法。
【請求項９４】
前記カスタム・メソッド呼出しの前記スタックのオペランド・フィールド・ビットが、実行するメソッドのタイプを指定するように再定義される請求項８７に記載の方法。
【請求項９５】
前記オペランド・フィールド・ビットがデバイス、関数、タイプのフィールド・ビットを含む請求項８７に記載の方法。
【請求項９６】
前記スタックのオペランド・フィールド・ビットと前記カスタム・メソッド呼出しに対応する前記中間言語命令のインデックス・ビットが、実行するメソッドのタイプを指定するように定義される請求項８７に記載の方法。
【請求項９７】
前記オペランド・フィールド・ビットとインデックス・ビットがデバイス、関数、タイプのフィールド・ビットを含む請求項９６に記載の方法。
【請求項９８】
前記カスタム・メソッド呼出しがＪａｖａの仕様で定義されないバイトコードである請求項８７に記載の方法。
【請求項９９】
前記カスタム・メソッド呼出し命令の引数がメソッドのタイプを示す請求項８７に記載の方法。
【請求項１００】
前記専用のハードウェア・ユニットがグラフィックス・エンジンである請求項８７に記載の方法。
【請求項１０１】
前記グラフィックス・エンジンがディスプレイ・バッファに関連付けられる請求項８７に記載の方法。
【請求項１０２】
前記専用のハードウェア・ユニットがビデオ・ユニットである請求項８７に記載の方法。
【請求項１０３】
前記専用のハードウェア・ユニットがＳＩＭＤユニットである請求項８７に記載の方法。
【請求項１０４】
前記専用のハードウェア・ユニットがＤＳＰである請求項８７に記載の方法。
【請求項１０５】
前記カスタム・メソッドの命令が仮想マシンによって生成される請求項８７に記載の方法。
【請求項１０６】
一部のメソッドによって前記仮想マシンが標準のメソッド呼出しをメモリ内のカスタム・メソッド呼出しで置き換える請求項１０５に記載の方法。
【請求項１０７】
ハードウェア・ユニットが中間言語命令をネイティブ命令に変換する請求項８７に記載の方法。
【請求項１０８】
中間言語命令を受け取ってネイティブ命令を生成するハードウェア・トランスレータ・ユニットを備えるシステムであって、
少なくとも１つの中間言語命令は、メソッドを実行する専用のハードウェア・ユニットをプロセッサが初期化するように、前記ハードウェア・トランスレータ・ユニットが前記プロセッサに送信される少なくとも１つのネイティブ命令を構成するカスタム・メソッド呼出しであり、
前記ハードウェア・トランスレータ・ユニットとプロセッサが同一のチップ上にあるシステム。
【請求項１０９】
前記プロセッサがチップ上のシステムの要素である請求項１０８に記載のシステム。
【請求項１１０】
中間言語命令を受け取ってネイティブ命令を生成するハードウェア・トランスレータ・ユニットを備えるシステムであって、
少なくとも１つの中間言語命令が、メソッドを実行する専用のハードウェア・ユニットをプロセッサが初期化するように、前記ハードウェア・トランスレータ・ユニットが前記プロセッサに送信される少なくとも１つのネイティブ命令を構成するカスタム・メソッド呼出しであり、
前記ハードウェア・トランスレータ・ユニットが前記プロセッサと別のチップ上にあり、前記プロセッサ・チップと前記ハードウェア・トランスレータ・ユニットがスタック・パッケージまたはマルチチップ・パッケージに配置されたシステム。
【請求項１１１】
前記プロセッサがチップ上のシステムの要素である請求項１１０に記載のシステム。
【請求項１１２】
中間言語命令を受け取ってネイティブ命令を生成するハードウェア・トランスレータ・ユニットを備えるシステムであって、
少なくとも１つの中間言語命令は、メソッドを実行する専用のハードウェア・ユニットをプロセッサが初期化するように、前記ハードウェア・トランスレータ・ユニットが前記プロセッサに送信される少なくとも１つのネイティブ命令を構成するカスタム・メソッド呼出しであり、
前記ハードウェア・トランスレータ・ユニットが前記中間言語命令を格納するメモリに組み込まれており、前記ハードウェア・トランスレータ・ユニットおよびメモリが同一のチップ上に配置されるシステム。
【請求項１１３】
中間言語命令を受け取ってネイティブ命令を生成するハードウェア・トランスレータ・ユニットを備えるシステムであって、
少なくとも１つの中間言語命令は、メソッドを実行する専用のハードウェア・ユニットをプロセッサが初期化するように、前記ハードウェア・トランスレータ・ユニットがプロセッサに送信される少なくとも１つのネイティブ命令を構成するカスタム・メソッド呼出しであり、
前記ハードウェア・トランスレータ・ユニットがスタック・パッケージまたはマルチチップ・パッケージ内のメモリ・チップと同じチップ上に構成されるシステム。
【請求項１１４】
中間言語命令を受け取ってネイティブ命令を生成するハードウェア・トランスレータ・ユニットを備えるシステムであって、
少なくとも１つの中間言語命令は、メソッドを実行する専用のハードウェア・ユニットをプロセッサが初期化するように、前記ハードウェア・トランスレータ・ユニットが前記プロセッサに送信される少なくとも１つのネイティブ命令を構成するカスタム・メソッド呼出しであり、
前記カスタム・メソッド呼出しがインデックス・ビットを前記カスタム・メソッドの記述子として使用するシステム。
【請求項１１５】
中間言語命令を受け取ってネイティブ命令を生成するハードウェア・トランスレータ・ユニットを備えるシステムであって、
少なくとも１つの中間言語命令は、メソッドを実行する専用のハードウェア・ユニットをプロセッサが初期化するように、前記ハードウェア・トランスレータ・ユニットが前記プロセッサに送信される少なくとも１つのネイティブ命令を構成するカスタム・メソッド呼出しであり、
前記カスタム・メソッドの記述子が前記スタックにロードされるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｊａｖａ（登録商標）バイトコードをレジスタベース命令、つまりプロセッサとＪａｖａアクセラレータで実行できる命令に変換するためのハードウェア・ユニットに関する。さらに、本発明はソフトウェアベースのＪａｖａの実行にも適用できる。
【背景技術】
【０００２】
Ｊａｖａ（商標）は、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ社で開発されたオブジェクト指向のプログラミング言語である。Ｊａｖａ言語は小規模かつシンプルであり、ソースとバイナリの両方のレベルで様々なプラットフォームや様々なオペレーティング・システムに移植できる。このことにより、Ｊａｖａプログラミング言語はインターネット上に広く普及してきた。
【０００３】
Ｊａｖａがプラットフォームに依存しないこととそのコードがコンパクトなことは、従来のプログラミング言語に比較した場合にＪａｖａの非常に重要な利点である。従来のプログラミング言語では、プログラムのソース・コードがコンパイラに送信され、コンパイラがこのプログラムをマシン・コードすなわちプロセッサの命令に変換する。プロセッサの命令は、システムのプロセッサにネイティブである。ソース・コードがＩｎｔｅｌベースのシステム上でコンパイルされると、結果として生成されたプログラムが動作するのは他のＩｎｔｅｌベースのシステムに限られる。別のシステムでプログラムを実行する必要がある場合は、元のソース・コードに戻り、新しいプロセッサ用のコンパイラを使用してコンパイルし直し、この別のプロセッサに固有のマシン・コードを生成する必要がある。
【０００４】
Ｊａｖａの動作は多様である。ＪａｖａコンパイラはＪａｖａプログラムを用い、特定のプロセッサのマシン・コードを生成する代わりにバイトコードを生成する。バイトコードはマシン・コードと同様の命令群である。Ｊａｖａプログラムを実行するには、バイトコード・インタプリタがＪａｖａバイトコードを用いて、等価でネイティブなプロセッサの命令に変換してＪａｖａプログラムを実行する。Ｊａｖａバイトコード・インタプリタは、Ｊａｖａ仮想マシン（ＪＶＭ：Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）の１つのコンポーネントである。
【０００５】
Ｊａｖａプログラムがバイトコード形式であるということは、このプログラムが１つのシステムに固有でなく、Ｊａｖａ仮想マシンを使用できる限り任意のプラットフォームや任意のオペレーティング・システムで実行できることを意味する。したがって、バイナリのバイトコード・ファイルは様々なプラットフォームで実行可能である。
【０００６】
バイトコードを使用することで問題となるのは実行速度である。システムに固有のプログラムは、プログラム自体がコンパイルされたハードウェア上で直接実行されるので、このマシン上のＪａｖａ仮想マシンで処理する必要のあるＪａｖａバイトコードに比べてはるかに高速である。プロセッサは、Ｊａｖａ仮想マシンでＪａｖａバイトコードをネイティブ命令に変換し、さらにプロセッサに固有の命令を実行するという２つの作業を行う必要がある。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
Ｊａｖａソフトウェアのパフォーマンスの低さ（特に埋め込みシステム設計の場合）は周知の問題であり、パフォーマンスを向上させるための様々な技術が導入されている。しかし、こうした技術を使用すると他の好ましくない副作用が発生する。こうした技術の非常に一般的なものには、システムおよび／またはマイクロプロセッサのクロック周波数を上げる方法、ＪａｖａバイトコードをコンパイルするＪＶＭを変更する方法、専用のＪａｖａマイクロプロセッサを使用する方法などがある。
【０００８】
マイクロプロセッサのクロック周波数を上げると、システム全体のパフォーマンスが向上し、Ｊａｖａソフトウェア実行のパフォーマンスも向上する。しかし、周波数が向上してもＪａｖａソフトウェアのパフォーマンスが１対１に向上するわけではない。周波数が向上すると消費電力も高くなるので、システム全体のコストが高くなる。換言すれば、マイクロプロセッサのクロック周波数を上げるのは、Ｊａｖａソフトウェアのパフォーマンスを向上する方法としては効率が悪い。
【０００９】
コンパイルの方法（すなわちジャストインタイム「ＪＩＴ」コンパイル）を使用すると、パフォーマンスの変動が大きくなる。コンパイル時にソフトウェア実行の待ち時間が長くなるためである。また、コンパイルすることでシステム・メモリの使用量も増大する。これは、Ｊａｖａプログラムをコンパイルして保存すると、元のＪａｖａプログラムの保存に必要なメモリ容量の５〜１０倍の容量が必要になるためである。
【００１０】
専用のＪａｖａマイクロプロセッサはＪａｖａバイトコード命令をネイティブな言語として使用しており、Ｊａｖａソフトウェアを実行する上では一般的な商用のマイクロプロセッサより高パフォーマンスであるが、設計上の重要な制約が発生する。専用のＪａｖａマイクロプロセッサを使用すると、必然的にこれを中心としてシステム設計が展開され、通常はＪａｖａマイクロプロセッサ・ベンダーからしか入手できない特殊な開発ツールの利用を余儀なくされる。さらに、こうした特性をもつ商用のソフトウェアは存在しないので、すべてのオペレーティング・システム・ソフトウェアやデバイス・ドライバを一から特注で開発する必要がある。
【００１１】
多くのＪａｖａの命令はメソッドに関連する。「Ｔｈｅ  Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ（Ｊａｖａ仮想マシンの仕様）」（Ｙｅｌｌｉｎ  ｅｔ  ａｌ．）で説明するように、メソッドには「インスタンス・メソッド」と「クラス・メソッド（静的メソッド）」の２種類がある。インスタンス・メソッドを呼び出す前にはインスタンスが必要であるが、クラス・メソッドではインスタンスが不要である。また、インスタンス・メソッドではレート・バインドを使用するが、クラス・メソッドでは静的バインドまたはアーリー・バインドを使用する。Ｊａｖａ仮想マシンでクラス・メソッドが呼び出される場合は、コンパイル時に認識されるオブジェクト参照に基づいて呼び出されるメソッドが選択される。Ｊａｖａ仮想マシンでインスタンス・メソッドが呼び出される場合は、実行時にのみ認識されるオブジェクトの実際のクラスに基づいて呼び出されるメソッドが選択される。メソッドを呼び出すＪａｖａバイトコードには、ｉｎｖｏｋｅｖｉｒｔｕａｌ、ｉｎｖｏｋｅｓｔａｔｉｃｓ、ｉｖｏｋｅｉｎｔｅｒｆａｃｅなどがある。
【００１２】
図８に、メソッドを呼び出すＪａｖａプログラムからコンパイラがバイトコードを生成する方法を示す。メソッドへの参照は、最初はシンボリックである。すべての呼出し命令は、最初にシンボリック参照を含む固定のプール・エントリを参照する。ＪＶＭが呼出し命令を検出すると、様々なチェックを実行してメソッドを検出することでシンボリック参照が解決され、シンボリック参照が直接参照に置き換えられる。参照を解決し、メソッドを呼び出すプロセスは非常に低速になる可能性がある。実行速度の低下を回避する周知の方法は、シンボリック参照を解決した直後の呼出しで呼出し命令の名前を変更することである。これで新しい命令になり、ＪＶＭがもう一度検出した場合に、非常に高速のメソッド呼出しを実行できる命令と認識される。呼出し命令は、Ｊａｖａメソッドとネイティブ・メソッドの両方の呼出しに使用される。Ｊａｖａメソッドの場合は、仮想マシンが呼び出すＪａｖａメソッドごとに新しいスタック・フレーム（メソッドのローカル変数、オペランド・スタック、ＪＶＭで必要なその他のデータ）を作成する。オペランド・スタックとローカル変数のサイズは、コンパイル時に計算され、クラス・ファイルに配置される。ＪＶＭは、Ｊａｖａメソッドを呼び出すときに適切なサイズのスタック・フレームを作成し、この新しいスタック・フレームをＪａｖａスタック（複数のスタック・フレームで構成される）にプッシュする。インスタンス・メソッドの場合は、ＪＶＭが呼出し側メソッドのスタック・フレームのオペランド・スタックから参照と引数をポップする。ＪＶＭは新しいスタック・フレームにローカル変数０として参照を配置する。さらに、すべての引数は後続のローカル変数、すなわちローカル変数１、２、３、・・・として配置される。クラス・メソッドの場合は、呼出し側メソッドのオペランド・スタックから引数のみが新しいスタック・フレームにローカル変数１、２、３、・・・として配置される。新しいスタック・フレームに引数が（インスタンス・メソッドの場合は参照も）配置されると、ＪＶＭは新しいスタック・フレームをカレントとし、新しいメソッドの最初の命令を指すようにプログラム・カウンタを設定する。複数の命令がメソッドから返される。戻り値がある場合は、必ずオペランド・スタックに格納される。この戻り値は、オペランド・スタックからポップされ、呼出し側メソッドのスタック・フレームのオペランド・スタックにプッシュされる。カレント・メソッドのスタック・フレームがポップされ、呼出し側メソッドのスタック・フレームがカレントになる。プログラム・カウンタは、メソッドを呼出した呼出し側メソッド命令の次の命令にセットされる。以上の説明はＪａｖａメソッドに関するものであるが、ＪＶＭは一般的には「実装に依存する」ネイティブ・メソッドを呼び出すことができる。ネイティブ・メソッドが呼び出された場合、ＪＶＭは新しいスタック・フレームをＪａｖａスタックにプッシュしない。引数が呼出し側メソッドのオペランド・スタックから渡され、戻り値がオペランド・スタックに返される。ネイティブ・メソッドが戻るときにもう一度Ｊａｖａスタックが使用される。多くのＪａｖａメソッドは、システムでローカルに保持するライブラリ内に実装できる。Ｊａｖａプログラムは、このようなローカル・ライブラリ内のメソッドにアクセスでき、メソッドを使用して様々な関数を実装できる。このような関数にはグラフィックス関数が含まれる。Ｊａｖａで定義するローカル・ライブラリの例には、液晶ディスプレイ、ＰＮＧイメージ・デコーダ、あるいはマルチメディア・ライブラリがある。このようなＪａｖａアプリケーションのオペレーションの速度を上げるために、たびたびネイティブ・メソッドが使用される。ネイティブ・メソッドは、実装をＣやＣ＋＋のような別のプログラミング言語で記述したＪａｖａメソッドである。ネイティブ・メソッドを使用すると、Ｊａｖａメソッドのオペレーションの速度を上げることができる。これは、実装がＪａｖａのようなインタプリタ言語でなくコンパイルされた言語で記述されているためである。
【００１３】
このような呼出し命令には、通常は固定のプール・インデックスまたは固定のプール・インデックスに代わる直接参照が続く。
【００１４】
メソッドを高速化する特殊なハードウェアの有無にかかわらず、アプリケーションがメソッドを高パフォーマンスで直接的かつ効率的に実行できる、メソッドの呼出しを処理する改良型のシステムを備えることが望まれている。
【課題を解決するための手段】
【００１５】
本発明の例示的な実施態様は、オペレーティング・システムがサポートするＣＰＵ上で動作するＪａｖａ仮想マシン（ＪＶＭ）を備えている。本システムは、Ｊａｖａコードを実行するためのハードウェア・アシストを備えていてもよいし、備えていなくてもよい。ハードウェア・アシストは、コプロセッサの形式でもよいし、ＣＰＵに組み込まれていてもよい。本システムでは、アプリケーションから呼び出される様々な関数を実行するシステムまたはデバイス（セル・フォンやセット・トップ・ボックスなど）上にＪａｖａライブラリが常駐している。このようなアプリケーションは、セル・フォンのキー・スキャンのようにシンプルなものでもよいし、セル・フォンの画面にイメージやマルチメディア・イメージを描くような複雑なものでもよい。Ｊａｖａハードウェア・アシストの１つの例は、マイクロコードを使用するアクセラレータである。アプリケーションでは、デバイス上に常駐するＪａｖａライブラリまたはネイティブ・ライブラリ内のメソッドを前述の関数のいくつかに組み込むことができる。こうしたライブラリは、Ｅｔｈｅｒｎｅｔ（登録商標）、ＧＳＭなどの有線または無線のネットワークを介して動的にダウンロードすることもできる。
【００１６】
本発明の１つの実施態様には、Ｊａｖａのハードウェア・トランスレータ・ユニットが含まれている。カスタム・メソッド呼出し命令、すなわちｉｎｖｏｋｅ−ｃｕｓｔｏｍ命令（Ｊａｖａ仮想マシンの仕様で指定されたｉｎｖｏｋｅ−ｓｐｅｃｉａｌ命令とは異なる）が発行されると、ハードウェア・トランスレータ・ユニットがレジスタベース命令を構成する。この命令がプロセッサに送信されると、プロセッサはメソッドの全体または一部を実行する専用またはカスタム・ハードウェア・ユニットを初期化する。この方法では、専用のハードウェア・ユニットはプロセッサのオペレーションから独立し、プロセッサのオペレーションと並行して実行できる。ｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッドを呼び出す前に、該当する引数および／または参照がオペランド・スタックにプッシュされる。標準の呼出しの後にはメソッドへの直接参照の固定のプール参照が続き、ｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッドには１つの実施態様のデバイス、関数、タイプの情報が続く。
【００１７】
１つの実施態様では、ｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッド呼出し命令はＪａｖａの仕様または実装に依存するバイトコード（２５４および２５５）による割り当てられていないＪａｖａバイトコードであり、バイトコードの後に複数のバイトを配置できる。Ｊａｖａアプリケーションが起動すると、システムまたはデバイスによってＪＶＭが呼び出され、仮想マシンが動作している間に、インタプリタ・ループが検出されるとハードウェア・トランスレータが有効になる。ハードウェア・トランスレータは、バイトコードのデコードを開始し、レジスタベース命令を生成する。レジスタベース命令は、ＲＩＳＣ、ＣＩＳＣ、ＤＳＰ、ＳＩＭＤ、ＶＬＩＷなどのユニット用である。トランスレータがネイティブ・メソッド呼出しを検出すると、標準の呼出し命令がｉｎｖｏｋｅ−ｃｕｓｔｏｍ呼出し命令に置き換えられる。この作業は、ハードウェア・トランスレータで直接実行できるが、例外の生成またはホスト・プロセッサへのコールバックによっても実行できる。１つの実施態様では、トランスレータはホスト・プロセッサに組み込むことができる。その後、カスタム呼出し命令がハードウェア・トランスレータ・ユニットにロードされると、マイクロコード・ユニットを使用してレジスタベース命令が構成される。レジスタベース命令によって、専用のハードウェア・トランスレータ・ユニットがセットアップされ、メソッドが実行される。専用のハードウェア・ユニットの例には、グラフィックス・エンジン、ビデオ・エンジン、ＳＩＭＤ（ｓｉｎｇｌｅ−ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ）ユニット、デジタル・シグナル・プロセッサ（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）、ダイレクト・メモリ・アクセス（ＤＭＡ：ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）ユニットなどの演算装置や処理装置があり、ソフトウェアとしてもハードウェアとしても実装できる。
【発明を実施するための最良の形態】
【００１８】
図１は、本発明の１つの実施形態のシステムの１つの実施形態を示す図である。ステップ２０で、アプリケーションまたはアプレットが提供される。ステップ２２で、クラス・ローダーがアプリケーションの実行に必要なクラスをロードする。オプションのステップ２４で、バイトコードが有効であることをバイトコード・ベリファイアが確認する。バイトコードが有効であることをバイトコード・ベリファイアが確認すると、システムはバイトコード・インタプリタに入る。ステップ２６で、バイトコードがコールバック・バイトコードかどうかをハードウェア・トランスレータ・ユニットが判断する。「はい」の場合、ハードウェア・トランスレータ・ユニットによって、修正されたＪａｖａ仮想マシンなどの仮想マシンがプロセッサにロードされる。ステップ２８で、メソッドがｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッドかどうかをソフトウェアがチェックする。ｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッドでない場合はステップ３０に進み、ソフトウェアでバイトコードが実行され、ハードウェアに制御が返される。ｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッドの場合は、ステップ３２でｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードが生成され、ランダム・アクセス・メモリ（ＲＡＭ）に格納される。１つの実施形態では、ｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードは割り当てられていないバイトコードである。この新しいバイトコードは、参照が解決されたｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードであるのが好ましい。バイトコード・ベリファイアがバイトコードをチェックしてから置き換えが行われるのが好ましい。命令がコールバック・バイトコードでない場合は、ステップ３４でこの命令がｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードかどうかをハードウェア・ユニットがチェックする。ｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードでない場合は、ステップ３６でこのバイトコードがハードウェアで実行される。ｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードの場合は、ステップ３８でハードウェア・システムがこのｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードのマイクロコードを開始する。マイクロコードは、専用のハードウェア・ユニットのオペレーションの準備をする。たとえば、グラフィックス・ユニットでは描く線（ｄｒａｗｉｎｇ  ｌｉｎｅｓ）のＸｓｔａｒｔ、Ｙｓｔａｒｔ、Ｘｅｎｄ、Ｙｅｎｄ、色がハードウェア・レジスタに書き込まれる。あるいはステップ３８で、ｉｎｖｏｋｅ−ｃｕｓｔｏｍ命令がソフトウェアで実行され、専用のハードウェア・ユニット・レジスタの読み出しまたは書き込みが行われる。ステップ４０で、次のバイトコードがチェックされる。ただし、ハードウェア・ユニット内のマイクロコードを使用してｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッドが実行されるのは、このｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードが標準のバイトコードに置き換えられてからである。
【００１９】
ｉｎｖｏｋｅ−ｃｕｓｔｏｍ命令全体の長さは３バイトであり、標準の呼出し命令と同じである。つまり、命令が１バイト、インデックスが２バイトである。命令長を一定に保つことで、実行するコードに伴う他のバイトコードが提供する相対参照の再計算を回避できる。この命令長は、インデックスのいくつかのビットで特殊な間接エンコード(indirection emcoding)を行うことによって拡張できる。図９に、デバイス、関数、タイプをインデックス・フィールドの代わりに配置する方法の例を示す。２つのインデックス・バイト（Ｉ１５〜Ｉ０）は、特定のデバイス、関数、パラメータのスタックについて、Ｉ１５〜Ｉ１３で８つのデバイス・タイプ（すなわちビデオ・ユニット（０００）、グラフィックス・ユニット（００１）、ＳＩＭＤユニット（０１０）を示し、ネットワーク・ゲートウェイ（０１１）、マルチメディア・メッセージング（１００）など）を示し、Ｉ１２〜Ｉ８で８つのデバイスのそれぞれについて１６の関数を示し、Ｉ７〜Ｉ６で関数タイプのそれぞれを表す４つのパラメータのタイプを示し、Ｉ６〜Ｉ０で引数の数（最大１２８）を示すことができる。たとえば、グラフィックス・ハードウェア・ユニットでアンチエイリアス・ラインを描く場合に考えられる割り当ては、Ｉ１５〜Ｉ１３が００１（グラフィックス・ユニット）、Ｉ１２〜Ｉ８が００００（ｌｉｎｅ  ｄｒａｗ関数）、Ｉ７〜Ｉ６が００（アンチエイリアス）、さらにＩ６〜Ｉ０が００００１０１（５オペランド、すなわちＸｓｔａｒｔ、Ｙｓｔａｒｔ、Ｘｅｎｄ、Ｙｅｎｄ、色）である。インデックス・フィールドの特定のビットの割り当ては、市販の製品の種類に応じた特定の実装や関数のニーズによって変わる可能性がある。こうしたインデックス・ビットの割り当ての例を図８に示す。上の例は、ｉｎｖｏｋｅ−ｃｕｓｔｏｍ命令の特定の実現の１つに関連する。同様に、複数のｉｎｖｏｋｅ−ｃｕｓｔｏｍ命令、すなわちｉｎｖｏｋｅ−ｃｕｓｔｏｍ  ２、ｉｎｖｏｋｅ−ｃｕｓｔｏｍ  ３などを処理することもできる。この場合は、それぞれの命令の後に２バイトのインデックス・フィールドが続く。このことによって、ハードウェアの機能または特定のデバイス・ドライバに直接アクセスするための強力な手段が得られる。インデックス・ビットは、ソフトウェアまたはマイクロコードによる解析、あるいはハードウェアによるデコードが可能である。１つの実施形態では、ｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードはハードウェアによってデコードされ、マイクロコードのエントリ・ポイントを提供する。バイトコード自体も、マイクロコードのエントリ・ポイントになり得る。マイクロコードは、インデックスのデバイス、関数、タイプのフィールドを読み取り、該当するハードウェアを有効化するか、またはそのハードウェアのドライバへの参照を提供する。または、マイクロコードがこのメソッドをソフトウェアで実行する場所への参照を提供することもできる。別の実施形態では、ソフトウェア・インタプリタがｉｎｖｏｋｅ−ｃｕｓｔｏｍバイトコードをデコードし、メソッドを実行するハードウェアを直接記述または有効化する。インデックス・フィールドに特定の値を指定するだけで、メソッドのタイプを示す��ともできる。デバイス・タイプや関数などを示す別の方法は、ｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッドの引数を使用することである。
【００２０】
本発明の例示的な実施形態は、中間言語命令を受け取り、ＲＩＳＣ、ＣＩＳＣ、ＤＳＰ、ＶＬＩＷ、ＳＩＭＤなどのデバイス用のレジスタベース命令のようなネイティブ命令を生成するハードウェア・トランスレータ・ユニットを備えている。少なくとも１つの中間言語命令は、ハードウェア・トランスレータ・ユニットがレジスタベース命令を構成するカスタム・メソッド呼出しである。このレジスタベース命令がプロセッサに送信されることによって、プロセッサはメソッドを実行する専用のハードウェア・ユニットを初期化する。
【００２１】
図２の例では、ハードウェア・トランスレータ・ユニット４４が中間言語命令を受け取り、レジスタベース命令を生成する。少なくとも１つの中間言語命令はカスタム・メソッド呼出しであり、ハードウェア・トランスレータ・ユニットはこれに対応するレジスタベース命令を構成する。このレジスタベース命令がプロセッサ５４に送信されることによって、プロセッサはメソッドを実行する専用のハードウェア・ユニット５６を初期化する。
【００２２】
１つの実施形態では、カスタム・メソッドによって専用のハードウェア・ユニットに対してデータが直接書き込まれたり読み出されたりする。１つの実施形態では、バスを介して専用のハードウェア・ユニットにデータが送信される。１つの実施形態では、バスは２プロセッサ・バスである。１つの実施形態では、バスはシステム・バスである。
【００２３】
１つの実施形態では、レジスタベース命令はＤＳＰ、ＶＬＩＷ、ＳＩＭＤ、ＣＩＳＣ、レガシー・プロセッサなどの汎用プロセッサ用である。１つの実施形態では、ハードウェア・トランスレータが任意の種類のレガシー・プロセッサ用の命令を生成する。
【００２４】
１つの実施形態では、カスタム・メソッド呼出しの中間言語命令のインデックス・ビットは実行するメソッドのタイプを指定するように再定義される。１つの実施形態では、インデックス・ビットはデバイス、関数、タイプのフィールドで置き換えられる。
【００２５】
１つの実施形態では、カスタム・メソッド呼出しの中間言語命令のオペランド・フィールド・ビットは実行するメソッドのタイプを指定するように再定義される。１つの実施形態では、オペランド・フィールド・ビットはデバイス、関数、タイプのフィールド・ビットで置き換えられる。
【００２６】
１つの実施形態では、カスタム・メソッド呼出しの中間言語命令のオペランド・フィールド・ビットとインデックス・ビットは、実行するメソッドのタイプを指定するように再定義される。１つの実施形態では、オペランド・フィールド・ビットとインデックス・ビットはデバイス、関数、タイプのフィールド・ビットで置き換えられる。
【００２７】
１つの実施形態では、ハードウェア・トランスレータはハードウェア・アクセラレータである。
【００２８】
例示的な実施形態では、システムは中間言語命令を受け取り、レジスタベース命令を生成するハードウェア・トランスレータ・ユニットを備えている。少なくとも１つのメソッド呼出しによって、ハードウェア・ユニットがソフトウェアで動作する仮想マシンに制御を渡し、仮想マシンがメモリ内のメソッド呼出し命令をカスタム・メソッド呼出し命令で置き換える。カスタム・メソッド呼出し命令によって、ハードウェア・トランスレータ・ユニットはレジスタベース命令を構成する。このレジスタベース命令がプロセッサに送信されることによって、プロセッサはメソッドを実行するカスタム・ハードウェア・ユニットを初期化する。
【００２９】
図２の例では、ハードウェア・トランスレータ・ユニット４４が中間言語命令を受け取り、レジスタベース命令を生成する。ハードウェア・トランスレータ・ユニット４４は、実行のためにレジスタベース命令の少なくとも一部を生成する。少なくとも１つのメソッド呼出しによって、ハードウェア・トランスレータ・ユニット４４がソフトウェアで動作する仮想マシンに制御を渡し、仮想マシンがメモリ内のメソッド呼出し命令をカスタム・メソッド呼出し命令で置き換える。カスタム・メソッド呼出し命令によって、ハードウェア・トランスレータ・ユニット４４はネイティブ命令を構成する。このネイティブ命令がプロセッサ５４に送信されることによって、プロセッサはメソッドを実行する専用のハードウェア・ユニットを初期化する。
【００３０】
例示的な実施形態では、ハードウェア・トランスレータ・ユニットが中間言語命令を受け取り、レジスタベース命令を生成する。少なくとも１つの中間言語命令は専用のグラフィックス・メソッド呼出しであり、ハードウェア・トランスレータがこれに対応するレジスタベース命令を構成する。このレジスタベース命令がプロセッサに送信されることによって、プロセッサはメソッドを実行するグラフィックス・エンジンを初期化する。
【００３１】
図２の例で、ハードウェア・トランスレータ・ユニット４４が中間言語命令を受け取り、レジスタベース命令を生成する。少なくとも１つの中間言語命令は専用のグラフィックス・メソッド呼出しであり、これに対応するレジスタベース命令をハードウェア・トランスレータ・ユニットが構成する。このレジスタベース命令がプロセッサに送信されることによって、プロセッサはメソッドを実行するグラフィックス・エンジンを初期化する。
【００３２】
図２は、本発明のシステムの１つの実施形態を示している。ハードウェア・トランスレータ・ユニット４４は、中間言語命令をレジスタベース命令に変換する。中間言語命令は、Ｊａｖａバイトコードであるのが好ましい。ただし、ＭＳＩＬ  ｆｏｒ  ．ＮＥＴ／Ｃ＃やＭｕｌｔｏｓバイトコードなど、他の中間言語命令を使用することもできる。簡単にするために、この明細書ではこれ以降Ｊａｖａを使用した実施形態について説明する。ただし、他の中間言語命令を使用することもできる。
【００３３】
１つの実施形態では、ハードウェア・トランスレータ４４がＪａｖａバイトコードをネイティブ命令に変換し、これをプロセッサが実行できる。この変換をハードウェアで行うことにより、Ｊａｖａプログラムのオペレーションを大幅に高速化できる。Ｊａｖａトランスレータ・ユニットについては、特許出願第０９／２０８，７４１号で説明している。このトランスレータをＣＰＵに組み込むこともできる。
【００３４】
１つの実施形態では、ハードウェア・トランスレータ・ユニット４４に、バイトコード・デコーダ４６、マイクロコード・ユニット４８、命令構成ユニット５０を含み、さらにＪａｖａプログラム・カウンタ（ＰＣ）、スタック及び変数マネージャ５２が含まれる。好ましい実施形態では、バイトコード・デコーダ４６が受け取ったバイトコードをデコードする。マイクロコード・ユニット４８は変換された命令の一部を格納する。Ｊａｖａオペランド・スタックの一部が格納されたレジスタがアクセスできるように、スタック及び変数マネージャ５２が命令構成ユニット５０にレジスタ指標を提供する。また、スタック及び変数マネージャ５２は、マイクロコード・ユニット４８に、ＣＰＵ  ５４のレジスタ・ファイルに格納されたＪａｖａオペランド・スタックの一部または変数を操作する命令を生成させる。Ｊａｖａオペランド・スタックの一部または変数をＣＰＵ  ５４のレジスタ・ファイルに格納することにより、本発明のシステムはより効率的に動作できる。ただし、本発明のシステムはスタック及び変数マネージャ５２なしでも動作するが、その効率は大幅に低下する。後述するように、マイクロコード・ユニット４８には、マイクロコード・ユニット４８に格納された変換済みの標準の命令以外に、ｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッド呼出し命令で指定されるｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッドの命令も格納される。前述のように、ｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッド呼出し命令は少なくとも１つの割り当てられていないＪａｖａバイトコードまたはユーザー定義のバイトコードであり、修正されたＪａｖａ仮想マシンによって命令メモリに書き込まれているか、または常駐ライブラリ内に存在する。
【００３５】
マイクロコード命令は、変換されたレジスタベース命令としてＣＰＵ  ５４に送信される。次に、ＣＰＵ  ５４が専用のハードウェア・ユニット５６をセットアップする。ただし、専用のハードウェア・ユニットは、グラフィックス・エンジン、ビデオ・エンジン、単一命令多重データ（ＳＩＭＤ）ユニット、デジタル・シグナル・プロセッサ（ＤＳＰ）、ダイレクト・メモリ・アクセス（ＤＭＡ）ユニット、または他のタイプの専用のハードウェア・ユニットのいずれでもよい。
【００３６】
好ましい実施形態では、専用のハードウェア・ユニットがシステムの標準のオペレーションと並行してメソッドを実行できるように、つまりメソッドがディスパッチされ、トランスレータが次のバイトコード命令を継続できるように、ＣＰＵ  ５４が専用のハードウェア・ユニット内のレジスタをセットアップする。通常は、専用のハードウェア・ユニットが終了時にＣＰＵへの割り込みを生成する。ＣＰＵが実行済みフラグまたはステータス・レジスタにポーリングすることもできる。または、専用のハードウェア・ユニットが終了するまでＣＰＵがオペレーションを停止することもできる。
【００３７】
１つの実施形態では、デコードされたバイトコードがバイトコード・デコード・ユニットからステート・マシン・ユニットと命令構成ユニット内の演算装置（ＡＬＵ）に送信される。ＡＬＵは、バイトコード命令を再編成してステート・マシンで容易に操作できるようにするために提供されており、コンピュータのメモリ参照の計算を含めて様々な算術関数を実行する。ステート・マシンは、マイクロコード・テーブルを使用してバイトコードをネイティブ命令に変換する。このように、ステート・マシンはマイクロコード・テーブル内で該当するネイティブ命令の場所を示すアドレスを提供する。カウンタまたは他の指標は、オペランド・スタックに配置されたエントリの数を保持すると同時に、メモリとレジスタ・ファイル内のオペランド・スタックの最上位を追跡し、更新する。好ましい実施形態では、マイクロコード・テーブルの出力にレジスタ・ファイル上で操作されるレジスタ指標が追加される。レジスタ指標はカウンタで示され、バイトコードからインタプリートされる。この作業を実行するには、どのオペランドおよび変数がレジスタ・ファイルのどのエントリにあるかを示すハードウェアの指標が必要である。ネイティブ命令は、この基盤の上に構成される。または、このようなレジスタ指標をレジスタ・ファイルに直接送信することもできる。
【００３８】
本発明の別の実施形態では、スタック及び変数（Ｖａｒ）マネージャがレジスタ・ファイルの様々なレジスタにスタック及び変数の値を割り当てる。このもう１つの実施形態の利点は、スタック及びＶａｒの値がＩｎｖｏｋｅ  Ｃａｌｌ（呼出し）によって切り替えできることである。こうした切り替えは、スタック及び変数マネージャで実行でき、多くのネイティブ命令を生成してこれを実装するより効率的である。
【００３９】
１つの実施形態では、多くの重要な値をハードウェア・トランスレータに格納することでシステムのオペレーションを促進できる。こうした値をハードウェア・トランスレータに格納すると、システムのオペレーションが促進される。特に、実行エンジンのレジスタ・ファイルを使用してＪａｖａスタックの一部を格納する場合に有効である。
【００４０】
ハードウェア・トランスレータ・ユニットは、スタック値の最上位の指標（最上位のスタック要素のメモリ参照）を格納するのが好ましい。さらに、トランスレータはＣＰＵのレジスタ・ファイル内でスタックの内容の最上位にあるレジスタ指標を保持できる。このスタック値の最上位は、メモリからスタック値をロードするときに役立つ。スタック値の最上位は、命令がスタックベースの命令からレジスタベース命令に変換されるときに更新される。ＣＰＵのレジスタ・ファイル内でスタックの内容の最上位にあるレジスタ指標を保持するトランスレータ内のレジスタも更新される。命令レベルのパラレリズムを使用した場合、１つのレジスタベース命令の要素である個々のスタックベースの命令について、そのＪａｖａスタックへの影響について評価する必要がある。
【００４１】
１つの実施形態では、オペランド・スタックの深さの値がハードウェア・トランスレータ内に保持される。このオペランド・スタックの深さは、実行エンジン（ＣＰＵ）のレジスタ・ファイルのオペランド・スタックの動的な深さを示す。たとえば、レジスタ・ファイルに８つのスタック値が格納された場合は、このオペランド・スタックの深さが「８」と見なされる。レジスタ・ファイルのスタックの深さを認識すると、レジスタ・ファイルからスタック値をロードするとき、あるいはレジスタ・ファイルにスタック値を格納するときに便利である。
【００４２】
好ましい実施形態では、スタックの深さの最小値と最大値がハードウェア・トランスレータ・ユニット内に保持される。スタックの深さの値は、スタックの深さの最小値、最大値と比較される。スタックの値が最小値を下回ると、ハードウェア・トランスレータ・ユニットはロード命令を構成し、メモリから実行エンジンのレジスタ・ファイルにスタック値をロードする。スタックの深さが最大値を上回ると、ハードウェア・トランスレータ・ユニットはストア命令を構成し、スタック値をメモリに返して格納する。
【００４３】
１つの実施形態では、実行エンジンのレジスタ・ファイル内でオペランド・スタックの少なくとも上位８エントリがリング・バッファとして動作し、リング・バッファはトランスレータで保持され、オーバーフロー／アンダーフロー・ユニットに接続して動作する。
【００４４】
ハードウェア・トランスレータ・ユニットは、さらに実行エンジンのレジスタ・ファイル内に格納されたオペランドと変数の指標を格納するのが好ましい。こうした指標によって、ハードウェア・トランスレータは受け取ったスタックベースの命令から変換されたレジスタベース命令を構成する。
【００４５】
ハードウェア・トランスレータ・ユニットは、さらにメモリ内の変数ベースとオペランド・スタック・ベースの指標を格納するのが好ましい。このことによって、実行エンジンのレジスタ・ファイルとメモリとの間で変数とオペランドのロード命令とストア命令を構成できる。たとえば、レジスタ・ファイルでＶａｒを利用できない場合は、ハードウェアがロード命令を発行する。適切なハードウェアがＶａｒの値を４倍してＶａｒベースを加え、Ｖａｒのメモリ・ロケーションを生成する。生成された命令は、Ｖａｒベースがネイティブ実行エンジンの一時レジスタに格納されているという認識に基づいている。Ｖａｒの値の４倍は、構成されるネイティブ命令の直接フィールドとして使用可能になる。この命令は、Ｖａｒベースと直接オフセットへのポインタを保持する一時レジスタに格納されたアドレスによるメモリ・アクセス命令である。あるいは、Ｖａｒの最終的なメモリ・ロケーションはトランスレータとＶａｒをロードできるメモリで実行エンジンによって読み出されてもよい。
【００４６】
１つの実施形態では、ハードウェア・トランスレータ・ユニットは変数がＪａｖａバイトコードの実行によって更新された場合に変更とマーク付けされる。ハードウェア・トランスレータは、一部のバイトコードに関して変更とマーク付けされた変数をシステム・メモリにコピーできる。
【００４７】
１つの実施形態では、ハードウェア・トランスレータ・ユニットはネイティブ命令を構成する。ネイティブ命令のオペランドには少なくとも２つのネイティブな実行エンジンのレジスタ・ファイルの参照が含まれており、レジスタ・ファイルの内容はオペランド・スタック及び変数のデータである。
【００４８】
１つの実施形態では、スタック及び変数レジスタ・マネージャが実行エンジンのレジスタ・ファイルの変数及びスタック・レジスタに何が格納されるかを示す指標を保持する。次に、この情報がデコードのステージとマイクロコードのステージに提供され、Ｊａｖａバイトコードをデコードし、該当するネイティブ命令を生成するときに利用される。
【００４９】
好ましい実施形態では、スタック及び変数レジスタ・マネージャの機能の１つはスタックの最上位の指標を保持することである。したがって、たとえばレジスタＲ１〜Ｒ４にメモリからあるいはバイトコードの実行によって上位の４スタック値が格納された場合は、レジスタ・ファイルとの間でデータがロードされるとスタックの最上位が変更される。このように、レジスタＲ２がスタックの最上位に入り、レジスタＲ１はレジスタ・ファイルのスタックの最下位に入る。新しいデータがレジスタ・ファイル内のスタックにロードされると、このデータはレジスタＲ３にロードされ、スタックの新しい最上位になり、Ｒ１はスタックの最下位のままである。レジスタ・ファイル内のスタックにさらに２つのアイテムがロードされた場合に、レジスタ・ファイル内のスタックの新しい最上位はＲ１になるが、まずオーバーフロー／アンダーフロー・ユニットによってＲ１がメモリに返され、Ｒ２がレジスタ・ファイル内の部分的なスタックの最下位になる。
【００５０】
ただし、本発明のシステムは様々に調整でる。図３に、アクセラレータ・チップ６０に専用の実行エンジン・プロセッサ６２と専用のハードウェア・ユニット６４を含むシステムを示す。専用の実行エンジン６２は、Ｊａｖａ仮想マシンの実行に使用するチップ６６のシステム上のプロセッサとは別である。実行エンジン６２は、トランスレータ・ユニット６８専用である。
【００５１】
図４に、アクセラレータ・チップ７２に専用のハードウェア・ユニットとして動作する専用のグラフィックス・アクセラレーション・エンジン７４を含む例を示す。グラフィックス・アクセラレータ３４は、液晶ディスプレイ７８を更新するための液晶コントローラとディスプレイ・バッファ７６に関連付けられる。ただし、この例ではアクセラレータ・チップの動作よってＪａｖａプログラムの液晶ディスプレイへの表示を制御し、かつメモリ内のフレーム・バッファを制御する。あるいは、フレーム・バッファをアクセラレータ・チップに組み込むこともできる。ＭＰＥＧ４とオーディオ／ビデオのデコーダ、エンコーダなど、他のユニットもアクセラレータ・チップに組み込むことができ、Ｊａｖａプログラムとネイティブ・プログラムを介してサポートできる。Ｊａｖａプログラムはグラフィックスへの使用がますます増えているので、アクセラレータ・チップへのＪａｖａプログラムの表示の制御を保持することで、システムはチップ８０上のシステムに制御が送られるネイティブ・メソッドを使用する場合より効率よく動作する。アクセラレータ・チップは、同じシリコン内に、あるいは同じパッケージ内のチップ上のシステムに伴う複数のダイ・スタックまたは同じパッケージ内のメモリに伴う複数のダイ・スタックとして、ＳＯＣ(System on Chip)に組み込むこともできる。
【００５２】
図５に別の実施形態を示す。このシステムでは、プロセッサ８２がネイティブ命令をメモリ８４から直接実行するが、変換された命令をハードウェア・トランスレータ８６から実行することもできる。
【００５３】
図６は、本発明の１つの実施形態のシステムのオペレーションを示す図である。ただし、この例では図５のようなアーキテクチャを使用するが、本発明の方法が図３のようなアーキテクチャでも同様に機能することは言うまでもない。ステップＡで、ハードウェア・トランスレータによってメソッド呼出し命令のコールバックが発生する。ステップＢで、プロセッサがＪａｖａ仮想マシンを起動して標準のメソッド呼出し命令をｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッド呼出し命令で置き換える。ステップＣで、呼出し命令がメモリ内の標準のメソッド呼出し命令の上に上書きされる。この後、ステップＤで、ｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッド呼出し命令がハードウェア・トランスレータに送信される。ステップＥで、ハードウェア・トランスレータがｉｎｖｏｋｅ−ｃｕｓｔｏｍメソッド命令をマイクロコード・ユニットからプロセッサに送信する。プロセッサは、専用のハードウェア・ユニットに引数をロードする命令を実行する。ステップＧで、専用のハードウェア・ユニットがプロセスを実行する。
【００５４】
図７に、グラフィックス・ディスプレイが表示されるシステムの例を示す。ステップＡに示すように、ｄｒａｗ  ｌｉｎｅ関数がバイトコードに変換され、その一部が引数を使用してスタックをセットアップし、次に呼出し命令がインデックスで発行される。ステップＢで、呼出し命令がｉｎｖｏｋｅ  ｃｕｓｔｏｍ命令に変換される。１つの実施形態では、ｉｎｖｏｋｅ  ｃｕｓｔｏｍ命令にはカスタム・メソッドのタイプを示す記述子の引数がある。ただし、唯一のｉｎｖｏｋｅ  ｃｕｓｔｏｍ専用のバイトコードを使用する必要があり、インデックス・フィールドの代わりに配置された記述子によって様々なカスタム関数を記述できる。
【００５５】
ステップＣで、ｄｅｓｃｒｉｐｔｏｒ＝ｄｒａｗ  ｌｉｎｅを伴うｉｎｖｏｋｅ  ｃｕｓｔｏｍバイトコードによって呼出し命令がメモリ内で上書きされる。ステップＤとＥで、ｉｎｖｏｋｅ  ｃｕｓｔｏｍ  ｄｒａｗ  ｌｉｎｅはハードウェア・トランスレータによってネイティブ命令に変換され、この命令によってプロセッサはグラフィックス・エンジンと該当する引数をロードし、グラフィックス・エンジンを実行する。ステップＦとＧで、ＣＰＵによってグラフィックス・エンジンの引数がグラフィックス・ユニットのレジスタにロードされる。グラフィックス・エンジンは点（Ｄ，Ｃ）と（Ｂ，Ａ）の間に線を引く。
【００５６】
図７にグラフィックスの例を示す。ただし、本発明のシステムを使用して様々なカスタム・メソッドを実装できることに留意されたい。１つの実施形態では、１つのｉｎｖｏｋｅ  ｃｕｓｔｏｍバイトコードの後には専用のカスタム・メソッドを示す記述子を指定できる。
【００５７】
例示的な実施形態では、ハードウェア・トランスレータ・ユニットとプロセッサが同一のシリコン・チップ上にある。１つの実施形態では、ハードウェア・トランスレータが同一のシリコン・ダイ上のチップ（ＳＯＣ）上のシステムに組み込まれている。別の実施形態では、ハードウェア・トランスレータ・ユニットがプロセッサとは別のチップ上に配置される。プロセッサが配置されたチップとハードウェア・トランスレータ・ユニットが配置されたチップは、スタック・パッケージまたはマルチチップ・パッケージ内で組み合わせることができる。
【００５８】
１つの実施形態では、ハードウェア・トランスレータ・ユニットがメモリと同一のチップ（ＳＯＣ）に組み込まれている。メモリには中間言語命令を格納できる。別の実施形態では、ハードウェア・トランスレータ・ユニットを独自のチップに配置でき、スタック・パッケージまたはマルチチップ・パッケージ内でメモリ・チップと組み合わせることができる。
【００５９】
１つの実施形態では、通常は中間言語で使用するインデックス・ビットがカスタム・メソッドの記述子を含むように変更されている。別の実施形態では、カスタム・メソッドの説明がスタックに格納されている。この実施形態では、カスタム・メソッドを実行する前に記述子の値がロードされる。
【００６０】
本出願には、先の出願、１９９８年１２月８日に出願された出願第０９／２０８，７４１号、２０００年１月２０日に出願された出願第０９／４８８，１８６号、２０００年１０月１０日に出願された出願第６０／２３９，２９８号、２０００年１０月１３日に出願された出願第０９／６８７，７７７号、２００１年５月２５日に出願された出願第０９／８６６，５０８号、および２００１年７月２日に出願された出願第６０／３０２，８９１号を引用して援用する。
【００６１】
当業者には言うまでもないが、本発明はその精神または特性を逸脱することなく他の特定の形でも実現できる。したがって、ここに開示する実施形態はすべての側面において例示的なものであり、限定的なものではないと見なされる。本発明の範囲は、以上の説明でなく前述の特許請求の範囲に示されており、本発明と同等のシステムの目的および範囲内のすべての変更は、本発明と同等と見なされる。
【図面の簡単な説明】
【００６２】
【図１】本発明のシステムの１つの実施形態のオペレーションを示す流れ図である。
【図２】本発明のシステムの１つの実施形態を示す図である。
【図３】専用の実行エンジン（ＣＰＵ）を使用する本発明のシステムの１つの実施形態を示す図である。
【図４】専用のハードウェアがグラフィックス・アクセラレーション・エンジンである本発明のシステムの１つの実施形態を示す図である。
【図５】ハードウェア・トランスレータで変換された命令とハードウェア・トランスレータを経由しないネイティブ命令を、プロセッサを使用して実行する本発明のシステムの１つの実施形態を示す図である。
【図６】本発明の方法の１つの実施形態を示す図である。
【図７】図６のシステムの１つの例を示す図である。
【図８】ｉｎｖｏｋｅ  ｃｕｓｔｏｍ命令を示す概略図である。
【図９】命令内でのデバイス、関数、タイプの使用を示す概略図である。
【図１】
2005521933.tif 000003
【図２】
2005521933.tif 000004
【図３】
2005521933.tif 000005
【図４】
2005521933.tif 000006
【図５】
2005521933.tif 000007
【図６】
2005521933.tif 000008
【図７】
2005521933.tif 000009
【図８】
2005521933.tif 000010
【図９】
2005521933.tif 000011
【国際調査報告】
2005521933.tif 000012
2005521933.tif 000013