JP2001519955A - 先進のプロセッサのための変換メモリ保護装置 - Google Patents

先進のプロセッサのための変換メモリ保護装置

Info

Publication number
JP2001519955A
JP2001519955A JP51207299A JP51207299A JP2001519955A JP 2001519955 A JP2001519955 A JP 2001519955A JP 51207299 A JP51207299 A JP 51207299A JP 51207299 A JP51207299 A JP 51207299A JP 2001519955 A JP2001519955 A JP 2001519955A
Authority
JP
Japan
Prior art keywords
target
instruction
host
memory
address
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
JP51207299A
Other languages
English (en)
Other versions
JP3621116B2 (ja
Inventor
ケリー,エドマンド・ジェイ
クメリク,ロバート・エフ
ウィング,マルコム・ジェイ
Original Assignee
トランスメタ・コーポレーション
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 トランスメタ・コーポレーション filed Critical トランスメタ・コーポレーション
Publication of JP2001519955A publication Critical patent/JP2001519955A/ja
Application granted granted Critical
Publication of JP3621116B2 publication Critical patent/JP3621116B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • 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/3802Instruction prefetching
    • G06F9/3812Instruction prefetching with instruction modification, e.g. store into instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Executing Machine-Instructions (AREA)
  • Storage Device Security (AREA)

Abstract

(57)【要約】 ホスト・プロセッサによる実行のために、ホスト命令に変換されたターゲット命令を含むメモリ・アドレスへの書き込みの試行に応答する方法であって、ホスト命令に変換されたターゲット命令を含むメモリ・アドレスをマークするステップと、メモリ・アドレスに対する書き込みが試行されたときにマークされたメモリ・アドレスを検出するステップと、メモリ・アドレスに関連する変換が、更新される前に、利用されないことが確認されるまで、メモリ・アドレスにおけるターゲット命令を保護することによって、マークされたメモリ・アドレスの検出に応答するステップとを含む。

Description

【発明の詳細な説明】先進のプロセッサのための変換メモリ保護装置 発明の背景発明の分野 本発明は、コンピュータ・システムに関し、更に特定すれば、メモリにおいて 第1命令セットの命令が上書きされる際に、第1命令集合の命令から別の命令セ ットに既に変換されている命令の誤使用を防止する方法および装置に関するもの である。従来技術の歴史 特定のマイクロプロセッサ・ファミリを中心に設計された、コンピュータ上で 走るアプリケーション・プログラムは、数千種にも上る。既存のプログラムでは 、カリフォルニア州サンタクララのIntel Corporation(イン テル社)が設計し製造する、”X86”ファミリ・マイクロプロセッサ(Int el8088、Intel8086、Intel80186、Inte1l80 286、i386、i486、および種々のPentiumマイクロプロセッサ の発展型を含む:IntelおよびPentiumは登録商標)を用いたコンピ ュータ(IBM互換パーソナル・コンピュータと一般的に呼ばれている)上で走 るように設計されたものの数が最も多い。他のプロセッサ・ファミリを用いたコ ンピュータ上で走るように設計された他のプログラムの例も多くある。これらの コンピュータ上で走る多くのアプリケーション・プログラムがあるので、かかる コンピュータ、特にX86プログラムを処理するように設計されたプログラムに おいて使用可能なマイクロプロセッサの市場は膨大である。マイクロプロセッサ の市場は大きいだけでなく、非常に収益性が高い。 多数のアプリケーション・プログラムを走らせることができるマイクロプロセ ッサの市場は大きく収益性が高いが、競争力のある新たなマイクロプロセッサを 設計することは非常に難しい。例えば、X86プロセッサ・ファミリは長年にわ たって存在し続け、これらのプロセッサは販売および使用されたコンピュータの 大部分に含まれるが、X86のプログラムを走らせることができる競合プロセッ サで成功したものは殆どない。その理由は多くある。 成功するためには、このプロセッサ・ファミリに設計されたプログラム全て( オペレーティング・システムおよび旧来のプログラムも含む)を、しかも既存の プロセッサと同じくらい速く走らせることができるマイクロプロセッサでなけれ ばならず、更に既存のプロセッサよりもコストを抑えなければならない。加えて 、経済的に成功するためには、新たなマイクロプロセッサは、これらの条件の少 なくとも1つにおいて、既存のプロセッサよりも勝っていることによって、既存 の認められているプロセッサを差し置いて新たなプロセッサを選択する理由を、 購入者に与えなければならない。 最新のマイクロプロセッサと同じ位速くマイクロプロセッサを走らせるのは困 難であり、かつ費用もかかる。プロセッサは、ロード、シフト、加算、格納のよ うな原始な動作および同様の低レベルの動作によって命令を実行し、アプリケー ション・プログラムによって与えられるいずれの命令を実行する際にも、このよ うな原始な命令にのみ応答する。例えば、X86のような、命令が比較的高いレ ベルで実行すべきプロセスを指定することができる、複雑命令セット・コンピュ ータ(CISC:complicated instruction set computer)の命令を走らせるよ うに設計されたプロセッサは、従来よりリード・オンリ・メモリ(ROM)を含 み、その中にいわゆるマイクロ命令を格納している。各マイクロ命令は、一連の 原始命令を含み、これらを連続して走らせることにより、高いレベルのCISC 命令によって命令された結果がもたらされる。典型的に、"add A to B"(AをB に加算する)というCISC命令がデコードされると、この"add A to B"命令の 機能を実行するマイクロ命令が格納されているROM内のアドレスを参照する。 このマイクロ命令がロードされ、その原始命令を順次走らせることによって、"a dd A to B"命令を実行する。このようなCISCコンピュータでは、マイクロ命 令内の原始動作は、プログラムの実行中決して変化させることはできない。各C ISC命令は、命令をデコードし、マイクロ命令をアドレスしてこれを取り込み 、当該マイクロ命令内に与えられている順序で一連の原始動作を走らせることに よ ってのみ、走らせることができる。マイクロ命令を走らせる毎に、同じシーケン スが発生しなければならない。 X86アプリケーションを走らせるための先進のプロセッサは、多数の技術を 利用し、可能な限り高速に、しかも経済的に低い価格で処理を行おうとしている 。プロセッサが走ることができる速度を加速させるための公知のハードウエア技 術を実装する新たなプロセッサは、いずれも処理ハードウエアの洗練性を高める 必要がある。これには、ハードウエア・コストの増大が必要となる。 例えば、複数の処理チャネルを用いて一度に2つ以上の動作を実行するスーパ ースカラー・マイクロプロセッサには、多数の追加要件がある。最も基本的なレ ベルでは、単純なスーパースカラー・マイクロプロセッサは、各アプリケーショ ン命令をマイクロ命令にデコードし、当該アプリケーション命令の機能を実行す ることができる。そこで、単純なスーパースカラー・マイクロプロセッサは、2 つのマイクロ命令が同じハードウエア資源を要求せず、一方のマイクロ命令の実 行が他方のマイクロ命令の処理結果に依存しないのであれば、これら2つのマイ クロ命令を一緒に走らせるようにスケジューリングを行う。 更に進んだスーパースカラー・マイクロプロセッサには、典型的に、各アプリ ケーション命令を一連の原始命令にデコードし、これらの原始命令の順序を変更 し、最も効率的な実行順序でスケジューリングを行うことを可能にするものがあ る。これには、個々の原始動作各々をアドレスし、取り込むことが必要となる。 順序変更を行うためには、プロセッサは、他の原始命令から生ずるデータを必要 とする原始命令を、他の原始命令が必要なデータを生成した後に、実行すること を保証できなければならない。このようなスーパースカラー・マイクロプロセッ サは、一緒に走らせる2つの原始命令が同じハードウエア資源を要求しないこと を保証しなければならない。また、このようなプロセッサは、条件付き分岐を解 決し、その後に分岐動作の効果が完了することを可能にしなければならない。 このように、スーパースカラー・マイクロプロセッサは、複数の原始命令の関 係を互いに比較し、これら原始命令のシーケンスを並び替え、あらゆる命令をス ケジューリングして実行するために、広範なハードウエアを必要とする。処理チ ャネル数が増大するに連れて、これらスーパースカラー加速技術を達成するため のハードウエアの量およびコストはほぼ4倍に増大する。これらのハードウエア 要件は全て、関連する回路の複雑化および高コスト化を招く。マイクロ命令を扱 う際と同様、アプリケーション命令を実行する毎に、スーパースカラー・マイク ロプロセッサは、その比較的複雑なアドレシング・ハードウエアおよび取り込み のためのハードウエアを用いてこれらの原始命令の各々を取り込まなければなら ず、他の原始命令およびハードウエアの使用状況に基づいてこれらの原始命令の 並び替えおよび再スケジュールを行わなければならず、更に、再スケジュールし た原始命令全てを実行しなければならない。各アプリケーション命令を実行する 度に、ハードウエア・シーケンス全体でこれを走らせなければならないので、ス ーパースカラー・プロセッサがその命令を実行可能な速度は限定される。 更に、これら種々のハードウエア技術が処理速度を高めるとしても、このよう なハードウエアを備えるために伴う複雑性のために、このようなマイクロプロセ ッサの大幅なコスト上昇を招くことになる。例えば、インテルi486DX4プ ロセッサは、約150万個のトランジスタを使用する。Intel Penti umのような基本的なスーパースカラー・マイクロプロセッサにおいて、2つの チャネルによって命令を処理するために必要な依存性およびスケジューリングの チェックを行うために必要なハードウエアを追加するには、300万個以上のト ランジスタの使用が必要となる。異なるターゲット命令から派生する原始命令間 の並び替えを行い、思索的実行(speculative execution)を行い、レジスタの名 称変更を可能とし、分岐予測を行うためにハードウエアを追加すると、トランジ スタ数は、Intel Pentium Pro(登録商標)では、600万個 以上にも増大する。したがって、動作速度を高めるためにハードウエアを追加す る毎に、最新のマイクロプロセッサではトランジスタ数が激増したことがわかる 。 これら公知の技術を用いても、既存のマイクロプロセッサよりも高速のマイク ロプロセッサは生産することができない場合もある。何故なら、製造者は既存の マイクロプロセッサの動作を加速させる公知の技術で、経済的に実現可能なもの を利用するからである。その結果、より速いプロセッサの設計は非常に困難であ りしかも費用がかかる作業となる。 プロセッサのコスト削減も非常に困難である。先に例示したように、十分な能 力のあるプロセッサを生産するハードウエア加速技術は非常に高価である。新た なプロセッサを設計しようとする者は、ハードウエアを生産する設備を獲得しな ければならない。このような設備の獲得は非常に困難である。何故なら、チップ 製造者は典型的に少量のデバイスに資産を費やすことはない。チップ製造設備を 生産するために必要な資本投下は非常に大きく、殆どの会社に可能な範囲を超え ている。 競合プロセッサと少なくとも同じ位速く、あるプロセッサ・ファミリに設計さ れたアプリケーション・プログラムの全てを走らせる新たなプロセッサを設計す ることができる者がいるとしても、競合プロセッサの価格は、十分な利益を含ん でおり、いずれの競合も大幅な値下げに直面することは確実である。 ハードウエアの複雑度を高めることによって競争力のあるプロセッサを設計す ることは非常に困難であるが、特定のマイクロプロセッサ・ファミリ(ターゲッ ト・マイクロプロセッサ)に設計されたアプリケーション・プログラム(ターゲ ット・アプリケーション・プログラム)を走らせる他の方法として、ソフトウエ アで他のより速いマイクロプロセッサ(ホスト・マイクロプロセッサ)上でター ゲット・マイクロプロセッサをエミュレートすることが行われてきた。これは、 格段に安価にこれらのプログラムを走らせる方法である。何故なら、より速いマ イクロプロセッサ上でアプリケーション・プログラムを走らせる、ある形態のエ ミュレーション・ソフトウエアを追加しさえすればよいからである。エミュレー タ・ソフトウエアは、ターゲット・プロセッサ・ファミリに書かれたアプリケー ション・プログラムのターゲット命令を、ホスト・プロセッサによって実行可能 なホスト命令に変更する。これら変更した命令を、より速いホスト・マイクロプ ロセッサ上のオペレーティング・システムの制御の下で走らせる。 ターゲット・コンピュータのプロセッサよりも速いプロセッサを有するホスト ・コンピュータ上で、ターゲット・アプリケーションを走らせることを可能にす る設計には、これまでにも多種多様なものがある。一般に、エミュレーション・ ソフトウエアを用いてターゲット・プログラムを実行するホスト・コンピュータ は、縮小命令セット(RISC:reduced instruction set)マイクロプロセッ サを利用する。何故なら、RISCプロセッサは、理論上他の形式のプロセッサ よりも単純で、その結果より速く走らせることができるからである。 しかしながら、エミュレータ・ソフトウエアを走らせるRISCコンピュータ ・システムは多くの場合X86(またはその他の)プログラムを走らせることが できるが、これらがこれを行うレートは、通常、技術的現状のX86コンピュー タ・システムが同じプログラムを走らせるレートよりもはるかに遅い。更に、こ れらのエミュレータ・プログラムは、入手可能なターゲット・プログラムの全て または大多数を走らせることができる訳ではない。 エミュレータ・プログラムが、ターゲット・マイクロプロセッサ程速くターゲ ット・プログラムを走らせることができない理由は、非常に複雑であり、異なる エミュレーション動作の理解がある程度必要となる。図1は、複数の異なる種別 のマイクロプロセッサがターゲット・アプリケーション・プログラムを実行する 異なる方法を表す一連の図を含む。 図1(a)では、IntelX86マイクロプロセッサのような典型的なCI SCマイクロプロセッサが、当該ターゲット・プロセッサ上で走らせるために設 計されたターゲット・アプリケーション・プログラムを走らせる場合を示す。図 に見られるように、コンピュータのハードウエアへのアクセスを得るためのイン ターフェースを与えるように設計されたCISCオペレーティング・システム( X86コンピュータと共に用いられる、MS DOS、Windows3.1、 WindowsNT、およびOS/2のような)を用いて、CISCプロセッサ 上でアプリケーションを走らせる。通常、アプリケーション・プログラムの命令 は、オペレーティング・システムによって与えられるアクセスのみを通じて、コ ンピュータのデバイスを利用するように選択される。したがって、オペレーティ ング・システムは、コンピュータのメモリおよび種々の入出力デバイスへのアク セスをアプリケーションに許可する操作を処理する。ターゲット・コンピュータ は、オペレーティング・システムが認識するメモリおよびハードウエアを含み、 ターゲット・アプリケーションからオペレーティング・システムへのコールによ って、オペレーティング・システムのデバイス・ドライバは、定義されたターゲ ット・コンピュータのデバイスを用いて、予想される動作を行わせる。アプリケ ーションの命令は、プロセッサ上で実行するが、この場合、当該プロセッサが実 行可能 な動作(マイクロコード、またはマイクロコードがアセンブルされる、更に原始 な動作で実体化する)にこれらは変更される。前述のように、複雑なターゲット 命令を実行する毎に、命令は、マイクロコードとして(または同じ原始動作セッ トとして)格納されている同じサブルーチンをコールする。同じサブルーチンが 常に実行される。プロセッサがスーパースカラーである場合、ターゲット命令を 実行するためのこれら原始動作は、多くの場合プロセッサによって並び替えが行 われ、再スケジューリングが行われ、前述と同様に種々の処理チャネルを用いて 実行可能となる。しかしながら、依然としてサブルーチンを取り込み実行する。 図1(b)は、図1(a)のCISCプロセッサ上で走らせるように設計され た、同じターゲット・アプリケーション・プログラムを走らせる、Apple Macintoshコンピュータにおいて用いられているPowerPCマイク ロプロセッサのような典型的なRISCマイクロプロセッサを表す。図に見られ るように、当該ターゲット・アプリケーションが発生するコールの一部に応答す る、少なくとも部分的なターゲット・オペレーティング・システムを用いて、ホ スト・プロセッサ上でターゲット・アプリケーションを実行する。通常、これら は、ディスプレイ上にグラフィカル・インターフェースを備えるために用いられ る、ターゲット・オペレーティング・システムのアプリケーション状部分へのコ ール、および概してアプリケーション状の短いユーティリティ・プログラムであ る。ターゲット・アプリケーションおよびターゲット・オペレーティング・シス テムのこれらの部分は、SoftPC(登録商標)のようなソフトウエア・エミ ュレータによって変換される。ソフトウエア・エミュレータは、ターゲット・ア プリケーション・プログラムおよびアプリケーション状ターゲット・オペレーテ ィング・システム・プログラムによって与えられる命令を分解し、ホスト・プロ セッサおよびそのホスト・オペレーティング・システムが実行可能な命令にする 。ホスト・オペレーティング・システムは、RISCコンピュータのメモリおよ び入出力ハードウエアへのアクセスが得られるインターフェースを提供する。 しかしながら、ホストRISCコンピュータ内のホストRISCプロセッサお よびそれと連動するハードウエア・デバイスは、通常、ターゲット・アプリケー ションの設計対象としたプロセッサと連動するデバイスとは非常に異なっている 。 更に、ターゲット・アプリケーション・プログラムによって与えられる種々の命 令は、ターゲット・コンピュータの種々の部分にアクセスする際に、ターゲット ・オペレーティング・システムのデバイス・ドライバと協同するように設計され たものである。その結果、ターゲット・アプリケーション・プログラムの命令を 、ホスト・オペレーティング・システムが利用可能な原始ホスト命令に変換する エミュレーション・プログラムは、何らかの方法で、ターゲット・コンピュータ 内のハードウエア・デバイスを動作させるように設計された動作を、ホスト・シ ステムのハードウエア・デバイスが実現可能な動作にリンクしなければならない 。多くの場合、このために、エミュレータ・ソフトウエアは、ターゲット・アプ リケーションの命令に応答する仮想デバイスを作成し、ホスト・システムが実行 できない命令を実行するようにしなければならない。何故なら、ターゲット・デ バイスは、ホスト・コンピュータのものではないからである。時として、エミュ レータは、これら仮想デバイスからホスト・オペレーティング・システムを通じ て、存在するがホスト・オペレーティング・システムによって異なる方法でアド レスされるホスト・ハードウエア・デバイスに至るリンクを作成しなければなら ない場合もある。 このようにターゲット・プログラムを実行すると、多くの理由のため、比較的 遅く走ることになる。第1に、ターゲット・アプリケーション・プログラムおよ びターゲット・オペレーティング・システムからの各ターゲット命令は、エミュ レータによって、ホスト・プロセッサが用いるホストの原始機能に変換しなけれ ばならない。ターゲット・アプリケーションがX86のようなCISCマシンに 設計されたものである場合、ターゲット命令の長さは様々に変化し非常に複雑で あるので、これらをホストの原始命令に変換することは多くの混乱を伴う。元の ターゲット命令を最初にデコードし、当該ターゲット命令を構成する原始ホスト 命令のシーケンスを決定する。次いで、原始ホスト命令の各シーケンスのアドレ ス(または複数のアドレス)を決定し、原始ホスト命令の各シーケンスを取り込 み、これら原始ホスト命令を順番に、または順序を外して実行する。命令を実行 する毎に、ターゲット・アプリケーションおよびオペレーティング・システム命 令を、ホスト・プロセッサが理解するホスト命令に変更するために、エミュレー タに必要な膨大な追加の工程を実施しなければならず、エミュレーションのプロ セスは遅くなる。 第2に、多くのターゲット命令は、ホスト・コンピュータでは使用できない、 ターゲット・コンピュータのハードウエアにおいて、特定の方法で機能する特定 のハードウエア・デバイスが行う動作への参照を含む。この動作を実行するため に、エミュレーション・ソフトウエアは、既存のホスト・オペレーティング・シ ステムを通じて、ホスト・コンピュータのハードウエア・デバイスにソフトウエ アによる接続を行わなければならないか、あるいはエミュレーション・ソフトウ エアが仮想ハードウエア・デバイスを備えなければならない。他のコンピュータ のハードウエアをソフトウエアでエミュレートすることは、非常に困難である。 エミュレーション・ソフトウエアは、ホスト・オペレーティング・システムに対 するターゲット・アプリケーション・コールの各々に対して、仮想デバイスを生 成しなければならず、更にこれら仮想デバイスの各々が実際のホスト・デバイス にコールを与えなければならない。ハードウエア・デバイスをエミュレートする には、ターゲット命令がデバイスを使用しようとする場合に、当該命令が要求す る仮想デバイスを表すコードをメモリから取り込み、これを走らせて当該デバイ スを実現しなければならない。前述の問題を解決するこれらの方法は、いずれも 、命令のシーケンスの実行に、更に一連の動作を追加することになる。 エミュレーションの問題を複雑化するのは、ターゲット・アプリケーションが 様々な例外を発生し、コンピュータ・システムが動作するために、ターゲット・ コンピュータのハードウエアおよびターゲット・オペレーティング・システムが これを実行しなければならないためである。ターゲット・コンピュータの動作中 にターゲットの例外が発生した場合、例外の時点におけるコンピュータの状態を セーブしなければならない。通常、これを行うには、この動作を達成するための マイクロコード・シーケンスをコールする。更に、正しい例外ハンドラを検索し なければならず、例外を処理しなければならず、更にプログラムを継続するため に、プログラム内の正しい地点を発見しなければならない。時として、このため に、例外が発生した時点、および例外ハンドラが与えた分岐が行われた他の時点 のターゲット・コンピュータの状態にプログラムを逆戻りさせる必要性がある。 いずれの場合でも、これらの動作を行うために必要なターゲット・コンピュータ のハードウエアおよびソフトウエアを、何らかの方法でエミュレーションのプロ セス内に備えなければならない。適正な実行のためには、このような例外のいず れの時点においても、正しいターゲットの状態が得られなければならないので、 エミュレータは、これらの例外に正しく応答できるように、常にこの状態を精度 高く追跡することを強いられる。従来技術では、このために、ターゲット・アプ リケーションが与える順序で各命令を行う必要があった。何故なら、正しいター ゲットの状態が維持できるのは、この方法を置いて他になかったからである。 更に、従来技術のエミュレータは、その他の理由でも、ターゲット・アプリケ ーションの実行順序を常に維持する必要があった。ターゲット命令は2つの種別 、即ち、メモリに影響を与えるものおよびメモリ・マップ入出力(I/O)デバ イスに影響を与えるものとすることができる。ある動作がメモリに影響を与える のか、またはメモリ・マップI/Oデバイスに影響を与えるのかについては、命 令を実行してみないことには、他に知る方法がない。命令がメモリ上で動作する 場合、最適化および並び替えが可能であり、システム動作の高速化に非常に役立 つ。しかしながら、I/Oデバイスに影響を与える動作は、ステップを全く除去 せずに、動作がプログラムされた順序で正確に実施しなければならない。さもな いと、I/Oデバイスの動作に何らかの悪影響を及ぼす可能性がある。例えば、 特定のI/O動作には、I/Oレジスタをクリアする結果をもたらすものもあり 得る。動作が順序通りには行われず、未だ必要な値がレジスタからクリアされた 場合、その動作の結果は、ターゲット命令が命令した動作とは異なるものとなる 可能性がある。メモリをメモリ・マップI/Oから区別する手段がないと、全て の命令を、それらがメモリ・マップI/Oに影響を与えるかのように扱うことが 必要となる。これは、達成可能な最適化を厳しく制限する。従来技術のエミュレ ータは、アドレスされたメモリの特性(nature)を検出する手段、およびこのよう な障害から復元する手段の双方を欠いているので、各動作がメモリ・マップI/ Oに影響を与えるかのように、ターゲット命令全体を通じて順次進んでいく必要 がある。これによって、ホスト命令を最適化する可能性が著しく阻害される。 従来技術のエミュレータのホスト・コードを最適化する能力を妨げる他の問題 に、自己変更コード(self-modifying code)によって発生するものがある。ター ゲット命令がホスト命令のシーケンスに変摸され、次いで書き戻されて、元のタ ーゲット命令が変化した場合、ホスト命令はもはや有効ではない。その結果、エ ミュレータは、格納(store)がターゲット・コード・エリアに対するものか否か について判定を行うために、常にチェックしていなければならない。これらの問 題全てのために、この種のエミュレーションは、ターゲット・プロセッサ上でタ ーゲット・アプリケーションを走らせるよりも、大幅に遅くなる。 図1(b)に示す種類のエミュレーション・ソフトウエアの他の例が、”Tali sman:Fast and Accurate Multicomputer Simulation”(タリスマン:高速で高精 度のマルチコンピュータ・シミュレーション)(R.C.Bedichek,Laboratory fo r Computer Sciences,Massachusetts Institute of Technology(R.C.ベデ ィチェック、コンピュータ科学研究所、マサチューセッツ工科大学)と題する論 文に記載されている。これは、更に複雑な変換の例であり、これは完全な開発シ ステムをエミュレートし、開発用ターゲット・オペレーティング・システムを走 らせることができる。タリスマンは、ホストUNIXオペレーティング・システ ムを用いている。 図1(c)に、他のエミュレーションの一例を示す。この場合、元のMach intoshコンピュータに用いられていたMotorola68000ファミ リCISCプロセッサ上で走るように設計されたターゲット・アプリケーション ・プログラムを走らせる、Apple Machintoshコンピュータに用 いられているPowerPCマイクロプロセッサを示している。この種の構成は 、Appleの旧来のプログラムを、RISCプロセッサを有するMachin toshコンピュータ上で走らせるために必要であった。図に見られるように、 少なくとも部分的にターゲット・オペレーティング・システムを用いて、ホスト ・プロセッサ上でターゲット・アプリケーションを走らせ、ターゲット・オペレ ーティング・システムのアプリケーション状部分に応答する。ソフトウエア・エ ミュレータには、ターゲット・アプリケーション・プログラムやアプリケーショ ン状ターゲット・オペレーティング・システム・プログラムが与える命令を、ホ スト・プロセッサやそのホスト・オペレーティング・システムが実行可能な命令 に 分解するものがある。ホスト・オペレーティング・システムは、インターフェー スを与え、これを通じてホスト・コンピュータのメモリおよび入出力ハードウエ アへのアクセスが得られるようにしている。 この場合も、ホストRISCコンピュータにおけるホストRISCプロセッサ およびそれと連動するデバイスは、MotorolaのCISCプロセッサと連 動するデバイスとは全く異なり、種々のターゲット命令は、ターゲット・コンピ ュータの種々の部分にアクセスする際に、ターゲットCISCオペレーティング ・システムと協同するように設計されている。その結果、エミュレーション・プ ログラムは、ターゲット・コンピュータにおけるハードウエア・デバイスを動作 させるように設計された動作を、ホスト・システムのハードウエア・デバイスが 実現可能な動作にリンクしなければならない。このために、エミュレータは、タ ーゲット・アプリケーションの命令に応答するソフトウエアの仮想デバイスを作 成し、これらの仮想デバイスから、ホスト・オペレーティング・システムを通じ て、存在するがホスト・オペレーティング・システムによって異なる方法でアド レスされるホスト・ハードウエア・デバイスへのリンクを作成する必要がある。 このようにして走らせるターゲット・ソフトウエアは、図1(b)のエミュレ ーションが走るのが遅いのと同じ理由で、比較的走るのが遅い。第1に、ターゲ ット・アプリケーションおよびターゲット・オペレーティング・システムからの 各ターゲット命令は、当該命令を取り込むことによって変換しなければならず、 更に、命令を実行する毎に、当該命令から派生するホスト原始機能の全てを順次 走らせなければならない。第2に、エミュレーション・ソフトウエアは、ホスト ・オペレーティング・システムへのターゲット・アプリケーションのコール毎に 、仮想デバイスを生成しなければならない。更に、これら仮想デバイスの各々は 、実際のホスト・デバイスへのコールを与えなければならない。第3に、エミュ レータは、メモリ・マップI/Oデバイスに向けられた命令、またはそれが復元 することができない例外を生成する危険を処理するために、全ての命令を保存的 に処理しなければならない。最後に、エミュレータは、常に正しいターゲット状 態を維持し、格納動作は、予め当該格納がターゲット・コード・エリアに対する ものか否かについて判定するために、常にチェックしなければならない。これら の 要件全ては、エミュレータのホスト・プロセッサ上で走るコードの重要な最適化 を行う能力を奪い取り、ターゲット・プロセッサ上でターゲット・アプリケーシ ョンを走らせるよりも、この種のエミュレータの速度を大幅に低下させる。技術 的現状のプロセッサの1/4未満のエミュレーション・レートは非常に良好と考 えられる。概して、このために、この種のエミュレーション・ソフトウエアが、 他のプロセッサに設計されたアプリケーションを走らせる機能は有用ではあるが 主要ではない使用に追いやられている。 図1(d)では、ホスト・プロセッサ上でターゲット・アプリケーション・プ ログラムをエミュレーションし、非常に限られた一連のターゲット・アプリケー ションに対して比較的良好な処理能力(performance)を与える、特定の方法を示 す。ターゲット・アプリケーションは、命令をエミュレータに与え、エミュレー タはこれらの命令を、ホスト・プロセッサおよびホスト・オペレーティング・シ ステムに対する命令に変更する。ホスト・プロセッサは、Digital Eq uipment Corporation(ディジタル エクイップメント社) のAlpha RISCプロセッサであり、ホスト・オペレーティング・システ ムは、Microsoft NTである。このシステムによって走らせることが できるターゲット・アプリケーションは、Windows WIN32sに準拠 するオペレーティング・システムを有するターゲットX86プロセッサによって 実行されるように設計された32ビット・アプリケーションのみである。ホスト およびターゲット・オペレーティング・システムは殆ど同一であり、これら同じ 命令を処理するように設計されているので、エミュレータ・ソフトウエアは命令 を非常に簡単に変換することができる。更に、ホスト・オペレーティング・シス テムは、既に、ターゲット・アプリケーションが発生する同じコールに応答する ように設計されているので、仮想デバイスの生成は大幅に減少する。 これは技術的にホスト・プロセッサ上でターゲット・アプリケーションを走ら せるエミュレーション・システムであるが、非常に特殊な場合である。ここでは 、エミュレーション・ソフトウエアは、同様のアプリケーションを走らせるよう に既に設計されているホスト・オペレーティング・システム上で走っている。こ のため、ターゲット・アプリケーションからのコールを、ホストおよびホスト・ オ ペレーティング・システムの補正機構に向けるのが一層容易となる。更に重要な のは、このシステムは、恐らく全てのX86アプリケーションの1パーセントに も満たない量の32ビットのWindowsアプリケーションのみを走らせるこ とである。更にまた、このシステムは、1つのオペレーティング・システム、即 ち、WindowsNT上でのみアプリケーションを走らせるが、一方X86プ ロセッサは、多数のオペレーティング・システムに設計されたアプリケーション を走らせる。したがって、このようなシステムは、この明細書で当初示した意味 の範囲内では、互換性があると見なすことはできない。したがって、このような エミュレータを走らせるプロセッサは、競合のX86プロセッサと見なすことは できない。 異なる命令セットを認識するコンピュータ上で、ソフトウエアを用いて第1命 令セットに対して書かれたアプリケーションの部分を走らせることを可能にする 他のエミュレーション方法を、図1(e)に示す。この形態のエミュレーション ・ソフトウエアは、通常、あるコンピュータ・システムから他のシステムにアプ リケーションを移植(port)しようとしているプログラマによって利用される。通 常、ターゲット・アプリケーションは、エミュレータを走らせるホスト・マシン 以外のいずれかのターゲット・コンピュータ用に設計されている。エミュレータ ・ソフトウエアは、ターゲット命令を分析し、これらの命令を、ホスト・マシン 上で走らせることができる命令に変換し、これらのホスト命令をキャッシュし、 それらを再利用可能とする。この動的な変換およびキャッシングによって、アプ リケーションの部分を非常に高速に走らせることが可能となる。この形態のエミ ュレータは、通常ソフトウエア・トレース・ツールと共に用いられ、実行中のタ ーゲット・プログラムの挙動に関する詳細な情報を提供する。一方、トレース・ ツールの出力はトレース情報を分析するアナライザ・プログラムを駆動するため に用いることができる。 実際にコードがどのように機能するのかについて判定するために、とりわけ、 この種のエミュレータは、ホスト・マシン上でホスト・オペレーティング・シス テムによって走らせ、ホスト・オペレーティング・システムが備えていない仮想 ハードウエアを与え、そうでなければ、アプリケーションの設計対象であるコン ピュータの動作を、ホスト・マシンのハードウエア資源にマップし、走らせてい るプログラムの動作を実行する。このソフトウエアによるハードウエアの仮想化 およびホスト・コンピュータへのマッピングは、非常に遅く、しかも不完全な可 能性がある。 更に、ターゲット命令の1つを実行するために複数のホスト命令を必要とする 場合が多いので、ターゲット・オペレーション・システムの例外ハンドラを必要 とするフォールトやトラップを含む例外が発生する可能性があり、ターゲット命 令の境界とは無関係な地点で、ホストにホスト命令の処理を中止させる場合があ る。これが発生した場合、例外を正しく処理することは不可能となる場合がある 。何故なら、ホスト・プロセッサおよびメモリの状態は正しくないからである。 このような場合、エミュレータを停止し、再度走らせて、例外を発生した動作を 追跡しなければならない。したがって、このようなエミュレータはターゲット・ コードのシーケンスを非常に迅速に走らせることはできるが、これらの例外から 復元する方法がなく、したがってアプリケーションの重要な部分を迅速に走らせ ることは全くできない。 これは、この形態のエミュレータに伴う特異の問題ではない。何故なら、エミ ュレータ、トレーサおよび連動するアナライザが実行する機能は、新たなプログ ラムを発生するか、あるいは古いプログラムを別のマシンに移植して、エミュレ ータ・ソフトウエアが走る速度が殆ど問題にならないようにすることを目的とす るからである。即ち、プログラマは、エミュレータが生成したコードがホスト・ マシン上でどれ位速く走るかに常に関心がある訳ではなく、エミュレータが生成 するコードが、そのために設計した機械上で実行可能か、そして当該マシン上で 迅速に走るか否かに関心があるのである。結果的に、この種のエミュレーション ・ソフトウエアは、プログラミング以外の目的で異なる種類のマイクロプロセッ サ上で走らせるために第1命令セットで書かれたアプリケーション・プログラム を走らせる方法を提供するものではない。この種のエミュレーション・ソフトウ エアの一例が、"Shade:A First Instruction-Set Simulator for Execution Pro filing"(シェード:実行の特性を知るための高速命令セット・シミュレータ) と題するCmelik(スメリック)およびKeppel(ケッペル)の論文に記載されてい る。 技術的現状のマイクロプロセッサよりも高速でかつ安価でありながら、しかも 技術的現状のマイクロプロセッサに設計されたターゲット・アプリケーション・ プログラムと完全に互換性があり、これらのマイクロプロセッサに入手可能なあ らゆるオペレーティング・システムを走らせることができる、競争力のあるマイ クロプロセッサを提供することが望ましい。 更に特定すれば、かかるプロセッサの動作速度および互換性を高める回路を有 するホスト・プロセッサを提供することが望ましい。発明の概要 したがって、本発明の目的は、従来の技術的現状のマイクロプロセッサよりも 安価であり、しかも他のマイクロプロセッサのために設計されたアプリケーショ ン・プログラムやオペレーティング・システムと互換性があり、他のマイクロプ ロセッサよりも速いレートでこれらを走らせることが可能な、マイクロプロセッ サの動作を改良する装置を備えたホスト・プロセッサを提供することである。 本発明のこの目的およびその他の目的は、ホスト・プロセッサによる実行のた めに、ホスト命令に変換されたターゲット命令を含むメモリ・アドレスへの書き 込みの試行に応答する装置および方法によって実現され、ホスト命令に変換され たターゲット命令を含むメモリ・アドレスをマークするステップと、メモリ・ア ドレスに対する書き込みが試行されたときにマークされたメモリ・アドレスを検 出するステップと、メモリ・アドレスに関連する変換が、更新される前に、利用 されないことが確認されるまで、メモリ・アドレスにおけるターゲット命令を保 護することによって、マークされたメモリ・アドレスの検出に応答するステップ とを含む。 本発明のこれらおよびその他の目的は、以下の詳細な説明を図面と共に参照す ることによって、より良く理解されよう。尚、図面においては、同様のエレメン トには種々の図にわたって同様の符号によって引用することとする。図面の簡単な説明 図1(a)ないし図1(e)は、従来技術にしたがって設計されたマイクロプ ロセッサの動作態様を示す図である。 図2は、本発明にしたがって設計され、異なるマイクロプロセッサに設計され たアプリケーションを走らせる、マイクロプロセッサのブロック図である。 図3は、図2に示すマイクロプロセッサの一部を示す図である。 図4は、本発明にしたがって設計されたマイクロプロセッサにおいて用いられ るレジスタ・ファイルを示すブロック図である。 図5は、本発明にしたがって設計したゲート格納バッファを示すブロック図で ある。 図6(a)ないし図6(c)は、従来技術の種々のマイクロプロセッサおよび 本発明にしたがって設計されたマイクロプロセッサにおいて用いられる命令を示 す。 図7は、本発明にしたがって設計されたマイクロプロセッサのソフトウエア部 分によって実施される方法を示す。 図8は、本発明にしたがって設計されたマイクロプロセッサのソフトウエア部 分によって実施される別の方法を示す。 図9は、本発明を含む、改良されたコンピュータ・システムを示すブロック図 である。 図10は、図3に示すマイクロプロセッサの一部を示すブロック図である。 図11は、図3のマイクロプロセッサ内に示す変換ルック・アサイド・バッフ ァを更に詳細に示すブロック図である。表記および名称 以下の詳細な説明では、コンピュータ・メモリ内のデータ・ビットに対する動 作を象徴的な表現で提示する部分がある。これらの記載および表現は、データ処 理技術における当業者によって用いられ、他の当業者にそれらの動作の本質を最 も効果的に伝える手段である。動作は、物理的な量の物理的な操作を必要とする ものである。通常、これらの量は、格納、転送、結合、比較、およびそれ以外の 操作が可能な電気的または磁気的信号の形態を取るが、必ずしもそうとは限らな い。主に共通の使用という理由のために、これらの信号を、ビット、値、エレメ ント、シンボル、文字、言葉、数値等として言及すると便利であることが時とし て認められている。しかしながら、これらおよび同様の用語は全て、適切な物理 量に関連付けられており、これらの量に適用された単に便宜上の名称に過ぎない ことは、念頭に置いておくべきであろう。 更に、実行される操作は、多くの場合、加算または比較というような用語で言 及するが、これらは、人のオペレータが実行する精神的な動作と一般的に関連が ある。人のオペレータのこのような能力は、殆どの場合、本発明の一部を形成す る、ここに記載する動作のいずれにも必要でも望ましくもない。動作とは、機械 的動作である。本発明の動作を実行するために有用なマシンは、汎用ディジタル コンピュータ、またはその他の同様のデバイスを含む。全ての場合において、コ ンピュータを動作させる方法動作と、計算自体の方法との間の区別を、念頭に置 いておくべきである。本発明は、電気的またはその他の(例えば、機械的、化学 的)物理的信号を処理し、その他の所望の物理信号を発生するように、コンピュ ータを動作させる方法および装置に関するものである。 以下の説明の間、場合によっては、詳細な動作例を与えるために、ターゲット ・プログラムとは、X86マイクロプロセッサ上で実行するように設計されたプ ログラムを意味するものとする。何故なら、殆どのエミュレータはX86アプリ ケーションを走らせるからである。しかしながら、ターゲット・プログラムは、 いずれのターゲット・コンピュータ・ファミリ上で走るように設計されたもので もよい。これは、Pcodeマシン、Postscriptマシン、またはJa va仮想マシンのような、ターゲット仮想コンピュータを含む。詳細な説明 本発明は、従来技術の問題を克服し、従来技術のマイクロプロセッサよりも高 速に、従来技術の多数のファミリのマイクロプロセッサによって走らせることが できるオペレーティング・システムの全てに対してソフトウエアの全てを走らせ ることができ、しかも従来技術のマイクロプロセッサよりも安価なマイクロプロ セッサを提供する。 更に複雑化したハードウエアによってその動作を加速させるマイクロプロセッ サを用いる代わりに、本発明は、技術的現状のマイクロプロセッサよりも格段に 単純な改良ハードウエア処理部(この明細書では「モーフ・ホスト」と呼ぶ)と 、エミュレート・ソフトウエア部(この明細書では、「コード・モーフィング・ ソフトウエア」と呼ぶ)とを組み合わせ、これら2つの部分が一体となってマイ ク ロプロセッサとして機能し、公知のいずれの競合マイクロプロセッサよりも高い 性能を有するようにしたものである。更に具体的には、モーフ・ホストとは、例 外またはエラーが発生した場合、その後直ちにターゲット・コンピュータの状態 を得る際に補佐するハードウエア機能強化を含むプロセッサであり、一方コード ・モーフィング・ソフトウエアとは、ターゲット・プログラムの命令を、モーフ ・ホストのためのモーフ・ホスト命令に変換し、例外およびエラーに応答して、 必要に応じてワーキング状態を正しいターゲット状態と置換することにより、正 しい再変換が行われるようにするソフトウエアである。また、コード・モーフィ ング・ソフトウエアは、処理速度を高めるための種々のプロセスを含むことも可 能である。従来技術の超高速マイクロプロセッサは、その全てがハードウエアを 備えて処理速度を高めるが、その代わりに、本発明は、コード・モーフィング・ ソフトウエアによって、多数の加速補強技術を選択可能な段階において実行可能 とする。コード・モーフィング・ソフトウエアに速度補強技術を備えることによ り、複雑度が格段に低いハードウエアを用いて、モーフ・ホストを実現すること が可能となる。これは、従来技術のマイクロプロセッサのハードウエアよりも高 速であると共に大幅に安価である。比較として、入手可能なX86アプリケーシ ョン全てを走らせるように設計した本発明の一実施形態は、Pentium P roマイクロプロセッサのゲート数の約1/4を含むモーフ・ホストによって実 現され、しかもPentium Proマイクロプロセッサ、またはX86アプ リケーションを処理可能な他の公知のマイクロプロセッサのいずれよりも、これ らのアプリケーションを大幅に速く走らせる。 コード・モーフィング・ソフトウエアは、新たなソフトウエアを設計したり、 あるいは新たなハードウエアをエミュレートするプログラマによってのみ以前か ら用いられていた、ある種の技術を利用する。モーフ・ホストは、特に、コード ・モーフィング・ソフトウエアが提供する加速技術を効率的に利用可能とするよ うに構成された、複数のハードウエア機能強化を含む。これらのハードウエア機 能強化は、コード・モーフィング・ソフトウエアが、より広い範囲の命令に対し て、加速技術を実現可能とするものである。また、これらのハードウエア機能強 化は、ハードウエア・プロセッサでは得ることができず、法外なコストをかけた プロセ ッサでなければ実現できないような、追加の加速技術を、コード・モーフィング ・ソフトウエアによって実施可能とする。これらの技術は、ネーティブの命令セ ットの実行を行う従来技術のマイクロプロセッサの速度と比較して、本発明を含 むマイクロプロセッサの速度を格段に高めるものである。 例えば、改良モーフ・ホストと組み合わせたコード・モーフィング・ソフトウ エアは、大量の回路を追加する必要なく、ターゲット命令のシーケンスによって 発生した原始命令の並び替えや再スケジューリングを可能にする技術の使用を可 能にできる。多数のターゲット命令全体の並び替えおよび再スケジューリングを 可能にすることによって、他の最適化技術を用いて、ターゲット命令群を実行す るのに必要なプロセッサ・ステップ数を、ターゲット・アプリケーションを走ら せる他のいずれのマイクロプロセッサが必要とするよりも削減することができる 。 改良モーフ・ホストと組み合わせたコード・モーフィング・ソフトウエアは、 ターゲット命令を、実行中に、モーフ・ホストの命令に変換し、これらのホスト 命令をメモリ・データ構造(この明細書では、「変換バッファ」と呼ぶ)にキャ ッシュする。変換バッファを用いて変換した命令を保持することにより、どの原 始命令が各ターゲット命令を実現するために必要かを判定し、各原始命令をアド レスし、各原始命令を取り込み、原始命令のシーケンスを最適化し、各原始命令 にアセットを割り当て、原始命令を並び替え、そして各ターゲット命令を実行す る毎に、必要な原始命令の各シーケンスの各ステップを実行するという長大なプ ロセスを再度走らせることなく、命令を呼び出すことが可能となる。一旦ターゲ ット命令を変換したなら、これら無数のステップを全く必要とすることなく、変 換バッファからこれを呼び出し、実行することができる。 従来技術のエミュレーション技術の第1の問題は、これらの技術が、ターゲッ ト・プログラムの実行中に発生する例外を、良好なパーフォーマンスで処理する ことができない点にある。これは、特に、ターゲット・オペレーティング・シス テムを対象とするターゲット・アプリケーションを走らせている際に発生する例 外のときに該当する。この場合、例外およびそれに続く命令の適正な実行のため には、正しいターゲット状態が、このような例外のいずれの時点でも得ることが できなければならない。その結果、エミュレータは常にターゲット状態を高精度 に追跡することを強いられ、格納がターゲット・コード・エリアに対するものか 否かについて判定するために、常にチェックしていなければならない。他の例外 も同様の問題を引き起こす。例えば、エミュレータが、ある特定のホスト機能に よって置換された特定のターゲット動作を検出する場合に、例外が発生すること がある。即ち、ターゲット・プロセッサの種々のハードウエア動作は、エミュレ ータ・ソフトウエアが提供するソフトウエア動作で置換することができる。加え て、ターゲット命令から派生したホスト命令を実行するホスト・プロセッサも、 例外を発生する可能性がある。これらの例外は全て、エミュレータがターゲット 命令をホスト命令に変換しようとしている間、またはホスト変換がホスト・プロ セッサ上で実行されるときのいずれかに発生する可能性がある。効率的なエミュ レーションのためには、例外を正しく処理しつつ、これらの例外から効率的に復 元する何らかの方法を備える必要がある。エミュレートされ得る全てのソフトウ エアに対してこれを行うものは、従来技術にはない。 これら従来技術の限界を克服するために、改良モーフ・ホストには、多数のハ ードウエアの改善が含まれている。これらの改善には、ゲート格納バッファ(gat ed store buffer)および複数の大量の追加プロセッサ・レジスタが含まれる。追 加レジスタのいくつかによって、レジスタの名称変更を用い、同じハードウエア 資源を必要とする命令の問題を軽減することができる。また、追加レジスタによ って、ホスト命令を処理する1組のホスト・レジスタまたはワーキング・レジス タ、および1組のターゲット・レジスタを維持し、ターゲット・アプリケーショ ンを作成したターゲット・プロセッサのオフィシャル状態(official state)を保 持することができる。ターゲット(またはシャドウ)レジスタは、専用のインタ ーフェースを介して、それらのワーキング・レジスタの同等物に接続されている 。専用インターフェースは、「コミット」(commit)と呼ばれる動作によって、全 てのワーキング・レジスタの内容を素早くオフィシャル・ターゲット・レジスタ に転送させ、かつ「ロールバック」(rollback)と呼ばれる動作によって、全ての オフィシャル・ターゲット・レジスタの内容をそれらのワーキング・レジスタ同 等物に素早く逆転送させることを可能にする。ゲート格納バッファは、ハードウ エア「ゲート」の「アンコミット」側(uncommit side)のワーキング・メモリの 状 態変化を格納し、更にハードウエア・ゲートの「コミット」側のオフィシャル・ メモリの状態変化を格納する。この場合、コミットされた格納は、主メモリに「 流出」する。コミット動作は、ゲートのアンコミット側からゲートのコミット側 に格納を転送する。一旦1つまたは1群のターゲット命令を変換し、エラーなく 走らせたなら、追加のオフィシャル・レジスタおよびゲート格納バッファによっ て、メモリ状態およびターゲット・レジスタ状態を一緒に更新することが可能と なる。 これらの更新は、コード・モーフィング・ソフトウエアによって、整数ターゲ ット命令境界(integral target instruction boundary)上で生じるように選択さ れる。したがって、一連のターゲット命令の変換を構成する原始ホスト命令が、 例外を発生せずに、ホスト・プロセッサによって走らされた場合、これらの命令 によって発生したワーキング・メモリの格納およびワーキング・レジスタ状態は 、オフィシャル・メモリに、次いでオフィシャル・ターゲット・レジスタに転送 される。このように、変換される1つまたは1組のターゲット命令の境界上にな い点において、ホスト命令を処理している際に例外が発生した場合、最後の更新 (またはコミット)におけるターゲット・レジスタ内の元の状態は、ワーキング ・レジスタに呼び出すことができ、ゲート格納バッファ内のアンコミット・メモ リ格納を消去する(dump)ことができる。次に、発生した例外がターゲット例外で ある場合、このターゲット例外を生じたターゲット命令を1回に1つずつ再変換 し、それらがターゲット・マイクロプロセッサによって実行されるように、一連 のシーケンスで実行することができる。各ターゲット命令はエラーなく正しく実 行されるので、ターゲット・レジスタの状態を更新でき、格納バッファ内のデー タをメモリに通過させる(gate)ことができる。次に、ホスト命令を走らせている 際に例外が再び発生した場合、ターゲット・コンピュータの正しい状態は、モー フ・ホストのターゲット・レジスタおよびメモリ内に保持され、動作を遅延なく 正しく処理することができる。この正しい変換によって得られる新たな変換の各 々は、今後のためにキャッシュしておき、それを変換する際、または一旦それを 消去する際、あるいはページ・フォールトのような稀な出来事の際に使用するこ とができる。これによって、コード・モーフィング・ソフトウエアとモーフ・ホ ストとの組み合わせによって作成したマイクロプロセッサが、元来ソフトウエア を書い た対象であるプロセッサよりも速く、命令を実行することが可能になる。 尚、本発明を含むマイクロプロセッサを用いてターゲット・プログラムを実行 する場合、多くの異なる種類の例外が発生する可能性があり、これらは異なる方 法で処理することを注記しておく。例えば、例外には、例外を発生するターゲッ ト・ソフトウエアが原因のものもあり、これにはターゲット・オペレーティング ・システムの例外ハンドラを利用する。このような例外ハンドラの使用では、プ ロセスの処理のために、コード・モーフィング・ソフトウエアは、ターゲット・ コンピュータが備えるあらゆるハードウエアを含む、例外処理プロセス全体をエ ミュレートするルーチンを含むことが必要である。このためには、コード・モー フィング・ソフトウエアが、ターゲット・プロセッサの状態をセーブする機能を 備え、例外を処理し終わった後に、正しく移行できるようにする必要がある。ペ ージ・フォールトのように、変換されるプロセスを実施する前に、メモリの新た なページにデータを取り込む必要がある例外では、例外を処理し終えた後に、変 換対象のプロセスの先頭に戻る必要がある。他の例外は、動作がハードウエアに よって与えられない場合、ソフトウエアで特定の動作を実現する。これらは、例 外ハンドラが、例外を処理し終えた後に、変換における次のステップに動作を戻 すことを必要とする。これら異なる種類の例外は各々、本発明を含むマイクロプ ロセッサによって効率的に処理することができる。 加えて、例外には、ホスト・ハードウエアが発生し、種々のホストおよびター ゲット状態を検出するものがある。また、例外には、従来のマイクロプロセッサ 上の例外のように振る舞うものもあるが、その他のものは、コード・モーフィン グ・ソフトウエアによって、種々の思索(speculation)の失敗を検出するために 用いられる。これらの場合、コード・モーフィング・ソフトウエアは、前述の状 態セーブおよび復元機構を用いて、ターゲット状態をその最近のオフィシャル・ バージョンに復元させ、失敗した思索を回避する新たな変換を発生しセーブする (あるいは、以前に行った安全な変換を用いる)。次に、この変換を実行する。 モーフ・ホストは、追加のハードウエア例外検出機構を含み、前述のロールバ ックおよび再変換方法と共に、一層の最適化を可能にする。例として、メモリを メモリ・マップI/Oから区別する手段、およびアドレスまたはアドレス範囲を 保護することによってメモリの参照を不要とし、ターゲット変数をレジスタに保 持可能とする手段を挙げる。 動作がメモリまたはメモリ・マップI/Oに影響を与えるか否かというように 、例外を用いて他の思索の失敗を検出する場合、新たな変換の生成によって復元 が達成されるが、メモリ動作は異なり、最適化も異なる。 図2は、図1(a)のCISCプロセッサ上で走っているのと同じアプリケー ション・プログラムを走らせるモーフ・ホスト・ハードウエアを示す図である。 図に見られるように、マイクロプロセッサは、前述のコード・モーフィング・ソ フトウエア部と、改良ハードウエア・モーフ・ホスト部とを含む。ターゲット・ アプリケーションは、ターゲット命令をコード・モーフィング・ソフトウエアに 与え、モーフ・ホストが実行可能なホスト命令に変換させる。その間、ターゲッ ト・オペレーティング・システムは、ターゲット・アプリケーション・プログラ ムからのコールを受け取り、これらをコード・モーフィング・ソフトウエアに転 送する。マイクロプロセッサの好適な実施形態では、モーフ・ホストは、超長命 令ワード(VLIW:very long instruction word)マイクロプロセッサであり、 複数の処理チャネルによって設計されている。このようなプロセッサの全体的な 動作については、図6(c)に更に示されている。 図6(a)ないし図6(c)は、CISCプロセッサ、RISCプロセッサ、 およびVLIWプロセッサの各々と使用するように構成された命令を示す。図に 見られるように、CISC命令は可変長であり、より多くの原始動作(例えば、 ロードおよび加算)を複数個含むことができる。一方、RISC命令は、長さが 等しく、本質的に原始動作である。図示のVLIWプロセッサに対する単一の超 長命令は、CISCおよびRISC命令のより多くの原始動作(即ち、ロード、 格納、整数加算、比較、浮動小数点乗算、分岐)の各々を含む。図6(c)に見 られるように、一体となって単一の超長命令ワードを構成する原始命令の各々は 、他の原始命令と並列に、VLIWプロセッサの複数の別個の処理チャネルの1 つ、またはメモリのいずれかに与えられ、処理チャネルおよびメモリによって並 列に扱われる。これら並列動作の全ての結果は、マルチポート・レジスタ・ファ イルに転送される。 モーフ・ホストの基本であるVLIWプロセッサは、前述の他のプロセッサよ りもはるかに単純なプロセッサである。これは、発行依存性(issue dependency) を検出する回路も、原始命令を並び替え、最適化し、再スケジューリングする回 路も含まない。このために、元来ターゲット・アプリケーション・プログラムを 設計した対象のプロセッサや、エミュレーション・プログラムを用いてターゲッ ト・アプリケーション・プログラムを走らせるその他のプロセッサのいずれかが 可能なクロック・レートよりも高いクロック・レートで速い処理が可能となる。 しかしながら、プロセッサは、VLIWプロセッサに限定される訳ではなく、R ISCプロセッサのようなあらゆる種類のプロセッサとでも同様に機能すること ができる。 図2に示すマイクロプロセッサのコード・モーフィング・ソフトウエアは、変 換部を含む。これは、ターゲット・アプリケーションの命令をデコードし、これ らのターゲット命令を、モーフ・ホストによる実行が可能な原始ホスト命令に変 換し、ターゲット命令が要求する動作を最適化し、原始命令を並び替えスケジュ ーリングしてモーフ・ホストのVLIW命令(変換)とし、このホストVLIW 命令を実行する。変換部の動作を図7に示す。図7は、コード・モーフィング・ ソフトウエアの主ループの動作を示す。 コード・モーフィング・ソフトウエアおよび改良モーフ・ホスト・ハードウエ アを含むマイクロプロセッサの動作を加速するために、コード・モーフィング・ ソフトウエアは、図2に示すような変換バッファを含む。一実施形態の変換バッ ファは、メモリに格納可能なソフトウエア・データ構造である。特定の実施形態 では、ハードウエアのキャッシュも利用できる場合がある。変換バッファは、タ ーゲット命令の完了した変換各々を実体化するホスト命令を格納するために用い られる。図に見られるように、一旦個々のターゲット命令を変換し、得られたホ スト命令の最適化、並び替え、および再スケジューリングを行ったなら、得られ たホスト変換を変換バッファに格納する。次に、変換を構成するホスト命令を、 モーフ・ホストによって実行する。ホスト命令を実行し例外が発生しない場合、 その後ターゲット命令または命令群が必要とする動作が要求されるときにはいつ でも、変換を呼び出すことができる。 したがって、図7に示すように、アプリケーション・プログラムによってター ゲット命令のアドレスが与えられたときの、マイクロプロセッサのコード・モー フィング・ソフトウエアの典型的な動作は、最初に、当該ターゲット・アドレス におけるターゲット命令が変換されているか否かについて判定することである。 ターゲット命令が変換されていない場合、変換部によって、それおよび後続のタ ーゲット命令を取り込み、デコードし、変換し、次いで(恐らく)最適化し、並 び替え、新たなホスト変換に再スケジューリングし、変換バッファに格納する。 後でわかるであろうが、可能な最適化には様々な度合いがある。この明細書では 、「最適化」という用語は、処理を加速するための技術のことを総称的に呼ぶた めに用いることが多い。例えば、並び替えは、処理の高速化を可能とする最適化 の一形態であり、この用語に含まれるものである。可能な最適化の多くは、コン パイラの最適化の従来技術において説明されており、「スーパー・ブロック」(s uper-block)のように、従来技術の範囲内では実行が困難であったいくつかの最 適化が、VLIWの研究から明らかとなった。次に、制御を変換に移転し、改良 モーフ・ホスト・ハードウエアによって実行し、再開する。 アプリケーションを走らせている際に、特定のターゲット命令シーケンスが次 に発見された場合、変換バッファ内にホスト変換が存在し、変換、最適化、並び 替えまたは再スケジュールの必要性なく、直ちに実行する。以下で述べる先進の 技術を用いることによって、ターゲット命令(一旦完全に変換された)に対する 変換は、ほぼ100万回の変換の実行毎に1回変換バッファ中に発見されること が推測されている。その結果、最初の変換後には、デコード、原始命令の取り込 み、原始命令の最適化、ホスト変換への再スケジューリング、および変換バッフ ァへの格納というような変換に必要なステップの全ては、必要な処理から除外す ることができる。ターゲット命令を書いた対象のプロセッサは、命令を実行する 毎に、各命令のデコード、取り込み、並べ替え、および再スケジューリングを行 わなければならないので、これは、ターゲット命令を実行するために必要な作業 を激減させ、改良プロセッサのマイクロプロセッサの速度を高めることになる。 従来技術のプロセッサによるターゲット・アプリケーションの実行に必要なこ れらのステップ全てを除去するため、本発明を含むマイクロプロセッサは、従来 技術において、このような動作をいずれの正当な速度でも不可能とする問題を克 服する。例えば、改良マイクロプロセッサの技術のいくつかは、アプリケーショ ンを他のシステムに移植するために用いられる、前述のエミュレータにおいて用 いられていた。しかしながら、これらのエミュレータのいくつかは、アプリケー ションの短い部分以外を走らせる方法がなかった。何故なら、変換された命令を 処理する際、種々のシステム例外ハンドラへのコールを発生する例外は、ホスト ・プロセッサの状態が同じ命令を処理しているターゲット・プロセッサの状態に は関係がない動作時点で発生するからである。このため、このような例外が発生 する時点におけるターゲット・プロセッサの状態はわからなかった。したがって 、ターゲット・マシンの正しい状態を判定することができず、動作を停止し、再 起動し、正しい状態を把握してからでないと、例外に対処し(service)、実行を 継続することができなかった。このため、アプリケーション・プログラムをホス トの速度で走らせることが不可能であった。 モーフ・ホスト・ハードウエアは、この問題を克服する多数の機能強化を含む 。これらの機能強化を、各々図3、図4および図5に示す。エラーが発生した時 点におけるレジスタの正しい状態を判定するために、1組のオフィシャル・ター ゲット・レジスタが改良ハードウエアによって与えられ、元のアプリケーション を設計した対象のターゲット・プロセッサのレジスタの状態を保持する。これら のターゲット・レジスタは、浮動小数点ユニット、あらゆる整数ユニットおよび その他のあらゆる実行ユニットの各々に含ませることができる。これらのオフィ シャル・レジスタをモーフ・ホストに追加しつつ、通常のワーキング・レジスタ 数も増加させることによって、レジスタの名称変更を含む多数の最適化を実施可 能とする。改良ハードウエアの一実施形態は、64個のワーキング・レジスタを 整数ユニット内に、32個のワーキング・レジスタを浮動小数点ユニット内に含 む。また、この実施形態は、補強した1組のターゲット・レジスタも含む。その 中には、ターゲット・プロセッサの状態を与えるために必要な、当該プロセッサ の頻繁に変化するレジスタ全てが含まれる。これらには、条件制御レジスタや、 シミュレーション対象システムの制御に必要な他のレジスタが含まれる。 尚、モーフ・ホストが利用する改良処理ハードウエアの種類によっては、変換 された命令シーケンスが、元のアプリケーションからの複数のターゲット命令を 構成する原始動作を含む場合があることを注記しておく。例えば、VLIWマイ クロプロセッサは、図6(a)ないし図6(c)に示すように、CISCまたは RISCのいずれかの複数の命令を同時に走らせることができる場合がある。モ ーフ・ホストの種類が何であれ、モーフ・ホスト・ハードウエアのターゲット・ レジスタの状態は、整数ターゲット命令境界(integral target instruction bou ndary)以外では変化せず、次いで全てのターゲット・レジスタは更新される。し たがって、並び替えられホスト変換に再スケジューリングされた可能性がある一 連の原始命令に変換されたターゲット命令または命令群をマイクロプロセッサが 実行している場合、プロセッサがその変換された命令シーケンスを実行し始める とき、オフィシャル・ターゲット・レジスタは、最初のターゲット命令がアドレ スされたときに、アプリケーションの設計対象のターゲット・プロセッサのレジ スタが保持していた値を保持する。モーフ・ホストが変換後の命令を実行し始め た後は、しかしながら、ワーキング・レジスタは、その時点までに実行された変 換後の命令の原始動作によって決定される値を保持する。したがって、これらの ワーキング・レジスタのいくつかは、オフィシャル・ターゲット・レジスタにお ける値と同一の値を保持する可能性があるが、他のワーキング・レジスタはター ゲット・プロセッサには無意味な値を保持する。これは、特定のターゲット・マ シンよりもはるかに多いレジスタを与え、先進の加速技術を可能にしようとする 実施例には、特に当てはまる。一旦変換後のホスト命令が開始したなら、これら の変換後のホスト命令がワーキング・レジスタの状態を決定し、これらのレジス タ内の値は、変換後のホスト命令が決定したいずれかの値となる。例外を発生せ ずに1組の変換後のホスト命令が実行された場合、この1組の命令の終了時に決 定された新たなワーキング・レジスタ値が一緒にオフィシャル・ターゲット・レ ジスタに転送される(恐らく、ターゲット命令ポインタ・レジスタを含む)。本 発明のこの実施形態では、この転送は、追加のパイプライン段において、ホスト 命令の実行以外で行われるので、モーフ・ホストの動作を遅らせることはない。 同様に、図5に示すようなゲート格納バッファを、改良マイクロプロセッサの ハードウエアにおいて利用し、データのメモリへの転送を制御する。ゲート格納 バッファは、多数のエレメントを含み、その各々はメモリ格納動作に対してアド レスおよびデータを保持することができる。これらのエレメントは、多数の異な るハードウエア構成のいずれでも実現可能であり(例えば、先入れ先出しバッフ ァ)、図示の実施形態は、ランダム・アクセス・メモリおよび3つの専用ワーキ ング・レジスタを利用して実現している。3つのレジスタは、それぞれ、メモリ 格納のキューの先頭に対するポインタ、ゲートに対するポインタ、およびメモリ 格納のキューの末尾に対するポインタを格納する。キューの先頭とゲートとの間 に位置するメモリ格納は、既にメモリにコミットされており、一方キューのゲー トと末尾との間に位置するメモリ格納は未だメモリにコミットされていない。ホ スト変換の実行中に発生したメモリ格納は、モーフ・ホストによるホスト命令の 実行中に発生した順序で、整数ユニットによって格納バッファに置かれるが、ホ スト命令においてコミット動作が見出されるまで、メモリへの書き込みは許され ない。このように、変換を実行すると、格納動作がキュー内に置かれる。これら が最初の格納であって他の格納がゲート格納バッファ内にないと仮定すると、先 頭ポインタおよびゲート・ポインタは同じ位置を示している。各格納を実行する につれて、キュー内の次の場所に置かれ、末尾ポインタが次の位置(図では上向 き)に増分される。これは、コミット・コマンドが実行されるまで続けられる。 コミット・コマンドの実行が行われるのは、通常、例外やエラー終了状態を発生 することなく、1組のターゲット命令の変換を完了したときである。エラーなく モーフ・ホストによって変換が実行された場合、実行中に発生した格納バッファ 内のメモリ格納は、一緒に格納バッファ(コミットされている)のゲートを通過 し、続いてメモリに書き込まれる。図示の実施形態では、これは、末尾ポインタ を保持するレジスタ内の値を、ゲートポインタを保持するレジスタにコピーする ことによって行われる。 このように、ワーキング・レジスタからオフィシャル・ターゲット・レジスタ へのレジスタ状態の転送、およびワーキング・メモリ格納のオフィシャル・メモ リへの転送の双方は、一緒に行われ、明示的なコミット動作に応答して、整数タ ーゲット命令間の境界上でのみ行われることがわかる。 これによって、マイクロプロセッサは、改良モーフ・ホストによる実行中に発 生したターゲット例外から、重大な遅延を全く伴うことなく、復元することがで きる。変換された命令または命令群のいずれかの実行中に、ターゲット例外が発 生した場合、この例外は、モーフ・ホスト・ハードウエアまたはソフトウエアに よって検出する。ターゲット例外の検出に応答して、コード・モーフィング・ソ フトウエアは、オフィシャル・レジスタ内に保持されている値を、ワーキング・ レジスタに戻し、ゲート格納バッファ内のコミットされていないメモリ格納を全 て消去する(「ロールバック」と呼ばれる動作)。図5のゲート格納バッファ内 のメモリ格納の消去は、ゲート・ポインタを保持するレジスタ内の値を、末尾ポ インタを保持するレジスタにコピーすることによって、行うことができる。 ターゲット・レジスタからワーキング・レジスタに値を移すことにより、例外 が発生したときに走っていたターゲット命令の最初のもののアドレスを、ワーキ ング命令ポインタ・レジスタ内に置くことができる。 ワーキング・レジスタ内のターゲット・プロセッサのこのオフィシャル状態か ら開始して、例外が発生したときに走っていたターゲット命令を連続順序で再変 換するが、並び替えやその他の最適化はまったく行わない。各ターゲット命令を 新たにデコードし新たなホスト変換に変換した後、ターゲット命令を表す変換さ れたホスト命令をモーフ・ホストによって実行すると、例外が発生する場合ある いは発生しない場合がある。(モーフ・ホストがVLIWプロセッサ以外である 場合、ホスト変換の原始動作の各々が順次実行される。ホスト変換を走らせてい る際に例外が発生しなかった場合、次の原始機能を走らせる。)これは、例外が 再度発生するか、あるいは単一のターゲット命令が変換され実行し終えるまで続 けられる。一実施形態では、例外を発生せずにターゲット命令の変換が実行され た場合、ワーキング・レジスタの状態がターゲット・レジスタに転送され、更に ゲート格納バッファ内のあらゆるデータがコミットされるので、メモリに転送す ることができる。しかしながら、変換の実行中に例外が再度発生した場合、ター ゲット・レジスタおよびメモリの状態は変化せず、例外が発生したときにターゲ ット・コンピュータ内に生じた状態と同一である。その結果、ターゲット例外が 発生した場合、この例外は、ターゲット・オペレーティング・システムによって 正しく処理される。 同様に、変換によって例外が発生した一連の命令の内第1のターゲット命令が 一旦実行され、例外が発生しなかったのであれば、ターゲット命令ポインタは、 次のターゲット命令を示す。この第2のターゲット命令は、第1の場合と同様に 、最適化または並び替えを行わず、デコードし再変換する。単一のターゲット命 令のホスト変換の各々がモーフ・ホストによって処理されていくと、ターゲット ・レジスタおよびメモリの状態が、ターゲット・コンピュータ内に生ずる状態と 同一である場合、何らかの例外が発生する。その結果、例外を直ちにかつ正しく 処理することができる。これら新たな変換は、ターゲット・アプリケーションに おける命令のシーケンスに対する正しい変換として、変換バッファ内に格納され 、命令を再度走らせるときにはいつでも呼び出すことができる。 図5のゲート格納バッファと同じ結果を得る他の実施形態は、格納を直接メモ リに転送しつつ、変換の例外の結果ロールバックを必要とする例外またはエラー を生じた場合にターゲット・コンピュータの状態を復元するために十分なデータ を記録する構成を含むものとすることができよう。このような場合、変換および 実行の間に発生したいずれのメモリ格納についてもその効果を逆転させ、変換の 開始時に存在していたメモリ状態を復元しなければならない。一方、ワーキング ・レジスタは、先に論じたように、オフィシャル・ターゲット・レジスタ内に保 持されているデータを受け取らなければならない。これを行う一実施形態は、別 個のターゲット・メモリを維持して元のメモリ状態を保持しておき、ロールバッ クが発生した場合に、これを利用して、上書きされたメモリを置換する。メモリ ・ロールバックを行う他の実施形態は、各格納を記録し、メモリ・データが発生 する毎にこれを置換し、次いでロールバックが必要な場合に、格納プロセスを逆 転させる。 コード・モーフィング・ソフトウエアは、変換されているプログラムを処理す る速度を大幅に高める、追加の動作を備えている。単純に命令を変換し、最適化 し、並び替え、再スケジューリングし、キャッシュし、各変換を実行して、1組 の命令を実行する必要があるときにはいつでも再度走らせることができるように しておくことに加えて、変換部は異なる変換をリンクし、殆ど全ての場合に、変 換プロセスの主ループへのリターンを不要にする。図8は、このリンク・プロセ スを行う際に、コード・モーフィング・ソフトウエアの変換部が実行するステッ プを示す。このリンク動作は、殆どの命令の変換について、本質的に主ループへ のリターンを不要とし、このオーバーヘッドをなくするものであることは、当業 者には理解されよう。 例示の目的のために、走らせるターゲット・プログラムがX86の命令で構成 されていると仮定する。ターゲット命令のシーケンスの変換を行い、原始ホスト 命令を並び替え再スケジューリングする場合、各ホスト変換の終了時に、2つの 原始命令が発生する可能性がある。最初のものは、ターゲット・プロセッサに対 する命令ポインタの値(またはその同等物)を更新する原始命令である。この命 令は、次のターゲット命令の正しいアドレスを、ターゲット命令ポインタ・レジ スタに置くために用いられる。この原始命令に続くのは、分岐命令であり、当該 分岐に対する2つの可能なターゲットの各々のアドレスを含む。分岐命令に先立 つ原始命令がターゲット・プロセッサに対する命令ポインタの値を更新する方法 は、条件コード・レジスタ内の当該分岐に対する条件コードを試験し、分岐を制 御する条件が示す2つの分岐アドレスの一方が変換バッファ内に格納されている か否かについて判定を行うことである。最初にターゲット命令のシーケンスを変 換する場合、ホスト命令の2つの分岐ターゲットは双方とも、変換部ソフトウエ アの主ループに対して、同じホスト・プロセッサ・アドレスを保持している。 ホスト変換が完了し、変換バッファに格納され、最初に実行されるとき、ター ゲット命令ポインタ・レジスタにおいて、命令ポインタを更新し(ターゲット・ レジスタの残りと同様に)、動作は分岐して主ループに戻る。主ループでは、変 換ソフトウエアは、ターゲット命令ポインタ・レジスタ内において、次のターゲ ット命令への命令ポインタを参照する。次いで、次のターゲット命令シーケンス をアドレスする。このターゲット命令のシーケンスが未だ変換されておらず、し たがって変換が変換バッファ内にないと仮定すると、次の1組のターゲット命令 をメモリから取り込み、デコードし、変換し、最適化し、並び替え、再スケジュ ーリングを行い、変換バッファ内にキャッシュし、実行する。第2組のターゲッ ト命令が第1組のターゲット命令に続くので、第1組のターゲット命令のホスト 変換の最後の原始分岐命令は自動的に更新され、第2組のターゲット命令のホス ト変換のアドレスを、当該分岐を制御する特定の条件に対する分岐アドレスとし て置換する。 次に、第2の変換されたホスト命令が第1の変換されたホスト命令にループ・ バックする場合、第2の変換の最後における分岐動作は、主ループのアドレス、 および第1の変換のX86アドレスを、当該分岐に可能な2つのターゲットとし て含む。分岐に先立つ更新−命令−ポインタ原始動作は、条件を試験し、第1の 変換へのループ・バックを行うことを決定し、最初の変換のX86アドレスへの ターゲット命令ポインタを更新する。これによって、変換部は変換バッファを調 べ、捜索中のX86アドレスがそこにあるか否か確かめる。最初の変換のアドレ スを発見したなら、ホスト・メモリ空間内におけるその値を、第2のホスト変換 命令の最後の分岐内のX86アドレスと置換する。次に、第2のホスト変換命令 をキャッシュし実行する。これによって、第1の変換から第2の変換への分岐を 行わせる条件が満たされなくなるまで、このループを走らせ、主ループに戻る経 路を取る分岐を行う。これが行われた場合、第1の変換されたホスト命令は主ル ープに戻るように分岐し、ターゲット命令ポインタによって指定される次の1組 のターゲット命令を変換バッファ内で探索し、キャッシュからホスト変換を取り 込む。あるいは、変換バッファ内の探索が失敗した場合、ターゲット命令をメモ リから取り込み、変換する。この変換されたホスト命令が変換バッファにキャッ シュされるとき、そのアドレスが、ループを終了した分岐命令内の主ループ・ア ドレスと置換する。 このように、種々の変換されたホスト命令が互いに連鎖されているので、変換 主ループを通過する長い経路を辿る必要があるのは、リンクが存在しない場合の みである。最終的に、ホスト命令の分岐命令における主ループの参照は、殆ど完 全に無用となる。この条件に達した場合、いずれのホスト命令を走らせる前であ っても、ターゲット命令を取り込み、ターゲット命令をデコードし、当該ターゲ ット命令を構成する原始命令を取り込み、これらの原始動作を最適化し、原始動 作を並び替え、これら原始動作の再スケジュールを行うために必要な時間が不要 となる。したがって、いずれのアプリケーションの命令シーケンスを走らせる場 合にもその都度これらのステップの各々を実行しなければならない全ての従来技 術のマイクロプロセッサとは対照的に、改良マイクロプロセッサを用いれば、最 初の変換を行った後には、いずれの1組のターゲット命令を走らせるために必要 な作業も激減する。この作業は、各組の変換されたホスト命令を他の組の変換さ れたホスト命令にリンクすることによって、更に減少する。実際、アプリケーシ ョンを走らせている間、変換が必要となるのは、100万回の命令実行中1回未 満となることが推定される。 変換する各組の命令を順にキャッシュし、再度変換する必要をなくすようにす るため、このマイクロプロセッサの実現には、大きな変換バッファが必要である ことを当業者は認識するであろう。異なるシステムに対してプログラムされたア プリケーションと共に機能するように設計された変換部の支援用バッファ・メモ リに対する必要性は様々に変化する。しかしながら、X86プログラムを走らせ るように設計されたマイクロプロセッサの一実施形態は、2メガバイトのランダ ム・アクセス・メモリを変換バッファとして利用している。 2つの追加のハードウエア機能強化が、本発明を含むマイクロプロセッサがア プリケーションを処理可能な速度を高めるのに役立つ。これらの内最初のものは 、異常/正常(A/N)保護ビットであり、ターゲット命令の物理アドレスの参 照を最初に行った変換ルック・アサイド・バッファ(TLB)(図3参照)内の 各アドレス変換と共に格納される。変換内部のターゲット・メモリの動作には、 2種類あり、一方はメモリ上で動作するもの(正常)、他方はメモリ・マップI /Oデバイス上で動作するもの(異常)とすることができる。 メモリに影響を与える正常アクセスは、正常に完了する。命令がメモリ上で動 作する場合、これらの命令の最適化および並び替えを行うことが適当であり、本 発明を含むマイクロプロセッサを用いたいずれのシステムでも、その速度を高め るのに非常に役立つ。一方、I/Oデバイスに影響を与える異常アクセスの動作 は、いずれのステップも除去することなく、これらの動作がプログラムされた正 確な順序で行わなければならない場合が多い。さもないと、I/Oデバイスに何 らかの悪影響を与える可能性がある。例えば、特定のI/O動作が、I/Oレジ スタをクリアする結果をもたらす場合があり、原始動作が順序を外して行われた 場合、動作の結果は、ターゲット命令が指令した動作とは異なる場合がある。メ モリをメモリ・マップI/Oと区別する手段がないと、メモリ・マップI/Oに 影響を与える命令を変換する際に用いられる旧来の仮定を用いて、全てのメモリ を扱わなければならない。これは、達成可能な最適性を著しく制限することにな る。従来技術のエミュレータは、アドレスされているメモリの特性に対する思索 の失敗を検出する手段、およびこのような失敗から復元する手段の双方を欠いて いたので、その処理能力には限界があった。 図11に示すマイクロプロセッサの一実施形態では、A/Nビットは、メモリ ・ページまたはメモリ・マップI/Oのいずれかを示すために、変換ルック・ア サイド・バッファ内にセットすることができるビットである。変換ルック・アサ イド・バッファは、メモリ・アクセスに対するページ・テーブル・エントリを格 納する。このようなエントリは各々、アクセスされる仮想アドレスおよび捜索中 のデータにアクセス可能な物理アドレス、ならびにエントリに関するその他の情 報を含む。本発明では、A/Nビットはその他の情報の一部であり、物理アドレ スがメモリ・アドレスかあるいはメモリ・マップI/Oアドレスかを示す。メモ リに影響を与える動作を、メモリ動作であるかのように変換することは、実際に は、この動作がメモリに影響を与えるものとする思索である。一実施形態では、 コード・モーフィング・ソフトウエアが最初に、メモリまたはメモリ・マップI /Oデバイスのいずれかのアクセスを必要とする変換を実行しようとする場合、 実際には、当該アクセスをメモリ・アクセスと仮定する。別の実施形態では、タ ーゲット・コマンドがI/Oアクセスを要求すると、ソフトウエアが仮定するこ とも可能である。そのアドレスへのアクセスが未だ行われていないと仮定すると 、変換ルック・アサイド・バッファ内にはエントリがなく、アクセスは変換ルッ ク・アサイド・バッファにおいて失敗する。この失敗のために、ソフトウエアは 、ページ・テーブル参照を行い、変換ルック・アサイド・バッファの格納位置に 、ページ・テーブル・エントリを入力し、仮想アドレスに対する正しい物理アド レス変換を与える。これを行う際に、ソフトウエアは、この物理アドレスに対す るA/Nビットを、変換ルック・アサイド・バッファに入力させる。次いで、ア クセスがメモリ・アドレスに対するものと仮定すると、再度アクセスを実行しよ うとする試みが行われる。アクセスが試行されると、仮定したアクセス型(正常 また は異常)を、現在TLBページ・テーブル・エントリ内にあるA/N保護ビット と比較することによって、ターゲット・メモリ参照をチェックする。アクセス型 がA/N保護と一致しない場合、例外が発生する。実際に動作がメモリに影響を 与える場合、前述の最適化、並び替え、および再スケジューリング技術が、変換 中に正しく適用されたことになる。しかしながら、TLB内のA/Nビットとの 比較が、動作がI/Oデバイスに影響を与えることが示す場合、実行によって例 外が発生し、変換部は、いずれの種類の最適化、並び替え、再スケジューリング も行わず、1度に1つのターゲット命令ずつ、新たな変換を行う。同様に、変換 が、実際にはメモリに影響を与える動作をI/O動作と誤って仮定した場合、実 行によって例外が発生し、最適化技術、並び替え技術および再スケジューリング 技術を用いて、ターゲット命令を再変換する。このように、本プロセッサは、従 来可能であった性能を超える改良をもたらすことができる。 尚、A/Nビットを用いて、アクセスがメモリまたはメモリ・マップI/Oデ バイスのどちらに対するものかについての思索が失敗したか否かを判定する技術 は、メモリ・マップ・アドレスの他の特性に関する思索にも使用可能であること は、当業者には認められよう。例えば、このような正常/異常ビットを用いて、 異なる種類のメモリを区別することができる。他の同様な使用法として、メモリ 特性を区別することも挙げられるが、当業者には理解されよう。 改良マイクロプロセッサが最も頻繁に実施する思索の1つは、変換中にターゲ ット例外が発生しないことに関するものである。これによって、従来技術に対し て格段の最適化が可能となる。第1に、ターゲット状態を各ターゲット命令境界 毎に更新する必要がなく、変換境界上に生ずるターゲット命令境界上でのみ更新 すればよい。これによって、各ターゲット命令境界毎にターゲット状態をセーブ するために必要な命令が不要となる。スケジューリングや冗長な動作を除去する ことに対する、従来では不可能であった最適化も可能となる。 驚くべきことに、改良マイクロプロセッサは、適切な変換プロセスを選択する ように構成されている。前述の変換方法によれば、最初に1組の命令を、それが メモリに影響を与えるかのように、変換することができる。次に、ホスト命令の 最適化、並び替え、および再スケジューリングを実行すると、変換ルック・アサ イド・バッファ内に備えられているA/Nビットの状態によって、I/Oデバイ スを参照するアドレスを得ることができる。A/Nビットと、ある動作がI/O 動作であることを示す変換命令アドレスとの比較により、エラー例外が発生し、 これによってソフトウエアが開始するロールバック手順が行われ、あらゆるアン コミット・メモリ格納が消去され、ターゲット・レジスタ内の値はワーキング・ レジスタ内に戻される。次に、1度に1ターゲット命令ずつ変換が開始され、最 適化、並び替え、あるいは再スケジューリングは行われない。この再変換は、I /Oデバイスに適したホスト変換である。 同様に、メモリ動作を、I/O動作として誤って変換する可能性がある。発生 するエラーを用いて、その正しい再変換を行わせ、最適化、並び替え、および再 スケジューリングを行うことにより、より速い動作を与える。 従来技術のエミュレータは、一般的に自己変更コード(self modifying code) と呼ばれるものにも苦闘していた。ターゲット・プログラムが、ターゲット命令 を収容しているメモリに書き込みを行った場合、これらのターゲット命令のため に存在する変換は「古く」なり、もはや有効でなくなる。これらの格納が発生す る際に、動的にこれらを検出する必要がある。従来技術では、各格納に対して余 分な命令を用いてこのような検出を行わなければならない。この問題は、プログ ラムがそれ自体を変更することよりも、範囲が広い。第2のプロセッサやDMA デバイスのような、メモリに書き込みを行う可能性のあるあらゆるエージェント も、この問題を発生する可能性がある。 本発明は、モーフ・ホストに対する別の機能強化によって、この問題に対処す る。同様に変換ルック・アサイド・バッファに格納することができる変換ビット (Tビット)を用いて、変換が存在する原因であるターゲット・メモリ・ページ を示す。したがって、Tビットは、ターゲット・メモリの特定のページが、ホス ト変換が存在する原因であるターゲット命令を含むことを示すことができる。こ れらのターゲット命令が上書きされた場合、変換は陳腐化することになる。メモ リ内で保護されているページに書き込みを行おうとした場合、変換ビットの存在 によって例外が発生し、これをコード・モーフィング・ソフトウエアで処理する と、該当する変換(複数の変換)を無効化し、変換バッファから除去することが できる。また、Tビットは、書き込まれていないターゲット・ページ、例えば、 ターゲット・ページ・テーブルにマークを付けるために用い、これに基づいて変 換を行うことも可能である。 本発明を含むマイクロプロセッサの全体的な機能エレメントをブロック図状で 示す図3を参照することによって、これは理解することができる。モーフ・ホス トがターゲット・プログラムを実行する場合、実際には、変換されていない元の ホスト命令のみを含む、コード・モーフィング・ソフトウエアの変換部部分を走 らせる。変換されていない元のホスト命令は、事実上、モーフ・ホスト上で走る 。図の右側に、本質的に変換部および変換バッファを含むホスト部分と、ターゲ ット・オペレーティング・システムを含み、ターゲット命令およびデータを含む ターゲット部分とに分割されたメモリが示されている。モーフ・ホスト・ハード ウエアは、変換部を実行開始する際、メモリからホスト命令を取り込み、これら の命令を命令キャッシュ内に置く。変換部の命令は、メモリのターゲット部分に 格納されている最初のターゲット命令のフェッチ(fetch)を発生する。ターゲッ ト・フェッチを実行することにより、整数ユニットは、ターゲット命令の第1の アドレスを求めて、オフィシャル・ターゲット命令ポインタ・レジスタを探る。 次に、メモリ管理ユニットの変換ルック・アサイド・バッファ内の最初のアドレ スにアクセスする。メモリ管理ユニットは、ページング用ハードウエアを含み、 TLBにメモリ・マッピング機能(facilities)を与える。TLBが正しくマップ されており、ターゲット・メモリの正しいページに対する参照データを保持して いると仮定すると、ターゲット命令ポインタ値は、ターゲット命令の物理アドレ スに変換される。この時点において、変換がターゲット命令に対して行われたか 否かを示すビット(Tビット)の状態が検出されるが、アクセスは読み取り動作 であり、Tビットの例外は発生しない。アクセスがメモリまたはメモリ・マップ I/Oのどちらに対するものかを示すA/Nビットの状態も検出される。最後に 述べたビットがメモリ位置を示すと仮定すると、変換が存在しないので、ターゲ ット・メモリ内のターゲット命令にアクセスする。このターゲット命令および後 続のターゲット命令は、モーフ・ホスト計算機ユニットへのデータとして転送さ れ、命令キャッシュに格納されている変換命令の制御の下で変換される。変換命 令は、こ のターゲット命令がメモリに影響を与えるかのように、並び替え技術、最適化技 術、および再スケジューリング技術を利用する。次に、ホスト命令のシーケンス を含む変換が得られ、これをホスト・メモリ内の変換バッファに格納する。変換 は、ゲート格納バッファを介して、ホスト・メモリ内の変換バッファに直接転送 される。一旦変換がホスト・メモリに格納されたなら、変換部は変換に分岐し、 次いでこれを実行する。この実行(および後続の実行)は、変換が例外およびメ モリに関して正しい仮定を行ったか否かについて判定を行う。変換を実行する前 に、変換したターゲット命令を収容しているターゲット・ページ(群)に対する Tビットをセットする。この指示は、命令が変換されたこと、およびターゲット ・アドレスに対する書き込みを行おうとすると、この試行は例外を発生し、変換 が無効になるかあるいは除去される可能性があることを警告する。 Tビットによってマークされたターゲット・ページに書き込みを行おうとした 場合、例外が発生し、この書き込みは中止される。書き込みを続けることが許さ れるのは、例外に対する応答によって、書き込まれるターゲット・メモリ・アド レスと関連する変換に無効と印されているか、あるいは適切に更新され終わるま で、その他の方法で使用に対して保護されていることが保証された後である。書 き込み動作には、変換が影響を受けないので、実際には何も行うことを要求しな い場合もある。他の書き込み動作には、アドレスされたターゲット・メモリに関 連する1つ以上の変換に適切にマークを付けるか、あるいはこれらを除去するこ とを要求するものがある。図11は、Tビット指示を保持するために各々エント リを有する格納位置を含む、変換ルック・アサイド・バッファの一実施形態を示 す。 モーフ・ホストに対する追加のハードウエア機能強化の1つは、通常はメモリ に格納されるが動作の実行において頻繁に用いられるデータを、実行ユニット・ レジスタ内に複製(即ち、「エイリアス」)し、各使用毎に当該データをメモリ から取り出す際に要する時間を不要にするために利用する回路である。一実施形 態においてこれを行うためには、モーフ・ソフトを「ロードおよび保護」コマン ドに応答するように設計し、図10に示す実行ユニット110内のワーキング・ レジスタ111にメモリ・データをコピーし、そのメモリ・アドレスを当該ユニ ット内のレジスタ112内に置く。アドレス・レジスタと連動するのは、比較器 113である。比較器は、変換中メモリに向けられたゲート格納バッファへのロ ードおよび格納のアドレスを受け取る。ロードまたは格納のいずれかに対するメ モリ・アドレスをレジスタ112(または実施形態によっては追加のレジスタ) 内のアドレスと比較した場合、例外が発生する。コード・モーフィング・ソフト ウエアは、メモリ・アドレスおよびレジスタが同じ正しいデータを保持している ことを確認することによって、この例外に応答する。一実施形態では、変換をロ ール・バックし、実行レジスタ内に「エイリアス」データが全くない状態で、再 実行することによって、これを行う。この問題を補正する他の可能な方法として 、レジスタを最新のメモリ・データで更新するか、あるいはメモリを最新のロー ド・データで更新することが挙げられる。 前述のマイクロプロセッサは、典型的なコンピュータ・エレメントを有する回 路に接続すれば、図9に示すようなコンピュータを形成可能であることは、当業 者には認められよう。図に見られるように、最近のX86コンピュータに用いる 場合、前述のマイクロ・プロセッサをプロセッサ・バスを介してメモリおよびバ ス制御回路に結合する。メモリおよびバス制御回路は、主メモリおよび、マイク ロプロセッサと共に利用可能なキャッシュ・メモリへのアクセスを与えるように 構成されている。また、メモリおよびバス制御回路は、PCIまたはその他のロ ーカル・バスのようなバスへのアクセスも与え、このバスを通じてI/Oデバイ スにアクセスすることができる。個々のコンピュータ・システムは、本発明のプ ロセッサによって置換される典型的なマイクロプロセッサと共に用いられる回路 に依存する。 プロセッサの動作、および実行の加速化を行う態様を示すために、X86ター ゲットコードの小さなサンプルのホスト原始命令への変換を、ここで提示する。 このサンプルは、X86ターゲット命令のモーフ・ホスト命令への変換を示し、 本発明を含むマイクロプロセッサによる、最適化、並び替え、および再スケジュ ーリングのステップの様々な例を含む。例示するプロセスを追って行くことによ り、ターゲット・プロセッサを用いて元の命令を実行する際に必要な動作と、ホ スト・プロセッサ上で変換を実行する際に必要な動作との間の大幅な差が、当業 者には明白となろう。 C言語のソース・コードで例示した元の命令は、非常に短いループ処理を記述 する。本質的に、各ループの後に減分される変数「n」が「0」より大きい間、 値「c」が、ポインタ「*s」が示すアドレスに格納される。ポインタ「*s」 は各ループの後に増分される。 元のCコードこのCコードをコンパイルしたコンパイラによって生成されたWin32x86 命令 表記:[...]は、メモリ・オペランドに対するアドレス表現を示す。先の例では 、メモリ・オペランドに対するアドレスは、レジスタの内容を、Oxプレフィク ス が示す16進定数に加算することによって形成される。ターゲット・レジスタは 、%プレフィクスで示される。例えば、%ecxは、excレジスタを示す。動作の宛先 は左側である。 このサンプルの第1部分では、C言語の命令文によって定義される動作の実行 を行うための個々のX86アセンブリ言語の命令は各々、当該動作に対するアセ ンブリ言語のニモニックによって表に纏められており、特定の原始動作に含まれ るパラメータがこれに続く。動作の説明も、各命令毎のコメントにおいて与える ことにする。実行の順序は、ターゲット・プロセッサでは、図示のものとは異な る場合もあるが、これらのアセンブリ言語命令の各々は、ターゲットC言語命令 を実行する際に、ループを実行する毎に実行しなければならない。したがって、 ループが100回行われる場合、以上に示した各命令は100回実行されなけれ ばならない。以上に示した 各X86命令、およびそれに続いて、X86命令を実装するために 必要なホスト命令を示す。 次のサンプルは、C言語命令を実行する、同じターゲット原始命令を示す。し かしながら、各原始ターゲット命令の次に、本発明のマイクロプロセッサの一特 定実施形態において同じ動作を行うために必要な原始ホスト命令を纏めてある。 このマイクロプロセッサでは、モーフ・ホストはここに記載したように設計され たVLIWプロセッサである。オフィシャル・ターゲット・レジスタによってシ ャドウされたホスト・レジスタは、「R」で示し、その後ろにX86レジスタ名 称が続くので、例えば、Reaxは、EAXオフィシャル・ターゲット・レジス タと連動するワーキング・レジスタであることを注記しておく。 X86アドレス計算およびセグメントの上限および下限チェックを行うために必 要なホスト命令を追加する。 次のサンプルは、原始ターゲット命令の各々について、ホスト原始命令の追加 を示し、これによって、ターゲット動作に必要なアドレスを、コード・モーフィ ング・ソフトウエアによって発生することができるものである。ホスト・アドレ ス発生命令は、アドレス発生ハードウエアの代わりに、コード・モーフィング・ ソフトウエアをアドレス発生に用いるマイクロプロセッサの実施形態においての み必要となることを注記しておく。X86マイクロプロセッサのようなターゲッ ト・プロセッサでは、アドレス発生ハードウエアを用いてこれらのアドレスを発 生する。このような本発明の実施例においてアドレスが発生したときはいつでも 、計算が行われ、また、ホスト原始命令が追加され、アドレス値をチェックする ことによって、算出されたアドレスが適切なX86セグメントの限度内にあるこ とを判定する。 ターゲットX86命令ポインタ「eip」を維持するための命令、および特殊な モーフ・ホスト・ハードウエアを用いてX86の状態を更新するコミット命令を 追加する。 (コミット=ワーキング・レジスタの内容をオフィシャル・ターゲット・ レジスタにコピーし、ワーキング格納をメモリに送る) このサンプルは、原始ホスト命令の各組に2ステップを追加することによって 、ゲート格納バッファ内のアンコミット値をメモリにコミットするために必要な ホスト命令の実行後に、各原始ターゲット命令を実行し、オフィシャル・ターゲ ット・レジスタを更新することを例示する。サンプルに見られるように、各場合 に おいて、ターゲット命令の長さを、ワーキング命令ポインタ・レジスタ(Rei p)内の値に加算する。次に、コミット命令を実行する。一実施形態では、コミ ット命令は、連動するオフィシャル・ターゲット・レジスタにシャドウされてい る各ワーキング・レジスタの現在値をコピーし、ゲート格納バッファのゲートの 位置を指定するポインタ値を、アンコミットの格納の直前から、それらの格納の 直後に移動させ、それらをメモリ内に置くようにする。 上記の最後に示した命令のリストは、元のターゲット・アセンブリ言語命令の ホスト変換を形成するために必要な命令の全てであることは認められよう。変換 がこの時点で停止した場合、原始ホスト命令の数は、ターゲット命令の数よりも はるかに多くなり(恐らく、6倍多い命令)、その実行は、ターゲット・プロセ ッサ上での実行よりも長くかかる可能性がある。しかしながら、この時点では、 並び替えや、最適化や、再スケジューリングは未だ行われていない。 命令を1度だけ走らせる場合、更に並び替えやその他の最適化も行うために要 する時間は、この時点で存在する変換を実行するための時間よりも長くなるとい うことになり得る。その場合、マイクロプロセッサの一実施形態では、この時点 で変換を中止し、変換を格納し、次いでそれを実行して例外またはエラーが発生 するか否かについて判定を行う。この実施形態では、並び替えおよびその他の最 適化のステップが行われるのは、特定の変換をある回数走らせることまたは最適 化すべきことを決定した場合のみである。これは、例えば、ホスト命令を各変換 に置き、変換を実行した回数を数え、ある値に達したときに例外(または分岐) を発生することによって行われる。例外(または分岐)は、動作をコード・モー フィング・ソフトウエアに転送し、次いでコード・モーフィング・ソフトウエア は、以下の最適化の一部または全部、および当該変換に有用と判定されたあらゆ る追加の最適化を実現する。変換を走らせた回数を判定し、最適化を要求する第 2の方法は、ある頻度でまたはある統計的基準に基づいて、変換の実行を中断し 、その時点で走っているいずれの変換も最適化することである。これは、究極的 に、最も頻繁に走らせる命令を最適化しようとするものである。別の解決策とし て、ループを形成するものや、その他に最も頻繁に走らせる可能性があるものの ような、ある特定の形式のホスト命令の各々を最適化することも挙げられよう。 このサンプルは、改良マイクロプロセッサを利用して実施可能な最適化の第1 段を例示する。この最適化段は、コード・モーフィング・ソフトウエアの他の動 作の多くと同様、最適な結果を想定する。特定の最適化は、X86プロセッサ・ ファミリによって与えられるフラット・メモリ・モデルに対して書かれた32ビ ット・プログラムとして開始したターゲット・アプリケーション・プログラムが 、そのようなプログラムとして継続することを想定する。このような想定は、X 86ファミリに特定なものであり、エミュレート対象の他のプロセッサ・ファミ リでは必ずしも適用される訳ではないことを注記しておく。 この想定を行った場合、X86用アプリケーションでは、全てのセグメントが 同一アドレス空間にマップされる。これによって、X86セグメンテーション・ プロセスが要求する原始ホスト命令を除去することが可能となる。サンプルに見 られるように、最初にセグメント値をゼロにセットする。次に、データのベース をゼロにセットし、限度を最大使用可能メモリにセットする。すると、ターゲッ ト原始命令を実行するための各組の原始ホスト命令において、セグメンテーショ ンに必要なセグメント・ベース値のチェック、およびセグメント・ベース・アド レスの計算双方が不要となる。これによって、アドレシング機能を必要とする各 ターゲット原始命令に対して、2つのホスト原始命令が実行すべきループを減少 する。この時点では、メモリ上限に対するホスト命令チェックは未だ存在する。 この最適化には、アプリケーションが32ビット・フラット・メモリ・モデル を利用することを記した思索を必要とすることを注記すべきであろう。これが真 でない場合、主ループが制御転送の宛先を解明し、転送元の想定が宛先の想定と 一致しないことを検出する際に、エラーが発見される。すると、新たな変換が必 要となる。この技法は非常に一般的であり、種々のセグメンテーションおよびそ の他の「モード化」の場合において、デバッグ、システム管理モード、または「 リアル」モードのように、「モード」が頻繁に変化する場合に適用可能である。 アドレスされたデータはコンピュータ・メモリの限度以外のバイトを含まないと 想定する。限度を超える可能性があるのは、メモリ上限においてメモリ参照と交 差する整合されていないページ上においてのみであり、特殊ケース用ソフトウエ アまたはハードウエアによって処理可能である。 このサンプルは、最適化の次の段階を例示する。この場合、思索的な変換(spe culative translation)によって、メモリ・アドレス空間の上端においてメモリ 参照と交差する整合されていないページに対してのみ必要な、上側のメモリ境界 チェックを不要にする。この想定の失敗は、ハードウエアまたはソフトウエアの 整合解決(fix up)によって検出される。これによって、アドレシングを必要とす る各ターゲット原始命令毎に、ホスト原始命令1つだけ変換が減少する。この最 適化は、アプリケーションが32ビット・フラット・メモリ・モデルを利用する という先に記した想定、および命令が整合されているという思索の双方を必要と する。これらが真でない場合、変換を実行した際に失敗に終わり、新たな変換が 必要となる。 冗長なアドレス算出を検出し除去する。この例は、冗長な動作を除去した後のコ ードを示す。 このサンプルは、次の最適化を例示する。この場合、共通のホスト表現を除去 する。即ち、2番目のターゲット原始命令を変換する際、ワーキング・レジスタ Rebp(X86プロセッサのスタック・ペース・ポイント・レジスタを表すワ ーキング・レジスタ)内の値を、オフセット値Ox8に加算し、ホスト・ワーキン グ・レジスタR2に置く。直前のサンプルにおいてターゲット原始命令5を変換 する際に同じ動作を行ったが、加算の結果はワーキング・レジスタR5に置かれ たことを注記しておく。その結果、ワーキング・レジスタR5に置かれる値は、 ホスト原始命令5が生じようとするときには、既にワーキング・レジスタR2に 存在する。したがって、ホストの加算命令を、ターゲット原始命令5の変換から 除去することができ、ワーキング・レジスタR2内の値をワーキング・レジスタ R5にコピーすればよい。同様に、ワーキング・レジスタRebp内の値をオフ セット値Ox10と加算するホスト命令も、ターゲット原始命令8の変換では除去す ることができる。何故なら、このステップは既にターゲット原始命令6の変換に おいて行われており、結果はレジスタR7にあるからである。この最適化は思索 に依存せず、そのため失敗や再変換がないことを注記しておく。 変換内ではターゲット例外が発生せず、したがって、eipやターゲット状態を 更新する際の遅延も発生しないと仮定する。 この例は、変換全体を構成する原始ターゲット命令の変換が、例外を発生する ことなく行うことができると思索する最適化を例示する。これが真であれば、オ フィシャル・ターゲット・レジスタを更新したり、個々のターゲット原始命令を 実行するホスト原始命令の各シーケンス毎に、その終了時に格納バッファにおけ るアンコミットの格納をコミットする必要がなくなる。思索が真であれば、ター ゲット原始命令のシーケンスの終了時に、オフィシャル・ターゲット・レジスタ だけを更新すればよく、格納をコミットするのは一度だけでよい。これによって 、各原始ターゲット命令を実行するための原始ホスト命令を2つ除去することが 可能となる。これらは、オフィシャル・ターゲット・レジスタを更新し、アンコ ミットの格納をメモリにコミットする単一のホスト原始命令と置換する。 これは、別の思索的動作であり、これも正しい思索を含む可能性が非常に高い ことは理解されよう。このステップは、思索が真であれば、従来技術のエミュレ ーション技術全てに対して、非常に大きな利点を提供することになる。これは、 ターゲット原始命令のシーケンス全体を実行する原始ホスト命令の全てを、1つ のシーケンスに集合化し、その中で個々のホスト原始命令の全てを一緒に最適化 することができる。これには、超長命令ワード技術を利用したモーフ・ホスト上 で多数の動作を並列に走らせることができるという利点がある。また、これによ って、より多数のその他の最適化も可能となる。何故なら、このような最適化に 対する選択肢が広がるからである。更にまた、しかしながら、思索が真でないこ とが判明し、ループの実行時に例外が発生した場合、オフィシャル・ターゲット ・レジスタおよびメモリは、ターゲット原始命令のシーケンスの開始時に存在し たオフィシャル・ターゲットの状態を保持している。何故なら、ホスト命令のシ ーケンスが実際に実行されるまで、コミットは生じないからである。例外から復 元するために必要な全ては、アンコミットの格納を消去し、オフィシャル・レジ スタをワーキング・レジスタにロールバックし、シーケンスの開始時にターゲッ ト原始命令の変換を再度開始することである。この再変換は、1度に1ターゲッ ト命令ずつの変換を行い、各ターゲット原始命令を表すホスト・シーケンスを変 換した後に、オフィシャル状態を更新する。次に、この変換を実行する。この再 変換において例外が発生した場合、この例外を実行するために、オフィシャル・ ターゲット・レジスタおよびメモリにおいて、正しいターゲット状態を直ちに得 ることができる。 注釈"Live Out"は、コミットの前にReaxおよびRecxを実際に正しく保持 する必要性のことを意味する。さもなければ、更なる最適化が不可能な場合もあ る。 この要約は、最適化プロセスのこの時点において残っているホスト原始命令の シーケンスを例示する。この例は、ターゲット命令ポインタ(EIP)インライ ンの維持を示すが、変換時に分岐のためのポインタEIPをライン外に維持する ことが可能である。この場合、ポインタEIP更新シーケンスをこのステップお よび本例の後続のステップから除去することができる。 レジスタ資源依存性を低下させるための名称変更。これによって、以降のスケジ ューリングが一層効果的となる。この時点以降、個々のターゲットX86命令と ホスト命令との間の関係が増々曖昧になるので、元のターゲットX86コードを 省略する。 このサンプルは、通常レジスタ名称変更と呼ばれる、最適化の次のステップを 示す。ここでは、ホスト原始命令のシーケンスにおいて1回以上の動作に用いら れるワーキング・レジスタを必要とする動作は、異なる不使用のワーキング・レ ジスタを利用するように変更され、2つのホスト命令が同じハードウエアを必要 とするという可能性をなくす。したがって、例えば、先の2つのサンプルにおい て、2番目のホスト原始命令は、オフィシャル・ターゲット・レジスタECXを 表すワーキング・レジスタRecxを使用する。10番目のホスト原始命令も、 ワーキング・レジスタRecxを使用する。2番目のホスト原始命令における動 作を変更し、R0内のアドレスによって示される値を、レジスタRecxではな く、ワーキング・レジスタR1に格納することにより、先の2つのホスト命令が 双方とも同じレジスタを使用する事態は避けられる。同様に、4番目、5番目、 および6番目の原始命令も、先のサンプルでは、全てワーキング・レジスタRe axを利用する。4番目のホスト原始命令を変更し、ワーキング・レジスタRe axの代わりに、それまで不使用のワーキング・レジスタR3を利用するように し、更に6番目のホスト原始命令を変更して、レジスタReaxの代わりに、そ れまで不使用のワーキング・レジスタR4を利用することによって、これらのハ ードウエア依存性がなくなる。 ホストVLIWハードウエア上で並列に実行可能な多数の動作として、原始ホス ト動作を組織化するスケジューリング・プロセスの後。各行は、VLIWマシン が実行する並列動作を示し、"&"は並列であることを示す。 このサンプルは、モーフ・ホスト上で実行するためのホスト原始命令のスケジ ューリングを示す。この例では、モーフ・ホストをVLIWプロセッサと仮定し 、コード・モーフィング・ソフトウエアと協同するために備えられたハードウエ ア機能強化に加えて、処理ユニットの中でもとりわけ、2つの算術および論理( ALU)ユニットが含まれている。最初の行は、モーフ・ホスト上で一緒に走る ようにスケジュールされた2つの個別の加算命令を示す。サンプルに見られるよ う に、これらは、先の要約の直前のサンプルにおける3番目および8番目の原始ホ スト命令である。2番目の行は、NOP(無動作であるが、次の命令に進む)命 令および別の加算命令を含む。NOP命令は、何らかのスケジューリング最適化 を行った後でも、一緒に走らせることができる命令が常に2つあるとは限らない ことを示す。いずれにしても、このサンプルは、この時点では9組の原始ホスト 命令のみが、元の10個のターゲット命令を実行するために残されていることを 示す。 ホスト分岐ターゲットおよび連鎖格納変換の解決 このサンプルは、本質的に、ホスト原始命令の同じ組を例示するが、命令はこ の時点では、変換バッファに格納され、1回以上実行されている点で異なる。何 故なら、最後のジャンプ(jp)命令が、ここでは、変換された命令の別のシー ケンスに連鎖することによって与えられたジャンプ・アドレスを示すからである 。連鎖プロセスは、シーケンスの変換が完了していれば、変換部のメイン・ルー プから命令のシーケンスを取り出す。 進んだ最適化、逆方向コード移動 これ以降の例は、スケジューリングに先立つコードから始まる。この最適化は、 まず、コードがループであることの検出に依存する。次に、ループ本体から不変 の動作を除去し、ループ本体に入る前に1回実行することができる。 この例は、大抵は多数回繰り返されるシーケンスでのみ利用される進んだ最適 化ステップを例示する。このプロセスは、最初に、ループを形成する変換を検出 し、個々の原始ホスト命令を調べて、ループ本体内で一定の結果を生成する命令 を判定する。これらの命令をループ本体から除去し、1回だけ実行して、レジス タ内に値を置く。その時点以降、このレジスタに格納した値を用い、命令を再度 走らせることはしない。 逆方向コード移動後のループ本体のスケジューリング。例示の目的のために、ル ープ本体内のコードのみをスケジューリングして示す。 これら繰り返しのない命令をループから除去し、シーケンスを実行のためにス ケジューリングすると、スケジューリングされた命令は、この最後のサンプルの ようになる。初期の命令は実行されるが、ループの最初の繰り返しの間に1度だ けであり、その後は、図示の7つのクロック・インタバルに残っているホスト原 始命令のみが、ループの間に実行されることがわかる。したがって、実行時間は 、原始ターゲット命令を実行するために必要な10命令から、7命令インタバル に 短縮した。 サンプルからわかるように、ループから除去したステップは、アドレス発生ス テップである。したがって、アドレス発生は、改良マイクロプロセッサでは、ル ープ呼び出し毎に1回だけ行えばよい。即ち、アドレス発生は1回だけ行えばよ い。一方、X86ターゲット・プロセッサのアドレス発生ハードウエアは、これ らのアドレスを、ループを実行する毎に発生しなければならない。ループを10 0回実行する場合、改良マイクロプロセッサは1回だけアドレスを発生するのに 対して、ターゲット・プロセッサは、各アドレスを100回発生することになる 。 逆方向コード移動の後 これは、変数を安全にメモリからレジスタに移動させることができる、モーフ・ ホストのレジスタ・エイリアス検出ハードウエアの使用を示す。開始点は、「逆 方向コード移動」の後のコードである。これは、ロードを除去することができる 最適化を示す。 最初にロードを実行する。エイリアス・ハードウエアによってアドレスは保護 されており、このアドレスに対する格納が行われると、「エイリアス」例外が発 生する。次に、ループ本体内のロードをコピーと置換する。ループの本体の後、 エイリアス・ハードウエアを解放する。 このサンプルは、更に進んだ最適化を例示し、本発明を含むマイクロプロセッ サによって実施することができる。このサンプルより2つ前のサンプルを再度参 照すると、最初の3つの加算命令が、スタック上のアドレスの計算を伴っていた ことに気が付くであろう。これらのアドレスは、ホスト動作のシーケンスの実行 中変化しない。つまり、これらのアドレスに格納されている値は、メモリから検 索し、実行のために直ちに得ることができるレジスタにロードしておけばよい。 サンプルに見られるように、これはホスト原始命令6,8,および10において 行われる。命令7,9および11では、メモリ・アドレスの各々に、特殊なホス ト・エイリアス・ハードウエアによって保護されているという印が付けられてお り、レジスタは、これらのメモリ・アドレスのエイリアスとして示されているの で、そのデータを変更しようとするいずれの試みも、例外の原因となる。この点 において、これらのスタック・メモリ・アドレスからのデータ移動を伴うロード 動作の各々は、単純なレジスタ間コピー動作となり、これは、メモリ・アドレス からのロードよりも格段に速く進展する。n=0まで一旦ループを実行し終えた なら、エイリアス・レジスタを他のために利用できるように、メモリ・アドレス の各々から保護を除去しなければならないことを注記しておく。 コピー伝搬 エイリアス・ハードウエアを用いて、ループ本体内のロードをコピーに転換した 後、コピー伝搬によって、いくつかのコピーを不要とすることができる。 このサンプルは、最適化の次の段階を示す。ここでは、最後のサンプルで示し た最適化においてロード命令を置換したコピー命令の殆どが不要であり、除外し てもよいことを認識する。即ち、レジスタ間コピー動作が行われると、データを コピーした元のレジスタ内に、その動作前のデータが存在する。その場合、デー タは、それがコピーされたレジスタではなく、最初のレジスタにアクセスするこ とができ、コピー動作を除去することができる。これからわかるように、最後の サンプルのループ内に示す、先頭、2番目、5番目および9番目の原始ホスト命 令が除去される。加えて、ホスト原始命令の他のものに用いられているレジスタ も変更され、当該データに対する正しいレジスタを反映する。したがって、例え ば、最初と2番目のコピー命令を除去した場合、3番目の格納命令は、データが 存在するワーキング・レジスタRc(レジスタR1ではなく)からデータをコピ ーし、ワーキング・レジスタRs(レジスタR3ではなく)内に示されるアドレ スにそのデータを置かなければならない。ワーキング・レジスタRsには、その アドレスが存在する。 ループ本体のみのスケジューリングを示す例 上のサンプルにスケジューリング後のホスト命令を示す。このシーケンスは、 ソース・コードから当初デコードされた原始ターゲット命令を実行するよりも、 ループを実行するのに必要なクロックが少なくて済むことを注記しておく。した がって、行われた他の加速化の全てとは別に、結合された動作を走らせる総回数 は、元のターゲット・コードを実行するために必要な動作よりも、単純に少なく なる。 エイリアス・ハードウェアの使用による格納の除去 このサンプルに示す最終的な最適化は、エイリアス・ハードウエアの使用によ る格納の除去である。これは、ループ本体内から格納を除去し、それらをループ の結びにおいてのみ実行する。これによって、ループ本体内のホスト命令数が、 元の10個のターゲット命令と比較して、3つに減少する。 以上、好適な実施形態に関して本発明の説明を行ったが、本発明の精神および 範囲から逸脱することなく、当業者には種々の変更や変形も可能であることは認 められよう。例えば、本発明は、X86プロセッサのエミュレーションに関して 説明したが、本発明は、同様に、他のプロセッサ・アーキテタチャに設計された プログラム、およびPコード、Postscript、またはJavaプログラムのような 仮想マシン上で実行するプログラムにも適用されることは理解されよう。したが って、本発明は、以下の請求の範囲に沿って解釈すべきものとする。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ウィング,マルコム・ジェイ アメリカ合衆国カリフォルニア州94025, メンロ・パーク,ケント・プレイス 24, アパートメント 5

Claims (1)

  1. 【特許請求の範囲】 1.ホスト命令セットの命令を実行するように設計されたホスト・プロセッサと 、ターゲット命令セットからの命令を前記ホスト命令セットの命令に変換するソ フトウエアとを含むコンピュータにおいて、メモリを書き込みから保護するシス テムであって、 メモリ・アドレスが、ホスト命令に変換されたターゲット命令を格納している か否かについて示すハードウエア手段と、 メモリ・アドレスがホスト命令に変換されたターゲット命令を格納しているこ との指示に応答して、一旦前記メモリ・アドレスに書き込まれたなら、更新され る前に、前記メモリ・アドレスに関連する変換が利用されないことが確認される まで、前記メモリ・アドレスへの書き込みを保護するソフトウエア手段と、 を備えることを特徴とするシステム。 2.請求項1記載のメモリを書き込みから保護するシステムにおいて、前記ハー ドウエア手段が、 仮想アドレスと、関連する物理アドレスとのための複数の格納ロケーションを 含むルック・アサイド・バッファと、 前記変換ルック・アサイド・バッファの各格納ロケーションにおける格納位置 と、 を備えることを特徴とするシステム。 3.請求項1記載のメモリを書き込みから保護するシステムにおいて、前記メモ リ・アドレスへの書き込みを保護する前記ソフトウエア手段が、前記メモリ・ア ドレスに関連する変換を無効化することを特徴とするシステム。 4.請求項1記載のメモリを書き込みから保護するシステムにおいて、前記ハー ドウエア手段が、 仮想アドレスと、関連する物理アドレスとに対する複数の格納ロケーションを 含むルック・アサイド・バッファと、 前記変換ルック・アサイド・バッファの各格納ロケーションにおける格納位置 と、 を備え、 前記メモリ・アドレスへの書き込みを保護する前記ソフトウエア手段が、前記 メモリ・アドレスに関連する変換を無効化することを特徴とするシステム。 5.請求項1記載のメモリを書き込みから保護するシステムにおいて、前記メモ リ・アドレスへの書き込みを保護する前記ソフトウエア手段が、前記メモリ・ア ドレスに関連する変換を除去することを特徴とするシステム。 6.請求項1記載のメモリを書き込みから保護するシステムにおいて、前記ハー ドウエア手段が、 仮想アドレスと、関連する物理アドレスとのための複数の格納ロケーションを 含むルック・アサイド・バッファと、 前記変換ルック・アサイド・バッファの各格納ロケーションにおける格納位置 と、 を備え、 前記メモリ・アドレスへの書き込みを保護する前記ソフトウエア手段が、前記 メモリ・アドレスに関連する変換を除去することを特徴とするシステム。 7.コンピュータ・システムであって、 ホスト命令セットの命令を実行するように設計されたホスト・プロセッサと、 ターゲット命令セットからの命令を前記ホスト命令セットの命令に変換するソ フトウエアと、 変換されたプログラムからのターゲット命令を格納する手段と、 ターゲット命令から変換されたホスト命令を、実行のために、格納する変換バ ッファと、 ホスト命令に変換されたターゲット命令を格納するターゲット・アドレスへの 書き込みアクセスに対して例外を発生するハードウエア手段と、 を備えることを特徴とするコンピュータ・システム。 8.請求項7記載のコンピュータ・システムにおいて、前記例外を発生するハー ドウエア手段が、最近アクセスされたメモリの仮想および物理アドレスに対する 複数の格納ロケーションを含む変換ルック・アサイド・バッファを備え、前記格 納ロケーションの各々が、ターゲット・アドレスにおける命令がホスト命令に変 換されていることを示す格納位置を含むことを特徴とするコンピュータ・システ ム。 9.請求項7記載のコンピュータ・システムであって、更に、ホスト命令に変換 されたターゲット命令を格納するターゲット・アドレスへの書き込みアクセスに 対する例外に応答し、前記メモリ・アドレスに関連する変換が、更新される前に 、利用されないことが確認されるまで、前記メモリ・アドレスへの書き込みを保 護するソフトウエア手段を備えることを特徴とするコンピュータ・システム。 10.請求項9記載のコンピュータ・システムにおいて、書き込みアクセスに対 する例外に応答する前記ソフトウエア手段が、前記メモリ・アドレスに関連する 変換を無効化するソフトウエア手段を備えることを特徴とするコンピュータ・シ ステム。 11.請求項9記載のコンピュータ・システムにおいて、書き込みアクセスに対 する例外に応答する前記ソフトウエア手段が、前記メモリ・アドレスに関連する 変換を除去するソフトウエア手段を備えることを特徴とするコンピュータ・シス テム。 12.ホスト・プロセッサによる実行のために、ホスト命令に変換されたターゲ ット命令を含むメモリ・アドレスへの書き込みの試行に応答する方法であって、 ホスト命令に変換されたターゲット命令を含むメモリ・アドレスをマークする ステップと、 前記メモリ・アドレスに対する書き込みが試行されたときに、マークされたメ モリ・アドレスを検出するステップと、 前記メモリ・アドレスに関連する変換が、更新される前に、利用されないこと が確認されるまで、前記メモリ・アドレスにおけるターゲット命令を保護するこ とによって、マークされたメモリ・アドレスの検出に応答するステップと、 から成ることを特徴とする方法。 13.請求項12記載の方法において、ホスト命令に変換されたターゲット命令 を含むメモリ・アドレスをマークする前記ステップが、変換ルック・アサイド・ バッファのメモリ・ロケーションにおいて、ターゲット・アドレスが前記ターゲ ット命令の物理アドレスで変換されたことの指示を格納するステップから成るこ とを特徴とする方法。 14.請求項12記載の方法において、前記メモリ・アドレスに関連する変換が 、更新される前に、利用されないことが確認されるまで、前記メモリ・アドレス におけるターゲット命令を保護することによって、マークされたメモリ・アドレ スの検出に応答する前記ステップが、 マークされたメモリ・アドレスの検出に応答して例外を発生するステップと、 前記メモリ・アドレスに書き込む前に、前記メモリ・アドレスに関連する変換 を無効化することによって、前記例外に応答するステップと、 から成ることを特徴とする方法。 15.マイクロプロセッサであって、 第1命令セットを実行可能なホスト・プロセッサと、 第2の異なる命令セットを有するターゲット・プロセッサに対して書かれたプ ログラムを、前記ホスト・プロセッサによる実行のために、前記第1命令セット の命令に変換するコード・モーフィング・ソフトウエアと、 メモリ・コントローラと、 を備え、前記メモリ・コントローラが、 最近アクセスされた仮想ターゲット・アドレスと、該仮想ターゲット・アドレ スによって表わされる物理アドレスとを記録する、複数の格納ロケーションを含 むアドレス変換バッファと、 前記格納ロケーションの各々が、物理アドレスにおけるターゲット命令がホス ト命令に変換されたか否かについて指示する手段を含み、 前記指示する手段が、物理アドレスにおけるターゲット命令がホスト命令に変 換されたことを示す、前記アドレス変換バッファの格納ロケーションにおけるア ドレスの書き込みアクセスに応答して、前記メモリ・アドレスに関連する変換が 、更新される前に、利用されないことを確認されるまで、前記メモリ・アドレス への書き込みを保護する手段と、 を備えることを特徴とするマイクロプロセッサ。 16.請求項15記載のマイクロプロセッサにおいて、前記指示する手段が、物 理アドレスにおけるターゲット命令がホスト命令に変換されたことを示す、前記 アドレス変換バッファの格納ロケーションにおけるアドレスの書き込みアクセス に応答して、前記メモリ・アドレスへの書き込みを保護する前記手段が、 指示の検出に応答して例外を発生する手段と、 前記例外に応答して、前記メモリ・アドレスにアクセスする前に行うべき後続 の動作を指示する手段と、 を備えることを特徴とするマイクロプロセッサ。 17.請求項16記載のマイクロプロセッサにおいて、物理アドレスにおけるタ ーゲット命令がホスト命令に変換されたか否かについて指示する前記手段が、格 納ロケーション内に格納位置を備えることを特徴とするマイクロプロセッサ。 18.メモリ・コントローラであって、 最近アクセスされた仮想アドレスと、該仮想アドレスによって表わされる物理 アドレスとを記録する、複数の格納ロケーションを含むアドレス変換バッファと 、 前記格納ロケーションの各々が、物理アドレスが、ホスト命令セットの命令に 変換されたターゲット命令セットの命令を格納しているかか否かについて指示す る手段を含み、 格納ロケーションにおける指示を検出し、前記物理アドレスへの書き込みアク セスを防止し、前記アドレスにアクセスする前に後続の動作を指示する手段と、 を備えることを特徴とするメモリ・コントローラ。 19.請求項18記載のメモリ・コントローラにおいて、格納ロケーションにお ける指示を検出し、前記物理アドレスへの書き込みアクセスを防止し、前記アド レスにアクセスする前に後続の動作を指示する前記手段が、 指示の検出に応答して、例外を発生する手段と、 前記例外に応答して、前記アドレスにアクセスする前に、前記変換されたホス ト命令に関して行うべき後続の動作を指示する手段と、 を備えることを特徴とするメモリ・コントローラ。 20.請求項18記載のメモリ・コントローラにおいて、前記指示する手段が、 格納ロケーション内に格納位置を備えることを特徴とするメモリ・コントローラ 。
JP51207299A 1997-08-11 1997-08-11 先進のプロセッサのための変換メモリ保護装置 Expired - Fee Related JP3621116B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US1997/014117 WO1999008191A1 (en) 1997-08-11 1997-08-11 Translated memory protection apparatus for an advanced microprocessor

Publications (2)

Publication Number Publication Date
JP2001519955A true JP2001519955A (ja) 2001-10-23
JP3621116B2 JP3621116B2 (ja) 2005-02-16

Family

ID=22261430

Family Applications (1)

Application Number Title Priority Date Filing Date
JP51207299A Expired - Fee Related JP3621116B2 (ja) 1997-08-11 1997-08-11 先進のプロセッサのための変換メモリ保護装置

Country Status (5)

Country Link
EP (1) EP1004075A4 (ja)
JP (1) JP3621116B2 (ja)
KR (1) KR100421687B1 (ja)
CA (1) CA2283560C (ja)
WO (1) WO1999008191A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015179318A (ja) * 2014-03-18 2015-10-08 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation バイナリコードの実行を制御する装置及び方法

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
US7254806B1 (en) 1999-08-30 2007-08-07 Ati International Srl Detecting reordered side-effects
US6751583B1 (en) 1999-10-29 2004-06-15 Vast Systems Technology Corporation Hardware and software co-simulation including simulating a target processor using binary translation
US7424620B2 (en) 2003-09-25 2008-09-09 Sun Microsystems, Inc. Interleaved data and instruction streams for application program obfuscation
US8220058B2 (en) 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7353499B2 (en) 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US7415618B2 (en) 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US7363620B2 (en) 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
US10754790B2 (en) 2018-04-26 2020-08-25 Qualcomm Incorporated Translation of virtual addresses to physical addresses using translation lookaside buffer information

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4481573A (en) * 1980-11-17 1984-11-06 Hitachi, Ltd. Shared virtual address translation unit for a multiprocessor system
US4914577A (en) * 1987-07-16 1990-04-03 Icon International, Inc. Dynamic memory management system and method
US4825412A (en) * 1988-04-01 1989-04-25 Digital Equipment Corporation Lockout registers
GB2239724B (en) * 1990-01-05 1993-11-24 Sun Microsystems Inc Apparatus for maintaining consistency in a multi-processor computer system using virtual caching
US5282274A (en) * 1990-05-24 1994-01-25 International Business Machines Corporation Translation of multiple virtual pages upon a TLB miss
US5437017A (en) * 1992-10-09 1995-07-25 International Business Machines Corporation Method and system for maintaining translation lookaside buffer coherency in a multiprocessor data processing system
US5577231A (en) * 1994-12-06 1996-11-19 International Business Machines Corporation Storage access authorization controls in a computer system using dynamic translation of large addresses

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015179318A (ja) * 2014-03-18 2015-10-08 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation バイナリコードの実行を制御する装置及び方法

Also Published As

Publication number Publication date
EP1004075A1 (en) 2000-05-31
KR100421687B1 (ko) 2004-03-10
WO1999008191A1 (en) 1999-02-18
KR20010014096A (ko) 2001-02-26
JP3621116B2 (ja) 2005-02-16
EP1004075A4 (en) 2001-01-17
CA2283560A1 (en) 1999-02-18
CA2283560C (en) 2003-12-09

Similar Documents

Publication Publication Date Title
JP3753743B2 (ja) 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置
JP3615770B2 (ja) アドレスされた構成部分の思索の失敗を検出するメモリ・コントローラ
US7716452B1 (en) Translated memory protection apparatus for an advanced microprocessor
US5958061A (en) Host microprocessor with apparatus for temporarily holding target processor state
US6011908A (en) Gated store buffer for an advanced microprocessor
JP3776132B2 (ja) マイクロプロセッサの改良
JP3621116B2 (ja) 先進のプロセッサのための変換メモリ保護装置
JP3654913B2 (ja) 一時的にターゲット・プロセッサの状態を保持する装置を備えたホスト・マイクロプロセッサ

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040224

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20040521

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20040705

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040824

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: 20041019

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20041117

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: 20071126

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081126

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091126

Year of fee payment: 5

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

Free format text: JAPANESE INTERMEDIATE CODE: R313111

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091126

Year of fee payment: 5

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101126

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101126

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111126

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111126

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121126

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121126

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131126

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees