(57)【特許請求の範囲】
【請求項１】
コンピューティングシステムにおけるメソッド呼出しのメソッドフレームをストアするための方法であって、
第１のメモリスタック内に前記メソッドフレームの実行環境をストアする過程と、
第２のメモリスタック内に前記メソッドフレームの任意の引数と、前記メソッドフレームの任意のローカル変数とをストアする過程と、
前記第２のメモリスタック内に前記メソッドフレームの１つ或いはそれ以上のオペランドをストアする過程と、
ハードウエアプロセッサに接続される第１の読出しポート、前記第２のメモリスタックに接続される第２の読出しポート、前記ハードウエアプロセッサに接続される第１の書込みポート、並びに前記第２のメモリスタックに接続される第２の書込みポートを有する循環バッファスタックキャッシュメモリ内に前記第２のメモリスタックの一部をキャッシュする過程とを有することを特徴とする方法。
【請求項２】
前記実行環境が復帰プログラムカウンタからなることを特徴とする請求項１に記載の方法。
【請求項３】
前記実行環境が復帰フレームからなることを特徴とする請求項１に記載の方法。
【請求項４】
前記実行環境が復帰コンスタントプールからなることを特徴とする請求項１に記載の方法。
【請求項５】
前記実行環境が現在メソッドベクトルからなることを特徴とする請求項１に記載の方法。
【請求項６】
前記実行環境が現在モニタアドレスからなることを特徴とする請求項１に記載の方法。
【請求項７】
前記任意のメソッドフレームの前記任意の引数と、前記任意のメソッドフレームの前記任意のローカル変数が、前記第２のメモリスタック内の前記メソッドフレームのローカル変数エリアを形成し、前記ローカル変数エリアが前記循環バッファスタックキャッシュメモリ内にキャッシュされることを特徴とする請求項１に記載の方法。
【請求項８】
前記１つ或いはそれ以上のオペランドが前記第２のメモリスタック内の前記メソッドフレームのオペランドスタックを形成し、前記ローカル変数エリアが前記循環バッファスタックキャッシュメモリ内にキャッシュされることを特徴とする請求項７に記載の方法。
【請求項９】
前記メソッド呼出しの完了時に前記第１のメモリスタックから前記実行環境を削除する過程をさらに有することを特徴とする請求項１に記載の方法。
【請求項１０】
前記第１のメモリスタックが別のスタックキャッシュによりキャッシュされ、前記別のスタックキャッシュが、
複数のメモリ位置と、
前記別のスタックキャッシュの先頭メモリ位置を指示するOPTOPポインタと、
前記別のスタックキャッシュの最下位メモリ位置を指示するボトムポインタとを有することを特徴とする請求項９に記載の方法。
【請求項１１】
前記OPTOPポインタにより指示される前記メモリ位置において、前記別のスタックキャッシュ上の新しい実行環境を書込む過程と、
前記OPTOPポインタをインクリメントする過程と、
スピル条件が存在する場合に、前記別のスタックキャッシュから前記第１のメモリスタックに第１の実行環境をスピルする過程と、
フィル条件が存在する場合に、前記第１のメモリスタックから前記別のスタックキャッシュに第２の実行環境をフィルする過程とをさらに有することを特徴とする請求項10に記載の方法。
【請求項１２】
前記別のスタックキャッシュから前記第１のメモリスタックに第１の実行環境をスピルする前記過程が
前記最下位メモリ位置から前記第１のメモリスタックに前記第１の実行環境を転送する過程と、
前記ボトムポインタをインクリメントする過程とを有することを特徴とする請求項11に記載の方法。
【請求項１３】
前記前記別のスタックキャッシュから第１のメモリスタックに第２の実行環境をフィルする前記過程が、
前記ボトムポインタをデクリメントする過程と、
前記第１のメモリスタックから前記最下位メモリ位置に第２の実行環境を転送する過程とを有することを特徴とする請求項11に記載の方法。
【請求項１４】
前記前記別のスタックキャッシュから第１のメモリスタックに第２の実行環境をフィルする前記過程が、
前記第１のメモリスタックから前記最下位メモリ位置に先行するメモリ位置に第２の実行環境を転送する過程と、
前記ボトムポインタをデクリメントする過程とを有することを特徴とする請求項11に記載の方法。
【請求項１５】
前記OPTOPポインタにより指示される前記メモリ位置において、前記別のスタックキャッシュから第１のスタックされた実行環境を読み出す過程と、
前記OPTOPポインタをデクリメントする過程とをさらに有することを特徴とする請求項11に記載の方法。
【請求項１６】
前記スピル条件が存在するか否かを判定する過程をさらに有することを特徴とする請求項11に記載の方法。
【請求項１７】
前記スピル条件が存在するか否かを判定する前記過程が、
空きメモリ位置の数を計算する過程と、
前記空きメモリ位置の数をキャッシュ高閾値と比較する過程とを有することを特徴とする請求項16に記載の方法。
【請求項１８】
前記スピル条件が存在するか否かを判定する前記過程が、
前記OPTOPポインタを高水位マークと比較する過程を有することを特徴とする請求項16に記載の方法。
【請求項１９】
前記フィル条件が存在するか否かを判定する過程をさらに有することを特徴とする請求項11に記載の方法。
【請求項２０】
前記フィル条件が存在するか否かを判定する過程が、
使用済メモリ位置の数を計算する過程と、
前記使用済メモリ位置の数をキャッシュ低閾値と比較する過程とを有することを特徴とする請求項19に記載の方法。
【請求項２１】
前記フィル条件が存在するか否かを判定する過程が、
前記OPTOPポインタを低水位マークと比較する過程を有することを特徴とする請求項19に記載の方法。
【請求項２２】
前記循環バッファスタックキャッシュメモリが、
複数のメモリ位置と、
前記循環バッファスタックキャッシュメモリの先頭メモリ位置を指示するOPTOPポインタと、
前記循環バッファスタックキャッシュメモリの最下位メモリ位置を指示するボトムポインタとを有することを特徴とする請求項１に記載の方法。
【請求項２３】
前記第１の書込みポートを介して前記OPTOPポインタにより指示される前記メモリ位置において、前記第２のメモリスタックに対する新しいデータワードを書込む過程と、
前記OPTOPポインタをインクリメントする過程と、
スピル条件が存在する場合に、前記第２の読出しポートを介して、前記循環バッファスタックキャッシュメモリから前記第２のメモリスタックに第１のデータワードをスピルする過程と、
フィル条件が存在する場合に、前記第２の書込みポートを介して、前記第２のメモリスタックから前記循環バッファスタックキャッシュメモリに第２のデータワードをフィルする過程とを有することを特徴とする請求項22に記載の方法。
【請求項２４】
前記第２の読出しポートを介して前記循環バッファスタックキャッシュメモリから前記第２のメモリスタックに第１のデータワードをスピルする前記過程が、
前記最下位メモリ位置から前記第２のメモリスタックに前記第１のデータワードを転送する過程と、
前記ボトムポインタをインクリメントする過程とを有することを特徴とする請求項23に記載の方法。
【請求項２５】
前記第２の書込みポートを介して前記循環バッファスタックキャッシュメモリから前記第２のメモリスタックに第２のデータワードをフィルする前記過程が、
前記ボトムポインタをデクリメントする過程と、
前記第２のメモリスタックから前記最下位メモリ位置に第２のデータワードを転送する過程とを有することを特徴とする請求項24に記載の方法。
【請求項２６】
前記第２の書込みポートを介して前記循環バッファスタックキャッシュメモリから前記第２のメモリスタックに第２のデータワードをフィルする前記過程が、
前記第２のメモリスタックから前記最下位メモリ位置に先行するメモリ位置に第２のデータワードを転送する過程と、
前記ボトムポインタをデクリメントする過程とを有することを特徴とする請求項23に記載の方法。
【請求項２７】
前記第１の読出しポートを介して前記先頭メモリ位置において、前記循環バッファスタックキャッシュメモリからスタックされたデータワードを読み出す過程と、
前記OPTOPポインタをデクリメントする過程とをさらに有することを特徴とする請求項23に記載の方法。
【請求項２８】
前記第１の読出しポートを介して前記先頭メモリ位置において、前記循環バッファスタックキャッシュメモリから第１のスタックされたデータワードを読み出す過程と、
前記OPTOPポインタを２だけデクリメントする過程とをさらに有することを特徴とする請求項23に記載の方法。
【請求項２９】
複数のメソッド呼出しを実行することができるプロセッサを含むコンピューティングシステムであって、前記コンピューティングシステムが、
各前記メソッド呼出しに対する実行環境をストアするように構成された第１のメモリスタック回路と、
前記メソッド呼出しの任意の引数及び前記メソッド呼出しにより生成される任意のローカル変数をストアするように構成される第２のメモリスタックと、
循環メモリバッファ回路であって、
前記第２のメモリスタックの一部をストアするように構成される複数のメモリ位置と、
前記循環メモリバッファ内の先頭メモリ位置を指示するOPTOPポインタと、
前記循環メモリバッファ内の最下位メモリ位置を指示するボトムポインタと、
前記循環メモリバッファに接続され、かつ前記プロセッサに接続可能な第１の読出しポートと、
前記循環メモリバッファに接続され、かつ前記プロセッサに接続可能な第１の書込みポートと、
前記循環メモリバッファ及び前記第２のメモリスタックに接続される第２の読出しポートと、
前記循環メモリバッファ及び前記第２のメモリスタックに接続される第２の書込みポートとを有する、該循環メモリバッファとを有することを特徴とするコンピューティングシステム。
【請求項３０】
前記第１のメモリスタック回路が、
複数のメモリ位置を有する別の循環メモリバッファと、
前記別の循環メモリバッファ内の先頭メモリ位置を指示するフレームポインタと、
前記別の循環メモリバッファ内の最下位メモリ位置を指示する第２のボトムポインタと、
前記別の循環メモリバッファに接続される前記第１のスタックメモリ回路の第１の読出しポートと、
前記別の循環メモリバッファに接続される前記第１のスタックメモリ回路の第１の書込みポートとをゆすることを特徴とする請求項29に記載のコンピューティングシステム。
【請求項３１】
前記第１のスタックメモリ回路の前記第１の読出しポートが、前記別の循環メモリバッファ内の前記先頭メモリ位置からデータを読み出すように構成され、
前記別の循環メモリバッファの前記先頭メモリ位置上にデータを書込むように構成されることを特徴とする請求項30に記載のコンピューティングシステム。
【請求項３２】
前記第１のスタックメモリ回路の前記第１の書込みポートが前記別の循環メモリバッファの前記先頭メモリ位置上にデータを書込む場合に、前記フレームポインタがインクリメントされることを特徴とする請求項30に記載のコンピューティングシステム。
【請求項３３】
前記第１のスタックメモリ回路の前記第１の読出しポートが前記別の循環メモリバッファの前記先頭メモリ位置からデータをポップする場合に、前記フレームポインタがデクリメントされることを特徴とする請求項30に記載のコンピューティングシステム。
【請求項３４】
前記第１のスタックメモリ回路の前記第１の読出しポートがまた、前記別の循環メモリバッファの最下位メモリ位置からデータを読み出すように構成され、
前記第１のスタックメモリ回路の前記第１の書込みポートがまた、前記別の循環メモリバッファの前記最下位メモリ位置下にデータを書込むように構成されることを特徴とする請求項31に記載のコンピューティングシステム。
【請求項３５】
前記第１のスタックメモリ回路の前記第１の書込みポートが前記別の循環バッファの前記最下位メモリ位置下にデータを書込む場合に、前記別の循環バッファの前記ボトムポインタがデクリメントされることを特徴とする請求項34に記載のコンピューティングシステム。
【請求項３６】
前記第１のスタックメモリ回路の前記第１の読出しポートが前記別の循環バッファの前記最下位メモリ位置からデータを読み出す場合に、前記別の循環バッファの前記ボトムポインタがインクリメントされることを特徴とする請求項34に記載のコンピューティングシステム。
【請求項３７】
前記第１のスタックメモリ回路がさらに、
前記別の循環バッファに接続される第２の読出しポートと、
前記別の循環バッファに接続される第２の書込みポートとを有することを特徴とする請求項31に記載のコンピューティングシステム。
【請求項３８】
前記第１のスタックメモリ回路の前記第２の読出しポートが、前記別の循環メモリバッファの前記最下位メモリ位置からデータを読み出すように構成され、
前記第１のスタックメモリ回路の前記第２の書込みポートが、前記別の循環メモリバッファの前記最下位メモリ位置下にデータを書込むように構成されることを特徴とする請求項37に記載のコンピューティングシステム。
【請求項３９】
前記第１のスタックメモリ回路の前記第２の書込みポートが前記別の循環バッファの前記最下位メモリ位置下にデータを書込む場合に、前記別の循環バッファの前記ボトムポインタがデクリメントされることを特徴とする請求項38に記載のコンピューティングシステム。
【請求項４０】
前記第１のスタックメモリ回路の前記第２の読出しポートが前記別の循環バッファの前記最下位メモリ位置からデータを読み出す場合に、前記別の循環バッファの前記ボトムポインタがインクリメントされることを特徴とする請求項38に記載のコンピューティングシステム。
【請求項４１】
前記第１のメモリスタック回路がさらに、
スタックと、
前記スタックをキャッシュするためのスタックキャッシュ管理ユニットとを有することを特徴とする請求項29に記載のコンピューティングシステム。
【請求項４２】
前記スタックキャッシュ管理ユニットが、
前記第１のメモリスタックに接続されるスタックキャッシュメモリ回路を有するスタックキャッシュであって、前記スタックキャッシュメモリ回路が複数のメモリ位置を有する、該スタックキャッシュと、
前記スタックキャッシュメモリ回路内の最下位メモリ位置を指示し、かつ定義するキャッシュボトムポインタと、
前記スタックキャッシュから前記スタックに、前記最下位メモリ位置にストアされる第１の実行環境を転送するために接続されるスピル制御ユニットと、
前記スタックから前記最下位メモリ位置、或いは前記最下位メモリ位置に隣接するメモリ位置に第２の実行環境を転送するために接続されるフィル制御ユニットとを有することを特徴とする請求項41に記載のコンピューティングシステム。
【請求項４３】
前記スタックキャッシュがさらに、
前記第１のスタックメモリ回路と前記スタックとの間に接続される第１の読出しポートであって、前記スピル制御ユニットが前記第１の読出しポートを制御する、該第１の読出しポートと、
前記第１のスタックメモリ回路と前記スタックとの間に接続される第１の書込みポートであって、前記フィル制御ユニットが前記第１の書込みポートを制御する、該第１の書込みポートとを有することを特徴とする請求項42に記載のコンピューティングシステム。
【請求項４４】
前記スタックキャッシュメモリ回路の先頭メモリ位置を指示し、かつ定義するフレームポインタをさらに有することを特徴とする請求項43に記載のコンピューティングシステム。
【請求項４５】
前記第１の読出しポートが前記先頭メモリ位置からデータを読み出すように構成され、
前記第１の書込みポートが前記先頭メモリ位置上にデータを書込むように構成されることを特徴とする請求項29に記載のコンピューティングシステム。
【請求項４６】
前記第１の書込みポートが前記先頭メモリ位置上にデータを書込む場合に、前記OPTOPポインタがインクリメントされることを特徴とする請求項29に記載のコンピューティングシステム。
【請求項４７】
前記第１の読出しポートが前記先頭メモリ位置からデータをポップする場合に、前記OPTOPポインタがデクリメントされることを特徴とする請求項29に記載のコンピューティングシステム。
【請求項４８】
前記循環バッファメモリから前記第２のメモリスタックに、前記最下位メモリ位置にストアされる第１のデータワードを転送するために接続されるスピル制御ユニットであって、前記スピル制御ユニットが前記第２の読出しポートを制御する、該スピル制御ユニットと、
前記第２のメモリスタックから前記最下位メモリ位置或いは前記最下位メモリ位置に隣接するメモリ位置に第２のデータワードを転送するために接続されるフィル制御ユニットであって、前記フィル制御ユニットが前記第２の書込みポートを制御する、該フィル制御ユニットとをさらに有することを特徴とする請求項29に記載のコンピューティングシステム。
【請求項４９】
前記循環バッファメモリ回路がさらに、
前記循環バッファメモリ回路に接続され、前記プロセッサに接続可能な第３の読出しポートをさらに有することを特徴とする請求項48に記載のコンピューティングシステム。
【請求項５０】
前記第１の読出しポート、前記第３の読出しポート並びに前記第１の書込みポートを制御するように構成されるスタック制御ユニットをさらに有することを特徴とする請求項49に記載のコンピューティングシステム。
【請求項５１】
新しいデータワードが前記循環バッファメモリ回路にプッシュされるとき、前記OPTOPポインタがインクリメントされ、ポップされたデータワードが前記循環バッファメモリ回路からポップされるとき、前記OPTOPポインタがデクリメントされることを特徴とする請求項48に記載のコンピューティングシステム。
【請求項５２】
前記新しいデータワードが前記第１の書込みポートを介してプッシュされ、前記ポップされたデータワードは前記第１の読出しポートを介してポップされることを特徴とする請求項51に記載のコンピューティングシステム。
【請求項５３】
前記スピル制御ユニットが前記第１のデータワードを前記循環バッファメモリに転送するとき、前記ボトムポインタがインクリメントされることを特徴とする請求項48に記載のコンピューティングシステム。
【請求項５４】
前記フィル制御ユニットが前記第２のデータを前記スタックに転送するとき、前記ボトムポインタがデクリメントされることを特徴とする請求項48に記載のコンピューティングシステム。
【請求項５５】
前記OPTOPポインタ及び前記ボトムポインタを受信するために接続されるスタックキャッシュステータス回路であって、前記スタックキャッシュステータス回路は、前記循環バッファメモリ回路内の空きメモリ位置の数を計算するように構成される、該スタックキャッシュステータス回路をさらに有することを特徴とする請求項48に記載のコンピューティングシステム。
【請求項５６】
前記スピル制御ユニットは、前記空きメモリ位置の数がキャッシュ高閾値より小さい場合にのみ、前記第１のデータワードを転送することを特徴とする請求項55に記載のコンピューティングシステム。
【請求項５７】
前記スピル制御ユニットが
前記キャッシュ高閾値を含むプログラマブルレジスタと、
前記スタックキャッシュステータス回路及び前記プログラマブルレジスタに接続される比較器とを有することを特徴とする請求項56に記載のコンピューティングシステム。
【請求項５８】
前記フィル制御ユニットは、前記空きメモリ位置の数がキャッシュ低閾値より大きい場合にのみ、前記第２のデータワードを転送することを特徴とする請求項55に記載のコンピューティングシステム。
【請求項５９】
前記フィル制御ユニットが
前記キャッシュ低閾値を含むプログラマブルレジスタと、
前記スタックキャッシュステータス回路及び前記プログラマブルレジスタに接続される比較器とを有することを特徴とする請求項58に記載のコンピューティングシステム。
【請求項６０】
前記OPTOPポインタ及び前記ボトムポインタに接続されるスタックキャッシュステータス回路であって、前記スタックキャッシュステータス回路は前記循環バッファメモリ回路内の使用済メモリ位置の数を計算するように構成される、該スタックキャッシュステータス回路をさらに有することを特徴とする請求項48に記載のコンピューティングシステム。
【請求項６１】
前記使用済メモリ位置の数がキャッシュ低閾値より小さい場合にのみ、前記フィル制御ユニットが前記第２のデータワードを転送することを特徴とする請求項60に記載のコンピューティングシステム。
【請求項６２】
前記フィル制御ユニットが
前記キャッシュ低閾値を含むように構成されるプログラマブルレジスタと、
前記スタックキャッシュステータス回路及び前記プログラマブルレジスタに接続される比較器とを有することを特徴とする請求項61に記載のコンピューティングシステム。
【請求項６３】
前記OPTOPポインタが高水位マークより大きい場合にのみ、前記スピル制御ユニットが前記第１のデータワードを転送することを特徴とする請求項48に記載のコンピューティングシステム。
【請求項６４】
前記スピル制御ユニットが
前記高水位マークを含むプログラマブルレジスタと、
前記スタックキャッシュステータス回路及び前記プログラマブルレジスタに接続される比較器とを有することを特徴とする請求項63に記載のコンピューティングシステム。
【請求項６５】
前記OPTOPポインタが低水位マークより小さい場合にのみ、前記フィル制御ユニットが前記第２のデータワードを転送することを特徴とする請求項48に記載のコンピューティングシステム。
【請求項６６】
前記フィル制御ユニットが
前記低水位マークを含むように構成されるプログラマブルレジスタと、
前記スタックキャッシュステータス回路及び前記プログラマブルレジスタに接続される比較器とを有することを特徴とする請求項65に記載のコンピューティングシステム。
【請求項６７】
前記循環メモリバッファ回路内の前記複数のメモリ位置のそれぞれが、
有効ビットと、
保管ビットと、
データセクションとを有することを特徴とする請求項48に記載のコンピューティングシステム。
【請求項６８】
前記第１のデータワードが前記循環バッファメモリ回路に転送される場合に、前記スピル制御ユニットが前記最下位メモリ位置の前記保管ビットを保管論理状態にセットすることを特徴とする請求項67に記載のコンピューティングシステム。
【請求項６９】
前記第２のデータワードが前記循環バッファメモリ回路に転送される場合に、前記フィル制御ユニットが前記最下位メモリ位置に先行する前記メモリ位置の前記有効ビットをセットすることを特徴とする請求項68に記載のコンピューティングシステム。
【請求項７０】
前記循環バッファメモリ回路がレジスタファイルであることを特徴とする請求項48に記載のコンピューティングシステム。
【請求項７１】
前記循環バッファメモリ回路内の前記複数のメモリ位置のそれぞれが、レジスタであることを特徴とする請求項70に記載のコンピューティングシステム。
【請求項７２】
前記第１のデータワード及び前記第２のデータワードが同一であることを特徴とする請求項48に記載のコンピューティングシステム。
【発明の詳細な説明】
付録Ｉの参照
付録ＩのJAVA仮想マシン仕様書とこの仕様書に添付された付録Ａとを含む本明細書の一部分は、著作権で保護された内容を含んでいる。著作権の所持者は、米国特許庁に提出され記録された特許文書のファクシミリ伝送による複製に異議を唱えるものではないが、他の場合については、無断転載を禁ず。
発明の背景
発明の分野
本発明は一般にコンピュータシステムに関連し、特に、スタックメモリアーキテクチャのキャッシングに関連する。
背景技術
コンピュータ業界及び通信業界の多くの業界人や組織は、インターネットを、地球上で最も急成長しているマーケットであると、もてはやしている。1990年代において、インターネットのユーザの数は指数関数的に増加し、いまだとどまるところを知らない。1995年６月時点でのインターネットに接続しているホストの数は推定6,642,000であり、同年１月の推計値4,852,000に対して増加が見られた。ホスト数は年間約75％増加している。ホストの中には、約120,000のネットワークサーバ、及び27,000以上のWebサーバが存在していた。Webサーバの数は53日毎に約２倍になっているとみなせる。
1995年７月には、アクティブユーザが100万人以上、USENETニュースグループが12,505以上、USENETの購読者が1000万人以上に達し、インターネットは、様々な情報及びマルチメディアサービスの巨大なマーケットとなるべく運命付けられた。
加うるに、公共のキャリアネットワークあるいはインターネットに対し、多くの会社及び他のビジネスが、企業ネットワーク、あるいは私的なネットワークの中でいっそう効率的に情報を共有するための方法としてイントラネットにそれらの内部情報システムを移行しつつある。イントラネットのための基本的なインフラはサーバーとデスクトップを結ぶ内部のネットワークである、そしてそれはファイアウォールを通してインターネットに接続してもよく、接続しなくてもよい。これらのイントラネットは業界で確立している標準的な開放ネットワークプロトコルに従ってデスクトップにサービスを提供する。イントラネットにより、それらを採用している企業は、内部の情報管理の単純化や、ブラウザパラダイムを用いる内部の通信の改善といった多くの利益が得られる。インターネット技術を会社の企業インフラ及び旧式なシステムと統合することは、イントラネットを使用するグループに対する既存の技術投資のてこ入れにもなる。上に論じられているように、イントラネットとインターネットは、イントラネットがビジネスの中での内部的で保全性が高いコミュニケーションのために使われ、インターネットがビジネスにおいて外の世界との連絡、つまり外部取引のために使われており、このような状況の下で密接に関連し合っている。本明細書においては、用語「ネットワーク」はインターネットとイントラネットの両方を含む。しかしながら、インターネットとイントラネットの区別については、それが適用可能である場合には、記憶に留めおかれたい。
1990年に、サン・マイクロシステムズ（Sun Microsystems）社のプログラマーが普遍的なプログラミング言語を書いた。この言語は最終的にJavaプログラミング言語と命名された。（Javaは米国カリフォルニア州Mountain Viewのサン・マイクロシステムズの商標である。）Javaプログラミング言語は初めにＣ＋＋プログラミング言語でコード化されることを意図したプログラムの努力から生まれた。それ故、Javaプログラミング言語はＣ＋＋プログラミング言語と多くの共通性を持っている。しかしながら、Javaプログラミング言語は単純で、オブジェクト指向で、分散型で、インタプリート型であるが高性能で、強靭であるが安全で、保全性が高く、ダイナミックで、アーキテクチャによらず、移植性がある、マルチスレッド型の言語である。
Javaプログラミング言語は、多くのハードウェア会社やソフトウェア会社がサン・マイクロシステムズから使用許諾を得たときから、特にインターネット用のプログラミング言語として出現した。Javaプログラミング言語及び環境は、最近のプログラミングの実行における問題を解決するよう設計されている。Javaプログラミング言語では、Ｃ＋＋プログラミング言語における、めったに使われず理解されにくく紛らわしい多くの機能を取り除いてある。これらの取り除かれた機能には、主として、オペレーターに負担をかけ過ぎる機能、多重継承、及び広範囲の自動強制型変換などがある。Javaプログラミング言語は自動ガーベジコレクション機能を有し、この自動ガーベジコレクションは、Ｃプログラミング言語のように割り当てられたメモリ及び開放メモリが必要ではないため、プログラミングのタスクが単純化される。Javaプログラミング言語は、Ｃプログラミング言語で定義されているポインタの用途を限定し、その代わりに、配列の上下限が明示的にチェックされる真数配列を持っており、これにより、多くのウイルスといやらしいバグに対する脆弱さなくしている。また、Javaプログラミング言語はオブジェクティブ−Ｃインタフェースと特定の例外ハンドラを有している。
また、Javaプログラミング言語は、TCP/IPプロトコル（Transmission Control Protocol based on Internet protocol）、HTTP（Hypertext Transfer Protocol）とFTP（File Transfer Protocol）に容易に対処できるようにするためのルーチンの広範囲のライブラリを持っている。Javaプログラミング言語はネットワークで結ばれた分散環境における使用を意図されている。Javaプログラミング言語により、ウイルスがなく、破壊工作から守られたシステムの建設が可能となった。また、その認証技術は公開鍵暗号化に基づいている。
多くのスタック利用コンピューティングシステムは、JAVA仮想マシンをインプリメントしたものであり、比較的低速のメモリデバイスを用いて、スタックをストアする。一般に、低速のメモリデバイスに対してキャッシュを加えることにより、メモリ要求の大部分が結果的にキャッシュヒットする、すなわち要求されたメモリアドレスがキャッシュ内にある場合のみ、全メモリパフォーマンスが向上する。従来のキャッシュ設計は、ランダムアクセスメモリアーキテクチャに対して設計されており、スタック利用コンピューティングシステムを用いても良好な動作をしない。従って、スタック利用メモリアーキテクチャを改善することを狙いとしたキャッシング方法及びキャッシング装置が望まれる。
発明の概要
従って、本発明はスタック利用コンピューティングシステムとスタックとの間のデータ転送を加速するために、スタックキャッシュを含むスタック管理ユニットを提供する。１つの実施例では、１つの実施例では、スタック管理ユニットは、フィル制御ユニット及びスピル制御ユニットを含む。スタックへのメモリアクセスの大部分がスタックの最上位、或いはその近くで生じるため、ドリブル管理ユニットがスタックキャッシュ内のスタック最上位部分を保持する。特に、スタック利用コンピューティングシステムがスタックにデータをプッシュしているときに、スピル条件が生じる場合には、スピル制御ユニットがスタックキャッシュの最下位からスタックにデータを転送し、スタックの最上位部はスタックキャッシュ内に残される。スタック利用コンピューティングシステムがスタックからデータをポップしているときに、フィル条件が生じた場合には、フィル管理ユニットがスタックからスタックキャッシュの最下位部にデータを転送し、スタックキャッシュ内のスタックの最上位部を保持する。
スタックキャッシュは、スタックキャッシュメモリ回路、１つ或いは２つ以上の読出しポート、並びに１つ或いは２つ以上の書込みポートを含む。１つの実施例では、スタックキャッシュメモリ回路は、循環バッファメモリアーキテクチャにおいて構成されるレジスタファイルである、循環バッファアーキテクチャの場合、そのレジスタはモジュロアドレッシングを用いてアドレス指定することができる。一般に、OPTOPポインタはスタックキャッシュメモリ回路内の最上位メモリ位置を定義し、指示するために用いられ、最下位ポインタはスタックキャッシュメモリ回路内の最下位メモリ位置を定義し、指示するために用いられる。データワードがスタックに対して、プッシュ或いはポップされるとき、OPTOPポインタはそれぞれインクリメント及びデクリメントされる。同様に、データワードが、スタックキャッシュメモリ回路とスタックとの間で、スピル或いはフィルされるとき、最下位ポインタはそれぞれインクリメント及びデクリメントされる。
スタック管理ユニットのいくつかの実施例は、フィル制御ユニット及びスピル制御ユニットを含む。もしフィル制御ユニットがフィル条件を検出する場合には、フィル制御ユニットはスタックからスタックキャッシュメモリ回路にデータを転送する。スタック管理ユニットの１つの実施例では、フィル条件は、optopポインタが高水位マークより大きい場合に発生する。別の実施例では、フィル条件はスタックキャッシュメモリ回路内の空きメモリ位置の数が、低キャッシュ閾値より大きくなる、すなわち使用されるメモリ位置の数が低キャッシュ閾値より小さい場合に発生する。一般に、低水位マーク及び低キャッシュ閾値はプログラマブルレジスタにストアされる。空きメモリ位置の数は、モジュロ減算器を用いて判定することができる。
スタック管理ユニットの１つの実施例では、スピル条件は、optopポインタが低水位マークより小さい場合に発生する。別の実施例では、スピル条件は、スタックキャッシュメモリ回路内の空きメモリ位置の数が、高キャッシュ閾値より小さくなる、すなわち使用されるメモリ位置の数が高キャッシュ閾値より大きく場合に発生する。一般に、高水位マーク及び高キャッシュ閾値はプログラマブルレジスタにストアされる。空きメモリ位置の数は、モジュロ減算器を用いて判定することができる。
メソッド呼出しを用いるコンピューティングシステムを用いる本発明の実施例では、メソッドフレームは２つの異なるメモリ回路にストアされる。第１のメモリ回路は各メソッド呼出しの実行環境をストアし、第２のメモリ回路はメソッド呼出しのパラメータ、変数並びにオペランドをストアする。１つの実施例では、実行環境は、復帰プログラムカウンタ、復帰フレーム、復帰コンスタントプール、現在メソッドベクトル、並びに現在監視アドレスを含む。これらの実施例では、メモリ回路はスタックであり、従ってここで記載されるスタック管理ユニットは、メモリ回路をキャッシュするために用いることができる。
【図面の簡単な説明】
第１図は、仮想マシンハードウェアプロセッサの一実施例のブロック図である。
第２図は、本発明の一実施例において用いられる仮想マシン命令の生成のためのプロセスフロー図である。
第３図は、第１図のハードウェアプロセッサにおいて実現された命令パイプラインを示した図である。
第4A図は、スタック構造の論理的編成の一実施例を示した図であり、ここでは各メソッドフレームが、第１図のハードウェアプロセッサが使用するローカル変数ストレージエリア、環境ストレージエリア、及びオペランドスタックを含む。
第4B図は、スタック構造の論理的編成の別の実施例を示した図であり、ここでは各メソッドフレームが、ローカル変数ストレージエリア及びスタック上のオペランドスタックを含み、メソッドフレームのための環境ストレージエリアが、個別実行環境スタック上に含められている。
第4C図は、第4B図の実行環境スタック及びスタック用のスタック管理ユニットの別の実施例を示した図である。
第4D図は、第１のスタック管理ユニットにおけるローカル変数ルックアサイドキャッシュの一実施例を示した図である。
第５図は、第１図のハードウェアプロセッサに対するいくつかの可能なアドオンを示した図である。
第６図は、本発明によるスタック管理ユニットの１つの実施例のブロック図を示す。
第７図は、本発明によるスタックキャッシュの１つの実施例のメモリアーキテクチャを示す。
第８図は、本発明によるスタックキャッシュの１つの実施例のレジスタ、すなわちの中身を示す。
第９図は本発明によるドリブル管理ユニットの１つの実施例のブロック図を示す。
第10A図は、本発明によるドリブル管理ユニットの別の実施例のブロック図を示す。
第10B図は、本発明によるドリブル管理ユニットの別の実施例のブロック図を示す。
第11図は、本発明によるドリブル管理ユニットのある実施例の一部のブロック図を示す。
第12図は、本発明によるスタックキャッシュの１つの実施例のポインタ発生回路を示す。
本発明のこれらの、並びに他の機構及び利点は発明の詳細な説明において説明するように、図面から明らかになるであろう。同様の、或いは類似の機構は、図面及び発明の詳細な説明を通して同じ参照番号が付される。
発明の詳細な説明
第１図に示すのは、プロセッサアーキテクチャに依存しない仮想マシン命令を直接実行する仮想マシンハードウェアプロセッサ100（以下ハードウェアプロセッサ100）の一実施例である。仮想マシン命令の実行におけるハードウェアプロセッサ100の性能は、インテルのPENTIUMのマイクロプロセッサやサンマイクロシステムズULTRASPARCプロセッサのようなハイエンドのCPUよりずっと優れている（ULTRASPARCはサンマイクロシステムズ社の商標であり、PENTIUMはインテル社の商標である）。ソフトウェアJAVAインタプリタや、JAVAジャストインタイムコンパイラ（just−in−time compiler）で同じ仮想マシンをインタプリートすることは、低コストであって、電力消費量も低い。この結果、ハードウェアプロセッサ100は、移植性があるアプリケーションに非常に適したものとなる。ハードウェアプロセッサ100は、他の仮想マシンスタックベースのアーキテクチャや、ガーベジコレクション、スレッド同期などのような機能を用いている仮想マシンに対しても似たような利点をもたらす。
これらの特徴の点から言えば、ハードウェアプロセッサ100に基づいたシステムは、最も良い全体的な性能について言うのでなければ、ソフトウェアインタプリタやジャストインタイムコンパイラを含む他の仮想マシン実行環境と比較して魅力的なコストパフォーマンスを提供する。しかし、本発明は、仮想マシンハードウェアプロセッサの実施例に限定されず、本発明の範囲には、JAVA仮想マシン命令を特定のハードウェアプロセッサにネイティブなマシン命令にコンパイル（バッチかあるいはジャストインタイムコンパイルの何れかで）するソフトウェアインタプリタとしてJAVA仮想マシンをエミュレートするインプリメンテーションを備えたインプリメンテーションや、或いはJAVA仮想マシンをマイクロコードとして実現する、或いは直接チップ上に実現する、又はそれらの組み合わせとして実現するハードウェアを提供する、適当なスタックベースの、又は非スタックベースの演算マシンインプリメンテーションも含まれている。
コストパフォーマンスについては、ハードウェアプロセッサ100は、250キロバイト（Kbytes）〜500キロバイトのメモリストレージが不要であるという利点を有している。例えば一般にソフトウェアインタプリタによって必要とされるROM或いはRAMが不要である。ハードウェアプロセッサ100のシミュレーションにより、ハードウェアプロセッサ100が、そのプロセッサ100と同じクロックレートで同じ仮想マシン命令を実行するPENTIUMプロセッサ上の様々なアプリケーション上を走るソフトウェアインタプリタと比較して20倍高速で仮想マシンを実行することが分かった。別のハードウェアプロセッサ100のシミュレーションにより、ハードウェアプロセッサ100は、そのプロセッサ100と同じクロックレートで、同じ仮想マシン命令を実行するPENTIUMプロセッサ上を走るジャストインタイムコンパイラと比較して５倍高速で仮想マシンを実行することが分かった。
ソフトウェア仮想マシン命令インタプリタが必要とするメモリ消費が禁じられているような環境の下では、ハードウェアプロセッサ100は有利である。これらのアプリケーションは、例えばネットワーク機器、携帯電話プロセッサ、及び他の遠距離通信用集積回路、若しくは埋め込み型プロセッサやポータブルデバイスのような低電力低コストの他のアプリケーションのためのインターネットチップを含む。
本発明はスタック管理ユニット150を含み、スタックキャッシュ155を実行ユニット140に対するデータ転送を加速するために利用している。スタック管理ユニット150は第１図に示すように、ハードウエアプロセッサ100の完全な一部であることができるが、本発明によるスタック管理が任意のスタック利用コンピューティングシステムで用いることができるようにするため、スタック管理ユニット150の多くの実施例は、ハードウエアプロセッサに組み込まれていない。１つの実施例では、スタック管理ユニット150は、スタックキャッシュ155、ドリブル管理ユニット151、並びにスタック制御ユニット152を含む。ハードウエアプロセッサ100がスタック400（第４図（ａ））上にデータをプッシュし、スタックキャッシュ155がほとんど満杯になっているとき、ドリブル管理ユニット151は、データキャッシュユニット160を介してスタックキャッシュ155の最下位部からスタック400にデータを転送し、その結果スタック400の最上位部はスタックキャッシュ155内に残される。ハードウエアプロセッサ100がスタック400からデータをポップし、スタックキャッシュ155がほとんど空になっているとき、ドリブル管理ユニット151は、スタック400からスタックキャッシュ155の最下位部にデータを転送し、スタック400の最上位部はスタックキャッシュ155内に保持される。
本明細書において、仮想マシンとは、現実の演算マシンのように命令セットを有し、様々なメモリエリアを使用する抽象的な演算マシンである。仮想マシンの使用は、例えばハードウェアプロセッサ100のような仮想マシンインプリメンテーションにより実行されるプロセッサアーキテクチャに依存しない仮想マシン命令セットを定義する。各仮想マシン命令は実行される特定のオペレーションを定める。仮想演算マシンは、仮想マシン命令を生成するのに用いられるコンピュータ言語や、仮想マシンの下に位置するインプリメンテーションを理解する必要がない。理解する必要があるのは仮想マシン命令用の特定のファイルフォーマットのみである。好適実施例では、仮想マシン命令はJAVA仮想マシン命令である。各JAVA仮想マシン命令は、情報、オペランド、及び他の必要な情報を特定する命令をコード化する１又は２以上のバイトを含んでいる。
付録ＩはJAVA仮想マシン命令セットを説明したものであり、その全体を本明細書と一体に参照されたい。但し、使用された特定の仮想マシン命令のセットは、本明細書において不可欠な要素ではない。付録Ｉ及びこの明細書における仮想マシン命令を参照することにより、当業者は特定の仮想マシン命令セットやJAVA仮想マシン仕様の変更に対して、発明を変更して実施することができよう。
コンピュータプラットフォーム上で実行するJAVAコンパイラのJAVAC（第２図参照）は、JAVAプログラム言語で書かれたアプリケーション201を、JAVA仮想マシン仕様に従って、コンパイル済命令セットを含むコンパイル済命令シーケンス203をコード化するアーキテクチャに対して中立なオブジェクトファイルフォーマットに変換する。しかしながら、本発明において必要なのは、仮想マシン命令のソースコード及び関連情報のみである。仮想マシン命令のソース及び関連情報を生成するのに用いられる方法及び技術は本明細書において不可欠の要素ではない。
コンパイル済命令シーケンス203は、ハードウェアプロセッサ100上で実行可能であると共に、例えばソフトウェアインタプリタやジャストインタイムコンパイラを用いるJAVA仮想マシンを実現する任意のコンピュータプラットフォーム上で実行可能である。しかし、上述のように、ハードウェアプロセッサ100はソフトウェアインプリメンテーションより著しく優れた性能上の利点をもたらす。
この実施例において、ハードウェアプロセッサ100（第１図参照）は、JAVAバイトコードを含む仮想マシン命令を処理する。ハードウェアプロセッサ100は、後により完全に説明するように、バイトコードの大部分を直接実行する。しかし、バイトコードのいくつかの実行は、マイクロコードを介して実現される。
ハードウェアプロセッサ100によって直接実行される仮想マシン命令を選択するための１つの戦略について、以下実例を通して説明する。JAVA仮想マシン命令の30％は純粋なハードウェア翻訳である。即ち、このようにして実現される命令には、定数ローディング及び単なるスタックオペレーションが含まれる。仮想マシン命令の次の50％は、完全にではないが大抵ハードウェアで実行され、若干のファームウェアによる補助を必要とする命令である。このような命令には、スタックを利用するオペレーション及び配列命令が含まれる。JAVA仮想マシン命令の次の10％は、ハードウェア上で実現されるがファームウェアによる補助はほとんど不要な命令である。このような命令には関数呼び出し及び関数復帰命令が含まれる。JAVA仮想マシン命令の残りの10％は、ハードウェアではサポートされていないが、ファームウェアトラップかマイクロコードの何れか、或いはその両方によってサポートされている命令である。これらの命令には例外ハンドラのような関数が含まれる。ここで、ファームウェアとは、ハードウェアプロセッサ100のオペレーションを実行時に制御する、ROMに格納されたマイクロコードを意味する。
一実施例において、ハードウェアプロセッサ100は、I/Oバス及びメモリインタフェースユニット110、命令キャッシュ125を含む命令キャッシュユニット120、命令デコードユニット130、一体に統合（unified）された実行ユニット140、スタックキャッシュ155を含むスタック管理ユニット150、データキャッシュ165を含むデータキャッシュユニット160、及びプログラムカウンタ及びトラップコントロールロジック170を有する。これらの機能ユニットのそれぞれについては、後に完全に説明する。
同じく、第１図に示すように、それぞれのユニットがいくつかの要素を含む。図面において明確に示すため、又注意が発明の内容からそれることを避けるために、第１図にはユニットの中の要素間の相互接続は示していない。しかし、次の説明を参照することにより、当業者は、ユニット内の各要素間の、及び様々なユニット間の相互接続及びその改変について理解されよう。
第１図に示すユニット群を用いて実現されたパイプライン処理段には、フェッチ段階、デコード段階、実行段階、及びライトバック段階が含まれる。必要ならば、メモリアクセスや例外解決のための別の段階がハードウェアプロセッサ100内に設けられる。
第３図は、プロセッサ100の実施例における命令の実行のための４段パイプラインを図解したものである。フェッチ段階301においては、仮想マシン命令がフェッチされ命令バッファ124（第１図）に置かれる。仮想マシン命令は、（ｉ）命令キャッシュ125からの固定サイズキャッシュラインか、（ii）実行ユニットに140内のマイクロコードROM141の何れか一方からフェッチされる。
命令のフェッチ（取出し）については、命令tableswitch及びlookupswitchは別にして、（付録Ｉ参照）各仮想マシン命令は１バイトから５バイトの間の長さを有する。従って、処理の単純化のため、与えられた命令の全てを確実にフェッチできるようにするために少なくとも40ビットは必要である。
別の形態では、常に所定のバイト数、例えばオペコードで始まる４バイトをフェッチする。このバイト数は、JAVA仮想マシン命令の95％に対して十分なバイト数である（付録Ｉ参照）。３バイト以上のオペランドが必要な命令に対しては、４バイトがフェッチされる場合にはフロントエンドでの別の処理サイクルが許容されなければならない。この場合、命令の実行は、たとえオペランドの全ての組が利用可能でない段階でも、フェッチされた第１オペランドで開始することができる。
デコード段階302（第３図）においては、命令バッファ124（第１図）の前で仮想マシン命令がデコードされ、可能ならば、先行命令及び後続命令を一体化する命令フォールディング処理が実行される。スタックキャッシュ155へのアクセスは、仮想マシン命令が要求した場合のみ行われる。スタック400（第４図）の先頭を指定するポインタOPTOPを含むレジスタOPTOPも、デコード段階302（第３図）において更新される。
ここで説明の便宜上、レジスタにおける値及びレジスタは、同じ符号を付して示した。更に、次の議論において、ポインタをストアするためのレジスタの使用は、一実施例についてのみ説明する。本発明の特定の実施例によれば、ポインタは、ハードウェアレジスタ、ハードウェアカウンタ、ソフトウェアカウンタ、ソフトウェアポインタ、又は他の当業者に周知の等価な要素を用いて実現され得る。選択された特定のインプリメンテーションは、本発明において必要不可欠なものではなく、その選択の仕方は価格と性能のトレードオフに基づいて通常決められるものである。
実行段階303において、仮想マシン命令は、１又は２以上の処理サイクルで実行される。一般に、実行段階303において、定数ユニット142（第１図）におれるALUは、算術演算を行うか、或いはデータキャッシュユニット（DCU）160からのロードやそこへのストアのアドレスを計算するために用いられる。必要ならば、トラップが優先順位付けされて、実行段階303（第３図）の終わりに行われる。制御フロー命令に対しては、実行段階303において分岐アドレスが、分岐が従属している条件と共に計算される。
キャッシュ段階304はパイプライン処理に含まれない非パイプラインの段階である。データキャッシュ165（第１図）は、実行段階303（第３図）の間に必要があればアクセスされる。段階304がパイプライン処理に含まれない理由は、ハードウェアプロセッサ100がスタックベースのマシンだからである。従って、ロードに続く命令は、大抵ロード命令によって戻された値に依存している。この結果、この実施例においては、このパイプラインはデータキャッシュアクセスのための１サイクルの間保持される。これにより、パイプライン段階が少なくなり、パイプラインによって占められて他が使用不可能な領域を他のレジスタやバイパスのために開放することができる。
ライトバック段階305はパイプラインの最終段階である。段階305において、計算されたデータがスタックキャッシュ155にライトバックされる。
ハードウェアプロセッサ100は、この実施例においては、JAVA仮想マシンスタックベースアーキテクチャ（付録Ｉ参照）をサポートするスタック400（第4A図）を直接的に実現する。スタック400上の64個のエントリは、スタック管理ユニット150のスタックキャッシュ155に含められる。スタック400のエントリのいくつかは、スタックキャッシュ150に複製され得る。データ上のオペレーションは、スタックキャッシュ150を介して実行される。
ハードウェアプロセッサ100のスタック400は、主にメソッド用の情報のリポジトリとして使用される。任意の時点において、ハードウェアプロセッサ100は１つのメソッドを実行している。それぞれのメソッドは、メモリ空間、即ちローカル変数、オペランドスタック、及び実行環境構造の組に対して割り当てられたスタック400上のメソッドフレームを有する。
新たなメソッドフレーム、例えばメソッドフレーム410は、実行段階303（第３図）におけるメソッド呼び出し時にハードウェアプロセッサ100により割り当てられ、現在フレーム、即ちその時点で処理されているメソッドのフレームとなる。現在フレーム410（第4A図）は、他のメソッドフレームと共に、様々なメソッド呼び出し状況に応じて、以下の６つのエントリの全て又は一部を含み得る。その６つのエントリとは即ち、
1.オブジェクト参照
2.渡される引数
3.ローカル変数
4.呼び出しを行ったメソッドコンテキスト
5.オペランドスタック
6.メソッドからの戻り値
である。
第4A図において、オブジェクト参照、渡される引数、及びローカル変数は、引数及びローカル変数エリア421に含められる。呼び出しを行ったメソッドコンテキストは、フレーム状態とも称される実行環境422に含められ、それは更にメソッド呼び出し命令の隣の仮想マシン命令、例えばJAVAオペコードのアドレスである復帰プログラムカウンタ値431、呼び出しメソッドのフレームの位置である復帰フレーム432、呼び出しメソッドのコンスタントプールテーブルを指定する復帰コンスタントプールポインタ433、現在メソッドのベクトルテーブルである現在メソッドベクトル434、及び現在メソッドのモニタのアドレスである現在モニタアドレス435を含む。
このオブジェクト参照は、メソッド呼び出しのために標的にされたオブジェクトを表すオブジェクトストレージに対する間接ポインタである。JAVAコンパイラJAVAC（第２図参照）は、このポインタを呼び出し命令が発生する前にオペランドスタック423にプッシュする命令を発生する。このオブジェクト参照は、メソッドの実行の間にローカル変数ゼロとしてアクセス可能である。間接ポインタは、スタティックメソッド呼び出しに対して定義されたターゲットオブジェクトが存在しないのでスタティックメソッド呼び出しは利用不可能である。
渡される引数のリストは、呼び出しメソッドから呼び出されたメソッドへ情報を転送する。オブジェクト参照のように、渡される引数は命令によって生成されたJAVAコンパイラによりスタック400上にプッシュされ、ローカル変数によってアクセスされ得る。JAVAコンパイラJAVAC（第２図参照）は、現在メソッド410（第4A図）に対する引数のリストをスタティックに生成し、ハードウェアプロセッサ100はリストから引数の数を求める。非スタティックメソッド呼び出しに対するオブジェクト参照がフレーム内に存在するとき、第１引数は、ローカル変数１としてアクセス可能である。スタティックメソッド呼び出しに対しては、第１引数がローカル変数ゼロになる。
64ビット引数に対しては、一般の64ビットエントリと同様に、上側の32ビット、即ち64ビットエントリの最上位32ビットが、スタック400の上側の位置に置かれる。即ちスタックの最下位にプッシュされる。例えば、64ビットエントリがスタック400の先頭にある時、64ビットエントリの最上位32ビット部分は、スタックの先頭にあり、64ビットエントリの下位32ビット部分は、スタック400の先頭に隣接するストレージ位置に存在する。
現在メソッド410に対してスタック400（第4A図）上のローカル変数エリアは割り当てられた一次変数ストレージ空間を表し、メソッド410の呼び出しの間有効である。JAVAコンパイラJAVAC（第２図）は、必要なローカル変数の数をスタティックに決定し、ハードウェアプロセッサ100はそれに従って一次変数ストレージ空間を割り当てる。
メソッドがハードウェアプロセッサ100上で実行されている間、ローカル変数は、通常スタックキャッシュ155内に存在し、ポインタVARS（第１図及び第4A図）からのオフセットとして処理される。このポインタVARSは、ローカル変数０の位置を指定するポインタである。ローカル変数の値をオペランドスタック423にロードし、オペランドスタックからローカル変数エリア421に値をストアするための命令が供給される。
実行環境422における情報には、呼び出しを行うメソッドコンテキストが含まれる。新たなフレームが現在メソッドのために構築されたとき、ハードウェアプロセッサ100は呼び出しを行うメソッドコンテキストを新たに割り当てられたフレーム410にプッシュし、後にリターンが行われる前に呼び出しを行うメソッドコンテキストを再びストアするためにこの情報を利用する。ポインタFRAME（第１図及び第4A図参照）は、現在メソッドの実行環境を指定するためのポインタである。ここに示す実施例においては、レジスタセット144（第１図）のそれぞれのレジスタが32ビットの幅を有する。
オペランドスタック423は現在メソッド内の仮想マシン命令の実行をサポートするために割り当てられる。プログラムカウンタレジスタPC（第１図）は、次の命令のアドレス、例えば実行されるオペレーションのオペコードを含む。オペランドスタック423（第4A図）上の位置を用いて、命令実行のためのソースストレージ位置及びターゲットストレージ位置の双方を提供する仮想マシン命令のオペランドを格納する。オペランドスタック423のサイズは、JAVAコンパイラJAVAC（第２図）にスタティックに決定され、ハードウェアプロセッサ100はそれに従ってオペランドスタック423用の空間を割り当てる。レジスタOPTOP（第１図及び第4A図）は、オペランドスタック423の先頭を指定するポインタを保持する。
呼び出されたメソッドは、その実行の結果を呼び出しを行ったスタックの先頭に戻し、従って呼び出しを行った側は、オペランドスタック参照を有するリターン値にアクセスできることになる。このリターン値は、オブジェクト参照又は引数がメソッドの呼び出しの前にプッシュされる領域に置かれる。
JAVA仮想マシン上でのシミュレーションの結果により、メソッド呼び出しは、実行時間の多くの部分を（20〜40％）を占めていることが分かった。仮想マシン命令の実行を促進するためのこの魅力的な目標が与えられたことにより、メソッド呼び出しのためのハードウェアサポートは、後に完全に説明するようにハードウェアプロセッサ100に含められる。
新たに呼び出されたメソッドのスタックフレームの始まり、即ち呼び出した側によって渡される引数及びオブジェクト参照は、オブジェクト参照及び入ってくる引数が呼び出し側のスタックの先頭から来ているため、スタック400上に既にストアされている。上に説明したように、スタック400上のこれらの項目に後続して、ローカル変数がロードされ、次いで実行環境がロードされる。
このプロセスをスピードアップするための１つの方法は、ハードウェアプロセッサ100がバックグラウンドで実行環境をロードし、それまでに何がロードされたかを、例えば単純な１ビットのスコアボードにより示すことである。ハードウェアプロセッサ100は、例えスタック400が完全にロードされていなくても、呼び出されたメソッドのバイトコードをできる限り速く実行しようとする。既にロードされた変数にアクセスがなされる場合、スタック400のロードと実行がオーバーラップし、そうでない場合には、ハードウェアインターロックが生じ、ハードウェアプロセッサ100が、ロードされるべき実行環境における変数を待つ状態となる。
第4B図に示すのはメソッド呼び出しを加速する他の方法である。スタック400にメソッドフレーム全体をストアする代わりに、各メソッドフレームの実行環境が、メソッドフレームのオペランドスタック及びローカル変数エリアは別にストアされる。従って、この実施例では、スタック400Bが改変されたメソッドフレーム、例えばローカル変数エリア421及びオペランドスタック423のみを有する改変されたメソッドフレーム410Bを含むことになる。メソッドフレームの実行環境422は、実行環境メモリ440にストアされる。実行環境メモリ440実行環境をストアすることにより、スタックキャッシュ155におけるデータ量が少なくなる。従って、スタックキャッシュ155のサイズを小さくすることができる。更に、実行環境メモリ440及びスタックキャッシュ155は同時にアクセスすることになる。従って、メソッド呼び出しは、スタック400Bへのデータのロード又はストアと同時並行的に実行環境のロード又はストアを行うことにより加速できることになる。
スタック管理ユニット150の一実施例では、実行環境メモリ440のメモリアーキテクチャもスタック式である。改変型メソッドフレームがスタックキャッシュ155を介してスタック400Bにプッシュされる時、対応する実行環境が実行環境メモリ440にプッシュされる。例えば、第4B図に示すような改変型メソッドフレーム０〜２は、スタック400Bにあるので、実行環境（EE）０〜２はそれぞれ実行環境メモリ回路440にストアされる。
メソッド呼び出しを更に強化するために、実行環境キャッシュを追加して、メソッド呼び出しの間実行環境をセーブしたり取り出したりする速度を高めることができる。後により完全に説明するスタックキャッシュ155、ドリブル管理ユニット151、及びスタック400のキャッシングのためのスタックコントロールユニット152に対するアーキテクチャも、実行環境メモリ440のキャッシングに適用することができる。
第4C図に示すのは、スタック400B及び実行環境メモリ440の双方をサポートするように改変されたスタック管理ユニット150の実施例である。詳述すると、第4C図におけるスタック管理ユニット150の実施例は、実行管理スタックキャッシュ450、実行環境ドリブル管理ユニット（execution environment dribble manager unit）460、及び実行管理スタック制御ユニット470を加えている。一般に、実行ドリブル管理ユニット460は、スピル（spill）オペレーション又はフィル（fill）オペレーションの間に、実行環境キャッシュ450と実行環境メモリ440との間で実行環境全体を転送する。
I/Oバス及びメモリインタフェースユニット
I/Oバス及びメモリインタフェースユニット110（第１図）はインタフェースユニット110とも称し、ハードウェアプロセッサ100と、実施例においては外部メモリを含み、所望に応じてハードウェアプロセッサ100と同じチップ上のメモリストレージ及びインタフェース或いはその何れかを含み得るメモリ階層を実現する。この実施例においては、I/Oコントローラ111が外部I/Oデバイスに対してインタフェースし、メモリコントローラ112が、外部メモリに対してインタフェースする。ここで、外部メモリとは、ハードウェアプロセッサ100の外部にあるメモリを意味する。しかし、外部メモリは、ハードウェアプロセッサ100と同じチップ上に含められても良く、或いはハードウェアプロセッサ100を含みチップの外部に設けられても良く、又はチップの内外双方に設けられても良い。
別の実施例では、I/Oデバイスに対するリクエストはメモリコントローラ112を通り、メモリコントローラ112はハードウェアプロセッサ100を含むシステム全体のアドレスマップを保持する。この実施例のメモリバス上では、ハードウェアプロセッサ100が唯一のマスタ（master）であり、メモリバスの使用を調整する必要はない。
従って、I/Oバス及びメモリインタフェースユニット110をインタフェースする入出力バスの別の実施例は、PCI、PCMCIA、又は他の標準的なバスに対する直接のサポートを提供する、サポーティングメモリマップスキームを含む。高速グラフィックス（w/VIS又は他の技術）は、所望に応じてハードウェアプロセッサ100と同一のチップ上に含められ得る。
I/Oバス及びメモリインタフェースユニット110は、外部メモリに対する読み出し及び書き込みリクエストを発生する。詳述すると、インタフェースユニット100は、命令キャッシュ及びデータキャッシュコントローラ121及び161を外部メモリに対してインタフェースする。インタフェースユニット110は、命令キャッシュコントローラ121及びデータキャッシュコントローラ161からの内部リクエストに対する管理ロジックを含み、これによって外部メモリにアクセスし、リクエストに応じてメモリバス上の外部メモリに対する読み出し又は書き込みリクエストの何れかを開始するデータキャッシュコントローラ121からのリクエストは、常に命令キャッシュコントローラ161からのリクエストに対して高いプライオリティを持つものとして取り扱われる。
インタフェースユニット110は、リクエストしている命令キャッシュコントローラ121又はデータキャッシュコントローラ161に対して、読み出しサイクルの間に肯定応答信号を供給し、リクエストしているコントローラがそのデータをキャッチできるようにする。書き込みサイクルにおいては、インタフェースユニット110からの肯定応答信号は、フローコントロールのために用いられ、リクエストしている命令キャッシュコントローラ121又はデータキャッシュコントローラ161は、ペンディングが生じている場合新たなリクエストを発生しない。インタフェースユニット110は又、メモリバス上で外部メモリに対して発生されたエラーも取り扱う。
命令キャッシュユニット
命令キャッシュユニット（ICU）120（第１図）は、命令キャッシュ125から仮想マシン命令をフェッチして、その命令を命令デコードユニット130に供給する。この実施例においては、命令キャッシュヒット時に、命令キャッシュコントローラ121が、１サイクルにおいて、命令キャッシュ125から命令を命令バッファ124に転送し、そこでこの命令は定数実行ユニットIEU（後に完全に説明する）が命令を処理できるようになるまで保持する。これによって、ハードウェアプロセッサ100におけるパイプライン300（第３図）のフェッチ段階301と残りの段階とが分離される。命令−バッファの編成をサポートする複雑さを避けることが望ましくないならば、１命令レジスタが大抵の目的に十分である。しかし、後に説明するように、命令のフェッチング、キャッシング、及びバッファリングは、命令フォールディング処理をサポートできるだけの十分な命令バンド幅を提供するべきである。
ハードウェアプロセッサ100のフロントエンドは、ハードウェアプロセッサ100の残りの部分から完全に独立している。理想的には、１サイクルあたり１命令が実行パイプラインに供給される。
この命令は、命令デコードユニット130からの信号に応じてバイトアライナ回路122により任意の８ビット境界の上に位置あわせされる。従って、ハードウェアプロセッサ100のフロントエンドは、任意のバイト位置からのフェッチングを効果的に取り扱うことができる。同様に、ハードウェアプロセッサ100はキャッシュ125の複数のキャッシュラインに渡る命令の問題を処理する。この場合、オペコードが常に最初のバイトであるため、オペランドに対するフェッチ支援の余分な処理サイクルを保養できる。従って、バイトコードのフェッチングと実行との間の非常に単純な非干渉化が可能となる。
命令キャッシュミスの場合には、命令キャッシュコントローラ121が、I/Oバスとメモリインタフェースユニット110にミスとなった命令の外部メモリリクエストを生成する。命令バッファ124が空であるか、ほとんど空である場合には、命令キャッシュミスが生じたとき、命令デコードユニット130が機能停止する。即ちパイプライン300が機能停止する。詳述すると、命令キャッシュコントローラ121はキャッシュミス時に機能停止信号を発生し、これは命令バッファエンピティ信号と共にパイプライン300を機能停止するか否かを決定するために用いられる。命令キャッシュ125は自己修正コードを受け入れるべく無効にすることができる。例えば、命令キャッシュコントローラ121が命令キャッシュ125における特定のラインを無効にすることができる。
従って、命令キャッシュコントローラ121はフェッチされるべき次の命令を決定する。即ち命令キャッシュ125におけるアクセスされることが必要な命令を決定し、命令キャッシュ125におけるデータ及びタグRAMに対するアドレス、データ、及びコントロール信号を発生する。キャッシュヒット時には、４バイトのデータが１つの処理サイクルの間に命令キャッシュ125からフェッチされ、命令バッファ124には最大４バイトを書き込むことができる。
バイトアライナ回路122は、命令キャッシュRAMからのデータを位置合わせし、位置合わせされたデータを命令バッファ124に入れる。後に詳細に説明するように、命令バッファ124における初めの２バイトがデコードされて、仮想マシン命令の長さが決定される。命令バッファ124はキューにおける有効な命令を追跡し、エントリを更新する。これについては後に詳細に説明する。
命令キャッシュコントローラ121も、データ経路及び命令キャッシュミスを処理するための制御を提供する。命令キャッシュミスの発生時には、命令キャッシュコントローラ121は、I/Oバス及びメモリインタフェースユニット110にキャッシュフィルリクエストを発生する。
外部メモリからデータを受け取ったとき、命令キャッシュコントローラ121はそのデータを命令キャッシュ125に書き込み、そのデータは又命令バッファ124にバイパスされる。データは、それが外部メモリから利用可能になるとすぐに、又キャッシュフィルが終了する前に命令バッファ124にバイパスされる。
命令キャッシュコントローラ121は、命令バッファ124が一杯になるか、分岐又はトラップが生ずるまで、連続したデータをフェッチし続ける。一実施例においては、命令バッファ124は命令バッファ124に８バイト以上の有効エントリが存在する場合、一杯になっていると見なされる。従って、一般に８バイトのデータが命令キャッシュユニット120によってインタフェースユニット110に送られたキャッシュフィルリクエストに応じて外部メモリから命令キャッシュ125に書き込まれる。命令キャッシュミスの処理中に分岐又はトラップが生じた場合は、ミスの処理が終了した直後にトラップ又は分岐が実行される。
命令キャッシュフィルの発生時にエラーが生じたときには、フォールト表示が生成され、仮想マシン命令と共に命令バッファ124にストアされる。即ちフォールトビットがセットされる。このラインが命令キャッシュ125には書き込まれない。従って、誤りキャッシュフィルトランザクションはフォールトビットがセットされる点を除いてキャッシュ不可能なトランザクションのような役目を果たす。この命令がデコードされた時、割り込みが実行される。
命令キャッシュコントローラ121もキャッシュ不可能な命令読み出しを提供する。レジスタセット144内のプロセッサステータスレジスタにおける命令キャッシュイネーブル（ICE）ビットが、ロードがキャッシュされ得るか否かを定めるために用いられる。命令キャッシュイネーブルビットがクリアされた場合には、命令キャッシュユニット124が全てのロードオペレーションをキャッシュ不可能なロードとして取り扱う。命令キャッシュコントローラ121は、キャッシュ不可能な命令のためにインタフェースユニット110にキャッシュ不可能なリクエストを発行する。データがキャッシュ不可能な命令のためにキャッシュフィルバス上で利用可能である時、このデータは命令バッファ124にバイパスされ、命令キャッシュ125には書き込まれない。
この実施例において、命令キャッシュ125は直接マッピングされる、８バイトラインサイズのキャッシュである。命令キャッシュ125は１サイクルの遅延を有する。このキャッシュサイズは0K、1K、2K、4K、8K、及び16Kバイトサイズに構成されている。ここでＫはキロを意味する。デフォルトサイズは4Kバイトである。各ラインはそのラインが関係するキャッシュタグエントリを有する。デフォルトの4Kバイトサイズでは、それぞれのキャッシュタグは、20ビットのアドレスタグフィールド及び１つの有効ビットを有する。
命令バッファ124は、この実施例においては、12バイトの深さのFIFOバッファであって、性能上の理由からフェッチ段階301（第３図）をパイプライン300の残りの段階から分離している。バッファ124（第１図）におけるそれぞれの命令は関連する有効ビット及びエラービットを有する。この有効ビットがセットされている時、その有効ビットに関連する命令は、有効な命令である。エラービットがセットされている時、そのエラービットが関連する命令のフェッチはエラーの処理であった。命令バッファ124はデータを命令バッファ124とやり取りする信号を発生し、命令バッファ124における有効エントリ、即ちセットされた有効ビットを追跡する命令バッファコントロール回路（図示せず）を有する。
類似した実施例において、所定のサイクルにおいて４バイトを命令バッファ124に読み込ませることができる。最大２つの仮想マシン命令を表す最大５バイトは、所定のサイクルで命令バッファ124から読み出すことができる。別の実施例では、複数のバイトの仮想マシン命令をフォールディング処理したり、或いは２以上の仮想マシン命令のフォールディングをすることにより、より大きい入出力のバンド幅が提供される。当業者は、例えば位置あわせロジック、環状バッファ等を含む様々な適当な命令バッファの設計を理解されよう。分岐又は割り込みが生じた時、命令バッファ124における全てのエントリはヌル化され、分岐／割り込みデータは命令バッファ124の先頭に移動する。
第１図の実施例においては、統合型実行ユニットに140が示されている。しかし、他の実施例では、命令デコードユニット120、整数ユニット142、及びスタック管理ユニット150は、１つの整数実行ユニットと考えられ、浮動小数点実行ユニット143は別のオプションのユニットである。更に別の実施例では、実行ユニットにおける様々な要素が、他のプロセッサの実行ユニットを用いて実現され得る。一般に、第１図の様々なユニットに存在する様々な要素は、一実施例のみの典型的な例である。それぞれのユニットは、図示された要素の全て又はその一部を用いて実現され得る。設計上の決定は、価格と性能のトレードオフに基づいて行われる。
命令デコードユニット
上述したように、仮想マシン命令はパイプライン300のデコード段302（第３図）においてデコードされる。典型的な実施例では、２バイトが、２つの仮想マシン命令に対応することができ、命令バッファ124（第１図）からフェッチされる。２バイトは並列にデコードされ、２バイトが２つの仮想マシン命令、例えば、１つの等価な演算にフォールディングされることができる、第１のロードトップスタック命令及び第２のアドトップ２スタックエントリ命令、に対応するか否かを判定される。フォールディングは、２つ或いは３つ以上の仮想マシン命令に対応する１つの等価な演算を供給することである。
典型的なハードウエアプロセッサ100の実施例では、１バイト第１命令が第２命令にフォールディングされる。しかしながら、別の実施例は、命令デコーダの複雑化及び命令バンド幅の増加という損失はあるものの、２つより多い仮想マシン命令、例えば２〜４仮想マシン命令、並びに多数バイト仮想マシン命令のフォールディングを提供する。本発明の譲渡人に譲渡され、代理人整理番号SP2036にて同じ日に出願された、"INSTRUCTION FOLDING FOR A STACK−BASED MACHINE"というタイトルの米国特許出願第08/xxx,xxx号（発明者Marc Tremblay and James Michael O'Connor）を参照されたい。これを参照して、全体をここに組み込んでいる。典型的なプロセッサ100の実施例では、第１バイトが、第１の仮想マシン命令に対応し、多数バイト命令であるなら、第１及び第２の命令はフォールディングされない。
付加的な現在オブジェクトローダフォルダ132は、上記の、さらにより詳細には本発明の譲渡人に譲渡され、代理人整理番号SP2036にて同じ日に出願された、"INSTRUCTION FOLDING FOR A STACK−BASED MACHINE"というタイトルの米国特許出願第08/xxx,xxx号（発明者Marc Tremblay and James Michael O'Connor）に記載されており、参照して全体をここに組み込んでいるような、命令フォールディングを、シミュレーション結果が特に頻繁に、それゆえ最適化のための所望のターゲットになるように示される仮想マシン命令シーケンスにおいて利用する。特に、メソッド呼出し（method invocation）は一般的に、スタックオペランド上の対応するオブジェクトに対するオブジェクトリファレンスをロードし、そのオブジェクトからフィールドをフェッチする。命令フォールディングにより、ほとんど共通の仮想マシン命令シーケンスが、等価的にフォールディングされた演算を用いて実行されるようになる。
高速型命令（quick variant）は、仮想マシン命令セットの一部ではなく（付録Ｉの第３章を参照されたい）、JAVA仮想マシンインプリメンテーリョンの外側には現れない。しかしながら、仮想マシンインプリメンテーリョンの内側では、高速型命令は有効に最適化されいることがわかる（本明細書の不可欠な部分である、付録Ｉの付録Ａを参照されたい）。非高速−高速翻訳（quick translator）キャッシュ131において、種々の命令を高速型命令に更新するための書込みをサポートすることにより、通常の仮想マシン命令は高速仮想マシン命令に変更され、高速型命令によりもたらされる大きな利点を利用することができる。特に、より詳細に、本発明の譲渡人に譲渡され、代理人整理番号SP2039にて同じ日に出願された、NON−QUICK INSTRUCTION ACCELERATOR AND METHOD OF IMPLEMENTING SAMEというタイトルの米国特許出願第08/xxx,xxx号（発明者Mark Tremblay and James Michael O'Connor）に記載されており、参照して全体をここに組み込んでいように、命令の実行を開始するために必要とされる情報が初めにアセンブルされているとき、その情報は非高速−高速翻訳キャッシュ131におけるタグとしてプログラムカウンタPCと共にキャッシュ内にストアされ、その命令は高速型命令として識別される。１つの実施例では、これが自己修飾コード（self−modifying code）を用いて行われる。
その命令の後続呼出しにおいて、命令デコードユニット130は、その命令が高速型命令として識別され、実際、非高速−高速翻訳キャッシュ131の命令の実行を開始するために必要とされる情報を回収するということを検出する。非高速−高速翻訳キャッシュはハードウエアプロセッサ100の付加的な機構である。
分岐に関しては、ほとんどのインプリメンテーリョンに対して高速分岐分解を有する非常に短いパイプで十分である。しかしながら適切で簡単な分岐予測機構、例えば分岐予測回路133を別に導入することができる。分岐予測回路133に対するインプリメンテーリョンは、オペコードに基づく分岐、オフセットに基づく分岐、或いは２ビットカウンタ機構に基づく分岐を含む。
JAVA仮想マシン仕様は、実行の際にメソッドを呼出す、命令invokenonvirtual、オペコード183を定義する。そのオペコードには、インデクスバイト１及びインデクスバイト２が後続する（付録Ｉ参照）。オペランドスタック423は、この命令が実行されるとき、１つのオブジェクトに対する１つのリファレンス及びいくつかの数の引数（argument）を含む。
インデクスバイト１及び２は、現在クラスのコンスタントプール内にインデクスを発生させるために用いられる。そのインデクスにおけるコンスタントプール内の項目は、完全なメソッドシグネチャ及びクラスを指示する。シグネチャは付録Ｉにおいて定義され、その記載は参照してここに組み込んでいる。
メソッドシグネチャ、すなわち各メソッドに対する、短い、固有の識別子は、指示されるクラスのメソッドテーブルにおいて探索される。その探索（lookup）の結果は、メソッドのタイプとそのメソッドに対する引数の数を示すメソッドブロックである。オブジェクトリファレンス及び引数は、このメソッドのスタックからポップされ、新しいメソッドのローカル変数の初期値になる。その後実行が新しいメソッドの第１の命令を用いて再開される。実行の際に、命令invokevirtual、オペコード182及びinvokestatic、オペコード184は、まさに記載された処理と同様の処理を呼出す。各場合に、ポインタがメソッドブロックを探索するために用いられる。
メソッド引数キャッシュ134は、ハードウエアプロセッサ100の付加的な機構でもあり、第１の実施例において、タグとなるそのメソッドブロックに対するポインタと共に、そのメソッドに対する第１の呼出し後に用いるためのメソッドのメソッドブロックをストアするために用いられる。命令デコードユニット130は、インデクスバイト１及び２を用いてポインタを発生させ、その後ポインタを用いてキャッシュ134におけるそのポインタに対するメソッドブロックを回収する。これにより、後続するメソッドの呼出しにおいて、背景内でより迅速に新たに呼出されるメソッドに対するスタックフレームを構築することができるようになる。別の実施例は、キャッシュ134内のリファレンスとして、プログラムカウンタ或いはメソッド識別子を用いることもある。もしキャッシュミスがあるなら、その命令は通常の形態において実施され、キャッシュ134は適宜更新される。どのキャッシュエントリが上書きされるかを判定するために用いられる特定の処理は本発明の本質的面ではない。例えば、ごく最近用いられている判定基準がインプリメントされることができる。
別の実施例では、メソッド引数キャッシュ134が、タグとなるそのプログラムカウンタPCの値と共に、そのメソッドに対する第１の呼出し後に用いるために、そのメソッドブロックに対するポインタをストアするために用いられる。命令デコードユニット130は、プログラムカウンタPCの値を用いて、キャッシュ134にアクセスする。プログラムカウンタPCの値がキャッシュ134内のタグの１つに等しければ、キャッシュ134は、命令デコードユニット130に対するそのタグを用いてストアされたポインタをを供給する。命令デコードユニット139は、供給されたポインタを用いて、そのメソッドに対するメソッドブロックを回収する。これらの２つの実施例から見て、他の別の実施例が当業者には、明らかになるであろう。
ワイドインデクスフォワーダ136は、ハードウエアプロセッサ100の付加構成要素であり、命令wideに対する命令フォールディングの特定の具体例である。ワイドインデクスフォワーダ136は、直後に後続する仮想マシン命令に対するインデクスオペランドの拡張をエンコードするオペコードを取り扱う。このようにして、ワイドインデクスフォワーダ136により、命令デコードユニット130は、ローカル変数の数が命令wideに対する別々の実行サイクルを招くことなく、１つバイトインデクスを用いてアドレス指定可能な数を越えるとき、ローカル変数記憶装置421内に誘導することができる。
命令デコーダ135、特に命令フォールディング、非高速−高速翻訳キャッシュ131、現在オブジェクトローダフォルダ132、分岐予測部133、メソッド引数キャッシュ134並びにワイドインデクスフォワーダ136の態様は、これらの構成要素がソフトウエアインタプリタ或いはジャストインタイムコンパイラの演算を促進するために用いることができるため、ソフトウエアインタプリタ或いはジャストインタイム
コンパイラを利用するインプリメンテーリョンにおいても有用である。そのようなインプリメンテーリョンでは、一般的に、仮想マシン命令はインタプリタ或いはコンパイラを実行するプロセッサ、すなわち例えばSun社製プロセッサ、DEC社製プロセッサ、Intel社製プロセッサ或いはMotorola社製プロセッサの任意の１つ対する命令に翻訳され、その構成要素の演算はそのプロセッサ上の実行をサポートするように変更される。仮想マシン命令から他のプロセッサ命令への翻訳は、ROM内の翻訳部、或いは単にソフトウエア翻訳部のいずれかを用いて行われる。デュアル命令セットプロセッサのさらなる例としては、本発明の譲渡人に譲渡され、代理人整理番号SP2042にて同じ日に出願された、"A PROCESSOR FOR EXECUTING INSTRUCTION SETSRECEIVED FROM A NETWORK OR FROM A LOCAL MEMORY"というタイトルの米国特許出願第08/xxx,xxx号（発明者Marc Tremblay and James Michael O'Connor）を参照されたい。これを参照して、全体をここに組み込んでいる。
整数実行ユニット
整数実行ユニットIEUは、命令デコードユニット130、整数ユニット142並びにスタック管理ユニット150を含む、浮動小数点関連命令を除く、全ての仮想マシン命令の実行を支配する。浮動小数点関連命令は浮動小数点ユニット142において実行される。
整数実行ユニットIEUは、命令キャッシュユニット120とフロントエンドにて対話し、浮動小数点命令を実行するための浮動小数点ユニット（FPU）143を用いて、最終的にはロード／ストア命令関連命令を実行するためのデータキャッシュユニット（DCU）160を用いて、命令フェッチする。また整数実行ユニットIEUは、マイクロコードROMを有し、マイクロコードROMは、整数演算に関連する一定の仮想マシン命令を実行するような命令を含む。
整数実行ユニットIEUは、スタック400のキャッシュ部分、すなわちスタックキャッシュ155を含む。スタックキャッシュ155は、現在メソッド（current method）に関連するオペランドスタックエントリ及びローカル変数エントリ（local variable entry）、すなわちオペランドスタック423エントリ及びローカル変数記憶421エントリを迅速に記憶する。スタックキャッシュ155は、現在の命令に関連する全てのオペランドスタックエントリ及びローカル変数エントリを十分に記憶することができるが、オペランドスタックエントリ及びローカル変数エントリの数によっては、全てのローカル変数エントリより少ない数、或いはローカル変数エントリとオペランドスタックエントリの両方の数より少ない数が、スタックキャッシュ155において表されるかもしれない。同様に付加的なエントリ、すなわち呼出しメソッド（calling method）に対するオペランドスタックエントリ及びローカル変数エントリは、もし空間的に許容されるなら、スタックキャッシュ155において表されるかもしれない。
スタックキャッシュ155は、64エントリ32ビット幅のレジスタ配列であり、１つの実施例ではレジスタファイルとして物理的にインプリメントされる。スタックキャッシュ155は３つの読出しポートを有しており、その内の２つは整数実行ユニットIEU専用であり、残りの１つはドリブル（dribble）管理ユニット151用である。またスタックキャッシュ155は、２つの書込みポートを有し、１つは整数実行ユニットIEU専用であり、もう１つはドリブル管理ユニット151用である。
整数ユニット142は、種々のポインタを保持しており、ポインタは、スタックキャッシュ155内にあるローカル変数のような変数値、並びにオペランドスタック値にアクセスするために用いられる。また整数ユニット142はスタックキャッシュヒットが起こるか否かを検出するためのポインタを保持する。実行時例外は捕捉され、マイクロコードROM149及び回路170における情報を用いてインプリメントされる例外ハンドラにより処理される。
整数ユニット142は、算術演算をサポートするための32ビットALUを含む。ALUによりサポートされる演算は、加算、減算、けた送り（シフト）、論理積、論理和、排他的論理和、比較、超過（greater than）、未満（less than）並びに読飛ばし（バイパス）を含む。またALUは、別々の比較器が分枝命令の結果を判定する間に、条件付き分枝のアドレスを判定するための用いられる。
パイプラインを介して手際よく実行される大部分の共通命令セット（most common set of instructions）は、ALU命令の集合体である。ALU命令はデコード段302内のスタック400の先頭からオペランドを読出し、結果を計算するための実行段303においてALUを用いる。その結果はライトバック段305内のスタック400にライトバックされる。２段階のバイパスがあり、連続ALU演算がスタックキャッシュ155にアクセスしている場合に、必要とされることがある。
スタックキャッシュポートは本実施例では32ビット幅であるため、倍精度及び長データ演算は２サイクルかかる。またシフタはALUの一部として存在する。もしオペランドがデコード段302内の命令に対して利用できない、すなわち実行段303の初めにおいて最大であるなら、実行段303前にインターロックがパイプライン段をホールドする。
整数実行ユニットIEUの命令キャッシュユニットインターフェースは有効／許容インターフェースであり、そこで命令キャッシュユニット120は、固定フィールドにおける整数デコードユニット130に、有効ビットと共に命令を引き渡す。命令デコーダ135は、アライナ（aligner）回路122がシフトするために何バイト必要とするか、或いは命令デコードユニット130がデコード段302において何バイト消費するかをシグナリングすることにより応答する。また命令キャッシュユニットインタフェースは命令キャッシュユニット120に対して、分岐誤り予測（branch mis−predict）条件、並びに実行段303における分岐アドレスをシグナリングする。また、必要なときには、同様にトラップが命令キャッシュユニット120に対して指示される。命令キャッシュユニット120は、命令デコードユニット130に対していかなる有効データもアサートしないことにより、整数ユニット142をホールドすることができる。命令デコードユニット130はバイトアライナ回路122に対してシフト信号をアサートしないことにより命令キャッシュユニット120をホールドすることができる。
また整数実行ユニットIEUのデータキャッシュインターフェースは、有効−許容インターフェースであり、そこでは整数ユニット142が、実行段303において、データキャッシュユニット160内のデータキャッシュコントローラ161に対して、例えば非キャッシュ、特殊ストア（special store）等の属性と共に、ロード或いはストア演算シグナリングする。データキャッシュユニット160は、ロード演算中のデータを復帰し、データコントロールユニットホールド信号を用いて整数ユニット142を制御することができる。データキャッシュヒット中に、データキャッシュユニット160は要求データを復帰し、それからパイプラインを解放する。
またストア演算中に整数ユニット142は、実行段303内にアドレスと共にデータを供給する。データキャッシュユニット165は、もしデータキャッシュユニット165がビジー、すなわちラインフィルであるなら、キャッシュ段304内のパイプラインをホールドすることができる。
浮動小数点演算は、整数実行ユニットIEUにより専用に処理される。命令デコーダ135は、浮動小数点ユニット143関連命令をフェッチし、かつデコードする。命令デコーダ135は、デコード段302における浮動小数点ユニット142に対して実行するための浮動小数点演算オペランドを送出する。浮動小数点ユニット143が浮動小数点演算を実行ビジーの間に、整数ユニット142はパイプラインを停止し、浮動小数点ユニット143が、整数ユニット142に対して、結果が利用可能であるということをシグナリングするまで待機する。
浮動小数点ユニット143からの浮動小数点実行可能信号は浮動小数点演算の実行段303が終了したということ示す。浮動小数点実行可能信号に応じて、その結果が整数ユニット142によりスタックキャッシュ155内にライトバックされる。浮動小数点ユニット143及び整数ユニット142がスタックキャッシュ155内に見出されるため、浮動小数点ロード及びストア演算は、整数実行ユニットIEUにより完全に処理される。
スタック管理ユニット
スタック管理ユニット150は情報をストアし、実行ユニット140に対するオペランドを提供する。またスタック管理ユニット150はスタックキャッシュ155のオーバーフロー及びアンダーフロー条件を処理する。
１つの実施例では、スタック管理ユニット150は、上述のように１つの実施例では３つの読出しポート、２つの書込みポートであるスタックキャッシュ155、実行ユニット140に対するオペランドを回収し、ライトバックレジスタ、すなわちデータキャッシュ165から戻されるデータをスタックキャッシュ155内にストアするために用いられる２つの読出しポート及び１つの書込みポートに必要な制御信号を供給するスタック制御ユニット152、並びにスタックキャッシュ155においてオーバーフロー或いはアンダーフローが生じるときはいつでも、スタックキャッシュ155に入るデータ及びスタックキャッシュ155から出るデータをメモリ内に投機的にドリブルするドリブル管理部151を含む。第１図の典型的な実施例では、メモリはデータキャッシュ165及びメモリインターフェースユニット110によりインターフェースされる任意のメモリ記憶装置を含む。一般に、メモリは、キャッシュ、アドレス指定可能読出し／書込みメモリ記憶装置、第２の記憶装置、等を含む任意の適切なメモリ階層を含む。またドリブル管理部151は、背景でのドリブル目的に対して専用に用いられるスタックキャッシュ155の１つの読出しポート及び１つの書込みポートに対する必要な制御信号を供給する。
ある実施例では、スタックキャッシュ155は、そのスタックがある予測メソッドに基づいて増減し、オーバーフロー及びアンダーフローを防ぐことを確実にする循環バッファとして管理される。データキャッシュ165への値及びデータキャッシュ165からの値の退避及び再生は、ある実施例では、高水位マーク（high−water mark）及び低水位マークを用いてドリブル管理部151により制御される。
スタック管理ユニット150は、実行ユニット140に、所定のサイクルにおける２つの32−bitオペランドを供給する。スタック管理ユニット150は、所定のサイクルにおける１つの32−bit結果をストアすることができる。
ドリブル管理部151は、データキャッシュ165からスタックキャッシュ155への、並びにスタックキャッシュ155からデータキャッシュ165へのデータを投機的にドリブルすることにより、スタックキャッシュ155のスピル（spill）及びフィル（fill）を処理する。ドリブル管理部151は、パイプラインストール信号（pipeline stall signal）を発生させ、スタックオーバーフロー条件或いはアンダーフロー条件が検出されるとき、パイプラインをストールする。またドリブル管理部151はデータキャッシュユニット160に送出される要求のスタックを保持する。データキャッシュユニット160に対する１つの要求は32−bit連続ロード或いはストア要求である。
スタックキャッシュ155のハードウエア構成は、長オペランド（長い整数及び倍精度浮動小数点数）の場合を除き、オペコードに対する暗黙のオペランドフェッチにより、オペコードの実行に対する待ち時間が加わらないようにする。スタックキャッシュ155において維持されるオペランドスタック423（第4A図）及びローカル変数記憶装置422におけるエントリの数は、ハードウエア／パフォーマンスのトレードオフを表す。少なくとも数個のオペランドスタック423及びローカル変数記憶装置エントリが良好なパフォーマンスを得るために必要とされる。第１図の典型的な実施例では、少なくともオペランドスタック423及び最初の４つのローカル変数記憶装置422エントリの上位の３エントリがスタックキャッシュ155内に好適に表される。
スタックキャッシュ155により供給される１つの重要な機能（第１図）は、レジスタファイルをエミュレートすることであり、上位２つのレジスタへのアクセスが余分なサイクルを用いずに常に可能である。もし適用な知的機能が、背景においてメモリから値をロードするために、或いはメモリに値をストアするために与えられ、従って入ってくる仮想マシン命令のためにスタックキャッシュ155を準備するなら、小さいハードウエアスタックでも十分である。
上述のように、スタック400上の全アイテムが（サイズに関係なく）、32−bitワード内に置かれる。これは、もし数多くの小さなデータアイテムが用いられるなら、空間を無駄にしてしまうが、比較的簡単に、かつ多くのタギング（tagging）或いはマクシング（muxing）から束縛されずにデータアイテムを保持できる。従ってスタック400内の１つのエントリは、１つの値を表し、多くのバイトを表さない。長整数及び倍精度浮動小数点数は、２つのエントリを必要とする。読出し及び書込みポート数を少なくしておくために、２つの長整数或いは２つの倍精度浮動小数点数を読出すために２サイクルが必要となる。
スタックキャッシュ155から出てメモリに入るオペランドスタックをドリブル管理部151によりフィル及びスピルするための機構は、いくつかの別の形態のうちの１つを呈することができる。ある時点において１つのレジスタが、フィル或いはスピルされるか、或いはいくつかのレジスタのブロックが同時にフィル或いはスピルされることができる。１つのスコアボードされたメソッドは、スタック管理に対して適切である。その最も簡単な形態では、１つのビットが、スタックキャッシュ155内のそのレジスタが現在有効であるか否かを示す。さらにスタックキャッシュ155のいくつかの実施例は、そのレジスタのデータ内容がスタック400に退避されるか否か、すなわちそのレジスタが汚れているか否かを示すために１つのビットを用いる。ある実施例では、高水位マーク／低水位マークが、いつエントリがそれぞれ、スタック400に退避される、或いはスタック400から再生されるかを自発的に判定する（第4A図）。別法では、先頭スタックが、固定された、或いはプログラマブルなエントリ数だけスタックキャッシュ155の底部401に近づくとき、ハードウエアがスタック400からスタックキャッシュ155内へのレジスタのロードを開始する。スタック管理ユニット150及びドリブル管理部ユニット151の詳細な実施例は、以下に、並びに本発明の譲渡人に譲渡され、代理人整理番号SP2038にて同じ日に出願された、"METHOD FRAME STORAGE USING MULTIPLE MEMORY CIRCUITS"というタイトルの米国特許出願第08/xxx,xxx号（発明者James Michael O'Connor and Marc Tremblay）に記載されており、参照して、全体をここに組み込んでいる。
ある実施例では、スタック管理ユニット150は、付加的なローカル変数ルックアサイド（look−aside）キャッシュ153を含む。キャッシュ153は応用時に最も重要であり、あるメソッドに対するローカル変数及びオペランドスタック423（第4A図）がスタックキャッシュ155上に配置されない。キャッシュ153がハードウエアプロセッサ100に含まれないような場合には、ローカル変数がアクセスされるとき、スタックキャッシュ155においてミスがあり、実行ユニット140はデータキャッシュユニット160にアクセスし、次々に実行を遅らせる。対照的に、キャッシュ153を有する場合は、ローカル変数はキャッシュ153から回収され、実行に遅れは生じない。
ローカル変数ルックアサイドキャッシュ153のある実施例は、スタック400のメソッド０〜２の場合に、第4D図に示される。ローカル変数０〜Ｍは、Ｍが整数の場合に、メソッド０に対して、キャッシュ153の面421A_0においてストアされ、面421A_0はメソッド番号402が０のときアクセスされる。ローカル変数０〜Ｎは、Ｎが整数の場合に、メソッド１に対して、キャッシュ153の面421A_1においてストアされ、面421A_1はメソッド番号402が１のときアクセスされる。ローカル変数０〜Ｐは、Ｐが整数の場合に、メソッド１に対して、キャッシュ153の面421A_2においてストアされ、面421A_2はメソッド番号402が２のときアクセスされる。キャッシュ153の種々に面は異なるサイズである場合もあるが、一般にそのキャッシュの各面は経験的に画定される固定サイズを有するということに注意されたい。
新しいメソッド、例えばメソッド２が呼出されるとき、キャッシュ153の新しい面421A_2がそのメソッドのローカル変数と共にロードされ、ある実施例ではカウンタであるメソッド番号レジスタ402が、変更、すなわちインクリメントされ、その新しいメソッドに対するローカル変数を含むキャッシュ153の面を示す。ローカル変数はキャッシュ153の面内にオーダされ、キャッシュ153は有効に直接マップ化（direct−mapped）キャッシュとなることに注意されたい。従って、ローカル変数が現在メソッドに対して必要とされるとき、その変数はキャッシュ153の最も新しい面、すなわちメソッド番号402により識別される面から直接アクセスされる。現在メソッドが、例えばメソッド２に戻るとき、メソッド番号レジスタ402は変更、例えばデクリメントされ、キャッシュ153の以前の面421A_1を示す。キャッシュ153は必要とされる広さ及び深さになることができる。
データキャッシュユニット
データキャッシュユニット160（DCU）は、データキャッシュ165内のデータに対する全ての要求を管理する。データキャッシュ要求は、ドリブル管理部151或いは実行ユニット140から起こる。データキャッシュ制御部161は、実行ユニット要求に先行して与えられるこれらの要求間の調整をする。ある要求に応じて、データキャッシュ制御部161は、そのデータに対するアドレス、データ並びに制御信号を発生し、データキャッシュ165内のRAMにタグ付けする。データキャッシヒットに対して、データキャッシュ制御部161はデータRAM出力をリオーダし、その正確なデータを与える。
またデータキャッシュ制御部161は、データキャッシュミスの場合、並びにキャッシュ不可能なロード及びストアの場合に、I/Oバス及びメモリインタフェースユニット110に対する要求を発生する。データキャッシュ制御部161はデータパス及び制御ロジックを与え、キャッシュ不可能要求、並びにキャッシュミスを処理するためのデータパス及びデータパス制御機能を処理する。
データキャッシュヒットに対して、データキャッシュユニット160は、ロードに対する１サイクル内に、データを実行ユニット140に戻す。またデータキャッシュユニット160は、書込みヒットに対して１サイクルかかる。キャッシュミスの場合に、データキャッシュユニット160は、要求データが外部メモリから利用可能になるまで、パイプラインをストールする。キャッシュ不可能ロード及びストアに対して、データキャッシュ161はバイパスされ、要求はI/Oバス及びメモリインタフェースユニット110に送られる。データキャッシュ165に対する非配列化（non−aligned）ロード及びストアはソフトウエアにおいてトラップされる。
データキャッシュ165は、双方向セット連想型、ライトバック、ライトアロケート（write allocate）、16−byteラインキャッシュである。キャッシュサイズは0,1,2,4,8,16Kbyteサイズに構成可能である。デフォルトサイズは8Kbyteである。各ラインはそのラインに関連するキャッシュタグストアエントリを有する。キャッシュミス時に、16byteのデータが外部メモリからキャッシュ165内に書き込まれる。
各データキャッシュタグは、20−bitアドレスタグフィールド、１つの有功ビット、１つのダーティビットを含む。また各キャッシュタグは、置換えポリシー（replacement policy）のために用いられる最低使用頻度ビット（least recently used bit）に関連する。多重キャッシュサイズをサポートするために、タグフィールドの幅は変更することができる。もしプロセッササービスレジスタ内のキャッシュイネーブルビットがセットされていないなら、ロード及びストアはデータキャッシュ制御部161により、キャッシュ不可能命令のように扱われる。
１つの16−byteライトバックバッファが、置換えられるために必要となるダーティキャッシュラインをライトバックするために与えられる。データキャッシュユニット160は、読出し時に4byteの最大値を与えることができ、データの4byteの最大値は１サイクル内にキャッシュ161に書き込まれることができる。診断読出し及び書込みは、キャッシュ上で行うことができる。
メモリ割当てアクセラレータ
１つの実施例において、データキャッシュユニット165はメモリ割当てアクセラレータ166を含む。一般に、新しいオブジェクトが生成されるとき、そのオブジェクトに対するフィールドは外部メモリからフェッチされ、データキャッシュ165内にストアされ、それからそのフィールドは０にクリアされる。これがメモリ割当てアクセラレータ166により削除される処理にかかる時間である。新しいオブジェクトが生成されるとき、いかなるフィールドも外部メモリから回収されない。むしろ、メモリ割当てアクセラレータ166は単に、データキャッシュ165内に０の列をストアし、データキャッシュ165のその列をダーティとしてマークする。メモリ割当てアクセラレータ166はライトバックキャッシュについて特に有利である。メモリ割当てアクセラレータ166は、新しいオブジェクトが生成される度に、外部メモリにアクセスすることを削除するので、ハードウエアプロセッサ100のパフォーマンスが向上する。
浮動少数点ユニット
浮動小数点ユニット（FPU）143は、マイクロコードシーケンサ、入力／出力レジスタを有する入出力部分、浮動小数点加算器、すなわちALU、並びに浮動小数点乗算／除算ユニットを含む。マイクロコードシーケンサは、マイクロコードフロー及びマイクロコード分岐を制御する。入出力部分は入出力データトランザクションを制御し、入力データロードレジスタ及び出力データ非ロードレジスタを与える。またこれらのレジスタは中間結果記憶領域を与える。
浮動小数点加算器ALUは、浮動小数点加算、浮動小数点減算並びに変換演算を実行するために用いられる組み合わせロジックを含む。浮動小数点乗算／除算ユニットは乗算／除算及び剰余を実行するためのハードウエアを含む。
浮動小数点ユニット143は、32−bitデータパスを有するマイクロコード用エンジンとして構成される。このデータパスは、その結果の計算中、何回も再利用される。倍精度演算は、単精度演算としてのサイクル数のおよそ２倍〜４倍を必要とする。浮動小数点実行可能信号は、所定の浮動小数点演算の完了に先行する１サイクルにアサートされる。これにより整数ユニット142は、全くインタフェースサイクルを無駄にせず、浮動小数点ユニット出力レジスタを読出すことができる。従って、出力データは、浮動小数点実行可能信号がアサートされた後の１サイクルで読出すために利用することができる。
実行ユニットアクセラレータ
付録ＩのJAVA仮想マシン仕様はハードウエアに依存しないので、仮想マシン命令は特定の汎用タイプのプロセッサ、例えば複雑命令セットコンピュータ（CISC）プロセッサ、或いは限定命令セットコンピュータ（RISC）プロセッサに対して最適化されてない。実際に、ある仮想マシン命令はCISC性を有し、他のものはRISC性を有する。この二重性は演算及びハードウエアプロセッサ100の最適化を複雑にする。
例えば、JAVA仮想マシン仕様は、従来のスイッチステートメントである、命令lookupswitchに対するオペコード171を定義する。命令キャッシュユニット120に対するデータストリームは、オペコード171を含み、オペコード171によりＮ方向スイッチステートメントを識別し、3byteの埋込みバイトに０を生じさせる。埋込みバイト数は、第１のオペランドバイトが４の倍数であるアドレスで開始するように選択される。ここで、データストリームは、特定の要素、ブロック、素子或いはユニットに提供される情報を包括的に示すために用いられる。
データストリーム内の埋込みバイトに後続するのは、一連の符号付4byte量の組である。第１組内の第１のオペランドは、スイッチステートメントに対するデフォルトオフセットであり、整数キー、或いは現在照合（match）値として参照される、そのスイッチステートメントの引数が、そのスイッチステートメント内のいかなる照合値とも等しくないとき用いられる。第１組内の第２のオペランドは、データストリーム内に後続する組数を定義する。
データストリーム内の各後続するオペランドの組は、照合値である第１のオペランド及びオフセットである第２のオペランドを有する。もし整数キーが照合値の１つに等しいなら、その組のオフセットはそのスイッチステートメントのアドレスに加えられ、実行が分岐するアドレスを定義する。逆にもしその整数キーがいかなる照合値にも等しくないから、第１組のデフォルトオフセットがそのスイッチステートメントに加えられ、実行が分岐するアドレスを定義する。この仮想マシン命令の直接の実行が多くのサイクルを必要とする。
ハードウエアプロセッサ100のパフォーマンスを向上させるために、ルックアップスイッチアクセラレータ145がプロセッサ100に含まれる。ルックアップスイッチアクセラレータ145は、１つ或いは２つ以上のルックアップスイッチステートメントに関連する情報をストアする回想メモリを含む。各ルックアップスイッチステートメント、すなわち各命令lookupswitchの場合、この情報はルックアップスイッチ識別子値、すなわちルックアップスイッチステートメントに関連するプログラムカウンタ値、複数の照合値並びに対応する複数のジャンプオフセット値を含む。
ルックアップスイッチアクセラレータ145はハードウエアプロセッサ100により受信される現在命令が連想メモリ内にストアされるルックアップスイッチステートメントに対応するか否かを判定する。ルックアップスイッチアクセラレータ145はさらに、その現在命令に関連する現在照合値が、その連想メモリ内にストアされる照合値の１つに一致するか否かを判定する。ルックアップスイッチアクセラレータ145は、その現在命令がメモリ内にストアされるルックアップスイッチステートメントに対応し、かつ現在照合値がメモリ内にストアされる照合値の１つに一致するとき、連想メモリからのジャンプオフセット値にアクセスする。そのアクセスされたジャンプオフセット値は現在照合値に一致する。
ルックアップスイッチアクセラレータ145はさらに、その連想メモリが、現在ルックアップスイッチステートメントに関連する照合値及びジャンプオフセット値をまだ含んでいないとき、現在ルックアップスイッチステートメントに関連する照合値及びジャンプオフセット値を回収するための回路を含む。ルックアップスイッチアクセラレータ145は、本発明の譲渡人に譲渡され、代理人整理番号SP2040にて同じ日に出願された、"LOOK−UP SWITCH ACCELERATOR AND METHOD OF OPERATING SAME"というタイトルの米国特許出願第08/xxx,xxx号（発明者Marc Tremblay and James Michael O'Connor）にさらに詳細に記載されており、参照して、全体をここに組み込んでいる。
あるオブジェクトのメソッドの実行を開始するための処理において、実行ユニット140は、メソッドベクトルにアクセスし、メソッドベクトル内のメソッドポインタの１つ、すなわち無方向（indirection）の１つのレベルを回収する。その後実行ユニット140は、アクセスされるメソッドポインタを用いて、対応するメソッド、すなわち無方向の第２のレベルにアクセスする。
実行ユニット140内の無方向のレベルを減少させるために、各オブジェクトは、そのオブジェクトによりアクセスされるべき各メソッドの専用の複製を与える。その後実行ユニット140は、無方向の１つのレベルを用いてそのメソッドにアクセスする。すなわち、各メソッドはそのオブジェクトから導出されるポインタにより、直接アクセスされる。これはそのメソッドポインタにより予め導入されていた無方向のレベルを削除する。無方向のレベルを減少させることにより、実行ユニット140の演算を加速することができる。実行ユニット140により経験された無方向のレベルを減少させることによる実行ユニット140の加速は、本発明の譲渡人に譲渡され、代理人整理番号SP2043にて同じ日に出願された、"REPLICATING CODE TO ELIMINATE A LEVEL OF INDIRECTION DURING EXECUTION OF AN OBJECT ORIENTED COMPUTER PROGRAM"というタイトルの米国特許出願第08/xxx,xxx号（発明者Marc Tremblay and James Michael O'Connor）にさらに詳細に記載されており、参照して、全体をここに組み込んでいる。
ゲットフィールド−プットフィールドアクセラレータ
他の特定の機能ユニット及び種々の翻訳ルックアサイドバッファ（TLB）タイプの構造は、ハードウエアプロセッサ100に任意に含まれ、コンスタントプールへのアクセスを加速する。例えば、JAVA仮想マシン仕様は、実行時にオブジェクト内にフィールドをセットする、命令putfield、オペコード181、並びに実行時にオブジェクトからフィールドをフェッチする、命令getfield、オペコード180を定義する。これら両方の命令では、そのオペコードには、インデクスバイト１及びインデクスバイト２が後続する。オペランドスタック423は、命令getfieldの場合のオブジェクトに対する参照のみを除いて、命令putfieldに対する値により後続されるオブジェクトに対する参照を含む。
インデクスバイト１及び２は、現在クラスのコンスタントプール内にインデクスを発生させるために用いられる。そのインデクスでのコンスタントプールにおける項目は、クラス名及びフィールド名に対するフィールド参照である。その項目は、バイト状態でのフィールド幅及びバイト状態でのフィールドオフセットの両方を有するフィールドブロックポインタに分解される。
実行ユニット140内の任意のゲットフィールド−プットフィールドアクセラレータ146は、タグとしてフィールドブロックポインタに分解されたコンスタントプール内の項目を識別するために用いられるインデクスと共に、命令の最初の呼出し後に用いるために、キャッシュ内に命令getfield及び命令putfieldに対するフィールドブロックポインタをストアする。引き続いて、実行ユニット140はインデクスバイト１及び２を用いて、インデクスを発生させ、ゲットフィールド−プットフィールドアクセラレータ146にインデクスを供給する。もしそのインデクスがタグとしてストアされたインデクスの１つに一致する、すなわちヒットであるなら、そのタグに関連するフィールドブロックポインタは回収され、実行ユニット140により用いられる。逆にもし一致が見出されなければ、実行ユニット140は、上述の演算を実行する。ゲットフィールド−プットフィールドアクセラレータ146は、上述の迅速な命令翻訳の１つの実施例において用いられた自己修飾コード（self−modifying code）を用いることなくインプリメントされる。
１つの実施例では、ゲットフィールド−プットフィールドアクセラレータ146はタグとして機能するインデクスを保持する第１の部分、及びフィールドブロックポインタを保持する第２の部分を有する連想メモリを含む。あるインデクスが、入力部分を通して、その連想メモリの第１の部分に加えられる、かつストアされたインデクスの１つに一致するとき、入力インデクスに一致したストアされたインデクスに関連するフィールドブロックポインタは、その連想メモリの第２の部分から出力される。
境界チェックユニット
実行ユニット140内のバウンドチェックユニット147（第１図）は、任意のハードウエア回路であり、配列（array）の要素への各アクセスをチェックし、そのアクセスがその配列内の位置に対するものであるか否かを判定する。そのアクセスがその配列内の位置に対するものであるとき、境界チェックユニット147は、実行ユニット140に対して、アクティブ配列境界例外信号を発行する。アクティブ配列境界例外信号に応じて、実行ユニット140は、マイクロコードROM141内にストアされた、その境界外配列アクセス（out of bounds array access）を処理する例外ハンドラの実行を開始する。
１つの実施例では、境界チェックユニット147は、配列に対する配列識別子、例えばプログラムカウンタ値、並びにその配列に対する最大値及び最小値をストアされた連想メモリ素子を含む。ある配列がアクセスされる、すなわちその配列に対する配列識別子が連想メモリ素子に適用されるとき、さらにその配列がその連想メモリ素子において表されると仮定するとき、ストアされた最小値は、比較素子とも呼ばれる、第１の比較器素子に対する第１の入力信号であり、ストアされた最大値は、比較素子とも呼ばれる、第２の比較器素子に対する第１の入力信号である。その第１及び第２の比較器素子に対する第２の入力信号は、配列の素子のアクセスに関連する値である。
もし配列の素子のアクセスに関連する値が、ストアされた最大値以下で、かつストアされた最小値以上であるなら、いずれの比較器素子も出力信号を発生しない。しかしながら、もしこれらの条件のいずれかが正しくないなら、適切な比較器素子がアクティブ配列境界例外信号を発生する。境界チェックユニット147の１つの実施例のさらに詳細な内容は、本発明の譲渡人に譲渡され、代理人整理番号SP2041にて同じ日に出願された、"PROCESSOR WITH ACCELERATED ARRAY ACCESS BOUNDS CHECKING"というタイトルの米国特許出願第08/xxx,xxx号（発明者Marc Tremblay,James Michael O'Connor,and William N.Joy）にさらに詳細に記載されており、参照して、全体をここに組み込んでいる。
JAVA仮想マシン仕様は、一定の命令は一定の例外を引き起こすことを定義している。この例外条件に対するチェックはインプリメントされ、それらを処理するためのハードウエア／ソフトウエア機構が、マイクロコードROM149、並びにプログラムカウンタ及びトラップ制御ロジック170内の情報により、ハードウエアプロセッサ100に与えられる。代替の機構は、トラップベクトルスタイル或いは単一のトラップターゲットを有し、スタック上のトラップタイプをプッシュし、専用のトラップハンドラルーチンが適切な動作を画定するような機構を含む。
ハードウエアプロセッサ100には、いかなる外部キャッシュも必要ではない。いかなる。翻訳ルックアサイドバッファのサポートも必要ではない。
第５図は固有のシステムを形成するためのハードウエアプロセッサ100に対するいくつかの可能なアドオンを示す。そこに示す任意の８つの機能をサポートする回路、すなわちNTSCエンコーダ501、MPEG502、イーサネット制御部503、VIS504、ISDN505、I/O制御部506、ATMアセンブリ／リアセンブリ507、並びに無線リンク508は、本発明のハードウエアプロセッサ100と同じチップ内に集積化される。
第６図は、スタック管理ユニット150の１つ実施例のブロック図である。スタック管理ユニット150はスタック400とハードウエアプロセッサ100との間で高速バッファとして機能する。ハードウエアプロセッサ100は、スタック管理ユニット150がスタック400であるかのように、スタック管理ユニット150にアクセスする。スタック管理ユニット150は、スタック400とハードウエアプロセッサ100との間のデータのスループットを改善する必要性に応じて、スタック管理ユニット150とスタック400との間でデータを転送する。第１図の実施例において、もしハードウエアプロセッサ100がスタック管理ユニット150においてキャッシュされないデータワードを必要とするなら、データキャッシュユニット160は、要求されたデータワードを回収し、その要求されたデータワードをスタックキャッシュ155の最上位に配置する。
スタック管理ユニット150はスタックキャッシュメモリ回路610を含む。スタックキャッシュメモリ回路610は、一般にレジスタファイル或いはSRAMのような高速メモリ素子である。しかしながら、DRAMのような低速のメモリ素子を用いてもよい。第６図の実施例では、スタックキャッシュメモリ回路610へのアクセスは、スタック制御ユニット152により制御される。書込みポート630により、ハードウエアプロセッサ100は、スタックキャッシュメモリ回路610に対して、データライン635上のデータを書き込むことができる。読出しポート640及び読出しポート650により、ハードウエアプロセッサ100は、データライン645及び655上にそれぞれ、スタックキャッシュメモリ回路610からデータを読み出すことができる。２つの読出しポートは、スタック利用コンピューティングシステムの多くの演算が、スタック400からの２つのオペランドを必要とするので、、スループットを向上させるために与えられる。スタックキャッシュ155の他の実施例は、読出し及び書込みポートを増減させることもできる。
上述のように、ドリブル管理ユニット151はスタック400（第４図（ａ））とスタックキャッシュメモリ回路610との間のデータの転送を制御する。第１図に示す実施例では、スタック400及びスタックキャッシュメモリ回路610間のデータの転送は、データキャッシュユニット160を介して実行される。ドリブル管理ユニット151は、フィル制御ユニット694及びスピル制御ユニット698を含む。ドリブル管理ユニット151のいくつかの実施例では、フィル制御ユニット694及びスピル制御ユニット698は独立に機能する。フィル制御ユニット694はフィル条件が存在するか否かを判定する。もしフィル条件が存在するなら、フィル制御ユニット694は、書込みポート670を介してデータライン675上で、スタック400からスタックキャッシュメモリ回路610までデータワードを転送する。スピル制御ユニット698はスピル条件が存在するか否かを判定する。もしスピル条件が存在するなら、スピル制御ユニット698は、データライン685上で読出しポート680を介して、スタックキャッシュメモリ回路610からスタック400までデータワードを転送する。書込みポート670及び読出しポート680により、スタック400及びスタックキャッシュメモリ回路610間のデータ転送は、スタック制御ユニット152により制御される読出し及び書込みを同時に発生することができる。もしスタックキャッシュメモリ回路610の読出し及び書込みポート間の競合が重要でないなら、ドリブル管理ユニット151は、スタック制御ユニット152と、読出し及び書込みポートを共有することができる。
スタック管理ユニット150はハードウエアプロセッサ100に対してスタック400をバッファリングする状況において記載されるが、スタック管理ユニット150は任意のスタック利用コンピューティングシステムに対するキャッシングを実行することができる。ハードウエアプロセッサ100の詳細は、本発明で用いるための１つの可能なスタック利用コンピューティングシステムの例としてのみ提供される。従って、当業者は任意のスタック利用コンピューティングシステムに対する本発明に従って、ここに記載された原理を用いて、スタック管理ユニットを設計することができる。
第７図はスタックキャッシュ155の１つの実施例に対するスタックキャッシュメモリ回路610のメモリアーキテクチャの概念的なモデルを示す。特に、第７図の実施例では、スタックキャッシュメモリ回路610は、64データワードをホールディングすることができる循環バッファメモリアーキテクチャにおいて構成されるレジスタファイルである。他の実施例は、異なる数のデータワードを含む。循環メモリアーキテクチャにより、スタックキャッシュメモリ回路610の許容量を超えるデータワードは、以前に用いたレジスタに書き込まれることができる。もしスタックキャッシュメモリ回路610が、SRAMのような異なるメモリ素子を用いるなら、異なるレジスタが異なるメモリ位置に対応するであろう。循環バッファにおいてレジスタをアドレス指定するための１つの方法は、スタックキャッシュメモリ回路610の種々のレジスタに対するモジュロスタックキャッシュサイズ（modulo−SCS）アドレスを含むポインタを用いることである。ここで用いるように、modulo−Ｎ演算は、標準MOD  Ｎ関数を用いて０〜SCS−１の間の数にマッピングされる標準的な演算の結果を有する。いくつかの共通なモジュロ演算は以下のように定義される。
Modulo−Ｎ  addition  of  Ｘ  and  Ｙ
＝（Ｘ＋Ｙ）MOD  Ｎ
Modulo−Ｎ  subtrsction  of  Ｘ  and  Ｙ
＝（Ｘ−Ｙ）MOD  Ｎ
Modulo−Ｎ  increment  of  Ｘ  by  Ｙ
＝（Ｘ＋Ｙ）MOD  Ｎ
Modulo−Ｎ  decrement  of  Ｘ  by  Ｙ
＝（Ｘ−Ｙ）MOD  Ｎ
スタックキャッシュメモリ回路610のレジスタのポインタアドレスの１つの実施例は第７図に示され、スタックキャッシュメモリ回路610外側端部に沿って番号０−63を付している。従って第７図の実施例に対して、もし70データワード（番号１−70）が、スタックキャッシュメモリ回路610が空のとき、スタックキャッシュメモリ回路610に書き込まれるなら、データワード１−64はそれぞれレジスタ０−63に書き込まれ、データワード65−70は引き続きレジスタ０−５に書き込まれる。データワード65−70を書き込むのに先立ち、ドリブル管理ユニット151は、以下に示すように、レジスタ０−５内にあるデータワード１−６をスタック400に転送する。同様に、データワード70−65がスタックキャッシュメモリ回路610から読み出されるとき、データワード１−６はスタック400から回収され、メモリ位置０−５に配置されることができる。
スタック上で最も読出し及び書込みが実行されるのが、スタックの最上位であるので、ポインタOPTOPはスタック400の最上位の位置、すなわち最上位メモリ位置を含む。スタック管理ユニット150のいくつかの実施例では、ポインタOPTOPは実行ユニット140内のプログラマブルカウンタである。しかしながら、スタック管理ユニット150の他の実施例は、スタック制御ユニット152内にポインタOPTOPを含む。ポインタOPTOPは、１だけ増加、１だけ減少、すなわち特定の量だけ変化することが多いので、ポインタOPTOPは、１つの実施例では、プログラマブルアップ／ダウンカウンタである。
スタック管理ユニット150は、スタック400の最上位部分を含むので、ポインタOPTOPはスタックキャッシュメモリ回路610における最も新しく書き込まれたデータワードを含むスタックキャッシュメモリ回路610のレジスタを示す、すなわちポインタOPTOPはトップレジスタとも呼ばれる最も新しく書き込まれたデータワードを含むレジスタを示す。またスタック管理ユニット150のいくつかの実施例は、ポインタOPTOPにより示されるレジスタに先行するレジスタを示すポインタOPTOP1（図示せず）を含む。ポインタOPTOP1は、ハードウエアプロセッサ100における多くの演算がスタック管理ユニット150からの２つのデーらワードを必要とするため、スタック管理ユニット150のパフォーマンスを改善する。
ポインタOPTOP及びポインタOPTOP1は、新しいデータワードがスタックキャッシュ155に書き込まれたときは必ずインクリメントされる。ポインタOPTOP及びポインタOPTOP1は、スタックされたデータワード、すなわち既にスタック400内にあるデータワードがスタックキャッシュ155からポップされたときは必ずデクリメントされる。ハードウエアプロセッサ100のいくつかの実施例は、多数のデータワードを同時に加えり、除いたりすることもあるので、ポインタOPTOP及びOPTOP1は、プログラマブルレジスタとして１つの実施例において、多数のインクリメント及びデクリメントサイクルを必要とするよりは、新しい値がレジスタ内に書き込まれるように、インプリメントされる。もしスタックキャッシュ155が、順次アドレス指定を用いて構成されるなら、ポインタOPTOP1は、ポインタOPTOPから１だけmodulo−SCS減算するmodulo  SCS減算器を用いてインプリメントされる。またスタックキャッシュ155のいくつかに実施例は、ポインタOPTOP2及びポインタOPTOP3を含むこともある。
データワードはスタックキャッシュメモリ回路610内に循環的にストアされるので、スタックキャッシュメモリ回路610の最下位部は変動することができる。従ってスタックキャッシュメモリ回路610の最も多くの実施例は、ポインタCACHE_BOTTOMを含み、スタックキャッシュメモリ回路610の最下位のメモリ位置を示す。ポインタCACHE_BOTTOMは一般にドリブル管理ユニット151により保持される。ポインタCACHE_BOTTOMをインクリメント或いはデクリメントする過程は、スタック管理ユニット150の特定の実施例に応じて変化する。ポインタCACHE_BOTTOMは一般に、プログラマブルアップ／ダウンカウンタとしてインプリメントされる。
またスタック管理ユニット150いくつかの実施例は、ポインタVARSのような、頻繁にアクセスされるデータワードのメモリ位置を示す、他のポインタを含む。例えば、ハードウエアプロセッサ100がJAVA仮想マシンをインプリメントしているなら、全メソッドフレームがスタック管理ユニット150内に配置される。そのメソッドフレームはしばしば頻繁にアクセスされるローカル変数を含む。従って、アクティブなメソッドの第１のローカル変数を示すポインタVARSを有することは、ローカル変数を読出すために必要とされるアクセス時間を短縮する。ポインタVARS1（図示せず）及びポインタVARS2（図示せず）のような他のポインタが、JAVA仮想マシンにおけるアクティブな次の２つのローカル変数のような他の頻繁に用いられるメモリ位置を示すこともできる。
スタック管理ユニット150のいくつかの実施例では、これらのポインタはスタック制御ユニット152内に保持される。ハードウエアプロセッサ100を用いるために適用される実施例では、ポインタVARSは実行ユニット140内のプログラマブルレジスタ内にストアされる。もしスタックキャッシュ155が順次アドレス指定を用いて構成されるなら、ポインタVARSは、ポインタVARSに対して１だけmodulo−SCS加算するmodulo  SCS加算器を用いてインプリメントされることもできる。
スタックキャッシュメモリ回路610とスタック400との間をどのデータワードが転送されるかを画定するために、スタック管理ユニット150が、有効なデータワード及びスタックキャッシュメモリ回路610及びスタック400の両方においてストアされるデータワードを、一般的にタグ付け、すなわち追跡する。第８図は、スタック管理ユニット150のいくつかの実施例において用いられる１つのタグ付け構成を示す。特に第８図はスタックキャッシュメモリ回路610からのレジスタ810を示す。実際のデータワードはデータセクション812にストアされる。有効ビット814及び保管ビット816は、レジスタ810のステータスを追跡するために用いられる。もし有効ビット814が有効論理ステータス、すなわち典型的に論理ハイにあるなら、データセクション812は有効データワードを含まない。もし保管ビット816が保管論理ステータス、すなわち典型的に論理ハイにあるなら、データセクション812に含まれるそのデータワードは、スタック400にもストアされる。しかしながら、保管ビット816が非保管論理ステータス、すなわち典型的に論理ローにあるなら、データセクション812に含まれるデータワードはスタック400にストアされない。一般に、スタック管理ユニット150がパワーアップ、すなわちリセットされるなら、各レジスタの有効ビット814は、無効論理ステータスにセットされ、各レジスタの保管ビット816は非保管論理ステータスにセットされる。
第８図のタグ付け方法を用いて第６図に示される実施例に対して、スタック制御ユニット152が書込みポート630を介してスタックキャッシュメモリ回路610のレジスタにデータワードを書き込むとき、そのレジスタの有効ビットは有効論理ステータスにセットされ、そのレジスタの保管ビットは非保管論理ステータスにセットされる。ドリブル管理ユニット151が書込みポート670を介してスタックキャッシュメモリ回路610のレジスタにデータワードを転送するとき、そのレジスタの有効ビットは有効論理ステータスにセットされ、そのレジスタの保管ビットは、そのデータワードが現在スタック400に保管されているので、保管論理ステータスにセットされる。
ハードウエアプロセッサ100が、読出しポート640或いは読出しポート650のいずれかを介してスタックキャッシュメモリ回路610のレジスタからスタックポップ操作を用いて、スタックされたデータワードを読み出すとき、そのレジスタの有効ビットは無効論理ステータスにセットされ、そのロケーションの保管ビットは非保管論理ステータスにセットされる。一般にスタックポンプ操作はポインタOPTOP或いはポインタOPTOP1により示されるレジスタを使用する。
ハードウエアプロセッサ100が、読出しポート640或いは読出しポート650のいずれかを介してスタックキャッシュメモリ回路610のレジスタから非スタックポップ操作を用いて、スタックされたデータワードを読み出すとき、そのレジスタの有効ビット及び保管ビットは変更されない。例えば、もしハードウエアプロセッサ100がJAVA仮想マシンをインプリメントしているなら、ポインタVARSにより示されるレジスタにおけるスタックキャッシュメモリ回路610内にストアされるローカル変数は繰り返し用いられることがあり、スタックキャッシュ155から除かれるべきではない。ドリブル管理ユニット151が、読出しポート680を介してスタックキャッシュメモリ回路610からスタック400にデータワードを複写するなら、保管データワードがまだそのレジスタ内に含まれ、そのレジスタの保管ビットが保管論理ステータスにセットされているので、そのレジスタの有効ビットは、有効論理ステータスのままである。
スタックキャッシュ155は一般にハードウエアプロセッサ100のメモリアドレス空間より非常に小さいので、スタックキャッシュメモリ回路610にアクセスするために用いられるポインタは一般のメモリアドレスより非常に小さい。スタックキャッシュ155をハードウエアプロセッサ100のメモリ空間内にマップ化するために用いられる特定の技術は変更することができる。ハードウエアプロセッサ100の１つの実施例では、スタックキャッシュメモリ回路610にアクセスするために用いられるポインタは、一般のメモリポインタの下位ビット、すなわち最下位ビットのみである。例えば、もしスタックキャッシュメモリ回路610が64レジスタからなるなら、ポインタOPTOP、VARS並びにCACHE_BOTTOMは６ビット長しか必要としない。もしハードウエアプロセッサ100が12ビットアドレス空間を有するなら、ポインタOPTOP、VARS並びにCACHE_BOTTOMは、下位６ビットであることができる。従ってスタックキャッシュメモリ回路610は固有の上位６ビットの組合わせを有するアドレス空間の特定のセグメントにマップ化される。
スタックキャッシュ管理ユニットのいくつかの実施例は、純然たるスタック利用コンピューティングシステムを用いて、そのシステムに対するメモリアドレス空間がないことがある。そのような状況では、スタックキャッシュ155にアクセスするためのポインタはスタックキャッシュ管理ユニット155の内部にのみある。
上述のように、ハードウエアプロセッサ100は本来、スタックの最上位付近のデータにアクセスする。従って、スタック管理ユニット150は、スタックの最上位しかキャッシングしないハードウエアプロセッサ100のデータアクセスを改善することができる。ハードウエアプロセッサ100が、スタックキャッシュメモリ回路610がストアできるデータワードより多いデータワードをスタック管理ユニットにプッシュするとき、スタックキャッシュメモリ回路610の最下位部付近のデータワードはスタック400に転送される。ハードウエアプロセッサ100がスタックキャッシュ155からデータワードをポップするとき、スタック400からデータワードはスタックキャッシュメモリ回路610の最下位部下に複写され、ポインタCACHE_BOTTOMがデクリメントされ、スタックキャッシュメモリ回路610の新しい最下部を指示する。
スタック400とスタックキャッシュメモリ回路610との間のデータワードの転送するタイミング、並びに転送するデータワード数の画定は変更することができる。一般に、ドリブル管理ユニット151は、ハードウエアプロセッサがスタックキャッシュメモリ回路610を満杯にするとき、スタックキャッシュメモリ回路610からスタック400にデータを転送する、すなわちスピル操作するべきである。逆に、ドリブル管理ユニット151は、ハードウエアプロセッサがスタックキャッシュメモリ回路610を空にするとき、スタック400からスタックキャッシュメモリ回路610にデータを複写する、すなわちフィル操作するべきである。
第９図はドリブル管理ユニット151の１つの実施例を示し、データをスタックキャッシュメモリ回路610からスタック400に転送する際の、すなわちデータをスピルする際の判断がスタックキャッシュメモリ回路610内の空きレジスタの数に基づくことを示す。空きレジスタは、有効データを含まないレジスタ及びスタック400に既にストアされたデータを含むレジスタ、すなわち保管論理ステータスにセットされた保管ビット816を有するレジスタを含む。データをスタック400からスタックキャッシュメモリ回路610に転送する際の、すなわちデータをフィルする際の判断は、使用されているレジスタの数に基づく。使用済レジスタは、スタックキャッシュメモリ回路610内の有効であるが、非保管データワードを含む。
特に第９図の実施例では、ドリブル管理ユニット151はさらに、スタックキャッシュステータス回路910及びプログラマブルアップ／ダウンカウンタであることができる、キャッシュボトムレジスタ920を含む。スタックキャッシュステータス回路910は、キャッシュボトムレジスタ920及びポインタOPTOPからポインタCACHE_BOTTOMを受信し、空きレジスタFREEの数及び使用済レジスタUSEDの数を判定する。
順次modulo−SCSアドレス指定を用いる循環バッファの場合、第７図のように、空きレジスタFREEの数は以下のように定義される。
FREE＝SCS−（OPTOP−CACHE_BOTTOM＋１）MOD  SCS
ただしSCSはスタックキャッシュ155のサイズである。従って、第７図に示す特定のポインタ値の場合、以下のように計算して、空きレジスタFREEの数は34である。
FREE＝64−（（27−62＋１）MOD64）＝34
同様に、順次moduloアドレス指定を用いる循環バッファの場合、使用済レジスタUSEDの数は以下のようになる。
USED＝（OPTOP−CACHE_BOTTOM＋１）MOD  SCS
従って、第７図に示す特定のポインタ値の場合、以下のように計算して、使用済レジスタUSEDの数は30である。
USED＝（27−62＋１）MOD64
従って、スタックキャッシュステータス回路910は、modulo  SCS加算器／減算器を用いてインプリメントされることができる。使用済レジスタUSEDの数及び空きレジスタFREEの数は、プログラマブルアップ／ダウンカウンタを用いて生成することもできる。例えば、使用済レジスタは、データワードがスタックキャッシュ155に加えられるとき必ずインクリメントされることができ、データワードがスタックキャッシュ155から除かれるとき必ずデクリメントされることができる。特に、もしポインタOPTOPがある数量だけmodulo−SCSインクリメントされるなら、使用済レジスタは同じ数量だけインクリメントされる。もしポインタOPTOPがある数量だけmodulo−SCSデクリメントされるなら、使用済レジスタは同じ数量だけデクリメントされる。しかしながら、もしポインタCACHE_BOTTOMがある数量だけmodulo−SCSインクリメントされるなら、使用済レジスタは同じ数量だけデクリメントされる。もしポインタCACHE_BOTTOMがある数量だけmodulo−SCSデクリメントされるなら、使用済レジスタは同じ数量だけインクリメントされる。空きレジスタFREEの数は、全レジスタ数から使用済レジスタUSEDの数を引くことにより生成されることができる。
スピル制御ユニット694（第６及び９図）はキャッシュ高閾値レジスタ930及び比較器940を含む。比較器940はキャッシュ高閾値レジスタ内の値を空きレジスタFREEの数と比較する。もし空きレジスタFREEの数がキャッシュ高閾値レジスタ930の値よりも小さいなら、比較器940は、スピル論理レベルに対するスピル信号SPILL、すなわち一般に論理ハイを駆動し、スピル条件が存在し、１つ或いはそれ以上のデータワードがスタックキャッシュメモリ回路610からスタック400に転送されるべき、すなわちスピル操作が実行されるべきであることを示す。スピル操作は以下に詳細に記述される。一般にスタック高閾値レジスタ930はハードウエアプロセッサ100によりプログラム可能である。
フィル制御ユニット（第６及び９図）は、キャッシュ低閾値レジスタ950及び比較器960を含む。比較器960は、キャッシュ低閾値レジスタ950の値を使用済レジスタUSEDの数と比較する。もし使用済レジスタの数が、キャッシュ低閾値レジスタ950の値より小さいなら、比較器960はフィル論理レベルに対するフィル信号FILL、すなわち一般に論理ハイを駆動し、フィル条件が存在し、１つ或いはそれ以上のデータワードがスタック400からスタックキャッシュメモリ回路610に転送されるべき、すなわちフィル操作が実行されるべきであることを示す。フィル操作は以下に詳細に記載される。一般に、キャッシュ低閾値レジスタ950はハードウエアプロセッサ100によりプログラム可能である。
もしキャッシュ高閾値レジスタ930及びキャッシュ低閾値レジスタ950の値が、常に同じであるなら、単一のキャッシュ閾値レジスタを用いることができる。フィル制御ユニット698は空きレジスタFREEの数を用いるために変更され、もし空きレジスタの数がキャッシュ低閾値レジスタ950の値より大きいなら、キャッシュ低閾値レジスタ950の値を適当に変更して、フィル論理レベルに信号フィルを駆動する。代わって、スピル制御ユニット694は使用済レジスタの数を用いるために変更されることができる。
第10A図は、ドリブル管理ユニット151の別の実施例を示し、ドリブル管理ユニット151は高水位マーク／低水位マークを用いて、ヒューリスティックにスピル条件及びフィル条件が存在するタイミングを画定する。スピル制御ユニット694は、プログラマブルアップ／ダウンカウンタとしてインプリメントされる高水位マークレジスタ1010を含む。スピル制御ユニット694における比較器1020は、高水位マークレジスタ1010内の値、すなわち高水位マークとポインタOPTOPとを比較する。もしポインタOPTOPが高水位マークより大きいなら、比較器1020はスピル論理レベルにスピル信号SPILLを駆動し、スピル操作が実行されるべきであることを示す。高水位マークはポインタCACHE_BOTTOMに対応するので、高水位マークは、ポインタCACHE_BOTTOMがmodulo−SCSインクリメント及びmodulo−SCSデクリメントされるときは必ず、それぞれmodulo−SCSインクリメント及びmodulo−SCSデクリメントされる。
フィル制御ユニット698は、プログラマブルアップ／ダウンカウンタとしてインプリメントされる低水位マークレジスタ1010を含む。フィル制御ユニット内の比較器1030は、低水位マークレジスタ1030内の値、すなわち低水位マークとポインタOPTOPとを比較する。もしポインタOPTOPが低水位マークより小さいなら、比較器1040はフィル論理レベルにフィル信号FILLを駆動し、フィル操作が実行されるべきであることを示す。低水位マークはポインタCACHE_BOTTOMに対応するので、低水位マークは、ポインタCACHE_BOTTOMがmodulo−SCSインクリメント及びmodulo−SCSデクリメントされるときは必ず、それぞれmodulo−SCSインクリメント及びmodulo−SCSデクリメントされる。
第10B図は、高水位マーク及び低水位マークを発生するための別の回路を示す。キャッシュ高閾値レジスタ930は、一般にプログラマブルカウンタとしてインプリメントされ、スタックキャッシュメモリ回路610において保持されるべき、空きレジスタの数を含む。そのとき高水位マークは、modulo−SCS減算器1050を用いて、キャッシュボトムレジスタ920にストアされるポインタCACHE_BOTTOMから、キャッシュ高閾値レジスタ930内の値をmodulo−SCS減算するにより計算される。
低水位マークはmodulo−SCS加算を実行することにより計算される。特にキャッシュ低閾値レジスタ950は、スタックキャッシュメモリ回路610に保持されることが望まれる使用されたデータレジスタの最小数を含むようにプログラムされる。低水位マークはそのとき、modulo−SCS加算器1060を用いて、キャッシュボトムレジスタ920にストアされるポインタCACHE_BOTTOMを、キャッシュ低閾値レジスタ950内の値にmodulo−SCS加算することにより計算される。
上述のように、スピル操作は、スタックキャッシュメモリ回路610からキャッシュ400への１つ或いはそれ以上のデータワードの転送である。第１図の実施例では、その転送はデータキャッシュユニット160を介して生じる。スタック管理ユニット150及びデータキャッシュユニット160間の特定のインタフェースは、変更することができる。一般に、スタック管理ユニット150、並びにより詳細には、ドリブル管理ユニット151は、スタックキャッシュ155の最下位部に位置するデータワードを送出し、それが読出しポート680からデータキャッシュユニット160へのポインタCACHE_BOTTOMにより示される。またポインタCACHE_BOTTOMの値は、データキャッシュユニット160に与えられ、データキャッシュユニット160はデータワードを適切にアドレス指定する。ポインタCACHE_BOTTOMにより示されるレジスタの保管ビットは保管論理レベルにセットされる。さらにポインタCACHE_BOTTOMは１だけmodulo−SCSインクリメントされる。また他のレジスタは、上述のように、１だけmodulo−SCSインクリメントされることもある。例えば高水位マークレジスタ1010（第10A図）及び低水位マーク1030は、１だけmodulo−SCSインクリメントされるであろう。ドリブル管理ユニット151のいくつかの実施例は、各スピル操作に対して多数ワードを転送する。これらの実施例の場合、ポインタCACHE_BOTTOMはスタック400に転送されるワード数毎にmodulo−SCSインクリメントされる。
保管ビット及び有効ビットを用いる実施例では、第８図に示すように、いくつかの最適化が可能である。特に、もしポインタCACHE_BOTTOMにより示されるデータレジスタの保管ビットは、保管論理レベルにあるなら、そのデータレジスタ内のデータワードは既にスタック400にストアされている。従って、そのデータレジスタ内のデータワードは、スタック400に複写される必要はない。しかしながら、ポインタCACHE_BOTTOMはさらに１だけmodulo−SCSインクリメントされる。
フィル操作はスタック400からスタックキャッシュメモリ回路610にデータワードを転送する。第１図の実施例では、その転送はデータキャッシュユニット160を介して生じる。スタック管理ユニット150及びデータキャッシュユニット160間の特定のインタフェースは、変更することができる。一般に、スタック管理ユニット150、並びにより詳細には、ドリブル管理ユニット151は、CACHE_BOTTOMにより指示されるデータレジスタに先行するデータレジスタが空いている、すなわち保管ビットが保管論理状態にあるか、或いは有効ビットが無効論理状態にあるかのいずれかであるか否かを判定する。もしポインタCACHE_BOTTOMにより指示されるデータレジスタに先行するデータレジスタが空いているなら、ドリブル管理ユニット151は、ポインタCACHE_BOTTOMから１だけmodulo−SCS減算した値を有する要求を送出することにより、スタック400からデータワードを要求する。そのデータワードがデータキャッシュユニット160から受信されるなら、ポインタCACHE_BOTTOMは１だけmodulo−SCSデクリメントされ、受信したデータワードは書込みポート670を介して、ポインタCACHE_BOTTOMにより指示されるデータレジスタに書き込まれる。他のレジスタは、上述のように、modulo−SCSデクリメントされる。ポインタCACHE_BOTTOMにより指示されるレジスタの保管ビット及び有効ビットはそれぞれ、保管論理状態及び有効論理状態にセットされる。ドリブル管理ユニット151のいくつかの実施例は、各スピル操作に対して多数のワードを転送する。これらの実施例では、ポインタCACHE_BOTTOMは、スタック400に転送されるワード数だけmodulo−SCSデクリメントされる。
保管ビット及び有効ビットを用いる実施例では、第８図に示すように、いくつかの最適化が可能である。特に、もしポインタCACHE_BOTTOMにより指示されるデータレジスタに先行するデータレジスタの保管ビット及び有効ビットが、それぞれ保管論理レベル及び有効論理レベルにあるとき、そのレジスタ内のデータワードは決して上書きされない。従って、そのデータレジスタ内のデータワードは、スタック400から複写される必要はない。しかしながら、ポインタCACHE_BOTTOMはさらに１だけmodulo−SCSデクリメントされる。
上述のように、スタックキャッシュ155の１つの実施例では、ハードウエアプロセッサ100は書込みポート630、読出しポート649並びに読出しポート650を介してスタックキャッシュメモリ回路610（第６図）にアクセスする。スタック制御ユニット152はハードウエアプロセッサ100の要求に基づいて、書込みポート630、読出しポート649並びに読出しポート650に対するポインタを発生する。第11図は、スタックキャッシュ155から２つのデータワードを読み出し、かつスタックキャッシュ155に１つのデータワードを書き込む典型的な操作に対するポインタを発生する回路を示す。スタック利用コンピューティングシステムに対する最も共通なスタック操作は、スタックから２つのデータワードをポップすること、並びにスタックの先頭に１つのデータワードをプッシュすることである。従って、第11図の回路は、ポインタOPTOPの値及びポインタOPTOPから１だけmodulo−SCS減算した値に対する読出しポインタ、並びにポインタOPTOPから１だけmodulo−SCS減算した現在値に対する書込みポインタを与えることができるように構成される。マルチプレクサ（NUX）は読出しポートに対する読出しポインタRP1を駆動する。ハードウエアプロセッサ100により制御される選択ラインRS1は、マルチプレクサ1110がポインタOPTOPと同じ値、すなわちハードウエアプロセッサ100により与えられるような読出しアドレスR_ADDR1を駆動するか否かを判定する。
マルチプレクサ1120は読出しポート650に対する読出しポインタRP2を与える。モジュロ加算器1140はポインタOPTOPの値に−１をmodulo−SCS加算し、マルチプレクサ1120に結果の和を駆動する。ハードウエアプロセッサ100により制御される選択ラインRS2は、マルチプレクサ1120がモジュロ加算器1140からの値、すなわちハードウエアプロセッサ100により与えられるような読出しアドレスR_ADDR2を駆動するか否かを判定する。
マルチプレクサ1130は書込みポート630に対する書込みポインタWPを与える。モジュロ加算器1150は、ポインタOPTOPの値に１をmodulo−SCS加算し、マルチプレクサ1130に結果の和を駆動する。ハードウエアプロセッサ100により制御される選択ラインWSは、マルチプレクサ1130がmodulo−SCS加算器1140からの値、すなわちハードウエアプロセッサ100により与えられるような書込みアドレスW_ADDRを駆動するか否かを判定する。
第12図は、ポインタVARSを用いてスタックキャッシュメモリ回路にアクセスすることができるようにする実施例における、読出しポート640或いは650に対する読出しポインタを発生する回路である。マルチプレクサ1260は、選択信号RSにより画定されるような、入力ポート1261−1267上で受信されるいくつかの入力値の１つに読出しポインタＲを駆動する。選択信号RSは、ハードウエアプロセッサ100により制御される。ポインタOPTOPの値は、入力ポート1261に駆動される。modulo−SCS加算器1210は、ポインタOPTOPの値と入力ポート1261に対する−１とのmodulo−SCS和を駆動する。modulo−SCS加算器1210は、ポインタOPTOPの値と入力ポート1263に対する−２とのmodulo−SCS和を駆動する。ポインタVARSの値は、入力ポート1264に駆動される。modulo−SCS加算器1230は、ポインタVARSの値と入力ポート1265に対する１とのmodulo−SCS和を駆動する。modulo−SCS加算器1240は、ポインタVARSの値と入力ポート1266に対する２とのmodulo−SCS和を駆動する。modulo−SCS加算器1250は、ポインタVARSの値と入力ポート1263に対する３とのmodulo−SCS和を駆動する。他の実施例はマルチプレクサ1260の入力ポートに他の値を与えることもある。
従って、本発明の原理によるスタックキャッシュを用いることにより、ドリブル管理ユニットは、スタックキャッシュ及びスタック間の転送を効果的に制御することができる。特にドリブル管理ユニットは、必要に応じて追加データに対するメモリ空間を生成するためにスタックキャッシュからデータを転送し、メモリ空間がスタック管理ユニットを用いてスタック利用コンピューティングシステムにトランスペアレントに利用可能になるようにスタックキャッシュ内にデータを転送することができる。
上述の本発明の構造及び方法の種々の実施例は本発明の原理を例示するためのものであり、記載された特定の実施例に本発明の範囲を限定しようとするものではない。この開示の観点により、当業者は他のメモリ回路、レジスタ、カウンタ、スタック利用コンピューティングシステム、ドリブル管理ユニット、フィル制御ユニット、スピル制御ユニット、読出しポート、書込みポートを定義することができ、本発明の原理に従って、スタックキャッシングの方法或いはシステムを構築するためにこれらの別の機構を用いることができる。
【図１Ａ】
0003634379.tif 000002
【図１】
0003634379.tif 000003
【図１Ｂ】
0003634379.tif 000004
【図２】
0003634379.tif 000005
【図８】
0003634379.tif 000006
【図３】
0003634379.tif 000007
【図４Ａ】
0003634379.tif 000008
【図４Ｂ】
0003634379.tif 000009
【図４Ｃ】
0003634379.tif 000010
【図４Ｄ】
0003634379.tif 000011
【図５】
0003634379.tif 000012
【図６】
0003634379.tif 000013
【図７】
0003634379.tif 000014
【図９】
0003634379.tif 000015
【図１０Ａ】
0003634379.tif 000016
【図１０Ｂ】
0003634379.tif 000017
【図１１】
0003634379.tif 000018
【図１２】
0003634379.tif 000019