JP5583409B2 - マルチプロセッサ・コンピューティング・システムでのメモリ一貫性保護 - Google Patents

マルチプロセッサ・コンピューティング・システムでのメモリ一貫性保護 Download PDF

Info

Publication number
JP5583409B2
JP5583409B2 JP2009537704A JP2009537704A JP5583409B2 JP 5583409 B2 JP5583409 B2 JP 5583409B2 JP 2009537704 A JP2009537704 A JP 2009537704A JP 2009537704 A JP2009537704 A JP 2009537704A JP 5583409 B2 JP5583409 B2 JP 5583409B2
Authority
JP
Japan
Prior art keywords
target code
memory
address space
target
virtual address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009537704A
Other languages
English (en)
Other versions
JP2010510599A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2010510599A publication Critical patent/JP2010510599A/ja
Application granted granted Critical
Publication of JP5583409B2 publication Critical patent/JP5583409B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)
  • Multi Processors (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、全般的にはコンピュータおよびコンピュータ・システムの分野に関する。より具体的には、本発明は、マルチプロセッサ・コンピューティング・システムでのメモリ一貫性の保護に関する。
強力なコンピューティング・システムに関する現代の必要は、2つ、4つ、8つ、またはそれを超える別々のプロセッサを有するマルチプロセッサ・コンピュータ・アーキテクチャの開発をもたらした。そのようなマルチプロセッサ・システムは、プログラム・コードの複数の部分を同時に実行する(すなわち、複数のプロセスおよび/または複数のプロセス・スレッドを同時に実行する)ことができる。たとえばプロセス間通信(IPC)用のメッセージ受渡しを含む、複数の異なる機構が、プログラム・コードの実行中の部分の間でデータを共有するために存在する。しかし、ほとんどの現代のマルチプロセッサ・コンピューティング・システムは、別々のプロセッサ上で動作している複数のプログラム・コード部分によってアクセス可能な共有メモリの使用をもサポートする。
共有メモリに格納されたデータに対するすべての変更が、秩序だって同期化された形で複数のコード部分のそれぞれに可視にされることが重要である。したがって、マルチプロセッサ・システムの各異なるタイプは、それによって共有メモリに対する変更が複数のプロセッサのそれぞれで可視にされる形を定義するメモリ動作のセマンティックス(特に、ロード動作、ストア動作、および原子的動作に関する)を指定する、それ自体の対応するメモリ一貫性モデルを有する。プログラム・コードとマルチプロセッサ・システム内のハードウェアとの両方が、正しい動作を達成するためにメモリ一貫性モデルを厳守しなければならない。逆に、メモリ一貫性の障害は、システムの致命的クラッシュにつながり得る。
マルチプロセッサ・コンピューティング・システムでのメモリ一貫性モデルのより詳細な紹介は、その開示が参照によって本明細書に援用する文献に記載されている(たとえば、非特許文献1参照。)。
最も単純な例で、メモリ一貫性モデルは、シーケンシャル一貫性を指定し、これによって、メモリ動作が、厳密にプログラム・コードで指定されるプログラム順で行われるように見えるようになる。しかし、マルチプロセッサ・アーキテクチャ内のプロセッサおよびメモリ・サブシステムは、しばしば、改善されたハードウェア性能を達成するためにメモリ動作を並べ変えるように設計される。すなわち、Digital ALPHA、SPARC v8およびv9、IBM POWER、ならびに他のプロセッサ・システムなどの多くの現代の共有メモリ・マルチプロセッサ・システムは、さまざまな形の緩和された順序付けを提供し、微妙に異なる形の非シーケンシャル・メモリ一貫性を提供する。ここで、メモリ一貫性の分野のさらに一般的な背景情報が、その開示が参照によって本明細書に援用する論文に記載されている(たとえば、非特許文献2参照。)。
Rice University ECE Technical Report 9512および1995年9月付けのWestern Research Laboratory Research Report 95/7として公表された、サリタ V アドベイ(Sarita V.Advey)およびクーロシュ ガラコールーズ(Kourosh Gharachorlooz)、「Shared Memory Consistency Models: A Tutorial」 2002年4月24付けのhttp://www−128.ibm.com/developerworks/eserver/articles/power4_mem.htmlにあるビー ヘイ(B. Hay)およびジー フック(G. Hook)、「POWER4 and shared memory synchronisation」
本発明によれば、本明細書に添付の特許請求の範囲に示された、マルチプロセッサ・コンピュータ・システムでメモリ一貫性を保護するマルチプロセッサ・コンピュータ・システムおよび方法が提供される。
本明細書で述べる本発明の例示的な実施形態は、マルチプロセッサ・コンピューティング・システムでのメモリ一貫性の保護に関する。具体的に言うと、本発明の例示的実施形態は、マルチプロセッサ・コンピュータ・システム内の共有メモリに関する一貫し同期化された動作を提供する機構に関する。
以下、本発明の実施形態により実現可能なさまざまな態様および利点の要約である。これは、以下の詳細な説明を取り入れるために当業者を支援するための導入として提供されるものであり、本明細書に添付の特許請求の範囲を限定することを意図していない。
本発明の1つの例示的な態様では、メモリと、複数のプロセッサと、コントローラ・ユニットとからなるマルチプロセッサ・コンピューティング・システムが提供される。メモリは、少なくとも第1ターゲット・コード部分および第2ターゲット・コード部分を含む複数のターゲット・コード部分を格納する。複数のプロセッサは、並列処理を使用して、メモリ内に格納された複数のターゲット・コード部分を実行するように構成される。コントローラ・ユニットは、複数のプロセッサによる複数のターゲット・コード部分の実行を制御するように構成される。コントローラ・ユニットは、メモリをアドレッシングするのに使用される仮想アドレス空間を複数の仮想アドレス空間領域に分割し、最初に第1のメモリ一貫性モデルに従って複数の仮想アドレス空間領域を介してメモリにアクセスするために複数のターゲット・コード部分の実行を制御するように構成されたアドレス空間割振りユニットからなる。また、コントローラ・ユニットは、少なくとも第2ターゲット・コード部分によってもアクセス可能であるメモリ内の共有メモリ区域に関して第1ターゲット・コード部分の実行時に行われるメモリ・アクセス要求を検出し、共有メモリ区域にアクセスする第1ターゲット・コード部分内の少なくとも1つの命令のグループを識別するように構成された共有メモリ検出ユニットを含む。さらに、メモリ保護ユニットは、共有メモリ検出ユニットが識別された命令のグループを識別することに応答して、第1ターゲット・コード部分内の識別された命令のグループの実行時における共有メモリ区域へのアクセスに関して第2のメモリ一貫性モデルを強制するためにメモリ一貫性保護を選択的に適用するように構成される。
本発明のもう1つの例示的な態様では、マルチプロセッサ・コンピューティング・システムでメモリ一貫性を保護する方法であって、第1のメモリ一貫性モデルの下で少なくとも第1コード部分を実行する工程と、第1コード部分と少なくとも第2コード部分との両方によってアクセス可能な共有メモリ区域を検出する工程と、共有メモリ区域にアクセスする第1コード部分内の命令のグループを識別する工程と、第1コード部分内の命令のグループが、検出された共有メモリ区域へのアクセスを第2のメモリ一貫性モデルの下で実行するように、メモリ一貫性保護を選択的に適用する工程と、をコンピュータが実行する工程として備える方法が提供される。
本発明のもう1つの例示的な態様では、マルチプロセッサ・コンピューティング・システムでメモリ一貫性を保護するであって、マルチプロセッサ・コンピューティング・システムのデフォルト・メモリ一貫性モデルの下で少なくとも第1プログラム・コード部分および第2プログラム・コード部分を実行する工程と、第1プログラム・コード部分と第2プログラム・コード部分との両方からアクセス可能な明示的に共有されるメモリ区域を起動する要求を検出する工程と、第1および第2のプログラム・コード部分が、共有メモリ区域へのアクセスを、異なる第2のメモリ一貫性モデルの下で実行するように、メモリ一貫性保護を選択的に適用する工程と、をコンピュータが実行する工程として備える方法が提供される。
本発明のもう1つの例示的な態様では、少なくとも第1プロセッサおよび第2プロセッサを有するマルチプロセッサ・コンピュータ・システム内でメモリ一貫性を保護する方法であって、第1仮想アドレス空間領域に関して第1プロセッサ上で第1コード部分を実行し、第1仮想アドレス空間とは別でありかつオーバーラップしない第2仮想アドレス空間領域に関して第2プロセッサ上で第2コード部分を実行する工程と、第1仮想空間領域内の少なくとも1つのマッピングされた領域をマッピングする工程と、第2仮想アドレス空間領域内でマッピングされていないが第1仮想アドレス空間領域内でマッピングされる区域であるメモリ区域への第2コード部分によるアクセス要求を検出することによって、第2コード部分が共有メモリ区域へのアクセスを試みていることを判定する工程と、第1および第2の仮想アドレス空間領域とは別でありかつオーバーラップしない第3仮想アドレス空間領域へ第1仮想アドレス空間領域からマッピングされた領域を再マッピングする工程と、ブロックに所定のメモリ順序付け制約の下で実行させるメモリ一貫性保護を適用するために、少なくとも、アクセス要求を含む第2コード部分内の命令の選択されたブロックを変更し、第3アドレス空間領域にマッピングされた共有メモリ区域にアクセスするように少なくとも選択されたブロックに指示する工程とを備える方法が提供される。
例示的な実施形態は、特に、メモリ一貫性保護を識別し、プログラムのうちでそのような保護を必要とする部分だけに選択的に適用することによって、マルチプロセッサ・コンピューティング・システムでメモリ一貫性を保護する低コストで効果的な機構を提供する。さらに、例示的実施形態は、共有メモリへのアクセスを検出し、これによってプログラムのうちでメモリ一貫性保護を必要とする部分を判定する低コストで効果的な機構を提供する。
本明細書で述べる例示的実施形態の一部は、プログラム・コード変換に着手するとき、改善されたメモリ一貫性を提供する。ここで、コントローラ・ユニットが、トランスレータ・ユニットである。具体的に言うと、本発明人は、プログラム・コード変換を対象とする機構を開発したが、このプログラム・コード変換は、動的バイナリ変換を実行するランタイム・トランスレータと関連して有用である。すなわち、コントローラ・ユニットは、動的バイナリ・トランスレータとして構成される。たとえば、第1のメモリ一貫性モデルを有する対象アーキテクチャからもう1つのメモリ一貫性モデルを有するターゲット・アーキテクチャへのそのような変換に着手するとき、対象アーキテクチャとターゲット・アーキテクチャとのメモリ一貫性モデルの間の相違が、ターゲット・アーキテクチャ上で実行されるプログラム・コードの予期されない挙動または誤った挙動につながる場合がある。具体的に言うと、メモリ一貫性エラーは、強く順序付けられたメモリ一貫性モデルを有する対象アーキテクチャ(SPARCアーキテクチャおよびx86アーキテクチャなど)から相対的に弱い順序付けを有するメモリ一貫性モデルを有するターゲット・アーキテクチャ(PowerPCアーキテクチャおよびItaniumアーキテクチャなど)へプログラム・コードを変換するとき生じる場合がある。したがって、例示的な実施形態は、これらの形のプログラム・コード変換を実行するマルチプロセッサ・コンピュータ・システム内でメモリ一貫性を保護する低コストで効果的な機構を提供する。
本明細書で述べる例示的な実施形態で使用できるプログラム・コード変換に関するさらなる情報については、いずれもが参照によって本明細書に組み込まれている、PCT出願公告第WO2000/22521号、名称「Program Code Conversion」、PCT出願公告第WO2004/095264号、名称「Method and Apparatus for Performing Interpreter Optimizations during Program Code Conversion」、PCT出願公告第WO2004/097631号、名称「Improved Architecture for Generating Intermediate Representations for Program Code Conversion」、PCT出願公告第WO2005/006106号、名称「Method and Apparatus for Performing Adjustable Precision Exception Handling」、およびPCT出願公告第WO2006/103395号、名称「Method and Apparatus for Precise Handling of Exceptions During Program Code Conversion」に注意を向けられたい。
本発明は、マルチプロセッサ・コンピューティング・システムと協力して使用される時の、本明細書に記載の発明の実施形態のいずれかを実行するように構成されたコントローラ装置またはトランスレータ装置にも及ぶ。また、本発明は、マルチプロセッサ・コンピュータ・システムによって実施されるとき本明細書で定義される方法のいずれかを実行する命令をその上に記録されたコンピュータ可読記憶媒体に及ぶ。
本発明の少なくともいくつかの実施形態を、専用の特殊目的ハードウェアを使用して、部分的にまたは全体的に構成することができる。本明細書で使用される「コンポーネント」、「モジュール」、または「ユニット」などの用語は、ある種のタスクを実行するフィールド・プログラマブル・ゲート・アレイ(FPGA)または特定用途向け集積回路(ASIC)などのハードウェア・デバイスを含むことができるが、これらに限定はされない。代替案では、本発明の要素を、アドレス可能記憶媒体に常駐するように構成し、1つまたは複数のプロセッサ上で実行するように構成することができる。したがって、本発明の機能的要素は、いくつかの実施形態で、たとえば、ソフトウェア・コンポーネント、オブジェクト指向ソフトウェア・コンポーネント、クラス・コンポーネント、およびタスク・コンポーネントなどのコンポーネント、プロセス、関数、属性、プロシージャ、サブルーチン、プログラム・コードのセグメント、ドライバ、ファームウェア、マイクロコード、回路、データ、データベース、データ構造、テーブル、配列、ならびに変数を含むことができる。さらに、好ましい実施形態を、下で述べるコンポーネント、モジュール、およびユニットに関して説明したが、そのような機能要素を、より少数の要素に組み合わせるか、追加の要素に分離することができる。
添付図面は、本明細書に組み込まれ、本明細書の一部を構成するが、現在好ましい実施態様を示し、次のように説明される。
本発明の実施形態が応用例を見出すマルチプロセッサ・コンピューティング・システムを示すブロック図。 本発明の実施形態によって使用されるプログラム・コード変換プロセスを示す概略概要図。 本発明の実施形態によって使用されるマルチプロセッサ・コンピューティング・システムのプログラム・コード変換システムを示す概略概要図。 本発明の例示的実施形態で適用されるメモリ一貫性保護方法を示す概略流れ図。 プログラム・コード変換システムの選択された部分をより詳細に示す概略ブロック図。 仮想メモリ・レイアウトの一部を示す概略図。 仮想メモリ・レイアウトの一部を示す概略図。 仮想メモリ・レイアウトの一部を示す概略図。 仮想メモリ・レイアウトの一部を示す概略図。 仮想メモリ・レイアウトの一部を示す概略図。 プログラム・コード変換システムの選択された部分をより詳細に示す概略ブロック図。 本発明の例示的実施形態でメモリ一貫性保護を提供する方法を示す概略流れ図。 本発明のもう1つの例示的実施形態でメモリ一貫性保護を提供する方法を示す概略流れ図。 プログラム・コード変換システムの選択された部分をより詳細に示す概略図。 プログラム・コード変換システムの選択された部分をより詳細に示す概略図。
以下の説明は、当業者が本発明を成しかつ使用することを可能にするために提供され、本発明者によって企図される本発明の実施の最良の態様を示す。しかし、本明細書で定義される本発明の全般的原理を考慮することで、さまざまな変更が当業者に明らかとなる。
図1に、以下でより詳細に述べるコンポーネント、モジュール、およびユニットを紹介するために、本発明の例示的な実施形態が応用例を見出すシステムおよび環境の概要を与える。図1を参照すると、対象プログラム17は、少なくとも1つの対象プロセッサ3を有する対象コンピューティング・システム1上で実行されることを意図されている。しかし、ターゲット・コンピューティング・システム10は、そうではなく、プログラム・コード変換を実行するトランスレータ・ユニット19を介して対象プログラム17を実行するのに使用される。トランスレータ・ユニット19は、対象コード17からターゲット・コード21へのコード変換を実行し、ターゲット・コード21が、ターゲット・コンピューティング・システム10上で実行可能になる。
当業者にはよく分かるように、対象プロセッサ3は、対象レジスタ5のセットを有する。対象メモリ8は、とりわけ、対象コード17および対象オペレーティング・システム2を保持する。同様に、図1の例のターゲット・コンピューティング・システム10は、複数のターゲット・レジスタ15を有する少なくとも1つのターゲット・プロセッサ13と、ターゲット・オペレーティング・システム20、対象コード17、トランスレータ・コード19、および変換されたターゲット・コード21を含む複数の動作コンポーネントを格納するメモリ18とを含む。ターゲット・コンピューティング・システム10は、通常、マイクロプロセッサベースのコンピュータまたは他の適切なコンピュータである。
1実施形態で、トランスレータ・コード19は、対象命令セット・アーキテクチャ(ISA)の対象コードを、最適化を伴ってまたは伴わずに、もう1つのISAの変換されたターゲット・コードに変換するエミュレータである。もう1つの実施形態で、トランスレータ19は、プログラム・コード最適化を実行することによって、それぞれが同一のISAを有する対象コードをターゲット・コードに変換するアクセラレータとして機能する。
トランスレータ・コード19は、好適には、トランスレータを実施するソース・コードのコンパイルされたバージョンであり、ターゲット・プロセッサ13のオペレーティング・システム20と共に動作する。図1に示された構造が例示のみであり、たとえば、本発明の実施形態によるソフトウェア、メソッド、およびプロセスを、オペレーティング・システム20の中またはその下に常駐するコードで実施できることを理解されたい。対象コード17、トランスレータ・コード19、オペレーティング・システム20、およびメモリ18のストレージ機構は、当業者に既知のとおり、さまざまなタイプのうちのいずれとしてもよい。
図1による装置では、プログラム・コード変換は、ターゲット・コード21が動作している間にターゲット・アーキテクチャ10上で実行するために、ランタイムに動的に実行される。すなわち、トランスレータ19は、変換されたターゲット・コード21とインラインで動作する。トランスレータ19を介する対象プログラム17の実行は、インターリーブされた形で実行される2つの異なるタイプのコードすなわち、トランスレータ・コード19およびターゲット・コード21を伴う。したがって、ターゲット・コード21は、変換されるプログラムの格納された対象コード17に基づいて、ランタイム全体を通じてトランスレータ・コード19によって生成される。
1実施形態で、トランスレータ・ユニット19は、実際にはターゲット・プロセッサ13上でターゲット・コード21として対象プログラム17を実行しながら、対象プロセッサ3および特に対象レジスタ5などの対象アーキテクチャ1の関連部分をエミュレートする。好ましい実施形態では、少なくとも1つのグローバル・レジスタ・ストア27が設けられる(対象レジスタ・バンク27または抽象レジスタ・バンク27とも称する)。マルチプロセッサ環境では、任意選択で、複数の抽象レジスタ・バンク27が、対象プロセッサのアーキテクチャに従って設けられる。対象状態の表現が、トランスレータ19およびターゲット・コード21のコンポーネントによって提供される。すなわち、トランスレータ19は、変数および/またはオブジェクトなどのさまざまな明示的プログラミング言語デバイス内に対象状態を格納する。変換されたターゲット・コード21は、比較によって、ターゲット・コード21のターゲット命令によって操作されるターゲット・レジスタ15内およびメモリ位置18内で暗黙のうちに対象プロセッサ状態を提供する。たとえば、グローバル・レジスタ・ストア27の低水準表現は、単純に、割り振られたメモリの領域である。しかし、トランスレータ19のソース・コードでは、グローバル・レジスタ・ストア27は、より高いレベルでアクセスでき操作できる、データ配列またはオブジェクトである。
用語「基本ブロック」は、当業者にはよくわかるものであろう。基本ブロックは、正確に1つのエントリ・ポイントおよび正確に1つのエクシット・ポイントを有し、ブロック・コードを単一制御パスに制限する、コードのセクションである。この理由から、基本ブロックは、制御フローの有用な基礎単位である。好適には、トランスレータ19は、対象コード17を複数の基本ブロックに分割し、ここで、各基本ブロックは、単一のエントリ・ポイントにある最初の命令と単一のエクシット・ポイントにある最後の命令(ジャンプ命令、呼出し命令、または分岐命令など)との間の命令のシーケンシャル・セットである。トランスレータ19は、これらの基本ブロックのうちの1つだけを選択する(ブロック・モード)か、基本ブロックのグループを選択する(グループ・ブロック・モード)ことができる。グループ・ブロックは、好適には、単一の単位として一緒に扱われなければならない複数の基本ブロックを含む。さらに、トランスレータは、対象コードの同一の基本ブロックを表すが異なるエントリ条件の下にあるアイソブロックを形成することができる。
好ましい実施形態では、中間表現(IR)のツリーが、対象命令シーケンスに基づいて、オリジナルの対象プログラム17からのターゲット・コード21の生成のプロセスの一部として生成される。IRツリーは、対象プログラムによって計算される式および対象プログラムによって実行される動作の抽象表現である。その後、ターゲット・コード21が、IRツリーに基づいて生成される(「移植(plant)される」)。IRノードの集合は、実際には有向非循環グラフ(DAG)であるが、単に「ツリー」と称する。
当業者が理解するとおり、1実施形態で、トランスレータ19は、C++などのオブジェクト指向プログラミング言語を使用して実施される。たとえば、IRノードは、C++オブジェクトとして実施され、他のノードへの参照は、これらの他のノードに対応するC++オブジェクトへのC++参照として実施される。したがって、IRツリーは、互いのさまざまな参照を含むIRノード・オブジェクトの集合として実施される。
さらに、議論している実施形態では、IR生成は、対象プログラム17が動作することを意図された対象アーキテクチャの特定の特徴に対応するレジスタ定義のセットを使用する。たとえば、対象アーキテクチャ上の物理レジスタ(すなわち、図1の対象レジスタ5)ごとに、独自のレジスタ定義がある。したがって、トランスレータ内のレジスタ定義は、IRノード・オブジェクトへの参照を含むC++オブジェクト(すなわち、IRツリー)として実施することができる。レジスタ定義のセットによって参照されるすべてのIRツリーの集合を、ワーキングIRフォレストと称する(それぞれが1つのIRツリーを参照する、複数の抽象レジスタ・ルートを含むので、「フォレスト」)。これらのIRツリーおよび他のプロセスは、好適には、トランスレータ19の部分を形成する。
図1は、さらに、ターゲット・アーキテクチャ10のメモリ18内のネイティブ・コード28を示す。対象コード17のランタイム変換から生じるターゲット・コード21と、ターゲット・アーキテクチャ用に直接に記述されるかコンパイルされるネイティブ・コード28との間には、区別がある。いくつかの実施形態で、対象プログラムの制御フローが、対象ライブラリなど、それに関して対象コードのネイティブ・バージョンが存在する対象コード17のセクションに入ることをトランスレータ19が検出するとき、ネイティブ・バインディングが、トランスレータ19によって実施される。対象コードを変換するのではなく、トランスレータ19は、その代わりに、同等のネイティブ・コード28をターゲット・プロセッサ13上で実行させる。例示的な実施形態では、トランスレータ19は、その開示が参照によって本明細書に組み込まれているPCT出願公告第WO2005/008478号でより詳細に述べられている、ネイティブ・コード呼出しスタブまたはターゲット・コード呼出しスタブなど、定義されたインターフェースを使用して、生成されたターゲット・コード21をネイティブ・コード28にバインドする。
図2に、ターゲット・コンピューティング・システム10上で動作する時のトランスレータ・ユニット19をより詳細に示す。上で述べたように、トランスレータ19のフロント・エンドは、デコーダ・ユニット191を含み、このデコーダ・ユニット191は、複数の対象コード・ブロック171a、171b、171c(通常はそれぞれが対象コードの1つの基本ブロックを含む)を提供するために対象プログラム17の現在必要なセクションを復号し、トランスレータ19の後の動作を助ける、各対象ブロックおよびそこに含まれる対象命令に関するデコーダ情報172を提供することもできる。いくつかの実施形態で、トランスレータ19のコア192内のIRユニットは、復号された対象命令から中間表現(IR)を作り、最適化は、中間表現に関して折よく実行される。トランスレータ19のバック・エンドの一部としてのエンコーダ193は、ターゲット・プロセッサ13によって実行可能なターゲット・コード21を生成する(移植する)。この単純な例では、3つのターゲット・コード・ブロック211a〜211cが、対象システム1上での対象コード・ブロック171a〜171cの実行と同等の作業をターゲット・システム10で実行するために生成される。また、エンコーダ193は、ターゲット・ブロックが動作する環境のセッティングおよび適切な場合にトランスレータ19に戻して制御を渡すことなどの機能を実行する、ターゲット・コード・ブロック211a〜211cの一部またはすべてに関する制御コード212を生成することができる。
いくつかの例示的実施形態で、トランスレータ19は、さらに、対象コード17内のシステム呼出しを識別するように構成される。上で述べたように、ターゲット・システム10は、異なるターゲット・オペレーティング・システム20および異なるターゲットISAを使用する場合があり、したがって、対象ISAと比較して異なるシステム呼出しのセットを有する場合がある。ここで、変換フェーズにおいて、デコーダ191は、対象ISAのシステム呼出しを検出するように構成され、対象コード17は、対象オペレーティング・システム2を呼び出す。ほとんどの現代のオペレーティング・システムは、通常のユーザ・レベル・プログラムとオペレーティング・システムの残りとの間にあるライブラリ、通常はglibcまたはMS LibCなどのCライブラリ(libc)を提供する。このCライブラリは、オペレーティング・システム2のカーネルに情報を渡すことと、より特権を与えられたスーパーバイザ・モードへの切替、ならびに特権モードで行われる必要がないすべてのデータ処理および準備の低水準の詳細を処理する。POSIXおよび類似するシステムでは、いくつかの一般的な例のシステム呼出しは、open、read、write、close、wait、execve、fork、およびkillである。多くの現代のオペレーティング・システムが、数百個のシステム呼出しを有する。たとえば、Linuxは、ほぼ300個の異なるシステム呼出しを有し、FreeBSDは約330個の異なるシステム呼出しを有する。さらに、いくつかの場合に、ターゲット・コードの制御を維持し、実行制御をターゲット・コード21からターゲットOS 20に直接には渡さないことが望まれる。例示的実施形態では、対象コード17内で識別されるシステム呼出しのうちの少なくとも一部が、本明細書で「x_call」と称する、トランスレータ19にコール・バックする関数呼出しを含むターゲット・コード21を生成させる。これらのx_callは、ターゲット・コード21には、ターゲットOS 20に対してシステム呼出しが行われたかのように見えるが、実際には、実行制御をターゲット・コード21からトランスレータ19に返す。例示的な実施形態では、トランスレータ19は、そのようなx_callによってターゲット・コード21から呼び出されるターゲットOSインターフェース・ユニット(「FUSE」とも呼ばれる)194を含む。FUSE 194は、適切な場合にターゲットOS 20への実際のシステム呼出しを実行することを含めてx_callに応答し、その後、ターゲット・コード21にリターンする。したがって、トランスレータ19は、ターゲット・コード21によって行われるシステム呼出しを効果的にインターセプトし、ターゲット・コード21によって要求されるシステム呼出しを監視し、制御する機会を有すると同時に、ターゲット・コード21は、それでも、システム呼出しがターゲットOS 20に対して行われたかのように働く。
やはり図2に示されているように、いくつかの例示的実施形態で、トランスレータ19は、ターゲット・コード21の実行中に送出される例外シグナルを選択的にインターセプトするように構成される。トランスレータ19は、ターゲット・コード21の実行によって送出される例外シグナルのうちの少なくともいくつかのタイプを受け取るためにターゲットOSに登録される1つまたは複数の例外ハンドラ195を含む。したがって、例外ハンドラ195は、適切な場合に、例外の処理に選択的に介入し、ある種の例外が送出されたことをトランスレータ19に知らせることができる。ここで、例外ハンドラ195は、例外を処理し、適切に実行を再開する(たとえば、ターゲット・コード21にリターンすることによって)か、例外シグナルをターゲットOS 20内などの適切なネイティブ例外ハンドラに渡すと決定するかのいずれかを行う。1実施形態で、トランスレータ19は、選択された例外シグナルを受け取り、受け取られた例外シグナルのうちのいくつかを適切な例外ハンドラ195による処理のために渡すプロキシ・シグナル・ハンドラ(図示せず)を提供する。
図3は、本発明の例示的実施形態によるプログラム・コード変換システムを示す概略図である。
まず、図示と説明の簡単さとのために、図3に、対象コードの別々の部分170a、170b(SC1およびSC2)を実行し、メモリ・サブシステム(MS)8内に格納されたデータにアクセスする複数のプロセッサ3a、3bを有するマルチプロセッサ対象コンピューティング・システム1を示す。
最も一般的に、プロセッサ3a、3b上で実行される対象コード部分170a、170bは、仮想アドレス空間(VAS)81を参照することによって物理メモリ8にアクセスし、VAS 81は、対象コード170a、170b内で参照されるメモリ・アクセス・アドレスをメモリ・サブシステム8内の物理メモリ・アドレスにマッピングする。したがって、用語 仮想アドレス空間は、当技術分野で、コードのアドレス空間を物理アドレッシングから区別するのに使用される。
いくつかの状況で、第1および第2の対象コード部分170a、170bの両方が、物理メモリ8の同一領域にアクセスすることを意図される。図3に示された例の状況では、メモリ8の1ページなどの区域が、両方の対象コード部分170a、170bによって仮想アドレス空間81にマッピングされる。他の場合には、明示的に共有されるメモリ区域が、2つの異なる仮想アドレス空間にマッピングされる。
上で述べたように、対象コンピューティング・アーキテクチャ1のメモリ一貫性モデルは、メモリ・アクセスのセマンティックスと、プロセッサ3a、3bおよびメモリ・サブシステム8が対象コード17のオリジナル・プログラム順に関してメモリ・アクセスを並べ変えることのできる範囲とを定義する。この例では、対象アーキテクチャ1は、比較的強い順序付け制約を有する。すなわち、対象メモリ一貫性モデルは、連続するストアおよび連続するロードが順序付けられることを定義することができが、ロードが続くストアまたはストアが続くロードをプログラム順と比較して並べ変えることができることを定義することができる。この例の対象アーキテクチャのメモリ一貫性モデルを、次の表1に短く要約することができる。
Figure 0005583409
対象コード17は、正しく機能するためにメモリ一貫性モデルに頼る。実際には、対象コードは、しばしば、対象ハードウェアの現在入手可能なバージョンで働く点まで記述され、デバッグされる。しかし、対象コンピューティング・システム1の異なるバージョンとしてのターゲット・コンピューティング・システム10で対象コード17を実施すること、または完全に異なるターゲット・コンピューティング・システム10上で動作するように対象コード17を変換することは、対象コード内の弱さを明らかにする可能性がある。ここで、とりわけAlpha、AMD64、IA64、PA−RISC、POWER、SPARC、x86、およびzSeries(IBM 360、370、390)を含む、さまざまな異なる形の緩和されたメモリ一貫性を使用するマルチプロセッサ・システムの多数の実用的な例がある。
図3に示されているように、ターゲット・コンピューティング・システム10上のトランスレータ・ユニット(TU)19は、ターゲット・システムの物理メモリ18への参照を用いる複数のターゲット・プロセッサ13a、13b上での実行のために対象コード17をターゲット・コード21に変換する。この例では、ターゲット・コンピューティング・システム10は、対象システム1のメモリ一貫性モデルより弱い、より緩和された制約を伴うメモリ一貫性モデルを有する。たとえば、ターゲット・メモリ一貫性モデルは、順序付けが全くないことを指定することができ、ターゲット・メモリ一貫性モデルは、次の表2に要約されているように、プログラム・セマンティックスを維持しながらロードおよびストアを自由に並べ変えることを許容する。
Figure 0005583409
当業者にはよく分かるように、メモリ・サブシステム18は、メモリ・アクセス速度を高めるように設計されたさまざまなキャッシュ構造(図示せず)を含むことができる。メモリ・サブシステム18は、とりわけ、オンチップまたはオフチップのスタティックRAMによって提供されるキャッシュ・ラインと、ダイナミックRAMのメイン・メモリと、大容量ディスク・ストレージとを含む物理メモリの複数の層を含むことができ、これらの物理メモリは、対象コンピューティング・システムのアーキテクチャに従ってメモリ・サブシステムによって管理される。キャッシュ構造が一貫したままになることを保証するためにキャッシュ一貫性(キャッシュ・コヒーレンシとも呼ばれる)を保護する多数の機構があるが、これらは、検討中の例には特に関連せず、本明細書でさらには述べない。
これから、単純化された例を提供して、メモリ一貫性エラーがターゲット・コンピューティング・システム10内で生じ得る形のいくつかを示す。この例では、2つのメモリ位置(*area1、*area2)がアクセスされる。これらの位置は、これらがターゲット・メモリ・サブシステム18のキャッシュ構造内で同一のキャッシュ・ライン上にないことを保証し、メモリ18へのアクセスが順序外れで発生する可能性を高めるために、異なるメモリ・ページにあると仮定する。最初に、我々は、これらの位置に格納される値を、*area1=0および*area2=0と定義する。第1プロセッサ13aは、ターゲット・コードの第1部分21aを実行しつつあり、この第1部分21aは、次の擬似コードに示されているように、*area2に格納された値を監視し、次に、*area1の値に従って変数「a」をセットする。
while(*area2==0){}
int a=*area1
第2プロセッサ13bは、ターゲット・コードの第2部分21bを実行し、この第2部分21bは、2つのメモリ位置に格納された値を変更する命令を含む。
*area1=1
*area2=1
直観的に、我々は、現在変数「a」に値「1」がセットされていなければならないと期待する。実際に、強く順序付けされたシーケンシャルに一貫したシステムでは、これが真になるはずである。しかし、メモリ一貫性エラーが生じ、その代わりに変数「a」に「0」がセットされる場合がある。このエラーは、2つの通常の理由から生じ得る。第1に、緩和されたストア順序付けは、第2のストア(*area2=1)が第1のストア(*area1=1)の前にメモリに達することを可能にする場合がある。その後、第1プロセッサ13aは、*area1の古い値を読み取ることができる。第2に、緩和されたロード順序付けは、投機的に実行されるロードを含むロードが、第1プロセッサ13a内の命令パイプライン内で順序外れで発行されることを可能にする。この場合に、第1プロセッサ13aが、*area2が変化するのを待っている間に、*area1の値が、既に投機的にロードされ、テストが成功したならば再ロードされない。これは、第2プロセッサ13bからのストアが正しく順序付けられる場合であっても、第1プロセッサ13aが、それでも、更新された値を異なる順序で読み取る可能性があることを意味する。
ほとんどのマルチプロセッサ・システムは、プログラム・コードがハードウェアの緩和されたメモリ一貫性モデルをオーバーライドし、より強い順序付け制約を課し、これによってメモリ一貫性エラーに対する保護の手段を提供することを可能にするセーフティ・ネットを提供する。そのようなセーフティ・ネット機構の1つは、適切な同期化ポイントを形成するためにターゲット・コード21a、21b内でシリアライゼーション命令を使用するが、もう1つのそのようなセーフティ・ネットは、ページ・テーブル内で属性をセットすることによってメモリのある種の区域を安全保護するためのものである。下でより詳細に述べるように、これらおよび他のメモリ一貫性保護機構を、単独でまたは組み合わせて使用することができる。
まず、シリアライゼーション命令の使用を調べると、1つの一般的に使用可能な形は、フェンス命令である。フェンス命令は、プログラム命令を、フェンスに先行する命令とフェンスに続く命令とに分割するメモリ・バリアを形成する。フェンスに先行する命令によって引き起こされるメモリ・アクセスは、フェンスに続く命令によって引き起こされるメモリ・アクセスの前に実行される。したがって、フェンスは、メモリ一貫性を得るのに有用であるが、かなりの性能ペナルティをこうむる。IBM POWER命令セット・アーキテクチャの命令SYNCが、フェンス命令の主な例である。軽量同期化(LWSYNC)命令またはI/Oのインオーダー実行強制(EIEIO)命令など、フェンス命令の他の特定の変形形態も、POWER ISAで使用可能である。他の例は、Alpha ISAのMBおよびMBW、x86 ISAのMFENCE、およびSPARC ISAのMEMBARを含む。
一部のISAは、特定のプロセッサ内の命令の実行を同期化する1つまたは複数のシリアライゼーション命令をも提供する。すなわち、命令同期化は、プロセッサに、同期化の前のすべての命令の実行を完了させ、既に実行を開始されている可能性がある同期化の後のすべての命令の結果を破棄させる。命令同期化が実行された後に、プログラム内の後続命令は、実行を開始することができる。ここで、IBM POWER命令セット・アーキテクチャの命令ISYNCが、そのような命令同期化を実行する命令の主な例である。
これらのシリアライゼーション命令は、ターゲット・マシンのデフォルト・メモリ一貫性モデルと異なるメモリ一貫性モデルをアサートするためにターゲット・コードに挿入される。上で述べた例の擬似コードへのこれらのシリアライゼーション命令の挿入は、次のように、変更されたターゲット・コード21aおよび21bをもたらす。
第1プロセッサ13aについて、シリアライゼーション命令ISYNCが挿入され(表1で指定されたロード−ロード順序付けのゆえに)、その結果、ターゲット・コード21aは、次のようになる。
while(*area2==0){}
isync
int a=*area1
第2プロセッサ13bについて、シリアライゼーション命令SYNCが挿入され、その結果、ターゲット・コード21bは、次のようになる。
*area1=1
sync
*area2=1
ここで、メモリ一貫性エラーに対する保護を提供するもう1つの機構に移ると、一部のターゲット・コンピューティング・システムは、ページ・テーブル属性の操作を可能にする。特定の例として、IBM POWERアーキテクチャは、メモリ18のある種の区域を、キャッシング禁止とキャッシュ保護(以下ではストア順序付けされると呼ぶ)との両方として指定することを可能にする。別々のストア命令が、メモリのそのような保護された区域にアクセスする場合に、それらのストアは、プログラムによって指定される順序で実行される。便利なことに、メモリの一部のページは、ストア順序付けされるものとしてマークされ、メモリの他のページは、ストア順序付けされないものとしてマークされる。ストア順序付けされたページは、ターゲット・マシンのデフォルト・メモリ一貫性モデルとは異なるメモリ一貫性モデルをアサートするのに使用することができる。しかし、そのようなストア順序付けされたページへのアクセスは、ストア順序付けされないページへのアクセスと比較して、通常、性能ペナルティをこうむる。
これから、シリアライゼーション命令およびストア順序付けされたページなどのメモリ一貫性保護機構に関連する大きい性能ペナルティを最小化するか完全に回避しながら、上で概要を示したメモリ一貫性の問題に対処する本発明の例示的な実施形態を、より詳細に説明する。
図4は、図3を参照して上で述べたターゲット・コンピューティング・システム10内など、マルチプロセッサ・コンピューティング・アーキテクチャ内でメモリ一貫性を保護するために本発明の例示的実施形態で適用される方法の全般的概要を提供する概略流れ図である。
ステップ401は、第1のメモリ一貫性モデルの下で少なくとも第1ターゲット・コード部分21aを実行することを含む。すなわち、ステップ401では、少なくともターゲット・コードの第1部分21aが、ターゲット・コンピューティング・システムのアーキテクチャに適用可能な第1デフォルト・メモリ一貫性モデルの下でターゲット・コンピューティング・システム10内で実行される。
ステップ402は、第1ターゲット・コード部分21aと少なくとも1つの他の第2プログラム・コード部分21bとの両方によってアクセス可能な共有メモリ区域へのアクセスの要求を検出することを含む。すなわち、ステップ402では、トランスレータ・ユニット19が、少なくとも第1および第2のターゲット・コード部分21a、21bの両方からアクセス可能である(またはアクセス可能になる)メモリ18内の共有メモリ区域に関するメモリ・アクセス要求を検出するように構成される。さまざまな機構が、そのような共有メモリ区域にアクセスするために使用可能であり、さまざまな検出機構が、下でより詳細に述べるように、本明細書で考慮される。
ステップ403は、第1ターゲット・コード部分21a内の少なくともある種の命令またはある種の命令のグループが、検出された共有メモリ区域にアクセスするとき保護された第2のメモリ一貫性モデルの下で実行するように、メモリ一貫性保護機構を適用することを含む。ここで、トランスレータ・ユニット19は、メモリ一貫性保護機構を選択的に適用し、このメモリ一貫性保護機構は、第1ターゲット・コード部分21a内の選択された命令に、第1モデルとは異なる第2のメモリ一貫性モデルを強制する形で、識別された共有メモリ区域にアクセスさせる。具体的に言うと、保護された第2のメモリ一貫性モデルは、本明細書で注記されるタイプのメモリ一貫性エラーを防ぐことを目指す、第1モデルより強い順序付け制約を提供する。その後、第2コード部分21bも、その共有メモリ区域へのアクセスを試みるときは、第2プログラム・コード部分21b内の少なくとも選択された命令も今や検出された共有メモリ区域に関して保護された第2のメモリ一貫性モデルの下で実行するように、メモリ一貫性保護機構が、さらに、選択的に適用される。
この例示的実施形態では、第1および第2のターゲット・コード部分21a、21bが、当初は第2のメモリ一貫性モデルに従って制約されるのではなく、当初はデフォルト第1モデルの下で実行される。すなわち、ターゲット・コードは、最初に、ターゲット・システムのより高速のデフォルト・メモリ一貫性モデルに従って作成され、実行される。メモリ18のうちで共有メモリ区域として検出された区域にアクセスする識別されたターゲット・コード命令だけにメモリ一貫性保護機構を適用することによって、第2のメモリ一貫性モデルの制限および制約に起因してこうむる性能ペナルティが、より全般的にターゲット・コード21によってアクセスされるすべてのメモリにまたがって機能強化された第2のメモリ一貫性モデルを適用することと比較して、実質的に減らされる。
図5は、本発明の例示的実施形態をさらに示すためにターゲット・コンピューティング・システム10の選択された部分を示す概略図である。図5では、対象コード17が、ターゲット・コード21に変換されるとき複数のターゲット・コード部分(たとえば、複数のスレッド)として実行されるマルチスレッド式アプリケーション・プログラムである。3つのそのようなターゲット・コード部分21a〜21c(T1、T2、T3)が、例示のために示されている。
対象コード17は、好適には、トランスレータ19のサポートを得てターゲット・システム10上で実行されるターゲット・コード21に変換されるアプリケーション・プログラムである。一般的な例として、対象コード17は、ウェブ・サーバ、ディジタル・コンテンツ・サーバ(たとえば、ストリーミング・オーディオ・サーバまたはストリーミング・ビデオ・サーバ)、ワード・プロセッサ、スプレッドシート・エディタ、グラフィックス・イメージ編集ツール、またはデータベース・アプリケーションなど、複雑なプログラムである。ターゲット・コンピューティング・システム10は、しばしば、オペレーティング・システム20およびトランスレータ19に関連するものなどの他のタスクに加えて、多数のそのようなアプリケーションを同時に実行することを要求される。
動的バイナリ変換のコンテキストで、対象コード17は、特定の対象アーキテクチャ1に固有の作成された(たとえば、コンパイルされた)バイナリ実行可能ファイルの形をとることができる。したがって、対象コード17の人間による介入または再検討の機会はなく、その代わりに、対象コード17をターゲット・コンピューティング・システム10での実行用のターゲット・コード21(すなわち、ターゲット・バイナリ)に自動的に変換することが望まれる。本明細書で述べる機構は、少なくともいくつかの実施形態で、メモリ一貫性をも保護しながら、そのような変換プロセスを自動的に実施することを可能にする。
多くの市販アプリケーション・プログラムは、複数のプロセスおよび/または複数のプロセス・スレッドとして実行される。ここで、正確な実施態様は、特定のコンピューティング・アーキテクチャに依存して異なるが、各プロセスは、一般に、比較的大量の状態情報(一般にコンテキスト情報とも呼ばれる)を有し、それ自体の仮想アドレス空間を有する。対照的に、親プロセスは、1つまたは複数のスレッドをspawnし、これらのスレッドは、通常、その親プロセスの状態情報を共有し、同一プロセスからの2つのスレッドは、通常、親プロセスの仮想アドレス空間を共有する。同一親プロセスからのスレッドの間の切替は、通常、プロセスの間のコンテキスト切替より高速であり、マルチスレッディングは、現代のマルチプロセッサ・システムでの人気のあるプログラミング・モデルおよび実行モデルである。用語「プロセス」および「スレッド」は、当業者によって幅広く使用され、理解されるが、本明細書の説明は、その代わりに全般的に、説明を明瞭にするためにプログラム・コードの「部分」に言及する。
図5に示されているように、既に説明したユニットに加えて、例示的実施形態のトランスレータ19は、アドレス空間割振りユニット(ASAU)196、共有メモリ検出ユニット(SMDU)197、およびメモリ保護ユニット(MPU)198をさらに含む。
ASAU 196は、複数の仮想アドレス空間領域(VASR)181を複数のターゲット・コード部分21a、21b、21cに割り振るように構成される。第2に、ASAU 196は、生成されたターゲット・コード部分21a〜21cに複数の割り振られたVASR 181のうちの異なるVASRにアクセスするように指示するように構成される。
SMDU 197は、ターゲット・コード部分21a、21b、21cのうちの1つによる、共有メモリ区域にアクセスする要求を検出するように構成され(これについては特定の実施形態を下で述べる)、メモリ一貫性保護が必要である、このターゲット・コード部分内の1つまたは複数のターゲット・コード命令を識別する。
MPU 198は、メモリ一貫性保護をSMDU 197によって識別された選択されたターゲット・コード命令に適用するように構成される。このメモリ一貫性保護は、ターゲット・コードに、異なるメモリ一貫性モデル(この場合にはより強い順序付け制約を有するモデル)を強制させて、メモリ一貫性を保ち、これによって、対象コード17によって要求されるメモリ一貫性モデルを維持する。好適には、MPU 198は、後で詳細に述べるように、ターゲット・コードにシリアライゼーション命令を適用し、かつ/またはストア順序付けされたページを選択的にアサートする。
図5の例では、3つのターゲット・コード部分T1、T2、T3(21a〜21c)は、それぞれが、それぞれの仮想アドレス空間領域181a〜181cに関連して図示されている。さらに、この第1実施形態では、ASAU 196は、共有メモリ区域に関して使用される追加のVASR 181dを割り振る。
ASAU 196の1つの例示的な実施形態では、ターゲット・コンピューティング・システム10が、複数の異なるアドレッシング・モードを提供する。最も一般的に使用可能なコンピューティング・システムは、32ビット仮想アドレッシング・モードを提供し、プログラム・コードの特定の部分の仮想アドレス空間が、物理メモリ18の232個の個々の要素(すなわち、バイト、ワード)をアドレッシングできるようになっている。したがって、多くの市販アプリケーション・プログラムは、32ビット仮想アドレス空間で動作することを期待する。しかし、いくつかのコンピューティング・システムは、64ビット・モードなどのより大きいアドレッシング・モードをも可能にし、このモードを、より小さい32ビット・アドレッシング・モードの代わりにまたはそれと一緒に使用することができる。便利なことに、トランスレータ・ユニット19は、64ビット・アドレッシング・モードで動作するようにセットされ、これによって、64ビット仮想アドレス空間(下ではトランスレータ仮想アドレス空間またはトランスレータVAS 180と称する)を与えられる。次に、アドレス空間割振りユニット196は、より大きい64ビット・トランスレータVAS 180内で複数の別々の32ビット仮想アドレス空間領域(VASR)181を割り振る。複数の24ビット仮想アドレス空間領域を提供するために副分割される32ビット・トランスレータVASなど、他のアドレッシング・オプションが、やはり使用可能であり、同一の効果を達成するために適切な組合せで適用され得る。
ASAU 196は、ターゲット・コード21の各部分をVASR 181のうちの選択された1つまたは複数に向けるようにさらに構成される。図2に関して上で注記したように、ターゲット・コードの各部分21aは、トランスレータ19によって処理される最小単位として個々の命令の短いシーケンスを含む複数のブロック211に副分割される。これらの命令の一部は、ロードまたはストアなどのメモリ・アクセスを行い、特定のターゲット・コード部分21a内の命令のほとんどは、その部分に割り振られたVASR 181aに関するプライベート・メモリにアクセスする。しかし、ある種の命令または命令のグループは、共有メモリに関するメモリ・アクセスを行い、共有メモリ区域に関するVASR 181dにアクセスするように指示される。
1実施形態で、ターゲット・コード21は、メモリ動作を実行するときベース・レジスタBR 15aを参照するように生成される。ベース・レジスタ15aは、ほとんどのアーキテクチャについて高速で容易に使用可能なストレージ位置であり、「ベース+オフセット」タイプのメモリ・アクセスで効率的に使用できるが、適切な場合には、他の適切なストレージを使用することができる。ベース・レジスタBRは、ターゲット・コードのこの部分(すなわち、このスレッドまたはこのプロセス)のコンテキスト情報の一部として便利に提供される。ベース・レジスタBR 15aは、ターゲット・コード21の生成された部分によって使用される、32ビットVASR 181のうちの1つの開始アドレスとして64ビット・トランスレータVAS 180内の開始アドレスを与えるベース・アドレスを格納するのに使用される。次に、ターゲット・コードの各部分21a、21b、21cは、ベース・レジスタBR 15a内の開始アドレスを参照してメモリ・アクセスを行うように、トランスレータ19によって生成される。
図5の図示の例では、ターゲット・コード部分21aについて、ベース・レジスタBRは、64ビット値「1<<32、232」を含み、これによって、スレッドT1は、この64ビット・ベース値からのオフセットとしてその割り振られた最初の(32ビット)VASR 181aを参照してメモリ・アクセスを行う。同様に、第2ターゲット・コード部分21bについて、ベース・レジスタBRは、第2の32ビットVASR 181bの64ビット開始アドレスとして値「2<<32、232」を含む。
ここで、例の対象コード17は、32ビットVAS内で動作するように作成されており、したがって、32ビット・アドレスのみに関係する。したがって、トランスレータ19は、32ビットVASR 181を参照する、ターゲット・コードの関連部分21a〜21bを生成する。しかし、これらの32ビットVASR 181は、より大きい64ビット・トランスレータVAS 180から割り振られるので、ターゲット・コードは、メモリ・アクセスを行うときフル64ビット・アドレスを使用する。これは、32ビットVASR 181を参照する下位32ビット・アドレスをベース・レジスタBR 15aで指定されるフル64ビット・ベース・アドレスに連結することによって便利に達成される。たとえば、ターゲット・レジスタr31は、64ビット・ベース・アドレスを保持するベース・レジスタとして働き、ターゲット・レジスタr6は、ターゲット・コード内で所望の32ビット・アドレスを保持するのに使用される。これらのアドレスは、次の擬似コードによって示されるように組み合わされる。
r6=0x00003210;ターゲット・コードVASR内の32ビット・アドレス
r31=0x00000001 00000000;このVASRの64ビット・ベース・アドレス
add r3,r31,r6;アドレスをr3に組み合わせる
lwz r5,0(r3);r3の組み合わされたアドレスを使用してメモリにアクセスする
さらに、ASAU 196は、ターゲット・コード部分21a内のある種の命令に、割り振られたVASR 181のうちの異なる1つを参照するように指示するように構成される。具体的に言うと、共有メモリへのアクセスに関するある種の命令が、共有メモリ区域用に予約されたVASR 181dに向けられる。
1つの例の実施態様で、ベース・レジスタBR 15aで与えられる開始アドレスが変更され、ターゲット・コード21内の後続命令が、その後、割り振られたVASR 181のうちの異なる1つを参照するようになる。すなわち、ベース・レジスタBR 15aに格納されたベース・アドレスが、変更され、その変更されたベース・アドレスは、ベース・レジスタが以前の値にリセットされるまで、ターゲット・コードの特定のブロック内の1つまたは複数の後続命令によって使用される。ここで、上の例と同様に、最初にBR 15aで与えられる値は、第1のターゲット・コード部分21aに割り振られたVASR 181aの64ビット開始アドレスとしての「1<<32、232」である。このベース・アドレスを一時的に「0」に変更することは、図示の例では、ターゲット・コード命令に、その代わりに共有メモリ区域用に予約された第4のVASR 181dを参照させる。BR15aを値「1<<32、232」に戻すことによって、もう一度、ターゲット・コード21aが、割り振られた第1のVASR 181aを参照するようになる。
便利なことに、ベース・レジスタ15aのデフォルト・ベース・アドレスは、ターゲット・コードのこの部分21aのコンテキスト/状態の一部としてセットされる。したがって、デフォルト値が、コンテキストから容易に使用可能であり、各ターゲット・コード・ブロック211の始めなど、必要なときデフォルト値をすばやくセットすることができる。
もう1つの例の実施態様では、ASAU 196は、やはり図5に示された少なくとも2つのベース・レジスタ15a、15bを参照するターゲット・コード命令を選択的に生成するように構成される。便利なことに、第1ベース・レジスタBR1は、ターゲット・コードの現在の部分21a〜21cに割り振られたVASR 181a〜181cのベース・アドレスを保持する。それに対し、第2ベース・レジスタBR2は、共有メモリ区域に割り振られたVASR 181dのベース・アドレスを保持する。ここで、ターゲット・コード命令は、第1ベース・レジスタBR1、第2ベース・レジスタBR2、またはこの両方の組合せに関してメモリ・アクセスを実行するように生成される。したがって、全体を通じて第1ベース・レジスタBR1だけを参照するようにターゲット・コードの第1部分21aを生成することによって、ターゲット・コードのこの部分が、それぞれの割り振られたVASR 181aに関してのみ動作するようになる。しかし、ターゲット・コード命令が、その代わりにレジスタBR2内のベース・アドレスを参照する場合に、そのターゲット・コードは、共有メモリ区域のVASR 181dにアクセスするように指示される。第1ベース・レジスタBR1および第2ベース・レジスタBR2への参照を選択的に移植することによって、ASAU 196は、どのVASRがターゲット・コードによってアクセスされるのかを制御するように構成される。
SMDU 197は、ターゲット・コードの部分21a、21b、21cのうちの1つによる、共有メモリ・エリアにアクセスする要求を検出するように構成される。第1に、この要求は、他のスレッドまたはプロセスと共有される明示的共有メモリ区域を初期化する要求の形を取る場合がある。第2に、この要求は、別のスレッドの仮想アドレス空間内で既にマッピングされているメモリ区域にアクセスする要求など、共有メモリを間接的に要求する形を取る場合がある。明示的に共有されるメモリの検出を、まず図6を参照して述べる。次に、間接的に共有されるメモリの検出を、図7を参照してより詳細に述べる。
上で述べたように、トランスレータ19は、実行中のターゲット・コード21によって行われるシステム呼出しを監視し、インターセプトするように構成される。具体的に言うと、x_callが、実行制御をトランスレータ19内のFUSE 194に渡すために設けられ、これによって、mmap()などのメモリ・マッピング・システム呼出しの挙動をエミュレートする。
x_callが共有メモリに関係しない場合には、好適には、システム呼出しが、ターゲット・コードの実行中の部分に割り振られたVASR 181にプライベート非共有ページをロードするなど、必要なアクションを行うためにターゲットOSに対して行われる。次に、実行制御が、FUSE 194を介してターゲット・コードに返され、ターゲット・コードは、ターゲット・システム呼出しからリターンするかのようにコンテキストを受け取る。
しかし、x_callが共有メモリに関係する場合には、アクションは、共有メモリ検出ユニット197によって行われる。ここで、x_callまたは少なくともx_callから導出される情報が、SMDU 197に渡される。特定の例として、ターゲット・オペレーティング・システム20は、shmgetまたはmmap()などのメモリ・マッピング・システム呼出しをサポートする。UNIXおよびLINUXタイプのオペレーティング・システムでの特定の例として、mmap()システム呼出しは、通常、mmap(start,length,prot,flags,fd,offset)の形をとって、ファイル記述子fdによって指定されるファイルまたは他のオブジェクトから仮想メモリ内のアドレスstartへの、offsetオフセットで始まるlengthバイトのマッピングを要求する。匿名ファイルについて、引数fdはnullである。引数protは、読取り保護および書込み保護をセットする所望のメモリ保護を記述する。パラメータflagsは、とりわけ、このオブジェクトをマッピングするすべての他のプロセスとこのマッピングを明示的に共有するフラグMAP_SHAREDを含む。代替案では、パラメータflagsは、プライベートなコピー−オン−ライト・マッピングを作成するフラグMAP_PRIVATEを含む。したがって、mmap()システム呼出しは、ターゲット・コード内で同等のx_call(たとえば、x_mmap())として移植され、プライベート・メモリ区域を明示的に要求することができ(その場合には、対応するmmap()システム呼出しが、上で注記したようにターゲットOS 20に渡される)、あるいは、共有メモリ区域を明示的に要求することができ、これによって、アクションがSMDU 197によって行われる。
図6は、明示的共有メモリをマッピングする要求に関してSMDU 197によって行われるアクションを示すための、図5に示されたターゲット・コンピューティング・システムのより詳細な概略図である。具体的に言うと、図6は、トランスレータVAS 180の一部の概略表現である。
図6に示されたこの例では、ターゲット・コードの現在実行中の部分21aは、スレッドT1であり、明示的に共有されるメモリ区域182aを要求するためx_mmap()システム様関数呼出しを含む。しかし、要求される共有メモリ区域182aは、この特定のスレッドT1 21aに関連する仮想アドレス空間領域181aにマッピングされていない。そうではなく、要求された共有メモリ区域182aと同一のサイズおよびオフセットのメモリ区域182dが、その代わりに、共有メモリ用に予約された仮想アドレス空間領域181dにマッピングされる。要求された共有メモリ区域へのポインタPTRが、mmap()システム呼出しに続く期待される挙動としてFUSE 194によってT1ターゲット・コード21aに返される。この例示的実施形態では、32ビット・ポインタが、32ビットVASR 181a内の開始アドレスとして返される。次に、ターゲット・スレッドT1 21aの実行は、新たにマッピングされた共有メモリ区域へのポインタが与えられたかのように継続される。
任意選択で、SMDU 197は、x_mmap()呼出しの引数から導出された要求された共有メモリ区域182aの詳細を記録する。すなわち、SMDUは、各要求された共有メモリ区域182のマッピングを形成し、このマッピングは、便利に、各共有メモリ区域のサイズおよび位置を含み、この区域の所有者またはオリジネータとしてターゲット・コードの特定の部分を識別することもできる。また、FUSE 194および/またはSMDU 197は、この新たに割り振られた共有メモリ領域が対象コード17に見える形を反映するように、トランスレータ19内で保持される対象状態を更新する。
要求された共有メモリ区域182aは、実際には、第1ターゲット・コード・スレッドT1 21aのVASR 181a内でマッピングされてはいないので、スレッドT1がマッピングされていない共有メモリ区域182a内のページへのアクセスを試みるとき、例外(すなわち、ページ・フォールト)が発生する。この例外は、図2に示された例外ハンドラ195によってインターセプトされ、SMDU 197に渡され、したがって、SMDU 197は、明示的に共有されるメモリ領域182aへのアクセスを試みているターゲット・コードのブロックを識別することができる。
この明示的シグナルに応答して、識別されたターゲット・コード命令は、第1に、共有メモリ用に予約されたVASR 181dに向けられ、第2に、メモリ一貫性保護機構が、適用される。
上で述べたように、ASAU 196は、ベース・レジスタBR 15a内の値を修正するためにコードを変更することによって、またはその代わりに第2ベース・レジスタBR2 15bを参照するようにコードを修正することによって、ターゲット・コードのブロック内の少なくともある種の命令を共有VASR 181d内の共有メモリ区域182dにリダイレクトする。VASR 181d内の共有メモリ区域182dは、物理メモリにマッピングされ、したがって、ターゲット・コード内の関連命令は、今や、共有メモリ区域182へのアクセスを得る。
この例示的実施形態は、明示的に共有されるメモリ区域が実行中のスレッドT1に関連する仮想アドレス空間領域181内でマッピングされていないので、共有メモリ区域182にアクセスする試みの検出を容易に可能にする。しかし、追加の仮想アドレス空間領域181dを設け、選択されたターゲット・コード命令をそれにリダイレクトすることによって、所望の共有メモリ領域182が、ターゲット・コード21のその部分によってそれでもアクセス可能である。
また、下でより詳細に述べるように、MPU 198は、識別されたターゲット・コード命令にメモリ一貫性保護機構を適用する。すなわち、メモリ一貫性保護機構が、メモリ一貫性を保つために、ターゲット・コード21のうちで共有メモリ領域へのアクセスを試みるブロックだけについて選択的に適用される。したがって、比較的少数の命令が影響を受ける。注目すべきことに、この機構は、高価なメモリ保護機構をプログラム全体またはスレッド全体にすら適用する必要がない。
もう一度図5を参照し、共有メモリ区域用のVASR 181dが、ターゲット・コードの実行中の部分T1、T2、またはT3のいずれの仮想アドレス空間領域ともオーバーラップしないことに留意されたい。したがって、第2または第3のターゲット・コード部分T2またはT3による、明示的に共有されるメモリ区域182へのアクセスのすべての試みが、最初に失敗する。というのは、この明示的に共有されるメモリ領域が、そのスレッドに関連するそれぞれのVASR 181bまたは181c内でマッピングされていないからである。やはり、結果の例外シグナルは、例外ハンドラ195によって処理され、SMDU 197に渡され、SMDU 197は、関連する命令に、共有メモリ用に予約されたVASR 181dにアクセスさせ、メモリ一貫性保護機構をそれに適用させる。したがって、明示的に共有されるメモリ区域へのアクセスを試みるすべてのターゲット・コード命令が、例外ハンドラ195およびSMDU 197を介して検出され、適切なアクションが行われる。
図7は、間接的に共有されるメモリに関してSMDU 197によって行われるアクションを示すための、図5に示されたターゲット・コンピューティング・システムのより詳細な概略図である。具体的に言うと、図7は、間接的に共有されるメモリ区域がターゲット・コードの新しい部分の始めに開始されるときメモリ一貫性を保護するための機構を示す、新しいスレッドなどのターゲット・コードの新しい部分の開始中のトランスレータVAS 180の一部の概略表現である。具体的に言うと、図7は、LINUXタイプ・オペレーティング・システムのclone()などのシステム呼出しに関する。ここで、通常のシステム応答は、同一の共有仮想アドレス空間で親プロセスと同時に動作する子スレッドを作成することであり、子スレッドは、親プロセスからのコンテキスト情報のサブセットを含む。したがって、clone()システム呼出しによって作成される新しいスレッドは、デフォルトで親プロセスと同一の仮想アドレス空間を占め、したがってメモリを親プロセスと共有する。しかし、例示的実施形態の応答は、これから説明するように、この通常の応答とは異なる。
図7Aに示されているように、この例では、第1スレッドT1が、第1VASR 181a内で実行されつつあり、このプロセスにプライベートとして少なくとも1つのメモリ区域182aをマッピング済みである。ここで、マッピングされた区域182aは、通常、グローバル・データ、初期ヒープ・メモリ、および任意選択として追加ヒープ・メモリを含む。第1スレッドT1が、clone()システム呼出し(便利にx_callとして移植される)を実行するとき、新しいスレッドT2が、図5のASAU 196を使用して別々のVASR 181bを割り振られる。この例では、新しいスレッドT2 21bによって参照されるベース・レジスタ15aは、値「2<<32」を含み、スレッドT2が、第2のVASR 181bに向けられるようになっている。2つのスレッドT1およびT2は、今や、別々のVASRを割り振られるので、以前にスレッドT1によってマッピングされたメモリの区域182aは、図7Bに示されているように、スレッドT2に関連する仮想アドレス空間領域181bにはマッピングされない。したがって、VASR 181a内のプライベートなマッピングされた区域182aに対応するサイズおよびオフセットを有する同等の区域182bが、スレッドT2に関連する第2 VASR 181b内でマッピングされないままになる。
図7Bに示されているように、スレッドT1は、この時点では、スレッドT1のターゲット・コードの部分21aへの変更を一切伴わずに、プライベート・メモリ区域182aにアクセスし続ける。これは、図5および6を参照して上で述べた明示的共有メモリを処理する機構とは異なる。スレッドT1 21aは、それでも、潜在的に共有されるメモリ区域182aにアクセスできるが、スレッドT2 21bが、それ自体のVASR 181b内の対応する区域182bへのアクセスを試みる場合に、関連するページは、マッピングされておらず、例外が発生する。
この例外シグナルは、SMDU 197に渡され、SMDU 197は、例外ハンドラ195と協力して、この例外を処理する。第1に、スレッドT1が割り込まれる。というのは、T1が、第2スレッドT2 21bがアクセスを試みているマッピングされたメモリ区域182aを所有するからである。ここで、スレッドT1からの関連するメモリ区域182aへのすべての保留中のアクセスが、完了される。第2に、図7Cに示されているように、同一のサイズおよびオフセットの対応するメモリ区域182dが、今や、共有VASR 181d内でマッピングされ、第1スレッドT1によって区域182aで参照される物理メモリ内のデータが、今や、その代わりに共有区域182dで使用可能になる。フォールトした単一のページを、共有メモリ区域182dにコピーすることができ、あるいは、関連するメモリ区域182a全体をこのときコピーすることができる。コピーされた共有区域182aは、たとえばmunmap()を使用することによってまたはその区域を保護されるものとしてマークすることによって、今や、第1スレッドT1 21aの仮想アドレス空間領域181内でアンマッピングされ、スレッドT1は、もはや区域182aにアクセスできなくなる。
次に、T1は、共有領域181d内で新たに作成されたメモリ区域182d内のアクセスを再試行することが安全であることをT2に通知する。T1は、通常動作を再開する。T2は、今や、フォールトしたメモリ・アクセスを、今回は共有メモリ領域181dにアクセスすることによって、適切なメモリ一貫性保護を適用されて、再試行し、その後、実行を再開する。
図7Cに示されているように、ターゲット・コード部分T1またはT2が、その後、共有区域182(現在はそのプライベートVASR 181a、181b内でアクセス不能である/アンマッピングされている)にもう一度アクセスする場合には、例外が発生し、そのメモリ・アクセスは、その代わりに、MPU 198によって適用される適切なメモリ一貫性保護の下で共有アドレス領域182dにアクセスするために例外ハンドラ195を介して完了される。
この機構の結果として、ターゲット・コード部分T1およびT2内の適切な命令が、共有データ区域182dへのアクセスを得るために共有仮想アドレス空間領域181dに向けられ、第2のメモリ一貫性モデルのより強い制約が、ターゲット・コードのうちで共有データ区域182dへのアクセスを試みる部分のみについて適用される。
このプロセスは、今や、スレッドT1およびT2が並列に実行される状態で継続される。スレッドのうちの1つ、たとえば第2スレッドT2が、もう1つのスレッド、たとえば第1スレッドT1によって既にマッピングされているメモリの区域へのアクセスを試みるたびに、例外が発生し、この例外は、関連する区域またはページをオーナー・スレッドT1から共有VASR 181dに移動し、ターゲット・コードのその区域に選択的にメモリ一貫性保護を適用するために処理される。現在は共有されているメモリ区域へのアクセスを試みるすべての他のスレッドは、同様に、例外を引き起こし、そのスレッド内の関連するコードは、同様に、指示され、メモリ一貫性保護の対象になる。したがって、この機構は、プログラム・コードの任意の個数の部分(スレッドT1、T2、T3など)に適用される。
代替の機構は、多数のLinuxタイプおよびUNIXタイプのオペレーティング・システムで使用可能な再マッピング・システム呼出しを使用することである。ここで、MREMAPシステム呼出しは、メモリ18へのアクセスを制御するためにターゲット・システム10によって使用されるページ・テーブルへの変更を可能にする。ページ・テーブルを変更することによって、メモリのページが、仮想アドレス空間180内の新しい位置にマッピングされ、したがって、第1VASR 181aから第2VASR 181bに直接に移動される。再マッピングは、実行中のユーザ空間スレッドの観点からは原子的に発生し、したがって、第1スレッドT1は、割り込まれまたは通知される必要がない。
図7Dは、複数のアドレス空間領域181を示すトランスレータVAS 180のもう1つの図であるが、この図では、VASR 181は、例示を簡単にするためにそのそれぞれのベース・アドレスで位置合せされている。また、図7Dは、VASR 181のそれぞれの中のマッピングされた区域を記録する、SMDU 197によって保持されるVASRマップ199を示す。この例示的実施形態では、VASRは、すべてが等しい32ビットのサイズであり、単一の32ビット・マップが、各VASR内のマッピングされたメモリ区域を便利に記録する。したがって、プライベートにマッピングされた区域が、当初はターゲット・コード部分の1つのためにVASR内に存在する場合であっても、間接的に共有されるメモリが、特定のVASR内の要求された32ビット・アドレスが別のVASR内の対応する位置で既にマッピングされていることを判定するためにマップ199を調べることによって、容易に検出される。それに応答して、図7Bおよび7Cに示されたアクションが、検出された共有メモリ区域にアクセスするターゲット・コード命令のみについて実行される。
本明細書で述べる例示的実施形態は、ターゲット・コード部分21a〜21cのそれぞれについて正確に1つのVASR 181。しかし、他の実施形態が、やはり可能であり、説明される例示的実施形態に対する変形形態として企図されている。たとえば、複数の共有区域を設けることができる。1つの代替実施形態では、各ターゲット・コード部分21a〜21cは、プライベート・メモリ区域だけを保持する対応するプライベートVASRに関連し、それぞれの共有メモリ区域は、共有メモリ区域および1つまたは複数のプライベート・メモリ区域を保持する。ここで、複数のターゲット・コード部分のための複数のVASRの使用は、それでも、共有メモリおよび特に間接的に共有されるメモリをSMDU 197によって簡単に検出することを可能にする。
図8に、メモリ一貫性保護機能の例示的実施形態をより詳細に示す。
図8の例は、対象コード・ブロック171および対応するターゲット・コード・ブロック211を示す。ターゲット・コード・ブロック211の実行中のある点で、例外が、共有メモリ区域に関して発生し、上で述べたように、メモリ一貫性を保護するためにASAU 196、SMDU 197、およびMPU 198と協力して例外ハンドラ195によってアクションが行われる。図8の例では、例外は、このブロックの実行の途中の命令部分に関して生じ、したがって、ブロック211は、例示のために半分に分割されており、ここで、上半分は、既に実行された命令を表し、下半分の残りは、まだ実行を開始されていない。ここで、メモリ保護機能は、まず、現在のブロック211の実行を完了することを試み、オン・ザ・フライでメモリ一貫性を保護する手段が講じられる。その後、適切な確立した状態を達成したとき、ターゲット・コードのこのブロックの将来の実行で例外を防ぐことを目指してブロック211全体を再生成するなど、より長期の変更が、ターゲット・コードに対して行われる。
まず、メモリ一貫性保護機構によって講じられる直接の手段を調べて、さまざまな例示的な実施形態を説明する。
1つの例示的実施形態(図8で丸に囲まれた1によってマークされる)では、ターゲット・コード21は、たとえばストアの各対の間など、適切な同期化ポイントでnull動作を含むように生成される。IBM POWER ISAのNOP命令などのこれらのnull動作は、プロセッサに特定の個数のクロック・サイクルの間に何も行わせないこと以外に何の効果も有しておらず、したがって、プレースホルダとして使用するのに便利である。null動作は、今や、アクティブ・シリアライゼーション命令(たとえば、SYNCおよびISYNC)に置換されて、ターゲット・コードにメモリ一貫性セーフティ・ネットを適用する。また、コードは、上で述べたように共有VASR 181dを参照するように変更される。したがって、この実施形態は、少なくとも部分的に、ブロック211の非実行部分を将来の実行の準備ができた状態に変更する。
もう1つの実施形態(図8で丸に囲まれた2によってマークされる)では、ターゲット・コードのブロックの実行が、MPU 198内にまたはこれに関連して常駐する対象−ターゲット・インタープリタSTInt 200を介して完了される。すなわち、実行は、STInt 200を介して対応する対象コード・ブロック171bの残りの命令を1命令ずつ同等のターゲット・コード命令に解釈することによって完了される。ここで、MPU 198は、インタープリタに、適切な同期化ポイントを形成するためにシリアライゼーション命令を適用させる(たとえば、ロードまたはストアに続くSYNCおよびISYNCを挿入する)。しかし、この実施形態は、STInt 200を介して実行を開始するために、適切な対象状態が使用可能であることを前提とする。
もう1つの実施形態では、ターゲット・ブロックの少なくとも未実行部分が、即座に、シリアライゼーション命令を挿入するために再生成される。すなわち、ターゲット・コード・ブロック211の残りの部分が、変更されたバージョンによって置換され、ここで、シリアライゼーション命令が、判定された同期化ポイントに挿入される。やはり、この実施形態は、再生成されるターゲット・コードがやはり既知の状態から前に進むことができるように、適切な対象状態が使用可能であることを前提とする。
適切な対象状態が、例外が発生した点で使用可能ではない場合には、MPU 198は、ターゲット・コードを適切にロール・バックして、必要な対象状態が達成可能であるチェックポイントまたは回復ポイントに達する。例外に関して対象状態を達成する例の機構が、上で引用したWO2005/006106に詳細に記載されている。ここで、ブロックの始めもしくは終りまたはブロック内の選択された点などのチェックポイントが提供される。MPUは、最後に達したチェックポイントを探し、したがって、そのチェックポイントでの対象状態を回復することができる。ブロックの実行は、今は、回復された対象状態を参照してチェックポイントから前に進むことによって完了される。
さらなる洗練で、MPU 198は、例外が発生した点の後の次のチェックポイントにロール・フォワードする。ここで、MPUは、ターゲット−ターゲット・インタープリタTTInt 201によって支援され、TTInt 201は、ターゲット・コードが次のチェックポイントにロール・フォワードするまで、メモリ一貫性を保護するために適切なシリアライゼーション命令を挿入しながら、ブロック211内の既に生成されたターゲット・コードを解釈する。この対象状態を回復するフォワード・ローリング機構は、WO2006/103395で詳細に述べられている。さらなる洗練として、ターゲット−ターゲット・インタープリタTTInt 201は、ターゲット・コードのブロックの後の再生成を改善するために、フォールトしたメモリ・アクセスおよびフォールトしなかったメモリ・アクセスを記録するなど、ロール・フォワード動作中に変換ヒントを収集する。便利なことに、これらの変換ヒントは、最初にNOP null動作を用いてターゲット・コードを生成し、その後、これらのNOPを変換ヒント・フラグを用いて選択的に置換することによって、ターゲット・コードに移植される。
このターゲット・コード・ブロック211の直接の必要を処理したので、トランスレータ19は、今や、さらなる注意をブロック211に向けることができる。たとえば、ターゲット・ブロック211全体のすべてまたは一部を、ブロック全体にシリアライゼーション命令(たとえば、SYNCおよびISYNC)を含むようにまたはブロック内の選択された命令のグループを保護するようになど、再生成することができる。したがって、再生成されたターゲット・コード・ブロック211bは、今や、そのブロックが将来に実行されるとき共有メモリ・アクセスに関するメモリ一貫性保護の対象である。ターゲット・コードの再生成は、ターゲット・コードのブロックの以前の具体化の実行から収集された変換ヒントを使用することができる。再生成は、即座に実行することができ、あるいは、図8に概略的に示されているように再生成フラグ211fを使用して再生成を必要とするものとしてブロックをマークすることによって、ブロック211bが実行のために次に必要とされる時など、より後の点まで延期することができる。再生成プロセスは、反復的であり、複数のパスを要する場合がある。すなわち、メモリ一貫性保護は、第1再生成の後に第1の命令のグループに選択的に適用され、その後、第2再生成で第2の命令のグループにも適用される。ここで、以前の1つまたは複数の具体化から収集された変換ヒントは、再生成の最新の反復を支援するのに使用することができる。さらに、再生成プロセスは、複数の独自のエントリ・ポイントおよび/または複数の独自のエクシット・ポイントを有する、かつ/あるいは内部ジャンプを有するグループ・ブロックを形成するためにターゲット・コードの複数の基本ブロックの組合せを含むことができる。ここで、ターゲット・コードに埋め込まれた変換ヒントは、関連する基本ブロックの以前の再生成を既に考慮に入れ、したがってグループ・ブロックの再生成を減らす、効率的なグループ・ブロックをトランスレータが形成することを可能にするのに役立つ。
実用的な実施形態では、コードの特定のセクションを、共有メモリとプライベート・メモリとの両方のアクセスに使用することができる。上で述べたように、ターゲット・コードは、元々、関連するプライベートVASR 181a〜c内のプライベート・メモリに適切に生成される。コードが、その後に共有メモリに適切に再変換される場合に、そのコードは、今や、その代わりに、プライベート・メモリへのアクセスを試みるとき例外を引き起こす。というのは、そのプライベート・メモリが、共有VASR 181d内でマッピングされていないからである。したがって、1つのオプションは、コードを、プライベート・メモリに適切なオリジナル・フォーマットにもう一度変換して戻すことである。共有VASR 181dまたはプライベートVASR 181a〜cにマッピングされるメモリ・ページの相互に排他的な性質は、ケースのこの変化が必ず検出されることを保証する。
例外の処理およびコードの関連する1つまたは複数のブロックの再変換にはオーバーヘッドがある。いくつかのプログラムで、再変換オーバーヘッドは、比較的まれに出会い、したがって、最も適切な全体的解決策である。しかし、コードのあるセクションがプログラム内の多数の異なる場所から呼び出される時など、いくつかの実例が、頻繁な再変換を伴うこともわかっている。一特定の例が、メモリ・コピー関数memcpy()である。ここで、この機構を、さらに開発し、洗練して、この問題に対処する。
図8に示されているように、トランスレータ19は、ターゲット・ブロック211の少なくとも2つの異なるバージョンを保持することができる。第1のバージョン211Aは、メモリ一貫性保護なしのオリジナル変換であり、これは、ターゲット・システムによって実行される並べ変えおよび他の最適化に従ってすばやく実行される。第2のバージョン211Bは、この例ではシリアライゼーション命令を伴う共有VASR 181dを参照する、メモリ一貫性保護の対象であり、したがって、より遅く実行される。トランスレータは、今や、プログラムの実行中にこのブロックに次に出会うとき、第1のバージョン211Aと第2のバージョン211Bを選択的に実行することができる。関数へのエントリ時に、動的テストを適用して、アクセスされるメモリのタイプ、すなわちプライベートまたは共有のいずれかを判定し、その後、適切なバージョンを選択する。この解決策は、変換オーバーヘッドを減らすが、動的テストの実行の際に実行ペナルティがある。
もう1つの洗練では、トランスレータは、ループ最適化を実行する。ここで、ループは、1回目に実行され、ループ内のメモリ・アクセスが共有メモリを参照するので、メモリ例外を引き起こす。トランスレータは、今や、共有メモリを参照するようにループ内のコードを再変換することができ、共有メモリを参照する将来の実行がフォールト(fault)する可能性をより低くする。動的チェックの提供は、プライベート・メモリまたは共有メモリのいずれかにアクセスするようにループ内のコードを特殊化する。また、トランスレータは、動的チェックをループの中から引き揚げ、ループの前に配置し、したがって実行作業負荷をさらに減らすことを試みることができる。
呼び出されるコードの動的チェックに対する代替案として、もう1つのオプションは、特殊化されたコードを呼出し側の場所でインライン化することである。もう1つのオプションは、特定の関数の呼出し側を特殊化することである。すなわち、呼出し側は、それぞれプライベート・メモリまたは共有メモリにアクセスするために、プライベートタイプ・アクセッサ関数または共有タイプ・アクセッサ関数のいずれかを呼び出すように特殊化される。たとえば、
呼出し側>memcopy>メモリ
は、
呼出し側1(プライベート)>memcopy_private>プライベート・メモリ
呼出し側2(共有)>memcopy_shared>共有メモリ
になる。
これらの特殊化された呼出し側は、インダイレクションのさらなる層(すなわち、呼出しスタック上の余分なアイテムとしてのラッパー関数)を用いることもできる。ここで、アクセスされるメモリ・アドレスは、呼出し側によって決定され、メモリ・アドレスは、アクセッサ関数(たとえば、memcopy)によってのみ使用される。ラッパー関数は、最初に、そのサクセッサのプライベート・バージョンを呼び出すようにセットされる。したがって、呼出しスタックを観察することによって、この呼出し側場所からの将来の呼出しが成功することを可能にするために特殊化される必要があるラッパー関数が判定される。好適には、漸進的特殊化は、各層がプライベート・バージョンおよび共有バージョンに特殊化され終るまで、アクセッサ関数に最も近いものから開始して、一時に1ラッパー層ずつ適合する。
図9は、本明細書で述べるさまざまな詳細な実施形態の要約としてメモリ一貫性保護方法の全般的概要を提供する概略流れ図である。
ステップ901で、第1および第2のコード部分を別々の仮想アドレス空間領域内で実行する。たとえば、第1および第2のターゲット・コード部分21a、21bが、それぞれ別個のオーバーラップしない第1および第2の仮想アドレス空間領域181a、181bに関して実行される。
ステップ902は、任意選択で、仮想アドレス空間領域181a、181bのそれぞれの中のマッピングされた区域182a、182bを記録することを含む。ここで、各マッピングされたメモリ区域のアドレス・オフセットおよびサイズ(アドレス範囲)が、とりわけmmap()システム呼出しなどのメモリ・マッピング・アクションに応答してメモリ・マップ199内に記録される。
ステップ903で、この方法は、現在実行中のコード部分に関連するアドレス空間内ではマッピングされていないが、複数のアドレス空間のうちの別のアドレス空間内でマッピングされているメモリ区域へのアクセス要求を検出することを含む。ここで、対応するメモリ区域は、別の実行中のコード部分(すなわち、別のスレッド)に関連するアドレス空間内または共有メモリ用に予約された別々のアドレス空間内のいずれかでマッピングされる。どちらの場合でも、現在実行中のコード部分によるアクセス要求は、メモリ例外を引き起こし、このメモリ例外に応答して、現在実行中のコード部分が共有メモリ区域へのアクセスを試みていると判定される。
ステップ904で、この方法は、コードに所定の制約を有するメモリ一貫性モデルの下で実行させるメモリ一貫性保護機構を適用するために、現在実行中のコードを修正することを含む。また、現在実行されているコードは、共有メモリ用に予約されたアドレス空間内の所定の共有メモリ区域に向けられるように修正される。
最後に、ステップ905で、共有メモリ区域がまだ共有メモリ用に予約されたアドレス空間内に常駐していない場合に、共有メモリ区域を、そのようなアドレス空間に移動し、少なくとも現在のコード部分に関連するアドレス空間内でアンマッピングするか他の形で保護する。
上で述べたclone()システム呼出しなどの新しい実行中コード部分を開始する機構を考慮して、ステップ901が、新たに実行されるコード部分を開始する試みを検出するステップと、新しい実行中コード部分用の別々のアドレス空間を割り振るステップと、その後、新たに割り振られた別々のアドレス空間内で新しいコード部分を実行するステップとをさらに含むことができることを理解されたい。
また、図9に示されたステップが、図示のシーケンシャル順で実行される必要がないことを理解されたい。特定の例として、各アドレス空間内のマッピングされた区域を記録するステップ902を、メモリの各新しい区域が特定のアドレス空間にマッピングされるとき動的に実行することができ、この実行は、複数のコード部分のそれぞれを別々のアドレス空間で実行するステップ901の前に、ステップ901と並列に、またはステップ901の後に発生することを理解されたい。さらに、ステップ904および905を、任意選択で、ターゲット・コードがまずメモリ一貫性保護機構を適用されて生成されるように、周期的に実行することができる。これらの代替実施形態は、トランスレータ19内のセッティングに依存する可能性がある。トランスレータが、対象コード17の変換の結果として、そのようなオプション実施形態がプログラムの特定のセクションについて有益であると予測する場合には、メモリ一貫性保護機構が、生成されるターゲット・コード21に適用される。
さらに、上で述べた機構が、単一のアプリケーション・プログラム内で動作するプロセスおよびスレッドに限定されるのではなく、ターゲット・コンピューティング・システム上で同時に動作するプログラムのセットまたはスイートにも適用できることを理解されたい。すなわち、複数の別々のプログラム(タスク)が、上で述べた機構の下でメモリを共有する形で一緒に動作することができる。
図10は、本発明のもう1つの例示的実施形態によるMPU 198内でメモリ一貫性保護機構を実施する方法の概略流れ図である。上で詳細に述べたメモリ一貫性保護機構は、生成されたターゲット・コードにシリアライゼーション命令を適用した。代替構成では、ページ・フラグ変更が、メモリ18内でストア順序付けされるページを作成するために、ターゲット・コンピューティング・システムのある種のアーキテクチャで使用される。
ステップ1001で、上で述べた実施形態に似て、複数のターゲット・コード部分のそれぞれを、別々の仮想アドレス空間領域内で実行する。ステップ1002で、この方法は、図7DのVASRマップ199を使用することによるなど、複数のアドレス空間のそれぞれにマッピングされるメモリ区域を記録することを含む。これらのステップは、上で述べた形で図5のASAU 196によって適切に実行される。
ステップ1003で、この方法は、共有メモリ区域を開始する要求を検出することを含む。一特定の実施形態では、この要求は、明示的に共有メモリを要求するmmap()などのメモリ・マッピング・システム呼出しである。もう1つの例では、子スレッドが、それ自体のアドレス空間内でマッピングされていないが、親スレッドのアドレス空間内でマッピングされている領域へのアクセスを試みるとき、例外が送出され、ここで、子スレッドは、clone()システム呼出しなどによって生成されたものである。好適には、SMDU 197の検出機構が、上で述べたように使用される。
ステップ1004で、検出された共有メモリ区域の1つまたは複数のページが、これらのページへのアクセスが第2の非デフォルト・メモリ一貫性モデルを厳守することを強制されるように、ページ・テーブル属性を操作することによって、MPU 198によってマークされる。特定の例として、PowerPCアーキテクチャに基づくシステム・ハードウェアの実施態様は、シーケンシャル一貫性を必要とするものとして関連するページをマークすることを可能にするように適合される。
この実施形態は、有利なことに、共有メモリ区域182を別々のアドレス空間領域181に移動することを必要としない。そうではなく、共有メモリ区域182は、共有メモリ区域182へのアクセスを必要とする各ターゲット・コード部分21a、21b、21cのVASR 181a、181b、181cにマッピングされる。共有区域にアクセスするすべてのコードが、ストア順序付けされた形でそれを行い、したがって、望まれるメモリ一貫性モデルが、適用される。さらに、ターゲット・コードは、ページ・フォールトなしで共有メモリ区域182にアクセスし、ターゲット・コードの変更が回避される。
図11は、仮想アドレス空間180を物理メモリ・サブシステム18にマッピングするページ・テーブルPT 183と一緒に、ストア順序付けされたページに関するこの実施形態をさらに示すための、トランスレータVAS 180を含む、ターゲット・コンピューティング・システムの諸部分の概略図である。
図11Aでは、第1コード部分T1 21aが、共有メモリ、たとえばファイル−バッキングされたmmap_sharedメモリを明示的に要求するmmap()タイプのシステム呼出しを含む。トランスレータ・ユニット19内のFUSE 194は、このシステム呼出しをインターセプトし、ページがまだストア順序付けされるものとしてマークされていない場合には、その領域のキャッシュ・ラインを無効化し、ページ・テーブルPT 183内でそのページをストア順序付けされるものとしてマークする。次に、ファイルが、共有メモリ区域182aとして、第1コード部分T1 21aのVASR 181aにマッピングされる。
図11Bに示されているように、第2ターゲット・コード部分21bは、今や、共有メモリ区域182aへのアクセスを試み、この共有メモリ区域が現在は関連するVASR 181b内でマッピングされていないので、例外が送出される。それに応答して、SMDU 197は、今や、共有メモリ区域182bをも第2VASR 181bにマッピングし、まだそのようにマークされていない場合には、関連するメモリ・ページを、ページ・テーブル属性を操作することによってストア順序付けされるものとしてマークする。
図11Bは、clone()システム呼出しが行われる場合のシステムの応答をも示す。コード部分21b内の新しいスレッドは、親プロセス21aのVASR 181aとオーバーラップしない別々の別個のVASR 181bを割り振られる。この場合に、第1コード部分21aの第1VASR 181a内の以前のプライベート・メモリ領域182aを、今や共有されるものにすることができる。メモリ182aのある種の領域が、VASR 181a内で親プロセスに既にマッピングされる場合であっても、これらは、新たに複製(clone)されるスレッドについてはマッピングされていないままになる。第2コード部分21bが、今、それ自体のVASR 181b内ではマッピングされていないが親プロセス21aのVASR 181a内の対応する区域182aではマッピングされるメモリ領域182bへのアクセスを試みる場合に、子スレッドT2 21bは、例外を引き起こす。SMDU 197は、所望のファイルを子スレッドのVASRにマッピングして、共有メモリ区域182b内でこれらのVASR 181a、181bの両方で同一の相対位置にマッピングして、ターゲット・コードの両方の部分21a、21bに物理メモリの同一ページへのアクセスを与える。この場合に、以前にはプライベートであったが今は間接的に共有されるメモリ区域182は、ページ・テーブルPT 183内でストア順序付けされるものとしてマークされる。
例示的な実施形態を、上では主にプログラム・コードのアクセラレーション、エミュレーション、または変換のためのプログラム・コード変換システムに関して述べた。また、本明細書で述べた機構は、メモリ一貫性エラーに脆弱なプログラム・コードを検出し、任意選択でこれを自動的に訂正する、デバッギング・ツールに適用可能である。設計問題すなわちバグは、共有メモリ・マルチプロセッサ・アーキテクチャでは見つけ、分離し、訂正するのがむずかしい。検出されないバグは、不正な動作をもたらし、この不正な動作は、しばしばシステム障害につながり、新しいソフトウェアの公開を遅らせ、あるいは、公開後ソフトウェア・アップデートすら必要とする。このために、本明細書のコントローラ/トランスレータ・ユニットは、共有メモリ区域を検出し、生成されるターゲット・コードがデバッギングされるように、シリアライゼーション命令の挿入またはページ・テーブル属性の変更などの対象コードに対する適切なコード変更を適用する、デバッギング・ツールとして動作するように構成される。
少数の例示的な実施形態を図示し、説明してきたが、当業者は、添付の特許請求の範囲で定義される本発明の範囲から逸脱せずにさまざまな変更および修正を行えることを理解するであろう。
本願に関連して本願と同時にまたは本願の前に出願され、本願に関して公に公開されるすべての論文および文書に注意が向けられ、そのようなすべての論文および文書の内容が、参照によって本明細書に組み込まれている。
本明細書(すべての添付の特許請求の範囲、要約書、および図面を含む)で開示される特徴のすべておよび/またはそのように開示されるすべての方法またはプロセスのステップのすべてを、そのような特徴および/またはステップの少なくともいくつかが相互に排他的である組合せを除いて、任意の組合せで組み合わせることができる。
本明細書(すべての添付の特許請求の範囲、要約書、および図面を含む)で開示される各特徴を、そうではないと明示的に述べられない限り、同一の、同等の、または類似する目的のために働く代替特徴によって置換することができる。したがって、そうではないと明示的に述べられない限り、開示される各特徴は、包括的な一連の同等のまたは類似する特徴の1つの例にすぎない。
本発明は、前述の1つまたは複数の実施形態の詳細に制限されない。本発明は、本明細書(すべての添付の特許請求の範囲、要約書、および図面を含む)で開示される特徴の任意の新規の1つもしくは任意の新規の組合せ、またはそのように開示される任意の方法またはプロセスのステップの任意の新規の1つもしくは任意の新規の組合せに及ぶ。

Claims (25)

  1. 対象プログラム・コードがトランスレータによって変換されたターゲット・コードを実行するためのマルチプロセッサ・コンピューティング・システムであって、
    少なくとも第1ターゲット・コード部分と第2ターゲット・コード部分とを含む複数のターゲット・コード部分を格納するメモリと、
    前記メモリ内に格納された前記複数のターゲット・コード部分を実行する複数のターゲット・プロセッサであって、前記マルチプロセッサ・コンピューティング・システムの第1ターゲット・プロセッサが前記第1ターゲット・コード部分を実行し、且つ、前記マルチプロセッサ・コンピューティング・システムの第2ターゲット・プロセッサが前記第2ターゲット・コード部分を実行する、前記ターゲット・プロセッサと、
    前記複数のターゲット・プロセッサによる前記複数のターゲット・コード部分の実行を制御するコントローラ・ユニットと
    を備えており、
    前記コントローラ・ユニットが、
    前記メモリをアドレッシングするのに使用される仮想アドレス空間を複数の仮想アドレス空間領域に分割し、且つ前記複数のターゲット・コード部分の実行を制御して、最初に第1のメモリ一貫性モデルに従って前記複数の仮想アドレス空間領域を介して前記メモリにアクセスするアドレス空間割振りユニットと、
    前記第1ターゲット・コード部分と少なくとも前記第2ターゲット・コード部分とによってアクセス可能な前記メモリ内の共有メモリ区域に対して前記第1ターゲット・コード部分を実行する際に生成されるメモリ・アクセス要求を検出し、且つ前記共有メモリ区域にアクセスする前記第1ターゲット・コード部分内の少なくとも1つの命令のグループを識別する共有メモリ検出ユニットと、
    前記共有メモリ検出ユニットが前記命令のグループを識別することに応じて、メモリ一貫性保護を適用して、前記第1ターゲット・コード部分内の前記識別された命令のグループを実行する際に前記検出された共有メモリ区域へのアクセスに関して第2のメモリ一貫性モデルの下で実行するメモリ保護ユニットと
    を含む、前記マルチプロセッサ・コンピューティング・システム。
  2. 前記コントローラ・ユニットが、前記メモリへのアクセスを順序付けるために、前記第1のメモリ一貫性モデルの下で実行する前記第1および第2のターゲット・コード部分を生成し、
    前記メモリ保護ユニットが、前記メモリ一貫性保護を適用することによって、前記第1ターゲット・コード部分内の前記識別された命令のグループが前記共有メモリ区域にアクセスする際に前記第2のメモリ一貫性モデルの下で実行される、
    請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  3. 前記アドレス空間割振りユニットが、前記複数の仮想アドレス空間領域のうちの第1仮想アドレス空間領域を前記第1ターゲット・コード部分の実行に割り振り、前記複数の仮想アドレス空間領域のうちの異なる第2仮想アドレス空間領域を前記第2ターゲット・コード部分の実行に割り振る、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  4. 前記仮想アドレス空間が、前記マルチプロセッサ・コンピューティング・システム内における前記コントローラ・ユニットおよび前記複数のターゲット・コード部分の実行のために提供され、
    前記アドレス空間割振りユニットが、前記コントローラ・ユニットおよび前記複数のターゲット・コード部分の実行のために提供された前記仮想アドレス空間を前記複数の仮想アドレス空間領域に分割する、
    請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  5. 前記アドレス空間割振りユニットが、2ビット(nは、正の整数)のサイズを有する前記仮想アドレス空間を、各々2ビット未満のサイズを有する前記複数の仮想アドレス空間領域に分割する、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  6. 前記アドレス空間割振りユニットが、264ビットのサイズを有する前記仮想アドレス空間を、各々232ビットのサイズを有する前記複数の仮想アドレス空間領域に分割する、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  7. 前記アドレス空間割振りユニットが、前記複数の仮想アドレス空間領域のそれぞれで前記第1および第2のターゲット・コード部分を実行させる、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  8. 前記アドレス空間割振りユニットが、前記複数の仮想アドレス空間領域のそれぞれの所定のベース・アドレスを前記ターゲット・コードの実行時に決定される前記仮想アドレス空間領域内のオフセットと組み合わせることによって、メモリ・アクセスを実行するための前記第1および第2のターゲット・コード部分をそれぞれ生成する、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  9. 前記アドレス空間割振りユニットが、少なくとも1つの共有仮想アドレス空間領域と少なくとも1つのプライベート仮想アドレス空間領域とを含む前記複数の仮想アドレス空間領域を提供し、かつ、
    前記アドレス空間割振りユニットが、前記複数のターゲット・プロセッサの少なくとも第1および第2のレジスタを参照するターゲット・コード命令を有する少なくとも前記第1ターゲット・コード部分を生成し、
    前記第1レジスタが、前記プライベート仮想アドレス空間領域の第1ベース・アドレスを格納し、前記第2レジスタが、前記共有仮想アドレス空間領域の第2ベース・アドレスを格納し、
    前記第1ターゲット・コード部分内の少なくとも1つのターゲット・コード命令のグループが、前記第1ベース・レジスタ内に格納された前記第1ベース・アドレスを参照して前記プライベート仮想アドレス空間領域に対して前記メモリにアクセスし、かつ、前記第1ターゲット・コード部分内の少なくとも1つのターゲット・コード命令のグループが、前記第2ベース・レジスタ内に格納された前記第2ベース・アドレスを参照して前記共有仮想アドレス空間領域に対して前記メモリにアクセスする、
    請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  10. 前記共有メモリ検出ユニットが、前記複数のターゲット・プロセッサのそれぞれのターゲット・プロセッサでの実行中に前記第1ターゲット・コード部分によって実行され、共有メモリ区域のマッピングを明示的に要求するメモリ・マッピング・システム呼出しをインターセプトすることによって明示的に共有されるメモリ区域に関する要求を検出し、かつ、
    前記共有メモリ検出ユニットが、前記要求された明示的に共有されるメモリ区域を前記複数の仮想アドレス空間領域の中の共有仮想アドレス空間領域にマッピングし、前記明示的に共有されるメモリ区域を表すために前記第1ターゲット・コード部分に割り振られた前記仮想アドレス空間領域のプライベート仮想アドレス空間領域内のポインタを返す、
    請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  11. 前記共有メモリ保護ユニットが、それぞれのターゲット・プロセッサ上での実行中に前記第1ターゲット・コード部分によって実行され、前記第1ターゲット・コード部分の実行から複製される前記第2ターゲット・コード部分の実行の開始を要求するクローンタイプ・システム呼出しをインターセプトすることによってプライベート・メモリ区域の間接的な共有を検出し、
    前記アドレス空間割振りユニットが、前記第1ターゲット・コード部分に割り振られた第1仮想アドレス空間領域とは異なる第2仮想アドレス空間領域を前記第2ターゲット・コード部分に割り振る、
    請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  12. 前記複数の仮想アドレス空間領域のうちの第1仮想アドレス空間領域内でマッピングされていない区域へのアクセスを試みる前記第1ターゲット・コード部分内の命令内のフォールト・メモリ・アクセスに応答して生成される例外シグナルを受け取る例外ハンドラをさらに備えており、
    前記共有メモリ検出ユニットは、前記フォールト・メモリ・アクセスが前記第2ターゲット・コード部分に関する前記複数の仮想アドレス空間領域のうちの第2仮想アドレス空間領域内にマッピングされるメモリ区域にアクセスする試みであることを前記例外シグナルに応答して判定し、前記メモリ区域を共有メモリ区域として共有仮想アドレス空間領域にマッピングし、
    前記アドレス空間割振りユニットが、前記第1ターゲット・コード部分内の前記識別された命令のグループにより、前記共有仮想アドレス空間領域に対して前記共有メモリ空間にアクセスし、
    前記メモリ保護ユニットが、前記識別された命令のグループによる前記共有メモリ区域へのアクセスに関してメモリ一貫性保護を適用する、
    請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  13. 前記共有メモリ検出ユニットが、前記複数の仮想アドレス空間領域のそれぞれにマッピングされるメモリ区域のマップを記録し、フォールト・メモリ・アクセスが前記複数の仮想アドレス空間領域のうちの1つまたは複数に既にマッピングされているメモリ区域にアクセスする試みであるかどうかを前記マップを参照して判定する、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  14. 前記第1および第2のターゲット・コード部分のそれぞれが、複数の命令のブロックに分割され、1つのブロックが、前記コントローラ・ユニットによって処理される最小コード単位であり、
    前記メモリ保護ユニットは、例外シグナルが現在のブロックの実行途中で生成されるとき、前記現在のブロックの1つまたは複数の残りの命令にメモリ一貫性保護を適用しながら前記残りの命令の実行を完了させ、
    前記コントローラ・ユニットが、前記ブロック全体にメモリ一貫性保護を適用するために前記現在のブロックを再生成する、
    請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  15. 前記メモリ保護ユニットが、前記メモリ内の1つまたは複数のメモリ・ページがキャッシュ禁止とキャッシュ保護との両方になるように前記メモリに関連するページ・テーブル内の属性を操作することによって、前記1つまたは複数のメモリ・ページをストア順序付けするべくマークする、
    請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  16. 前記コントローラ・ユニットが、バイナリ実行可能形式の対象コードをバイナリ実行可能形式の前記ターゲット・コード部分に変換する、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  17. 前記コントローラ・ユニットが、バイナリ実行可能形式の対象コードを、前記ターゲット・コードの実行に動的にインターリーブされるバイナリ実行可能形式の前記ターゲット・コード部分に変換する、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  18. 前記コントローラ・ユニットが、対象コードを前記複数のターゲット・コード部分に変換することによって前記対象コードをデバッグする、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  19. 前記コントローラ・ユニットが、バイナリ実行可能形式の対象コードを前記ターゲット・コード部分の実行中に動的にバイナリ実行可能形式の前記ターゲット・コード部分に変換することによって前記対象コードをデバッグする、請求項1に記載のマルチプロセッサ・コンピューティング・システム。
  20. 対象プログラム・コードがトランスレータによって変換されたターゲット・コードを実行するためのマルチプロセッサ・コンピューティング・システムでメモリ一貫性を保護する方法であって、前記マルチプロセッサ・コンピューティング・システムが、
    第1のメモリ一貫性モデルの下で第1ターゲット・コード部分及び前記第2ターゲット・コード部分を実行する工程であって、前記実行する工程が、第1仮想アドレス空間領域に関して前記マルチプロセッサ・コンピューティング・システムの第1ターゲット・プロセッサ上で前記第1ターゲット・コード部分を実行すること、および第2仮想アドレス空間領域に関して前記マルチプロセッサ・コンピューティング・システムの第2ターゲット・プロセッサ上で前記第2ターゲット・コード部分を実行することを含み、前記第1および第2の仮想アドレス空間領域が、別々でかつオーバーラップしていない、前記実行する工程と、
    前記第1ターゲット・コード部分と少なくとも第2ターゲット・コード部分との両方によってアクセス可能な、メモリ内の共有メモリ区域を検出する工程であって、前記第2仮想アドレス空間領域内でマッピングされてはいないが前記第1仮想アドレス空間領域内でマッピングされた区域であるメモリ区域への前記第2ターゲット・コード部分によるアクセス要求を検出することによって、前記第2ターゲット・コード部分が共有メモリ区域へのアクセスを試みようとしていることを検出することを含む、前記検出する工程と、
    前記検出された共有メモリ区域にアクセスする前記第1ターゲット・コード部分内の少なくとも1つの命令のグループを識別する工程であって、前記検出された共有メモリ区域にアクセスする前記第2ターゲット・コード部分内の命令のグループを識別する工程を含む、前記識別する工程と、
    前記命令のグループを識別することに応じて、メモリ一貫性保護を適用して、前記第1ターゲット・コード部分内の前記識別された命令のグループを実行する際に前記検出された共有メモリ区域へのアクセスに関して第2のメモリ一貫性モデルの下で実行する工程であって、前記適用することが、前記第2ターゲット・コード部分内の前記命令のグループが前記第2のメモリ一貫性モデルを実行する形で前記検出された共有メモリ区域にアクセスするように、前記メモリ一貫性保護を選択的に適用することを含む、前記実行する工程
    を実行する、前記方法。
  21. 前記第2のメモリ一貫性モデルが、前記第1のメモリ一貫性モデルよりも強いメモリ・アクセス順序付け制約を有する、請求項20に記載の方法。
  22. 前記マルチプロセッサ・コンピューティング・システムが、
    前記第1ターゲット・コード部分を複数のブロックに分割する工程をさらに実行し、
    前記適用する工程が、前記検出された共有メモリ区域にアクセスする前記命令を含む前記第1ターゲット・コード部分の前記ブロックだけに前記メモリ一貫性保護を選択的に適用することを含む、
    請求項20に記載の方法。
  23. 前記実行する工程が、前記マルチプロセッサ・コンピューティング・システムのデフォルト・メモリ一貫性モデルとしての前記第1のメモリ一貫性モデルの下で前記第1ターゲット・コード部分および前記第2ターゲット・コード部分を実行することを含み、
    前記検出する工程が、前記第1ターゲット・コード部分と前記第2ターゲット・コード部分との両方からアクセス可能な明示的に共有されるメモリ区域を起動する要求を検出することを含み、
    前記適用する工程が、前記第1ターゲット・コード部分および前記第2ターゲット・コード部分のうちの選択された部分だけが、前記明示的に共有されるメモリ区域へのアクセスを異なる第2のメモリ一貫性モデルの下で実行するように、前記メモリ一貫性保護を適用することを含む、
    請求項20に記載の方法。
  24. 記マルチプロセッサ・コンピューティング・システムが、
    前記第1および第2の仮想アドレス空間領域に対して別々でかつオーバーラップしていない第3仮想アドレス空間領域に、前記第1仮想アドレス空間領域から前記マッピングされた区域を再マッピングする工程と、
    前記アクセス要求を含む前記第2ターゲット・コード部分内の少なくとも選択された命令のブロックを変更して、所定のメモリ順序付け制約の下で前記ブロックに実行させる前記メモリ一貫性保護を適用し、前記第3仮想アドレス空間領域内でマッピングされる共有メモリ区域にアクセスするように前記選択されたブロックに指示する工程と
    をさらに実行する、請求項20に記載の方法。
  25. コンピュータ・プログラムであって、マルチプロセッサ・コンピューティング・システムに、請求項20〜24のいずれか1項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
JP2009537704A 2006-11-22 2007-11-20 マルチプロセッサ・コンピューティング・システムでのメモリ一貫性保護 Expired - Fee Related JP5583409B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GBGB0623276.3A GB0623276D0 (en) 2006-11-22 2006-11-22 Memory consistency protection in a multiprocessor computing system
GB0623276.3 2006-11-22
US87983407P 2007-01-11 2007-01-11
US60/879,834 2007-01-11
PCT/GB2007/050700 WO2008062225A1 (en) 2006-11-22 2007-11-20 Memory consistency protection in a multiprocessor computing system

Publications (2)

Publication Number Publication Date
JP2010510599A JP2010510599A (ja) 2010-04-02
JP5583409B2 true JP5583409B2 (ja) 2014-09-03

Family

ID=37636310

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009537704A Expired - Fee Related JP5583409B2 (ja) 2006-11-22 2007-11-20 マルチプロセッサ・コンピューティング・システムでのメモリ一貫性保護

Country Status (8)

Country Link
US (1) US7895407B2 (ja)
EP (1) EP2097817A1 (ja)
JP (1) JP5583409B2 (ja)
KR (1) KR101244014B1 (ja)
CN (1) CN101542441B (ja)
GB (2) GB0623276D0 (ja)
TW (1) TWI403898B (ja)
WO (1) WO2008062225A1 (ja)

Families Citing this family (87)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8695000B1 (en) * 2007-03-16 2014-04-08 The Mathworks, Inc. Data transfer protection in a multi-tasking modeling environment having a protection mechanism selected by user via user interface
US7657695B1 (en) * 2007-05-30 2010-02-02 Paravirtual Corporation Efficient processing of memory accesses to virtual hardware using runtime code patching
US8893126B2 (en) * 2008-02-01 2014-11-18 International Business Machines Corporation Binding a process to a special purpose processing element having characteristics of a processor
GB2457341B (en) * 2008-02-14 2010-07-21 Transitive Ltd Multiprocessor computing system with multi-mode memory consistency protection
US8006055B2 (en) * 2008-03-04 2011-08-23 Microsoft Corporation Fine granularity hierarchiacal memory protection
JP5115332B2 (ja) * 2008-05-22 2013-01-09 富士通株式会社 エミュレーションプログラム、エミュレーション装置およびエミュレーション方法
US8607344B1 (en) * 2008-07-24 2013-12-10 Mcafee, Inc. System, method, and computer program product for initiating a security action at an intermediate layer coupled between a library and an application
GB0813833D0 (en) * 2008-07-29 2008-09-03 Transitive Ltd Apparatus and method for handling page protection faults in a computing system
US9026424B1 (en) * 2008-10-27 2015-05-05 Juniper Networks, Inc. Emulation of multiple instruction sets
US7613850B1 (en) 2008-12-23 2009-11-03 International Business Machines Corporation System and method utilizing programmable ordering relation for direct memory access
WO2010099529A1 (en) * 2009-02-27 2010-09-02 Keicy Chung Central processing unit capable of multi-boot using disjoint memory spaces
US20110066897A1 (en) * 2009-09-11 2011-03-17 William Bumgarner Methods and apparatuses for determining permanent memory growth
US20110119469A1 (en) 2009-11-13 2011-05-19 International Business Machines Corporation Balancing workload in a multiprocessor system responsive to programmable adjustments in a syncronization instruction
US8418156B2 (en) * 2009-12-16 2013-04-09 Intel Corporation Two-stage commit (TSC) region for dynamic binary optimization in X86
KR101490468B1 (ko) * 2010-02-04 2015-02-06 삼성전자 주식회사 데이터 처리 장치 및 방법
EP2581832A4 (en) * 2010-06-08 2013-08-07 Fujitsu Ltd DEVICE, METHOD, AND PROGRAM FOR CONTROLLING ACCESS TO MEMORY, MULTI-HEART PROCESSOR SYSTEM
US8954697B2 (en) * 2010-08-05 2015-02-10 Red Hat, Inc. Access to shared memory segments by multiple application processes
CN102135894B (zh) 2010-10-13 2015-11-25 华为技术有限公司 一种多核在线补丁方法和装置
US10366100B2 (en) 2012-07-26 2019-07-30 Mongodb, Inc. Aggregation framework system architecture and method
US10740353B2 (en) 2010-12-23 2020-08-11 Mongodb, Inc. Systems and methods for managing distributed database deployments
US10346430B2 (en) 2010-12-23 2019-07-09 Mongodb, Inc. System and method for determining consensus within a distributed database
US9881034B2 (en) 2015-12-15 2018-01-30 Mongodb, Inc. Systems and methods for automating management of distributed databases
US10713280B2 (en) 2010-12-23 2020-07-14 Mongodb, Inc. Systems and methods for managing distributed database deployments
US11544288B2 (en) 2010-12-23 2023-01-03 Mongodb, Inc. Systems and methods for managing distributed database deployments
US8996463B2 (en) 2012-07-26 2015-03-31 Mongodb, Inc. Aggregation framework system architecture and method
US10262050B2 (en) 2015-09-25 2019-04-16 Mongodb, Inc. Distributed database systems and methods with pluggable storage engines
US10997211B2 (en) 2010-12-23 2021-05-04 Mongodb, Inc. Systems and methods for database zone sharding and API integration
US9805108B2 (en) 2010-12-23 2017-10-31 Mongodb, Inc. Large distributed database clustering systems and methods
US9740762B2 (en) 2011-04-01 2017-08-22 Mongodb, Inc. System and method for optimizing data migration in a partitioned database
US11615115B2 (en) 2010-12-23 2023-03-28 Mongodb, Inc. Systems and methods for managing distributed database deployments
US10614098B2 (en) 2010-12-23 2020-04-07 Mongodb, Inc. System and method for determining consensus within a distributed database
US10977277B2 (en) 2010-12-23 2021-04-13 Mongodb, Inc. Systems and methods for database zone sharding and API integration
US8572031B2 (en) 2010-12-23 2013-10-29 Mongodb, Inc. Method and apparatus for maintaining replica sets
CN102073533B (zh) * 2011-01-14 2013-06-19 中国人民解放军国防科学技术大学 支持动态二进制翻译的多核体系结构
WO2012101538A1 (en) * 2011-01-26 2012-08-02 International Business Machines Corporation Emulation of strongly ordered memory models
JP5967073B2 (ja) * 2011-02-21 2016-08-10 富士通株式会社 プロセッサ管理方法
US8850417B2 (en) 2011-04-15 2014-09-30 International Business Machines Corporation Method and framework for invisible code rewriting
US9015027B2 (en) 2011-04-21 2015-04-21 International Business Machines Corporation Fast emulation of virtually addressed control flow
WO2012167533A1 (zh) * 2011-10-31 2012-12-13 华为技术有限公司 一种构建内存访问模型的方法及装置
US20140068247A1 (en) * 2011-12-12 2014-03-06 Moose Loop Holdings, LLC Security device access
US8935513B2 (en) * 2012-02-08 2015-01-13 International Business Machines Corporation Processor performance improvement for instruction sequences that include barrier instructions
KR102040160B1 (ko) * 2012-02-29 2019-11-04 삼성전자주식회사 대칭 멀티스레딩 환경의 공유 데이터 동기화를 위한 결합 락 할당 및 참조
GB2500707B (en) 2012-03-30 2014-09-17 Cognovo Ltd Multiprocessor system, apparatus and methods
WO2014002162A1 (ja) * 2012-06-25 2014-01-03 富士通株式会社 ストレージ制御装置、情報処理装置、ストレージ制御プログラム、及びストレージ制御方法
US10872095B2 (en) 2012-07-26 2020-12-22 Mongodb, Inc. Aggregation framework system architecture and method
US11403317B2 (en) 2012-07-26 2022-08-02 Mongodb, Inc. Aggregation framework system architecture and method
US11544284B2 (en) 2012-07-26 2023-01-03 Mongodb, Inc. Aggregation framework system architecture and method
US9304924B2 (en) * 2012-08-17 2016-04-05 Futurewei Technologies, Inc. Cache coherent handshake protocol for in-order and out-of-order networks
EP2951705A4 (en) * 2013-01-29 2016-11-02 Hewlett Packard Development Co ASSIGNING PROCESSORS TO MEMORY TOPOGRAPHY CONFIGURATION
WO2015016926A1 (en) * 2013-07-31 2015-02-05 Hewlett-Packard Development Company, L.P. Versioned memory implementation
US9336413B2 (en) * 2013-11-22 2016-05-10 Oracle International Corporation Method and system for fast permission changes for virtual addresses
US9413765B2 (en) * 2014-03-25 2016-08-09 Intel Corporation Multinode hubs for trusted computing
US20150370707A1 (en) * 2014-06-24 2015-12-24 Qualcomm Incorporated Disunited shared-information and private-information caches
GB2532777B (en) 2014-11-28 2021-07-07 Advanced Risc Mach Ltd System error handling in a data processing apparatus
US10055209B2 (en) * 2015-01-12 2018-08-21 Red Hat, Inc. Resource closing
US9886210B2 (en) * 2015-06-09 2018-02-06 Ultrata, Llc Infinite memory fabric hardware implementation with router
US10713275B2 (en) 2015-07-02 2020-07-14 Mongodb, Inc. System and method for augmenting consensus election in a distributed database
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10846411B2 (en) 2015-09-25 2020-11-24 Mongodb, Inc. Distributed database systems and methods with encrypted storage engines
US10673623B2 (en) 2015-09-25 2020-06-02 Mongodb, Inc. Systems and methods for hierarchical key management in encrypted distributed databases
US10423626B2 (en) 2015-09-25 2019-09-24 Mongodb, Inc. Systems and methods for data conversion and comparison
US10394822B2 (en) 2015-09-25 2019-08-27 Mongodb, Inc. Systems and methods for data conversion and comparison
US9514083B1 (en) * 2015-12-07 2016-12-06 International Business Machines Corporation Topology specific replicated bus unit addressing in a data processing system
WO2017155523A1 (en) * 2016-03-09 2017-09-14 Hewlett Packard Enterprise Development Lp Server virtual address space
US10671496B2 (en) 2016-05-31 2020-06-02 Mongodb, Inc. Method and apparatus for reading and writing committed data
US10776220B2 (en) 2016-06-27 2020-09-15 Mongodb, Inc. Systems and methods for monitoring distributed database deployments
US11442760B2 (en) * 2016-07-01 2022-09-13 Intel Corporation Aperture access processors, methods, systems, and instructions
US10380342B2 (en) * 2016-07-29 2019-08-13 Qualcomm Incorporated Kernel-based detection of target application functionality using virtual address mapping
US9852202B1 (en) * 2016-09-23 2017-12-26 International Business Machines Corporation Bandwidth-reduced coherency communication
US10235202B2 (en) 2016-11-08 2019-03-19 International Business Machines Corporation Thread interrupt offload re-prioritization
US10423446B2 (en) 2016-11-28 2019-09-24 Arm Limited Data processing
US10552212B2 (en) * 2016-11-28 2020-02-04 Arm Limited Data processing
US10671426B2 (en) 2016-11-28 2020-06-02 Arm Limited Data processing
US10262144B2 (en) 2016-12-15 2019-04-16 International Business Machines Corporation Verifying proper operation of the instruction execution protection architecture
US10474469B2 (en) * 2017-04-12 2019-11-12 Arm Limited Apparatus and method for determining a recovery point from which to resume instruction execution following handling of an unexpected change in instruction flow
US10866868B2 (en) 2017-06-20 2020-12-15 Mongodb, Inc. Systems and methods for optimization of database operations
US11436143B2 (en) * 2017-12-22 2022-09-06 Alibaba Group Holding Limited Unified memory organization for neural network processors
US10592431B2 (en) * 2018-08-13 2020-03-17 Hewlett Packard Enterprise Development Lp Independent shared and process virtual address translations
WO2020114937A1 (en) * 2018-12-07 2020-06-11 Koninklijke Philips N.V. A computing device with increased resistance against address probing
US11734192B2 (en) 2018-12-10 2023-08-22 International Business Machines Corporation Identifying location of data granules in global virtual address space
US11016908B2 (en) * 2018-12-11 2021-05-25 International Business Machines Corporation Distributed directory of named data elements in coordination namespace
US10877788B2 (en) * 2019-03-12 2020-12-29 Intel Corporation Processing vectorized guest physical address translation instructions
US11307981B1 (en) * 2020-05-10 2022-04-19 Juniper Networks, Inc Systems and methods for sharing memory pointers across multiple processes
CN114402304A (zh) * 2020-08-19 2022-04-26 谷歌有限责任公司 存储器共享
TWI755112B (zh) * 2020-10-23 2022-02-11 財團法人工業技術研究院 電腦程式碼之優化方法、優化系統及應用其之電子裝置
CN113111391B (zh) * 2021-04-09 2022-07-08 支付宝(杭州)信息技术有限公司 用于内存完整性保护的方法和内存控制器

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5692153A (en) * 1995-03-16 1997-11-25 International Business Machines Corporation Method and system for verifying execution order within a multiprocessor data processing system
US6263414B1 (en) * 1998-07-17 2001-07-17 Technion Research And Development Foundation, Ltd. Memory for accomplishing lowered granularity of a distributed shared memory
US6591355B2 (en) * 1998-09-28 2003-07-08 Technion Research And Development Foundation Ltd. Distributed shared memory system with variable granularity
EP1380946B1 (en) 1998-10-10 2010-02-10 International Business Machines Corporation Program code conversion with reduced translation
US6748493B1 (en) * 1998-11-30 2004-06-08 International Business Machines Corporation Method and apparatus for managing memory operations in a data processing system using a store buffer
TW548547B (en) * 1999-06-18 2003-08-21 Ibm Method and system for maintaining cache coherency for write-through store operations in a multiprocessor system
US6496917B1 (en) * 2000-02-07 2002-12-17 Sun Microsystems, Inc. Method to reduce memory latencies by performing two levels of speculation
US6725341B1 (en) * 2000-06-28 2004-04-20 Intel Corporation Cache line pre-load and pre-own based on cache coherence speculation
US7398376B2 (en) * 2001-03-23 2008-07-08 International Business Machines Corporation Instructions for ordering execution in pipelined processes
AU2003249977A1 (en) 2002-07-05 2004-01-23 Axxima Pharmaceuticals Ag Imidazole compounds for the treatment of hepatitis c virus infections
US9043194B2 (en) * 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency
US6892286B2 (en) * 2002-09-30 2005-05-10 Sun Microsystems, Inc. Shared memory multiprocessor memory model verification system and method
US6892283B2 (en) * 2002-12-05 2005-05-10 International Business Machines Corporation High speed memory cloner with extended cache coherency protocols and responses
US7536682B2 (en) * 2003-04-22 2009-05-19 International Business Machines Corporation Method and apparatus for performing interpreter optimizations during program code conversion
GB2401217B (en) 2003-05-02 2005-11-09 Transitive Ltd Improved architecture for generating intermediate representations for program code conversion
GB0315844D0 (en) 2003-07-04 2003-08-13 Transitive Ltd Method and apparatus for performing adjustable precision exception handling
GB0316531D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
US7434209B2 (en) 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code
US7818724B2 (en) * 2005-02-08 2010-10-19 Sony Computer Entertainment Inc. Methods and apparatus for instruction set emulation
WO2006103395A1 (en) 2005-03-30 2006-10-05 Transitive Limited Preparing instruction groups in a processor having multiple issue ports

Also Published As

Publication number Publication date
WO2008062225A1 (en) 2008-05-29
KR20090115118A (ko) 2009-11-04
TWI403898B (zh) 2013-08-01
TW200839513A (en) 2008-10-01
GB2444148B (en) 2009-03-04
CN101542441A (zh) 2009-09-23
GB0722686D0 (en) 2007-12-27
JP2010510599A (ja) 2010-04-02
GB2444148A (en) 2008-05-28
KR101244014B1 (ko) 2013-03-25
US7895407B2 (en) 2011-02-22
EP2097817A1 (en) 2009-09-09
US20080140971A1 (en) 2008-06-12
GB0623276D0 (en) 2007-01-03
CN101542441B (zh) 2012-03-07

Similar Documents

Publication Publication Date Title
JP5583409B2 (ja) マルチプロセッサ・コンピューティング・システムでのメモリ一貫性保護
US7996629B2 (en) Multiprocessor computing system with multi-mode memory consistency protection
EP1626338B1 (en) System and method for providing exceptional flow control in protected code through watchpoints
US20160026488A1 (en) Instruction set emulation for guest operating systems
US10990487B1 (en) System and method for hybrid kernel- and user-space incremental and full checkpointing
US9053064B2 (en) Method for saving virtual machine state to a checkpoint file
US11119918B2 (en) Execution using multiple page tables
EP1626337A1 (en) System and method for providing exceptional flow control in protected code through memory layers
US20220383988A1 (en) Data processing system and method
US11061695B2 (en) Unikernel provisioning
JP2015530662A5 (ja)
US7769962B2 (en) System and method for thread creation and memory management in an object-oriented programming environment
US20130159639A1 (en) Optimizing for Page Sharing in Virtualized Java Virtual Machines
US11573868B1 (en) System and method for hybrid kernel- and user-space incremental and full checkpointing
KR101244153B1 (ko) 프로그램 코드 변환에 관한 프로세스 파일시스템을 관리하는 방법 및 기기
US11989569B2 (en) Unikernel provisioning
Aksenov et al. Execution of nvram programs with persistent stack
JP2009223841A (ja) 命令ログ取得プログラム及び仮想計算機システム
Arya User-space process virtualization in the context of checkpoint-restart and virtual machines
CN118069403A (zh) 一种异常指令的处理方法
Olszewski Aikido

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20091208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120328

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120622

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120622

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120802

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120813

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120813

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20121218

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20130416

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130416

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20130423

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20130517

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20131018

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20140702

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20140702

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140716

R150 Certificate of patent or registration of utility model

Ref document number: 5583409

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees