JP2002536712A - 第2のアーキテクチャのコンピュータにおける第1のコンピュータアーキテクチャ用プログラムの実行 - Google Patents

第2のアーキテクチャのコンピュータにおける第1のコンピュータアーキテクチャ用プログラムの実行

Info

Publication number
JP2002536712A
JP2002536712A JP2000596448A JP2000596448A JP2002536712A JP 2002536712 A JP2002536712 A JP 2002536712A JP 2000596448 A JP2000596448 A JP 2000596448A JP 2000596448 A JP2000596448 A JP 2000596448A JP 2002536712 A JP2002536712 A JP 2002536712A
Authority
JP
Japan
Prior art keywords
computer
instruction
execution
memory
context
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.)
Pending
Application number
JP2000596448A
Other languages
English (en)
Other versions
JP2002536712A5 (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.)
ATI International SRL
Original Assignee
ATI International SRL
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
Priority claimed from US09/239,194 external-priority patent/US7275246B1/en
Priority claimed from US09/332,263 external-priority patent/US6978462B1/en
Priority claimed from US09/334,530 external-priority patent/US7013456B1/en
Priority claimed from US09/385,394 external-priority patent/US8074055B1/en
Application filed by ATI International SRL filed Critical ATI International SRL
Publication of JP2002536712A publication Critical patent/JP2002536712A/ja
Publication of JP2002536712A5 publication Critical patent/JP2002536712A5/ja
Pending 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/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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • 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

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)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)
  • Storage Device Security (AREA)

Abstract

(57)【要約】 2つのバイナリ命令セットのうちのいずれか一方でコード化されたプログラムを実行することができるコンピュータ。メモリは領域に分割され、各領域は、その領域からフェッチされた命令を実行するために2つの命令セットのうちのどちらが使用されるべきかを指示するためにマークされる。ネイティブのオペレーティングシステムは、ゲストの命令セットアーキテクチャのためのオペレーティングシステムが、コンテキストスイッチされるプロセスがネイティブの命令セットであっても、コンテキストスイッチできるようにプロセスを管理する。ゲストの命令セットのコードは、どの部分がネイティブの命令セットに最も有利に変換されるかを決定するためにプロファイルされる。ゲストの命令セットのバイナリの実行が、変換されたネイティブの等価物が存在するフローポイントに到達した時を、回路が認識する。並行制御により、変換されたネイティブコードは、自己修正コードまたはDMA書込みから保護される。

Description

【発明の詳細な説明】
【0001】 背景 本願は、参照としてここに組み込まれ、1999年1月28日出願の出願番号
09/239,194の一部継続出願である出願番号09/322,443の一
部継続出願である、1999年8月30日出願の出願番号09/385,394
の一部継続出願である。
【0002】 本発明は、コンピュータ中央処理装置のインプリメンテーションに関する。 コンピュータによる実行のための各命令は、コンピュータのメモリに記憶され
た2進数として表現される。コンピュータの個々の異なるアーキテクチャは、命
令を異なって表現する。例えば、ある命令、つまりある2進数がIBMシステム
/360コンピュータ、IBMシステム/38、IBM AS/400、IBM
PCおよびIBM PowerPCによって実行される場合、これらの5つの
コンピュータは一般に、たとえ5つ全部が同じ会社により製造されていても、5
つの完全に異なる動作を実行するであろう。コンピュータの命令のバイナリ表現
と、応答してコンピュータがとる動作との間のこの対応は、命令セットアーキテ
クチャ(ISA)と呼ばれる。
【0003】 特定のコンピュータファミリーのためにバイナリISAでコード化されたプロ
グラムは、しばしば単に「バイナリ」と呼ばれる。商用ソフトウェアは一般にバ
イナリ形式で配布される。前段で指摘した非互換性は、あるアーキテクチャ用の
バイナリ形式で配布されたプログラムが一般に別のコンピュータにおいて走行し
ないことを意味している。従って、コンピュータユーザはあるアーキテクチャか
ら別のものに変わることを極めて嫌がり、コンピュータ製造業者は、各自のコン
ピュータアーキテクチャを修正する際に限られた範囲に制約される。
【0004】 コンピュータは、そのコンピュータが一員であるアーキテクチャファミリーの
ISAである、そのネイティブISAでコード化されたプログラムを最も自然に
実行する。別の非ネイティブISAのコンピュータ用にコード化されたバイナリ
を本来通りに実行するためのいくつかの方法が知られている。ハードウェアエミ
ュレーションでは、コンピュータは、非ネイティブ命令を実行することに特定的
に向けられたハードウェアを有する。エミュレーションは一般に、モードビット
、電子スイッチによって制御され、非ネイティブバイナリが実行されなければな
らない場合、エミュレートするコンピュータにおける特別な命令がモードビット
を設定し、制御を非ネイティブバイナリに転送する。非ネイティブプログラムが
抜け出ると、以降の命令がネイティブISAにより解釈される必要があることを
指定するために、モードビットがリセットされる。通常、エミュレータでは、ネ
イティブおよび非ネイティブ命令は異なるアドレス空間に記憶される。第2の代
替策は、非ネイティブアーキテクチャのコンピュータをモデル化するコンピュー
タ上で走行するプログラムであるシミュレータ(時に「インタプリタ」としても
知られる)を使用する。シミュレータは、非ネイティブバイナリの命令を順次的
にフェッチし、各命令の意味を順番に決定し、非ネイティブコンピュータのソフ
トウェアモデルにおいてその結果をシミュレートする。シミュレータもやはり、
一般に、ネイティブおよび非ネイティブ命令を別個のアドレス空間に記憶する。
(用語「エミュレーション」および「シミュレーション」は、産業全体において
、ここに含意した定義によって示唆され得る通りに均一に適用されるものではな
い。)第3の代替策では、バイナリ変換、トランスレータプログラムが、非ネイ
ティブバイナリ(プログラム全体またはプログラムの断片)を入力として受け取
り、それを処理し、コンピュータにおいて直接走行するネイティブの命令セット
(「ネイティブバイナリ」)の対応するバイナリを出力として生成する。
【0005】 一般に、エミュレータは、顧客に対する移行支援として、同一製造業者による
古いコンピュータアーキテクチャのエミュレーションのために新しいコンピュー
タにおいて見られる。シミュレータは、同じ目的で提供されるとともに、顧客が
所有しない機械のためにバイナリ形式でしか入手できないソフトウェアに単にア
クセスしたい顧客が使用するために、独立ソフトウェアベンダによって供給され
ている。いずれの技法によっても、非ネイティブの実行は、ネイティブの実行よ
り低速であり、非ネイティブプログラムはネイティブプログラムが利用可能な資
源の一部にしかアクセスできない。
【0006】 コンピュータまたはコンピュータプログラムのビヘイビアをプロファイルする
公知の方法には以下を含む。公知の1プロファイリング方法では、プログラムに
よって占有されたアドレス範囲が複数の範囲に分割されて、タイマは時々オフに
なる。ソフトウェアプロファイルアナライザが、プログラムが実行していたアド
レスを計算し、そのアドレスを含む範囲に対応してカウンタを増分する。一定時
間後、カウンタは、ある範囲が多く実行され、別の範囲はほとんどまったく実行
されないことを指示する。別の公知のプロファイリング方法では、カウンタがコ
ンパイラによってプログラムのバイナリテキストに生成される。これらのコンパ
イラ生成されたカウンタは、ある領域が実行された回数をカウントするかまたは
、ある実行点を通過したかまたはある分岐が取られた回数をカウントすることが
できる。
【0007】 概要 全体的に、第1の態様において、本発明は、第1および第2の命令セットの命
令を実行するように設計された命令プロセッサ、プログラムの記憶用メモリ、ペ
ージに対応したエントリのテーブル、スイッチ、遷移ハンドラおよび履歴記録を
備えるコンピュータを特徴とする。メモリは仮想メモリマネージャによる管理の
ためにページに分割される。プログラムは、第1および第2の命令セットの命令
でコード化され、第1および第2のデータ記憶規約を使用する。スイッチは、各
テーブルエントリに記憶された第1のフラグ値に応答し、命令のメモリページに
対応するテーブルエントリの第1のフラグ値による指示に従って代替的に第1ま
たは第2の命令セットのもとで命令を解釈するように命令プロセッサを制御する
。遷移ハンドラは、プログラム実行が第1のデータ記憶規約を使用する命令のペ
ージから第2のデータ記憶規約を使用する命令のページに移行した時を、各ペー
ジに対応するテーブルエントリに記憶された第2のフラグ値による指示に従って
認識し、その認識に応答して、コンピュータのデータ記憶構成を第1の記憶規約
から第2のものに調整するように設計されている。履歴記録は、最近実行された
命令の分類の記録を遷移ハンドラに提供するように設計されている。
【0008】 第2の態様において、本発明は、方法および、その方法の実行のためのコンピ
ュータを特徴とする。命令データは、コンピュータのメモリの単一アドレス空間
の第1および第2の領域からフェッチされる。第1および第2の領域の命令は、
それぞれ、第1および第2のアーキテクチャのまたは、第1および第2のデータ
記憶規約に従っているコンピュータによる実行のためにコード化される。メモリ
領域は第1および第2のインジケータ要素と関係づけられ、インジケータ要素は
各々、関係する領域からの命令がそのもとで実行されるアーキテクチャまたはデ
ータ記憶規約を指示する値を有する。命令データの実行が第1の領域からの第2
のものへ流れると、コンピュータは第2のアーキテクチャまたは規約における実
行に適応される。
【0009】 第3の態様において、本発明は、方法および、その方法の実行のためのコンピ
ュータを特徴とする。命令は、仮想メモリマネージャにより管理されるコンピュ
ータメモリのページに記憶される。ページの命令データは、それぞれ2つの異な
るアーキテクチャのコンピュータによる、および/または2つの異なる実行規約
のもとでの実行のためにコード化される。メモリのページと関係づけられて、ペ
ージの命令が実行されるべきアーキテクチャまたは規約を指示する対応するイン
ジケータ要素が記憶される。ページからの命令は共通プロセッサにおいて実行さ
れ、プロセッサは、ページインジケータ要素に応答して、その命令のページに対
応するインジケータ要素によって指示されたアーキテクチャの、または規約のも
とで命令を実行するように設計されている。
【0010】 第4の態様において、本発明はマイクロプロセッサチップを特徴とする。チッ
プの命令ユニットは、仮想メモリマネージャにより管理されるメモリから命令を
フェッチするように構成され、第1および第2の異なるコンピュータアーキテク
チャ用にコード化された、または第1および第2の異なるデータ記憶規約をイン
プリメントするためにコード化された命令を実行するように構成されている。マ
イクロプロセッサチップは、(a)メモリの各ページと関係づけられて記憶され
たインジケータ要素を検索し、各インジケータ要素はそのページの命令が実行さ
れるアーキテクチャまたは規約を指示しており、(b)それぞれの関係するイン
ジケータ要素による指示に従って、命令実行が第1のアーキテクチャまたは規約
のページから第2のもののページに流れた時を認識し、そして(c)第2のアー
キテクチャまたは規約のページと関係するインジケータ要素に従って命令の実行
を行うように、命令ユニットの処理モードまたはメモリの記憶内容を変更するよ
うに設計されている。
【0011】 第5の態様において、本発明は、方法および、その方法を実行することができ
るマイクロプロセッサを特徴とする。コンピュータオブジェクトコードのセクシ
ョンは、2つの実行の間にコードセクションの修正を伴わず2度実行される。コ
ードセクションは行先アドレスをレジスタに具体化し、間接的にそのレジスタを
介して行先アドレスに制御を直接転送するようにアーキテクチャ的に定義される
。2つの実行は2つの異なる行先アドレスを具体化し、2つの行先のコードは2
つの異なる命令セットでコード化される。
【0012】 第6の態様において、本発明は、方法および、その方法の実行のためのコンピ
ュータを特徴とする。コンピュータの命令セットのうちの制御フロー命令は、複
数のクラスに分類される。コンピュータでのプログラムの実行の間に、その命令
セットの命令の実行の一部として、一番最近実行された分類された制御フロー命
令のクラスを記録するために、記録が更新される。
【0013】 第7の態様において、本発明は、方法および、その方法の実行のためのコンピ
ュータを特徴とする。ソース実行コンテキストから行先実行コンテキストでの実
行のための行先命令に制御を転送する制御転送命令が実行される。行先命令を実
行する前に、コンピュータの記憶コンテキストは、ソース実行コンテキストのも
とで解釈される通りにコンピュータの論理コンテキストを行先実行コンテキスト
のもとで再確立するために調整される。再構成は少なくともある程度、制御転送
命令の分類によって決定される。
【0014】 全体的に、第8の態様において、本発明は、コンピュータを動作させる方法を
特徴とする。並行実行スレッドは、コンピュータの既存のスレッドスケジューラ
によってスケジューリングされる。各スレッドは関係するコンテキストを有し、
スレッドとコンテキストのコンピュータ資源の集合との間の関係づけはスレッド
スケジューラによって維持される。スレッドスケジューラを修正することなく、
関係づけは、スレッドの1つと、スレッドスケジューラにより誘起されたコンテ
キスト変更によるスレッドの拡張コンテキストとの間で維持され、拡張コンテキ
ストはスレッドとの関係がスレッドスケジューラにより維持されるそうした資源
以上のコンピュータの資源を含む。
【0015】 第9の態様において、本発明は、コンピュータを動作させる方法を特徴とする
。エントリ例外が、指定のエントリポイントまたは指定の条件でコンピュータの
オペレーティングシステムへの各エントリで生じるように、確立される。再開例
外が、指定のエントリに続くオペレーティングシステムからの各再開で生じるよ
うに、確立される。コンピュータの中断したプロセスからオペレーティングシス
テムへの指定のエントリを検出すると、エントリ例外が生じ、サービスされる。
再開例外が生じサービスされ、制御は中断したプロセスに返される。
【0016】 第10の態様において、本発明は、コンピュータを動作させる方法を特徴とす
る。コンピュータのオペレーティングシステムを修正することなく、オペレーテ
ィングシステムへの指定のエントリポイントまたは指定のエントリ条件での実行
のためにエントリハンドラが確立される。エントリハンドラは、修正されたコン
テキストをオペレーティングシステムに引き渡す前に、中断したスレッドのコン
テキストを保存し、スレッドコンテキストを修正するようにプログラムされてい
る。オペレーティングシステムを修正することなく、エントリハンドラによるエ
ントリに続くオペレーティングシステムからの再開時の実行のために、出口ハン
ドラが確立される。出口ハンドラは、エントリハンドラの対応する実行により保
存されたコンテキストを復元するようにプログラムされている。
【0017】 第11の態様において、本発明は、コンピュータを動作させる方法を特徴とす
る。コンピュータのサービスルーチンの呼び出しにおいて、リンケージリターン
アドレスが渡され、このリターンアドレスは、サービスルーチンからの復帰時に
リターンアドレスからの命令を実行する試みがプログラム実行の例外を生じるよ
うに、意図的に選択される。サービスルーチンからの復帰時に、選択された例外
が生じる。その例外にサービスした後、制御はサービスルーチンの呼び出し側に
返される。
【0018】 本発明の特定の実施例は以下の特徴の1つ以上を含み得る。領域は仮想メモリ
マネージャによって管理されるページとしてよい。指標は、仮想アドレス変換エ
ントリ、そのエントリが対応する仮想ページと関係づけられているテーブル、そ
のエントリが対応する物理ページフレームと関係づけられているテーブル、変換
索引バッファエントリ、または命令キャッシュのラインにおいて、記憶され得る
。第1の行先のコードは、浮動小数点引き数を受け取り、レジスタベースの呼び
出し規約を用いて浮動小数点戻り値を返すことができ、他方、第2の行先のコー
ドは、メモリスタックベースの呼び出し規約を用いて浮動小数点引き数を受け取
り、トップオブスタックポインタにより指示されるレジスタを用いて浮動小数点
値を返すことができる。
【0019】 2つのアーキテクチャは2つの命令セットアーキテクチャとすることができ、
コンピュータの命令実行ハードウェアは、指標に従った2つの命令セットアーキ
テクチャに従って命令を解釈するように制御され得る。命令の実行のモードは、
実行が第1の領域から第2のものに流れた時にさらなる介入を伴わず変更するこ
とができ、またはモードは、実行が第1の領域から第2のものに流れた時にコン
ピュータが例外を行った場合に例外ハンドラによって変更することができる。領
域のうちの1つは、コンピュータにとって非ネイティブの命令セットでバイナリ
コード化されたオフザシェルフオペレーティングシステムを記憶し得る。
【0020】 2つの規約は第1および第2の呼び出し規約とすることができ、コンピュータ
は、プログラム実行が、第1の呼び出し規約を使用する領域から第2の呼び出し
規約を使用する領域に移行した時を認識することができ、その認識に応答して、
コンピュータのデータ記憶構成は第1の呼び出し規約から第2のものに調整され
る。2つの呼び出し規約のうちの一方はレジスタベースの呼び出し規約とするこ
とができ、他方の呼び出し規約はメモリスタックベースの呼び出し規約とするこ
とができる。第1のアーキテクチャの資源と第2のものの資源との間に定義され
たマッピングが存在可能であり、このマッピングは、それらの資源が2つのアー
キテクチャの呼び出し規約の類似の機能を提供する時には、2つのアーキテクチ
ャの対応する資源をコンピュータの共通の物理資源に割り当てる。構成の調整は
、データのビット表現を第1の表現から第2の表現へ変更することを含み、表現
の変更は、実行規約の変更にまたがりデータの意味を保存するように選択され得
る。データを第1のロケーションから第2のものにコピーするための規則は、実
行を第2の領域に転送した命令の分類および/または、認識された実行転送の前
の実行のロケーションに関係するデスクリプタを試験することによって、少なく
ともある程度決定できる。
【0021】 命令の第1のクラスは、呼び出し規約に従って渡された引き数に関係するサブ
プログラム間で制御を転送するための命令を含み、命令の第2のクラスは、存在
する場合に引き数が呼び出し規約に従って渡されない分岐命令を含み得る。実行
コンテキストのうちの一方はレジスタベースの呼び出し規約であり、他方の実行
コンテキストはメモリスタックベースの呼び出し規約とし得る。この再構成は、
2つのデータ記憶規約のもとでの類似の実行コンテキストを反映し、再構成プロ
セスは少なくともある程度、命令分類記録によって決定される。制御フロー命令
の一部において、分類は、命令の即値フィールドにおいてコード化することがで
き、即値フィールドは、クラスの記録を更新するためを除き、それがコード化さ
れる命令の実行に対していかなる作用も及ぼさない。制御フロー命令の一部にお
いて、分類は命令の演算コードによって静的に決定され得る。制御フロー命令の
一部では、分類は、プロセッサレジスタおよび/またはコンピュータの汎用レジ
スタの状態によって動的に決定され得る。制御フロー命令の一部では、分類は、
トップスタックポインタにより指示されるレジスタの満/空の状態に基づき動的
に決定することができ、レジスタは機能結果値を保持する。この再構成は例外ハ
ンドラによって実行することができ、ハンドラは、ソースデータ記憶規約、行先
データ記憶規約および命令分類記録に少なくともある程度基づき例外ベクトルに
よって選択される。命令セットの命令は、ドントケアクラスのメンバとして分類
することができ、その結果、ドントケアクラスの命令が実行される際に、記録は
、一番最近実行された分類された命令のクラスを指示するために乱されずそのま
まにしておかれる。行先命令は、コンピュータに非ネイティブな命令セットにお
いてコード化されたオペレーティングシステムのためのオフザシェルフバイナリ
へのエントリポイントとなり得る。
【0022】 オペレーティングシステムは、そのコンピュータにネイティブなアーキテクチ
ャ以外のコンピュータアーキテクチャのためのオペレーティングシステムとする
ことができる。コンピュータは、コンピュータにネイティブなオペレーティング
システムを付加的に実行することができ、各例外は2つのオペレーティングシス
テムのうちの一方によるハンドリングのために分類できる。スレッドの再開のた
めのリンケージリターンアドレスは、関係づけを維持するために使用される情報
を含むように修正され得る。修正されたレジスタの少なくとも一部はタイムスタ
ンプで上書きされ得る。エントリ例外ハンドラは、プロセスをオペレーティング
システムに引き渡す前にオペレーティングシステムによりそのプロセスと関係づ
けられて維持されるプロセスコンテキストの一部のデータレジスタの少なくとも
半分を変更することができ、レジスタの少なくとも1つにバリデーションスタン
プが冗長的に記憶され、ここにおいて、修正されたレジスタの少なくとも一部は
、修正の前にスレッドコンテキストの少なくとも一部が保存される記憶場所を指
示する値で上書きされる。オペレーティングシステムおよび中断したスレッドは
、コンピュータの異なる命令セットアーキテクチャにおいて実行できる。エント
リ例外にサービスする間に、コンピュータのコンテキストの一部は保存されるこ
とができ、中断したスレッドのコンテキストは、中断したスレッドおよびその対
応するコンテキストをオペレーティングシステムに引き渡す前に変更され得る。
スレッドスケジューラおよびスレッドがコンピュータの異なる実行モードで実行
する場合、スレッドとコンテキストとの間の関係づけを維持するステップが、ス
レッド実行モードからスレッドスケジューラ実行モードへの遷移時に自動的に呼
び出される。スレッドコンテキストは、コンテキストが保存されるべき空の記憶
場所は待ち行列の先頭から割り当てられ、再使用のために最近空になった記憶場
所は待ち行列の先頭にエンキューされ、保存された満杯の記憶場所は待ち行列の
末尾で列を作るという、キューイング規則によって管理される記憶場所のプール
から割り当てられた記憶場所に保存され得る。スレッド実行モードのための呼び
出し規約は、スレッドスケジューラ実行モードに適合するためにオペランドをあ
る形式から別のものに変換するために取られるアクションを指定する値へのレジ
スタの設定を必要とし得る。割込みの引き渡しは、スレッドがチェックポイント
に到達可能にするために十分な時間だけ遅延されるか、または、スレッドの実行
がチェックポイントまでロールバックされることができ、このチェックポイント
は、スレッドとの資源関係づけがスレッドスケジューラによって維持されるよう
なもの以上のスレッドの資源である、拡張コンテキストの量が縮小される、スレ
ッドの実行におけるポイントである。リンケージリターンアドレスは、そのペー
ジから命令を実行する試みに際して選択された例外を生じるメモリ属性を有する
メモリページをポイントするように選択され得る。サービスルーチンは、コンピ
ュータにネイティブなアーキテクチャ以外のコンピュータアーキテクチャのため
のオペレーティングシステムの割込みサービスルーチンとすることができ、この
サービスルーチンは非同期割込みによって呼び出すことができ、呼び出し側はア
ーキテクチャにネイティブな命令セットでコード化され得る。
【0023】 一般に、第12の態様において、本発明は方法およびコンピュータを特徴とす
る。コンピュータプログラムがコンピュータの論理アドレス空間において実行し
、アドレス変換回路はプログラムによって生成されたアドレス参照をプログラム
の論理アドレス空間からコンピュータの物理アドレス空間へ変換する。プログラ
ムの実行間隔の間に参照された物理記憶アドレスを記録するプロファイル情報が
記録される。
【0024】 一般に、第13の態様において、プログラムがコンピュータにおいて実行され
、このプログラムは仮想アドレスによりメモリを参照する。プログラムの実行と
並行して、プログラムにより行われたメモリ参照を記述するプロファイル情報が
記録され、このプロファイル情報はプロファイルされたメモリ参照の物理アドレ
スを記録する。
【0025】 一般に、第14の態様において、本発明は、命令パイプライン、メモリアクセ
スユニット、アドレス変換回路およびプロファイル回路を備えるコンピュータを
特徴とする。命令パイプラインおよびメモリアクセスユニットは、コンピュータ
のメモリの論理アドレス空間の命令を実行するように構成されている。アドレス
参照を変換するためのアドレス変換回路は、プログラムの論理アドレス空間から
コンピュータの物理アドレス空間にプログラムによって生成される。プロファイ
ル回路は、命令パイプラインと協働的に相互接続され、実行プロファイリングの
ためのコンパイラの援助を要さずに、命令パイプラインで生じるプロファイル可
能事象の発生を検出するように構成されており、プログラムの実行間隔の間に参
照された物理メモリアドレスを記述するプロファイル情報を記録するためにメモ
リアクセスユニットと協働的に相互接続されている。
【0026】 本発明の実施例は、以下の特徴の1つ以上を含み得る。記録された物理メモリ
参照は、命令ポインタにより参照されたバイナリ命令のアドレスを含み、記録さ
れた命令参照の少なくとも1つはアドレス空間のページ境界にまたがる順次的実
行フローの事象を記録することができる。ページ境界をまたいで記録された実行
フローは単一の命令内で発生し得る。ページ境界をまたいで記録された実行フロ
ーは、論理アドレス空間において順次的に隣接する2つの命令間で発生し得る。
記録された命令参照の少なくとも1つは、外部割込みに伴う制御フローの分岐と
し得る。記録された命令参照の少なくとも1つは、プロファイルされた実行間隔
の間にコンピュータにより実行された命令の最後のバイトのアドレスを指示し得
る。記録されたプロファイル情報は、コンピュータのバイナリ命令の意味を決定
するプロセッサモードを記録できる。記録されたプロファイル情報は、コンピュ
ータのレジスタに関する満/空マスクに対するデータ依存性の変更を記録するこ
とができる。命令パイプラインは、コンピュータの資源のほとんど全部へのアク
セスを可能にするネイティブ命令セットおよび、コンピュータの資源のサブセッ
トへのアクセスを可能にする非ネイティブ命令セットという、2つの命令セット
の命令を実行するように構成することができる。命令パイプラインおよびプロフ
ァイル回路はさらに、非ネイティブ命令セットでコード化されたオペレーティン
グシステムの実行の間隔を記述するプロファイル情報の記録を行うように構成す
ることができる。
【0027】 一般に、第15の態様において、本発明は方法を特徴とする。コンピュータに
おいてプログラムが実行される。そのプログラムの実行に関してプロファイル情
報が記録され、プロファイル情報は、実行のプロファイル間隔の間にコンピュー
タにより実行された少なくとも1つの命令の最後のバイトのアドレスを記録する
【0028】 一般に、第16の態様において、本発明は方法を特徴とする。プロファイルさ
れた実行についてプログラムがコンパイルされることなく、コンピュータにおい
てプログラムが実行され、プログラムは、命令の変換が、命令のバイナリ表現に
表現されないプロセッサモードに依存する命令セットでコード化される。プログ
ラムの実行の間隔およびプログラムのプロファイル間隔の間のプロセッサモード
を記述するプロファイル情報が記録され、プロファイル情報は、バイナリコーデ
ィングにおけるモード依存性を解決するために十分なプロセッサモード情報によ
り、プロファイルされたバイナリコードに注釈を付けるように効率的に仕立てら
れる。
【0029】 一般に、第17の態様において、本発明は、命令パイプラインおよびプロファ
イル回路を備えるコンピュータを特徴とする。命令パイプラインは、コンピュー
タの命令を実行するように構成される。プロファイル回路は、実行プロファイリ
ングのためのコンパイラの援助を要さずに、命令パイプラインで生じる事象のシ
ーケンスの発生を検出および記録するように構成されており、そのシーケンスは
、プロファイルされる事象の時間独立な選択判定基準に一致する、プロファイル
された実行間隔の間に発生するすべての事象を含み、記録は所定の停止条件に到
達するまで継続し、実行のプロファイルされない間隔の後、プロファイルされた
実行間隔を開始するために所定の条件の発生を検出するように構成されている。
【0030】 一般に、第18の態様において、本発明は、方法および、その方法の実行のた
めに構成された回路を備えるコンピュータを特徴とする。コンピュータにおける
プログラムの実行のプロファイル間隔の間に、プロファイルされた実行について
プログラムがコンパイルされることなく、実行を記述するプロファイル情報が記
録され、プログラムは、命令の解釈が、命令のバイナリ表現で表現されないプロ
セッサモードに依存する命令セットでコード化され、記録されたプロファイル情
報は以下の2つのクラスのプロファイルされた実行間隔の間に発生する少なくと
も全部の事象を記述している。(1)順次的実行からの実行の分岐、および(2
)モード変更命令の前にプロセッサモードとともに得られるプロセッサモード変
更を誘起する命令の演算コードから推論できないプロセッサモード変更。プロフ
ァイル情報はさらに、実行間隔の間に実行された命令テキストの各個別の物理ペ
ージを識別する。
【0031】 本発明の実施例は以下の特徴の1つ以上を含み得る。プロファイルされた実行
間隔はタイマの満了時に開始され、記録されたプロファイルは、プロファイルさ
れる事象の時間独立な選択判定基準に一致するすべての事象を含む事象のシーケ
ンスを記述しており、その記録は所定の停止条件に到達するまで継続される。プ
ログラム実行の制御フローが順次的実行から分岐する制御フロー事象のソースお
よび行先を指摘するプロファイルエントリが、後の分析のために記録される。記
録されたプロファイル情報は、プログラムのバイナリコードと関係なく、プロフ
ァイルされた実行間隔の間に実行されたオブジェクトコードの全部のバイトを識
別するために効率的に仕立てられる。単一のプロファイル可能事象を記述してい
るプロファイルエントリは、その事象のロケーションのページオフセットを明示
的に記述し、直前のプロファイルエントリから事象のロケーションのページ数を
継承する。プロファイル情報はプログラムの事象のシーケンスを記録し、そのシ
ーケンスは、プロファイルされるプロファイル可能事象の時間独立な判定基準に
一致するプロファイルされた実行間隔の間のすべての事象を含む。記録されたプ
ロファイル情報は、実行のプロファイル間隔の間にコンピュータによって実行さ
れた命令バイナリテキストの範囲を指示し、実行されたテキストの範囲は各範囲
の下限および上限の境界として記録される。記録された上限の境界は、その範囲
の最後のバイト、または最後の命令の第1バイトを記録する。捕捉されたプロフ
ァイル情報は2種類のサブユニットを含み、第1の種類のサブユニットは命令境
界の命令解釈モードを記述し、第2の種類のサブユニットはプロセッサモード間
の遷移を記述している。プログラム実行のプロファイルされない間隔の間には、
プロファイル可能事象について所定の選択判定基準に一致するプロファイル可能
事象の発生に応答して、いかなるプロファイル情報も記録されない。プロファイ
ル回路は、記録された事象の時間を記述するタイムスタンプを記録するように設
計されている。プロファイル回路は、記録された各プロファイル可能事象のクラ
スを記述する事象コードを記録するように設計されている。事象コードを記録す
るために使用されるビットの数は、区別された事象クラスの数のlog2未満で
ある。
【0032】 一般に、第19の態様において、本発明は方法を特徴とする。コンピュータに
おいてプログラムを実行する間、命令パイプラインで生じるプロファイル可能事
象の発生が検出され、命令パイプラインは、プロファイル可能事象の発生と本質
的に並行してプロファイル可能事象を記述するプロファイル情報を記録するよう
に命じられ、この検出および記録はソフトウェア介入を要さずにコンピュータの
ハードウェアの制御のもとで行われる。
【0033】 一般に、第20の態様において、本発明は、命令パイプラインおよびプロファ
イル回路を備えるコンピュータを特徴とする。命令パイプラインは演算装置を含
み、コンピュータのメモリおよびプロファイル回路から受け取った命令を実行す
るように構成されている。プロファイル回路は、命令パイプラインと共通のハー
ドウェアコントロールである。プロファイル回路および命令パイプラインは、命
令パイプラインで生じるプロファイル可能事象の発生を検出するために協働的に
相互接続されており、プロファイル回路は、ソフトウェア介入を要さずに、プロ
ファイル可能事象の発生と本質的に並行してプロファイル可能事象を記述するプ
ロファイル情報を記述するプロファイル情報の記録を行うように動作可能である
【0034】 一般に、第21の態様において、本発明は、第1および第2のCPUを特徴と
する。第1のCPUは、プログラムを実行し、そのプログラムの実行を記述する
プロファイルデータを生成するように構成されている。第2のCPUは、実行お
よびプロファイルデータ生成が第1のCPUで継続する間に、生成されたプロフ
ァイルデータを分析し、収集されたプロファイルデータの分析に少なくともある
程度基づき第1のCPUにおけるプログラムの実行を制御するように構成されて
いる。
【0035】 一般に、第22の態様において、本発明は方法を特徴とする。コンピュータに
おいてプログラムを実行する間、コンピュータは命令結果の記憶のために汎用レ
ジスタファイルのレジスタを使用し、命令パイプラインで生じるプロファイル可
能事象の発生が検出される。プロファイル可能事象を記述するプロファイル情報
は、プロファイル可能事象が発生すると、最初にコンピュータのメインメモリに
情報を捕捉することなく、汎用レジスタファイルに記録される。
【0036】 一般に、第23の態様において、本発明は、レジスタの汎用レジスタファイル
、命令パイプラインおよびプロファイル回路を備えるコンピュータを特徴とする
。命令パイプラインは演算装置を含み、コンピュータのメモリキャッシュからフ
ェッチされた命令を実行するように構成されており、命令結果の記憶のための汎
用レジスタファイルのためのレジスタとデータ通信する。プロファイル回路は、
命令パイプラインと動作可能に相互接続されており、命令パイプラインで生じる
プロファイル可能事象の発生を検出し、プロファイル可能事象が発生すると、最
初にコンピュータのメインメモリに情報を捕捉することなく、汎用レジスタファ
イルにプロファイル可能事象を記述する情報を捕捉するように構成されている。
【0037】 一般に、第24の態様において、本発明はコンピュータを特徴とする。命令パ
イプラインは、コンピュータの命令を実行するように構成されている。プロファ
イル回路は、コンピュータハードウェアにおいてインプリメントされており、実
行プロファイリングのためのコンパイラの援助を要さずに、命令パイプラインで
生じるプロファイル可能事象の発生を検出し、プログラムの実行間隔の間に発生
するプロファイル可能事象を記述するプロファイル情報の記録を導くように構成
されている。コンピュータハードウェアにおいてインプリメントされたプロファ
イル制御ビットは、プロファイル回路の動作の解決を制御する値を有する。バイ
ナリトランスレータは、第1の命令セットアーキテクチャでコード化されたプロ
グラムを第2の命令セットアーキテクチャの命令に変換するように構成されてい
る。プロファイルアナライザは、記録されたプロファイル情報を分析し、また、
プロファイル制御ビットをバイナリトランスレータの動作を改善するための値に
設定するように構成されている。
【0038】 本発明の実施例は以下の特徴の1つ以上を含み得る。記録の少なくとも一部は
、命令パイプラインに投機的に導入された命令によって実行される。プロファイ
ル回路は、パイプラインへの命令の注入による記録を導くために命令パイプライ
ンと相互接続されており、その命令は、プロファイル可能事象がコンピュータの
アーキテクチャ的に可視の記憶レジスタにおいて具体化されるようにパイプライ
ンを制御する。プロファイリングに関連しないコンピュータによる実行に対し一
次的効果を有するコンピュータの命令は、プロファイルされた事象の性質をコー
ド化しプロファイル情報において記録される、事象コードのための即値フィール
ドを有しており、この即値フィールドは、プロファイルされた事象の事象コード
を決定するため以外、コンピュータの実行に対していかなる作用も及ぼさない。
命令のインスタンスは、コンピュータの他の事象監視回路によって以前に決定さ
れた事象コードをそのままにしておく事象コードを有する。プロファイルされた
情報は、いかなる明示的な即時値もソフトウェアにおいて記録されることなく、
その事象コードが命令実行ハードウェアによって分類された事象の記述を含む。
命令パイプラインおよびプロファイル回路は、単一のプロファイル可能事象の発
生時にプロファイル回路による命令パイプラインへの複数の命令の注入をもたら
すように動作可能に相互接続されている。命令パイプラインおよびプロファイル
回路は、プロファイル回路による命令パイプラインへの命令の投機的な注入をも
たらすように動作可能に相互接続されている。コンピュータのレジスタポインタ
は、プロファイル情報を記録するための汎用レジスタを指示し、インクリメンタ
は次のプロファイル情報を記録するための次の汎用レジスタを指示するためにレ
ジスタポインタの値を増分するように構成されており、この増分はソフトウェア
介入を要さずに行われる。リミットディテクタはレジスタポインタと動作可能に
相互接続され、プロファイル情報を収集するために使用可能なレジスタの範囲が
費消された時を検出し、ストアユニットは、費消が検出された時にプロファイル
情報を汎用レジスタからコンピュータのメインメモリへ記憶するようにさせるた
めにリミットディテクタと動作可能に相互接続されている。プロファイル回路は
、複数のパイプライン段に構成された複数の記憶レジスタよりなり、いずれかの
パイプライン段において記録された情報は対応する機械語命令が命令パイプライ
ン内を進行するにつれて修正を受ける。命令の命令フェッチが変換索引バッファ
(TLB)において失敗を生じた場合、その命令のフェッチはプロファイル可能
事象をトリガするが、TLBの失敗はサービスされ、TLBの訂正された状態は
プロファイル可能な命令について記録されたプロファイル情報に反映される。プ
ロファイル制御ビットは、プロファイル回路がプロファイル可能事象について命
令パイプラインを監視する必要がある頻度を指定するタイマ間隔値を含む。プロ
ファイル回路は、複数のパイプライン段に構成された複数の記憶レジスタよりな
り、いずれかのパイプライン段において記録された情報は対応する機械語命令が
命令パイプライン内を進行するにつれて修正を受ける。
【0039】 一般に、第25の態様において、本発明は、2つの命令セットアーキテクチャ
のもとでコンピュータ命令の解釈を代替的にもたらすように設計された命令パイ
プライン回路を備えるコンピュータを特徴とする。パイプライン制御回路は、命
令セットアーキテクチャのうちの下位性能のものでコード化されたプログラム領
域を実行しようとする時に、命令セットアーキテクチャのうちの上位性能のもの
でコード化されたプログラム領域が存在するかどうかの照会を、ソフトウェア介
入を要さずに開始するために命令パイプライン回路と協働的に設計されており、
その上位性能領域は下位性能領域と論理的に等価である。回路および/またはソ
フトウェアは、上位性能領域への制御転送命令が下位性能の命令セットでコード
化されてことを要さずに、実行制御を上位性能領域に転送するように設計されて
いる。
【0040】 一般に、第26の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。コンピュータプログラムの少なくとも選択され
た部分が、第1のバイナリ表現から第2のバイナリ表現に変換される。コンピュ
ータにおけるプログラムの第1のバイナリ表現の実行の間に、実行がその選択部
分に入ったことが認識され、その認識は、照会も、第2のバイナリ表現への制御
の転送のいずれも第1のバイナリ表現にコード化されることなく、コンピュータ
の基本命令実行によって開始される。認識に応答して、制御は第2の表現での変
換に転送される。
【0041】 一般に、第27の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。コンピュータにおいて命令を実行する一部とし
て、命令の代替コーディングが存在することが認識され、その認識は、認識をト
リガするために代替コーディングまたは照会命令への制御の転送を実行すること
なく開始される。代替コーディングが存在する場合、命令の実行が打ち切られ、
制御は代替コーディングに転送される。
【0042】 一般に、第28の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。コンピュータの命令パイプライン回路における
プログラムの実行の間に、命令パイプライン回路により実行中の第1の命令スト
リームから第2の命令ストリームへ制御を転送するかどうかの決定が、照会また
は第2の命令ストリームへの制御の転送が第1の命令ストリームにコード化され
ることなく開始される。第1の命令ストリームの実行は、第2の命令ストリーム
の実行の後に確立され、第1の命令ストリームの実行は、第1の命令ストリーム
のコードが処理可能となった場合に支配的となるはずであるものと論理的に等価
なコンテキストにおいて、制御が捕捉されるポイントから下流のあるポイントで
再確立される。
【0043】 一般に、第29の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。コンピュータプログラムの実行は、プログラム
の第1のバイナリイメージを用いて開始される。第1のイメージの実行の間に、
制御は同じプログラムを異なる命令セットでコード化する第2のイメージに転送
される。
【0044】 一般に、第30の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。コンピュータにおいて命令を実行する一部とし
て、命令の代替コーディングが存在するかどうかのヒューリスティックな概ね正
確な認識が評価され、その認識のプロセスは統計的にトリガされる。代替コーデ
ィングが存在する場合、命令の実行は打ち切られ、制御は代替コーディングに転
送される。
【0045】 一般に、第31の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。マイクロプロセッサチップは、命令パイプライ
ン回路、ルックアップ回路、マスクおよびパイプライン制御回路を有する。ルッ
クアップ回路は、マイクロプロセッサの基本命令処理サイクルの一部としてルッ
クアップ構造からエントリをフェッチするように設計されており、ルックアップ
構造の各エントリはコンピュータのメモリの対応するアドレス範囲と関係づけら
れている。マスクは、タイマによって少なくともある程度設定される値を有する
。パイプライン制御回路は、マイクロプロセッサの基本命令処理サイクルの一部
として命令パイプライン回路による命令の処理を、命令パイプライン回路によっ
て処理される命令が存在するアドレス範囲に対応するエントリの値、およびマス
クの現在値に少なくともある程度依存して、制御するように設計されている。
【0046】 一般に、第32の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。マイクロプロセッサチップは、命
令パイプライン回路とともに以下の回路を有する。命令パイプライン回路によっ
て実行される命令の実行に応答して、実行された命令を少数のクラスに分類し、
分類コード値を記録する命令分類回路と、マイクロプロセッサの基本命令処理サ
イクルの一部としてルックアップ構造からエントリをフェッチするように設計さ
れており、ルックアップ構造の各エントリはコンピュータのメモリの対応するア
ドレス範囲と関係づけられている、ルックアップ回路と、そして、マイクロプロ
セッサの基本命令処理サイクルの一部として命令パイプライン回路による命令の
処理を、命令アドレスが存在するアドレス範囲に対応するエントリの値および、
記録された分類コードに少なくともある程度依存して制御するように設計されて
いるパイプライン制御回路。
【0047】 一般に、第33の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。マイクロプロセッサチップは、命
令パイプライン回路とともに以下の回路を含む。回路の制御のためにコンピュー
タ機械状態の一部の概略評価を保持するように設計されており、そのオンチップ
テーブルの各エントリはコンピュータで発生する事象の各クラスに対応している
、オンチップテーブルと、そして、オンチップテーブルの相談に基づき、マイク
ロプロセッサの基本命令処理サイクルの一部として命令パイプライン回路による
命令の処理を制御するために、命令パイプライン回路と協働的に設計されたパイ
プライン制御回路。
【0048】 一般に、第34の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。マイクロプロセッサチップは、命
令パイプライン回路とともに以下の回路を含む。オンチップテーブルの各エント
リはコンピュータで発生する事象のクラスに対応しており、そのクラスの事象が
発生した時にはコンピュータのメモリのオフチップテーブルの相談を制御するよ
うに設計されているオンチップテーブルと、分類された事象が発生するとマイク
ロプロセッサの基本命令処理サイクルの一部としてオンチップテーブルに相談す
るように命令パイプライン回路と協働的に設計されたパイプライン制御回路と、
そして、望ましい値がオンチップテーブルから得られた後にオフチップテーブル
の相談に基づき命令パイプライン回路での事象について定義されたデータの操作
または制御の転送に作用するように命令パイプライン回路およびパイプライン制
御回路と協働するように設計された制御回路および/またはソフトウェア。
【0049】 本発明の実施例は以下の特徴の1つ以上を含み得る。上位性能領域への実行制
御の転送は、プログラムカウンタのアーキテクチャ的に可視の変更によって生じ
得る。実行されようとする領域には制御転送命令によって入ることができる。第
1のイメージは、コンピュータでのハードウェアエミュレーションの場合、コン
ピュータにとって非ネイティブの命令セットでコード化できる。第2のバイナリ
表現の命令は、第1のバイナリ表現の命令とは異なる命令セットアーキテクチャ
でコード化され得る。第2のイメージは第1のイメージからバイナリトランスレ
ータにより生成され得る。バイナリトランスレータは、そのネイティブの命令セ
ットアーキテクチャでの非ネイティブプログラムの実行と異なる実行のある程度
のリスクを受け入れつつ、実行速度の増大のために第2のイメージを最適化する
ことができる。第1のイメージから第2のものへ制御を転送するかどうかについ
ての決定は、コンピュータの制御変数に基づくことができる。事象のクラスは、
コンピュータのメモリの対応する各アドレス範囲のメモリ参照となり得る。アド
レス範囲は割込みベクトルテーブルのエントリに対応し得る。認識は、実行され
る命令のプログラムカウンタアドレスによりアドレスされる内容アドレス指定可
能メモリに相談することによって開始できる。内容アドレス指定可能メモリは変
換索引バッファとすることができる。オフチップテーブルは、アドレス変換ペー
ジテーブルへのサイドテーブルとして編成され得る。オンチップテーブルは、オ
フチップテーブルからロードされる、オフチップテーブルの圧縮された近似を含
み得る。ルックアップ構造はビットベクトルとすることができる。命令アドレス
が存在するアドレス範囲に対応するエントリのビットは、命令パイプライン回路
に関係するマスクの対応するビットと論理積がとられ得る。オンチップテーブル
の近似の誤差は、その評価が記憶されるコンピュータの機械状態の部分に対する
若干のタイムラグによって誘起され得る。パイプライン制御回路は、命令パイプ
ライン回路による命令の処理を、命令アドレスが存在するアドレス範囲に対応す
るエントリの値および記録された分類コードを評価し、マイクロプロセッサチッ
プによってアドレスされるメモリの内容のソフトウェア評価をトリガすることに
よって制御するように設計することができる。命令処理の制御は分岐行先処理を
含み得る。
【0050】 一般に、第35の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。命令はコンピュータにおいて実行
され、コンピュータの命令パイプライン回路は、命令の少なくともいくつかを処
理するための第1および第2のモードを有する。2モード命令の実行が、第1の
実行モードが成功している間、連続する2モード命令について第1のモードで試
みられる。第1のモードのもとで2モード命令の不首尾の実行が検出された場合
、後続する2モード命令は第2のモードで実行される。
【0051】 一般に、第36の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。コンピュータ命令は、少なくとも
いくつかの命令を処理するための第1および第2のモードを有する命令パイプラ
イン回路において実行される。タイマの満了時に、命令パイプライン回路は、第
1のモードから第2のものに切り換え、このモードスイッチはタイマ満了の直前
に実行されていたプログラムのために以後に実行される命令のために持続する。
【0052】 一般に、第37の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。コンピュータの事象は事象クラス
に割り当てられる。コンピュータ命令パイプラインの基本命令実行サイクルの一
部として、ソフトウェア介入を伴わず、クラスの事象に対する応答の記録が維持
される。命令パイプライン回路における実行のために個々の分類された事象が現
れると、同じクラスの事象の以前の試みへの応答を決定するために記録が照会さ
れる。以前の試みが成功したことを記録が指示した場合、およびその場合にのみ
、その応答は試みられる。
【0053】 本発明の実施例は以下の特徴の1つ以上を含み得る。第1および第2のモード
は、代替キャッシュポリシー、または浮動小数点演算を実行するための代替モー
ドとすることができる。不首尾の実行は、高コストでの命令の正確な完了を含み
得る。コスト測度は実行時間とすることができる。第1のモードでの命令のコス
トは、命令の完了後に確認可能であるにすぎない。命令パイプライン回路は、第
2のモードから第1のものにスイッチバックされ、スイッチは次のタイマ満了ま
で持続する。記録の全部は、対応する事象の以前の試みが成功したことを指示す
るために定期的に設定され得る。
【0054】 一般に、第38の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。コンピュータで実行する非スーパ
バイザモードプログラムの命令を実行する基本命令サイクルの一部として、テー
ブルが参照され、そのテーブルは命令の属性について、実行された命令のアドレ
スによってアドレスされる。命令のアーキテクチャ的に可視のデータ操作ビヘイ
ビアまたは制御転送ビヘイビアは、命令に関係するテーブルエントリの内容に基
づき制御される。
【0055】 本発明の実施例は以下の特徴の1つ以上を含み得る。異なる命令は、実行され
た命令のISAとは異なる命令セットアーキテクチャ(ISA)でコード化でき
る。アーキテクチャ的に可視のデータ操作ビヘイビアの制御は、そのもとで命令
がコンピュータにより解釈される命令セットアーキテクチャを変更することを含
み得る。テーブルの各エントリは、仮想メモリマネージャによって管理されるペ
ージに対応することができ、テーブルエントリをロケートするための回路はコン
ピュータの仮想メモリアドレス変換回路と統合されている。プロセスの命令の実
行時に、コンピュータのメモリ状態および命令のアドレスに少なくともある程度
基づき、同期して割込みがトリガされ得るが、命令のアーキテクチャ上の定義は
割込みを要求しない。割込みにサービスし、割込みをトリガさせた命令フロー以
外のプロセスの命令フローに制御を返すために、割込みハンドラソフトウェアを
設けることができ、誤りなく続行するための復帰命令フローはプロセスの通常処
理を取り扱う。
【0056】 一般に、第39の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。マイクロプロセッサチップは命令
パイプライン回路、アドレス変換回路およびルックアップ構造を有する。ルック
アップ構造は、アドレス変換回路によって変換される個々の対応するアドレス範
囲に関係するエントリを有し、エントリは、各対応アドレス範囲にロケートされ
た命令の代替コーディングの存在の可能性を記述する。
【0057】 本発明の実施例は以下の特徴の1つ以上を含み得る。エントリは変換索引バッ
ファのエントリとすることができる。代替コーディングは、アドレス範囲でロケ
ートされた命令のISAとは異なる命令セットアーキテクチャ(ISA)でコー
ド化できる。
【0058】 一般に、第40の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。マイクロプロセッサチップは、命
令パイプライン回路および割込み回路を有する。割込み回路は、プロセスの命令
の実行時に、コンピュータのメモリ状態および命令のアドレスに少なくともある
程度基づき、同期して割込みをトリガするように命令パイプライン回路と協働的
に設計されており、命令のアーキテクチャ上の定義は割込みを要求しない。
【0059】 本発明の実施例は以下の特徴の1つ以上を含み得る。割込みハンドラソフトウ
ェアは、割込みにサービスし、割込みをトリガさせた命令フロー以外のプロセス
の命令フローに制御を返すように設計することができ、誤りなく続行するための
復帰命令フローはプロセスの通常処理を取り扱う。割込みハンドラソフトウェア
は、そのもとで命令がコンピュータにより解釈される命令セットアーキテクチャ
を変更するようにプログラムできる。復帰命令から始まる命令テキストは、中断
した命令から始まる命令テキストと論理的に等価となり得る。
【0060】 一般に、第41の態様において、本発明は、方法および、その方法の実行のた
めのマイクロプロセッサチップを特徴とする。命令のストリームを実行する一部
として、一連のメモリロードがコンピュータのCPUからバスに発行され、一部
は適切(正常)に動作するメモリに向けられ、一部は入出力空間の正常に動作し
ないデバイスに向けられる。コンピュータの記憶装置は、適切(正常)に動作し
ないメモリにメモリロードを発行したストリームの命令のアドレスを記録し、そ
の記録の記憶形式は、その記録に記憶されたいずれのメモリアドレスの解決も要
さずに、メモリロードが正常に動作するメモリかまたは正常に動作しないメモリ
に向けられたかの決定を可能にする。
【0061】 一般に、第42の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。成功したメモリ参照がコンピュータのCPUか
らバスに発行される。コンピュータの記憶装置は、メモリ参照によりバス上でア
クセスされたデバイスが、正常に動作するメモリかまたは正常に動作しないメモ
リであるかを記録する。代替的に、メモリは、正常に動作するメモリ以外のデバ
イスを参照したメモリ読出し命令の記録を記憶することもできる。
【0062】 本発明の実施例は以下の特徴の1つ以上を含み得る。記録は、主にプログラム
制御フローを記録するプロファイルの一部とすることができる。記録はバイナリ
変換プログラムによって読むことができ、ここにおいて、バイナリ変換プログラ
ムは、メモリロードが正常に動作しないメモリに向けられていると記録が指示し
た場合、より控えめな仮定を用いてメモリロードを変換する。入出力空間への参
照は、正常に動作しないメモリへの参照であるとして記録され得る。記録は若干
誤っていることもあり、その誤りはメモリ参照が正常に動作するメモリにアクセ
スした時を決定する際の控えめな評価によって誘起され得る。記録の形式は、記
録に記憶されたいかなるメモリアドレスの解決も要さずに、メモリ参照が正常に
動作するメモリかまたは正常に動作しないメモリへのものであったかの判定を可
能にし得る。記録の形式は、メモリ参照を発行した命令のアドレスを指示し得る
。メモリ参照はロードとしてよい。プロファイル監視回路はコンピュータのCP
Uと混交することができる。TLB(変換索引バッファ)は、TLBのエントリ
によってマップされたメモリが正常に動作するメモリかまたは正常に動作しない
メモリであるかの決定を保持するように設計され得る。プロファイル監視回路は
コンピュータの汎用レジスタに記録を生成することができる。プロファイル監視
回路は、コンピュータCPUのパイプラインフラッシュを誘起するように設計さ
れ得る。
【0063】 一般に、第43の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータ回路を特徴とする。コンピュータのDMA(直接メモリアクセ
ス)メモリ書込みトランザクションが監視され、DMAメモリ書込みトランザク
ションによって書き込まれた記憶場所の指標は、CPUにより事前にメモリ書込
みトランザクションを知らされることなく動作する回路によって記録される。指
標はプロセッサによって読まれる。
【0064】 一般に、第44の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。コンピュータの第1のプロセスは、第1の表現
でメモリに記憶された情報の第2の表現をコンピュータメモリにおいて生成する
。第2のプロセスにより開始されるDMAメモリ書込みトランザクションによる
第1の表現の上書きは、第2のプロセスがそのDMAメモリ書込みトランザクシ
ョンを第1のプロセスに知らせることなく、第1のプロセスによって検出され、
この検出は、DMAメモリ書込みトランザクションに続く第2の表現の次のアク
セス以前に行われるように保証されている。
【0065】 一般に、第45の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。コンピュータのメインメモリが、仮想メモリマ
ネージャによる管理のためにページに分割される。マネージャは、メモリに記憶
されたテーブルを用いてページを管理する。回路は、メインメモリのページへの
修正の指標を、メインメモリのアドレス空間の外部で複数のレジスタに記録する
。仮想メモリ管理テーブルは、レジスタに記憶された修正指標の補助記憶を行わ
ない。
【0066】 一般に、第46の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータ回路を特徴とする。コンピュータのメインメモリの内容に対す
る修正が監視され、修正の検出時には、修正のアドレスの近似が複数のレジスタ
うちの1つのアドレスタグに書き込まれ、そして、修正のアドレスの精細な指標
がレジスタの複数のセルのうちのメモリセルに書き込まれる。修正のアドレスの
精細な指標は、CPUからの読出し要求によってコンピュータのCPUに提供さ
れる。
【0067】 本発明の実施例は以下の特徴の1つ以上を含み得る。記録された指標は、記憶
場所だけを記録し、そのロケーションに書き込まれたデータは記録しない。CP
Uによって読まれた値に少なくともある程度基づき、キャッシュされたデータは
消去され得る。アドレスおよび時間的に相互に近い2つのDMAメモリ書込みは
、書込みの単一の記録だけを生成し得る。メインメモリのロケーションの記録さ
れた指標は、そのメモリの物理アドレスを指示し得る。ビットベクトルの各ビッ
トの値は、メインメモリの対応する領域が最近修正されたかどうかを指示し得る
。マッチング回路は、メモリ修正のアドレスを、以前の近いメモリ修正の以前に
記憶された指標のアドレスと突き合わせるために設けることができる。メインメ
モリのロケーションの記録された指標は最初に、メインメモリの外部かつコンピ
ュータの汎用レジスタファイルの外部でアーキテクチャ的に可視のロケーション
に記録することができる。メインメモリのロケーションの記録された指標は、メ
モリのページの自然に整列されたブロックから各々構成されている領域へのメイ
ンメモリの下位分割に少なくともある程度基づき記録され得る。DMA監視回路
は、CPUとDMAデバイスとの間の入出力ゲートウェイ回路のトランザクショ
ンを監視するように設計されている。DMA監視回路は、読出しの副作用として
DMA監視回路の内容を解放することができる。アドレスタグに記憶された修正
のアドレスは、物理記憶アドレスとし得る。メモリセルのベクトルはビットベク
トルを含み、ビットベクトルの各ビットの値は、メインメモリの対応する領域が
最近修正されたかどうかを指示するように設計されている。アドレスタグは内容
アドレス指定可能メモリを含み得る。複数のレジスタのうちの1つは、アドレス
をその1個のレジスタのアドレスタグに書き込むことによって、アドレス範囲と
関係づけられ得る。後に、その1個のレジスタは、異なるアドレスをその1個の
レジスタのアドレスタグに書き込むことによって、異なるアドレス範囲と関係づ
けられ得る。ビットベクトルの各ビットの値は、メインメモリの対応する領域が
最近修正されたかどうかを指示し得る。
【0068】 一般に、第47の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。コンピュータにおいてプログラムが実行される
と、コンピュータのメインメモリの保護領域への書込みが検出され、その報告は
、コンピュータの監視回路によって実行される。検出の報告を受け取ると、書込
みが検出された保護領域の内容に対応する内容のデータ構造が、メモリから削除
される。
【0069】 一般に、第48の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。メモリ読出し参照がコンピュータのCPUにお
いて生成され、このメモリ参照は論理アドレスを参照する。参照のメインメモリ
ページが保護された状態にあるかどうかを、回路および/またはソフトウェアが
評価する。保護されていないページは保護された状態にされる。
【0070】 一般に、第49の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。メモリ参照はコンピュータのCPUにより生成
され、このメモリ参照は論理アドレスを参照する。物理アドレスへの論理アドレ
スの変換は、参照のページがアクセスから保護されているかどうかを評価する。
保護されているページは、ページの内容を修正することなく、各自の保護を修正
させる。
【0071】 本発明の実施例は以下の特徴の1つ以上を含み得る。監視および検出回路は、
コンピュータのパイプライン回路によって実行される命令により開始される記憶
動作によって生成されるメモリ書込みに応答し得る。評価回路は、コンピュータ
のCPUによるメモリ読出しアクセスの一部として生成される論理アドレスを物
理アドレスに変換するように設計されたアドレス変換回路に組み込むことができ
る。メモリ領域の保護はエントリのテーブルに記録することができ、各エントリ
はメインメモリのページに対応する。そのテーブルエントリは、メインメモリの
物理ページに対応して編成することができる。テーブルエントリは、コンピュー
タの仮想メモリマネージャによって使用されるページテーブルとは別個のメイン
メモリにおけるテーブルとなり得る。エントリのテーブルは変換索引バッファと
してよい。コンピュータのプロファイリングまたは監視機能は、コンピュータの
メモリの領域について、各領域が保護されているかまたは保護されていないかに
基づき、イネーブルまたはディスエーブルにすることができる。演算結果または
命令の分岐の行先は、命令を含んでいる領域が保護されているかまたは保護され
ていないかに基づき制御され得る。データ構造は、第1の命令セットアーキテク
チャの保護領域に記憶されたコンピュータプログラムを第2の命令セットアーキ
テクチャに変換することによって形成され得る。検出の報告を受け取ると、ソフ
トウェアを呼び出すために割込みが生じ、呼び出されたソフトウェアは保護領域
の内容と関係なくメモリの内容に作用を及ぼす。メモリ読出し参照は命令フェッ
チとなり得る。
【0072】 一般に、第50の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。コンピュータにおいて命令のストリームを実行
する一部として生成されたメモリ参照は、命令の個々のメモリ参照が、有効なメ
モリアドレスを有するが正常な動作を保証できないデバイスを参照するかどうか
を判定するために評価される。
【0073】 一般に、第51の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。プログラムのバイナリ表現の少なくともセグメ
ントを第1の命令セットアーキテクチャから第2の命令セットアーキテクチャの
第2の表現へ変換する間に、正常に動作するメモリに向けられると考えられる各
メモリロードは、正常に動作しないメモリデバイスに向けられると考えられるメ
モリロードと区別される。第2の表現を実行する間、変換時には正常に動作する
メモリに向けられると考えられていたが、実行時に正常に動作しないメモリに向
けられるとわかったロードが識別される。識別されたメモリロードは打ち切られ
る。識別に少なくともある程度基づき、プログラムの変換されたセグメントの少
なくとも一部が第1の命令セットで再実行される。
【0074】 一般に、第52の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。バイナリトランスレータは、プログラムの少な
くともセグメントを、第1の命令セットアーキテクチャの第1の表現から第2の
命令セットアーキテクチャの第2の表現へ変換し、第2の表現における副作用の
シーケンスは第1の表現の変換されたセグメントの副作用のシーケンスと異なる
。命令実行回路および/またはソフトウェアは、副作用のシーケンスにおける相
違がプログラムの実行に対し実質的な作用を及ぼし得る第2の表現の実行におけ
る事例を識別する。第1の表現の実行で発生するはずである状態と等価なプログ
ラム状態が確立される。実行は、第1の表現の副作用シーケンスを反映する実行
モードでの確立された状態から再開する。
【0075】 本発明の実施例は以下の特徴の1つ以上を含み得る。参照が正常な動作を保証
できない場合、命令は代替実行モードで再実行されるか、または、プログラム状
態が以前の状態に復元され得る。第2の表現は、正常に動作するメモリに向けら
れると考えられる各メモリロードと、正常に動作しないメモリに向けられると考
えられるメモリロードとの間での区別の指標により注釈が付けられる。有効なメ
モリアドレスを有するデバイスは、コンピュータの入出力空間のアドレスを持ち
得る。メモリ参照命令を包含するプログラムユニットのプリアンブルのコードは
、命令実行回路の状態を確立することができ、命令実行回路は、デバイスへの参
照の状態および評価の両方の評価に基づき例外を生じるように設計されている。
命令に埋め込まれた注釈は、正常に動作しないデバイスへの参照が例外を生じる
べきであるかどうかを決定するために評価され得る。個々の副作用の命令が例外
を生じるべきであるかどうかの評価は、コンピュータのアドレス変換回路に埋め
込まれた回路において行われ得る。例外は、セグメントデスクリプタおよび副作
用の評価の両方の評価に基づいて生じ得る。セグメントデスクリプタにおいてコ
ード化された注釈は、正常に動作しないデバイスへの参照が例外を生じるべきで
あるかどうかを決定するために評価され得る。セグメントデスクリプタは、別の
セグメントデスクリプタをコピーし、注釈を変更することによって形成され得る
。形成されたセグメントデスクリプタは、副作用のシーケンスの変更に対する変
換の仮定の感度を指示する変数をコピーすることができる。副作用の順序づけの
相違は、相互に対する2つの副作用の再順序づけ、変換による副作用の除去、ま
たはバイナリトランスレータにおける2つの副作用の結合を含み得る。復元ステ
ップは、例外が目的プログラムで発生した場合に開始され得る。実行は復元され
た状態から再開でき、再開された実行は、参照インプリメンテーションの精確な
副作用エミュレーションを実行する。変換中に生成されたデスクリプタは、状態
を例外前の参照状態に復元するために使用することができる。
【0076】 一般に、第53の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。第1のインタプリタが命令セットでコード化さ
れたプログラムを実行し、この第1のインタプリタは完全には正確ではない。基
本的にハードウェアによる、第2の十分に正確なインタプリタは、命令セットの
命令を実行する。不正確な解釈のいずれかの副作用が不可逆的にコミットする前
に、モニタが第1のインタプリタによる十分に正確な解釈からのあらゆる逸脱を
検出する。モニタが逸脱を検出すると、実行は、プログラムにおける安全なポイ
ントまで少なくとも完全な命令によってロールバックされ、第2のインタプリタ
において実行は再び開始される。
【0077】 一般に、第54の態様において、本発明は、方法および、その方法の実行のた
めのコンピュータを特徴とする。バイナリトランスレータが原始プログラムを目
的プログラムに変換し、変換された目的プログラムは原始プログラムとは異なる
実行ビヘイビアを有する。割込みハンドラは、目的プログラムの実行の間に発生
する割込みに対し、原始プログラムの実行の間に発生したはずである状態に対応
し、そこから実行が継続し得る、プログラムの状態を確立することによって応答
し、その確立された状態から原始プログラムの実行を開始する。
【0078】 本発明の実施例は以下の特徴の1つ以上を含み得る。第1のインタプリタは、
ソフトウェアエミュレータおよび/またはソフトウェアバイナリトランスレータ
を含み得る。第2のインタプリタは、コンピュータにネイティブではない命令セ
ットの命令を解釈できる。ソフトウェアバイナリトランスレータは、プログラム
の全体より小さいセグメントを変換するために、プログラムの実行と並行して動
作し得る。実行の継続は、少なくとも2つの完全な命令により第1のインタプリ
タの実行をロールバックすることを含み得る。実行の継続は、いくつかの命令の
複数の別個のサブオペレーションが第1のインタプリタによって混合された状態
から第1のインタプリタの実行をロールバックすることを含み得る。実行の継続
は、チェックポイントに実行をロールバックする、または第1のインタプリタに
おけるチェックポイントまで実行を前進させることを含み得る。十分に正確な解
釈からの検出された逸脱は、バイナリトランスレータによって導入されたプログ
ラム変換の無効性の検出、または同期実行例外の検出を含む。
【0079】 本発明の実施例は以下の利益のうちの1つ以上を提供できる。 古いアーキテクチャのコンピュータ用に製造されたプログラムが、新しいアー
キテクチャのコンピュータにおいて実行できる。古いバイナリをいかなる修正も
伴わずに実行できる。古いバイナリを新しいものと混ぜることができる。例えば
、古いアーキテクチャ用にコード化されたプログラムは、新しい命令セットでコ
ード化されたライブラリルーチンを呼び出すことができ、または逆も可能である
。古いライブラリおよび新しいライブラリを自由に混ぜることができる。新しい
バイナリおよび古いバイナリが同じアドレス空間を共有でき、それにより、共通
のデータを共有できる新しいバイナリおよび古いバイナリの能力を改善する。あ
るいはまた、古いバイナリを、いかなるデータもいずれの新しいバイナリと共有
させることなく、新しいコンピュータの保護された個別のアドレス空間において
実行できる。呼び出し側は呼び出された側がコード化されているISAを知る必
要がないので、コンテキストを明示的に保存および復元する負担を回避できる。
本発明はソフトウェアの複雑さを低減させる。すなわち、ソフトウェアは、バイ
ナリの全部の可能なモードおよび混合物との全部の可能なエントリおよび出口の
ための明示的な備えを設ける必要がない。古い命令および新しい命令を処理する
ためのパイプラインはインプリメンテーションの断片を共有することができ、2
つの命令セットをサポートするコストを低減させる。新しいコンピュータは古い
コンピュータを完全にモデル化することができ、いずれかの特定のソフトウェア
製造物によって課される何らかのソフトウェア規約にまったく頼らずに、新しい
コンピュータが、変化するオフザシェルフオペレーティングシステムを含む古い
コンピュータ用のあらゆるプログラムを実行可能にする。変換されたターゲット
コードがソースコードの物理ページと関係づけられて追跡されるので、たとえ物
理ページが仮想アドレス空間の異なるポイントでマップされても、単一の変換が
全部のプロセスに再使用されるはずである。これは共有ライブラリの場合に特に
有利である。
【0080】 プロファイルデータは、頻繁に実行されるようなプログラムの部分を識別する
「ホットスポット」ディテクタにおいて使用され得る。そうした頻繁に実行され
る部分はその後、プログラマまたはソフトウェアのいずれかによって、より迅速
に走行するように変更することができる。プロファイルデータは、命令のバイナ
リコーディングにおける曖昧さを解決するために、バイナリトランスレータによ
って使用され得る。プロファイラにより生成された情報は、命令テキスト自体を
参照する必要なく、ホットスポットディテクタがプロファイルから離れて駆動さ
れ得るほど十分に完全である。これはキャッシュの汚染を減らす。X86命令テ
キストにおける曖昧さ(命令テキストから推定できないあるセットの命令の意味
、例えばセグメントデスクリプタからのオペランドサイズ情報)は、プロファイ
ル情報の参照によって決定される。プロファイラによって収集された情報は、相
対的にほとんどオーバヘッドを伴わず、従ってキャッシュ汚染を低減し、ホット
スポットディテクタおよびバイナリトランスレータに必要な情報を簡潔に表現し
ている。プロファイラは、コンピュータのハードウェアインプリメンテーション
に組み込まれ、プログラムにおける遅延をほとんど伴わず、高速に走行できるよ
うにし、プロファイリングのオーバヘッドは実行速度のわずか数パーセントであ
る。
【0081】 制御は、最適でない命令ストリームに対するいかなる変更も伴わず、最適でな
い命令ストリームから最適化された命令ストリームに転送され得る。それらの場
合も、最適でない命令ストリームは、正確な実行のための参照として使用可能で
あり続ける。命令ストリームは、多様な実行条件を制御するための情報で注釈さ
れ得る。
【0082】 どのプログラム変換最適化が安全かつ正確であるか、また、いずれが誤りのリ
スクを呈しているかを決定するために、プロファイルが使用できる。危険な最適
化または高速化の上述のすべての機会を差し控えるのではなくむしろ、最適化ま
たは高速化が試行され、実際の成功/失敗について監視される。実際に最適化が
危険であると判明した場合、より低速な最適でない実行モードが呼び出され得る
【0083】 単一の命令コーディングが、プログラマおよびコンパイラに露呈されるRIS
C命令セットとして、またマイクロコード命令セットとして使用され得る。これ
は、設計の試験可能性を改善し、設計の量を減らす。プログラムはマイクロアー
キテクチャの完全な性能および柔軟性を利用することができる。ネイティブのマ
イクロ命令は単純である。個々のマイクロ命令は、それぞれのコンテキストから
ほとんど完全に独立して実行し、任意の命令は、以前または以後の命令と関係な
く、常に同じ動作を実行する。連続する命令間でのインタロックの量も低減する
。X86命令セットといった複雑な命令セットをインプリメントする複雑さの多
くは、ハードウェアから取り除かれ、誤りが容易に回避、検出および訂正される
ソフトウェアエミュレータに移される。
【0084】 個々の命令は、以前または以後の命令とほとんどまったくコンテキスト上の関
係を伴わず、実行し退去する。ネイティブの命令の実行ビヘイビアは、命令の演
算コードビット、明示的なオペランドと呼ばれるレジスタの内容、そしてごくま
れに機械モードにおいて、命令シーケンスまたは他のコンテキストによって決定
される。命令は、単純なロード/記憶/演算形式の命令に通常かつ自然に含まれ
ている情報以上にほとんどまったく注釈を必要としない。例えば、ネイティブの
タペストリー命令は、ネイティブのタペストリーバイナリから受け取ったかまた
は、コンバータによりX86命令から生成されたかにかかわらず、同じ機能を実
行する。コンバータによって生成された命令は、それらが、X86命令のレシピ
の最初の命令であるか、レシピの最後の命令であるか、またはレシピの真ん中の
命令であるかどうかにかかわらず、同じ機能を実行する。
【0085】 命令は個々に退去する。すなわち、命令の副作用(アーキテクチャ的に可視の
レジスタまたはメモリに書き込まれた結果、制御の転送、例外など)がコミット
すると、それらは、後の命令による取り消しのためにそれ以上追跡される必要が
ない。X86命令のためのレシピを構成しているネイティブの命令は、レシピの
全部のネイティブ命令について副作用を収集する必要なく、個々に退去できる。
個々の退去は、ハードウェアの単純化を可能にし、一部のクリティカルパスを減
少させる。副作用が、グループとしてコミットするために複数の命令の間で収集
されるのではなく、各命令が退去すると同時にコミットする場合、「アカウンテ
ィング」は簡素化される。
【0086】 個々の機構は、多くのニーズの間で共有されるように全体的に適用可能である
ように設計されている。例えば、例外インタフェースは、従来の例外および、実
行をソフトウェアエミュレータに転送する命令内例外の両方をサポートするよう
に設計されている。エミュレータからの復帰は、従来の機械のあらゆる他の例外
からの復帰とほとんどまったく同様である。汎用レジスタファイルは、レジスタ
ファイルとしての従来の用途のために、また、コンバータ内における、命令内中
間結果を保持するために設計されている。プロセッサレジスタ機構は、従来の機
械制御機能および、ハードウェアでのX86実行、ソフトウェアでのX86実行
および、シングルステッピング、デバッグなどといった複雑なX86機能性のエ
ミュレーションの間におけるインタフェースの制御の両方に対して広範に適用可
能である。
【0087】 ハードウェアは、X86の複雑なビヘイビアの多くをソフトウェアエミュレー
タに移すことによって相対的に単純に保たれる。エミュレータは、他の機械例外
に使用される機構によって呼び出される。複雑なX86セグメンテーションおよ
びページングビヘイビアといったほとんどすべての命令ごとに使用される複雑な
X86機能は、性能を改善するために、ハードウェアにおいてインプリメントさ
れる。例えば、ある組のX86命令間の割込みの禁止は、ハードウェアではなく
ソフトウェアにおいてインプリメントされる。
【0088】 上記の利益および特徴は、代表的な実施例のもののみにすぎず、本発明の理解
の助けとなるためだけに提示されている。本発明の付加的な特徴および利益は、
以下の説明、図面および請求の範囲から明白になるであろう。
【0089】 説明 説明は以下の通り編成されている。 I.タペストリーシステムの概要および、本発明のいくつかの態様における一般
的使用の特徴 A.システム概要 B.タペストリー命令パイプライン C.システム機能のための制御ポイントとしてのアドレス変換 D.バイナリ変換、TAXiおよびコンバータセーフティネットの概要 E.システム全体の制御 F.XPビットおよび保護されていない例外
【0090】 II.プログラムテキストのための命令セットアーキテクチャ(ISA)の指標
【0091】 III.X86スレッドと関係づけられたタペストリープロセッサコンテキスト
の保存 A.概要 B.サブプログラムPrologs C.X86−タペストリー遷移ハンドラ D.タペストリー−X86遷移ハンドラ E.タペストリーオペレーティングシステムにおける割込みまたは例外時のIS
Aクロッシングの処理 F.X86オペレーティングシステムからのタペストリー実行の再開。 G.実施例 H.代替実施例
【0092】 IV.あるISAから他方への遷移を管理するための代替方法 A.プログラムテキストのための呼び出し規約(CC)の指標 B.制御転送セマンティクスの記録および呼び出し規約の調停
【0093】 V.変換のためのホットスポットを決定するためのプロファイリング A.プロファイリングの概要 B.プロファイル可能事象および事象コード C.プロファイルされた事象のための記憶形式 D.特定の例示事象(ページストラッドル)のために収集されたプロファイル
【0094】 情報 E.プロファイラを制御する制御レジスタ F.プロファイラ状態機械およびプロファイラの動作 G.4ビット記憶形式からの5ビット事象コードの決定 H.プロファイラ、例外、およびXP保護/非保護ページプロパティの対話 I.代替実施例
【0095】 VI.変換を求めるためのプロービング A.プロービングの概要 B.統計プロービングの概要 C.統計プロービングのためのハードウェアおよびソフトウェア構造 D.統計プロービングの動作 E.プロービングの付加的な特徴 F.TAXiコードの実行の完了およびX86コードへの復帰 G.プロービングおよびプロファイリングの対話 H.適応便宜的統計技法の代替使用
【0096】 VII.変換された命令の有効化および無効化 A.簡素化したDMUモデル B.少メモリ使用設計のデバイスの概要 C.セクタ監視レジスタ D.インタフェースおよび状態レジスタ E.動作 F.回路 G.DMU_状態レジスタ H.DMU_コマンドレジスタ
【0097】 VIII.故障結果の管理 A.最適化変換により再順序づけされた事象の順序正しいハンドリングの保証 B.正常に動作しないメモリへの参照のプロファイリング C.精確な境界に到達するための規範的機械状態の調停 D.セーフティネット実行
【0098】 IX.コンバータ A.概要 1.パイプライン構造および変換レシピ 2.エミュレータ 3.サイドバンド情報:fracビット、命令境界、割込み可能ポイントなど 4.割込み、トラップおよび例外 5.fracビットおよび、レシピの継続 6.外部形式からフォーマットされた形式への拡張
【0099】 B.命令の個々の退去 1.一時レジスタのレシピの使用 2.異なる参照クラスに適した記憶保護検査をトリガするメモリ参照命令 3.ターゲットリミットチェック命令 a.LOAD/STOREおよび分岐リミットチェック b.ニアレジスタ関連CALLのターゲットリミットチェック 4.コアトミック実行を保証するための命令の特殊グループ化。 5.LOOP命令のエミュレータにおける展開 6.反復ストリング命令
【0100】 C.単一X86命令の複数の副作用をエミュレートするために複数のネイティブ
命令の結果の収集 1.ロード/記憶アドレスデバッグ比較結果の収集およびフィルタリング 2.FP DP/IP/OP延期 3.次の命令とのSTIS(命令ストリームへの記憶)フラッシュ境界
【0101】 D.マイクロ命令セットとしての外部露呈RISC ISA−−ユーザアクセス
可能な第1の命令セットによる第2の命令セットの変換およびインプリメンテー
ション 1.外部マイクロコード 2.その他の特徴
【0102】 E.リスタート可能な複合命令 1.ネイティブシングルステップによるアトミックMOV/POPスタックセグ
メントペア 2.ネイティブシングルステップによるIFビット変更禁止
【0103】 X.割込み優先順位 I.Tapestry(タペストリー)システムの概要および本発明のいくつか
の側面における一般的な使用の特徴 A.システム概要 図1a、1b、および1cを参照すると、カリフォルニア州サニーベールにあ
るChromatic Research,Inc(クロマティック・リサーチ
・インク)のTapestry(タペストリー;以下、本件明細書において『タ
ペストリー』とする)製品に具体化された本発明が示されている。『タペストリ
ー』は、Intel(インテル)X86ファミリ・プロセッサの適正なインプリ
メンテーションを提供するハードウエアおよびソフトウエア機能を伴う高速RI
SC(縮小命令セット)プロセッサ100である。(「X86」は、8086、
80186、...80486、Pentium(登録商標)(ペンティアム( 登録商標))、およびPentium Pro(ペンティアム・プロ)を含むフ ァミリを指す。このファミリについてはIntel Corporation( インテル・コーポレーション)のINTEL ARCHITECTURE SF TWARE DEVELOPER’S MANUAL(インテル・アーキテクチ ャ・ソフトウエア・デベロッパーズ・マニュアル)1−3巻(1997年)に説 明が掲載されている。)『タペストリー』は、たとえばMicrosoft(マ イクロソフト)またはIBMのオペレーティング・システムによって負わされる ソフトウエア規約にまったく依存することなく、X86のアーキテクチャ、特に 、メモリ・マネジメントを含めたMMX拡張を伴う完全なPentium(ペン ティアム)を完全にインプリメントする。『タペストリー』システムは、通常、 対称共有メモリ・マルチプロセッサとして相互接続された2つないしは4つのプ ロセッサを含む(図1a、1b、および1cには、そのうちの1つだけが示され ている)。
【0104】 『タペストリー』プロセッサ100は、インストラクション・キャッシュ(I
−キャッシュ)112、もしくはメモリ118の、IP(インストラクション・
ポインタ、他のマシンにおいては、一般にPC、つまりプログラム・カウンタと
して知られる)114によって指定されるロケーションから、I−TLB(イン
ストラクション翻訳ルック−アサイド・バッファ)116によって提供される仮
想アドレス‐物理アドレス変換を用いてインストラクションをフェッチする(ス
テージ110)。I−キャッシュ112からフェッチされたインストラクション
は、RISC実行パイプライン120によって実行される。従来のI−TLBに
よって提供されるサービスに加えて、I−TLB 116は、フェッチしたイン
ストラクション・バイトの解釈を行うインストラクション環境を選択する複数の
ビット182、186のストアを行う。一方のビット182は、メモリ・ページ
上のインストラクションに関するインストラクション・セット・アーキテクチャ
(ISA)を選択する。したがって、『タペストリー』ハードウエアは、ネイテ
ィブ・インストラクションならびにIntel(インテル)X86 ISAのい
ずれも容易に実行することができる。この特徴については、後述のセクションI
Iにおいてさらに詳しく説明する。
【0105】 X86 ISAにおいてエンコーディングされたプログラムの実行は、通常、
ネイティブ『タペストリー』ISAにコンパイルされた同じプログラムの実行よ
り遅くなる。プロファイラ400は、X86プログラムの実行フローの詳細を記
録する。プロファイリングについては、後述のセクションVにおいてさらに詳し
く説明する。ホット・スポット・ディテクタ122は、プロファイルを分析して
、プログラムの「ホット・スポット」部分、すなわち頻繁に実行される部分を探
し出す。ホット・スポットが検出されると、バイナリ・トランスレータ124が
ホット・スポットのX86インストラクションを、「TAXiコード」と呼ばれ
る最適化したネイティブ『タペストリー』コードに翻訳する。X86プログラム
のエミュレーションの間は、プローバ600が、ネイティブ・コードに翻訳され
たX86インストラクションの実行に関するプログラム・フローをモニタする。
プローバ600が、実行しようとしているX86コードに対応する翻訳済みネイ
ティブ『タペストリー』コードが存在すること、かつそれに加えてそれが正しい
ことの叙述が満たされていることを検出すると、プローバ600は、そのIPを
リダイレクトし、X86コードからではなく、翻訳済みネイティブ・コードから
インストラクションをフェッチする。プロービングについては、後述のセクショ
ンVIにおいてさらに詳しく説明する。X86コードと翻訳済みネイティブ『タ
ペストリー』コードの間の対応は、PIPM(物理インストラクション・ポイン
タ・マップ)602において維持される。
【0106】 実行の間にX86プログラム・テキストが修正されることがあるため、システ
ムは、それ自体をモニタして、以前のX86プログラム・テキストを無効にする
おそれのあるオペレーションを検出する。こういった無効にするおそれのあるオ
ペレーションには、自己修正コード、およびダイレクト・メモリ・アクセス(D
MA)転記がある。この種のオペレーションが検出されると、システムは、潜在
的な修正X86テキストに対応するネイティブ『タペストリー』翻訳があれば、
それを無効にする。同様に、たとえばプロファイル・データのように、修正され
たX86データに関連付けされている取り込み済みもしくはキャッシュ済みデー
タがあればそれを無効にする。この有効性管理メカニズムについては、後述のセ
クションI.F、VII、およびVIIIにおいて詳細を説明する。
【0107】 このシステムは、非DRAMメモリ、たとえばI/Oデバイス用のROM B
IOS、メモリ‐マップ済みコントロール・レジスタ等にストアされているイン
ストラクションの翻訳を行わない。
【0108】 翻訳済みネイティブ『タペストリー』コード用のストレージは、たとえばLR
U(リースト−リーセントリー−ユーズド;もっとも参照されていないページを
入れ替える方式)または先入れ先出し(FIFO)といった入れ替えポリシーの
下に解放し、再利用することができる。
【0109】 X86プログラムの一部が、プログラムのシングル実行の間に複数回にわたっ
てネイティブ『タペストリー』コードに翻訳されることがある。通常、翻訳は、
『タペストリー』マルチプロセッサのうちの1つのプロセッサ上において実行さ
れるが、その間には別のプロセッサ上において実行が進行している。
【0110】 数年にわたり、Intel(インテル)その他は、RISC実行コアを使用し
てX86インストラクション・セットをインプリメントしてきたが、このRIS
Cインストラクション・セットは、プログラムによる使用のために公開されてい
ない。『タペストリー』コンピュータは、3つの新しいアプローチを採用した。
第1に『タペストリー』マシンは、ネイティブRISCインストラクション・セ
ットならびにX86インストラクション・セットをともに公開し、それによりそ
の両方におけるシングル・プログラムのコーディングを、両者の間における順逆
の呼び出しの自由度を伴って可能にする。このアプローチは、ISAビット18
0、182、コンバータ136に対するコントロール、および例外ハンドラ(後
述のセクションIIおよびIIIを参照されたい)によって、あるいは別の実施
態様においては、ISAビット180、182、呼び出し規約ビット200、セ
マンティック・コンテキスト・レコード206、および対応する例外ハンドラ(
後述のセクションIVを参照されたい)によって可能になる。第2に、X86プ
ログラムをネイティブRISCコードに翻訳することが可能であり、それにより
X86プログラムは、RISCインストラクション・セットにおいて得られる高
速化の機会を格段に利用することが可能になる。この2番目のアプローチは、プ
ロファイラ400、プローバ600、バイナリ・トランスレータ、およびメモリ
・マネジメントの特定の機能(後述するセクションV〜VIIを参照されたい)
によって可能になる。第3に、これら2つのアプローチが協働し追加のレベルの
恩典を提供する。
【0111】 この開示において論じている特徴の多くは、「PP_enable」(ページ
・プロパティ・イネーブル)と名付けられたプロセッサ・コントロール・レジス
タ内のシングル・ビットによるグローバル・コントロールの下に置かれる。この
ビットがゼロのときは、ISAビット180、182が無視され、インストラク
ションが『タペストリー』ネイティブ・モードで解釈され、プロファイリングが
ディセーブルされ、かつプロービングがディセーブルされる。
【0112】 B.『タペストリー』命令パイプライン 図1cおよび図9aを参照すると、『タペストリー』プロセッサ100は、8
または9ステージのパイプラインをインプリメントしている。ステージ1(ステ
ージ110)は、I−キャッシュ112からラインをフェッチする。ステージ2
(整列ステージ130)および3(変換ステージ134、136、138)は、
X86モードとネイティブ『タペストリー』モードとで異なった動作をする。ネ
イティブ・モードにおいては、整列ステージ130が、パイプラインの残部と非
同期で動作し、I−キャッシュから伸縮プリフェッチ・バッファ132にデータ
をフェッチする。X86モードにおいては、整列ステージ130が、可変長X8
6インストラクションの間の境界を決定するためにインストラクション・ストリ
ームを部分的にデコードし、完全なX86インストラクションを変換ステージ1
34に渡す。X86エミュレーションの間は、ステージ3、つまり変換ステージ
134、136が各X86インストラクションをデコードし、それをコンバータ
136がネイティブ『タペストリー』コードのシーケンスに変換する。X86イ
ンストラクションからネイティブ・インストラクションへの分解においては、コ
ンバータ136が、1サイクルごとに1つもしくは2つの『タペストリー』イン
ストラクションを発行する。各『タペストリー』プロセッサ100は、4つの並
列したパイプライン化された機能ユニット156、158、160、162を有
し、パイプラインの残りの5ステージの4−ウェイ・スーパースカラー問題をイ
ンプリメントする。ネイティブ・モードにおいては、変換ステージ134、13
8が最大で4つの、同時に実行可能な独立したインストラクションを決定し、そ
れを下流の4つのスーパースカラー実行パイプラインに向けて発行する。(別の
マシンの記述においては、これを『スロッティング』と呼んでいることもあり、
充分なリソースおよび機能ユニットが使用可能であるか、またいずれの機能ユニ
ットに対していずれのインストラクションを発行すべきかといったことを決定す
る。)デコード・ステージ140(または「D−ステージ」)、レジスタ読み出
しステージ142(または「R−ステージ」)、アドレス生成ステージ144(
または「A−ステージ」)、メモリ・ステージ146(または「M−ステージ」
)、実行ステージ148(または「E−ステージ」)、およびライト−バック・
ステージ150(または「W−ステージ」)は、少なくともセクションI〜VI
IIに開示している本発明の目的に関して、従来のRISCパイプライン・ステ
ージと考えることができる。パイプラインについては、セクションIXにおいて
図9a〜9cの説明を行うときに詳しく述べる。
【0113】 コンバータ136は、各X86インストラクションをデコードし、それを1な
いしは複数の単純な『タペストリー』インストラクションに分解する。これらの
単純なインストラクションは、X86インストラクションに関する「レシピ」と
呼ばれる。
【0114】 表1を参照すると、X86コンバータ136がアクティブのときには、X86
リソースと『タペストリー』リソースの間に固定されたマッピングが存在する。
たとえばX86アーキテクチャのレジスタEAX、EBX、ECX、EDX、E
SP、およびEBPは、コンバータ・ハードウエア136によって、それぞれ『
タペストリー』物理マシンのレジスタR48、R49、R50、R51、R52
およびR53にマップされる。16ビットの符号および指数に分けられるX86
の8つの浮動小数点レジスタ、および64ビットの小数は、レジスタR32〜4
7にマップされる。X86メモリは、後述のセクションI.Cにおいて論じてい
るように『タペストリー』メモリにマップされる。
【0115】 レジスタの使用は、X86レジスタへのマッピングも含めて、表1に要約され
ている。「CALL(呼び出し)」列は、レジスタを使用してネイティブ『タペ
ストリー』呼び出し規約において引数を渡す方法を記述している。(呼び出し規
約については、後述のセクションIII.A、III.B、およびIVにおいて
詳細を論じる。)「P/H/D」列は、『タペストリー』呼び出し規約の別の側
面を記述しており、呼び出しを通じて保存されるレジスタ(呼び出されるサブプ
ログラムがレジスタを修正する場合には、開始時にそのレジスタを保存し、終了
時にそれを復元しなければならない)、半保存されるレジスタ(下位32ビット
が呼び出しを通じて保存されるが、上位32ビットは修正が許容される)、およ
び破壊されるレジスタについて示している。「X86 p/d」列は、32ビッ
トX86レジスタに対応するレジスタの下位32ビットが、呼び出しによって保
存されるか、あるいは破壊されるかを示している。「コンバータ」、「エミュレ
ータ」、および「TAXi」列は、3つの異なるコンテキストの下に『タペスト
リー』レジスタとX86レジスタの間におけるマッピングを示している。レジス
タr32〜r47について、X86列内の「hi(ハイ)」は、そのレジスタが
X86の拡張精度浮動小数点値における16ビット符号および指数部分を保持し
ていることを示し、「lo(ロー)」は、64ビットの小数を示す。
【0116】
【表1】
【0117】
【表1つづき】
【0118】
【表1つづき】
【0119】 R0は読み出し専用であり、常にゼロになる。X86エミュレーションの間、
R1〜R3は、例外ハンドラ用に予約される。R4は、イミディエートとして表
現できない値を具体化するためにアッセンブラが使用するためのアッセンブラ・
テンポラリである。X86エミュレーションの間、R15〜R31は、後述のセ
クションVにおいて論じるように、プロファイラ400による使用に割り当てら
れ、R5〜R14は、「CT1」〜「CT10」として指定されているが、セク
ションIX.B.1において論じるように、「コンバータ・テンポラリ」として
の使用のために予約される。
【0120】 『タペストリー』は、X86の特徴の多くをスーパーセットしている。たとえ
ば、『タペストリー』ページ・テーブル・フォーマットは、X86ページ・テー
ブル・フォーマットとまったく同じであり;図1dに示したように、ページ・フ
レームに関する追加情報が『タペストリー』プライベート・テーブル、PFAT
(ページ・フレーム属性テーブル)172にストアされる。図1eに示したが、
『タペストリー』PSW(プログラム・ステータス・ワード)190は、X86
PSW 192を埋め込んでおり、さらにいくつかの追加ビットを含んでいる
【0121】 『タペストリー』ハードウエアは、X86アーキテクチャを完全にはインプリ
メントしない。あまり洗練されていない、使用頻度の少ない一部の特徴は、ソフ
トウエア・エミュレータ(図3aの316)においてインプリメントされる。し
かしながら、ハードウエア・コンバータ136とソフトウエア・エミュレータ3
16の組み合わせによって、X86アーキテクチャの完全かつ忠実なインプリメ
ンテーションがもたらされている。
【0122】 後述するセクションIIIには、エミュレータ316の1つの特徴が詳しく説
明されている。ハードウエア・コンバータ136とソフトウエア・エミュレータ
316の間における相互作用については、包括的には後述するセクションIXに
、より詳細に述べればセクションIX.A.2、IX.B.5、IX.C、およ
びIX.Eにおいて説明されている。
【0123】 C.システムの特徴に関するコントロール・ポイントとしてのアドレス変換 図1dを参照すると、X86アドレス変換が『タペストリー』のネイティブ・
アドレス変換によってインプリメントされることが示されている。X86エミュ
レーションの間は、ネイティブ仮想アドレス変換170が常時オンになる。X8
6アドレス変換がオフになるモードにおいてX86のエミュレーションが行なわ
れる場合であっても、『タペストリー』アドレス変換は、アイデンティティ・マ
ッピングをインプリメントするためにオンとなる。『タペストリー』アドレス変
換ハードウエアを介する各メモリの参照を強制することによって、アドレス変換
が、X86コンバータ136のアクティビティのほとんどをインタセプトする上
で、またコンバータの実行をコントロールする上で有利な位置に置かれる。さら
に、本発明の多くの特徴に関するコントロール情報を、アドレス変換および仮想
メモリ・マネジメントに従来から使用されていたテーブルに関連付けされたテー
ブル、もしくはそれに類似のテーブルに都合よくストアすることができる。こう
いったアドレス変換への「係合」によって、『タペストリー』プロセッサおよび
ソフトウエアは、たとえばVGAグラフィックス・ハードウエア、コントロール
・レジスタ、メモリ・マップされるデバイス・コントロール等の「奇妙な」振る
舞いを有するX86の部分、および伝統的なIntel(インテル)チップ・セ
ットによって特別な扱いが与えられているX86アドレス空間の部分のエミュレ
ーションを仲裁することが可能になる。
【0124】 X86プログラムが使用している可能性のあるストレージの部分の意味が変更
されることを防止するために、それが規約を外れる使用である場合であっても、
『タペストリー』プロセッサがX86アドレス変換テーブル内に、その情報をス
トアすることはない。ページに関する『タペストリー』固有の情報は、『タペス
トリー』エミュレーションのために特別に作られたX86の構造内にストアされ
る。ただし、これらの構造の定義は、X86アーキテクチャ内にはなく、またエ
ミュレートされたX86ないしはX86上において実行されるプログラムからは
不可視となる。PFAT(ページ・フレーム属性テーブル)172は、これらの
構造の1つである。PFAT 172は、物理ページ・フレームに対応し、それ
らのページ・フレームの処理ならびにマネージのためのデータを保持するエント
リを有するテーブルであり、ある意味でVAX/VMS仮想メモリ・マネージャ
(たとえば、参照を通じて本件明細書にその内容が取り込まれている1984年
Digital Press(ディジタル・プレス)出版のLAWRENCE
KENAH(ローレンス・ケナー)およびSIMON BATE(サイモン・ベ
イト)による「VAX/VMS INTERNALS AND DATA ST
RUCTURES(VAX/VMS内部およびデータ構造)」を参照されたい)
のPFN(ページ・フレーム番号)データベースに類似している。PFAT 1
72は、各物理ページ・フレームに対応する1バイト・エントリ174を1つ有
している。
【0125】 後述のセクションII、IV、ならびにV、およびVIにおいて論じるが、P
FATエントリ174は、対応するページのインストラクションのデコードに使
用するISAをいずれにするか、対応するページ上において使用する呼び出し規
約をいずれにするかということをコントロールするビット、あるいはプロービン
グのコントロールするビットを含んでいる。
【0126】 D.バイナリ変換、TAXiおよびコンバータ・セーフティ・ネットの概要 再度図1aおよび1bを参照すると、TAXi(「Tapestry acc
elerated execution(『タペストリー』加速実行)」;「T
AXi」と呼ばれる)は、バイナリ翻訳システムである。TAXiは、2つの実
行モード、すなわち完全なX86アーキテクチャに絶対価値基準を置くゴールド
・スタンダード・インプリメンテーションを忠実にインプリメントするハードウ
エア・コンバータ136(ランタイム・システムにおけるソフトウエア補助を伴
う)、およびX86バイナリを『タペストリー』ネイティブ・バイナリに翻訳す
るソフトウエア・バイナリ・トランスレータ124を密接に結合させるが、正当
性を侵害するおそれのある特定の楽観的な仮定を行って、翻訳後のコードを最適
化する。
【0127】 すでに現存するX86バイナリがコンバータ136において実行されることか
ら、X86バイナリにおけるホット・スポット(頻繁に実行される部分)の認識
(122)がなされ、『タペストリー』インストラクションへのオン−ザ−フラ
イの翻訳(124)が行なわれる。ハードウエア・コンバータ136(特に複雑
なインストラクションについてはX86エミュレータ316と結合される)は、
X86インストラクションが厳格に順序どおりに実行されなければならないこと
から、必然的に翻訳後のコードより遅くなる。ハードウエア・コンバータ136
において単一のインストラクションが「翻訳」されることに対して、X86の完
全なホット・スポットを翻訳することによって、より多くの最適化の機会が生ま
れる:X86インストラクションは、小さいデータ非依存の『タペストリー』イ
ンストラクションに分解可能となり、その後それを、順序から外れて実行し、パ
イプライニングし、あるいは4つのスーパースカラー・パイプライン(図1cの
156、158、160、162)において実行することが可能になる。
【0128】 X86コードの実行はプロファイリングされる。このプロファイリング情報は
、X86プログラムにおける「ホット・スポット」、すなわちプログラムのもっ
とも頻繁に実行される部分であり、したがってネイティブ『タペストリー』コー
ドへの翻訳からもっとも多くの恩典がもたらされる部分の識別122に使用され
る。X86コードにおけるホット・スポットは、トランスレータ124によって
ネイティブ『タペストリー』コード(TAXiコード)に翻訳される。X86プ
ログラムの実行の進行に従って、実行がモニタされ、実行されようとしているX
86コードに関する翻訳済みの等価コードが存在するか否かについての判断が行
なわれる。それが存在するときには、翻訳済みのネイティブ『タペストリー』コ
ードに実行が移される。
【0129】 TAXiトランスレータ124は、マシンの振る舞いをいくぶん簡素化した見
方を採用している;たとえば、一部のX86インストラクションについては翻訳
されない。またトランスレータ124は、楽観的な視点を有している。たとえば
、トランスレータ124は、浮動小数点の例外あるいはページ違反がないことを
前提としており、その結果、プログラムの振る舞いを変更することなくオペレー
ションを再整理し、あるいは推論的に再スケジュールすることが可能になる。さ
らにトランスレータ124は、すべてのメモリ参照が良好な振る舞いを有するメ
モリに対してなされることを前提とする。(「良好な振る舞いを有するメモリ」
とは、最後にストアされたメモリ・ロケーションのデータを負荷が受け取ること
になるメモリである。「良好でない振る舞いを有するメモリ」は、メモリ・マッ
プされるデバイス・コントローラに代表され、「I/O空間」とも呼ばれ、それ
においては読み出しによってメモリが状態を変化し、もしくは読み出しがもっと
も新しく書き込まれた値を返す必要がなく、あるいは2つの連続する読み出しが
明瞭に区別されるデータを返す。)たとえばバイナリ・トランスレータ124は
、メモリ読み出しが再整理可能であることを前提とする。翻訳済みネイティブ『
タペストリー』コードは、コンバータ136より高速に実行され、翻訳が正しい
ことが保証できたとき、あるいはあらゆる逸脱が捕捉され、修正できたときに使
用される。
【0130】 TAXiコードの実行は、楽観的な前提の侵害を検出するためにモニタされ、
それにより、X86コードの適正なエミュレーションからのあらゆる逸脱が検出
可能になる。事前チェックによって、正しく実行されるとの保証が得られない翻
訳済みコードの領域に実行が入ろうとしていることを検出することも可能であり
、あるいは楽観的な前提の侵害があったという事実の後で、ハードウエアが例外
を引き渡することも可能である。いずれの場合においても、正当性が保証されな
いとき、あるいはトランスレータ124にとってどのように翻訳するべきかが未
知のコードがあるときには、翻訳済みのネイティブ『タペストリー』コードの実
行が中止されるか、もしくは安全なチェック・ポイントまで巻き戻され、ハード
ウエア・コンバータ136内において実行が再開される。ハードウエア・コンバ
ータ136は、もっとも保守的な前提を採用し、順序、ゴールド・スタンダード
の正当性を保証しつつ、あまりリスクを嫌わないバイナリ・トランスレータ12
4に関するセーフティ・ネットとして機能する。
【0131】 このセーフティ・ネットのパラダイムによって、バイナリ・トランスレータ1
24をより積極的なものとすることが可能になり、またデベロッパは、正当性の
問題をセーフティ・ネットに任せ、パフォーマンス問題に焦点を集中できること
から開発が容易になる。セーフティ・ネットのパラダイムの詳細については、セ
クションVIIIに議論を譲る。
【0132】 『タペストリー』およびTAXiは、完全なX86アーキテクチャをインプリ
メントする。X86ソフトウエアからの歩み寄りはまったく必要ない;確かに、
あらゆるX86オペレーティング・システムは『タペストリー』上において動作
可能であり、それには『タペストリー』用に特別な適合がなされていない既製の
オペレーティング・システムも含まれる。『タペストリー』およびTAXiは、
プロセス、スレッド、可能アドレス空間、アドレス・マッピングといったオペレ
ーティング・システムのエンティティに関する仮定を一切行わない。すなわち、
『タペストリー』およびTAXiは、X86の仮想アドレスもしくは線形アドレ
スではなく、仮想X86の物理メモリに関して動作する。(Intel(インテ
ル)の「仮想」アドレスと「線形」アドレスの間における相違は、この開示に関
してはほとんど現れない;したがって、これらの間における明確な区別が必要と
なる場合を除き、この開示においては、「仮想アドレス」にこれら両方のコンセ
プトを包含させている。)たとえば、物理アドレスを使用することにより、オペ
レーティング・システム・レベルにおいて異なるプロセスの間で共有されるライ
ブラリ・コードは、『タペストリー』インプリメンテーション上において物理メ
モリが共有されることから、自動的にTAXiプロセスによって共有される。オ
ペレーティング・システムによって共有されるコードは、異なるプロセスにおい
て異なるアドレスにマップされる場合であっても共有される。プロセスが実際に
同一の物理ページを共有しているときには、TAXiが同一の翻訳済みコードを
共有することになる。
【0133】 翻訳済みコードのバッファは、先入れ先出し(FIFO)順にリサイクルされ
る。翻訳済みコードのバッファに再利用のためのマーキングが行なわれても、直
ちにそれが破棄されることはない;むしろ、再使用のための準備済みという形で
マークされる。コンテンツが破壊される前に再使用のための準備済みバッファ内
への実行の再入があると、そのバッファがFIFOキューの先頭にリサイクルさ
れる。別の実施態様においては、バッファ内に実行が入ると、常にそれがFIF
Oキューの先頭に移動される;これは、LRU(リースト−リーセントリー−ユ
ーズド;もっとも参照されていないページを入れ替える方式)入れ替えポリシー
を近似する。
【0134】 TAXiシステムの多くの特徴は、プロファイリングに結びつけられている。
たとえば、プロファイリングされていないコードの領域がホット・スポットとし
て識別されることはなく、したがって翻訳されることもない。翻訳抜きではプロ
ービングが成功することがないため、同様にプロファイリングが行なわれていな
い領域についてはプロービング(後述のセクションVIを参照されたい)がディ
セーブルされる。この不変性は、多数の設計の詳細を簡略化し、それについては
以下において適宜論じる。
【0135】 E.システム全体の制御 PSW 190は、ユーザ‐モードのアクセスが許可されていない機能への、
ユーザ−モードによるアクセスを可能にするTAXi_Active(TAXi
アクティブ)ビット198を有している。PSW.TAXi_Active(T
AXiアクティブ)198は、X86プログラムのネイティブ『タペストリー』
翻訳が実行されている間、真にセットされる。PSW.TAXi_Active
(TAXiアクティブ)198が真のとき、ユーザ‐モードのプログラムは、X
86のLDA/STAロック機能にアクセスが許され、すべての『タペストリー
』プロセッサ・レジスタに対する読み出しならびに書き込みアクセスを有し、か
つ拡張TRAPインストラクション・ベクトルにアクセスすることができる(よ
り具体的に述べれば、エミュレータ機能の呼び出しが可能になる)。さらに、拡
張精度浮動小数点演算用のX86互換セマンティクスがイネーブルされる。
【0136】 プローブが成功すると、TAXi翻訳済みコードにRFEによるリターンを行
う前に、それによってPSW.TAXi_Active(TAXiアクティブ)
198がセットされる。TAXi翻訳済みコードの実行が完了すると、翻訳未済
のX86コードに戻ったプロセスが、コンバータ136にRFEによるリターン
を行う前にPSW.TAXi_Active(TAXiアクティブ)198をク
リアする。TAXi翻訳済みコードにおいて例外が発生した場合には、エミュレ
ータ316が呼び出されて、その例外をX86仮想マシンに戻す。エミュレータ
316は、EPC.TAXi_Active(TAXiアクティブ)198をチ
ェックしTAXiにコントロールを戻してX86マシンのコンテキストを復元し
、RFEによりコンバータ136に戻ってX86インストラクションを再実行す
る。
【0137】 F.XPビットおよび保護されていない例外 再度、図1a、1bおよび2aを参照すると、TAXiトランスレータ124
は、X86バイナリの翻訳を生成している。TAXiシステムは、全体として非
常に複雑なキャッシュを表し、それにおいてはX86コードがより低速なメモリ
・レベルを表し、翻訳済みTAXiコードがより高速なメモリ・レベルを表す。
プロファイリングにおいては、いずれのアドレスにおいていずれのイベントが生
じるか、あるいはどこにインストラクションの境界が存在するかといったことに
ついての知識の記録を行うために、TAXiが、プロファイリング時に情報のキ
ャッシングを開始する。さらに、バイナリ・トランスレータ124がX86コー
ドを、意味論的に等かな『タペストリー』のネイティブ・コードに翻訳するとき
にもキャッシングが行なわれる。X86のアーキテクチャ・モデルを侵害しない
ために、TAXiは、失効したX86コード、すなわち消失したか修正されたX
86コードに対応する翻訳済み『タペストリー』ネイティブ・コードの実行を防
止している。基礎をなすプライマリ・データ(X86インストラクション・テキ
スト)が修正された場合には、CPUからのメモリ書き込みによるか、あるいは
デバイスからのDMA書き込みによるかによらず、キャッシュ済みデータ(X8
6コードおよびそれから生成されたTAXiコードを記述したプロファイル)が
無効化され、その結果、それが実行されることはなくなる。実行は、修正された
形式のX86テキストに戻される。修正されたX86テキストがホット・スポッ
トになると、それが認識(122)され、再翻訳(124)が行なわれる。
【0138】 通常のキャッシュと同様に、TAXiキャッシュは有効ビット−XPビットを
有している(PIPMエントリ640においては184、I−TLBにおいては
186;図1a、1bを参照されたい)。X86コード、および「キャッシュさ
れた」翻訳済みネイティブ『タペストリー』コードの有効性は、XP書き込みプ
ロテクト・ビット184、186、およびページの保護をマネージする例外ハン
ドラによって、CPUによる修正から保護されている。それとともに、フラグお
よび例外が、コヒーレントな翻訳済み『タペストリー』バイナリを、X86プロ
グラムの「キャッシュされた」コピーとして維持し、その一方でX86プログラ
ム(オリジナルのX86形式においてエンコーディングされているか、あるいは
翻訳済みのネイティブ『タペストリー』形式においてエンコーディングされてい
るかによらず)によるメモリに対する書き込みを、その書き込みが自己修正コー
ドをインプリメントする場合であっても可能にする。いずれのモードにおいても
、マシン(X86コンバータ136またはTAXiシステムのいずれか)がその
プログラムのセマンティクスを忠実に実行することになる。保護ありおよび保護
なしの例外が、従来の書き込み保護例外と同様な形でプロセスを終了することは
なく、単にそれは、TAXiコードの有効性をマネージするために仲裁しなけれ
ばならないことをTAXiシステムに通知するだけである。
【0139】 X86コードのページが保護されているとき、つまりXPプロテクト・ビット
184、186が「1」であるとき、X86コードに関連付けされたTAXiコ
ードを無効にするイベントのクラスが2つ存在する。第1は、『タペストリー』
プロセッサがX86ページの1つにストアできることである。これは、プログラ
ムが自己修正コードを使用しているとき、あるいはプログラムがオン‐ザ‐フラ
イで書き込み可能なストレージ(スタックまたはヒープ)内にコードを生成して
いるときに起こり得る。第2は、DMAデバイスがページに書き込みできること
であり、たとえばプログラムのロードもしくはアクティブ化に続いてプログラム
・テキストのページがページングされ、ページ違反を生じる。いずれの場合にお
いても、『タペストリー』が割り込みを発生し、その割り込み用のハンドラがX
P「有効」ビットをリセットして、そのX86ページに対応するあらゆるTAX
iコードがプローブから到達し得ないことを示す(セクションVI.Dを参照す
ると、プロービングは、XPビット184、186が「1」にセットされている
X86ページ上においてのみイネーブルされる)。
【0140】 書き込みプロテクト・ビットを「XP」と呼んでいるが、本来は「exten
ded property(拡張プロパティ)」の略語である。つまり、ページ
用のISAビット(PFAT 172においては180、I−TLBにおいては
182)がX86 ISAを示しているとき、XPビット(PIPMエントリ6
40においては184、I−TLBにおいては186)が解釈されて、そのペー
ジに関する修正プロテクト・プロパティがエンコードされる。XPビット184
、186は、ページごとの細分性で保護メカニズムをコントロールする。マシン
全体に関する保護システムは、TAXi_Control.unpr(TAXi
_コントロール.unpr)ビット(TAXi_Control(TAXiコン
トロール)レジスタのビット<60>、すなわち図4gの468;後述のセクシ
ョンV.Eを参照されたい)によってイネーブルおよびディセーブルがコントロ
ールされる。
【0141】 物理的なページは、マネジメントに関して『タペストリー』オペレーティング
・システム(図3aの312)とX86オペレーティング・システムの間におい
て分割され、それに応じてそのページ用のPFAT.ISAビット180(I−
TLB.ISAビット182内にキャッシュされる)が、『タペストリー』につ
いては「0」、X86については「1」にそれぞれセットされる。すべてのX8
6ページについて、XPビット(PFAT 172においては184、I−TL
B 116においては186)が「保護なし」を示す「0」にクリアされる。X
Pビット184、186は、『タペストリー』ページ上には効果を及ぼさない。
【0142】 XPビット184、186の振る舞いは、MESI(Modified,Ex
clusive,Shared,Invalid、つまり修正、排他、共有、無
効)キャッシュ・プロトコルにある意味で類似している。XPの「保護なし」状
態は、概略でMESIの「排他」状態に等価であり、このページからキャッシュ
される情報はなく、ページは保護されないまま残されるという意味を有する。X
P「保護あり」状態は、概略でMESIの「共有」状態に等価であり、このペー
ジから情報がキャッシュされることは可能だが、このページをパージした後でな
ければ書き込みはできないという意味を有する。4つのポイントの類比を次の表
2に示す。
【0143】
【表2】
【0144】 アクション1:データのキャッシュ済みコピーをすべて破棄し、キャッシュな
し/排他状態に遷移する。 アクション2:共有/複製コピーをフェッチし、キャッシュあり/共有状態に
遷移する。
【0145】 MESIの「共有された」キャッシュ・ラインに対する書き込みは、他のすべ
てのプロセッサに対してキャッシュ・ラインをパージし、それらのラインを「排
他」にセットすることを強制する。同様に、XP保護(184、186)された
ページに対する書き込みは、そのページを保護なしにセットさせる。表2におい
ては、これら2つの類似したアクションが「アクション1」として示されている
。ISAビット180、182が「1」であり、XPビット184、186が「
1」であれば、これは保護されたX86インストラクション・ページである。X
Pビット184、186が「1」にセット(保護)されているX86 ISAペ
ージに対するストアは、カレント・コードがX86ネイティブ・コードであるか
、あるいはTAXiコードであるかによらず、中止され、コントロールが保護あ
り例外ハンドラに渡される。ハンドラは、そのページのXPビット184、18
6を「0」にセットすることによって、そのページを保護なしとしてマークする
。そのページに関連付けされているすべてのTAXiコードは破棄され、この破
棄を反映するべく、TAXiコードを追跡するPIPMデータベース602がク
リアされる。その後、ストアがリトライされる−−そのページのXPビット18
4、186が「0」にクリアされていること(保護なし)から、今回のストアは
成功することになる。TAXiコードが、X86ページに書き込む場合であって
、このTAXiコードがその翻訳である場合には、全体的なメカニズムは機能す
る−−例外ハンドラは、実行中のTAXiコードを無効にし、コンバータに戻り
、そのストアを実行したTAXiコードに代えてオリジナルのX86テキストに
戻す。
【0146】 「排他」キャッシュ・ラインに対する書き込み、もしくはXP保護なし(18
4、186)ページに対する書き込みは、状態変化を招かない。XPビット18
4、186が「0」(保護なし)であれば、ストアを完了することができる。表
2においては、これら2つの状態が「3」として示されている。
【0147】 MESIの「共有」キャッシュ・ラインからの読み出しは、そのキャッシュ内
のデータがカレントであることから追加の遅延を伴うことなく進められる。同様
に、コンバータ136によるXP保護(184、186)されたページからのイ
ンストラクションの実行は、翻訳済みTAXiコードがそのページ上のインスト
ラクションから生成されたものであれば、そのTAXiコードがカレントである
ことから遅延を伴うことなく進められ、プロファイリングおよびプロービングの
メカニズム(400、600;後述するセクションVおよびVIを参照されたい
)は適正に振る舞う。表2においては、これらの類似した応答が「4」として示
されている。
【0148】 別のプロセッサにおいて「排他」状態に維持されているキャッシュ・ラインか
らの読み出しは、当該別のプロセッサからメモリにそのラインをストアすること
を強制し、その後そのラインは、読み出しているプロセッサのキャッシュ内にお
いて「共有」状態として読み出される。同様に、コンバータ136がXP保護(
184、186)のないページ(ISAが「1」すなわちX86コードを表し、
XPビット184、186が「0」すなわち保護なしを示す)からのコードを実
行し、特定の追加の条件とともに、プロファイルをトレース‐パケット・エント
リに書き込もうとしているとき、マシンは「保護なし」例外を取り、対応するハ
ンドラに向きを変える。ハンドラは、そのページを保護し、そのページを他のプ
ロセッサと同期させる。表2においては、これらの類似のアクションが「アクシ
ョン2」として示されている。保護なし例外は、保護されていないX86ページ
(後述のセクションIIにあるように、そのページのI−TLB.ISAビット
182が「1」であり、かつI−TLB.XPビット186が「0」になってい
る)からインストラクションがフェッチされ、TAXi_Control.un
pr(TAXi_コントロール.unpr)468が「1」であり、かつ次に示
すいずれかの場合に生じる。
【0149】 (1)プロファイル取り込みインストラクションが発行されて新しいプロファ
イル・パケットが開始された場合(TAXi_State.Profile_A
ctive(図4hの482;TAXi_状態.プロファイル_アクティブ)が
「0」、TAXi_State.Profile_Request(TAXi_
状態.プロファイル_リクエスト)484が「1」、かつTAXi_State
.Event_Code_Latch(TAXi_状態.イベント_コード_ラ
ッチ)486、487が、図4bの「開始パケット」418が真であるイベント
・コードを含むとき)または、
【0150】 (2)コンバータ・レシピ内の最初のインストラクションが発行され、TAX
i_State.Profile_Active(TAXi_状態.プロファイ
ル_アクティブ)482が「1」の場合。 この式のTAXi_State(TAXi_状態)項については、セクション
V.EならびにV.Fおよび図4g、4h、5aならびに5bにおいて説明する
【0151】 保護なし例外ハンドラは、EPC.EIP(EPCは例外によってスタックに
プッシュされたネイティブ例外ワード(インストラクション・ポインタおよびP
SW)であり、EPC.EIPは、インストラクション・ポインタの値である)
から、もしくはTLB違反アドレス・プロセッサ・レジスタからフェッチされた
インストラクションの物理ページ・アドレスを調べる。割り込みサービス・ルー
チンは、そのページ用のPFAT.XPビット184およびI−TLB.XPビ
ット186を「1」にセットし、そのページが保護されていることを示す。この
情報は、共有メモリ・マルチプロセッサのキャッシュ・システムにおける「TL
Bシュート‐ダウン」に類似した態様に従って他の『タペストリー』プロセッサ
およびDMU(DMAモニタリング・ユニット)700に伝播される。例外ハン
ドラは、カレント・プロファイル・パケット(後述するセクションV.Fを参照
されたい)を中止するか、あるいはプロファイル・パケットを継続できるコンテ
キストにマシンを置く。その後例外ハンドラは、コンバータ136に戻って実行
を再開する。
【0152】 TAXi_Control.unpr(図4gの468;TAXi_コントロ
ール.unpr)がクリアされると、XPビット184、186の値が無視され
る:例外は生成されず、TAXiソフトウエアは、プロファイル・パケットの確
認および「保護された」ページ属性のセットを引き受ける。
【0153】 別の実施態様においては、保護なし例外ハンドラがカレント・プロファイル・
パケットを中止し、そのページのアイデンティティを調べる。その後、仮想メモ
リ・システムにおけるページ・ピュアリファイアに類似のレイジー・エージェン
トがPFAT.XPビット184、I−TLB.XPビット186、およびDM
U(DMAモニタリング・ユニット)を操作してそのページを保護する。次にそ
のページに実行が入るとき、そのページは保護されており、プロファイリングは
通常のコースを進むことになる。
【0154】 保護されたページに対する書き込みを試みると(たとえば自己修正コードによ
る、あるいはテキストとデータが混合されたページに対する書き込み)それがト
ラップされ、そのページが再度保護なしにセットされる。
【0155】 TAXi_Control.unpr(TAXi_コントロール.unpr)
468が「1」の間、保護されていないページに関するプロファイルを試みるこ
とが、保護なし例外を生じさせ、かつ保護なし例外ハンドラによってそのページ
が保護されるか、あるいはそのプロファイル・パケットが中止されることから、
最終的にはプロファイリングがディセーブルされる。保護されていないページに
関するプロファイリングをオフにすることは、保護されていないページがホット
・スポットとして認識されないこと、したがって翻訳されないことを保証する。
それに対して、ページが保護できないとき(たとえばそのページがアドレス空間
ゼロの良好な振る舞いを有するメモリではなく、I/Oバスにマップされている
場合)、現在収集されているすべてのプロファイル・パケットが中止される。こ
の規則のインプリメンテーションおよびいくつかの限定的な例外については、後
述のセクションV.Hにおいて説明する。
【0156】 XP保護メカニズムについては、後述のセクションVIIIにおいてさらに詳
しく説明する。DMAデバイスによる書き込みに対してページを保護するための
第2の保護メカニズムについては、後述のセクションVIIにおいて説明する。
【0157】 II.プログラム・テキストのための命令セットアーキテクチャ(ISA)の指
標 図1a、1b、1cおよび1dを参照すると、プログラムは、領域176に分
割され、それぞれの領域が対応するフラグ180を有している。フラグ180は
、ISAのアサート(178)を行い、その下に、インストラクション・デコー
ド・ユニット134、136、140が、パイプライン120に対して直接、I
SA選択178によってインストラクションf 138をデコードすることにな
る。ISAビット180、182が「1」となっているページ176からインス
トラクションがフェッチされると、そのインストラクションが、ISA選択17
8のコントロールの下にパイプラインの変換ステージ134、136に渡され、
それにおいてインストラクションがIntel(インテル)X86インストラク
ションとして解釈される。領域は、仮想メモリもしくは物理メモリのいずれにお
いても隣接している必要はない−−X86テキストの領域は、ページごとを基準
に、ネイティブ『タペストリー』テキストの領域と混在することができる。
【0158】 1つのISAに関して記述されたプログラムは、いずれのISAでコーディン
グされたライブラリ・ルーチンも呼び出すことができる。たとえば、特定のプロ
グラムが、データベース・マネジメント・システムおよびマルチメディア機能を
ともに使用することができる。マルチメディア・サービスは、最適化済み『タペ
ストリー』ネイティブ・コードのライブラリによって提供することができる。デ
ータベース・マネージャは、X86用の既製のデータベース・システムとなるこ
ともある。呼び出しているプログラムは、X86もしくは『タペストリー』のい
ずれに対してコンパイルされているかによらず、容易に両方のライブラリを呼び
出すことが可能であり、またその組み合わせもシームレスな協働を提供する。
【0159】 一実施態様においては、ISAビットのインスタンスが2つの場所に作られる
;すなわち、マスタ・コピー180および高速アクセスのためのキャッシュ・コ
ピー182である。マスタ・コピー180は、PFAT 172内の各エントリ
174に含まれるシングル・ビットである。メモリ118の各物理ページに対応
してそれぞれ1つのPFATエントリ174が存在し、所定のPFATエントリ
174内のISAビット180の値は、『タペストリー』プロセッサ100が、
対応するページからフェッチしたインストラクションをネイティブ・インストラ
クション・セットのアーキテクチャの下に解釈するか、あるいはX86インスト
ラクションとして解釈するかをコントロールする。I−TLBミスに応答して、
Intel(インテル)フォーマットのページ・テーブルからI−TLB内に、
キャッシュ済みコピー182としてPTEがロードされる。このページ・テーブ
ルからの物理ページ・フレーム番号は、PFAT 172にインデクスを行うた
めに使用され、対応するPFATエントリ174を見つけ出し、PFATエント
リ174からの情報を使用してIntel(インテル)フォーマットのI−TL
Bエントリを補う。このように、インストラクションのフェッチ110の間の、
ビットのクエリが行なわれる時点までには、ISAビット180ビットが、この
種のクエリに関する本来のロケーション、すなわちI−TLB 116に収めら
れる。同様に、プロセッサが、一体化されたインストラクションおよびデータT
LBを使用する場合には、ページ・テーブルおよびPFAT情報が、一体化TL
B内の適切なエントリにロードされる。
【0160】 別の実施態様においては、順方向マッピングであるか逆方向マッピングである
かによらず、ISAビット180がアドレス変換テーブル内に配置される。この
実施態様は、すでに存在する固定仮想メモリ・アーキテクチャのインプリメンテ
ーションに対する拘束が緩い実施態様においてより望ましく、それにおいては、
コンピュータの設計者が、複数アーキテクチャのインプリメンテーションに関す
るより多くのコントロールを有することができる。さらに別の実施態様において
は、ISAビット180、182を、I‐キャッシュ112内のデータとしてコ
ピーすることができる。
【0161】 実行のフローが1つのISA 180、182のページから別のページに移る
とき(たとえば、コントロール・フローのソースが1つのISA内にあり、その
ディスティネーションが他に含まれるとき)、『タペストリー』は変化を検出し
、「遷移例外」と呼ばれる例外を取るする。この例外は、プロセッサを2つの例
外ハンドラのうちの一方、すなわち『タペストリー』−X86ハンドラ(図3i
の340)またはX86−『タペストリー』ハンドラ(図3hの320)に向け
、それにおいて特定の状態ハウスキーピングが実行される。特に、例外ハンドラ
はEPC(割り込みが行なわれたX86プロセスの状態をスナップショットする
PSWのコピー)内のISAビット194を変更し、それにより、遷移例外ハン
ドラ320、340のエンドにおいてRFE(例外からのリターンを示すインス
トラクション)は、変更されたEPC.ISAビット194をPSW内にロード
する。PSW.ISAビット194の内容は、プロセッサ100の実際の実行を
コントロールする状態変数であり、変更されたISA選択178は、実行を再開
したときに有効になる。PFAT.ISAコピー180およびI−TLB.IS
Aコピー182は、例外に関するトリガを行うだけである。この例外メカニズム
によって、古いISA内のインストラクションをパイプラインから排出し、新し
いISAモードの実行に対する変更を有効にするために必要となるコントロール
回路の量を抑えることが可能になる。
【0162】 『タペストリー』アーキテクチャおよびX86アーキテクチャが共通のデータ
表現(ともにリトル・エンディアン、32ビット・アドレス、IEEE−754
浮動小数点、構造メンバ・アライメント規則等)を共有することから、プロセス
は、マシンのデータ・ストレージ状態に対する変更を必要とすることなく新しい
ISAにおいて実行を再開することができる。
【0163】 別の実施態様においては、マシンの実行がISAビット194のI−TLB.
ISAコピーによってコントロールされ、PSW.ISAコピー190がコント
ロール・ビットではなく、ヒストリ・ビットになる。ISAビット180、18
2が以前のページのISAビット180、182と一致しないページに実行のフ
ローが向けられるとき、インプリメンテーションを行う側の選択肢として、マシ
ンに遷移例外を取らせるか、あるいは遷移例外を取らせずに「ギア・チェンジ」
を行わせることができる。
【0164】 プロセッサ・コントロール・レジスタの1つに、「ページ・プロパティ・イネ
ーブル」ビットが含まれている。システムがパワー・オンになったときのこのビ
ットは「0」であり、ページ・プロパティはディセーブルである。この状態にお
いては、PSW.ISAビットがソフトウエアによって操作されてコンバータ1
36をオン・オフし、遷移例外およびプローブ例外はディセーブルになる。シス
テムの初期化が完了すると、このビットが「1」にセットされ、ISAビットの
PFATならびにTLBコピーが、前述のようにシステムの振る舞いをコントロ
ールする。
【0165】 III.X86スレッドに関連づけられた『タペストリー』プロセッサコンテキ
ストの保存 A.概要 図3a〜3fを参照すると、2つのインストラクション・セットのいずれかに
おいてプログラムを実行する機能によって、単一のプログラムを両方のインスト
ラクション・セットにおいてコーディングできるという可能性がもたらされるこ
とがわかる。図3bに示したように、『タペストリー』システムは、発呼側から
被呼側へのトランスペアレントな呼び出しを提供し、それにおいては互いに他方
のISAを知る必要がなく、また発呼側または被呼側のいずれも、他方と協働す
るための特別なコーディングを必要としない。図3cに示されるように、X86
の発呼側304は、協働するためには被呼側がX86インストラクション・セッ
トによりコーディングされていること、あるいはそれがネイティブ『タペストリ
ー』RISCインストラクション・セット308によりコーディングされている
ことという制約を伴うことなく被呼側のサブプログラムに対して呼び出しを行う
ことが可能である。被呼側がX86インストラクション・セットによりコーディ
ングされている場合には、この呼び出しが通常の呼び出しとして実行される。被
呼側308がネイティブ『タペストリー』インストラクション・セットによりコ
ーディングされている場合には、『タペストリー』プロセッサ100が、被呼側
308に入るときに遷移例外384を取り、『タペストリー』被呼側308から
X86発呼側304に戻るとき、別の遷移例外386を取る。これらの遷移例外
384、386およびそれらのハンドラ(図3hの320および図3iの340
)は、マシン状態をX86発呼側によって設定されたコンテキストから、『タペ
ストリー』被呼側308によって期待されているコンテキストに変換する。
【0166】 図3c〜3fを参照すると、類似した遷移例外384、386およびハンドラ
320、340が、X86発呼側とその被呼側の間(図3c)、ネイティブ『タ
ペストリー』発呼側とその被呼側の間(図3d)、X86発呼側とその被呼側の
間(図3e)、およびネイティブ『タペストリー』発呼側とその被呼側の間(図
3f)に接続を提供し、かつ、各発呼側−被呼側ペアのISA間における独立性
を提供することがわかる。
【0167】 図3aならびに図3lおよび表1を参照すると、X86オペレーティング・シ
ステム306によってマネージされたX86スレッド(たとえば302、304
)は、r32〜r55の下位半分に表されているX86レジスタ、X86インス
トラクションの実行に影響を与えるEFLAGSビット、カレント・セグメント
・レジスタ等を含めて、通常のX86コンテキストを運ぶ。それに加えて、X8
6スレッド302、304がネイティブ『タペストリー』ライブラリ308を呼
び出すと、X86スレッド302、304は、相当量の拡張コンテキスト、X8
6アーキテクチャの内容を超える『タペストリー』プロセッサのコンテキストの
部分を具体化する。スレッドの拡張コンテキストには、各種の『タペストリー』
プロセッサ・レジスタ、汎用レジスタr1〜r31およびr56〜r63、およ
びr32〜r55の上位半分(表1参照)、ISAビット194のカレント値(
および、後述するセクションIVの実施態様においては、XP/呼び出し規約ビ
ット196ならびにセマンティック・コンテキスト・フィールド206のカレン
ト値)を含ませることができる。
【0168】 『タペストリー』システムは、仮想X86 310全体をそのすべてのプロセ
スおよびスレッド、たとえば302、304とともに、単一の『タペストリー』
プロセッサ311としてマネージする。『タペストリー』オペレーティング・シ
ステム312は、PSW 190のISAビット194を含めて、『タペストリ
ー』プロセッサ311、314の間のコンテキストの切り替え時におけるプロセ
ッサ・コンテキストの保存および復元に、従来のテクニックを使用することがで
きる。しかしながら、仮想X86プロセス311内において既製のX86オペレ
ーティング・システム306(たとえば、Microsoft Windows
(マイクロソフト・ウインドウズ)またはIBM OS/2)によってマネージ
されるスレッド302、304に関しては、拡張コンテキストの保存および復元
のために、かつ拡張コンテキスト情報とX86オペレーティング・システム30
6によってマネージされるスレッド302、304の間の結合を維持するために
、『タペストリー』システムは、仮想X86 310に入り、またそこから出る
ときある種の追加のハウスキーピングを実行する。(『タペストリー』エミュレ
ーション・マネージャ316がX86オペレーティング・システム306の下で
動作しており、したがってX86オペレーティング・システム306によってマ
ネージされるエンティティ、たとえばプロセスおよびスレッド302、304が
それに気づかないということをここで想起されたい。)
【0169】 図3a〜3oは、現在『タペストリー』拡張リソースを使用しているX86ス
レッド304(つまり、X86オペレーティング・システム306のマネジメン
トの下にあり、したがって『タペストリー』オペレーティング・システム312
に対して不可視のスレッド)の完全なコンテキストを保存し、復元するために使
用されるメカニズムを示している。概略を述べれば、このメカニズムは、仮想X
86 310に対してアーキテクチャ的に不可視となるメモリ・ロケーション3
55に、完全な拡張コンテキストをスナップショットする。ストアされたコンテ
キストのメモリ・ロケーション355とそのX86スレッド304の間の対応は
、『タペストリー』オペレーティング・システム312およびX86エミュレー
タ316によって、X86オペレーティング・システム306の協働を必要とし
ない方法で維持され、その結果、X86オペレーティング・システム306がX
86スレッドを再開したとき、割り込みの行なわれたX86スレッド304の再
開前にX86オペレーティング・システム306がX86スレッド302の間の
コンテキスト切り替えを実行している場合であっても、拡張コンテキストが復元
される。X86エミュレータ316または『タペストリー』オペレーティング・
システム312は、X86オペレーティング・システム306への入出を含めて
、X86から『タペストリー』への遷移またその逆の遷移のそれぞれにおいて、
一時的にコントロールを獲得して適時拡張コンテキストの保存およびその復元を
行う。
【0170】 ハードウエア・コンバータ136とソフトウエア・エミュレータ316の間に
おける相互作用については、後述するセクションIXにおいて概要を、セクショ
ンIX.A.2およびIX.B.5において詳細をそれぞれ説明する。
【0171】 図3g〜3kに示した実施態様の説明は、あらゆる任意の移動(条件付きジャ
ンプ等)に関する遷移を許容する完全に一般的な場合ではなく、定義済みの状況
における1つのISAから別のそれへのクロス(サブプログラム呼び出しならび
にリターンおよび割り込み)に焦点が当てられている。任意のクロスISA遷移
において『タペストリー』ソースまたはディスティネーションが必ず存在するこ
とから、かつこの種の移動が生じ得るサイトの数が比較的限定されることから、
各遷移サイトの『タペストリー』サイドに、ソース・コンテキストにおいて設定
された状態からディスティネーション・コンテキストにおいて期待される状態に
マシン状態を変換するために採用されるステップを示す情報をコメントすること
ができる。セクションIVで述べる代替実施態様においては、ハードウエアがこ
のソフトウエア・コメントを補い、完全に包括的なISAクロッシングを可能に
する。
【0172】 ネイティブ『タペストリー』環境とX86環境の間の相互作用は、X86−『
タペストリー』遷移例外ハンドラ(図3hの320)、『タペストリー』−X8
6遷移例外ハンドラ(図3iの340)、『タペストリー』オペレーティング・
システム312の割り込み/例外ハンドラ(図3jの350)、およびX86エ
ミュレータ316(ハードウエア・コンバータ136において都合よく実行でき
ないX86の振る舞いの一部をエミュレートするソフトウエア)の協働によって
もたらされる。
【0173】 すべてのネイティブ『タペストリー』インストラクションが本質的に「0 m
od 4」の境界に整列していることから、『タペストリー』インストラクショ
ン・アドレスの2つの下位ビット<1:0>は常に「0」になることがわかって
いる。したがって、エミュレータ316と、『タペストリー』オペレーティング
・システム312の例外ハンドラ320、340、350は、『タペストリー』
インストラクション・アドレスのビット<1:0>を用いて互いに情報を渡すこ
とができる。一例を考えるのであれば、ネイティブ『タペストリー』コードから
の呼び出しのリターン・アドレス、またはネイティブ・コードの割り込みに対す
る再開用アドレスは、必然的に最下位2ビットに2つのゼロを有している。コン
トロールを獲得するコンポーネント(『タペストリー』−X86遷移ハンドラ3
40もしくは『タペストリー』オペレーティング・システム312のいずれか)
は、これら2つの下位ビットを次の表3に示すようにセットしてコンテキスト情
報をストアする。
【0174】
【表3】
【0175】 その後、コントロールが『タペストリー』発呼側もしくは割り込みが行なわれ
た『タペストリー』ネイティブ・コードに戻ると、X86−『タペストリー』遷
移例外ハンドラ320がこれらの2ビットを使用して、復元されることになる発
呼側のコンテキストを決定し、これら2ビットをゼロに戻して、コントロールを
適切なアドレスに返す。
【0176】 第2の情報ストアは、XDレジスタ(表1のレジスタR15)である。『タペ
ストリー』呼び出し規約(後述するセクションIII.Bを参照されたい)は、
このレジスタを、状態情報を通信するため、およびX86呼び出し規約の下にお
けるマシン状態から、『タペストリー』呼び出し規約の下における意味論的に等
価のマシン・コンテキストに、あるいはその逆をマッピングするために予約して
いる。『タペストリー』クロスISA呼び出し規約は、発呼側が、X86インス
トラクションによってコーディングされていることもある被呼側サブプログラム
を呼び出そうとするとき、XDレジスタに発呼側の引数リストを記述する値をセ
ットする。同様に、『タペストリー』被呼側が、たとえばX86発呼側にリター
ンするとき、呼び出し規約によって、被呼側がXDに、関数によって返された戻
り値を記述する値をセットすることが求められる。この記述からソフトウエアは
、X86呼び出し規約の下に、被呼側による受け入れのために戻り値をどのよう
に変換するべきかを決定することができる。いずれのケースにおいても、『タペ
ストリー』コードによってセットされるXD値はゼロにならない。最後に、X8
6−『タペストリー』遷移ハンドラ320が、XDをゼロにセットし、X86呼
び出し規約に従って引数リストが渡されたことを『タペストリー』ディスティネ
ーションに示す。詳細については後述するが、各『タペストリー』サブプログラ
ムは、プロローグを有し、それが到来するXD値を解釈して、X86呼び出し規
約の引数リストを『タペストリー』呼び出し規約の引数リストに変換し(XD値
がゼロである場合)、『タペストリー』−X86例外ハンドラ340が、『タペ
ストリー』関数から返されたXD値を解釈して関数の戻り値をX86形式に変換
するようにプログラムされる。
【0177】 『タペストリー』呼び出し規約は、発呼側のスタックの深さを被呼側が保存す
ることを求める。X86呼び出し規約には、その種の要件の強制がない。X86
−『タペストリー』遷移ハンドラ320および『タペストリー』−X86遷移ハ
ンドラ340は、協働してこの制約をX86被呼側に強制する。『タペストリー
』−X86遷移ハンドラ340がX86被呼側に対する呼び出しを検出したとき
、遷移ハンドラ340は、レジスタESI(表1のR54)内のスタックの深さ
を記録する(図3iの343)。ESIは、X86呼び出し規約によって半保存
され、ネイティブ規約によって全保存される。リターン時には、X86−『タペ
ストリー』遷移ハンドラ320がESIをSPにコピーし直し、それによってオ
リジナルのスタックの深さが復元される。これは、『タペストリー』−X86遷
移ハンドラ340によってスタック上に生成された(図3iの344)32バイ
トの隠されたテンポラリを割り当て解除するという望ましい副次的な効果を有し
ている。
【0178】 B.サブプログラムのPrologs 「呼び出し規約」は、1つのコンポーネントから次にデータをどのように渡す
かということについての単なるソフトウエア・コンポーネント間の取り決めであ
る。すべてのデータが同一の規約に従ってRISCアーキテクチャおよびエミュ
レートされたCISCアーキテクチャの両方にストアされるとすれば、2つのI
SA環境間における遷移は比較的容易になる。しかしながら現実はそうならない
。たとえば、X86呼び出し規約は、概略X86アーキテクチャによって定義さ
れている。サブルーチンの引数は、メモリ・スタック上で渡される。特別なPU
SH(プッシュ)インストラクションが、サブプログラム呼び出しの前に引数を
スタック上にプッシュし、CALL(コール)インストラクションがコントロー
ルを移動し、スタック上にリターン・リンケージ・ロケーションを保存し、かつ
RET(リターン)インストラクションがコントロールを発呼側に戻し、被呼側
のデータをスタックからポップする。被呼側プログラムの内側においては、スタ
ック・ポインタからの既知のオフセットにおいて引数が参照される。これに対し
、『タペストリー』呼び出し規約は、多くのRISC呼び出し規約と同様に、ソ
フトウエア・プロデューサ(コンパイラおよびアッセンブリ言語のプログラマ)
の間の合意によって定義される。たとえば、すべての『タペストリー』ソフトウ
エア・プロデューサは、レジスタ32内において最初のサブプログラムの引数が
、レジスタ33内において2番目の引数が、レジスタ34内において3番目の引
数が渡されるという形で、以下同様に引数引き渡しが行なわれることを承知して
いる。
【0179】 図3gを参照すると、X86発呼側から呼び出される可能性のある『タペスト
リー』コンパイラによってコンパイルされた任意のサブプログラムに、GENE
RAL(ジェネラル)エントリ・ポイント317および専用NATIVE(ネイ
ティブ)エントリ・ポイント318が与えられている。GENERAL(ジェネ
ラル)エントリ・ポイント317は、X86発呼側または『タペストリー』発呼
側のいずれによっても呼び出される完全な汎用性を備え、XDレジスタ(表1の
R15)内の値を解釈(319)して、コントロールがサブプログラムの本体に
達する前に、そのパラメータ・リストが『タペストリー』呼び出し規約に適合す
ることを保証する。またGENERAL(ジェネラル)エントリ・ポイント31
7は、X86発呼側にリターンする間に有用と考えられる情報をスタックのリタ
ーン遷移引数エリア(RXA;図3hの326)にストアし、スタック・ポイン
タのカレント値、および大きな関数の戻り値がストアされている可能性のある隠
されたメモリ・テンポラリのアドレスを示す。NATIVE(ネイティブ)エン
トリ・ポイント318は、直接呼び出し(ポインタ、仮想関数等を通過しない)
によってサブプログラムを呼び出す『タペストリー』発呼側による使用のみが可
能であり、より効率的なリンケージを備える;NATIVE(ネイティブ)エン
トリ・ポイント318によってもたらされる唯一の複雑性は、「サイズ可変引数
」の引数リスト、または16個のパラメータ・レジスタP0〜P15(表1のR
32〜R47)に収まらない引数リストである。GENERAL(ジェネラル)
エントリ・ポイント317の値は、サブプログラムのアドレスを獲得した任意の
オペレーションによって返される。
【0180】 C.X86−『タペストリー』遷移ハンドラ 図3hを参照すると、X86−『タペストリー』遷移ハンドラ320に入る条
件が3つあることが示されている:すなわち、(1)X86 ISA内のコード
がネイティブ『タペストリー』コードを呼び出すとき、(2)X86被呼側サブ
プログラムがネイティブ『タペストリー』発呼側にリターンするとき、および(
3)X86オペレーティング・システム306が、非同期外部割り込みによって
ネイティブ『タペストリー』コードの実行間に割り込みの行なわれたスレッド3
04を再開するとき、の3つである。
【0181】 X86−『タペストリー』遷移ハンドラ320は、EPC.EIPにおいて獲
得されたディスティネーション・アドレスの下位2ビットを用いてコードに対す
るディスパッチ(321)を行って、これらの条件のそれぞれを処理する。ここ
で、これらの2ビットが、前述の表3に示した値にセットされることに留意され
たい。
【0182】 これらの下位2ビットEPC<01:00>が「00」、すなわちケース32
2であれば、この遷移が、X86発呼側から『タペストリー』被呼側に対するC
ALL(呼び出し)であることが示される(通常は、その発呼側がX86バイナ
リ・コードを用いてコーディングされていることが期待されるライブラリ・ルー
チンに関する『タペストリー』ネイティブ置換)。遷移ハンドラ320は、メモ
リ・スタックからリンケージ・レジスタLR(表1のレジスタR6)内にリター
ン・アドレスをポップ(323)する。ポップ(323)は、X86発呼側の引
数リストの最初の引数をポイントしているSP(スタック・ポインタ;表1のレ
ジスタR52)をそのまま残す。SP値は、APレジスタ(引数ポインタ;表1
のレジスタR5)にコピーされる(324)。SPは、リターン遷移引数エリア
(このリターン遷移引数エリアは、被呼側のGENERAL(ジェネラル)エン
トリ・ポイント(図3gの317)によって使用されることがある)のためのス
ペースを割り当てるために8デクリメント(326)され、その後SPは、切り
捨てられて(327)32バイトにそろえられる。最後に、XDがゼロにセット
(328)されて、被呼側のGENERAL(ジェネラル)エントリ・ポイント
317に対して、この呼び出しが、X86呼び出し規約に従って構成されたマシ
ンとともに生じることを通知する。
【0183】 下位2ビットのリターン・アドレスEPC<01:00>が「10」もしくは
「11」であった場合、すなわちケース332もしくはケース329であった場
合には、X86被呼側から『タペストリー』発呼側へのリターンであることが示
される。これらの値は、期待される関数リターン結果の特性に従い、X86被呼
側が呼び出された時点において、あらかじめ『タペストリー』−X86遷移ハン
ドラ340によってストアされる。
【0184】 下位ビットが「11」であるとき、すなわちケース329は、X86呼び出し
規約によって指定されるように、X86被呼側が大きな関数結果(たとえば16
バイトのstruct(ストラクト))がメモリ内に生成されることを示す。こ
の場合、『タペストリー』呼び出し規約によって指定されているように、遷移ハ
ンドラ320が関数結果をレジスタRV0〜RV3(レジスタR48〜R51;
表1参照)内にロードする(330)。下位ビットが「10」であるとき、すな
わちケース332は、関数結果がすでにレジスタ内(整数または浮動小数点)に
収められていることを示す。
【0185】 レジスタの戻り値が「10」、すなわちケース332においては、X86−『
タペストリー』遷移ハンドラ320が、2つのレジスタ−ベースの変換を行って
、関数結果の値をX86のホームからその『タペストリー』のホームに移動する
。第1に遷移ハンドラ320は、整数結果(EAXの最下位32ビット、EDX
の最上位32ビット)のX86表現をネイティブ規約の表現、すなわちRV0(
表1のR48)内の64ビットに変換する。第2に遷移ハンドラ320は、浮動
小数点スタックのトップにあるX86の80ビットの値を、ネイティブ規約によ
るRVDP(倍精度浮動小数点結果が返されるレジスタ;表1のR31)内の6
4ビット表現に変換(334)する。
【0186】 64ビットから80ビットの浮動小数点の変換は、プロセス・コンテキストを
そのソース・モードからそのディスティネーション・モードにおける意味論的に
等価の形式に変換するために使用できるビット表現における変更(1つのロケー
ションから別のロケーションに同一のビット・パターンをコピーすることに対立
するものとして)の一例である。たとえば、別の変換においては、ASCII(
アスキー)表現からEBCDICへ、もしくはその逆の文字列の変更、IBMの
基数16フォーマットの浮動小数点からDigital(ディジタル)固有の浮
動小数点フォーマットまたはIEEEフォーマットもしくは別の浮動小数点フォ
ーマットへの変更、単精度から倍精度への変更、ビッグ−エンディアンからリト
ル‐エンディアンもしくはその逆の整数の変更等が関係することも考えられる。
要求される変換のタイプは、インプリメントされているネイティブ・アーキテク
チャと非ネイティブ・アーキテクチャの特性に応じて異なる。
【0187】 ネイティブ『タペストリー』サブプログラムの呼び出しの間に保留されていた
X86スレッドを再開するケース370、すなわち「01」の場合は、遷移ハン
ドラ320が関連する保存済みコンテキストをロケートし、それが改ざんされて
いないことを確認し、それを再生する(割り込みの行なわれたネイティブ『タペ
ストリー』サブプログラム内の真のネイティブ・アドレスを含む)。ケース37
0のオペレーションについては、後述のセクションII.FおよびIII.Gに
おいて詳しく説明する。
【0188】 ケース−バイ−ケースの処理322、329、332、370の後、EPC内
のリターン・アドレスの下位2ビット<1:0>(エラーPC)は、「00」に
リセット(336)されて、ネイティブの調整不良のI−フェッチ誤りが回避さ
れる。ケース329および332の最後には、オリジナルの呼び出し時における
スタック深度に戻るため、レジスタESI(表1のR54)がSPにコピー(3
37)される。RFEインストラクション338は、割り込みの行なわれたプロ
グラムを再開し、この場合は、ISAクロッシングのコントロール移動のターゲ
ットにおいて再開する。
【0189】 D.『タペストリー』−X86遷移ハンドラ 図3iを参照すると、『タペストリー』−X86遷移ハンドラ340に入る条
件が2つあることが示されている:すなわち(1)ネイティブ『タペストリー』
発呼側がX86被呼側を呼び出すとき、および(2)ネイティブ『タペストリー
』被呼側がX86発呼側にリターンするとき、の2つである。いずれのケースに
おいても下位4ビットXD<3:0>(移動記述子レジスタ;表1のR15)が
『タペストリー』コードによってセットされて、マシン・コンテキストを『タペ
ストリー』呼び出し規約からX86呼び出し規約に変換するために採用するステ
ップが示される(341)。
【0190】 下位4ビットXD<03:00>が、『タペストリー』被呼側からX86発呼
側へのリターンを示している(341)とき、選択されるロジック342が、関
数結果の値をその『タペストリー』ホームからX86呼び出し規約によって指定
されるロケーションにコピーする。たとえば、XDは、RV0に返された64ビ
ットのスカラ整数の結果を、EAX内もしくはEDX:EAXレジスタ・ペア内
のスカラとして返すことを指定し、倍精度浮動小数点結果をRV0から80ビッ
トの拡張精度値としてX86浮動小数点スタックのトップにコピーすることを指
定し、あるいはRV0〜RV3(表1のR48〜R51)に返される大きな戻り
値をオリジナルのX86発呼側によって指定されたメモリ・ロケーションにコピ
ーし、RXAに保存することを指定する。スタックの深さは、GENERAL(
ジェネラル)エントリ・ポイント317によってRXA内にあらかじめ保存され
ているスタック・カットバック値を使用して復元される。
【0191】 『タペストリー』発呼側はレジスタ内に結果があることを期待しているが、X
86呼び出し規約の下に、同一プロトタイプを伴うX86関数がRVAメカニズ
ムを介して返す(戻り値を引数リスト内の隠された最初の引数によってポイント
されるメモリ・ロケーションに返す)ことを理解している場合には、『タペスト
リー』発呼側がXD<3:0>をセットして、以下に示すメカニズムをハンドラ
340に要求する。リターン時においてスタックの深さが復元されることを保証
するために、発呼側のスタック・ポインタがESIレジスタ(表1のR54)に
コピー(343)される。本質的に整列される32バイトのテンポラリがスタッ
ク上に割り当てられ(344)、そのテンポラリのアドレスがRVA(表1のR
31)値として使用される。X86−『タペストリー』遷移ハンドラ320に対
して、X86発呼側が『タペストリー』発呼側にリターンするとき、割り当て済
みバッファからの32バイトをRV0〜RV3(表1のR48〜R51)にロー
ドすることを要求するために、ビットLR<1:0>が「11」にセット(34
5)される。
【0192】 RVAメカニズムを使用しない呼び出しの場合(たとえば被呼側がスカラ整数
または浮動小数点値を返すか、値をまったく返さない場合)は、『タペストリー
』−X86遷移ハンドラ340によって、次に示すアクションが取られる。リタ
ーン時におけるスタックの深さが復元されることを保証するため、発呼側のスタ
ック・ポインタがESIレジスタ(表1のR54)にコピー(343)される。
ネイティブ発呼側へのリターン(332)時のX86−『タペストリー』遷移ハ
ンドラ320に対するフラグとしてビットLR<1:0>が「10」にセット(
346)される。呼び出しに関しては、ハンドラ340がXDの残部を解釈(3
47)して、引数リストを『タペストリー』呼び出し規約のレジスタからX86
規約のメモリ・ロケーションにコピーする。リターン・アドレス(LR)は、ス
タックにプッシュされる。
【0193】 『タペストリー』被呼側からX86発呼側へのリターンに関しては、X86の
浮動小数点スタックおよびコントロール・ワードが設定される。
【0194】 『タペストリー』−X86遷移ハンドラ340は、最後に、このほかのX86
実行環境のアスペクトを設定し(348)、たとえばエミュレータ316および
プロファイラ400に関するコンテキストをセットアップする。RFEインスト
ラクション349は、X86ルーチン内の移動先にコントロールを戻す。
【0195】 E.『タペストリー』オペレーティングシステムにおける割り込みまたは例外時
のISAクロッシング処理 図3jを図3aおよび3lとの関連から参照すると、ほとんどの割り込みおよ
び例外が『タペストリー』オペレーティング・システム312内の単一のハンド
ラ350を通過することが示されている。この時点において、多数のハウスキー
ピング関数が実行されて、『タペストリー』オペレーティング・システム312
、X86オペレーティング・システム306、これら2つのオペレーティング・
システムによってマネージされるプロセスならびにスレッド302、304、3
11、314、およびこれらのプロセスならびにスレッドの、一方の呼び出し規
約から他方のそれに渡すために変更が必要になることがあるデータ・コンフィグ
レーションが調整される。
【0196】 図3jには図示していないコードによって、多数の割り込みおよび例外が選別
されて処理される。これには、別の『タペストリー』プロセス内において生じた
すべての同期例外を含む、仮想X86 310の外側にあるものに向けられたす
べての割り込み、『タペストリー』オペレーティング・システム312自体のハ
ウスキーピング関数をドライブする割り込み(たとえばタイマ割り込み)、およ
び『タペストリー』ネイティブ・プロセス314(『タペストリー』オペレーテ
ィング・システム312のマネジメントの下におけるプロセス)によってもたら
される例外が含まれる。図3jの外側において扱われるプロセス指向の割り込み
には、非同期割り込み、必ずしも現在実行中のプロセスによって生じない割り込
み(たとえばクロス‐プロセッサ同期割り込み)が含まれる。これらの割り込み
は、『タペストリー』オペレーティング・システム312において従来の方法に
従って処理される:つまり、スレッドの完全な『タペストリー』コンテキストが
保存され、割り込みが処理され、さらに『タペストリー』オペレーティング・シ
ステム312が再開するスレッドを選択する。
【0197】 このように、図3jに示したコードに実行が到達するまでに、割り込みが仮想
X86 310内のものに向けられることが保証され(たとえば、X86スレッ
ド302、304をブロックしないディスク完了割り込み、もしくはX86スレ
ッド302、304によってもたらされるページ違反、浮動小数点例外、または
INTソフトウエア割り込みインストラクション)、かつおそらくはX86オペ
レーティング・システム306による扱いのために、この割り込みが『タペスト
リ』ハンドラから仮想X86 310に反映されなければならないことが保証さ
れる。
【0198】 X86オペレーティング・システム306がコントロールを獲得した後、X8
6オペレーティング・システム306がX86プロセッサ302、304の間に
おいてコンテキスト切り替えを行う可能性がある。このとき扱われるケースのク
ラスは2つ存在する。第1のクラスはケース351、353、および354を含
み、詳しくは後述する。このケースのクラスにおいては、割り込みの行なわれた
プロセスが、保存に関係するX86状態のみを有している。したがって、コンテ
キストとスレッドの間における結合を維持するタスクは、X86オペレーティン
グ・システム306に渡すことができる:このオペレーティング・システムのコ
ンテキスト切り替えメカニズムは、従来の方法に従って実行され、コンテキスト
とプロセスの間の結合を維持する。これに対して、プロセスが、保存およびカレ
ント・マシン・コンテキストとの関連付けが行われなければならない拡張コンテ
キスト(たとえばX86 OSによってマネージされるプロセスに代わって呼び
出される『タペストリー』ライブラリ内の拡張コンテキスト)を有している場合
には、より複雑なマネジメント・メカニズムを採用しなければならず、それにつ
いてはケース360との関連から後述する。
【0199】 割り込みの行なわれたスレッドが、EPCのISAビット194によって示さ
れるように、コンバータ136内において実行されている場合には、ケース35
1によってその例外が扱われる。割り込みの行なわれたスレッドが仮想X86内
のX86コードを完全に実行していることから、スレッドのコンテキストの保存
、割り込みのサービス、およびスレッドの選択および再開のタスクは、完全にX
86オペレーティング・システム306に委ねることができる。したがって、『
タペストリー』オペレーティング・システム306は、X86エミュレータ31
6内の「割り込み引き渡し」ルーチン(図3aの352)を呼び出し、その割り
込みを仮想X86 310に反映させる。X86オペレーティング・システム3
06は、この割り込みを受け取り、従来の方法に従ってそのサービスを行う。
【0200】 TAXiコード(X86プログラム内の「ホット・スポット」の翻訳済みネイ
ティブ・バージョン;前述の説明を参照されたい)が実行されている間に(EP
CのTAXi_Active(TAXiアクティブ)ビット198によって示さ
れる)、仮想X86 310内のものに対して割り込みが向けられた場合、その
割り込みはケース353によって扱われる。実行がX86インストラクションの
境界まで巻き戻される。X86インストラクションの境界においては、X86
310の外のすべての『タペストリー』拡張コンテキストが無効になり、意味論
的に等価の『タペストリー』状態とX86マシン状態の間における比較的単純な
対応を確立することができる。『タペストリー』実行は破棄される−−割り込み
が引き渡された後は、コンバータ136内において実行を再開することができる
。その後、割り込みが非同期外部割り込みであれば、TAXiが、再構成された
X86マシン状態を供給する仮想X86に対して適切なX86割り込みを引き渡
し、従来の方法に従ってX86オペレーティング・システム306によって割り
込みが扱われることになる。それに該当しない場合には、同期イベントによって
巻き戻しが誘導され、それによりTAXiがコンバータ136内において実行を
再開し、例外が再トリガされ、X86を示すEPC.ISA194とともに、そ
の例外がケース351によって扱われることになる。
【0201】 割り込みの行なわれたスレッドが、EPCのEM86ビットによって示される
ように、X86エミュレータ316内において実行されている場合には、その割
り込みがケース354によって扱われる。これは、たとえば、複雑なインストラ
クション(たとえばゲートを介した「遠い」呼び出し)のエミュレーション中も
しくは優先度の低い割り込みのサービス中のX86エミュレータ316に、優先
度の高いX86割り込みが割り込みを行った場合に生じることがある。この割り
込みは、エミュレータ316に引き渡され、それがこの割り込みを扱う。エミュ
レータ316は、再入コーディングを使用して記述されており、長い実行ルーチ
ンの間における再入自己割り込みが可能になっている。
【0202】 ケース360は、割り込みもしくは例外が仮想X86 310内のものに向け
られるケースをカバーし、それにおいてカレント・スレッド304は、X86オ
ペレーティング・システム306によってマネージされるX86スレッドを介し
、『タペストリー』コード308を現在実行中である。たとえば、X86プログ
ラムがネイティブ『タペストリー』ライブラリを呼び出していることが考えられ
る。このとき、この割り込みもしくは例外は、X86オペレーティング・システ
ム306によってサービスされることになるが、現在のスレッドは『タペストリ
ー』拡張コンテキストに依存している。そのようなケースにおいては、X86オ
ペレーティング・システム306がX86コンテキストのコンテキスト切り替え
を実行し、最終的にこのスレッドが再開されるとき、完全な『タペストリー』コ
ンテキストを復元しなければならない。しかしながらX86オペレーティング・
システム306は、『タペストリー』拡張コンテキストを保存するためのそれに
関する知識がまったくなく(かつ当然のことながら、そのアドレス指定能力もな
く)、ましてその復元のための知識については論外である。したがって、ケース
360は、カレント『タペストリー』コンテキストとX86スレッド304を関
連付けするステップを採用しており、その結果、X86オペレーティング・シス
テム306がそのスレッドの実行を再開したとき、完全なコンテキストが(図3
hのコード370によって)スレッド304に再結合される。
【0203】 ここで簡単に図3kを参照すると、システムの初期化の間に『タペストリー』
システムが、ケース360を扱うために、『タペストリー』拡張コンテキストの
保存用の「保存スロット」355として使用する特定量のページ不可能なストレ
ージを予約していることがわかる。この保存スロットとして予約されたメモリは
、仮想X86 310からアクセスすることができない。各保存スロット355
は、完全な『タペストリー』コンテキストのスナップショットを保持するための
スペース356を有している。各保存スロット355には、識別用の番号357
、保存スロットの内容がストアされた時刻を示すタイムスタンプ358が割り当
てられる。満/空フラグ359は、保存スロットの内容が、現在有効であるか否
かを示す。別の実施態様においては、タイムスタンプ358がゼロであることが
、このスロットが使用されていないことを示す。
【0204】 図3jに戻るが、ケース360は、以下に示すように扱われる。現在空いてい
る保存スロット355の中からスロットを割り当て(361)、そのスロットを
使用中としてマーク(359)する。空いている保存スロットがまったくない場
合には、タイムスタンプ358がもっとも古い保存スロットを、取り残されてい
るものと見なし、強制的にリサイクルにまわす。前述したように保存スロット3
55が、ページ不可能なストレージから割り当てられることから、続いて行なわ
れるその保存スロットに対するストアにページ違反が招かれることはない。割り
当てられた保存スロット355のコンテキスト・スペース356内に、X86コ
ンテキストならびに拡張コンテキストを含めた『タペストリー』コンテイスト全
体、およびEIP(例外インストラクション・ポインタ;割り込みの行なわれる
インストラクションのアドレス)が保存(362)される。EIP(X86 I
Pに割り込みが行なわれたアドレス)の下位2ビットが、X86−『タペストリ
ー』遷移ハンドラ320に対してケース370を通知する値「01」に上書きさ
れる(363)。これ以外の場合には、EIPがそのまま残され、その結果、割
り込みのあったポイントから実行が再開されることになる。(ここで、マシンが
ネイティブ『タペストリー』コードを実行中のときに限ってケース360に入っ
たことを想起されたい。つまり、ハンドラ350の開始時においては、EIPの
下位2ビットが値「00」を伴って到来し、したがって、それらを上書きしても
情報はまったく失われない。)64ビットのカレント・タイムスタンプが、EB
X:ECXペア(レジスタR49およびR51の下位半分;表1を参照されたい
)に、また冗長性を得るためにESI:EDI(レジスタR54およびR55の
下位半分)に、さらに保存スロット355のタイムスタンプ・メンバ(図3kの
358)にロード(364)される。割り当て済み保存スロット355の32ビ
ットの保存スロット番号357が、X86 EAXレジスタ(レジスタR48の
下位半分)に、また冗長性を得るためにEDXレジスタ(レジスタR50の下位
半分)にそれぞれロード(365)される。以上により『タペストリー』拡張コ
ンテキストがすべて保存スロット355にストアされ、この時点において『タペ
ストリー』オペレーティング・システム312の割り込みハンドラ350は、X
86エミュレータ316の「割り込み引き渡し」のエントリ・ポイント352に
コントロールを移す。X86オペレーティング・システム306が呼び出されて
この割り込みが処理される。
【0205】 割り込みの引き渡しは、仮想X86 310に関する割り込みの保留をもたら
す。この割り込みは、X86の割り込み受け入れ優先度が充分に高いとき、X8
6エミュレータ316によって受け付けられる。X86エミュレータ316は、
割り込みもしくは例外に対するX86ハードウエアの応答をエミュレートするこ
とによって、X86に対する割り込みもしくは例外の引き渡しを完了する:すな
わち、スタック上に例外フレームをプッシュし(ビット<1:0>がステップ3
63において変更され、EPCにストアされた、割り込みの行なわれたX86
IPを含む)、コントロールを適切なX86割り込みハンドラに向ける。
【0206】 この時点において実行が、通常はX86オペレーティング・システム306の
カーネル内の、例外によって向けられたISRにおいてX86のISR(割り込
みサービス・ルーチン)に入る。X86のISRは、既製の、まったく修正され
ていない従来ルーチンとすることができる。通常のX86のISRは、X86コ
ンテキスト(例外フレーム内にまだ存在しない部分−−通常はプロセスのレジス
タ、スレッドID等)をスタックに保存することから開始する。このISRは、
通常、割り込み条件の診断、そのサービス、および割り込みの解除を行う。IS
Rは、X86コンテキストに対する完全なアクセスを有する。X86オペレーテ
ィング・システム306が、X86プロセッサのコンテキストを調べ、あるいは
それに依存することはない:コンテキストは、「ブラック・ボックス」として扱
われ、全体として保存および再開が行なわれる。割り込みサービスの一部として
、割り込みの行なわれたスレッドが終了されるか、スリープされるか、あるいは
再開予定として選択される。いずれのケースにおいても、ISRがあるスレッド
を選択して再開し、そのスレッドのX86コンテキストを復元する。ISRは、
通常、X86のIRETインストラクションもしくはX86のJUMP(ジャン
プ)のいずれかを介して選択されたスレッドにコントロールを戻す。いずれの場
合においても、再開されるスレッドのアドレスは、再開予定のスレッドに割り込
みが行なわれたときにX86例外フレーム内にプッシュされたアドレスとなる。
X86オペレーティング・システム306によって再開されるスレッドは、割り
込みの行なわれたスレッド304もしくは別のX86スレッド302とすること
ができる。
【0207】 F.X86オペレーティング・システムからの『タペストリー』実行の再開 再度図3hを参照すると、最終的にX86オペレーティング・システム306
が、ケース360の割り込みの後に、割り込みのポイントにおいて、割り込みの
行なわれたスレッド304を再開する。X86オペレーティング・システム30
6は、このスレッドがX86インストラクションに従ってコーディングされてい
ることを前提としている。最初のインストラクションのフェッチは、『タペスト
リー』ページからとなる(割り込みの行なわれるスレッド304が『タペストリ
ー』ネイティブ・コードを実行しているときにのみ、例外がケース360に入っ
たことを想起されたい)。これによって、X86−『タペストリー』遷移例外を
生じ、それがX86−『タペストリー』遷移ハンドラ320に方向を変える。P
Cの下位2ビットが「01」にセット(図3jのステップ363)されているこ
とから、コントロールが「01」のケース370をディスパッチする(321)
【0208】 ステップ371においては、X86 EAXならびにEDXレジスタ内の保存
スロット番号がクロス‐チェックされ(図3jのステップ365において保存ス
ロット番号がこれらのレジスタ内にストアされたことを想起されたい)、EBX
:ECXにストア(362)されているタイムスタンプが、ESI:EDIスト
アされているタイムスタンプとクロス‐チェックされる。これらのクロス‐チェ
ックのいずれかに失敗し(371)、レジスタの内容が改ざんされていることが
示されると、エラー回復ルーチンが起動される(372)。このエラー・ルーチ
ンは、単に改ざんされたスレッドを切り捨てるもの、あるいはTAXiシステム
全体をシステム・ダウンさせるものとすることができ、いずれにするかはインプ
リメントする側のオプションとなる。タイムスタンプが有効性の確認に適合した
場合には、EBX:ECXレジスタ・ペアからのタイムスタンプが、例外ハンド
ラの、完全なネイティブ・コンテキストを復元する間に上書きされない64ビッ
トの一時レジスタ内に死蔵(373)される。レジスタEAXの内容は、『タペ
ストリー』コンテキストがストア(362)されている保存スロット355をロ
ケート(374)するための保存スロット番号として使用される。完全なネイテ
ィブ・コンテキストの復元は、すべてのX86レジスタの値の復元を含めて、ロ
ケートされた保存スロット355から行なわれる(375)。さらにこの復元(
375)は、下位2ビットEPC<1:0>をゼロに復元する。保存スロットの
タイムスタンプ358と、一時レジスタ内に死蔵(373)されているタイムス
タンプがクロス−チェック(376)される。これら2つのタイムスタンプが一
致せず、保存スロットが改ざんされていることが示されると、エラー回復ルーチ
ンが起動される(377)。この時点において保存スロットが空になり、満/空
フラグ359をクリアするか、あるいはそのタイムスタンプ358をゼロにセッ
トすることによって空としてマーク(378)される。RFEインストラクショ
ン338により、EPC.EIP値において、『タペストリー』コードの割り込
みの次のポイントから実行が再開される。
【0209】 再度図3kを参照すると、別の実施態様においては、保存スロット355がキ
ューのバリエーションの中に維持されることがわかる:満たされる予定の希望的
に空の保存スロットは、常にキューのヘッド379aから割り当てられ、空にさ
れる予定の完全な保存スロットは、キューの中央からリンクが解かれ、かつ保存
スロットは、詳細を後述するようにヘッド379aまたはテール379bからキ
ューに入れることができる。キュー・エントリのダブル−リンク・リストは、リ
ンク379cによって維持される。ステップ361においては、割り当てキュー
のヘッド379aから保存スロットが割り当てられる。ステップ365の後、満
たされた保存スロット355が、保存スロット・キューのテール379bにおい
てキューに入れられる。ステップ377では、空にされた保存スロット355が
、キューのヘッド379aにおいてキューに入れられる。
【0210】 この別の実施態様における保存スロット355に関するヘッド−アンド−テー
ル・キューイング・プロトコル361、379a、379b、379c375は
、次のような効果を有している。キューのソートが2つのパーティション内に維
持される。ヘッド379aに向かう部分は、解放されていることが既知のすべて
の保存スロット355を蓄積する。テール379bに向かう部分は、ビジーであ
ると考えられるすべてのスロットを、LRU(リースト−リーセントリー−ユー
ズド;もっとも参照されていない)順序に従って保持する。時間の経過とともに
、すべての取り残されたスロット(ビジーであると考えられるが、そのスレッド
が消失しているスロット)が2つのパーティションの境界に蓄積されることにな
るが、これは、取り残されたスロットのタイムスタンプより古いタイムスタンプ
を伴うスロットが再開されると、空のスロットがビジー・スロット用のテール部
分から取り除かれ、解放されたスロット用のヘッド部分に移動されることによる
。通常、真にビジーのスロットをビジー・スロット用のパーティションのテール
に集める一方、解放されたスロット用のパーティションのヘッドにおいて最後に
解放されたスロットを集中的にリサイクルすることによって割り当てが行なわれ
る。解放されていることが既知のすべての保存スロット355を使い切り、ビジ
ーの可能性が否定できない保存スロット355が上書きされるようになると、L
RU(リースト−リーセントリー−ユーズド;もっとも参照されていない)から
もっとも新しいものに向かってビジーの保存スロット355が選択される。
【0211】 別の実施態様においては、ネイティブ『タペストリー』プロセスによるX86
ライブラリ308への呼び出しが許容される。X86コード内において生じた例
外は、『タペストリー』オペレーティング・システム312によって処理され、
デシジョン・ポイントが図3jに示したコードの始まりに到達する前に、図3j
のハンドラ350内においてフィルタ・アウトされる。
【0212】 G.例 図3mを、図3a、3g、3h、3i、3l、および3nとの関連から参照し
、X86発呼側スレッド304による『タペストリー』被呼側ライブラリ308
に対する呼び出し、X86オペレーティング・システム306によってサービス
されるライブラリ内における割り込み388、別のX86スレッド302に対す
るコンテキスト切り替えならびに『タペストリー』被呼側308の再開、および
X86発呼側304へのリターンについて考える。
【0213】 『タペストリー』ライブラリ308は、32ビット・フラットのアドレス空間
380にマップされる(382)。X86発呼側スレッド304の立場から見る
と、これはプロセスのアドレス空間になる。『タペストリー』のマシンおよびオ
ペレーティング・システム312の立場から見ると、32ビットのアドレス空間
は、単なる、ページ・テーブル(図1aおよび1dの170)を介してマップさ
れた、その内容および意味が、完全にX86オペレーティング・システム306
のマネジメントに任せられたアドレス空間ということになる。
【0214】 当初、仮想X86 310上においてスレッド304が実行されている。スレ
ッド304は、X86のCALL(呼び出し)インストラクション383を実行
し、ライブラリ・サービスを求める。スレッド304用のバイナリ・コードは、
従来のX86コードであり、『タペストリー』システム用に特別にコンパイルさ
れたものではない。CALL(呼び出し)インストラクション383は、コント
ロールをライブラリ308のエントリ・ポイントに渡す(矢印(1))。これは
、このライブラリに関する『タペストリー』‐バイナリ置換のためのGENER
AL(ジェネラル)エントリ・ポイント(図3gの317)である。『タペスト
リー』ネイティブ・ライブラリ・ルーチン308に関するエントリのプリアンブ
ル317、319からの最初のインストラクションのフェッチは、X86 IS
Aから『タペストリー』ISAへの変更を導く。プロセッサ100は、遷移例外
384を取り、X86−『タペストリー』遷移ハンドラ(図3hの320)に方
向を変える(矢印(2))。すべての『タペストリー』インストラクションが「
0 mod 4」の境界に整列されていることから、割り込みアドレスの下位2
ビットは「00」である。したがって、遷移ハンドラ320は、「00」のケー
ス322をディスパッチし(321)、『タペストリー』コンテキスト内の実行
に関する前提条件を設定する(32ビット整列スタック等)。遷移ハンドラ32
0のエンドにおいては、GENERAL(ジェネラル)エントリ・ポイント31
7において実行を再開する(338;矢印(3))。GENERAL(ジェネラ
ル)エントリ・ポイント317は、X86プリアンブル(図3gの319)を実
行することによって開始し、それにおいてパラメータ・リストがP0〜P15の
パラメータ・レジスタにコピーされ、『タペストリー』ライブラリ・ルーチン3
08の実行が開始する。 ここで『タペストリー』ライブラリ・ルーチン308が割り込みもしくはX8
6コードに対するコール・バックを伴わずに動作し、完了すると仮定する。
【0215】 『タペストリー』ライブラリ・ルーチン308が完了(385)すると、ルー
チン308は、その戻り値の形式を記述する値をXDレジスタ(表1のR15)
にロードする。この値は、適宜RV0、RVFP、もしくはメモリ・ロケーショ
ン内の戻り値を示すことになる。ルーチン308は、リターン(矢印(4))の
ための『タペストリー』JALRインストラクションをもって完了する。X86
発呼側スレッド304から最初のインストラクションがフェッチされるとき、『
タペストリー』ISAからX86 ISAへの遷移386が認識され、コントロ
ールの方向が『タペストリー』−X86遷移ハンドラ(図3iの340)に変わ
る(矢印(5))。遷移ハンドラは、XD<03:00>の値に応じてリターン
・ケース342の1つにディスパッチ(341)し、それがその『タペストリー
』ホームからX86呼び出し規約の下におけるそのホームに戻り値をコピーする
。ハンドラ340が完了するとき、それから初期CALL(呼び出し)383に
続くスレッド304内のインストラクションにコントロールが戻される(図3i
のRFEインストラクション349;図3a、3lおよび3mの矢印(6))。
【0216】 図3nを、図3a、3h、3j、および3lとの関連から参照し、『タペスト
リー』ライブラリ・ルーチン308の実行の途中で外部非同期割り込み338が
発生した場合について考える。例を設定するため、ここでこの割り込みを、2番
目のより優先度の高いX86スレッド302をブロックしないディスク完了割り
込みとする。この割り込みは、『タペストリー』オペレーティング・システム3
12の割り込み/例外ハンドラ(図3jの350)に方向を変更する(矢印(7
))。割り込みハンドラ350は、ケース351、353、354に不適合とな
った後に、ケース360を選択する。完全なプロセッサ・コンテキストが保存ス
ロット355内に保存(362)され、下位2ビットEIP<01:00>が、
表3において説明したように「01」に上書きされ(363)保存スロット番号
ならびにタイムスタンプがX86レジスタにロード(364、365)される。
割り込みハンドラ360は、割り込みをX86エミュレータ316の割り込みエ
ントリ・ポイント352に割り込みを引き渡す(図3jの369)(矢印(8)
)。X86エミュレータ316は、X86オペレーティング・システム306に
コントロールを渡す(矢印(9))。X86オペレーティング・システム306
は、従来の方法に従って割り込みサービスを行う。しかしながら、スレッド30
4に関してX86オペレーティング・システム306がサービスするコンテキス
トは、タイムスタンプおよび保存スロット番号情報のコレクションであり、下位
2ビットを除いてEIPには着手されずに『タペストリー』例外ハンドラ360
のステップ363によって、表3に適合するように作られる。このパラグラフの
最初に仮定したように、X86オペレーティング・システム306は、スレッド
302を選択して再開する(矢印(10))。
【0217】 X86スレッド302は、しばらく実行を続けた後、たとえばタイム・スライ
スの超過によって、最終的にコントロールをX86オペレーティング・システム
306に戻すと(矢印(11))、新しいディスク要求等を発行する。ここで、
X86オペレーティング・システムのスケジューラがスレッド304の再開を選
択したと仮定する。X86オペレーティング・システム306によって復元され
るコンテキストは、割り込みハンドラ360によって作られたタイムスタンプお
よび保存スロット番号の「コンテキスト」である。復元されるこのコンテキスト
のEIPは、下位2ビットに「01」を伴う、割り込み388の行なわれたイン
ストラクションに続くインストラクションをポイントする。X86オペレーティ
ング・システム306は、IRETインストラクションを実行して、この復元さ
れたコンテキストにおいて実行を再開する(矢印(12))。このインストラク
ションのフェッチは、X86オペレーティング・システム306のX86 IS
Aから『タペストリー』ライブラリ308の『タペストリー』 ISAへの遷移
389を認識し、X86−『タペストリー』遷移ハンドラ320(図3h)に方
向を変更する(矢印(13))。遷移ハンドラ320は、EIPアドレスの下位
2ビットに応答してケース370にディスパッチ(321)する。ケース370
のコードは、X86レジスタ内を探して、再開するプロセスに対応する保存スロ
ット355のアドレスを見つけ出す。X86レジスタの内容および見つけ出され
た保存スロット355は、冗長性のためにストアされているタイムスタンプおよ
び保存スロット番号との相互比較によって有効性が確認される(371、374
、376)。保存スロット355の内容は、完全な『タペストリー』プロセッサ
・コンテキストを復元する(375)。遷移ハンドラ320は、オリジナルの外
部割り込み388のポイントにおいて、『タペストリー』ライブラリ・ルーチン
308を再開する(378)(矢印(14))。
【0218】 図3oを、図3a、3h、3j、および3lとの関連から参照し、『タペスト
リー』ネイティブ発呼側391からX86被呼側392に対する呼び出しの場合
について考える。(図3bを参照した議論において、このシナリオに関して、い
ずれも特別なコーディングがなされていないと述べたことを想起されたい−−X
86被呼側は、従来のX86コンパイラによって生成され、『タペストリー』発
呼側391は、被呼側がX86被呼側392であるか、『タペストリー』被呼側
であるかによらず、良好な機能が等しく得られるようにコーディングされている
。)発呼側391は、XDレジスタ(表1のR15)を、その引数リストの『タ
ペストリー』レジスタ(表1のR32〜R47)内のレイアウトを記述する値に
セットする(393)。その後、発呼側391は、JALRインストラクション
394を発行して被呼側392を呼び出す。被呼側392の最初のインストラク
ションに到達すると、プロセッサ100は、『タペストリー』−X86遷移39
5を認識する。実行の方向が『タペストリー』−X86例外ハンドラ(図3iの
340)に変わる(矢印(15))。下位4ビットXD<3:0>は、インスト
ラクションによってセット(393)されてXD記述子の基本分類を含んでおり
、これらの4ビットに従って実行が、通常はコード・セグメント343〜345
、またはセグメント343、346、347にディスパッチされる(341)。
ディスパッチ先のコード・セグメントは、XDレジスタの残部によって示される
ように、実際のパラメータを『タペストリー』ホームからそのX86ホームに移
動(347)する。ハンドラ340は、表3に示すように、発呼側391がリタ
ーン結果を期待しているロケーションを示すように、リターンPCの下位2ビッ
トLR<1:0>を「10」もしくは「11」に上書きする(345、346)
。ハンドラ340は、被呼側392の最初のインストラクションにリターンし(
矢印(16))、従来の方法に従ってそれが実行される。被呼側392が完了す
ると、X86 RETインストラクションがコントロールを発呼側391に返す
(矢印(17))。発呼側391からの最初のインストラクションのフェッチは
、遷移例外396をトリガすることになる。この例外は、コントロールの方向を
X86−『タペストリー』ハンドラ320に変える(矢印(18))。ハンドラ
320は、LRの下位2ビットに基づいて関数の戻り値の再フォーマットおよび
/または再配置(330、333、334)を行う。ハンドラが完了すると(3
36、338)、コントロールが、発呼側391のオリジナルの呼び出し394
の続きに戻る(矢印(19))。
【0219】 再度図3aおよび3lを参照するが、これにおいては複雑性がクロスISA呼
び出しのケースに制限されている。クロスISA呼び出しの取り扱いにおける複
雑性は、トランスペアレントなクロスISA呼び出しが、これまでにこの分野に
おいて知られていないことから許容範囲である。発呼側、被呼側、およびオペレ
ーティング・システムがすべて共通のISAを共有している場合においては、遷
移例外がまったく発生しない。たとえば、『タペストリー』プロセス314が同
一の『タペストリー』ライブラリ・ルーチン308を呼び出すとき(矢印(20
))、ルーチン308はNATIVE(ネイティブ)エントリ・ポイント318
を通って入るか、GENERAL(ジェネラル)エントリ・ポイント317を介
して『タペストリー』ショート・パスを獲得する。(ここで、ルーチン308が
『タペストリー』プロセス314のアドレス空間内に個別にマップ(397)さ
れなければならないことに注意が必要である−−『タペストリー』プロセス31
4が『タペストリー』オペレーティング・システム312のマネジメントの下に
置かれ、X86プロセスのアドレス空間380が完全にX86オペレーティング
・システム306によってマネージされ、完全に『タペストリー』オペレーティ
ング・システム312の視野の外となっていたことを想起されたい。)同一の外
部割り込み388が発生(矢印(21))した場合、その割り込みは、『タペス
トリー』オペレーティング・システム312(図3jのコードの外)において扱
うことが可能であり、コントロールは、ハンドラの遷移を通じたトレースを必要
とすることなく、割り込みに続くインストラクションにおいて直接再開する(矢
印(22))。『タペストリー』ライブラリ・ルーチン308が完了すると、従
来の方法に従ってコントロールが発呼側に返る(矢印(23))。唯一のオーバ
ーヘッドは、単一のインストラクション393であり、被呼側にX86コードが
用いられている場合にXDの値をセットする。
【0220】 H.代替実施例 別の実施態様においては、メモリの「復元ターゲット・ページ」がX86アド
レス空間のオペレーティング・システム領域内に予約される。PFAT 172
において、復元ターゲット・ページのためのISAビット180がセットされ、
そのページに関するインストラクションが『タペストリー』インストラクション
・セットの下に解釈されるべきであることが示される。この復元ターゲット・ペ
ージは、ページ不可能に設定される。図3jのステップ363において、EIP
値が、復元ターゲット・ページ内をポイントするX86アドレスに置換され、つ
まり通常、保存スロットの番号をストアしているこの置換EIPのバイト・オフ
セット・ビットに置換される。別の実施態様においては、EIPが復元ターゲッ
ト・ページをポイントするべくセットされ、保存スロット番号がX86レジスタ
の1つ、たとえばEAXにストアされる。いずれの場合においても、X86オペ
レーティング・システム306がスレッドを再開するとき、復元ターゲット・ペ
ージが、そのPFATエントリおよびI−TLBエントリ内に『タペストリー』
ISAビット・セットを有していることから、最初のインストラクションのフェ
ッチによって、復元ターゲット・ページからの最初の実際のインストラクション
が実際に実行される前に、X86−『タペストリー』遷移例外がトリガされる。
X86−『タペストリー』遷移ハンドラ320は、フェッチしたインストラクシ
ョンのアドレスを近似することによって開始する。復元ターゲット・ページに関
するアドレスは、復元する拡張コンテキストが存在することを知らせる。保存ス
ロット番号は、インストラクション・アドレスから抽出される(ここで、保存ス
ロット番号が例外のエントリ時にEPCもしくはEAX内にコーディングされ、
そのいずれもがスレッドの再開のプロセスにおいてX86オペレーティング・シ
ステム306によって復元されたことを想起されたい)。プロセッサ・コンテキ
ストは、保存スロットから、スレッドに対するオリジナルの割り込みがあったE
PC.EIP値を含めて復元される。別の実施態様においては、(X86コンテ
キストを含まずに)拡張コンテキストのみが保存スロットから復元され、その結
果、オペレーティング・システムによってもたらされたX86コンテキストに対
する変更があるときには、そのすべてがそのまま残される。X86−『タペスト
リー』遷移ハンドラ320は、RFE 338を実行して割り込みの行なわれた
『タペストリー』コード内において実行を再開する。
【0221】 ここで、復元ターゲット・ページからのインストラクションが実際に実行され
ることがない点に注意する必要がある;そのアドレスは、X86−『タペストリ
ー』遷移ハンドラ320に対する単なるフラグである。唯一必要なことは、アド
レスをX86オペレーティング・システム306およびそのスレッド・スケジュ
ーラに渡すことができるように、復元ターゲット・ページのアドレスがX86ア
ドレス空間内において表現できることである。別の実施態様においては、復元タ
ーゲット・ページからのフェッチが別の例外−−すなわち非整列インストラクシ
ョン違反、またはアクセス保護違反を生じることがある。しかしながら、生じる
違反がX86アーキテクチャ内に定義されていない違反となることは望ましいこ
とであり、その結果、いずれのユーザ・プログラムもその違反に関するハンドラ
を登録することができない。
【0222】 この別の実施態様においては、X86−『タペストリー』遷移ハンドラ320
の「01」ケース370が、X86スレッドの特権モードを保存し、特権リング
「0」においてX86発呼側が動作している場合であっても特権レベルをユーザ
にリセットすることができる。特権モードは、システムの保全性を保護するため
に変更され、『タペストリー』の「トロイの木馬」がX86セキュリティ・チェ
ックをくぐり抜けることを不可能にする。
【0223】 別の実施態様においては、保存スロットとX86スレッドの間の対応が、X8
6オペレーティング・システム306へのスレッドID呼び出しを使用すること
によって維持される。各保存スロット355は、そのスレッドが持続する間にわ
たってWindows(登録商標)(ウインドウズ(登録商標))スレッド番号 と関連付けすることができる。ガーベジ・コレクタを使用すれば、かなり以前に 満たされ、現在は見捨てられていると見られる保存スロットを認識することがで きる。ガーベジ・コレクタは、システムの調整可能周期の後に、あるいはそれが 満たされた時間的古さを基礎として、そのスレッドがX86オペレーティング・ システム306によって終了されることを仮定し、保存スロットを再利用する。
【0224】 さらに別の実施態様においては、X86コンバータ・モードの間に『タペスト
リー』が例外を取ると、拡張コンテキストのスナップショットも行なわれる。オ
ペレーティング・システムがX86 TSS(タスク−ステート・セグメント)
を使用してマルチ−タスキングをインプリメントしている場合には、拡張コンテ
キストのPSW部分(ISAビット194、XP/呼び出し規約196、および
セマンティック・クラス206;後述するセクションIVを参照されたい)をX
86 TSSの使用されていない部分にスナップショットすることができる。そ
れ以外の場合には、関連するデータの量、すなわち5ビット(ISAビット19
4、XP/呼び出し規約196、およびセマンティック・クラス206)は、充
分に小さく、EFLAGSのトップにある使用されていない10ビットに死蔵す
ることができる。一部の実施態様においては、X86空間内の例外スタックにプ
ッシュされる追加のワードとして拡張コンテキストをプッシュすることができる
【0225】 さらに別の実施態様においては、X86に対してアクセス不能な『タペストリ
ー』空間内のメモリに拡張コンテキストをストアすることができる。ハッシュ・
テーブル(またはそれと等価な結合ソフトウエア構造)が特定のX86例外フレ
ームと、それに関連付けされた拡張『タペストリー』コンテキストのスナップシ
ョットをリンクし、その結果、例外の出口もしくはタスクの再スケジューリング
に際して、プロセッサが特定のX86コンテキストをEPC(エラーPCおよび
プログラム・ステータス・ワード)に再ロードし、続いてそれがRFEインスト
ラクションによってPSWに再ロードされるとき(またはX86 POPFイン
ストラクションがエミュレートされるとき)、拡張『タペストリー』コンテキス
トをロケートし、EPC内に配置することが可能になる。
【0226】 IV.あるISAから他方への遷移を管理するための代替方法 A.プログラム・テキストのための呼び出し規約(CC)の指標 セクションIV.AおよびIV.Bの説明は、ともにサブプログラムとの間に
おけるデータの授受に関する規約を決定するために使用される代替メカニズムに
関するものであり、それによりサブプログラムの引数または関数の戻り値がスト
アされるロケーションが、コントロール移動イベントの前に決定され、例外ハン
ドラは、コントロール・フロー・イベントの後に実行されることになるコードに
よって期待されているロケーションにデータを移動することができる。
【0227】 X86 CISCアーキテクチャの代替『タペストリー』エミュレーションに
おいて、ネイティブ・コードの大半は、2つの異なる呼び出し規約の一方を順守
する(前述のセクションIII.Bを参照されたい):一方は、ネイティブ『タ
ペストリー』コードからネイティブ『タペストリー』コードへの呼び出しのため
のRISCレジスタ‐ベースの呼び出し規約であり、他方は、エミュレートされ
たCISC呼び出し規約に類似するものとして示される疑似CISCメモリ‐ベ
ースの規約であり、呼び出しがもっとも頻繁に一方のISAから他方にクロスす
るであろうと考えられるときに使用するための規約である。セクションIV.A
およびIV.Bにおいて説明している特徴は、マシン・コンテキストに関する充
分な情報を提供し、その結果、一方のISAから他方へのシームレスな遷移をも
たらすことができる。
【0228】 再度図3aを参照するが、ネイティブ『タペストリー』インストラクション・
セットにおいてコーディングされたプログラムは、サブプログラムを呼び出すと
き、レジスタ−ベースのRISC呼び出し規約、もしくはX86呼び出し規約に
匹敵するメモリ−ベースの呼び出し規約のいずれかを使用することができる。X
86コンバータ・モードにおいては、すべてのサブプログラム呼び出しがメモリ
ースタック−ベースの呼び出し規約を使用する。いずれのモードにおいても、デ
ータが、特定メモリ内のそのロケーションもしくはレジスタ・ロケーションによ
りソースからディスティネーションに渡る内部ジャンプによって、コントロール
が移動されることがある。
【0229】 ビット200によってプログラム・テキスト領域176に注釈が付され、その
領域のコードによって使用される呼び出し規約が示される。実行のフローが、一
方の呼び出し規約を順守しているソースから、他方を順守しているディスティネ
ーションに向かうと、呼び出し規約ビット200の相違が遷移例外をトリガする
。遷移例外ハンドラは、このサブプログラムの引数をソースの規約によって確立
された周知のロケーションから、ディスティネーションによって期待される周知
のロケーションにコピーする。これにより発呼側および被呼側のサブプログラム
を、他方によって使用されている呼び出し規約をまったく頼ることなくコンパイ
ルすることが可能になり、同質でないISAのバイナリならびにライブラリの環
境におけるよりシームレスなシステム・オペレーションが可能になる。
【0230】 図1dおよび2aを参照すると、前述のセクションIIにおいて説明したよう
に、ISAビット180、182と類似の態様において、呼び出し規約ビット2
00がPFATエントリ174およびI−TLB 116に、PSW 190の
呼び出し規約ビット196内にある以前のインストラクションの呼び出し規約の
記録とともにストアされる;当該セクションにおいて説明した別の実施態様は、
これにおいても同様に適用することができる。(呼び出し規約プロパティ200
は『タペストリー』コードのページに関してのみ意味を有し、かつXP書き込み
プロテクト・プロパティ184、186(前述のセクションI.Fにおいて説明
済み)がX86コードのページに関してのみ使用されることから、所定のページ
に関する2つのプロパティは、XP書き込みプロテクト・ビット184、186
に重ねて、単一の物理ビット内にエンコードすることが可能である−−この単一
ビットは、PSW.ISAビット194に応じて異なる意味を有する。)
【0231】 図2bおよび2cを参照すると、実行が一方の呼び出し規約200の領域から
他方の呼び出し規約200の領域にクロスするとき(列204)、マシンが例外
を取る。遷移の方向(『タペストリー』−X86またはX86−『タペストリー
』)およびその遷移を誘発したインストラクションのクラス分け(後述するセク
ションIV.Bにおいて説明する表4に示す)に基づいて、この例外が、その方
向ならびにクラス分けに対応する例外ハンドラに向けられる。図2cの8つの行
242〜256には、8つの呼び出し規約遷移例外ベクトルが示されている。(
呼び出し規約遷移に関する8つの例外ベクトルは、前述のセクションIIにおい
て論じたISAに関する2つの例外ベクトルと明確に区別される。)例外の方向
の変更は、充分に具体的であり、特定のハンドラへの到達時に、古いマシン・コ
ンテキストから、新しい環境における実行のための前提条件を満たすマシン・コ
ンテキストへのマッピングの概略を決定することができる。例外ハンドラは、一
方のロケーションから他方にデータをコピーすることによってこのマッピングを
インプリメントする。例外ハンドラは、ソース・インストラクションとディステ
ィネーション・インストラクションの間に介挿された例外の存在する間にわたっ
て動作し、マシン・コンテキストを、ソースの最後のインストラクションによっ
て生成されたコンテキスト(たとえばCALL(呼び出し)の前に設定された引
数を渡すエリア)をディスティネーションの最初のインストラクションによって
期待されているコンテキスト(たとえば、その引数の使用を開始するコードが期
待される)に変換する。 遷移例外のプロセス、および個々の例外のケースの扱いに使用される情報につ
いて、次のセクションIV.Bに説明する。
【0232】 B.制御転送セマンティクスの記録および呼び出し規約の調停 単に遷移の方向(X86呼び出し規約から『タペストリー』呼び出し規約もし
くはその逆)を明らかにするだけでは、データ・ストレージ規約が一致しない場
合に遷移例外に応答して取らなければならないアクションを決定する上で充分で
はない。このセクションにおいては、遷移例外時に適切なアクションを取ること
ができるようにマシン・コンテキストを解釈するために使用される残りのテクニ
ックについて説明する。概略において、各コントロール移動インストラクション
が実行されるとき、そのインストラクションの意図もしくはセマンティック・ク
ラスがPSW(プログラム・ステータス・ワード)190のSC(セマンティッ
ク・クラス)フィールド206(PSW.SC)内に記録される。遷移例外に際
しては、この情報が使用されて、古い状態から新しい前提条件への遷移をもたら
すために、一方のロケーションから他方にデータをコピーするべくプログラムさ
れた例外ハンドラに方向が変えられる。
【0233】
【表4】
【0234】 図1eならびに2cおよび表4を参照すると、『タペストリー』ISAおよび
X86 ISAのいずれのコントロール‐フロー・インストラクションについて
も、5つのセマンティック・クラス:すなわち、JUMP(ジャンプ)、CAL
L(呼び出し)、RETURN−NO−FP(倍精度浮動小数点結果を返さない
サブプログラムからのリターン)、RETURN−FP(明確に倍精度浮動小数
点結果を返すサブプログラムからのリターン;『タペストリー』ネイティブ被呼
側からのリターンのコンテキスト内においてのみ使用される)、およびRETU
RN−MAYBE−FP(64ビット倍精度もしくは80ビット拡張精度倍精度
浮動小数点結果を返すと考えられるか、明確にそれを返すサブプログラムからの
リターン;X86被呼側からのリターンのコンテキスト内においてのみ使用され
る)に分類される。各ISAモードに関して可能性のある遷移が4つであること
から、2つのビット206(PSW.ISAビット194と組み合わされる)は
、列挙した5つの状態を識別する上で充分である。
【0235】 このセマンティック・クラス分類のほとんどは、インストラクションのオペコ
ードによって静的である。一部のインストラクション、たとえばX86のJUM
P(ジャンプ)およびCALL(呼び出し)インストラクションは、意味論的に
明確である。たとえばX86のRETは、CALL(呼び出し)もしくは内部コ
ントロール・フローのJUMP(ジャンプ)と誤ることがあり得ない。このよう
に、『タペストリー』システムがX86バイナリに関するソース・コードを調べ
なくても、X86インストラクションがそのオペコードに、インストラクション
のセマンティック・クラスを決定するための充分な情報を含んでいる。
【0236】 表4を参照するが、セマンティック・クラス分類の一部は、コンパイラによっ
てインストラクション内にエンコーディングされる。たとえば、『タペストリー
』のJALRインストラクション(インストラクションのソース・レジスタによ
って指定されたロケーションに対する間接ジャンプ、およびディスティネーショ
ン・レジスタ内へのリンクIP(インストラクション・ポインタ)のストア)は
、いくつかの役割、たとえばサブプログラムからのリターン(リンクIPが読み
出しゼロ・レジスタ内にストアされる)、単一ルーチン内においてFORTRA
Nによって割り当てられるgo−to(飛び越し)、あるいはサブプログラム呼
び出し等を提供する。JALRインストラクションのあいまい性を解決するため
に、コンパイラによって、インストラクションの実行に使用されないビットにセ
マンティック・クラス・コードの1つが含められ、インストラクションの実行時
に、そのコードがイミディエートとして当該インストラクションからPSW.S
C 206にコピーされる。ソース・コードからコンパイルされる『タペストリ
ー』ネイティブ・バイナリの場合には、コンパイルされるプログラムのソース・
コードから収集されるセマンティック情報の補助によってもJALRインストラ
クションのこのイミディエート・フィールドが満たされる。X86から『タペス
トリー』に翻訳されたバイナリの場合には、X86インストラクションのセマン
ティック・クラスが使用されて対応する『タペストリー』インストラクションの
セマンティック・クラスが決定される。このように、『タペストリー』コンパイ
ラは、プログラムを解析して各種のアドレスに対するブランチ(たとえば、FO
RTRANによって割り当てもしくは演算されるgo−to(飛び越し)、ある
いはジャンプ・テーブルを介したCASE(ケース)ブランチ)に関するJAL
Rとファンクション・リターンに関するJALRの区別(さらに、浮動小数点と
非浮動小数点の場合の区別)、サブプログラム呼び出しに関するJALRとの区
別を行い、明示的に2ビットのセマンティック・クラス・コードをJALRイン
ストラクション内に含ませる。
【0237】 セマンティック・クラスの一部は、マシン・コンテキストの実行時の解析によ
って実行される。X86のRET(サブプログラムからのリターン)インストラ
クションは、2つのセマンティック・コンテキスト・クラス、すなわちRETU
RN−NO−FP(サブプログラムからのリターン;明示的に倍精度浮動小数点
結果を返さない)およびRETURN−MAYBE−FP(可能性として、ある
いは明確に浮動小数点結果を返すリターン)に分類される。X86呼び出し規約
は、浮動小数点の関数結果が浮動小数点スタックのトップに返されること、およ
び整数の関数結果がレジスタEAX内に返されることを指定している。いずれの
場合のインストラクション・コードも同一であり、コンバータ136は、X86
の浮動小数点スタックのトップに基づいてオン‐ザ‐フライでRETインストラ
クションを分類する。このスタックのトップが空にマークされている浮動小数点
レジスタをポイントしている場合には、X86呼び出し規約から、RETが浮動
小数点値を返していないことが明確に保証され、セマンティック・クラスがRE
TURN−NO−FPにセットされる。しかしながら、このスタックのトップが
満たされたロケーションをポイントしている場合には、整数の戻り値があること
もあり、セマンティック・コンテキストがRETURN−MAYBE−FPにセ
ットされて、このあいまい性が示される。
【0238】 例外が生じると、PSW 190(ISAビット194、呼び出し規約ビット
196、およびSCフィールド206を含む)が例外PSW、すなわちマシンの
コントロール・レジスタ内にスナップショットされる。例外ハンドラは、例外P
SW内のPSWビットの吟味および修正を行うことができる。例外ハンドラが完
了するとき、RFE(例外からのリターン)インストラクションが、スナップシ
ョット済みの例外PSWをPSW 190内に復元し、マシンの例外が再開する
。このように、PSW.SC 206は、例外ハンドラの実行間に更新される場
合であっても、例外を通じて保存される(例外ハンドラが例外PSWを修正する
ことによって意図的にそれを修正する場合を除く)。
【0239】 図2bおよび2cは、呼び出し規約の遷移がどのように例外ハンドラに向けら
れるかを示している。呼び出し規約の遷移例外が生じると、5つのデータが使用
されて適切なハンドラに方向が変えられ、ハンドラが取るべきアクションが決定
される:すなわち、古いISA 180、182、新しいISA 180、18
2、古い呼び出し規約196、新しい呼び出し規約196、およびPSW.SC
206である。図2bにおいて、最初の列204は、最初の4つに基づく遷移
、すなわちISAおよびCCビットの遷移の性質を示す。たとえば、第3行21
6は、ネイティブ『タペストリー』のレジスタ‐ベースの呼び出し規約を使用す
るネイティブISA(ISAおよびCCビットの値「00」によって表される)
からX86呼び出し規約の使用を必要とするX86コード(X86 ISAにつ
いては「1」、CCビットについては「無関係」を示す値「x」とする値「1x
」によって表される)への遷移を論じている。表4は、いくつかの異なる状況に
よって同一の例外ハンドラに方向が変えられることを示している。ここで、たと
えば行214および216が、同一グループのハンドラに方向を変えることに注
意されたい。これらの符合は、X86規約がネイティブ『タペストリー』インス
トラクションによって順守されているか、X86インストラクションによって順
守されているかによらず、ネイティブ『タペストリー』呼び出し規約からX86
呼び出し規約への変換、もしくはその逆の変換に必要となるメモリ操作が概略で
同一になることから生じる。
【0240】 図2cは、セマンティック・クラスに基づいて適正な例外ハンドラにマシンの
方向を変更する方法を示している。たとえば行242、244、246、および
248は、コントロール−フロー・インストラクションの4つの可能性のあるセ
マンティック・クラスに基づいて、00=>01および00=>1x(ネイティ
ブ呼び出し規約を使用するネイティブ『タペストリー』コードからX86規約を
使用するX86コードへ)のISAおよびCCの遷移に関する4つの可能性のあ
るハンドラを開始する。行250、252、254、および256は、01=>
00および1x=>00の遷移に関する4つの可能性のあるハンドラを、これら
の遷移を生じることがある4つのインストラクションのセマンティック・クラス
に基づいて開始する。
【0241】 図2bを参照すると、1つのサブプログラムから別のサブプログラムにクロス
するとき、ソースおよびディスティネーションが、引数を渡すために使用する規
約に関して一致していれば、それらがISAおよび呼び出し規約に関して一致(
行212、220、228、230)することから、もしくはISAに関して不
一致であっても呼び出し規約に関して一致(行222、226)することから、
あるいは単にソースおよびディスティネーションの実行環境において同一のスト
レージ・ロケーションにストアされることによってデータが渡される(表244
、252)ことから、仲裁が必要ないことがわかる。たとえば、X86呼び出し
規約を使用するX86 ISAからX86呼び出し規約を使用する『タペストリ
ー』ネイティブISAに、あるいはその逆のクロスを行う場合、表1に示し、前
述のセクションI.Bにおいて論じた固定マッピングを使用する、X86仮想リ
ソースと『タペストリー』物理リソースの間の固定マッピングを使用して、実際
に一方のハードウエア・エレメントを他方に移動することなく、一方の環境から
他方の環境にデータが渡される。
【0242】 たとえば、行222に示したように、疑似X86呼び出し規約に基づいてメモ
リを使用する『タペストリー』ネイティブ・コードの発呼側が、X86コードの
ルーチンを呼び出す場合(もしくはその逆;行226)には、引数を移動する必
要がない;インストラクションのデコード・モードを変更するだけでよい。
【0243】 これに対し、呼び出し規約200が一致せず、一方の呼び出し規約の下に引数
が渡され、他方の規約の下に受け取られるとき、呼び出し規約例外ハンドラが仲
裁を行い、引数データをソース規約によって使用される周知のロケーションから
、ディスティネーション規約によって期待される周知のロケーションに移動する
。たとえば、X86発呼側からネイティブ『タペストリー』呼び出し規約を使用
するネイティブ『タペストリー』コードの被呼側へ(行224、250)、ある
いはそれと等価になるX86呼び出し規約を使用する『タペストリー』コードか
らネイティブ規約を使用するネイティブ『タペストリー』への(行218、25
0)サブプログラムCALL(呼び出し)は、メモリ・スタック‐ベースの発呼
側規約によって指定されるロケーションからレジスタ‐ベースの被呼側規約によ
って指定されるロケーションに引数を移動しなければならない。
【0244】 図2bおよび2cの行241、242は、発呼側がレジスタ‐ベースのネイテ
ィブ呼び出し規約を使用する『タペストリー』ネイティブ・コードであり、被呼
側も『タペストリー』ネイティブ・コードであるが疑似X86呼び出し規約を使
用する場合のサブプログラム呼び出しについて示している。(同様に行216に
示すように、発呼側がレジスタ−ベースのネイティブ呼び出し規約を使用する『
タペストリー』ネイティブ・コードであり、被呼側がX86ISAでコーディン
グされている場合には、同じ例外ハンドラ242が呼び出され、同じ処理が行わ
れる。)例外ハンドラは、サブプログラム引数を、ネイティブ規約の下に引数が
渡されたそれらのレジスタ・ポジションから、X86呼び出し規約の下に期待さ
れるメモリ・スタック・ポジションにプッシュする。引数が、サイズにおいて変
化するタイプである場合には、引数バッファのX86スタック・レイアウトは、
かなり複雑になり、『タペストリー』レジスタ内の引数からその引数バッファへ
のマッピングも、それに応じて複雑になる。引数のコピーは、記述子、すなわち
コンパイラによって発呼側サイトの注釈用に生成された引数によって指定される
。これは、「サイズ可変引数」ルーチンの場合に特に重要となる。ネイティブ発
呼側が『タペストリー』コンパイラによって生成されていることから、コンパイ
ラは、遷移例外によって実行されるデータ・コピーを完全に記述する記述子を生
成することができる。その後データは、被呼側によって期待されるロケーション
に収められ、ディスティネーションISAモードにおいて例外が再開される。
【0245】 X86被呼側(または疑似X86呼び出し規約を使用する『タペストリー』発
呼側)の場合は、発呼側によって設定された引数ブロックのデータが『タペスト
リー』被呼側によって期待されているロケーションにコピーされる。たとえば、
リンケージ・リターン・アドレスがスタックのトップからr6(『タペストリー
』リンケージ・レジスタ;この目的からLRのエイリアス名が与えられている)
にコピーされる。このスタックの続く数バイトが、迅速なアクセスのために『タ
ペストリー』レジスタ内にコピーされる。呼び出し記述子(呼び出し引数のフォ
ーマットを記述するデータ)がレジスタr51(エイリアスCD)内に作られ、
その引数がX86規約の下に渡されることを示すべくセットされる。ヌル戻り値
記述子が、スタック上に作られる;このリターン記述子は、その情報が既知にな
ると、戻り値のフォーマットを指定するように修正される。
【0246】 被呼側関数からのリターン時に、発呼側ならびに被呼側の呼び出し規約200
およびリターン・インストラクションのセマンティック・クラス206は、関数
の戻り値を、被呼側によって期待されている適正なロケーションに収めるために
必要なアクションを決定する。表1に示されるように、X86呼び出し規約は、
倍精度浮動小数点関数戻り値を、浮動小数点スタックのトップによって示される
浮動小数点レジスタ内に返す。X86呼び出し規約は、32ビットもしくはそれ
以下のその他のスカラをレジスタEAXに、33〜64ビットの結果をEAX:
EDXレジスタ・ペアにそれぞれ返し、65ビットもしくはそれ以上の関数戻り
値については、被呼側の引数リストにあらかじめ追加された引数によってポイン
トされるメモリ・ロケーション内に返される。ネイティブ『タペストリー』呼び
出し規約は、倍精度浮動小数点値をr31(この目的から、RVDPのエイリア
ス名が与えられている)に、それ以外の、256ビットもしくはそれ以下の戻り
値をレジスタr48、r49、r50、およびr51(エイリアス名RV0、R
V1、RV2、およびRV3が与えられている)に、それを超える戻り値をr3
1(この目的から、エイリアス名RVAが与えられている)によってポイントさ
れるメモリ・ロケーション内に返す。
【0247】 『タペストリー』呼び出し規約、および『タペストリー』とX86リソースの
間のマッピングは、少なくとも部分的に相互設計され、共通の使用を最大化し、
それによって呼び出し規約の遷移に必要となるデータのコピーの量が抑えられて
いる。したがって、スカラの関数戻り値のリターンに使用される2つのレジスタ
−−『タペストリー』におけるr48(RV0、X86におけるEAX)−−が
互いにマップされる。
【0248】 ネイティブ呼び出し規約の被呼側からX86発呼側もしくはX86規約を使用
する『タペストリー』発呼側にリターンするときは、当該リターンのセマンティ
ック・クラスが(関数が浮動小数点値を返すか否かが、コンパイラによって導か
れるJALRのセマンティック・クラス・ビット内にエンコーディングされてい
ることから)明確に既知となり、そのセマンティック・クラスは、次の2つのパ
ラグラフにおいて説明するように、生じる可能性のある2つのケースにおいて取
られる2つのアクションを明確に区別する。
【0249】 ネイティブ規約の関数が倍精度(64ビット)浮動小数点値をX86規約の発
呼側に返すとき(行248に示したRETURN−FPのケース)、関数戻り値
は、r31(RVDP;『タペストリー』が倍精度の関数結果を返すレジスタ)
におけるIEEE−754の64ビット表現から、X86のFPスタックのトッ
プが現在ポイントしているレジスタ・ペア(通常はr32〜r33;X86のF
0にマップされた『タペストリー』レジスタ・ペア)内における80ビットの拡
張精度に拡張させる。浮動小数点スタックのトップによりポイントされるレジス
タは、「満」にマークされており、残りすべての浮動小数点レジスタは「空」に
マークされている。(『タペストリー』は、X86のFPCW(浮動小数点コン
トロール・ワード)、FPSW(浮動小数点ステータス・ワード)、およびFP
TW(浮動小数点タグ・ワード)の機能を包含する浮動小数点ステータス・レジ
スタを有しており、レジスタの「満」または「空」がこれらのステータス・レジ
スタのタグ・ビット内にマークされる。)
【0250】 『タペストリー』ネイティブ被呼側の非浮動小数点関数からX86規約の被呼
側へのリターン(行248に示したX86規約の被呼側に対するRETURN−
NO−FPのケース)においては、関数の戻り値がr48内にそのまま残される
が、これは、単独のこのレジスタが、『タペストリー』関数がその結果を計算す
るレジスタであり、かつX86のレジスタEAX(関数結果のリターン・レジス
タ)がマップされたレジスタであることを理由とする。
【0251】 ネイティブ被呼側が64ビットより大きな値をX86規約の発呼側に返す場合
、スタック上にストアされているリターン記述子が、戻り値がストアされている
場所(通常、レジスタr48(RV0)、r49(RV1)、r50(RV2)
、およびr51(RV3)の中、もしくはr31(RVA)によってポイントさ
れるメモリ・ロケーションの中)を示す;戻り値は、X86規約の下に指定され
るロケーション(通常は、スタック上の引数ブロック内にストアされたアドレス
のメモリ・ロケーション)にコピーされる。
【0252】 X86被呼側からX86規約を使用する『タペストリー』発呼側にリターンす
るときには、表1のレジスタ・マッピングが規約の変換をインプリメントしてい
ることから、必要なアクションがまったくない。
【0253】 X86被呼側からネイティブ『タペストリー』発呼側にリターンするときには
、2つのセマンティック・クラスRETURN−MAYBE−FPおよびRET
URN−NO−FPによって2つのケースが識別される。行224ならびに25
4のRETURN−NO−FPのケースにおいては、r48、すなわち『タペス
トリー』のスカラ戻り値レジスタにマップされたX86のレジスタEAX内に戻
り値が計算されていることから、必要なアクションはない。RETURN−MA
YBE−FPのケースにおいては、例外ハンドラによって保守的に、任意のスカ
ラ結果がr48内に残ることが保証され、かつ浮動小数点スタックのトップから
の値が、80ビットの拡張精度表現からr31(RVDP)内における64ビッ
トの倍精度表現に縮小される。
【0254】 翻訳済みネイティブ・コードを実行しているときは、ディスティネーションも
ネイティブ・コードである場合を除いて『タペストリー』がJALRサブプログ
ラムのリターンを実行することはない。このインプリメンテーションにおけるセ
マンティック・クラス・コードが、X86インストラクションが浮動小数点結果
を返すか否か(RETURN−FPとRETURN−MAYBE−FP)につい
てだけあいまいな解決をもたらし、ネイティブ・セマンティック・クラス・コー
ドは明確(RETURN−FPとRETURN−NO−FP)であることから、
バイナリ・トランスレータ124は、そのディスティネーションも翻訳される場
合を除いて最終的なX86のRETを翻訳しない。
【0255】 別の実施態様においては、第3の規約値、すなわち「遷移」値を提供すること
もできる。マシンは、遷移ページへ、またはそれからクロスするとき例外を取ら
ない−−遷移呼び出し規約が、X86呼び出し規約および『タペストリー』呼び
出し規約の両方において「一致」する。通常、遷移呼び出し規約のページは、『
タペストリー』ISA値を有することになる。これらの遷移ページは、遷移処理
を明示的に実行する「グルー」コードを保持している。たとえば、『タペストリ
ー』被呼側の呼び出しを希望するX86発呼側は、最初に、遷移呼び出し規約ペ
ージのグルー・ルーチンを呼び出すことができる。このグルー・ルーチンは、引
数を、それらのX86呼び出し規約ホームから、それらの『タペストリー』ホー
ムにコピーし、さらに可能性としてはその他のハウスキーピングを実行する。そ
の後グルー・ルーチンは、『タペストリー』被呼側を呼び出す。『タペストリー
』被呼側のリターンはグルー・ルーチンに対してなされ、それにおいてグルー・
ルーチンは、戻り値のコピーを実行し、さらにその他のハウスキーピングを実行
し、その後その発呼側であるX86発呼側にリターンする。
【0256】 当業者であれば、図2bおよび2cに示した遷移例外の各ケースをインプリメ
ントする引数コピーについて理解されよう。一実施態様は、米国特許出願第09
/385,394号ならびに第09/239,194号のマイクロフィッシュ付
録に完全な詳細が示されており、これらのアプリケーションについては、参照を
通じて本件出願に採り入れられている。
【0257】 セクションII、III、もしくはIVに公開した幅広い設計のいずれかに対
する変形実施態様においては、コンピュータが3ないしはそれ以上のインストラ
クション・セット・アーキテクチャ、および/または3ないしはそれ以上の呼び
出し規約を提供することも考えられる。それぞれのアーキテクチャもしくは規約
には、2ないしはそれ以上のビットによって表されるコード番号が割り当てられ
る。1つのコードを伴う領域もしくはページから別のコードを伴う領域もしくは
ページにアーキテクチャがクロスする場合には、ハードウエア・コントロールに
対して適切な調整がなされるか、適切な例外ハンドラが呼び出されてコンピュー
タのデータ・コンテンツの調整、および/またはハードウエア例外モードの明示
的なコントロールが行なわれる。
【0258】 V.変換のためのホット・スポットを決定するためのプロファイリング A.プロファイリングの概要 図1a、1b、および4aを参照すると、プロファイラ400が、X86モー
ドにおいて実行されているプログラムの実行をモニタし、実行のプロファイルを
表すデータのストリームをストアしていることが示されている。通常はX86イ
ンストラクション・テキストが既製の市販バイナリであることから、プロファイ
ラ400は、X86バイナリを修正することなく、あるいはソース・コードを専
用のプロファイル可能なX86インストラクション・テキストにリコンパイルす
ることなく動作する。プロファイラ400に関する実行規則は、正しい情報が正
しいタイミングで取り込まれるように適合されている。ホット・スポット・ディ
テクタ122は、プロファイル・データに基づいてプログラム内のホット・スポ
ットを識別する。プロファイラ400によって収集されたデータは、インストラ
クション・テキストに対するそれ以上の参照を必要とせずに、効果的なヒューリ
スティックの応用によりプロファイル・データのみからホット・スポットの決定
を可能にする充分な記述性を有する。より詳しく述べれば、このプロファイル情
報は、フェッチされ、実行されたX86オブジェクト・コードのすべてのバイト
を示し、推断を要する非シーケンシャル・フローを残さない。さらに、プロファ
イル・データは、充分に詳細であり、X86インストラクション・テキストとの
組み合わせにおいて、X86インストラクション・テキストのプロファイル済み
の任意の範囲のバイナリ翻訳を可能にする。プロファイル情報は、X86インス
トラクションのデータ−コンテキスト依存もしくはマシン‐コンテキスト依存に
よって誘導されるあいまい性を含めて、X86オブジェクト・テキストにおける
すべてのあいまい性を解決するための、充分に好ましい注釈をX86テキストに
付する。プロファイラ400は、X86バイナリを修正することなく、あるいは
ソース・コードを専用のプロファイル可能なX86バイナリにリコンパイルする
ことなく動作する。
【0259】 そのもっとも一般的な動作モードにおいて、プロファイラ400は、2段階ト
リガ信号(図5aの516、522)を待ってサンプリング・イベントを開始し
、続いて従来のプロファイラとは対照的に、すなわちn番目のイベントごとに記
録を行うか、あるいはnマイクロ秒ごとに単一のイベントの記録を行う従来のプ
ロファイラとは対照的に、稠密なシーケンスにおいて、それが停止するまで(た
とえば、プロファイル情報を収集しているバッファを使い切るまで)発生したプ
ロファイル可能な各イベントを含めて、プロファイル可能な各イベント416の
記録を行う。プロファイル情報は、ほとんどのコントロール・フローの移動にお
けるソース・アドレスならびにディスティネーション・アドレスの両方を記録す
る。個別のイベントを記述するエントリは、マシンの汎用レジスタ・ファイル内
に収集され、その後、プロファイル・パケットとしてブロック内にストアされる
。このイベントのブロック化は、メモリ・アクセスのトラフィックおよび実行の
オーバーヘッドを抑える。
【0260】 再度図1aおよび1bを参照すると、プロファイラ400は、仮想アドレスで
はなく、物理アドレスによってイベントを追跡している。つまりプロファイル可
能なイベント416は、2つの連続するインストラクションが物理的なページの
境界によって分離されるとき、あるいは単一のインストラクションが仮想ページ
の境界をまたぐとき、仮想アドレス空間内における「直線的な」フローによって
誘導されることがあり得る。(この分野において周知のように、仮想アドレス空
間内において連続する2つのページは、物理メモリ内において互いに引き離され
てストアされることがある。)X86ページを物理アドレス空間内においてマネ
ージすることによって、『タペストリー』は、エミュレートされているX86ハ
ードウエアのレベルで動作する。つまり、『タペストリー』とX86オペレーテ
ィング・システムの間のインターフェースは、X86アーキテクチャ自体と同程
度に明確かつ安定している。このことは、オペレーティング・システムによって
マネージされているあらゆるポリシーないしは特徴をエミュレートもしくは考慮
する必要性を回避する。たとえば、『タペストリー』は、各種の仮想メモリ・ポ
リシー、プロセスもしくはスレッド・マネジメント、または論理リソースと物理
リソースの間のマッピングを考慮する必要なく、またオペレーティング・システ
ムの修正をまったく必要とすることなく、X86オペレーティング・システム(
あらゆるバージョンのMicrosoft Windows(マイクロソフト・
ウインドウズ)、Microsoft NT(マイクロソフトNT)、もしくは
IBM OS/2、またはその他のオペレーティング・システム)を動作させる
ことができる。第2に、X86オペレーティング・システムが、複数のX86プ
ロセッサの間において同一の物理ページを共有している場合に、仮想ページが異
なる場合であっても、そのページが自動的に共有される。したがって、単一のペ
ージが存在することになる。第3に、解放されたページがアドレス空間から削除
され、その後、再利用される前に再マッピングされ、別の使用に割り当てられる
という利点がある。
【0261】 図4bを参照すると、イベントが極めて細かい分類法に従って約30のクラス
に分類されている。記録されるイベントには、ジャンプ、サブプログラムCAL
L(呼び出し)およびリターン、割り込み、例外、カーネル内へのトラップ、イ
ンストラクションの解釈を変えるプロセッサ状態の変化、およびページ境界をク
ロスするシーケンシャル・フローが含まれる。順方向ジャンプと逆方向ジャンプ
、条件付きジャンプと無条件ジャンプ、および「近い」ジャンプと「遠い」ジャ
ンプも区別されている。
【0262】 図4gおよび4hを参照すると、プロファイラ400は、プロファイリングの
精密なコントロールを可能にする多数の特徴を有しており、その結果、プロファ
イリングのオーバーヘッドを、プロファイル解析が望まれる実行モードのみに制
限できることが示されている。
【0263】 図5aおよび5bを参照すると、各X86インストラクションがコンバータ(
図1cの136)によってデコードされるとき、プロファイル・エントリが64
ビットのプロセッサ・レジスタ594内に構築されることが示されている。イン
ストラクションの実行間は、レジスタ594が修正され、上書きされることがあ
り、特にインストラクションが『タペストリー』オペレーティング・システム3
12内にトラップしている場合にはそれが見られる。インストラクションの完了
時には、プロファイラ400が、プロファイル・エントリ・プロセッサ・レジス
タの内容を汎用レジスタ内に取り込むことを選択する場合もある。
【0264】 ホット・スポット・ディテクタ122は、プロファイル・パケットのセット内
において頻繁に繰り返されるアドレスを認識する。ホット・スポットが認識され
ると、プロファイル内のそれを囲むエントリが、繰り返し発生するアドレスとの
相関において、頻繁に実行されるコードの領域および物理ページを通るパスを(
物理アドレスによって)示す。ホット・スポット・ディテクタ122は、この情
報をTAXiトランスレータ124に渡し、それにおいてこのバイナリの翻訳が
行なわれる。
【0265】 B.プロファイル可能事象および事象コード 図4bを参照すると、プロファイラ400は、表内にリストした約30のイベ
ントのクラスを認識する。各イベントのクラスは、5ビットの数として表された
、0から31までの番号に対応するコード402を有している。イベントのクラ
スは、設計をサポートするために必要な最少情報、および厳密に言えば必要ない
が、ホット・スポット・ディテクタ122がより好ましい結果に到達できる追加
のヒントをもたらす追加の情報をともに提供するべく選択されている。
【0266】 この表の上側半分410は、(一実施態様においては)ソフトウエアによって
生じるイベントをリストしており、下側半分404は、ハードウエアによって生
じるイベントを含んでいる。下側半分についてまず説明する。
【0267】 表の下側半分404に含まれる、その最上位ビットを「1」とする16のエン
トリは、コンバータ136によって惹き起こされるイベントである。各X86イ
ンストラクションがデコードされ実行されると、それに従って下側半分404に
列挙されているイベントが認識される。これらのイベント404が生じたときに
プロファイラ400がアクティブであれば、プロファイル・エントリが汎用レジ
スタ内に記録される。表の下側半分に含まれるイベントは、2つのクラスに分け
られる:すなわち、コンバータ136内によって実行されるコントロールの「近
い」移動、および物理ページ・フレームの境界をまたぐ実行のシーケンシャル・
フローである。
【0268】 プロファイラ400は、IP相対移動、サブルーチン呼び出しならびにリター
ン、ポインタを介したジャンプ、および多くの割り込みによって誘導される移動
を含め、コントロールの移動を捕捉する。プロファイラ400が、その物理アド
レス空間においてマシンを見ている場合であっても、X86インストラクション
内のPC相対変位の符号ビットを観察することによって、PC相対ジャンプに関
して順方向と逆方向のジャンプの間を区別することは可能である。ブランチが分
類されると、そのブランチ用のプロファイル・エントリ内にストアされたイベン
ト・コード402を用いてその分類がエンコーディングされる。イベント・コー
ド1.0000、1.0001、1.0010、1.0011、1.0100、
1.0101、および1.0111によって示したように、順方向条件付きブラ
ンチ、逆方向条件付きブランチ、3つに分けられた条件付きジャンプの述部等を
個別に分類するイベント・コード402が存在する。
【0269】 イベント・コード1.1100については、セクションVIII.Bにおいて
説明する。 イベント・コード1.1110(406)は、注目すべき事項を伴わない単純
なシーケンシャル・インストラクションを示す。イベント・コード1.1111
(408)は、物理ページの最後のバイト内で終わっているか、あるいは仮想ア
ドレス空間内のページの境界をまたいでいる(かつ、物理アドレス空間内におい
て2つの離れた部分に分けられている可能性のある)インストラクションを示し
ている。
【0270】 表の上側半分410の、最上位ビットを「0」とする上位16のエントリは、
ソフトウエア・エミュレータ316内において扱われるイベントであり、エミュ
レーション・ハンドラの完了時に『タペストリー』REF(例外からのリターン
)インストラクションの実行間に記録される。RFEは、同期例外、(たとえば
ページ違反またはNaN生成浮動小数点例外)、非同期外部割り込み、あるいは
ハードウエア・コンバータ136内においてインプリメントされない極めて複雑
なX86インストラクションのシミュレーションのためのオペレーティング・シ
ステム内へのトラップの後に、『タペストリー』オペレーティング・システム3
12からユーザ・プログラムにリターンする『タペストリー』インストラクショ
ンである。概して表の上側半分に含まれるイベントは4つのクラスに分けられる
:すなわち(1)エミュレータ316内において実行される「遠い」コントロー
ル移動インストラクション、(2)エミュレータ316において実行されたX8
6実行コンテキスト(たとえばFRSTOR)を更新するインストラクション、
(3)X86内部の、同期割り込みの引き渡し、および(4)X86外部の、非
同期割り込みの引き渡しである。一般に、上側半分のイベント・コードは、ソフ
トウエアに対してのみ知らされる。
【0271】 各RFEインストラクションは4ビットのイミディエート・フィールド(図5
bの588)を有しており、その中にリターン元のハンドラを呼び出したイベン
トに関連付けされたイベント・コード402の下位4ビットがストアされる。R
FEイベント・クラスの5番目のビットは、「0」として再構成(後述のセクシ
ョンV.Gを参照されたい)されるが、「0」が明示的にストアされることはな
い。RFEが実行されるとき、RFEからTAXi_State.Event_
Code_Latch(TAXi_状態.イベント_コード_ラッチ)(図4h
および5bの486、487)およびプロファイル情報(後述するセクションV
.Fを参照されたい)を収集する一時プロセッサ・レジスタ(図5bの594)
にイベント・コードがコピーされ、ハードウエア・コンバータ136によって供
給されたイベント・コードが上書きされる。プロファイル・エントリを収集する
場合には、このイベント・コードがレジスタ594から汎用レジスタにコピーさ
れる。このメカニズムによって、ソフトウエアからプロファイラ400のハード
ウエア510に対して、ソフトウエア・エミュレータ316内においてプロファ
イル可能なインストラクションが実行されたこと、あるいはソフトウエア・エミ
ュレータ316内において実行されたプロファイル可能でないインストラクショ
ンがページ・クロスを生じ、その理由に関してプロファイリングするべきである
ことを通知することができる。(X86の重要度を伴わないRFEは、このフィ
ールドをゼロにセットし、それによってハードウエアによるプロファイル・エン
トリのストアが防止される;後述するコード0.0000の説明を参照されたい
。)
【0272】 「プロファイル可能」列(図4bの416)は、そのイベント・コードをプロ
ファイル・パケットに含めるべきか否かを指定する。プロファイル可能でないイ
ベントは、それが生じてもプロファイラ400がなにもアクションを取らないだ
けに過ぎない。「開始パケット」列418は、このイベント・コード(図4bの
402)のイベントによる新しいプロファイル・パケットの収集の開始が可能か
否か、あるいはこのイベント・クラスが最初のエントリより後に限り記録される
ことになるかについての指定を行う。「開始パケット」418については、後述
するセクションV.FおよびV.Gにおいて、図4cのContext_At_
Point(コンテキスト_アット_ポイント)プロファイル・エントリ、およ
び図5aのプロファイラ状態マシン510との関連から詳細に説明する。「プロ
ーブ可能イベント」列610および「プローブ・イベント・ビット」列612は
、後述するセクションVI「プロービング」との関連から説明する。「開始パケ
ット」418、「プロファイル可能イベント」416、および「プローブ可能イ
ベント」610のプロパティは、PLA(プログラマブル・ロジック・アレイ)
650によって演算され、それについては後述のセクションVI.CおよびVI
.Dにおいて説明する。
【0273】 イベント・コード0.0000、0.0001、0.0010、および0.0
011については、数パラグラフ後に説明する。 イベント・コード0.0100は、TAXi_State.Event_Co
de_Latch(TAXi_状態.イベント_コード_ラッチ)(図4hおよ
び5bの486、487)のカレント値の上から単純にストアされ、マシンのカ
レント状態に、それ以上の効果がもたらされることはない。この上書きの効果は
、以前にストアされたイベント・コードのクリアであり、TAXi_State
.Event_Code_Latch(TAXi_状態.イベント_コード_ラ
ッチ)486、487の現在の内容によってトリガされる効果の可能性をまった
く伴うことなく、コンバータ136がリスタートできることを保証する。たとえ
ば、コンバータ136がプローブ例外を取り(後述のセクションVIを参照され
たい)、かつ翻訳済みTAXiコードの最初のインストラクションが、(翻訳済
みTAXiコード内における実行の再開を可能にするのではなく)コントロール
をコンバータ136に返すことによって処理されるべき例外を生成する場合、例
外ハンドラは、イベント・コードのイミディエート・フィールドが0.0100
となっているRFEを返すことになる。これは、コンバータ136が、TAXi
_State.Event_Code_Latch(TAXi_状態.イベント
_コード_ラッチ)486、487内に保留されている、最初にプローブ例外を
トリガしたイベント・コードを伴ってリスタートしないことを確実にする。
【0274】 イベント・コード0.0101は、エミュレーションが、それにより実行コン
テキストを変化、たとえば浮動小数点レジスタもしくは浮動小数点スタックのト
ップの満/空状態を変化させるインストラクションを完了したことを示す。これ
は、Context_At_Point(コンテキスト_アット_ポイント)プ
ロファイル・エントリ(図4cの430および後述するセクションV.Cを参照
されたい)の記録にこの状態を強制的に取り込ませる。
【0275】 イベント・コード0.0110、0.0111、0.1000、0.1001
のイベントは、コントロール移動インストラクションであり、「遠い」呼び出し
、「遠い」ジャンプ、「遠い」リターン、およびX86割り込みリターン等のよ
うに、ハードウエア・コンバータ134、136に代えて、エミュレーション・
ソフトウエアにおいてインプリメントする方が有利なインストラクションである
。これらの「遠い」移動に関するイベント・コード分類は、IP相対の「近い」
ジャンプ(イベント・コード1.0000〜1.0101)とは対照的に、順方
向と逆方向のジャンプを区別しない。
【0276】 イベント・コード0.1010を伴うRFEは、TAXi_Control.
special_opcode(TAXi_コントロール.特殊_オペコード)
474(ビット<50:44>)を、Context_At_Point(コン
テキスト_アット_ポイント)プロファイル・エントリ(図4cの430)のs
pecial_opcode(特殊_オペコード)434フィールド(図4cの
ビット<50:43>)に取り込ませる。これは、ソフトウエアによって完全に
マネージすることができる新しい7ビットのイベント・コードのスペースを開始
する。
【0277】 イベント・コード0.1011は、例外ハンドラからのRFEに使用され、カ
レント・プロファイル・パケットを強制的に中止させる。『タペストリー』ハー
ドウエアは、RFEイミディエート・フィールド内のこのイベント・コードを認
識し、TAXi_State.Profile_Active(TAXi_状態
.プロファイル_アクティブ)(図4hおよび5aの482)をクリアすること
によってこのプロファイル・パケットを中止する。たとえば、TAXiコードに
対するプローブのRFEが成功した後にこのイベント・コードを使用して、進行
中のすべてのパケットを中止することができる。これは、TAXiコードがプロ
ファイル・パケットのシーケンシャル区間におけるブレークを表しているからで
あり、そのパケットを継続することが、不良な態様を招く結果になるからである
。同様に、X86シングル−ステップ・モードがイネーブルのとき、エミュレー
タ316からのRFEは、イベント・コード0.1011を使用して進行中のパ
ケットを中止する。プロファイリングは、次のプロファイル・タイマのタイムア
ウトから再開する。
【0278】 イベント・コード0.1100、0.1101、0.1110、および0.1
111は、X86エミュレータ316からのX86例外の引き渡しに関連する2
組のRFEイベント・コードを提供する。これによってソフトウエアは、TAX
iの使用に関する異なるカテゴリに例外をグループ化することができる。割り込
みを2グループに分類することによって、さらに、プローブ可能なイベントとプ
ローブ可能でないイベント(後述のセクションVIを参照されたい)に分類する
ことによって、これらの4つのイベント・コードは、ソフトウエアに関する基礎
とするコントロール・フレームワークを提供する。この分類は、X86が、単一
の統一された「割り込み」メカニズムを通じてすべての例外、外部割り込み、お
よびトラップを一箇所に集中させるという事実を利用している。
【0279】 イベント・コード0.0000、0.0001、0.0010、および0.0
011(412)のオペコードは、上側半分410内の残りといくぶん異なり、
それが「再使用イベント・コード」列414に現れている。これらのクラスに含
まれるイベント(つまり、イベント・コードのイミディエート・フィールド内に
これらの4ビットのコードを有するRFEインストラクション)は、TAXi_
State.Event_Code_Latch(TAXi_状態.イベント_
コード_ラッチ)(図4hの486、487)および関連する信号の更新を行わ
ない;単純に、次のX86インストラクションに関しても、以前にラッチしたイ
ベント・コードの存続が許可される。たとえば、イベント・コード0.0000
は、「トランスペアレントな」例外、すなわちプロファイル内に記録されない例
外用である。具体的な例を述べれば、TLBミス例外、純粋に『タペストリー』
割り込みに関する割り込みサービス・ルーチン、およびX86プログラムの進行
と無関係なその他の例外に関するハンドラのエンドにおいてRFEは、イベント
・コード0.0000(イミディエート・フィールド内の明示的な4つのゼロ、
および想定される上位桁のゼロ)を有し、それによってハードウエアが、プロフ
ァイル・エントリのストアを伴うことなく割り込みのあったロケーションにおい
て再開される。これらのイベントは、アーキテクチャ上、現在実行中のプロセス
に対して不可視に維持され、そのプロセス内のいずれのホット・スポットにも相
関されず、したがってイベントの記録についても意識上の存在となる。
【0280】 イベント・コード0.0001は、ソフトウエアX86エミュレータ316内
において使用される。ハードウエア・コンバータ136内においてインプリメン
トされない非常に複雑なX86のCISCインストラクションは、それに代えて
、当該インストラクションがエミュレートされるソフトウエアへのトラップとし
てインプリメントされる。X86エミュレータ316がこのインストラクション
を完了すると、それがイベント・コード0.0001を伴うRFEを使用してリ
ターンし、「ここでは何も特別なことが生じなかった」という内容を示し、その
結果、プロファイル・エントリの収集は行なわれない(エミュレートされたイン
ストラクションがページをまたいでいた場合を除く)。
【0281】 列414に示す「再使用イベント・コード」特徴の別の用途は、複雑なインス
トラクション、すなわち、ソフトウエアにおいてエミュレートされ、コントロー
ル・フローに影響をまったく及ぼさない、たとえば文字列を比較するインストラ
クション等のインストラクションの場合を考えることによって説明することがで
きる。この種の複雑なインストラクションが現れたとき、コンバータ136、セ
クションV.Fにおいて後述する図5bの非イベント回路578、およびMUX
580は、予備的にインストラクションのデコードを行い、予備的なイベント
・コード(図5bの582、592):すなわち、そのインストラクションがペ
ージ・ブレークをまたいでいるか否かによって、デフォルトのイベント・コード
1.1110(406)もしくは新規ページのイベント・コード1.1111(
408)を供給する。(一部の実施態様においては、コンバータ136が、それ
に加えて「遠い」コントロール移動、「遠い」CALL(呼び出し)に関するイ
ベント・コード、すなわちコード0.1000;「遠い」JMP(ジャンプ)、
すなわちコード0.1001;「遠い」RET(リターン)、すなわちコード0
.0110;IRET、すなわちコード0.0111を供給する。)この予備的
なイベント・コード582、592は、TAXi_State.Event_C
ode_Latch(TAXi_状態.イベント_コード_ラッチ)486、4
87内に、X86エミュレータ316へのトラップの一部としてラッチされる。
X86エミュレータ316がこの複雑なインストラクションを完了し、RFEに
よりコンバータ136に戻るとき、RFEは、そのイベント・コードのイミディ
エート・フィールド(図5bの588)として単純なX86インストラクション
完了イベント・コード0.0001を有することになる。イベント・コード0.
0001は「再使用イベント・コード」プロパティ414を有していることから
、RFEのイミディエート・フィールドからのこのイベント・コードは、単純に
破棄され、TAXi_State.Event_Code_Latch(TAX
i_状態.イベント_コード_ラッチ)486、487内の予備的なイベント・
コード582、592はそのまま残される。その後、例外からのリターン時に、
この予備的なイベント・コードを伴うイベントがプロファイル・パケットに追加
される。
【0282】 イベント・コード0.0010および0.0011は、プローブ例外ハンドラ
(後述のセクションVIを参照されたい)からのRFE内において使用される。
プローブが失敗すると、プローブのそのクラスがディセーブルになる。プロービ
ングおよびプロファイリングが相互に排他であることから(後述のセクションV
I.Gを参照されたい)、プローブ例外が存在するとき、プロファイリングはア
クティブではない。つまり、これらのイベント・コードは、プロファイル・パケ
ット内にストアされることはないが、後述するセクションVI.Dに示すように
、プローバ600をコントロールするために存在する。
【0283】 C.プロファイル済みイベントに関するストレージ・フォーム 図4a、4c、および4dを参照すると、プロファイル・イベントがパケット
420と呼ばれるグループ内に収集され、ストアされることが示されている。各
プロファイル・パケット420は、当初レジスタR16〜R31に収集され、そ
の後メモリ内にストアされる、エントリのプログラム可能な番号を保持している
。通常の使用においては、1パケット当たり16のエントリがあり、64ビット
のタイムスタンプから始まり、14のイベント・エントリ430、440が続き
、タイムスタンプで終了する。それぞれのイベントは、64ビットのエントリと
して記述され、次に示す2つのフォームのいずれかとなる:すなわち、Cont
ext_At_Point(コンテキスト_アット_ポイント)エントリ430
、またはNear_Edge(ニア_エッジ)エントリ440になる。パケット
の最初のエントリは、常にContext_At_Point(コンテキスト_
アット_ポイント)エントリ430になり、それによって、プロファイリングが
開始したポイント、すなわち概念的に2つのX86インストラクションの間とな
るポイントにおけるプロセッサ・コンテキストの比較的完全なスナップショット
が与えられる。続くエントリは、Context_At_Point(コンテキ
スト_アット_ポイント)フォームもしくはNear_Edge(ニア_エッジ
)フォームのいずれにもなり得る。Near_Edge(ニア_エッジ)エント
リ440は、セグメント間(つまり「近い」)コントロール移動を記述し、移動
のソースおよびディスティネーションを提供する。Near_Edge(ニア_
エッジ)エントリ440においては、X86のプロセッサ・コンテキストの残部
を、もっとも最近のContext_At_Point(コンテキスト_アット
_ポイント)エントリ430にから開始してプロセッサ・コンテキストを推論す
ることによって、つまり当該Context_At_Point(コンテキスト
_アット_ポイント)とNear_Edge(ニア_エッジ)移動の間に介在す
るインストラクションを解釈することによって決定することができる。プロファ
イル内には充分な情報が存在し、その結果、バイナリ・トランスレータ124は
、それらのインストラクションによって消費ないしは操作がなされた実際のデー
タについての知識を必要とすることなく、介在するこれらのインストラクション
のオペコードのみを参照することによって、そのコンテキストを推論することが
できる。Context_At_Point(コンテキスト_アット_ポイント
)エントリ430を発行するための規則は、この不変系を保存する:すなわち、
プロセッサ・コンテキストは、プロファイルと介在するインストラクションのオ
ペコードの組み合わせから推論され、当該インストラクションによって消費され
、あるいは操作されたデータに対する参照を必要としない。X86インストラク
ションの実行が、Near_Edge(ニア_エッジ)エントリ440内に現れ
ない形でプロセッサ・コンテキスト・ビットもしくはメモリ・データに依存する
場合には、プロファイラ400は、Context_At_Point(コンテ
キスト_アット_ポイント)エントリ430を発行する。つまり、Contex
t_At_Point(コンテキスト_アット_ポイント)エントリは、TAX
iバイナリ・トランスレータ124が、ネイティブ『タペストリー』コードを生
成するためにX86インストラクション・ストリームにおけるあいまい性を解決
する上で充分な情報を有することを保証する。
【0284】 図4cを参照すると、Context_At_Point(コンテキスト_ア
ット_ポイント)エントリ430は、X86インストラクション境界のコンテキ
ストのスナップショットを記述し、事実上、X86インストラクションの実行と
してコンテキストが開始されようとしていることが示されている。
【0285】 Context_At_Point(コンテキスト_アット_ポイント)エン
トリ430のビット<63:60>431は、オール・ゼロであり、Conte
xt_At_Point(コンテキスト_アット_ポイント)エントリ430と
Near_Edge(ニア_エッジ)エントリ440を区別している。(don
e_length(終了_長さ)441の説明の中で示すように、後述する図4
dのビット<63:60>、すなわちNear_Edge(ニア_エッジ)エン
トリ440内の最初の4ビットは、インストラクションの長さを記録し、長さゼ
ロのインストラクションは存在しない。つまり、フィールド431内のゼロ値は
、明確にContext_At_Point(コンテキスト_アット_ポイント
)エントリ430であることを示している。)
【0286】 ビット<59:51>432、433、およびビット<42:32>435は
、インストラクションの境界において(next_frame(次の_フレーム
)438およびnext_byte(次の_バイト)439、すなわちビット<
27:00>に記述されているインストラクションの開始の前に)、X86のプ
ロセッサ・モードのコンテキストを取り込む。X86インストラクションのビッ
トは、インストラクションのアクションを完全には指定しない;X86アーキテ
クチャが、プロセッサ・コンテキストおよびインストラクションのオペレーショ
ンを定義する多数の状態ビットを定義している。これらのビットは、オペランド
のサイズ(与えられた幅のフォームのインストラクションが動作するビット数は
16ビットか、あるいは32ビットか)、スタック・サイズ(PUSH(プッシ
ュ)またはPOP(ポップ)インストラクションが更新するスタック・ポインタ
は16ビットか、あるいは32ビットか)、アドレス・サイズ(アドレスは16
ビットか、あるいは32ビットか)、プロセッサはV86モードか否か、物理的
アドレシングまたは仮想アドレシングのいずれかといったことについての決定、
および浮動小数点スタック・ポインタ、ならびに浮動小数点レジスタの満/空状
態についての決定を行う。X86は、これらのビットをコードならびにスタック
・セグメント記述子の場所の周囲、EFLAGSレジスタ、浮動小数点ステータ
ス・ワード、浮動小数点タグ・ワード、およびその他の場所に分散させる。『タ
ペストリー』マシンは、これらのビットを、実際にマシンをコントロールするX
86構造の類似物にストアする;Context_At_Point(コンテキ
スト_アット_ポイント)エントリ430が取り込まれると、これらのビットの
スナップショットが、Context_At_Point(コンテキスト_アッ
ト_ポイント)エントリ430のビット<59:51>432、433および<
42:32>435に取り込まれる。
【0287】 ビット<59:56>432は、オペランド−サイズ/アドレス−サイズ・モ
ード(X86コード・セグメント記述子のDビット内にエンコードされている)
およびスタック・アドレス・サイズ(スタック・セグメント記述子のBビット内
にエンコードされている)のカレント状態を示す。ビット<59>、すなわち「
c1s1」は、X86が32ビット−コード/32ビット−スタック・モードで
あることを示す。ビット<58>、すなわち「c1s0」は、X86が32ビッ
ト−コード/16ビット‐スタック・モードであることを示す。ビット<57>
、すなわち「c0s1」は、X86が16ビット−コード/32ビット−スタッ
ク・モードであることを示す。ビット<56>、すなわち「c0s0」は、X8
6が16ビット−コード/16ビット−スタック・モードであることを示す。(
DおよびBビットは、X86インストラクション・セットにあいまい性をもたら
す。たとえば、インストラクション・ストリームの所定の9バイトのシーケンス
は、DおよびBビットの値に応じて、1つの実行に関する単一のインストラクシ
ョンとして、また次の完全に異なる3つのインストラクションとしての解釈が可
能である。このあいまい性を共有するアーキテクチャはほとんどない。)このよ
うに、DおよびBモードによって可能になる4つの組み合わせのうちの任意の1
つの組み合わせをプロファイルするか否かは、個別にコントロールすることがで
きる。
【0288】 フィールド433内のビット<55>、すなわち「pnz」は、X86が非リ
ング−ゼロ(特権のない)モードにあることを示す。ビット<54>、すなわち
「pez」は、X86がリング‐ゼロ(特権のある)モードにあることを示す。
ビット<53>、<52>、および<51>、すなわち「v86」「real」
「smm」は、それぞれX86が、X86システム・フラグ・ビットによって示
されるように、仮想8086、リアル、およびシステム・マネジメント実行モー
ドにあることを示す。
【0289】 ビット<50:43>、すなわちspecial_opcode(特殊_オペ
コード)434は、Context_At_Point(コンテキスト_アット
_ポイント)エントリが生成されると必ず、TAXi_Control.spe
cial_opcode(TAXi_コントロール.特殊_オペコード)474
から満たされる。これらのビットは、イベント・コード0.1010と特に関係
がある。
【0290】 フィールド435内のビット<42:40>は、浮動小数点スタックのトップ
のスタック・ポインタである。ビット<39:32>は、浮動小数点レジスタの
満/空ビットである。
【0291】 event_code(イベント・コード)フィールド436、すなわちビッ
ト<31:28>は、もっとも最近実行されたRFEまたはコンバータ・イベン
ト・コードから(図4bから)のイベント・コード402の下位4ビットを含む
。Context_At_Point(コンテキスト_アット_ポイント)のe
vent_code(イベント・コード)436の4ビットは、図4bに示した
イベント・コード402の下位4ビットである。上位ビットは、これらの4ビッ
トから、後述するセクションV.Gに説明する方法によって導かれる。それにお
いて詳細を説明するようにContext_At_Point(コンテキスト_
アット_ポイント)エントリ430は、図4bに示した表の上側半分410に含
まれる16のイベントの任意の1つ、あるいは当該表に含まれる「開始パケット
」プロパティ418を含む任意のイベントを記述することができる。
【0292】 ビット<27:00>は、次のX86インストラクション、すなわちCont
ext_At_Point(コンテキスト_アット_ポイント)コンテキストが
スナップショットされた時点において実行されようとしていたインストラクショ
ンを記述する。next_frame(次の_フレーム)フィールド438、す
なわちビット<27:12>は、物理的なページ・フレーム番号を、next_
byte(次の_バイト)フィールド439、すなわちビット<11:00>は
、当該ページ内における12ビットのオフセットをそれぞれ提供する。
【0293】 図4dを参照すると、Near_Edge(ニア_エッジ)エントリ440が
完全なX86セグメント間の「近い」コントロール移動インストラクションを記
述していることが示されている。Near_Edge(ニア_エッジ)エントリ
440のビット<63:60>441は、この移動インストラクションの長さを
記述する。長さ441の値は、1から15までとなる(もっとも短いX86イン
ストラクションは1バイトであり、もっとも長いインストラクションは15バイ
トである)。長さゼロを生じることがあり得ないことから、これらの4ビット4
31が、Near_Edge(ニア_エッジ)エントリ440とContext
_At_Point(コンテキスト_アット_ポイント)エントリ430を明確
に区別する。
【0294】 Near_Edge(ニア_エッジ)移動のソース・エンドにおけるインスト
ラクションは、インストラクションが開始するページ・フレーム番号、インスト
ラクションが終了するページ・フレーム番号、インストラクションが開始するペ
ージ内のバイト・オフセット、およびインストラクションの長さによって記述さ
れる。インストラクションの開始に対応するページ・フレーム番号は、Near
_Edge(ニア_エッジ)エントリ440内に明示的に表されないが、プロフ
ァイル・パケット内の直前のエントリからのnext_frame(次の_フレ
ーム)438、448として継承される(プロファイル・パケットが常にCon
text_At_Point(コンテキスト_アット_ポイント)エントリ43
0を伴って開始し、Near_Edge(ニア_エッジ)エントリ440が最初
のエントリとならなかったことを想起されたい)。インストラクションの最後の
バイトがあるページ・フレームは、done_frame(終了_フレーム)フ
ィールド444内、すなわちビット<59:44>に表される。これら2つのペ
ージ・フレーム番号は、インストラクションがページ境界をまたぐ場合には異な
ったものとなる。インストラクションが開始するページ内のバイト・オフセット
は、done_byte(終了_バイト)フィールド445内、すなわちビット
<43:32>に表される。長さはdone_length(終了_長さ)フィ
ールド441内、すなわちビット<63:60>に記録される。したがって、ソ
ース・インストラクションのエンドは、(((done_byte(終了_バイ
ト)445+done_length(終了_長さ)441)−1)mod 4
096)を演算することによって得られるバイトから知ることができる(X86
ページのサイズが4096であることからこの値が用いられている)。
【0295】 Near_Edge(ニア_エッジ)移動のディスティネーションは、前述し
たContext_At_Point(コンテキスト_アット_ポイント)エン
トリ430におけるnext_frame(次の_フレーム)フィールド438
およびnext_byte(次の_バイト)フィールド439、すなわちビット
<27:00>と同じ態様に従って、ビット<27:00>のnext_fra
me(次の_フレーム)フィールド448およびnext_byte(次の_バ
イト)フィールド449によって記述される。
【0296】 event_code(イベント・コード)フィールド446、すなわちビッ
ト<31:28>は、Context_At_Point(コンテキスト_アッ
ト_ポイント)エントリ430のevent_code(イベント・コード)4
36に相当するイベント・コードを含んでいる。Near_Edge(ニア_エ
ッジ)のevent_code(イベント・コード)446は、図4bに示した
表の下側半分の下位4ビットである;先行「1」が仮定されている。(つまり、
Near_Edge(ニア_エッジ)エントリ440は図4bの表の下側半分4
04に含まれる16のイベントだけを記述することができる。)
【0297】 以上のように、すべての物理ページは、その実行順序に従って、連続するプロ
ファイル・エントリ内に記述される。明示的なブランチを理由として実行が1つ
の物理ページから別のページにクロスする場合には、そのブランチがNear_
Edge(ニア_エッジ)エントリ440によって示される。ページの境界をま
たぐ仮想アドレス空間内におけるシーケンシャルな実行を原因として実行が1つ
の物理ページから別のページにクロスする場合には、ページのエンドにおいて終
了するインストラクションと次に開始するインストラクションの間、あるいはペ
ージ・ブレークをまたぐインストラクションと次のページの最初の完全なインス
トラクションの間のいずれかにおいてNear_Edge(ニア_エッジ)エン
トリ440が生成される。それとは異なり、コントロールがNear_Edge
(ニア_エッジ)イベントを伴わずにページに入った場合には、Context
_At_Point(コンテキスト_アット_ポイント)プロファイル・エント
リ430がそのページへの到達を記述する。ともにこれらに規則は、バイナリ・
テキストを参照することなく、実行のフローの再トレース、およびホット・スポ
ットの検出を可能にする充分な情報がプロファイル・エントリ内にあることを保
証する。ホット・スポット・ディテクタがインストラクション・テキストを調べ
ることなく動作可能になることは、キャッシュのポーリングを必要とすることな
くそれが動作できることを意味する。さらに、すべての物理ページが記述される
という保証は、X86が仮想アドレス空間からそのインストラクションを実行し
ている場合であっても、物理メモリ内に存在するものとしてプログラムのプロフ
ァイリングを可能にする。この保証は、プログラム・テキストを調べて、隣接関
係を推測することを必要とせずに、物理メモリを介してコントロール・フローを
トレースできることを保証する。
【0298】 Near_Edge(ニア_エッジ)エントリ440に関しては、X86プロ
セッサ・コンテキストを、ディスティネーション・インストラクションへの到達
時に、Context_At_Point(コンテキスト_アット_ポイント)
430内にエンコーディングされたコンテキスト432、433、435から開
始し、介在するインストラクションのオペコードを通って順方向のトレースを行
い、更新を取り込むことによって、直前のContext_At_Point(
コンテキスト_アット_ポイント)エントリ430のフィールド432、433
(ビット<59:51>)および435(ビット<42:32>)から推断する
ことができる。
【0299】 D.特定の例示事象(ページトラッドル)のために収集されたプロファイル情報 図4eおよび4fを参照して、インストラクションがページの境界をまたぐ2
つのケースについて考える。図4eおよび4fは仮想アドレス空間を表している
が、プロファイラ400は、物理アドレス空間内において動作する。
【0300】 図4eにおけるインストラクション450は、ページ452と453の間のペ
ージ境界451をまたぐが、コントロールを移動するインストラクションではな
い。ページ‐クロッシングは、シーケンシャル・イベント・コード、すなわちコ
ード1.1110(図4bの406)を伴うNear_Edge(ニア_エッジ
)エントリ440、454によって記述される。このインストラクションは、直
前のプロファイル・エントリ455がContext_At_Point(コン
テキスト_アット_ポイント)430もしくはNear_Edge(ニア_エッ
ジ)440のいずれであるかによらず、そのエントリのnext_frame(
次の_フレーム)ビット(ビット<27:12>)438、448、452aに
よって識別されるページ452内において始まる。インストラクションは、カレ
ントNear_Edge(ニア_エッジ)454のdone_byte(終了_
バイト)445(ビット<43:32>)によって示されるオフセット・バイト
から始まる。このインストラクションの長さは、カレントNear_Edge(
ニア_エッジ)454のdone_length(終了_長さ)441(ビット
<63:60>)によって示される。またこのインストラクションの最後のバイ
トは、カレントNear_Edge(ニア_エッジ)454のdone_fra
me(終了_フレーム)444、453aによって示されるページ453内とな
る。インストラクションのこの最後のバイトは、バイト(((done_byt
e(終了_バイト)445(ビット<43:32>)+done_length
(終了_長さ)441(ビット<63:60>)−1)mod 4096))と
なり、これは必然的に((next_byte(次の_バイト)449(ビット
<11:00>)−1)mod 4096)に一致する。次のシーケンシャル・
インストラクション456は、カレントNear_Edge(ニア_エッジ)4
40、454のnext_frame(次の_フレーム)448、456a(ビ
ット<27:12>)に示されるようにページ453内となり、next_by
te(次の_バイト)449(ビット<11:00>)から始まる。インストラ
クションの最大長441(15バイト)がページの長さより短いことから、図4
eに示したインストラクションがページをまたぐ場合においては、直前のプロフ
ァイル・エントリ455のdone_frame(終了_フレーム)453aが
、必然的にカレントNear_Edge(ニア_エッジ)454のNext_F
rame(次の_フレーム)456aに等しくなる。
【0301】 インストラクション450がページ452内に完全に含まれ、ページ境界45
1の直上において終了し、かつそれがコントロールの移動でない場合(またはシ
ーケンシャルに失敗したコントロールの移動である場合)には、done_fr
ame(終了_フレーム)453aがページ452をポイントし、next_f
rame(次の_フレーム)456aが続くページをポイントするNear_E
dge(ニア_エッジ)440、454が生成される。
【0302】 図4fを参照し、別のインストラクション、すなわちソース・インストラクシ
ョン自体がコーディングされた2つのページ452、453、およびディスティ
ネーション・インストラクション457が始まるページ458の3つのページに
わたる、ページをまたぎ、コントロールの移動のあるインストラクション450
について考える。カレントNear_Edge(ニア_エッジ)454のイベン
ト・コード446は、コントロール移動の特性、すなわちコード1.0000〜
1.1100(図4b)を記録する。図4eに示したシーケンス・フローの場合
と同様に、この移動のあるインストラクション450も、直前のプロファイル・
エントリ455のnext_frame(次の_フレーム)フィールド438、
448、452aによって示されるようにページ452内において、カレント・
プロファイル・エントリ455のnext_byte(次の_バイト)439(
ビット<43:32>)によって示されるバイト・オフセットから始まる。イン
ストラクション450の長さは、カレントNear_Edge(ニア_エッジ)
454のdone_length(終了_長さ)441内に示されている。イン
ストラクション450は、カレントNear_Edge(ニア_エッジ)エント
リ440、454のdone_frame(終了_フレーム)(ビット<59:
44>)フィールド444、453aによって示されるように、ページ453内
の、それぞれカレントNear_Edge(ニア_エッジ)エントリ440、4
54から得られたバイト((done_byte(終了_バイト)445(ビッ
ト<43:32>)+done_length(終了_長さ)441(ビット<
63:60>)−1)mod 4096)において終了する。ディスティネーシ
ョン・インストラクション457は、カレントNear_Edge(ニア_エッ
ジ)454のnext_frame(次の_フレーム)448、458a(ビッ
ト<27:12>)によって示されるようにページ458において、next_
byte(次の_バイト)449(ビット<11:00>)から始まる。この場
合、ページをまたぐブランチ450については、カレントNear_Edge(
ニア_エッジ)454のdone_frame(終了_フレーム)444、45
3a(ビット<59:44>)が、ページの渡りがあることから直前のエントリ
のnext_frame(次の_フレーム)438、448と一致しない。
【0303】 プロファイル・パケットがコントロール移動インストラクション上において開
始された場合、最初のエントリは、その移動インストラクションのターゲットを
ポイントするContext_At_Point(コンテキスト_アット_ポイ
ント)エントリ430になる。
【0304】 図4aを参照すると、Near_Edge(ニア_エッジ)エントリ440お
よびContext_At_Point(コンテキスト_アット_ポイント)エ
ントリ430が、もっとも複雑なコントロール・フローにおいても、コンパクト
かつ効果的な記述を提供し、ホット・スポット・ディテクタ122およびTAX
iバイナリ・トランスレータ124に対して、それら2つのタスクに有用でない
過剰な情報により圧倒することなく、その機能を可能にする充分な情報を提供し
ている。ここで、ホット・スポット・ディテクタ122およびTAXiバイナリ
・トランスレータ124の要件がいくぶん異なり、そのためプロファイル内の情
報がこれら2つの要件のスーパーセットを構成するべく設計されていることに注
意されたい。
【0305】 一部の実施態様においては、最初のインストラクションの最初のバイトから最
後のインストラクションの最後のバイトまでを範囲として記録すると望ましいこ
とがある。この方法における範囲の記録は、特にアーキテクチャが固定長のイン
ストラクションを有している場合に望ましい。
【0306】 E.プロファイラを制御する制御レジスタ 図4gを参照すると、TAXiハードウエア・システムは、TAXiコントロ
ール460と呼ばれる64ビットのレジスタによってコントロールされる。この
システムの多くがプロファイルによってドライブされることから、プロファイリ
ングに関する精密なコントロールは、TAXiシステム全体の精密なコントロー
ルを提供することになる。各種のビットが、TAXiメカニズムの個別の部分の
イネーブルならびにディセーブル、特定の評価基準に一致もしくは不一致のコー
ドに関するプロファイリングのイネーブルならびにディセーブル、および特定の
イベントのレートをコントロールするタイマ・コントロールを可能にする。プロ
ファイリングがディセーブルされるあらゆるコード領域においては、TAXiリ
ソースが静止し、オーバーヘッドがもたらされない。
【0307】 典型的な実施態様においては、TAXiコントロール・レジスタ460に、シ
ステムの初期化の間に1度、出荷前のシステム調整によって決定された値が書き
込まれる。別の実施態様においては、オン‐ザ‐フライでこの値を操作し、特定
のシステム使用パターンに適合させることができる。1つの例外は、speci
al_opcode(特殊_オペコード)フィールド434であり、それについ
ては後述する。
【0308】 ビット<63>、すなわちprobe(プローブ)676は、プローブ例外の
イネーブルまたはディセーブルに使用され、後述のセクションVIにおいてプロ
ービングとの関連から詳細を説明する。ビット<62>、すなわちProfil
e_Enable(プロファイル_イネーブル)464または「prof」は、
プロファイル・トレースのパケット収集およびプロファイル・トレース‐パケッ
ト完了例外の引き渡しのイネーブルおよびディセーブルを行う。probe(プ
ローブ)676およびProfile_Enable(プロファイル_イネーブ
ル)464のビットは、通常、ハードウエア・デバッギング・リソースがアクテ
ィブのとき、TAXiオペレーションを常時ディセーブルするために操作される
【0309】 ビット<61>、すなわちtio 820は、TAXi I/O例外を間接的
にコントロールし、前述のセクションI.Dにおいて紹介したセーフティ・ネッ
トをインプリメントするガードの1つを提供するが、それについては後述のセク
ションVIII.Aにおいてさらに詳しく説明する。
【0310】 ビット<60>、すなわちunpr 468は、前述のセクションI.Fにお
いて論じた保護なし例外をディセーブルする。保護なし例外は、保護されていな
いページ上におけるプロファイリング時にのみ生じる。
【0311】 フィールド470、すなわちビット<59:56>は、プロファイルされるこ
とになるコード・セグメント/スタック・セグメントのサイズの組み合わせをコ
ントロールする。ビット<59>、すなわち「c1s1」は、X86コード・セ
グメントが32ビットのデフォルトのオペランド‐サイズ/アドレス‐サイズの
ビットをセットしているプログラムの部分に関するプロファイリングをイネーブ
ルし、かつ32ビット・スタックのビットをセットしているセグメント内のスタ
ックを使用する。ビット<58>、すなわち「c1s0」は、32ビットのオペ
ランド/アドレスに関するプロファイリングをイネーブルし、16ビットのスタ
ック・セグメントを使用する。ビット<57>、すなわち「c0s1」は、16
ビットのオペランド/アドレスに関するプロファイリングをイネーブルし、32
ビットのスタック・セグメントを使用する。ビット<56>、すなわち「c0s
0」は、16ビットのオペランド/アドレスに関するプロファイリングをイネー
ブルし、16ビットのスタック・セグメントを使用する。
【0312】 ビット<55>、すなわち「pnz」は、(「0」ではない)特権リング「1
」「2」および「3」のコードに関するプロファイリングをイネーブルする。 ビット<54>、すなわち「pez」は、(ゼロに等しい)特権リング「0」
のコードに関するプロファイリングをイネーブルする。
【0313】 ビット<53>、<52>、および<51>、すなわち「v86」「real
」「smm」(ビット<59:54>のサイズおよびモード・コントロールとと
もに、集合的にGlobal_TAXi_Enables(グローバル_TAX
i_イネーブルズ)ビット470、472と呼ばれる)は、X86の仮想808
6、リアル、およびシステム・マネジメント実行モードにあるコードに関するプ
ロファイリングをイネーブルする(これらの実行モードは、X86のEFLAG
Sレジスタ内のシステム・フラグおよびIOPLフィールドによって示される)
。与えられたX86実行モードがTAXiによってサポートされていない場合(
つまり、そのX86モードのコードに関してTAXiが翻訳済み『タペストリー
』バイナリの生成を試みないことを意味する)、システムは、そのモードにオー
バーヘッドをまったくもたらさないように設計されている。したがって、あるモ
ードに関してGlobal_TAXi_Enables(グローバル_TAXi
_イネーブルズ)470、472のビットがゼロであり、仮想X86 310が
そのモードを実行しているときには、実行のプロファイリングが行なわれず、プ
ロファイル・タイマ(図4iの492)が動作せず、さらにプロファイル例外、
保護なし例外、およびプローブ例外がすべて禁止される。
【0314】 ビット<50:44>、すなわちspecial_opcode(特殊_オペ
コード)474は、Context_At_Point(コンテキスト_アット
_ポイント)プロファイル・エントリ430の内容をセットするために使用され
る。X86エミュレータ316は、special_opcode(特殊_オペ
コード)474を所望の値にセットする。イベント・コード0.1010(図4
b)を伴うRFEが続いて実行される場合には、TAXi_Control.s
pecial_opcode(TAXi_コントロール.特殊_オペコード)4
74が、修正されることなくContext_At_Point(コンテキスト
_アット_ポイント)イベント430のspecial_opcode(特殊_
オペコード)フィールド434(ビット<50:44>)内にコピーされる。
【0315】 ビット<43:38>、すなわちPacket_Reg_First(パケッ
ト_レジスタ_先頭)476、およびビット<37:32>、すなわちPack
et_Reg_Last(パケット_レジスタ_末尾)478は、プロファイル
・トレース・パケットを蓄積するために使用する汎用レジスタの範囲を指定する
。パケットの最初のContext_At_Point(コンテキスト_アット
_ポイント)エントリ430は、Packet_Reg_First(パケット
_レジスタ_先頭)476によってポイントされるレジスタ内にストアされ、そ
の次のエントリがPacket_Reg_First(パケット_レジスタ_先
頭)+1に、さらに同様に続いて最後のエントリがPacket_Reg_La
st(パケット_レジスタ_末尾)478にストアされる。その後「プロファイ
ル・フル」例外が生じ(図5aの536、548)、その結果、プロファイル・
レジスタをメモリに移すことができる。表1に示したように、通常はPacke
t_Reg_First(パケット_レジスタ_先頭)476が17にセットさ
れ、Packet_Reg_Last(パケット_レジスタ_末尾)478が3
1にセットされる。
【0316】 ビット<31:16>、すなわちProfile_Timer_Reload
_Constant(プロファイル_タイマ_再ロード_定数)494、および
ビット<15:00>、すなわちProve_Timer_Reload_Co
nstant(プローブ_タイマ_再ロード_定数)632(ビット<15:0
0>)は、それぞれプロファイル・トレース‐パケット収集のレートおよびプロ
ービングのコントロールに使用される。これについては、TAXi_Timer
s(TAXi_タイマ)レジスタ(図4iの490、630;後述の図4iに関
する説明およびセクションVI.CならびにVI.Dにおける説明を参照された
い)との関連からさらに詳細を説明する。
【0317】 図4hを参照するとわかるが、TAXiシステムの内部状態は、TAXi_S
tate(TAXi_状態)480と呼ばれるレジスタを観察することによって
知ることができる。システムの通常の動作においては、TAXi_State(
TAXi_状態)レジスタ480が読み出し専用となっているが、コンテキスト
切り替え、あるいは設計検証の間においては読み出しおよび書き込みが可能にな
る。
【0318】 ビット<15>、すなわち「preq」または「Profile_Reque
st(プロファイル_要求)」484は、プロファイル・タイマ492がタイム
アウトし、別のパケットを収集する要求を発したが、パケットを開始するイベン
トがまだ発生していないか、あるいは1つのパケットの収集が実際に行なわれて
いる間にプロファイル・タイマ492がタイムアウトしたことを示す。
【0319】 ビット<31>、すなわち「pact」または「Profile_Activ
e(プロファイル_アクティブ)」482は、「preq」または「Profi
le_Request(プロファイル_要求)」484がセットされ、「開始パ
ケット」イベント(図4bの418)が発生し、プロファイル・パケットが初期
化されて進行中であるが、プロファイル・レジスタがまだ満たされていないこと
を示す。
【0320】 このレジスタ内の使用されないビットは、「ゼロにしなければならない」こと
を示す「mbz」というラベルが付されている。 「Decoded_Probe_Event(デコード済み_プローブ_イベ
ント)」フィールド680および「Probe_Mask(プローブ_マスク)
」フィールド620については、後述のセクションVIにおいて説明する。
【0321】 「Event_Code_Latch(イベント_コード_ラッチ)」フィー
ルド486、487、すなわちビット<12:08>は、5ビットのイベント・
コード(図4bのイベント・コード、または図4cのContext_At_P
oint(コンテキスト_アット_ポイント)エントリ430もしくは図4dの
Near_Edge(ニア_エッジ)プロファイル・エントリ440の4ビット
・イベント)を、コンバータ136内において生成されたか、あるいはRFEイ
ンストラクション(図5bの588)内のイミディエート・フィールドとしてエ
ンコーディングされた最後のイベントの逆方向ビューとして記録する。Even
t_Code_Latch(イベント_コード_ラッチ)486、487は、こ
のプロセスの次の論理サイクルになるまでの、イベント・コードのログに対する
アーキテクチャ的に可視の場所として機能する。その4つの下位ビット486は
、RFEのイミディエート・フィールド588によって供給されるか、あるいは
コンバータ136からの4ビット(図5bの582)が供給される。上位ビット
487は、コンテキストによって供給され、コンバータ136からのイベントに
関しては「1」、RFEからのイベントに関しては「0」となる。
【0322】 「Packet_Reg(パケット_レジスタ)」フィールド489、すなわ
ち<05:00>は、レジスタ・ファイル内のポスト−インクリメントの直接ア
ドレスとして次のプロファイル・エントリが書き込まれるレジスタの数を提供す
る。TAXi_State.Packet_Reg(TAXi_状態.パケット
_レジスタ)489がTAXi_Control.Packet_Reg_La
st(TAXi_コントロール.パケット_レジスタ_末尾)478を超えると
きには、プロファイル収集が終了され、「プロファイル・パケット完了」例外が
発生し、TAXi_State.Packet_Reg(TAXi_状態.パケ
ット_レジスタ)の値がTAXi_Control.Packet_Reg_F
irst(TAXi_コントロール.パケット_レジスタ_先頭)476にリセ
ットされる。
【0323】 図4iを参照すると、TAXi_Timers(TAXi_タイマ)レジスタ
490が、2つの16ビットのカウント・ダウン・タイマ492、630を有し
ていることが示されている。
【0324】 TAXi_Timers.Profile_Timer(TAXi_タイマ.
プロファイル_タイマ)492(ビット<31:16>)は、次のパラグラフに
説明するように、プロファイル収集がイネーブルされているとき、CPUのクロ
ック周波数でカウント・ダウンする。Profile_Timer(プロファイ
ル_タイマ)492は、符号なしの値であり、ゼロまでカウント・ダウンする。
タイムアウト時には、ハードウエアがTAXi_Control.Profil
e_Timer_Reload_Constant(TAXi_コントロール.
プロファイル_タイマ_再ロード_定数)(図4gの494)をタイマ492に
再ロードする。Profile_Timer(プロファイル_タイマ)492は
、カウント・ダウンおよび再ロードを継続的に繰り返す。ゼロへの遷移は、プロ
ファイル例外状態図(図5a)に定義されるように、タイマのタイムアウトとし
てデコードされる。
【0325】 次に示す5つの条件が満たされると、プロファイル収集がイネーブルされ、プ
ロファイル・タイマ492が起動される:すなわち(1)TAXi_Contr
ol.Profile_Enable(TAXi_コントロール.プロファイル
・イネーブル)464が「1」であること、(2)コンバータ136がアクティ
ブであること(PSA.ISAビット194がX86を示している;前述のセク
ションIIを参照されたい)、(3)カレント・インストラクションのすべての
バイトが4KのページI−TLBエントリを有していること、(4)カレント・
インストラクションのすべてのバイトが良好な振る舞いを有するメモリ(D−T
LB.ASI=0を伴うアドレス空間ゼロは良好な振る舞いを有するメモリであ
り、そのほかのアドレス空間は良好な振る舞いを有していないメモリと見なされ
る)内にI−TLBページ属性を有していること、および(5)マシンが現在、
TAXi_Control.Global_TAXi_Enables(TAX
i_コントロール.グローバル_TAXi_イネーブルズ)ビット470、47
2(ビット<59:51>)内においてイネーブルされているモードにおいて実
行しているという条件である。X86デバッギングもしくはシングル‐ステップ
・オペレーションが要求されると、ソフトウエアはTAXi_Control.
Profile_Enable(TAXi_コントロール.プロファイル・イネ
ーブル)464をクリアしてプロファイル収集をディセーブルする。
【0326】 TAXi_Timers.Probe_Timer(TAXi_タイマ.プロ
ーブ_タイマ)630(ビット<15:00>)については、後述のセクション
VI.CおよびVI.Dにおいて説明する。
【0327】 F.プロファイラ状態機械およびプロファイラの動作 図5aを参照すると、プロファイラ400が状態マシン510に従って動作す
ることが示されている。状態マシン510の4つの状態512、518、530
、542は、TAXi_State.Profile_Active(TAXi
_状態.プロファイル_アクティブ)ビット482およびTAXi_State
.Profile_Request(TAXi_状態.プロファイル_要求)ビ
ット484によって識別される。TAXi_State.Profile_Ac
tive(TAXi_状態.プロファイル_アクティブ)ビット482およびT
AXi_State.Profile_Request(TAXi_状態.プロ
ファイル_要求)ビット484の遷移、したがって状態マシン510の遷移は、
タイマのタイムアウト、プロファイル可能なイベント、およびパケットの中止に
よってトリガされる。イベント「pe」は、X86プログラムの実行におけるプ
ロファイル可能なイベント、すなわち図4bに示した表内において「プロファイ
ル可能」416としてエミュレートされたイベントの1つが完了したことを示す
。タイマのタイムアウトは、図4iとの関連から前述したように、TAXi_T
imers.Profile_Timer(TAXi_タイマ.プロファイル_
タイマ)492のゼロまでのカウント・ダウンおよびリセットである。中止につ
いては後述する。
【0328】 状態512は初期状態であり、Profile_Active(プロファイル
_アクティブ)482(PA)およびProfile_Request(プロフ
ァイル_要求)484(PR)がともにゼロに等しい。状態512においては、
「pe,ap」としてラベル付けされたループ遷移514によって示されるよう
に、プロファイル可能なイベント416および中止イベントが無視される。プロ
ファイル・タイマ492がタイムアウトすると、TAXi_State.Pro
file_Request(TAXi_状態.プロファイル_要求)484が「
1」にセットされ、状態マシン510を状態518に遷移(516)させる。
【0329】 状態518においては、Profile_Request(プロファイル_要
求)484が「1」、Profile_Active(プロファイル_アクティ
ブ)482が「0」であり、Profile_Timer(プロファイル_タイ
マ)492がタイムアウトしたことを示すとともに、プロファイラ400を起動
してプロファイル・パケットの収集を開始させる。しかしながら、最初のプロフ
ァイル可能なイベント416、418がまだ発生していないことから、プロファ
イリングは、まだ実際に進行していない。状態518においては、その後のタイ
マのタイムアウトがキューされるというよりは無視される(ループ遷移520)
。また、中止するプロファイル・パケットの内容が存在しないことから、中止に
ついても無視される(ループ遷移520)。
【0330】 プロファイル・パケット内の最初のエントリは、必ず「開始パケット」プロパ
ティ(図4bの418)を伴うイベントになる。状態518は、最初の「開始パ
ケット」peinitイベント418が発生するまで待機した後、遷移522を
開始する。ループ遷移520上のラベル「peinit」によって示した「開始
パケット」イベント(図4bの418)でないプロファイル可能なイベント(図
4bの416)は無視される。遷移522においては、いくつかのアクション5
24が開始される。TAXi_State.Packet_Reg(TAXi_
状態.パケット_レジスタ)フィールド489が、TAXi_Control.
Packet_Reg_First(TAXi_コントロール.パケット_レジ
スタ_先頭)476から初期化される。ハードウエアがGlobal_Time
stamp(グローバル_タイムスタンプ)プロセッサ・レジスタからPack
et_Timestamp(パケット_タイムスタンプ)コントロール・レジス
タ内に(あるいは、別の実施態様においては、最初のプロファイル・イベント取
り込みレジスタに先行する汎用レジスタ内に)タイムスタンプを取り込む。Co
ntext_At_Point(コンテキスト_アット_ポイント)エントリ4
30がTAXi_State.Packet_Reg(TAXi_状態.パケッ
ト_レジスタ)489によって示される汎用レジスタ内に取り込まれる。判断ボ
ックス526においては、TAXi_State.Packet_Reg(TA
Xi_状態.パケット_レジスタ)489がインクリメントされ、TAXi_C
ontrol.Packet_Reg_Last(TAXi_コントロール.パ
ケット_レジスタ_末尾)478と比較が行なわれる。最初のプロファイル・エ
ントリの場合は、パケット・レジスタがフルになることはなく、したがってコン
トロールがパス528に沿って移動する。TAXi_State.Profil
e_Active(TAXi_状態.プロファイル_アクティブ)482が「1
」にセットされ、TAXi_State.Profile_Request(T
AXi_状態.プロファイル_要求)484が「0」にクリアされ、状態マシン
510が状態530に入る。
【0331】 パケット内のこの最初のエントリは、コンバータ136によるContext
_At_Point(コンテキスト_アット_ポイント)エントリ430の生成
を可能にする環境に過ぎない。プロファイル・パケット内の2番目およびそれ以
降のエントリについては、コンバータ136がNear_Edge(ニア_エッ
ジ)エントリ440のみを生成する。パケット内のその後のContext_A
t_Point(コンテキスト_アット_ポイント)エントリ430は、すべて
RFEメカニズムによって生成される。
【0332】 状態530においては、Profile_Request(プロファイル_要
求)484が「0」であり、Profile_Active(プロファイル_ア
クティブ)482が「1」である。少なくとも1つのプロファイル可能なイベン
ト(図4bの416)が認識されて記録され、プロファイル・パケット420が
進められ、プロファイラ400は、次のプロファイル可能なイベント416を待
機する。次のプロファイル可能なイベント416が発生すると(532)、その
プロファイル可能なイベントがTAXi_State.Packet_Reg(
TAXi_状態.パケット_レジスタ)489によって示される汎用レジスタ内
に記録される(534)。TAXiインストラクションによってイベントが取り
込まれると(後述する図5bの説明を参照されたい)、コントロールが判断ボッ
クス526に到達する。プロファイル・レジスタの範囲がフルでなければ((T
AXi_State.Packet_Reg(TAXi_状態.パケット_レジ
スタ)489++<TAXi_Control.Packet_Reg_Las
t(TAXi_コントロール.パケット_レジスタ_末尾)478−TAXi_
State.Packet_Reg(TAXi_状態.パケット_レジスタ)フ
ィールド489の古い値)が吟味された後、TAXi_State.Packe
t_Reg(TAXi_状態.パケット_レジスタ)489がインクリメントさ
れる)、コントロールが状態530に戻り(528)、プロファイル可能なイベ
ント416の収集をさらに続ける。プロファイル・レジスタがフルの場合(TA
Xi_State.Packet_Reg(TAXi_状態.パケット_レジス
タ)489がTAXi_Control.Packet_Reg_Last(T
AXi_コントロール.パケット_レジスタ_末尾)478に等しい)、マシン
は、プロファイル例外536を取る。TAXi_State.Packet_R
eg(TAXi_状態.パケット_レジスタ)489は、比較の後にインクリメ
ントされる。プロファイル例外ハンドラは、収集したプロファイルを、アクショ
ン524において取り込まれたタイムスタンプとともにメモリ内のリング・バッ
ファ内にストアする。リング・バッファ内の次のロケーションをポイントするリ
ング・バッファの書き込みポインタは、R15(表1のRingBuf」)によ
って示されるロケーションにストアされる。R15が示すロケーションに収集済
みプロファイルがストアされた後、R15は、プロファイル・パケットのサイズ
を用いてポスト‐インクリメントされる。TAXi_State.Profil
e_Active(TAXi_状態.プロファイル_アクティブ)482および
TAXi_State.Profile_Request(TAXi_状態.プ
ロファイル_要求)484がともに「0」にクリアされコントロールが開始状態
512に戻る(538)。
【0333】 状態マシン510が状態530にある間に、つまりプロファイル・パケットの
進行中にTAXi_Timers.Profile_Timer(TAXi_タ
イマ.プロファイル_タイマ)492がタイムアウトすると状態マシン510が
TAXi_State.Profile_Active(TAXi_状態.プロ
ファイル_アクティブ)482およびTAXi_State.Profile_
Request(TAXi_状態.プロファイル_要求)484をともに「1」
にセットし、状態542に遷移する(540)。
【0334】 状態542の振る舞いは、おおむね状態530に類似であり、部分的に完成し
たパケットが進行され、新しいプロファイル可能なイベント416が生じるとそ
のログ(544)が行なわれる。状態530と状態542の違いは、パケットが
完成したときに現れる。状態542からのプロファイル・レジスタ−フル例外5
48は、プロファイル例外536と同様にプロファイル・レジスタをメモリに移
すが、遷移546の一部として、TAXi_State.Profile_Re
quest(TAXi_状態.プロファイル_要求)484を「1」にセットし
て状態518に遷移する点が、それを「0」にセットして状態512に遷移し、
次のタイムアウト(516)を待機する遷移538とは異なる。状態518から
は、次のタイムアウト(516)を待機することなく、直ちに次の「開始パケッ
ト」イベント418に応答して次のパケットの収集を開始することができる。こ
れは、保留されているタイムアウトの、1レベルのキューイングをもたらす。
【0335】 プロファイル・パケットの収集は、多くのイベントによって、パケットの途中
で中止されることがある(550、552)。たとえば、中止パケット・イベン
ト・コードが与えられることがある(図4bの行0.1011)−−このイベン
ト・コードを伴うRFEは、TAXi_State.Profile_Acti
ve(TAXi_状態.プロファイル_アクティブ)482をクリアし、続いて
それがカレント・プロファイル・パケットを破棄し、少なくとも次のプロファイ
ル・タイマのタイムアウトまで、プロファイル収集を中止する。プロファイリン
グのイネーブルに関する述部(前述のセクションV.EにおけるTAXi_Co
ntrol(TAXi_コントロール)460の説明から)が満たされなくなる
場合には、パケットが中止される。たとえば、良好な振る舞いを有していないメ
モリのページ(たとえばI/Oバス上のページ)にコントロールが渡った場合、
あるいは4KのページI−TLBエントリを有していないページ上にインストラ
クションのバイトがある場合、またはX86実行モードが、TAXi_Cont
rol.Global_TAXi_Enables(TAXi_コントロール.
グローバル_TAXi_イネーブルズ)ビット470、472においてプロファ
イリングがイネーブルされていないモードに遷移した場合には、パケットが中止
されることになる。この中止プロトコル(550、552)は、ホット・スポッ
ト・ディテクタ122に対して、脱漏を招くことなく、各パケットがX86マシ
ンの実際の実行パスを記述することを保証する。
【0336】 X86コードから『タペストリー』コードへの遷移は(たとえば、プローブ例
外の成功;後述のセクションVIを参照されたい)、中止(550、552)イ
ベントとなることがある。プロファイラ400は、その構成から、中止したパケ
ットを完全に破棄するか、あるいはパディング後に部分的なパケットを、中止(
550、552)が発生する前にリング・バッファに移すかを選択することがで
きる。この選択は、X86−『タペストリー』遷移ハンドラ320のコード内に
インプリメントされている。
【0337】 図5bは、プロファイラ400の一部の、プロファイル・エントリ430、4
40をプロセッサ・レジスタ内に収集し、フォーマットを行うロジック554を
示したブロック図である。ロジック554に対する入力には、TAXi_Sta
te(TAXi_状態)レジスタ480、およびコンバータ136内においてX
86インストラクション・デコード・ロジック556によって生成された多数の
ラインが含まれる。ロジック554の出力は、レジスタ594内のプロファイル
・エントリである。ロジック554は、全体的にはプロセッサのパイプラインに
類似であり、パイプライン・ステージが図5bの水平の帯状に表され、プロセッ
シングが図の上から下に向かう。各ステージは、X86のインストラクション境
界566によってクロックされる。ここで、前述の図1cの説明から、整列ステ
ージ130がX86インストラクション・ストリームをパーズし、完全なX86
インストラクションおよびストアされた形式の空間的な境界を識別していたこと
を想起されたい。変換ステージ134、136は、さらにX86インストラクシ
ョンをデコードし、複雑なX86 CISCを『タペストリー』パイプライン1
20による実行のための単純なRISCインストラクションに分解する。X86
インストラクションの間の時間分割は、コンバータ136から発行された構成上
の『タペストリー』インストラクションのレシピの最後のインストラクション上
におけるタグ566によってマークされる。X86インストラクションの間の時
間境界は、『タペストリー』PSWのビット、PSW.X86_Complet
ed(PSW.X86_完了)566内にフラグ設定される。コンバータ・レシ
ピ内の最初のネイティブ・インストラクション(『タペストリー』インストラク
ションとなることもある)は、PSW.X86_Completed(PSW.
X86_完了)566を「0」にリセットする。コンバータ・レシピ内の最後の
ネイティブ・インストラクションは、PSW.X86_Completed(P
SW.X86_完了)566を「1」にセットする。コンバータ・レシピが含ん
でいるネイティブ・インストラクションが1つだけである場合には、PSW.X
86_Completed(PSW.X86_完了)566が「1」にセットさ
れる。エミュレータ・トラップが、コンバータ・レシピの最後のインストラクシ
ョンになることが保証されているため、エミュレートされたインストラクション
・レシピの正常な完了に応答して、PSW.X86_Completed(PS
W.X86_完了)566が「1」にセットされる。
【0338】 『タペストリー』プロセッサは、プロセッサ・レジスタ594から汎用レジス
タ内にプロファイル・エントリを取り込むための特殊なインストラクションを提
供する。この特殊なインストラクションは、「TAXiインストラクション」と
呼ばれる。TAXiインストラクションは、プロファイル・エントリの取り込み
がなされようとしているときに『タペストリー』パイプライン内に差し込まれる
。ここで、前述の図1cの説明から、コンバータ136が各X86インストラク
ションをX86インストラクションに関する「レシピ」に従って1ないしは複数
の『タペストリー』インストラクションに分解していたことを想起されたい。T
AXiインストラクションは、プロファイラ400およびコンバータ136の協
働の下にパイプライン内に差し込まれるもう1つの『タペストリー』インストラ
クションに過ぎない。つまり、プロファイル生成は、基本的な『タペストリー』
インストラクション実行サイクルの統合された一部である。TAXiインストラ
クションは、通常、コントロールの移動のディスティネーションにおけるインス
トラクションに関するレシピの開始時にパイプライン内に差し込まれる。ハード
ウエアをインプリメントする側の選択肢として、TAXiインストラクションを
『タペストリー』インストラクション・セット内にエンコーディング可能でない
特殊な移動インストラクションとするか、プロセッサ・レジスタから移動可能で
あるとすることができる。インプリメンテーション上の選択に応じて、インスト
ラクションを「レジスタ594から汎用レジスタTAXi_State.Pac
ket_Reg(TAXi_状態.パケット_レジスタ)フィールド489に移
動」の形式とすることも可能であり、またコンバータ136がレジスタ594の
内容を抽出し、この64ビットのデータのムーブ‐イミディエート(イミディエ
ートを移動)を、TAXi_State.Packet_Reg(TAXi_状
態.パケット_レジスタ)489によって指定されるプロファイル収集汎用レジ
スタに差し込むこともできる。
【0339】 整列および変換のパイプライン・ステージ(図1cの130、134、136
)のインストラクション・デコード・ロジック556は、カレント・インストラ
クションおよび各インストラクションの特定の他のプロファイル可能なプロパテ
ィを記述する信号558〜562を生成し、この記述がラッチされる。生成され
る情報には、インストラクションの長さ558(インストラクションがプロファ
イル可能なNear_Edge(ニア_エッジ)イベント416を生成する場合
には、Near_Edge(ニア_エッジ)エントリ440のdone_len
gth(終了_長さ)441(ビット<64:61>)になる)、インストラク
ションの最後のバイトに関するページ・フレーム559(Near_Edge(
ニア_エッジ)エントリ440のdone_byte(終了_バイト)445(
ビット59:44>))、および次のインストラクションの最初のバイトのペー
ジ・フレーム560およびバイトのオフセット561(Near_Edge(ニ
ア_エッジ)440またはContext_At_Point(コンテキスト_
アット_ポイント)430のビット<27:00>、すなわちnext_fra
me(次の_フレーム)438、448およびnext_byte(次の_バイ
ト)439、449)。さらにデコード・ロジック556によって生成されるも
のの中には、コンバータ136がそのインストラクションを実行するときにX8
6インストラクションに関連付けされる生のイベント・コード562、そのイン
ストラクションがページ境界上で終了するか、あるいはそれをまたぐかの表示5
63、そのインストラクションがコントロールの移動であるか(条件付きまたは
条件なし)の表示584、PC相対ブランチが順方向か逆方向かの表示、および
コンバータ136は現在アクティブか否かの表示(続いてそれがPSWからコピ
ーされる)590がある。
【0340】 次のX86インストラクションの境界566において、完了直後のインストラ
クションからの情報が信号558、559、561からレジスタ568、569
、570にクロックされる。レジスタ568、569、570は、X86インス
トラクションに関する時間的にシフトする情報を、プロファイル・エントリの取
り込みが行なわれる場合に、次のインストラクションの間において使用できるよ
うにするための単なるバッファである。ネイティブのコントロール移動インスト
ラクションが必ず、X86移動インストラクションに関するレシピの最後のイン
ストラクションになることから、移動のディスティネーションのアドレスの仮想
‐物理アドレス変換は(特に、TLBミスの場合)、移動インストラクション自
体が完了するまで得られない。イベントの取り込みが行なわれようとしている場
合には、TAXiプロファイル取り込みインストラクションが、ディスティネー
ション・インストラクションのレシピ内における最初のインストラクションとし
てパイプライン内に差し込まれる。このように、時間的なシフトは、ディスティ
ネーションのアドレス変換が解決されるまでプロファイル・エントリの取り込み
を遅延させる。レジスタ569、570は、ともにNear_Edge(ニア_
エッジ)プロファイル・エントリ430の「done(終了)」部分(ビット<
59:32>)を用いて、28ビットのバス572をドライブする。
【0341】 同時に、Context_At_Point(コンテキスト_アット_ポイン
ト)エントリ440のビット<59:32>に相当する形式のカレントX86イ
ンストラクションに関するX86プロセッサ・コンテキストが、28ビットのバ
ス574において使用可能になる。
【0342】 イベント・コードは回路576、591によって生成され、以下に説明するよ
うにプロファイル・エントリの取り込みをコントロールするために使用される。
【0343】 X86インストラクション・デコード・ロジック556が、各X86インスト
ラクションに関する新しい生のイベント・コード562を生成する。このイベン
ト・コードは、コントロール移動インストラクション(図4bのイベント・コー
ド1.0000〜1.1011)、ページ・フレームの最後のバイトをまたぐか
、その上で終了するインストラクション(図4bのコード1.1111(408
))、あるいはそのほかすべてのケースに関するデフォルトのコンバータ・イベ
ント・コード(図4bの1.1110(406))を指定する。(エミュレータ
316内において実行されるインストラクションに関しては、コンバータ136
によるそのインストラクションのパーズに従って、ロジック576、578がデ
フォルトのイベント・コード1.1110(406)またはページ渡りを示すイ
ベント・コード1.1111(408)を生成し、その後この生のイベント・コ
ード562が、X86インストラクションのエミュレーション・ルーチンの最後
にRFEインストラクションのイベント・コード・イミディエート・フィールド
588によって上書きされるか、選択される。)
【0344】 インストラクションがコントロール移動インストラクションでない場合には、
回路578が「ページ境界をまたぐ」信号563を使用して下位ビットをセット
することにより、2つの特殊な「非イベント」イベント・コード1.1110(
406)および1.1111(408)(シーケンシャル・フローまたはページ
の渡り)を作る。
【0345】 MUX 580は、インストラクション・デコード・ロジック556によって
生成された生のイベント・コード562、および回路578からの1.111x
「非イベント」イベント・コード406、408の中から、次に示すメカニズム
により選択を行って最終的なコンバータ・イベント・コード582を生成する。
カレント・インストラクションがライン584によって示されるような「コント
ロール移動」(条件なしまたは条件付きの移動)であるか、あるいはブランチの
予測子によってブランチが行なわれると予測(586)されている場合、MUX
580がデコード・ロジック556によって生成された生のイベント・コード
562を選択するが、それ以外の場合には、MUX 580が1.111x回路
578からの「非イベント」イベント・コードを選択する。
【0346】 ブランチが行なわれると予測(586)されている場合には、MUX 580
が、インストラクションに関連付けされている生の条件付きブランチ・イベント
・コード562を選択する。ブランチが行なわれないと予測(586)されてい
る場合には、MUX 580が、回路578から1.111x「非イベント」イ
ベント・コード(ページ境界イベント・コード1.1111(408)もしくは
デフォルトのイベント・コード1.1110(406)のいずれか)を選択する
。ここで、ネイティブのコントロール移動インストラクションが、必ず、X86
移動インストラクションに関するレシピの最後のインストラクションになり、T
AXiプロファイル取り込みインストラクションが、プロファイル可能な移動の
ディスティネーションレシピ内の最初のインストラクションとしてパイプライン
内に差し込またことを想起されたい。つまり、ブランチの予測586が正しくな
いとわかった場合には、レジスタ594の内容をTAXi_State.Pac
ket_Reg(TAXi_状態.パケット_レジスタ)489によってポイン
トされる次の汎用レジスタの内容を取り込むTAXiインストラクションも含め
て、コンバータ136から下流の全パイプライン(図1cの120)がフラッシ
ュされる。(これは、そのTAXiインストラクションが、X86レシピの末尾
になるネイティブ・ブランチ・インストラクションに続くパイプラインに差し込
まれることによる。)インストラクション・ストリームが、予測誤りのブランチ
からリターンされる。このリターンに応答して、ブランチ予測ライン586に正
しい予測値が表明され、それによりMUX 580が正しいイベント・コードを
選択し、TAXiインストラクションが正しく差し込まれるか、あるいは差し込
まれないことになる。このイベント・コードの解決によって、プロファイル・パ
ケットは、ページ境界をまたぐ(もしくは境界上で終わる)、採用されたブラン
チもしくは採用された条件付きブランチを適正に記録し、かつページ境界をクロ
スしない、採用されなかったブランチを適正に除外することが可能になる。
【0347】 エミュレートされたインストラクションの場合、コンバータ136が、デフォ
ルトまたは新規ページのイベント・コード578のいずれかになるイベント・コ
ード582を常に供給する。コンバータ136が完全にすべてのインストラクシ
ョンをデコードすることから、それによりデフォルトまたは新規ページのイベン
ト・コード578に代えて、「遠い」コントロール移動インストラクション(「
遠い」CALL(呼び出し)、「遠い」JMP(ジャンプ)、「遠い」RET(
リターン)またはIRET)に対応するイベント・コードを供給することができ
る。このイベント・コードは、エミュレータ・トラップ・レシピの一部としてラ
ッチされる。エミュレータ316がページ・フレームをまたぐインストラクショ
ンを完了し、単純なX86インストラクション完了イベント・コード0.000
1を伴って、コンバータ136に戻るRFEを行ったとき、Event_Cod
e_Latch(イベント_コード_ラッチ)(486、487;図4iのビッ
ト<44:40>)内の新規ページのイベント・コード1.1111(408)
が使用されることになる。上位ビットがセットされていることから、再使用イベ
ント・コード414のRFEによって、Near_Edge(ニア_エッジ)プ
ロファイル・エントリが取り込まれる;このRFEが、Near_Edge(ニ
ア_エッジ)を必要とするデータ依存のコンテキスト変更を含意しないことから
これは誤りではない。エミュレータ316が、Event_Code_Latc
h(イベント_コード_ラッチ)を再利用(414)しないRFEイベント・コ
ードを供給する場合には、RFEイベント・コード588がラッチされる。この
規約によって、プロファイル・パケットは、ページ・フレームをまたぐ、注目し
ているエミュレートされたインストラクションまたは単純なエミュレートされた
インストラクションを記録することができる。
【0348】 同様に、X86インストラクションが失敗し、リスタートしなければならない
場合には、そのインストラクションに関するプロファイル情報558、559、
560、561、562、563、584が再生成され、そのインストラクショ
ンと並行してパイプライン554に流れ込む。たとえば、TLB内においてイン
ストラクションのフェッチのミスが生じた場合には、TLBミス・ルーチンが起
動してTLBを更新し、プロファイル・パイプライン内において、再生成された
プロファイル情報とともにインストラクションがリスタートされる。
【0349】 RFEインストラクションのイミディエート・フィールド(図4bの410)
からイベント・コード588が到来する場合、Converter_Activ
e(コンバータ_アクティブ)ライン590が、下位4ビットに関してコンバー
タ・イベント・コード582とRFEイミディエート・イベント・コード588
の間を選択する選択ライン590aとしてMUX 591に供給されるとともに
、イベント・コード402の上位ビット590bとして供給され、5ビットのイ
ベント・コード592が形成される。このイベント・コード592は、TAXi
_State.Event_Code_Latch(TAXi_状態.イベント
_コード_ラッチ)(486、487;図4iのビット<44:40>)内にラ
ッチされる。(ここで、TAXi_State.Event_Code_Lat
ch(TAXi_状態.イベント_コード_ラッチ)486、487を、レジス
タ568、569、570によって定義されるパイプライン・ステージの一部と
して捕らえてもよい。)図5bには示していないものに、図4bの「再使用イベ
ント・コード」414の効果がある:すなわち、RFEインストラクションが「
再使用イベント・コード」イベント・コード・イミディエート(0.0000〜
0.0011)を伴って完了した場合には、TAXi_State.Event
_Code_Latch(TAXi_状態.イベント_コード_ラッチ)486
、487の更新が抑圧され、古いイベント・コードがそのまま残される。
【0350】 各X86インストラクションは、64ビットのレジスタ594内において、C
ontext_At_Point(コンテキスト_アット_ポイント)エントリ
430もしくはNear_Edge(ニア_エッジ)エントリ440のいずれか
を具体化する。2つの可能性のあるビットのセット568、572、574が、
MUX 596a、596bに渡され、それらの中からビットTAXi_Sta
te.Event_Code_Latch(TAXi_状態.イベント_コード
_ラッチ)<4>487が選択を行う。ここで、たとえばアンド・ゲート598
から「1」を出力させてNear_Edge(ニア_エッジ)エントリ440を
生成するためには、TAXi_State.Profile_Active(T
AXi_状態.プロファイル_アクティブ)482が真でなければ(図5aに示
した状態530および542)ならないことに注意する必要がある。;これは、
Context_At_Point(コンテキスト_アット_ポイント)エント
リ430が必ずNear_Edge(ニア_エッジ)エントリ440に先行しな
ければならないという規則を順守させることになる。つまり、TAXiインスト
ラクションが発行されたとき、Profile_Active(プロファイル_
アクティブ)482が「0」であれば(図5aに示した状態512および518
)、Context_At_Point(コンテキスト_アット_ポイント)エ
ントリは、必ずフォース・アウトされる。
【0351】 プロファイラ400によって、レジスタ594内のエントリを実際にプロファ
イル内に取り込む必要があると判断されると、コンバータ136がレジスタ59
4からプロファイル情報を取り込むために、『タペストリー』パイプライン12
0内の、プロファイル済みのX86インストラクションと次のX86インストラ
クションの境界566にTAXiプロファイル取り込みインストラクションを差
し込む。
【0352】 実施態様によっては、複数のTAXiインストラクションを差し込んで種類の
異なるプロファイル情報を取り込むと望ましいことがある。たとえば、複数のT
AXiインストラクションにより、タイムスタンプ、コンテキスト(Conte
xt_At_Point(コンテキスト_アット_ポイント)エントリ430に
類似)、コントロール・フロー・イベント(Near_Edge(ニア_エッジ
)エントリ440に類似)を取り込むことが可能であり、またある1つの差し込
まれたインストラクションが所望の情報を演算し、それに続くインストラクショ
ンがその情報をメモリにストアするということもできる。一時的にプロファイル
情報をアーキテクチャ上アドレス可能でないレジスタ内に収集し、ストレージ・
リソースのコンテンションを抑えると望ましいことがある。この一時的なレジス
タに対するアクセスをスケジュールするためにレジスタ・コンフリクト・スケジ
ューリング・ハードウエアを使用しなければならない一方、このレジスタの追加
は、プロファイラ400のオペレーションをプロセッサの残りの部分から分離す
る。
【0353】 TAXiインストラクションは、次に示す条件がすべて満たされたとき差し込
まれる(かつ、図5aの状態マシン510において「pe」イベント416が移
動をトリガする):すなわち、(1)現在マシンがTAXi_Control(
TAXi_コントロール)ビット<53:51>内においてイネーブルされてい
るモードで実行中であること(つまり、カレントX86インストラクション・コ
ンテキストおよびTAXi_Control.Global_TAXi_Ena
bles(TAXi_コントロール.グローバル_TAXi_イネーブルズ)4
70、472のAND(論理積)がゼロでないこと)、(2)マシンがX86イ
ンストラクションの境界にあること、(3)カレント・インストラクションのす
べてのバイトが4KのページI−TLBエントリを有していること、(4)カレ
ント・インストラクションのすべてのバイトが良好な振る舞いの(アドレス空間
ゼロの)メモリI−TLBエントリを有していること、および(5)次のうちの
少なくとも1つが真であること:(a)プロファイル収集がイネーブル(TAX
i_State.Profile_Active(TAXi_状態.プロファイ
ル_アクティブ)482が「1」)されており、TAXi_State.Pro
file_Request(TAXi_状態.プロファイル_要求)484が「
1」であり、TAXi_State.Profile_Active(TAXi
_状態.プロファイル_アクティブ)482が「0」であり、およびTAXi_
State.Event_Code_Latch(TAXi_状態.イベント_
コード_ラッチ)486、487に現在ラッチされているイベント・コードが「
開始パケット」プロパティ(図4bの418)を有していること、あるいは(b
)TAXi_State.Profile_Active(TAXi_状態.プ
ロファイル_アクティブ)482が「1」であり、TAXi_State.Ev
ent_Code_Latch(TAXi_状態.イベント_コード_ラッチ)
486、487が「プロファイル可能」(図4bの416)であること、あるい
は(c)TAXiプローブ例外が生成されること(これは従属的なプロファイリ
ングであるが、プロービングをコントロールするためのむしろ都合の良いメカニ
ズムである;後述のセクションVI.CおよびVI.Dを参照されたい)である
【0354】 マシンは、X86インストラクションの規則に従った実行の割り込みの間に、
たとえばTLBミス、ページ違反、ディスク割り込み、またはその他の非同期割
り込みの間に、X86コンバータ136にクエリを行い、ネイティブ実行に切り
替える。ネイティブ実行の間は、X86インストラクション境界のクロック56
6が停止される。X86クロック566が停止されていることから、X86イン
ストラクションのNear_Edge(ニア_エッジ)状態が、X86の実行再
開までレジスタ568、569、570内に保持される。
【0355】 ここで、図5bの実施態様において、プロファイリングがX86の実行間に限
ってアクティブになることに注意されたい。別の実施態様においては、TAXi
トランスレータ124によってX86から翻訳されたネイティブ『タペストリー
』インストラクションの実行間にプロファイラ400がアクティブになり、その
結果、プロファイラ400によって生成された情報を次の翻訳にフィードバック
して、その部分が次回翻訳されるときの最適化を向上させることができる。『タ
ペストリー』プログラムによるレジスタの使用は、コンパイラによって制限され
ており、そのため残りのレジスタに対して、プロファイル・エントリのストアを
行うことができる。
【0356】 この方法を用いて、TAXi_Control.Profile_Timer
_Reload_Constant(TAXi_コントロール.プロファイル_
タイマ_再ロード_定数)(図4gの494)を調整することができる。ホット
・スポット・ディテクタ122によって、プログラムのワーキング・セットが緩
やかに変化している(つまり、ホット・スポットの大部分が以前に検出したホッ
ト・スポットとオーバーラップしている)ことが示される場合、プロファイラ4
00が非常に高い頻度で起動される。その場合には、TAXi_Control
.Profile_Timer_Reload_Constant(TAXi_
コントロール.プロファイル_タイマ_再ロード_定数)494が増加されて、
プロファイリングの頻度が抑えられる。同様に、ホット・スポット・ディテクタ
122が、ホット・スポット・ディテクタの起動と起動の間においてワーキング
・セット内に大きな変化があることを検出したとき、それに応じてTAXi_C
ontrol.Profile_Timer_Reload_Constant
(TAXi_コントロール.プロファイル_タイマ_再ロード_定数)494を
下げることができる。
【0357】 TAXi_Control.Profile_Timer_Reload_C
onstant(TAXi_コントロール.プロファイル_タイマ_再ロード_
定数)494に関する別の調整方法においては、バッファのオーバーランが重視
される。プロファイル収集レジスタの範囲がフルになると、プロファイル・レジ
スタがメモリ内のリング・バッファに移される(図5aの536および548)
。ホット・スポット・ディテクタ122は、このリング・バッファからのプロフ
ァイル情報を消費する。プロファイラ400がホット・スポット・ディテクタ1
22をオーバーランし、リング・バッファがオーバーフローすると、TAXi_
Control.Profile_Timer_Reload_Constan
t(TAXi_コントロール.プロファイル_タイマ_再ロード_定数)494
が増加され、プロファイル情報の収集が行なわれる頻度が下げられる。それに対
して、バッファがオーバーランしているときには、ホット・スポット・ディテク
タ122が起動される頻度を高くすることができる。
【0358】 G.4ビット記憶形式からの5ビット事象コードの決定 再度図4b、4c、および4dを参照すると、プロファイル・エントリ(Co
ntext_At_Point(コンテキスト_アット_ポイント)エントリ4
30またはNear_Edge(ニア_エッジ)エントリ440)内のイベント
・コード・フィールド436、446は4ビットである。4ビットを用いてエン
コーディングできる値が16しかなく、図4bに分類されたイベントのクラスが
32であることから、上位ビットを以下のようにして回復する。
【0359】 Near_Edge(ニア_エッジ)エントリ440がパケット内の最初のエ
ントリになることはない。その省略された上位ビットは、必ず「1」になり、し
たがってNear_Edge(ニア_エッジ)エントリ440は、常に図4bの
下側半分404に含まれるイベントを記録する。このイベントは、常にコンバー
タ136(または1.111x非イベント回路578)によって生成され、図5
bのライン582において具体化される。
【0360】 Context_At_Point(コンテキスト_アット_ポイント)43
0がパケット内の最初のエントリでない場合、省略された上位ビットは、必ず、
図4bの上側半分410に含まれるイベントであることを反映した「0」になる
。これらの非開始Context_At_Point(コンテキスト_アット_
ポイント)エントリ430は、常にRFEイベントによって生成される。
【0361】 各パケットは、Context_At_Point(コンテキスト_アット_
ポイント)エントリ430を伴って開始し、その場合のContext_At_
Point(コンテキスト_アット_ポイント)は、「開始パケット」プロパテ
ィ(図4bの418)を伴うイベントである。イベント・コード402は、慎重
に割り当てが行なわれ、その結果、1組のRFEイベント・コード(図4bの下
側半分404)およびコンバータ・イベント・コード(図4bの上側半分410
)だけがともに同一の下位4ビットを共有し、かつ「開始パケット」プロパティ
418を有する。それらは、イベント・コード0.0110および1.0110
、すなわち「近い」RET(リターン)および「遠い」RET(リターン)であ
る。つまり、上位の5番目のビットは、パケット内の最初のイベントの4ビット
のイベント・コード436、446を用いてルックアップを行うことによって、
次に示すように回復することができる。
【0362】 0000 −> 1 1000 −> 0 0001 −> 1 1001 −> 0 0010 −> 1 1010 −> 1 0011 −> 1 1011 −> 1 0100 −> 1 1100 −> 0 0101 −> 1 1101 −> 0 0110 −> * 1110 −> 0 0111 −> 1 1111 −> 0
【0363】 「近い」リターンおよび「遠い」リターン(0.0110および1.0110
)は、同一の下位4ビットを共有するが、そのいずれもパケットの開始において
現れることがある。1つのインプリメンテーションにおいては、「0」または「
1」のいずれかを選ぶことができる。このあいまい性による精度の低下は、許容
可能範囲である。
【0364】 H.プロファイラ、例外およびXP保護/非保護のページプロパティの対話 例外は、いくつかの形でプロファイル収集と相互作用する。 例外の第1のクラスは、『タペストリー』オペレーティング・システム(図3
aの312)によって完全に扱われる。これには、TLB、PTE、およびPD
Eの例外およびすべてのネイティブ固有の例外が含まれる。例外の処理の後は、
収集されたプロファイル・エントリを伴わずに実行が再開される。これらの例外
ハンドラのエンドにあるRFEインストラクションは、シーケンシャルの0.0
000変更なしイベント・コードを使用する。
【0365】 第2のクラスは、プロファイル・レジスタ・フル例外および保護なし例外(前
述のセクションI.Fを参照されたい)を含めたTAXiプロファイリング例外
を包含する。この第2のクラスの例外は、TAXi環境によって定義される特殊
な副次効果を有している。これらの例外は、インストラクションの実行を再開し
、特殊なRFEイベント・コードを使用してプロファイリング環境をコントロー
ルする。
【0366】 第3のクラスは、X86インストラクションのエミュレーションに関するコン
バータ136からのすべてのエミュレータ・トラップを包含する。第3のカテゴ
リに含まれる例外は、追加のプロファイル情報を提供する。エミュレータ316
は、常に、非ゼロRFEイベント・コードを使用してコンバータのオペレーショ
ンを再開する。
【0367】 第4のクラスは、ハードウエア割り込み、ページ違反、ブレークポイント、シ
ングル・ステップ、あるいはコンバータ136もしくはエミュレータ316内に
おいて検出された、X86仮想マシンにとって明らかでなければならないその他
のあらゆるX86例外からのコントロールの、非同期のX86移動を含む。この
第4のクラスの例外は、特殊な機能を有する。エミュレータ316は、X86
IDTを介してコントロール・フローの変更を行おうとするとき、RFE内にお
ける4つのソフトウエア定義イベント・コードのうちの1つを使用する。これら
のイベント・コードは、2つのカテゴリに分けることができる。一方のカテゴリ
は、プロファイリングだけに使用され、他方は、エミュレータ316による任意
のX86コード・ページ上の翻訳済みコードに関するチェックの強制を可能にす
るために使用される。エミュレータ316はプライベート・データ構造を維持し
ており、特定のISRアドレスに関してプローブ・チェックの生成を行うべきか
否かを吟味する。
【0368】 「保護なし」例外(前述のセクションI.Fを参照されたい)とプロファイラ
400の相互作用は次のようになる。保護なし例外の効果の1つは、TAXiイ
ンストラクションを発行して新しいプロファイル・パケットを開始することであ
る。ここで、X86インストラクションが保護されていないプロファイル可能な
ページからフェッチされたとき、保護なし例外がトリガされたことを想起された
い。
【0369】 TAXi_State.Profile_Active 482==1 /
/プロファイリング (TAXi_状態.プロファイル_アクティブ) TAXi_Control.unpr 468==1 //例外のイネーブ
ル (TAXi_コントロール.unpr) ページのI−TLB.ISA 182==1 かつ XP 186==0
//保護なし フェッチ・ページは4KB //中止なし... フェッチ・ページはASI==0 //中止なし...
【0370】 TAXi_State.Profile_Active(TAXi_状態.プ
ロファイル_アクティブ)482は、「開始パケット」(図4bの418)イベ
ントが認識されたとき、そのサイクルのパケットの収集を準備するためにセット
される。TAXiインストラクションは、変換済みのフェッチ・アドレスが既知
となり、次のインストラクションのフェッチに成功した後に、パイプの下流に送
られて次のサイクルにおけるTAXi_State.Profile_Acti
ve(TAXi_状態.プロファイル_アクティブ)482を更新する。TAX
iインストラクションは、TAXi_State.Profile_Activ
e(TAXi_状態.プロファイル_アクティブ)482がクリアされ、TAX
i_State.Profile_Request(TAXi_状態.プロファ
イル_要求)484がセットされ、かつTAXi_State.Event_C
ode_Latch(TAXi_状態.イベント_コード_ラッチ)486、4
87が、Initiate_Packet(開始パケット)418が真になるe
vent_code(イベント・コード)を含んでいるか、あるいはコンバータ
・レシピ内の最初のインストラクションが発行され、TAXi_State.P
rofile_Active(TAXi_状態.プロファイル_アクティブ)4
82がセットされる場合に発行される。保護なし例外ハンドラにおいては、保護
されていないページに対する検出されない書き込みが正しくないプロファイル・
データベースをもたらす可能性があることから、その種のページに関するプロフ
ァイル収集が安全ではないことを念頭に置いた上で、カレント・プロファイル・
パケットを保存するか、あるいはそれを破棄するかを選択することができる。T
AXi_Control.unpr(TAXi_コントロール.unpr)46
8がクリアされると、例外が生成されなくなり、TAXiソフトウエアが、プロ
ファイル・パケットの確認および「保護あり」ページ属性のセットを引き受ける
【0371】 プロファイル・パケット内において参照されるすべてのページは保護されてい
なければならないという規則に対して、2つの狭い例外が存在する−−すなわち
、パケットの開始および終了における境界のケースである。プロファイル・パケ
ット(たとえば、図4aの420)がコントロール移動インストラクションを伴
って終了していた場合、その移動インストラクションの最後のバイト、したがっ
てその移動のソース(done_frame(終了_フレーム)メンバ444)
は保護されたページ上になければならないが、移動のディスティネーション(エ
ントリのnext_frame(次の_フレーム)メンバ438、448)には
その必要がない。同様に、パケットがコントロール移動インストラクション(図
4bの「開始パケット」プロパティ418を有する)を伴って開始する場合、移
動のディスティネーション(next_frame(次の_フレーム)438、
448)は保護されたページ上になければならないが、ソースにはその必要がな
い。後者の場合、パケットがContext_At_Point(コンテキスト
_アット_ポイント)(図4cの430)を伴って開始しなければならないが、
それがイベントのソースを記述しないことから、当然のことながらプロファイル
・パケット内におけるソースは、記述を免れることになる。
【0372】 I.代替実施例 楽観的な順不同コードをいつ生成するか、また保守的な順序どおりコードをい
つ生成するかということに関して良好なヒューリスティックを提供するために、
プロファイル・エントリは良好な振る舞いを有しないI/O空間に対する参照を
記録することができる。1つのメカニズムは、後述のVIII.Bにおいて説明
するコンバータ・イベント・コード1.1100であり、I/O空間に対するア
クセスを記録する。別の実施態様においては、X86コード・ページからの実行
中(PSW.ISAビット194が「1」に等しく、X86 ISAであること
を示しているとき)であり、かつTAXi_State.Profile_Ac
tive(TAXi_状態.プロファイル_アクティブ)(図4hの482)が
「1」であれば、「プロファイルI/O参照」例外がI/O空間の参照時に『タ
ペストリー』オペレーティング・システム312をトラップする。例外ハンドラ
の完了時に、RFEイミディエート・フィールド(図5bの588)がイベント
・コード1.1100を伴うプロファイル・エントリを供給し、I/O空間の参
照を示す。
【0373】 プロファイル・コントロール・レジスタを使用すれば、よりきめ細いレベルに
おいてプロファイリングをコントロールすることができる。たとえば、32ビッ
トを有するレジスタを用いて、各ビット・イネーブルもしくはディセーブルを図
4bに示したイベント・クラスの1つに対応させる。プロファイリングに関する
このほかのコントロールについては、PLA 650との関連から説明を後述す
る。
【0374】 VI.変換を求めるためのプロービング A.プロービングの概要 プロファイラ400は、X86プログラムのプロファイルを生成する。このプ
ロファイルをホット・スポット・ディテクタ122が解析して、実行頻度の高い
コードのセクション、すなわちホット・スポットを識別する。TAXiバイナリ
・トランスレータ124は、ホット・スポットをX86からTAXiコード(T
AXiバイナリ・トランスレータ124によって生成される『タペストリー』ネ
イティブ・コード;機能的にはX86バイナリと等価)に翻訳する。X86バイ
ナリが変更されずに残されることから、それが、TAXiコードにコントロール
を移動する明示的なコントロール・フロー・インストラクションを含むことはな
い。「プロービング」は、対応するTAXiコードに入る有効なエントリ・ポイ
ントを有するX86バイナリ内のポイントに到達したことを認識し、X86バイ
ナリからコントロールを奪い、コントロールをTAXiコードに移動するプロセ
スである。
【0375】 一実施態様においては、各インストラクション・フェッチ・サイクルがテーブ
ルのクエリを行う。このテーブルの各エントリは、X86の物理IP値をTAX
iコードのエントリ・ポイントのアドレスにマップする。たとえば、大きな連想
メモリにより、X86の物理IP値をTAXiコード・セグメントへのエントリ
・ポイントにマップすることができる。TAXiコードのセグメント数は、通常
、多くとも数百の規模となり、TAXiコード・セグメントのトップにおいての
み実行が入ることが可能であり、それが途中からとなることはない。このように
このマッピング内には、たかだか数百のエントリのみが、任意の時点で任意のポ
イントにおいて有効になっている。このように希薄なマッピングは、概略でキャ
ッシュの1つのサイズに等しい連想メモリ内にインプリメントすることが可能で
ある。その反面、このテーブル内においてヒットが得られるレートは極めて低い
。概念的なことを述べれば、後述する別の実施態様においては、少ないチップ・
リソースを使用してこの種の連想メモリのエミュレーションに努めている。
【0376】 別の実施態様においては、X86物理IP値から『タペストリー』エントリ・
ポイントへのマッピングがテーブル内のメモリにストアされ、TLBと同様に、
このマッピング・テーブルにおけるもっともアクセス頻度の高い部分がキャッシ
ュ内に維持される。このマッピング・テーブル内の各エントリは、付随するエン
トリが有効であるか否かを示す有効ビットを有している。各インストラクション
・フェッチ・サイクルの間は、このテーブルのキャッシュ済みコピーに対してク
エリが行なわれる。この場合にも、このテーブル内においてヒットが得られるレ
ートは極めて低くなる。
【0377】 さらに別の実施態様においては、ビット・ベクトルが各バイト(または、可能
性のある各インストラクションの開始もしくは各基本ブロック)対応するビット
、すなわちX86インストラクション空間のそのバイトに対応するTAXiコー
ドに対するエントリ・ポイントの有無を示すビットを有している。マッピング・
テーブル内の各エントリは、X86マシン状態の仮定を示す、当該エントリに関
連付けされたTAXiコード内にコーディングされるマシン状態の述部、および
TAXiエントリ・ポイントに関するアドレスを含んでいる。この実施態様にお
いては、プロービングが3ステップのプロセスとしてインプリメントされる:す
なわち、ビット・ベクトルのクエリを行い、翻訳のマッピングの有無を調べ、存
在する場合にはマッピング・テーブル内を探し、それが見つかると、X86マシ
ンのカレント状態がそのテーブルのエントリ内にリストされている前提条件を満
たすか否かを検証する。このビット・ベクトルは極めて大きく、全メモリの1/
9に達する可能性がある。さらにビット・ベクトルおよびテーブルのクエリは、
キャッシュを改ざんする傾向がある。この実施態様においては、ビット・ベクト
ルのクエリが成功した後に例外が生じ、テーブルのクエリが例外ハンドラ・ソフ
トウエアによって実行される;したがって例外は、ビット・ベクトル内の対応す
るビットをセットしているアドレス、すなわち有効なTAXiコード・エントリ
・ポイントを有しているアドレスに関してのみ例外が生じる。
【0378】 さらに別の実施態様においては、ビット・ベクトル内の各ビットがX86コー
ドのページに対応する。対応する翻訳とともに、ページ上のいずれかの場所にX
86インストラクションが存在する場合には、そのビット・ベクトル内の対応す
るビットがセットされる。その後、TAXiコード・セグメントに対するエント
リが続く可能性のある各イベントにおいて、マッピング・テーブルがプローブさ
れてその種の翻訳の有無が調べられる。つまり、このインプリメンテーションは
、前のパラグラフの実施態様よりビット・ベクトルの保持に使用するメモリが少
ないが、対応するTAXiエントリ・ポイントを有するインストラクションだけ
でなく、テーブルにクエリを行うそのページからのインストラクションのフェッ
チごとに例外を生成する。この実施態様は、翻訳が比較的少数のあまり頻繁でな
いイベント、たとえばサブルーチンのエントリ、あるいはループのトップに限ら
れる場合に極めて良好に機能する。
【0379】 ページに関連付けされたビットは、ほかのページ・プロパティ180、186
と同様に、TLB内にキャッシュすることができる。 次のセクションで詳細に論じている実施態様においては、TAXiが、スペー
ス(ページ)、時間(プローブ・タイマを使用)、およびイベント・コード(プ
ロファイリングに使用したイベント・コード402に同じ)によって可能性のあ
るイベント空間を分割する。
【0380】 B.統計学的プロービングの概要 TAXiプローバ600は、統計学的ヒューリスティックのセットを、いつT
AXi翻訳がTAXiコード・バッファ内に存在する可能性が極めて高くなるか
ということに関する、有益な選択肢のセットを作る上での補助として使用する。
1つのイベントが発生するごとに、たとえばそれぞれのルーチン呼び出しごとに
翻訳をプローブするのではなく、TAXiプローバ600は、単純なコントロー
ルの移動、条件付きジャンプ、「近い」呼び出し、「遠い」呼び出し、およびX
86割り込みの引き渡しを含めた、より大きなイベントのクラス上においてプロ
ーブを行い、膨大な数のクラス上のプローブ数を成功の可能性のある数まで絞り
込む統計学的メカニズムを使用する。統計学的プローブ・メカニズムは、プロー
ブ例外とTAXiコードを実行する実際の機会の間に高い相関が得られるように
設計されている。
【0381】 TAXiは、可能性のあるプログラム・イベントの空間を空間的、論理的、か
つ時間的に分割し、それによりX86コード空間/ロジック/時間の間における
、必ずしも常に正しくはないが、TAXiコードの存在と良好な相関を見せる統
計学的結合を形成する。セクションVI.Aにおいて述べた実施態様におけるよ
うに、テーブルがX86物理IP値をTAXiコード・セグメント内のエントリ
・ポイントにマップする。このテーブルは、PIPM(物理IPマップ)602
と呼ばれる。各物理ページは、関連付けされたプロパティを有する。このプロパ
ティは、いくつかの論理的イベント・クラス(図4bに示したイベントのサブセ
ット612;前述のセクションV.Bにおいて説明)に関連付けされている。バ
イナリ・トランスレータ124は、PFAT(ページ・フレーム属性テーブル)
172内のページごとにプロパティの5ビット624を維持する−−バイナリ翻
訳が生成されるとき、そのエントリ・イベントに対応するビット624が、X8
6ページのPFATエントリ174内において、翻訳の存在を示すべくセットさ
れ、PIPM 602内に、X86物理IPアドレスをTAXiコード・セグメ
ントのアドレスにマップするエントリが作られる。5つのPFATビットは、T
LB 116に、ページ・テーブルからのページ翻訳とともにロードされる。こ
れらのビットにクエリを行う機能のイネーブルは、時間的に変化するプローブ・
マスクによってゲートされるが、そのビットは、5つのPFAT/TLBビット
に対応する。
【0382】 プローブは、図6cとの関連から詳細を説明するように、複数の段階において
生じる。1つの段階が失敗すると、残りのプローブが途中放棄される。第1段階
は、X86インストラクションが実行された、そのインストラクションがプロー
ブ可能なイベント・コードの1つであるイベント・コードを生成し、かつ、その
ページに関する対応するプローブ・プロパティがイネーブルであり、かつ、カレ
ント・プローブ・マスク内の対応するビットがイネーブルであるとき、トリガさ
れる。この第1段階は、基本的には前述の実施態様に関して説明した連想メモリ
・サーチのインプリメンテーションであるが、メモリ・ページの細分性に関して
異なる。この第1段階は、例外を生成し、その結果ソフトウエアが実際にPIP
M 602をプローブできるようなることが有益となり得るか否かということに
関して、妥当であるが不完全な評価を提供する。ソフトウエア例外ハンドラは、
PIPM 602をプローブし、カレントIP値のカレント翻訳があるか否かを
明らかにし、その翻訳のアドレスを探し出す。
【0383】 このインプリメンテーションは、『タペストリー』マイクロプロセッサ・チッ
プ上において大きなハードウエア構造をまったく使用しない;たとえば、大きな
連想メモリの使用を回避している。このインプリメンテーションは、成功が得ら
れないPIPM 602のプローブに関連するオーバーヘッドを抑え、その一方
、X86プログラムのホット・スポットに置き変わる翻訳であるTAXiコード
に実行が移動する高い尤度を提供する。
【0384】 ここで、プロービングが最小正当性に関する条件ではなく、最適化であったこ
とを想起されたい。プローバ600が生成するプローブ例外が多すぎる場合には
、コントロールを移動する翻訳が存在しないことからPIPM 602の過剰な
プローブが失敗し、コンバータ(図1aおよび1cの136)内において適正な
実行が再開される。このエラーによって、プローブ例外ハンドラの実行が1つ無
駄になる。メカニズムが生成するプローブが少なすぎる場合には、コントロール
がTAXiコードに移動しなくなり、例外が単純にコンバータ136内において
継続される。このエラーの代償は、(例外の省略の代償にも満たない)機会の看
過である。これらのエラーが演算結果における変化を導くことがないため、ヒュ
ーリスティックな、必ずしも常に正しくないアプローチが、アーキテクチャ上の
正当性の評価基準を侵害することはない。この目標を、イベントの時間、空間、
およびクラスを分割し、良好に相関されたインジケータ・ビットとそれぞれのス
ライスを関連付けするきめ細かい方法を探し出すことによって達成する。
【0385】 C.統計学的プロービングのためのハードウエアおよびソフトウエア構造 前述のセクションVにおいて、プロファイリングに関して説明した多くの構造
は、プロービングにも使用される。
【0386】 図4bを再度参照するが、プロファイリングに関するイベント・コード分類4
02は、プロービングにも使用される。列610は、「プローブ可能」として多
数のイベントを指定する。プローブ可能として指定されたイベントは、すべて、
X86インストラクションまたは割り込みによるコントロールの移動である。移
動のディスティネーションにおけるコードは、プローブに関する候補となる。ホ
ット・スポット・ディテクタ122は、プローブ可能なイベント・クラスの知識
を伴って設計され、検出されたX86ホット・スポットを、そのホット・スポッ
トに到達したコントロール移動が、プローブ可能なイベント610の1つである
場合に限って翻訳する。つまり、X86プログラムがコントロールの移動を実行
したとき、その移動がプローブ可能な(610)移動の1つであれば、少なくと
も理論的にTAXiコードが存在する可能性があり、プローブ回路の残部がアク
ティブ化される。
【0387】 プローブ可能なイベント610は、列612において、さらに6つのクラスに
分けられる。これら6つのクラスは、「遠い呼び出し」、「エミュレータ・プロ
ーブ」、「jnz」、「条件付きジャンプ」、「近いジャンプ」、および「近い
呼び出し」である。
【0388】 再度図4hを参照するが、プローブ・マスク620は、6ビットの集合からな
り、各1ビットは図4bに示した6つのプローブ可能なクラス612の1つに対
応している。プローブ・マスクが「1」のとき、対応するクラス612に関する
プローブがイネーブルになる−−そのクラスのイベントが発生すると(かつ、そ
の他特定の条件が満たされると;後述する図6a〜6cの説明を参照されたい)
、ハードウエアがプローブ例外をトリガし、PIPM 602のプローブが行な
われる。プローブ・マスク620が「0」であれば、対応するクラス612のプ
ローブがディセーブルされる−−そのイベントのディスティネーションに関する
翻訳が存在する場合であっても、ハードウエアが、翻訳を見つけ出すためのPI
PM 602のプローブを開始することはない。
【0389】 再度図1dを参照するが、PFATエントリ174は、各物理ページに関する
プロパティの5ビット624を有している。これらの5ビット624は、「遠い
呼び出し」、「jnz」、「条件付きジャンプ」、「近いジャンプ」、および「
近い呼び出し」である(図4bの612、図4hおよび6bの620、および図
6bの660、661、662、663、664−−「エミュレータ・プローブ
」プローブは、ページごとのベースで維持されるのではなく、ソフトウエアによ
り発生される)。PFATプローブ・プロパティ624の対応するビットは、ホ
ット・スポット・ディテクタ122がホット・スポットを検出し、バイナリ・ト
ランスレータ124がネイティブ『タペストリー』翻訳を生成したとき「1」に
セットされ、その翻訳に関するプロファイルは、検出され、翻訳されたX86ホ
ット・スポットのエントリを導いたイベントのクラスを表す。所定のページのP
FATエントリの5ビット624は、図6b〜6cとの関連から後述するように
、プローブ・マスク620の対応する5ビットとの論理積が演算され、プローブ
するべきか否かの決定が行われる。
【0390】 図4g、4h、および4iを再度参照すると、TAXi_Timers.Pr
obe_Timer(TAXi_タイマ.プローブ_タイマ)630は、CPU
クロック周波数によりカウント・ダウンを行う符号なし整数のカウント・ダウン
・タイマであり、イベント・クラスごとのベースにおいて、失敗したプローブ例
外の平均レートをコントロールするために使用される。Probe_Timer
(プローブ_タイマ)630がゼロまでカウント・ダウンすると、TAXi_S
tate.Probe_Mask(TAXi_状態.プローブ・マスク)620
がすべて「1」にリセットされ、Probe_Timer(プローブ_タイマ)
630がTAXi_Control.Prove_Timer_Reload_
Constant(TAXi_コントロール.プローブ_タイマ_再ロード_定
数)632の値にリセットされる。イベント・コード0.0011を伴うRFE
は、Prove_Timer_Reload_Constant(プローブ_タ
イマ_再ロード_定数)632からのProbe_Timer(プローブ_タイ
マ)630の早期リセットを強制する。
【0391】 Probe_Mask(プローブ_マスク)620およびProbe_Tim
er(プローブ_タイマ)630は、ともに次に示す振る舞いをもたらす。クラ
ス612のプローブが成功している限り、マシンはそのクラスのプローブを継続
する。プローブが失敗すると、失敗したプローブのクラス612が、Probe
_Mask(プローブ_マスク)620内のそのクラスのビットを「0」にセッ
トすることによって、すべてのページに関してディセーブルされる。次にPro
be_Timer(プローブ_タイマ)630がタイムアウトするとき、すべて
のクラスが再びイネーブルされる。
【0392】 ここで、ホット・スポット・ディテクタ122によってホット・スポットが検
出された後にTAXiコード・セグメントがX86バイナリの実行と非同期で作
成されたことを想起されたい。翻訳済みコード・セグメントは、不使用となると
引き込められる。TAXiネイティブ・コード・セグメントは、ラウンド‐ロビ
ン・ベースで、遷移状態にあるとしてマークされ、再利用に使用可能であるとし
てキューに入れられる。このコード・セグメントは、遷移状態にある間、すべて
のアドレス空間から削除される。TAXiコード・セグメントが遷移状態にある
間に呼び出されると、遷移キューから出され、呼び出されたアドレス空間にマッ
プされ、アクティブ状態に再セットされる。遷移状態にある間にTAXiコード
・セグメントの呼び出しがなければ、そのセグメントがキューの末尾に到達した
とき、ストレージが再利用される。この再利用ポリシーは、Digital(デ
ィジタル)のVAX/VMS仮想メモリ・システムに類似である。このように再
利用ポリシーがいくぶんレイジーであることから、PFAT 172は、多少古
いことがある。
【0393】 図6aを、図1c、1d、3a、および4bとともに参照するが、PIPM
602は、PIPMエントリ640のテーブルである。各PIPMエントリ64
0は、3クラスの情報を有している:すなわち、翻訳済みホット・スポットへの
エントリ・ポイントとして機能するX86物理アドレス642、以前の実行時に
有効であり、現在は翻訳済みTAXiコード・セグメントに対する前提条件とし
て機能しているX86マシン・コンテキスト情報646、648、および翻訳済
みTAXiコード・セグメントのアドレス644である。コンテキスト情報の整
数のサイズおよびモード部分646は、Context_At_Point(コ
ンテキスト_アット_ポイント)プロファイル・エントリ(図4cの430)内
に取り込まれるフォーム、およびTAXi_Control.Global_T
AXi_Enables(TAXi_コントロール.グローバル_TAXi_イ
ネーブルズ)ビット(図4gの470、472)に使用されるフォームに類似す
るフォームでストアされる。仮想X86 310のカレント・サイズおよびモー
ドが、PIPMエントリ640のサイズおよびモード部分646に保存されてい
る状態と一致しない場合には、プローブが失敗する。PIPMエントリ640の
浮動小数点部分648は、Context_At_Point(コンテキスト_
アット_ポイント)プロファイル・エントリ430に取り込まれる浮動小数点状
態435に相当する。これを除けば成功することになるプローブの終結時におい
て、仮想X86 310の浮動小数点状態がPIPMエントリ640の浮動小数
点部分648に保存されている状態と一致しないときには、浮動小数点状態が操
作されてPIPMエントリ640の648に保存されている状態に一致させられ
るか、プローブが失敗する。
【0394】 図1bとの関連から図6aを参照すると、PIPM 602が最新に維持され
て、翻訳のカレント・カタログが使用可能なことを反映し、TAXiコード翻訳
の追跡がそれらの作成時になされ、再利用に関してマークされ、かつ実際に再利
用され無効化されることが示されている。PFAT 172内のプローブ・ビッ
トは、わずかに遅れることがあり、TLB 116内のプローブ・ビットは、さ
らに遅れることが許容されている。また、TLB 116内のプローブ・ビット
は、ページの細分性に対する情報だけを運ぶ。つまり、TLB 116内のプロ
ーブ・ビットは、最近のある時点において、このページ上にそのエントリ・ポイ
ント・クラスを伴うTAXiコードがあったことを示す。TLB 116内のゼ
ロ・ビットは、その種のエントリ・ポイントが存在せず、このイベント・コード
に関するPIPM 602のプローブは失敗する可能性が高く、したがって試み
るべきではないことを示す。「1」は、成功する確率が高いことを示唆する。こ
の「1」は、ある意味で新鮮ではなく、しかもその後に無効化され、再利用され
たTAXiコード翻訳の存在を示している。PIPM 602のプローブにおい
ては、TLB 116内におけるヒットの後に、再利用されたTAXiコード・
セグメントに関するPIPMエントリ640がTAXiセグメントの無効性を示
すこと、たとえばアドレス644内の「0」によってそれがわかる。
【0395】 前述のセクションV.Gの説明から、TAXi_State.Event_C
ode_Latch(TAXi_状態.イベント_コード_ラッチ)フィールド
486、487およびContext_At_Point(コンテキスト_アッ
ト_ポイント)プロファイル・エントリ430内にストアされている4ビットの
イベント・コードを明確にするためには、5ビットが必要であったことを想起さ
れたい。図4bのイベント・コード402は、プローブ可能な(610)RFE
イベント・コード(上側半分410)とプローブ可能な(610)コンバータ・
イベント・コード(下側半分404)が下位4ビットを共有しないように慎重に
割り当てられている。プローブ可能な(610)RFEイベント410は必ず偶
数になり、プローブ可能な(610)コンバータ・イベント404は必ず奇数に
なる。このように、カレント・イベント・コードの下位4ビットがプローブ・イ
ベントを固有識別することから、プローブ例外ハンドラは、そのプローブ・イベ
ントがRFEインストラクションから到来したか、あるいはコンバータの実行か
らもたらされたかを確実に決定することができる。(プローブ可能なイベント6
10にオーバーラップがないことは、前述のセクションV.Gにおいて説明した
「開始パケット」イベント・コード418がオーバーラップを有していないこと
の上に置かれる追加の制約である。)
【0396】 再度図6bを参照すると、プロービングは、PLA(プログラマブル・ロジッ
ク・アレイ)650およびアンド・ゲートによってコントロールされることがわ
かる。PLA 650は、イベント・コード・ラッチ486、487からイベン
ト・コード592の論理関数をいくつか生成する。PLA 650は、図4bに
示したような「開始パケット」418、「プロファイル可能なイベント」416
、および「プローブ可能なイベント」610プロパティを計算する。それに加え
て、プローブ可能なイベント・コードが、図4bの列612に示したように単一
の信号にデコーディングされる。たとえば、図1dのプローブ・プロパティ62
4のビット<0>に対応する「jnz」ビット660が、イベント・コード1.
0001に割り当てられる。プローブ・プロパティ624のビット<1>に対応
する「条件付きジャンプ」ビット661は、イベント・コード1.0011に割
り当てられる。プローブ・プロパティ624のビット<2>に対応する「近いジ
ャンプ」ビット662は、イベント・コード1.0101に割り当てられる。プ
ローブ・プロパティ624のビット<3>に対応する「近い呼び出し」ビット6
63は、イベント・コード1.0111および1.1011に割り当てられる。
プローブ・プロパティ624のビット<4>に対応する「遠いジャンプ」ビット
664は、イベント・コード0.1000に割り当てられる。「エミュレータ・
プローブ」ビット665は、イベント・コード0.1100および0.1110
に割り当てられる。
【0397】 D.統計プロービングの動作 図6bおよび6cを参照するが、X86のコントロール移動インストラクショ
ン(コンバータ136内において実行される単純なインストラクションもしくは
エミュレータ316において実行される複雑なインストラクション)に関して、
移動ターゲットのインストラクションのフェッチが、そのターゲット・インスト
ラクションのページに関するカレント・プローブ・ページ・プロパティ624を
伴うPFAT 172からTLB 116が更新されることを保証している−−
情報はすでにTLB 116内においてカレントとなっているか、あるいはイン
ストラクションのフェッチによって導かれたI−TLBミスの一部として補充さ
れる。つまり、インストラクションのフェッチの一部として、TLBが、ターゲ
ット・インストラクションに関するアドレス変換およびプローブ・ページ・プロ
パティ624をともに提供する(ただし、前述のセクションVI.Cにおいて説
明したが、TLB 116内のPFATプローブ・プロパティは、多少古いこと
がある)。
【0398】 さらに、これらのコントロール移動インストラクションは、前述のセクション
V.Fにおいて説明したように、イベント・コード402を生成する。インスト
ラクションの終結時において、コンバータ136またはRFEインストラクショ
ンが5ビットのイベント・コード592を生成する。このイベント・コードは、
ラッチ486、487にストアされる。ターゲット・インストラクションがフェ
ッチされるか、実行が開始すると、ラッチ486、487のイベント・コードが
PLA 650に供給される。
【0399】 6つの3入力アンド・ゲート670は、プローブ可能なイベント信号660、
661、662、663、664、665と、TLB(図1dの624)からの
対応するページ・プロパティの論理積を演算してProbe_Mask(プロー
ブ_マスク)620のカレント値を求める。これら6つの論理積の項は、オア・
ゲート672において論理和が取られる。つまり、オア・ゲート672の出力は
、カレント・インストラクションがイベント592を生成し、そのイベントのカ
レントProbe_Mask(プローブ_マスク)620が「1」であり、かつ
カレント・ページに関するそのイベントのプローブ・プロパティ・ビット624
が「1」である場合に限って「1」となる。「エミュレータ・プローブ」信号6
65は、図4bの「エミュレータ・プローブ」列612によって示されるように
、RFEイベント・コードが0.1100または0.1110に等しいとき、P
LA 650によって生成される。このプローブのクラスは、エミュレータ31
6によってプローブの成功の可能性が高いと判断され、かつプローブ・マスク6
20のエミュレータ・プローブ・ビット(ビット<5>)が「1」となるときに
生じる。
【0400】 オア・ゲート672の出力は、アンド・ゲート674においてさらにいくつか
の項との論理積が取られる。プロービングは、全体としてTAXi_Contr
ol.probe(TAXi_コントロール.プローブ)676(併せて図4g
を参照されたい)によってコントロールされる;このビットが「0」であれば、
プロービングはディセーブルされる。基礎となるX86コードが翻訳の生成以降
に修正を受けていないTAXiコードに対してのみコントロールが移動されるこ
とを保証するために、プロービングは、そのページに関するXPビット184、
186によるコントロールに従って、X86インストラクション・テキストの保
護されたページにおいてのみ可能になる(併せて図1d、前述のセクションI.
F、および後述のセクションVIIIを参照されたい);XPビット184、1
86が「0」であれば、そのページに関するプロービングは行なわれない。プロ
ービングは、TAXiシステムのコントロール・ソフトウエアによってセットさ
れるTAXi_Control.Global_TAXi_Enables.s
ize(TAXi_コントロール.グローバル_TAXi_イネーブルズ.サイ
ズ)ビット470および.mode(.モード)ビット472によって、X86
コンテキストに関してコントロールされる。また、プロービングは、TAXi_
Control.Global_TAXi_Enables(TAXi_コント
ロール.グローバル_TAXi_イネーブルズ)470、472が「1」にセッ
トされているカレントX86モードに関してのみイネーブルされる。プロービン
グおよびプロファイリングは、相互に排他である(後述のセクションVI.Gを
参照されたい);したがって、TAXi_State.Profile_Act
ive(TAXi_状態.プロファイル_アクティブ)が「1」にセットされて
いるときにはプロービングがディセーブルされる(図4hの482、図5aの状
態530および542;前述のセクションV.EおよびV.Fを参照されたい)
。アンド・ゲート674の出力678が「1」であれば、プロセッサは、PIP
M 602のプローブを行うか否かを決定する次のステップに進むが、それにつ
いてはさらに詳細を後述する。
【0401】 TAXiが準備されていないモード、たとえばX86のデバッギング、シング
ル‐ステップ、あるいは浮動小数点エラー条件にX86プロセッサが入ると、ソ
フトウエアによってTAXi_Control.probe(TAXi_コント
ロール.プローブ)676が「0」にされる。「ページ・プロパティ処理ディセ
ーブル」モード(PROC_CTRL.PP_Enable(PROC_CTR
L.PP_イネーブル)の表明解除を伴う;前述のセクションI.Aを参照され
たい)において動作しているとき、TAXi_Control.probe(T
AXi_コントロール.プローブ)676は、表明が解除される。
【0402】 アンド・ゲート674の出力678は、プローブ・イベント・クラスの単一の
ビットをDecoded_Probe_Event(デコード済み_プローブ_
イベント)ラッチ680内にラッチする。 中間ステップ690は、ハードウエア内において実行され、オプションとして
ここで実行することができるが、その詳細については後述するセクションVI.
Eにおいて説明する。
【0403】 以上のすべてのハードウエア・チェックにパスすると、プロセッサは、コント
ロール移動のターゲットにおけるインストラクションの実行を完了する前に、プ
ローブ例外を取る。このプローブ例外は、コントロールをソフトウエアに移動し
、それにおいてコントロールをTAXiコードに移動するべきか否かについて、
さらに吟味が行なわれる。
【0404】 プローブ例外の生成の一部として、コンバータ136(ステップ682)は、
Context_At_Point(コンテキスト_アット_ポイント)プロフ
ァイル・エントリ(図4cの430)をプロファイル収集用に定義されたTAX
i_Control.Packet_Reg_First(TAXi_コントロ
ール.パケット_レジスタ_先頭)(図4gの476)によって示されるレジス
タ内に書き込む。(さらに詳細を後述のセクションVI.Gにおいて説明するが
、プロファイリングおよびプロービングは、相互に排他であり、X86がプロフ
ァイル・レジスタを使用することはなく、したがってこの用法が衝突を招くこと
はない。)プロファイル・エントリ430のイベント・コード(図4cの436
)は、カレント・イベント・コード(図5bの592)の下位4ビットにセット
される。
【0405】 プローブ例外ハンドラに入る時点で、次に示す情報がコンバータから得られて
いる。 ・ 下位半分438、439にX86物理IP(ページ・フレーム番号および
ページ・オフセット)を含むContext_At_Point(コンテキスト
_アット_ポイント)プロファイル・エントリ430 ・ Context_At_Point(コンテキスト_アット_ポイント)
430の上位半分432、433、435からのX86実行コンテキスト ・ Context_At_Point(コンテキスト_アット_ポイント)
430のイベント・コード・フィールド436内のプローブ・イベント・コード
・ EPC.EIPからのX86仮想IP(CSセグメント内のオフセット)
【0406】 例外ハンドラは、PIPM 602を調べる。PIPM 602は、X86イ
ンストラクション・アドレス(それらの物理アドレス;アドレス変換後)をTA
Xiコード・セグメントにマップするテーブルである。PIPM内のテーブル・
エントリは、X86物理アドレスによってインデクスされ、通常は従来のハッシ
ング・テクニックもしくはその他のテーブル・ルックアップ・テクニックを使用
する。プローブ例外ハンドラは、物理IP−TAXiコード・エントリ・ポイン
ト・マップ(PIPM)602内のターゲット・インストラクションの物理アド
レスをルックアップする。
【0407】 X86アドレスに一致するPIPMエントリ640が見つからなかった場合に
は、後述する結果を伴ってプローブが失敗する。 アドレスが一致するテーブル・エントリが見つかった場合にも、カレントX8
6モードによってさらに翻訳の適否を判断する必要がある。ここで、X86イン
ストラクションの完全な実行セマンティクスが、インストラクション自体のビッ
トによって完全に指定されていなかったことを想起されたい;実行セマンティク
スは、プロセッサがV86モードにあるか否か、物理アドレスであるか仮想アド
レスであるか、浮動小数スタック・ポインタ、および浮動小数点レジスタの満/
空状態といったことに依存し、オペランド・サイズはセグメント記述子、EFL
AGSレジスタ、浮動小数点ステータス・ワード、浮動小数点タグ・ワード等に
エンコーディングされている。『タペストリー』ネイティブ・コードへの翻訳は
、これらのステータス・ビットに関する仮定を埋め込んでいる。これらのステー
タス・ビットは、当初、Context_At_Point(コンテキスト_ア
ット_ポイント)プロファイル・エントリ430のビット<59:51>に取り
込まれた後(前述のセクションV.Cを参照されたい)、ホット・スポット・デ
ィテクタ122およびバイナリ・トランスレータ124がモード・ビットのプロ
ファイル済みの値に基づいて翻訳を生成する。翻訳に対応するPIPMエントリ
640は、TAXiコード・セグメントの作成に用いられたモード・ビットの仮
定を記録している。このため、PIPMエントリ640が見つかった後、PIP
Mエントリ640内にストアされているX86モードとカレントX86モードを
比較する。
【0408】 例外ハンドラがPIPM 602内のモード情報について行うチェックには、
3つの包括的なクラスがある。 第1に、カレント実行モードと、TAXiトランスレータ124によって仮定
されたCS.D(コードおよびオペランドのサイズ)およびSS.D(スタック
・セグメント・サイズ)ビットの値に互換性がなければならない。これは、Co
ntext_At_Point(コンテキスト_アット_ポイント)引数からの
デコーディング済み「sizes(サイズ)」情報432とPIPMエントリ6
40の646内に提供されている許容可能コンテキストのマスクを比較すること
によって決定される。
【0409】 カレント浮動小数点状態がPIPMエントリ640内の浮動小数点状態648
に一致しないときには、プローブが失敗する。場合によっては、不一致を解決す
ることができる:すなわち、浮動小数点ユニットのアンロードおよび再ロードを
行い、PIPMエントリ640内の浮動小数点状態に適合させ、たとえば、カレ
ントX86浮動小数点マップによって指定される規範的なロケーションに浮動小
数点レジスタを入れる。浮動小数点レジスタ・スタックの高さがPIPMエント
リ640内のスタックの高さに一致しないとき、あるいは疑似浮動小数点タグ・
ワードが一致しないとき、もしくは浮動小数点コントロール・ワード(精度およ
び丸めモード)が一致しないときには、プローブが失敗する。不一致が浮動小数
点タグ・マップのマッピング(X86スタック‐ベースのレジスタ・モデルから
レジスタ・アドレス『タペストリー』モデルへのマッビング)だけである場合は
、ソフトウエアが浮動小数点状態を再構成してプローブを成功させることができ
る。
【0410】 実行コントロールがTAXiコードに渡される。モードが一致しなければ、プ
ローブが失敗する。 第2に、このTAXiフラグメントの起動によって到達可能なTAXiコード
・ポイントの過渡的な閉止(の保守的な近似)が、CSリミット例外をトリガし
ないようなカレント仮想IP値としなければならない。これは、例外の時点にお
ける仮想IPおよび正規化されたCSリミットから決定され、それらをPIPM
エントリ640にストアされている値と比較することによって判断される。
【0411】 第3に、XPビットのTLBコピー186がXPビットのPFATコピー18
4よりわずかに古くなることから、PFAT 172内のXPビット184のマ
スタ・コピーをチェックし、そのX86ページに関連付けされたすべてのキャッ
シュ済みの情報が(プロファイルおよびTAXiコード)まだ有効であることを
確認する。
【0412】 第4として挙げるのであれば、そのX86ページがDMA書き込みによって無
効化されていないことを確認するために、DMU 700(後述のセクションV
IIを参照されたい)に対するクエリが行なわれることがある。 カレントX86モードがこれらのモード・チェックを満足するとき、プローブ
は成功である。PIPMエントリ640が、プローブ例外が生じたX86コード
のアドレスに対応するTAXiコードのアドレスを有していることになる。なお
モードが不一致であれば、プローブは失敗である。
【0413】 プローブ例外が成功すると、ハンドラは、EPC.TAXi_Active(
EPC.TAXi_アクティブ)482をセットし、EPC.ISA(ネイティ
ブ『タペストリー』モード)をゼロにし、EPC.EIPをTAXiコードのア
ドレスにセットし、かつEPC.ESEGを特殊TAXiコード・セグメントに
セットすることによってEPCを修正する。RFEインストラクションが、この
EPCを実際のプロセッサPSWにロードすることによって、TAXiコードに
対する実行の移動を完了する。プローブが成功すれば、Probe_Mask(
プローブ_マスク)620は変更されない。つまり、プローブ可能なイベントの
クラスは、そのクラスのプローブが成功している間は、イネーブルのまま維持さ
れる。
【0414】 EPC.EIPをリセットしてTAXi翻訳済みコードをポイントさせること
によって、RFEインストラクションは、プローブ例外ハンドラのエンドにおい
てTAXiコードへの遷移をもたらす。TAXiコードは、X86コードから翻
訳されていることからX86規約に従い、そのため遷移例外ハンドラによって実
行されることになっていた引数のコピー(前述のセクションII、III、およ
びIVを参照されたい)は必要なくなる。さらに、プローブ例外ハンドラおよび
TAXiコードがともに『タペストリー』ISAであることから、この最終的な
遷移においてはプローブ例外が発生しない。
【0415】 プローブ例外がトリガされたが、ソフトウエア・プローブが翻訳を見つけられ
なかった場合には、いくつかのステップが取られる。プローブをトリガしたイベ
ントに対応するProbe_Mask(プローブ_マスク)620内のビットが
「0」にクリアされ、次のProbe_Timer(プローブ_タイマ)630
のライムアウトまで、イベントのこのクラスに関するプローブがディセーブルさ
れる。これは、Probe_Failed(プローブ_失敗)RFE信号および
Decoded_Probe_Event(デコード済み_プローブ_イベント
)ラッチ680によって達成される。割り込みサービス・ルーチンは、図4bの
2つの特殊な「プローブ失敗」イベント・コードの1つを伴うRFEを使用する
。イベント・コード0.0011は、TAXi_Timers.Probe_T
imer(TAXi_タイマ.プローブ_タイマ)630に、Prove_Ti
mer_Reload_Constant(プローブ_タイマ_再ロード_定数
)632を強制的に再ロードする。イベント・コード0.0010は、Prob
e_Timer(プローブ_タイマ)630に対する副次的な効果を有していな
い。逆方向ブランチに関するプローブが失敗したときには、それ以上のプローブ
例外を伴うことなく、完全なタイマ値にわたってループの実行を可能にするため
にイベント・コード0.0011のRFEを用いてプローブ例外からリターンす
ることによりProbe_Timer(プローブ_タイマ)630をリセットす
ることが期待される。それに対して、「近い呼び出し」に関するプローブが失敗
した場合には、Probe_Timer(プローブ_タイマ)630のタイムア
ウトの直後に同一のページからのほかの「近い」呼び出しの吟味が可能になるこ
とが期待され、したがってこのプローブ例外は、イベント・コード0.0010
を伴ってリターンすることになる。このRFEはプローブ例外のポイントにリタ
ーンし、コンバータ136内において実行が再開される。
【0416】 プローブ・タイマのタイムアウトによるProbe_Mask(プローブ_マ
スク)620のリセットと同時に、Probe_Mask(プローブ_マスク)
620を修正するRFEインストラクションの実行がある場合、RFEアクショ
ンの方が優先順位が高いことから、リセット要求が破棄される。
【0417】 E.その他のプロービングの特徴 中間ステップ690については、先に簡単に触れたが、これにおいてはビット
のビット・ベクトルを調べ、翻訳が、PFATプローブ・ビット内にエンコーデ
ィングされたページ・レベルよりいくぶん細かいコード範囲にわたって存在する
場合が明らかにされる。プローブ可能なイベントが発生し、そのイベントのクラ
スが、PFATプローブ・ビットおよびプローブ・マスクに対してスクリーニン
グされると、プローブ例外を実際に発生してコントロールをソフトウエア割り込
みハンドラに移す前に、ハードウエアが(ページ翻訳テーブルの場合と多少類似
するオペレーションにおいて)ビット・ベクトルの吟味を行う。
【0418】 実際にソフトウエアによってインスタンスが作られるのは、ゼロでないPFA
Tプローブ・ビットを伴うページに対応するビット・ベクトルのスライスだけで
あり、それにおいても完全なページ・テーブル・ツリーの関連部分に限り、仮想
メモリ・システムによってインスタンスが作られる場合との類似が見られる。ビ
ット・ベクトル自体はX86アドレス空間から隠されており、プローブ・ビット
・ベクトルならびにX86仮想マシンをマネージするためのそのほかの構造用に
予約されているアドレス空間内にある。このビット・ベクトルは、d−キャッシ
ュ内にキャッシュすることができる−−これより以前のステップによって提供さ
れるフィルタリングによって、プローブ・ビット・ベクトルのクエリが失敗する
回数が比較的小さくなる。
【0419】 ビット・ベクトルの密度は、システムのオペレーションに関して調整すること
が可能である。一部の実施態様においては、物理メモリ・システム内の各バイト
ごとに1ビットが用意される。別の実施態様においては、たとえば物理メモリの
2、4、8、16、あるいは32バイトごとに1ビットといった形で、2のべき
乗の小さい値ごとに1ビットを持つようにしても、ビット・ベクトルの有効性が
、可能性としてはほとんどわずかしか失われない。ビット・ベクトルの各ビット
によってガードされるブロック・サイズは、ソフトウエア構成可能とすることも
できる。
【0420】 つまり、PFAT 172内のプローブ・プロパティ624は、イベント・コ
ード(プローブ可能な5つのイベント・クラス)によってきめ細かいフィルタリ
ングを提供するが、空間的には粗く(ページ・ベース)、それに対してビット・
ベクトルは、イベント・コードに関しては粗いマップを提供するが(単一ビット
内にすべてのイベントがグループ化される)、空間的にはきめが細かい(数バイ
ト)ものとなる。
【0421】 ビット・ベクトル内のビットが「1」であることは、翻訳が存在し、かつアク
ティブ化されることを保証するものではない。PFATプローブ・ビットの場合
と同様に、ビット・ベクトルもいくぶん過度に楽観的なヒューリスティックであ
り、実際の翻訳済みコード・セグメントの母集団に遅れていることもある。ビッ
ト・ベクトルの吟味の後においても、PIPM 602内のモード述部の検証を
行うべきである。
【0422】 テーブルのサーチに使用される疑似マイクロコードを用いたハードウエアは、
容易に修正可能であり、それによりビット・ベクトルの適切なスライスをフェッ
チするようにメモリに対するロードを発することができる。
【0423】 PLA 650のロジックは、少なくとも当初の製造間においてプログラム可
能である。再プログラミングは、図4bの列414、416、418、610、
612の内容の変更を招くことがある。コンバータ136によって生成される5
ビットのコードは、比較的固定されてはいるが、これらのビットに与えられてい
る解釈は、プロファイルであるかプローブであるかによらず、PLA 650内
において再構成することができる。別の実施態様においては、図4bに示した列
の内容を変更することによって、プロファイリングおよびプロービングのオペレ
ーションをコントロールできるように、PLA 650がランタイムにおいてプ
ログラム可能となる。PLA 650に対する5ビットの入力(イベント・コー
ド・ラッチ486、487)から、25=32の可能性のある入力が得られる。
一方、出力は9ビットである(プローブ可能なイベントの信号660、661、
662、663、664、665、プロファイル可能なイベント416、開始パ
ケット418、およびプローブ可能なイベント610)。したがって、PLA
650を32%9のRAMによって置き換えることが可能であり、それによりP
LA 650の出力が完全にソフトウエア構成可能になる。その種のプログラム
可能性を用いれば、プロファイリング(前述のセクションV)およびプロービン
グ(このセクションVI)がともに完全に構成可能になる。プログラム可能とす
る実施態様においては、プロファイリングならびにプロービングのオーバーヘッ
ドをコントロールし、ストラテジを経験に適応させることができる。
【0424】 プローブに求められる属性のほとんどは、ページに関連付けされているか(P
FATおよびTLB内にストアされる)、あるいは個別に翻訳されるコード・セ
グメントに関連付けされており(PIPM 602内にストアされる)、単純な
X86インストラクションとしてコンバータ136によるクエリが行なわれる構
造は、ハードウエアにおいて実行される。エミュレータ(図3aの316)にお
いて実行される複雑なインストラクションについては、プローブを行うか否かの
決定がソフトウエア内においてなされる。アドレス変換ページ・テーブルに対す
る注釈サイド・テーブルとしてPFATがあるように、X86 IVT(割り込
みベクトル・テーブル)にプローブの属性を注釈するサイド・テーブルがある。
X86インストラクションのエミュレーションの後、エミュレータ316は、I
VTサイド・テーブルに対してクエリを行い、エミュレーションの間に決定され
たマシン状態とともにこれらのビットを分析する。このクエリに基づいて、エミ
ュレータ316は、プローブを導いたイベント・コードを伴うRFEを使用して
コンバータ136にリターンするか、あるいはそれ以外のイベント・コードを伴
うRFEを使用してリターンするかを決定する。イベント・コード0.1100
および0.1110はプローブを誘導し(図4bの列610を参照されたい)、
イベント・コード0.1101および0.1111は誘導しない。
【0425】 F.TAXiコードの実行完了およびX86コードへのリターン プローブ例外がX86プロセス内において何らかの翻訳済みTAXiコードを
アクティブ化した後に、TAXiコードを離れる方法は次の3つしか存在しない
:すなわち、翻訳済みセグメントのボトムにおける正常な終了、コード・セグメ
ントの外へのコントロールの移動、および例外を介した非同期終了である。
【0426】 ボトムから離脱するケースは、TAXiトランスレータ124によって生成さ
れるエピローグ・コードによって処理される。TAXiコードは、すべてのX8
6マシン状態を復帰し、トラップ・インストラクションを発行することによって
コントロールをコンバータに返す。このトラップ・インストラクションは、TA
Xi_EXIT(TAXi_終了)例外に関する例外ハンドラにコントロールを
移動する。TAXiコードを終了するためのトラップ・ハンドラは、ISAをX
86にセットし、翻訳済みのホット・スポットに続くX86コード内のポイント
にコントロールを戻す。セクションIVに述べた別の実施態様においては、エピ
ローグ・コードがデータをそれらのX86ホームに返し、翻訳されたX86コー
ドの部分の末尾に続くポイントをIPがポイントするようにセットする。
【0427】 コントロールを移動するケースは、前述のセクションIIIにおいて説明した
状態保存メカニズムによって、あるいは上記のエピローグ・コードと基本的に類
似するコードによって処理することができる。いずれの場合においても『タペス
トリー』システムは、X86マシン状態を再構成する明確なアクションを取る。
【0428】 非同期終了は、前述のセクションI.Dにおいて紹介したセーフティ・ネット
・メカニズムを使用して処理され、それについては後述のセクションVIIIに
おいて、より詳細に説明する。TAXiコード内において例外が発生し、例外ハ
ンドラが、X86仮想マシン内においてその例外を具体化しなければならないと
判断すると、X86状態のセットを担うエミュレータ316内の共通のエントリ
にジャンプする−−これにより、割り込みスタック・フレームが設定され、ID
Tがアクセスされ、コントロールの移動が行われる。この機能は、呼び出された
とき、まずPSW.TAXi_Active(PSW.TAXiアクティブ)1
98を調べることによってTAXiコードが実行されていたか否かを決定しなけ
ればならず、実行されていた場合には、X86マシン状態を再構成するTAXi
機能にジャンプし、続いてコンバータ内において、同一の例外を誘発するX86
インストラクションを再実行する。このX86インストラクションの再実行は、
正しいX86例外状態を確立するために必要となる。X86インストラクション
の再実行のためにコンバータが開始された場合には、例外ハンドラが必ず、プロ
ーブの失敗とともにRFEを使用し、プローブ・タイマ・イベント・コードを再
ロードして、再帰的なプローブ例外の発生を回避する。
【0429】 X86の世界で具体化されない例外は、ネイティブ『タペストリー』コードに
よって完全に実行される例外だけであり、たとえばページ違反を伴わずに満足さ
れるTLBミス、マスクされていないX86浮動小数点例外を伴わないFP不備
等がある。
【0430】 G.プロービングとプロファイリングの対話 プロービングとプロファイリングは、相互に排他的である。プローブは、TA
Xi_State.Profile_Active(TAXi_コントロール.
プロファイル_アクティブ)(図4hおよび5aの482)が「0」となってい
る間にプローブ可能なイベント(図4bの列610)があるときに限って起こり
得る。この制約は、図6bのアンド・ゲート674によって強制される。これに
対してプロファイリングは、TAXi_State.Profile_Acti
ve(TAXi_コントロール.プロファイル_アクティブ)482が「1」で
なければイネーブルされない。このように、プロセッサがプローブ例外を取ると
きには、相互排他によってプロファイリングによって使用されるリソースが活動
しないことが保証される。より詳細に述べれば、プロファイル・パケットが蓄積
される汎用レジスタを例外サービスに使用できることが保証されるということに
なる。
【0431】 各プローブ可能なイベント610は、「開始パケット」イベント418でもあ
る。このことは、実用的な設計上の考慮事項を反映している:すなわち、プロー
ブ可能なイベント610のクラスは、プログラムのフローの中でもっとも重要な
イベントであり、「開始パケット」イベント418は、その重要なイベントを多
少広げたセットである。プローブがイネーブルされているクラスにおいてプロー
ブ可能なイベント610が発生し、TAXi_State.Profile_A
ctive(TAXi_コントロール.プロファイル_アクティブ)(図4hお
よび5aの482)が「0」であれば、そのイベントは「開始パケット」イベン
ト418にもなる。さらに、TAXi_State.Profile_Requ
est(TAXi_状態.プロファイル_要求)484が「1」であれば、プロ
ファイラ400が、自動的にTAXi_State.Profile_Acti
ve(TAXi_コントロール.プロファイル_アクティブ)(図4hおよび5
aの482)およびTAXi_State.Profile_Request(
TAXi_状態.プロファイル_要求)484の遷移、つまり図5aの遷移52
2をトリガする。これは、相互排他を侵害することになる。しかしながら、プロ
ーブ例外は、プロファイラ400のすべてのアクティビティより優先度が高い。
したがって、プローブの成功に応答してコントロールがTAXiコードに移され
、あらゆるプロファイラのアクションが抑圧される。このプローブが失敗すれば
、プローブのクラスがディセーブルされ、プロファイラ400に、図5aならび
に5b、および前述のセクションV.Fにおいて示したような正常な進路を取る
ことが許される。
【0432】 プロファイル・パケットの内容、特にContext_At_Point(コ
ンテキスト_アット_ポイント)プロファイル・エントリ(図4cの430)は
、ホット・スポット・ディテクタ122によって要求される情報を効率的に表現
するため(頻繁に実行されるインストラクションがストアされているアドレスの
範囲を正確に識別するため)に調整され、かつTAXiトランスレータ124用
に効率的に調整され(コード・テキスト自体の中には現れていないX86のセマ
ンティック・モード情報を捕捉するため)、かつTAXiプローバ600用に効
率的に調整される(プロービングの適否を判断し、TAXiコードにコントロー
ルを移動する前に、バイナリが翻訳されたセマンティック・モードの仮定がカレ
ントX86セマンティック・モードに適合することを確認するために必要な情報
)。その表現は、これら3つのいずれか1つに最適であるということはないが、
3つのいずれに対しても極めて良好である。別の実施態様においては、上記3つ
のうちの1つの効率をほかよりも助長するため、あるいは1つの恩典だけのため
に表現を調整することができる。
【0433】 プローブ可能なイベント610が「開始パケット」イベント418のサブセッ
トであるという事実は、さらに望ましい副次的な効果を有する:すなわち、パケ
ット内の最初のプロファイル・エントリ430を取り込むハードウエアが、プロ
ーブ例外ハンドラによって必要な情報の捕捉に再使用可能になる。プローブ例外
を引き渡すハードウエアに関して決定がなされるとき、例外ハンドラに対して、
コントロールが渡された物理アドレスならびにマシンのコンテキストに関する情
報が提供される。プローブ例外に関する情報は、Context_At_Poi
nt(コンテキスト_アット_ポイント)プロファイル・エントリ430内に取
り込まれるフォームを反映するフォームで図5bのレジスタ594内に集められ
る。ハードウエア内においてプローブ例外を生成するプロセスもしくはソフトウ
エア内においてサービスするプロセスのいずれにおいても、レジスタ594の内
容が汎用レジスタの中に取り込まれる。この取り込みは(X86セグメント記述
子レジスタ内にストアされているCSリミット(コード・セグメント長)が補わ
れたとき)、プローブ例外ハンドラによって必要とされる情報を提供する:すな
わち、PIPM 602をインデクスし、可能性のあるエントリの候補を見つけ
るために使用される次のインストラクションの物理アドレス、およびそのエント
リの適否を判断するために必要なX86モード情報である。Context_A
t_Point(コンテキスト_アット_ポイント)430に取り込まれるアド
レスは、PIPM 602へのインデクスに直ちに使用できる物理ページ番号を
有している。すべてのプローブ可能なイベントが「開始パケット」イベントであ
ることから、モード情報は、ホット・スポットを識別するパケットを開始したC
ontext_At_Point(コンテキスト_アット_ポイント)プロファ
イル・エントリ430内において容易に得られる。また、適切なビットの論理積
を求めることにより、互換性に関して各種のスナップショットを互いに比較する
ことができる。
【0434】 周期的なサンプリングによって運用されるプロファイル収集とは異なり、プロ
ービングは、コンバータがアクティブであり、TAXi_Control.pr
obe(TAXi_コントロール.プローブ)フラグが「1」であり、かつプロ
ーブ・マスクの少なくとも1つのビットが「1」である限り、常にイネーブルさ
れる。
【0435】 H. 適応便宜的統計技法の代替使用 セクションVI.A〜VI.Eにおいて説明した適応型日和見的実行ポリシー
は、CPU設計における多数のセッティングに使用することができる。
【0436】 一実施例においては、CPUが浮動小数点ユニットを通る高速パスおよび低速
パスを有し、それにおいて高速パスは、IEEE−754の浮動小数点の無限大
、逆正規化数(「denorms(デノルム)」)およびNaNの完全なインプ
リメンテーションを省略し、低速パスは、完全なハードウエア・インプリメンテ
ーションを提供する。無限大、デノルム、およびNaNは、頻繁に発生する傾向
にないが、生成されると逐次より多くの演算に伝播される傾向にあることから、
デノルムもしくはNaNが生じないという楽観的な仮定の下に開始し、高速パス
を使用するべくCPUを構成することは有利である。無限大、デノルムもしくは
NaNが検出されると、CPUは、低速パスに戻ることができる。タイマをセッ
トして起動し、それがタイムアウトしたとき、CPUは、高速パスの再開を試み
る。
【0437】 別の実施態様においては、類似の適応型日和見的テクニックをキャッシュ・シ
ステムに使用することができる。たとえば、マルチ‐プロセッサのキャッシュは
、プロセッサ間バスの監視によってキャッシュ内の多くのデータが共有されてい
ることが示されるときはライト‐スルー、共有データがメッセージ・ボードとし
て集中的に使用されていることが示されるときはライト‐イン、バスの監視によ
ってデータがほとんど共有されていないことが示されるときはライト‐バックと
いう形でキャッシング・ポリシーを切り替えることができる。キャッシュ・ライ
ンのフラッシュまたは無効化は、よりコストの高いポリシーに実行を戻さなけれ
ばならないことを通知する「失敗」であり、それに対してよりコストの低いポリ
シーにおいて書き込みに成功すると、「成功」によってよりコストの低いポリシ
ーの継続的な使用が可能になる。この適応は、アドレス範囲を基準に、明確なア
ドレス範囲に関して維持される成功および失敗の記録を用いて管理することがで
きる。モード間の切り替えのマネージには、多くのテクニックを使用することが
できる。たとえば、カウンタを用いて、キャッシュが別のモードにあればより効
率的に処理されたと見られる連続的なメモリ・アクセスの数をカウントする。そ
のカウンタの数がスレッショルド値に達すると、キャッシュを別のモードに切り
替える。あるいは、タイマによりキャッシュをより楽観的なモードにセットし、
その楽観性の仮定を侵害するアクセスがあると、キャッシュをより楽観的でない
モードにセットすることも考えられる。
【0438】 日和見的ポリシーは、ブランチの予測、キャッシュのプリフェッチ、あるいは
キャッシュのイネーブルにも使用することができる。たとえば、キャッシュのプ
リフェッチを、プリフェッチが成功している限り機能させる。あるいはプリフェ
ッチが継続的に成功している限り、ループ内の特定のLOAD(ロード)インス
トラクションを、キャッシュのプリフェッチのための候補として識別してもよい
。プリフェッチが失敗したときに、プリフェッチをディセーブルする。
【0439】 楽観的な仮定の下にマルチ−プロセッサのキャッシュが特定のデータをキャッ
シュし、その後、プロセッサ間のキャッシュのトラッシュによってそれらのデー
タをキャッシュすることが有益でないと示されたとき、それらのデータをキャッ
シュ可能でないとしてマークすることも考えられる。
【0440】 また日和見的ポリシーは、オブジェクト指向メモリ・システムにおいてメモリ
のあいまい性を除去する上でも役立つと見られる。たとえば、コンパイラが1つ
のソース構成に対して2つの代替コーディングを生成し、一方は共通の元を持た
ないと仮定し、他方はオーバーラップがあると仮定する。共通元を持たないとす
る楽観的なコードは、楽観的な仮定が維持されている限り使用するが、それが維
持されなくなったとき、コントロールが楽観的でないコードに戻る。
【0441】 VII 変換された命令の確認と無効化 TAXiシステムは複雑キャッシュ(complex cache)と相似であり、プロファ
イルデータおよびTAXiコードはX86の命令テキストのページと共に現行の
ままであるが、X86の命令テキストが修正された時には無効にされなければな
らない。X86命令テキストを修正する可能性を有する原因として、CPUによ
るメモリの書込みおよびDMAデバイスからの書込みという2つの原因がある。
上記のセクションI.Fで論じられたように、CPUからの書込みはXP保護ビ
ット184、186によって保護され、上記のセクションVI.Cおよびセクシ
ョンVI.Dで論じられたように、PIPM602内で有効性をチェックする。
このセクションVIIでは、キャッシュされた情報を、DMAの書込みによるX
86命令テキストの修正に対して保護することについて論じる。
【0442】 図7aを参照すると、DMU700(DMA監視ユニット)はASIゼロ(ア
ドレス空間ゼロ、「挙動の正しい」(well−behaved)非I/O空間)へのDMA
書込みを監視し、ページフレーム修正の形跡を圧縮して提供する。DMU700
は過剰なオーバーヘッドを必要とせずにこの監視を実行する。DMU700は、
主プロセッサバス(Gバス)上で直接実装されるのではなく、I/Oゲートウェ
イ内でI/Oデバイスとして実装される。このためDMU700には、物理メモ
リ内のX86コードページに関する、すべての非プロセッサの更新を検出する可
視性が与えられる(書戻しキャッシュの挙動によってマスキングされている、プ
ロセッサ自体によって開始された更新は除く)。
【0443】 A.単純化されたDMUモデル 簡単なDMUは、システム内の各物理ページフレームに関して、修正されたペ
ージフレーム(MPF)ビットを提供する。ゼロのMPFビットは修正が発生し
なかったことを示し、DMA移動(transfer)を対応するページフレームに書き込
む場合、修正イベントをそのページフレームに対して報告する必要がある。1の
MPFビットは、対応するページフレームへのDMA書込みは報告せずに通過す
べきであることを示す。
【0444】 この簡単なDMUは、すべてのMPFビットをゼロにすることによって開始さ
れる。ついで、各DMA書込みに関して、関連するMPFビットがチェックされ
る。そのMPFビットがすでに1である場合、次の処理は発生しない。MPFビ
ットがゼロのままである場合、そのビットは1に設定され、たとえばFIFO内
に項目を作成することによって、修正されたページフレームの識別(identity)が
報告される。ページフレームのMPFビットが1になり修正が報告されると、そ
のページフレームへさらにDMA書込みがあっても、別の修正レポートが生成さ
れることはない。
【0445】 この簡単なDMUは、ページの修正の報告を非常に圧縮する。事実、これによ
って、生成される修正レポートの数はおそらく最小になる。DMU700自体は
どのMPFビットもゼロにすることはなく、1に設定するだけだという事実から
証明される。修正レポートの可能な数はMPFビットの数、または同じ意味であ
るが、ページフレームの数によって制限される。ほとんどのDMA書込みは「デ
ータ」I/Oに関するバッファページへの書込みであるが、監視されるべき重要
な書込みはX86命令テキストのページへの書込みであり、この書込みはそれほ
ど頻繁には発生しないので、この挙動はオーバーヘッドを低減し、正しい挙動を
維持する。
【0446】 ページフレームのMPFビットがゼロである限り、TAXiシステムは、MP
Fビットが最後にゼロに消去されてからはDMA修正が発生していないことが確
認される。このように、プロファイラ400がX86ページをプロファイルしよ
うとする時、TAXi変換を生成しようとする時、TAXi変換を実行しようと
する時はいつでも(そのページに関する情報をキャッシュするまたはキャッシュ
された情報を使用する動作)、そのページのMPFビットはゼロにされ、保留中
の修正レポートを含む可能性のある任意の待ち行列またはFIFOはフラッシュ
される。次に、ページからのプロファイルまたは変換情報がエンキャッシュ(enc
ache)される可能性がある。ページフレームの修正が報告される時はいつでも、
そのページに関する任意のエンキャッシュされた情報が放棄される。一度キャッ
シュされた情報がパージされると、そのページに関するMPFビットはゼロにリ
セットすることが可能であり、そのページに関する情報は再びキャッシュされる
場合がある。
【0447】 B.少メモリ使用設計のデバイス概要 上記のセクションVII.Aに説明された簡単な設計は正しく実行され、割込
みオーバーヘッドがほとんどないが、メモリを多く消費しすぎる場合がある。2
8ビットの物理アドレス空間および4KBのページフレームを伴うシステム上に
は、65Kのページフレームがある。これは、8KB(または256 256ビ
ットキャッシュ線)に相当し、ちょうどMPFビットを保持する。これらのビッ
トはメモリ内にストアされる場合もあるが、各DMA書込みサイクルに応答して
、このようなメモリに基づいた構造のDMAを読み取ることは不可能なので、D
MU700は所定の種類のキャッシュ化機構を含む必要がある。
【0448】 このセクションで説明する設計は、セクションVII.Aの簡単なモデルに非
常に似ている。以下に論ずる実施形態では、全MPFアレイの、小さな、規則的
な、自然に配置されるスライスが必要に応じてインスタンス化され、物理アドレ
ス空間の対応する範囲を監視する。この設計は任意の所与の瞬間に、全物理アド
レス空間のサブセットのみを監視する。アイドルの監視リソースが利用されて異
なる物理アドレスを監視する時、このDMU700に関する設計は、監視対象の
範囲内に、そのページフレームに対して修正が報告されているページフレームが
ないという保守的な(conservative)仮定を行う。この保守的な仮定により、過去
の一定の時点ですでに修正が報告されているページフレームに対して、修正が冗
長に報告されるという結果が生まれる。
【0449】 C.セクタ監視レジスタ 図7aを参照すると、DMU700は、典型的には4〜8であるいくつかのセ
クタ監視レジスタ(SMR)707を有する。ここで論じられる例としての実施
形態では、SMRファイル内に4つのSMR707があると仮定されている。各
SMR707はセクタ、ページフレームの数の2乗である(a power of 2 number
of page frames)自然に配置された領域を監視する。図7aの実施形態では、セ
クタは自然に配置された128KB範囲の、Gバス物理メモリアドレス空間であ
り、または、自然に配置された324KBのページフレームのグループである。
各SMR707はコンテンツでアドレス指定可能なセクタ(content addressable
sector)CAM(TLBアドレスタグと類似した、コンテンツでアドレス指定可
能なメモリ)708、MPF(修正したページフレーム)ビットのアレイ710
、有効ビット711、および少量の論理から成る。セクタCAMアドレスタグ7
08は、28ビットの物理アドレス空間(ページ内のバイトアドレスより12ビ
ット少ない28、セクタごとに32ページに関して5ビット少ない。図7aを参
照のこと)に対して11ビットである。MPFアレイ710は32ビットを有し
、セクタ内のページフレームごとに1ビットである。各MPFアレイは本質的に
は、セクションVII.Aで説明された、32ビットスライスの大きなMPFビ
ットアレイである(大きなDMA移動を使用するチャンスを最大限にするために
、現代のオペレーティングシステムは物理メモリ内でシーケンシャルなクラスタ
でシーケンシャルな仮想ページを維持する傾向があるので、MPFアレイ710
内のページをクラスタ化すると、少ないアドレスタグ一致オーバヘッドで、異な
るMPFビットの利点のほとんどが提供される)。SMR707が最後に読み取
られてから、MPFビット710のゼロから1の遷移が少なくとも1回あった場
合には、SMR.Activeビット711は1に設定される。このようにして
、DMU_Statusレジスタ720を介してSMR707が最後に読み込ま
れた時から、ゼロから1に遷移したMPFビット710が少なくとも1つ含まれ
る時に、SMR707は有効711である(次の、セクションVII.Gを参照
のこと)。DMU700は、有効なSMR700を割り当て直して、異なるセク
タを監視することはない。
【0450】 DMU割込みは、1つまたは複数のページフレームが修正された時、すなわち
、MPFビットがゼロから1に遷移した時に代入(assert)される。DMU割込み
のためのハンドラは、修正されたページフレーム(複数可)を識別する。修正さ
れたページがX86テキストである場合、任意の変換されたTAXiコード、お
よびページを記述する任意のプロファイル情報がパージされ、対応するPIPM
項目640がリリースされる。
【0451】 図7aを参照すると、物理アドレス空間は従来の方法で4Kのページに分割さ
れる。ページはセクタと呼ばれる隣接するブロックにグループ化される。図7a
の実施形態では、32の、隣接する、自然に配置されるページが1つのセクタを
形成する。最大で256MBの物理メモリを可能にするこの実施形態では、ビッ
ト<27:17>702がセクタを示す。別の実施形態では、セクタを示すビッ
ト702の数を拡大することにより、より大きな物理メモリに対応することが可
能である。 ビット<16:12>704は、セクタ702内のページ番号を示す。ビット<
11:00>は、ページ内のバイトを示す。
【0452】 D.インタフェースと状態レジスタ(status register) 図7bは、DMUインタフェースを示す。DMU_Commandレジスタ7
90へ書き込むと、セクタアドレス702およびページアドレス704(ページ
アドレス704は、SMR707内のページのMPFビットに関するビットアド
レスである)、およびDMU700コマンドをGバスデータから提供する。DM
U_Commandレジスタ790に書き込まれるデータのうち、下位の6つの
ビットがコマンドを示す。コマンド部分の6つのビットは、D、E、R、A、M
およびX 791a〜796aと示されている。(これらのビットの意味は、次
のセクションVII.Hに詳細に論じられる)。DMAデバイスがメモリへの書
込みを発行すると、コマンド値は、ゼロに等しいD、E、R、および、1に等し
いA、M、Xになる。D信号、E信号、A信号、M信号、X信号およびR信号か
ら、いくつかの述部(predicate)が導出される。イネーブル信号714は、DM
Uが現在作動状態であることを意味する。割りつけ信号715は、メモリがDM
Aデバイスから書き込まれたバストランザクション上に代入され、したがって、
SMRレジスタは一致するか、または新しく割りつけられて書込みをトラッキン
グしなければならない。MPF修正信号716は、コマンドビットの設定によっ
てMPFビット710の内容が書き込まれるべきことが指定された時に代入され
る。MPFデータ信号717は、MPF修正716が代入された時に、MPFビ
ット710に書き込まれるべきデータを搬送する。Rリセットコマンド794a
がバス上に代入された時に、リセット信号718が代入される。読取り信号71
9は、Gバスの異なる線として代入される。図7bはまた、イネーブルフリップ
フロップおよびオーバーランフリップフロップ、また、割込み生成論理を示す。
6つのコマンドビット791a〜796aの意味は、次に図7iおよび図7jと
共に、さらに詳細に論じられる。
【0453】 DMU700が作動状態にされた714である時、DMU700は、そのSM
R.Activeビット711が1であるSMR707が少なくとも1つある時
、またはDMUオーバーランフラグ728が設定された時はいつでも、割込みを
要求する。有効な711SMR707は、DMU_Statusレジスタ702
内にさらされる(expose)。
【0454】 図7cを参照すると、DMU_Statusレジスタ720は64ビットの広
さである。セクタビットは、物理アドレス内の自然な位置、ビット<30:17
>にあり、最大で2BGの物理メモリでの実装を許可する。DMU_Statu
s.Activeビット723(ビット<31>)は、すべてのSMRの707
が無効であって、有効711SMR707が選択され、ゼロである時に、1であ
る。修正したページフレームの最下位ビット(SMR<32>)724は、セク
タ内のもっとも低いアドレスのページフレームに対応する。これに続くMPFビ
ット710は、順次高いページフレームに対応する。DMU_Status.A
ctiveビット723が1の場合、SMR#フィールド725(SMR<02
:00>)の値は、戻されているSMR707を識別する。DMU_Statu
s.Activeビット723がゼロの場合、修正したページフレームのビット
710、セクタビット722、およびSMR#725は、すべてゼロである。
【0455】 イネーブルビット727およびオーバーランビット728は、実際には特定の
SMR707の一部ではない。これらは、DMU700および、すべてのSMR
の707(all SMR's 707)の全体的な状態をある程度まとめる。DMUイネーブ
ル714が設定されている時のみ、DMAアクティビティが監視される(DMU
_Status.Enable727は、DMUイネーブル714の値を反映し
、DMUイネーブル714の値はDMU_Command.Enable795
へ書き込むことによって設定される。図7iおよび図7jを参照されたい)。オ
ーバーランビット728は、SMR707が読み取られている時に提供され、破
壊的なオーバーラン状態に対応してDMU700がシャットダウンされた場合を
認識することを可能にする。ビット<15>としてのオーバーランビット728
の位置は(DMU_Statusレジスタ720の16ビットセグメントの符号
ビット)、そのテストを簡単にする。 DMU_Statusレジスタ720は、図7hに関してセクションVII.G
でさらに論じられる。
【0456】 E.動作 図7dを参照すると、DMA書込みトランザクションごとに次のステップが発
生する。ステップ730では、DMUイネーブル714、727がテストされる
。DMUが使用不可になると、次の処理は発生しない。ステップ731では、D
MAバストランザクションのターゲットの物理アドレスがDMU_Comman
dレジスタ790内にキャプチャされる。図7aに示されるように、ターゲット
アドレスのビット<27:17>702は、セクタ番号としてキャプチャされ、
ビット<17:12>704はページ番号インデックスとして、32MPFビッ
ト710のSMR内にキャプチャされる。ステップ740では、SMRセクタC
AMアドレスタグ708は、セクタ番号を使用して連合して検索される(この検
索は、セクションVII.Fの図7eの論議の中でさらに詳述される)。検索が
成功すると(矢印732)、制御はステップ737にスキップする。どのセクタ
CAMアドレスタグ708とも一致しない場合(矢印733)、ステップ750
では、無効なSMR707(SMR.Activeビット711がゼロであるS
MR)が割りつけられる。(割りつけはさらに、図7fに関して論じられる)。無
効なSMR707が使用可能でない場合、破壊的なオーバーフロが発生しており
、ステップ734で、DMUオーバーラン728が設定される。オーバーラン7
28でTAXi処理が中断され、すべての変換されたコードセグメントはパージ
される。(オーバーラン728の原因となったDMA書込みは、TAXiコード
に対応していたX86コードのページを上書きしてしまっている場合があること
が知られているが、そのページの識別を特定することは不可能であるので、TA
Xiコードのすべてのページが疑わしいとされる)。TAXi「キャッシュ」が
パージされると、TAXi動作は再開が可能になる。無効なSMR707の位置
が突き止められた場合(矢印735)、次のステップ736では、割りつけられ
たSMR707の中ですべてのMPFビット710がゼロにされる。割りつけら
れたSMR707のセクタCAMアドレスタグ708は、検索キーであるセクタ
番号702と共にロードされる。このようにしてSMR707が割りつけられ、
設定されると、連合検索の基準に達し、ステップ740の検索が正常に終了され
た時のように、制御はステップ737に流れる。
【0457】 ステップ737では、マッチングSMR707の中で、修正されたページフレ
ームに対応するMPFビット710がテストされる。MPFビット710がすで
に1に設定されている場合(矢印738)、これ以上の処理は必要ではない。1
に設定されていない場合(矢印739)、ステップ760、778で、適切なM
PFビット710およびSMR.Activeビット711が1に設定される(
有効ビット711はすでに設定されている場合もある)。
【0458】 F.回路 図7eを参照すると、セクタマッチハードウェア740は、セクタCAMアド
レスタグ708の連合検索を実行し、現行のDMU書込みトランザクションのセ
クタ702がすでに、SMR707を関連させているかどうかを決定する。セク
タ比較回路741は同時に、DMU_Commandレジスタ790からのセク
タアドレス702と、SMRファイル内の4つのSMR707の4つのCAMア
ドレスタグ値708の各々を比較する。セクタ比較回路741はこの比較の結果
を、4つのビットバス742上に置き、対応するSMRアドレスタグ708がバ
スセクタアドレス702に一致する場合、バス742の各線は1に設定される。
バス742の4本の線のうち任意の1本が1である場合、一致があったというこ
とであり、ORゲート743は4本の線を共にOR処理して、一致が発生したか
どうかを決定する。無効なSMR707内のセクタ値が定義されないので、複数
のSMR707が入力セクタアドレス702に一致している可能性がある。単一
(unary)優先順位機能745は、バス742から代入された4本の線のうち多く
ても1本を決定論的に選択することによって、このあいまいさを解決する。した
がって、「一致したSMR」4ビットバス746では常に、1に設定される線は
多くても1本である。
【0459】 図7fを参照すると、SMR割当てハードウェア750は、現行のSMRのア
ドレスタグ708のうちセクタアドレス702に一致するものがない場合、書込
み用のプールから、無効なSMR707のうち1つを割りつける。無効なSMR
機能751は、無効なSMR707のうち1つでも使用可能なものがある場合は
、それを選択する(SMR.Activeビット711がゼロであるもの)。現
行のバストランザクションが、対応するアドレスタグ708を伴うSMR707
を有しないメモリセクタ702に書き込んでいる場合(一致した744がゼロで
あることによって示される)、および、書込みを受け入れる無効な711である
SMR707がない場合(割りつけ715が1であることによって示される)、
オーバーラン728状態が発生している。そうでない場合は、書き込むSMRマ
スク(SMR−to−write mask)753(4ビットバスであり、書き込まれるべきS
MRレジスタに対応する1つの線が代入されている)が、読み取るSMRマスク(
SMR−to−read mask)787(4ビットバスであり、読み取られるべきSMRレ
ジスタに対応する1つの線が代入されている)、一致したSMRマスク746(
4ビットのバスであり、CAMセクタアドレスタグがバスアドレスセクタ702
に一致する、SMRレジスタに対応する1つの線が代入されている)、および、
無効なSMRマスク754(4つのSMRレジスタ707の4つのSMR.Ac
tiveビット711の補数(complement))から生成される。 セクタ一致回路740または割りつけ回路750がSMR707を選択すると
、MPF更新論理760、772、778は、適切なMPFビット710および
SMR.Allocateビット711を、選択されたSMR707の中で更新
する。(MPF更新論理760の一部、SMRアドレスタグ708およびSMR
.Activeビット711を更新する部分772、778は、図7eおよび図
7fに示され、図7gからは除かれている)。修正するMPFビット710はM
UX761によって選択され、この選択は、書き込むSMRマスク753である
。セクタアドレス702がSMR707のアドレスタグ708のどれとも一致し
ていない場合744、これは新しく割りつけられた空のSMR707であり、A
NDゲート762は、新しいSMR707のすべてのMPFビット710がゼロ
になるように、すべてゼロを生成する。MPFビット更新機能763は、選択さ
れたSMR707のMPF部分710に関して、新しい32ビット値764を生
成する。MPFビット更新機能763への入力は、セクタ702内の5ビットの
ページアドレス704(これらの5ビットは、MPFの32=25ビットのうち
1つを選択する)、MPF710の古い内容、およびMPF修正信号716であ
る。MPFビット更新機能763の出力764、766は、表765にしたがっ
て選択される。古いMPFビット710の値がゼロであり、新しいビット710
の値が1である場合、ゼロから1のMPF遷移766信号(Zero−to−One MPF
transition signal)が代入される。32ビットの新しいMPF値764は共にO
R処理されて、MPFすべてゼロ信号(MPF−all−Zeros signal)767を生成す
る。書込み論理768は、入力としてリセット信号718、割りつけ信号715
、一致した信号744、MPF修正信号716、および書込みSMR信号753
を使用して、更新するMPFビット710を決定する。書込み論理768の出力
770、771は、表769にしたがって選択される。列770が1である場合
、書込みSMRマスク753によって選択されたSMR707のMPFビット7
10は32ビット値764で書き込まれる。列771が1である場合、他のSM
Rの707も同時に書き込まれる。このように、表769の最後の線は、リセッ
ト718が、ANDゲート762によって生成されたすべてゼロの値をすべての
MPFレジスタ710に書き込むことを示す。
【0460】 再び図7fを参照すると、書込み論理772は、表773にしたがって新しい
SMR.Activeビット711値を書き込むことを決定する。書込み論理7
72への入力は、読取り719、MPFすべてゼロ信号767、およびゼロから
1へのMPF遷移信号766である。列774は、書込み論理772へのデータ
入力が列719、767、766に一致する時、書込みSMR753に選択され
たSMR707のSMR.Activeビット711に書き込むかどうかを伝え
る。列774が1である場合、列775は、そのSMR.Activeビット7
11に書き込むデータ値を伝える。 同様に、列776は、選択されないSMRレジスタのSMR.Activeビ
ット711に書き込むか否かを伝え、列777は書き込むデータ値を伝える。
【0461】 再び図7eを参照すると、新しく割りつけられた750SMR707のセクタ
タグ708は、書込み論理778によって決定されたように書き込まれる(書込
み論理778は論理768、772に織り込まれ、ここでは解説のために示され
ている)。書込み論理778は、入力として割りつけ信号715および一致した
信号774を受け入れ、その出力を表779にしたがって計算する。表の中央の
行によって示されているように、空のSMRが割りつけ論理750によって割り
つけられると(新しい割りつけは、1である割りつけ715によって示され、空
であることは、一致済み744がゼロであることによって示される)、書込みS
MRマスク753によって示されるSMRのセクタアドレスタグ708が書き込
まれる。そうでない場合は、表779の上と下の行によって示されるように、S
MR707は書き込まれない。
【0462】 図7d〜図7gは、1つの実施形態の例に過ぎない。一般的に、連合キャッシ
ュまたはTLBアドレスタグ一致、キャッシュ線配置方針、プロセッサ間の修正
されたビットおよびダーティビットに関する既知の技法を適用し、SMR707
を管理することが可能である(1つの違いを指摘しなければならない。ソフトウ
ェアで管理されたTLB内では、TLBミス上で(on a TLB miss)メモリ内のP
TEが更新され、ついでPTEはTLBにコピーされる。したがって、TLBの
信頼できるバッキングコピーが常に存在する。ここで示されたDMU設計では、
SMRレジスタ707に関するバッキングメモリはない)。
【0463】 図7dの代替の実施形態では、追加のステップがステップ740と並列に実施
される。TLB116が調べられて、書き込まれているページに関して、ISA
ビット182および、XPビット184、186を決定する。ISAビット18
2、およびXPビット184、186が両方とも1でない限り(保護されたX8
6コードのページを示す)、DMUの残りのすべてはバイパスすることが可能で
ある。DMUは、元のX86コードに対して、TAXiコード「キャッシュ」の
有効性をトラッキングするためにのみ存在し、このようなTAXiコードが存在
する可能性がない場合、残りの機能は省略することが可能である。
【0464】 MPFビットがゼロから1へ遷移する時、すなわち、1つまたは複数のページ
フレームが修正されている時はいつでも、DMU割り込みが生じる。DMU割り
込みのためのハンドラは、すべての有効な711SMRの707の状態を検索す
ることによって、修正されたページフレーム(複数可)を特定する。有効なSM
R707に関する検索は、次に説明するようにハードウェア内で実行される。 G.DMU_状態レジスタ
【0465】 図7cと共に図7hを参照すると、DMU_Statusレジスタ720はG
バス上の64ビットレジスタである。これは通常のTAXi動作で使用されるD
MU情報の唯一のソースである。DMUイネーブル714(DMU_Statu
s.Enable727内に反映され、DMU_Statusレジスタ720の
ビット<14>である)がゼロである場合、DMU_Statusレジスタ72
0のすべての読取りは、完全にゼロである結果を戻す。このような読取りは、D
MU700を再び作動状態にすることはない。DMUを再び作動状態にするには
、再初期化をしなければならない。DMUイネーブル714が1であり、有効な
711であるSMR707がない場合、DMU_Status720のすべての
読取りは、DMU_Status.Enableビット727の1を除いては、
完全にゼロである結果を戻す。DMUイネーブル714が1であり、SMR.A
ctiveビット711が1である少なくとも1つのSMR707が存在する場合
、読取りDMU_Status720は有効な711SMRの707のうち1つ
のスナップショットを戻す。このスナップショットは少なくとも1つのMPFビ
ット710セット、DMU_Status.Activeビット723セット(
SMR707のSMR.Activeビット711を反映する)、およびDMU
_Status.Enableビット727セットを有する。DMU_Stat
usレジスタ720の読取りは、現在DMU_Statusレジスタ720内に
反映されているSMR707のSMR.Activeビット711をゼロにする
という副次的な作用を有し、SMR707を再割りつけ750可能な状態にする
が、アドレスタグ708およびMPFビット710はそのままである。したがっ
て、同じページに対してさらにDMA書込みが行われても、新しいゼロから1へ
の遷移は起らず、強力なI/OからI/Oバッファによって引き起される割込み
オーバヘッドを低減する。このSMR707は、SMR707が再割当てされた
750になった場合、またはMPFビット710がゼロであるページフレームへ
の書込みをSMR707が監視するセクタ702内でDMA書込みが発生する時
のみ、再び有効な711になる。同様に、DMU割り込みは、そのページに関す
るMPFビットが明示的に消去される場合のみ、そのページに関して生じる(M
コマンドビットが1であり、他のコマンドビットがゼロであるコマンドを使用す
る。セクションVII.Hに論じられるコマンドを参照されたい)。
【0466】 DMU_Statusレジスタ720は、SMRの707のファイルからの入
力によって駆動される。SMR選択機能782は、SMR.Activeビット
711が1であるSMR707を選択する。有効なSMRの選択783を使用し
て、対応するセクタタグ708および選択されたSMR707のMPFビット7
10部分を選択する784。有効な711SMR707がない場合(ORゲート
785によって計算される)、またはDMUが使用不可である場合714、AN
Dゲート786はすべての出力がゼロであるようにする。選択783はANDゲ
ートによってゲーティングされて、読取りSMR信号787を生成し、これは図
7f内で使用されて読み取られるべき1つのSMRレジスタを選択する。
【0467】 割込みハンドラソフトウェアの動作に戻ると、DMU_Statusレジスタ
720を読み取る行為は、暗示的な通知の確認としてDMU700によって行わ
れ、したがって、関係するSMR(複数可)707の符号を再割当てすることが
可能である。DMU割込みハンドラは、ページに関してISAビット180、1
82、およびXPビット184、186をチェックし、DMU書込みによって書
き込まれたページが保護されたX86ページであるかどうかを確認する(これを
ハードウェアまたはソフトウェア内で実行してから、割込みを発生させることが
可能である)。そのページが保護されたX86ページである場合、割込みハンド
ラはPIPM602を調べて、修正されたページに対応する変換されたTAXi
コードが存在するかどうか、また、修正されたページを記述するプロファイル情
報430、440が存在するかどうかを確認する。TAXiコードが発見された
場合、TAXiコードがリリースされ、PIPM602は更新されて解放を反映
する。プロファイル情報が発見された場合、プロファイル情報がリリースされる
【0468】 DMU割込みはプローブ例外(probe exception)よりも高い優先順位を有する
ので、プローブ(probe)は最近無効にされたページに制御を移動しない。 H.DMU_コマンドレジスタ
【0469】 図7bと共に図7i、図7jおよび表5を参照すると、ソフトウェアはDMU
_Commandレジスタ790を介してDMU700を制御する。ビット<0
5:00>791〜796はDMU700の初期化を制御し、オーバーランの後
に対応して、修正がすでに報告されているページフレームに対して行われた修正
を再び報告できるようにし、DMUトラフィックをシミュレートする。ビット7
91の機能は次の表5にまとめられている。
【0470】
【表5】
【0471】 Dコマンドビット796a、796b、796cは、DMUイネーブル714
、727をゼロにし、これによって、DMUトラフィックによって生じるSMR
707のこれ以降の変更を使用不可にする。DMUイネーブル714、727が
すでにゼロである場合、Dビット796は効果を有しない。
【0472】 Eイネーブルコマンドビット795a、795b、795cは、DMUイネー
ブル714、727を1に設定し、これによって、将来のDMUトラフィックお
よびDMU割込みの監視を使用可能にする。DMUイネーブル714、727が
すでに設定されている場合、Eビット795は効果を有しない。
【0473】 Rコマンドビット794a、794b、794cはDMU700をリセットす
る。これは、各SMR707にあるSMR.Activeビット711およびす
べてのMPFビット710をゼロにし、さらにDMUオーバーランフラグ728
をゼロにすることによってリセットを行う。Rコマンドビット794は、セクタ
アドレスCAMアドレスタグ708内の値に影響を有しない。Rコマンド794
はAコマンド793、Mコマンド792、およびXコマンド791より優先され
、DMU700が使用可能になっているかどうか、DMU700をリセットする
【0474】 DMU_Commandレジスタ790の高いオーダのビット(ビット<27
:12>)797はページフレームを識別する。書込みがDMU_Comman
dレジスタ790に対して発生するといつでも、ページフレームアドレス797
がSMRセクタCAMアドレスタグ708に与えられる。Aコマンドビット79
3、Mコマンドビット792、およびXコマンドビット791は種々の状況の下
で起きたことを制御する。
【0475】 1.セクタ一致ハードウェア(図7eの740)がマッチ744を発見できず、
Aコマンドビット793がゼロであった場合、なにもしない。マッチ744がな
く、Aコマンドビット793が1である場合、図7dおよび図7fに関して説明
されたように正常な割りつけ750が実行される。(この正常な割りつけ750
はオーバーラン状態728につながり、さらにDMU割込みにつながる可能性が
あることを思い出されたい)。
【0476】 2.セクタマッチング740またはセクタ割りつけ750のいずれかが成功した
場合、Mコマンドビット792およびXコマンドビット791は、表6にしたが
って3つの可能なアクションを定義する。
【0477】
【表6】
【0478】 “1”に設定されたMコマンドビット792でDMU_Commandレジス
タ790にページフレームアドレス702、704、797を書き込むと、“0
”に設定された残りのコマンドビット791、793〜796は、一致するセク
タCAMアドレスタグ708を検索する。マッチ744が発見されると、対応す
るMPFビット710がゼロにされる(Mビット792は1であり、Xビット7
91はゼロであり、表6の第2の線に一致しているため)。これは、TAXiが
、ISAビット180、182が1であり、XPビット184、186がゼロで
ある(保護されていないX86コード)ページから、XPビット184、186
が1であるページ(保護されたX86コード)へ変わる直前のページの監視を可
能にする方法である。このようなコマンドによって消去されたMPFビット71
0がSMR707内に設定された唯一のMPFビット710であった場合、SM
R707は無効な711に戻り、再割りつけされて750、異なるセクタを監視
することが可能になる。SMR.Activeビット711は、ゼロから1への
MPF遷移、または1からゼロへの最後のMPFビットの遷移によってのみ影響
を受ける。そうでない場合は、SMR.Activeビット711は、MPFビ
ット710への変化からは影響を受けない。
【0479】 セクタCAMアドレスタグ708が互いに異なる値を含むようになるまで、D
MU700を使用可能にしないのはソフトウェアの責任である。オーバーラン7
28が発生すると、この状態は確実でなくなる。したがって、オーバーランへの
最も安全な対応は再初期化である。
【0480】
【式1】
【0481】 正しく初期化されないとDMU700の挙動は定義されず、チップに損害を与え
ないことと、セキュリティホールが持ち込まれないことのみが保証される。
【0482】 代替の実施形態では、DMU700はTLB116とさらに密接に統合されて
いる。これらの実施形態では、DMU700はISAビット182およびXPビ
ット186にアクセスを有し(上記のセクションI.Fを参照されたい)、保護
されたX86ページが書き込まれた時にのみ、または書き込まれたページがTL
B116中に項目を有しない時にのみ、割込みを発生させる。 VIII 順序の正しくない効果を管理する
【0483】 すべてのメモリリファレンス(メモリロード、メモリストア、命令フェッチ)
を正しい順序にし、最適化しないことが必要とされると、TAXiによって達成
可能な速度の上昇が制限される。最適化の唯一の障害はしばしば、ロードが、正
しく挙動するメモリまたは所定のメモリ状ではないオブジェクトを参照するか否
かを知っていることである。TAXi変換プログラムによる順序化の変更および
最適化をせずに、副次的な作用の元の秩序を復元し、完全なX86挙動を保存す
ることがセクションVIIIで論じられる。
【0484】 A.最適化変換により再順序づけされた事象の順序正しいハンドリングの保証 X86の完全なエミュレーションというTAXi実行モデルは副次的な作用の
順序を維持するが、バイナリ変換プログラム124では、例外または他の副次的
な作用を生成する可能性のある、浮動小数点命令、整数分割または他の命令など
メモリ読取り命令の順序を変更するコード最適化技法を使用することが許可され
ている。(「副次的な作用」は、メモリの書込み、X86/ウィンドウズアーキ
テクチャがアプリケーションプログラムにさらされる例外など、状態の永久的な
変更である。したがって、メモリの書込みおよびゼロによる除算は各々、他の副
次的な作用に対して順序が保護される副次的な作用である)。たとえば、すべて
のメモリリファレンス(メモリの読取り、メモリの書込み、命令のフェッチ)は
、「正しく挙動」しており、例外もなく隠れた副次的な作用もない。すべての副
次的な作用はたがいに対して順序づけられている。副次的な作用が非可逆的にコ
ミットされる前に、この楽観的な仮定に対して違反があれば捕まえることによっ
て、正い実行が確実になる。
【0485】 プロファイル情報(セクションVを参照のこと)がTAXi変換プログラム1
24に、たとえば、I/O空間への読取りなど(次のセクションVIII.Bを
参照のこと)メモリの読取りが副次的な作用を有する可能性があると伝えると、
X86コードは、メモリリファレンスが最適化されて冗長なロードを除去するか
または順序を変えられることを禁じるという、保守的な仮定を使用して変換され
る。この保守的なコードは、保守的な仮定の下で生成されたものとしてアノテー
トされる。保守的なコードがI/O空間にアクセスすると、アノテーションによ
って、コードが楽観的な仮定で生成されたものではないというランタイム環境が
確認されるので、メモリリファレンスが終了することが可能になる。保守的なコ
ードからの挙動の正しいメモリへのリファレンスは通常、それ以前の最適化をや
めるだけで終了する。
【0486】 逆に、I/O空間リファレンスがプロファイル内に現れない場合、TAXiコ
ードはすべてのリファレンスが正しく挙動している(すなわち、ASIゼロ)メ
モリへのリファレンスであるという楽観的な仮定の下で最適化され、メモリ読取
りは順序を変えられるか除去される可能性がある。コードは楽観的な仮定を記録
するようにアノテートされる。正しく挙動するメモリへのすべてのリファレンス
は、アノテーションがどのような値がであっても正常に終了する。楽観的なTA
Xiコードが実行され、楽観的なコードからI/O空間(ASIはゼロではない
)をリファレンスすることによってメモリリファレンスが楽観的な仮定に違反し
た場合、リファレンスはTAXiI/O例外によって中断される。TAXiコー
ドでは、I/O空間へのリファレンスは、コードが保守的な仮定にしたがってい
るとアノテートされている場合のみ終了することが許可される。TAXiI/O
例外が発生すると、例外ハンドラはコンバータ内で実行が再開するように強制す
る。
【0487】 TAXi変換プログラム124がネイティブコードを生成すると、TAXi変
換プログラムは、すべてのメモリリファレンスが、安全で正しい挙動のメモリへ
のリファレンスであり(ASIゼロ)、最適化することが可能であるという楽観
的な仮定を行う場合がある。たとえば、ロードはストアの前に移動可能であるこ
と、メモリの位置が互いに重複しないと証明された場合にはそのメモリの読取り
は互いに対して順序を変更したり副次的な作用を有する命令に対しても順序を変
更することが可能であること、また、介入するストアがなければ同じ場所からの
冗長なロードは互いにマージすることが可能であること(CSE共通副次式(co
mmon sub−expression))などの仮定である。TAXi変換プログラム124は
すべてのメモリ書込みを保存し、メモリ書込みは最適化によって除去されること
もなく、互いに対して順序を変えられることもない。しかし、I/O空間へのリ
ファレンスは、読取りのみであっても、不明な副次的な作用を有する可能性があ
る(たとえば、連続的な読取りは異なる値を戻す場合もあり、および/またはI
/Oデバイス内に別の副次的な作用をトリガする場合もある、たとえばセクショ
ンVII.GからDMU_Statusレジスタ720の読取りは、DMU70
0内の状態の変化を引き起し、次のDMU_Status720の読取りは異な
る結果を与えることを思い出されたい)。
【0488】 TAXi変換プログラム124は、挙動が正しくないI/O空間へのリファレ
ンスを守るセイフティネットに依存する、すなわち、ランタイム時に、正しく挙
動する変換時間の楽観的な仮定に違反が生じた時には介入する。TAXiシステ
ムは各メモリリファレンスのスタティックな性質を記録し、そのメモリリファレ
ンス(具体的にはロード)がなんらかの方法で最適化されているかどうかをアノ
テートする。
【0489】 TAXi変換プログラム124は、メモリリファレンスが最適な仮定を含むか
否かをハードウェアに伝える。楽観的でない仮定を含まないこれらのリファレン
スは常に、終了することが許可されている。リファレンスのターゲットが正しく
挙動するメモリであるという楽観的な仮定を含むリファレンスは、実行するごと
にこの仮定を確認され、仮定が正しいと保証できない場合には中断される。
【0490】 1実施形態では、特定のロードまたはストアが最適化されたか否かをアノテー
トするために、各ロード命令またはストア命令の1つのビット(または、単一の
命令が多数のロードまたはストアを行う場合には、命令内の各メモリオペランド
記述子の1ビット)が保持される。 次の実施形態は、この目的のために1つの命令オペコードを専用化する必要を
除去する。 楽観的/保守的なアノテーションは、セグメント記述子の「TAXi最適化済
みロード」ビット810内に記録される。
【0491】 各X86ロードはセグメントレジスタから離れたところに基づいている(base
d off)ので(セグメントレジスタへのリファレンスは、ロード動作において明
示的に符号化される場合もあり、命令の定義の中に暗示的である場合もある)、
また、各セグメントはセグメント記述子を有するので、セグメント記述子は最適
化されたプロパティをアノテートし、メモリリファレンスを監視する有用な場所
である。各X86ロード動作がミクロオプス(micro−ops)に復号化されてタペ
ストリパイプラインの下に送る(send down)ので、セグメントレジスタは明示
的にミクロオプの中に具体化される。
【0492】 TAXiコードが実行されており(すなわち,PSW.TAXi_Activ
e 198が代入されている時)、TAXi変換済みコードの中でロードが他の
メモリリファレンスに対して順序どおりに発生している時、そのロードによって
リファレンスされているメモリの性質がなんであっても、効果は元のX86命令
ストリームと同一である。メモリリファレンスが順序を変えられていない時には
、例外が生じないように、TAXi最適化済みロード810ゼロセグメントが使
用されることが望ましい。
【0493】 図8aを参照すると、タペストリセグメントレジスタ800はX86セグメン
ト記述子内に符号化された機能のスーパーセットを符号化し、少数の追加機能の
ビットを追加する。タペストリセグメントレジスタ800のビット<61>は「
TAXi最適化済みロードビット」810である。(セグメント記述子TAXi
最適化済みロードビット810はTAXi_Control.tioビット82
0とは異なる)。セグメント記述子TAXi最適化済みロードビット810が1
の時、このセグメントレジスタから離れたすべてのメモリリファレンスは、楽観
的な仮定の下で最適化されていると考えられる。メモリリファレンスが、TAX
i最適化済みロードビット810が1であるセグメント記述子を調べ、リファレ
ンスによって正しくない挙動のメモリであると決定され(D−TLB.ASI、
アドレス空間ID、ゼロに等しくない)、PSW.TAXi_Active19
8が真である場合、TAXi I/O例外が生じる。TAXi I/O例外のた
めのハンドラは実行コンテキストをセイフティネットの最後のチェックポイント
にロールバックし、コンバータ136内で実行を再開し、ここで元の最適化され
ないX86命令が実行されて、元の形態と順序でメモリリファレンスを実行する
【0494】 X86は6つの、アーキテクチャでアクセス可能なセグメント記述子を有し、
タペストリはこれらの6つをコンバータ136が使用するようにモデリングして
、ネイティブのタペストリコードおよびTAXiコードにアクセス可能な追加の
10のセグメント記述子800を提供する。X86コードがセグメント記述子8
00のうち1つを読み取る時または書き込む時に、6つの、X86から見えるレ
ジスタはエミュレータ316内の例外ハンドラによって管理され、例外ハンドラ
は、X86のアーキテクチャで定義された管理と、タペストリの拡張機能の管理
の両方を実行するように介入する。コンバータ136およびエミュレータ316
は、セグメント記述子TAXi最適化済みロードビット810の値を無視し、コ
ンバータ136内でX86コードの実行されている間は、ビット810の値はラ
ンダムになる可能性がある。しかし、コンバータ136はTAXiのためにビッ
ト820を保持し、これらの6つのセグメント記述子の中ではセグメント記述子
TAXi最適化済みロードビット810の値は常にTAXi_Control.
tio(図4gの820)と一致する。
【0495】 タペストリのセグメントレジスタ800のハードウェアのフォーマットは、X
86セグメントの記述子の、アーキテクチャで指定されたフォーマットとは異な
る。特別な、X86からタペストリへのハードウェアが提供され、1つの形態か
ら別の形態へ変換する。X86コードがセグメント記述子の値をセグメントレジ
スタに書き込むと、エミュレータ316はセグメント記述子の値をとり、それを
特別なX86からタペストリへの変換レジスタに書き込む。特別な変換レジスタ
の背後にあるハードウェアはシフティングおよびマスキングを実行してX86形
態からタペストリ形態へ変換し、X86セグメントの記述子を異なるビット位置
にコピーし、マシンの別のところから、タペストリ拡張ビットを集める。特に、
複製されたセグメント記述子のTAXi最適化済みロードビット810が、TA
Xi_Control.tio820からコピーされる。エミュレータ316は
ついで、特別変換レジスタを読取り、その値はタペストリセグメントレジスタ8
00のうち1つに書き込まれる。
【0496】 任意の特定のソフトウェアリリースにおいては、TAXi_Control.
tio820は常に同じ値に設定され、TAXi変換プログラム124はその値
に依存して、X86コードを変換する。 図8bおよび図8cを参照すると、セグメント記述子TAXi最適化済みロー
ドビット810は、次のようにTAXi変換プログラム124によって管理され
る。
【0497】 X86から見える6つのセグメントレジスタに関し、TAXi最適化済みロー
ド810のデフォルトの値は、実装者の裁量でプログラミング可能である。TA
Xi最適化済みロード810は、コンバータ136によって無視されることを思
い出されたい。このため、コンバータ136がセグメント記述子レジスタをロー
ドするごとに(実際にはエミュレータ316の中で実行される複雑な動作)、T
AXi最適化ロードは任意に設定することが可能である。X86フォーマットの
セグメント記述子の値からタペストリの内部セグメント記述子フォーマットへの
変換は、ハードウェアによって実行される。このハードウェアは所定の値をTA
Xi最適化済みロードに提供しなければならない。タペストリシステムはその値
をハードワイヤするのではなく、TAXi_Control.tio820を介
してTAXi最適化済みロードビット810の値をプログラミング可能にする。
【0498】 システムの起動時に、TAXi_Control.tio820は初期化され
、現行のTAXi変換プログラムによって送られる可能性がもっとも高いロード
の形態を反映する。変換プログラム124が特に成熟していなく、ロードを最適
化することがまれであるかまたはまったくない場合、TAXi_Control
.tio820はゼロに初期化される。これは、6つの、アーキテクチャで見え
るX86セグメントレジスタにマッピングされたセグメント記述子は常にTAX
i最適化済みロード810ゼロを有するという意味である。ついで、最適化され
たロードが実際に生成される時に、プロログ内で生成される必要があるのは、記
述子を複製するコードと、設定されたTAXi最適化ロードのみである。
【0499】 デフォルトのレジスタはすべてが、これらのレジスタがTAXiによって使用
されることがデフォルトとなるように、より一般的な場合に選択された1つの状
態にある。TAXiが他の構文を必要とする時、TAXiセグメントの最初にお
いて記述子を複製すると、TAXi_Control.tio820のコピーを
使用して、コンバータ136によって使用される記述子を、新しいセグメント記
述子のTAXi最適化済みロードビット810にコピーする。ビット810に対
する反対の意味は、ソフトウェアによって明示的に設定される。たとえば、セグ
メント記述子のデフォルトの意味が、TAXi最適化済みロードがゼロであると
いう意味の場合(最適化を可能にする楽観的な仮定)、すべての最適化済みメモ
リリファレンスは、TAXiコードによって複製された新しい記述子である、1
に設定されたTAXi最適化済みロードビット810を有するセグメント記述子
を調べなければならない。この複製された記述子は、すべての他の記述子の例外
、セグメントの限度を与え、他の効果はすべて、ロードに対するセイフティネッ
トチェックの追加の機能とまったく同じになる。
【0500】 図8bを参照すると、TAXi最適化プログラム124がバイナリを変換する
と、どのメモリロード動作が最適化されたか、デフォルトの最適化仮定に反する
(counter)どのセグメント記述子がロードの間にリファレンスされたかを追跡
する。図8bは、すべての最適化が終了したが新しいタペストリバイナリの最終
的なエミッションの前、すなわち変換プログラム124の最後に近い通過の中で
とられるアクションを示す。図8bの上半分840は、TAXi最適化プログラ
ム124の比較的初期のリリースの場合をカバーし、副次的な作用の順序を変え
る最適化は規則ではなく例外である。下半分の850はその後の場合を反映し、
最適化はより一般的であり、セグメントのTAXi最適化済みロード810の値
はデフォルトで1であり、TAXi_Control.tio820を1に設定
することによって制御される。正しく挙動し副次的な作用のないメモリのみがア
ドレス指定されるという(ステップ841、851)楽観的な仮定で順序を変え
られ、共通化され、またはそのほかの方法で最適化されたメモリリファレンスに
関して、TAXi変換プログラム124はメモリリファレンスに、TAXi最適
化済みロード810の値が1であるセグメント記述子を調べるように強制する(
ステップ843、852)。仮定に違反がある場合、すなわち、ランタイム時に
TAXi最適化済みロード810の1つのセグメントを介したメモリリファレン
スがI/O空間にアクセスしていることが発見された場合、そのメモリリファレ
ンスはTAXi I/O例外を発生させ、変換されたコードの実行はコンバータ
136のセイフティネット内へ中断される。TAXi変換プログラム124が保
守的な仮定を適用し、このメモリリファレンスを最適化するチャンスを無視しな
い場合(たとえば、セクションVIII.Bで論じられたように、プロファイル
がこのロードがI/O空間をリファレンスしたことを示した場合)(ステップ8
44、853)、メモリリファレンスはTAXi最適化済みロード810ビット
がゼロであるセグメント記述子を調べ(ステップ845、855)、メモリが挙
動が正しくないメモリであってもこのメモリリファレンスを終了させTAXi
I/O例外を生成しないことを保証する。
【0501】 ステップ842および854では、TAXi変換プログラムは、デフォルト以
外の方法で使用されたセグメント記述子を記録する。記述子を複製し、TAXi
最適化済みロード810のデフォルト以外の値を設定するオーバーヘッドは、必
要な場合のみ発生する。
【0502】 図8cを参照すると、TAXi変換プログラム124は変換されたホットスポ
ット各々の始めで、ステップ842、854でデフォルト以外の方法で使用され
たとマーキングされたセグメント記述子のうちいずれかの複製されたコピーを作
成するコードを、10の余分のセグメント記述子のうち1つに挿入する(ステッ
プ868)。この複製された記述子は、変換済みコードによって行われた、TA
Xi_Control.tio820の現行のリリースの値に埋め込まれた仮定
に一致するメモリリファレンスの一部に使用される。プロログコードはセグメン
ト記述子をコピーし(ステップ866)、TAXi_Control.tio8
20の現在のリリースの値に埋め込まれた仮定と反対の仮定をとるメモリリファ
レンスによって使用されるように、TAXi最適化済みロードビット810をT
AXi_Control.tio820の値の反対の意味に設定する(ステップ
868)。
【0503】 TAXi最適化済みロードビット810は次のランタイム挙動を有する。 コンバータ136が実行されている時(すなわち、PSW.TAXi_Act
iveビット198がゼロの時)、TAXi最適化済みロードビット810は効
果を有しない。したがって、コンバータ136はTAXi最適化済みロードビッ
ト810の値がなんであっても、セグメントを介してロードを発行することが可
能である。TAXi最適化済みロードビット810の値がなんであっても、コン
バータは任意の形態へメモリに対する任意のメモリリファレンスを実行すること
が許可されており、TAXi最適化済みロード例外は発生しない。
【0504】 PSW.TAXi_Active198が1である時、TAXi最適化済みロ
ードビット810は、非ゼロASI(すなわち、挙動が正しいことが知られてい
ないメモリ)からのロードを終了させるべきか(TAXi最適化済みロードがゼ
ロ)、中断するべきか(TAXi最適化済みロードが1)を決定する。TAXi
I/O例外は、次の3つのすべてが真である時に生じる。
【0505】 1.PSW.TAXi_Active198が1である 2.メモリリファレンスが、TAXi最適化済みロードビット810が1である
セグメントを調べる 3.メモリリファレンスがI/O空間に触れる、すなわち、ASIがゼロではな
い。
【0506】 所定のX86コード内のX86セグメントに関して言えば、TAXi変換プロ
グラムは1のTAXi最適化済みロードを伴う記述子を使用する場合もあり、T
AXi最適化済みロード810ゼロを使用する場合もある。記述子レジスタファ
イル、および1つまたは複数のスペアのセグメント記述子の位置を読み取り書き
込む能力に関して言えば、正しく構成された記述子は、元のX86記述子の位置
を読み取り、TAXi最適化済みロード810を適切に設定または消去すること
によって構成することが可能である。
【0507】 TAXi変換プログラムが楽観的な仮定を使用し、2つのロードを共にCSE
し、TAXi命令ストリーム内には1つだけのロード命令しか実際には存在しな
い例を考えてみる。実際に最適化されるロードは後者のロードであるが、そのロ
ードは最適化された命令ストリームの中にはすでに存在しない。したがって、そ
のロード自体が他の副次的な作用に対して順序を変えられていない場合でも、残
りのロードはアノテートされる。ロードがTAXi最適化済みロード810セグ
メントを離れて実際にI/O空間に発生すると、実行は命令境界にロールバック
され、ここで拡張タペストリ状態が終了する。TAXiコードは放棄され、元の
x86コードはコンバータ136内で実行される。コンバータ136からエミッ
ト(emit)されたストリームから落とされるロードがないように、コンバータ1
36は見た通りに正確にX86命令を実行し、ロードのすべてを実行する(TA
Xi命令ストリームが最適化された場合でも、X86命令ストリームは依然とし
て元の最適化されない形態のままである)。
【0508】 TAXi I/O障害は、命令の副次的な作用がコミットする前に認識される
。 すべてのTAXiコードはワイヤードメモリ内に保持される。したがって、T
AXiコードの命令をフェッチする時にはページ不在は発生せず、どのページ不
在も必ずデータリファレンスに関係しているはずである。 TAXiコードがX86テキストの1つのページから別のページに変換された
領域から横切る(cross)時にTAXiコードが実行されると、TAXiコード
はX86命令テキストの対応するページに「触れる」(結果を使用しないロード
)。(元のX86命令テキストのページ境界の横断は、セクションV.Dの図4
eおよび図4fに関連して論じられた機構を使用してプロファイル内にメモされ
ている)。これは元のX86コード内にページ不在を発生させ、元のX86コー
ドの実行の忠実なエミュレーションを提供する。
【0509】 タペストリオペレーティングシステム312およびエミュレータ316内でT
AXi I/O例外を処理した後、実行が再開される。簡単な実施形態では、X
86は以前のX86命令境界に復元され、再開は常にX86命令境界にある。し
たがって、単一のX86命令が2つのロードを有する場合、変換プログラム12
4は、(1)どちらのロードも最適化できない、または(2)両方のロードが最
適化されたとアノテートされなければならない、という2つの戦略のうち1つを
とらなければならなくなる。これは、第1のロードが挙動の正しくないメモリで
あるため、第2のロードがTAXi I/O例外を発生させた場合に第1のロー
ドを再実行しなければならないという状況を避ける。
【0510】 B.良好に動作しないメモリへの参照をプロファイルリング 図4bを再び参照すると、アドレス空間ID(ASI)ゼロ以外に向けられた
メモリロードは、イベントコードが1.1100であるプロファイル項目と共に
実行プロファイルの中に記録される(上記のセクションVを参照のこと)。上記
のセクションI.Dで論じられたように、ASI非ゼロリファレンスは典型的に
はI/O空間、すなわち挙動の正しくないメモリに向けられている(また、保守
的には挙動の正しくないメモリに向けられていると仮定される)。この指摘は、
TAXi変換プログラム124によいヒューリスティック(heuristic)を提供
して、積極的な最適化されたコードの生成と、保守的な順序どおりのコードの生
成のいずれかを選択させる。
【0511】 最初の仮定は、すべてのメモリの読取りは、挙動の正しいメモリ(アドレス空
間ゼロ)に向けられているということである。コンバータ136が実行され(P
SW.ISAがX86モードを示す)、プロファイラ400が有効である時(T
AXi_State.Profile_Active482は1である。次のセ
クションV.EおよびV.Fを参照のこと)、I/O空間(D−TLB.ASI
がゼロではない)へのロード命令が終了すると、「I/O空間ロード」プロファ
イル項目がレジスタ内にストアされる。TAXi変換プログラムはこのプロファ
イル項目を解釈して、楽観的な仮定があてはまらないことを示し、少なくともこ
のロードは悲観的な仮定の下で変換プログラム124によって処理されなければ
ならないことを示し、上記のセクションVIII.Aで論じられたセグメント記
述子「TAXi最適化済みロード」ビットの「安全な」設定でマーキングするこ
とが可能になる。
【0512】 この機能の実装は、ブランチ予測のために使用される機構といくぶん似ている
。コンバータ134、136は、タペストリパイプライン120によって実行す
るために、各X86命令を複数のネイティブタペストリRISC命令に分解する
ことを思い出されたい。単一のX86命令がいくつかのメモリリファレンスを有
する時、各メモリリファレンスは離散タペストリ命令に分離される。ゼロ/非ゼ
ロのASI値がD−TLB内に記録されており、したがってバスサイクルを実際
に開始しなくても決定することが可能であるとしても、アドレス空間の決定はパ
イプライン内の比較的遅い時点で発生する。したがって、非ゼロASIへのリフ
ァレンスが検出された時、パイプライン内でロードに続くタペストリ命令はフラ
ッシュされる。TAXi_State.Event_Code_Latch48
6、487(次のセクションV.Eを参照のこと)は、図4bの特別なI/Oロ
ードコンバータイベントコード1.1100で更新される。I/O空間プロファ
イル項目を記録するTAXi命令が注入され、ついで、通常のプロファイル収集
ハードウェアが、上のセクションV.Fで図5aおよび図5bに関連して論じら
れた方法で、「I/O空間ロード」プロファイル項目を記録する。このTAXi
命令は、セクションV.Fで論じられた他のTAXi命令がX86命令境界で注
入され、単一のX86命令のレシピ(recipe)の中間で注入される場合があるこ
とに注意されたい。通常のX86命令実行がコンバータ136内で再開し、コン
バータレシピ内の命令の残りは再開される。
【0513】 代替の実施形態は、他のクラスの命令を選択してプロファイル化することであ
り、典型的にはこれらの命令は、同時の例外を発生させる確率が高い命令である
かまたは、ホットスポット検出器122またはTAXi変換プログラム124の
、所定の他の目的のプロパティを有する命令である。このようなプロファイル化
された命令の数は比較的少数に保たれ、ホットスポット検出器122またはTA
Xi変換プログラム124に使用可能な情報の密度を大幅に低減しないようにす
る。
【0514】 C.精確な境界に到達するための規範的機会状態の調停 TAXi変換プログラム124によって生成されたコードは、X86命令境界
の復元を可能にする情報でアノテートされている。単一のX86命令が多くのタ
ペストリ命令に分解され、これらのタペストリ命令がTAXi最適化プログラム
によって順序を変えられる場合、アノテーションは特定のX86命令の端を特定
することを可能にする。ストアされた情報は、デバッガが使用するために最適化
コンパイラによってエミットされた情報と同様である。ここで、単一のソースス
テートメントの命令がアノテートされ、ソースステートメントは復元できる。T
AXiでは、アノテーションによりタペストリ命令のもつれた網からX86命令
境界を復元することが可能である。したがって、同期例外が仮想X86にさらさ
れる時、TAXiランタイムシステムはX86命令境界で優勢であるシステム状
態と等価なシステム状態を確立する。状態が正しい命令境界に復元されると、実
行はコンバータ136に渡され、コンバータ136はその命令境界から実行を再
開することが可能である。
【0515】 一部の例では、このアノテーション機構は大量の命令による実行をロールバッ
クし、すべてのX86命令がまだ開始していないと仮定されるか、完全に終了し
たと仮定されるかのいずれかである「安全な」状態を確立する。ロールバック機
構は、単一の副次的な作用が2回適用される可能性のある状態から実行を再開す
ることを避ける。
【0516】 コードはそれ自体が「チェックポイント」であり、データベースシステムとい
くらか似た方法で一貫した状態のスナップショットをキャプチャする場合がある
。ついで、TAXiコード内の障害の場合には、実行はチェックポイントにロー
ルバックし、コンバータ136内で再開することが可能である。
【0517】 D.セーフティネット実行 ここ再び図3jを参照すると、1つの代替の実施形態では、非同期的な割込み
である場合、ケース351またはケース354では、X86エミュレータ316
またはコンバータ136がそれぞれ、次のX86命令境界に進んでから割込みを
行うことが可能にする。状態がX86境界で安定すると、ケース351のように
実行はX86オペレーティングシステム306の中を進行する。代替の実施形態
では、ケース351、ケース353、およびケース354の非同期割り込みの場
合、コードは次のセイフティネットチェックポイントに進んでから例外を行うこ
とが可能である。すべてのタペストリ拡張コンテキストが終了して廃棄可能であ
り、順序がX86アーキテクチャによって保証されないイベントだけが互いに関
して順序を変えることが可能である安定したポイントで、仮想X86 310が
「休止に持ち込まれる」というという点で、これらの各々は概念的には同様であ
る。
【0518】 例外がTAXiコード内で発生し、例外ハンドラが、X86仮想マシン内で例
外を具体化しなければならないと決定した時、X86の状態を設定する責任を持
つエミュレータ316内の共通の項目にジャンプし、割込みスタックフレームを
確立し、IDTにアクセスして制御の移動を実行する。この機能が起動されると
、まず、PSW.TAXi_Activeを確認することによってTAXiコー
ドが実行されたかどうかを決定しなければならず、実行されている場合にはX8
6マシン状態を再構成し、コンバータ内でX86命令を再実行して同じ例外を再
び起動する、TAXi機能にジャンプする。X86命令の再実行は正しいX86
例外状態を確立する。コンバータが開始してX86命令を再実行するといつでも
、例外ハンドラはプローブが失敗したRFEを使用し、プローブタイマイベント
コードを再ロードして、再帰的なプローブ例外が発生することを防ぐ。
【0519】 X86にさらされない場合がある唯一の例外は、たとえば、ページ不在なしに
満足されるTLBミス、マスキングされないX86浮動小数点例外は伴わないF
P不完全など、ネイティブなタペストリコードによって完全に実行できる例外で
ある。
【0520】 IX. コンバータ A.概要 1.パイプライン構造および変換レシピ 図1cに与えられたX86ブランチおよびタペストリブランチの、ソフトウェ
アを中心とした図とは対象的に、図9aは、パイプラインのX86ブランチのハ
ードウェアを中心とした図を示す。図1cと図9aを共に参照すると、コンバー
タおよびタペストリパイプラインは2つの部分に分かれる。図1cの左側および
図9aの上側に示されるように、C段902およびT段903(集合的に134
)、およびL段110は、パイプラインの上部134を形成する。D段140か
らW段150はパイプラインの下部120を形成する。
【0521】 下部120は4つの、比較的には従来型のRISCパイプライン156、15
8、160、162を含み、このセクションIXを通じて詳述されるいくつかの
追加の機能および制御を伴う。パイプラインの下部120は順序通りに命令を実
行する。依存性はストールによって管理され、ソースオペランドが使用可能でな
い限り、命令がソースオペランドを有しているはずの段を超えて進むことは許可
されていない。
【0522】 パイプラインの上部134では、命令がフェッチされる。PSW.ISA19
4(上のセクションIIを参照のこと)が現在ネイティブなタペストリモードを
指定している場合、フェッチされた命令は下部120に直接送られる(図1cの
パス138)。
【0523】 図9aはだいたい、PSW.ISA194が現在X86モードを指定し、各フ
ェッチされたX86命令が1から9のネイティブな命令のシーケンスに変換され
る場合に関する(図1cのパス136、図9aの段110、902、903)。
変換プロセスはC段902およびT段903の2つの段で実行される。C段90
2は部分的に各X86命令を復号化し、それに関する有用な属性を確認する。
【0524】 変換自体はT段903で、タペストリ命令生成装置TIG i1 905およ
びTIG i2 906という2つの同一のコピー内で発生する。TIG i1
905およびi2 906は、各X86命令オペコードおよびアドレスモード
ビットを復号化して、この復号化に基づいて、生成されるべき命令の「レシピ」
を選択する。レシピは1から9の命令長である可能性がある。2つのTIG 9
05および906の各々は各サイクル内で2つの命令を生成することが可能であ
る。したがって、各サイクル内でレシピの4つの命令が生成できる。たとえば、
X86命令が6つのネイティブな命令を生成する場合、TIG i0 905は
第1のサイクルで最初の2つを生成し、TIG i1 906は第1のサイクル
で第2の2つを生成し、TIG i0 905は第2のサイクルで最後の2つを
生成する。命令生成装置TIG i1 905およびTIG i2 906は命
令間の依存性にかかわりなく命令を生成する。これらの依存性は発行バッファ9
07およびD段140によって管理される。すべての依存性が解決されるまで、
命令は発行バッファ907内に保持される。
【0525】 上部134は、命令復号化および処理の次の部分を実行する。ブランチが予想
される。X86 IP(命令ポインタまたはプログラムカウンタ)が、生成され
たネイティブの各命令に関連づけられる。ネイティブな命令はいくつかのタグを
与えられ、これは次のセクションIX.A.3で論じられる。いくつかのタイミ
ングクリティカルな例では、ネイティブな命令が部分的に復号化される。
【0526】 D段140は発行バッファ907を管理し、命令がインターロック考慮を満足
させ、発行バッファ908からリリースできる時を決定する。D段140は、同
じマシンサイクルの中で対にできる命令を分析する。D段140は、直線的な制
御フローのセグメントのすべての命令が、連続的なシーケンシャルなストリーム
で低いパイプライン120に発行され、直線的なフローのセグメントを破壊する
ブランチは、ストリームの最後の命令としでなければパイプラインに入らないよ
うにする。
【0527】 R段142は、レジスタファイルからレジスタオペランドを読み取る。 A段144は多くの機能を実行する。メモリリファレンスネイティブ命令の場
合、アドレスが計算され、キャッシュアクセスが開始される。「追加」または「
or処理」などの簡単な算術論理命令が第1のALUおよび第2のALUの中で
実行される。第3のALUはA段144の中で作動する。整数の乗算、浮動小数
点の加算および乗算がA段144の中で実行を開始し、E段148まで継続する
【0528】 M段146では、キャッシュアクセスが終了しキャッシュの出力が配置(alig
n)される。シフタは復号化作業を開始する。いくつかの簡単なシフトがM段14
6内で終了する。 E段148では、メモリロードの結果が使用可能になり、他のユニットにバイ
パスする。シフトが終了する。第4のALUはE段148で作動する。乗算が終
了する。乗算に関連する任意の累積がE段148内で実行される。命令が乗算を
コールしない時には、所定の簡単な算術命令および論理命令がE段148で実行
される。
【0529】 次のセクションIX.A.5およびIX.C.2で論じられるように、W段1
50は結果を書き込み、例外を認識し、フラク(frac)情報を収集する。例外を含
む、すべてのアーキテクチャで見える副次的な作用はW段まで延期される。たと
えば、キャッシュミスへのメモリアテンダントへのアクセスなど任意のバストラ
ンザクションはW段150まで延期される。パイプラインの初期に発生した例外
(E段148で発生したゼロによる除算、またはA段で発生したページ不在など
)は、認識されたときは発生せず、命令には例外を発生させたというタグが付け
られる(次のセクションIX.A.3で論じられるようにサイドバンド(side−
band)情報を使用して)。命令はパイプラインを下に進行してW段150に行く
ことが許可される。例外とされた命令がW段150に達すると、次のセクション
IX.A.4で論じられるように、例外はレシピのすべての命令に渡って集めら
れる場合もあり、すぐに発生させられる場合もある。
【0530】 パイプ制御910はいくつかの主な機能を実行する。パイプ制御910はソー
スオペランドが準備できていない時にパイプライン段をストールし、オペランド
が準備できた時に段が進むことを許可する。パイプ制御910は、バイパスツリ
ーの中でソースオペランドが使用可能な場所を決定するバイパスマルチプレクサ
を制御する。パイプ制御910は種々の実行段から例外に関する情報を集め、こ
れらの例外に対する対応を調整する。これにはたとえば、予想が間違ったブラン
チを検出すること、予想の間違いが検出された時にパイプラインの適切な段をフ
ラッシュすることなどが含まれる。例外はさらに、次のセクションIX.A.4
で論じられる。
【0531】 2.エミュレータ 図9aおよび図3aと共に図9bを参照すると、ハードウェアコンバータ13
6およびソフトウェアエミュレータ316は共同して、X86アーキテクチャの
完全で信頼できる実装を生む。コンバータ136は簡単な命令を処理する。エミ
ュレータ316はより複雑な命令、命令の間の複雑な相互作用、およびイベント
と命令の間の複雑な相互作用を処理する。
【0532】 従来のプロセッサが例外をとる時、プロセッサの状態はスタックに保存され、
例外が処理される。実行が例外とされたプロセスに戻る時、プロセッサの状態は
メモリスタックから復元される。
【0533】 しかしX86のタペストリエミュレーションでは、スタックはこの目的には使
用不可であり、例外機構はX86アーキテクチャで見える記憶域を使用すること
は許可されていない。すべての例外がW段150の開始によって検出され、W段
150の間に発生させられるが、アーキテクチャで見える副次的な作用は、W段
150の最後までコミットされず、例外に関して保存し復元しなければならない
中間のパイプライン状態の量は非常に限られている。この情報は、エミュレータ
インタフェースレジスタ912と呼ばれる特別な目的のプロセッサレジスタの集
合の中に保存され、復元される。エミュレータインタフェースレジスタ912は
X86命令に関する十分な情報を含み、必要であればエミュレータ316はX8
6命令を再フェッチし、それ自体で復号化することが可能である。エミュレータ
インタフェースレジスタ912は複雑な命令のエミュレーションを起動するとき
にロードされ、一般的には他の例外に関しては意味がない。
【0534】 エミュレータインタフェースレジスタ912のほかに、EPCレジスタ914
はマシンプログラムステータスワード(PSW)およびX86プログラムカウン
タ(IP)の画像を含む。EPCレジスタ914は他の情報の中でも次のビット
フラグを含む。
【0535】
【表7】
【0536】 追加のエミュレータインタフェースレジスタ912は、X86有効アドレスサ
イズ、メモリアドレス指定モードおよびセグメントに関する情報、命令ポインタ
、ブランチ命令に関するディスプレイスメント(displacement)、イミディエイ
ト(immediate)を伴う命令に関するイミディエイト、ハードウェア変換がター
ンオフされている命令の所定のクラス、命令長、オペコードおよび有効なオペラ
ンドサイズ、命令が関連するロックまたは反復接頭部を有していたかどうかを示
すフラグ、modrmおよびSIBバイトに関する情報などを使用可能にする。
【0537】 また、これらのエミュレータインタフェースレジスタ912およびEPC91
4は、1つの命令と同等な履歴的なコンテキストを提供する。これはプロセッサ
レジスタで実装される1つの深い例外スタックに対応する。次のセクションIX
.A.3およびIX.A.5で論じられるように、命令内のPC(「フラクビッ
ト930」)もEPCレジスタ914内でキャプチャされる。X86命令内で割
り込みが発生した場合でも、例外は2つのタペストリ命令の間の正確な境界で発
生する。例外が発生すると、従来は例外フレーム内のメモリスタックにあふれて
いた情報は、エミュレータインタフェースレジスタ912およびEPC914、
タペストリ汎用レジスタ、およびFP IP/OP/DPレジスタ内で、アーキ
テクチャでコミットされる(セクションIX.C.2で論じられる)。したがっ
て、ソフトウェア例外ハンドラは、まったくメモリ例外フレームによらないで、
任意の部分的に実行されたX86命令の、完全な中間状態へのアクセスを有し、
割込み時点で命令を再開することが可能である。エミュレータはフラクビット9
30命令内PCを確認することによって、X86命令が割り込まれた場所を正確
に決定し、したがって、どのタペストリレジスタがどのX86オペランドに対応
するかなどを決定することが可能である。エミュレータ/コンバータインタフェ
ースは、エミュレータが、例外が知らされたレシピの場所を知る必要がないよう
に設計されているが(わずかだが例外もある)、FRACビットはこの情報を使
用可能にする。
【0538】 複雑なCISC命令は、基本的には他の例外と同じパイプラインおよびアーキ
テクチャ上のインフラストラクチャによって処理される。コンバータ136がエ
ミュレータ316によって処理されるべき複雑な命令に遭遇すると、コンバータ
136は情報をエミュレーションインタフェースレジスタ912およびEPC9
14の中に保存する。コンバータ136はついで、トラップ命令をパイプライン
120に発行する。トラップ命令は引数と、実行されるべきハンドラを選択する
トラップベクトル番号(たとえばエミュレータトラップベクトルのうち1つ)を
有し、引数は特定の命令または主なマシンモードに依存する場合がある。トラッ
プ命令は例外をエミュレータ316に移動する。トラップ引数はエミュレータ3
16内のルーチンを選択するために使用される。選択されたルーチンは、コンバ
ータハードウェア136のために複雑な命令の作業を実行する。選択されたエミ
ュレーションルーチンは、エミュレーションインタフェースレジスタ912およ
びEPC914の内容によって制御される。エミュレータ316の中の所定のハ
ンドラは、エミュレーションインタフェースレジスタ912およびEPC914
を読取り専用情報をして使用し、すべき動作を決定する。所定のハンドラは、結
果をエミュレータインタフェースレジスタ912およびEPC914に書き込む
。エミュレーションルーチンの最後に、RFE命令は例外をコンバータ136に
戻す。マシン状態はエミュレータインタフェースレジスタ912およびEPC9
14内の情報に基づいて再確立され、その情報は例外の時点でそこに置かれた情
報である場合もあれば、ハンドラによって変更された情報である場合もある。
【0539】 パイプライン内のネイティブタペストリ命令は、これらがネイティブなタペス
トリバイナリからのものであるかどうかに関しても、これらが生成された元のX
86命令に関しても、また、X86レシピの中における場所に関しても、コンテ
キストに依存しないことが望ましい。たとえばデバッギングなど所定のX86の
複雑さがあってもこのコンテキストからの独立性を推進するために、エミュレー
タ316は時々、レシピの中間でトリガされ、マシンの状態を1つのタペストリ
命令から次の命令へ移動し、単一のX86命令のすべての結果を収集する。
【0540】 メモリから汎用レジスタへの、X86 MOV命令の場合を考える。このX8
6命令に関するレシピは単一のネイティブな命令、ロードである。メモリロード
はI/O空間に向けられて、再試行されるとプロセッサの状態を変化させる場合
があるので、メモリロード動作を発行するのは1度だけでなければならない。メ
モリロードはセグメント化およびページング(paging)変換ハードウェアを調べ
る。たとえばメモリロード上にTLBミスがあった場合、ロードの実行は妨げら
れる。X86 EIP情報およびフラクビット930はストアされて、命令が再
開されるコンテキストを保存する。(フラクビット930およびX86命令の途
中からの再開は、次のセクションIX.A.3およびIX.A.5でさらに詳細
に論じられる)。実行はTLBミスハンドラ(miss handler)に向けられる。最
後に、実行がコンバータ内で再開される。レシピは単一の命令なので、レシピは
最初から再開される。
【0541】 トラップと障害に関するパイプライン制御におけるハードウェア例外ベクトル
化機構(vectoring mechanism)は、例外がエミュレータ316で処理されても
、タペストリオペレーティングシステム(図3aの312)で処理されても、ま
たはX86オペレーティングシステム306で処理されても、比較的均一である
。したがって、ハードウェアはエミュレータ316またはその機能に関してほと
んど知識を有せず、ハードウェアにとってはエミュレータ316は別の例外ハン
ドラに過ぎない。違いはソフトウェア自体の中にとどまっている。たとえば、エ
ミュレータ316へ入ると、特別なハンドシェークがエミュレーションインタフ
ェースレジスタ912およびEPC914を保護して、X86コンバータ136
の状態をキャプチャし、コンバータ136をターンオフしてネイティブモードに
入る。ハードウェアの視点から見れば、エミュレータ316を起動して複雑な命
令を処理することと、エミュレータ316または別の例外ハンドラを起動して、
最初にコンバータ136によって処理された命令の中の例外を処理することの間
にほとんど差はない。
【0542】 このセクションIXに記述された技法を組み合せると(セクションIX.A.
3の命令ポインタおよびフラクビット930、セクションIX.A.2のエミュ
レータインタフェースレジスタ912およびEPC914、およびセクションI
X.B.1に論じられる一時レジスタを含む)、パイプライン状態をスタック上
にダンプしなくても、例外に際してキャプチャする必要のあるすべてのコンテキ
ストを、事実上使用可能にして検査できるようにする。その代わりに、従来のプ
ロセッサではスタックにスナップショットされていたX86の中間情報は、タペ
ストリのアーキテクチャ上の状態にさらされる。エミュレータ316またはタペ
ストリオペレーティングシステム312内でネイティブタペストリを実行しても
、エミュレータインタフェースレジスタ912は更新されず、このコンテキスト
情報はエミュレータ316によってキャプチャすることが可能である。これは、
EPC914が、たとえばTLBミスなどすべての例外の間で共有されているた
めである。このようにして、エミュレータ316は他の例外が知らされている可
能性がある場合、EPC914をメモリへ書き込むことによってEPC914を
保存する。一時レジスタおよびX86エミュレータインタフェースレジスタは、
上のセクションIIIで論じられたコンテキスト管理技法を使用して、X86プ
ロセスの間で管理されている拡張コンテキストの一部である(X86の視界の外
にあるネイティブなタペストリコンテキスト)。X86命令を再開するために必
要な追加の情報は、保存された命令ポインタおよびフラクビット930から導出
することが可能である。
【0543】 TLBミスハンドラの実行は、例外にされたX86命令を命令キャッシュから
追い出す場合がある。再開すると、命令フェッチは命令キャッシュの中で見失わ
れる場合がある。キャッシュ可能なメモリ内にストアされた命令については、故
意でない副次的な作用はない。キャッシュ不可能なメモリにストアされた命令に
関しては、追加のメモリリファレンスが発生する場合がある。
【0544】 3.サイドバンド情報。fracビット、命令境界、割込み可能ポイントなど。 図9aと共に図9cおよび図9dを参照すると、各命令がパイプの下の段階に
降りていくと、ネイティブ命令へ変換する間に生じたいくつかのアノテーション
および状態情報のビット920が付随する場合がある。これらの追加ビット92
0は「サイドバンド」情報と呼ばれる。サイドバンド情報はX86命令に関して
上部の134の中で作成され、TIG905、906からパイプ制御910にフ
ィードされた矢印922および、パイプ制御910からパイプラインの実行ユニ
ットへフィードされた矢印923によって示されている。ネイティブモードの実
行の間、サイドバンド情報はネイティブモードの復号器によって復号化された3
2ビット命令としても生成される(図1cの132、138)。サイドバンドの
補足920を伴う完全な命令は「フォーマット化された命令」と呼ばれる。
【0545】 アーキテクチャでさらされたネイティブな命令フォーマット(たとえば、アセ
ンブリ言語プログラマに)、ロード/ストアディスプレイスメント、算術/論理
イミディエイト、およびPC関連のブランチのディスプレイスメントのために、
6ビットのフィールドを有する。X86は8ビット、16ビットおよび32ビッ
トのイミディエイトおよびディスプレイスメントを提供する。TIG905、9
06およびネイティブタペストリ命令復号器132、138は、これらのディス
プレイスメントおよびイミディエイトを32ビット924に拡張する。この拡張
されたディスプレイスメントまたはイミディエイト924は、サイドバンド情報
として、ネイティブインストラクションまでパイプラインの段を下へ降りていく
。パイプラインの下部120の中の命令は、そのほかの点では、アーキテクチャ
にさらされたネイティブタペストリ命令と同じである。
【0546】 多数命令生成装置905、906は、一度に単一のX86命令に関して動作し
、共同して、そのX86命令から最高で4つのネイティブタペストリ命令を生成
することが可能である。各ネイティブな命令は、ネイティブな命令の元となった
X86命令に関するIP値を示すマーカでタグを付けられている。簡単な1実施
形態では、各命令は32ビット値のIPおよび4つのフラクビット930を有す
る(フラクビット930はこのセクションIX.A.3の後半で説明される)。
別の実施形態では、32のIP値レジスタの組が提供され(8つのパイプライン
段に対して、4つのパイプラインをかける)、各々はX86のIP値を保持する
。レシピの各ネイティブ命令は、ネイティブ命令が変換された元のX86命令の
IP値を保持するIP値レジスタを指すポインタを有する。レシピの最後の命令
がリタイアすると、X86命令に関するIP値レジスタは解放される。X86命
令がコンバータに入ると、自由IP値レジスタのうち1つが割りつけられ、現行
のX86のIP値でスタンプ(stamp)される。
【0547】 別の実施形態では、命令ポインタマーカは最適化され、命令がコンバータ13
6によって生成された順序に関する所定の制約を認識する。命令がパイプライン
を下へ流れる時、命令は下から上、左から右の順序で維持される。ブランチはす
べて、もっとも右側のパイプラインにある。したがって、パイプラインの水平の
スライスの各々の中ではすべての命令が順序どおりであり、シーケンシャルな流
れの部分を反映する。ブランチ命令はつねに、パイプライン段のもっとも若い命
令である。したがって、所与の段の中にあるすべての命令に関するIPは、もっ
とも左のパイプライン内の命令のIP値と、最高で45を加算した値に等しい(
各々が最高で15バイト長の、3つの追加のシーケンシャルなX86命令)。こ
の実施形態では、各段140〜150は、最も左の命令のIP値を有し(PC列
925)、他の3つのパイプ内にある命令は、各々累積された命令長値を有する
。その段に関するPC925と累積された命令長の合計は、対応する命令にIP
値を与える。
【0548】 別の実施形態では、各命令は長さを有する。全体を読み取る間、レシピの終わ
りマーカでマーキングされた各命令の後で、IP値は長さカウントによってイン
クリメントされる(次に論じる)。4つのパイプライン156〜162を下へ移
動するシーケンシャルなグループ(i0〜i3)の中の各命令は合わせて、ゼロ
から15の命令長を有する。パイプ134の一番上で、X86命令の長さは各X
86レシピの最後の命令の上にタグとして付けられ、最後でない/926ネイテ
ィブ命令は、その長さタグをゼロに設定する。
【0549】 パイプラインのD段からW段140〜150内のネイティブ命令は、マーカ9
26を有し、各X86命令に関してレシピ内の最後の命令を示す。各命令上のレ
シピの最後マーカはX86_COMPLETED926と呼ばれる。セクション
IX.CからIX.Eに論じられるように、この指示は、命令境界を示すために
使用され、命令境界は、信号ステッピングを制御し、実行が割り込まれる可能性
のあるポイントなどを示すために使用される。
【0550】 X86は、所定の長い実行命令の部分的な実行の間、所定のポイントで割り込
み可能である。たとえば、X86文字列命令は、文字列の移動または比較の現在
のバイトのアドレスなど、文字列のオペランドごとに一回変化するアーキテクチ
ャで目に見える状態で、所定の反復境界において割り込むことが可能である。X
86は、このような命令が割り込みされたり、部分的に実行された命令内で単一
ステップされたりした後、通常の目に見えるX86状態を使用して再開されるこ
とを可能にする。パイプラインのD段からW段140〜150内のネイティブな
命令は、これらの割込み可能なポイントを示すマーカ990を保持する。これら
のレシピの終わりマーカ926および、割込み可能反復境界マーカ990はW段
150内で使用され、次にセクションIX.Cで論じられるように適切な時に割
込みを発生させる。
【0551】 各タペストリ命令は例外タグ927を有する。命令が例外を発生させた場合、
タグ927は最も高い優先順位の例外ベクトルの値を有する。各実行パイプライ
ンおよび各パイプライン内の各段は例外タグ927を有する。各パイプラインは
ストアされた、異なる例外を検出する場合があるので、各パイプラインに特定の
フォーマットが一意的にある。ほとんどのパイプラインは、ベクトル番号と同様
な一意的な識別子をストアするだけである。この例外情報は命令と共にパイプラ
インを下へ流れる。E段148では、最後の例外情報が得られる。すべてのパイ
プラインに関するE段情報は、経過時間によって優先順位が付けられ、アクショ
ン可能な例外を伴う最も古い命令を選択する。この単一の命令に関する例外は再
び、アーキテクチャ上の優先順位によって優先順位を付けられる。もっとも高い
優先順位の例外が発生し、残りは待ち行列に加えられる。
【0552】 段に関するAPC列928は、「代替のPC」、すなわちこの段のグループ内
で最高で1つのブランチに関連づけられた代替のパスに関する命令ポインタを示
す。あるブランチがとられていると予想される場合、代替のPCはシーケンシャ
ルなPCであり、命令はブランチに従う。とられていないと予想されるブランチ
の場合には、APCはブランチのターゲットである。(任意のパイプライン段に
は1つのブランチしかある可能性はなく、単一のAPCで段の4つの命令を十分
にカバーできることを思い出されたい)。いつでも、ブランチが間違って予想さ
れたと決定された場合、パイプラインの若い命令はすべてフラッシュされ、実行
はAPC928によって示された命令で再開する。
【0553】 サイドバンド920はまた、たとえば、レシピ内の特定のネイティブ命令がハ
ードウェア割込みまたは、それに関連する単一ステップ例外を有するかどうかを
示す、X86命令制御情報に関連する情報も保持する。またサイドバンドは、た
とえば浮動小数点スタックタグマップ、浮動小数点データポインタおよび命令ポ
インタ、および浮動小数点オペコード情報など、多くのX86浮動小数点実装の
機能を制御するためにも使用される。サイドバンド情報920はコンバータから
の状態を含み、X86浮動小数点スタックとネイティブなタペストリフラットレ
ジスタファイルの間のマッピングも管理する。たとえば、命令がX86浮動小数
点スタック上に情報をプッシュするかそこからポップした場合、コンバータはサ
イドバンド情報を使用してそのマップへの変化を、パイプラインの上部134内
で管理する。コンテキストが切り換えられた時または、マップを完全に変更する
必要のあるエミュレートされた命令の間、新しいマップ情報はサイドバンド情報
120を使用して実行ユニットとコンバータ134の間で通信される。
【0554】 各ネイティブタペストリ命令が、T段903の中の命令生成装置905、90
6によって発行バッファ908内に生成され、下パイプライン120で実行され
ると、命令は、ゼロから15の4ビットのシーケンス番号でタグを付けられ、発
生元のX86命令に関してレシピ内のネイティブな命令のシーケンシャルな位置
を示す。この4ビットのシーケンス番号は「フラクビット」930と呼ばれる。
フラクビット930は次のセクションIX.A.5でさらに詳細に説明されるよ
うに、例外の後で、部分的に終了したX86命令を再開させるために使用される
。フラクレジスタ931は、各ネイティブ命令が生成されるとゼロからカウント
アップし、X86命令が終了するとゼロにリセットし、対応するネイティブ命令
に関してフラクビット930を生成するカウンタである。フラク制御論理932
は、フラクレジスタ931をインクリメントし、ネイティブな命令をカウントオ
フし、そのカウントを命令生成装置905、906へ供給する。命令生成装置9
05、906は、命令が発行バッファ907に供給されると、命令にフラク値9
30でタグを付ける。
【0555】 上方に流れるサイドバンド情報には、データおよび制御フローという2つのク
ラスがある。制御フローサイドバンド情報は、「パイプラインの下部がフラッシ
ュされていること」、または「上部134を含めた全パイプラインがフラッシュ
されていること」、および実行を再開する新しいプログラムカウンタを示す。こ
の上方に流れる制御フローの具体的な例は、次のセクションIX.B.5および
IX.B.6内で論じられる。
【0556】 追加のサイドバンド情報が図9dに示されている。サイドバンド920の2つ
の具体的な要素が次のセクションIX.A.6(ロードおよびストア命令に関す
る)および、IX.C.2(浮動小数点情報に関する)で論じられる。 4.割り込み、トラップ、および例外
【0557】 例外は、X86命令の細分性または割込み可能なポイントの細分性で報告され
る。ネイティブな例外は(ハードウェアの割込み、実行障害およびトラップ)は
、このネイティブな命令がX86レシピの一部である場合でも、任意のネイティ
ブ命令境界上で知らされる可能性がる。しかしX86例外は、X86プログラマ
にはX86境界上で発生した時に見える。これは、レシピ内のすべてのネイティ
ブ命令が完全に実行されることを必要としない。そのかわりに、レシピ内の後半
の命令が終了しなくても、対応する障害が認識されるとX86障害はすぐに表面
化する。しかしX86トラップは、レシピ内のネイティブ命令のすべてが終了す
るまで延期される(エミュレータによって)。このセクション4では主にX86
例外を扱う。
【0558】 例外には障害とトラップの2つの種類がある。例外に特有の副次的な作用以外
では、障害はX86命令の実行をアンワインドする。トラップは、X86命令が
終了するまで遅延される。障害およびトラップは、レシピの個別のネイティブ命
令が発生すると知らせることが可能である。
【0559】 所定の障害クラスに関しては(たとえば、次のセクションIX.B.5に論じ
られるLOOP命令および、ページ不在に関する条件コードの復元など)、エミ
ュレータ316は全X86命令をアンワインドし、障害をX86に表面化する。
たとえばTLBミスなど他の障害クラスに関しては、エミュレータ316がその
障害を処理し、ついでレシピ内で継続し、障害を起こしたネイティブ命令を再試
行し、フラクビット930を使用して再開すべきネイティブ命令を決定する。障
害がX86オペレーティングシステムに表面化されるべき時は、エミュレータ3
16はエラーコードを含めて(場合によっては)、X86互換スタックフレーム
情報を構築する。
【0560】 最終ではないネイティブ命令/926内のトラップは、概念的にはX86命令
の中間の例外に対応する。例外は、X86命令境界926(または割り込み可能
なポイント990)において、X86環境の上方にしか知らされないので、レシ
ピの残りの命令が終了してから(おそらくエミュレータ316内でハンドラを起
動して)、例外がX86環境に表面化する。たとえば、デバッグハードウェア内
のアドレスの比較は、すぐにトラップをエミュレータ316内に生成し、そこで
トラップハンドラは報告されるべき情報を収集する。ついで実行が再開し、通常
はX86命令の最後にトラップがX86環境に表面化される。レシピの最終のネ
イティブ命令926のトラップは、典型的には、X86環境に表面化される。た
とえば、X86単一ステップ例外は典型的には、レシピの最終のネイティブ命令
926で発生する。
【0561】 例外とされた命令がその例外タグ927と共にW段150に到達すると、「フ
ラク更新」制御論理933が応答する。例外が、タペストリ命令について即時の
応答を必要とする場合(レシピの最終命令に関する任意の例外、または障害)、
上のセクションIX.A.2に論じられたように、例外がすぐに生じ、障害を命
令内で修復するために、実行はエミュレータ316の中にベクトルを向ける。例
外がレシピの最後ではない命令/926上のトラップであった場合、ネイティブ
マシンはネイティブ命令境界上ですぐに例外に応答するが、エミュレータ316
は次のX86命令境界926または、X86命令の次の割込み可能なポイントに
応答をゆだねる。X86例外(トラップ)がX86命令の最後に到達するために
多数のネイティブ命令を超えて遅延されなければならない場合、1実施形態では
エミュレータ316は、次のセクションIX.Cで論じられる方法で、X86単
一ステップ機能を使用して遅延を実行する。別の実施形態では、例外はフラク更
新論理933内に保留され、実行は現行の命令のレシピの最後まで、または次の
割込み可能なポイントまで進むことが許可される。いずれの実施形態でも、この
前進が現行のX86命令の最後926まで進む場合、IP値はインクリメントさ
れて次の命令を指し、フラクレジスタ931はゼロに消去されて次の命令の始め
を示し、これによって、X86によってさらされたIP値をエミュレートする。
収集された例外が発生し、例外はエミュレータ316内にトラップする。例外が
エミュレータ316によって処理できる場合は、実行は継続する。エミュレータ
316が例外を修正することが不可能な場合は、エミュレータ316はスタック
上にX86例外フレームを構築し、制御のベクトルをX86オペレーティングシ
ステムに向ける。
【0562】 所定の単一ステップ例外がコンバータによって導入され、エミュレータ316
内の作業をトリガする。次のセクションIX.Eに論じられるように、コンバー
タ136はエミュレータ316内にベクトルを向け、エミュレータ316は単一
ステッピングを起動して次のX86命令の後に制御を得るが、次の命令はコンバ
ートされるかエミュレートされている可能性がある。最終的にレシピの最後92
6に到達すると、X86単一ステップ例外はエミュレータ316にベクトルを向
け、エミュレータ316はX86命令の途中で生じた状態を処理する。この機構
の特定の例は、次のセクションIX.C.1およびIX.E.2で論じられる。
【0563】 エミュレータはまた、他のインスタンスの中の例外によっても起動される。た
とえば、X86命令が割込みフラグの書込みを要求すると、コンバータは単一ス
テップのトラップをエミュレータ316内に生成する。エミュレータ316は割
込みフラグ値をエミュレータインタフェースレジスタに書き込む。この値は、エ
ミュレータ316RFEがコンバータに戻った時に、実際のプロセッサレジスタ
にロードされる。他の例は次のセクションIX.B.5およびIX.B.6に論
じられる。
【0564】 5.fracビットおよびレシピの継続 上のセクションIX.A.3で詳細に論じたように図9aおよび図9bを再び
参照すると、レシピの個別のタペストリ命令はフラクビット930でタグを付け
られ、X86レシピ内のネイティブ命令のシーケンス番号を示す。したがって、
命令の内部動作がコンテキストから独立していたとしても、フラクビット930
はコンテキストスタンプとして機能し、レシピ内の命令が発生した元を特定する
【0565】 典型的には、A段144からW段150で命令が例外を発生させた時、命令の
例外タグは例外の性質を反映するように設定され、タグはW段150内で認識さ
れる。例外を開始する一部として、命令を例外とするためのフラクビット930
は、EPC914に記録されるPSW/PC情報の残りと共に、EPC.fra
c934内に記録される(このエミュレータインタフェースレジスタ内にキャプ
チャされるエラープログラムカウンタおよびプログラム状態ワード情報のサンプ
ルに関しては表7を参照のこと)。制御は例外ハンドラにベクトルを向けられ、
マシンがコンバータ136内で実行している場合、ほとんどの例外はエミュレー
タ316の中で処理される(X86に表面化しなければならない例外は、上のセ
クションIX.A.2で論じられたようにまずエミュレータ316によって処理
される)。例外ハンドラはRFE(例外から戻る)命令を発行することによって
終了する。
【0566】 X86実行を再開するために、RFE命令はEPCプロセッサレジスタ914
をオペレーティングIP、PSW、およびマシンのほかの状態制御論理内に再ロ
ードする。X86プログラムの変換中に例外が発生した場合、上のセクションI
Iで論じられたように、EPC.ISAビット194はX86 ISAを示す。
EPC.EIPおよびEPC.frac934ビットは、例外が発生したX86
命令(X86命令ポインタにより)およびレシピ内のネイティブ命令を特定する
。EPC.frac934値はT段フラクレジスタ931内に復元される。パイ
プラインはフラッシュされる。例外とされたX86命令はC段902によって再
びフェッチされる。T段903はX86命令を変換しなおすが、レシピが最初か
ら発行バッファ908に再発行されるわけではない。その代わりに、レシピは、
EPC.frac934値によって示されたレシピ内のネイティブ命令を始めと
して、再発行される。したがって、X86命令バイトまたは中間パイプライン状
態のいずれも、エミュレータ316が起動しエミュレーションから戻る間の時間
は、ハードウェア内に保存される必要はない。
【0567】 6.外部形態からフォーマット化された形式への拡張 図9cおよび図9dを参照すると、たとえばアセンブリ言語プログラマなど外
部へさらされたネイティブ命令の形態から内部のネイティブ形態へ拡大すること
は、内部命令の明示的なビット(場合によっては所定の修正を伴う)から、フォ
ーマット化された命令の類似のフィールドへコピーし、外部形態内に類似物を有
しないフィールドにはデフォルトを提供するという、比較的つまらないプロセス
である。サイドバンド情報940の一部はロード命令およびストア命令に特有で
あり、X86形態からネイティブなフォーマット化された形態へ変換する間、コ
ンバータ136によって作成される。
【0568】 すべてのX86メモリリファレンスはセグメント記述子から離れたところに基
づいているが、一部のX86命令では、セグメントリファレンスは命令内に明示
的にコード化されているのではなく、オペコード内に暗示されている。これらの
命令に関しては、コンバータ136は、明示的なセグメント記述子を伴う、ネイ
ティブモードのフォーマット化されたロード命令またはストア命令を作成する。
【0569】 たとえば、一部のネイティブタペストリロード/ストア命令はセグメントリフ
ァレンス、アドレス指定モードおよび自動インクリメントを指定するが、明示的
なディスプレイスメントは指定しない。これらの命令に関しては、タペストリの
ネイティブ命令復号器132、138は、命令で明示的に述べられた部分を通過
し、フォーマット化された命令の指定されない部分に関してデフォルトの値を作
成することによって、フォーマット化された命令を作成する。この例は、図9c
の上に示されたLDA/STA(自動インクリメント/デクリメントを伴うロー
ドまたはストア)命令941である。この命令のフィールドは、宛先レジスタ(
LDAに関して;STAに関しては類似のフィールドはソースレジスタである)
に関してはオペコード、2ビットのオペランドサイズ、6ビットの指定子であり
、オフセットレジスタに関しては4ビットのセグメント指定子および6ビットの
指定子であり、これらは共に、メモリリファレンスのためにセグメントおよびオ
フセットを指定し、3ビットはプレインクリメントまたはプレデクリメント、ま
たはポストインクリメントおよびポストデクリメント、または修正なしモードを
指定し、4ビット942はアドレスサイズおよびメモリ保護チェックを指定する
。LDAに関して、4ビットのアドレスサイズ/保護によって生成される16の
アドレス指定モードは表8に説明されている。
【0570】
【表8】
【0571】
【表8つづき】
【0572】 LDA/STA命令941を外部にさらされた形態からフォーマット化された
形態に拡張する時に、タペストリのネイティブな命令復号器(図1cの132、
138)は、フィールドをコピーし、命令の中で明示的に設定されていないフィ
ールドをデフォルトで埋めるなど、非常に簡単なプロセスを実行する。たとえば
、命令の外部形態941の中にはロード/ストアディスプレイスメントは存在し
ないため、復号器132、138は32の明示的なビットの、ゼロアドレス指定
ディスプレイスメント924を供給する。インデックスレジスタフィールドはゼ
ロに設定され、R0を指す。サイドバンド情報920の残りは、マシンの種々の
場所から集められる。
【0573】 第2の例として、LDB/STB命令は、宛先レジスタ(LDBに関して。S
TBに関しては同様のフィールドはソースレジスタである)に関してはオペコー
ドフィールド、2ビットのオペランドサイズ、6ビットの指定子を有し、オフセ
ットレジスタに関しては4ビットのセグメント指定子および6ビットの指定子を
有し、6ビットのディスプレイスメントと共にメモリリファレンスのためにセグ
メントおよびオフセットを指定し、2ビットはアドレスサイズおよびメモリ保護
チェックを指定する。明示的に指定された命令の部分は、あまり変更されないま
まで通過される。6ビットのディスプレイスメントは32ビットに符号拡張され
てディスプレイスメント924を生成する。
【0574】 逆に、他の命令はメモリオフセットを指定するが、明示的なセグメント記述子
は指定しない。これらの命令に関しては、タペストリのネイティブな命令復号器
132、138は、再び命令の明示的に述べられた部分を通過し、フォーマット
化された命令の他の部分に関してデフォルト値を生成することによって、フォー
マット化された命令を作成する。たとえば、LDC/STC命令は、宛先レジス
タ(LDCに関して。STCに関しては同様のフィールドはソースレジスタであ
る)に関してはオペコードフィールド、2ビットのオペランドサイズフィールド
、6ビットの指定子を有し、オフセットレジスタに関してはセグメント指定子は
なく6ビットの指定子を有し、および12ビットのディスプレイスメントは共に
メモリリファレンスに関してセグメントおよびオフセットを指定し、2ビットは
アドレスサイズおよびメモリ保護チェックを指定する。明示的に指定された命令
の部分は、あまり変更されずに通過される。6ビットのディスプレイスメントは
32ビットに符号拡張される。アドレスサイズおよびメモリ保護チェックフィー
ルドは自動的に生成されて通常のデフォルトを反映する。
【0575】 典型的にはADDおよび同様の算術命令のために使用される第4のネイティブ
タペストリフォーマットは、図9cの下の命令943によって例示されている。
ここで、命令のもっとも右側にあるオペランド944は、6ビットのレジスタ指
定子または6ビットのイミディエイトのいずれかである場合がある。オペコード
が、フィールド944はイミディエイトとして解釈されるべきであると指定した
場合、6ビット値944は32ビットに符号拡張され、フォーマット化された命
令のイミディエイト/ディスプレイスメントフィールド924になる。オペコー
ドが、フィールド944はレジスタ指定子として解釈されるべきであると指定し
た場合、レジスタ値944はフォーマット化された命令の第2のレジスタソース
フィールド945にコピーされ、フォーマット化された命令の32ビットのイミ
ディエイト/ディスプレイスメントフィールド924はゼロに設定される。
【0576】 一部の実施形態では、LDA/STA命令の4ビットモードの指定子、LDB
/STBの2ビットアドレスサイズおよびメモリ保護チェックフィールド、およ
びLDC/STCの2ビットアドレスサイズおよびメモリ保護チェックフィール
ドは各々、フォーマット化された命令の少なくとも4ビットの共通の形態に変換
され、すべてのケースはパイプラインの残り120によって同様に処理できるよ
うになる。他の実施形態では、命令は修正されずに通過され、低いパイプライン
120は命令オペコードを使用して命令の残りを復号化する。
【0577】 サイドバンド情報の動作は、ネイティブ命令のオペコードに完全に直交してい
るわけではない。たとえば、一部の命令では、サイドバンドの「イミディエイト
/ディスプレイスメント」フィールド924は算術イミディエイト値(arithmet
ic immediate value)として扱われ、他の命令ではロードまたはストアディスプ
レイスメントとして扱われ、また他の命令では、セグメントに関連した(segmen
t−relative)絶対ブランチディスプレイスメントまたはPCに関連した(PC−r
elative)ブランチディスプレイスメントとして扱われ、さらに他の命令では(
たとえば、ロード/ストアの一部のアドレス指定モードでは)、フォーマット化
された命令の32ビットのイミディエイトは無視される。一部の命令では、イミ
ディエイト/ディスプレイスメントフィールド924のうち8ビットまたは16
ビットのみが使用される。
【0578】 B.命令の個別のリタイアメント 命令をたがいに独立させるために、多くの異なる技法が使用される。その結果
、ネイティブ命令が障害を起こすと、障害が処理される場合もあれば、X86命
令が障害を起こしたネイティブ命令から再開する場合もあれば、実行が終了する
場合もある。すべての副次的な作用はコアトミック(co−atomically)状態でX
86でアーキテクチャされた状態にコミットされるか、なにもコミットされない
。X86命令の即時の結果をキャプチャし、これらの結果を保存して再開するた
めに必要なのは、非常に少数の特殊目的のハードウェアだけである。部分的にコ
ミットされたX86命令のアンワインディングはほとんど必要とされない。コン
バータ136は、アーキテクチャ的に一貫した状態で、命令または割込み境界に
おいて実行をX86環境に提供する。
【0579】 1.一時レジスタのレシピ使用 表1から、タペストリネイティブマシンのレジスタの一部はX86の特定のリ
ソースにマッピングされ(浮動小数点レジスタへはR32〜R47、整数レジス
タへはR48〜R55)、一部はコンバータ136が有効な間、タペストリ特有
の使用に割り当てられ(R0は読取り専用で常にゼロであり、R1〜R3は例外
ハンドラのために保存され、R4はアセンブラテンポラリ(assembler temporar
y)でアセンブラが一致したときに使用され、R15〜R31はプロファイラ4
00によって使用されるように割り当てられる)、さらに一部は割り当てられな
い(たとえばR56〜R63)ことを思い出されたい。
【0580】 レジスタの中で特殊目的に割り当てられるのはR5〜R14であり、表1では
「コンバータテンポラリ」に関して「CT1」から「CT10」と示されている
。これらのレジスタはX86命令の即時の結果を保持し(たとえば、複雑なアド
レス指定モードから形成されたアドレス、またはメモリオペランド)、これらの
即時の結果を1つのネイティブタペストリ命令から別の命令へ搬送する。コンバ
ータはこれらのレジスタを、X86命令から次の命令に値を搬送するためではな
く、X86命令内で値を搬送するためにのみ使用する。したがって、X86命令
境界上でトラップまたは他のコンテキストの切換えが発生すると、すべての有効
なX86状態はレジスタR32〜55の中にあることが知られ、レジスタR5〜
14およびR56〜63内の状態は放棄することが可能である。また、R5〜R
14内の一時的な値は、他の使用に抵触しないことが知られている。しかしこの
マシン状態は通常のレジスタ内であるので、通常の状態を保存する技法はこれら
の中間的な結果を保存する役割を果たす。このことは、中間の結果がマシンのア
ーキテクチャで定義されたリソースの外にあるので、X86自体がメモリスタッ
ク上に中間の命令の結果を保存するために使用しなければならない特殊な機構と
は対照的である。
【0581】 図9eを参照すると、一時レジスタは、X86のアーキテクチャの定義によっ
て、単一の命令を介して漸次的に変化する状態が求められるレシピの中で使用さ
れる。一時レジスタの使用の1つの例は、X86 PUSHAD命令に関するレ
シピである(すべての汎用レジスタをスタックにプッシュする)。図の左の部分
950は、INTEL ARCHITECTURE SOFTWARE DEV
ELOPER’S MANUAL, VOL.2の3〜388ページに示された
ような命令の動作を示す。図の右側の部分は、これらの動作を実装するネイティ
ブなタペストリレシピを示す。
【0582】 STOREDEC命令951は、タペストリSTA(自動インクリメント/デ
クリメントを伴うストア)の特定の変形例である(セクションIX.A.6のS
TAの論議を参照されたい)。「.X」オペコード拡張子は16ビットまたは3
2ビットのいずれかである可能性があり、第2のオペランドのサイズを示す。第
1のオペランド952はオペコード拡張子によって解釈され、第2のオペランド
および第3のオペランドによって示されたアドレスで、メモリにストアされる。
第2のオペランドはセグメント記述子である。第3のオペランド953は、セグ
メントへのオフセットを含むレジスタである。第3のオペランドのレジスタは、
オペコード拡張子のサイズによってあらかじめデクリメントされてから、第1の
オペランド952が実際にストアされる。
【0583】 ネイティブレシピ950の第1のMOVE命令954は、X86スタックポイ
ンタESPを、表1のR5〜R14のCT1〜CT10レジスタのうち1つであ
る一時レジスタtmp_dにコピーする。8つのSTOREDEC命令951は
、8つの汎用レジスタEAX、ECX、EDX、EBX、ESP、EBP、ES
I、ECIをスタック上にプッシュする。これらのプッシュの間、レジスタES
P内の実際のX86スタックポインタは変更されないままであり、デクリメント
はレジスタtmp_d上で実行される。最後に、レシピの最終命令955では、
レジスタtmp_dはX86スタックポインタESPにコピーして戻される。
【0584】 セクションIX.A.2およびIX.A.4から、従来のマシンとは異なって
、X86エミュレーションの間の例外はメモリ内にスタックフレームを構築せず
、必須のマシン状態はエミュレータインタフェースレジスタ912およびEPC
914にさらされることを思い出されたい。エミュレータ316へ入ることおよ
びそこから出ることを含むエミュレータ316の実行は、エミュレーション自体
を反映する状態の変化以外には、どのX86のアーキテクチャで見える状態にも
副次的な作用を有しない。したがって、PUSHAレシピの間に発生する任意の
非同期的な割込みは、X86で見える副次的な作用を発生せずに、タペストリオ
ペレーティングシステム312またはエミュレータ316内で処理される。エミ
ュレータ316内で割込みを「処理」することは、それが保留中であることを記
録すること、コンバータ136に戻って現行のX86命令を終了すること、つい
で割込みを受入れそれをX86に表面化することからなりたつ場合があり、割込
みは命令境界でなければX86には見えないことに注意されたい。
【0585】 命令を実行する間の同期例外は、時々、レシピの途中で知らされる場合がある
。PUSHAの場合、命令中の同期例外が発生すると、X86アーキテクチャは
、メモリが部分的に修正されているが、スタックポインタは修正されないことを
定義する。レシピ950の間に同期例外が発生すると、レシピ950はこの挙動
をアーカイブし、アーキテクチャ上X86で見えるスタックポインタレジスタは
、最終的なMOV命令955まで変化しない。スタックポインタの中間デクリメ
ント化を有するレジスタ、tmp_dは、X86内では見えない。
【0586】 X86で見える状態は最終のMOVE命令955まで変更されないので、レシ
ピ950が任意の時点で割り込まれる場合は、例外の時点から再開することが可
能である。X86環境は正しい命令境界でなければ状態を見ることができない。
【0587】 図9fは、一時レジスタを使用するレシピの代表的なカタログである。一般的
な規則として、一時は、たとえば、単一のレジスタに多数の変更がある場合(図
9eのPUSHA例における暗示的なスタックポインタ)、または複数のレジス
タに変更がある場合など、X86アーキテクチャの状態に複数の変更がある場合
に、レシピ内で使用される。
【0588】 1つの例では、X86定義は、浮動小数点動作の宛先レジスタがIEEE−7
54非数字データ(IEEE−754 NaN’s、無限大など)の所定の場合
には修正されないままであることを要求する。タペストリは2つのピースでイン
テルの80ビット浮動小数点レジスタを実装するので(16ビット符号および指
数、レジスタR33、R35、R37...R47(表1を参照のこと)、およ
びレジスタR32、R34、R36...R46内の64ビット符号)、一部の
ロードおよびストアは2つの動作に分解され、IEEE−754チェックはすべ
てのビットが収集されるまで実行できない。浮動小数点値の2つの部分は、一対
の一時レジスタにロードされる。IEEE−754チェックは一時の中で実行す
ることが可能である。データが確認されると、浮動小数点値はX86状態の一部
である最終宛先レジスタ内にコピーされる。
【0589】 別の例では、反復される文字列命令の間の整数条件コードは一時レジスタ内に
保存されて、ページ不在の間それを保護し、ページ不在から実行が再開された時
にそのレジスタからロードしなおされる。
【0590】 どの場合でも、中間の結果は、例外に関するすべての可能性が評価されるまで
、一時レジスタ内に保持される。データはすべての動作が終了できると保証され
るようになった時にのみ、X86で見えるリソースにコミットされる。このため
、すでにリタイアされている若い命令から状態を記録する必要なく、レシピを任
意の例外の時点から継続することを可能にする。
【0591】 2.異なる参照クラスに適した記憶保護検査をトリガするメモリ参照命令 図9gを参照すると、X86の命令セットは、単一の命令が、たとえば「AD
Dメモリ、レジスタ」960(2つの加数はメモリの位置およびレジスタであり
、合計はメモリの位置にストアして戻される)など、同じメモリ位置から読み取
りまたそこへ書き込むことを可能にする。このような命令は「読取り修正書込み
」命令と呼ばれる。X86アーキテクチャの定義では、読取り修正書込みの読取
りは、書込みが成功しなければ、X86のCPUをメモリシステムに発行できな
い。この制約は、メモリ位置がメモリがI/O空間内にあり、読取りがデバイス
の状態を変化させる可能性があるので、読取りを1度以上発行してはならないと
いう可能性を反映している。
【0592】 図9c、図9g、およびセクションIX.A.6の表8を参照すると、タペス
トリ命令セットは、3つの結果、すなわち、メモリチェックを実行して有効なア
ドレスから読取りが終了するようにするという結果、メモリ保護チェックを実行
して同じアドレスへの書込みが終了するようにするという結果、および、オペラ
ンドをメモリからレジスタにロードするという結果を達成する命令を含む。この
ようなロードは「書込み意図の」ロードと呼ばれる。ロードチェックが失敗した
場合、またはストアチェックが失敗した場合、ロードは失敗する。表8の中では
、アドレス指定モード942で、LDAの、0010、0011、0110、1
010、1011、1100、1101および1110は、書込み意図を伴うロ
ードであることを示していることに注意されたい。アドレス指定モード0111
および1111は、実行意図を伴うロードを示す。
【0593】 評価されるべきメモリ保護の述部は、命令のオペコードのビットおよびアドレ
ス指定モード942によって指定され、述部は、ロードまたはストアの有効なア
ドレスに関してTLB項目の保護ビットについて評価される。
【0594】 したがって、X86読取り修正書込みADD960に関するレシピ961内の
第1の命令は、タペストリLDA命令962である。図9cに関連してセクショ
ンIX.A.6に論じられたように、LDA命令941はアドレス指定モード9
42、セグメント、およびオフセットレジスタに関する明示的な指定子を有する
。LDA命令962はTIG’s i0 905およびi1 906によって生
成されるので、モードビット942は、LDA962が書込み意図ロードである
ことを示すように設定される。レシピ961の中の第2の命令はADD命令96
3であり、これは追加自体を実行する。レシピの第3の命令はSTA(X86ア
ドレスへのストア)964であり、LDA962によってリファレンスされたア
ドレスと同じアドレスへストアする。STA964は、LDA962によってす
でに実行されたアドレス計算を反復し、また同じストア許可チェックを反復する
。一部のチェックはすでにLDA962のモードビット942によって指定され
ているので、許可チェックは例外なしに成功することが保証されている。したが
って、レシピ961では、LDA962のみが例外を発生させ、ADD963お
よびSTA964は終了することが保証されている。
【0595】 3.ターゲットリミットチェック命令 X86のアーキテクチャの定義によって、修正/副次的な作用が同時に行われ
ることが必要な時には、事前のチェックとテンポラリーを使用して、完全に実行
されてから、設計された状態が修正される。
【0596】 X86では、メモリアドレスは0と231−1の間の数というのみならず、アド
レスは形式的なものである(セグメント、オフセット)。ロード、ストア、命令
フェッチでも、各メモリリファレンスはこのようなセグメントに基づいたアドレ
ス指定を使用する。任意の時点でアクティブなセグメントは最高で8であり、命
令がフェッチされる元のコードセグメント、メモリオペランドがそこからロード
され、また、その中にストアされる1から6の間のデータセグメント、およびP
USH命令がその中にデータを書き込み、POP命令がそこからデータを読み取
るスタックセグメントを含む。各セグメントには最大サイズを有し、セグメント
の限度を超えたセグメントへのオフセットは無効である。さらに、各セグメント
は許可の集合を有し、プログラムがそのセグメントから読みだすこと、そのセグ
メントに書き込むこと、実行することが許可されているかどうかを制御する。さ
らに、セグメントはメモリリファレンスのデフォルトサイズを制御するDビット
およびBビットを有し、「拡大アップ(expand up)」属性または「拡大ダウン
(expand down)」属性を有する場合がある。各セグメントの属性はセグメント
記述子の中にキャッシュされている。これはインテル社の、INTEL ARC
HITECTURE SOFTWARE DEVELOPER’S MANUA
L VOL.3(1997年)の第3章に説明されている。 したがって、各ロード、ストア、命令フェッチメモリリファレンスに関し、リ
ファレンスのオフセットは関連するセグメントに関する限度と比較される。
【0597】 限度のチェックはコンテキスト依存である。次のサブセクションでは、ロード
、ストア、命令フェッチおよび制御フローの移動のために実行される限度チェッ
クの代表的な例について論じる。
【0598】 a.LOAD/STOREおよび分岐リミットチェック 図9aを再び参照すると、限度チェックはハードウェア内の2つのポイントで
実行される。シーケンシャルな命令フローおよび一部の制御移動命令に関しては
、限度チェックはパイプラインの上部134で実行される。他のメモリリファレ
ンスに関しては、限度チェックは、メモリリファレンス自体が実行されるM段1
46で実行される。
【0599】 上限チェックは、X86命令境界が特定された後、命令を復号化する間に使用
可能な情報に完全に基づいて、宛先アドレスを計算することが可能である制御移
動に関して実行される。このクラスは直線的なシーケンシャルフローおよびIP
関連のブランチを含む。限度チェックに必要な3つの情報は、現行の命令のIP
、現行の命令の長さ、および命令のブランチディスプレイスメントを含む。これ
らの3つの情報は、発行バッファ907の前にT段903で使用可能である。こ
の情報が一度知られると、ブランチ宛先の3つの構成要素を合計し、コードセグ
メント限度と比較することが可能になる。
【0600】 下限チェックはM段146にある。アドレス形成のほとんどは、それ以前のレ
シピの中にある、異なる単一動作のRISC命令によって実行されている場合が
ある。最終的なロード、ストアまたはジャンプは、セグメント記述子からのセグ
メントベース、および、それ自体がイミディエイトディスプレイスメントと1つ
または2つのレジスタの合計として形成される場合のあるオフセットを合計する
ことによって、ターゲットアドレスを形成する。アドレスはA段144のALU
内で形成され、ALUは通常の追加命令内で使用される。アドレス形成の後にM
段146の中のキャッシュアクセスと並列に、オフセットはタペストリ命令によ
って指定されたセグメントに関するセグメント限度と比較される。
【0601】 X86は限度チェック例外に関して次の挙動を定義する。ロード/ストアリフ
ァレンス内で、全リファレンスはセグメント限度内でフィットし、低いアドレス
および高いアドレスの両方が限度チェックで役割を果たさなければならない。制
御移動においては、宛先の第1のバイトだけがコードセグメント内にあればいい
ので、宛先アドレスの単一のバイトのみが限度に対して確認される。たとえば、
ブランチターゲットの第1の命令が2バイト長であり、1バイトのみが限度内に
ある場合は、移動制御自体は正常に終了し、例外は移動制御自体ではなくターゲ
ットにおいて命令フェッチを行う時に発行される。ターゲットの第1のバイトが
限度内にない場合、移動制御は障害を起こし、命令はまったく実行されない。た
とえば、第1のバイトが限度の外にあるターゲットへのコール命令に関しては、
戻りアドレスがメモリ内に書き込まれず、スタックポインタは修正されず、例外
IPはターゲットではなくコール命令を指す。他方、第1のバイトは限度内にあ
るが第2のバイトは限度内にない場合、戻りアドレスはメモリにプッシュされ、
宛先命令はページ不在またはセグメント障害となる。
【0602】 ロード/ストアおよび制御移動に関するT段の限度チェックとM段の限度チェ
ックは異なっており、X86のアーキテクチャで定義された挙動を実装する。次
にいくつかの例を説明する。
【0603】 b.ニアレジスタに関連CALL(near register−relative)のターゲットリ
ミットチェック 図9hを参照すると、ロード命令およびストア命令の意味のほとんどが、オペ
コードから推論されるのではなく、ネイティブ命令およびフォーマット化された
命令の符号化の中に明示的にさらされているので、ロードは、データをメモリか
らロードすること(必須の限度チェックを伴う)、またロードアドレスに関して
実行モードのチェックを実行することの両方であると定義することができる。こ
のようなロード命令を使用して、X86コール命令のレジスタ間接形態の宛先に
関して限度チェックを実装することが可能である。この実装はセグメント限度障
害を早く報告して、アーキテクチャで見える状態が修正されることを防ぎ、部分
的に終了したX86命令をバックアウトするために実行しなければならない作業
の量を低減する。
【0604】 図9hの左部分967は、INTEL ARCHITECTURE SOFT
WARE DEVELOPER’S MANUAL、VOL.2の3〜41ペー
ジに示されたCALL命令の動作の説明からの抜粋で、ターゲットアドレスが形
成された後の時点から開始する例を示している。CALL命令はまず、ブランチ
ターゲットがコードセグメント限度内にあるかどうかについて968をチェック
し、限度内にない場合、一般保護違反を知らせる。CALL命令はついで、メモ
リスタックが戻りアドレスを受け入れる余地を有するかどうかについて969を
チェックする。スタックチェックは限度チェックでもあるが、失敗は一般保護違
反ではなくスタック違反によって示される。両方のチェックが成功したときのみ
、コードセグメント(EIP)への現行のオフセットはスタック上にプッシュさ
れ、ついで制御は宛先に移動される。
【0605】 図9hの右側970は、コンバータのレシピの対応する部分を示す。X86の
CALLがレジスタアドレスへ向けられているため、あるいは、レシピ970の
以前のアドレス形成の抜粋がターゲットオフセットを一時レジスタreg_d内
に形成しているかのどちらかの理由によって、抜粋970はターゲットアドレス
がすでにレジスタreg_d内にあると仮定する。
【0606】 命令971 LOAD. Limit_check rO, CS:reg_d は、左側の第1の限度チェック968を実行し、ターゲットアドレスをコードセ
グメント限度と比較する。ロード971の宛先はR0、すなわち常にゼロである
レジスタであるので、保護チェックのみが実行され、実際のメモリロードはまっ
たく省略され、これによって偽のインターロックを防ぐ。「.limit_ch
eck」は、上記のセクションIX.B.2で論じられているように、LDA命
令のアドレス指定モードビット942によって指定されたように、データロード
チェックおよび命令フェッチ保護チェック(または別の実施形態では、データロ
ードチェックの代わりに命令フェッチチェック)の両方に関してメモリ管理ハー
ドウェアを問い合わせるべきであることを指定する。チェックするアドレスはコ
ードセグメント内のreg_d内のオフセットにある。LOAD.limit_
check971が失敗した場合,レシピ970の残りは抑制され、STORE
DEC972はCALL戻りアドレスをストアしない。第2の命令972、ST
OREDECは、スタックポインタESPによって指定されたオフセットにおい
て、IP値をスタックセグメント(SS)上にプッシュする、プレデクリメント
(pre−decrement)のストアである。STOREDEC972のメモリ書込みが
開始すると、両方のセグメントチェックが続くことが知られており(コードセグ
メント限度に対するブランチ宛先のチェック968および、スタックセグメント
のチェック969)、ブランチ宛先はLOAD.limit_check命令9
71によってテストされ、スタックセグメントはSTOREDEC972自体に
よってテストされる。したがって、STOREDEC972の終了時に、3つの
副次的な作用のすべてが続き(メモリ書込み、スタックポインタへの変更、およ
びIPへの変更)、CALL戻りアドレスをストアする、アーキテクチャで見え
る副次的な作用がメモリにコミットされることが可能になる。JR命令973は
reg_dによって指定されたアドレスにジャンプする。一般的な場合では、J
Rの宛先レジスタは直前の命令によって計算されているので、ジャンプ宛先レジ
スタの内容(この場合はreg_d)は、T段903の限度チェックハードウェ
アの中では限度チェックできない。したがって、JR命令は、M段146の中で
セグメント限度チェックを実行するジャンプ命令のうちの1つである。しかし、
レシピ970がこの宛先についてLOAD.limit_check971をす
でに実行しているので、JR973は成功が保証されている。 4.コアトミック実行を保証するための命令の特殊グループ化
【0607】 X86のIPに関連する近接のCALL976(IP−relative near CALL)は
、図9iの左側に説明されている。コールターゲットオフセットは、命令の位置
自体、命令長および命令内のディスプレイスメントイミディエイトの合計として
計算される。続く命令のアドレスはスタック上にプッシュされ、制御はコールタ
ーゲットに移動される。タペストリ実装は、命令の両方の部分を終了させるか、
両方とも終了させない。
【0608】 1実施形態では、X86のIPに関連する近接のCALL976は、上記のセ
クションIX.B.3.bで説明されたレシピ970と同様に処理される。LO
AD.limit_check命令(命令971と類似)は、コールターゲット
を限度チェックし、現行のIPが命令の長さおよびディスプレイスメントに追加
され、合計はコードセグメント限度と比較される。LOAD.limit_ch
eckが失敗するとレシピの残りが打ちきられる。ついで(成功すると)、ST
OREDEC命令(972への命令と類似)は、戻りアドレスをプッシュする。
ジャンプ命令はターゲットにジャンプする。
【0609】 図9iを参照すると、別の実施形態では、X86のIPに関連する近接のCA
LL976は、STOREDEC(IP値のプレデクリメントSTORE)97
7およびジャンプ命令978を含む。ハードウェアはこれらの2つの異なる命令
977、978を監視して、これらが一緒に終了するようにする。コールターゲ
ットオフセットを計算するために必要な情報のすべては(命令位置自体、命令長
、命令の中のディスプレイスメントイミディエイト)、パイプラインの上部13
4内で使用可能なので、T段903の限度チェック回路内でターゲット限度チェ
ックを行うことが可能である。命令が復号化されると、ターゲットアドレスを形
成するために必要なすべての情報が使用可能になるので、限度チェックはストー
ルなしで、命令の生成と共に実行することが可能である。ブランチターゲットハ
ードウェアはパイプラインの上部134に提供されるので、ほとんどのIP関連
のブランチはパイプラインの初期でブランチターゲットを計算しこれらの限度チ
ェックを行うことが可能であり、この回路はIPに関連するCALL976内で
すぐに使用可能であり、コールターゲットを計算し、そのコールターゲットをコ
ードセグメント限度と比較する。これは、IPに関連する近接のCALL976
が、セクションIX.B.3.bで論じられたレジスタ宛先CALLに関して生
成された3つの命令ではなく、2つのタペストリ命令977、978の中で符号
化されることを可能にする。STOREDEC977およびジャンプ978は、
コールターゲット限度チェックが終了するまで、発行機構内に保持される。コー
ルターゲット限度チェックが失敗すると、STOREDEC977およびジャン
プ978は両方ともヌル化され、メモリへの修正を防ぐ。CALLターゲット限
度チェックが成功すると、両方の命令がリリースされる。STOREDEC97
7が失敗すると、X86命令の全部が打ちきられる。STOREDEC977が
一度終了すると、T段903内で限度チェックが実行されるため、ジャンプ97
8は成功することが保証される。
【0610】 機能は次のように実装される。 上部段134は、ジャンプ978のターゲットのセグメント限度がチェックさ
れてからSTOREDEC977が発行されることを保証する。STOREDE
C977がC段902を消去した後、C段902はジャンプ978のディスプレ
イスメントを使用してターゲットアドレスを計算する。T段903はターゲット
に関して限度チェックを実行する。限度チェックの成功または失敗は、上部のパ
イプライン134の直前にあるSTOREDEC977にタグとして付けられる
。このタグは、STOREDEC977がD段140および低いパイプライン1
20に移動すると、STOREDEC977と共に移動する。ジャンプターゲッ
ト限度チェックが失敗すると、STOREDEC977は障害とマーキングされ
てから、実行パイプライン120に発行される。
【0611】 別の実施形態では、命令が復号化されると、IPに関連する近接のコールは特
別なケースとして捕らえられる。TIG905、906は、特別なマーカでST
OREDEC977をマーキングする。そのマーカを伴う命令は、ターゲットの
形成および限度チェックがジャンプ978に関して終了するまで、上部134か
ら実行パイプ120に移動することを許可されない(または別の実施形態では、
発行バッファ907内に保持される)。パイプラインは、このチェックが早く実
行され、STOREDEC977が通常はバブルなしに発行バッファ907から
リリースされるように構成される。マーカは、上段134でのみ使用されるとい
う点を除いては、低いパイプライン120を介して伝播するサイドバンド情報9
20にいくらか似ている。
【0612】 IPに関連するCALL命令またはレジスタCALL命令967、976の別
の実施形態では、T段903またはM段146は、ジャンプ命令973、978
のターゲットについて限度エラーをチェックする。限度エラーがある場合、限度
例外はSTOREDEC972、977上にタグとして付けられる。STORE
DEC972、977についての例外は、次にW段150内で認識され、STO
REDEC972、977は決してメモリにコミットしない。STOREDEC
972、77の中断は、ジャンプ973、978を打ちきる。ジャンプ973、
978の限度チェックは終了して使用可能となり、パイプライン120を先に進
み、例外をSTOREDEC972、977にタグを付けてから、STORED
EC972、977がW段150にコミットすることに間に合う。その理由は、
2つの段は十分に離れているからという場合もあり、STOREDEC972、
977は限度チェックが成功するまでコミットを遅延されるからという場合もあ
る(命令の独立したリタイアメントという、一般的な設計目標に対する例外とし
て)。
【0613】 5.LOOP命令のエミュレータにおける展開 図9jを参照すると、X86アーキテクチャは複雑なLOOP命令を定義する
。図9jの左半分980は、より簡単な変形例のうち1つに関する動作を示す。
ループに入る前に、プログラムはECXレジスタの中でループカウントを確立す
る。LOOP命令はループ本体の終了時に使用される。LOOP命令はループの
反復ごとにECXレジスタをデクリメントする。ECXレジスタがゼロでない限
り、LOOP命令は制御をループの一番上の命令に戻し、ループの次の反復を開
始する。
【0614】 LOOP命令のこの変形例に関して、ネイティブタペストリレシピ981は、
DEC982の結果に基づいて、DECデクリメント命令982およびCJNE
983(ゼロでない場合、条件付きのジャンプ)という2つの命令を生成する。
DEC命令982は、「.X」オペコード拡張子によって示される8ビット、1
6ビット、または32ビット広さのオペランドを有する場合がある。CJNE命
令983は、ECXレジスタをr0(常にゼロであるレジスタ、表1を参照のこ
と)と比較し、これらが等しくない場合は分岐する。LOOP980またはCJ
NE命令983への「imm8」引数はディスプレイスメントであり、X86L
OOP命令の中の8ビット、16ビットまたは32ビットであり、コンバータ1
36によってエミットされた、フォーマット化されたCJNEネイティブ命令9
83の中でも同様な広さである場合がある。
【0615】 他の任意の制御移動ターゲット同様、LOOP命令980のターゲットは、コ
ードセグメント限度に対して限度チェックしなければならない。X86内で限度
チェックが実行されてから、ECXへの修正、ついで分岐が発生する。限度チェ
ックが失敗すると、修正ECXはコミットされない。しかしレシピ981内でD
EC命令982はブランチ983の前にあり、LOOP命令の頻度のため、限度
チェックを行うためにだけに第3の命令を追加するのではなく、レシピ981を
2つの命令に保持することが望ましい。
【0616】 1つの実施形態では、CJNE命令983は、限度チェックの失敗でマーキン
グされ、またLOOPレシピ内で命令としてサイドバンドマーキングされている
。CJNE983がW段150に到達すると、ハードウェアはセグメント限度エ
ラーを認識し、LOOPサイドバンド情報をメモリ障害コードにストアする。セ
グメント限度エラーハンドラーは、メモリ障害コードを確認する。X86 LO
OPビット(「メモリ障害コード」プロセッサレジスタのビット25)が設定さ
れ、ついでECX(またはCX)が1ステップ、アンワインドされる。 別の実施形態では、X86 LOOP命令は後の命令(CJNE983)がそ
れ以前の命令(DEC982)の実行に影響を与えることが可能な、わずかなイ
ンスタンスのうち1つである。CJNE命令983は、T段903内で限度チェ
ックされる。この限度チェックの結果は「X86 LOOP.」と名付けられた
1ビットのタグとして、サイドバンド情報920の中のCJNE命令の上にタグ
を付けられる。X86 LOOPタグは,CJNE命令983に関する他のサイ
ドバンド情報と共にパイプの段を下へ下りる。W段150が、限度チェックが失
敗したことを示すX86 LOOPタグを伴う命令を検出すると、プロセッサは
エミュレータ316内にトラップし、エミュレータ316はレジスタECX(ま
たはワード広さに関してはレジスタCX)を1つインクリメントして、最後のD
EC982によってデクリメントをアンワインドする。
【0617】 6.反復ストリングの命令 図9kを参照すると、X86アーキテクチャはREPプレフィックスバイトを
、たとえば「REPE CMPS」(比較文字列)、「REP MOVS」(移
動文字列)、および「REP SCA」(スキャン文字列)などの「REP」反
復命令のセットを導出する所定の命令に定義する。これらの反復された文字列の
命令の各々において、X86は多くの反復に関して動作を反復する。反復のカウ
ントはレジスタECX(32ビットモード)またはCX(16ビットモード)内
で指定される。図9kに示された例986「REPNZ MOVS」では、X8
6はレジスタECXをカウントレジスタとして使用し、バイトをソースメモリの
オペランドから宛先メモリのオペランドへ移動する。繰り返しごとに、X86は
保留中の割り込みがある場合にはそれを受入れ、ついでECXをデクリメントし
て関連するMOVS命令を実行する。反復命令自体はブランチ命令ではなく、終
了条件が満たされてから次のシーケンシャル命令に失敗するまでその命令の実行
を繰り返すようにX86に命令する、別の命令に付けられた1バイトの接頭辞で
ある。
【0618】 T段903はREP命令を、直線命令987の無限にアンロールされたループ
にする。レシピの最初の近く(図9kに示された抜粋の前)は、ECX内の反復
カウントがゼロである場合、次のX86命令にブランチするブランチ命令である
。ついでループの第1の反復988に関してネイティブ命令が続く。REPNZ
MOVSの場合、ループの本体は、とられていないと予想されたロード、スト
ア、およびJNZ命令である。この部分988は、反復されているX86命令を
反映するように変化する。
【0619】 各反復988の終わりに、T段903はとられていないと予想されたジャンプ
命令989を次のX86命令にエミットする。これらの反復間のブランチ命令9
89は、各々、「割り込み可能な反復境界」サイドバンドマーカによってマーキ
ングされている(図9cの990)。X86の挙動と並列に、反復間のブランチ
命令989はECXのカウントダウンを反映する一時フラグをテストする。これ
らの一時フラグはX86 EFLAGSに相似しているが、X86 EFLAG
Sとは異なるので、EFLAGS自体は修正されない。
【0620】 ECXカウントが終了していない場合、反復間のブランチ989がR段142
およびA段144に到達すると(ブランチが実際に実行される段)、予想どおり
にブランチ989はとられない。反復された文字列命令に関するレシピはネスト
反復本体991で継続する。反復カウントが終了すると、ブランチ条件が満たさ
れ、ブランチの間違った予想回路が起動され、パイプライン120をフラッシュ
する。上部134は、反復された命令の反復の生成を中止する。実行は次のX8
6命令で再開する。各命令間のブランチ989はレシピの終わりマーカX86_
COMPLETED926でマーキングされ、命令が最終的に終了すると、正し
い状態のすべてが更新され、たとえば、IPがインクリメントされる。しかし、
同じブランチ命令989上に代入されている反復境界マーカ990はハードウェ
アに対して、レシピの終了マーク926が条件付きであると知らせ、レシピの終
了処理は、反復カウントが終了しなければ実行すべきでないと知らせる。
【0621】 X86単一ステップモードでは、反復される命令の各反復はX86単一ステッ
プ例外をトリガする。X86単一ステップおよびタペストリネイティブ単一ステ
ップモードの両方が使用可能な場合、2つの間の反復はエミュレータ316内で
解消される。
【0622】 C.単一X86命令の複数の副作用をエミュレートするために複数のネイティブ
命令の結果の収集 1.ロード/記憶アドレスデバッグ比較結果の収集とフィルタリング X86アーキテクチャはデバッグ機能を定義する。4つのデバッグレジスタが
あり、各々は線形アドレスを保持する。各レジスタは読取り、書込み、または実
行という、メモリリファレンスのクラスでタグを付けられる。各メモリリファレ
ンスに関して、リファレンスのアドレスは4つのデバッグレジスタのアドレスお
よびモードに対して比較される。マッチおよびモードが検出され、リファレンス
がレジスタのクラスタグに一致すると、トラップがX86命令の終了時に発生し
、リファレンスのアドレスはデバッガソフトウェアが使用できるようになる。X
86命令が多数のメモリリファレンスを有する場合があるので、単一のX86命
令内にいくつかの一致があることが可能である。
【0623】 タペストリは、各々が監視されるべきアドレスを保持する同様なデバッグレジ
スタを提供する。タペストリのデバッグレジスタは、メモリリファレンスクラス
に対して一致しない。次に論じられるように、クラス機能はソフトウェア内でエ
ミュレートされ、監視するクラスはメモリ内に記録される。ハードウェアアドレ
ス一致の細分性はかなり粗く、16バイトに近い。アドレスがデバッグレジスタ
のうち1つの16バイトウィンドウ内にあるようなメモリリファレンスが検出さ
れると、プロセッサはエミュレータ316内にトラップする。エミュレータ31
6はエミュレータ316インタフェースプロセッサレジスタから情報をさらに収
集して、アドレスがX86アーキテクチャの定義によって必要とされる細分性に
一致していたかどうかを決定する(オペランドの幅に応じて、もっとも近い1バ
イト、2バイトまたは4バイト)。エミュレータ316はまた、一致リファレン
スがロードまたはストアのいずれであったかを決定し、この決定を、このレジス
タ内のアドレスに関して監視されるべきメモリリファレンスのクラスと比較する
。細分性およびメモリリファレンスクラスのフィルタリングを受けてもアドレス
一致が残ると、エミュレータ316はどのデバッグレジスタが一致したかを記録
し、X86単一ステップモードをオンにする(X86アーキテクチャは、実行が
各命令の終了時にトラップされた単一ステップモードを定義するので、デバッガ
は起動できる。これはタペストリの中で、X86_COMPLETEDレシピの
終わりタグ926を伴う各命令が単一ステップモードで実行されたときに発生す
るトラップとして実装される)。X86命令の終了時に、単一ステップトラップ
はコンバータ136によって発生し、制御はエミュレータ316内にベクトルを
向ける。単一の命令内で発生した1つまたは多数のデバッグレジスタが一致する
と、エミュレータ316はこれらを集めて、適切であればX86環境に表面化す
る。エミュレータ316の終了時に、単一ステッピングはオフにされる(単一の
命令に関してエミュレータ316によってではなく、単一ステッピングがすべて
のX86命令に関してオンにされない限りである)。 このように、ロードおよびストアデバッグアドレスは個別のタペストリ命令に
基づいて収集され、X86命令の終了ごとにX86上に表面化される。
【0624】 2.FP DP/IP/OPの延期 再び図9aを参照すると、FP DP/IP/OP回路993は浮動小数点デ
ータポインタ、命令ポインタおよびオペコード情報を、パイプラインの下の段に
下げる。 X86浮動小数点ユニット(FPU)は、命令へのポインタおよび、最後の非
制御浮動小数点(FP)命令(「制御命令」は、Intel X86アーキテク
チャ内で定義された用語である)に関するデータオペランドを、2つの48ビッ
トレジスタであるFPU命令ポインタ(FP−IP)レジスタおよびFPUオペ
ランド(データ)ポインタ(FP−DP)レジスタ内にストアする。(FP−D
P情報は単一のメモリオペランド命令に関してのみ更新され、メモリからメモリ
への動作は非制御命令であるので、DPポインタは多数ある必要はない)。X8
6 FPUはまた、11ビットのFPUオペコードレジスタ(FP−OP)内に
最後の非制御命令のオペコードをストアする。この情報は保存されて、例外ハン
ドラに関する状態情報を提供する。命令ポインタおよびデータポインタ、および
オペコード情報は、情報をメモリ内に現行のX86モードに依存したフォーマッ
トでストアするX86の命令FNSTENVおよび/またはFNSAVEを実行
することによってアクセスされる。
【0625】 タペストリは、X86のこの態様をモデリングする。レシピの実行中、情報は
X86フォーマットとはいくらか異なる内部フォーマットで保持される。情報は
レシピ内で2つ以上の異なる命令によって生成される。コンバータがレシピの最
後926に到達すると、情報はタペストリの内部フォーマットからX86で定義
されたフォーマットに変換され、FP−IP/OP、および、可能性としてはF
P−DPを含む、アーキテクチャで見える副次的な作用がX86 FP命令から
同時にコミットされる。
【0626】 FNSTENV命令およびFNSAVE命令は、ハードウェアコンバータ13
6ではなくエミュレータ316内で実行される。エミュレータ316は、FNS
TENVおよびFNSAVEが実行された時、タペストリハードウェア(16ビ
ットのセグメントセレクタおよび32ビットのオフセット)によってストアされ
たポインタのカノニカルな形態を、現行のオペレーティングモードによって要求
される特定のフォーマットに変換する。FP−IP、FP−OP、およびFP−
DP情報のX86定義はいくらかコンテキストに依存するので、タペストリ変換
はコンテキスト依存である。この同時性とコンテキスト依存の変換は、X86の
挙動を正しくモデリングするという結果を生む。
【0627】 T段903で、X86浮動小数点命令がネイティブ命令に変換されると、FP
サイドバンド情報が生成され、パイプラインの段を下がる。このFPサイドバン
ド情報は、これが浮動小数点命令であることを示し、IP値(FP−IP)およ
びオペコード値(FP−OP)のスナップショットを含む。FP−IPオペコー
ド値およびFP−OPオペコード値はコンバータからパイプ制御910に渡され
、パイプ制御910は情報をD段からW段150へ段を変える。データポインタ
FP−DP、メモリリファレンスアドレスはA段144内で作成される。FP−
IP情報、FP−OP情報、FP−OP情報、および例外情報はパイプ制御91
0を介してW段150内のFP−IP/OP/DP論理993へ段を下りる。こ
のサイドバンド情報は、図9cに示されたようにフォーマット化された命令に関
して、モードから独立したカノニカルなフォーマットでパイプライン120の段
を下りる。
【0628】 FP IP/OP/DP論理993は、単一のX86命令に関してネイティブ
な命令に渡って情報を累積する「スティッキ」レジスタ994を含む。たとえば
、計算のメモリリファレンスがレシピ内の第1の命令内にあり、算術動作がレシ
ピの最後のネイティブタペストリ命令であった場合、最終的にFP−DP内に保
存されるメモリリファレンス情報は、メモリリファレンスタペストリ命令でパイ
プライン制御論理を下へ流れる。レシピのすべての命令からのサイドバンド情報
は、FP IP/OP/DPスティッキレジスタ994内に累積される。
【0629】 レシピの終わりマーカ926を伴う命令がW段150に到達すると、FP I
P/OP/DP論理993はレシピのすべてのネイティブ命令に渡って累積され
た例外状態を確認することによって反応する。スティッキレジスタ994からの
データはX86で構築されたFP−IPレジスタ、FP−OPレジスタおよびF
P−DPレジスタに書き込まれる。スティッキレジスタ994はついで消去され
る。例外が発生しない場合、データの結果は適切な結果レジスタ(複数可)に書
き込まれる(レジスタR32〜R47のうち1つまたは2つのレジスタ。表1を
参照のこと)。
【0630】 シーケンスが正常に終了し、新しいFP−IP/OP/DP状態にコミットす
ることが必要な場合、シーケンス内でネイティブ例外を処理する間に、妨害され
ないままで残されるFP−IP/OP/DPに関するシャドウ状態がある。X8
6の処理は、常に命令境界において仮想化されているので、これは実際には困難
ではない。FP−IP/OP/DPはコンバータがオフである限りは保存される
。シャドウレジスタ994はアーキテクチャ上アドレス指定不可能である。
【0631】 3.次の命令へのSTIS(命令ストリーム内への記憶)フラッシュ境界 X86は、「命令ストリームへのストア」(STIS)としても知られる「自
己修正コード」を可能にし、この場合、命令は後に実行されるメモリ内の場所へ
値をストアする。特に、X86は命令(命令iと呼ばれる)がメモリ内の直後の
命令(命令i+1と呼ばれる)を修正することを可能にする。X86アーキテク
チャは、命令i+1に関するメモリ位置の古い内容がすでに、パイプライン12
0のほとんどの道を流れてしまった場合でも、命令i+1のメモリコピーのフェ
ッチおよび実行が、命令iによって誘導された修正を反映することを要求する。
命令iは簡単なストア命令である場合もあり、複雑な命令である場合もある。複
雑な命令iは、修正自体が発生した後、さらに作業を実行する可能性がある。し
たがって、メモリへのストアごとに、パイプラインはSTIS状態かどうかが確
認される。確認は現行の命令の最後からパイプラインの上まで戻って広がり、続
いて命令キャッシュへ戻り、メモリへの書込みがメモリシステム全体に十分に伝
播するのに十分なほど広がっている。STIS状態が検出されると、パイプライ
ンおよび命令キャッシュの該当部分はフラッシュされる。
【0632】 次に図9aを参照すると、E段148の中にSTIS検出装置995がある。
STIS検出装置995は入力として、任意のストア動作のメモリアドレスを受
け取る。STIS検出装置995はストアアドレスを、パイプライン120、1
32内のPC値925の、すべての若い命令に関してパイプライン120、13
4内のすべてのPC値925と比較する、すなわち、E段148の若い命令と、
M段146、A段144のすべての命令と比較してから、フェッチ段110に戻
る。STIS状態が検出されると、現行のX86命令は終了することが許可され
る。現行の命令が一度終了すると、パイプライン120は、次の命令からフラッ
シュされて、パイプラインの最初にあるフェッチ段110に戻る。別の実施形態
では、フラッシュは一致する命令を戻すところからのみ発生し、ストアを生成す
る命令と修正した命令の間に介入する命令がある場合は、これらの介入する命令
は終了することを許可される。STIS検出およびパイプラインのフラッシュは
、X86命令に基づいて実行されることに注意されたい。
【0633】 データストアは従来の方法でデータキャッシュに影響を与え、また命令キャッ
シュを無効にする場合もある。命令フェッチが再開すると、命令キャッシュは見
失われ、命令フェッチはメインメモリの最初まで戻る。
【0634】 D. マイクロ命令セットとして外部にさらされたRISC ISA−第2の命
令セットの変換を実装し、ユーザがアクセス可能な第1の命令セットで実装する
1.外部マイクロコード 一部の機能はX86コードの変換を介してでなければ使用できず、ネイティブ
なアセンブリ言語プログラマには使用できないことに注意されたい。
【0635】 サイドバンド920のほとんどは、X86モードでなければ意味がない。たと
えば、X86命令境界情報の概念はネイティブな実行モードでは意味がない。 ネイティブ命令のイミディエイトフィールドは、6ビット広さまたは12ビッ
ト広さのいずれかである。32ビットイミディエイトおよびブランチディスプレ
イスメントは、X86コンバータを介してでなければ使用できない。
【0636】 X86では、メモリアドレスはセグメントベース、イミディエイトとして符号
化された最高で32ビットまでのオフセット、ベースレジスタ、インデックスレ
ジスタ(2、4、または8でスケーリングされている場合がある)という4つの
成分からなりたつ場合がある。ネイティブなタペストリ命令は3つの成分を指定
することが可能であり、その3つとはセグメントベース、プラス、2つのレジス
タ、またはセグメントベース、プラス、レジスタ、プラス、6ビットのイミディ
エイトのいずれかである。コンバータはX86モードの間に4つの成分のアドレ
スを生成することが可能である。
【0637】 2.その他の特徴 タペストリのネイティブ命令セットには、アセンブリ言語プログラマにさらさ
れた時に、主にX86マイクロエンジンをサポートするために存在する多くの機
能がある。 再び図9cを参照すると、ネイティブなタペストリLDA命令およびSTA命
令は、X86セグメント化のスーパーセットであるセグメント化機能を提供する
。タペストリのページング挙動は、X86によって提供されるページング機能の
スーパーセットである。したがって、これらのネイティブなタペストリメモリリ
ファレンス命令は、X86メモリリファレンスの個別のピースすべてを実行する
【0638】 LDA命令およびSTA命令はプロキシ機構を提供する。リファレンスはX8
6命令の意味に従う場合もあれば、それほど限定的でないネイティブな意味に従
う場合もある。この機能はセグメント記述子内でタペストリ拡張ビットによって
制御される。
【0639】 タペストリは、X86 EFLAGSの挙動を映す整数フラグおよび浮動小数
点フラグ(条件コード)を含む。 一部の算術命令は、整数フラグが修正されたかされないかを決定するビットを
有する。したがって、多数命令のレシピ内では、X86フラグが基づいている、
個別の結果を計算する1つの命令は整数フラグを設定し、レシピ内の他の命令は
フラグを修正しないまま残しておく。
【0640】 タペストリは、RISCアーキテクチャの中では一般には発見されないいくつ
かの命令を提供して、同等なX86命令の効率的な実装を提供する。これらは、
バイトスワップ命令、所定のシフト命令および回転命令などを含む。
【0641】 E.再開可能な複合命令 1.ネイティブなシングルステップによるトミックMOV/POPスタックセグ
メントペア X86では、すべてのメモリリファレンスはセグメント記述子およびセグメン
トへのオフセットから離れたところに基づいている。セグメントは16ビットの
記述子によって定義され、オフセットは16ビットまたは32ビットのいずれか
である。したがって、X86プログラムがスタックを変更すると、スタックセグ
メント記述子(SS)およびオフセットの両方を変更しなければならない場合が
ある。SSを修正する命令とスタックオフセットをスタックポインタレジスタに
ロードする命令の間の境界で割込みが発生すると、スタックの一番上を共に定義
するマシン状態の2つの部分が不一致になるため、例外フレームはメモリスタッ
クの上にプッシュされない。このような境界において割込みがスタックを崩壊さ
せるのを防ぐために、X86アーキテクチャは、SSへの移動またはポップと、
それに続く命令の間の境界では例外が禁じられるように定義する。
【0642】 タペストリ実装内では、SSへの移動またはポップは、エミュレータ316内
で実行される。エミュレータ316はメモリ内に(a)SSが修正されたため、
単一ステップモードに入ったという事実、(b)移動またはポップ命令の前に有
効であった割り込みフラグ、および(c)X86単一ステッピングの現行の状態
を記録する。エミュレータ316はついで、新しい値をSS内に書き込む。移動
命令またはポップ命令をエミュレートした後、X86アーキテクチャの定義によ
って指定された通りにハードウェアの割込みは不可能になり、プロセッサは単一
ステップモードになる。そうでなければ2つの命令の間で知らせられたであろう
X86の単一ステップの例外は抑制され、続く命令の命令区切り点も抑制される
。したがって、SSの修正とそれに続く命令の間の境界では、割り込みまたは例
外が発生することは不可能である。RFE命令は実行をコンバータに戻す。コン
バータは、通常は、スタックポインタレジスタを設定する命令である次の命令を
実行する。次の命令の終了時に、単一ステップ例外は制御をエミュレータ316
にベクトルを向ける。単一ステップハンドラは、SSが修正されたために例外が
生じたことを観察し、これに応じてハードウェアの割込みと、単一ステップモー
ドの前の状態を復元する。実行は、SSへ初めて修正が行われる前に優勢であっ
た実行モードでコンバータ内で再開される。
【0643】 2.ネイティブなシングルステップによるIFビット変更の禁止 X86アーキテクチャは割込みフラグを定義する。マスキング可能な割り込み
が代入された時、マスキング可能な割込みは命令の間に介入することが許可され
、非同期的な例外を生成する。割込みフラグが代入を外されると、マスキング可
能なハードウェア割込みは無視される。X86 STI命令は割込みフラグを設
定し、CLI命令は割込みフラグを消去して割込みを抑制する。割込みフラグは
EFLAGSビットの1つなので、EFLAGSレジスタへのPOPも割り込み
フラグを変更する。
【0644】 X86アーキテクチャは、直後に続く命令境界内で使用不能にされた割込みを
維持し、そのまた次の命令の実行の終了後に割込みを可能にするものとして、S
TI命令を定義する。この定義は、典型的にはルーチンの終了時に使用される。
ルーチンはSTI命令で終了し、ついでRET命令で終了するので、戻り命令の
終了まで割込みは不可能なままである。実行がコーリングコンテキスト内で再開
した後でなければ、割込みを再開することは不可能である。
【0645】 タペストリ実装では、STI命令およびCLI命令はエミュレータ316内で
実行される。STIに関するエミュレーションルーチンの終了時に、ハードウェ
アの割込みは不可能になり、X86単一ステップモードの現行の状態が保存され
、X86単一ステップモードが作動状態になり、記録はエミュレータのプライベ
ートメモリ内に設定されて、次のX86の単一ステップ例外が特別なハンドラで
処理されるべきことを示す。エミュレータ316はコンバータにRFEバック(
RFE's back)する。次のX86命令が実行される。次のX86命令の終了時に、
レシピの終わりX86_COMPLETEDサイドバンドビット926は単一ス
テップ例外をトリガする。単一ステップハンドラはプライベートメモリ内で記録
を確認し、単一ステップ例外がSTI命令によって生じたことを発見する。ハン
ドラはハードウェア割込みを可能にし(次の命令がCLIでない限り)、X86
単一ステップを以前の状態に復元する。エミュレータ316はコンバータにRF
Eバックし、実行が再開する。
【0646】 STIのすぐ次に第2のSTI命令が続く場合は、特別な挙動は第1のSTI
のみに適用される。割込みは第2のSTI命令の後に介入を許可される。
【0647】 X.割込み優先順位 TAXiシステムは、5つの例外および1つのソフトウェアトラップを使用す
る。DMU700は1つの新しい割込みサブケースを導入する。これらの割込み
は次の表7にまとめられている。表の第4の列は、相対的な割込み優先順位を示
す。第5の列は、この明細書でそれぞれの割込みが論じられているセクションを
示す。
【0648】
【表9】
【0649】 パフォーマンスを達成するために、TAXiコードはコンバータ136および
エミュレータ316がとるカノニカルな場所にX86状態を保存しない。したが
って、TAXiコードが割り込まれる時、コンバータはX86マシンの状態のカ
ノニカルなピクチャを最初に復元しなければ、再開を許可されない。
【0650】 上記の例外戦略は、単純さを通じて正確さを達成することを目的としており、
すべての例外を処理するための単一な共通戦略を有するものであり、TAXiコ
ード内で発生した例外がコンバータによって発生した例外とまったく同じコード
で処理されるようにし、パフォーマンスを最大にして、例外をX86に表面化さ
せなければならないこと分かるまでTAXiコードの放棄を遅らせ、TAXiコ
ードがX86FP例外状態の維持に先立つことを許可する。
【0651】 読者の便宜のために、この説明はすべての可能な実施形態のうち代表的な例、
すなわち、本発明の原理を教示し、本発明を実行するために考えられる最良の実
施形態を伝える例を中心としている。この説明は、すべての可能な変形例を網羅
的に列挙することを目的としていない。さらに、説明されない代替の実施形態が
可能である。これらの説明されない実施形態の多くは、文字どおり、続く請求項
の範囲内にあり、他の実施形態も同等であることを理解されたい。
【0652】 次の書物が参照により本明細書に組み込まれている。INTEL ARCHI
TECTURE SOFTWARE DEVELOPER’S MANUAL,
VOL.1〜3,Intel Corp.(1997);GERRY KAN
E,PA−RISC2.0ARCHITECTURE,Hewlett−Pac
kard Professional Books,Prentice−Hal
l(1996);RICHARD L.SITES AND RICHARD
T.WITEK,THE ALPHA AXP ARCHITECTURE R
EFERENCE MANUAL,2d ed.,Digial Press,
Boston(1995);DAVID A.PATTERSON AND J
OHN L.HENNESSEY,COMPUTER ARCHITECTUR
E:A QUANTITATIVE APPROACH,Morgan Kau
fman Publ.,San Mateo,CA(1990);TIMOTH
Y LEONARD,ED.,VAX ARCHITECTURE REFER
ENCE MANUAL,Digital Equipment Corp.(
1987);PETER M.KOGGE,THE ARCHITECTURE
OF PIPELINED COMPUTERS,Hemisphere P
ubl.,McGraw Hill(1981);JOHN MICK AND
JAMES BRICK, BIT−SLICE MICROPROCESS
OR DESIGN,McGraw−Hill(1980) マイクロフィッシュの付録へのリファレンス
【0653】 1999年1月28日に提出された米国特許出願番号09/239、194号
のファイルに見いだされる、マイクロフィッシュに記録された28フレームの付
録が、参照により本明細書に組み込まれている。
【0654】 本特許文書の開示の一部は、著作権によって保護された資料を含む。著作権の
保持者は、本特許文書または特許の開示が、特許商標局のファイルまたは記録内
に現れた形でファクシミリで再生することに反対するものではないが、それ以外
の方法では、いかなる形でもすべての著作権を保持する。
【図面の簡単な説明】
【図1a】 コンピュータシステムのブロック図である。
【図1b】 コンピュータシステムのブロック図である。
【図1c】 コンピュータシステムのブロック図である。
【図1d】 コンピュータシステムのブロック図である。
【図1e】 図1a〜1dに示すシステムのPSW(プログラムステータスワード)の図で
ある。
【図2a】 図leのPSWの数ビットの意味に関する表である。
【図2b】 例外ハンドラのアクションに関する表である。
【図2c】 例外ハンドラのアクションに関する表である。
【図3a】 コンピュータシステムのブロック図である。
【図3b】 メモリ内のプログラムフローを示すブロック図である。
【図3c】 メモリ内のプログラムフローを示すブロック図である。
【図3d】 メモリ内のプログラムフローを示すブロック図である。
【図3e】 メモリ内のプログラムフローを示すブロック図である。
【図3f】 メモリ内のプログラムフローを示すブロック図である。
【図3g】 流れ図である。
【図3h】 流れ図である。
【図3i】 流れ図である。
【図3j】 流れ図である。
【図3k】 データ宣言またはデータ構造を示す。
【図3l】 メモリ内のプログラムフローを示すブロック図である。
【図3m】 メモリ内のプログラムフローを示すブロック図である。
【図3n】 メモリ内のプログラムフローを示すブロック図である。
【図3o】 メモリ内のプログラムフローを示すブロック図である。
【図4a】 メモリ内のプログラムフローおよび、そのプログラムフローを記述するプロフ
ァイル情報を示すブロック図である。
【図4b】 プロファイリング事象コードおよびそれらの意味の表である。
【図4c】 データ宣言またはデータ構造を示す。
【図4d】 データ宣言またはデータ構造を示す。
【図4e】 メモリ内のプログラムフローおよび、そのプログラムフローを記述するプロフ
ァイル情報を示すブロック図である。
【図4f】 メモリ内のプログラムフローおよび、そのプログラムフローを記述するプロフ
ァイル情報を示すブロック図である。
【図4g】 コンピュータのプロセッサレジスタを示す。
【図4h】 コンピュータのプロセッサレジスタを示す。
【図4i】 コンピュータのプロセッサレジスタを示す。
【図5a】 プロファイラの制御のための有限状態機械を示す。
【図5b】 回路ブロック図である。
【図6a】 PIPM(物理IPマップ)およびそのエントリのブロック図である。
【図6b】 回路ブロック図である。
【図6c】 流れ図である。
【図7a】 回路ブロック図である。
【図7b】 回路ブロック図である。
【図7c】 コンピュータのプロセッサレジスタを示す。
【図7d】 流れ図である。
【図7e】 回路ブロック図である。
【図7f】 回路ブロック図である。
【図7g】 回路ブロック図である。
【図7h】 回路ブロック図である。
【図7i】 コンピュータのプロセッサレジスタを示す。
【図7j】 データ宣言またはデータ構造を示す。
【図8a】 コンピュータのプロセッサレジスタを示す。
【図8b】 流れ図である。
【図9a】 コンピュータシステムのブロック図である。
【図9b】 コンピュータのプロセッサレジスタを示す。
【図9c】 コンピュータの命令を示すデータ構造図である。
【図9d】 コンピュータの命令と関係する情報を示す表である。
【図9e】 X86命令の擬似コードおよび対応するネイティブのタペストリー命令を示す
【図9f】 コンバータによる一時レジスタの使用を示す表である。
【図9g】 X86命令の擬似コードおよび対応するネイティブのタペストリー命令を示す
【図9h】 X86命令の擬似コードおよび対応するネイティブのタペストリー命令を示す
【図9i】 X86命令の擬似コードおよび対応するネイティブのタペストリー命令を示す
【図9j】 X86命令の擬似コードおよび対応するネイティブのタペストリー命令を示す
【図9k】 X86命令の擬似コードおよび対応するネイティブのタペストリー命令を示す
───────────────────────────────────────────────────── フロントページの続き (51)Int.Cl.7 識別記号 FI テーマコート゛(参考) G06F 12/10 559 G06F 9/44 310A (31)優先権主張番号 09/332,263 (32)優先日 平成11年6月11日(1999.6.11) (33)優先権主張国 米国(US) (31)優先権主張番号 09/334,530 (32)優先日 平成11年6月16日(1999.6.16) (33)優先権主張国 米国(US) (31)優先権主張番号 09/385,394 (32)優先日 平成11年8月30日(1999.8.30) (33)優先権主張国 米国(US) (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,GW,ML, MR,NE,SN,TD,TG),AP(GH,GM,K E,LS,MW,SD,SL,SZ,TZ,UG,ZW ),EA(AM,AZ,BY,KG,KZ,MD,RU, TJ,TM),AE,AL,AM,AT,AU,AZ, BA,BB,BG,BR,BY,CA,CH,CN,C R,CU,CZ,DE,DK,DM,EE,ES,FI ,GB,GD,GE,GH,GM,HR,HU,ID, IL,IN,IS,JP,KE,KG,KP,KR,K Z,LC,LK,LR,LS,LT,LU,LV,MA ,MD,MG,MK,MN,MW,MX,NO,NZ, PL,PT,RO,RU,SD,SE,SG,SI,S K,SL,TJ,TM,TR,TT,TZ,UA,UG ,US,UZ,VN,YU,ZA,ZW (72)発明者 イエッツ,ジョン,エス.,ジュニア アメリカ合衆国、マサチューセッツ 02492、ニードハム、パイン ストリート 40 (72)発明者 リース,デイビッド,エル. アメリカ合衆国、マサチューセッツ 01581、ウエストボラフ、メイプル サー クル 1 (72)発明者 ホーエンシー,ポール,エイチ. アメリカ合衆国、ニューハンプシャー 03060、ネイシュア、スワート テラス 15 (72)発明者 アドラー,マイケル,シー. アメリカ合衆国、マサチューセッツ 01778、ワイランド、グレゼン レーン 61 (72)発明者 ヴァン,ダイク,コービン,エス. アメリカ合衆国、カリフォルニア 94586、 サノール、リトル ヴァレイ ロード 3343 (72)発明者 ラメッシュ,ティー.,アール. アメリカ合衆国、カリフォルニア 94586、 ユニオン シティ、カリフォルニア コー ト 2516 (72)発明者 サスー,シャレッシュ アメリカ合衆国、カリフォルニア 95035、 ミルピタス、アーバー ウェイ 716 (72)発明者 サウンド,ガージート,シング アメリカ合衆国、カリフォルニア 94043、 マウンテン ビュー、エヌ.ウィスマン ロード #205 100 (72)発明者 パーセル,ステファン,シー. アメリカ合衆国、カリフォルニア 94040、 マウンテン ビュー、プレストン ドライ ブ 365 (72)発明者 パットカー,ナイティーン,アラビンド アメリカ合衆国、カリフォルニア 94089、 サニーヴェイル、モース アヴェニュー #7−103 1063 (72)発明者 ナイジャワン,サンディープ アメリカ合衆国、カリフォルニア 95127、 サン ジョーズ、タウンスクェア ドライ ブ 3591 (72)発明者 ストーク,マシュー,エフ. アメリカ合衆国、カリフォルニア 95051、 サンタ クララ、アパート 308、ホーム ステッド ロード 3301 (72)発明者 ジャリッチ,デイル,アール. アメリカ合衆国、カリフォルニア 95032、 ロス ゲイトス、ベイシガラピ ドライブ 211 (72)発明者 キャンベル,ポール アメリカ合衆国、カリフォルニア 94609、 オークランド、ダナ ストリート、6652 Fターム(参考) 5B005 JJ11 MM02 MM32 MM36 RR02 5B033 AA13 AA15 BA03 5B098 AA02 AA10 BA06 CC00 EE02 GA05 GA07 GA08 GB14 HH03 HH07

Claims (278)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータのメモリの単一のアドレス空間の第1および第
    2の領域からフェッチされた命令を実行することからなり、第1および第2の領
    域の命令は第1および第2の命令セットアーキテクチャのコンピュータによる実
    行のためにコード化されており、第1および第2のアーキテクチャの各々はプロ
    セッサコンテキストを定義する資源の関連する集合を有しており、第1のプロセ
    ッサコンテキストは第2のアーキテクチャにおいてアーキテクチャ的に不可視の
    コンピュータの資源を含んでおり、メモリ領域は関連する第1および第2のイン
    ジケータ要素を有しており、インジケータ要素はそれぞれ、関連する領域からの
    命令がそのもとで実行されるアーキテクチャを指示する値を有しており、インジ
    ケータ要素は第2のアーキテクチャにおいてアーキテクチャ的に不可視の資源の
    うちの1つであり、 第1の領域から第2の領域に命令データの実行が流れると、インジケータ要素
    に従った2つの命令セットアーキテクチャに従って命令を解釈するようにコンピ
    ュータの命令実行ハードウェアを制御することを含む方法。
  2. 【請求項2】 領域が仮想メモリマネージャによって管理されるページであ
    る請求項1記載の方法。
  3. 【請求項3】 インジケータ要素が、仮想メモリマネージャによって使用さ
    れる一次アドレス変換テーブルとは別個のインジケータ要素のテーブルに記憶さ
    れ、テーブルのインジケータ要素はメモリの対応するページと関係づけられる請
    求項2記載の方法。
  4. 【請求項4】 インジケータ要素が、エントリが対応する物理ページフレー
    ムと関係づけられているテーブルに記憶される請求項2記載の方法。
  5. 【請求項5】 エントリが変換索引バッファの1エントリである請求項2記
    載の方法。
  6. 【請求項6】 領域が命令キャッシュのラインである請求項1記載の方法。
  7. 【請求項7】 実行が第1の領域から第2の領域に流れた時にソフトウェア
    介入を要さずに命令の実行のモードが変更される請求項1記載の方法。
  8. 【請求項8】 実行が第1の領域から第2の領域に流れた時にコンピュータ
    の実行が例外を生じる請求項1記載の方法。
  9. 【請求項9】 命令の実行のモードが例外ハンドラによって明示的に制御さ
    れる請求項1記載の方法。
  10. 【請求項10】 領域のうちの1つは、第2の命令セットでバイナリコード
    化されたオフザシェルフオペレーティングシステムを記憶する請求項1記載の方
    法。
  11. 【請求項11】 2つの命令セットアーキテクチャが、対応する第1および
    第2のデータ記憶規約を有しており、 制御が第1の領域から第2の領域に流れた時、第1のデータ記憶規約のもとで
    の変更前プログラムコンテキストと論理的に等価な第2のデータ記憶規約のもと
    でのプログラムコンテキストを作成するために、コンピュータのデータ記憶内容
    を変更することをさらに含む請求項1記載の方法。
  12. 【請求項12】 2つのデータ記憶規約のうちの一方がレジスタベースの呼
    び出し規約であり、他方のデータ記憶規約はメモリスタックベースの呼び出し規
    約である請求項11記載の方法。
  13. 【請求項13】 コンピュータ命令セットの制御フロー命令を複数のクラス
    に分類することと、 コンピュータでのプログラムの実行中に、命令セットの命令の実行の一部とし
    て、一番最近実行された分類された制御フロー命令のクラスの記録を更新するこ
    とをさらに含み、 この調整プロセスは、少なくともある程度、命令クラスの記録によって決定さ
    れるものである請求項11記載の方法。
  14. 【請求項14】 2つの命令セットアーキテクチャの第1のものによる実行
    のためにコード化された命令データは、第1のアーキテクチャに関係するデータ
    記憶規約に従い、2つの命令セットアーキテクチャの第2のものによる実行のた
    めにコード化された命令データは、第2のアーキテクチャと関係する第2の異な
    るデータ記憶規約に従い、単一のインジケータ要素はそれらの命令セットアーキ
    テクチャおよびデータ記憶規約の両方を指示しており、 プログラム実行が第1の命令セットアーキテクチャを使用する領域から第2の
    命令セットアーキテクチャを使用する領域に移行した時を認識することと、その
    認識に応答して、コンピュータのデータ記憶内容を第1の記憶規約から第2のも
    のに調整することをさらに含む請求項11記載の方法。
  15. 【請求項15】 制御フロー命令のあるものにおいては、分類は命令の演算
    コードによって静的に決定され、 制御フロー命令の他のものにおいては、分類は、レジスタの満/空の状態に基
    づき動的に決定される請求項13記載の方法。
  16. 【請求項16】 2つの異なる命令セットアーキテクチャのコンピュータの
    命令を代替的に実行するように構成されたプロセッサパイプラインと、第1およ
    び第2のアーキテクチャは各々、プロセッサコンテキストを定義する資源の関係
    するセットを有しており、第1のプロセッサコンテキストは第2のアーキテクチ
    ャにおいてアーキテクチャ的に不可視のコンピュータの資源を含むものであり、 パイプラインによる実行のためにコンピュータメモリから命令をフェッチし、
    かつ、命令がフェッチされるその単一アドレス空間の各メモリ領域と関係する記
    憶されたインジケータ要素をフェッチするように設計されたメモリユニットとを
    含み、各インジケータ要素は、関係する領域の命令データがそのもとでプロセッ
    サパイプラインによって実行されるアーキテクチャの指標を記憶するように設計
    されており、インジケータ要素は第2のアーキテクチャにおいてアーキテクチャ
    的に不可視のコンピュータの資源のうちの1つであり、 メモリユニットおよび/またはプロセッサパイプラインはさらに、そのインジ
    ケータ要素が1つのアーキテクチャまたは実行規約を指示する1領域から別のも
    のへの実行フローを認識するように設計されているコンピュータプロセッサ。
  17. 【請求項17】 インジケータ要素が、仮想メモリマネージャによって使用
    される一次アドレス変換テーブルとは別個のインジケータ要素のテーブルに記憶
    され、テーブルのインジケータ要素はメモリの対応するページと関係づけられる
    請求項16記載のコンピュータプロセッサ。
  18. 【請求項18】 コンピュータプロセッサにネイティブな命令セットアーキ
    テクチャである第1の命令セットアーキテクチャにおいて実行するプログラムの
    実行と、コンピュータの資源の縮小サブセットへのアクセスを可能にする、コン
    ピュータに非ネイティブな命令セットである第2の命令セットでコード化された
    オフザシェルフオペレーティングシステムの実行との間の遷移を管理するように
    プログラムされたソフトウェアをさらに含む請求項16記載のコンピュータプロ
    セッサ。
  19. 【請求項19】 各インジケータ要素はさらに、関係する領域の命令データ
    がプロセッサパイプラインによる実行のためにそのもとでコード化された呼び出
    し規約の指標を記憶するように設計されており、 第1の呼び出し規約のもとでの変更前プログラムコンテキストと論理的に等価
    な第2の呼び出し規約のもとでプログラムコンテキストを作成するために、コン
    ピュータプロセッサを用いてコンピュータのデータ記憶内容を変更するようにプ
    ログラムされたソフトウェアをさらに含み、 メモリユニットはさらに、プログラム実行が、そのインジケータ要素が第1の
    呼び出し規約を示す領域から、第2の呼び出し規約を示す領域に移行した時を認
    識し、認識に応答して、遷移管理ソフトウェアを呼び出すように設計されている
    請求項16記載のコンピュータプロセッサ。
  20. 【請求項20】 メモリユニットおよびソフトウェアが、第1の呼び出し規
    約を使用する第1の命令セットでコード化された領域における実行と、第2の呼
    び出し規約を使用する第2の命令セットでコード化された領域における実行との
    間で、転送のソースのコードが行先でのコードのために特殊にコード化されるこ
    となく実行遷移をもたらすために、命令境界間の遷移をもたらすように設計され
    ている請求項19記載のコンピュータプロセッサ。
  21. 【請求項21】 2つの呼び出し規約のうちの一方がレジスタベースの呼び
    出し規約であり、他方の呼び出し規約がメモリスタックベースの呼び出し規約で
    ある請求項19記載のコンピュータプロセッサ。
  22. 【請求項22】 第1および第2の命令セットアーキテクチャのサポートの
    ための論理資源は、資源が2つのアーキテクチャの呼び出し規約における類似の
    機能を提供する場合、2つのアーキテクチャの対応する資源を共通の物理資源に
    割り当てるマッピングに従ってコンピュータプロセッサの物理資源にオーバレイ
    される請求項19記載のコンピュータプロセッサ。
  23. 【請求項23】 第1の呼び出し規約から第2のものへデータ記憶内容を変
    更するための規則が、認識された実行転送の前に実行のロケーションと関係する
    デスクリプタを試験することによって決定される請求項19記載のコンピュータ
    プロセッサ。
  24. 【請求項24】 コンピュータのメモリの単一アドレス空間のページからフ
    ェッチされた命令を実行する工程と、ページは仮想メモリマネージャによって管
    理され、各ページの命令は第1および第2のアーキテクチャの、または第1およ
    び第2の規約に従う、コンピュータによる実行のためにそれぞれコード化されて
    おり、ページは関係する第1および第2のインジケータ要素を有しており、イン
    ジケータ要素は各々、関係するページからの命令がそのもとで実行されるアーキ
    テクチャまたはデータ記憶規約を指示する値を有するものであり、 命令データの実行が第1のアーキテクチャまたは規約のもとでのページから第
    2の規約のもとでのページへ流れた時に、その命令のページに対応するインジケ
    ータ要素によって指示される規約にもとづく実行にコンピュータを適応させる工
    程とを含む方法。
  25. 【請求項25】 インジケータ要素が、エントリが対応する物理ページフレ
    ームと関係づけられているテーブルに記憶される請求項24記載の方法。
  26. 【請求項26】 エントリが変換索引バッファのエントリである請求項25
    記載の方法。
  27. 【請求項27】 ページのインジケータ要素が、そのエントリが対応する物
    理ページフレームと関係づけられているテーブルに記憶され、変換索引バッファ
    においてキャッシュされる請求項24記載の方法。
  28. 【請求項28】 2つのアーキテクチャは2つの命令セットアーキテクチャ
    であり、 インジケータ要素に従った2つの命令セットアーキテクチャに従って命令を解
    釈するようにコンピュータの命令実行ハードウェアを制御することをさらに含む
    請求項24記載の方法。
  29. 【請求項29】 2つの命令セットアーキテクチャが対応する第1および第
    2のデータ記憶規約を有しており、 制御が第1の領域から第2のものに流れた時に、第1のデータ記憶規約のもと
    での変更前プログラムコンテキストと論理的に等価な第2のデータ記憶規約のも
    とでのプログラムコンテキストを作成するために、コンピュータのデータ記憶内
    容を変更することをさらに含む請求項28記載の方法。
  30. 【請求項30】 実行が第1の領域から第2の領域に流れた時に、ソフトウ
    ェア介入を要さずに命令の実行のモードが変更される請求項28記載の方法。
  31. 【請求項31】 実行が第1の領域から第2の領域に流れた時に、コンピュ
    ータの実行が例外を生じる請求項28記載の方法。
  32. 【請求項32】 領域のうちの1つは、第2の命令セットでバイナリコード
    化されたオフザシェルフオペレーティングシステムを記憶する請求項28記載の
    方法。
  33. 【請求項33】 2つの規約が第1および第2のデータ記憶規約であり、 そのインジケータ要素が第1のデータ記憶規約を指示する領域から、そのイン
    ジケータ要素が第2のデータ記憶規約を指示する領域にプログラム実行が移行し
    た時を認識することと、その認識に応答して、第1のデータ記憶規約のもとでの
    変更前プログラムコンテキストと論理的に等価な第2のデータ記憶規約のもとで
    のプログラムコンテキストを作成するために、コンピュータのデータ記憶内容を
    変更することをさらに含む請求項24記載の方法。
  34. 【請求項34】 2つのデータ記憶規約のうちの一方がレジスタベースの呼
    び出し規約であり、他方のデータ記憶規約がメモリスタックベースの呼び出し規
    約である請求項33記載の方法。
  35. 【請求項35】 命令データを第3のページに記憶し、第3のページの命令
    データは2つのアーキテクチャのうちの一方による実行のためにコード化されて
    おり、2つのアーキテクチャのうちの他方と関係するデータ記憶規約を順守する
    ことと、 各ページの命令によって順守されるデータ記憶規約を指示するインジケータ要
    素を記憶することと、 第1のデータ記憶規約を使用するページから第2のデータ記憶規約を使用する
    ページへのプログラム実行の各遷移を認識し、その認識に応答して、第1の記憶
    規約から第2のものにコンピュータのデータ記憶内容を調整することと、および
    逆の場合もそのようにすることをさらに含む請求項33記載の方法。
  36. 【請求項36】 2つの命令セットアーキテクチャの第1のものによる実行
    のためにコード化された命令データは、第1のアーキテクチャに関係するデータ
    記憶規約に従い、2つの命令セットアーキテクチャの第2のものによる実行のた
    めにコード化された命令データは、第2のアーキテクチャと関係する第2の異な
    るデータ記憶規約に従い、単一のインジケータ要素は関係するページの命令セッ
    トアーキテクチャおよびデータ記憶規約の両方を指示しており、 プログラム実行が第1の命令セットアーキテクチャを使用するページから第2
    の命令セットアーキテクチャを使用するページに移行した時を認識することと、
    その認識に応答して、コンピュータのデータ記憶内容を第1の記憶規約から第2
    の記憶規約に調整することをさらに含む請求項28記載の方法。
  37. 【請求項37】 2つの規約がレジスタベースの呼び出し規約およびメモリ
    スタックベースの呼び出し規約であり、 プログラム実行が、レジスタベースの呼び出し規約を使用するページからメモ
    リスタックベース規約を使用するページに移行した時を認識することと、その認
    識に応答して、コンピュータのデータ記憶内容を第1の呼び出し規約から第2の
    呼び出し規約に調整することとをさらに含む請求項33記載の方法。
  38. 【請求項38】 調整する工程は、 第3のロケーションから第4のロケーションにデータをコピーすることをさら
    に含み、第3のロケーションは、第1のデータ記憶規約のもとでの第3のロケー
    ションの用途および第2のデータ記憶規約のもとでの第4のロケーションと類似
    の第1のデータ記憶規約のもとでの用途を有しており、コピーのためのプログラ
    ムは、第1および第3のロケーションのうちのまさしく一方がもはやプログラム
    の実行に必要とされないと仮定するようにプログラムされており、第2のロケー
    ションにコピーされたデータのビット表現は第1のロケーションからコピーされ
    たデータのビット表現と異なっており、表現の変更はデータ記憶規約の変更にま
    たがりデータの意味を保存するように選択される請求項33記載の方法。
  39. 【請求項39】 第1のロケーションから第2のロケーションへデータをコ
    ピーするための規則は、認識された実行転送の前に実行のロケーションと関係す
    るデスクリプタを試験することによって決定される請求項33記載の方法。
  40. 【請求項40】 コンピュータ命令セットの制御フロー命令を複数のクラス
    に分類することと、 コンピュータでのプログラムの実行中に、命令セットの命令の実行の一部とし
    て、一番最近実行された分類された制御フロー命令のクラスの記録を更新するこ
    とをさらに含み、 変更プロセスは、少なくともある程度命令クラスの記録によって決定されるも
    のである請求項33記載の方法。
  41. 【請求項41】 マイクロプロセッサチップであって、 仮想メモリマネージャにより管理されるメモリから命令をフェッチするように
    構成され、第1および第2の異なるコンピュータアーキテクチャ用にコード化さ
    れているか、または第1および第2の異なるデータ記憶規約をインプリメントす
    るためにコード化された命令を実行するように構成されている命令ユニットを備
    え、 マイクロプロセッサチップは、(a)メモリの各ページと関係づけられて記憶
    されたインジケータ要素を検索し、各インジケータ要素はそのページの命令が実
    行されるアーキテクチャまたは規約を指示しており、(b)命令実行が第1のア
    ーキテクチャまたは規約のページから、それぞれの関係するインジケータ要素に
    よる指示に従って第2のもののページに流れた時を認識し、(c)第2のアーキ
    テクチャまたは規約のページと関係するインジケータ要素に従って命令の実行を
    行うように命令ユニットの処理モードまたはメモリの記憶内容を変更する、よう
    に設計されているマイクロプロセッサチップ。
  42. 【請求項42】 インジケータ要素が仮想アドレス変換テーブルエントリに
    記憶される請求項41記載のマイクロプロセッサチップ。
  43. 【請求項43】 インジケータ要素が、仮想メモリマネージャにより使用さ
    れる一次アドレス変換テーブルとは別個のテーブルに記憶され、テーブルのイン
    ジケータ要素はメモリの各ページと関係づけられて記憶される請求項41記載の
    マイクロプロセッサチップ。
  44. 【請求項44】 インジケータ要素がそれぞれの物理ページフレームと関係
    づけられて記憶される請求項41記載のマイクロプロセッサチップ。
  45. 【請求項45】 インジケータ要素がそれぞれの仮想ページと関係づけられ
    て記憶される請求項41記載のマイクロプロセッサチップ。
  46. 【請求項46】 インジケータ要素が変換索引バッファのエントリに記憶さ
    れる請求項41記載のマイクロプロセッサチップ。
  47. 【請求項47】 インジケータ要素が命令キャッシュに記憶される請求項4
    1記載のマイクロプロセッサチップ。
  48. 【請求項48】 実行が第1の領域から第2の領域に流れた時にソフトウェ
    ア介入を要さずに命令の実行のモードが変更される請求項41記載のマイクロプ
    ロセッサチップ。
  49. 【請求項49】 マイクロプロセッサチップは、実行が第1の領域から第2
    の領域に流れた時に例外を生じるように設計されており、 命令の実行のモードを明示的に制御することによって例外を処理するようにプ
    ログラムされた例外ハンドラソフトウェアをさらに含む請求項41記載のマイク
    ロプロセッサチップ。
  50. 【請求項50】 アーキテクチャまたは規約のインジケータ要素が、そのエ
    ントリが対応する物理ページフレームと関係づけられているテーブルに記憶され
    、変換索引バッファにキャッシュされる請求項41記載のマイクロプロセッサチ
    ップ。
  51. 【請求項51】 2つのアーキテクチャが2つの命令セットアーキテクチャ
    であり、マイクロプロセッサチップは、命令がフェッチされるページに対応する
    インジケータ要素に従った2つの命令セットアーキテクチャに従って命令を解釈
    するように命令ユニットを制御する請求項41記載のマイクロプロセッサチップ
  52. 【請求項52】 コンピュータプロセッサにネイティブな命令セットアーキ
    テクチャである第1の命令セットアーキテクチャにおいて実行するプログラムの
    実行と、コンピュータの資源の縮小サブセットへのアクセスを可能にする、コン
    ピュータに非ネイティブな命令セットである第2の命令セットでコード化された
    オフザシェルフオペレーティングシステムの実行との間の遷移を管理するように
    プログラムされたソフトウェアをさらに含む請求項51記載のマイクロプロセッ
    サチップ。
  53. 【請求項53】 各インジケータ要素はさらに、関係するページの命令デー
    タが命令ユニットによる実行のためにそのもとでコード化されているデータ記憶
    規約の指標を記憶するように設計されており、 第1のデータ記憶規約のもとでの変更前プログラムコンテキストと論理的に等
    価な第2のデータ記憶規約のもとでプログラムコンテキストを作成するために、
    マイクロプロセッサチップを用いてコンピュータのデータ記憶内容を変更するよ
    うにプログラムされたソフトウェアをさらに含み、 マイクロプロセッサチップはさらに、プログラム実行が、そのインジケータ要
    素が第1のデータ記憶規約を指示する領域から、そのインジケータ要素が第2の
    データ記憶規約を指示する領域に移行した時を認識し、その認識に応答して、遷
    移管理ソフトウェアを呼び出すように設計されている請求項51記載のマイクロ
    プロセッサチップ。
  54. 【請求項54】 第3のページから命令データを検索し、第3のページの命
    令データは2つのアーキテクチャのうちの第1のものによる実行のためにコード
    化されており、2つのアーキテクチャの第2のもののデータ記憶規約を順守して
    おり、 各ページの命令によって順守されるデータ記憶規約を指示するインジケータ要
    素を検索し、 第1のデータ記憶規約を使用するページから第2のデータ記憶規約を使用する
    ページへのプログラム実行の各遷移を認識し、その認識に応答して、第1のデー
    タ記憶規約から第2のものにコンピュータのデータ記憶内容を調整し、かつ逆の
    場合もそのようにするようにさらに設計されている請求項53記載のマイクロプ
    ロセッサチップ。
  55. 【請求項55】 ページの命令セットアーキテクチャおよび呼び出し規約の
    両方を指示するために単一のインジケータ要素を認識するようにさらに設計され
    ている請求項53記載のマイクロプロセッサチップ。
  56. 【請求項56】 (a)メモリの各ページと関係づけられて記憶された呼び
    出し規約インジケータ要素を検索し、各呼び出し規約インジケータ要素はレジス
    タベースの呼び出し規約またはメモリスタックベースの呼び出し規約のうちのど
    ちらがそのページの命令によって順守されているかを指示しており、 (b)命令実行がメモリスタックベースの規約のページからレジスタベースの
    呼び出し規約のページに流れた時を、各ページに関係する呼び出し規約インジケ
    ータ要素により指示された通りに認識し、 (c)認識に応答して、メモリスタックベース規約のもとでの変更前プログラ
    ムコンテキストと論理的に等価なレジスタベース規約のもとでプログラムコンテ
    キストを作成するために、コンピュータの記憶内容を変更する、 ように設計されているハードウェアおよび/またはソフトウェアをさらに含む請
    求項51記載のマイクロプロセッサチップ。
  57. 【請求項57】 2つの規約が第1および第2のデータ記憶規約であり、 第1のデータ記憶規約のもとでの変更前プログラムコンテキストと論理的に等
    価な第2のデータ記憶規約のもとでプログラムコンテキストを作成するために、
    マイクロプロセッサチップを用いてコンピュータのデータ記憶内容を変更するよ
    うにプログラムされたソフトウェアをさらに含み、 マイクロプロセッサチップは、プログラム実行が、そのインジケータ要素が第
    1のデータ記憶規約を示す領域からインジケータ要素が第2のデータ記憶規約を
    指示する領域に移行した時を認識し、認識に応答して、遷移管理ソフトウェアを
    呼び出すようにさらに設計されている請求項41記載のマイクロプロセッサチッ
    プ。
  58. 【請求項58】 マイクロプロセッサチップおよびソフトウェアが、第1の
    呼び出し規約を使用する第1の命令セットでコード化されたページにおける実行
    と、第2の呼び出し規約を使用する第2の命令セットでコード化されたページに
    おける実行との間で、命令境界間の遷移をもたらすように設計されており、ソフ
    トウェアは転送のソースのコードが行先でのコードとインタフェースするために
    特殊にコード化されることなく実行遷移をもたらすようにプログラムされている
    請求項57記載のマイクロプロセッサチップ。
  59. 【請求項59】 2つの規約が2つの呼び出し規約である請求項57記載の
    マイクロプロセッサチップ。
  60. 【請求項60】 2つの呼び出し規約のうちの一方がレジスタベースの呼び
    出し規約であり、他方の呼び出し規約はメモリスタックベースの呼び出し規約で
    ある請求項59記載のマイクロプロセッサチップ。
  61. 【請求項61】 資源が2つの呼び出し規約における類似の機能をサービス
    する際に、対応する論理資源を共通の物理資源に割り当てるマッピングに従って
    、マイクロプロセッサチップの物理資源が第1および第2の呼び出し規約の論理
    資源に関係づけられる請求項59記載のマイクロプロセッサチップ。
  62. 【請求項62】 データのビット表現を第1の呼び出し規約のもとでの第1
    の表現から第2の呼び出し規約のもとでの第2の表現に変更することによって、
    第1の呼び出し規約のもとでコード化されたコードおよび第2の呼び出し規約の
    もとでコード化されたコードの実行の間での遷移をもたらすように設計されたソ
    フトウェアおよび/またはハードウェアをさらに含み、表現の変更は呼び出し規
    約の変更にまたがりデータの意味を保存するように選択される請求項59記載の
    マイクロプロセッサチップ。
  63. 【請求項63】 第1のロケーションから第2のロケーションにデータをコ
    ピーするように設計されたソフトウェアおよび/またはハードウェアをさらに含
    み、第1のロケーションは第2の呼び出し規約のもとでの第2のロケーションの
    用途に類似の第1の呼び出し規約のもとでの用途を有する請求項59記載のマイ
    クロプロセッサチップ。
  64. 【請求項64】 第3のロケーションから第4のロケーションにデータをコ
    ピーするように設計されたソフトウェアおよび/またはハードウェアをさらに含
    み、第3のロケーションは、第1のデータ記憶規約のもとでの第3のロケーショ
    ンの用途および第2のデータ記憶規約のもとでの第4のロケーションと類似の第
    1のデータ記憶規約のもとでの用途を有しており、コピーのためのソフトウェア
    および/またはハードウェアは、第1および第3のロケーションのうちのまさし
    く一方がもはやプログラムの実行に必要とされないと仮定するようにプログラム
    されている請求項59記載のマイクロプロセッサチップ。
  65. 【請求項65】 (a)メモリの各ページと関係づけられて記憶された呼び
    出し規約インジケータ要素を検索し、各呼び出し規約インジケータ要素はレジス
    タベースの呼び出し規約またはメモリスタックベースの呼び出し規約のうちのど
    ちらがそのページの命令によって順守されているかを指示しており、 (b)命令実行がレジスタベースの呼び出し規約を使用するページからメモリ
    スタックベースの規約を使用するページに流れた時を、各ページに関係する呼び
    出し規約インジケータ要素により指示された通りに認識し、 (c)認識に応答して、レジスタベース規約のもとでの変更前プログラムコン
    テキストと論理的に等価なメモリスタックベース規約のもとでプログラムコンテ
    キストを作成するために、コンピュータの記憶内容を変更する、 ように設計されているハードウェアおよび/またはソフトウェアをさらに含む請
    求項41記載のマイクロプロセッサチップ。
  66. 【請求項66】 マイクロプロセッサの命令セットの制御フロー命令が複数
    のクラスに分類され、 フェッチおよび実行ユニットは、一番最近実行された分類された制御フロー命
    令のクラスの記録を更新し、 記憶変更プロセスは、少なくともある程度その命令クラスの記録によって決定
    される請求項41記載のマイクロプロセッサチップ。
  67. 【請求項67】 コンピュータの既存のスレッドスケジューラによって制御
    の並行スレッドをスケジューリングすることと、各スレッドは関係するコンテキ
    ストを有しており、スレッドと、関係するコンテキストのコンピュータ資源の集
    合との間の関係づけはスレッドスケジューラによって維持され、 スレッドスケジューラを修正することなく、スレッドのうちの1つとそのスレ
    ッドの拡張コンテキストとの間の関係づけを、スレッドスケジューラによって誘
    起されるコンテキストの変更によって維持することを含み、 拡張コンテキストは、スレッドとの関係づけがスレッドスケジューラによって
    維持されるそうした資源以上にスレッドと関係づけられたコンピュータの資源を
    含むものである方法。
  68. 【請求項68】 スレッドスケジューラがコンピュータのオペレーティング
    システムの構成要素であり、 指定のエントリポイントでのオペレーティングシステムへの各エントリまたは
    指定の条件において生じるエントリ例外を確立することと、 指定のエントリの後にオペレーティングシステムからの再開時に生じる再開例
    外を確立することと、 コンピュータの中断したプロセスからオペレーティングシステムへの指定のエ
    ントリを検出すると、エントリ例外を生じさせ、エントリ例外へのサービスの一
    部として関係づけを確立することと、 再開例外を生じさせ、再開例外へのサービスの一部として、中断したプロセス
    に制御を返す再開スレッドと関係づけてコンテキストを再確立することをさらに
    含む請求項67記載の方法。
  69. 【請求項69】 エントリ例外のための例外ハンドラが、中断したプロセス
    のコンテキストを保存し、修正されたコンテキストをオペレーティングシステム
    に引き渡す前にスレッドコンテキストを修正するようにプログラムされており、 再開例外のための例外ハンドラが、エントリ例外ハンドラの対応する実行によ
    り保存されたコンテキストを復元するようにプログラムされている請求項68記
    載の方法。
  70. 【請求項70】 オペレーティングシステムがコンピュータにネイティブな
    アーキテクチャ以外のコンピュータアーキテクチャのためのオペレーティングシ
    ステムである請求項69記載の方法。
  71. 【請求項71】 コンピュータがコンピュータにネイティブなオペレーティ
    ングシステムを付加的に実行し、各例外が2つのオペレーティングシステムのう
    ちの一方によるハンドリングのために分類される請求項70記載の方法。
  72. 【請求項72】 オペレーティングシステムおよび中断したスレッドがコン
    ピュータの異なる命令セットアーキテクチャにおいて実行する請求項70記載の
    方法。
  73. 【請求項73】 オペレーティングシステムがコンピュータのアーキテクチ
    ャに非ネイティブなコンピュータアーキテクチャのためのバイナリコードによる
    ものであり、コンピュータがコンピュータにネイティブなオペレーティングシス
    テムを付加的に実行し、各例外が2つのオペレーティングシステムのうちの一方
    によるハンドリングのために分類される請求項68記載の方法。
  74. 【請求項74】 オペレーティングシステムおよび中断されたスレッドが、
    コンピュータの異なる命令セットアーキテクチャにおいて実行する請求項73記
    載の方法。
  75. 【請求項75】 非ネイティブオペレーティングシステムによってスレッド
    と関係づけられて維持されるコンテキストの資源が、非ネイティブコンピュータ
    アーキテクチャのデータレジスタを含み、方法はさらに、 エントリ例外ハンドラにおいて、プロセスを非ネイティブオペレーティングシ
    ステムに引き渡す前に非ネイティブオペレーティングシステムにより維持される
    プロセスコンテキストの一部のデータレジスタの少なくとも半分を修正すること
    を含み、修正されたレジスタのうちの少なくともいくつかは再開例外ハンドラに
    おけるコンテキストの内容の妥当性の検査を可能にするためにデータを冗長的に
    書き込まれるものである請求項73記載の方法。
  76. 【請求項76】 スレッドスケジューラおよびスレッドがコンピュータの異
    なる実行モードで実行し、スレッドとコンテキストとの間の関係づけを維持する
    工程が、スレッド実行モードとスレッドスケジューラ実行モードとの間での遷移
    時に明示的なソフトウェア要求を伴わず、自動的に呼び出される請求項68記載
    の方法。
  77. 【請求項77】 スレッド実行モードおよびスレッドスケジューラ実行モー
    ドがコンピュータの2つの異なる命令セットアーキテクチャである請求項76記
    載の方法。
  78. 【請求項78】 エントリ例外へのサービス中に、コンピュータのコンテキ
    ストの一部を保存し、中断したスレッドおよびその対応するコンテキストをオペ
    レーティングシステムに引き渡す前に、中断したスレッドのコンテキストを変更
    することをさらに含む請求項68記載の方法。
  79. 【請求項79】 関係づけを維持するために使用される情報を包含するよう
    にスレッドの再開のためのリンケージリターンアドレスを修正する工程をさらに
    含む請求項68記載の方法。
  80. 【請求項80】 修正がリンケージリターンアドレスのビットの少なくとも
    半分を元のままにしておく請求項79記載の方法。
  81. 【請求項81】 スレッドスケジューラがコンピュータにネイティブなアー
    キテクチャ以外のコンピュータアーキテクチャのためのオペレーティングシステ
    ムである請求項67記載の方法。
  82. 【請求項82】 コンピュータがコンピュータにネイティブなオペレーティ
    ングシステムを付加的に実行し、各例外が2つのオペレーティングシステムのう
    ちの一方によるハンドリングのために分類される請求項81記載の方法。
  83. 【請求項83】 オペレーティングシステムおよび中断したスレッドがコン
    ピュータの異なる命令セットアーキテクチャにおいて実行する請求項81記載の
    方法。
  84. 【請求項84】 スレッドスケジューラおよびスレッドがコンピュータの異
    なる実行モードで実行し、スレッドとコンテキストとの間の関係づけを維持する
    工程が、スレッド実行モードとスレッドスケジューラ実行モードとの間での遷移
    時に明示的なソフトウェア要求を伴わず、自動的に呼び出される請求項67記載
    の方法。
  85. 【請求項85】 スレッド実行モードおよびスレッドスケジューラ実行モー
    ドがコンピュータの2つの異なる命令セットアーキテクチャである請求項84記
    載の方法。
  86. 【請求項86】 スレッドスケジューラ実行モードのデータ記憶規約に適合
    するためにオペランドを1形式から別のものに変換するために遷移時に呼び出さ
    れる例外ハンドラによって取られるアクションを指定する値にレジスタを設定す
    る工程をさらに含む請求項84記載の方法。
  87. 【請求項87】 コンピュータの割込みハンドラにおいて、コンピュータの
    コンテキストの一部を保存し、中断したスレッドおよびその対応するコンテキス
    トをスレッドスケジューラに引き渡す前に、中断したスレッドのコンテキストを
    変更することをさらに含む請求項67記載の方法。
  88. 【請求項88】 スレッドコンテキストのオペレーティングシステムにより
    維持される資源が非ネイティブコンピュータアーキテクチャのデータレジスタを
    含み、方法がさらに、 スレッドを非ネイティブオペレーティングシステムに引き渡す前にオペレーテ
    ィングシステムにより維持されるスレッドコンテキストの一部のデータレジスタ
    の少なくとも半分を修正することとを含む請求項81記載の方法。
  89. 【請求項89】 修正されたレジスタのうちの少なくともいくつかがタイム
    スタンプにより上書きされる請求項88記載の方法。
  90. 【請求項90】 修正されたレジスタのうちの少なくともいくつかが、修正
    の前に、修正されるスレッドコンテキストの少なくとも一部が保存される記憶場
    所を指示する情報により上書きされる請求項88記載の方法。
  91. 【請求項91】 関係づけを維持するために使用される情報を含むようにス
    レッドのリンケージリターンアドレスを修正する工程をさらに含む請求項67記
    載の方法。
  92. 【請求項92】 修正がリンケージリターンアドレスのビットの少なくとも
    半分を元のままにしておく請求項91記載の方法。
  93. 【請求項93】 スレッドに割り込む前に、スレッドがチェックポイントに
    到達可能にするために十分な時間だけ、割込みの引き渡しを延期する工程か、ま
    たは、チェックポイントまでスレッドの実行をロールバックする工程のいずれか
    一方をさらに含み、チェックポイントは、スレッドとのその資源関係づけがスレ
    ッドスケジューラによって維持されるようなもの以上のスレッドの資源である拡
    張コンテキストの量が縮小される、スレッドの実行におけるポイントである請求
    項67記載の方法。
  94. 【請求項94】 指定のエントリポイントでのコンピュータオペレーティン
    グシステムへの各エントリまたは指定の条件において生じるエントリ例外を確立
    することと、 指定のエントリの1つに補完的なオペレーティングシステムからの再開時に生
    じる再開例外を確立することと、 コンピュータの中断したプロセスからオペレーティングシステムへの指定のエ
    ントリを検出すると、エントリ例外を生じさせ、サービスした後、本来のオペレ
    ーティングシステムエントリに関係するサービスを実行するためにオペレーティ
    ングシステムに入ることと、 補完的な再開を検出すると、再開例外を生じさせ、サービスした後、中断した
    プロセスに制御を返すことを含む方法。
  95. 【請求項95】 エントリ例外のための例外ハンドラが、中断したプロセス
    のコンテキストを保存し、修正されたコンテキストをオペレーティングシステム
    に引き渡す前にスレッドコンテキストを修正するようにプログラムされており、 再開例外のための例外ハンドラが、エントリ例外ハンドラの対応する実行によ
    り保存されたコンテキストを復元するようにプログラムされている請求項94記
    載の方法。
  96. 【請求項96】 オペレーティングシステムがコンピュータにネイティブな
    アーキテクチャ以外のコンピュータアーキテクチャのためのオペレーティングシ
    ステムである請求項95記載の方法。
  97. 【請求項97】 オペレーティングシステムおよび中断したスレッドがコン
    ピュータの異なる命令セットアーキテクチャにおいて実行する請求項96記載の
    方法。
  98. 【請求項98】 オペレーティングシステムによりスレッドと関係づけられ
    て維持されるコンテキストの資源が、非ネイティブコンピュータアーキテクチャ
    のデータレジスタを含み、方法はさらに、 エントリ例外ハンドラにおいて、プロセスを非ネイティブオペレーティングシ
    ステムに引き渡す前にオペレーティングシステムにより維持されるプロセスコン
    テキストの一部のデータレジスタの少なくとも半分を修正することを含み、修正
    されたレジスタのうちの少なくともいくつかは再開例外ハンドラにおけるコンテ
    キストの内容の妥当性の検査を可能にするためにデータを冗長的に書き込まれる
    ものである請求項96記載の方法。
  99. 【請求項99】 オペレーティングシステムおよびプロセスがコンピュータ
    の2つの異なる実行モードで実行し、プロセスとコンテキストとの間の関係づけ
    を維持する工程の少なくともいくつかが、命令セットアーキテクチャ間での遷移
    時に明示的なソフトウェア要求を伴わず、自動的に呼び出される請求項95記載
    の方法。
  100. 【請求項100】 コンテキストを復元するために使用される情報を含むよ
    うにプロセスのリンケージリターンアドレスを修正する工程をさらに含む請求項
    95記載の方法。
  101. 【請求項101】 オペレーティングシステムが、そのコンピュータでの実
    行のために修正されない、コンピュータにネイティブなアーキテクチャ以外のコ
    ンピュータアーキテクチャのためのオペレーティングシステムである請求項94
    記載の方法。
  102. 【請求項102】 コンピュータがコンピュータにネイティブなオペレーテ
    ィングシステムを付加的に実行し、各例外が2つのオペレーティングシステムの
    うちの一方によるハンドリングのために分類される請求項101記載の方法。
  103. 【請求項103】 オペレーティングシステムおよび中断したスレッドがコ
    ンピュータの異なる命令セットアーキテクチャにおいて実行する請求項101記
    載の方法。
  104. 【請求項104】 オペレーティングシステムおよびプロセスがコンピュー
    タの異なる実行モードで実行し、プロセスとコンテキストとの間の関係づけを維
    持する工程が、プロセス実行モードとオペレーティングシステム実行モードとの
    間での遷移時に明示的なソフトウェア要求を伴わず、自動的に呼び出される請求
    項94の方法。
  105. 【請求項105】 プロセス実行モードおよびオペレーティングシステム実
    行モードがコンピュータの2つの異なる命令セットアーキテクチャである請求項
    104記載の方法。
  106. 【請求項106】 エントリ除外のためのサービスルーチンが、プロセスを
    非ネイティブオペレーティングシステムに引き渡す前にオペレーティングシステ
    ムによってプロセスと関係づけられて維持されるプロセスコンテキストの一部の
    データレジスタの少なくとも半分を修正する請求項94記載の方法。
  107. 【請求項107】 修正されたレジスタのうちの少なくともいくつかが、修
    正の前に、そのプロセスとの資源関係づけがオペレーティングシステムによって
    維持されるようなもの以上の資源である少なくとも拡張コンテキストが保存され
    る記憶場所を指示する情報により上書きされる請求項106記載の方法。
  108. 【請求項108】 修正されたレジスタのうちの少なくともいくつかがコン
    テキストの内容の妥当性検査を可能にする値で上書きされる請求項107記載の
    方法。
  109. 【請求項109】 修正されたレジスタのうちの少なくともいくつかがコン
    テキストの内容の妥当性検査を可能にする値で上書きされる請求項106記載の
    方法。
  110. 【請求項110】 修正されたレジスタのうちの少なくともいくつかがタイ
    ムスタンプで上書きされる請求項106記載の方法。
  111. 【請求項111】 関係づけを維持するために使用される情報を含むように
    プロセスのリンケージリターンアドレスを修正する工程をさらに含む請求項94
    記載の方法。
  112. 【請求項112】 修正がリンケージリターンアドレスのビットの少なくと
    も半分を元のままにしておく請求項111記載の方法。
  113. 【請求項113】 エントリ例外へのサービスの一部として、中断したプロ
    セスのリンケージリターンアドレスを修正することをさらに含み、リターンアド
    レスは、オペレーティングシステムからの復帰時にリターンアドレスからの命令
    を実行する試みが再開例外を生じるように意図的に選択される請求項94記載の
    方法。
  114. 【請求項114】 リンケージリターンアドレスが、ページから命令を実行
    する試みに際して選択された例外を生じるメモリ属性を有するメモリページをポ
    イントするように選択される請求項113記載の方法。
  115. 【請求項115】 プロセスとのその資源関係づけがオペレーティングシス
    テムによって維持されるようなもの以上のプロセスコンテキストの資源である拡
    張コンテキストの量が縮小される、プロセスの実行におけるチェックポイントま
    でプロセスの実行をロールバックする工程をさらに含む請求項94記載の方法。
  116. 【請求項116】 プロセスに割り込む前に、プロセスとのその資源関係づ
    けがオペレーティングシステムによって維持されるようなもの以上のプロセスコ
    ンテキストの資源である拡張コンテキストの量が縮小される、プロセスの実行に
    おけるチェックポイントにプロセスが到達できるようにするために十分な時間だ
    け、割込みの引き渡しを延期する工程をさらに含む請求項94記載の方法。
  117. 【請求項117】 コンピュータの既存のオペレーティングシステムを修正
    することなく、オペレーティングシステムへの指定のエントリまたは指定のエン
    トリ条件における実行のためにエントリハンドラを確立することと、エントリハ
    ンドラは、修正されたコンテキストをオペレーティングシステムに引き渡す前に
    中断したスレッドのコンテキストを保存しスレッドコンテキストを修正するよう
    にプログラムされており、 オペレーティングシステムを修正することなく、エントリハンドラによるエン
    トリの後にオペレーティングシステムからの再開時に実行のための出口ハンドラ
    を確立することとを含み、出口ハンドラは、エントリハンドラの対応する実行に
    よって保存されたコンテキストを復元するようにプログラムされている方法。
  118. 【請求項118】 オペレーティングシステムによって制御の並行スレッド
    をスケジューリングすることをさらに含み、各スレッドは関係するコンテキスト
    を有しており、スレッドと、関係するコンテキストのコンピュータ資源の集合と
    の間の関係づけはオペレーティングシステムによって維持され、 エントリおよび出口ハンドラは、スレッドのうちの1つとそのスレッドの拡張
    コンテキストとの間の関係づけを、オペレーティングシステムによって誘起され
    るコンテキストの変更によって維持するようにプログラムされており、拡張コン
    テキストは、スレッドとの関係づけがオペレーティングシステムによって維持さ
    れるそうした資源以上にスレッドと関係づけられたコンピュータの資源を含むも
    のである請求項117記載の方法。
  119. 【請求項119】 オペレーティングシステムがコンピュータにネイティブ
    なアーキテクチャ以外のコンピュータアーキテクチャのためのオペレーティング
    システムである請求項118記載の方法。
  120. 【請求項120】 オペレーティングシステムおよびスレッドがコンピュー
    タの異なる実行モードで実行し、スレッドとコンテキストとの間の関係づけを維
    持する工程が、スレッド実行モードとオペレーティングシステム実行モードとの
    間での遷移時に明示的なソフトウェア要求を伴わず、自動的に呼び出される請求
    項118記載の方法。
  121. 【請求項121】 エントリハンドラにおいて、中断したスレッドおよびそ
    の対応するコンテキストをオペレーティングシステムに引き渡す前に、コンピュ
    ータのコンテキストの一部を保存し、中断したスレッドのコンテキストを変更す
    ることをさらに含む請求項118記載の方法。
  122. 【請求項122】 エントリハンドラが、スレッドをオペレーティングシス
    テムに引き渡す前にオペレーティングシステムによりスレッドと関係づけられて
    維持されるスレッドコンテキストの一部のデータレジスタの少なくとも半分を変
    更する請求項118記載の方法。
  123. 【請求項123】 関係づけを維持するために使用される情報を含むように
    スレッドのリンケージリターンアドレスを修正する工程をさらに含む請求項11
    8記載の方法。
  124. 【請求項124】 オペレーティングシステムがコンピュータにネイティブ
    なアーキテクチャ以外のコンピュータアーキテクチャのためのオペレーティング
    システムである請求項117記載の方法。
  125. 【請求項125】 コンピュータがコンピュータにネイティブなオペレーテ
    ィングシステムを付加的に実行し、各割込みまたは例外が2つのオペレーティン
    グシステムのうちの一方によるハンドリングのために分類される請求項124記
    載の方法。
  126. 【請求項126】 オペレーティングシステムおよび中断したスレッドがコ
    ンピュータの異なる命令セットアーキテクチャにおいて実行する請求項124記
    載の方法。
  127. 【請求項127】 オペレーティングシステムおよびスレッドがコンピュー
    タの異なる実行モードで実行し、スレッドとコンテキストとの間の関係づけを維
    持する工程が、スレッド実行モードとオペレーティングシステム実行モードとの
    間での遷移時に明示的なソフトウェア要求を伴わず、自動的に呼び出される請求
    項117方法。
  128. 【請求項128】 スレッド実行モードおよびオペレーティングシステム実
    行モードがコンピュータの2つの異なる命令セットアーキテクチャである請求項
    127記載の方法。
  129. 【請求項129】 オペレーティングシステムがコンテキストおよび対応す
    る実行のスレッドとの間の関係づけを維持し、各当該コンテキストはデータレジ
    スタの値を含み、方法はさらに、 スレッドをオペレーティングシステムに引き渡す前にオペレーティングシステ
    ムにより維持されるスレッドコンテキストの一部のデータレジスタの少なくとも
    半分を修正することを含む請求項117記載の方法。
  130. 【請求項130】 修正されたレジスタのうちの少なくともいくつかが、修
    正の前に、修正されるスレッドコンテキストの少なくとも一部が保存される記憶
    場所を指示する情報により上書きされる請求項129記載の方法。
  131. 【請求項131】 修正されたレジスタのうちの少なくともいくつかがコン
    テキストの内容の妥当性検査を可能にする値で上書きされる請求項129記載の
    方法。
  132. 【請求項132】 スレッドのコンテキストを復元するために使用される情
    報を含むようにスレッドのリンケージリターンアドレスを修正する工程をさらに
    含む請求項117記載の方法。
  133. 【請求項133】 リンケージレジスタは、実行がエントリハンドラに到達
    する実行パス、またはその条件を指示する情報により修正される請求項132記
    載の方法。
  134. 【請求項134】 修正がリンケージリターンアドレスのビットの少なくと
    も半分を元のままにしておく請求項132記載の方法。
  135. 【請求項135】 リンケージレジスタが、修正の前に、修正されるスレッ
    ドコンテキストの少なくとも一部が保存される記憶場所を指示する情報により修
    正される請求項132記載の方法。
  136. 【請求項136】 オペレーティングシステム実行モードのデータ記憶規約
    に適合するためにオペランドを1形式から別のものに変換するために遷移時に呼
    び出されるエントリハンドラまたは出口ハンドラによって取られるアクションを
    指定する値にレジスタを設定する工程をさらに含む請求項117記載の方法。
  137. 【請求項137】 スレッドに割り込む前に、スレッドとのその資源関係づ
    けがオペレーティングシステムによって維持されるようなもの以上のスレッドコ
    ンテキストの資源である拡張コンテキストの量が縮小される、スレッドの実行に
    おけるチェックポイントにスレッドが到達できるようにするために十分な時間だ
    け、割込みの引き渡しを延期する工程をさらに含む請求項117記載の方法。
  138. 【請求項138】 スレッドとのその資源関係づけがオペレーティングシス
    テムによって維持されるようなもの以上のスレッドコンテキストの資源である拡
    張コンテキストの量が縮小される、スレッドの実行におけるチェックポイントま
    でスレッドの実行をロールバックする工程をさらに含む請求項117記載の方法
  139. 【請求項139】 スレッドとのその資源関係づけがオペレーティングシス
    テムによって維持されるようなもの以上の資源である少なくとも拡張コンテキス
    トを記憶場所に記憶する工程をさらに含み、記憶場所のプールは、コンテキスト
    が保存され得る空の記憶場所がその待ち行列の先頭から割り当てられ、再使用の
    ために最近空になった記憶場所は待ち行列の先頭にエンキューされ、保存された
    満杯の記憶場所は待ち行列の末尾で列を作る、キューイング規則によって管理さ
    れるものである請求項117記載の方法。
  140. 【請求項140】 コンピュータのサービスルーチンの呼び出しにおいて、
    リンケージリターンアドレスをそのサービスの完了時に実行を再開するためにサ
    ービスルーチンに渡すことと、リンケージリターンアドレスは、サービスルーチ
    ンからの復帰時におけるリンケージリターンアドレスからの命令を実行する試み
    がプログラム実行例外を生じるように意図的に選択されるものであり、 サービスルーチンからの復帰時に、リンケージリターンアドレスで命令を実行
    することを試み、選択された例外を生じることと、 例外にサービスした後、制御をサービスルーチンの呼び出し側に返すこととを
    含む方法。
  141. 【請求項141】 エントリハンドラにおいて、中断したスレッドおよびそ
    の対応するコンテキストをオペレーティングシステムに引き渡す前に、コンピュ
    ータのコンテキストの一部を保存し、中断したスレッドのコンテキストを変更す
    ることをさらに含む請求項67、68、69、94、95、117、118また
    は140のうちのいずれかに記載の方法。
  142. 【請求項142】 エントリハンドラが、スレッドをオペレーティングシス
    テムに引き渡す前にオペレーティングシステムによりスレッドと関係づけられて
    維持されるスレッドコンテキストの一部のデータレジスタの少なくとも半分を変
    更する請求項141記載の方法。
  143. 【請求項143】 スレッドスケジューラまたはオペレーティングシステム
    がコンピュータにネイティブなアーキテクチャ以外のコンピュータアーキテクチ
    ャのためのオペレーティングシステムである請求項67、68、69、94、9
    5、117、118または140のうちのいずれかに記載の方法。
  144. 【請求項144】 コンピュータがコンピュータにネイティブなオペレーテ
    ィングシステムを付加的に実行し、扱えのために各例外が2つのオペレーティン
    グシステムのうちの一方によるハンドリングのために分類される請求項143記
    載の方法。
  145. 【請求項145】 オペレーティングシステムおよび中断したスレッドがコ
    ンピュータの異なる命令セットアーキテクチャにおいて実行する請求項143記
    載の方法。
  146. 【請求項146】 オペレーティングシステムがコンテキストと対応する実
    行のスレッドとの間の関係づけを維持し、各当該コンテキストはデータレジスタ
    の値を含み、方法はさらに、 スレッドをオペレーティングシステムに引き渡す前にオペレーティングシステ
    ムにより維持されるスレッドコンテキストの一部のデータレジスタの少なくとも
    半分を修正することを含む請求項67、68、69、94、95、117、11
    8または140のうちのいずれかに記載の方法。
  147. 【請求項147】 修正されたレジスタのうちの少なくともいくつかが、修
    正の前に、修正されるスレッドコンテキストの少なくとも一部が保存される記憶
    場所を指示する情報により上書きされる請求項146記載の方法。
  148. 【請求項148】 修正されたレジスタのうちの少なくともいくつかが、コ
    ンテキストの内容の妥当性検査を可能にする値により上書きされる請求項146
    記載の方法。
  149. 【請求項149】 修正されたレジスタのうちの少なくともいくつかがタイ
    ムスタンプにより上書きされる請求項146記載の方法。
  150. 【請求項150】 スレッドのコンテキストを復元するために使用される情
    報を含むようにスレッドのリンケージリターンアドレスを修正する工程をさらに
    含む、請求項67、68、69、94、95、117、118または140のう
    ちのいずれかに記載の方法。
  151. 【請求項151】 リンケージレジスタは、実行がエントリハンドラに到達
    する実行パス、またはその条件を指示する情報により修正される請求項150記
    載の方法。
  152. 【請求項152】 渡されたリンケージリターンアドレスが、ページから命
    令を実行しようとする試みに際し選択された例外を生じるメモリ属性を有するメ
    モリページをポイントするように選択される請求項140記載の方法。
  153. 【請求項153】 サービスルーチンは、コンピュータにネイティブなアー
    キテクチャ以外のコンピュータアーキテクチャのためのオペレーティングシステ
    ムの割込みサービスルーチンであり、 サービスルーチンは非同期割込みによって呼び出され、 呼び出し側はアーキテクチャにネイティブな命令セットでコード化されている
    請求項140記載の方法。
  154. 【請求項154】 マルチプロセッサコンピュータの第1のCPUにおいて
    、プログラムを実行し、プログラムの実行を記述するプロファイルデータを収集
    する工程と、 マルチプロセッサの第2のCPUにおいて、プログラムのプロファイリングが
    継続する間、収集されたプロファイルデータを分析する工程と、 収集されたプロファイルデータの分析に少なくとも部分的に基づき第1のCP
    Uにおけるプログラムの実行を制御する工程とを含む方法。
  155. 【請求項155】 コンピュータにおいて命令を実行する工程と、コンピュ
    ータの命令パイプライン回路は命令のうちの少なくともいくつかを処理するため
    の第1および第2のモードを有しており、 第1の実行モードが成功している間の連続する2モード命令について第1のモ
    ードで2モード命令の実行を試行する工程と、 第1のモードのもとで2モード命令の不首尾の実行が検出された場合、後続す
    る2モード命令を第2のモードで実行する工程とを含む方法。
  156. 【請求項156】 少なくともいくつかの命令を処理するための第1および
    第2のモードを有する命令パイプライン回路においてコンピュータ命令を実行す
    る工程と、 タイマの満了時に、命令パイプライン回路を第1のモードから第2のものに切
    り替える工程とを含み、モードスイッチは、タイマの満了の直前に実行中であっ
    たプログラムに代わり以後実行される命令について持続するものである方法。
  157. 【請求項157】 コンピュータの事象を事象クラスに割り当てる工程と、 コンピュータ命令パイプラインの基本実行サイクルの一部として、ソフトウェ
    ア介入を伴わず、クラスの事象に対する応答の記録を維持する工程と、 分類された各事象が命令パイプライン回路での実行のために現れると、同じク
    ラスの事象の以前の試行に対する応答を判定するために記録に照会し、記録が以
    前の試行が成功したことを指示した場合およびその場合にのみその応答を試みる
    工程とを含む方法。
  158. 【請求項158】 成功したメモリ参照をコンピュータCPUからバスに発
    行する工程と、 メモリ参照によりバス上でアクセスされたデバイスが適切に動作するメモリか
    または適切に動作しないメモリであるかをコンピュータの記憶装置に記録する工
    程とを含む方法。
  159. 【請求項159】 プログラムがコンピュータCPUにより実行される際に
    、コンピュータの適切に動作するメインメモリへのメモリ書込み参照を監視し、
    メインメモリの保護領域へのメモリ書込み参照の検出を報告し、その監視および
    報告がコンピュータの監視回路によって実行されるものである工程と、 検出の報告を受け取ると、その内容が保護領域の内容を反映しているデータ構
    造をメインメモリから削除する工程とをさらに含む請求項28記載の方法。
  160. 【請求項160】 コンピュータCPUによって実行された命令により開始
    されたメモリ読出し参照を監視し、そのメモリ参照が論理アドレスを参照するも
    のである工程と、 論理アドレスを物理アドレスに変換する一部として、参照のメインメモリペー
    ジが保護された状態にあるかどうかを評価する工程と、 ページが保護されていない場合、ページを保護された状態にする工程とをさら
    に含む請求項28記載の方法。
  161. 【請求項161】 命令の個々のメモリ参照が、適切な動作を保証できない
    デバイスを参照するかどうかを評価する工程と、その参照が適切な動作を保証で
    きない場合、代替実行モードで命令を再実行する工程とをさらに含む請求項28
    記載の方法。
  162. 【請求項162】 プログラムのバイナリ表現の少なくともセグメントを第
    1の命令セットアーキテクチャから第2の命令セットアーキテクチャへ変換する
    間、適切に動作するメモリに向けられると考えられるメモリロードを、適切に動
    作しないメモリに向けられると考えられるメモリロードと区別するために、記録
    を使用する工程と、 第2の命令セットアーキテクチャへの変換を実行する間、変換時に適切に動作
    するメモリに向けられると考えられたが実行時に適切に動作しないメモリに向け
    られると判明したメモリロードを識別し、識別されたメモリロードを打ち切る工
    程と、 プログラムの変換されたセグメントの少なくともその部分を第1の命令セット
    で再実行する工程とをさらに含む請求項28記載の方法。
  163. 【請求項163】 入出力空間への参照が適切に動作しないメモリへの参照
    として記録される請求項28記載の方法。
  164. 【請求項164】 記録が若干誤っており、その誤りはメモリ参照が適切に
    動作するメモリにアクセスする時を決定する際の控えめな評価によって誘起され
    るものである請求項33記載の方法。
  165. 【請求項165】 コンピュータのDMA(直接メモリアクセス)メモリ書
    込みトランザクションを、CPUによってそのメモリ書込みトランザクションを
    事前に知らされることなくDMAメモリ書込みトランザクションにより書き込ま
    れる記憶場所の指標を記録するように設計された監視回路によって監視する工程
    と、 コンピュータのCPUから指標を読み出す工程とを含む方法。
  166. 【請求項166】 コンピュータの第1のプロセスによって、第1の表現で
    メモリに記憶された情報のコンピュータメモリにおける第2の表現を生成する工
    程と、 第2のプロセスがDMAメモリ書込みトランザクションを第1のプロセスに知
    らせることなく、かつ、第1のプロセスが第2のプロセスを試験することなく、
    第1の表現が第2のプロセスにより開始されたDMAメモリ書込みトランザクシ
    ョンによって上書きされる時を検出する工程とをさらに含み、検出は、DMAメ
    モリ書込みトランザクションに続く第2の表現の次のアクセスより以前に発生す
    るように保証されている請求項35記載の方法。
  167. 【請求項167】 仮想メモリマネージャによってページに分割されたメイ
    ンメモリのページを管理することをさらに含み、マネージャはメモリに記憶され
    たテーブルを使用し、 指標は、メインメモリのアドレス空間の外部で複数のレジスタのうちの1レジ
    スタにおいて記録され、 仮想メモリ管理テーブルはレジスタに記憶された修正指標の補助記憶を行わな
    い請求項35記載の方法。
  168. 【請求項168】 記録された指標が、ロケーションに書き込まれたデータ
    ではなく記憶場所のみを記録する請求項35記載の方法。
  169. 【請求項169】 CPUによって読み出された値に少なくとも部分的に基
    づき、キャッシュされたデータを消去する工程をさらに含む請求項35記載の方
    法。
  170. 【請求項170】 アドレスおよび時間的に相互に近い2つのDMAメモリ
    書込みが書込みの単一の記録のみを生成する請求項35記載の方法。
  171. 【請求項171】 コンピュータのDMAデバイスによるコンピュータのメ
    インメモリへのDMAメモリ書込みトランザクションを監視し、そのDMAメモ
    リ書込みトランザクションにより書き込まれたメインメモリのロケーションの指
    標を記録するように設計されたDMA(直接メモリアクセス)監視回路を含み、
    DMA監視回路は、DMAメモリ書込みトランザクションの開始前にコンピュー
    タのCPUによってDMAメモリ書込みトランザクションを知らされることなく
    動作し、要求があればCPUに指標を提供するように設計されているコンピュー
    タ回路。
  172. 【請求項172】 第1および第2のプロセスを実行するようにプログラム
    されたCPUと、第1のプロセスは、第1の表現でメモリに記憶される第2のプ
    ロセスの情報のコンピュータメモリにおける第2の表現を生成するようにプログ
    ラムされており、 第2のプロセスがDMAメモリ書込みトランザクションを第1のプロセスに知
    らせることなく、第1の表現が第2のプロセスにより開始されたDMA(直接メ
    モリアクセス)メモリ書込みトランザクションによって上書きされる時を検出す
    るように設計されたDMA監視回路とを含み、検出はDMAメモリ書込みトラン
    ザクションに続く第2の表現の次のアクセスより以前に発生するように保証され
    ているコンピュータ。
  173. 【請求項173】 DMA監視回路はさらに、DMAメモリ書込みトランザ
    クションにより書き込まれたメインメモリのロケーションの指標を記録するよう
    に設計されており、DMA監視回路は、DMAメモリ書込みトランザクションの
    開始前にコンピュータのCPUによってDMAメモリ書込みトランザクションを
    知らされることなく動作し、要求があればCPUに指標を提供するように設計さ
    れている請求項42記載のコンピュータ。
  174. 【請求項174】 メモリ修正のアドレスを以前の近いメモリ修正の以前に
    記憶された指標のアドレスと突き合わせるためのマッチング回路をさらに含む請
    求項42記載のコンピュータ。
  175. 【請求項175】 検出された上書きの記録された指標は、メモリのページ
    の自然に整列されたブロックよりそれぞれ構成される領域へのメインメモリの部
    分分割に少なくともある程度基づいて記録される請求項42記載のコンピュータ
  176. 【請求項176】 仮想メモリマネージャによる管理のためにページに分割
    されたメインメモリと、マネージャはメモリに記憶されたテーブルを用いてペー
    ジを管理するようにプログラムされており、 メインメモリのアドレス空間の外部の複数のレジスタおよび、メインメモリの
    ページに対する修正の指標をレジスタに記録するように設計された回路とを含み
    、 仮想メモリ管理テーブルはレジスタに記憶された修正指標の補助記憶を行わな
    いコンピュータ。
  177. 【請求項177】 複数のレジスタと、各レジスタはアドレスタグおよびメ
    モリセルのベクトルを含んでおり、 領域に対する修正がその1個のレジスタのアドレスタグを領域のアドレスに設
    定することによって検出された時に、複数のレジスタうちの1個とメモリの領域
    との間の関係づけを確立し、修正された記憶場所の指標を記録するためにベクト
    ルのメモリセルの値を設定するように設計された制御回路と、制御回路はコンピ
    ュータのCPUの監視制御を継続することなく動作可能であり、 修正された記憶場所のアドレスを付与することによってCPUからの読出し要
    求に応答するように設計された読出し回路とを含むコンピュータ回路。
  178. 【請求項178】 コンピュータにおいてプログラムが実行される際に、コ
    ンピュータのメインメモリの保護領域への書込みの検出を報告し、その報告がコ
    ンピュータの監視回路によって実行され、コンピュータのメモリが保護された領
    域および保護されていない領域に分割される工程と、 検出の報告を受け取ると、書込みが検出された保護領域の内容に対応する内容
    のデータ構造をメモリから削除する工程とを含む方法。
  179. 【請求項179】 監視回路は、コンピュータのバイパイプライン回路によ
    り実行される命令によって開始される記憶動作によって生成されるメモリ書込み
    に応答するものである請求項178記載の方法。
  180. 【請求項180】 コンピュータのDMAデバイスによるメモリへの書込み
    を、CPUにより書込みを事前に知らされることなくDMA転送により書き込ま
    れた記憶場所の指標を記録するように設計された監視回路によって監視する工程
    と、 コンピュータのCPUから指標を読み出す工程とをさらに含む請求項179記
    載の方法。
  181. 【請求項181】 データ構造は、書込みが検出された保護領域において第
    1の表現で記憶された情報の第2の表現であり、そのデータ構造は第1のプロセ
    スによって生成され、 第2のプロセスがDMA転送を第1のプロセスに知らせることなく、かつ、第
    1のプロセスが第2のプロセスを試験することなく、書込みが検出された保護領
    域が第2のプロセスにより開始されたDMA転送によって上書きされる時を検出
    することをさらに含み、検出はDMA転送に続く第2の表現の次のアクセスより
    以前に発生するように保証されている請求項179記載の方法。
  182. 【請求項182】 監視回路は、命令がコンピュータのパイプライン回路に
    よって実行される際に、メモリ読出しに応答し、メモリ参照は論理アドレスを参
    照するものであり、 論理アドレスを物理アドレスに変換する一部として、参照のメインメモリペー
    ジが保護された状態にあるかどうかを評価することと、 ページが保護されていない場合、ページを保護された状態にすることをさらに
    含む請求項178記載の方法。
  183. 【請求項183】 監視回路は、命令がコンピュータのパイプライン回路に
    より実行される命令により開始される記憶動作によって生成されるメモリ書込み
    に応答し、メモリ参照は論理アドレスを参照するものであり、 論理アドレスを物理アドレスに変換する一部として、参照のページがアクセス
    に対して保護されているかどうかを評価することと、 ページが保護されている場合、ページの内容を修正することなく保護を修正す
    ることをさらに含む請求項178記載の方法。
  184. 【請求項184】 命令の個々のメモリ参照が、適切な動作を保証できない
    デバイスを参照するかどうかを評価し、その参照が適切な動作を保証できない場
    合、代替実行モードで命令を再実行する工程をさらに含む請求項178記載の方
    法。
  185. 【請求項185】 ソースプログラムをオブジェクトプログラムに変換し、
    そのソースプログラムは副作用のシーケンスを伴う参照実行を命令し、そのオブ
    ジェクトプログラムはその副作用のシーケンスが参照シーケンスと異なっている
    実行を命令するものである工程と、 コンピュータにおけるオブジェクトプログラムの実行の間に、参照実行におい
    て発生するはずである状態と等価なプログラム状態を確立する工程と、 参照の副作用シーケンスを反映する実行モードで確立された状態からプログラ
    ムの実行を再開する工程とをさらに含む請求項178記載の方法。
  186. 【請求項186】 メモリ領域の保護がエントリのテーブルにおいて記録さ
    れ、各エントリはメインメモリの1ページに対応している請求項178記載の方
    法。
  187. 【請求項187】 エントリのテーブルが変換索引バッファである請求項1
    86記載の方法。
  188. 【請求項188】 テーブルエントリがメインメモリの物理ページに対応し
    て編成されている請求項186記載の方法。
  189. 【請求項189】 第1の命令セットアーキテクチャの保護領域に記憶され
    たコンピュータプログラムを第2の命令セットアーキテクチャに変換することに
    よってデータ構造を形成する工程をさらに含む請求項178記載の方法。
  190. 【請求項190】 検出の報告を受け取ると、割込みを生じ、ソフトウェア
    を呼び出す工程をさらに含み、呼び出されたソフトウェアは保護領域の内容と関
    係なくメモリの内容に影響を及ぼすものである請求項178記載の方法。
  191. 【請求項191】 コンピュータのメインメモリへの書込みを監視し、メモ
    リの保護領域への書込みを検出するように設計された回路と、 検出回路に応答し、保護領域の内容に対応する内容のデータ構造をメモリから
    削除するように設計された回路および/またはソフトウェアとを含むコンピュー
    タ。
  192. 【請求項192】 コンピュータのCPUにおいてメモリ読出し参照を生成
    し、そのメモリ参照が論理アドレスを参照する工程と、 メモリ読出し参照に応答して、参照のメインメモリページが保護された状態に
    あるかどうかを評価し、ページが保護されていない場合、ページを保護された状
    態にする工程とを含む方法。
  193. 【請求項193】 メモリ読出しアクセスのターゲットを含んでいるページ
    が、保護された状態または保護されていない状態であるかを評価するように設計
    された回路と、 ページが保護されていないという評価に応答して、ページの保護を保護された
    状態に修正する回路および/またはソフトウェアとを含むコンピュータ。
  194. 【請求項194】 保護修正回路および/またはソフトウェアがコンピュー
    タの回路に設計されている請求項193のコンピュータ。
  195. 【請求項195】 DMA転送動作によって書き込まれたメインメモリのロ
    ケーションの指標を記録するように設計されたDMA監視回路をさらに含み、D
    MA監視回路はDMA転送の開始前にコンピュータのCPUによってDMA転送
    を知らされることなく動作し、要求があればCPUに指標を付与するように設計
    されている請求項194記載のコンピュータ。
  196. 【請求項196】 第1および第2のプロセスを実行するように設計され、
    第1のプロセスが、第1の表現でメモリに記憶された第2のプロセスの情報のコ
    ンピュータメモリにおける第2の表現を生成するようにプログラムされたCPU
    と、 第2のプロセスがDMA転送を第1のプロセスに知らせることなく、かつ、第
    1のプロセスが第2のプロセスを試験することなく、第1の表現が第2のプロセ
    スにより開始されたDMA(直接メモリアクセス)転送によって上書きされる時
    を検出するように設計され、その検出がDMA転送に続く第2の表現の次のアク
    セスより以前に発生するように保証されているDMA監視回路とをさらに含む請
    求項194記載のコンピュータ。
  197. 【請求項197】 書込み監視回路が、 各レジスタがアドレスタグおよびメモリセルのベクトルを含む複数のレジスタ
    と、 領域に対する修正がその1個のレジスタのアドレスタグを領域のアドレスに設
    定することによって検出された時に、複数のレジスタうちの1個とメモリの領域
    との間の関係づけを確立し、修正された記憶場所の指標を記録するためにベクト
    ルのメモリセルの値を設定するように設計され、コンピュータのCPUの監視制
    御を継続することなく動作可能な制御回路と、 修正された記憶場所のアドレスを付与することによってCPUからの読出し要
    求に応答するように設計された読出し回路とを含む請求項194記載のコンピュ
    ータ。
  198. 【請求項198】 命令の個々のメモリ参照が適切な動作を保証できないメ
    モリを参照するかどうかを評価するように設計された命令実行回路をさらに含む
    請求項194記載のコンピュータ。
  199. 【請求項199】 ソースプログラムをオブジェクトプログラムに変換する
    ようにプログラムされ、そのオブジェクトプログラムにおける副作用のシーケン
    スがソースプログラムの副作用の参照シーケンスと異なっているトランスレータ
    と、 コンピュータにおけるオブジェクトプログラムの実行の間に、参照シーケンス
    において発生するはずである状態と等価なプログラム状態を確立するために介入
    し、参照の副作用シーケンスを反映する実行モードで確立された状態からプログ
    ラムの実行を再開するように設計された回路および/またはソフトウェアとをさ
    らに含む請求項194記載のコンピュータ。
  200. 【請求項200】 評価回路が、コンピュータのCPUによるメモリ読出し
    アクセスの一部として生成される論理アドレスを物理アドレスに変換するように
    設計されたアドレス変換回路に組み込まれている請求項193記載のコンピュー
    タ。
  201. 【請求項201】 メモリ領域の保護はエントリのテーブルに記録され、各
    エントリはメインメモリのページに対応するものである請求項193記載のコン
    ピュータ。
  202. 【請求項202】 テーブルエントリがメインメモリの物理ページに対応し
    て編成されている請求項201記載のコンピュータ。
  203. 【請求項203】 エントリのテーブルが変換索引バッファである請求項2
    01記載のコンピュータ。
  204. 【請求項204】 各領域が保護されているかまたは保護されていないかに
    基づき、コンピュータのメモリの領域についてコンピュータのプロファイリング
    または監視機能をイネーブルおよびディスエーブルにすることをさらに含む請求
    項63記載のコンピュータ。
  205. 【請求項205】 第1の命令セットアーキテクチャの保護領域に記憶され
    たコンピュータプログラムを第2の命令セットアーキテクチャに変換することに
    よってデータ構造を形成することをさらに含む請求項63記載のコンピュータ。
  206. 【請求項206】 コンピュータにおいて命令のストリームを実行する一部
    として生成されるメモリ参照について、命令の個々のメモリ参照が、有効なメモ
    リアドレスを有するが適切な動作を保証できないデバイスを参照するかどうかを
    評価する工程を含む方法。
  207. 【請求項207】 参照が適切な動作を保証できない場合、代替実行モード
    で命令を再実行する工程をさらに含む請求項206記載の方法。
  208. 【請求項208】 命令のストリームを生成するためにプログラムのバイナ
    リ表現の少なくともセグメントを第1の命令セットアーキテクチャから第2の命
    令セットアーキテクチャへ変換する間、生成された命令において、適切に動作し
    ないメモリに向けられると考えられるメモリロードと区別し、適切に動作するメ
    モリに向けられると考えられるメモリロードを注釈する工程をさらに含む請求項
    77記載の方法。
  209. 【請求項209】 コンピュータにおいて命令のストリームを実行する一部
    として生成されるメモリ参照について、命令の個々のメモリ参照が、メモリ参照
    のプログラムの実行を実質的に変更するようにして他の副作用に対して再順序づ
    けされたかどうかを評価する工程をさらに含む請求項206記載の方法。
  210. 【請求項210】 参照が適切な動作を保証できない場合、プログラムの状
    態を以前の状態にロールバックする工程をさらに含む請求項206記載の方法。
  211. 【請求項211】 ロールバックする工程は例外が目的プログラムにおいて
    発生した時に開始される請求項210記載の方法。
  212. 【請求項212】 ロールバック状態からの実行を再開する工程をさらに含
    み、再開された実行は参照インプリメンテーションの正確な副作用エミュレーシ
    ョンを実行するものである請求項210記載の方法。
  213. 【請求項213】 有効なメモリアドレスを有するデバイスがコンピュータ
    の入出力空間におけるアドレスを有する請求項206記載の方法。
  214. 【請求項214】 適切に動作しないデバイスへの参照が例外を生じるかど
    うかを判定するために、命令に埋め込まれた注釈を評価することをさらに含む請
    求項206記載の方法。
  215. 【請求項215】 コンピュータのアドレス変換回路に埋め込まれた回路に
    おいて、適切に動作するデバイスへの参照が例外を生じるかどうかを評価するこ
    とをさらに含む請求項206記載の方法。
  216. 【請求項216】 適切に動作しないデバイスへの参照が例外を生じるかど
    うかを判定するために、セグメントデスクリプタにおいてコード化された注釈を
    評価することをさらに含む請求項206記載の方法。
  217. 【請求項217】 別のセグメントデスクリプタをコピーすることによって
    セグメントデスクリプタを形成することと、注釈を変更することをさらに含む請
    求項206記載の方法。
  218. 【請求項218】 個々のメモリ参照命令、または命令の個々のメモリ参照
    が、適切な動作を保証できないが有効なメモリアドレスを備えるデバイスを参照
    するかどうかを評価するように設計された命令実行回路を含むコンピュータ。
  219. 【請求項219】 プログラムのバイナリ表現の少なくともセグメントを第
    1の命令セットアーキテクチャから第2の命令セットアーキテクチャの第2の表
    現に変換する間、適切に動作するメモリに向けられると考えられる個々のメモリ
    ロードを、適切に動作しないメモリデバイスに向けられると考えられるメモリロ
    ードと区別する工程と、 第2の表現を実行する間に、変換時に適切に動作するメモリに向けられると考
    えられたが実行時に適切に動作しないメモリに向けられると判明したメモリロー
    ドを識別し、識別されたメモリロードを打ち切る工程と、 識別に少なくとも部分的に基づき、プログラムの変換されたセグメントの少な
    くとも一部を第1の命令セットで再実行する工程とをさらに含む方法。
  220. 【請求項220】 ソースプログラムの少なくともセグメントをオブジェク
    トプログラムに変換し、そのソースプログラムは副作用の参照シーケンスにより
    参照実行を命令し、そのオブジェクトプログラムはその副作用のシーケンスが参
    照シーケンスと異なっている実行を命令するものである工程と、 コンピュータにおけるオブジェクトプログラムの実行の間に、参照実行におい
    て発生したはずの状態と等価なプログラム状態を確立する工程と、 参照の副作用シーケンスを反映する実行モードで確立された状態からプログラ
    ムの実行を再開する工程とを含む方法。
  221. 【請求項221】 ソースプログラムが第1の命令セットアーキテクチャに
    おいてコード化され、オブジェクトプログラムが第2の命令セットアーキテクチ
    ャにおいてコード化されている請求項220記載の方法。
  222. 【請求項222】 オブジェクトプログラムの実行により開始された命令の
    個々のメモリ参照が、有効なメモリアドレスを有するが適切な動作を保証できな
    いデバイスを参照するかどうかを評価する工程と、 評価に少なくとも部分的に基づき確立する工程を開始する工程とをさらに含む
    請求項220記載の方法。
  223. 【請求項223】 適切に動作しないメモリに向けられると考えられるメモ
    リ参照と、適切に動作するメモリに向けられると考えられる各メモリ参照との区
    別の指標で、オブジェクトプログラムを注釈する工程をさらに含む請求項221
    記載の方法。
  224. 【請求項224】 命令実行回路の状態を確立するためにオブジェクトプロ
    グラムのプリアンブルのコードを実行する工程をさらに含み、その命令実行回路
    が、各メモリ参照の状態および評価の両方の評価に基づき例外を生じるように設
    計されている請求項221記載の方法。
  225. 【請求項225】 例外を生じるかどうかを判定するために個々の副作用の
    命令に埋め込まれた注釈を評価することをさらに含む請求項221記載の方法。
  226. 【請求項226】 コンピュータのアドレス変換回路に埋め込まれた回路に
    おいて、個々の副作用の命令が例外を生じるかどうかを評価する工程をさらに含
    む請求項221記載の方法。
  227. 【請求項227】 セグメントデスクリプタおよび副作用の評価の両方の評
    価に基づいて例外を生じる工程をさらに含む請求項221記載の方法。
  228. 【請求項228】 適切に動作しないデバイスへの参照が例外を生じるかど
    うかを判定するために、セグメントデスクリプタにおいてコード化された注釈を
    評価することをさらに含む請求項221記載の方法。
  229. 【請求項229】 別のセグメントデスクリプタをコピーすることによって
    セグメントデスクリプタを形成することと、注釈を変更することをさらに含む請
    求項221記載の方法。
  230. 【請求項230】 形成されたセグメントデスクリプタに、副作用のシーケ
    ンスの変更に対する変換の仮定の感度を指示する変数をコピーすることをさらに
    含む請求項221記載の方法。
  231. 【請求項231】 副作用の順序づけの相違が、相互に関連する2つの副作
    用の再順序づけを含む請求項221記載の方法。
  232. 【請求項232】 確立する工程は、オブジェクトプログラムで例外が発生
    した時に開始される請求項221記載の方法。
  233. 【請求項233】 確立された状態からの実行を再開する工程をさらに含み
    、再開された実行は参照インプリメンテーションの正確な副作用エミュレーショ
    ンを実行するものである請求項221記載の方法。
  234. 【請求項234】 事前に例外参照状態を確立するために、変換中に生成さ
    れたデスクリプタを使用する工程をさらに含む請求項221記載の方法。
  235. 【請求項235】 プログラムの少なくともセグメントを第1の命令セット
    アーキテクチャの第1の表現から第2の命令セットアーキテクチャの第2の表現
    へ変換するようにプログラムされ、その第2の表現での副作用のシーケンスが第
    1の表現の変換されたセグメントの副作用のシーケンスと異なるものであるバイ
    ナリトランスレータと、 副作用のシーケンスの相違がプログラムの実行に対し実質的な作用を及ぼし得
    る第2の表現の実行中における事例を識別し、第1の表現の実行において発生し
    たはずの状態と等価なプログラム状態を確立し、第1の表現の副作用シーケンス
    を反映する実行モードで確立された状態からプログラムの実行を再開するように
    設計された命令実行回路および/またはソフトウェアとを備える装置。
  236. 【請求項236】 コンピュータにおいてプログラムを実行する方法であっ
    て、 命令セットの命令を実行するための第1のインタプリタにおいて命令を実行し
    、第1のインタプリタは必ずしも完全に正確ではなく、実行は、不正確な解釈の
    いずれかの副作用が不可逆的にコミットする前に十分に正確な解釈からのあらゆ
    る逸脱を検出することができるモニタのもとにおかれている工程と、 モニタが逸脱を検出した場合、命令セットの命令を実行するための、主にハー
    ドウェアによる第2の十分に正確なインタプリタにおいて実行を継続する工程と
    を含むコンピュータにおいてプログラムを実行する方法。
  237. 【請求項237】 ソースプログラムをオブジェクトプログラムに変換し、
    変換されたオブジェクトプログラムはソースプログラムとは異なる実行ビヘイビ
    アを有している工程と、 オブジェクトプログラムの実行中に割込みが生じた場合、ソースプログラムの
    実行中に発生したはずであり、そこから実行が継続可能である状態に対応するプ
    ログラムの状態を確立する工程と、 確立された状態からソースプログラムを実行する工程とを含む方法。
  238. 【請求項238】 コンピュータのメモリの論理アドレス空間の命令を実行
    するために構成された命令パイプラインおよびメモリアクセスユニットと、 プログラムによって生成されたアドレス参照をプログラムの論理アドレス空間
    からコンピュータの物理アドレス空間に変換するアドレス変換回路と、 命令パイプラインと協働的に相互接続され、命令パイプラインで生じるプロフ
    ァイル可能事象の発生を、実行プロファイリングのためにコンパイラの援助を要
    さずに検出するように構成されており、また、プログラムの実行間隔の間に参照
    される物理記憶アドレスを記述するプロファイル情報を記録するためにメモリア
    クセスユニットと協働的に相互接続されているプロファイル回路とを含むコンピ
    ュータ。
  239. 【請求項239】 コンピュータの命令を実行するように構成された命令パ
    イプラインと、 命令パイプラインで生じるプロファイル可能事象の発生を、実行プロファイリ
    ングのためにコンパイラの援助を要さずに検出し、事象を表現するプロファイル
    情報の記録を導くように構成されたプロファイル回路とを含み、プロファイル情
    報は実行のプロファイル間隔の間にコンピュータにより実行される少なくとも1
    命令の最後のバイトのアドレスを記録するものであるコンピュータ。
  240. 【請求項240】 命令の解釈が、命令のバイナリ表現で表現されないプロ
    セッサモードに依存する命令セットにおいてコード化されたコンピュータの命令
    を実行するように構成された命令パイプラインと、 命令パイプラインで生じるプロファイル可能事象の発生を、実行プロファイリ
    ングのためにコンパイラの援助を要さずに検出し、プログラムのプロファイル間
    隔の間のプログラムの実行およびプロセッサモードを記述するプロファイル情報
    の記録を導くように構成されたプロファイル回路とを含み、プロファイル情報は
    、バイナリコーディングでのモード依存性を解決するために十分なプロセッサモ
    ード情報で、プロファイルされたバイナリコードを注釈するように効率的に仕立
    てられているコンピュータ。
  241. 【請求項241】 コンピュータの命令を実行するように構成された命令パ
    イプラインと、 命令パイプラインで生じる事象のシーケンスを記述するプロファイル情報を、
    実行プロファイリングのためにコンパイラの援助を要さずに検出および記録する
    ように構成されたプロファイル回路とを備え、シーケンスは、プロファイル間隔
    の間に生じる、プロファイルされる事象の時間独立な選択判定基準に一致するす
    べての事象を含み、記録は所定の停止条件に到達するまで継続し、プロファイル
    回路はさらに、実行のプロファイルされない間隔の後の、所定の条件の発生を検
    出し、その際に、プロファイルされた実行間隔を開始するように構成されている
    コンピュータ。
  242. 【請求項242】 コンピュータにおけるプログラムの実行のプロファイル
    間隔において、実行を記述するプロファイル情報を、プロファイルされた実行の
    ためにプログラムがコンパイルされることなく記録することと、プログラムは、
    命令の解釈が命令のバイナリ表現で表現されないプロセッサモードに依存する命
    令セットでコード化されており、記録されたプロファイル情報は、 順次実行からの実行の分岐および、 モード変更命令の前にプロセッサモードとともに受けたプロセッサモード変更
    を誘起する命令の演算コードから推論できないプロセッサモード変更という、2
    つのクラスのプロファイルされた実行間隔の間に生じる少なくともすべての事象
    を記述しており、 プロファイル情報はさらに、実行間隔の間に実行された命令テキストの各個別
    の物理ページを識別するものである方法。
  243. 【請求項243】 コンピュータにおいてプログラムを実行する間に、命令
    パイプラインにおいて生じるプロファイル可能事象の発生を検出し、プロファイ
    ル可能事象の発生と本質的に並行してプロファイル可能事象を記述するプロファ
    イル情報を記録するように命令パイプラインに命じることを含み、検出および記
    録はソフトウェア介入を要さずにコンピュータのハードウェアの制御下で行われ
    る方法。
  244. 【請求項244】 プロファイル情報は、ソフトウェア介入を要さずに、ま
    た最初にプロファイル情報をメインメモリへ記憶することもなく、ハードウェア
    制御のもとでコンピュータの汎用レジスタに記録される請求項243記載の方法
  245. 【請求項245】 演算ユニットからなり、コンピュータおよびプロファイ
    ル回路のメモリから受け取った命令を実行するように構成された命令パイプライ
    ンと、 命令パイプラインと共通にハードウェア制御されるプロファイル回路とを備え
    え、 プロファイル回路および命令パイプラインは、命令パイプラインにおいて生じ
    るプロファイル可能事象の発生を検出するために協働的に相互接続されており、
    プロファイル回路はプロファイル可能事象の発生と本質的に並行してプロファイ
    ル可能事象を記述するプロファイル情報の記録をもたらすためにソフトウェア介
    入を要さずに動作可能であるコンピュータハードウェア。
  246. 【請求項246】 プロファイル回路は、ソフトウェア介入を要さずに、ま
    た最初にプロファイル情報をメインメモリへ記憶することなく、ハードウェア制
    御のもとでコンピュータの汎用レジスタにプロファイル情報を記録するように構
    成されている請求項245記載のコンピュータハードウェア。
  247. 【請求項247】 コンピュータにおいてプログラムを実行する間に、コン
    ピュータは命令結果の記憶のために汎用レジスタファイルのレジスタを使用する
    ものであり、命令パイプラインで生じるプロファイル可能事象の発生を検出する
    ことと、プロファイル可能事象が発生すると最初にコンピュータのメインメモリ
    に情報を捕捉することなく、プロファイル可能事象を記述するプロファイル情報
    を汎用レジスタファイルに記録することを含む方法。
  248. 【請求項248】 レジスタの汎用レジスタファイルと、 演算ユニットからなり、コンピュータのメモリキャッシュからフェッチされた
    命令を実行するように構成され、命令結果の記憶のために汎用レジスタファイル
    のためのレジスタとデータ通信する命令パイプラインと、 命令パイプラインと協働的に相互接続され、命令パイプラインで生じるプロフ
    ァイル可能事象の発生を検出し、プロファイル可能事象が発生すると最初にコン
    ピュータのメインメモリに情報を捕捉することなく、プロファイル可能事象を記
    述する情報を汎用レジスタファイルに捕捉するように構成されているプロファイ
    ル回路とを備えるコンピュータハードウェア。
  249. 【請求項249】 コンピュータのハードウェア命令デコーダにおいてRI
    SC命令セットでコード化されたユーザ状態プログラムの命令をデコードし、そ
    のRISC命令セットが固定長命令およびロード/記憶/演算編成を有する命令
    セットである工程と、 コンピュータのCISCハードウェア命令デコーダにおいてCISC命令セッ
    トでコード化されたユーザ状態プログラムの命令をデコードし、そのCISC命
    令セットが可変長命令および、複数の副作用を有する多数の命令を有する命令セ
    ットである工程とを含み、 CISCデコーダが、共通の実行パイプラインでの実行のためにRISC命令
    セットによる命令を生成するものである方法。
  250. 【請求項250】 パイプライン例外回路は、CISC命令の第1の副作用
    がアーキテクチャ的にコミットした後にCISC命令で発生する例外を認識し、
    その際に、命令ポインタ、汎用レジスタファイルの内容およびプロセッサレジス
    タの内容をソフトウェア例外ハンドラに露呈するように設計されており、コンピ
    ュータのプロセッサレジスタおよび汎用レジスタは、プロセッサ状態をメインメ
    モリに記憶することなく、第1の副作用を再計算することもなく、例外ハンドラ
    の実行およびプログラムの再開のために、十分なプロセッサ状態を露呈し、十分
    な作業記憶場所を提供するものである請求項249記載の方法。
  251. 【請求項251】 コンピュータがさらに、 CISC命令が中間点で例外を生じた時に、命令内プログラムカウンタ値を捕
    捉し露呈するように設計されたレジスタ、およびそのレジスタのための制御ロジ
    ックをさらに含む請求項249記載の方法。
  252. 【請求項252】 RISC命令セットでコード化されている第1のオペレ
    ーティングシステムはメモリにロードされ、 CISC命令セットでコード化されている第2のオペレーティングシステムは
    メモリにロードされ、CISCオペレーティングシステムはRISC命令セット
    のコンピュータでの実行のために修正されておらず、 コンピュータのハードウェアおよび/またはソフトウェアは、RISC命令セ
    ットでコード化されたプログラムの実行中に生じる例外を受け入れ、CISCオ
    ペレーティングシステムにおけるハンドリングのための例外を経路指定するよう
    に設計されており、 コンピュータのハードウェアおよび/またはソフトウェアは、CISC命令セ
    ットでコード化されたプログラムの実行中に生じる例外を受け入れ、RISCオ
    ペレーティングシステムにおけるハンドリングのための例外を経路指定するよう
    に設計されている請求項249記載の方法。
  253. 【請求項253】 CISC命令の実行の間に、CISC命令セットでアー
    キテクチャ的に可視な記憶場所のアーキテクチャ的に可視の副作用を要求する命
    令の動作に応答して、その副作用のアーキテクチャ的に可視の表現を代表する値
    を記憶し、代表値のフォーマットは副作用のアーキテクチャ的に可視の表現と異
    なるものであり、アーキテクチャ的に可視の副作用を発生させることなく実行を
    再開する工程と、 後に、代表値に対応するアーキテクチャ的に可視の表現をアーキテクチャ的に
    可視の記憶場所に書き込む工程とをさらに含む請求項249記載の方法。
  254. 【請求項254】 CISC命令デコーダにおけるプログラムの実行の間に
    、命令が後続する命令の実行に影響する条件を認識し、応答して、プロセッサを
    シングルステップモードに設定する工程と、 後続する命令を実行した後にシングルステップ例外を行い、プロセッサをシン
    グルステップモードから外して設定する工程をさらに含む請求項249記載の方
    法。
  255. 【請求項255】 CISC命令デコーダにおけるプログラムの実行の結果
    として、命令演算コードはデータの移動を生じるようにメモリ参照を要求するも
    のであり、その命令演算コードにより要求されたデータ移動以外のデータの移動
    を生じるための許諾を検査するために効果的なメモリ保護検査を実行する工程を
    さらに含む請求項249記載の方法。
  256. 【請求項256】 固定長命令およびロード/記憶/演算編成を有する命令
    セットであるRISC命令セットによるユーザ状態プログラムの実行のために露
    呈されるRISC命令デコーダと、 可変長命令および、複数の副作用を有する多数の命令を備える命令セットであ
    るCISC命令セットによるユーザ状態プログラムによる実行のために露呈され
    、RISC命令セットへのデコーディングを生じるためのCISC命令デコーダ
    と、 RISC命令デコーダおよびCISC命令デコーダの両方の出力を実行するよ
    うに設計された命令実行パイプラインとを備えるコンピュータ。
  257. 【請求項257】 CISC命令デコーダはCISC命令セットの一部だけ
    をインプリメントし、命令セットの残りはRISC命令セットでコード化された
    ソフトウェアエミュレータにおいてインプリメントされる請求項256記載のコ
    ンピュータ。
  258. 【請求項258】 CISC命令セットが汎用レジスタファイルのサブセッ
    トのみへのアクセス可能性を提供し、CISC命令セットの命令の中間結果はC
    ISC命令セットでアクセス不可能である汎用レジスタのレジスタファイルに記
    憶される請求項256記載のコンピュータ。
  259. 【請求項259】 第1の命令セットの命令のうちの1つの実行の間に中間
    点で生じる例外による開始のための例外ハンドラをさらに含み、例外ハンドラは
    CISC命令セットでアクセス不可能なレジスタへのアクセス可能性を有するR
    ISC命令セットでコード化されており、機械状態の保存の一部としての中間結
    果のあらゆる保存は汎用レジスタを保存するために使用される機構を使用するも
    のである請求項258記載のコンピュータ。
  260. 【請求項260】 パイプライン例外回路は、CISC命令の第1の副作用
    がアーキテクチャ的にコミットした後にCISC命令で発生する例外を認識し、
    その際に、命令ポインタ、汎用レジスタファイルの内容およびプロセッサレジス
    タの内容をソフトウェア例外ハンドラに露呈するように設計されており、コンピ
    ュータのプロセッサレジスタおよび汎用レジスタは、プロセッサ状態をメインメ
    モリに記憶することなく、第1の副作用を再計算することもなく、例外ハンドラ
    の実行およびプログラムの再開のために、十分なプロセッサ状態を露呈し、十分
    な作業記憶場所を提供するものである請求項256記載のコンピュータ。
  261. 【請求項261】 CISC命令が中間点で例外を生じた時に命令内プログ
    ラムカウンタ値を捕捉し露呈するように設計されたレジスタおよびそのレジスタ
    のための制御論理をさらに含む請求項256記載のコンピュータ。
  262. 【請求項262】 RISC命令セットでコード化されている第1のオペレ
    ーティングシステムはメモリにロードされ、 CISC命令セットでコード化されている第2のオペレーティングシステムは
    メモリにロードされ、CISCオペレーティングシステムはRISC命令セット
    のコンピュータでの実行のために修正されておらず、 コンピュータのハードウェアおよび/またはソフトウェアは、RISC命令セ
    ットでコード化されたプログラムの実行中に生じる例外を受け入れ、CISCオ
    ペレーティングシステムにおけるハンドリングのための例外を経路指定するよう
    に設計されており、 コンピュータのハードウェアおよび/またはソフトウェアは、CISC命令セ
    ットでコード化されたプログラムの実行中に生じる例外を受け入れ、RISCオ
    ペレーティングシステムにおけるハンドリングのための例外を経路指定するよう
    に設計されている請求項256記載の方法。
  263. 【請求項263】 アーキテクチャ的に可視な記憶場所のアーキテクチャ的
    に可視の副作用を要求する命令の動作を認識し、それに応答して、その副作用の
    アーキテクチャ的に可視の表現を代表する値を記憶し、代表値のフォーマットは
    副作用のアーキテクチャ的に可視の表現と異なるものであり、アーキテクチャ的
    に可視の副作用を発生させることなく実行を再開するように設計された回路と、 後に、代表値に対応するアーキテクチャ的に可視の表現をアーキテクチャ的に
    可視の記憶場所に書き込むように設計された回路および/またはソフトウェアと
    をさらに含む請求項256記載のコンピュータ。
  264. 【請求項264】 CISC命令が後続する命令の実行に影響する条件を認
    識し、応答して、プロセッサをシングルステップモードに設定するように設計さ
    れたハードウェアおよび/またはソフトウェアと、 後続する命令を実行した後にシングルステップ例外を生じ、プロセッサをシン
    グルステップモードから外して設定するように設計されたハードウェアおよび/
    またはソフトウェアをさらに含む請求項256記載のコンピュータ。
  265. 【請求項265】 その演算コードがデータの移動を生じるようにメモリ参
    照を要求する命令の実行の間に作用し、その命令演算コードにより要求されたデ
    ータ移動以外のデータの移動を生じるための許諾を検査するために効果的なメモ
    リ保護検査を実行するための回路をさらに含む請求項256記載のコンピュータ
  266. 【請求項266】 CISC命令デコーダが命令実行パイプラインによる実
    行のためにRISC命令セットでの命令を生成する請求項256記載のコンピュ
    ータ。
  267. 【請求項267】 各CISC命令について生成されたRISC命令の最後
    のものが、それがCISC命令のための最後のRISC命令であることを指示す
    るマーカを保持する請求項266記載のコンピュータ。
  268. 【請求項268】 単一のCISC命令について生成された複数のRISC
    命令が、マークされたRISC命令に際してコンピュータが例外を受け入れるこ
    とができることを指示するマーカを保持する請求項266記載のコンピュータ。
  269. 【請求項269】 CISC命令デコーダが並列実行のための複数のRIS
    C命令を生成するように設計されている請求項266記載のコンピュータ。
  270. 【請求項270】 単一のCISC命令について生成されたRISC命令に
    より生じた複数の例外を受け入れ、CISC処理環境への収集された提示のため
    に複数の例外を収集するように設計されたハードウェアおよび/またはソフトウ
    ェアをさらに含む請求項266記載のコンピュータ。
  271. 【請求項271】 CISC命令デコーダおよび命令実行パイプラインは、
    最大限に限定された例外を備え、CISC命令が命令実行パイプラインに発行さ
    れるとCISC命令について生成されたRISC命令を独立に完了するように設
    計されている請求項266記載のコンピュータ。
  272. 【請求項272】 命令実行パイプラインは、最大限に限定された例外を備
    え、RISC命令がRISC命令デコーダによりデコードされたか、または、C
    ISC命令デコーダによって生成されたかに関わらず、RISC命令を処理する
    ように設計されている請求項266記載のコンピュータ。
  273. 【請求項273】 命令実行パイプラインは、最大限に限定された例外を備
    え、RISC命令が生成されたCISC命令のレシピ内のある点でRISC命令
    を独立して処理するように設計されている請求項266記載のコンピュータ。
  274. 【請求項274】 RISCおよびCISC命令デコーダが、ソース指示器
    により最大限に異なる、同一のオペレーショナルコーディングによる統一された
    フォーマットで命令実行パイプラインにRISC命令を放出するように設計され
    ている請求項266記載のコンピュータ。
  275. 【請求項275】 RISC命令セットが比較および分岐レパートリに基づ
    く条件コードを有する請求項256記載のコンピュータ。
  276. 【請求項276】 RISC命令セットが整数および浮動小数点データを含
    むように設計された統一されたレジスタファイルへの指示器を備え、CISC命
    令セットが別個の整数および浮動小数点レジスタファイルへの指示器を備える請
    求項256記載のコンピュータ。
  277. 【請求項277】 CISC命令セットにおける複数副作用命令の中間結果
    が、CISC命令自体の表現で明示的に指定されないコンピュータの一時レジス
    タに保持され、RISC命令セットの命令はレジスタファイルへの指示器を備え
    、RISCレジスタ指示器はCISC命令セットにおいて使用された一時レジス
    タへの指示器を備える請求項256のコンピュータ。
  278. 【請求項278】 コンピュータのメインメモリと1つ以上のキャッシュレ
    ベルとの間でRISCおよびCISC命令セットの命令を管理するように設計さ
    れたメモリ管理ユニットをさらに含む請求項256記載のコンピュータ。
JP2000596448A 1999-01-28 2000-01-28 第2のアーキテクチャのコンピュータにおける第1のコンピュータアーキテクチャ用プログラムの実行 Pending JP2002536712A (ja)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US09/239,194 1999-01-28
US09/239,194 US7275246B1 (en) 1999-01-28 1999-01-28 Executing programs for a first computer architecture on a computer of a second architecture
US09/322,443 1999-05-28
US09/322,443 US6941545B1 (en) 1999-01-28 1999-05-28 Profiling of computer programs executing in virtual memory systems
US09/332,263 US6978462B1 (en) 1999-01-28 1999-06-11 Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled
US09/332,263 1999-06-11
US09/334,530 1999-06-16
US09/334,530 US7013456B1 (en) 1999-01-28 1999-06-16 Profiling execution of computer programs
US09/385,394 1999-08-30
US09/385,394 US8074055B1 (en) 1999-01-28 1999-08-30 Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
PCT/US2000/002239 WO2000045257A2 (en) 1999-01-28 2000-01-28 Executing programs for a first computer architecture on a computer of a second architecture

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2010211102A Division JP5427742B2 (ja) 1999-01-28 2010-09-21 コンピュータのメモリを参照する方法およびコンピュータ

Publications (2)

Publication Number Publication Date
JP2002536712A true JP2002536712A (ja) 2002-10-29
JP2002536712A5 JP2002536712A5 (ja) 2007-03-15

Family

ID=27540115

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2000596448A Pending JP2002536712A (ja) 1999-01-28 2000-01-28 第2のアーキテクチャのコンピュータにおける第1のコンピュータアーキテクチャ用プログラムの実行
JP2010211102A Expired - Fee Related JP5427742B2 (ja) 1999-01-28 2010-09-21 コンピュータのメモリを参照する方法およびコンピュータ

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2010211102A Expired - Fee Related JP5427742B2 (ja) 1999-01-28 2010-09-21 コンピュータのメモリを参照する方法およびコンピュータ

Country Status (4)

Country Link
EP (3) EP2275930B1 (ja)
JP (2) JP2002536712A (ja)
AU (1) AU2743600A (ja)
WO (1) WO2000045257A2 (ja)

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009282774A (ja) * 2008-05-22 2009-12-03 Fujitsu Ltd エミュレーションプログラム、エミュレーション装置およびエミュレーション方法
US7707392B2 (en) 2007-05-31 2010-04-27 Kabushiki Kaisha Toshiba Accessing data in inaccessible memory while emulating memory access instruction by executing translated instructions including call to transfer data to accessible memory
JP2011515750A (ja) * 2008-03-17 2011-05-19 中国科学院▲計▼算技▲術▼研究所 X86の仮想機をサポートするriscプロセッサ装置及び方法
JP2011134315A (ja) * 2009-12-23 2011-07-07 Intel Corp 部分的なエミュレーション環境におけるソース命令セットアーキテクチャ(isa)コードから、変換済みコードへの遷移
JP2011181049A (ja) * 2010-03-04 2011-09-15 Dainippon Printing Co Ltd Icチップ、icカード、制御方法及び制御プログラム
KR101247259B1 (ko) 2009-12-17 2013-04-01 한국전자통신연구원 가상화 장치 및 그 처리 방법
JP2017079078A (ja) * 2011-04-01 2017-04-27 インテル コーポレイション ベクトルフレンドリ命令フォーマット及びその実行
KR20170097617A (ko) * 2014-12-23 2017-08-28 인텔 코포레이션 명령어 흐름을 최적화하기 위한 체크를 수행하는 장치 및 방법
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US10649746B2 (en) 2011-09-30 2020-05-12 Intel Corporation Instruction and logic to perform dynamic binary translation
KR102111886B1 (ko) * 2019-08-12 2020-05-15 한국과학기술원 Arm 아키텍쳐 상의 동적 프로그램 수정 탐지 기술
US10725755B2 (en) 2008-11-24 2020-07-28 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US20220405013A1 (en) * 2021-06-18 2022-12-22 Micron Technology, Inc. Asynchronous interrupt event handling in multi-plane memory devices

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10122505A1 (de) * 2001-05-10 2002-11-14 Giesecke & Devrient Gmbh Verfahren zum Schützen eines Rechners gegen Manipulation von Registerinhalten und Rechner zum Durchführen des Verfahrens
US7017030B2 (en) * 2002-02-20 2006-03-21 Arm Limited Prediction of instructions in a data processing apparatus
GB2435116B (en) 2006-02-10 2010-04-07 Imagination Tech Ltd Selecting between instruction sets in a microprocessors
DE112011106021B4 (de) 2011-12-22 2018-05-03 Intel Corporation Zugreifen auf Daten, die in einem Befehls-/Adressregister-Gerät gespeichert sind
CN103294406B (zh) * 2012-03-05 2016-08-17 联想(北京)有限公司 控制方法、控制装置、存储设备和电子设备
JP2013232097A (ja) 2012-04-27 2013-11-14 Toshiba Corp 半導体記憶装置
JP2014010739A (ja) * 2012-07-02 2014-01-20 Fujitsu Ltd システムの状態の復元についての情報処理方法、情報処理プログラム及び情報処理装置
JP6103541B2 (ja) 2014-03-18 2017-03-29 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation バイナリコードの実行を制御する装置及び方法
RU2580016C1 (ru) * 2014-10-17 2016-04-10 Закрытое акционерное общество "Лаборатория Касперского" Способ передачи управления между областями памяти
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
WO2017116827A1 (en) * 2015-12-30 2017-07-06 Siege Technologies LLC Memory fractionation software protection
RU2623883C1 (ru) * 2016-02-18 2017-06-29 Акционерное общество "Лаборатория Касперского" Способ выполнения инструкций в системной памяти
US20170344364A1 (en) * 2016-05-25 2017-11-30 Honeywell International Inc. System and method for data compatibility across heterogeneous machine architectures
RU2634172C1 (ru) * 2016-06-02 2017-10-24 Акционерное общество "Лаборатория Касперского" Способ передачи управления между адресными пространствами
US10698724B2 (en) * 2018-04-10 2020-06-30 Osisoft, Llc Managing shared resources in a distributed computing system
CN111258557B (zh) * 2020-01-16 2023-08-18 Oppo(重庆)智能科技有限公司 代码处理方法、装置、电子设备及计算机可读介质
CN114691202A (zh) * 2020-12-29 2022-07-01 上海兆芯集成电路有限公司 转换指令的方法及系统
CN112947995B (zh) * 2021-03-03 2022-07-26 北京航空航天大学 一种Java项目的体系结构策略定位方法及系统
CN115421876B (zh) * 2022-10-27 2023-01-10 飞腾信息技术有限公司 二进制翻译方法及装置
CN115629917B (zh) * 2022-12-23 2023-03-21 北京开源芯片研究院 一种数据恢复方法、装置、电子设备及可读存储介质
CN116776788B (zh) * 2023-08-22 2024-03-19 摩尔线程智能科技(北京)有限责任公司 上下文切换验证方法及装置

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6273333A (ja) * 1985-09-26 1987-04-04 Nec Corp エミュレーション制御装置
JPH04324525A (ja) * 1991-04-25 1992-11-13 Toshiba Corp プログラム移植支援装置
JPH06502736A (ja) * 1991-03-07 1994-03-24 ディジタル イクイプメント コーポレイション 多重アーキテクチャ環境で多重コードの実行とデバッグを行うシステムで定義域間の呼び出しをジャケットする改良したシステムと方法
JPH06149563A (ja) * 1992-11-05 1994-05-27 Toshiba Corp データ処理装置
JPH07287659A (ja) * 1994-03-08 1995-10-31 Digital Equip Corp <Dec> コンピュータシステムにおいてクロスドメイン通話を検出及び実行するための方法及び装置
JPH08339325A (ja) * 1995-06-07 1996-12-24 Internatl Business Mach Corp <Ibm> 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
JPH09160774A (ja) * 1995-12-08 1997-06-20 Hitachi Ltd 命令拡張を容易にした情報処理装置
JPH09231093A (ja) * 1996-02-22 1997-09-05 Internatl Business Mach Corp <Ibm> 2つのアーキテクチャ間でプログラム制御を転送する方法及びシステム
JPH11514119A (ja) * 1996-07-09 1999-11-30 シーメンス ニクスドルフ インフオルマチオーンスジステーメ アクチエンゲゼルシヤフト 転送可能および転送不可能なプログラム部分を有するプログラムを移送するための方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4787031A (en) * 1985-01-04 1988-11-22 Digital Equipment Corporation Computer with virtual machine mode and multiple protection rings
US5115500A (en) * 1988-01-11 1992-05-19 International Business Machines Corporation Plural incompatible instruction format decode method and apparatus
US5481684A (en) * 1994-01-11 1996-01-02 Exponential Technology, Inc. Emulating operating system calls in an alternate instruction set using a modified code segment descriptor
US5832205A (en) * 1996-08-20 1998-11-03 Transmeta Corporation Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed
CA2283772C (en) * 1997-07-11 2002-10-15 Transmeta Corporation Host microprocessor with apparatus for temporarily holding target processor state

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6273333A (ja) * 1985-09-26 1987-04-04 Nec Corp エミュレーション制御装置
JPH06502736A (ja) * 1991-03-07 1994-03-24 ディジタル イクイプメント コーポレイション 多重アーキテクチャ環境で多重コードの実行とデバッグを行うシステムで定義域間の呼び出しをジャケットする改良したシステムと方法
JPH04324525A (ja) * 1991-04-25 1992-11-13 Toshiba Corp プログラム移植支援装置
JPH06149563A (ja) * 1992-11-05 1994-05-27 Toshiba Corp データ処理装置
JPH07287659A (ja) * 1994-03-08 1995-10-31 Digital Equip Corp <Dec> コンピュータシステムにおいてクロスドメイン通話を検出及び実行するための方法及び装置
JPH08339325A (ja) * 1995-06-07 1996-12-24 Internatl Business Mach Corp <Ibm> 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
JPH09160774A (ja) * 1995-12-08 1997-06-20 Hitachi Ltd 命令拡張を容易にした情報処理装置
JPH09231093A (ja) * 1996-02-22 1997-09-05 Internatl Business Mach Corp <Ibm> 2つのアーキテクチャ間でプログラム制御を転送する方法及びシステム
JPH11514119A (ja) * 1996-07-09 1999-11-30 シーメンス ニクスドルフ インフオルマチオーンスジステーメ アクチエンゲゼルシヤフト 転送可能および転送不可能なプログラム部分を有するプログラムを移送するための方法

Cited By (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7707392B2 (en) 2007-05-31 2010-04-27 Kabushiki Kaisha Toshiba Accessing data in inaccessible memory while emulating memory access instruction by executing translated instructions including call to transfer data to accessible memory
JP2011515750A (ja) * 2008-03-17 2011-05-19 中国科学院▲計▼算技▲術▼研究所 X86の仮想機をサポートするriscプロセッサ装置及び方法
US8543371B2 (en) 2008-05-22 2013-09-24 Fujitsu Limited Write-protected storage medium, write-protected apparatus, and write-protected environment
JP2009282774A (ja) * 2008-05-22 2009-12-03 Fujitsu Ltd エミュレーションプログラム、エミュレーション装置およびエミュレーション方法
US10725755B2 (en) 2008-11-24 2020-07-28 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
KR101247259B1 (ko) 2009-12-17 2013-04-01 한국전자통신연구원 가상화 장치 및 그 처리 방법
US8589143B2 (en) 2009-12-17 2013-11-19 Electronics And Telecommunications Research Institute Virtualization apparatus and processing method thereof
JP2011134315A (ja) * 2009-12-23 2011-07-07 Intel Corp 部分的なエミュレーション環境におけるソース命令セットアーキテクチャ(isa)コードから、変換済みコードへの遷移
JP2011181049A (ja) * 2010-03-04 2011-09-15 Dainippon Printing Co Ltd Icチップ、icカード、制御方法及び制御プログラム
JP2017079078A (ja) * 2011-04-01 2017-04-27 インテル コーポレイション ベクトルフレンドリ命令フォーマット及びその実行
US11740904B2 (en) 2011-04-01 2023-08-29 Intel Corporation Vector friendly instruction format and execution thereof
US11210096B2 (en) 2011-04-01 2021-12-28 Intel Corporation Vector friendly instruction format and execution thereof
US10795680B2 (en) 2011-04-01 2020-10-06 Intel Corporation Vector friendly instruction format and execution thereof
US10649746B2 (en) 2011-09-30 2020-05-12 Intel Corporation Instruction and logic to perform dynamic binary translation
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
KR102462283B1 (ko) * 2014-12-23 2022-11-03 인텔 코포레이션 명령어 흐름을 최적화하기 위한 체크를 수행하는 장치 및 방법
KR20170097617A (ko) * 2014-12-23 2017-08-28 인텔 코포레이션 명령어 흐름을 최적화하기 위한 체크를 수행하는 장치 및 방법
KR102111886B1 (ko) * 2019-08-12 2020-05-15 한국과학기술원 Arm 아키텍쳐 상의 동적 프로그램 수정 탐지 기술
US20220405013A1 (en) * 2021-06-18 2022-12-22 Micron Technology, Inc. Asynchronous interrupt event handling in multi-plane memory devices
US11842078B2 (en) * 2021-06-18 2023-12-12 Micron Technology, Inc. Asynchronous interrupt event handling in multi-plane memory devices

Also Published As

Publication number Publication date
AU2743600A (en) 2000-08-18
JP2011040087A (ja) 2011-02-24
EP2320318A1 (en) 2011-05-11
EP2275930B1 (en) 2017-06-14
JP5427742B2 (ja) 2014-02-26
WO2000045257A3 (en) 2001-03-08
EP2275930A1 (en) 2011-01-19
EP1151374A2 (en) 2001-11-07
WO2000045257A2 (en) 2000-08-03
WO2000045257B1 (en) 2001-06-14
EP1151374B1 (en) 2017-08-02

Similar Documents

Publication Publication Date Title
JP5427742B2 (ja) コンピュータのメモリを参照する方法およびコンピュータ
US7254806B1 (en) Detecting reordered side-effects
US7111290B1 (en) Profiling program execution to identify frequently-executed portions and to assist binary translation
US8065504B2 (en) Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
US8127121B2 (en) Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US7065633B1 (en) System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU
US7941647B2 (en) Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
US6934832B1 (en) Exception mechanism for a computer
US8074055B1 (en) Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US7137110B1 (en) Profiling ranges of execution of a computer program
US7013456B1 (en) Profiling execution of computer programs
US6779107B1 (en) Computer execution by opportunistic adaptation
US6763452B1 (en) Modifying program execution based on profiling
US6954923B1 (en) Recording classification of instructions executed by a computer
US6978462B1 (en) Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled
KR100394967B1 (ko) 개선된 마이크로프로세서를 위한 게이트 저장 버퍼
JP3753743B2 (ja) 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置
KR100443759B1 (ko) 개선된 마이크로프로세서
JP2001519955A (ja) 先進のプロセッサのための変換メモリ保護装置
JP5520326B2 (ja) コンピュータのメモリを参照する方法およびコンピュータ
von Tessin The clustered multikernel: An approach to formal verification of multiprocessor operating-system kernels

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070129

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070129

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20091125

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20091125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100420

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100705

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100712

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100816

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100823

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101116