JP2011128975A - システム、方法、プログラムおよびコード生成装置 - Google Patents

システム、方法、プログラムおよびコード生成装置 Download PDF

Info

Publication number
JP2011128975A
JP2011128975A JP2009288102A JP2009288102A JP2011128975A JP 2011128975 A JP2011128975 A JP 2011128975A JP 2009288102 A JP2009288102 A JP 2009288102A JP 2009288102 A JP2009288102 A JP 2009288102A JP 2011128975 A JP2011128975 A JP 2011128975A
Authority
JP
Japan
Prior art keywords
exclusive
lock
task
critical section
execution unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009288102A
Other languages
English (en)
Other versions
JP5088754B2 (ja
Inventor
Takuya Nakaike
卓也 仲池
Maged M Michael
マゲッド エム. マイケル、
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
Priority to JP2009288102A priority Critical patent/JP5088754B2/ja
Priority to US12/969,683 priority patent/US9250980B2/en
Publication of JP2011128975A publication Critical patent/JP2011128975A/ja
Application granted granted Critical
Publication of JP5088754B2 publication Critical patent/JP5088754B2/ja
Priority to US14/979,217 priority patent/US9904581B2/en
Priority to US15/861,415 priority patent/US10169092B2/en
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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms

Abstract

【課題】処理負荷が軽いタスク間の排他制御方法を提供する。
【解決手段】何れかのタスクが排他ロックを取得および解放したことに応じて値が更新される更新情報と、排他ロックを取得しているタスクを識別するタスク識別情報とを記憶するロック状態記憶部26と、排他ロックを取得して第1タスクに含まれるクリティカルセクションの処理を実行させ、第1タスクに含まれるクリティカルセクションの処理の後に排他ロックを解放するとともに更新情報を更新する排他実行部28と、排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行させ、第2タスクに含まれるクリティカルセクションの処理の前後において更新情報が変化していないことを条件として当該クリティカルセクションの処理が成功したと判定する非排他実行部30とを備える。
【選択図】図2

Description

本発明は、システム、方法、プログラムおよびコード生成装置に関する。
コンピュータシステムにおいて、複数のスレッドが処理を並列に実行するマルチスレッドシステムが知られている。マルチスレッドシステムでは、各スレッドが共有変数等にアクセスする場合、他のスレッドとの同期を取る。マルチスレッドにおける同期方法は、排他ロックを用いた制御が一般的である。
スレッドが排他ロックを取得する場合、コンペアアンドスワップ等の原子的な命令を実行しなければならない。原子的な命令は、他の命令と比較して実行コストが大きい。従って、排他ロックの取得を行うと、処理全体のコストが大きくなってしまう。
また、排他ロックの取得および解放を行う場合、ロック変数に対する書き込みが発生する。従って、頻繁に排他ロックの取得および解放を行うと、キャッシュコヒーレントトラフィックが大きくなってしまう。
このような問題を解決する方法として、シーケンシャルロックと呼ばれる方法が知られている(非特許文献1)。シーケンシャルロックは、リーダ/ライターロックの一種であり、ロック変数がカウンタとして実装される。カウンタは、奇数の場合にロックが取得されていることを示し、偶数の場合にロックが解放されていることを示す。そして、カウンタは、ロックが取得および解放される毎に、値が1ずつインクリメントされる。
シーケンシャルロックを用いたシステムにおいて、スレッドは、書き込みがあるクリティカルセクションの処理を実行する場合にロックの取得を行う。書き込みが無いクリティカルセクションの処理を実行する場合には、スレッドは、次のような処理を実行する。
まず、スレッドは、クリティカルセクションの先頭において、カウンタ値(ロック変数)を読み出す。続いて、スレッドは、クリティカルセクションの処理を実行する。続いて、スレッドは、クリティカルセクションの最後において、カウンタ値を読出して、クリティカルセクションの先頭において読み出したカウンタ値と比較する。スレッドは、値が一致すればクリティカルセクションの処理を完了させ、値が一致しなければ再度クリティカルセクションの処理を先頭から繰り返す。
このように、シーケンシャルロックを用いたシステムによれば、書き込みの無いクリティカルセクションの処理を実行する場合には、原子的な命令を実行しないので、実行コストを小さくすることができる。さらに、シーケンシャルロックを用いたシステムによれば、ロック変数への書き込みを少なくすることができるので、キャッシュコヒーレントトラフィックを小さくすることができる。
"Seqlock"、[online], WIKIPEDIA、[2009年12月2日検索]、インターネット<http://en.wikipedia.org/wiki/Seqlock
ところで、シーケンシャルロックを用いたシステムでは、一のスレッドが連続して同一の排他ロックを取得することができなかった。従って、シーケンシャルロックを用いたシステムでは、一般に、ネストしたクリティカルセクションの処理、即ち、一のクリティカルセクションの内側において他のクリティカルセクションの処理を実行することが禁止されていた。
また、シーケンシャルロックを用いたシステムでは、書き込みの無いクリティカルセクションの処理を実行している間において、他の書き込みのあるクリティカルセクションの処理が実行された場合、書き込みの無いクリティカルセクションの処理は失敗となる。従って、書き込みのあるクリティカルセクションの処理が頻発して実行される場合、並行して実行される書き込みの無いクリティカルセクションの処理が長期間完了しなかった。
また、シーケンシャルロックを用いたシステムでは、書き込みの無いクリティカルセクションに含まれるループ処理が実行されている間において、他の書き込みのあるクリティカルセクションの処理を実行しているスレッドがループ処理の終了条件に関係する変数を書き換えてしまう場合がある。このような場合、書き込みの無いクリティカルセクションに含まれるループ処理が完了しなかった。
また、シーケンシャルロックを用いたシステムでは、書き込みの無いクリティカルセクションにデータを読み出す参照先を指定するポインタが含まれる場合がある。しかし、書き込みの無いクリティカルセクションの処理の実行中において他のスレッドがポインタの参照先にNULLを書き込むと、書き込みの無いクリティカルセクションがNULLにアクセスして、処理の実行を停止してしまう。
また、シーケンシャルロックを用いたシステムでは、クリティカルセクション内に稀にしか実行されない書き込み命令を含む場合がある。例えば、IF文の中に含まれる書き込み命令は、稀にしか実行されない場合がある。しかし、シーケンシャルロックを用いたシステムでは、このような稀にしか実行されない書き込み命令のみを含むクリティカルセクションであっても、排他ロックを取得して処理をしなければならなかった。
上記課題を解決するために、本発明の第1の態様においては、タスク間の排他制御を行うシステムであって、何れかのタスクが排他ロックを取得および解放したことに応じて値が更新される更新情報と、排他ロックを取得しているタスクを識別するタスク識別情報とを記憶するロック状態記憶部と、排他ロックを取得して第1タスクに含まれるクリティカルセクションの処理を実行させ、前記第1タスクに含まれるクリティカルセクションの処理の後に排他ロックを解放するとともに前記更新情報を更新する排他実行部と、排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行させ、第2タスクに含まれるクリティカルセクションの処理の前後において前記更新情報が変化していないことを条件として当該クリティカルセクションの処理が成功したと判定する非排他実行部と、を備えるシステム、方法、プログラムおよびコード生成装置を提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
本発明の実施形態に係るコンピュータシステム10の機能構成を示す。 第1タスクおよび第2タスクを並行して実行する場合のコンピュータシステム10の機能構成を示す。 本発明の実施形態に係る排他実行部28による排他ロックの取得時の処理フローを示す。 本発明の実施形態に係る排他実行部28による排他ロックの解放時の処理フローを示す。 本発明の実施形態に係る非排他実行部30による、排他ロックの取得を省略したクリティカルセクションの処理フローを示す。 図5に続く処理フローを示す。 本発明の実施形態に係る非排他実行部30による、排他ロックの取得を省略して実行されるクリティカルセクションの処理内における、ポインタで示されるアドレスをレジスタに読み込んでそのアドレスにアクセスする直前、および、ループの分岐判断の直前において、非排他実行部30が行う処理フローを示す。 本発明の実施形態に係る非排他実行部30による、排他ロックの取得を省略して実行されるクリティカルセクションの処理内における、ループ処理内で非排他実行部30が行う処理フローを示す。 メモリをロック状態記憶部26として機能させるための、Java(登録商標)により記述されたソースコードの一例を示す。 bimodalロックに適用された本実施形態に係るロック変数のロック解放時の一例を示す。 bimodalロックに適用された本実施形態に係るロック変数のロック取得時の一例を示す。 本発明の実施形態に係るコード生成部14の機能構成の一例を示す。 書き込みがあるクリティカルセクションの一例を示す。 書き込みが無いクリティカルセクションの一例を示す。 本発明の実施形態に係るコンピュータ1900のハードウェア構成の一例を示す。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、本実施形態に係るコンピュータシステム10の機能構成を示す。コンピュータシステム10は、プログラム格納部12と、コード生成部14と、実行部16とを備える。
プログラム格納部12は、プログラムを格納する。プログラム格納部12に格納されるプログラムは、例えば、Java(登録商標)のバイト・コードである。プログラム格納部12は、メモリおよびハードディスク等の記憶装置により実現される。
コード生成部14は、プログラム格納部12に格納されたプログラムを実行部16が実行できる形式のコードに変換する。コード生成部14は、例えば、実行時に動的にバイト・コードを実行部16において実行できるコードにコンパイルするJIT(Just−In−Time)コンパイラである。コード生成部14は、CPU(Central Processing Unit)がコンパイルプログラムを実行することにより実現される。
実行部16は、コード生成部14により変換されたコードを実行する。実行部16は、CPUがオペレーションシステムを実行することにより実現される。
さらに、実行部16は、複数のタスクを並行して実行する。実行部16は、例えばCPUの分割処理の単位(例えばスレッド、プロセス)のそれぞれがタスクを実行する。また、実行部16により実行される複数のタスクのそれぞれは、互いに共有の変数、配列および記憶領域等にアクセスすることができる。
また、それぞれのタスクは、クリティカルセクションを含んでよい。クリティカルセクションは、他のタスクに対して排他的に実行されるべき部分である。即ち、クリティカルセクションは、複数のタスクが同時に実行すると処理の一貫性を担保できない部分である。
ここで、実行部16は、タスクに含まれるクリティカルセクションのうち、他のタスクの実行に影響を与えるコード(例えばタスク間で共有する共有変数への書込命令、共有変数への書込命令を含む関数の呼出命令等)を含むクリティカルセクションについては、排他ロックを取得した確実な処理を実行する。
これに対して、実行部16は、タスクに含まれるクリティカルセクションのうち、他のタスクの実行に影響を与えるコードを含まないクリティカルセクションについては、排他ロックの取得を省略した楽観的な処理を実行する。さらに、実行部16は、他のタスクの実行に影響を与えるコードがループ内にあり、当該コードが稀にしか実行されないクリティカルセクションについても、排他ロックの取得を省略した楽観的な処理を実行してもよい。なお、実行部16による具体的な処理については、詳細を後述する。
図2は、第1タスクおよび第2タスクを並行して実行する場合のコンピュータシステム10の機能構成を示す。なお、第1タスクは、他のタスクの実行に影響を与えるコード(共有変数への書込命令および共有変数への書込命令を含む関数の呼出命令等)を含むクリティカルセクションを有する。また、第2タスクは、他のタスクの実行に影響を与えるコードを含まないクリティカルセクションを有する。
コンピュータシステム10は、複数のタスクを並行して実行する場合において、タスク間の排他制御を行う。第1タスクおよび第2タスクの間で排他制御を行う場合、コンピュータシステム10は、図2に示されるような機能ブロックを備える装置として機能する。即ち、コンピュータシステム10は、第1タスクおよび第2タスクの間で排他制御を行う場合、第1タスク実行部22と、第2タスク実行部24と、ロック状態記憶部26と、排他実行部28と、非排他実行部30とを備える。
第1タスク実行部22は、第1タスクの処理を行う。第1タスク実行部22は、例えば、CPUの一の処理単位(例えばスレッドおよびプロセス)が第1タスクの実行コードを実行することにより実現される。
第2タスク実行部24は、第2タスクの処理を行う。第2タスク実行部24は、例えば、CPUにおける第1タスクを実行する処理単位以外の処理単位が第2タスクの実行コードを実行することにより実現される。
ロック状態記憶部26は、CPUによりアクセスされるメモリ上に実現される。ロック状態記憶部26は、何れかのタスクが排他ロックを取得しているか否か、または全てのタスクが排他ロックを解放しているかを示すロック情報を記憶する。ロック情報は、例えば1ビットのデータであって、値が1の場合に何れかのタスクが排他ロックを取得していることを表し、値が0の場合に全てのタスクが排他ロックを解放していることを表す。
また、ロック状態記憶部26は、何れかのタスクが排他ロックを取得および解放したことに応じて値が更新される更新情報と、排他ロックを取得しているタスクを識別するタスク識別情報とを記憶する。更新情報は、例えば、値がインクリメントされるカウンタ値である。タスク識別情報は、タスク毎にユニークに割り当てられた値である。
ロック状態記憶部26は、一例として、何れかのタスクが排他ロックを取得している場合にタスク識別情報を記憶し、全てのタスクが排他ロックを解放している場合に更新情報を記憶する記憶領域を有する。即ち、ロック状態記憶部26は、排他ロックが取得されている場合にはタスク識別情報が書き込まれ、排他ロックが解放されている場合には更新情報が書き込まれる記憶領域を有する。
また、ロック状態記憶部26は、同一のタスクによる排他ロックの取得の繰返し回数を示す再帰情報を記憶する。繰り返し回数は、例えば、0を初期値とし、一のタスクが排他ロックを取得している状態で更に排他ロックを取得する場合に1が加算され、値が1以上の状態で一のタスクが排他ロックを解放する場合に1が減算される。
排他実行部28は、第1タスクに含まれるクリティカルセクション(即ち、他のタスクの実行に影響を与えるコードを含むクリティカルセクション)の実行を制御する。具体的には、排他実行部28は、排他ロックを取得して第1タスクに含まれるクリティカルセクションの処理を実行させる。そして、排他実行部28は、第1タスクに含まれるクリティカルセクションの処理の後に排他ロックを解放するとともに更新情報を更新する。なお、排他実行部28の具体的な処理内容は、図3および図4に示したフローを参照して更に説明する。
非排他実行部30は、第2タスクに含まれるクリティカルセクション(即ち、他のタスクの実行に影響を与えるコードを含まないクリティカルセクション)の実行を制御する。具体的には、非排他実行部30は、排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行させる。そして、非排他実行部30は、第2タスクに含まれるクリティカルセクションの処理の前後において更新情報が変化していないことを条件として当該クリティカルセクションの処理が成功したと判断する。なお、非排他実行部30の具体的な処理内容は、図5〜図8に示したフローを参照して更に説明する。
なお、クリティカルセクションを含むタスクのコンパイルにおいて、クリティカルセクションの排他制御をするための制御コードがコード生成部14により生成される。排他実行部28および非排他実行部30は、CPUがこのような実行コードを実行することにより実現される。
以上のような構成のコンピュータシステム10は、CPUがコード生成部14により生成された実行コードを実行することにより実現される。コード生成部14は、アプリケーションの実行中に動的に、バイト・コードを実行コードに変換する。より具体的には、コード生成部14は、タスクが起動される毎に、CPUを図2に示される構成のコンピュータシステム10として機能させるための実行コードを生成する。
図3は、本実施形態に係る排他実行部28による排他ロックの取得時の処理フローを示す。排他実行部28は、第1タスクに含まれるクリティカルセクションの処理の実行に先立って、排他ロックを取得する。排他ロックを取得する場合に、排他実行部28は、図3のステップS11〜ステップS17の処理を実行する。
まず、ステップS11において、排他実行部28は、ロック状態記憶部26からロック情報を読み出す。さらに、ステップS11において、排他実行部28は、ロック状態記憶部26の所定の記憶領域から更新情報またはタスク識別情報を読み出す。なお、排他実行部28は、全てのタスクが排他ロックを解放している場合にはロック状態記憶部26から更新情報を読み出し、何れかのタスクが排他ロックを取得している場合にはタスク識別情報を読み出す。
続いて、ステップS12において、排他実行部28は、読み出したロック情報を参照して、何れかのタスクが排他ロックを取得しているかを判断する。排他実行部28は、ステップS12での判断の結果、何れかのタスクが排他ロックを取得していない場合、即ち、全てのタスクが排他ロックを解放している場合(S12のNo)、処理をステップS13に進める。ステップS13において、排他実行部28は、排他ロックを取得していることを示すロック情報をロック状態記憶部26に書き込むと共に、更新情報に代えて第1タスクを識別するタスク識別情報をロック状態記憶部26に書き込む。
なお、ステップS13において、排他実行部28は、ロック情報およびタスク識別情報を原子的にロック状態記憶部26に書き込む。排他実行部28は、ロック情報およびタスク識別情報の書き込みが失敗した場合には(S13の失敗)、処理をステップS11に戻して、ロック情報等の読出しから処理を繰り返す。排他実行部28は、ロック情報およびタスク識別情報の書き込みが成功した場合には(S13の成功)、処理をステップS14に進める。
続いて、ステップS14において、排他実行部28は、ステップS11で読み出した更新情報をローカルの記憶領域に保存する。排他実行部28は、ステップS14の処理を終えると、排他ロックの取得の処理を完了して、第1タスク実行部22に第1タスクのクリティカルセクションの処理を実行させる。
また、排他実行部28は、ステップS12での判断の結果、何れかのタスクが排他ロックを取得している場合(S12のYes)、処理をステップS15に進める。ステップS15において、排他実行部28は、読み出したタスク識別情報を参照して、第1タスクが排他ロックを取得しているか(即ち、自分が排他ロックを取得しているか)を判断する。排他実行部28は、一例として、読み出したタスク識別情報と、第1タスクの識別情報とが一致するかを判断する。
排他実行部28は、ステップS15での判断の結果、第1タスクが排他ロックを取得している場合、即ち、読み出したタスク識別情報と第1タスクの識別情報とが一致する場合(S15のYes)、処理をステップS16に進める。ステップS16において、排他実行部28は、ロック状態記憶部26に記憶された再帰情報の繰返し回数をインクリメントする。排他実行部28は、ステップS16の処理を終えると、排他ロックの取得の処理を完了して、第1タスク実行部22に第1タスクのクリティカルセクションの処理を実行させる。
また、排他実行部28は、ステップS15での判断の結果、第1タスクが排他ロックを取得していないと判断した場合(S15のNo)、処理をステップS17に進める。ステップS17において、排他実行部28は、排他ロックが解放されるまで処理を待機する。そして、排他実行部28は、排他ロックが解放されると、処理をステップS11に戻して、ロック情報等の読出しから処理を繰り返す。
以上の処理により、排他実行部28は、第1タスクのクリティカルセクションの処理の実行に先立って、排他ロックを取得することができる。これにより、排他実行部28は、第1タスクに含まれるクリティカルセクションの処理を他のタスクとの間で矛盾を生じさせずに実行することができる。
図4は、本実施形態に係る排他実行部28による排他ロックの解放時の処理フローを示す。排他実行部28は、第1タスクに含まれるクリティカルセクションの処理の後に排他ロックを解放するとともに、更新情報を更新する。排他ロックを解放する場合に、排他実行部28は、図4のステップS21〜ステップS24の処理を実行する。
まず、ステップS21において、排他実行部28は、ロック状態記憶部26から再帰情報を読み出す。続いて、ステップS22において、排他実行部28は、読み出した再帰情報に示された繰り返し回数が0かを判断する。
排他実行部28は、ステップS22での判断の結果、再帰情報の繰返し回数が0の場合(S22のYes)、処理をステップS23に進める。ステップS23において、排他実行部28は、ロック状態記憶部26に排他ロックを解放していることを示すロック情報を書き込む。
これと共に、排他実行部28は、排他ロックの取得時において読み出した更新情報をローカルの記憶領域から読み出して、読み出した更新情報を更新した新たな更新情報をロック状態記憶部26に書き込む。排他実行部28は、一例として、ローカルの記憶領域に記憶された更新情報をインクリメントして、ロック状態記憶部26に書き込む。排他実行部28は、ステップS23の処理を終えると、排他ロックの解放の処理を完了して、第1タスク実行部22に、クリティカルセクションに続く第1タスクの処理を実行させる。
また、排他実行部28は、ステップS22での判断の結果、再帰情報の繰り返し回数が0でない場合(S22のNo)、処理をステップS24に進める。ステップS24において、排他実行部28は、ロック状態記憶部26に記憶されたロック情報およびタスク識別情報を維持して、ロック状態記憶部26に記憶された再帰情報の繰返し回数をデクリメントする。
排他実行部28は、ステップS24の処理を終えると、排他ロックの解放の処理を完了して、第1タスク実行部22に、クリティカルセクションに続く処理、即ち、ネストした外側のクリティカルセクションの処理を実行させる。以上の処理により、排他実行部28は、第1タスクのクリティカルセクションを排他的に実行させた後、排他ロックを解放することができる。
図3および図4のフローに示されるように、排他実行部28は、他のタスクの実行に影響を与えるコード(例えば共有変数への書き込み)を含むクリティカルセクションの処理を、排他ロックを取得して実行する。これにより、コンピュータシステム10によれば、当該タスクと他のタスクとの間で一貫性を保ってクリティカルセクションの処理を実行することができる。
更に、排他実行部28は、排他ロックを解放する場合に、更新情報を更新する。従って、排他実行部28は、他のタスクが排他ロックの取得を省略してクリティカルセクションの処理を実行した場合であっても、クリティカルセクションの処理の前後で更新情報の値を変えることができるので、他のタスクにクリティカルセクションの処理を再実行させることができる。これにより、コンピュータシステム10によれば、当該タスクと排他ロックの取得を省略してクリティカルセクションの処理を実行する他のタスクとの間で一貫性を保ってクリティカルセクションの処理を実行することができる。
また、排他実行部28は、排他ロックを取得する場合に、当該タスクを識別するタスク識別情報をロック状態記憶部26に書き込む。従って、排他実行部28は、自分自身により排他ロックを取得していることを確認することができる。これにより、コンピュータシステム10によれば、クリティカルセクションの内側にネストしたクリティカルセクションの処理を、排他ロックの取得状態を維持して再帰的に実行することができる。
また、排他実行部28は、クリティカルセクションのネストの深さを表す繰返し回数をロック状態記憶部26に書き込む。これにより、コンピュータシステム10によれば、ネスとしたクリティカルセクションを再帰的に実行する場合、最外のクリティカルセクションの処理が終了した後に、確実に排他ロックを解放することができる。
図5および図6は、本実施形態に係る非排他実行部30による、排他ロックの取得を省略したクリティカルセクションの処理フローを示す。非排他実行部30は、第2タスクに含まれるクリティカルセクションの処理を実行する場合に、図5および図6のステップS31〜S48の処理を実行する。
まず、図5のステップS31において、非排他実行部30は、ロック状態記憶部26からロック情報を読み出す。さらに、ステップS31において、非排他実行部30は、ロック状態記憶部26の所定の記憶領域から更新情報またはタスク識別情報を読み出す。
続いて、ステップS32において、非排他実行部30は、読み出したロック情報を参照して、何れかのタスクが排他ロックを取得しているかを判断する。非排他実行部30は、ステップS32での判断の結果、全てのタスクが排他ロックを解放している場合(S32のNo)、処理をステップS33に進める。ステップS33において、非排他実行部30は、ステップS31で読み出した更新情報をローカルの記憶領域に保存する。非排他実行部30は、ステップS33の処理を終えると、処理をステップS40に進める。
また、非排他実行部30は、ステップS32での判断の結果、何れかのタスクが排他ロックを取得している場合(S32のYes)、処理をステップS34に進める。ステップS34において、非排他実行部30は、読み出したタスク識別情報を参照して、第2タスクが排他ロックを取得しているか(即ち、自分が排他ロックを取得しているか)を判断する。非排他実行部30は、一例として、読み出したタスク識別情報と、第2タスクの識別情報とが一致するかを判断する。
非排他実行部30は、ステップS34での判断の結果、第2タスクが排他ロックを取得している場合、即ち、読み出したタスク識別情報と第2タスクの識別情報とが一致する場合(S34のYes)、処理をステップS35に進める。ステップS35において、非排他実行部30は、ロック状態記憶部26に記憶された再帰情報の繰返し回数をインクリメントする。非排他実行部30は、ステップS35の処理を終えると、処理をステップS40に進める。
また、非排他実行部30は、ステップS34での判断の結果、第2タスクが排他ロックを取得していないと判断した場合(S34のNo)、処理をステップS36に進める。ステップS36において、非排他実行部30は、排他ロックが解放されるまで処理を待機する。そして、非排他実行部30は、排他ロックが解放されると、処理をステップS31に戻して、ロック情報等の読出しから処理を繰り返す。
続いて、ステップS40において、非排他実行部30は、第2タスク実行部24に第2タスクのクリティカルセクションの処理を実行させる。第2タスク実行部24が第2タスクのクリティカルセクションの処理を終えると(ステップS40の処理が終了)、非排他実行部30は、処理を図6のステップS41に進める。
図6のステップS41において、非排他実行部30は、ロック状態記憶部26からロック情報を読み出す。さらに、ステップS41において、非排他実行部30は、ロック状態記憶部26の所定の記憶領域から更新情報またはタスク識別情報を読み出す。
続いて、ステップS42において、非排他実行部30は、読み出したロック情報を参照して、何れかのタスクが排他ロックを取得しているかを判断する。非排他実行部30は、ステップS42での判断の結果、全てのタスクが排他ロックを解放している場合(S32のNo)、処理をステップS43に進める。
ステップS43において、非排他実行部30は、ローカルの記憶領域に保存した更新情報(ステップS31で読み出した更新情報)と、ステップS41で読み出した更新情報とが一致したかを判断する。即ち、非排他実行部30は、ステップS43において、第2タスクに含まれるクリティカルセクションの処理の前後においてロック状態記憶部26に記憶された更新情報が変化したか判断する。
非排他実行部30は、ステップS43での判断の結果、更新情報が一致した場合には(S43のYes)、第2タスクに含まれる当該クリティカルセクションの処理を完了させる。即ち、非排他実行部30は、第2タスクに含まれるクリティカルセクションの処理の前後においてロック状態記憶部26に記憶された更新情報が変化していない場合には、第2タスクに含まれる当該クリティカルセクションの処理を完了させる。
これにより、非排他実行部30は、排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行させることができる。そして、非排他実行部30は、第2タスクに含まれるクリティカルセクションの処理の前後において、ロック状態記憶部26に排他ロックを解放していることを示すロック情報が記憶され且つ更新情報が変化していないことを条件として、当該クリティカルセクションの処理が成功したと判断することができる。
また、非排他実行部30は、ステップS42での判断の結果、何れかのタスクが排他ロックを取得している場合(S42のYes)、処理をステップS44に進める。ステップS44において、非排他実行部30は、ステップS41で読み出したタスク識別情報を参照して、第2タスクが排他ロックを取得しているか(即ち、自分が排他ロックを取得しているか)を判断する。非排他実行部30は、一例として、読み出したタスク識別情報と、第2タスクの識別情報とが一致するかを判断する。
非排他実行部30は、ステップS44での判断の結果、第2タスクが排他ロックを取得していない場合、即ち、読み出したタスク識別情報と第2タスクの識別情報とが一致しない場合(S44のNo)、処理をステップS45に進める。また、非排他実行部30は、ステップS43での判断の結果、更新情報が一致しない場合にも(S43のNo)、処理をステップS45に進める。
ステップS45において、非排他実行部30は、第2タスクによるクリティカルセクションの処理が所定条件に達しても成功しないかを判断する。非排他実行部30は、一例として、第2タスクに含まれるクリティカルセクションの処理を所定回以上繰り返しても成功しないかを判断する。また、非排他実行部30は、一例として、第2タスクに含まれる当該クリティカルセクションの処理を開始してから所定時間経過しても成功しないかを判断してもよい。
非排他実行部30は、ステップS45での判断の結果、第2タスクによるクリティカルセクションの処理が所定条件に達していない場合(S45のNo)、処理を図5のステップS31に戻して、ロック情報等の読出しから処理を繰り返す。
これにより、非排他実行部30は、排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行した後、何れかのタスクが排他ロックを取得した場合、且つ、第2タスクによるクリティカルセクションの処理が所定条件に達していない場合に、当該クリティカルセクションの処理を再実行させることができる。従って、非排他実行部30は、全てのタスクが排他ロックを取得していない状態で実行されるまで、第2タスクに含まれるクリティカルセクションの処理を繰り返し実行させることができる。
また、非排他実行部30は、ステップS45での判断の結果、第2タスクによるクリティカルセクションの処理が所定条件に達しても成功しない場合(S45のYes)、処理をステップS46に進める。ステップS46において、非排他実行部30は、排他ロックを取得する。ステップS46において、非排他実行部30は、図3に示したステップS11〜ステップS17と同様の処理を行う。
排他ロックを取得できると(ステップS46の処理が終了)、非排他実行部30は、処理をステップS40に進めて、第2タスク実行部24に第2タスクのクリティカルセクションの処理を実行させる。これにより、非排他実行部30は、第2タスクによるクリティカルセクションの処理が所定条件に達しても成功しない場合に、排他ロックを取得して第2タスクに含まれるクリティカルセクションの処理を実行させることができる。
また、非排他実行部30は、ステップS44での判断の結果、第2タスクが排他ロックを取得している場合、即ち、読み出したタスク識別情報と第2タスクの識別情報とが一致した場合(S44のYes)、処理をステップS47に進める。ステップS47において、非排他実行部30は、ロック状態記憶部26から再帰情報を読み出し、読み出した再帰情報に示された繰り返し回数が0かを判断する。
非排他実行部30は、ステップS47での判断の結果、再帰情報の繰返し回数が0の場合(S47のYes)、処理をステップS48に進める。ステップS48において、非排他実行部30は、排他ロックを解放する。
即ち、ステップS48において、非排他実行部30は、ロック状態記憶部26に排他ロックを解放していることを示すロック情報を書き込む。これと共に、ステップS48において、非排他実行部30は、排他ロックの取得時において読み出した更新情報をローカルの記憶領域から読み出して、読み出した更新情報を更新した新たな更新情報をロック状態記憶部26に書き込む。非排他実行部30は、ステップS48の処理を終えると、第2タスクに含まれるクリティカルセクションの処理を完了して、当該クリティカルセクションに続く第2タスクの処理を実行させる。
また、非排他実行部30は、ステップS47での判断の結果、再帰情報の繰り返し回数が0でない場合(S47のNo)、処理をステップS49に進める。ステップS49において、非排他実行部30は、ロック状態記憶部26に記憶されたロック情報およびタスク識別情報を維持して、ロック状態記憶部26に記憶された再帰情報の繰返し回数をデクリメントする。非排他実行部30は、ステップS24の処理を終えると、第2タスクに含まれるクリティカルセクションの処理を完了して、第2タスク実行部24に、第2タスクに含まれるクリティカルセクションに続く処理、即ち、ネストした外側のクリティカルセクションの処理を実行させる。
図5および図6のフローに示されるように、非排他実行部30は、他のタスクの実行に影響を与えるコード(例えば共有変数への書き込み)を含まないクリティカルセクションの処理を、排他ロックの取得を省略して実行させることができる。これにより、コンピュータシステム10によれば、コストの大きい原子的な命令を実行することなく、クリティカルセクションの処理を実行することができる。
また、非排他実行部30は、当該クリティカルセクションの処理の前後で更新情報が一致するか否かを確認し、一致しなければ当該クリティカルセクションの処理を再実行する。これにより、コンピュータシステム10によれば、当該タスクと他のタスクとの間で一貫性を保ってクリティカルセクションの処理を実行することができる。
また、非排他実行部30は、クリティカルセクションの処理を複数回実行する場合において、所定数回または所定時間実行しても処理が成功しない場合には、排他ロックを取得してクリティカルセクションの処理を実行する。これにより、コンピュータシステム10によれば、他のタスクによるクリティカルセクションの処理において書き込みが頻発して、当該タスクのクリティカルセクションの処理が長時間完了しなくなってしまうことを回避することができる。
図7は、本実施形態に係る非排他実行部30による、排他ロックの取得を省略して実行されるクリティカルセクションの処理内における、ポインタで示されるアドレスをレジスタに読み込んでそのアドレスにアクセスする直前、および、ループの分岐判断の直前において、非排他実行部30が行う処理フローを示す。
非排他実行部30は、第2タスクに含まれるクリティカルセクションの処理(図5および図6のステップS40の処理)内における、ポインタで示されるアドレスをレジスタに読み込んでそのアドレスにアクセスする直前、および、ループの分岐判断の直前において、図7のステップS51〜S56の処理を実行する。
まず、ステップS51において、非排他実行部30は、ロック状態記憶部26からロック情報を読み出す。さらに、ステップS51において、非排他実行部30は、ロック状態記憶部26の所定の記憶領域から更新情報またはタスク識別情報を読み出す。
続いて、ステップS52において、非排他実行部30は、読み出したロック情報を参照して、何れかのタスクが排他ロックを取得しているかを判断する。非排他実行部30は、ステップS52での判断の結果、全てのタスクが排他ロックを解放している場合(S52のNo)、処理をステップS53に進める。
ステップS53において、非排他実行部30は、ローカルの記憶領域に保存した更新情報(図5のステップS31で読み出した更新情報)と、ステップS51で読み出した更新情報とが一致したかを判断する。即ち、非排他実行部30は、ステップS53において、第2タスクに含まれるクリティカルセクションの処理前からロック状態記憶部26に記憶された更新情報が変化したかを判断する。
非排他実行部30は、ステップS53での判断の結果、更新情報が一致した場合には(S53のYes)、即ち、第2タスクに含まれるクリティカルセクションの処理の前からロック状態記憶部26に記憶された更新情報が変化していない場合には、当該処理を抜けてクリティカルセクションの処理を続行させる。即ち、非排他実行部30は、ポインタで示されるアドレスをレジスタに読み込んでそのアドレスにアクセスする処理、または、ループの分岐判断の処理を実行させる。
非排他実行部30は、ステップS53での判断の結果、更新情報が一致しない場合には(S53のNo)、即ち、第2タスクに含まれるクリティカルセクションの処理の前からロック状態記憶部26に記憶された更新情報が変化した場合には、処理をステップS54に進める。ステップS54において、非排他実行部30は、第2タスクによるクリティカルセクションの処理が所定条件に達しても成功しないかを判断する。非排他実行部30は、一例として、第2タスクに含まれるクリティカルセクションの処理を所定回以上繰り返しても成功しないかを判断する。また、非排他実行部30は、一例として、第2タスクに含まれる当該クリティカルセクションの処理を開始してから所定時間経過しても成功しないかを判断してもよい。
非排他実行部30は、ステップS54での判断の結果、第2タスクによるクリティカルセクションの処理が所定条件に達していない場合、処理を図5のステップS31に戻して、ロック情報等の読出しから処理を繰り返す。これにより、非排他実行部30は、排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行した後、何れかのタスクが排他ロックを取得した場合、且つ、第2タスクによるクリティカルセクションの処理が所定条件に達していない場合に、当該クリティカルセクションの処理を再実行させることができる。
また、非排他実行部30は、ステップS52での判断の結果、何れかのタスクが排他ロックを取得している場合(S52のYes)、処理をステップS55に進める。ステップS55において、非排他実行部30は、ステップS51で読み出したタスク識別情報を参照して、第2タスクが排他ロックを取得しているか(即ち、自分が排他ロックを取得しているか)を判断する。非排他実行部30は、一例として、読み出したタスク識別情報と、第2タスクの識別情報とが一致するかを判断する。
非排他実行部30は、ステップS55での判断の結果、第2タスクが排他ロックを取得している場合、即ち、読み出したタスク識別情報と第2タスクの識別情報とが一致した場合(S55のYes)、当該処理を抜けてクリティカルセクションの処理を続行させる。即ち、非排他実行部30は、ポインタで示されるアドレスをレジスタに読み込んでそのアドレスにアクセスする処理、または、ループの分岐判断の処理を実行させる。
また、非排他実行部30は、ステップS55での判断の結果、第2タスクが排他ロックを取得していない場合、即ち、読み出したタスク識別情報と第2タスクの識別情報とが一致しない場合(S55のNo)、処理をステップS56に進める。また、非排他実行部30は、ステップS54での判断の結果、第2タスクによるクリティカルセクションの処理が所定条件に達しても成功しない場合も(S54のYes)、処理をステップS56に進める。
ステップS56において、非排他実行部30は、排他ロックを取得する。ステップS56において、非排他実行部30は、図3に示したステップS11〜ステップS17と同様の処理を行う。
排他ロックを取得できると(ステップS56の処理が終了)、非排他実行部30は、処理を図6に示すステップS40に進めて、第2タスク実行部24に第2タスクのクリティカルセクションの処理を実行させる。これにより、非排他実行部30は、第2タスクによるクリティカルセクションの処理が所定条件に達しても成功しない場合に、排他ロックを取得して第2タスクに含まれるクリティカルセクションの処理を最初から実行させることができる。
図7のフローに示されるように、非排他実行部30は、排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行させる場合において、当該クリティカルセクションの処理に含まれるループ処理の中で、当該クリティカルセクションの処理前から更新情報が変化したか否かを確認する。そして、非排他実行部30は、更新情報が変化した場合には第2タスクに含まれるクリティカルセクションの処理を失敗したと判定する。これにより、コンピュータシステム10によれば、クリティカルセクション中のループ処理において、他のタスクがクリティカルセクションの処理を実行した結果、ループが終了しなくなり無限ループとなることを回避することができる。
また、非排他実行部30は、排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行させる場合において、当該クリティカルセクションの処理中においてポインタの参照先へのアクセスに先立って、当該クリティカルセクションの処理前から更新情報が変化したか否かを確認する。そして、非排他実行部30は、更新情報が変化した場合には第2タスクに含まれるクリティカルセクションの処理を失敗したと判定する。これにより、非排他実行部30は、ポインタの参照先に他のタスクがNULL等を書き込んだ場合に、スレッド等がNULLにアクセスして実行を停止してしまうことを回避することができる。
なお、ループの分岐判断の直前において図7に示されるフローを実行する場合、非排他実行部30は、Java(登録商標)等により実装される非同期イベントチェック機構を用いて処理を行ってもよい。非同期イベントチェック機構は、メソッドのエントリおよびループのバックエッジにおいて実行される。従って、当該非同期イベントチェック機構を用いることにより、非排他実行部30は、図7に示されるフローをオーバーヘッド無しに処理することができる。
図8は、本実施形態に係る非排他実行部30による、排他ロックの取得を省略して実行されるクリティカルセクションの処理内における、ループ処理内で非排他実行部30が行う処理フローを示す。本実施形態に係るコンピュータシステム10は、他のタスクの実行に影響を与えるコード(共有変数への書込命令および共有変数への書込命令を含む関数の呼出命令等)を含むクリティカルセクションを、排他ロックを取得して確実に処理を実行する。
しかし、他のタスクの実行に影響を与えるコードが条件判断の後に発生して、稀にしか実行されない場合には、当該クリティカルセクションを、排他ロックの取得を省略して楽観的に処理を実行してもよい。この場合、非排他実行部30は、当該クリティカルセクションを図5から図7に示したフローに従って処理をするとともに、条件判断の後であって他のタスクの実行に影響を与えるコードの前において、図8のステップS61〜S65の処理を実行する。
まず、ステップS61において、非排他実行部30は、ロック状態記憶部26からロック情報を読み出す。さらに、ステップS61において、非排他実行部30は、ロック状態記憶部26の所定の記憶領域から更新情報またはタスク識別情報を読み出す。
続いて、ステップS62において、非排他実行部30は、読み出したロック情報を参照して、何れかのタスクが排他ロックを取得しているかを判断する。非排他実行部30は、ステップS62での判断の結果、全てのタスクが排他ロックを解放している場合(S62のNo)、処理をステップS63に進める。
ステップS63において、非排他実行部30は、排他ロックを取得する。即ち、非排他実行部30は、ロック情報およびタスク識別情報をロック状態記憶部26に原子的に書き込む。非排他実行部30は、排他ロックの取得が成功した場合には(S63の成功)、読み出した更新情報をローカルの記憶領域に保存した後、当該処理を抜けてクリティカルセクションの処理を続行させる。
また、非排他実行部30は、ステップS62での判断の結果、何れかのタスクが排他ロックを取得している場合(S62のYes)、処理をステップS64に進める。ステップS64において、非排他実行部30は、ステップS61で読み出したタスク識別情報を参照して、第2タスクが排他ロックを取得しているか(即ち、自分が排他ロックを取得しているか)を判断する。非排他実行部30は、一例として、読み出したタスク識別情報と、第2タスクの識別情報とが一致するかを判断する。
非排他実行部30は、ステップS64での判断の結果、第2タスクが排他ロックを取得している場合、即ち、読み出したタスク識別情報と第2タスクの識別情報とが一致した場合(S64のYes)、当該処理を抜けてクリティカルセクションの処理を続行させる。
非排他実行部30は、ステップS64での判断の結果、第2タスクが排他ロックを取得していない場合(S64のNo)、処理をステップS65に進める。また、非排他実行部30は、ステップS63の処理で排他ロックの取得が失敗した場合にも(S63の失敗)、処理をステップS65に進める。
ステップS65において、非排他実行部30は、排他ロックを取得する。ステップS65において、非排他実行部30は、図3に示したステップS11〜ステップS17と同様の処理を行う。
排他ロックを取得できると(ステップS64の処理が終了)、非排他実行部30は、処理を図6に示すステップS40に進めて、第2タスク実行部24に第2タスクのクリティカルセクションの処理を実行させる。これにより、非排他実行部30は、排他ロックを取得して第2タスクに含まれるクリティカルセクションの処理を実行させることができる。
図8のフローに示されるように、非排他実行部30は、第2タスクに含まれるクリティカルセクションの処理において条件判断をした結果、タスク間で共有される共有変数に書き込みをする場合に、当該クリティカルセクションの処理前から更新情報が変化していないことを確認した上で、条件判断の後かつ共有変数の書き込み前に排他ロックを取得する。これにより、コンピュータシステム10によれば、他のタスクの実行に影響を与えるコードが稀にしか発生しないタスクのクリティカルセクションを、排他ロックの取得を省略して実行することができる。
なお、コード生成部14は、クリティカルセクション内のループ内に、他のタスクの実行に影響を与えるコードが含まれている場合、例外として、当該クリティカルセクションを排他ロックの取得を省略して実行させる制御コードを発生する。この場合において、コード生成部14は、実行プロファイルに基づき当該コードの実行頻度が基準値より少ないと判断した場合およびユーザに指定された場合等に、例外として排他ロックの取得を省略して実行させる制御コードを発生してもよい。
図9は、メモリをロック状態記憶部26として機能させるための、Java(登録商標)により記述されたコードの一例を示す。図9に示されるコードは、共有変数として、"counter"および"recursionCounter"を定義する。
"counter"は、固定長の整数であり、原子的に書き込みがされる。"counter"は、最下位の1ビットにロック情報が書き込まれ、2ビット目以上に更新情報またはタスク識別情報が書き込まれる。
"recursionCounter"は、固定長の整数である。"recursionCounter"は、再帰情報が書き込まれる。コンピュータシステム10は、このように記述されたコードを実行することにより、メモリをロック状態記憶部26として機能させることができる。
図10および図11は、Java(登録商標)のアプリケーションにおいて多く使用されるbimodalロックとともに本実施形態に係るロック状態記憶部26を実現する場合の、ロック変数の構造の一例を示す。図10は、ロック解放時のロック変数の構造を示す。図11は、ロック取得時のロック変数の構造を示す。
本例のロック変数は、最下位ビットが"Inflated"ビットであり、2ビット目が"FLC"ビットであり、3ビット目がロック情報である。"Inflatedビット"および"FLCビット"は、bimodalロックにおいて用いられている機能と同様である。ロック情報は、1の場合に排他ロックが取得されていることを示し、0の場合に排他ロックが解放されていることを示す。
また、本例のロック変数は、ロック解放時には、4ビット目から最上位ビットまでが更新情報である。また、本例のロック変数は、ロック取得時には、4ビット目から最上位ビットまでが2分割され、下位ビット側が再帰情報であり、上位ビット側がタスク識別情報である。
当該コンピュータシステム10は、このようなロック変数を実行することにより、メモリ上に、排他ロックを取得している場合にタスク識別情報および再帰情報を所定の記憶領域に記憶し、全てのタスクが排他ロックを解放している場合に更新情報を所定の記憶領域に記憶するロック状態記憶部を実現できる。また、このようなロック変数は、例えば、1ワード等のデータ長にすることが好ましい。
本例に係るロック変数を用いて排他ロックを取得する場合、排他実行部28は、図3に示される処理を行う。ただし、"Inflated"ビットがセットされている場合、排他実行部28は、オペレーティングシステムのモニタを使用して排他ロックを取得する。また、排他実行部28は、図3のステップS13において、再帰情報およびタスク識別情報を組み合わせたビット列に"4"を加算した値を、原子的にロック変数に書き込む。
また、本例に係るロック変数を用いて排他ロックを取得する場合、排他実行部28は、図4に示される処理を行う。ただし、"Inflated"ビットがセットされている場合、排他実行部28は、オペレーティングシステムのモニタを使用して排他ロックを解放する。
また、"FLC"ビットがセットされている場合、排他実行部28は、排他ロックをインフレーションする。この場合、排他実行部28は、ローカル変数に保存した更新情報に"8"を加算した値をインフレーション後に使用されるモニタ変数内に保存する。モニタ変数内に保存された値は、排他ロックをデフレーションする場合に、ロック変数内の更新情報の初期化値として用いられる。また、排他実行部28は、図4のステップS23の処理において、ローカル変数に保存した更新情報に"8"を加算した値をロック変数に書き込む。
また、本例に係るロック変数を用いて、排他ロックの取得を省略してクリティカルセクションの処理を実行する場合、非排他実行部30は、図5〜図8に示される処理を行う。ただし、"Inflated"ビットがセットされている場合、非排他実行部30は、オペレーティングシステムのモニタを使用して排他ロックの取得および解放を行う。
更に、"FLC"ビットがセットされている場合、非排他実行部30は、図6のステップS48の処理において、排他ロックをインフレーションする。この場合、非排他実行部30は、ローカル変数に保存した更新情報に"8"を加算した値をインフレーション後に使用されるモニタ変数内に保存する。以上のような処理を行うことにより、コンピュータシステム10は、bimodalロックを使用したアプリケーションに、本実施形態を適用することができる。
図12は、本実施形態に係るコード生成部14の機能構成の一例を示す。当該コンピュータシステム10がJava(登録商標)の環境下において動作する場合、コード生成部14はJITコンパイラにより実現される。この場合、図12に示されるように、コード生成部14は、解析部42と、コンパイル部44とを有する。
解析部42は、実行されるメソッド内の"synchronized"ブロックを解析して、他のタスクの実行に影響を与えるコードを含むクリティカルセクションを検出する。解析部42は、一例として、"synchronized"ブロック内に、例えば、ヒープ(インスタンス変数、静的変数および配列要素等)への書き込み処理、ヒープへの書き込みを含むメソッド呼び出し処理、および、nativeメソッド等を含むクリティカルセクションを検出する。
コンパイル部44は、メソッドの実行コードを生成する。更に、コンパイル部44は、他のタスクの実行に影響を与えるコードを含むクリティカルセクションに対応して、図3および図4に示されるフローを実行するための制御コードを生成する。
また、コンパイル部44は、他のタスクの実行に影響を与えるコードを含まないクリティカルセクションに対応して、図5、図6および図7に示されるフローを実行するための制御コードを生成する。これにより、コード生成部14によれば、CPUをコンピュータシステム10として機能させる制御コードを生成することができる。
また、コンパイル部44は、他のタスクの実行に影響を与えるコードを含むクリティカルセクションであっても、実行プロファイルに基づき当該コードの実行頻度が基準値より少ないと判断した場合には、例外として、当該クリティカルセクションについて、図5から図8に示されるフローを実行するための制御コードを生成してもよい。
また、他のタスクの実行に影響を与えるコードを含まない場合であっても、他のタスクとの間で一貫性を保たない状態でクリティカルセクションの処理を実行したことによる例外処理が発生する場合がある。そこで、コード生成部14は、他のタスクの実行に影響を与えるコードを含まないクリティカルセクションをキャッチブロックとして指定して、キャッチブロック内において例外が発生した場合に図6のステップS41以降の処理を実行する制御コードを生成する。
これにより、コンピュータシステム10は、例外が発生した場合であってもタスク間での一貫性が保たれている場合には、例外をそのままアプリケーションに渡すが、タスク間での一貫性が保たれていないことにより例外が発生した場合には、図5のステップS31から再度処理を実行することができる。従って、コンピュータシステム10は、例外発生による実行の中断を少なくすることができる。
また、コンピュータシステム10は、Java(登録商標)による実行環境において、書き込みの無いクリティカルセクションをJITコンパイラによって検出することにより、ソースコードの書き換えなしで排他ロックを省略することができる。しかし、書き込みの無いクリティカルセクションであっても、クリティカルセクション内に仮想メソッド呼び出しが存在し、その呼び出し先が確定しないので、当該クリティカルセクションを書き込み無しであると判断できない場合がある。
このような場合、ユーザは、書き込み無しのクリティカルセクションを指定してもよい。例えば、メソッド名と行数から構成されるリストをJVMの起動時に指定したり、synchronziedメソッドに対してアノテーションを付加したりする。これにより、コンピュータシステム10によれば、JITコンパイラにより書き込みの有無の検出が困難なクリティカルセクションであっても、排他ロックの取得を省略して処理を実行させることができる。
図13は、書き込みがあるクリティカルセクションの一例を示す。図14は、書き込みが無いクリティカルセクションの一例を示す。
コンピュータシステム10は、弱一貫性(weak−consistency)のメモリモデルを採用するCPUにより実現される場合がある。このような場合、コンピュータシステム10は、適切なメモリバリアを実行して、一貫性のある実行結果を得るように動作する。
例えば、コンピュータシステム10が、適切なメモリバリアを実行せずに、図13に示されるクリティカルセクションの処理を実行するとともに、図14に示されるクリティカルセクションの処理を実行した場合について説明する。図13のクリティカルセクション内では、XおよびYのそれぞれに1が書き込まれている。従って、図14のクリティカルセクションの処理を実行した後において、v1およびv2は、同じ値になることが期待される。しかしながら、適切なメモリバリア無しでクリティカルセクションの処理を実行した場合、v1とv2は、異なる値となる可能性がある。
まず、スレッドT1が図14中の10行目までを実行したと仮定する。次に、スレッドT2が図13の11行目までを実行したと仮定する。次に、スレッドT1が図14の12行目までを実行したと仮定する。このとき、スレッドT2はまだ図13の12行目を実行していないので、v1の値は1、v2の値は0である。この場合、図14の12行目において、vの値と読み出したカウンタ値(更新情報)は異なっていなければならない。
しかしながら、メモリバリアが無い場合、スレッドT2が図13の11行目を実行した時点で、6行目のカウンタ値(更新情報)の書き込みが終了していることが保証されていない。このように、図14の12行目において、vの値と読み出したカウンタ値(更新情報)は必ずしも異なるとは限らない。そこで、コンピュータシステム10は、以下のメモリバリアを実行して、一貫性の無い実行を回避する。
コンピュータシステム10は、書き込みのあるクリティカルセクションの処理を実行する前において、排他ロックを取得した後に、store/loadとstore/storeの順序を保つためのメモリバリアを実行する。また、コンピュータシステム10は、書き込みのあるクリティカルセクションの処理を実行した後において、排他ロックを解放する前に、load/storeとstore/storeの順序を保つためのメモリバリアを実行する。
また、コンピュータシステム10は、書き込みの無いクリティカルセクションの処理の更新情報の読出し後に、load/loadの順序を保つためのメモリバリアを実行する。また、コンピュータシステム10は、書き込みの無いクリティカルセクションの更新情報の一致を確認する処理の前において、load/loadの順序を保つためのメモリバリアを実行する。
また、更に、Java(登録商標)では、 "synchronized"ブロックの内側と外側、および、"synchronized"ブロックの前後において、loadおよびstoreの順序の変更を禁止する。従って、コンピュータシステム10は、Java(登録商標)により実装される場合、書き込みの無いクリティカルセクションの処理の更新情報の読出し後に、load/loadに加えて、store/loadおよびstore/storeの順序を保つメモリバリアも実行する。
図15は、本実施形態に係るコンピュータ1900のハードウェア構成の一例を示す。本実施形態に係るコンピュータ1900は、ホスト・コントローラ2082により相互に接続されるCPU2000、RAM2020、グラフィック・コントローラ2075、及び表示装置2080を有するCPU周辺部と、入出力コントローラ2084によりホスト・コントローラ2082に接続される通信インターフェイス2030、ハードディスクドライブ2040、及びCD−ROMドライブ2060を有する入出力部と、入出力コントローラ2084に接続されるROM2010、フレキシブルディスク・ドライブ2050、及び入出力チップ2070を有するレガシー入出力部とを備える。
ホスト・コントローラ2082は、RAM2020と、高い転送レートでRAM2020をアクセスするCPU2000及びグラフィック・コントローラ2075とを接続する。CPU2000は、ROM2010及びRAM2020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ2075は、CPU2000等がRAM2020内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置2080上に表示させる。これに代えて、グラフィック・コントローラ2075は、CPU2000等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
入出力コントローラ2084は、ホスト・コントローラ2082と、比較的高速な入出力装置である通信インターフェイス2030、ハードディスクドライブ2040、CD−ROMドライブ2060を接続する。通信インターフェイス2030は、ネットワークを介して他の装置と通信する。ハードディスクドライブ2040は、コンピュータ1900内のCPU2000が使用するプログラム及びデータを格納する。CD−ROMドライブ2060は、CD−ROM2095からプログラム又はデータを読み取り、RAM2020を介してハードディスクドライブ2040に提供する。
また、入出力コントローラ2084には、ROM2010と、フレキシブルディスク・ドライブ2050、及び入出力チップ2070の比較的低速な入出力装置とが接続される。ROM2010は、コンピュータ1900が起動時に実行するブート・プログラム、及び/又は、コンピュータ1900のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ2050は、フレキシブルディスク2090からプログラム又はデータを読み取り、RAM2020を介してハードディスクドライブ2040に提供する。入出力チップ2070は、フレキシブルディスク・ドライブ2050を入出力コントローラ2084へと接続すると共に、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ2084へと接続する。
RAM2020を介してハードディスクドライブ2040に提供されるプログラムは、フレキシブルディスク2090、CD−ROM2095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、RAM2020を介してコンピュータ1900内のハードディスクドライブ2040にインストールされ、CPU2000において実行される。
コンピュータ1900にインストールされ、コンピュータ1900をコンピュータシステム10として機能させるプログラムは、第1タスク実行モジュールと、第2タスク実行モジュールと、ロック状態記憶モジュールと、排他実行モジュールと、非排他実行モジュールとを備える。これらのプログラム又はモジュールは、CPU2000等に働きかけて、コンピュータ1900を、第1タスク実行部22、第2タスク実行部24、ロック状態記憶部26、排他実行部28および非排他実行部30としてそれぞれ機能させる。
これらのプログラムに記述された情報処理は、コンピュータ1900に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段である第1タスク実行部22、第2タスク実行部24、ロック状態記憶部26、排他実行部28および非排他実行部30として機能する。そして、これらの具体的手段によって、本実施形態におけるコンピュータ1900の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有のコンピュータシステム10が構築される。
一例として、コンピュータ1900と外部の装置等との間で通信を行う場合には、CPU2000は、RAM2020上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス2030に対して通信処理を指示する。通信インターフェイス2030は、CPU2000の制御を受けて、RAM2020、ハードディスクドライブ2040、フレキシブルディスク2090、又はCD−ROM2095等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス2030は、DMA(ダイレクト・メモリ・アクセス)方式により記憶装置との間で送受信データを転送してもよく、これに代えて、CPU2000が転送元の記憶装置又は通信インターフェイス2030からデータを読み出し、転送先の通信インターフェイス2030又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
また、CPU2000は、ハードディスクドライブ2040、CD−ROMドライブ2060(CD−ROM2095)、フレキシブルディスク・ドライブ2050(フレキシブルディスク2090)等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をDMA転送等によりRAM2020へと読み込ませ、RAM2020上のデータに対して各種の処理を行う。そして、CPU2000は、処理を終えたデータを、DMA転送等により外部記憶装置へと書き戻す。このような処理において、RAM2020は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはRAM2020および外部記憶装置等をメモリ、記憶部、または記憶装置等と総称する。本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、CPU2000は、RAM2020の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはRAM2020の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもRAM2020、メモリ、及び/又は記憶装置に含まれるものとする。
また、CPU2000は、RAM2020から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、RAM2020へと書き戻す。例えば、CPU2000は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすかどうかを判断し、条件が成立した場合(又は不成立であった場合)に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
また、CPU2000は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第1属性の属性値に対し第2属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、CPU2000は、記憶装置に格納されている複数のエントリの中から第1属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第2属性の属性値を読み出すことにより、所定の条件を満たす第1属性に対応付けられた第2属性の属性値を得ることができる。
以上に示したプログラム又はモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク2090、CD−ROM2095の他に、DVD又はCD等の光学記録媒体、MO等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワーク又はインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ1900に提供してもよい。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
10 コンピュータシステム
12 プログラム格納部
14 コード生成部
16 実行部
22 第1タスク実行部
24 第2タスク実行部
26 ロック状態記憶部
28 排他実行部
30 非排他実行部
42 解析部
44 コンパイル部
1900 コンピュータ
2000 CPU
2010 ROM
2020 RAM
2030 通信インターフェイス
2040 ハードディスクドライブ
2050 フレキシブルディスク・ドライブ
2060 CD−ROMドライブ
2070 入出力チップ
2075 グラフィック・コントローラ
2080 表示装置
2082 ホスト・コントローラ
2084 入出力コントローラ
2090 フレキシブルディスク
2095 CD−ROM

Claims (14)

  1. タスク間の排他制御を行うシステムであって、
    何れかのタスクが排他ロックを取得および解放したことに応じて値が更新される更新情報と、排他ロックを取得しているタスクを識別するタスク識別情報とを記憶するロック状態記憶部と、
    排他ロックを取得して第1タスクに含まれるクリティカルセクションの処理を実行させ、前記第1タスクに含まれるクリティカルセクションの処理の後に排他ロックを解放するとともに前記更新情報を更新する排他実行部と、
    排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行させ、第2タスクに含まれるクリティカルセクションの処理の前後において前記更新情報が変化していないことを条件として当該クリティカルセクションの処理が成功したと判定する非排他実行部と、
    を備えるシステム。
  2. 前記ロック状態記憶部は、何れかのタスクが排他ロックを取得しているか否かを示すロック情報を更に記憶し、
    前記排他実行部は、
    排他ロックを取得する場合、前記ロック状態記憶部から前記ロック情報を読出し、全てのタスクが排他ロックを解放していることを条件に、排他ロックを取得していることを示す前記ロック情報を前記ロック状態記憶部に書き込み、
    排他ロックを解放する場合に、排他ロックを解放していることを示す前記ロック情報を前記ロック状態記憶部に書き込む
    請求項1に記載のシステム。
  3. 前記ロック状態記憶部は、何れかのタスクが排他ロックを取得している場合に前記タスク識別情報を記憶し、全てのタスクが排他ロックを解放している場合に前記更新情報を記憶する記憶領域を有し、
    前記排他実行部は、
    排他ロックを取得する場合に、前記ロック状態記憶部から前記更新情報を読み出し、排他ロックを取得していることを示す前記ロック情報を前記ロック状態記憶部に書き込むと共に、前記更新情報に代えて前記第1タスクを識別する前記タスク識別情報を前記ロック状態記憶部に書き込み、
    排他ロックを解放する場合に、排他ロックを解放していることを示す前記ロック情報を前記ロック状態記憶部に書き込むと共に、前記第1タスクを識別する前記タスク識別情報に代えて、排他ロックの取得において読み出した前記更新情報を更新した新たな前記更新情報を前記ロック状態記憶部に書き込む
    請求項2に記載のシステム。
  4. 前記ロック状態記憶部は、同一のタスクによる排他ロックの取得の繰返し回数を示す再帰情報を記憶し、
    前記排他実行部は、
    排他ロックを取得する場合において、前記第1タスクが排他ロックを取得している場合、前記ロック状態記憶部に記憶された前記再帰情報の繰返し回数をインクリメントし、
    排他ロックを解放する場合において、前記再帰情報の繰返し回数が0でない場合には、前記ロック状態記憶部に記憶された前記ロック情報および前記タスク識別情報を維持して、前記再帰情報の繰返し回数をデクリメントする
    請求項3に記載のシステム。
  5. 前記ロック状態記憶部は、何れかのタスクが排他ロックを取得している場合に前記タスク識別情報および前記再帰情報を前記記憶領域に記憶し、全てのタスクが排他ロックを解放している場合に前記更新情報を前記記憶領域に記憶する請求項4に記載のシステム。
  6. 前記非排他実行部は、前記第2タスクに含まれるクリティカルセクションの処理の前後において、前記ロック状態記憶部に排他ロックを解放していることを示す前記ロック情報が記憶され、且つ、前記ロック状態記憶部に記憶された前記更新情報が変化していないことを条件として、クリティカルセクションの処理が成功したと判定する請求項2から5のいずれかに記載のシステム。
  7. 前記非排他実行部は、前記第2タスクによるクリティカルセクションの処理が所定条件に達しても成功しない場合に、排他ロックを取得して第2タスクに含まれるクリティカルセクションの処理を実行させる請求項1から6のいずれかに記載のシステム。
  8. 前記非排他実行部は、
    排他ロックを取得せずに前記第2タスクに含まれるクリティカルセクションの処理を実行させる場合において、当該クリティカルセクションの処理に含まれるループ処理の中で、当該クリティカルセクションの処理前から前記更新情報が変化したか確認し、
    前記更新情報が変化した場合には前記第2タスクに含まれるクリティカルセクションの処理を失敗したと判定する
    請求項1から7のいずれかに記載のシステム。
  9. 前記非排他実行部は、
    排他ロックを取得せずに前記第2タスクに含まれるクリティカルセクションの処理を実行させる場合において、当該クリティカルセクションの処理中においてポインタの参照先へのアクセスに先立って、当該クリティカルセクションの処理前から前記更新情報が変化したか否かを確認し、
    前記更新情報が変化した場合には前記第2タスクに含まれるクリティカルセクションの処理を失敗したと判定する
    請求項1から8のいずれかに記載のシステム。
  10. 前記非排他実行部は、
    前記第2タスクに含まれるクリティカルセクションの処理中においてポインタの参照先を取得してから前記更新情報が変化したか否かを確認し、
    前記更新情報が変化していないことを条件として、取得したポインタの参照先をアクセスする
    請求項9に記載のシステム。
  11. 前記非排他実行部は、前記第2タスクに含まれるクリティカルセクションの処理において条件判断をした結果、タスク間で共有される共有変数に書き込みをする場合に、当該クリティカルセクションの処理前から前記更新情報が変化していないことを確認した上で、前記条件判断の後かつ前記共有変数の書き込み前に排他ロックを取得する請求項1から10のいずれかに記載のシステム。
  12. タスク間の排他制御を行う方法であって、
    何れかのタスクが排他ロックを取得および解放したことに応じて値が更新される更新情報と、排他ロックを取得しているタスクを識別するタスク識別情報とを記憶するロック状態記憶部をメモリ上に実現するステップと、
    排他ロックを取得して第1タスクに含まれるクリティカルセクションの処理を実行させ、前記第1タスクに含まれるクリティカルセクションの処理の後に排他ロックを解放するとともに前記更新情報を更新する排他実行ステップと、
    排他ロックを取得せずに第2タスクに含まれるクリティカルセクションの処理を実行させ、第2タスクに含まれるクリティカルセクションの処理の前後において前記更新情報が変化していないことを条件として当該クリティカルセクションの処理が成功したと判定する非排他実行ステップと、
    を備える方法。
  13. コンピュータを、請求項1から11の何れかに記載のシステムとして機能させるためのプログラム。
  14. 請求項13のプログラムの実行コードを生成するコード生成装置。
JP2009288102A 2009-12-18 2009-12-18 システム、方法、プログラムおよびコード生成装置 Expired - Fee Related JP5088754B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2009288102A JP5088754B2 (ja) 2009-12-18 2009-12-18 システム、方法、プログラムおよびコード生成装置
US12/969,683 US9250980B2 (en) 2009-12-18 2010-12-16 System, method, program, and code generation unit
US14/979,217 US9904581B2 (en) 2009-12-18 2015-12-22 System, method, program, and code generation unit
US15/861,415 US10169092B2 (en) 2009-12-18 2018-01-03 System, method, program, and code generation unit

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009288102A JP5088754B2 (ja) 2009-12-18 2009-12-18 システム、方法、プログラムおよびコード生成装置

Publications (2)

Publication Number Publication Date
JP2011128975A true JP2011128975A (ja) 2011-06-30
JP5088754B2 JP5088754B2 (ja) 2012-12-05

Family

ID=44153017

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009288102A Expired - Fee Related JP5088754B2 (ja) 2009-12-18 2009-12-18 システム、方法、プログラムおよびコード生成装置

Country Status (2)

Country Link
US (3) US9250980B2 (ja)
JP (1) JP5088754B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013168103A (ja) * 2012-02-17 2013-08-29 Nec Computertechno Ltd 情報処理装置、及び、情報処理方法
JP2014182795A (ja) * 2013-03-15 2014-09-29 Intel Corp 共有メモリへのアクセスの同期を緩和するプロセッサ、方法及びシステム
JP2015038724A (ja) * 2013-08-19 2015-02-26 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 状態遷移経路の算出によるスリープ・ウェークアッププロトコル検証のための方法およびシステム

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8893137B2 (en) * 2012-03-13 2014-11-18 Cisco Technology, Inc. Transaction-based shared memory protection for high availability environments
US9286137B2 (en) * 2012-09-14 2016-03-15 Intel Corporation Achieving deterministic execution of time critical code sections in multi-core systems
US10642644B2 (en) * 2016-06-27 2020-05-05 Intel Corporation Memory management method and apparatus
US10353766B2 (en) * 2016-09-09 2019-07-16 International Business Machines Corporation Managing execution of computer tasks under time constraints
CN111221858B (zh) * 2018-11-26 2023-07-04 阿里巴巴集团控股有限公司 一种数据处理方法、装置及设备
CN110532099B (zh) * 2019-08-30 2022-05-31 联想(北京)有限公司 资源隔离方法和装置以及电子设备和介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0267670A (ja) * 1988-09-02 1990-03-07 Hitachi Ltd 複合データ処理装置および共有データ資源の管理方法
JPH05257792A (ja) * 1992-03-13 1993-10-08 Hitachi Ltd 共通データアクセス方法および装置
JP2006185232A (ja) * 2004-12-28 2006-07-13 Hitachi Ltd 複数のプログラムの実行方法、プログラム変換方法及びこれを用いたコンパイラプログラム

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5293600A (en) * 1990-04-06 1994-03-08 International Business Machines Corporation Counter and flux bit locking for very fast shared serialization of shared data objects
US6823511B1 (en) 2000-01-10 2004-11-23 International Business Machines Corporation Reader-writer lock for multiprocessor systems
JP2001236221A (ja) 2000-02-21 2001-08-31 Keisuke Shindo マルチスレッドを利用するパイプライン並列プロセッサ
US7120762B2 (en) * 2001-10-19 2006-10-10 Wisconsin Alumni Research Foundation Concurrent execution of critical sections by eliding ownership of locks
JP4180569B2 (ja) 2003-01-27 2008-11-12 富士通株式会社 記憶制御装置、データキャッシュ制御装置、中央処理装置、記憶装置制御方法、データキャッシュ制御方法およびキャッシュ制御方法
JP3646137B2 (ja) 2003-03-25 2005-05-11 独立行政法人科学技術振興機構 命令発行方法及び装置、中央演算装置、命令発行プログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
JP2005182594A (ja) 2003-12-22 2005-07-07 Matsushita Electric Ind Co Ltd コンピュータ及びプログラム
US7567963B2 (en) 2004-06-28 2009-07-28 Intel Corporation Thread synchronization with lock inflation methods and apparatus for managed run-time environments
JP2009508187A (ja) 2005-08-01 2009-02-26 サン・マイクロシステムズ・インコーポレーテッド クリティカルセクションをトランザクション的に実行することによるロックの回避
JP2007249634A (ja) 2006-03-16 2007-09-27 Nec Corp ロック管理方法及びロック管理システム
JP2008267594A (ja) 2007-03-23 2008-11-06 Hitachi Metals Ltd セルフピアスリベット及びこれを用いた接合方法
JP2008257594A (ja) 2007-04-06 2008-10-23 Hitachi Ltd 情報処理装置および情報処理方法
US20100115502A1 (en) * 2008-11-06 2010-05-06 Jiva Azeem S Post Processing of Dynamically Generated Code
US8341643B2 (en) * 2010-03-29 2012-12-25 International Business Machines Corporation Protecting shared resources using shared memory and sockets

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0267670A (ja) * 1988-09-02 1990-03-07 Hitachi Ltd 複合データ処理装置および共有データ資源の管理方法
JPH05257792A (ja) * 1992-03-13 1993-10-08 Hitachi Ltd 共通データアクセス方法および装置
JP2006185232A (ja) * 2004-12-28 2006-07-13 Hitachi Ltd 複数のプログラムの実行方法、プログラム変換方法及びこれを用いたコンパイラプログラム

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013168103A (ja) * 2012-02-17 2013-08-29 Nec Computertechno Ltd 情報処理装置、及び、情報処理方法
JP2014182795A (ja) * 2013-03-15 2014-09-29 Intel Corp 共有メモリへのアクセスの同期を緩和するプロセッサ、方法及びシステム
US9304940B2 (en) 2013-03-15 2016-04-05 Intel Corporation Processors, methods, and systems to relax synchronization of accesses to shared memory
JP2016207232A (ja) * 2013-03-15 2016-12-08 インテル・コーポレーション 共有メモリへのアクセスの同期を緩和するプロセッサ、方法、システム、及びプログラム
US10235175B2 (en) 2013-03-15 2019-03-19 Intel Corporation Processors, methods, and systems to relax synchronization of accesses to shared memory
JP2015038724A (ja) * 2013-08-19 2015-02-26 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 状態遷移経路の算出によるスリープ・ウェークアッププロトコル検証のための方法およびシステム

Also Published As

Publication number Publication date
JP5088754B2 (ja) 2012-12-05
US20160139960A1 (en) 2016-05-19
US20110154343A1 (en) 2011-06-23
US9904581B2 (en) 2018-02-27
US20180136978A1 (en) 2018-05-17
US10169092B2 (en) 2019-01-01
US9250980B2 (en) 2016-02-02

Similar Documents

Publication Publication Date Title
JP5088754B2 (ja) システム、方法、プログラムおよびコード生成装置
JP5284103B2 (ja) ソフトウェアトランザクショナルメモリ動作の最適化
US6854108B1 (en) Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors
TWI566180B (zh) 一種動態創建可附加和可拆除二進位檔案的系統和方法
US8438468B2 (en) Annotation management
CN101194230A (zh) 具有对共享资源的访问协调的转换程序代码的方法和设备
CN103999036A (zh) 在支持事务的计算机体系结构中使用异常进行代码专业化的方法和系统
US9690564B2 (en) Runtime detection of software configurations and upgrades
US20130151524A1 (en) Optimized Resizing For RCU-Protected Hash Tables
US9766926B2 (en) Method and system for optimizing parallel program execution based on speculation that an object written to is not shared
EP3602307B1 (en) Enabling breakpoints on entire data structures
JP5489884B2 (ja) 命令実行装置、命令実行方法、及び命令実行プログラム
US8589899B2 (en) Optimization system, optimization method, and compiler program
JP2007532990A (ja) ヘルパーサブスレッドを含むスレッドの実行の明示的ソフトウェア制御のための方法及び構造
KR20170127060A (ko) 유연성을 갖춘 메타데이터 구성 기법
CN112579291A (zh) 一种基于StateDB的智能合约并行运行系统及并行运行方法
US8185885B2 (en) Providing recovery data for program code
JP6245028B2 (ja) 実行制御方法、実行制御プログラムおよび実行制御装置
US20160371083A1 (en) Lock Free Streaming of Executable Code Data
JP5186334B2 (ja) 変換装置、プログラムおよび変換方法
CN104166633B (zh) 用于存储器访问保护的方法和系统
JP3988740B2 (ja) 並列処理装置、命令再試行方法、およびプログラム
US20230315611A1 (en) Bug-detection assisting device, bug-detection assisting method, and bug-detection assisting program
JP2021196824A (ja) アプリケーション起動プログラム,情報処理装置及びアプリケーション起動方法
CN116088897A (zh) 更新应用程序配置文件的方法、系统、设备及存储介质

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111129

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120106

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120703

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120717

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

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20120815

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120904

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

Free format text: PAYMENT UNTIL: 20150921

Year of fee payment: 3

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