JP4018158B2 - 可変命令セットコンピュータ - Google Patents
可変命令セットコンピュータ Download PDFInfo
- Publication number
- JP4018158B2 JP4018158B2 JP52133799A JP52133799A JP4018158B2 JP 4018158 B2 JP4018158 B2 JP 4018158B2 JP 52133799 A JP52133799 A JP 52133799A JP 52133799 A JP52133799 A JP 52133799A JP 4018158 B2 JP4018158 B2 JP 4018158B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- virtual machine
- instructions
- processing unit
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99953—Recoverability
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage collection
Description
− 上記ソースプログラムのプログラム命令文を仮想マシン命令(仮想機械語命令)を有する命令の系列で表現すると共に該命令の系列を命令メモリに記憶する前処理ステップと、
− 上記命令メモリから命令を取り込むと共に、該命令メモリから取り込まれた仮想命令を前記処理ユニットの変換手段を用いてネイティブ命令に変換し、更に、これらネイティブ命令を実行のために前記マイクロコントローラコアに供給するような実行ステップと、
を有するような方法に関する。
本発明は、更に、仮想マシンの仮想マシン命令と呼ばれる命令を実行する処理ユニットであって、
マイクロコントローラ固有の命令の所定のセットからの上記仮想マシン命令とは異なるネイティブ命令を実行する所定のマイクロコントローラコアと、
上記仮想マシン命令の少なくとも1つを含む命令を記憶する命令メモリと、
上記命令メモリから取り込まれた仮想マシン命令を、上記マイクロコントローラコアにより実行するための少なくとも1つのネイティブ命令に変換するための変換手段を有するコンバータと、
を有するような処理ユニットにも関する。
益々、ソースプログラムは、該プログラムが実行されるべきマイクロコントローラコアのネイティブ命令の代わりに、仮想マシンの命令で表現される(コンパイルされる)ようになってきている。仮想マシンを用いる主たる理由は、異なるマシン(プラットフォーム)の間でのプログラムの移植性である。仮想マシンの仮想マシン命令で表現されたプログラムは、幾つかの具体的マシン上で動作する適切なインタプリタを用いることにより、これらマシン上で比較的容易に実行することができる。現時点では、移植性のあるプログラムを使用しようとする推進力はジャバ(商標)であり、ジャバプログラムはインターネットを介して交換されると共に、異なる命令セットを持つプロセッサを用いた異なるネイティブマシン上で実行することができる。コンパイラを用いて、ジャバプログラムは、ジャバ仮想マシンの命令を形成するジャババイトコード(JBC)で表現される。結果としてのコードは、通常、ジャバアプレットと称される。
従来、仮想マシン命令で表されるプログラムはソフトウェア翻訳により実行されている。プロセッサ(CPU)が特別なインタプリタプログラムを実行し、そこでは、ループ内で該プロセッサが仮想マシン命令を取り込み、該命令を当該プロセッサのマイクロコントローラコアのネイティブ命令の系列にデコードし、そして各ネイティブ命令を実行する。この技術は、遅く、しかも比較的大きな付加的なインタプリタプログラムを必要とする。実行速度を改善するため、所謂ジャスト・イン・タイム(JST)コンパイル技術が使用される。仮想マシン命令で表されたソフトウェアモジュールの実行を開始する直前に、該モジュールはネイティブコードにコンパイルされる(即ち、ネイティブマシン命令で表される)。このようにして、該モジュールは当該コンパイラ用のコードに加えて、2度記憶されねばならない。ソフトウェア翻訳の上記の付加的な記憶要件は、組み込み型のシステムにとっては望ましいものではない。性能及び記憶上のオーバーヘッドを避けるために、ハードウェアインタプリタを使用することが好ましい。ハードウェアインタプリタそれ自体は、ウォレンの抽象命令セット用のプロログ(Prolog)プリプロセッサ(pre-processor:前処理プログラム)の形で知られている。1986年のマイクロプロセッシング及びマイクロプログラミングの第71〜81頁における、B・クネドラー及びW・ローゼンスティールによる“ウォレンの抽象命令セット用のプロログプリプロセッサ”なる論文には、プロログプログラミング言語で書かれたプログラムをモトローラの68000プロセッサ(MC68000)上で翻訳するためのプリプロセッサが記載されている。該プロログソースプログラムを命令に翻訳するためにコンパイラが使用され、これら命令はウォレン氏により定義されたもので、通常、プロログプログラムを実行するために使用される。これらのウォレン命令のセットは、プロログプログラムを実行するために設計された仮想マシンを形成する。上記コンパイルの結果としてのウォレン命令の系列はRAMにロードされ、上記プリプロセッサの助けでMC68000により実行される。電源投入後、上記MC68000はネイティブなMC68000命令を実行することにより、先ずブート処理を行う。該ブート処理の後、該MC68000はプロログ命令の実行を開始することが可能となる。これは、所定のアドレス範囲にジャンプすることにより開始される。上記プリプロセッサはメモリにマップされる装置であり、該装置は上記範囲にマップされている。このプリプロセッサがアドレス指定されると、該プリプロセッサは自身のRAMから(翻訳されたプロログプログラムの)ウォレン命令を読み出し、MC68000命令の系列及び定数を適応的に合成し、これらを実行のために直接CPUに送出する。各ウォレン命令に対するMC68000命令は上記プリプロセッサのROMに記憶されている。通常、該プリプロセッサは1つのウォレン命令を1つの系列のMC68000命令に翻訳する。該プリプロセッサは自身のRAMコントローラ及びROMコントローラを含み、これらコントローラが当該プリプロセッサのRAM及びROM用のアドレスを発生する。RAMコントローラはRAM命令のポインタを管理する。MC68000の順次の読み出し動作の各々の結果、プリプロセッサは上記系列の次の命令(及び随意の定数)をCPUに送ることになる。当該系列が完了すると、次の読み取り動作の結果として、当該プログラムの次のウォレン命令に対応する系列の最初の命令がCPUに送出される。この既知のプリプロセッサは1つの仮想マシン(ウォレンマシン)をサポートする。
本発明の一つの目的は、もっと柔軟性のある上述したような種類の方法及び処理ユニットを提供することにある。また、本発明の他の目的は、プログラムがもっとコンパクトな形で表される上述したような種類の方法及び処理ユニットを提供することにある。
本発明の上記目的を達成するため、本方法は、
前記ソースプログラムのプログラム命令文に対して、対応する仮想マシン命令のセットを伴うプログラム固有の仮想マシンを、上記プログラム命令文の前記命令系列での表現が該プログラム命令文を表現するのにネイティブ命令のみを使用した場合に較べて前記命令メモリ内に少ない記憶空間しか必要としないような形態で定義し、
上記プログラム固有の仮想マシンに対して、該プログラム固有の仮想マシンの仮想マシン命令を前記マイクロコントローラコアのネイティブ命令に変換するような関連する変換手段を定義し、
該関連する変換手段を前記処理ユニット内で表す、
ような各ステップを有していることを特徴としている。
本発明によれば、プログラムに対してプログラム固有の仮想マシンが、該プログラムが前記コアのネイティブ命令で表現された場合よりも該プログラムが一層コンパクトな形で表現することができるように、定義される。また、関連する変換手段も定義される。この変換手段は、例えば、ROMに記憶された変換テーブル若しくはマイクロコード又はPLDのような専用のロジックを使用して実施化することができる。定義された変換手段は、前記処理ユニット内で表される。このようにして、プログラムの高速実行が維持される一方、同時にコンパクトな表現が達成される。この方法は、組み込み型アプリケーションと共に使用するのに特に好適である。この場合、上記ソースプログラムは、当該組み込み型システム内で最初に表される全てのプログラム命令文に関係する(例えば、ユーザがシステムを購入した時に当該システム内に存在するプログラム)。該プログラムはROMのような永久メモリに記憶することもでき、又はEEPROMのような再プログラム可能なメモリに記憶することもできる。組み込み型アプリケーションの場合は、該組み込み型アプリケーションのプログラムを表すのに使用されるコードがコンパクトであり、該コードを実行する性能が良好であることが高度に望まれる。典型的には、組み込み型アプリケーション用に用いられる処理ユニットはファミリー思想に基づくものであり、そこでは、特定のアプリケーションに対して、処理ユニットが、該アプリケーションに必要とされる所与のマイクロコントローラコア及びI/O又は記憶部品から作成される。経費削減のため、上記コア及び部品に対しては何の又は少なくとも大きな変更はしないことが望ましい。本発明によれば、一方では、当該プログラムに対して特別に仮想マシン命令が定義されて、コードのコンパクト化を達成するための充分な柔軟性を与え、他方では、該プログラムを実行するために在庫品的な(即座に入手可能な)コアが使用される。仮想マシン命令からネイティブ命令への所要な変換は変換手段により実行され、該手段は一種のプリプロセッサと見ることができる。
1995年1月のPOPL’95の第322〜332頁におけるトッド・A・プロエブスティングによる“ANSI Cインタプリタのスーパー演算子を用いた最適化”なる文献は、バイトコードによるインタプリタ用の最適化技術としてのスーパー演算子の使用について記載している。最初のステップとして、プログラムを仮想マシン命令で表すためにコンパイラが使用される。この仮想マシン命令は、該仮想マシン命令を用いたプログラムの表現が一層コンパクトになるように、選択される。このような仮想マシンの一例はスタックマシンであり、斯かるスタックマシンは、そのコンパクトな表現で知られている。次に、コンパイルされたコード内で頻繁に発生する仮想マシン命令の系列が識別され、新たに定義された追加の仮想マシン命令により置換されるが、その場合、例えば1つの新たな命令(所謂、スーパー演算子)が4つの既存の命令の系列を置換する。スーパー演算子は、コンパイラの構文解析相の間に、当該コンパイラの中間表現の間に構築される表現ツリーにおいて最も頻繁に発生する項目を識別することにより定義することもできる。限られた数(例えば、256を大きく下回る)のスーパー演算子のみが定義される。これにより、スーパー演算子のコンパクトなコード化(例えば、単一バイトのコードを用いる)が可能となる。この場合、該コードの範囲の一部が元の仮想マシン命令を表すために割り当てられ、該範囲の一部は上記スーパー演算子を表す新たに追加した仮想マシン命令を表すために使用される。20個のみのスーパー演算子を用いることにより、既に大幅なコードのコンパクト化が達成される。これら仮想マシン命令は、MIPS R3000又はSPARCプロセッサ上で走るソフトウェアインタプリタを用いて翻訳される。ハードウェアインタプリタは使用されず、これは所与の組み込み型マイクロコントローラコアとの組み合わせで、性能上の不利益なしに所与の組み込み型アプリケーションプログラムのコードのコンパクト化をもたらす。
請求項2に記載した実施例においては、異なる群のプログラム命令文に対して、良好なレベルのコードのコンパクト化を達成することができる。好ましくは、ネイティブ命令の同一の副セットに実質的に関係するプログラム命令文は一緒に群にまとめられ、斯かる群に対して仮想マシンが定義される。例えば、浮動小数点の演算に対するよりも、整数の演算に対しては異なる仮想マシンが定義される。ネイティブ命令の略同一の副セットに関係するが、これら命令をかなり相違する頻度で使用するプログラム命令文は群にまとめるのが好ましく、これにより最も頻繁に発生する命令(の系列)に対しては特別な仮想マシン命令の定義を可能にする。マルチタスクシステムの場合は、好ましくは、1つのタスクのプログラム命令文は1つの仮想マシンに関連付けられる。これは、組み込み型のプログラムの開発を簡単にする。何故なら、通常は1つのタスクに関するプログラム命令文は一人の技術者の管理の下で作成され、このやり方においては、上記管理の役割をコンパクト化されたコード及び関連する変換手段の制作の管理を含むように拡張することができるからである。選択された構成に依存して、実行されるべき仮想マシン命令に関連付けられた変換手段の選択が、実行の遅延を招き得る。この場合、個々の仮想マシン命令に対して変換手段を選択する代わりに、変換手段をタスクの切り換えの一部として切り換えることによりオーバーヘッドを低減することができる。この場合、同一のタスクを切れ目無く実行する限り、適切な変換手段を選択するためのオーバーヘッドが関わることはない。同一の仮想マシンは、ネイティブ命令の同様の混合を同様の頻度で使用する幾つかのタスクに対しても使用することができることが分かるであろう。一方、タスク用のプログラムが2以上のプログラムモジュールを有し、その場合に、これらプログラムモジュールの少なくとも2つが、ネイティブ命令の異なる副セットに実質的に関係するか、又は同様の命令の副セットの命令を実質的に異なる頻度で使用するような場合は、これらのモジュールに対しては異なる仮想マシンを使用するのが好ましい。同様に、オブジェクト指向のプログラミング技術が用いられる場合は、仮想マシンは同様のオブジェクトの各々又は群に対して定義することができる。
請求項3に記載の実施例においては、命令モジュールと、該モジュールの命令をネイティブ命令に変換するための変換データとが入力される。例えば、当該処理ユニットには追加の又は置換用のプログラムモジュールが供給される。該供給は、例えばプログラムモジュールを備えるROMを追加する又は交換することによりローカルなものであってもよく、又は該プログラムモジュールをフロッピーディスクのような可搬型記憶媒体からプログラム可能型メモリにロードすることでもよい。上記供給は、ローカルエリアネットワーク又はインターネットのような広域ネットワークの何れかのネットワークを介してなされてもよい。益々、組み込み型のシステムは、追加のソフトウェア、又は既存のソフトウェアの一部を当該システムの初期プログラミングの後で置換するようなソフトウェアを受け付けるように“開放型(open)”になってきている。上記初期ソフトウェアが専用の仮想マシンを用いて最適に圧縮されていた場合は、該マシンを新たに入力されたコードに対して使用することは、常に良好な結果を与えるとは限らず、不可能な場合さえある。元のソフトウェアの供給者が新たなソフトウェアを供給する場合でさえも、該ソフトウェアの性質が異なる場合があり、これは、該新たなソフトウェアに対しては別の仮想マシンを定義することにより一層良好なコンパクト化が達成される可能性があることを意味する。益々、入力されるソフトウェアが、元のソフトウェアとは完全に異なる性質のものであるようになってきている。一例として、新たなソフトウェアはジャバのバイトコードで表現されたジャバアプレットであるかもしれず、一方、元のソフトウェアは“C”で書かれており、元のプログラムに適合した仮想マシンと対応する変換手段とに最適にコンパイルされている。この定義された変換手段はジャババイトコードを変換するために使用することはできないことが理解されるであろう。何故なら、これらのコードは異なる仮想マシンを用いて表現されているからである。
本発明の前記目的を達成するため、本処理ユニットは、前記コンバータが複数の異なる仮想マシンに対して変換を実行するように動作することを特徴としている。
例えば、組み込み型のシステムには最初に或る仮想マシンを用いて表された組み込み型のプログラムが供給され、好ましくは、この仮想マシンは該特定のプログラムに対して定義される。後の段階で、当該ソフトウェアの略全部又は一部を取り替えるか又はソフトウェアモジュールを追加するようなソフトウェアの更新が必要となる。その場合に形成される全体のアプリケーションプログラムに対しては、その時点で有効なプログラム(依然として古いプログラムの部分も含むことができる)を一層良好に反映するような新たな仮想マシンを使用するのが望ましい。特に、ソフトウェアの所要の量は時間と共に増加する傾向にあるから、新たに生成されるアプリケーションプログラムに対しては一層高いレベルのコードのコンパクト化(異なる仮想マシンに反映されて)が必要であろう。このようにして、時間につれて異なる仮想マシンが使用され、その場合に、各時点では唯一の仮想マシンが使用される。他の例として、前述したように、異なる仮想マシンが組み込み型アプリケーションプログラムの異なる部分に対して同時に使用されるようにしてもよい。異なる仮想マシンは、“C”で書かれ且つプログラム固有の仮想マシンを用いてコンパクト化された組み込み型プログラム及び異なり且つ通常は予め決められている仮想マシンを用いて表現されたジャバアプレット等のプログラムのような、出所の異なるプログラムに対して使用することもできる。複数の仮想マシンは当該処理ユニット内に同時に存在することもでき、その場合には、時間につれて新たな仮想マシンが追加されるか又は既存の仮想マシンが置換されることが分かるであろう。
請求項5に記載の処理ユニットの実施例においては、前記変換手段は再プログラム可能な形式のものである。これによれば、新たなプログラムがロードされる場合に、新たな変換手段を当該処理ユニットに“ダウンロード”することができるようになる。上記の再プログラム可能な変換手段は、例えば、(E)EPROM等に記憶された再プログラム可能な変換テーブル若しくはマイクロコードを用いて、又はE−PLDのような専用の再プログラム可能なロジックを用いて、実施化することができる。
請求項6に記載の処理ユニットの実施例においては、前記コンバータは仮想マシンの各々に対して専用の変換手段を有している。この実施例では、処理ユニットには幾つかの専用の変換手段が作成される。原理的に、1つの対応する変換手段を備える1つの大きな仮想マシンを使用することもできる。幾つかの仮想マシンを使用することにより、一層コンパクトなコードを達成することができる。例えば、組み込み型のプログラムが2つのプログラムモジュールにより形成されていると仮定して、これらのモジュールのうちの一方のモジュールは当該組み込み型システムのユーザインターフェースとしての面に主に関係し、かくして主にネイティブ整数命令を必要とし、第2モジュールは主に信号処理に関係して、主に浮動小数点命令を必要とする。更に、上記2つのモジュールの各々に対して最適の仮想マシンは256の仮想マシン命令を各々有し、これらモジュールが8ビットのコードを用いて表現されると仮定する。両モジュールをカバーする1つの仮想マシンは上記2つの仮想マシンの命令を合成することにより作成することができ、512までの(少なくとも256を越える)仮想マシン命令を得ることができる。結果として、該コードの大きさは増加する。何故なら、この場合は9ビットのコードが必要となるからである。このような増加は、通常、可能性のある命令の重なり合いにより、合成された変換テーブルは2つの別個の変換テーブルより小さいという事実によっては補償することはできない。
請求項7に記載の処理ユニットの実施例においては、前記コンバータは異なる仮想マシンに対する変換手段の間を、実行されるべき仮想命令が記憶される命令メモリ内のロケーションに基づいて、区別する。例えば、ネイティブ命令とは別に2つの異なる仮想マシンの仮想マシン命令も使用される場合は、該メモリは3つの領域、即ち各形式の命令に対して1つの領域、に分割することができる。実行されるべき該命令のアドレスが何の領域に存在するかを判定することにより、上記コンバータは、変換が必要(ネイティブ命令が変換されるべき)か否か、及び何の変換手段が該変換に使用されるべきかを容易に検出することができる。
請求項8に記載の処理ユニットの実施例においては、ネイティブマシンと仮想マシンとの間及び/又は異なる仮想マシンの間を区別するために、別個の指示子(例えば、1以上のビット)が使用される。別個の指示子は各命令に対して使用することができる。他の例として、マシンの変更が生じる毎に設定されるような1つの包括的な指示子(例えば、レジスタ)を使用することもできる。
請求項9に記載の処理ユニットの実施例においては、1つの仮想マシン命令が一層コンパクトにコード化される1つの対応するネイティブ命令に変換される。このようにして、該変換は非常に単純となる。
請求項10に記載の処理ユニットの実施例においては、1つの仮想マシン命令は複数のネイティブ命令の所定の系列に変換され、更なるレベルのコンパクト化を提供する。ネイティブ命令の該系列の前記マイクロコントローラコアへの供給を、例えば該系列が供給されている間は上記マイクロコントローラの命令ポインタ(プログラムカウンタ)のインクリメントを禁止すると共に、一連動作が完了した場合にインクリメントを可能にすることにより制御するために、シーケンサが使用される。他の例として、当該処理ユニットは、自身の命令カウンタの制御の下で前記命令メモリから命令を取り込む命令取り込み部を有する。一連動作が完了すると、該カウンタの変化が可能にされ、マイクロコントローラコアの命令ポインタ(プログラムカウンタ)の変化に応答して、該命令カウンタは異なる値に設定される。系列が処理されている間は、上記命令カウンタの値の変化は禁止される。
本発明の上記及び他の特徴は図を参照して説明される実施例から明らかになるであろう。
図1は、処理ユニット内にコンバータを配置する4つの可能性のある構造的選択例を示し、
図2は、仮想マシン及び関連するコンバータを規定する処理を示し、
図3は、プログラム命令文の幾つかのコヒーレントな群から形成されるプログラムに関する処理を示し、
図4は、コンバータのブロック図を示し、
図1は、処理ユニット100内にコンバータを配置する4つの可能性のある構造的選択例を図示している。該処理ユニット100の3つの主要部分は、マイクロコントローラ110、命令メモリ120及びプリプロセッサ130である。プリプロセッサ130はコンバータ132を有する。示される全ての図において、マイクロコントローラ110は命令メモリ120とプリプロセッサ130とを有している。処理ユニット100それ自体は明示的には示されていない。マイクロコントローラ110内の全ての主たる要素を組み合わせることにより(好ましくはワンチップ装置とする)、最適な性能が達成される。もし所望なら、命令メモリ120及び/又はプリプロセッサ130はマイクロコントローラ110の外に配置することもでき、その場合は、マイクロコントローラバス140が該マイクロコントローラ110の外まで延長され、例えば、PCIのような外部バスに結合されるようにすることもできることが分かる。
命令メモリ120は、スタックマシン用の命令のような仮想マシン命令を含んでいる。該命令メモリはデータを記憶するためにも使用することができる。本発明は、データ及び命令が別れているハーバードアーキテクチャに限定されるものではない。マイクロコントローラ110は、マイクロコントローラに固有の命令の所定のセットからのネイティブ命令を実行するための、ネイティブマシンと呼ばれる、所定のマイクロコントローラコア114を備えるようなプロセッサ112を有している。組み込み型のソフトウェアを実行するのに適したマイクロコントローラの一例は、MIPS PR3001範囲のマイクロプロセッサのようなRISC型のマイクロコントローラである。上記プロセッサは、ネイティブ命令を、これら命令を実行する前に記憶するための命令キャッシュ116を有することができる。該マイクロコントローラコア114のネイティブ命令は、前記仮想マシンの仮想マシン命令とは異なる。マイクロコントローラ110それ自体は、命令メモリ120に記憶された仮想マシン命令を直接実行することはできない。命令を要求するプロセッサ112に応答して、プリプロセッサ130がネイティブ命令を出力する。該ネイティブ命令を発生することができるように、プリプロセッサ130は、取り込み手段134を用いて、命令メモリ120から仮想マシン命令を取り込むことができる。プリプロセッサ130のコンバータ132は、命令メモリ120から取り込まれた仮想マシン命令を少なくとも1つのネイティブ命令に変換するために使用される。通常、仮想マシン命令はネイティブ命令の系列に変換される。プリプロセッサ130は、更に、上記系列のネイティブ命令を実行のためにマイクロコントローラコア114に供給する供給手段136を有している。仮想マシンプログラムを実行する場合、マイクロコントローラ110は、実際に、プリプロセッサ130により発生されたネイティブプログラムを実行する。マイクロコントローラ110の命令ポインタが通常命令メモリ120内の当該マイクロプロセッサ110により次に実行される必要のある次の命令を示す場合、ここでは、該命令ポインタはプリプロセッサ130に対して次のネイティブ命令(又は前の命令の再供給)が必要であることを示す。結果として、プリプロセッサ130は、命令メモリ120内の現在の(又は次の)仮想マシン命令を示す独立した仮想マシン命令ポインタを管理することになる。当該マイクロコントローラは、仮想マシン命令又は仮想マシン命令ポインタを(明確に)知る必要はない。
図1Aにおいて、当該処理ユニットの主要な部分は、PIバスのような汎用周辺装置相互接続バス140を介して相互接続されている。プリプロセッサ130は該バス上の周辺装置である。プリプロセッサ130はメモリにマップされた周辺装置として動作し、そこでは、該プリプロセッサに対し所定の範囲のアドレスが割り当てられている。プロセッサ112がバス140上に上記範囲内のアドレスを伴う命令の要求を送出することに応答して、プリプロセッサ130はバス140上にネイティブ命令を出力する。必要があれば、プリプロセッサ130はバス140を介して命令メモリ120から仮想マシン命令を取り込む。
図1B及び図1Cにおいては、プリプロセッサ130はプロセッサ112と命令メモリ120との間に位置されている。プリプロセッサ130がネイティブ命令と仮想マシン命令とを区別する必要がある場合は、これらの構成は、命令メモリ120に記憶されたネイティブ命令の実行を遅延させることができる。明瞭化の理由で、図1Aに示された全ての要素が図1B、図1C及び図1Dで繰り返されてはいない。
図1Dにおいては、プリプロセッサ130はプロセッサ112内に組み込まれている。プリプロセッサ130は、好ましくは、プロセッサ112の命令キャッシュ116とコア114との間に位置される。この構成は最適な性能を可能にするが、図1A、1B及び1Cの構成とは違って、マイクロコントローラ110の変更を必要とし、プリプロセッサ130それ自体は、同一形式のコア114を備える異なる形式のプロセッサに対しては、在庫設計のようには、使用することはできない。
前処理ステップにおいては、当該処理ユニット100により実行されるべきソースプログラムのプログラム命令文に対して、対応する仮想マシン命令のセットを伴うプログラム固有の仮想マシンが定義される。更に、上記のプログラム固有の仮想マシンに対して、対応するコンバータ132が仮想マシン命令をマイクロコントローラコアのネイティブ命令に変換するために定義される。該コンバータ132は、上記仮想マシン命令の各々に対して、ネイティブコア114の、該仮想マシン命令を実行するために必要とされる1個の又は通常は一連の対応するネイティブ命令を供給する。図2は上記仮想マシン及び関連するコンバータを定義する過程を図示している。ステップ205においては、ソースプログラム200が解析される。この解析(例えば、演算の発生頻度)に基づいて、ステップ210ではプログラム固有の仮想マシン215が定義される。ステップ220においては、該仮想マシン用に、関連するコンバータ225が定義され、ステップ230においては上記ソースプログラムが該仮想マシンの命令で表され、結果としてコード235が得られる。上記仮想マシンは、前記プログラム命令文を表すのにネイティブ命令のみを使用するのに較べて、上記コードが命令メモリ内に必要とする記憶空間が少なくなるように、定義される。
好ましくは、上記のプログラム固有の仮想マシンは、上記プログラムを所定の仮想マシンの仮想マシン命令に変換することにより定義される。開始点として、コンパクトな表現が得られるものとして知られているスタックマシンのような仮想マシンが選択される。スタックマシンはオペランドを記憶するために明確なレジスタは使用しないが、その代わりに、オペランドはスタックに記憶され、演算子は常に該スタックの最上要素(又は複数の要素)に作用するという事実により、スタックマシンの場合は、使用することが可能なオペランドの数はあまり限定されず、これらオペランドの管理が一層簡単である。これにより、スタックに基づくマシンはレジスタに基づくマシンの場合よりも、コンパイラを構築するのが容易となる。更に、スタックマシンの命令は、殆どのレジスタに基づくマシンよりも単純な構造を持つ傾向がある。しかしながら、好適なレジスタに基づくマシンを使用することもできることが分かるであろう。本発明を説明するため、付録Aのスタックマシンが使用される。“C”プログラム言語で書かれたサンプルプログラム(8人の女王の問題を解く)が付録Bに示されている。該プログラムの付録Aの仮想マシンのスタックコードへの変換が付録Cに示されている。該コードを解析することにより、頻繁に発生する命令の系列が識別され、各々がこれらの識別された系列の1つを表すような追加の仮想マシン命令が定義される。付録Dは、好適な追加のマシン命令のリストを示している。このような追加のマシン命令は、“スーパー仮想マシン命令”と見ることができる。次いで、上記プログラム固有の仮想マシンが、付録Aの基本命令と付録Dのスーパー命令との組み合わせで形成される。付録Eは、付録Bのプログラムの付録A及びDの仮想マシンへの表現を示している。次に、上記のプログラム固有の仮想マシンに対して、図1に示すような関連するコンバータ132が、仮想マシン命令を前記マイクロコントローラコアのネイティブ命令に変換するために定義される。該コンバータ132は、上記仮想マシン命令(本例では、付録A及びDの命令の組み合わせ)の各々に対して、該仮想マシン命令をネイティブコア114上で実行するために要する1つの又は通常は一つの系列の対応するネイティブ命令を供給する。このような方法を用いれば、ネイティブ命令を表すのに通常16又は32ビットが使用されるのと較べて、各パラメータ化されていない命令に対して短い表現(例えば、7ビット)を可能にするような比較的少数の仮想マシン命令(本例では、38個の基本命令及び40個のスーパー命令)を用いることにより、上記コードのコンパクト化が達成される。上記スーパー命令を使用する結果、当該プログラムを表すのに少ない命令しか必要とされなくもなる。本例では、当該プログラムを基本仮想マシンの命令で表すのには356の命令文が必要である。スーパー命令を使用すると、これが262の命令文だけが必要となるように低減される。これは、当該プログラムがネイティブ命令で表現され、そこではMIPSプロセッサに対しては608個の命令文が必要となるような状況に較べると有利である。
好ましくは、プログラムに固有な仮想マシンは以下のようにして定義される。ソースプログラムは、所定の仮想マシンに基づいて所謂表現ツリーの中間レベル表現に変換される。表現ツリーは、該仮想マシンの基本演算を表すノードにより構成される。該表現ツリーは、該ツリーのノードの基本演算を所定の順序(例えば、接尾辞順)で実行する結果としての計算を表す。当該プログラムの表現ツリーへの変換は、フレーザ及びハンソンの「ライト“C”コンパイラlcc」のような、コンパイラの構文解析相を用いて実行される。次に、該表現ツリーとコヒーレントなツリー断片(一連の演算を表す)とが識別される。これらツリー及び断片の各々は、スーパー命令により表されるべき候補である。前記基本仮想マシン命令から始めて、最もコードサイズの節約が得られるようなツリー及びツリー断片が、スーパー命令により表される。該スーパー命令は前記仮想マシンに追加される。当該プログラムは、節約を決定するために、該新たな仮想マシン命令のセットにより表される。新たなスーパー命令は、新たな命令を追加する余裕が依然としてある限り(例えば、仮想マシン命令がバイトとして記憶される必要がある場合は、命令の数は256に限定される)、又は最早節約が達成されなくなるまで、追加される。最後に、当該ソースプログラムは上記プログラム固有の仮想マシンの命令で表され、変換データが発生される。
当該プログラムが、一旦、仮想マシン命令で表されると、結果としてのコードは命令メモリ120に記憶される。組み込み型システムの場合は、該コードは通常ROMに記憶されるが、該ROMはマスクプログラムされたROM、又はPROM若しくは(E)EPROMのようなプログラム可能なROMとする。同様にして、上記の発生された変換データは処理ユニット100のコンバータ132内で表される。該コンバータ132は、例えば、ROMに記憶される変換テーブル又はマイクロコードを用いて実施化することができる。また、コンバータ132は、PLDのようなロジックを用いて実施化することもできる。再プログラム可能なコンバータの場合は、同様の方法を、(E)EPROM又はE-PLDのような各々の再プログラム可能な技術に基づいて使用することができる。
図3は本発明による他の実施例を示し、該図において、例えば“C”でプログラムされたソースプログラム300はステップ310において、プログラムモジュール、オブジェクト又はタスク固有のコードのような幾つかのコヒーレントなプログラム命令文の群に分割される。図示のものは、モジュール312及び316である。明確な分割は必要ではなく、ソースプログラムが既に好適なモジュール構造で利用可能であるかもしれないことが分かるであろう。群312及び316の各々に対して、図2のステップ205及び210と同様の方法により、プログラム群固有の仮想マシンが、対応する仮想マシン命令のセットと共に定義される(ステップ330)。図示したものは、各仮想マシン332及び336である。ステップ340においては、各群312及び316のプログラム命令文が各仮想マシン332及び336の命令で表され、結果として各コードモジュール342及び346が得られる。これらコードモジュールはステップ350において命令メモリ120に記憶される。ステップ360においては、上記プログラム群固有の仮想マシン332及び336に対して、仮想マシン命令をマイクロコントローラコアのネイティブ命令に変換するための変換手段362及び366が各々発生される。ステップ370においては、これら変換手段362及び366が当該処理ユニット100内で、例えば該処理ユニット100内に変換テーブル又は変換ロジックをプログラムすることにより表される。結果として、コンバータ132は上記プログラム群の各々に対して固有の変換手段を有することになる。処理ユニット100が取り込まれた仮想命令に関連する群固有の変換手段を選択することができるように、ステップ390においては、選択データが当該処理ユニットに記憶される。実行の間には、仮想マシン命令が命令メモリ120から取り込まれる。この場合、上記選択データが当該仮想マシン命令が属する仮想マシンに関連する変換手段を捜すために使用される。
図4はコンバータ132のブロック図を示し、該図においてコンバータ132は幾つかの変換手段(400、410及び420が図示されている)を有している。これら変換手段の各々が、固有の仮想マシンの仮想マシン命令を変換するために使用される。該コンバータ132は、各々が完全な変換を実行することができるような完全に自律的な変換手段を有してもよいことが分かるであろう。他の例として、コンバータ132は、別個の変換データ(テーブルのような)の制御の下で仮想マシンの各々に対して何らかの共有ロジックを使用することもできる。当該処理ユニット100は選択データ430を有する。該選択データは、命令メモリ120に記憶される、又は当該変換手段が(部分的に)データとして記憶される場合は該変換手段と組み合わせて記憶される等の如何なる好適な方法でも表すことができる。また、選択データ430はメモリからロードされるコンバータ132内のレジスタの形を採ることもできる。種々の形の選択データを使用することができる。
他の実施例においては、命令メモリ120のアドレス範囲が幾つかの副範囲に分割される。一つのアドレス副範囲は1つの仮想マシンのみの仮想マシン命令を記憶するために確保される。好ましくは、一つのアドレス副範囲はネイティブ命令を記憶するためにも確保される。このようなネイティブ命令は、例えば、当該システムを初期化するか、又はドライバ若しくは組み込み型ソフトウェアアプリケーションの特別な部分のようなソフトウェアモジュールが最適な性能のためにネイティブ命令にコンパイルされるのを可能にするために使用される。この実施例では、前記選択データは、規定されたアドレス副範囲の各々に関して、命令取り込み部134により取り込まれた命令をネイティブ命令に変換するために上記変換手段400、410及び420のうちの何れが使用されるべきかを示す。この目的のため、コンバータ132は、命令メモリ120内のロケーションから取り込まれた命令を上記選択データに基づいて変換手段400、410又は420のうちの1つに選択的に指向させる検出器440を有している。ネイティブ命令も命令メモリ120内に記憶されている場合は、該検出器440は、これら命令がマイクロコントローラコア114へ供給されるように供給器136に直接供給されるのを保証する。
上記判断が取り込まれた命令のアドレスに基づく代わりの例として、情報が該命令に直接関連付けられて記憶されるようにすることもできる。例えば、命令メモリ120への各エントリの1以上のビットが、仮想マシン間の及び/又はネイティブコードと仮想コードとの間の区別をつけるために確保されるようにすることもできる。例えば、命令が7ビットを要するような場合に2つの仮想マシンのみが使用されるとすると、8番目のビットは当該命令が属する仮想マシンと関連する変換手段とを示すために使用することができる。明らかに、このような技術はアドレスに基づく区別と組み合わせることもできる。
他の例として、上記選択データはレジスタに記憶されてもよく、その場合、該レジスタは仮想マシンの間の切り換えが発生する毎に、別の変換手段を示すように設定される。該レジスタを設定するためには、特別な命令(例えば、ジャンプ命令の一形態)を使用することができる。斯かる構成をサポートする命令は、命令メモリ内の仮想マシン命令/ネイティブ命令と混ぜることができる。
上述したように、典型的には、仮想マシン命令はネイティブ命令の系列に変換される。命令の前記コアへの供給を調節するために、当該処理ユニット100は、コンバータ132とマイクロコントローラコア114との間に結合されて上記ネイティブ命令の系列をマイクロコントローラコア114に順次供給するシーケンサ450を有する。該シーケンサ450はカウンタのような通常の部品を用いて実施化することが可能であり、該カウンタは、例えば、当該マイクロコントローラコアからの新たな命令が必要であることを示すトリガ(例えば、当該コアの命令カウンタのインクリメント)の結果としてインクリメントされる。通常の処理ユニットにおいては、マイクロコントローラコアの命令ポインタ(プログラムカウンタとも称される)の変化の結果として、取り込み部134は命令メモリ120から命令を取り込み、供給器136は該命令をマイクロコントローラコア114に供給する。自動的な取り込みと供給との間の結合を絶つため、当該処理ユニット100は、更に、前記系列の供給の間は命令メモリからの命令の取り込みを禁止するための禁止手段460を有している。
上記順次供給及び禁止は幾つかの方法で実施することができることが分かるであろう。他の実施例においては、禁止手段460は上記禁止をマイクロコントローラコア114の命令ポインタのインクリメントを妨害することにより実行するよう動作する。これには、コア114に対する小さな変更を必要とする。例えば、コア114への追加の制御ラインにより命令カウンタの選択的禁止が可能となり、その場合、上記禁止手段460は前記系列からの命令が供給されている場合はインクリメントを禁止し、系列が完全に供給されたらインクリメントを可能にする。
他の実施例においては、命令取り込み部134が、マイクロコントローラコア114の命令ポインタとは別に、自身の命令カウンタを維持する。禁止手段460は、何時マイクロコントローラの命令ポインタのインクリメント(もっと一般的には変化)の結果、命令取り込み部134の命令カウンタ135が変化するかを制御する。上述したのと同様に、禁止手段460は前記系列からの命令が供給されている場合は命令カウンタ135の変化を禁止し、系列が完全に供給されたら変化を可能にする。命令カウンタ135の変化の結果、命令取り込み部134は、通常、命令メモリ112の該命令カウンタにより示されるアドレスから新たな命令を取り込む。有利には、仮想マシン命令のコンパクトな表現に特に鑑みて、命令取り込み部134はメモリから数個の命令を1つの読み出し動作で取り込むことができる(例えば、4つの1バイト命令を1つの32ビットワードとして読み出すことができる)。このように、命令カウンタ135の全ての変化が必ずしも結果として新たな命令の実際の取り込みになる必要はない。
本発明による他の実施例においては、他の仮想マシンの仮想マシン命令で表されたプログラムモジュールが、例えば、ネットワークを介して又はローカルバックグラウンドメモリから入力される。このようなプログラムモジュールの一例は、ジャバアプレットである。入力されたプログラムモジュールは命令メモリ120に記憶される。該他の仮想マシン命令のネイティブ命令への変換を可能ならしめるため、変換データも入力される。該変換データは、例えば、テーブルに基づく変換手段用の変換テーブル、又はPLDに基づく変換手段用のE−PLDプログラミングデータを規定する。該変換データは、コンバータ132の他の変換手段による後の使用のために、当該処理ユニットに記憶される。実行の間に適切な変換手段を選択することができるように、他の各仮想命令を上記変換データに関連付ける選択データも当該処理ユニットに記憶される。実行の間には、取り込まれた他の仮想マシン命令に関して、上記他の変換手段は上記選択データにより示される変換データの制御の下で動作される。
上述したように、コンバータ132は仮想マシン命令をネイティブ命令の系列に変換するためのテーブルを有することができる。一次元テーブルを使用することができ、その場合、該テーブルの各セルは、対応する1つの仮想マシン命令に対して一連のネイティブ命令を有する。セル番号が、対応する仮想マシン命令の値に対応してもよい。一例として、ジャバの整数加算(0x60)用のネイティブ命令の系列は、セル96(16進で0x60に等しい)内に配置することができる。ネイティブ命令の系列の長さは種々の仮想命令に対して大幅に変化するので、好ましくは、斯かる系列は明確なセル無しに一次元テーブル内に配置され、その場合、各系列が互いに直後に続くようにする。このような変換テーブル500が図5に示されており、該図では暗黙のセル境界が破線を用いて示されている。ある仮想マシン命令に対する系列を捜すことができるように、コード索引テーブル510を使用することができ、該索引テーブルは各仮想マシン命令(VMI1ないしVMIN)に対して、当該変換テーブル500内の対応する系列の開始点を示す。変換テーブル500におけるVMI3に対応するセルに関して、ネイティブ命令NI1ないしNIMからなる関連する系列520が図示されている。
変換に関する他の例がジャバのバイトコードbipush n(バイトnを符号拡張し、結果をスタックの最上部に配置するために使用される)に関して示される。この仮想マシン命令は2つのバイト{0x16及びn}からなり、ここで、最初のバイトは演算を定義し、第2バイトはパラメータnを提供する。該命令はネイティブMIPS命令の下記の系列に変換することができる。
この例は、仮想マシン命令がパラメータ化され、そこでは、演算コードには少なくとも1つのオペランドが続くことを示している。有利には、コンバータ132は変換テーブル500を有し、そこでは、ネイティブ命令は完全なコードにより、又は命令スケルトンにより、のいずれかで表される。一例として、上記命令addi $tosp, -4(上記例の系列の最後の命令)は変数部分を有さず、したがって当該テーブル内に4バイトエントリとして全て配置することができる。上記命令ori $a0,$0, n(上記例の系列の最初の命令)は変数部分を含んでおり、したがって該変数部分(nである)を特定せずに当該テーブル内にスケルトンとして配置される。好ましくは、命令スケルトン用の当該テーブルへのエントリは完全命令(例えば、MIPSプロセッサの場合は4バイト)と同じ幅とし、一様なテーブルを可能とする。該テーブル(又は他の(複数の)テーブル)には、どの様にしてネイティブ命令スケルトンの特定されていない部分を埋めるべきかを示す他の情報を配置することができる。有利には、上記の特定されていない部分を埋めるために、マイクロプログラミングが使用される。この場合、上記の他の情報はマイクロコードを有するか又はマイクロコードを示す。命令スケルトンに対しては完全ネイティブ命令と同じ構成(幅及び組立)を使用するのが有利であることが分かるであろう。しかしながら、他の構成も同様に使用することができる。
当該仮想マシンがスタック指向のマシンである場合は、好ましくは、スタック又は該スタックの少なくとも最上側の要素はマイクロコントローラ110のレジスタ上にマップされるようにする。このようにして、メモリスタック(仮想マシンスタックを伴う)はレジスタスタックにマップされる。レジスタ$r1、$r2及び$r3が当該メモリスタックの3つの連続した要素を含んでおり、その場合に、最初は$r1が該メモリスタックの第1の空のロケーション(該スタックの最上部の上)に対応し、$r2が該メモリスタックの最上部を含み、$r3が該メモリスタックの第2の要素を含んでいると仮定すると、ジャバのバイトコードbipush nはネイティブMIPS命令の下記系列に変換することができる。
ori $r1, $0, n
sll $r1, $r1, 24
sra $r1, $r1, 24
この演算の後、$r1は当該メモリスタックの最上部を含むようになる。
同様にして、整数加算(0x60)用のジャババイトコード(仮想マシン命令)は、最初は$r1が該メモリスタックの第1の空のロケーション(該スタックの最上部の上)に対応し、$r2が該メモリスタックの最上部を含み、$r3が該メモリスタックの第2の要素を含んでいるような同一の位置から始めて、MIPS命令の下記系列に変換することができる。
add $r3, $r2, $r3
この演算の後、$r3は当該メモリスタックの最上部を含むようになる。
上記例において、好ましくは、メモリスタックの最上部の位置(即ち、どのレジスタが当該メモリスタックの最上部を含むか)は、コンバータ132のレジスタ138を用いて示されるようにする。該コンバータは、レジスタスタックポインタ(RSP)と呼ばれるレジスタ138を、適切なネイティブ命令を発生するために使用する。好ましくは、ネイティブ命令のレジスタオペランドを特定するためにマイクロプログラミングが使用される。このようにして、固定のネイティブ命令も可変となる。何故なら、レジスタオペランドはコンバータ132により特定される必要があるからである。好ましくは、このようなオペランドも命令スケルトンを用いて変換テーブル500に記憶されるようにする。RSPが最初の空きのレジスタを指すと仮定すると、ジャババイトコードbipush nは、対応するマイクロコードの制御の下でネイティブMIPS命令の下記の系列に変換することができる。
マイクロコード命令
rsp=1; ftg=rsp+1ori $(rsp+1), $0, n
ftg=rsp+1;fa0=rsp+1sll $(rsp+1), $(rsp+1), 24
ftg=rsp+1;fa0=rsp+1sra $(rsp+1), $(rsp+1), 2
ここで、ftgは当該命令用の目標レジスタを示し、fa0及びfa1は当該命令用の第1及び第2引数レジスタを各々示す。スタックの最上側の2つの要素を加算するための、続くジャババイトコードiaddは、結果として、下記のマイクロコード及び命令となる。
ftg=rsp+2;fa0=rsp+2;fa1=rsp+1;rsp+=1add $(rsp+2), $(rsp+2), $(rsp+1)
Claims (12)
- ソースプログラムを、所定のマイクロコントローラ固有の命令のセットからのネイティブ命令を実行する所定のマイクロコントローラコアを有するような処理ユニット上で実行する方法であって、該方法が、
前記ソースプログラムのプログラム命令文を、仮想マシン命令を有する命令の系列で表現すると共に、該命令の系列を命令メモリに記憶する前処理ステップと、
前記命令メモリから命令を取り込むと共に、該命令メモリから取り込まれた仮想命令を前記処理ユニットの変換手段を用いてネイティブ命令に変換し、且つ、これらネイティブ命令を実行のために前記マイクロコントローラコアに供給するような実行ステップと、
を有するような方法において、前記前処理ステップが、
前記ソースプログラムのプログラム命令文に対して、対応する仮想マシン命令のセットを伴うプログラム固有の仮想マシンを、前記ソースプログラムの演算の発生頻度に基づいて、前記プログラム命令文の前記命令の系列での表現が該プログラム命令文を表現するのにネイティブ命令のみを使用した場合に較べて前記命令メモリ内に少ない記憶空間しか必要としないように前記仮想マシン命令をパラメータ化した形態で、定義し、
前記プログラム固有の仮想マシンに対して、該プログラム固有の仮想マシンの前記パラメータ化した仮想マシン命令を前記マイクロコントローラコアの一連のネイティブ命令に変換するような関連する変換手段を定義し、
前記関連する変換手段を前記処理ユニット内で表す、
ような各ステップを有していることを特徴とするソースプログラムを処理ユニット上で実行する方法。 - 請求項1に記載のソースプログラムを処理ユニット上で実行する方法において、前記前処理ステップが、
前記ソースプログラム内のプログラム命令文の複数の群を識別し、
これらプログラム命令文の群の各々に対して、
プログラム群固有の仮想マシンを対応する仮想マシン命令のセットと共に定義し、
前記プログラム群固有の仮想マシンに対して、仮想マシン命令を前記マイクロコントローラコアのネイティブ命令に変換するような関連する変換手段を発生し、
前記関連する変換手段を前記処理ユニット内で表し、
前記処理ユニット内に、発生された各仮想マシン命令を前記群固有の変換手段に関連付ける選択データを記憶する、
ような各ステップを有し、前記実行ステップが、取り込まれた命令に対して前記選択データにより示される前記関連する変換手段を選択するステップを有していることを特徴とする方法。 - 請求項1に記載の方法において、該方法が、
他の仮想マシンの仮想マシン命令を含む命令を有するような命令モジュールを入力すると共に、前記処理ユニットの他の変換手段が前記他の仮想マシン命令をネイティブ命令に変換することができるようにする変換データを入力し、
前記命令モジュールを前記命令メモリに記憶し、
前記変換データを前記処理ユニットに記憶し、
前記他の仮想マシン命令の各々を前記変換データに関連付ける選択データを前記処理ユニットに記憶する、
ような各ステップを有し、前記実行ステップが、
取り込まれた他の仮想マシン命令に対して、前記選択データにより示される前記関連する変換データを選択し、
前記他の変換手段を前記選択された変換データの制御の下で動作させる、
ような各ステップを有していることを特徴とする方法。 - ソースプログラムを実行するために、仮想マシンの仮想マシン命令と呼ぶ命令を実行する処理ユニットであって、
所定のマイクロコントローラ固有の命令のセットからの、前記仮想マシン命令とは異なるネイティブ命令を実行する所定のマイクロコントローラコアと、
前記仮想マシン命令の少なくとも1つを含む命令を記憶する命令メモリと、
前記命令メモリから取り込まれた仮想マシン命令を、前記マイクロコントローラコアにより実行するための少なくとも1つのネイティブ命令に変換する変換手段を有するコンバータと、
を有するような処理ユニットにおいて、前記仮想マシンが、前記ソースプログラムの演算の発生頻度に基づいて定義されており、
前記コンバータが、パラメータ化した仮想マシン命令の異なるセットを有する、プログラム固有の複数の異なる仮想マシンに対して前記変換を実行するとともに、該プログラム固有の仮想マシンの前記パラメータ化した仮想マシン命令を前記マイクロコントローラコアの一連のネイティブ命令に変換するように動作することを特徴とする処理ユニット。 - 請求項4に記載の処理ユニットにおいて、前記変換手段が再プログラム可能な形式のものであることを特徴とする処理ユニット。
- 請求項4に記載の処理ユニットにおいて、前記コンバータが前記複数の仮想マシンの各々に対して、対応する仮想マシンの仮想マシン命令を変換するための変換手段を有していることを特徴とする処理ユニット。
- 請求項6に記載の処理ユニットにおいて、該処理ユニットが前記命令メモリ内の少なくとも2つの分離された群のロケーションを各変換手段に関連付ける選択データを有し、前記コンバータが前記命令メモリ内のロケーションから取り込まれた命令を前記選択データに基づいて前記変換手段に選択的に指向させることを特徴とする処理ユニット。
- 請求項4に記載の処理ユニットにおいて、該処理ユニットは、前記ネイティブマシンと前記仮想マシンとの間及び/又は異なる仮想マシンの間の区別をするために、命令に対してメモリから関連する選択データを取り込むように動作し、前記コンバータが前記取り込まれた命令を前記選択データに基づいて変換手段に選択的に指向させる検出器を有していることを特徴とする処理ユニット。
- 請求項4に記載の処理ユニットにおいて、前記コンバータは1つの仮想マシン命令を1つの対応するネイティブ命令に変換するように動作し、前記仮想マシン命令は対応するネイティブ命令よりも前記命令メモリ内に要する記憶空間に関して一層コンパクトにコード化されていることを特徴とする処理ユニット。
- 請求項4に記載の処理ユニットにおいて、前記コンバータは1つの仮想マシン命令を複数のネイティブ命令の所定の系列に変換するように動作し、該処理ユニットが、
前記コンバータと前記マイクロコントローラコアとの間に結合されて、前記ネイティブ命令の系列を前記マイクロコントローラコアに順次供給するシーケンサと、
上記供給の間に、前記命令メモリからの命令の取り込みを禁止する禁止手段と、
を有することを特徴とする処理ユニット。 - 請求項10に記載の処理ユニットにおいて、前記禁止手段が前記禁止を前記マイクロコントローラコアの命令ポインタのインクリメントを妨害することにより実行するよう動作することを特徴とする処理ユニット。
- 請求項10に記載の処理ユニットにおいて、該処理ユニットは、当該命令取り込み部の命令カウンタの変化に応答して前記命令メモリから命令を取り込む命令取り込み部を有し、前記命令カウンタは前記マイクロコントローラコアの命令ポインタの変化に応答して異なる値に設定され、前記禁止手段は前記命令カウンタの値の変化を妨害することにより前記禁止を実行するよう動作することを特徴とする処理ユニット。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP97203033 | 1997-10-02 | ||
EP97203905.1 | 1997-12-12 | ||
EP97203033.2 | 1997-12-12 | ||
EP97203905 | 1997-12-12 | ||
PCT/IB1998/001453 WO1999018485A2 (en) | 1997-10-02 | 1998-09-21 | Variable instruction set computer |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001508908A JP2001508908A (ja) | 2001-07-03 |
JP4018158B2 true JP4018158B2 (ja) | 2007-12-05 |
Family
ID=26146919
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP52133799A Expired - Fee Related JP4018158B2 (ja) | 1997-10-02 | 1998-09-21 | 可変命令セットコンピュータ |
Country Status (5)
Country | Link |
---|---|
US (1) | US6292883B1 (ja) |
EP (1) | EP0941508B1 (ja) |
JP (1) | JP4018158B2 (ja) |
DE (1) | DE69836902T2 (ja) |
WO (1) | WO1999018485A2 (ja) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6513156B2 (en) * | 1997-06-30 | 2003-01-28 | Sun Microsystems, Inc. | Interpreting functions utilizing a hybrid of virtual and native machine instructions |
US6332215B1 (en) * | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US7225436B1 (en) | 1998-12-08 | 2007-05-29 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
US6826749B2 (en) * | 1998-12-08 | 2004-11-30 | Nazomi Communications, Inc. | Java hardware accelerator using thread manager |
US6654778B1 (en) * | 1999-01-29 | 2003-11-25 | International Business Machines Corporation | Method and apparatus for avoiding function activation and interpretation overhead for calls to selected java methods in a java virtual machine interpreter |
GB2357684A (en) * | 1999-12-21 | 2001-06-27 | Motorola Ltd | Hand-held terminal having a display screen which is controlled by movement of the terminal |
JP3556556B2 (ja) * | 2000-02-08 | 2004-08-18 | 株式会社東芝 | 命令コード変換装置及び情報処理システム |
KR20020028814A (ko) | 2000-10-10 | 2002-04-17 | 나조미 커뮤니케이션즈, 인코포레이티드 | 마이크로코드 엔진을 이용한 자바 하드웨어 가속기 |
US6901591B1 (en) | 2000-10-31 | 2005-05-31 | Sun Microsystems, Inc. | Frameworks for invoking methods in virtual machines |
US6996813B1 (en) * | 2000-10-31 | 2006-02-07 | Sun Microsystems, Inc. | Frameworks for loading and execution of object-based programs |
US6978456B1 (en) | 2000-10-31 | 2005-12-20 | Sun Microsystems, Inc. | Methods and apparatus for numeric constant value inlining in virtual machines |
JP2002169696A (ja) * | 2000-12-04 | 2002-06-14 | Mitsubishi Electric Corp | データ処理装置 |
US7242719B2 (en) * | 2000-12-06 | 2007-07-10 | Koninklijke Philips Electronics N.V. | Method and apparatus for space-saving-variable length encoding and decoding |
US6789187B2 (en) * | 2000-12-15 | 2004-09-07 | Intel Corporation | Processor reset and instruction fetches |
JP2002215387A (ja) * | 2001-01-22 | 2002-08-02 | Mitsubishi Electric Corp | 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置 |
US7181484B2 (en) | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US7162621B2 (en) | 2001-02-21 | 2007-01-09 | Mips Technologies, Inc. | Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration |
US7711763B2 (en) | 2001-02-21 | 2010-05-04 | Mips Technologies, Inc. | Microprocessor instructions for performing polynomial arithmetic operations |
US7096466B2 (en) * | 2001-03-26 | 2006-08-22 | Sun Microsystems, Inc. | Loading attribute for partial loading of class files into virtual machines |
US7020874B2 (en) * | 2001-03-26 | 2006-03-28 | Sun Microsystems, Inc. | Techniques for loading class files into virtual machines |
US7543288B2 (en) | 2001-03-27 | 2009-06-02 | Sun Microsystems, Inc. | Reduced instruction set for Java virtual machines |
US6957428B2 (en) | 2001-03-27 | 2005-10-18 | Sun Microsystems, Inc. | Enhanced virtual machine instructions |
GB2376099B (en) * | 2001-05-31 | 2005-11-16 | Advanced Risc Mach Ltd | Program instruction interpretation |
US7174006B2 (en) * | 2001-06-18 | 2007-02-06 | Nms Communications Corporation | Method and system of VoiceXML interpreting |
US7039904B2 (en) * | 2001-08-24 | 2006-05-02 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for storing values into local variables |
US6988261B2 (en) * | 2001-08-24 | 2006-01-17 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions in Java computing environments |
US8769508B2 (en) * | 2001-08-24 | 2014-07-01 | Nazomi Communications Inc. | Virtual machine hardware for RISC and CISC processors |
US7058934B2 (en) * | 2001-08-24 | 2006-06-06 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for instantiating Java objects |
US7228533B2 (en) * | 2001-08-24 | 2007-06-05 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for performing programming loops |
WO2003027842A2 (en) * | 2001-09-25 | 2003-04-03 | Koninklijke Philips Electronics N.V. | Software support for virtual machine interpreter (vmi) acceleration hardware |
FR2837294A1 (fr) * | 2002-03-12 | 2003-09-19 | Koninkl Philips Electronics Nv | Dispositif pour accelerer l'interpretation d'un programme en langage interprete |
US20030192035A1 (en) * | 2002-04-09 | 2003-10-09 | Duesterwald Ald Evelyn | Systems and methods for implementing efficient execution transfers between successive translations of stack-based program code in a virtual machine environment |
US7185215B2 (en) * | 2003-02-24 | 2007-02-27 | International Business Machines Corporation | Machine code builder derived power consumption reduction |
US8584109B2 (en) * | 2006-10-27 | 2013-11-12 | Microsoft Corporation | Virtualization for diversified tamper resistance |
EP2482184A1 (en) * | 2011-02-01 | 2012-08-01 | Irdeto B.V. | Adaptive obfuscated virtual machine |
EP3001313A1 (de) * | 2014-09-23 | 2016-03-30 | dSPACE digital signal processing and control engineering GmbH | Verfahren zur Simulation eines Anwendungsprogramms eines elektronischen Steuergeräts auf einem Computer |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4245302A (en) * | 1978-10-10 | 1981-01-13 | Magnuson Computer Systems, Inc. | Computer and method for executing target instructions |
JPS56152049A (en) * | 1980-04-25 | 1981-11-25 | Toshiba Corp | Microprogram control system |
US4403284A (en) * | 1980-11-24 | 1983-09-06 | Texas Instruments Incorporated | Microprocessor which detects leading 1 bit of instruction to obtain microcode entry point address |
US4719565A (en) * | 1984-11-01 | 1988-01-12 | Advanced Micro Devices, Inc. | Interrupt and trap handling in microprogram sequencer |
US5430862A (en) * | 1990-06-29 | 1995-07-04 | Bull Hn Information Systems Inc. | Emulation of CISC instructions by RISC instructions using two pipelined stages for overlapped CISC decoding and RISC execution |
JP3602857B2 (ja) * | 1991-04-23 | 2004-12-15 | 株式会社日立製作所 | 多機種対応型情報処理システム、および、方法 |
US6151618A (en) * | 1995-12-04 | 2000-11-21 | Microsoft Corporation | Safe general purpose virtual machine computing system |
GB9526129D0 (en) * | 1995-12-21 | 1996-02-21 | Philips Electronics Nv | Machine code format translation |
EP0976029A2 (en) * | 1996-01-24 | 2000-02-02 | Sun Microsystems, Inc. | A processor for executing instruction sets received from a network or from a local memory |
WO1997027536A1 (en) * | 1996-01-24 | 1997-07-31 | Sun Microsystems, Inc. | Instruction folding for a stack-based machine |
US6021273A (en) * | 1997-06-30 | 2000-02-01 | Sun Microsystems, Inc. | Interpreter generation and implementation utilizing interpreter states and register caching |
US6078322A (en) * | 1997-09-30 | 2000-06-20 | The United States Of America As Represented By The Secretary Of The Navy | Methods permitting rapid generation of platform independent software applications executed on a universal client device |
-
1998
- 1998-09-21 EP EP98941638A patent/EP0941508B1/en not_active Expired - Lifetime
- 1998-09-21 DE DE69836902T patent/DE69836902T2/de not_active Expired - Lifetime
- 1998-09-21 JP JP52133799A patent/JP4018158B2/ja not_active Expired - Fee Related
- 1998-09-21 WO PCT/IB1998/001453 patent/WO1999018485A2/en active IP Right Grant
- 1998-09-28 US US09/161,847 patent/US6292883B1/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP0941508B1 (en) | 2007-01-17 |
EP0941508A1 (en) | 1999-09-15 |
WO1999018485A3 (en) | 1999-07-01 |
US6292883B1 (en) | 2001-09-18 |
DE69836902D1 (de) | 2007-03-08 |
DE69836902T2 (de) | 2007-10-18 |
WO1999018485A2 (en) | 1999-04-15 |
JP2001508908A (ja) | 2001-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4018158B2 (ja) | 可変命令セットコンピュータ | |
JP3499252B2 (ja) | コンパイル装置及びデータ処理装置 | |
US8185882B2 (en) | Java virtual machine hardware for RISC and CISC processors | |
KR100890244B1 (ko) | 레지스터에의 스택 오퍼랜드의 저장 | |
US8473718B2 (en) | Java hardware accelerator using microcode engine | |
US6996703B2 (en) | Processing device for executing virtual machine instructions | |
JP3786644B2 (ja) | バイトコンパイルされたJava(R)コードを実行するためのマイクロプロセッサ | |
US6338160B1 (en) | Constant pool reference resolution method | |
US6158047A (en) | Client/server system for fast, user transparent and memory efficient computer language translation | |
JP2001508909A (ja) | バーチャルマシン命令を処理するためのデータ処理装置 | |
US20070288909A1 (en) | Hardware JavaTM Bytecode Translator | |
KR20040048246A (ko) | 자바 실행 장치 및 자바 실행 방법 | |
US7225436B1 (en) | Java hardware accelerator using microcode engine | |
US8769508B2 (en) | Virtual machine hardware for RISC and CISC processors | |
US20030093775A1 (en) | Processing of self-modifying code under emulation | |
JP2002366367A (ja) | プログラム命令解釈 | |
US5758140A (en) | Method and system for emulating instructions by performing an operation directly using special-purpose register contents | |
US20050149694A1 (en) | Java hardware accelerator using microcode engine | |
US7930526B2 (en) | Compare and branch mechanism | |
CN113795823A (zh) | 处理器资源的可编程控制 | |
JP2003202995A (ja) | 中間コード前処理装置、中間コード実行システム、中間コード前処理プログラムおよび中間コード実行プログラム | |
CN114691199A (zh) | 指令转换装置及其转换方法和系统以及处理器 | |
KR100448676B1 (ko) | 슈퍼스칼라 마이크로프로세서 내에서 가변 바이트 길이 명령어들을 프리디코딩하는 방법 및 장치 | |
JPH11510288A (ja) | 間接指定子を用いるエミュレーションを含む命令デコーダ | |
Craig | Implementation Techniques |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050920 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060509 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20060801 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20060915 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061106 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20070313 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070612 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20070628 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070821 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070920 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100928 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |