JP5137966B2 - マルチプロセッサ・コンピュータ上で実行するプロセスにより生成されるスレッドによってメモリへのアクセスを制御する方法、コンピュータ・プログラムおよびシステム - Google Patents

マルチプロセッサ・コンピュータ上で実行するプロセスにより生成されるスレッドによってメモリへのアクセスを制御する方法、コンピュータ・プログラムおよびシステム Download PDF

Info

Publication number
JP5137966B2
JP5137966B2 JP2009541925A JP2009541925A JP5137966B2 JP 5137966 B2 JP5137966 B2 JP 5137966B2 JP 2009541925 A JP2009541925 A JP 2009541925A JP 2009541925 A JP2009541925 A JP 2009541925A JP 5137966 B2 JP5137966 B2 JP 5137966B2
Authority
JP
Japan
Prior art keywords
page
thread
memory
access
writable
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
JP2009541925A
Other languages
English (en)
Other versions
JP2010514030A (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 JP2010514030A publication Critical patent/JP2010514030A/ja
Application granted granted Critical
Publication of JP5137966B2 publication Critical patent/JP5137966B2/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • 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
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、マルチプロセッサ・システム上で実行する複数のマルチスレッド・アプリケーション・プログラム相互間の共有メモリ・アクセスに関し、本発明は特に、たとえば仮想化マルチスレッド・アプリケーションの複製(replication)を容易にするために、共有メモリ・アクセスの決定論的イベント(deterministic events)を作ることに関する。
スレッド相互間の共有メモリ・アクセスを仮想化するための安全で素朴な方法はメモリへの全てのアクセスをログして、その複製マシンにおいてこれらを再生(replay)することである。これはパフォーマンスの観点から特に非効率である。
例えば複製マシン上のアプリケーション・プログラムのコードを単に再実行するだけで、プライマリ・マシン上で仮想化されるアプリケーションをバックアップ・マシン上で複製することができるようにするため、順序の決定づけられたマルチスレッド・プログラムの共有メモリ・アクセスを行う必要がある。
そのための主な用途としてフォールト・トレラントなシステムがある。フォールト・トレラント・システムでは、(大きな故障の場合に回復ざせるために)アプリケーションが主マシン上で実行され、その実行結果が第2のマシン上で完全に複製される。その複製は、非決定的結果を生じるイベントの記録および再生、あるいは決定的結果を生じるイベントを複製するためのコードの再実行によって達成される。決定論的マルチスレッド・プログラムにより共有メモリ・アクセスを行う他の一用法は、必要なだけの回数(このケースでは同じマシン上で)そのコードを再実行することにより行われる仮想化プログラムのデバッギングである。
書込み可能な共有領域に関するプロセスのインターリーブされた実行は、非決定であることの潜在的な原因となる。決定論的な共有メモリ・アクセスを行うことができるためには、共有メモリが並行プロセスによってアクセスされる順序が記録される必要がある。ユニプロセッサ・マシンの場合は、スケジューリング期間あたり一つのレコードを単にロギングすることによってその記録動作が最適化される。共有メモリ領域へのアクセスごとにロギングする代わり、もしそのレコードが、スケジューリング期間中にアクセスされた第1の命令の場所、ならびにそのスケジューリング期間の終わりまでにそのプロセスにより実行されたユーザー命令の数とともにプロセス識別子を特定するなら、その共有メモリがアクセスされた、スケジューリング期間あたり一つのレコードをログするのに十分である。その結果、あるスケジューリング期間に対し、共有メモリ・アクセスは決定論的イベントになる。バックアップ・マシンでこのイベントを再現(reproduce)するには、そのスケジューリング期間のレコードを復元し(restore)かつこの期間の間そのコードを再実行するので十分である。
マルチプロセッサ・マシンにこの最適化を拡張(extend)するためには、その共有メモリ領域へのアクセスを直列化するように相互排斥(mutual exclusion)のユニプロセッサの性質が課される必要がある。特許文献1はマルチプロセッサ・システム上のマルチプロセス・アプリケーションの決定論的再生(replay)をどのようにして実施するかを説明している。共有メモリ・アクセス制御機構が記述され、そこではそれはプロセッサのメモリ管理ユニット(MMU)を使用する。共有メモリへのアクセスの制御は一つのプロセッサのMMU(メモリ管理ユニット)ハードウエア・デバイスをあるメモリ・ページへのアクセスを許可するのを可能ならしめるようにプログラムし、他のプロセッサのMMUが同じページへ何らかのアクセスがあっても拒否するようにプログラムされていることによって行われる。
あるスケジューリング期間において、マルチプロセッサ・マシン上では共有メモリへの排他的アクセスが各々の個別のプロセスに与えられる。そのプロセスのページ・テーブルが各スケジューリング期間における1回のプロセスへのアクセスを選択的に許可する手段を備えている。しかし、マルチスレッド・プログラムの場合には、参加プロセスがそれらのアドレス・スペースを共有し、その共有されたページ・テーブルを備えることによる単一プロセッサの解決策はその全体のスレッド・グループに影響を及ぼすことであろう。更に、単一プロセッサ環境におけるプロセスと比べて、全アドレス空間がそれらのスレッドの間で共有されることになり、これらのアクセスを監視し制御するためにその共有アドレス空間の書込み可能な部分へのアクセスが追跡される必要がある。これは、メモリ・ページが共有されていても各タスクがそれ自身のプライベートなメモリ記述子のセットを有することができることを暗示する。これは全てのメモリ記述子が共有されるマルチスレッド・プログラムの場合はそうではない。特許文献1は、一つよりも多くのスレッドを作成する一つのタスクによる共有メモリ・アクセスを追跡するために、その発明において示されるようにモニターされる各タスク内でクローンにされる各スレッドにページ・テーブル・エントリの構造が拡張される必要のあることを示唆する。その発明原理は各タスクもしくは1個のタスクの中の各スレッドに与えられることができ、共有メモリ・ページへのアクセスはスケジューラにより定義された活性化期間(activation period)の全期間(entire duration)に亘って排他的である。この期間中、共有メモリ・ページはコヒーレントに維持される。
こうして全てが(それらのメモリ空間のサブセットのみを共有するプロセスというよりも)それらの全メモリ空間を共有するマルチスレッド・プログラムに適用することができるように、従来技術の共有メモリ・アクセス空間の直列化の機構にするためにカーネルの仮想メモリ・マネジャ・モジュールを拡張する必要がある。
特許文献2はマルチプロセッサ上で分散されたマルチスレッド化されたプログラムのランタイムの挙動を決定論的に再生するための方法を開示する。この方法はJVM(Java仮想マシン)におけるルーチンをロックする手段に依存する。この解決策はJVMの修正を暗示し、JVMのトップでランする純Javaアプリケーションに限定され、かつ全てのメモリ・アクセスがJVMにより為されるべきロックにより保護される必要があるという事実によって限定される。
汎用的でかつ任意のタイプのアプリケーションに透過的すなわちトランスペアレントに適用でき、マルチプロセッサ・コンピュータ上のマルチスレッド化されたプロセスに適用する、共有メモリ・アクセス制御を提供する必要がある。
フランス国特許出願WO2006/077261号 米国特許第6854108号公報
従って本発明の目的は、マルチスレッド・プログラムによる共有メモリ・アクセスを直列化するためそしてそれらを決定論的イベントとなるようにするために、そのようなアクセスをモニター可能かつ制御可能に行うことである。
本発明の他の目的は、アプリケーションにトランスペアレントに実施される方法を提供することにある。
本発明の他の一つの目的は、任意のタスクもしくはスレッドに排他的アクセスをより効果的に提供する、マルチプロセッサ環境において共有リソースへのアクセスを管理するための実在する(exsisting)方法を使用することである。
これらの目的は、特許請求の範囲の請求項1にあるように、マルチプロセッサ・コンピュータ上で実行するプロセスにより生成されるスレッドによってメモリへのアクセスを制御する方法であって、以下を含む方法によって達成される。すなわち、
新しいスレッドの生成を前記プロセスがリクエストするステップと、
新しいページ・テーブル・ディレクトリをメモリ記述子の中に割当て、かつ現在あるスレッドのページ・テーブルのコピーを生成するステップと、
イベントを待つステップと、
ページ・フォールトが生じるとき、メモリにページが有るか、そして書込み可能であるかを示す2個のビットをテストするステップと、
もし前記ページが有り、かつ書込み可能であれば、そしてもし前記スレッドがまさに出ようとするところかをテストされるなら、
前記ページ・フォールトを生じさせた前記スレッドに前記ページへのアクセスを許可し、そして前記ページがメモリに有り、かつ書込み可能であることを示すビットをセットし、かつ
イベントを待つ前記ステップに進むステップと、
もし前記ページが有り、かつ書込み可能であるなら、そしてもし他のスレッドが前記ページへのアクセスを有し、そして前記他のスレッドによる前記ページのリリースを待つなら、前記他のスレッドがリリースするのを待つステップと、
前記スレッドがアクセスをリリースしたとき、
前記ページ・フォールトを生じさせた前記スレッドに前記ページへのアクセスを許可し、かつ
前記ページがメモリに有りかつ書込み可能であることを示す前記ビットをセットするステップと、
イベントを待つ前記ステップに進むステップと
を含む方法である。
これらの目的はまた請求項1の方法により、さらに以下を備えた請求項2に従って達成される。すなわち、
前記ページがメモリに有りかつ書込み可能であることを示す前記2個のビットをテストする前記ステップの後、もし前記ページが無いかもしくは書込み可能でないなら、前記カーネルに前記ページ・フォールトを処理させるステップと、
前記カーネル・プロセスによる前記新しいページの生成後、前記新しいページが前記対応するビットをテストすることにより書込み可能であるかテストするステップと、
もし前記新しいページが書込み可能であれば、前記新しいページの前記有りビットをリセットするステップと、
前記カーネルにより生成される前記ページ・テーブル・エントリを、前記スレッド全ての前記他のページ・テーブルに伝播するステップと、
イベントを待つ前記ステップに進むステップと
を更に含む方法である。
これらの目的はまた本発明の好適な実施例の解決のための請求項3ないし4の方法、および第2の実施例の2つのテーブル構造のための請求項5ないし7の方法でもって達成される。
これらの目的はまた請求項8および9によるコンピュータ ・プログラムおよびシステムによって達成される。
本発明の解決策は、マルチプロセッサ・システム上で実行する各マルチヘッド・アプリケーションのための共有メモリ・ページを参照する別個のメモリ記述子を管理することができるようにする。
マルチスレッド・プログラムにより共有メモリ・アクセスを行うことによって本発明の主たる目的を達成するほかに、以下のような他の効果がある。
― 性能:この共有メモリ・アクセス制御は、それが、共有オブジェクト上の競合度合いを減じるので、粒度(granularity)が変化するとき(時間:命令期間からスケジューリング期間まで、スペース:4バイトのワードから4Kバイトのページまで)そのアプリケーションの性能を改良するかもしれない。
― 本発明の第3の目的により記述されるようなこの解決策は、プロセッサにおける現存するハードウエア機能の使用を最適化するのに十分なほど効果的である。好適な実施例の詳細な記述で述べるように、本発明の解決策は、プロセッサにおけるハードウエア変形例だけでなく、オペレーティング・システムのカーネルにおけるいくつかの重いソフトウエアの変化をも避けることによって、現存するコンピュータの変形例を制限する。
― 仮想化されていないタスクはその変形例によるインパクトを受けない。このオリジナルのメモリ管理システムは仮想化していないタスクのために保持される(preserve)。 他の解決策は、予測できない結果をもたらすかもしれない全てのタスクのための変形例を大域化する(globalize)かもしれない。この解決策は選択的に実施されることができる。例えば、メモリの追加的な使用は全てのタスクのためには受け入れることはできない。また、幾つかのタスクは粒度の変化をサポートしないかもしれない。(ハードウエアにより保証される(warrant))自然なアクセス制御は1個の命令ごとであり、またメモリ中の1個のメモリ・ワードのサイズごとである。それを監視するもしくは制御するという能力がない場合でさえそうである。望ましくない効果の一例は、2個のタスクが共有ページを交互にアクセスする場合のピンポン効果であるが、本発明の解決策はこの場合の性能を隠す。何故ならば排他的メモリ・ワードが或る時間スライスに割当てられ、その次のタスクが幾千もの命令を待たなければならないからである。これには一つの解決策があり、特定の命令によりそのページのリリースを特別に許可するようにそのアプリケーションを修正することである。
本発明が導入されないときのマルチスレッド・アプリケーションにおけるメモリ記述子の構造を示す図である。 本発明の好適な実施例による、タスクあたり1個のテーブルというメモリ記述子の構造を示す。 第2の実施例によるメモリ記述子の単純化した構造を示す。 好適な実施例による方法のフローチャートである。 第2の実施例による方法のフローチャートである。
マルチスレッドでないアプリケーションでは、共有メモリ・アクセスの順序を効果的に再生するために、共有メモリへの排他的アクセスがスケジューリング期間中の個別のプロセスに与えられる。プロセスのページ・テーブルは各スケジューリング期間中の単一のプロセスへのアクセスを選択的に許可するように装備(instrument)される。しかし、マルチスレッド・プログラムの場合は、そこに参加するプロセスがそれらのアドレス空間を共有し、その共有されたページ・テーブルを道具化することがその全体のスレッド・グループに影響を及ぼす。更に、マルチスレッドでないアプリケーションにおけるプロセスに比べて、全アドレス空間がそれらのスレッド間で共有されるであろう。そしてこれらのアクセスを監視し制御するために共有アドレス空間の書込み可能な部分への任意のアクセスが追跡される必要がある。それから、フォールト・トレラント・システムにおける共有されたアドレス空間へのマルチスレッド・プログラム・アクセスを複製するには、そのアクセス情報がログされ、そしてバックアップ・マシンにおいてプログラム・コードを再実行するによりそのアクセスを再生するのに使用されることになる。
プロセスがその共有されたメモリ領域をアクセスする順序を追跡するために、アクセスが空間と時間において追跡されるときの粒度を変えることによって種々のデザイン選択が浮上する。空間の粒度は個別のメモリ・ロケーションから、ページまで、その全アドレス空間に変化することができるが、時間の粒度は共有領域をアクセスする単一命令から全スケジューリング期間まで変化する。命令レベルの粒度で個別のメモリ・ロケーションへのアクセスを追跡することによって、そのプライマリ上でのアプリケーションの実行は正確に複製されることができる。しかし、そのようにすることは望ましくないし実現可能性もない。
カーネル・スレッドの従来の実装は全スレッド・グループに単一のページ・テーブルを提供する。メモリ・アクセスの順序を追跡するために、以下の技法を用いることができる。その共有ページ・テーブルはアドレス空間の全ての書込み可能な部分へのアクセスを否定するように修正される。そうすることはその領域をアクセスしようとする任意のスレッドがページ・フォールトを生じさせるのを強制するであろう。ページ・フォールト・ハンドラでは、そのアクセスがログされ、現在の命令は、そのメモリ・ロケーションへのアクセスがイネーブルされるようにして、再実行される。これは個々のスレッドによる共有メモリへの個々のアクセスがログされるのを確保する。しかし、この方法はまた個々のメモリ・アクセスを遮ることにより高いオーバーヘッドを課する。
以前の方法の効率を改良するためには、粒度が命令レベルのものからスケジューリング期間のものに変更されても良い。これはスケジューリング期間中のアクセスの相互除外を必要とし、またスレッド・グループ中のスレッド毎に一つ、同期されたセットのページ・テーブルを維持することにより全スケジューリング期間のための個別のプロセスへのアクセスを選択的に与えることができる。スレッドがランするようにスケジュールされていると、その対応するページ・テーブルがMMUのコンテキスト中にロードされる。
スレッド・グループごとに使用されるページ・テーブルのセットは完全に同期されていなければならない。そのセット中の2つのページ・テーブルにまたがる、対応するエントリ相互間の現在フラグに差があり得る。任意のページ・テーブルのエントリが修正されるときは常にその残りのページ・テーブルにその変更が伝播される必要がある。(aio、swapなど )多くのカーネル・サブシステムがページ・テーブルを修正し、各インスタンスではその修正がそのグループのページ・テーブルに一つ残らず伝播される必要がある。
メモリの粒度は考慮すべきもう一つの要素である。バイト(またはプロセッサ・ワード)レベルの粒度が共有メモリ・アクセスの命令を追跡するために必要とされる最適の度合いの直列化を提供する。もしメモリの単位が例えばページであれば、競合するプロセスは競合のロケーションだけというのではなく全ページへのアクセスを否定されることになる。これは多くのリソースへのロックがその同じページに置かれるとき特に問題となる。そのページへのアクセスを直列化することはリソースの全セットへのアクセスを直列化することになる。ワード・レベルの粒度が望ましいが、それはその背景となるアーキテクチャにより使用されるメモリの単位に依存する。典型的なMMUアーキテクチャは最適のページ・テーブル・サイズのためのページ・レベルの粒度でメモリを管理する。
全く反対に、もしアドレス空間レベルの粒度が使用されるなら、スケジューリング期間中に排他的アクセスを提供するのに必要とされるページ・テーブルの数は、スレッド・グループ中のスレッドの数に関係なく2に圧縮される。1個のスレッドのための書込み可能なアドレス空間に排他的アクセスを与えるためには、そのスレッドのページ・テーブル中の対応するエントリが有りとマークされ、一方でその残りのページ・テーブルの書込み可能なエントリが無しとマークされることになる。そのアドレス空間へのアクセスが否定されてきたスレッドの複数のページ・テーブルが同一なので、単一のページ・テーブル(アンチ・ページ・テーブルと呼ぶ)が使用され得る。実際、アンチ・ページ・テーブルの実際のエントリは、ページ変換(translation)で決して使用されないので、無関係である。アクセスを否定されるスレッドのコンテキストからメモリ・アクセスが行われるときは、アンチ・ページ・テーブルがフォールトを強制するように使用されるだけである。あるスレッドがそのアドレス空間へのアクセスを否定されるべきときは、そのページ・テーブルがアンチ・ページ・テーブルに切換えられ、またその逆もありえる。
以下はリナックス・カーネル(Linux kernel、商標)およびリナックス・ページング・モデル(Linux paging model)のコンテキストにスレッドのための共有メモリ排他的アクセス・メカニズムの実装を説明する。その記述はリナックスの特定の用語を使用するが、その方法は他のオペレーティング・システムおよびアーキテクチャにも適用可能とされるように十分一般的である。
特許文献1の特許出願の発明を適用して、共有メモリへの排他的アクセスを与えるためには、その実装が単一のプロセスへのアクセスをシームレスに許可する能力を提供するべきであり、そしていずれかの他のスレッドがその領域をアクセスしようとするときフォールトを生じさせるべきである。最近のアーキテクチャで利用することができるページング・メカニズムはこの目的のために活用される。特定のページが物理メモリに割当てられるかを表す「ページ有り」ビットは、またそのページへの排他的アクセスが他のプロセスに割当てられるときページ・フォールトをトリガーするように人為的にリセットされる。そうすることは、普通のページング・メカニズムと潜在的にぶつかることもあり得る。これはカーネルのファイル交換者がそのページを決して交換しないようにその使用カウンタを増分させることによってそのページ上でのロックを獲得することによって回避される。
図1は本発明が実装されないときのマルチスレッド・アプリケーションにおけるメモリ記述子の構造を示す。それは従来のスレッドによって頁テーブルがどのようにして共有されるかを図式的に示す。図1では、仮想メモリ管理を含む多くのオペレーティング・システムに見出されるようなページ・テーブル階層の一例が示される。メモリ記述子110はメモリをアクセスする必要があるプロセスの全てのスレッド100によりアクセスされる。メモリ記述子は高レベルのページ・テーブル階層である。それはツリーのルートとなるページ・グローバル・ディレクトリ即ちPGD130へのポインタ120を含む。そのPGDは、物理メモリへのページ・フレーム160、165へのポインタであるページ・エントリ(PTE)150のリストにインデックスを付けるページ・ミドル・ディレクトリ即ちPMD140をポイントする。これらのPGD、PMD、およびPTEがページ・テーブル構造170を構成し、スレッドがそれらの共通のアドレス空間のページをアクセスするのを可能にする。その同じページ・フレーム160および165は前述のページ・テーブル構造170を介しその3つのスレッド100によってアクセスされる。
図2は本発明の好適な実施例による、タスクあたり1個のテーブル、メモリ記述子の構造を示す。
特許文献1の発明を適用する第1のアプローチでは、1個のスレッド毎に排他的アクセスが保障されるように各スレッドのためのPTEを複製するので十分である。これは所与のページ・テーブル・エントリのために対応するページ・テーブルにおける現在のフラグを選択的にオンにすることによって行われる。しかし、アドレス返還がCPUのMMUの中にハードワイヤで行われるので、その全体のページ・テーブル階層は複製される必要がある。実際にも、メモリ記述子200のさらに高いレベルでその分離が行われることができるが、これにはアドレス空間を処理するのに関係するページ・テーブル階層および他のパラメータを含む。各スレッドには、このアプローチでは、別箇のメモリ識別子が与えられる。リナックスでもって新しいプロセスを生み出し、そのページ・テーブルを複製するフォーク・システム・コールの実装を活用することができよう。フォークを用いることは困難な同期を招来することを暗示するであろう。メモリ識別子広く使用される、アーキテクチャと独立のデータ構造であり、スレッドのための意味論(semantics)を変えることは拡張したカーネル修正を必要とするであろう。更に、集中ロックがスレッド・グループ中の種々のメモリ記述子にまたがるページ・テーブルを同期させるのに必要とされるであろう。
図2に示されるように、好適な実施例では、グループ中の各スレッドがプライベート・ページ・テーブル210に割当てられる。これらのプライベート・ページ・テーブル210のハッシュ・テーブルは、これにはスレッドidによるインデックスが付けられるが、そのスレッド・グループにより共有されるメモリ記述子200に維持される。更に、ページ・ディレクトリがコンテキスト切換え動作中に迅速にアクセスされ得るように、そのページ・ディレクトリへのポインタ220が、対応するスレッドのプロセス記述子中に置かれる。プロセスのメモリ記述子のみが、カーネルの仮想メモリ管理サブシステム中で動作している際に利用できるとき、このハッシュ・テーブルが特定のスレッドのページ・ディレクトリを得るのに使用される。各スレッドがそのプライベート・ページ・テーブル210を一旦有すると、特許文献1の解決策に従う通常のプロセスのための共有メモリ・アクセス制御の場合に行われるのとまさに同じ態様でメモリの書込み可能部分へのアクセスが制御される。スレッドの場合はそのアドレス空間の全てのページが共有されるが、プロセスの場合は共有ページにそのような特定のマークが付けられる。図5に関連して記されるようなプロセスを用いると、そのメモリの幾つかのアクセスが2個のスレッド(スレッド1およびスレッド2)には許可され(255、257)、全てのスレッドへは幾つかの他のアクセス(263、265、267、269)が否定される。
各スレッドが一旦そのプライベート・ページ・テーブル210をもつと、メモリの書込み可能部分へのアクセスがそのグループ中の複数のスレッドのうちの1つに選択的に許可される。その許可は、その許可されるスレッドのためのアクセスされたページのPTEにおいてページ有りビットをセットし、一方で他の全てのスレッドのためのビットを、それらがそのページをアクセスしようとすると、ページ・フォールトを発生するようにリセットすることによって行われる。
図3は、あるスレッドに全アドレス空間へのアクセスが与えられるときの、マルチスレッド・アプリケーションの特定の場合におけるメモリ記述子を単純化した構造を示す。本発明の第2の実施例は本書における前述のようなアドレス空間レベルの粒度を適用する。この場合、スケジューリング期間中の排他的アクセスを提供するのに必要とされるページ・テーブルの数は2まで圧縮されることができる。あらゆるスレッド・グループはそれと関連して1対のページ・テーブルを有することになる。それは、プロ・ページ・テーブル370とアンチ・ページ・テーブル375である。プロ・ページ・テーブル370はアドレス変換のために使用され、そのスケジューリング期間中のアドレス空間へのアクセスが与えられるスレッド(図3のスレッド1)に割当てられる。そのスケジューリング期間中はアクセスを否定される、残りのスレッド(スレッド2およびスレッド3)にはアンチ・ページ・テーブル375が割当てられる。図示されたページ・テーブル構造はそのスレッド・グループにより共有される独特のメモリ記述子300を含む。メモリ記述子は2個のページ・テーブル370、375の其々のページ・ディレクトリ330、335への2個のポインタ310、320を含む。各ページ・テーブル構造は、夫々がエントリ350、355のリストにインデックスを付けるページ・ミドル・ディレクトリ340、345を含む。図3では、図5と関連して記されるようなプロセスを用いて、2個のページ・フレーム160、165をアクセスするためのスレッド1へのアクセスが許可され(365、367)、またそのような2個のページ・フレーム160、165をアクセスするためのそのグループの他のスレッド、スレッド2およびスレッド3へのアクセスが否定される(362、364)。
図4は好適な実施例によるスレッド・グループのスレッドからメモリをアクセスするための方法のフローチャートである。
クローン・システム・コールの一部としてプライベート・ページ・テーブルが生成される。もし仮想化されたプロセスがVM_クローン・フラグ・セット付きのシステム・コールを呼び出さないなら、スレッドのためのアクセス制御システムは使用されず、また今日の方法も実行されない。仮想化プロセスがVM_クローン・フラグ・セット付きのクローン・システム・コールを呼び出すとき、現在あるコピー_MM機能は、生成されているスレッドのためのプライベート・ページ・テーブルを保持するように、またそれをハッシュ・テーブルに加えるようにして新しいページ・ディレクトリを割当てるように修正される。それはそれから全ページ・テーブル階層を対称的にコピーするための新しい機能、rr_dup_vmasを呼び出す。この機能は、新しく生成された子プロセスのための新しいページ・テーブルを生成するためフォークによって呼び出されるdup_vmasを実在する機能が呼び出された後にモデル化される。これらの二つの機能の間の重要な差は以下のとおりである。rr_dup_vmasの場合、全てのページ・テーブル・エントリが例外なくコピーされるが、dup_vmasは、実在するフラグが呼び出したVM_DONT_COPYがセットされるページをスキップする。 更に、dup_vmas機能が書込み時のコピーオンライト(書換え時コピー)を採用するため親および子の両方のためにアドレス空間読み出し専用の書換え可能部分をマークするが、rr_dup_vmasは全ての書換え可能なエントリを無し(absent)にする。あるグループ中の複数のスレッドにより使用されるページ・テーブルのセットはそれらのスレッドのメモリ共有意味論を保存するために同期を維持される。いずれかのページ・テーブルに修正が有れば、これらの変化が他のピアなスレッドのコンテキストに反映されるようにその残りに伝播される。
スレッドのための共有メモリ・アクセス制御の実装は、プロセスの場合には起こらない特定の問題に取り組む必要がある。カーネルはプロセスのアドレス空間をしばしば直接アクセスする。例えば、ユーザー・レベルのスレッドもしくはプロセスがメモリ・バッファを呼び出されたシステム・コールにパスすると、カーネルのファイル・システム・コンポーネントはユーザーにより供給されるバッファに空間プログラムを直接書き込む。共有メモリへのこのようなアクセスはアクセス制御メカニズムにより通常は調停(arbitrate)される。しかし、スレッドの場合は、スレッドがまさに出口から出ようとするとき、カーネルがプロセス・アドレス空間におけるユーザーが供給するメモリ・ポインタにスレッド識別子の値を直接書き込む。このようなアクセスはPF_EXITINGと呼ばれるプロセス記述子中の実在するフラグをチェックすることによってアクセスが検知され、そしてもしフラグがセットされるなら、その特定のアクセスが通常のアクセス制御から除外され、そしてカーネルに無条件アクセスが与えられる。
一般に、スレッド単位のページ・テーブルはその対応するスレッドが出口から出るとき出口のシステム・コールを呼び出すことにより明示的に、あるいはカーネルによりキル(kill)されるとき黙示的にフリーにされる。特に、プロセスにおける複数のスレッドのうちの一つがシステム・コール実行(exec system call)を呼び出すと、それはそのプロセスの現在のアドレス空間をアンマップし、システム・コール実行を呼び出したスレッドを除きそのプロセス中の他の全てのスレッドを生成し、キルする。カーネルのスレッド出口動作は、その出口を出るスレッドと関連するページ・テーブル階層およびページ・ディレクトリをリリースするように修正される。システム・コール実行の終了時に、ただ一つのプロセスがページ・テーブルの新たなセットとともに残る。このプロセスにより生成される任意の皇族のスレッドがそのページ・テーブルのコピーを受け継ぎ、その排他的アクセス制御が再び行われる。
図4のフローチャートで、以下のような対応するステップを説明する。
VM_クローンを備える新しいスレッドの生成をリクエストするステップ405、
メモリ中の新しいページ・テーブル・ディレクトリを記述子に割当て、そしてそのとき存在しているスレッドのページ・テーブルのコピーを生成するステップ410、
イベントを待つステップ420、
ページ・フォールトが生じる(ステップ430)とき、2個のビットがそのページがメモリに有り、そして書込み可能かを示す2個のビットがテストされるステップ435、
もし前記ページが有り、かつ書込み可能であれば(イエス・テスト435)、そしてもし前記スレッドがまさに出ようとするところかをそのスレッドがテストされるなら(リナックスPFビットがテストされるステップ455 イエス)、
前記ページ・フォールトを生じさせた前記スレッドに前記ページへのアクセスを許可し、そして前記ページがメモリに有り、かつ書込み可能であることを示すビットをセットし(ステップ465)、かつ
イベントを待つ前記ステップ420に進むステップ、
もし前記ページが有り、かつ書込み可能であるなら、そしてもし他のスレッドが前記ページへのアクセスを有し、そして前記他のスレッドによる前記ページのリリースを待つ(ステップ470)なら、前記他のスレッドがリリースするのを待つステップ460、
前記スレッドがアクセスをリリースしたとき、
前記ページ・フォールトを生じさせた前記スレッドに前記ページへのアクセスを許可し、かつ
前記ページがメモリに有りかつ書込み可能であることを示す前記ビットをセットするステップ、および
イベントを待つ前記ステップに進むステップがある。
前記ページがメモリ中に有り、書込み可能であることを示す2個のビットをテストするステップ435の後、もし前記ページが有るのではなく、もしくは書込み可能でえないなら、カーネルに前記ページ・フォールトを処理させるステップ440、
新しいページが前記カーネル・プロセスによるその生成後に、その対応するビットをテストすることにより書込み可能になるかテストするステップ445、
その新しいページが書込み可能であれば、その新しいページの「有り」ビットをリセットするステップ450、
カーネルにより生成されたページ・テーブル・エントリを、全てのスレッドの他のページ・テーブルに伝播するステップ425、
イベントを待つ前記ステップに進むステップ420がある。
イベントを待つ前記ステップの後、
スレッドがスケジュールされる(ステップ475)とき、スケジュールされる予定の前記スレッドの前記ページ・テーブルに前記メモリの前記ハードウエア・コンテキストを切換えるステップ480、および
イベントを待つ前記ステップに進むステップ420がある。
イベントを待つ前記ステップの後、
スレッドが出口から出る(ステップ485)とき、当該スレッドのために前記ページ・ディレクトリをリリースするステップ490、および当該スレッドのために前記メモリ・アクセ制御を終了させるステップがある。
図5は2個のページ・テーブルの実施例によるスレッド・グループのスレッドからメモリをアクセスするための方法のフローチャートである。
アンチ・ページ・テーブルは、現在のフラグをリセットすることによりディスエ―ブルされるアドレス空間の書込み可能な部分の全てを備えたプロ・ページ・テーブルのレプリカである。それはそのグループの第1のスレッドにより最初に生成され、そのときそれは第2のスレッドをフォークし、スレッド・カウントが1よりも大きくなる。親スレッドおよび子スレッドの両方が初期的にアンチ・ページ・テーブルに割当てられる。その後生成されたスレッドはアンチ・ページ・テーブルをその生成時に割当てられる。フォークから戻る前に、親のハードウエア・コンテキストがアンチ・ページ・テーブルを採用するように切換えられる。子が初めてランするようにスケジュールされると、そのコンテキスト切換えルーチンはアンチ・ページ・テーブルを割当てるであろう。
そのグループ中の任意のスレッドがそのアドレス空間の書込み可能部分をアクセスしようとすると、ページ・フォールト割り込みが発生される。そのページ・フォールト割り込みはプロセッサにより提供される割り込みであり、カーネルを助けてデマンド・ページングおよびコピーオンライトのような機能を実装する。この割り込みをサービスする割り込みハンドラは、プロ・ページ・テーブルにおける対応するエントリの存在(有り)フラグおよび書込みフラグを調べることによって、アクセス制御により引き起こされるフォールトから、カーネルの通常の機能の一部として発生されるページ・フォールト割り込みを区別する。もしそのページが存在し、かつ書込み可能であれば、そのフォールトはアクセス制御により引き起こされたに違いない。そしてそのスレッドは他のスレッドがすでにアクセスをホールドしていないならそのアドレス空間へのアクセスを与えられる。もしそのページが存在しないもしくは、もしそれが読み出し専用ページへの書込みアクセスであったなら、ページ・フォールトは真性であり、カーネルにより提供されるレギュラー・チャネルを介して処理されるであろう。もしそのページがプロおよびアンチのページ・テーブルの両方に存在しないなら、ページ・フォールトがまずはカーネルにより与えられる通常のチャネルを介し、通常のページ・フォールトとして処理されるであろう。もしそのページがプロおよびアンチのテーブルの両方に存在しないなら、ページ・フォールトはそのアドレス空間へのアクセスをアービトレートする前に先ずは通常のページ・フォールトとして処理される。
所与のタイミングで、スレッド・グループ中のスレッドの一つだけがそのアドレス空間へのアクセスをするであろう。そのアクセスをホールドするスレッドのスレッド識別子(tid)がメモリ記述子にストアされ、ロックによって保護される。スレッドがスケジューリング期間中、初めて共有メモリをアクセスしようと試み、そしてその共有メモリが任意の他のプロセスにより既にホールドされているというのでないなら、そのtidがメモリ記述子の中にストアされ、そのタスクのハードウエア・コンテキストがその新しいページ・テーブルを反映するように変更され、古いページ・テーブルのTLBエントリが無効にされる。ページ・フォールトが生じたものとは異なるプロセッサ叙ウデランするようにタスクがスケジュールされることがあり得る。しかし、これは問題を生じさせない。何故ならばその新しいページ・テーブルが、そのページ・フォールト・ハンドラから戻る前に、ロードされるからである。
もしそのアクセスがすぐに許可されることができないなら、他のタスクがランするようにスケジュールされる。この待機しているスレッドはそのアドレス空間がオーナー・スレッドによりリリースされるときに時としてアクセスを得ることになろう。あるタスクが中断され、あるいはそのタスクが出口を呼び出すと、メモリ記述子にストアされたそのtidを取り除くことによってそのアクセスがリリースされる。
図5のフローチャートで、対応するステップを説明する。
この第2の実施例の場合、メモリ記述子中に新しいページ・テーブル・ディレクトリを割当て(ステップ410)、そしてその存在するスレッドのページ・テーブルのコピーである新しいページ・ディレクトリを生成することはそれが第1のスレッドである場合のみ実行される。そしてそれは更に
書込み可能なビット・セットを有する全てのページのページ存在フラグをリセットするステップを含む。
メモリのハードウエア・コンテキストをスケジュールされるスレッドのページ・テーブルへ切換えるというステップが以下で置き換えられる(ステップ500)。 もしスレッドがアドレス空間(プロPGD)へのアクセスを有するなら、メモリのハードウエア・コンテキストをその存在するページ・テーブルに切換え、
もしそのスレッドがそのアドレス空間へのアクセスを有していないなら、そのメモリのハードウエア・コンテキストをその新しく生成されたページ・ディレクトリ(アンチPGD)に切換える。
スレッドが存在するときにそのページ・ディレクトリをリリースするステップ490(図4)がステップ510(図5)に置き換えられる。
すなわち、そのプロセスにもう一つだけスレッドが残っているときに、その新しく生成されたページ・ディレクトリをリリースするステップ510に置き換えられる。
この好適な実施例の解決策の欠点はページ・テーブルがスレッドごとにインスタンス化されるので、メモリ管理の複雑さを増すかもしれないことである。一つのスレッドにおけるマッピングでの変化はそのグループにおける他のスレッドに伝播される必要がある。2個のページ・テーブルの実施例の場合、アクセス制御の実施はもっと単純である。

Claims (8)

  1. マルチプロセッサ・コンピュータ上で実行するプロセスにより生成されるスレッドによってメモリへのアクセスを制御する方法であって、
    新しいスレッドの生成を前記プロセスがリクエストするステップと、
    新しいページ・テーブル・ディレクトリをメモリ記述子の中に割当て、かつ現在あるスレッドのページ・テーブルのコピーを生成するステップと、
    イベントを待つステップと、
    ページ・フォールトが生じるとき、メモリにページが有るか、そして書込み可能であるかを示す2個のビットをテストするステップと、
    もし前記ページが有り、かつ書込み可能であれば、そしてもし前記スレッドがまさに出ようとするところかをテストされるなら、
    前記ページ・フォールトを生じさせた前記スレッドに前記ページへのアクセスを許可し、そして前記ページがメモリに有り、かつ書込み可能であることを示すビットをセットし、かつ
    イベントを待つ前記ステップに進むステップと、
    もし前記ページが有り、かつ書込み可能であるなら、そしてもし他のスレッドが前記ページへのアクセスを有し、そして前記他のスレッドによる前記ページのリリースを待つなら、前記他のスレッドがリリースするのを待つステップと、
    前記スレッドがアクセスをリリースしたとき、
    前記ページ・フォールトを生じさせた前記スレッドに前記ページへのアクセスを許可し、かつ
    前記ページがメモリに有りかつ書込み可能であることを示す前記ビットをセットするステップと、
    イベントを待つ前記ステップに進むステップと
    前記ページがメモリに有りかつ書込み可能であることを示す前記2個のビットをテストする前記ステップの後、もし前記ページが無いかもしくは書込み可能でないなら、前記カーネルに前記ページ・フォールトを処理させるステップと、
    前記カーネル・プロセスによる前記新しいページの生成後、前記新しいページが前記対応するビットをテストすることにより書込み可能であるかテストするステップと、
    もし前記新しいページが書込み可能であれば、前記新しいページの、前記ページがメモリに有りのビットをリセットするステップと、
    前記カーネルにより生成される前記ページ・テーブル・エントリを、前記スレッド全ての前記他のページ・テーブルに伝播するステップと、
    イベントを待つ前記ステップに進むステップと
    を含む方法。
  2. 前記イベントを待つ前記ステップの後、
    スレッドがスケジュールされるとき、スケジュールされる予定の前記スレッドの前記ページ・テーブルに前記メモリの前記ハードウエア・コンテキストを切換えるステップと、
    イベントを待つ前記ステップに進むステップと
    を更に含む、請求項1に記載の方法。
  3. イベントを待つ前記ステップの後、
    スレッドが存在するとき、当該スレッドのために前記ページ・ディレクトリをリリースするステップと、
    当該スレッドのために前記メモリ・アクセ制御を終了させるステップと
    をコンピュータで実行可能にするよう更に含む、請求項1に記載の方法。
  4. 前記メモリ記述子において新しいページ・テーブル・ディレクトリを割当て、かつ前記存在するスレッドの前記ページ・テーブルのコピーである新しいページ・ディレクトリを生成する前記ステップが、前記存在するスレッドが前記第1のスレッドである場合にのみ実行され、かつ
    前記書込み可能なビット・セットを有する前記ページ全ての前記ページ有りフラグをリセットするステップを更に含む、請求項1ないし請求項3のいずれかに記載の方法。
  5. 前記メモリの前記ハードウエア・コンテキストを、スケジュールされるべき前記スレッドの前記ページ・テーブルに切換える前記ステップに代えて、
    もし前記スレッドが前記アドレス空間へのアクセスを有するなら前記存在するページ・テーブルに前記メモリの前記ハードウエア・コンテキストを切換えるステップと、
    もし前記スレッドが前記アドレス空間へのアクセスを有しなければ、前記新しく生成されたページ・ディレクトリに前記メモリの前記ハードウエア・コンテキストを切換えるステップと
    を更に含む、請求項4に記載の方法。
  6. 前記ページ・ディレクトリをリリースする前記ステップは、スレッドの出口が、
    前記プロセスにあと一つだけスレッドが残っているときに前記新しく生成されたページ・ディレクトリをリリースするステップに置き換えられた、請求項4または請求項5に記載の方法。
  7. 請求項1ないし請求項6のいずれか一つに従う方法のステップをコンピュータ上で実行するプログラミング・コード命令を含むコンピュータ・プログラム。
  8. 請求項1ないし請求項6のいずれか一つに従う方法を実行するように適用された手段を含むシステム。
JP2009541925A 2006-12-21 2007-06-15 マルチプロセッサ・コンピュータ上で実行するプロセスにより生成されるスレッドによってメモリへのアクセスを制御する方法、コンピュータ・プログラムおよびシステム Expired - Fee Related JP5137966B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP06301287A EP1936498A1 (en) 2006-12-21 2006-12-21 A method and system to manage memory accesses from multithread programs on multiprocessor systems
EP06301287.6 2006-12-21
PCT/EP2007/055977 WO2008074520A1 (en) 2006-12-21 2007-06-15 A method and system to manage memory accesses from multithread programs on multiprocessor systems

Publications (2)

Publication Number Publication Date
JP2010514030A JP2010514030A (ja) 2010-04-30
JP5137966B2 true JP5137966B2 (ja) 2013-02-06

Family

ID=38436963

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009541925A Expired - Fee Related JP5137966B2 (ja) 2006-12-21 2007-06-15 マルチプロセッサ・コンピュータ上で実行するプロセスにより生成されるスレッドによってメモリへのアクセスを制御する方法、コンピュータ・プログラムおよびシステム

Country Status (6)

Country Link
EP (1) EP1936498A1 (ja)
JP (1) JP5137966B2 (ja)
KR (1) KR101063604B1 (ja)
CN (1) CN101563674A (ja)
CA (1) CA2672481A1 (ja)
WO (1) WO2008074520A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101604259B (zh) * 2009-06-10 2011-12-21 深圳市共进电子有限公司 一种基于嵌入式系统的多进程同步调度的方法
CN101840312B (zh) * 2009-12-31 2012-01-11 创新科存储技术有限公司 一种用于多核处理器的raid5写数据方法及装置
WO2011127862A2 (zh) 2011-05-20 2011-10-20 华为技术有限公司 多线程访问多副本的方法和装置
KR101252188B1 (ko) * 2011-05-31 2013-04-05 주식회사 잉카인터넷 가상 메모리 데이터 접근 제어방법
US9652289B2 (en) 2012-04-27 2017-05-16 Microsoft Technology Licensing, Llc Systems and methods for S-list partitioning
CN106104502B (zh) * 2014-03-20 2019-03-22 慧与发展有限责任合伙企业 用于存储系统事务的系统、方法和介质
CN106033368B (zh) * 2015-03-09 2019-02-22 北京大学 一种多核虚拟机确定性重演的方法
KR102377726B1 (ko) * 2015-04-17 2022-03-24 한국전자통신연구원 분산 파일 시스템에서의 파일 복제 제어 장치 및 방법
CN107346253A (zh) * 2016-05-06 2017-11-14 中兴通讯股份有限公司 应用同步方法及装置
CN111045476B (zh) * 2019-12-18 2021-07-27 湖南国科微电子股份有限公司 多核cpu系统下时序波形控制方法、系统、设备及介质
CN111563066B (zh) * 2020-04-24 2023-08-11 深圳震有科技股份有限公司 基于文件锁实现应用程序单例处理方法、装置
CN116431315B (zh) * 2023-06-07 2023-08-29 成都登临科技有限公司 批处理任务的处理方法、装置、电子设备及存储介质
CN116737086B (zh) * 2023-08-14 2023-11-17 江苏云途半导体有限公司 一种嵌入式非易失性存储器读写方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175837A (en) * 1989-02-03 1992-12-29 Digital Equipment Corporation Synchronizing and processing of memory access operations in multiprocessor systems using a directory of lock bits
FR2881239B1 (fr) * 2005-01-24 2007-03-23 Meiosys Soc Par Actions Simpli Procede de gestion d'acces a des ressources partagees dans un environnement multi-processeurs

Also Published As

Publication number Publication date
KR20090084881A (ko) 2009-08-05
EP1936498A1 (en) 2008-06-25
KR101063604B1 (ko) 2011-09-07
WO2008074520A1 (en) 2008-06-26
CA2672481A1 (en) 2008-06-26
JP2010514030A (ja) 2010-04-30
CN101563674A (zh) 2009-10-21

Similar Documents

Publication Publication Date Title
JP5137966B2 (ja) マルチプロセッサ・コンピュータ上で実行するプロセスにより生成されるスレッドによってメモリへのアクセスを制御する方法、コンピュータ・プログラムおよびシステム
US9164812B2 (en) Method and system to manage memory accesses from multithread programs on multiprocessor systems
Hedayati et al. Hodor:{Intra-Process} isolation for {High-Throughput} data plane libraries
US9268666B2 (en) System and method for debugging of computer programs
US10761966B2 (en) Generating program analysis data for analysing the operation of a computer program
US7047520B2 (en) Computer system with watchpoint support
Saito Jockey: a user-space library for record-replay debugging
JP5551269B2 (ja) 無制限トランザクショナル・メモリ(utm)モードでのオペレーティング・システム(os)トランザクションの処理
Nikolaev et al. VirtuOS: An operating system with kernel virtualization
US8689215B2 (en) Structured exception handling for application-managed thread units
US8079035B2 (en) Data structure and management techniques for local user-level thread data
JP4866864B2 (ja) マルチ・プロセッサ環境において共有されるリソースへのアクセスを管理する方法およびプログラム
Chen et al. Deterministic replay: A survey
US8978131B2 (en) Deterministic serialization of access to shared resources in a multi-processor system for code instructions accessing resources in a non-deterministic order
Lange et al. Symcall: Symbiotic virtualization through vmm-to-guest upcalls
US11366740B2 (en) Debugging shared memory errors
WO2015088975A1 (en) Context preservation during thread level speculative execution
Pool et al. Relaxed Determinism: Making Redundant Execution on Multiprocessors Practical.
AghamirMohammadAli et al. Blue-pill oxpecker: A VMI platform for transactional modification
Ren et al. Leveraging hardware-assisted virtualization for deterministic replay on commodity multi-core processors
EP2600252B1 (en) System and method for debugging of computer programs
Chen et al. Asymmetric virtual machine replication for low latency and high available service
Nikolaev Design and Implementation of the VirtuOS Operating System
Nanavati Operator, number please: mediating access to shared resources for efficiency and isolation
Cheng et al. ESCA: Effective System Call Aggregation for Event-Driven Servers

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100319

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120828

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120925

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121023

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121113

R150 Certificate of patent or registration of utility model

Ref document number: 5137966

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20151122

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees