JP5270268B2 - 共有データへの排他的アクセスを許すためのコンピュータ・システム、並びにその方法及びコンピュータ読み取り可能な記録媒体 - Google Patents
共有データへの排他的アクセスを許すためのコンピュータ・システム、並びにその方法及びコンピュータ読み取り可能な記録媒体 Download PDFInfo
- Publication number
- JP5270268B2 JP5270268B2 JP2008228286A JP2008228286A JP5270268B2 JP 5270268 B2 JP5270268 B2 JP 5270268B2 JP 2008228286 A JP2008228286 A JP 2008228286A JP 2008228286 A JP2008228286 A JP 2008228286A JP 5270268 B2 JP5270268 B2 JP 5270268B2
- Authority
- JP
- Japan
- Prior art keywords
- critical section
- thread
- shared data
- instruction
- lock
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 126
- 230000004044 response Effects 0.000 claims abstract description 47
- 238000012545 processing Methods 0.000 claims description 59
- 238000004590 computer program Methods 0.000 claims description 5
- 230000007704 transition Effects 0.000 description 54
- 230000008569 process Effects 0.000 description 50
- 230000001360 synchronised effect Effects 0.000 description 40
- 230000008859 change Effects 0.000 description 16
- 230000007246 mechanism Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000007562 laser obscuration time method Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000005096 rolling process Methods 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
クリティカルセクションについてのコードを含むプログラムを保持する記憶部であって、該クリティカルセクションはメモリ内の共有データ領域に値を書き込む又はそこから値を読み出す命令を含む、上記記憶部と、
上記プログラムを上記記憶部からメモリ内に読み出し、下記命令を実行する中央演算処理装置(CPU)であって、該命令が、
上記クリティカルセクションにおける最初の命令の開始前に、該クリティカルセクションに対するロックを取得すること、
上記クリティカルセクションにおける上記共有データ領域への書き込み命令に応答して、該共有データ領域に値を書き込む代わりに、上記メモリ内のスレッドローカルな領域に該値を書き込むこと、
上記クリティカルセクションにおける最後の命令が終了することに応じて、上記共有データ領域に、上記スレッドローカルな領域に書き込まれた上記値を書き込むこと、
上記クリティカルセクションに対する該ロックを開放すること
を含む、上記CPUと
を含む。
第1のスレッドにおいて、第2のスレッドを停止させるための非同期イベントを発行すること、
上記第2のスレッドにおいて、クリティカルセクションを含むプログラムを実行すること
を含む。
クリティカルセクションについてのコードを含むプログラムを上記記憶部からメモリ内に読み出すステップであって、該クリティカルセクションはメモリ内の共有データ領域に値を書き込む又はそこから値を読み出す命令を含む、上記読み出すステップと、
上記クリティカルセクションにおける最初の命令の開始前に、該クリティカルセクションに対するロックを取得するステップと、
上記クリティカルセクションにおける上記共有データ領域への書き込み命令に応答して、該共有データ領域に値を書き込む代わりに、上記メモリ内のスレッドローカルな領域に該値を書き込むステップと、
上記クリティカルセクションにおける最後の命令が終了することに応じて、上記共有データ領域に、上記スレッドローカルな領域に書き込まれた上記値を書き込むステップと、
上記クリティカルセクションに対する該ロックを開放するステップと
を含む。
第1のスレッドにおいて、第2のスレッドを停止させるための非同期イベントを発行するステップと、
上記第2のスレッドにおいて、クリティカルセクションを含むプログラムを実行するステップと
を含む。
上記ロックモードは、ロックを用いてクリティカルセクションを実行するモードである。
上記トランザクションモードは、トランザクショナルメモリ方式を用いてクリティカルセクションを実行するモードである。
上記擬似トランザクションモードは、コンピュータ・システムに、下記ステップを実行させてクリティカルセクションを実行するモードである。該ステップは、
上記クリティカルセクションにおける最初の命令の開始前に、該クリティカルセクションに対するロックを取得するステップと、
上記クリティカルセクションにおける上記共有データ領域への書き込み命令に応答して、該共有データ領域に値を書き込む代わりに、上記メモリ内のスレッドローカルな領域に該値を書き込むステップと、
上記クリティカルセクションにおける最後の命令が終了することに応じて、上記共有データ領域に、上記スレッドローカルな領域に書き込まれた上記値を書き込むステップと、
上記ロックされたクリティカルセクションに対する該ロックを開放するステップと
を含む。
上記トランザクションモードから上記擬似トランザクションモードへ遷移するステップ
上記擬似トランザクションモードから上記ロックモードへ遷移するステップ
上記擬似トランザクションモードから上記トランザクションモードへ遷移するステップ。
上記モードは、ロックモード、トランザクションモード及び擬似トランザクションモードを含み、
上記ロックモードは、ロックを用いてsynchronizedブロックを実行するモードであり、
上記トランザクションモードは、トランザクショナルメモリ方式を用いてsynchronizedブロックを実行するモードであり、
上記擬似トランザクションモードは、下記ステップを実行してsynchronizedブロックを実行するモードであり、該ステップは、
上記synchronizedブロックにおける最初の命令の開始前に、該synchronizedブロックに対するロックを取得すること、
上記synchronizedブロックにおける上記共有データ領域への書き込み命令に応答して、該共有データ領域に値を書き込む代わりに、上記メモリ内のスレッドローカルな領域に該値を書き込むこと、
上記synchronizedブロックにおける最後の命令が終了することに応じて、共有データ領域に、上記スレッドローカルな領域に書き込まれた上記値を書き込むこと、
上記ロックされたsynchronizedブロックに対する該ロックを開放すること
を含み、
上記方法が、
上記トランザクションモードから上記擬似トランザクションモードへ遷移する第1のステップであって、該遷移が、並列に実行されるトランザクションの数が閾値以下もしくは巻き戻し率が閾値以上になることに応じて行われる、上記第1のステップ、
上記擬似トランザクションモードから上記ロックモードへ遷移する第2のステップであって、該遷移が、トランザクションの巻き戻しができない処理を検出することに応じて行われる、上記第2のステップ、
上記擬似トランザクションモードから上記トランザクションモードへ遷移する第3のステップであって、該遷移が、モードが遷移してから一定時間経過後に又は擬似トランザクションモードでの実行回数が所定回数経過後にロック競合率が閾値以上になることに応じて行われる、上記第3のステップ
のいずれか1つのステップを少なくとも含む、上記方法を提供する。
本発明の実施態様ではまた、クリティカルセクションの実行モードとして、擬似トランザクション方式、並びにロックによる排他制御方式及びトランザクション方式を用いる。上記実行モードを効率的に切り替えることで、クリティカルセクションを実行する可能な限り多くのスレッドを停止させることが可能になる。
スレッドとは、プログラムの処理単位である。本発明の実施態様では、スレッドは、複数のスレッドから、変更される共有データにアクセスするためのクリティカルセクションを実行しうるスレッドである。
シングルスレッドとは、ある処理を単一のスレッドのみを用いて動作させる環境ないしは手法をいう。シングルスレッド環境を複数使用する場合とは、複数のCPUがそれぞれシングルスレッド環境を構成している場合である。シングルスレッド環境では、1つのクリティカルセクションが1つのCPUにのみ支配される。シングルスレッド環境を複数使用する場合、共有データは、CPUそれぞれからアクセスされうる記憶部に格納される。
マルチスレッドとは、複数のスレッドを生成して、並行して複数の処理を行うことをいう。マルチスレッドでは、見かけ上は複数の処理が同時に実行されているように見える。実際には、CPUの処理時間が短い単位で分割され、複数のスレッドに順番を割り当てられることによって同時に実行されているように見せかけている。マルチスレッド環境では、メモリ空間は共有できる。マルチスレッド環境では、1つのクリティカルセクションが1つのスレッドにのみ支配される。また、マルチスレッド環境では、共有データは、複数のスレッドからアクセスされうる。
クリティカルセクションは、共有データ領域に値を書き込む命令又はそこから値を読み出す命令を含む。共有データ領域は、メモリ領域内の指定されたアドレスに配置される。
クリティカルセクションを含むプログラムは例えば、Java(商標)、C++、C#を挙げることができるがこれらに制限されない。
クリティカルセクションについてのコードは例えば、Java(商標)のsynchronizedブロックであるがこれに制限されない。通常、synchronizedブロックは、最大でも1つのスレッドにしか支配されない。すなわち、あるスレッドがsynchronizedブロックにアクセスしているときに、別のスレッドが重ねてsynchronizedブロックにアクセスすることはできない。しかし、本発明を適用することにより、synchronizedブロックが複数のスレッドから支配されうる。
本発明の実施態様において「クリティカルセクションに対するロックを開放する」とは、複数のスレッドがある環境において、クリティカルセクションへの上記アクセス制限を終了するために、クリティカルセクションに対するロックを開放することある。
あるスレッドにおいて、クリティカルセクションに対するロックが取得されると、クリティカルセクションに対する該ロックが開放されるまで、他のスレッドは、クリティカルセクションにアクセスできない。よって、クリティカルセクションに含まれる共有データ領域にアクセスするための命令は、クリティカルセクションに対する該ロックが取得されている間、複数のスレッドから同時に実行されない。
多くのJava(商標)実行環境は、非同期イベント処理機構を有する。代表的な非同期イベント処理機構の用途は、不要なオブジェクトを回収するガーベージコレクションの際のstop-the-worldである。Java(商標)では、各スレッドにおいて、オブジェクトを作成するためのヒープメモリ領域が足りなくなると、ガーベージコレクションが要求される。該要求により、上記各スレッドにおいて、オブジェクトを作成するためのヒープメモリ領域が確保されようとする。Stop-the-worldは、ガーベージコレクションによって移動される(アドレスが変更される)オブジェクトへのアクセスを防ぐために、全てのスレッドの実行を休止させる処理である。ガーベージコレクションが要求されるスレッドにおいて、stop-the-worldを行うために、他のスレッドの非同期イベントフラグがセットされる。各スレッドの非同期イベントチェックポイントにおいて、非同期イベントの有無がチェックされる。非同期イベントチェックポイントは、メソッドのエントリやループのバックエッジ等に設けられる。非同期イベントが検出されたスレッドにおいて、そのイベントの種類が確認され、イベントに応じた処理が実行される。非同期イベントの種類がstop-the-worldであった場合、プログラムの実行が止められ、ガーベージコレクションの終了が待たれる。上記待つ方法として、例えば、ガーベージコレクションの終了を示すフラグをチェックするループを実行する方法がある。
本発明の実施態様では、上記非同期イベント処理機構を用いて、スレッドの停止を行う。スレッドの停止を要求する命令によって、停止対象のスレッド内に非同期イベントが発生したことを表すフラグがセットされる。停止対象のスレッドにおいては、非同期イベントチェックポイントにおいてスレッド停止イベントが検出されると、停止処理が実行される。停止処理は例えば、例外をスローする。該スローにより、プログラムの実行は、その例外をキャッチする箇所まで戻される。該例では、プログラマーは、例外をキャッチするコードを記述する必要がある。また、例外をキャッチする箇所が無ければ、例外がスローされた事がユーザに通知され、停止対象のスレッドはそのまま消滅する。
トランザクショナルメモリ方式では、スレッドは、他のスレッドが行ったことに対して承認することなしに、及び読み書きのログを記録することなしに、共有メモリ領域に対しての変更を完了する。スレッドは、他の進行中の操作に悪影響を与えない責任を書き込み側に負わせる代わりに、その責任を読み込み側に負わせる。スレッドは、全体のトランザクションが完了した後、読み込み側にアクセス対象のメモリが並行して過去に他のスレッドから変更されていないかを検証させる。該検証により変更が正しいものと確認されたならば、変更は永久なものとして反映される。この処理は、コミットと呼ばれる。また、トランザクションはロールバックや処理が取り消されたために優先度が変わったとの理由でいつでも中止される可能性がある。もし、トランザクションの変更が競合したためにコミットできなかったならば、普通トランザクションは中止され、成功するまで最初からやり直される。
コンピュータ(101)は、CPU(102)及びメモリ(103)を有する。コンピュータ(101)は、トランザクショナルメモリ方式システムでありうる。
メモリ(103)は、スレッド(104)及び共有データ領域(106)を保持する。スレッド(104)は、単一であっても複数であってもよい。スレッドが単一の場合、該単一のスレッドは、コンピュータ(101)とは別のコンピュータ(図示せず)におけるスレッドとともに、複数のスレッドを構成する。スレッド(104)は、スレッドローカルな領域(105)を保持する。スレッドローカルな領域(105)は、該スレッドローカルな領域(105)を保持するスレッド(104)で実行されるプログラムのみからアクセスされる。一方共有データ領域(106)は、あらゆるスレッドで実行されるプログラムからアクセスされうる。記憶部(107)は、クリティカルセクションについてのコードを含むプログラムを保持する。
共有データは、共有データ領域(106)又は記憶部(107)のいずれか、又は両方に保持されうる。
CPU(102)は、記憶部(107)からメモリ(103)内にプログラムを読み出して実行する。CPU(102)は、プログラム内のクリティカルセクションにおける最初の命令の開始前に、該クリティカルセクションについてのロックを取得する。CPU(102)は、上記クリティカルセクションにおける共有データの書き込み命令に応答して、上記共有データ領域(106)又は記憶部(107)へ共有データの書き込みを行う代わりに、スレッドローカルな領域(105)に書き込みを行う。CPU(102)は、上記クリティカルセクションにおける最後の命令が終了することに応じて、スレッドローカルな領域(105)から上記書き込んだ値を取得する。CPU(102)は、共有データ領域(106)又は記憶部(107)に上記値の書き込みを行う。CPU(102)は、上記書き込みが終了することに応じて、上記クリティカルセクションについてのロックを開放する。
トランザクションモードは、同時実行のメリットがあるクリティカルセクションを実行するオブジェクトに設定される。擬似トランザクションモードは、同時実行のメリットがないクリティカルセクションを実行するオブジェクトに設定される。ロックモードは、トランザクションモード及び擬似トランザクションモードで実行しない又は実行できないクリティカルセクションを実行するオブジェクトに設定される。
上記オブジェクトにおいて、クリティカルセクションは設定されたモードで実行される。従って、同じオブジェクトが異なるクリティカルセクションで利用されている場合、それらのクリティカルセクションは同一のモードで実行される。一方、同じクリティカルセクションであっても、オブジェクトが異なればそのクリティカルセクションは異なるモードで実行される可能性がある。
ロックモードでは、クリティカルセクションにおける最初の命令の開始前にクリティカルセクションに対するロックが取得され、クリティカルセクションにおける最後の命令が終了することに応じてクリティカルセクションに対するロックが開放される。
ロックモードでは、クリティカルセクション内での共有データへのアクセスに対する排他制御が行われる。
ロックモードは、例えばJava(商標)においては、synchronizedブロックに対するロックを取得する方式である。
ロックモードでは、クリティカルセクションにおけるステップ(204〜207)が実行されている間、スレッド(201)を停止させることができない。スレッド(201)を停止させ且つクリティカルセクションの原子性を保つために、共有データの内容は、クリティカルセクションが実行される前の内容に戻される必要がある。しかし、例えばデータの書き込みステップ(206)が実行済みであった場合、該書き込みのステップ(206)を取り消すための情報が保持されていない。
トランザクションモードでは、クリティカルセクションに対するロックが取得されない。
トランザクションモードでは、共有データへのアクセスは、クリティカルセクションにおける最後の命令が終了することに応じて行われ、共有データへの変更がトランザクション終了まで不可視になる。
トランザクションモードでは、例えばJava(商標)においては、synchronizedブロックをトランザクショナルメモリ方式で実行する。
トランザクションモードでは、クリティカルセクションの開始をトランザクションの開始、クリティカルセクションの最後をトランザクションの最後として実行させる。該実行によって、クリティカルセクションが実行されるスレッド(211)をいつ停止させても、クリティカルセクションで保護される共有データに対する変更が、他のクリティカルセクションが実行されるスレッドに対して不可視となる。また、該変更は、トランザクションをロールバックすることで取り消すことができる。よって、クリティカルセクションの原子性が保たれるので、スレッド(211)を停止させることが可能である。
擬似トランザクションモードでは、クリティカルセクションに対するロックは、クリティカルセクションにおける最初の命令の開始前に取得される。クリティカルセクションに対するロックは、クリティカルセクションにおける最後の命令が終了することに応じて開放される。
擬似トランザクションモードでは、共有データへのアクセスは、クリティカルセクションにおける最後の命令が終了することに応じて行われ、共有データへの変更がトランザクション終了まで不可視になる。また、擬似トランザクションモードでは、共有データへの排他的アクセスがされているのでクリティカルセクションに対するロックが開放されるまで、他のスレッドからは該共有データにアクセスすることができない。
擬似トランザクションモードでは、例えばJava(商標)においては、synchronizedブロックに対するロックを取得し且つsynchronizedブロックをトランザクショナルメモリ方式で実行する。
擬似トランザクションモードでは、クリティカルセクションの開始をトランザクションの開始、クリティカルセクションの最後をトランザクションの最後として実行させる。該実行によって、クリティカルセクションが実行されるスレッド(301)をいつ停止させても、クリティカルセクションで保護される共有データに対する変更が、他のクリティカルセクションが実行されるスレッドに対して不可視となる。また、該変更は、トランザクションをロールバックすることで取り消すことができる。よって、クリティカルセクションの原子性が保たれるので、スレッド(301)を停止させることが可能である。
停止対象のスレッドは、非同期イベントを拾う仕組みを有する。該仕組みには、例えば、既存技術であるJavax.realtime.RealTimeThread.interruptと同様の仕組みを用いる。該仕組みでは、停止対象のスレッドは、非同期イベントフラグを有する。該フラグは、停止対象のスレッド以外のスレッドからも設定可能である。停止対象のスレッドでは、該フラグが設定されることに応じて、停止用に用意された命令が実行される。
スレッド(301)は、擬似トランザクションモードで動作中のスレッドである。スレッド(301)は、上記非同期イベントを拾う仕組みを有する。以下では、スレッド(301)において、共有データの書き込みを行うステップ(306)が実行された後に、コミットを行うステップ(307)が実行されることなく、スレッド(301)が停止する場合を例に説明する。
スレッド(301)を停止させる命令を有するスレッド(図示せず)において、スレッド(301)を停止させるステップ(311)が実行されると、非同期イベント(315)が発生する。共有データの書き込みを行うステップ(306)が実行された後のスレッド(301)において、非同期イベント(315)が拾われると、本来実行されるステップ(307、308)は実行されず、停止用に用意されたステップ(312〜314)が実行される。ロールバックを行うステップ(312)では、スレッドローカルな領域(309)に記録された書き込む値及び書き込む領域にアクセスするためのアドレスが破棄される又は使用されないようにマーキングされる。クリティカルセクションに対するロックを開放するステップ(313)では、クリティカルセクションにおける最初の命令の開始前に取得されたクリティカルセクションに対するロックが開放される。クリティカルセクションに対するロックが開放されると、スレッドは停止する(314)。
ここで、コミットを行うステップ(307)が実行されないため、共有データの書き込みを行うステップ(306)において、スレッドローカルな領域(309)に記録された書き込む値及び書き込む領域にアクセスするためのアドレスは使用されない。よって、共有データ領域(310)にデータの書き込みは行われない。
以下は、トランザクションモード及び擬似トランザクションモードにおける、スレッドを安全に停止させる手順の例である。下記ステップ1及び2はトランザクションモード固有の処理である。下記ステップ3は、トランザクションモード及び擬似トランザクションモードに共通の処理である。また、以下の例では、共有データ領域を原子的に操作するため、共有データ領域に対するロックが用いられる。共有データ領域に対するロックはトランザクションに対するものではない。共有データ領域に対するロックは、例えば図3Cで示される所有者記録テーブルによって管理される。該テーブルの各エントリは、ある共有データ領域に対応している。該テーブルの1列目は、ロックされる共有データ領域の共有データに関連づけられたバージョン番号を表す。該テーブルの2列目は、ロック・ビットである。該ビットが1の場合、対応する共有データ領域はロックされている。
1.書き込み先の共有データ領域に対するロックが取得される。該取得により、対応する共有データ領域への書き込みは、共有データ領域に対するロックを取得したスレッドのみに許される。
2.共有データを読み出すときに、スレッドローカルな領域に記録されたバージョン番号と現在のバージョン番号とが比較される。該比較によって、該バージョン情報が一致しているかどうかの確認がされる。バージョン番号は、対応する共有データに書き込みが行われる毎にインクリメントされる。スレッドローカルな領域から読み出された全てのバージョン番号が、現在のバージョン番号と一致している場合、次のステップに移行する。もし一致していなければ、トランザクションはロールバックされ、クリティカルセクションが再実行される。
3.共有データ領域への書き込みが開始される。同時にテーブル上のバージョン番号がインクリメントされる。
共有データ領域への書き込みは、上記ステップ3で行われる。よって、ステップ3に入る前であればスレッドを停止させることが可能である。ステップ3の前にスレッドを停止させるためには、ステップ3の直前で非同期イベントのチェックが行われればよい。
擬似トランザクションモードでは、あるオブジェクトをモニタとするクリティカルセクションを実行するスレッドは1つである。よって、ステップ1及び2は不要であり、ステップ3のみが行われる。従って、擬似トランザクションモードでは、クリティカルセクション終了処理直前まで、スレッドを停止させることができる。
該例は、トランザクションモードで実行されているスレッド1(321)が、ロックモードで実行されているスレッド2(322)による共有データの更新によって、巻き戻される例である。
トランザクションモードで実行されているスレッド1(321)において、共有データ領域(323)への書き込みの命令が実行される。該命令の実行によっては、共有データ領域(323)上の共有データの値は直接更新されない。代わりに、スレッド1(321)内のスレッドローカルな領域に、書き込む値及び書き込む領域にアクセスするためのアドレスが保存される(ステップ324)。
ここで、ロックモードで実行されているスレッド2(322)において、共有データ領域(323)への書き込みの命令が実行されたとする。すると、共有データ領域(323)上の共有データの値が直接更新される。また、該共有データに関連付けられたバージョン情報がインクリメントされる(ステップ325)。
トランザクションモードで実行されているスレッド1(321)においてコミット命令が実行されると、共有データ領域(323)から、上記インクリメントされたバージョン情報が取得される。(ステップ326)。次に、該取得されたインクリメントされたバージョン情報と、ステップ324で保存されたバージョン情報とが比較される。該比較の結果、バージョン情報が異なるので、スレッド1(321)においては、共有データ領域(323)への共有データの更新は行われず、スレッド1(321)は巻き戻される。
該例は、擬似トランザクションモードで実行されているスレッド1(331)が、スレッド2(332)から発行された停止イベントによって停止する例である。
擬似トランザクションモードで実行されているスレッド1(331)において、共有データ領域(333)への書き込みの命令が実行される。該命令の実行によっては、共有データ領域(333)上の共有データの値は更新されない。代わりに、スレッド1(331)内のスレッドローカルな領域に、書き込む値及び書き込む領域にアクセスするためのアドレスが保存される(ステップ334)。
ここで、スレッド2(332)において、スレッド1(331)を停止させるための非同期イベントが発行されたとする(ステップ335)すると、上記スレッドローカルな領域に保存された書き込む値及び書き込む領域にアクセスするためのアドレスは、破棄(ステップ336)又は使用されないようにマーキングされる。
ステップ336の処理により、スレッド1(331)において、共有データ領域(333)における共有データの更新は行われず、スレッド1(331)は停止する。
本発明の実施態様においてクリティカルセクションを有する各オブジェクトは、ロックモード、トランザクションモード及び擬似トランザクションモードの3つの実行モード間を遷移する。システムは該実行モードを遷移させるために、各オブジェクトについて、ロック競合率、トランザクション巻き戻し率、並列に実行されるトランザクションの数及び巻き戻し不可能な処理の遭遇率の値をプロファイルする。
ロック競合率は、ロック競合の数を、オブジェクトがロックモードで実行された数で割ることで求められる。ロック競合の数は、例えば、オブジェクトがオブジェクトに対するロックの取得に失敗した回数をカウントすることで求められる。トランザクション巻き戻し率は、コミットに失敗したトランザクション数を総トランザクション数で割ることで求められる。並列に実行されるトランザクションの数は、例えば各オブジェクトが、共有の記憶域に用意されたカウンタに、トランザクション開始時に1を加え、トランザクション終了時に1を引くことで、カウントできる。巻き戻し不可能な処理とは、トランザクションモードもしくは擬似トランザクションモードでロギングすることが不可能な処理のことである。例えば、Java(商標)プログラムにおける、Java.lang.System.out.println関数等の標準出力処理やJava.io.Fileクラスを通したファイル入出力処理等である。巻き戻し不可能な処理の遭遇率は例えば、トランザクションモードで実行中に巻き戻し不可能な処理に遭遇した回数を、トランザクションモードでの実行を試みた回数で割ることで求められる。
トランザクションモードから擬似トランザクションモードへの遷移は、上記並列に実行されるトランザクションの数が閾値以下、もしくは上記トランザクション巻き戻し率が閾値以下の際に実行される。上記全ての閾値は、例えばシステムの管理者が設定する。システムの管理者は、例えばシステムのスループットを計測することで閾値に適した値を求める。また、上記並列に実行されるトランザクションの数に対する閾値の例として、平均1以内の値が推奨される。該閾値の平均が1以内ならば、トランザクションが並列に実行されていない可能性が高いと考えられる。よって、トランザクションは、擬似トランザクションモードへ遷移されたほうが、システムのスループットが良くなると想定される。また、上記トランザクション巻き戻し率に対する閾値の例として、例えば0.5以上の値が推奨される。50パーセント以上の確率で巻き戻しが発生するトランザクションは、巻き戻しが頻繁に起こる可能性が高い。よって、擬似トランザクションモードへ遷移させたほうが、スループットが良くなると想定される。
また、逆方向の遷移であるトランザクションモードからロックモードへの遷移時には、システムのオーバヘッドが大きい。これは、遷移の際に他のスレッドのトランザクションを終了するのを待たなければならないためである。よって、そのようなケースが頻繁に起きないようにするために、上記閾値は保守的に低い値にすることが望ましい。
なお、ロックモードからトランザクションモードへ遷移させる理由は、ロック競合率が高いオブジェクトの性能を、トランザクションモードの並列性を利用して向上させるためである。トランザクションモードはクリティカルセクションを並列に実行できるため、システムの性能を向上させる可能性がある。ただし、ロックモードからトランザクションモードへ遷移させたとしても、巻き戻し率が高く、性能が向上しない場合、擬似トランザクションモードに遷移する。
方法1.各ロギングコードにおいて、実行モードをチェックする方法
該方法は、下記2の方法に比べ、コードサイズを小さくすることができる。しかし、各ロギングコード部分の実行時においてオーバヘッドが生じる。
方法2.各実行モードに応じて各クリティカルセクションのプログラムコード部分をバージョン化する方法
上記2つの方法では、クリティカルセクションのプログラムコード部分毎にロックバージョン、トランザクションバージョン及び擬似トランザクションバージョンのコードを作成する。ロックバージョンのコードは、ロギングコードが無いコードである。トランザクションバージョンのコードは、ロギングコードが挿入されたコードである。擬似トランザクションバージョンのコードは、トランザクションバージョンのコードから、共有データの読み出しの際のロギングコードが削除されたコードである。方法2は、方法1に比べて、実行処理が速くなる。しかし、コードサイズは増加する。
外側のクリティカルセクションがロックモードである場合、内側のクリティカルセクションについては、全ての実行モードが許可される。ただし、同じオブジェクトに対する再帰的なクリティカルセクションについては、以下のチェック及びカウンタが必要である。上記チェックは、内側のクリティカルセクションの開始時にオブジェクトに対するロックを該オブジェクト自身が所持しているか否かのチェックである。上記カウンタは、再帰的に取得したことを示すためのカウンタである。
外側のクリティカルセクションがトランザクションモードである場合、内側のクリティカルセクションについては、ロックモード及び擬似トランザクションモードは許可されない。この理由は、内側のクリティカルセクションがロックモードで実行されると、外側のクリティカルセクションの全ての処理を巻き戻すことができないためである。また、内側のクリティカルセクションが擬似トランザクションモードで実行されると、読み出しの記録が省かれているため、外側のトランザクションのコミット時に、システムが同一データへのアクセスを発見できず、衝突を解析することができないためである。
外側のクリティカルセクションが擬似トランザクションモードである場合、内側のクリティカルセクションはロックモードを許可しない。この理由は、擬似トランザクションモード実行中にスレッドが停止されると、内側のクリティカルセクションの実行を巻き戻すことができないためである。
本発明の実施態様において、クローズド・ネスティング(closed-nesting)のトランザクショナルメモリ方式システムを想定している。よって、内側のトランザクション及び擬似トランザクションの書き込み結果は、外側のトランザクション及び擬似トランザクションのコミット時に反映される。つまり、外側のトランザクションがコミットされるまでは、内側のトランザクション及び擬似トランザクションの書き込み結果は、他のスレッドから不可視になる。
上記フローでは、最初に、クリティカルセクションを有するコードから生成されたオブジェクトであるモニタオブジェクトのロックが取得される(ステップ501)。モニタオブジェクトのロックは、該モニタオブジェクト内で使用される変数を排他的に扱うためのロックであり、該取得の時点では、クリティカルセクションに対するロックではない。上記モニタオブジェクトのロックは、上記変数へのアクセスが終了した後においては、ロックモード及び擬似トランザクションモードそれぞれにおけるクリティカルセクションに対するロックとして継続される。一方、トランザクションモードでは、クリティカルセクションに対するロックは不要である。よって、トランザクションモードでは、上記モニタオブジェクトのロックは、上記変数へのアクセスが終了し且つトランザクションモードにおけるトランザクション開始前に、上記フロー内で開放される(ステップ508、後述)。
上記モニタオブジェクトのロックの取得に失敗した場合は、ロック競合の数がカウントされる(ステップ502)。該カウントは例えば、ロックの数をインクリメントすることによって行われる。そして、ロック競合が解除されるのを待って、モニタオブジェクトのロックが取得される(ステップ503)。
モニタオブジェクトのロックが取得されると、3種類の実行モードのうちのいずれかが取得される(ステップ504)。該取得の処理では、統計データ及び図4Aの説明において述べた実行モードの遷移についての各閾値を用いてモード遷移の有無が求められ、実行モードが決定される。ここで統計データとは、コミットに失敗したトランザクション数、オブジェクトがモニタとして実行された総トランザクション数、並列に実行されたトランザクションの総数、オブジェクトがロックモードで実行された総数、巻き戻し不可能な処理に遭遇した回数及びロック競合の数である。なお、上記統計データは厳密な値が必要ではないので、原子的に更新される必要はない。次に、上記取得した実行モードが、クリティカルセクションにおける最初の命令の開始前に実行されていた実行モードと比べて変更があったかどうか判定する。変更があり、現在の実行モードがトランザクションモードである場合、トランザクションモードで動作中のモニタオブジェクトについての全てのトランザクションが終了するのを待つ(ステップ505)。この理由は、あるモニタオブジェクトを使用するクリティカルセクションが、複数のスレッドによって異なるモードで実行されるのを防ぐためである。モニタオブジェクトについてのトランザクションが終了すると、モードの切り替えが実行される(ステップ506)。
ステップ504での実行モードの取得がロックモード又は擬似トランザクションモードであり、実行モードの変更が該ロックモード又は擬似トランザクションモードからトランザクションモードへの変更である場合、ステップ505のような処理がされる必要はない。この理由は、ロックモード及び擬似トランザクションモードでは、このオブジェクトをモニタとするクリティカルセクションは、同時に複数のスレッドで実行されることが無いためである。
実行モードが確定すると、実行モードに応じた下記処理が実行される。
・実行モードがトランザクションモードの場合、実行中のトランザクション数がカウントされ且つ並列に実行されたトランザクションの総数に加えられる(ステップ507)。次に、トランザクションモードでは、トランザクションの実行時にロックが必要とされないので、ロックが開放される(ステップ508)。次に、トランザクションモードにおいて、トランザクションが開始され、クリティカルセクションの処理が行われる(ステップ509)。
・実行モードが擬似トランザクションモードの場合、モニタオブジェクトのロックが保持されたまま、擬似トランザクションモードでのトランザクションが開始され、クリティカルセクションの処理が行われる(ステップ510)。よって、擬似トランザクションモードでは、クリティカルセクションに対するロックがかけられたまま、クリティカルセクションの処理が行われる。
・実行モードがロックモードの場合、モニタオブジェクトがロックモードで実行された総数がカウントされる(ステップ511)。そして、モニタオブジェクトのロックが保持されたまま、クリティカルセクションの処理が開始される。よって、ロックモードでは、クリティカルセクションに対するロックがかけられたまま、クリティカルセクションの処理が行われる。
該フローにおいは、モード毎に異なる処理が実行される。
・実行モードがトランザクションモードの場合、原子的に更新される必要がある変数である、コミットに失敗したトランザクション数及び実行中のトランザクション数を更新するために、モニタオブジェクトのロックの取得が実行される(ステップ521)。モニタオブジェクトのロックが取得されると、実行中のトランザクション数がカウント(例えばデクリメント)される(ステップ522)。次に、トランザクションのコミットが実行される(ステップ523)。該コミットが成功すると、トランザクション数の変更が、トランザクションの終了を監視するオブジェクトに通知される(ステップ524)。最後に、モニタオブジェクトのロックが開放される(ステップ525)。上記コミットが失敗すると、トランザクションは巻き戻される(ステップ526)。コミットに失敗したトランザクション数がカウント(例えばインクリメント)される(ステップ527)。また、トランザクション数の変更がトランザクションの終了を監視するオブジェクトに通知される(ステップ528)。最後に、モニタオブジェクトのロックが開放される(ステップ529)。そしてクリティカルセクションが、再実行されることもできる。或いは、スレッドを停止することも可能である。或いは、例外終了のための独自の処理を行うことも可能である。
・実行モードが擬似トランザクションモードの場合、最初に、トランザクションのコミットが実行される(ステップ530)。
次に、コミットの結果を判定する。該コミットは、通常成功する。この理由は、擬似トランザクションモードにおいて実行中のクリティカルセクションの命令からアクセスされる共有データが他のスレッドからは変更されないので保護されるからである。ただし、プログラムのバグによって、共有データの保護が完全でないとき、コミットが失敗する可能性がある。例えば、異なるオブジェクトをモニタとするクリティカルセクション内で、同一の共有データにアクセスするようなプログラムでは、コミットが失敗する可能性がある。
図5Bの例では、コミットが失敗すると、トランザクションが巻き戻される(ステップ531)。次に、クリティカルセクションに対するロックが開放される(ステップ532)。そして、クリティカルセクションが、再実行される。ここで、スレッドを停止し、プログラムのバグを報告することも可能である。
コミットが成功すると、クリティカルセクションに対するロックが開放される(533)。
・実行モードがロックモードの場合、クリティカルセクションに対するロックが開放される(ステップ534)。
・実行モードがトランザクションモードの場合、トランザクションを巻き戻す処理が行われる(ステップ541)。
次に、原子的に更新される必要がある変数を更新するために、モニタオブジェクトのロックが取得される(ステップ542)。モニタオブジェクトのロックが取得されると、実行中のトランザクション数がカウント(例えばデクリメント)される(ステップ543)。次に、トランザクション数の変更が、トランザクションの終了を監視するオブジェクトに通知される(ステップ544)。最後に、モニタオブジェクトのロックが開放される(ステップ545)。そして、スレッドが停止する(ステップ546)。
・実行モードが擬似トランザクションモードの場合、トランザクションを巻き戻す処理が行われる(ステップ547)。次に、クリティカルセクションに対するロックが開放される(ステップ548)。そして、スレッドが停止する(ステップ549)。
・実行モードがロックモードである場合、スレッドは停止されない。
各モニタオブジェクトにおける実行モードは、定数として宣言される。該宣言により、プログラム内において、ロックモードはLOCK_MODE、トランザクションモードはTM_MODE、擬似トランザクションモードはDUMMY_TM_MODEと表される。
mutexは、オブジェクトに対するロック機能を提供するオブジェクト変数である。プログラムにおいて、オブジェクトに対するロックの取得及び開放は、該オブジェクトを用いて実行される。noActiveTxは、トランザクションの終了を監視するオブジェクト変数である。プログラムにおいて、トランザクションの終了に関する通知及び待ち合わせは、該オブジェクトを用いて実行される。
modeは、各オブジェクトの実行モードが設定される変数である。該変数には、初期値としてTM_MODEが設定される。よって、各オブジェクトの実行モードは、トランザクションモードに初期化される。つまり、あるオブジェクトをモニタとしたsynchronizedブロックは、最初トランザクションモードで実行される。activeTxCountは、実行中のトランザクション数をカウントするための変数である。該変数は、トランザクションモードの開始時にインクリメントされ、トランザクションモードの中断及び終了時にデクリメントされる。abortedTxCountは、コミットに失敗したトランザクション数をカウントするための変数である。該変数は、オブジェクトにおいて、コミットが失敗した時にインクリメントされる。totalTxCountは、該オブジェクトがモニタとして実行された総トランザクション数をカウントするための変数である。該変数は、トランザクションモードの開始時にインクリメントされる。parallelTxCountは、並列に実行されたトランザクションの総数をカウントするための変数である。該変数には、トランザクションモードの開始時に、実行中のトランザクション数が加えられる。totalLockCountは、オブジェクトがロックモードで実行された総数をカウントするための変数である。該変数は、ロックモードの開始時にインクリメントされる。unrevocableCountは、synchronizedブロックの実行中に、巻き戻し不可能な処理に遭遇した回数をカウントするための変数である。該変数は、トランザクションモード又は擬似トランザクションモード中に巻き戻し不可能な処理に遭遇した際にインクリメントされる。lockContentionCountは、ロック競合の数をカウントするための変数である。該変数は、オブジェクトに対するロック取得が失敗したときにインクリメントされる。
トランザクションモードから擬似トランザクションモードへの遷移(図4A、402)は、以下の2条件のいずれかを満たす場合に行われる。
・トランザクションの巻き戻し率(abortedTxCount ÷ totalTxCount)がある閾値以上。
・平均並列トランザクション数(parallelTxCount ÷ totalTxCount)がある閾値以下。
ロックモードからトランザクションモードへの遷移(図4、403)は、巻き戻し不可能な処理への遭遇率がある閾値以下の場合に行われる。巻き戻し不可能な処理への遭遇率は以下の式で求められる。
・巻き戻し不可能な処理への遭遇率(unrevocableCount ÷ totalTxCount)
擬似トランザクションモードからトランザクションモードへの遷移(図4、404)は、実行モードが擬似トランザクションモードに遷移してから一定時間経過後に又は擬似トランザクションモードでの実行回数が所定回数経過後にロック競合率がある閾値以上の場合に行われる。ロック競合率は以下の式で求められる。
・ロック競合率(lockContentionCount ÷ totalLockCount)
上記一定時間は、システムに依存する。該一定時間は例えば、モードが擬似トランザクションモードに遷移してから600秒とすることができる。上記所定回数は例えば、擬似トランザクションモードでの実行回数が1000回に達する毎に、上記ロック競合率が求められるようにしてもよい。
トランザクションモード又は疑似トランザクションモードからロックモードへの遷移(図4、401、405)は、JNI(Java Native Interface)等の巻き戻し不可能な処理が検出された場合に行われる。該遷移では、トランザクションは巻き戻され、モニタオブジェクトの実行モードがロックモードに遷移されたあとに、synchronizedブロックが先頭から再実行される。
なお、上記モード遷移は、以下の説明において、メソッドselectMode()として実装されている。
上記プログラムにおいて、引数mustBeChangedIntoLockModeは、ロックモードへの遷移を強制するためのフラグである。該引数には、巻き戻し不可能な処理を検出したスレッドにおいてsynchronizedブロックが再実行される際にtrueが設定される。該設定により、ロックモードへの遷移が強制される。
上記プログラムにおいて、排他的に扱われる必要がある変数は、実行モードを遷移させるために用いられる3つの変数(ロック変数(mutex)、実行モード(mode)及び実行中のトランザクション数(activeTxCount))である。上記3つの変数は、モニタオブジェクトのロックにより排他的に扱われる。
ここで、例えばこれらの上記3つの変数を1つの変数にまとめ、該変数をCAS(comapre-and-swap)等の原子操作命令を使用して更新する手法も考えられうる。該手法を用いると、オブジェクトに対するロックを必ずしも取得する必要はない。該手法の例を以下に示す。
上記1つにまとめた変数は例えば、32−bit変数である。該32−bit変数では、上位16ビットは変数に対するロックを管理する領域であり、中位12ビットは実行中のトランザクション数を格納する領域であり、下位4ビットは実行モードを格納する領域である。また、トランザクションモードにおいて、下位4ビットの値は0とする。該32−bit変数の値が0x00000050(16進表示)であるクリティカルセクションが実行されるとき、変数は0x00000060に原子的に更新される。つまり、実行トランザクション数が1増加する。このような変数はオブジェクトのヘッダに含めることが望ましい。しかしながら、実際はそのような空き領域が存在することは考えにくい。よって、実装では、fatロックモードのように、オブジェクトのヘッダにこれらデータへのポインタが保持される。
上記プログラムにおいて、メソッドselectMode()は、モード遷移を実装するメソッドである。該メソッドにおいて、統計データ(abortedTxCount、totalTxCount、parallelTxCount、totalLockCount、unrevocableCount、lockContentionCount)及び図4Aの説明において述べた実行モードの遷移についての各閾値を用いてモード遷移の有無が求められ、実行モードが決定される。
上記最後の命令の終了後に実行される処理のプログラムでは、トランザクションモードにおいてモニタオブジェクトのロックが取得される。該取得したロックは、コミットに失敗したトランザクション数(abortedTxCount)及び実行中のトランザクション数(activeTxCount)を排他的に扱うためのロックである。該取得したロックは、クリティカルセクションを排他的に扱うためのロックではない。該取得したロックは、上記最後の命令の終了後に実行される処理のプログラムにおいて開放される。
一方、擬似トランザクションモード及びロックモードにおいては、図5Aのステップ501で取得したモニタオブジェクトのロックがかけられたまま、synchronizedブロックの処理が行われるので、最後の命令の終了後にロックは開放されるだけである。
該処理は、既存技術であるJavax.realtime.RealTimeThread.interruptと同様の処理である。該処理は、停止対象のスレッドに、非同期イベントが発生したことを表すフラグをセットする。該処理は、各スレッドが非同期イベントをチェックすることにより、停止対象のスレッド自身によって呼び出される。また、該処理は、モニタオブジェクトに対して呼び出す必要がある。よって、synchronizedブロック開始時に、対象のモニタオブジェクトがスレッドに登録される。非同期イベントは、多くのJava(商標)実行環境で利用されており、この枠組みを用いることができる。
上記スレッドが停止する場合の処理のプログラムでは、トランザクションモードにおいてモニタオブジェクトのロックが取得される。該取得したロックは、トランザクション数(activeTxCount)を排他的に扱うためのロックである。取得したロックは、クリティカルセクションを排他的に扱うためのロックではない。よって、該取得したロックは、上記スレッドが停止する場合の処理のプログラムにおいて開放される。
一方、擬似トランザクションモードにおいては、図5Aのステップ501で取得したモニタオブジェクトのロックが上記スレッドが停止する場合の処理のプログラムにおいて開放されるだけである。
ロックモードにおいては、スレッドを停止させることができないので、図5Aのステップ501で取得したモニタオブジェクトのロックがかけられたままである。
上記実施態様のコンピュータ・システム(601)は、CPU(603)とメイン・メモリ(602)と含み、これらはバス(614)に接続されている。CPU(603)は好ましくは、32ビットまたは64ビットのアーキテクチャに基づくものであり、例えば、インテル社のXeon(商標)シリーズ、Core(商標)シリーズ、ATOM(商標)シリーズ、Pentium(商標)シリーズ、Celeron(商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズなどを使用することができる。バス(614)には、ディスプレイ・コントローラ(607)を介して、LCDモニタなどのディスプレイ(612)が接続される。ディスプレイ(612)は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータについての情報と、そのコンピュータ上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス(614)にはまた、IDE又はSATAコントローラ(604)を介して、ハードディスク又はシリコン・ディスク(605)と、CD−ROM、DVDドライブ又はBDドライブ(606)が接続される。
Claims (17)
- 共有データへの排他的アクセスを許すためのコンピュータ・システムであって、
クリティカルセクションについてのコードを含むプログラムを保持する記憶部であって、該クリティカルセクションはメモリ内の共有データ領域に値を書き込む又はそこから値を読み出す命令を含む、前記記憶部と、
前記プログラムを前記記憶部からメモリ内に読み出し、下記命令を実行する中央演算処理装置(CPU)であって、該命令が、
前記クリティカルセクションにおける最初の命令の開始前に、該クリティカルセクションに対するロックを取得すること、
前記クリティカルセクションにおける前記共有データ領域への書き込み命令に応答して、該共有データ領域に値を書き込む代わりに、前記メモリ内のスレッドローカルな領域に該値を書き込むこと、
前記クリティカルセクションにおける最後の命令が終了することに応じて、前記共有データ領域に、前記スレッドローカルな領域に書き込まれた前記値を書き込むこと、
前記クリティカルセクションに対する該ロックを開放すること
を含む、前記CPUと
を含む、前記コンピュータ・システム。 - 前記CPUが下記命令をさらに実行し、該命令が、
前記クリティカルセクションにおける命令の実行中に、非同期イベントを受けることに応じて、非同期イベントの処理を開始することを許すこと
を含む、請求項1に記載のコンピュータ・システム。 - 前記CPUが下記命令をさらに実行し、該命令が、
前記非同期イベントを受けることに応じて、前記クリティカルセクションにおける最初の命令の開始前に制御を戻すこと
を含む、請求項2に記載のコンピュータ・システム。 - 前記CPUが下記命令をさらに実行し、該命令が、
前記クリティカルセクションにおける全ての命令が終了する前に、非同期イベントを受けることに応じて、前記クリティカルセクションにおける命令の実行を停止し且つ非同期イベントの処理を開始すること
を含む、請求項1に記載のコンピュータ・システム。 - 前記CPUが下記命令をさらに実行し、該命令が、
前記非同期イベントの処理の終了後、クリティカルセクションにおける命令を最初から実行すること
を含む、請求項4に記載のコンピュータ・システム。 - 前記コンピュータ・システムが複数のスレッドを含む環境であり、前記共有データ領域がスレッド間で共有される、請求項1に記載のコンピュータ・システム。
- 前記CPUが下記命令をさらに実行し、該命令が、
第1のスレッドにおいて、第2のスレッドを停止させるための非同期イベントを発行すること、
前記第2のスレッドにおいて、クリティカルセクションを含むプログラムを実行すること
を含む、請求項6に記載のコンピュータ・システム。 - 前記CPUが下記命令をさらに実行し、該命令が、
ロックを用いた排他制御方式又はトランザクショナルメモリ方式でクリティカルセクションを実行することを含む、請求項1に記載のコンピュータ・システム。 - 共有データへの排他的アクセスを許すための方法であって、
クリティカルセクションについてのコードを含むプログラムを記憶部からメモリ内に読み出すステップであって、該クリティカルセクションは該メモリ内の共有データ領域に値を書き込む又はそこから値を読み出す命令を含む、前記読み出すステップと、
前記クリティカルセクションにおける最初の命令の開始前に、該クリティカルセクションに対するロックを取得するステップと、
前記クリティカルセクションにおける前記共有データ領域への書き込み命令に応答して、該共有データ領域に値を書き込む代わりに、前記メモリ内のスレッドローカルな領域に該値を書き込むステップと、
前記クリティカルセクションにおける最後の命令が終了することに応じて、前記共有データ領域に、前記スレッドローカルな領域に書き込まれた前記値を書き込むステップと、
前記クリティカルセクションに対する該ロックを開放するステップと
を含む、前記方法。 - 前記クリティカルセクションにおける命令の実行中に、非同期イベントを受けることに応じて、非同期イベントの処理を開始することを許すステップ
をさらに含む、請求項9に記載の方法。 - 前記非同期イベントを受けることに応じて、前記クリティカルセクションにおける最初の命令の開始前に制御を戻すステップ
をさらに含む、請求項10に記載の方法。 - 前記クリティカルセクションにおける全ての命令が終了する前に、非同期イベントを受けることに応じて、前記クリティカルセクションにおける命令の実行を停止し且つ非同期イベントの処理を開始するステップ
をさらに含む、請求項9に記載の方法。 - 前記非同期イベントの処理の終了後、クリティカルセクションにおける命令を最初から実行するステップ
をさらに含む、請求項12に記載の方法。 - 前記コンピュータ・システムが複数のスレッドを含む環境であり、前記共有データ領域がスレッド間で共有される、請求項9に記載の方法。
- 第1のスレッドにおいて、第2のスレッドを停止させるための非同期イベントを発行するステップと、
前記第2のスレッドにおいて、クリティカルセクションを含むプログラムを実行するステップと
をさらに含む、請求項14に記載の方法。 - ロックを用いた排他制御方式又はトランザクショナルメモリ方式でクリティカルセクションを実行するステップと
をさらに含む、請求項9に記載の方法。 - 共有データへの排他的アクセスを許すためのコンピュータ・プログラムであって、コンピュータに、請求項9〜16のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008228286A JP5270268B2 (ja) | 2008-09-05 | 2008-09-05 | 共有データへの排他的アクセスを許すためのコンピュータ・システム、並びにその方法及びコンピュータ読み取り可能な記録媒体 |
US12/553,166 US8386720B2 (en) | 2008-09-05 | 2009-09-03 | Method for allowing exclusive access to shared data |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008228286A JP5270268B2 (ja) | 2008-09-05 | 2008-09-05 | 共有データへの排他的アクセスを許すためのコンピュータ・システム、並びにその方法及びコンピュータ読み取り可能な記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2010061522A JP2010061522A (ja) | 2010-03-18 |
JP5270268B2 true JP5270268B2 (ja) | 2013-08-21 |
Family
ID=42076713
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008228286A Expired - Fee Related JP5270268B2 (ja) | 2008-09-05 | 2008-09-05 | 共有データへの排他的アクセスを許すためのコンピュータ・システム、並びにその方法及びコンピュータ読み取り可能な記録媒体 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8386720B2 (ja) |
JP (1) | JP5270268B2 (ja) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8495311B2 (en) * | 2009-06-25 | 2013-07-23 | International Business Machines Corporation | Updating shared variables atomically |
CN101706788B (zh) * | 2009-11-25 | 2012-11-14 | 惠州Tcl移动通信有限公司 | 一种嵌入式文件系统的跨区访问方法 |
US8850126B2 (en) * | 2010-01-08 | 2014-09-30 | Netapp, Inc. | Exclusive access during a critical sub-operation to enable simultaneous operations |
CA2693938A1 (en) * | 2010-02-22 | 2011-08-22 | Ibm Canada Limited - Ibm Canada Limitee | Software object lock management using observations |
US8868748B2 (en) * | 2010-10-11 | 2014-10-21 | International Business Machines Corporation | Two-level management of locks on shared resources |
US8510530B1 (en) * | 2010-12-09 | 2013-08-13 | Google Inc. | Memory management for programs operating asynchronously |
TWI526828B (zh) * | 2011-02-15 | 2016-03-21 | 群聯電子股份有限公司 | 資料存取方法及使用此方法的記憶體控制器與儲存裝置 |
US8601486B2 (en) | 2011-05-31 | 2013-12-03 | International Business Machines Corporation | Deterministic parallelization through atomic task computation |
CN102662747A (zh) * | 2012-04-23 | 2012-09-12 | 深圳市融创天下科技股份有限公司 | 一种线程访问临界区的方法、系统和终端设备 |
US8918596B2 (en) * | 2012-12-20 | 2014-12-23 | Oracle International Corporation | System and method for implementing NUMA-aware statistics counters |
WO2014112066A1 (ja) * | 2013-01-17 | 2014-07-24 | 富士通株式会社 | 情報処理装置、メモリ管理方法及びプログラム |
US9304940B2 (en) | 2013-03-15 | 2016-04-05 | Intel Corporation | Processors, methods, and systems to relax synchronization of accesses to shared memory |
US10203995B2 (en) * | 2013-11-22 | 2019-02-12 | Excalibur Ip, Llc | Method or system for access to shared resource |
JP6468053B2 (ja) * | 2015-04-28 | 2019-02-13 | 富士通株式会社 | 情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法 |
JP6481549B2 (ja) * | 2015-07-23 | 2019-03-13 | 富士通株式会社 | 情報処理装置および情報処理装置の制御方法 |
JP6512087B2 (ja) * | 2015-12-09 | 2019-05-15 | 株式会社デンソー | 車両用制御装置 |
US10922074B2 (en) * | 2017-09-28 | 2021-02-16 | Oracle International Corporation | Deferred state mutation |
US11734070B2 (en) * | 2019-11-19 | 2023-08-22 | Verizon Patent And Licensing Inc. | Systems and methods for providing a compare and swap platform for sequence number generation in a cloud computing environment |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7941616B2 (en) * | 2008-10-21 | 2011-05-10 | Microsoft Corporation | System to reduce interference in concurrent programs |
-
2008
- 2008-09-05 JP JP2008228286A patent/JP5270268B2/ja not_active Expired - Fee Related
-
2009
- 2009-09-03 US US12/553,166 patent/US8386720B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2010061522A (ja) | 2010-03-18 |
US8386720B2 (en) | 2013-02-26 |
US20100088476A1 (en) | 2010-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5270268B2 (ja) | 共有データへの排他的アクセスを許すためのコンピュータ・システム、並びにその方法及びコンピュータ読み取り可能な記録媒体 | |
Chen et al. | Fast and general distributed transactions using RDMA and HTM | |
US9513959B2 (en) | Contention management for a hardware transactional memory | |
JP5964382B2 (ja) | 無限トランザクション型メモリ(utm)システムにおけるモード切り替えの実行 | |
US9430275B2 (en) | Synchronization between concurrent notifier and waiter transactions using transaction condition variables | |
KR101203297B1 (ko) | 직접 업데이트 소프트웨어 트랜잭션 메모리 | |
US8595446B2 (en) | System and method for performing dynamic mixed mode read validation in a software transactional memory | |
US7966459B2 (en) | System and method for supporting phased transactional memory modes | |
KR101470713B1 (ko) | 버퍼링된 저장을 이용하여 트랜잭션들을 가속화하기 위한 메커니즘들 | |
US8464261B2 (en) | System and method for executing a transaction using parallel co-transactions | |
US20090183159A1 (en) | Managing concurrent transactions using bloom filters | |
US8539465B2 (en) | Accelerating unbounded memory transactions using nested cache resident transactions | |
US8103838B2 (en) | System and method for transactional locking using reader-lists | |
US8239635B2 (en) | System and method for performing visible and semi-visible read operations in a software transactional memory | |
US9652492B2 (en) | Out-of-order execution of strictly-ordered transactional workloads | |
JP2010539609A (ja) | トランザクショナルメモリにおける並列入れ子状トランザクション | |
WO2014100698A1 (en) | Methods and systems for enhancing hardware transactions using hardware transactions in software slow-path | |
US9411661B2 (en) | Deadlock avoidance | |
Genç et al. | Crafty: Efficient, HTM-compatible persistent transactions | |
CN107003897B (zh) | 监控事务处理资源的利用率 | |
US7346747B1 (en) | Exclusive lease instruction support for transient blocking synchronization | |
US10671400B2 (en) | Enhanced managed runtime environments that support deterministic record and replay | |
US20100228927A1 (en) | Stm with multiple global version counters | |
US8276147B2 (en) | Low synchronization means of scheduler finalization | |
US10678595B2 (en) | Dynamic saving of registers in transactions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20110816 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20130228 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130319 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20130321 Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20130321 |
|
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: 20130416 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20130416 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20130416 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130509 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |