JP2001508908A - 可変命令セットコンピュータ - Google Patents

可変命令セットコンピュータ

Info

Publication number
JP2001508908A
JP2001508908A JP52133799A JP52133799A JP2001508908A JP 2001508908 A JP2001508908 A JP 2001508908A JP 52133799 A JP52133799 A JP 52133799A JP 52133799 A JP52133799 A JP 52133799A JP 2001508908 A JP2001508908 A JP 2001508908A
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.)
Granted
Application number
JP52133799A
Other languages
English (en)
Other versions
JP4018158B2 (ja
Inventor
アレクサンデル オーフステイン
エールコ イェー デュクストラ
ポーラス エム ハー エム アー ホリッセン
フランシスカス イェー ハー エム メレンブルークス
ポール ストラフェルス
ヨーアヒム アー トレスヘル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Philips Electronics NV
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Philips Electronics NV filed Critical Philips Electronics NV
Publication of JP2001508908A publication Critical patent/JP2001508908A/ja
Application granted granted Critical
Publication of JP4018158B2 publication Critical patent/JP4018158B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation
    • Y10S707/99957Garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 ソースプログラムが、処理ユニット(100)のマイクロコントローラコア(114)上で実行される。該コア(114)は、マイクロコントローラ固有の命令の所定セットからのネイティブ命令を実行することができる。前処理ステップにおいて、上記ソースプログラムのプログラム命令文に対して、プログラム固有の仮想マシンが対応する仮想マシン命令のセットと共に次のように定義される。即ち、上記プログラム命令文の命令系列での表現が、ネイティブ命令のみを使用した場合に較べて少ない記憶空間しか必要としないように定義される。上記プログラム固有の仮想マシンに対して、該プログラム固有の仮想マシンの命令を上記コア(114)のネイティブ命令に変換するための関連する変換手段(132)が定義される。上記ソースプログラムの命令文は定義された仮想マシンの命令を含む命令の系列で表現される。この命令の系列は命令メモリ(120)に記憶される。変換手段(132)は処理ユニット(100)内で表される。実行の間に、命令メモリ(120)から命令が取り込まれる。そして、変換手段(132)は、上記の取り込まれた仮想マシン命令を、コア(114)により実行されるネイティブ命令に変換するために使用される。

Description

【発明の詳細な説明】 可変命令セットコンピュータ 本発明は、マイクロコントローラ固有の命令の所定のセットからのネイティブ 命令を実行するための所定のマイクロコントローラコアを有するような処理ユニ ット上でソースプログラムを実行する方法に係り、該方法が、 − 上記ソースプログラムのプログラム命令文を仮想マシン命令(仮想機械語命 令)を有する命令の系列で表現すると共に該命令の系列を命令メモリに記憶する 前処理ステップと、 − 上記命令メモリから命令を取り込むと共に、該命令メモリから取り込まれた 仮想命令を前記処理ユニットの変換手段を用いてネイティブ命令に変換し、更に 、これらネイティブ命令を実行のために前記マイクロコントローラコアに供給す るような実行ステップと、 を有するような方法に関する。 本発明は、更に、仮想マシンの仮想マシン命令と呼ばれる命令を実行する処理 ユニットであって、 マイクロコントローラ固有の命令の所定のセットからの上記仮想マシン命令と は異なるネイティブ命令を実行する所定のマイクロコントローラコアと、 上記仮想マシン命令の少なくとも1つを含む命令を記憶する命令メモリと、 上記命令メモリから取り込まれた仮想マシン命令を、上記マイクロコントロー ラコアにより実行するための少なくとも1つのネイティブ命令に変換するための 変換手段を有するコンバータと、 を有するような処理ユニットにも関する。 益々、ソースプログラムは、該プログラムが実行されるべきマイクロコントロ ーラコアのネイティブ命令の代わりに、仮想マシンの命令で表現される(コンパ イルされる)ようになってきている。仮想マシンを用いる主たる理由は、異なる マシン(プラットフォーム)の間でのプログラムの移植性である。仮想マシンの 仮想マシン命令で表現されたプログラムは、幾つかの具体的マシン上で動作する 適切なインタプリタを用いることにより、これらマシン上で比較的容易に実行す ることができる。現時点では、移植性のあるプログラムを使用しようとする推進 力はジャバであり、ジャバプログラムはインターネットを介して交換されると共 に、異なる命令セットを持つプロセッサを用いた異なるネイティブマシン上で実 行することができる。コンパイラを用いて、ジャバプログラムは、ジャバ仮想マ シンの命令を形成するジャババイトコード(JBC)で表現される。結果として のコードは、通常、ジャバアプレットと称される。 従来、仮想マシン命令で表されるプログラムはソフトウェア翻訳により実行さ れている。プロセッサ(CPU)が特別なインタプリタプログラムを実行し、そ こでは、ループ内で該プロセッサが仮想マシン命令を取り込み、該命令を当該プ ロセッサのマイクロコントローラコアのネイティブ命令の系列にデコードし、そ して各ネイティブ命令を実行する。この技術は、遅く、しかも比較的大きな付加 的なインタプリタプログラムを必要とする。実行速度を改善するため、所謂ジャ スト・イン・タイム(JST)コンパイル技術が使用される。仮想マシン命令で 表されたソフトウェアモジュールの実行を開始する直前に、該モジュールはネイ ティブコードにコンパイルされる(即ち、ネイティブマシン命令で表される)。 このようにして、該モジュールは当該コンパイラ用のコードに加えて、2度記憶 されねばならない。ソフトウェア翻訳の上記の付加的な記憶要件は、組み込み型 のシステムにとっては望ましいものではない。性能及び記憶上のオーバーヘッド を避けるために、ハードウェアインタプリタを使用することが好ましい。ハード ウェアインタプリタそれ自体は、ウォレンの抽象命令セット用のプロログ(Prolo g)プリプロセッサ(pre-processor:前処理プログラム)の形で知られている。1 986年のマイクロプロセッシング及びマイクロプログラミングの第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の順次の読み出し動作 の各々の結果、プリプロセッサは上記系列の次の命令(及び随意の定数)をCP Uに送ることになる。当該系列が完了すると、次の読み取り動作の結果として、 当該プログラムの次のウォレン命令に対応する系列の最初の命令がCPUに送出 される。この既知のプリプロセッサは1つの仮想マシン(ウォレンマシン)をサ ポートする。 本発明の一つの目的は、もっと柔軟性のある上述したような種類の方法及び処 理ユニットを提供することにある。また、本発明の他の目的は、プログラムがも っとコンパクトな形で表される上述したような種類の方法及び処理ユニットを提 供することにある。 本発明の上記目的を達成するため、本方法は、 前記ソースプログラムのプログラム命令文に対して、対応する仮想マシン命令 のセットを伴うプログラム固有の仮想マシンを、上記プログラム命令文の前記命 令系列での表現が該プログラム命令文を表現するのにネイティブ命令のみを使用 した場合に較べて前記命令メモリ内に少ない記憶空間しか必要としないような形 態で定義し、 上記プログラム固有の仮想マシンに対して、該プログラム固有の仮想マシンの 仮想マシン命令を前記マイクロコントローラコアのネイティブ命令に変換するよ うな関連する変換手段を定義し、 該関連する変換手段を前記処理ユニット内で表す、 ような各ステップを有していることを特徴としている。 本発明によれば、プログラムに対してプログラム固有の仮想マシンが、該プロ グラムが前記コアのネイティブ命令で表現された場合よりも該プログラムが一層 コンパクトな形で表現することができるように、定義される。また、関連する変 換手段も定義される。この変換手段は、例えば、ROMに記憶された変換テーブ ル若しくはマイクロコード又はPLDのような専用のロジックを使用して実施化 することができる。定義された変換手段は、前記処理ユニット内で表される。こ のようにして、プログラムの高速実行が維持される一方、同時にコンパクトな表 現が達成される。この方法は、組み込み型アプリケーションと共に使用するのに 特に好適である。この場合、上記ソースプログラムは、当該組み込み型システム 内で最初に表される全てのプログラム命令文に関係する(例えば、ユーザがシス テムを購入した時に当該システム内に存在するプログラム)。該プログラムはR OMのような永久メモリに記憶することもでき、又は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を備えるようなプロセッサ11 2を有している。組み込み型のソフトウェアを実行するのに適したマイクロコン トローラの一例は、MIPS PR3001範囲のマイクロプロセッサのようなRISC型 のマイクロコントローラである。上記プロセッサは、ネイティブ命令を、これら 命令を実行する前に記憶するための命令キャッシュ116を有することができる 。該マイクロコントローラコア114のネイティブ命令は、前記仮想マシンの仮 想マシン命令とは異なる。マイクロコントローラ110それ自体は、命令メモリ 120に記憶された仮想マシン命令を直接実行することはできない。命令を要求 するプロセッサ112に応答して、プリプロセッサ130がネイティブ命令を出 力する。該ネイティブ命令を発生することができるように、プリプロセッサ13 0は、取り込み手段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はバス1 40上にネイティブ命令を出力する。必要があれば、プリプロセッサ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 が解析される。この解析(例えば、演算の発生頻度)に基づいて、ステップ21 0ではプログラム固有の仮想マシン215が定義される。ステップ220におい ては、該仮想マシン用に、関連するコンバータ225が定義され、ステップ23 0においては上記ソースプログラムが該仮想マシンの命令で表され、結果として コード235が得られる。上記仮想マシンは、前記プログラム命令文を表すのに ネイティブ命令のみを使用するのに較べて、上記コードが命令メモリ内に必要と する記憶空間が少なくなるように、定義される。 好ましくは、上記のプログラム固有の仮想マシンは、上記プログラムを所定の 仮想マシンの仮想マシン命令に変換することにより定義される。開始点として、 コンパクトな表現が得られるものとして知られているスタックマシンのような仮 想マシンが選択される。スタックマシンはオペランドを記憶するために明確なレ ジスタは使用しないが、その代わりに、オペランドはスタックに記憶され、演算 子は常に該スタックの最上要素(又は複数の要素)に作用するという事実により 、スタックマシンの場合は、使用することが可能なオペランドの数はあまり限定 されず、これらオペランドの管理が一層簡単である。これにより、スタックに基 づくマシンはレジスタに基づくマシンの場合よりも、コンパイラを構築するのが 容易となる。更に、スタックマシンの命令は、殆どのレジスタに基づくマシンよ りも単純な構造を持つ傾向がある。しかしながら、好適なレジスタに基づくマシ ンを使用することもできることが分かるであろう。本発明を説明するため、付録 Aのスタックマシンが使用される。“C”プログラム言語で書かれたサンプルプ ログラム(8人の女王の問題を解く)が付録Bに示されている。該プログラムの 付録Aの仮想マシンのスタックコードへの変換が付録Cに示されている。該コー ドを解析することにより、頻繁に発生する命令の系列が識別され、各々がこれら の識別された系列の1つを表すような追加の仮想マシン命令が定義される。付録 Dは、好適な追加のマシン命令のリストを示している。このような追加のマシン 命令は、“スーパー仮想マシン命令”と見ることができる。次いで、上記プログ ラム固有の仮想マシンが、付録Aの基本命令と付録Dのスーパー命令との組み合 わせで形成される。付録Eは、付録Bのプログラムの付録A及びDの仮想マシン へ の表現を示している。次に、上記のプログラム固有の仮想マシンに対して、図1 に示すような関連するコンバータ132が、仮想マシン命令を前記マイクロコン トローラコアのネイティブ命令に変換するために定義される。該コンバータ13 2は、上記仮想マシン命令(本例では、付録A及びDの命令の組み合わせ)の各 々に対して、該仮想マシン命令をネイティブコア114上で実行するために要す る1つの又は通常は一つの系列の対応するネイティブ命令を供給する。このよう な方法を用いれば、ネイティブ命令を表すのに通常16又は32ビットが使用さ れるのと較べて、各パラメータ化されていない命令に対して短い表現(例えば、 7ビット)を可能にするような比較的少数の仮想マシン命令(本例では、38個 の基本命令及び40個のスーパー命令)を用いることにより、上記コードのコン パクト化が達成される。上記スーパー命令を使用する結果、当該プログラムを表 すのに少ない命令しか必要とされなくもなる。本例では、当該プログラムを基本 仮想マシンの命令で表すのには356の命令文が必要である。スーパー命令を使 用すると、これが262の命令文だけが必要となるように低減される。これは、 当該プログラムがネイティブ命令で表現され、そこではMIPSプロセッサに対 しては608個の命令文が必要となるような状況に較べると有利である。 好ましくは、プログラムに固有な仮想マシンは以下のようにして定義される。 ソースプログラムは、所定の仮想マシンに基づいて所謂表現ツリーの中間レベル 表現に変換される。表現ツリーは、該仮想マシンの基本演算を表すノードにより 構成される。該表現ツリーは、該ツリーのノードの基本演算を所定の順序(例え ば、接尾辞順)で実行する結果としての計算を表す。当該プログラムの表現ツリ ーへの変換は、フレーザ及びハンソンの「ライト“C”コンパイラlcc」のよう な、コンパイラの構文解析相を用いて実行される。次に、該表現ツリーとコヒー レントなツリー断片(一連の演算を表す)とが識別される。これらツリー及び断 片の各々は、スーパー命令により表されるべき候補である。前記基本仮想マシン 命令から始めて、最もコードサイズの節約が得られるようなツリー及びツリー断 片が、スーパー命令により表される。該スーパー命令は前記仮想マシンに追加さ れる。当該プログラムは、節約を決定するために、該新たな仮想マシン命令のセ ットにより表される。新たなスーパー命令は、新たな命令を追加する余裕が依然 としてある限り(例えば、仮想マシン命令がバイトとして記憶される必要がある 場合は、命令の数は256に限定される)、又は最早節約が達成されなくなるま で、追加される。最後に、当該ソースプログラムは上記プログラム固有の仮想マ シンの命令で表され、変換データが発生される。 当該プログラムが、一旦、仮想マシン命令で表されると、結果としてのコード は命令メモリ120に記憶される。組み込み型システムの場合は、該コードは通 常ROMに記憶されるが、該ROMはマスクプログラムされたROM、又はPR OM若しくは(E)EPROMのようなプログラム可能なROMとする。同様にして、上 記の発生された変換データは処理ユニット100のコンバータ132内で表され る。該コンバータ132は、例えば、ROMに記憶される変換テーブル又はマイ クロコードを用いて実施化することができる。また、コンバータ132は、PL Dのようなロジックを用いて実施化することもできる。再プログラム可能なコン バータの場合は、同様の方法を、(E)EPROM又はE-PLDのような各々の再プログラ ム可能な技術に基づいて使用することができる。 図3は本発明による他の実施例を示し、該図において、例えば“C”でプログ ラムされたソースプログラム300はステップ310において、プログラムモジ ュール、オブジェクト又はタスク固有のコードのような幾つかのコヒーレントな プログラム命令文の群に分割される。図示のものは、モジュール312及び31 6である。明確な分割は必要ではなく、ソースプログラムが既に好適なモジュー ル構造で利用可能であるかもしれないことが分かるであろう。群312及び31 6の各々に対して、図2のステップ205及び210と同様の方法により、プロ グラム群固有の仮想マシンが、対応する仮想マシン命令のセットと共に定義され る(ステップ330)。図示したものは、各仮想マシン332及び336である 。ステップ340においては、各群312及び316のプログラム命令文が各仮 想マシン332及び336の命令で表され、結果として各コードモジュール34 2 及び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は命令メモリ1 20から命令を取り込み、供給器136は該命令をマイクロコントローラコア1 14に供給する。自動的な取り込みと供給との間の結合を絶つため、当該処理ユ ニット100は、更に、前記系列の供給の間は命令メモリからの命令の取り込み を禁止するための禁止手段460を有している。 上記順次供給及び禁止は幾つかの方法で実施することができることが分かるで あろう。他の実施例においては、禁止手段460は上記禁止をマイクロコントロ ーラコア114の命令ポインタのインクリメントを妨害することにより実行する よう動作する。これには、コア114に対する小さな変更を必要とする。例えば 、コア114への追加の制御ラインにより命令カウンタの選択的禁止が可能とな り、その場合、上記禁止手段460は前記系列からの命令が供給されている場合 はインクリメントを禁止し、系列が完全に供給されたらインクリメントを可能に する。 他の実施例においては、命令取り込み部134が、マイクロコントローラコア 114の命令ポインタとは別に、自身の命令カウンタを維持する。禁止手段46 0は、何時マイクロコントローラの命令ポインタのインクリメント(もっと一般 的には変化)の結果、命令取り込み部134の命令カウンタ135が変化するか を制御する。上述したのと同様に、禁止手段460は前記系列からの命令が供給 されている場合は命令カウンタ135の変化を禁止し、系列が完全に供給された ら変化を可能にする。命令カウンタ135の変化の結果、命令取り込み部134 は、通常、命令メモリ112の該命令カウンタにより示されるアドレスから新た な命令を取り込む。有利には、仮想マシン命令のコンパクトな表現に特に鑑みて 、命令取り込み部134はメモリから数個の命令を1つの読み出し動作で取り込 むことができる(例えば、4つの1バイト命令を1つの32ビットワードとして 読み出すことができる)。このように、命令カウンタ135の全ての変化が必ず しも結果として新たな命令の実際の取り込みになる必要はない。 本発明による他の実施例においては、他の仮想マシンの仮想マシン命令で表さ れたプログラムモジュールが、例えば、ネットワークを介して又はローカルバッ クグラウンドメモリから入力される。このようなプログラムモジュールの一例は 、ジャバアプレットである。入力されたプログラムモジュールは命令メモリ12 0に記憶される。該他の仮想マシン命令のネイティブ命令への変換を可能ならし めるため、変換データも入力される。該変換データは、例えば、テーブルに基づ く変換手段用の変換テーブル、又はPLDに基づく変換手段用のE−PLDプロ グラミングデータを規定する。該変換データは、コンバータ132の他の変換手 段による後の使用のために、当該処理ユニットに記憶される。実行の間に適切な 変換手段を選択することができるように、他の各仮想命令を上記変換データに関 連付ける選択データも当該処理ユニットに記憶される。実行の間には、取り込ま れた他の仮想マシン命令に関して、上記他の変換手段は上記選択データにより示 される変換データの制御の下で動作される。 上述したように、コンバータ132は仮想マシン命令をネイティブ命令の系列 に変換するためのテーブルを有することができる。一次元テーブルを使用するこ とができ、その場合、該テーブルの各セルは、対応する1つの仮想マシン命令に 対して一連のネイティブ命令を有する。セル番号が、対応する仮想マシン命令の 値に対応してもよい。一例として、ジャバの整数加算(0x60)用のネイティ ブ命令の系列は、セル96(16進で0x60に等しい)内に配置することがで きる。ネイティブ命令の系列の長さは種々の仮想命令に対して大幅に変化するの で、好ましくは、斯かる系列は明確なセル無しに一次元テーブル内に配置され、 その場合、各系列が互いに直後に続くようにする。このような変換テーブル50 0が図5に示されており、該図では暗黙のセル境界が破線を用いて示されている 。ある仮想マシン命令に対する系列を捜すことができるように、コード索引テー ブル510を使用することができ、該索引テーブルは各仮想マシン命令(VMI 1ないしVMIN)に対して、当該変換テーブル500内の対応する系列の開始 点を示す。変換テーブル500におけるVMI3に対応するセルに関して、ネイ ティブ命令NI1ないしNIMからなる関連する系列520が図示されている。 変換に関する他の例がジャバのバイトコードbipush n(バイトnを符号拡張し 、結果をスタックの最上部に配置するために使用される)に関して示される。こ の仮想マシン命令は2つのバイト{0x16及びn}からなり、ここで、最初のバイ トは演算を定義し、第2バイトはパラメータnを提供する。該命令はネイティブ MIPS命令の下記の系列に変換することができる。この例は、仮想マシン命令がパラメータ化され、そこでは、演算コードには少な くとも1つのオペランドが続くことを示している。有利には、コンバータ132 は変換テーブル500を有し、そこでは、ネイティブ命令は完全なコードにより 、又は命令スケルトンにより、のいずれかで表される。一例として、上記命令ad di $tosp,-4(上記例の系列の最後の命令)は変数部分を有さず、したがって当 該テーブル内に4バイトエントリとして全て配置することができる。上記命令or i $a0,$0,n(上記例の系列の最初の命令)は変数部分を含んでおり、したがって 該変数部分(nである)を特定せずに当該テーブル内にスケルトンとして配置さ れる。好ましくは、命令スケルトン用の当該テーブルへのエントリは完全命令( 例えば、MIPSプロセッサの場合は4バイト)と同じ幅とし、一様なテーブル を可能とする。該テーブル(又は他の(複数の)テーブル)には、どの様にして ネイティブ命令スケルトンの特定されていない部分を埋めるべきかを示す他の情 報を配置することができる。有利には、上記の特定されていない部分を埋めるた めに、マイクロプログラミングが使用される。この場合、上記の他の情報はマイ クロコードを有するか又はマイクロコードを示す。命令スケルトンに対しては完 全ネイティブ命令と同じ構成(幅及び組立)を使用するのが有利であることが分 かるであろう。しかしながら、他の構成も同様に使用することができる。 当該仮想マシンがスタック指向のマシンである場合は、好ましくは、スタック 又は該スタックの少なくとも最上側の要素はマイクロコントローラ110のレジ スタ上にマップされるようにする。このようにして、メモリスタック(仮想マシ ンスタックを伴う)はレジスタスタックにマップされる。レジスタ$r1、$r2及び $r3が当該メモリスタックの3つの連続した要素を含んでおり、その場合に、最 初は$r1が該メモリスタックの第1の空のロケーション(該スタックの最上部の 上)に対応し、$r2が該メモリスタックの最上部を含み、$r3が該メモリスタック の第2の要素を含んでいると仮定すると、ジャバのバイトコードbipush nはネイ ティブMIPS命令の下記系列に変換することができる。 この演算の後、$r1は当該メモリスタックの最上部を含むようになる。 同様にして、整数加算(0x60)用のジャババイトコード(仮想マシン命令)は 、最初は$r1が該メモリスタックの第1の空のロケーション(該スタックの最上 部の上)に対応し、$r2が該メモリスタックの最上部を含み、$r3が該メモリスタ ッ クの第2の要素を含んでいるような同一の位置から始めて、MIPS命令の下記 系列に変換することができる。 この演算の後、$r3は当該メモリスタックの最上部を含むようになる。 上記例において、好ましくは、メモリスタックの最上部の位置(即ち、どのレ ジスタが当該メモリスタックの最上部を含むか)は、コンバータ132のレジス タ138を用いて示されるようにする。該コンバータは、レジスタスタックポイ ンタ(RSP)と呼ばれるレジスタ138を、適切なネイティブ命令を発生する ために使用する。好ましくは、ネイティブ命令のレジスタオペランドを特定する ためにマイクロプログラミングが使用される。このようにして、固定のネイティ ブ命令も可変となる。何故なら、レジスタオペランドはコンバータ132により 特定される必要があるからである。好ましくは、このようなオペランドも命令ス ケルトンを用いて変換テーブル500に記憶されるようにする。RSPが最初の 空きのレジスタを指すと仮定すると、ジャババイトコードhipush nは、対応する マイクロコードの制御の下でネイティブMIPS命令の下記の系列に変換するこ とができる。 マイクロコード命令 ここで、ftgは当該命令用の目標レジスタを示し、fa0及びfa1は当該命令用の第 1及び第2引数レジスタを各々示す。スタックの最上側の2つの要素を加算する ための、続くジャババイトコードiaddは、結果として、下記のマイクロコード及 び命令となる。 付録A、基本仮想マシン命令 演算子 形式接尾辞 演算 ADDRF P パラメータのアドレス ADDRG P グローバルのアドレス ADDRL F ローカルのアドレス CNST CSIUPFD 定数 BCOM U ビット単位補数 CVC IU 文字からの変換 CVD IF 倍からの変換 CVF D 浮動からの変換 CVI CSUD 整数からの変換 CVP U ポインタからの変換 CVS IU 短からの変換 CVU CSIP 無符号からの変換 INDIR CSIPFDB 取り込み NEG IFD 否定 ADD IUPFD 加算 BAND U ビット単位のアンド BOR U ビット単位のオア BXOR LT ビット単位の排他的オア DIV IUFD 除算 LSH IU 左シフト MOD IU モジュロ MUL IUFD 乗算 RSH IU 右シフト SUB IUPFD 減算 ASGN CSIPFDB 割り当て EQ IFD 等しいならジャンプ GE IUFD 大きい又は等しいならジャンプ GT IUFD 大きいならジャンプ LE IUFD 小さい又は等しいならジャンプ LT IUFD 小さいならジャンプ NE IUFD 等しくないならジャンプ ARG IPFDB 引き数 CALL IFDBV 関数呼び出し RET IFD 関数からの戻り JUMP V 無条件ジャンプ LABEL V 定義 ADDSP スタックポインタのインクリメント POP スタックをポップ 接尾辞 B ブール式 C 文字 D 倍 I 整数 F 浮動小数点 P ポインタ S 短 U 無符号整数 V ラベル 付録B.サンブル“C”プログラム 付録C、デフォルトの仮想マシンで表されたサンプルプログラム 付録D.スーパー命令 付録E.プログラム固有の仮想マシンで表されるサンプルプログラム
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),JP (72)発明者 ホリッセン ポーラス エム ハー エム アー オランダ国 5656 アーアー アインドー フェン プロフ ホルストラーン 6 (72)発明者 メレンブルークス フランシスカス イェ ー ハー エム オランダ国 5656 アーアー アインドー フェン プロフ ホルストラーン 6 (72)発明者 ストラフェルス ポール オランダ国 5656 アーアー アインドー フェン プロフ ホルストラーン 6 (72)発明者 トレスヘル ヨーアヒム アー オランダ国 5656 アーアー アインドー フェン プロフ ホルストラーン 6 【要約の続き】 令を、コア(114)により実行されるネイティブ命令に 変換するために使用される。

Claims (1)

  1. 【特許請求の範囲】 1.ソースプログラムを、所定のマイクロコントローラ固有の命令のセットから のネイティブ命令を実行する所定のマイクロコントローラコアを有するような 処理ユニット上で実行する方法であって、該方法が、 − 前記ソースプログラムのプログラム命令文を仮想マシン命令を有する命令 の系列で表現すると共に、該命令の系列を命令メモリに記憶する前処理ステ ップと、 − 前記命令メモリから命令を取り込むと共に、該命令メモリから取り込まれ た仮想命令を前記処理ユニットの変換手段を用いてネイティブ命令に変換し 、且つ、これらネイティブ命令を実行のために前記マイクロコントローラコ アに供給するような実行ステップと、 を有するような方法において、前記前処理ステップが、 前記ソースプログラムのプログラム命令文に対して、対応する仮想マシン命 令のセットを伴うプログラム固有の仮想マシンを、前記プログラム命令文の前 記命令の系列での表現が該プログラム命令文を表現するのにネイティブ命令の みを使用した場合に較べて前記命令メモリ内に少ない記憶空間しか必要としな いような形態で、定義し、 前記プログラム固有の仮想マシンに対して、該プログラム固有の仮想マシン の仮想マシン命令を前記マイクロコントローラコアのネイティブ命令に変換す るような関連する変換手段を定義し、 前記関連する変換手段を前記処理ユニット内で表す、 ような各ステップを有していることを特徴とするソースプログラムを処理ユニ ット上で実行する方法。 2.請求項1に記載のソースプログラムを処理ユニット上で実行する方法におい て、前記前処理ステップが、 − 前記ソースプログラム内のプログラム命令文の複数の群を識別し、 − これらプログラム命令文の群の各々に対して、 プログラム群固有の仮想マシンを対応する仮想マシン命令のセットと共 に定義し、 前記プログラム群固有の仮想マシンに対して、仮想マシン命令を前記マ イクロコントローラコアのネイティブ命令に変換するような関連する変換 手段を発生し、 前記関連する変換手段を前記処理ユニット内で表し、 前記処理ユニット内に、発生された各仮想マシン命令を前記群固有の変 換手段に関連付ける選択データを記憶する、 ような各ステップを有し、前記実行ステップが、取り込まれた命令に対して前 記選択データにより示される前記関連する変換手段を選択するステップを有し ていることを特徴とする方法。 3.請求項1に記載の方法において、該方法が、 他の仮想マシンの仮想マシン命令を含む命令を有するような命令モジュール を入力すると共に、前記処理ユニットの他の変換手段が前記他の仮想マシン命 令をネイティブ命令に変換することができるようにする変換データを入力し、 前記命令モジュールを前記命令メモリに記憶し、 前記変換データを前記処理ユニットに記憶し、 前記他の仮想マシン命令の各々を前記変換データに関連付ける選択データを 前記処理ユニットに記憶する、 ような各ステップを有し、前記実行ステップが、 取り込まれた他の仮想マシン命令に対して、前記選択データにより示される 前記関連する変換データを選択し、 前記他の変換手段を前記選択された変換データの制御の下で動作させる、 ような各ステップを有していることを特徴とする方法。 4.仮想マシンの仮想マシン命令と呼ぶ命令を実行する処理ユニットであって、 所定のマイクロコントローラ固有の命令のセットからの、前記仮想マシン命 令とは異なるネイティブ命令を実行する所定のマイクロコントローラコアと、 前記仮想マシン命令の少なくとも1つを含む命令を記憶する命令メモリと、 前記命令メモリから取り込まれた仮想マシン命令を、前記マイクロコントロ ーラコアにより実行するための少なくとも1つのネイティブ命令に変換する変 換手段を有するコンバータと、 を有するような処理ユニットにおいて、 前記コンバータが複数の異なる仮想マシンに対して前記変換を実行するよう に動作することを特徴とする処理ユニット。 5.請求項4に記載の処理ユニットにおいて、前記変換手段が再プログラム可能 な形式のものであることを特徴とする処理ユニット。 6.請求項4に記載の処理ユニットにおいて、前記コンバータが前記複数の仮想 マシンの各々に対して、対応する仮想マシンの仮想マシン命令を変換するため の変換手段を有していることを特徴とする処理ユニット。 7.請求項6に記載の処理ユニットにおいて、該処理ユニットが前記命令メモリ 内の少なくとも2つの分離された群のロケーションを各変換手段に関連付ける 選択データを有し、前記コンバータが前記命令メモリ内のロケーションから取 り込まれた命令を前記選択データに基づいて前記変換手段に選択的に指向させ ることを特徴とする処理ユニット。 8.請求項4に記載の処理ユニットにおいて、該処理ユニットは、前記ネイティ ブマシンと前記仮想マシンとの間及び/又は異なる仮想マシンの間の区別をす るために、命令に対してメモリから関連する選択データを取り込むように動作 し、前記コンバータが前記取り込まれた命令を前記選択データに基づいて変換 手段に選択的に指向させる検出器を有していることを特徴とする処理ユニット 。 9.請求項4に記載の処理ユニットにおいて、前記コンバータは1つの仮想マシ ン命令を1つの対応するネイティブ命令に変換するように動作し、前記仮想マ シン命令は対応するネイティブ命令よりも前記命令メモリ内に要する記憶空間 に関して一層コンパクトにコード化されていることを特徴とする処理ユニット 。 10.請求項4に記載の処理ユニットにおいて、前記コンバータは1つの仮想マシ ン命令を複数のネイティブ命令の所定の系列に変換するように動作し、該処理 ユニットが、 前記コンバータと前記マイクロコントローラコアとの間に結合されて、前記 ネイティブ命令の系列を前記マイクロコントローラコアに順次供給するシーケ ンサと、 上記供給の間に、前記命令メモリからの命令の取り込みを禁止する禁止手段 と、 を有することを特徴とする処理ユニット。 11.請求項10に記載の処理ユニットにおいて、前記禁止手段が前記禁止を前記 マイクロコントローラコアの命令ポインタのインクリメントを妨害することに より実行するよう動作することを特徴とする処理ユニット。 12.請求項11に記載の処理ユニットにおいて、該処理ユニットは、当該命令取 り込み部の命令カウンタの変化に応答して前記命令メモリから命令を取り込む 命令取り込み部を有し、前記命令カウンタは前記マイクロコントローラコアの 命令ポインタの変化に応答して異なる値に設定され、前記禁止手段は前記命令 カウンタの値の変化を妨害することにより前記禁止を実行するよう動作するこ とを特徴とする処理ユニット。
JP52133799A 1997-10-02 1998-09-21 可変命令セットコンピュータ Expired - Fee Related JP4018158B2 (ja)

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 true JP2001508908A (ja) 2001-07-03
JP4018158B2 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)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002215387A (ja) * 2001-01-22 2002-08-02 Mitsubishi Electric Corp 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置

Families Citing this family (35)

* Cited by examiner, † Cited by third party
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
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
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
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 株式会社東芝 命令コード変換装置及び情報処理システム
EP1197847A3 (en) 2000-10-10 2003-05-21 Nazomi Communications Inc. Java hardware accelerator using microcode engine
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 データ処理装置
JP3997158B2 (ja) * 2000-12-06 2007-10-24 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ コードビットグループに各々がポインタを持つサブチェーンを割り当てることによる入力情報項目の可変長エンコード方法、並びにエンコード及び/又は双方向デコード装置
US6789187B2 (en) * 2000-12-15 2004-09-07 Intel Corporation Processor reset and instruction fetches
US7711763B2 (en) 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
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
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7096466B2 (en) * 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of 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
US8769508B2 (en) * 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
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
AU2002329560A1 (en) * 2001-09-25 2003-04-07 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)

* Cited by examiner, † Cited by third party
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
WO1997027537A2 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
US6026485A (en) * 1996-01-24 2000-02-15 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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002215387A (ja) * 2001-01-22 2002-08-02 Mitsubishi Electric Corp 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置

Also Published As

Publication number Publication date
EP0941508A1 (en) 1999-09-15
JP4018158B2 (ja) 2007-12-05
WO1999018485A2 (en) 1999-04-15
EP0941508B1 (en) 2007-01-17
US6292883B1 (en) 2001-09-18
DE69836902T2 (de) 2007-10-18
WO1999018485A3 (en) 1999-07-01
DE69836902D1 (de) 2007-03-08

Similar Documents

Publication Publication Date Title
JP2001508908A (ja) 可変命令セットコンピュータ
US6996703B2 (en) Processing device for executing virtual machine instructions
US8473718B2 (en) Java hardware accelerator using microcode engine
US8185882B2 (en) Java virtual machine hardware for RISC and CISC processors
JP3816961B2 (ja) バーチャルマシン命令を処理するためのデータ処理装置
US8533433B2 (en) Microprocessor for executing byte compiled java code
WO2000034844A9 (en) Java virtual machine hardware for risc and cisc processors
KR100258650B1 (ko) 에뮬레이션 문맥 스위치 저장 및 복구를 수행하는 방법 및 프로세서
KR20040048246A (ko) 자바 실행 장치 및 자바 실행 방법
US8769508B2 (en) Virtual machine hardware for RISC and CISC processors
US7225436B1 (en) Java hardware accelerator using microcode engine
EP0742513B1 (en) A processor which returns from subroutine at high speed and a program translating apparatus which generates machine programs that makes a high-speed return from a subroutine
US5758140A (en) Method and system for emulating instructions by performing an operation directly using special-purpose register contents
US5732235A (en) Method and system for minimizing the number of cycles required to execute semantic routines
KR100267434B1 (ko) 제 1 처리 환경내에서 제 1 명령어를 에뮬레이션 환경내에서의제 2 명령어 처리 개시에 응하여 처리하는 방법 및 시스템
US20050216712A1 (en) Compare and branch mechanism
Cooper The direct execution of intermediate languages on an Eclipse computer

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