JPH11327931A - セマフォ操作を実行する方法及び装置 - Google Patents
セマフォ操作を実行する方法及び装置Info
- Publication number
- JPH11327931A JPH11327931A JP11074165A JP7416599A JPH11327931A JP H11327931 A JPH11327931 A JP H11327931A JP 11074165 A JP11074165 A JP 11074165A JP 7416599 A JP7416599 A JP 7416599A JP H11327931 A JPH11327931 A JP H11327931A
- Authority
- JP
- Japan
- Prior art keywords
- semaphore
- value
- queue
- field
- replacement
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Multi Processors (AREA)
Abstract
(57)【要約】 (修正有)
【課題】共有資源へアクセスするのを制御するためのセ
マフォ操作の方法。 【解決手段】セマフォは、シーケンス番号を含む第1セ
マフォ・フィールドと、待ち行列へのポインターを含む
第2セマフォ・フィールドを有する。待ち行列の、各エ
ントリはセマフォのウエイターに対応し、次のエントリ
を差すポインターを有する。指定された操作に従って、
インクリメントされたシーケンス番号を含む第1の置換
値が、第1セマフォ・フィールドのために生成される。
待ち行列が変更されている場合、第2セマフォ・フィー
ルドのための第2置換値と待ち行列エントリの1つのた
めの第3置換値が生成される。第1セマフォ・フィール
ドの現在値が、シーケンス番号を含む比較値と比較さ
れ、一致する場合第1置換値で置換し、待ち行列が変更
されている場合、第2又は第3置換値で置換される。一
致しない場合、セマフォ・フィールドの新しく保管され
た値を比較値として、セマフォ操作が再試行される。
マフォ操作の方法。 【解決手段】セマフォは、シーケンス番号を含む第1セ
マフォ・フィールドと、待ち行列へのポインターを含む
第2セマフォ・フィールドを有する。待ち行列の、各エ
ントリはセマフォのウエイターに対応し、次のエントリ
を差すポインターを有する。指定された操作に従って、
インクリメントされたシーケンス番号を含む第1の置換
値が、第1セマフォ・フィールドのために生成される。
待ち行列が変更されている場合、第2セマフォ・フィー
ルドのための第2置換値と待ち行列エントリの1つのた
めの第3置換値が生成される。第1セマフォ・フィール
ドの現在値が、シーケンス番号を含む比較値と比較さ
れ、一致する場合第1置換値で置換し、待ち行列が変更
されている場合、第2又は第3置換値で置換される。一
致しない場合、セマフォ・フィールドの新しく保管され
た値を比較値として、セマフォ操作が再試行される。
Description
【0001】
【産業上の利用分野】本発明は、セマフォ(semap
hore)に基づく操作を実行する方法及び装置に関す
る。より詳細には、本発明は、2進セマフォ(bina
ry semaphore)に関する操作を実行する方
法及び装置に関する。
hore)に基づく操作を実行する方法及び装置に関す
る。より詳細には、本発明は、2進セマフォ(bina
ry semaphore)に関する操作を実行する方
法及び装置に関する。
【0002】
【従来の技術】コンピュータの世界において、共有資源
へのアクセスを直列するために使われる、セマフォとし
て知れてた公知の直列化(serializatio
n)機構が存在する。セマフォとは、ゼロと所定の正の
数nの間で可変な整数であり、nは資源の同時使用を許
可された要求元(requester)の数である。2
進セマフォの場合、n=1は単に1の要求元のみが1度
に資源を使用できる。最初セマフォは、nとセットされ
る。資源へのアクセスを確保するために、要求元(例え
ばプロセス又はスレッドのような作業単位)は、セマフ
ォの現在値をテストする。一方現在値ゼロより大きい場
合、現在値を1ディクリメントして、要求元は中断され
(即ち、スリープ(sleep)し)、セマフォのウエ
イター(waiter)として待ち行列(queue)
に入る。資源を解放するために、要求元はセマフォ値を
1インクリメントする。その上、セマフォの待ち行列に
幾つかウエイターが存在する場合、ウエイターの1つに
通知され、最初に行ったようにセマフォをテストして、
そのウエイターは再び資源を確保を試みる。セマフォ
(Semaphores)は最初ジャクストラ(Dij
kstra)に提案され、刊行物(タネンバーム(Ta
nenbaum)のModern Operating
Systems(1982)p.41〜43;ヘイズ
(Heyes)のComputer Architec
ture and Organization(199
8)P.540;スティーブンのUNIX Netwo
rk Programming(1990)p.137
〜152)に記載されている。
へのアクセスを直列するために使われる、セマフォとし
て知れてた公知の直列化(serializatio
n)機構が存在する。セマフォとは、ゼロと所定の正の
数nの間で可変な整数であり、nは資源の同時使用を許
可された要求元(requester)の数である。2
進セマフォの場合、n=1は単に1の要求元のみが1度
に資源を使用できる。最初セマフォは、nとセットされ
る。資源へのアクセスを確保するために、要求元(例え
ばプロセス又はスレッドのような作業単位)は、セマフ
ォの現在値をテストする。一方現在値ゼロより大きい場
合、現在値を1ディクリメントして、要求元は中断され
(即ち、スリープ(sleep)し)、セマフォのウエ
イター(waiter)として待ち行列(queue)
に入る。資源を解放するために、要求元はセマフォ値を
1インクリメントする。その上、セマフォの待ち行列に
幾つかウエイターが存在する場合、ウエイターの1つに
通知され、最初に行ったようにセマフォをテストして、
そのウエイターは再び資源を確保を試みる。セマフォ
(Semaphores)は最初ジャクストラ(Dij
kstra)に提案され、刊行物(タネンバーム(Ta
nenbaum)のModern Operating
Systems(1982)p.41〜43;ヘイズ
(Heyes)のComputer Architec
ture and Organization(199
8)P.540;スティーブンのUNIX Netwo
rk Programming(1990)p.137
〜152)に記載されている。
【0003】計数セマフォ(counting sem
aphores:n>1)と2進セマフォ(binar
y semaphores:n=1)の2つの主要なタ
イプのセマフォが存在する。本明細書では、多くのセマ
フォ実装に固有の問題を説明してから、本発明の高パフ
ォーマンスのセマフォ実装を説明する。本発明は、2進
セマフォに限定されないが、その説明は、始めは2進セ
マフォによりなされる。
aphores:n>1)と2進セマフォ(binar
y semaphores:n=1)の2つの主要なタ
イプのセマフォが存在する。本明細書では、多くのセマ
フォ実装に固有の問題を説明してから、本発明の高パフ
ォーマンスのセマフォ実装を説明する。本発明は、2進
セマフォに限定されないが、その説明は、始めは2進セ
マフォによりなされる。
【0004】図1は、セマフォ・セットのC言語例であ
る。Cプログラムがsemgetファンクションを呼ぶ
とセマフォ・セットは初めに生成される。(ここで、C
ソース言語での記述は、説明め便宜のためである。実際
ステップを実行するコードは、もちろんソース・コード
をコンパイルして生成されたオブジェクト・コードであ
る。)呼出し元は、幾つのセマフォ120がセマフォ・
セット115にあるか定義する。セマフォ・セットが生
成されるその時、1つのsemid(セマフォid)が
呼出し元に戻される。このsemidは、semop関
数の後続の呼出し(call)の各々の際に使われる。
オペレーティング・システムは、そのセマフォ・セットを
テーブル105内に記録し、そのテーブルには各エント
リ110と関連するセマフォ・セット115が記録され
る。
る。Cプログラムがsemgetファンクションを呼ぶ
とセマフォ・セットは初めに生成される。(ここで、C
ソース言語での記述は、説明め便宜のためである。実際
ステップを実行するコードは、もちろんソース・コード
をコンパイルして生成されたオブジェクト・コードであ
る。)呼出し元は、幾つのセマフォ120がセマフォ・
セット115にあるか定義する。セマフォ・セットが生
成されるその時、1つのsemid(セマフォid)が
呼出し元に戻される。このsemidは、semop関
数の後続の呼出し(call)の各々の際に使われる。
オペレーティング・システムは、そのセマフォ・セットを
テーブル105内に記録し、そのテーブルには各エント
リ110と関連するセマフォ・セット115が記録され
る。
【0005】図2は、セマフォ処理が通常どのように機
能するか一般的記述を与える。図は、プロセス1(20
5)とプロセス2(210)が同じセマフォを求めて競
争することを示す。一般的な2進セマフォの動作は、セ
マフォ値が1に初期化される(利用可能)。アプリケー
ションがセマフォを獲得したい時、semop(−1)
を実行してセマフォ値をディクリメントとする。セマフ
ォの主要なルールは、セマフォ値が負になることは許さ
れないことである。従って、セマフォ値をディクリメン
トして0にするsemopの最初の呼出し元は、セマフ
ォを所有する。セマフォ値をディクリメントする後続の
要求(request)は、呼出し元を中断させること
になる。
能するか一般的記述を与える。図は、プロセス1(20
5)とプロセス2(210)が同じセマフォを求めて競
争することを示す。一般的な2進セマフォの動作は、セ
マフォ値が1に初期化される(利用可能)。アプリケー
ションがセマフォを獲得したい時、semop(−1)
を実行してセマフォ値をディクリメントとする。セマフ
ォの主要なルールは、セマフォ値が負になることは許さ
れないことである。従って、セマフォ値をディクリメン
トして0にするsemopの最初の呼出し元は、セマフ
ォを所有する。セマフォ値をディクリメントする後続の
要求(request)は、呼出し元を中断させること
になる。
【0006】プロセス1(205)は、semop(−
1)を呼ぶ(ステップ220)。これは、セマフォ処理
のためにカーネル215に入る。カーネルは、セマフォ
の状態を見て、状態が現在1の値であることを知る。カ
ーネルはセマフォ値をディクリメントして、値を1から
0に変更し、結果的にプロセス1へのアクセスを認める
(ステップ222)。その後カーネルは、プロセス1に
戻る(ステップ224)。プロセス1は今は、セマフォ
に保護されたどんな重要な資源でもアクセス可能である
(ステップ226)。この資源は、メモリ、DASD上
のファイル、又は、多重プロセスにおいてコンカレント
に実行できないコードのまさにクリティカル・セクショ
ンである。
1)を呼ぶ(ステップ220)。これは、セマフォ処理
のためにカーネル215に入る。カーネルは、セマフォ
の状態を見て、状態が現在1の値であることを知る。カ
ーネルはセマフォ値をディクリメントして、値を1から
0に変更し、結果的にプロセス1へのアクセスを認める
(ステップ222)。その後カーネルは、プロセス1に
戻る(ステップ224)。プロセス1は今は、セマフォ
に保護されたどんな重要な資源でもアクセス可能である
(ステップ226)。この資源は、メモリ、DASD上
のファイル、又は、多重プロセスにおいてコンカレント
に実行できないコードのまさにクリティカル・セクショ
ンである。
【0007】プロセス1はセマフォを所有する一方、プ
ロセス2(210)も同じセマフォに対してsemop
(−1)を要求する。カーネルは、その−1を実行でき
ない。なぜならその値は現在0であり、負にできないか
らである。従ってカーネルは、呼出し元(プロセス2)
を中断する(ステップ230)。
ロセス2(210)も同じセマフォに対してsemop
(−1)を要求する。カーネルは、その−1を実行でき
ない。なぜならその値は現在0であり、負にできないか
らである。従ってカーネルは、呼出し元(プロセス2)
を中断する(ステップ230)。
【0008】最終的にプロセス1は重要資源のアクセス
を終了し、semop(+1)を実行する(ステップ2
32)。カーネルはセマフォ値を0から1に変更して、
中止しているプロセス2を再開する(ステップ23
4)。次にプロセス2のために動作しているカーネル
は、ステップ値を0から1に変更し(ステップ23
6)、プロセス2にセマフォの所有権を認める。その後
プロセス2は重要な資源にアクセスできる(ステップ2
40)。最初のウエイターに通知した後、制御は呼出し
元に戻る(ステップ238)。プロセス2は資源にアク
セスすることを実行する時に、Semop(−1)を出
してセマフォを解放する(ステップ242)。セマフォ
を求めるウエイターは存在しないから、制御は呼出し元
に戻る(ステップ244)。
を終了し、semop(+1)を実行する(ステップ2
32)。カーネルはセマフォ値を0から1に変更して、
中止しているプロセス2を再開する(ステップ23
4)。次にプロセス2のために動作しているカーネル
は、ステップ値を0から1に変更し(ステップ23
6)、プロセス2にセマフォの所有権を認める。その後
プロセス2は重要な資源にアクセスできる(ステップ2
40)。最初のウエイターに通知した後、制御は呼出し
元に戻る(ステップ238)。プロセス2は資源にアク
セスすることを実行する時に、Semop(−1)を出
してセマフォを解放する(ステップ242)。セマフォ
を求めるウエイターは存在しないから、制御は呼出し元
に戻る(ステップ244)。
【0009】これらは、セマフォ処理がどのように動く
かの論理的説明である。対称マルチプロセッサ(SM
P)環境において動作する時は異なる中央処理ユニット
(CPUs)上で動作するプロセスは、コンカレントに
セマフォを獲得又は解放することを試みることが出来
る。図3は、従来のセマフォ実装に関して生じ得る複雑
さを示す。
かの論理的説明である。対称マルチプロセッサ(SM
P)環境において動作する時は異なる中央処理ユニット
(CPUs)上で動作するプロセスは、コンカレントに
セマフォを獲得又は解放することを試みることが出来
る。図3は、従来のセマフォ実装に関して生じ得る複雑
さを示す。
【0010】カーネルのセマフォ・ロジックがアトミッ
クにセマフォ値と更新し、待ち行列を維持するために、
カーネルがロック(lock)又はmutex(mutual
exclusion lock)のある形式を獲得することは必要な
ことであり、それは特定のプラットフォームにとってユ
ニークなものではない。カーネルがこのロックを所有す
る時、semopの他の呼出し元は、中断してこのロッ
クを待つ。このロックは、セマフォの概念と非常に類似
する。
クにセマフォ値と更新し、待ち行列を維持するために、
カーネルがロック(lock)又はmutex(mutual
exclusion lock)のある形式を獲得することは必要な
ことであり、それは特定のプラットフォームにとってユ
ニークなものではない。カーネルがこのロックを所有す
る時、semopの他の呼出し元は、中断してこのロッ
クを待つ。このロックは、セマフォの概念と非常に類似
する。
【0011】図3において、擬似コードの最初のブロッ
クは、semop(−1)を実行するsemop内の処
理、即ち2進セマフォの確保を表す(ステップ31
0)。第1ステップは、セマフォ構造を直列化するため
にlockを確保する(ステップ312)。このloc
kが利用可能でない場合、システムは、呼出しスレッド
を中断し、プロセスを表す待ち行列の要素362を生成
することにより、スレッドをlock待ち行列360に
置く。このlockが利用可能になった場合、このプロ
セスは再開され、スレッドが処理されている間セマフォ
構造が変化しないことを知りながら、過去のステップ3
12の続行可能である。セマフォが利用可能な場合(ス
テップ314)、セマフォ値を変更することにより、カ
ーネルは、セマフォを呼出し元に与える(ステップ31
6)。その後カーネルは内部lockを解放し(ステッ
プ318)、待ち行列360上の他のプロセスの再開し
得る。その後制御は、呼出し元に戻る(ステップ31
9)。
クは、semop(−1)を実行するsemop内の処
理、即ち2進セマフォの確保を表す(ステップ31
0)。第1ステップは、セマフォ構造を直列化するため
にlockを確保する(ステップ312)。このloc
kが利用可能でない場合、システムは、呼出しスレッド
を中断し、プロセスを表す待ち行列の要素362を生成
することにより、スレッドをlock待ち行列360に
置く。このlockが利用可能になった場合、このプロ
セスは再開され、スレッドが処理されている間セマフォ
構造が変化しないことを知りながら、過去のステップ3
12の続行可能である。セマフォが利用可能な場合(ス
テップ314)、セマフォ値を変更することにより、カ
ーネルは、セマフォを呼出し元に与える(ステップ31
6)。その後カーネルは内部lockを解放し(ステッ
プ318)、待ち行列360上の他のプロセスの再開し
得る。その後制御は、呼出し元に戻る(ステップ31
9)。
【0012】セマフォ値が利用可能でない場合(ステッ
プ320)、カーネルは、内部ロックを解放し(ステッ
プ322)、呼出し元を中断し、セマフォ待ち(wai
ter)要素372をセマフォ待ち行列370に加える
(ステップ324)。このプロセスが再開された時に
(ステップ326)、ステップ312でプロセスが始ま
る(ステップ328)。
プ320)、カーネルは、内部ロックを解放し(ステッ
プ322)、呼出し元を中断し、セマフォ待ち(wai
ter)要素372をセマフォ待ち行列370に加える
(ステップ324)。このプロセスが再開された時に
(ステップ326)、ステップ312でプロセスが始ま
る(ステップ328)。
【0013】プロセスがsemop(-1)を呼び、2
進セマフォを解放する時(ステップ340)、カーネル
は最初に内部lockを確保してセマフォ構造へのアク
セスを直列化する(ステップ342)。このlockが
利用可能でない場合、システムは呼出しスレッドを中断
し、プロセスを表す行列要素362を生成することによ
りlock待ち行列360上にスレッドを置く。このl
ockが利用可能になった時に、このプロセスは再開さ
れて、プロセスが処理されている間セマフォ構造は変化
しないことを知りながら、過去のステップ342を続行
可能である。次にカーネルは、1つインクリメントする
ことによりセマフォ値を変更する(ステップ344)。
セマフォ待ち行列370にウエイター(waiter)
が存在する場合、第1の要素372は除かれ、それが示
すプロセスを再開する(ステップ346)。次にカーネ
ルは内部lockを解放して(ステップ348)、待ち
行列360に存在する他のプロセスを再開する。制御
は、呼出し元に戻る(ステップ350)。
進セマフォを解放する時(ステップ340)、カーネル
は最初に内部lockを確保してセマフォ構造へのアク
セスを直列化する(ステップ342)。このlockが
利用可能でない場合、システムは呼出しスレッドを中断
し、プロセスを表す行列要素362を生成することによ
りlock待ち行列360上にスレッドを置く。このl
ockが利用可能になった時に、このプロセスは再開さ
れて、プロセスが処理されている間セマフォ構造は変化
しないことを知りながら、過去のステップ342を続行
可能である。次にカーネルは、1つインクリメントする
ことによりセマフォ値を変更する(ステップ344)。
セマフォ待ち行列370にウエイター(waiter)
が存在する場合、第1の要素372は除かれ、それが示
すプロセスを再開する(ステップ346)。次にカーネ
ルは内部lockを解放して(ステップ348)、待ち
行列360に存在する他のプロセスを再開する。制御
は、呼出し元に戻る(ステップ350)。
【0014】今異常な例を考える。もし500のプロセ
スが、コンカレントに1つのセマフォを要求する。1つ
のプロセスが、うまく内部lockを獲得し、499の
プロセスは中断し内部lock待ち行列360に加えら
れる。次に第1のプロセスが内部lockを解放して、
一つ一つ各プロセスがlockを獲得し、単にセマフォ
が利用不可能であることを発見する(ステップ320に
おいて)、そして、各プロセスは第2の時間中断され
て、この時間の間セマフォ待ち行列370上存在する。
今499プロセスの中間において、第1プロセスがまさ
にセマフォを解放しようとしている。セマフォを解放す
ることは、同じ内部lockも要求するから(ステップ
342において)、このプロセスは内部lockの待ち
行列の最後に置かれる。このことは、単に各プロセスを
内部lock待ち行列360からセマフォ待ち行列37
0への移動させることを保証する。
スが、コンカレントに1つのセマフォを要求する。1つ
のプロセスが、うまく内部lockを獲得し、499の
プロセスは中断し内部lock待ち行列360に加えら
れる。次に第1のプロセスが内部lockを解放して、
一つ一つ各プロセスがlockを獲得し、単にセマフォ
が利用不可能であることを発見する(ステップ320に
おいて)、そして、各プロセスは第2の時間中断され
て、この時間の間セマフォ待ち行列370上存在する。
今499プロセスの中間において、第1プロセスがまさ
にセマフォを解放しようとしている。セマフォを解放す
ることは、同じ内部lockも要求するから(ステップ
342において)、このプロセスは内部lockの待ち
行列の最後に置かれる。このことは、単に各プロセスを
内部lock待ち行列360からセマフォ待ち行列37
0への移動させることを保証する。
【0015】これを類似形態に適用すると、見世物(s
how)の切符を買うために待っている人の列を想像で
きる。各人が列の先頭に至ると、彼らは切符がないと言
われる。しかし彼ら、誰かがキャンセルするまで列上を
待つことができる。切符をキャンセルしたい人も来が、
しかし、切符を買いたい全ての人のために、同じ列で待
たなければならない。今これを繰返すと、多くの意味の
ない待ちをしなければならない。コンピュータ・システ
ムにおいて、これが悪いパフォーマンスと制限されたキ
ャパシティーとして現れる。
how)の切符を買うために待っている人の列を想像で
きる。各人が列の先頭に至ると、彼らは切符がないと言
われる。しかし彼ら、誰かがキャンセルするまで列上を
待つことができる。切符をキャンセルしたい人も来が、
しかし、切符を買いたい全ての人のために、同じ列で待
たなければならない。今これを繰返すと、多くの意味の
ない待ちをしなければならない。コンピュータ・システ
ムにおいて、これが悪いパフォーマンスと制限されたキ
ャパシティーとして現れる。
【0016】
【発明が解決しようとする課題】本発明は、アトミック
演算を使って実装された情報処理システム内の共有資源
へアクセスするのを制御するためのセマフォ操作の方法
及び装置を与える。
演算を使って実装された情報処理システム内の共有資源
へアクセスするのを制御するためのセマフォ操作の方法
及び装置を与える。
【0017】
【課題を解決するための手段】アトミック演算は、オペ
ランドを比較値で比較し、オペランドが比較値と等しい
場合、比較されたオペランドと3つまでの追加のオペラ
ンドを置換値で置換える。本発明によると、セマフォは
1つの値を含む第1セマフォ・フィールドと、セマフォ
の待ち行列へのポインターを含む第2セマフォ・フィー
ルドを有する。待ち行列は、ゼロ又はそれ以上のエント
リを有し、エントリはセマフォのウエイターに対応し、
各エントリは次のエントリを差すポインターを有する。
そのセマフォを実装するために、第1セマフォ・フィー
ルドの先の値は、比較値として蓄えられる。指定された
操作に従って、インクリメントされたシーケンス番号を
含む第1の置換値が、第1オペランドとして、第1セマ
フォ・フィールドのために生成される。待ち行列が変更
されている場合、第2セマフォ・フィールドのための第
2置換値と待ち行列エントリの1つのための第3置換値
と、第2及び第3オペランドとして生成される。第1セ
マフォ・フィールドの現在値が、後で比較値と比較され
て、その現在値がその比較値と一致するかを知る。一致
する場合、アトミックに比較ステップによって、第1オ
ペランドを第1置換値で置換する。待ち行列が変更され
ている場合、第2及び第3オペランドの一方又は両方を
対応する置換値で置換する。第1セマフォ・フィールド
の現在値が比較値を一致しない場合、比較値として、セ
マフォ・フィールドの新しく保存された値を使ってセマ
フォ操作が再試行される。
ランドを比較値で比較し、オペランドが比較値と等しい
場合、比較されたオペランドと3つまでの追加のオペラ
ンドを置換値で置換える。本発明によると、セマフォは
1つの値を含む第1セマフォ・フィールドと、セマフォ
の待ち行列へのポインターを含む第2セマフォ・フィー
ルドを有する。待ち行列は、ゼロ又はそれ以上のエント
リを有し、エントリはセマフォのウエイターに対応し、
各エントリは次のエントリを差すポインターを有する。
そのセマフォを実装するために、第1セマフォ・フィー
ルドの先の値は、比較値として蓄えられる。指定された
操作に従って、インクリメントされたシーケンス番号を
含む第1の置換値が、第1オペランドとして、第1セマ
フォ・フィールドのために生成される。待ち行列が変更
されている場合、第2セマフォ・フィールドのための第
2置換値と待ち行列エントリの1つのための第3置換値
と、第2及び第3オペランドとして生成される。第1セ
マフォ・フィールドの現在値が、後で比較値と比較され
て、その現在値がその比較値と一致するかを知る。一致
する場合、アトミックに比較ステップによって、第1オ
ペランドを第1置換値で置換する。待ち行列が変更され
ている場合、第2及び第3オペランドの一方又は両方を
対応する置換値で置換する。第1セマフォ・フィールド
の現在値が比較値を一致しない場合、比較値として、セ
マフォ・フィールドの新しく保存された値を使ってセマ
フォ操作が再試行される。
【0018】好ましくは第1セマフォ・フィールドは、
最後のプロセスを特定するプロセスID(PID)も含
み、セマフォと、セマフォが更新されるごとにインクリ
メントされるシーケンス番号とを更新する。本発明は、
特定のプラットフォーム又は2進セマフォに限定される
ものではないが、IBM システム/390(S/39
0)のハードウエア・プラットフォーム上に実装された
本発明の典型的な実施例は、通常よく使われているタイ
プのセマフォ動作、2進セマフォの直列化のための、新
しいS/390のハードウエア命令 Perform L
ocked Operation(PLO)を使用す
る。
最後のプロセスを特定するプロセスID(PID)も含
み、セマフォと、セマフォが更新されるごとにインクリ
メントされるシーケンス番号とを更新する。本発明は、
特定のプラットフォーム又は2進セマフォに限定される
ものではないが、IBM システム/390(S/39
0)のハードウエア・プラットフォーム上に実装された
本発明の典型的な実施例は、通常よく使われているタイ
プのセマフォ動作、2進セマフォの直列化のための、新
しいS/390のハードウエア命令 Perform L
ocked Operation(PLO)を使用す
る。
【0019】3つのまでの他のフィールドを置換すると
ともに比較コピーがフィールドから確保されてから、フ
ィールドが変更されてない場合 、PLO命令のcom
pare and swap 形式は、フィールドを置換
することを許容する。2進セマフォへに対する実装に制
限することにより、一般には本発明は、2進セマフォに
限定されないが、セマフォ変化の際に変更される必要な
フィールドは、PLO命令で許される最大4つに制限で
きる。PLO命令を用いると、セマフォ値とセマフォ待
ち行列の更新を、アトミック命令に関して直列化でき
る。2進セマフォの規則(rule)は、次の通りであ
る。 1.semop()上のセマフォ操作(semapho
re operations)の数は、1である。 2.セマフォ値が0又は−1のとき、そのsemo
p()値は+1でなければならない。そして0又は1の
セマフォ値を持つ。 3.SEM_UNDOは、semop()上では許容さ
れない。 4.semctl()setval又はsetall値
は、setallが実行された時に限定されて、0又は
+1のみとなり得る。それは、1から0、0から0と設
定できず、単に0から1の設定が可能である。 この拡張に対する規則違反は、要求された操作を失敗さ
せる。これまで既に観察されてきた大多数のセマフォの
用法は、これらの規則に従っている。
ともに比較コピーがフィールドから確保されてから、フ
ィールドが変更されてない場合 、PLO命令のcom
pare and swap 形式は、フィールドを置換
することを許容する。2進セマフォへに対する実装に制
限することにより、一般には本発明は、2進セマフォに
限定されないが、セマフォ変化の際に変更される必要な
フィールドは、PLO命令で許される最大4つに制限で
きる。PLO命令を用いると、セマフォ値とセマフォ待
ち行列の更新を、アトミック命令に関して直列化でき
る。2進セマフォの規則(rule)は、次の通りであ
る。 1.semop()上のセマフォ操作(semapho
re operations)の数は、1である。 2.セマフォ値が0又は−1のとき、そのsemo
p()値は+1でなければならない。そして0又は1の
セマフォ値を持つ。 3.SEM_UNDOは、semop()上では許容さ
れない。 4.semctl()setval又はsetall値
は、setallが実行された時に限定されて、0又は
+1のみとなり得る。それは、1から0、0から0と設
定できず、単に0から1の設定が可能である。 この拡張に対する規則違反は、要求された操作を失敗さ
せる。これまで既に観察されてきた大多数のセマフォの
用法は、これらの規則に従っている。
【0020】各セマフォ値又はセマフォ待ち行列の変化
に基づくてインクリメントされ、PLO compar
e and swap のターゲットの部分であるシーケ
ンス番号の使用は、変化のセットアップと実際の変化と
の間で、セマフォに行われるどんな変化の検出も可能に
する。変化が生じなかった場合更新が起こる。変化が現
実に起こった場合更新がされず、セットアップが再び実
行される。
に基づくてインクリメントされ、PLO compar
e and swap のターゲットの部分であるシーケ
ンス番号の使用は、変化のセットアップと実際の変化と
の間で、セマフォに行われるどんな変化の検出も可能に
する。変化が生じなかった場合更新が起こる。変化が現
実に起こった場合更新がされず、セットアップが再び実
行される。
【0021】本発明の操作の特別な例として、1つの作
業(work)単位(例えば1つのスレッド)が2進セ
マフォを要求する。スレッドは、compare an
d swap のエリアのコピーを手に入れる。そのエリ
アは、シーケンス番号とセマフォ値を含む。その後スレ
ッドは、セマフォが保持されているかを決定する。保持
されている場合、スレッドは待ち行列を見る。待ち行列
上にウエイターがない場合、スレッドは、COMPAR
E AND SWAPパラメータをセットアップして、シ
ーケンス番号をインクリメントし、待ち行列の先頭と最
後尾のポインターがこのスレッドを差す。そしてそのC
OMPARE AND SWAP命令が実行される。その
命令が成功した場合、シーケンス番号が更新され、待ち
行列ポインターはスレッドを差す。その後このスレッド
は中断する。COMPARE AND SWAP命令が成
功でない場合、スレッドは戻り、プロシジャーを再開す
る。可能性として、セマフォが解放されまた待ち行列が
更新される。セマフォが今利用可能である場合、スレッ
ドをセットアップして、セマフォ値を変更し、シーケン
ス番号をインクリメントする。変更されたのが待ち行列
の場合、スレッドをセットアップして、自分自身を待ち
行列の最後に加える。どちらのケースにおいても、CO
MPARE AND SWAP命令はその時実行されて、
成功しない場合はスレッドが戻り、再び試行される。
業(work)単位(例えば1つのスレッド)が2進セ
マフォを要求する。スレッドは、compare an
d swap のエリアのコピーを手に入れる。そのエリ
アは、シーケンス番号とセマフォ値を含む。その後スレ
ッドは、セマフォが保持されているかを決定する。保持
されている場合、スレッドは待ち行列を見る。待ち行列
上にウエイターがない場合、スレッドは、COMPAR
E AND SWAPパラメータをセットアップして、シ
ーケンス番号をインクリメントし、待ち行列の先頭と最
後尾のポインターがこのスレッドを差す。そしてそのC
OMPARE AND SWAP命令が実行される。その
命令が成功した場合、シーケンス番号が更新され、待ち
行列ポインターはスレッドを差す。その後このスレッド
は中断する。COMPARE AND SWAP命令が成
功でない場合、スレッドは戻り、プロシジャーを再開す
る。可能性として、セマフォが解放されまた待ち行列が
更新される。セマフォが今利用可能である場合、スレッ
ドをセットアップして、セマフォ値を変更し、シーケン
ス番号をインクリメントする。変更されたのが待ち行列
の場合、スレッドをセットアップして、自分自身を待ち
行列の最後に加える。どちらのケースにおいても、CO
MPARE AND SWAP命令はその時実行されて、
成功しない場合はスレッドが戻り、再び試行される。
【0022】ここに、同様に PLO COMPARE
AND SWAP命令と同じセマフォの上部からのフロ
ーがある。 1.1つの作業単位(例えばスレッド)は、semop
要求(request)を出して1つのセマフォ(se
mop−1)を獲得する。 2.カーネルは、compare and swapデー
タ(セマフォを更新するセマフォ値、シーケンス番号、
及び、最後のプロセスのプロセスID)を保存する。セ
マフォが利用不可能な場合(semval 0)、カー
ネルをセットアップして、作業単位を待ち行列上に起
き、シーケンス番号をインクリメントする。 3.カーネルは、PLO compare and sw
apを用いて、命令をストアーして(3つまでの追加の
フィールドをストアーできる)、作業単位をセマフォ待
ち行列上に置き、シーケンス番号を更新する。comp
are and swapデータが変化している場合は、
カーネルを前のswapに戻す。 4.その作業は中断する(即ち待つ)。 5.その作業単位は、最後に通知される(起動の準備を
される)。 6.カーネルは、compare and swapデー
タ(セマフォを更新するセマフォ値、シーケンス番号、
及び、最後のプロセスのプロセスID)を保存する。セ
マフォが利用可能な場合(semval 1であり、待
ち行列が空即ちこのスレッドが通知される)、カーネル
を設定して、新しいセマフォ値(semval 0)を
セットし、シーケンス番号をインクリメントする。 7.カーネルは、PLO compare and sw
ap命令を用いてその作業単位をセマフォ待ち行列から
除去し、新しいセマフォ値をセットし、シーケンス番号
を更新する。compare and swapデータに
変化がない場合、更新は完了する。compare a
nd swapデータに変化がある場合、カーネルは前
のステップに戻る。 8.カーネルは、呼出し元に退出する。
AND SWAP命令と同じセマフォの上部からのフロ
ーがある。 1.1つの作業単位(例えばスレッド)は、semop
要求(request)を出して1つのセマフォ(se
mop−1)を獲得する。 2.カーネルは、compare and swapデー
タ(セマフォを更新するセマフォ値、シーケンス番号、
及び、最後のプロセスのプロセスID)を保存する。セ
マフォが利用不可能な場合(semval 0)、カー
ネルをセットアップして、作業単位を待ち行列上に起
き、シーケンス番号をインクリメントする。 3.カーネルは、PLO compare and sw
apを用いて、命令をストアーして(3つまでの追加の
フィールドをストアーできる)、作業単位をセマフォ待
ち行列上に置き、シーケンス番号を更新する。comp
are and swapデータが変化している場合は、
カーネルを前のswapに戻す。 4.その作業は中断する(即ち待つ)。 5.その作業単位は、最後に通知される(起動の準備を
される)。 6.カーネルは、compare and swapデー
タ(セマフォを更新するセマフォ値、シーケンス番号、
及び、最後のプロセスのプロセスID)を保存する。セ
マフォが利用可能な場合(semval 1であり、待
ち行列が空即ちこのスレッドが通知される)、カーネル
を設定して、新しいセマフォ値(semval 0)を
セットし、シーケンス番号をインクリメントする。 7.カーネルは、PLO compare and sw
ap命令を用いてその作業単位をセマフォ待ち行列から
除去し、新しいセマフォ値をセットし、シーケンス番号
を更新する。compare and swapデータに
変化がない場合、更新は完了する。compare a
nd swapデータに変化がある場合、カーネルは前
のステップに戻る。 8.カーネルは、呼出し元に退出する。
【0023】同様に、本発明の解放フローは、次のよう
に与えられる。 1.作業単位は、1つのsemop要求を出し、1つの
セマフォを解放する(semop+1)。 2.カーネルは、compare and swapデー
タ(セマフォを更新するセマフォ値、シーケンス番号、
及び、最後のプロセスのプロセスID)を保存する。カ
ーネルをセットアップして、新しいセマフォ値(sem
val 1)をセットし、シーケンス番号をインクリメ
ントする。待ち行列が空でない場合、カーネルは除去さ
れる第1のウエイターをセットアップもする。 3.カーネルはPLO compare and swa
pを用い、命令をストアして、新しいセマフォをセット
し、シーケンス番号を更新し、待ち行列が空でない場合
に、第1のウエイターを除去する。compare and swapデ
ータが変化していない場合更新は完了する。compare an
d swapデータが変化している場合、カーネルは前のステ
ップに戻る。 4.カーネルは、待ち行列上の最初の作業単位にポスト
する。 5.カーネルは、呼出し元に退出する。 この例から解るように、本発明に関して、可能な3つの
代わりに、セマフォが利用不可能な場合に1つのみが中
断する。セマフォの解放は、1つのロックを待たない。
典型的な実装において、古い方法を用いて、セマフォを
獲得する命令の数は、本発明の約400命令に対して、
最悪のケースで3,0000のオーダーである。
に与えられる。 1.作業単位は、1つのsemop要求を出し、1つの
セマフォを解放する(semop+1)。 2.カーネルは、compare and swapデー
タ(セマフォを更新するセマフォ値、シーケンス番号、
及び、最後のプロセスのプロセスID)を保存する。カ
ーネルをセットアップして、新しいセマフォ値(sem
val 1)をセットし、シーケンス番号をインクリメ
ントする。待ち行列が空でない場合、カーネルは除去さ
れる第1のウエイターをセットアップもする。 3.カーネルはPLO compare and swa
pを用い、命令をストアして、新しいセマフォをセット
し、シーケンス番号を更新し、待ち行列が空でない場合
に、第1のウエイターを除去する。compare and swapデ
ータが変化していない場合更新は完了する。compare an
d swapデータが変化している場合、カーネルは前のステ
ップに戻る。 4.カーネルは、待ち行列上の最初の作業単位にポスト
する。 5.カーネルは、呼出し元に退出する。 この例から解るように、本発明に関して、可能な3つの
代わりに、セマフォが利用不可能な場合に1つのみが中
断する。セマフォの解放は、1つのロックを待たない。
典型的な実装において、古い方法を用いて、セマフォを
獲得する命令の数は、本発明の約400命令に対して、
最悪のケースで3,0000のオーダーである。
【0024】
【発明の実施の形態】図4〜図24は、本発明を表す。
本発明の第1の結果は、追加のロックなしにセマフォを
準備することである。
本発明の第1の結果は、追加のロックなしにセマフォを
準備することである。
【0025】図4は、セマフォ・セット115(図1)
内の1つのセマフォ120の構造を示す。セマフォ41
5の見なされるこの構造の部分は、プロセスID(PI
D)425、シーケンス番号(SEQ)430、及びセ
マフォ値(VAL)435で構成されている。典型的な
実施例において、セマフォ・フィールド415は、4バ
イト(32bit)PID425、2バイト・シーケン
ス番号430、及び2バイト・セマフォ値435で構成
されたダブルワード(64bit)・フィールドであ
る。セマフォ415とともに、待ち行列アンカー(又は
待ち行列ヘッダー)420が存在する。待ち行列アンカ
ー420は、セマフォを待つスレッドを記憶するために
用いられる。待ち行列370(図3)は、単一スレッド
化され(single−threaded) 、ダブル
・ヘッド化され(double−headed)た行列
として管理される。これは、ポインター440が待ち行
列370の先頭を差し、ポインター445が待ち行列の
最後尾(最後のエントリ372)を差すことを要求す
る。典型的な実施例において、待ち行列ヘッダー420
は、4バイト・ヘッダー・ポインター440及び4バイト
・テイル・ポインター460を含むダブル・ワード・フィ
ールドである。
内の1つのセマフォ120の構造を示す。セマフォ41
5の見なされるこの構造の部分は、プロセスID(PI
D)425、シーケンス番号(SEQ)430、及びセ
マフォ値(VAL)435で構成されている。典型的な
実施例において、セマフォ・フィールド415は、4バ
イト(32bit)PID425、2バイト・シーケン
ス番号430、及び2バイト・セマフォ値435で構成
されたダブルワード(64bit)・フィールドであ
る。セマフォ415とともに、待ち行列アンカー(又は
待ち行列ヘッダー)420が存在する。待ち行列アンカ
ー420は、セマフォを待つスレッドを記憶するために
用いられる。待ち行列370(図3)は、単一スレッド
化され(single−threaded) 、ダブル
・ヘッド化され(double−headed)た行列
として管理される。これは、ポインター440が待ち行
列370の先頭を差し、ポインター445が待ち行列の
最後尾(最後のエントリ372)を差すことを要求す
る。典型的な実施例において、待ち行列ヘッダー420
は、4バイト・ヘッダー・ポインター440及び4バイト
・テイル・ポインター460を含むダブル・ワード・フィ
ールドである。
【0026】本明細書において、1つの作業(wor
k)単位は、スレッドと呼ばれる(1つのプロセスには
1以上にスレッドがあるが、これがデザインに影響を及
ぶすものではない。)。スレッドは、スレッド制御ブロ
ック450で用いてオペレーティング・システム(O
S)のカーネル215(図2)により追跡される。スレ
ッド制御ブロック450の部分470は、セマフォで包
含されスレッドを追跡するために用いられる。このセマ
フォ・エリア470には、待ち行列370に対して使わ
れる、フォワード・ポインター(NEXT)455とセ
マフォ処理で使用されるフラグ・セット460とが存在
する。このエリアの第1のフラグは、スレッド制御ブロ
ックが待ち行列上にある在るか否かを示す。この典型的
実施例では、スレッド制御ブロック部分470は、4バ
イト・フォワード・ポインター455と4バイト・フラ
グ・エリア460により構成されてる。
k)単位は、スレッドと呼ばれる(1つのプロセスには
1以上にスレッドがあるが、これがデザインに影響を及
ぶすものではない。)。スレッドは、スレッド制御ブロ
ック450で用いてオペレーティング・システム(O
S)のカーネル215(図2)により追跡される。スレ
ッド制御ブロック450の部分470は、セマフォで包
含されスレッドを追跡するために用いられる。このセマ
フォ・エリア470には、待ち行列370に対して使わ
れる、フォワード・ポインター(NEXT)455とセ
マフォ処理で使用されるフラグ・セット460とが存在
する。このエリアの第1のフラグは、スレッド制御ブロ
ックが待ち行列上にある在るか否かを示す。この典型的
実施例では、スレッド制御ブロック部分470は、4バ
イト・フォワード・ポインター455と4バイト・フラ
グ・エリア460により構成されてる。
【0027】最初に説明したように、semop(−
1)はセマフォの所有権を獲得するために用い、sem
op(+1)はセマフォの所有権を解放するために用い
られる。semopのためのハイレベルのフローが、図
5〜図8に示される。
1)はセマフォの所有権を獲得するために用い、sem
op(+1)はセマフォの所有権を解放するために用い
られる。semopのためのハイレベルのフローが、図
5〜図8に示される。
【0028】図5は、semopファンクションへのエ
ントリを示す(ステップ502)。最初のsemop処
理の間、semop・ロジックは、セマフォIDのテー
ブル105(図1)内にsemid110を捜して、セ
マフォ・セット115の場所を見つける。次にセマフォ
・ロジックは、semop呼出しを通過したセマフォの
数に基づいて特定のセマフォ120の場所を位置づけ
る。これらは、セマフォ処理の従来のステップであり、
本発明の部分ではない。他の従来ステップについては本
発明ではないためここでは詳細に説明しない。しかし、
このステップは、呼出し元のパラメータの妥当性検査と
ユーザーのセマフォ・セットへのアクセスの許可検査を
行う。次に焦点を与えるのはセマフォの処理である。
ントリを示す(ステップ502)。最初のsemop処
理の間、semop・ロジックは、セマフォIDのテー
ブル105(図1)内にsemid110を捜して、セ
マフォ・セット115の場所を見つける。次にセマフォ
・ロジックは、semop呼出しを通過したセマフォの
数に基づいて特定のセマフォ120の場所を位置づけ
る。これらは、セマフォ処理の従来のステップであり、
本発明の部分ではない。他の従来ステップについては本
発明ではないためここでは詳細に説明しない。しかし、
このステップは、呼出し元のパラメータの妥当性検査と
ユーザーのセマフォ・セットへのアクセスの許可検査を
行う。次に焦点を与えるのはセマフォの処理である。
【0029】セマフォ処理が行う第1の事は、これがo
btain(−1)又はrelease(+1)のどち
らかであるかを決定することである(ステップ50
4)。それが、release(OP=1)の場合、図
7に示しようなsemop処理となる(ステップ50
6)。要求がセマフォ(OP=−1)である場合、セマ
フォを獲得されるまで無限ループに入る(ステップ50
8)。この処理を終了して、セマフォの様々な可能な状
態を扱う。ケース1(ステップ510)で示されたテス
トは、セマフォが利用不可能でないこと(semval
=0)及び(先頭ポインター440により指示されるよ
うに)待ち行列370が空であることを、決定する。こ
のケースにおいて、図10・11に示される処理が行わ
れる。
btain(−1)又はrelease(+1)のどち
らかであるかを決定することである(ステップ50
4)。それが、release(OP=1)の場合、図
7に示しようなsemop処理となる(ステップ50
6)。要求がセマフォ(OP=−1)である場合、セマ
フォを獲得されるまで無限ループに入る(ステップ50
8)。この処理を終了して、セマフォの様々な可能な状
態を扱う。ケース1(ステップ510)で示されたテス
トは、セマフォが利用不可能でないこと(semval
=0)及び(先頭ポインター440により指示されるよ
うに)待ち行列370が空であることを、決定する。こ
のケースにおいて、図10・11に示される処理が行わ
れる。
【0030】ケース2として示される次のテストは、セ
マフォが利用可能でないことを決定する(ステップ51
4)。 semvalが0の場合即ち待ち行列370上
にウエイターいる時は伝統的なケースは利用可能でな
い。しかし、このスレッドは、次にセマフォを獲得する
ために通知されたものではない。利用可能でないセマフ
ォを求めるこの第二の条件は、新しいセマフォ要求が既
に待っているセマフォ要求の前で切られるのを防止す
る。このケースにおいて、その処理は図12・13に示
されるものである(ステップ516)。
マフォが利用可能でないことを決定する(ステップ51
4)。 semvalが0の場合即ち待ち行列370上
にウエイターいる時は伝統的なケースは利用可能でな
い。しかし、このスレッドは、次にセマフォを獲得する
ために通知されたものではない。利用可能でないセマフ
ォを求めるこの第二の条件は、新しいセマフォ要求が既
に待っているセマフォ要求の前で切られるのを防止す
る。このケースにおいて、その処理は図12・13に示
されるものである(ステップ516)。
【0031】これらケースのどちらもできよう出来ない
場合、処理は図6において示されるように続けられる
(ステップ522)。ケース1または2のための処理が
生じている場合、制御は、セマフォ操作(semaph
ore manipulation)の成功をテストす
るステップ524において、図5に戻る。全てがOKの
場合呼出しスレッドは待ち状態に位置する(ステップ5
26)。そのスレッドは、所有スレッドがセマフォを解
放するまで待ち状態に残る。セマフォ操作が成功でない
場合、ループをステップ508に戻る。セマフォ操作の
故障の理由は別のスレッドが競争に勝ってセマフォ状態
を変更したからであり、ステップ510で開始する全て
テストは再度実行される。
場合、処理は図6において示されるように続けられる
(ステップ522)。ケース1または2のための処理が
生じている場合、制御は、セマフォ操作(semaph
ore manipulation)の成功をテストす
るステップ524において、図5に戻る。全てがOKの
場合呼出しスレッドは待ち状態に位置する(ステップ5
26)。そのスレッドは、所有スレッドがセマフォを解
放するまで待ち状態に残る。セマフォ操作が成功でない
場合、ループをステップ508に戻る。セマフォ操作の
故障の理由は別のスレッドが競争に勝ってセマフォ状態
を変更したからであり、ステップ510で開始する全て
テストは再度実行される。
【0032】図6はsemop(−1)を処理しセマフ
ォが現在利用可能なケースをカバーする。待ち行列37
0上にウエイターがなく、またはこのスレッドに通知さ
れてセマフォを獲得できる場合、これはケース3であり
(ステップ530)、その処理は図14・15に示され
るものである(ステップ532)。COMPAREAN
D SWAP操作が成功な場合(ステップ542)、制
御はセマフォを保持するユーザに戻る(ステップ54
4)。COMPARE AND SWAP操作が失敗した
場合、処理を再開してステップ508で図5に戻る(ス
テップ546)。
ォが現在利用可能なケースをカバーする。待ち行列37
0上にウエイターがなく、またはこのスレッドに通知さ
れてセマフォを獲得できる場合、これはケース3であり
(ステップ530)、その処理は図14・15に示され
るものである(ステップ532)。COMPAREAN
D SWAP操作が成功な場合(ステップ542)、制
御はセマフォを保持するユーザに戻る(ステップ54
4)。COMPARE AND SWAP操作が失敗した
場合、処理を再開してステップ508で図5に戻る(ス
テップ546)。
【0033】図5のテスト504がsemop(+1)
を検出すると、制御が図7に流れる(ステップ50
6)。後者の図面を参照すると、セマフォ解放ロジック
はDOFOREVERループで始まる(ステップ55
0)。セマフォを解放する時に考えられる2つのケース
がある。ケース4(ステップ552)は待ち行列370
上にウエイターがない時である。ケース4のためのCO
MPARE AND SWAP操作は、図16・17にお
いて示されるものである(ステップ554)。セマフォ
操作が試みられた後、COMPARE AND SWAP
操作の結果がテストされる(ステップ560)。操作が
成功な場合、制御が呼出し元に戻る(ステップ56
6)。COMPARE AND SWAP操作が成功でな
い場合、制御はステップ550に戻りセマフォの解放の
試みを繰返す(ステップ564)。セマフォ解放を失敗
した第1の理由は、新しいウエイターが待ち行列370
に追加されたからである。
を検出すると、制御が図7に流れる(ステップ50
6)。後者の図面を参照すると、セマフォ解放ロジック
はDOFOREVERループで始まる(ステップ55
0)。セマフォを解放する時に考えられる2つのケース
がある。ケース4(ステップ552)は待ち行列370
上にウエイターがない時である。ケース4のためのCO
MPARE AND SWAP操作は、図16・17にお
いて示されるものである(ステップ554)。セマフォ
操作が試みられた後、COMPARE AND SWAP
操作の結果がテストされる(ステップ560)。操作が
成功な場合、制御が呼出し元に戻る(ステップ56
6)。COMPARE AND SWAP操作が成功でな
い場合、制御はステップ550に戻りセマフォの解放の
試みを繰返す(ステップ564)。セマフォ解放を失敗
した第1の理由は、新しいウエイターが待ち行列370
に追加されたからである。
【0034】ケース5(ステップ556)は、待ち行列
上にウエイターが存在する時である。ケース5のための
COMPARE AND SWAP操作は、図18・19
に示されるものである(ステップ558)。COMPA
RE AND SWAP操作が成功でない場合、制御はス
テップ550に戻りセマフォの解放の試行を繰返す(ス
テップ570)。セマフォ解放を失敗した第1の理由
は、新しいウエイターが待ち行列370に追加されたか
らである。
上にウエイターが存在する時である。ケース5のための
COMPARE AND SWAP操作は、図18・19
に示されるものである(ステップ558)。COMPA
RE AND SWAP操作が成功でない場合、制御はス
テップ550に戻りセマフォの解放の試行を繰返す(ス
テップ570)。セマフォ解放を失敗した第1の理由
は、新しいウエイターが待ち行列370に追加されたか
らである。
【0035】図8は、セマフォが解放された後の処理を
示す。第1ステップは、図7でのセマフォ解放操作にお
いて待ち行列370から除去されたウエイターに通知
(POST)する(即ち回復する)(ステップ57
2)。通知(POST)が成功な場合(ステップ57
4)、制御は呼び手に戻される(ステップ576)。通
知(POST)が失敗した場合、待ち行列370上ウエ
イターが存在するかを知るためにチェックされる(ステ
ップ578)。待ち行列370上にウエイターが存在す
る場合、図20・21に示しCOMPARE AND S
WAP操作が実行され先頭のウエイターを除去する(ス
テップ580)。COMPARE AND SWAP操作
が成功の場合(ステップ582)、以前のように待ち行
列からちょうど除去されたウエイターに通知される(ス
テップ572)。ステップ578で待ち行列370上に
ウエイターが存在しない場合、通知(POST)すべき
ウエイターが存在しないため、制御は呼び手に戻る(ス
テップ576)。通知を失敗した主な理由は、目的のス
レッドが信号を受取とり、もはや待ちの中に存在しない
からである。COMPARE AND SWAP操作がス
テップ582で失敗した場合、制御はステップ578に
おいて多くのウエイターのためのチェックに戻る。
示す。第1ステップは、図7でのセマフォ解放操作にお
いて待ち行列370から除去されたウエイターに通知
(POST)する(即ち回復する)(ステップ57
2)。通知(POST)が成功な場合(ステップ57
4)、制御は呼び手に戻される(ステップ576)。通
知(POST)が失敗した場合、待ち行列370上ウエ
イターが存在するかを知るためにチェックされる(ステ
ップ578)。待ち行列370上にウエイターが存在す
る場合、図20・21に示しCOMPARE AND S
WAP操作が実行され先頭のウエイターを除去する(ス
テップ580)。COMPARE AND SWAP操作
が成功の場合(ステップ582)、以前のように待ち行
列からちょうど除去されたウエイターに通知される(ス
テップ572)。ステップ578で待ち行列370上に
ウエイターが存在しない場合、通知(POST)すべき
ウエイターが存在しないため、制御は呼び手に戻る(ス
テップ576)。通知を失敗した主な理由は、目的のス
レッドが信号を受取とり、もはや待ちの中に存在しない
からである。COMPARE AND SWAP操作がス
テップ582で失敗した場合、制御はステップ578に
おいて多くのウエイターのためのチェックに戻る。
【0036】スレッドが、そのスレッドに終了するよう
に(恐多分終了信号により)通知された時点でセマフォ
待ち行列上にそのスレッド制御ブロックを有している
時、ステップ584で始まり生ずる回復フローを図9は
示す。スレッド制御ブロックは、セマフォ待ち行列から
うまく除去され又はスレッド制御ブロックが待ち行列3
70上にもはやなくなるまで、”do foreve
r” ループに入る(ステップ586)。セマフォは、
ウエイターに通知すために調べる別のプロセスによって
除去され得ることに注意する。これは、待ち行列370
がスキャンされる場所のみである。セマフォシーケンス
番号430がループの初めで保存される(ステップ58
8)。待ち行列370は、その後スキャンされて待ち行
列上のスレッド制御ブロックの位置を見つける(ステッ
プ590)。シーケンシャル番号430は待ち行列のス
キャンの間時間を変更する場合(ステップ592)、ル
ープ再開する(ステップ586)。スキャンされる要素
が回復の中のスレッド制御ブロックのための要素でない
場合(ステップ594)、待ち行列の終わり到達したか
を知るためにチェックされる(ステップ596)。待ち
行列の終りに到達した場合、スレッド制御ブロックは既
に除去され、更なる処理は要求されない(ステップ59
9)。待ち行列がステップ596で終了していない場
合、ループに戻る(ステップ590)。ウエイター要素
はステップ594で見出される場合、図22・23に示
されるCOMPARE AND SWAP操作が実行さ
れ、待ち行列からその要素を除去する(ステップ59
7)。COMPARE AND SWAP操作が失敗した
場合(ステップ598)、コードは再び試行するために
ループに戻る(ステップ586)。COMPARE A
ND SWAP操作が成功した場合、このスレッドは待
ちチェーン上にもはや存在せず、終了を続ける(ステッ
プ599)。
に(恐多分終了信号により)通知された時点でセマフォ
待ち行列上にそのスレッド制御ブロックを有している
時、ステップ584で始まり生ずる回復フローを図9は
示す。スレッド制御ブロックは、セマフォ待ち行列から
うまく除去され又はスレッド制御ブロックが待ち行列3
70上にもはやなくなるまで、”do foreve
r” ループに入る(ステップ586)。セマフォは、
ウエイターに通知すために調べる別のプロセスによって
除去され得ることに注意する。これは、待ち行列370
がスキャンされる場所のみである。セマフォシーケンス
番号430がループの初めで保存される(ステップ58
8)。待ち行列370は、その後スキャンされて待ち行
列上のスレッド制御ブロックの位置を見つける(ステッ
プ590)。シーケンシャル番号430は待ち行列のス
キャンの間時間を変更する場合(ステップ592)、ル
ープ再開する(ステップ586)。スキャンされる要素
が回復の中のスレッド制御ブロックのための要素でない
場合(ステップ594)、待ち行列の終わり到達したか
を知るためにチェックされる(ステップ596)。待ち
行列の終りに到達した場合、スレッド制御ブロックは既
に除去され、更なる処理は要求されない(ステップ59
9)。待ち行列がステップ596で終了していない場
合、ループに戻る(ステップ590)。ウエイター要素
はステップ594で見出される場合、図22・23に示
されるCOMPARE AND SWAP操作が実行さ
れ、待ち行列からその要素を除去する(ステップ59
7)。COMPARE AND SWAP操作が失敗した
場合(ステップ598)、コードは再び試行するために
ループに戻る(ステップ586)。COMPARE A
ND SWAP操作が成功した場合、このスレッドは待
ちチェーン上にもはや存在せず、終了を続ける(ステッ
プ599)。
【0037】図10から図23に示されるcompar
e and swap操作の詳細に入る前に、本発明の好
ましい実施例によって用いられるPerform Lo
cked Operation(PLO)命令の一般的
な理解を与えることは、役に立つ。 PLO命令の使用
は、図4によって説明される。ほとんどのコンピュータ
・システムは、システム・ストレージへのアトミック更
新を実行可能にするハードウエア命令を含む。参照によ
って本明細書に組込まれるIBM刊行物SA22−72
01−02(1994)のEnterprise Sy
stems Architecture/390 Pri
nciples of Operationに記述される
ように、IBM S/390 ハードウエア・プラットフ
ォーム上の先の命令の幾つかは、COMPARE an
d SWAP(CS)、COMPARE Double
and SWAP(CDS)、Test and Set
(TS)である。PLOは、S/390 ハードウエア
・プラットフォーム上の比較的新しいアトミック命令で
ある。上でリストされたアトミック命令は、ストレージ
のシングル・ワード又はダブルワードのアトミック更新
を許容するが、PLO命令は、ストレージ中のバラバラ
(disjoint)の位置の複数フィールドのアトミ
ック更新を許容する。PLO命令は、参照によって本明
細書に組込まれる次の出願中の特許と刊行物に記述され
ている。エス.ジェ.グリンスパンらの”Blockin
g Symbol Control in a Compu
ter System to Serialize Acc
essing a Data Resource by S
timultaneous Processor Req
uests”の1997年5月28日に出願された米国
特許出願第08/864,402号;エス. ジェ. グリ
ンスパンらの”Processor Associat
edBlocking Symbol Controls
for Serializing Accessing
of Data Resources in Compu
ter System”の1997年5月28日に出願
された米国特許出願第08/864,585号;エス.
ジェ. グリンスパンらの”Method of Exec
uting Perform Locked Opera
tion Instructions for Supp
orting Recovery of Data Con
sistency If Lost Due to Pro
cessor Failure,and a Mehto
d of Recovering the Data Co
nsistency After Processor
Failure”の1997年9月5日に出願された米
国特許出願第08/924,890号;IBM Boo
kManager BookSever即ち、htt
p://ppdbooks.pok.ibm.com/
cgi−bin/bookmgr.cmd/BOOKS
/DZ9AR004/7.5.69を介する”ESA/
390 Princples of Operatio
n”7.5.79である。
e and swap操作の詳細に入る前に、本発明の好
ましい実施例によって用いられるPerform Lo
cked Operation(PLO)命令の一般的
な理解を与えることは、役に立つ。 PLO命令の使用
は、図4によって説明される。ほとんどのコンピュータ
・システムは、システム・ストレージへのアトミック更
新を実行可能にするハードウエア命令を含む。参照によ
って本明細書に組込まれるIBM刊行物SA22−72
01−02(1994)のEnterprise Sy
stems Architecture/390 Pri
nciples of Operationに記述される
ように、IBM S/390 ハードウエア・プラットフ
ォーム上の先の命令の幾つかは、COMPARE an
d SWAP(CS)、COMPARE Double
and SWAP(CDS)、Test and Set
(TS)である。PLOは、S/390 ハードウエア
・プラットフォーム上の比較的新しいアトミック命令で
ある。上でリストされたアトミック命令は、ストレージ
のシングル・ワード又はダブルワードのアトミック更新
を許容するが、PLO命令は、ストレージ中のバラバラ
(disjoint)の位置の複数フィールドのアトミ
ック更新を許容する。PLO命令は、参照によって本明
細書に組込まれる次の出願中の特許と刊行物に記述され
ている。エス.ジェ.グリンスパンらの”Blockin
g Symbol Control in a Compu
ter System to Serialize Acc
essing a Data Resource by S
timultaneous Processor Req
uests”の1997年5月28日に出願された米国
特許出願第08/864,402号;エス. ジェ. グリ
ンスパンらの”Processor Associat
edBlocking Symbol Controls
for Serializing Accessing
of Data Resources in Compu
ter System”の1997年5月28日に出願
された米国特許出願第08/864,585号;エス.
ジェ. グリンスパンらの”Method of Exec
uting Perform Locked Opera
tion Instructions for Supp
orting Recovery of Data Con
sistency If Lost Due to Pro
cessor Failure,and a Mehto
d of Recovering the Data Co
nsistency After Processor
Failure”の1997年9月5日に出願された米
国特許出願第08/924,890号;IBM Boo
kManager BookSever即ち、htt
p://ppdbooks.pok.ibm.com/
cgi−bin/bookmgr.cmd/BOOKS
/DZ9AR004/7.5.69を介する”ESA/
390 Princples of Operatio
n”7.5.79である。
【0038】本発明によって用いられるPLO命令によ
って与えられる操作は、1.Compare and s
wapは、追加のストアなしに2倍になる。 これは、
ダブルワード(64bit)・オペランドをダブルワー
ド比較値と比較し、そのオペランドが比較値と等しい場
合、その比較されたオペランドをダブルワード置換値で
置換える。
って与えられる操作は、1.Compare and s
wapは、追加のストアなしに2倍になる。 これは、
ダブルワード(64bit)・オペランドをダブルワー
ド比較値と比較し、そのオペランドが比較値と等しい場
合、その比較されたオペランドをダブルワード置換値で
置換える。
【0039】セマフォが獲得又は解放されていて、待ち
行列370中にウエイターがない場合に、この操作は用
いられる(図14・15と図16・17)。セマフォ待
ち行列370に必要な更新がない場合、変更される唯一
のダブルワードは、セマフォ・フィールド415であ
る。 1.Compare and swapは、2倍になり、
2つの追加のダブルワードをストアする。 これは、ダ
ブルワード(64bit)・オペランドをダブルワード
比較値と比較し、そのオペランドが比較値と等しい場
合、その比較されたオペランドと2つの追加のダブルワ
ード・オペランドを、ダブルワード置換値で置換える。
行列370中にウエイターがない場合に、この操作は用
いられる(図14・15と図16・17)。セマフォ待
ち行列370に必要な更新がない場合、変更される唯一
のダブルワードは、セマフォ・フィールド415であ
る。 1.Compare and swapは、2倍になり、
2つの追加のダブルワードをストアする。 これは、ダ
ブルワード(64bit)・オペランドをダブルワード
比較値と比較し、そのオペランドが比較値と等しい場
合、その比較されたオペランドと2つの追加のダブルワ
ード・オペランドを、ダブルワード置換値で置換える。
【0040】第1のウエイターが追加され又は待ち行列
から除去されている場合に、この操作は用いられる(図
10・11、図18・19、及び、図20・21)。3
つのダブルワード・フィールド即ちセマフォ・フィール
ド415、待ち行列ヘッダー420、及び待ち行列37
0の終端(第1のウエイターが加えられている場合)又
は先頭(第1のウエイターが除去されている場合)に現
在存在するスレッドのスレッド制御ブロック770、が
変更される。 1.Compare and swapは、2倍になり、
3つの追加のダブルワードをストアする。 これは、ダ
ブルワード(64bit)・オペランドをダブルワード
比較値と比較し、そのオペランドが比較値と等しい場
合、その比較されたオペランドと3つの追加のダブルワ
ード・オペランドを、ダブルワード置換値で置換える。
から除去されている場合に、この操作は用いられる(図
10・11、図18・19、及び、図20・21)。3
つのダブルワード・フィールド即ちセマフォ・フィール
ド415、待ち行列ヘッダー420、及び待ち行列37
0の終端(第1のウエイターが加えられている場合)又
は先頭(第1のウエイターが除去されている場合)に現
在存在するスレッドのスレッド制御ブロック770、が
変更される。 1.Compare and swapは、2倍になり、
3つの追加のダブルワードをストアする。 これは、ダ
ブルワード(64bit)・オペランドをダブルワード
比較値と比較し、そのオペランドが比較値と等しい場
合、その比較されたオペランドと3つの追加のダブルワ
ード・オペランドを、ダブルワード置換値で置換える。
【0041】後続のウエイターが追加され又は待ち行列
370から除去されている場合に、この操作は用いられ
る(図12・13、及び、図22・23)。4つのダブ
ルワード・フィールド即ちセマフォ・フィールド41
5、待ち行列ヘッダー420、追加され又は除去された
スレッドのスレッド制御ブロック・フィールド470と
770、及び、待ち行列370中のその直前の先行者が
変更される。
370から除去されている場合に、この操作は用いられ
る(図12・13、及び、図22・23)。4つのダブ
ルワード・フィールド即ちセマフォ・フィールド41
5、待ち行列ヘッダー420、追加され又は除去された
スレッドのスレッド制御ブロック・フィールド470と
770、及び、待ち行列370中のその直前の先行者が
変更される。
【0042】compare and swap操作は、
フィールド415を背景として何時も実行される。CO
MPARE AND SWAP命令が成功する度に、フィ
ールド415内の古い値は、COMPARE AND S
WAPの起動ためにセットアップがスターした時からは
変化はないこを意味する。COMPARE AND SW
AP操作が成功の場合、フィールド415は更新され
る。特に、シーケンス番号430を更新が異議がある。
シーケンス番号430は、いつも更新されるから、2つ
のCOMPARE AND SWAP操作が同じセマフォ
上で衝突する時はいつも、単に一つのCOMPARE
AND SWAP操作のみが完結し、他方がループを戻
りセットアップを再び実行する。
フィールド415を背景として何時も実行される。CO
MPARE AND SWAP命令が成功する度に、フィ
ールド415内の古い値は、COMPARE AND S
WAPの起動ためにセットアップがスターした時からは
変化はないこを意味する。COMPARE AND SW
AP操作が成功の場合、フィールド415は更新され
る。特に、シーケンス番号430を更新が異議がある。
シーケンス番号430は、いつも更新されるから、2つ
のCOMPARE AND SWAP操作が同じセマフォ
上で衝突する時はいつも、単に一つのCOMPARE
AND SWAP操作のみが完結し、他方がループを戻
りセットアップを再び実行する。
【0043】PLO命令のcompare and sw
ap部分に関する第1のセマフォ・フィールド415を
更新することに加え、待ち行列フィールド420も変更
してその命令がセットアップされる。1つのウエイター
は、待ち行列から除去され、又第1のウエイターが追加
され時、待ち行列ヘッド440が更新される。1つのウ
エイターが待ち行列の最後に追加され、即ち第1ウエイ
ターが追加される毎に、テール・ポインター445が更
新される。スレッド制御ブロック450が追加又待ち行
列から除去され毎に、該ブロック450が待ち行列上に
存在していることを示すように、フラグ460を設定す
る。これらのフィールドの全ては、単一のPLO CO
MPARE AND SWAP命令によって変更される。
ap部分に関する第1のセマフォ・フィールド415を
更新することに加え、待ち行列フィールド420も変更
してその命令がセットアップされる。1つのウエイター
は、待ち行列から除去され、又第1のウエイターが追加
され時、待ち行列ヘッド440が更新される。1つのウ
エイターが待ち行列の最後に追加され、即ち第1ウエイ
ターが追加される毎に、テール・ポインター445が更
新される。スレッド制御ブロック450が追加又待ち行
列から除去され毎に、該ブロック450が待ち行列上に
存在していることを示すように、フラグ460を設定す
る。これらのフィールドの全ては、単一のPLO CO
MPARE AND SWAP命令によって変更される。
【0044】図24は、次の説明においてしばしば参照
されるセマフォと待ち行列のフィールド図を示す。比較
値としてセマフォ・フィールドの先の値を保存するため
に、セマフォ・フィールド415は古セマフォ1310
と呼ばれるエリアにコピーされる。古セマフォ1310
は、次に新セマフォ1320にコピーされ、新セマフォ
1320のフィールド内部は、セマフォ・フィールド4
15のための置換値を生成する指定されたセマフォ操作
に従って更新される。待ち行列370がその操作によっ
て変更されている場合、待ち行列ヘッド440とテール
445のための置換値が1130とマークされたエリア
に構築されるが、スレッド制御ブロックの NEXTポ
インターとフラグ・フィールドのための置換値は134
0としてマーク付けされている。PLO命令はその後に
実行された時に、セマフォ・フィールド415の現在値
を古セマフォ1310にストアされた比較値と比較す
る。値が一致する場合他のスレッドがセマフォを変更し
ていないことを示し、アトミックに比較ステップで以っ
てPLO命令は待ち行列420を置換値1330で、ス
レッド制御ブロックのNEXTポインターとフラグ・フ
ィールドを置換値1340で、実際のセマフォ415を
新セマフォ1320からの置換値で、更新する。
されるセマフォと待ち行列のフィールド図を示す。比較
値としてセマフォ・フィールドの先の値を保存するため
に、セマフォ・フィールド415は古セマフォ1310
と呼ばれるエリアにコピーされる。古セマフォ1310
は、次に新セマフォ1320にコピーされ、新セマフォ
1320のフィールド内部は、セマフォ・フィールド4
15のための置換値を生成する指定されたセマフォ操作
に従って更新される。待ち行列370がその操作によっ
て変更されている場合、待ち行列ヘッド440とテール
445のための置換値が1130とマークされたエリア
に構築されるが、スレッド制御ブロックの NEXTポ
インターとフラグ・フィールドのための置換値は134
0としてマーク付けされている。PLO命令はその後に
実行された時に、セマフォ・フィールド415の現在値
を古セマフォ1310にストアされた比較値と比較す
る。値が一致する場合他のスレッドがセマフォを変更し
ていないことを示し、アトミックに比較ステップで以っ
てPLO命令は待ち行列420を置換値1330で、ス
レッド制御ブロックのNEXTポインターとフラグ・フ
ィールドを置換値1340で、実際のセマフォ415を
新セマフォ1320からの置換値で、更新する。
【0045】セマフォが利用可能でなく(semval
=0 435)、(ヘッド・ポインター440によって
指示されるように)待ち行列370が空の時のsemo
p(−1)のための処理を、図10は示す。我々をCO
MPARE AND SWAPのセットアップに導くテス
ト処理の初期で、セマフォ・フィールド415の現在値
が古セマフォ1310にストアされた。新ウエイターの
付加は、セマフォ値435とPID425を変更しな
い。これらCOMPARE AND SWAP操作の全て
に関して、その操作はシーケンス番号430の値をイン
クリメントする。そのように、シーケンス番号が1大き
い場合を除き、新セマフォと呼ばれるエリア1320
は、古セマフォ1310と同じように生成される。待ち
行列370は現在空であるから、新スレッド制御ブロッ
ク450を(エントリ372として)待ち行列370に
付加することを我々が完了した時、ヘッド440とテー
ル445の両者がスレッド制御ブロック450を差すよ
うに設定される。そのようにこのケースにおいて、2つ
の追加のストアを有するPLO compare and
swap doubleは、が完了する。その追加のス
トアは、待ち行列ヘッダー420とスレッド制御ブロッ
ク・フィールド470を目的とする。他のウエイターが
存在しないため、単に待ちフラグ460が、フィールド
470内で変更される。
=0 435)、(ヘッド・ポインター440によって
指示されるように)待ち行列370が空の時のsemo
p(−1)のための処理を、図10は示す。我々をCO
MPARE AND SWAPのセットアップに導くテス
ト処理の初期で、セマフォ・フィールド415の現在値
が古セマフォ1310にストアされた。新ウエイターの
付加は、セマフォ値435とPID425を変更しな
い。これらCOMPARE AND SWAP操作の全て
に関して、その操作はシーケンス番号430の値をイン
クリメントする。そのように、シーケンス番号が1大き
い場合を除き、新セマフォと呼ばれるエリア1320
は、古セマフォ1310と同じように生成される。待ち
行列370は現在空であるから、新スレッド制御ブロッ
ク450を(エントリ372として)待ち行列370に
付加することを我々が完了した時、ヘッド440とテー
ル445の両者がスレッド制御ブロック450を差すよ
うに設定される。そのようにこのケースにおいて、2つ
の追加のストアを有するPLO compare and
swap doubleは、が完了する。その追加のス
トアは、待ち行列ヘッダー420とスレッド制御ブロッ
ク・フィールド470を目的とする。他のウエイターが
存在しないため、単に待ちフラグ460が、フィールド
470内で変更される。
【0046】図11は、COMPARE AND SWA
P操作が成功している場合のセマフォ・フィールドの内
容を示す。そのセマフォ番号は、前より1大きい。待ち
行列ヘッダー440は、呼出しスレッドのスレッド制御
ブロック450を今差している。待ち行列テール445
は同じスレッド制御ブロックを差す。待ちフラグ460
は、スレッド制御ブロック450がセマフォ待ちチェー
ン上に存在することを示すように、設定される。COM
PARE AND SWAP操作が失敗した場合、セマフ
ォ・フィールド415と420は影響されない。別のス
レッドが競争に勝ってセマフォ415を解放するか、又
は競争に勝って自分自身が待ち行列に加わる場合、CO
MPARE AND SWAP操作は失敗する。COMP
AREAND SWAP操作が成功か否かのためのテス
トは、図5のステップ524である。
P操作が成功している場合のセマフォ・フィールドの内
容を示す。そのセマフォ番号は、前より1大きい。待ち
行列ヘッダー440は、呼出しスレッドのスレッド制御
ブロック450を今差している。待ち行列テール445
は同じスレッド制御ブロックを差す。待ちフラグ460
は、スレッド制御ブロック450がセマフォ待ちチェー
ン上に存在することを示すように、設定される。COM
PARE AND SWAP操作が失敗した場合、セマフ
ォ・フィールド415と420は影響されない。別のス
レッドが競争に勝ってセマフォ415を解放するか、又
は競争に勝って自分自身が待ち行列に加わる場合、CO
MPARE AND SWAP操作は失敗する。COMP
AREAND SWAP操作が成功か否かのためのテス
トは、図5のステップ524である。
【0047】図12は、セマフォが利用可能でない場合
で(semval=0 435)、待ち行列440が空
でない場合のsemop(−1)のための処理を示す。
COMPARE AND SWAPのセットアップに我々
を導くテスト処理の初期において、セマフォ・フィール
ド415の現在値が古セマフォ1310に保存された。
新ウエイターの追加はセマフォ値435又はPID42
5を変更しない。これらCOMPARE AND SWA
P操作の全てに関して、それは、シーケンス番号430
の値をインクリメントする。そのように、シーケンス番
号430が1大きい場合を除き、新セマフォと呼ばれる
エリア1320は、古セマフォ1310と同じように生
成される。待ち行列ヘッド440は現在スレッド制御ブ
ロック750を差し、そのテール445はスレッド制御
ブロック750を差す。
で(semval=0 435)、待ち行列440が空
でない場合のsemop(−1)のための処理を示す。
COMPARE AND SWAPのセットアップに我々
を導くテスト処理の初期において、セマフォ・フィール
ド415の現在値が古セマフォ1310に保存された。
新ウエイターの追加はセマフォ値435又はPID42
5を変更しない。これらCOMPARE AND SWA
P操作の全てに関して、それは、シーケンス番号430
の値をインクリメントする。そのように、シーケンス番
号430が1大きい場合を除き、新セマフォと呼ばれる
エリア1320は、古セマフォ1310と同じように生
成される。待ち行列ヘッド440は現在スレッド制御ブ
ロック750を差し、そのテール445はスレッド制御
ブロック750を差す。
【0048】我々が新スレッド制御ブロック450を待
ち行列420への追加を完了した時、ヘッド440はス
レッド制御ブロック750を差し続け、テール445は
スレッド制御ブロック450を差すように設定される。
我々は呼出しスレッドを待ち行列370の終りに加えて
いるから、スレッド制御ブロック750中のNEXTポ
インター755が更新されて、待ち行列に追加されるス
レッド制御ブロック450を差す。このケースーでは、
PLO compare and swap double
と tripleストアは、セマフォ・フィールド41
5、待ち行列ヘッダー420、及びスレッドコントロー
ル・フィールド770・470を目的とする。
ち行列420への追加を完了した時、ヘッド440はス
レッド制御ブロック750を差し続け、テール445は
スレッド制御ブロック450を差すように設定される。
我々は呼出しスレッドを待ち行列370の終りに加えて
いるから、スレッド制御ブロック750中のNEXTポ
インター755が更新されて、待ち行列に追加されるス
レッド制御ブロック450を差す。このケースーでは、
PLO compare and swap double
と tripleストアは、セマフォ・フィールド41
5、待ち行列ヘッダー420、及びスレッドコントロー
ル・フィールド770・470を目的とする。
【0049】図13は、COMPARE AND SWA
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は前より1大きい。待ち行列
ヘッダー440はまだスレッド制御ブロック750を差
す。待ち行列テール445は、新スレッド制御ブロック
450を差す。スレッド制御ブロック750内のNEX
Tポインター755は、現在スレッド制御ブロック45
0を差し、スレッドが待ち行列上で待っていることを示
すようにスレッド制御ブロック450内の待ちフラグ4
60が変更される。COMPARE AND SWAP操
作が失敗した場合、どのフィールドの変更されない。別
のスレッドが競争に勝ちセマフォを解放するか、又は競
争に勝って自分自身を待ち行列に加える場合に、COM
PAREAND SWAP操作は失敗する。COMPA
RE AND SWAP操作が成功か否かのためのテスト
は、図5のステップ524である。
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は前より1大きい。待ち行列
ヘッダー440はまだスレッド制御ブロック750を差
す。待ち行列テール445は、新スレッド制御ブロック
450を差す。スレッド制御ブロック750内のNEX
Tポインター755は、現在スレッド制御ブロック45
0を差し、スレッドが待ち行列上で待っていることを示
すようにスレッド制御ブロック450内の待ちフラグ4
60が変更される。COMPARE AND SWAP操
作が失敗した場合、どのフィールドの変更されない。別
のスレッドが競争に勝ちセマフォを解放するか、又は競
争に勝って自分自身を待ち行列に加える場合に、COM
PAREAND SWAP操作は失敗する。COMPA
RE AND SWAP操作が成功か否かのためのテスト
は、図5のステップ524である。
【0050】図14は、セマフォが利用可能な場合で
(semval=1 435)、待ち行列440が空で
ない場合のsemop(−1)のための処理を示す。C
OMPARE AND SWAPのセットアップに我々を
導くテスト処理の初期において、セマフォ・フィールド
415の現在値が古セマフォ1310に保存された。新
セマフォ1320と呼ばれるエリアは生成されて、古セ
マフォ310のコピーにより初期化される。新セマフ1
320のコピーにおいて、PIDは呼出し元のプロセス
IDにセットされ、シーケンス番号が1だけインクリメ
ントされ、セマフォ値が1からゼロに変更される。待ち
行列420はこの操作によって影響を受けないから、こ
れらフィールドは変更されない。実行されたCOMPA
RE AND SWAP操作は、追加のストアを有さない
簡単なcomparedouble and swapで
ある。
(semval=1 435)、待ち行列440が空で
ない場合のsemop(−1)のための処理を示す。C
OMPARE AND SWAPのセットアップに我々を
導くテスト処理の初期において、セマフォ・フィールド
415の現在値が古セマフォ1310に保存された。新
セマフォ1320と呼ばれるエリアは生成されて、古セ
マフォ310のコピーにより初期化される。新セマフ1
320のコピーにおいて、PIDは呼出し元のプロセス
IDにセットされ、シーケンス番号が1だけインクリメ
ントされ、セマフォ値が1からゼロに変更される。待ち
行列420はこの操作によって影響を受けないから、こ
れらフィールドは変更されない。実行されたCOMPA
RE AND SWAP操作は、追加のストアを有さない
簡単なcomparedouble and swapで
ある。
【0051】図15は、COMPARE AND SWA
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425は、呼出し元のプロセスIDを有す
る。セマフォ値435は現在0であり、セマフォが保持
されていることを示す。待ち行列420は、変更はな
い。COMPARE AND SWAP操作が失敗の場
合、どのフィールドも変更ない。COMPARE AN
D SWAP操作の失敗に対する可能性のある理由は、
別のスレッドが競争に勝ってセマフォを獲得したからで
ある。COMPAREAND SWAP操作が成功した
か否かのためのテストは、図6のステップ542であ
る。
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425は、呼出し元のプロセスIDを有す
る。セマフォ値435は現在0であり、セマフォが保持
されていることを示す。待ち行列420は、変更はな
い。COMPARE AND SWAP操作が失敗の場
合、どのフィールドも変更ない。COMPARE AN
D SWAP操作の失敗に対する可能性のある理由は、
別のスレッドが競争に勝ってセマフォを獲得したからで
ある。COMPAREAND SWAP操作が成功した
か否かのためのテストは、図6のステップ542であ
る。
【0052】図16は、先に獲得したセマフォを解放す
る呼出し元であるsemop(−1)のための処理を示
す。このケースでは、セマフォを求めるウエイターが存
在する。我々をCOMPARE AND SWAPのセッ
トアップに導くテスト処理の初期において、セマフォ・
フィールド415の現在値が古セマフォ1310に保存
されている。新セマフォ1320と呼ばれるエリアが生
成され、古セマフォ1310で初期化される。新セマフ
ォ1320コピーにおいて、PIDは、呼出し元のプロ
セスIDに対して設定され、シーケンス番号が1だけイ
ンクリメントされ、セマフォ値はゼロから1に変更され
る。ウエイターが存在しないから、待ち行列420は変
更されない。実行されたCOMPARE AND SWA
P操作は、追加のストアを有さない単純なcompar
e double and swap である。
る呼出し元であるsemop(−1)のための処理を示
す。このケースでは、セマフォを求めるウエイターが存
在する。我々をCOMPARE AND SWAPのセッ
トアップに導くテスト処理の初期において、セマフォ・
フィールド415の現在値が古セマフォ1310に保存
されている。新セマフォ1320と呼ばれるエリアが生
成され、古セマフォ1310で初期化される。新セマフ
ォ1320コピーにおいて、PIDは、呼出し元のプロ
セスIDに対して設定され、シーケンス番号が1だけイ
ンクリメントされ、セマフォ値はゼロから1に変更され
る。ウエイターが存在しないから、待ち行列420は変
更されない。実行されたCOMPARE AND SWA
P操作は、追加のストアを有さない単純なcompar
e double and swap である。
【0053】図17は、COMPARE AND SWA
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425は、呼出し元のプロセスIDを有す
る。セマフォ値435は現在0であり、セマフォが利用
可能であることを示す。待ち行列420は、空である。
COMPARE AND SWAP操作が失敗の場合、ど
のフィールドも変更されない。COMPARE AND
SWAP操作の失敗に対する主な理由は、別のスレッド
が自分自身を待ち行列に追加する最中であるからであ
る。COMPAREAND SWAPを失敗させること
によって、それは、任意のウエイターに通知することな
しに、このプロセスがセマフォを解放することを阻止す
る。COMPARE AND SWAP操作が成功である
か否かのためのテストが図7のステップ560である。
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425は、呼出し元のプロセスIDを有す
る。セマフォ値435は現在0であり、セマフォが利用
可能であることを示す。待ち行列420は、空である。
COMPARE AND SWAP操作が失敗の場合、ど
のフィールドも変更されない。COMPARE AND
SWAP操作の失敗に対する主な理由は、別のスレッド
が自分自身を待ち行列に追加する最中であるからであ
る。COMPAREAND SWAPを失敗させること
によって、それは、任意のウエイターに通知することな
しに、このプロセスがセマフォを解放することを阻止す
る。COMPARE AND SWAP操作が成功である
か否かのためのテストが図7のステップ560である。
【0054】図18は、先に獲得したセマフォを解放す
る呼出し元であるsemop(−1)のための処理を示
す。このケースでは、セマフォを求めるウエイターが存
在する。我々をCOMPARE AND SWAPのセッ
トアップに導くテスト処理の初期において、セマフォ・
フィールド415の現在値が古セマフォ1310に保存
されいてる。新セマフォ1320と呼ばれるエリアが生
成され、古セマフォ1310で初期化される。新セマフ
ォ1320コピーにおいて、PIDは、呼出し元のプロ
セスIDに対して設定され、シーケンス番号が1だけイ
ンクリメントされ、セマフォ値はゼロから1に変更され
る。待ち行列420は、第1のウエイター750を除去
するために変更される。唯一1つのウエイターが存在す
る場合、ヘッド440は変更されて750の第1の要素
のNEXTポインター755と同じ値を含み、テール4
45は変化のない状態である。スレッド制御ブロック7
50はもはやセマフォ待ち行列上にないことを指示する
ように、NEXTポインター755とフラグ760は消
去される。実行されたCOMPARE AND SWAP
操作は、第1のウエイターの待ち行列ヘッダー420と
スレッド制御ブロック・フィールド770に追加される
2つのストアを有するcompare double a
nd swap である。
る呼出し元であるsemop(−1)のための処理を示
す。このケースでは、セマフォを求めるウエイターが存
在する。我々をCOMPARE AND SWAPのセッ
トアップに導くテスト処理の初期において、セマフォ・
フィールド415の現在値が古セマフォ1310に保存
されいてる。新セマフォ1320と呼ばれるエリアが生
成され、古セマフォ1310で初期化される。新セマフ
ォ1320コピーにおいて、PIDは、呼出し元のプロ
セスIDに対して設定され、シーケンス番号が1だけイ
ンクリメントされ、セマフォ値はゼロから1に変更され
る。待ち行列420は、第1のウエイター750を除去
するために変更される。唯一1つのウエイターが存在す
る場合、ヘッド440は変更されて750の第1の要素
のNEXTポインター755と同じ値を含み、テール4
45は変化のない状態である。スレッド制御ブロック7
50はもはやセマフォ待ち行列上にないことを指示する
ように、NEXTポインター755とフラグ760は消
去される。実行されたCOMPARE AND SWAP
操作は、第1のウエイターの待ち行列ヘッダー420と
スレッド制御ブロック・フィールド770に追加される
2つのストアを有するcompare double a
nd swap である。
【0055】図19は、COMPARE AND SWA
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425は、呼出し元のプロセスIDを有す
る。セマフォ値435は現在1であり、セマフォが利用
可能であることを示す。待ち行列ヘッダーは、今スレッ
ド制御ブロック450を差す。NEXTポインター75
5とフラグ760は、消去されている。COMPARE
AND SWAP操作が失敗の場合、どのフィールドも
変更されない。COMPARE AND SWAP操作の
失敗に対する主な理由は、別のスレッドが自分自身を待
ち行列に追加する最中であるからである。COMPAR
E AND SWAPを失敗させることによって、それ
は、このプロセスが待ち行列を無効な状態に置くのを阻
止する。COMPARE AND SWAP操作が成功で
あるか否かのためのテストが図7のステップ560であ
る。
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425は、呼出し元のプロセスIDを有す
る。セマフォ値435は現在1であり、セマフォが利用
可能であることを示す。待ち行列ヘッダーは、今スレッ
ド制御ブロック450を差す。NEXTポインター75
5とフラグ760は、消去されている。COMPARE
AND SWAP操作が失敗の場合、どのフィールドも
変更されない。COMPARE AND SWAP操作の
失敗に対する主な理由は、別のスレッドが自分自身を待
ち行列に追加する最中であるからである。COMPAR
E AND SWAPを失敗させることによって、それ
は、このプロセスが待ち行列を無効な状態に置くのを阻
止する。COMPARE AND SWAP操作が成功で
あるか否かのためのテストが図7のステップ560であ
る。
【0056】図20は、待ち行列中の先頭のスレッドを
除去するための処理を示す。セマフォの解放が先頭待ち
スレッドを除去するが、その待ち行列スレッドを起こす
ための通知において失敗した時に、これはステップ58
0(図8)で起こる。このケースにおいて、次期ウエイ
ターに停止(hang)条件を回避するために、通知さ
れなければならない。 我々をCOMPARE AND
SWAPのセットアップに導くテスト処理の初期におい
て、セマフォ・フィールド415の現在値は古セマフォ
1310に保存されいてる。新セマフォ1320と呼ば
れるエリアが生成され、古セマフォ1310で初期化さ
れる。新セマフォ1320のコピーにおいて、PIDと
セマフォ値は変更されない。シーケンス番号は、1だけ
インクリメントされる。待ち行列420は、第1のウエ
イター750を除去するために変更される。唯一1つの
ウエイターが存在する場合、ヘッド440とテール44
5の両者は、ゼロに設定される。複数のウエイターが存
在する場合、ヘッド440は、第1の要素のNEXTポ
インターと同じ値を含むように変更され、テール445
は変化無しのままである。スレッド制御ブロック750
はもはやセマフォ待ち行列上にないことを示すように、
NEXTポインター755とフラグ760は消去され
る。実行されたCOMPARE AND SWAP操作
は、2つの追加のストアを待ち行列ヘッダー420及び
第1ウエイターのスレッド制御ブロック・フィールド7
70に有するcompare double and s
wap である。
除去するための処理を示す。セマフォの解放が先頭待ち
スレッドを除去するが、その待ち行列スレッドを起こす
ための通知において失敗した時に、これはステップ58
0(図8)で起こる。このケースにおいて、次期ウエイ
ターに停止(hang)条件を回避するために、通知さ
れなければならない。 我々をCOMPARE AND
SWAPのセットアップに導くテスト処理の初期におい
て、セマフォ・フィールド415の現在値は古セマフォ
1310に保存されいてる。新セマフォ1320と呼ば
れるエリアが生成され、古セマフォ1310で初期化さ
れる。新セマフォ1320のコピーにおいて、PIDと
セマフォ値は変更されない。シーケンス番号は、1だけ
インクリメントされる。待ち行列420は、第1のウエ
イター750を除去するために変更される。唯一1つの
ウエイターが存在する場合、ヘッド440とテール44
5の両者は、ゼロに設定される。複数のウエイターが存
在する場合、ヘッド440は、第1の要素のNEXTポ
インターと同じ値を含むように変更され、テール445
は変化無しのままである。スレッド制御ブロック750
はもはやセマフォ待ち行列上にないことを示すように、
NEXTポインター755とフラグ760は消去され
る。実行されたCOMPARE AND SWAP操作
は、2つの追加のストアを待ち行列ヘッダー420及び
第1ウエイターのスレッド制御ブロック・フィールド7
70に有するcompare double and s
wap である。
【0057】図21は、COMPARE AND SWA
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425とセマフォ値435は変化しない。待
ち行列ヘッダー440は今スレッド制御ブロック450
を差し、テール・ポインター445は変更はない。最後
のスレッド制御ブロックが待ち行列から除去される場
合、ヘッド440はゼロであり、テール445もゼロで
ある。除去されるスレッド制御ブロック750におい
て、NEXTポインター775と待ちフラグ760は消
去される。COMPARE AND SWAP操作が失敗
の場合、どのフィールドも変更されない。COMPAR
E AND SWAP操作の失敗に対する主な理由は、別
のスレッドが自分自身を待ち行列に追加する最中である
からである。COMPARE ANDSWAPを失敗さ
せることによって、それは、このプロセスが待ち行列を
無効な状態に置くのを阻止する。COMPARE AN
D SWAP操作が成功であるか否かのためのテストが
図8のステップ574である。
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425とセマフォ値435は変化しない。待
ち行列ヘッダー440は今スレッド制御ブロック450
を差し、テール・ポインター445は変更はない。最後
のスレッド制御ブロックが待ち行列から除去される場
合、ヘッド440はゼロであり、テール445もゼロで
ある。除去されるスレッド制御ブロック750におい
て、NEXTポインター775と待ちフラグ760は消
去される。COMPARE AND SWAP操作が失敗
の場合、どのフィールドも変更されない。COMPAR
E AND SWAP操作の失敗に対する主な理由は、別
のスレッドが自分自身を待ち行列に追加する最中である
からである。COMPARE ANDSWAPを失敗さ
せることによって、それは、このプロセスが待ち行列を
無効な状態に置くのを阻止する。COMPARE AN
D SWAP操作が成功であるか否かのためのテストが
図8のステップ574である。
【0058】図22は、スレッドが回復に入った時に、
ステップ597(図9)でセマフォを待つスレッドを除
去するための処理を示す。セマフォ・フィールド415
の現在値は、古セマフォ1310に保存される。新セマ
フォ1320と呼ばれるエリアが生成され、古セマフォ
1310のコピーで初期化される。新セマフォ1320
のコピーにおいて、PIDは変更されないままである。
なぜなら、呼出しがセマフォ435を変更した時に、P
IDは唯一変更されるからである。シーケンス番号43
0は、前より1大きい。図9からのフローにおいて、除
去されるべきスレッド制御ブロック450は待ち行列上
に位置し、そしてスレッド制御ブロック750は現在N
EXT755のフィールドを用いて、スレッド制御ブロ
ック450を差している。COMPAREAND SW
AP操作は、要素450を待ち行列420(370)。
ステップ597(図9)でセマフォを待つスレッドを除
去するための処理を示す。セマフォ・フィールド415
の現在値は、古セマフォ1310に保存される。新セマ
フォ1320と呼ばれるエリアが生成され、古セマフォ
1310のコピーで初期化される。新セマフォ1320
のコピーにおいて、PIDは変更されないままである。
なぜなら、呼出しがセマフォ435を変更した時に、P
IDは唯一変更されるからである。シーケンス番号43
0は、前より1大きい。図9からのフローにおいて、除
去されるべきスレッド制御ブロック450は待ち行列上
に位置し、そしてスレッド制御ブロック750は現在N
EXT755のフィールドを用いて、スレッド制御ブロ
ック450を差している。COMPAREAND SW
AP操作は、要素450を待ち行列420(370)。
【0059】この例では、ヘッド440は変化しないま
まであが、テール445は要素750を差すように変更
される。なぜなら要素450は現在待ち行列の最後に在
り、それを除去することがテール445のポインターを
変更するからである。NEXTポインター755は、ス
レッド制御ブロック450のNEXTポインター455
に在るものは何でも差すように変更される。このケース
において、NEXT455中の値はゼロである。NEX
Tポインター455とフラグ460は消去される。実行
されたCOMPARE AND SWAP操作は、3つの
追加のストアを待ち行列フィールド420、スレッド制
御ブロック・フィールド770、及びスレッド制御ブロ
ック・フィールド470の中に有するcompare
double and swapである。
まであが、テール445は要素750を差すように変更
される。なぜなら要素450は現在待ち行列の最後に在
り、それを除去することがテール445のポインターを
変更するからである。NEXTポインター755は、ス
レッド制御ブロック450のNEXTポインター455
に在るものは何でも差すように変更される。このケース
において、NEXT455中の値はゼロである。NEX
Tポインター455とフラグ460は消去される。実行
されたCOMPARE AND SWAP操作は、3つの
追加のストアを待ち行列フィールド420、スレッド制
御ブロック・フィールド770、及びスレッド制御ブロ
ック・フィールド470の中に有するcompare
double and swapである。
【0060】問題のスレッドが待ち行列370中の最初
又は最後のウエイターのどちらでもない場合、唯一セマ
フォ・フィールド415及びスレッド制御ブロック・フ
ィールド770・470が変更される。即ち待ち行列ポ
インター・フィールド420は、同じのままである。3
つの追加のストアを有するcompare doubl
e and swapはこのシナリオのために用いられる
場合、待ち行列 ポインター・フィールド420は、そ
の過去の内容で以って簡単に更新される。
又は最後のウエイターのどちらでもない場合、唯一セマ
フォ・フィールド415及びスレッド制御ブロック・フ
ィールド770・470が変更される。即ち待ち行列ポ
インター・フィールド420は、同じのままである。3
つの追加のストアを有するcompare doubl
e and swapはこのシナリオのために用いられる
場合、待ち行列 ポインター・フィールド420は、そ
の過去の内容で以って簡単に更新される。
【0061】図23は、COMPARE AND SWA
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425とセマフォ値435は変化しない。待
ち行列ヘッダー440は未だスレッド制御ブロック75
0を差し、テール・ポインター445は今スレッド制御
ブロック750を差す。最後のスレッド制御ブロックが
待ち行列から除去される場合、ヘッド440はゼロであ
り、テール445もゼロである。NEXTポインター7
75は、今ゼロである。NEXTポインター455と待
ち行列フラグ460は、スレッド制御ブロック450
は、もはや待ち行列上に存在しないように消去される。
COMPARE AND SWAP操作が失敗した場合、
どのフィールドも変更されない。COMPARE AN
D SWAPを失敗させることによって、それは、この
プロセスが待ち行列を無効な状態に置くのを阻止する。
COMPARE AND SWAP操作が成功であるか否
かのためのテストが図9のステップ590である。
P操作が成功した時のセマフォ・フィールドの内容を示
す。シーケンス番号430は、前より1大きい。PID
フィールド425とセマフォ値435は変化しない。待
ち行列ヘッダー440は未だスレッド制御ブロック75
0を差し、テール・ポインター445は今スレッド制御
ブロック750を差す。最後のスレッド制御ブロックが
待ち行列から除去される場合、ヘッド440はゼロであ
り、テール445もゼロである。NEXTポインター7
75は、今ゼロである。NEXTポインター455と待
ち行列フラグ460は、スレッド制御ブロック450
は、もはや待ち行列上に存在しないように消去される。
COMPARE AND SWAP操作が失敗した場合、
どのフィールドも変更されない。COMPARE AN
D SWAPを失敗させることによって、それは、この
プロセスが待ち行列を無効な状態に置くのを阻止する。
COMPARE AND SWAP操作が成功であるか否
かのためのテストが図9のステップ590である。
【0062】本発明は、典型的には、ハードウエア機械
上で実行されるソフトウエア(即ちプログラム記憶装置
上で認識可能に具体化された命令の機械可読プログラ
ム)として実装される。特定の具体例が示され、説明さ
れる一方、本発明の本質から逸脱しない種々の変更は可
能であることは、この技術分野の当業者にとっては自明
なことであろう。従って、本発明を、IBM S/39
0 ハードウエア・プラットフォーム上のPLO(Pe
rform Locked Operation)を用い
て説明してきたが、本発明はこのプラットフォーム上の
この命令に限定されるものではなく、他の環境において
使用してもよい。更に本発明を2進セマフォを実装する
ように、説明してきたが、本発明は2進セマフォに限定
されるものでではなく、セマフォを考慮する適当な変更
で以って使用されてもよい。
上で実行されるソフトウエア(即ちプログラム記憶装置
上で認識可能に具体化された命令の機械可読プログラ
ム)として実装される。特定の具体例が示され、説明さ
れる一方、本発明の本質から逸脱しない種々の変更は可
能であることは、この技術分野の当業者にとっては自明
なことであろう。従って、本発明を、IBM S/39
0 ハードウエア・プラットフォーム上のPLO(Pe
rform Locked Operation)を用い
て説明してきたが、本発明はこのプラットフォーム上の
この命令に限定されるものではなく、他の環境において
使用してもよい。更に本発明を2進セマフォを実装する
ように、説明してきたが、本発明は2進セマフォに限定
されるものでではなく、セマフォを考慮する適当な変更
で以って使用されてもよい。
【図1】多数のセマフォ・セットを管理するカーネルの
ためのインフラストラクチャーを示す。
ためのインフラストラクチャーを示す。
【図2】同じセマフォを要求する2つのプロセスの間の
インターラクションを示す。
インターラクションを示す。
【図3】従来のセマフォ処理のロジック・フローを示
す。
す。
【図4】1のセマフォ・セットの個々のセマフォと、実
行可能な作業単位を示すスレッド制御(コントロール)
ブロックとの構造を示す。
行可能な作業単位を示すスレッド制御(コントロール)
ブロックとの構造を示す。
【図5】本発明に従うセマフォ処理のロジック・フロー
を示す。これは、semop関数(function)
とsemopが得られない時のための処理のエントリを
示す。
を示す。これは、semop関数(function)
とsemopが得られない時のための処理のエントリを
示す。
【図6】セマフォが得られ要求がセマフォを獲得するケ
ースのためのセマフォ処理のロジックを続行する。
ースのためのセマフォ処理のロジックを続行する。
【図7】セマフォを解放するためのセマフォ処理のロジ
ックを示す。2つのケースは、セマフォを待つウエイタ
ーの存在する、存在しない場合である。仮に、ウエイタ
ーが存在するなら、ウエイターは待ち行列から除去され
る。
ックを示す。2つのケースは、セマフォを待つウエイタ
ーの存在する、存在しない場合である。仮に、ウエイタ
ーが存在するなら、ウエイターは待ち行列から除去され
る。
【図8】セマフォを解放するためのセマフォ処理のロジ
ックを示す。このケースは、ウエイターに通知される場
合である。仮に、ポストが失敗であるのなら、次のウエ
イターが待ち行列から除去され通知される。ウエイター
がうまく通知されるまで、即ち亜待ち行列が空になるま
で、これを続行する。
ックを示す。このケースは、ウエイターに通知される場
合である。仮に、ポストが失敗であるのなら、次のウエ
イターが待ち行列から除去され通知される。ウエイター
がうまく通知されるまで、即ち亜待ち行列が空になるま
で、これを続行する。
【図9】待ち行列からスレッドコントロール・ブロック
を除去する回復処理を扱う。
を除去する回復処理を扱う。
【図10】COMPARE AND SWAP操作の前の
セマフォが利用可能でなく待ち行列が空でない場合のセ
マフォの要求を示す。
セマフォが利用可能でなく待ち行列が空でない場合のセ
マフォの要求を示す。
【図11】COMPARE AND SWAP操作の成功
の後、セマフォが利用可能でなく、待ち行列が空である
時のセマフォの要求を示す。
の後、セマフォが利用可能でなく、待ち行列が空である
時のセマフォの要求を示す。
【図12】COMPARE AND SWAP操作の前、
セマフォが利用可能でなく、待ち行列が空でない時のセ
マフォの要求を示す。
セマフォが利用可能でなく、待ち行列が空でない時のセ
マフォの要求を示す。
【図13】COMPARE AND SWAP操作の後、
セマフォが利用可能でなく、待ち行列が空でない時のセ
マフォの要求を示す。
セマフォが利用可能でなく、待ち行列が空でない時のセ
マフォの要求を示す。
【図14】COMPARE AND SWAP操作の前、
セマフォが利用可能で、待ち行列が空である時のセマフ
ォの要求を示す。
セマフォが利用可能で、待ち行列が空である時のセマフ
ォの要求を示す。
【図15】COMPARE AND SWAP操作の後、
セマフォが利用可能で、待ち行列が空である時のセマフ
ォの要求を示す。
セマフォが利用可能で、待ち行列が空である時のセマフ
ォの要求を示す。
【図16】COMPARE AND SWAP操作の前、
待ち行列上にウエイターが存在しない場合のセマフォの
解放を示す。
待ち行列上にウエイターが存在しない場合のセマフォの
解放を示す。
【図17】COMPARE AND SWAP操作の後、
待ち行列上にウエイターが存在しない場合のセマフォの
解放を示す。
待ち行列上にウエイターが存在しない場合のセマフォの
解放を示す。
【図18】COMPARE AND SWAP操作の前、
待ち行列上にウエイターが存在しない場合のセマフォの
解放を示す。
待ち行列上にウエイターが存在しない場合のセマフォの
解放を示す。
【図19】COMPARE AND SWAP操作の後、
待ち行列上にウエイターが存在する場合のセマフォの解
放を示す。
待ち行列上にウエイターが存在する場合のセマフォの解
放を示す。
【図20】COMPARE AND SWAP操作の前、
セマフォが既に解放された後に、待ち行列からウエイタ
ーを除去する処理を示す。
セマフォが既に解放された後に、待ち行列からウエイタ
ーを除去する処理を示す。
【図21】COMPARE AND SWAP操作の後、
セマフォが既に解放された後に、待ち行列からウエイタ
ーを除去する処理を示す。
セマフォが既に解放された後に、待ち行列からウエイタ
ーを除去する処理を示す。
【図22】COMPARE AND SWAP操作の前、
スレッドが終了しているから、待ち行列からスレッド制
御ブロックを除去する回復処理を示す。
スレッドが終了しているから、待ち行列からスレッド制
御ブロックを除去する回復処理を示す。
【図23】COMPARE AND SWAP操作の後、
スレッドが終了しているから、待ち行列からスレッド制
御ブロックを除去する回復処理を示す。
スレッドが終了しているから、待ち行列からスレッド制
御ブロックを除去する回復処理を示す。
【図24】compare and swap操作を実行
する際に用いられるセマフォと内部データ構造である。 105:セマフォID テーブル 115:セマフォ・セット 110:エントリ 120:セマフォ・エントリ 205:プロセス1 210:プロセス2 215:カーネル 360:ロック待ち行列 370:セマフォ待ち行列 415:セマフォ・フィールド 420:待ち行列ヘッダー 425:プロセスID 430:シーケンス番号 435:セマフォ値 440:ヘッド・ポインター 445:テール・ポインター 450:スレッド制御ブロック 455:NEXTポインター 460:フラグ・セット 470:スレッド制御フィールド 1310:古セマフォ 1320:新セマフォ 1330:置換値 1340:置換値
する際に用いられるセマフォと内部データ構造である。 105:セマフォID テーブル 115:セマフォ・セット 110:エントリ 120:セマフォ・エントリ 205:プロセス1 210:プロセス2 215:カーネル 360:ロック待ち行列 370:セマフォ待ち行列 415:セマフォ・フィールド 420:待ち行列ヘッダー 425:プロセスID 430:シーケンス番号 435:セマフォ値 440:ヘッド・ポインター 445:テール・ポインター 450:スレッド制御ブロック 455:NEXTポインター 460:フラグ・セット 470:スレッド制御フィールド 1310:古セマフォ 1320:新セマフォ 1330:置換値 1340:置換値
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ジョーン・エム・フォースザ アメリカ合衆国ニューヨーク州シュガーテ ィス、ローレン・ティース・ロード104
Claims (20)
- 【請求項1】共有資源へのアクセスを直列化するために
セマフォを使用する情報処理システムにおいて、セマフ
ォ上で指定された操作を実行することの要求元からの要
求を処理する方法であって、該セマフォは1つの値を含
む第1セマフォ・フィールドとセマフォ待ち行列へのポ
インターを含む第2セマフォ・フィールドとを有し、該
待ち行列は前記セマフォのウエイターに対応してゼロ又
はそれ以上のエントリを有し、各々エントリは次のエン
トリへのポインターを有する方法であって、 比較値として第1セマフォ・フィールドの先の値を蓄え
るステップと、 前記指定された操作に従って、第1オペランドとして第
1セマフォ・フィールドのための第1置換値を生成し、
前記待ち行列が前記操作により変更されつつある場合第
2オペランドとして第2セマフォ・フィールドのための
第2置換値と第3オペランドとして前記待ち行列エント
リの1つのための第3置換値とを生成するステップと、 その後自動的に第1セマフォ・フィールドの現在値を前
記比較値と比較し、前記現在値が前記比較値と一致する
場合第1オペランドを第1置換値で置換し、前記待ち行
列が前記操作により変更されつつある場合第2及び第3
オペランドの一方又両方を対応する前記置換値で置換す
る、比較するステップとを含む方法。 - 【請求項2】前記セマフォ・フィールドは、前記セマフ
ォを更新した最後の要求のIDを含む請求項1に記載の
方法。 - 【請求項3】前記セマフォ・フィールドは、シーケンス
番号を含む請求項1に記載の方法。 - 【請求項4】前記比較するステップは、前記第1セマフ
ォ・フィールドの現在値のシーケンス番号を前記比較値
のシーケンス番号と比較することを含む請求項4に記載
の方法。 - 【請求項5】前記生成ステップは、 第1セマフォ・フィールドの前記先の値の中に含まれる
シーケンス番号をインクリメントして、インクリメント
されたシーケンス番号を生成する、インクリメント・ス
テップと、 前記インクリメントされたシーケンス番号を含む第1置
換値を生成するステップとを含むことを特徴とする請求
項3に記載の方法。 - 【請求項6】前記セマフォは、2つのセマフォ値の1つ
を有する2進セマフォである請求項1に記載の方法。 - 【請求項7】前記指定された操作は、前記セマフォ値を
デクリメントすることを含む請求項1に記載の方法。 - 【請求項8】前記指定された操作は、前記セマフォ値を
インクリメントすることを含む請求項1に記載の方法。 - 【請求項9】第2セマフォ・フィールドは、前記セマフ
ォを待つ最初のウエイターへのポインターを含むことを
特徴とする請求項1に記載の方法。 - 【請求項10】第2セマフォ・フィールドは、前記セマ
フォを待つ最後のウエイターへのポインターを含むこと
を特徴とする請求項1に記載の方法。 - 【請求項11】前記要求は、前記セマフォを獲得するた
めの要求であって、 前記置換値を生成するステップは、 前記セマフォ値を検査して前記セマフォが利用可能であ
るかを決定するステップと、 前記セマフォが利用可能でることを前記セマフォ値が示
す場合、前記セマフォ値をデクリメントして第1置換値
を生成するステップと、 前記セマフォが利用可能でないことを前記セマフォ値が
示す場合、前記セマフォを待つウエイターが存在するか
どうかを決定するステップと、 前記セマフォを待つウエイターが存在しない場合、前記
待ち行列ポインターを変更して、新しい最初のウエイタ
ーとしての前記要求元を差して第2置換値を生成するス
テップと、 前記セマフォを待つ1以上のウエイターが存在する場
合、現在の最後のウエイターの待ち行列エントリを変更
して、新しい最後のウエイターとしての前記要求元を差
して第3置換値を生成するステップとを含むことを特徴
とする請求項1に記載の方法。 - 【請求項12】前記要求は、前記セマフォを保持してい
る要求元から該セマフォを解放するための要求であっ
て、 前記置換値を生成するステップは、 前記セマフォ値をインクリメントとして第1置換値を生
成するステップと、 前記セマフォを求める第1及び第2ウエイターが存在す
るかを決定するステップと、 前記セマフォを待つ第1及び第2ウエイターが存在する
場合、前記待ち行列ポインターを変更して、新しい最初
のウエイターとしての前記要求元を差して第2置換値を
生成し、かつ、前記第1ウエイターに対応する前記待ち
行列エントリを変更し前記待ち行列から第1ウエイター
を除去して第3置換値を生成するステップと、 前記セマフォを求める第1ウエイターのみが存在する場
合、前記待ち行列ポインターを変更して、ウエイターが
不在であることを示すように第2置換値を生成し、か
つ、第1ウエイターに対応する前記待ち行列エントリを
変更して、前記待ち行列から第1ウエイターを除去して
第3置換値を生成するステップとを含むことを特徴とす
る請求項1に記載の方法。 - 【請求項13】前記第1セマフォ・フィールドの現在値
が前記比較値と一致しない場合、新しい比較値として、
前記第1セマフォ・フィールドの現実値を蓄え、前記生
成、比較、置換えステップを繰返す、ステップを更に含
む請求項1に記載の方法。 - 【請求項14】前記比較ステップ及び置換えステップ
は、単一のハードウエア命令により実行され、前記命令
はオペランドを比較値で比較し、前記オペランドが前記
比較値に等しい場合、前記比較されたオペランド及び任
意の追加のオペランドを置換値で置換えることを特徴と
する請求項1に記載の方法。 - 【請求項15】待ち行列エントリの各々は、対応する要
求元のための制御ブロックを含む請求項1に記載の方
法。 - 【請求項16】制御ブロックの各々は、前記待ち行列内
の次のエントリへのポインターを含む請求項16に記載
の方法。 - 【請求項17】各制御ブロックは、前記要求元が前記待
ち行列上で待っているかを示すフラグを含む請求項16
に記載の方法。 - 【請求項18】前記生成ステップは、更に1つの待ち行
列エントリのための置換値を生成するステップを含み、
前記置換ステップは、前記待ち行列エントリの対を対応
する置換値で置換えるステップを含むことを特徴とする
請求項1に記載の方法。 - 【請求項19】共有資源へのアクセスを直列化するため
にセマフォを使用する情報処理システムにおいて、セマ
フォ上で指定された操作を実行することの要求元からの
要求を処理する装置であって、該セマフォは1つの値を
含む第1セマフォ・フィールドとセマフォ待ち行列への
ポインターを含む第2セマフォ・フィールドとを有し、
該待ち行列は前記セマフォのウエイターに対応してゼロ
又はそれ以上のエントリを有し、各々エントリは次のエ
ントリへのポインターを有する装置であって、 比較値として第1セマフォ・フィールドの先の値を蓄え
る手段と、 前記指定された操作に従って、第1オペランドとして第
1セマフォ・フィールドのための第1置換値を生成し、
前記待ち行列が前記操作により変更されつつある場合第
2オペランドとして第2セマフォ・フィールドのための
第2置換値と第3オペランドとして前記待ち行列エント
リの1つのための第3置換値とを生成する手段と、 その後自動的に第1セマフォ・フィールドの現在値を前
記比較値と比較し、前記現在値が前記比較値と一致する
場合第1オペランドを第1置換値で置換し、前記待ち行
列が前記操作により変更されつつある場合第2及び第3
オペランドの一方又両方を対応する前記置換値で置換す
る手段とを含む装置。 - 【請求項20】共有資源へのアクセスを直列化するため
にセマフォを使用する情報処理システムにおいて、セマ
フォ上で指定された操作を実行することの要求元からの
要求を処理するための方法ステップを実行する該マシー
ンによって実行可能な命令のプログラムを明確に具体化
する、機械により読取り可能なプログラム記憶装置であ
って、該セマフォは1つの値を含む第1セマフォ・フィ
ールドとセマフォ待ち行列へのポインターを含む第2セ
マフォ・フィールドとを有し、該待ち行列は前記セマフ
ォのウエイターに対応してゼロ又はそれ以上のエントリ
を有し、各々エントリは次のエントリへのポインターを
有するプログラムの方法ステップは、 比較値として第1セマフォ・フィールドの先の値を蓄え
るステップと、 前記指定された操作に従って、第1オペランドとして第
1セマフォ・フィールドのための第1置換値を生成し、
前記待ち行列が前記操作により変更されつつある場合第
2オペランドとして第2セマフォ・フィールドのための
第2置換値と第3オペランドとして前記待ち行列エント
リの1つのための第3置換値とを生成するステップと、 その後自動的に第1セマフォ・フィールドの現在値を前
記比較値と比較し、前記現在値が前記比較値と一致する
場合第1オペランドを第1置換値で置換し、前記待ち行
列が前記操作により変更されつつある場合第2及び第3
オペランドの一方又両方を対応する前記置換値で置換す
る、比較するステップとを含むことを特徴とする機械に
より読取り可能なプログラム記憶装置。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US09/040722 | 1998-03-18 | ||
| US09/040,722 US6237019B1 (en) | 1998-03-18 | 1998-03-18 | Method and apparatus for performing a semaphore operation |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH11327931A true JPH11327931A (ja) | 1999-11-30 |
Family
ID=21912574
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP11074165A Pending JPH11327931A (ja) | 1998-03-18 | 1999-03-18 | セマフォ操作を実行する方法及び装置 |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US6237019B1 (ja) |
| EP (1) | EP0943993A3 (ja) |
| JP (1) | JPH11327931A (ja) |
| KR (1) | KR19990077481A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2009193362A (ja) * | 2008-02-14 | 2009-08-27 | Hitachi Ltd | 情報処理システム及びそのファイルのジョブ間排他制御方法 |
Families Citing this family (52)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6701429B1 (en) * | 1998-12-03 | 2004-03-02 | Telefonaktiebolaget Lm Ericsson(Publ) | System and method of start-up in efficient way for multi-processor systems based on returned identification information read from pre-determined memory location |
| US6560627B1 (en) * | 1999-01-28 | 2003-05-06 | Cisco Technology, Inc. | Mutual exclusion at the record level with priority inheritance for embedded systems using one semaphore |
| US7334229B1 (en) | 1999-01-28 | 2008-02-19 | Cisco Technology, Inc. | Mutual exclusion at the record level with priority inheritance for embedded systems using one semaphore |
| US6874144B1 (en) * | 1999-04-05 | 2005-03-29 | International Business Machines Corporation | System, method, and program for implementing priority inheritance in an operating system |
| US6920633B1 (en) * | 2000-01-14 | 2005-07-19 | Microsoft Corporation | Cross-process common system resource data sharing |
| US6615286B1 (en) * | 2000-02-14 | 2003-09-02 | Intel Corporation | Method and apparatus for updating device driver control data |
| US6745274B1 (en) * | 2000-04-25 | 2004-06-01 | Hewlett-Packard Development Company, L.P. | Apparatus and method for synchronizing multiple accesses to common resources |
| US6609161B1 (en) | 2000-06-01 | 2003-08-19 | Adaptec, Inc. | Two-dimensional execution queue for host adapters |
| US6789134B1 (en) | 2000-06-01 | 2004-09-07 | Adaptec, Inc. | Dequeuing from a host adapter two-dimensional queue |
| EP1199632A1 (en) | 2000-10-20 | 2002-04-24 | Sun Microsystems, Inc. | Method and apparatus for resource access synchronization |
| US7353515B1 (en) | 2001-02-04 | 2008-04-01 | Cisco Technology, Inc. | Method and apparatus for dynamic allocation and management of semaphores for accessing shared resources |
| US7237013B2 (en) * | 2001-04-16 | 2007-06-26 | National Instruments Corporation | Network system including data socket components for accessing internet semaphores |
| MXPA04004202A (es) * | 2001-11-01 | 2005-05-16 | Verisign Inc | Administrador de memoria de transaccion. |
| US7065765B2 (en) * | 2001-12-05 | 2006-06-20 | International Business Machines Corporation | Serializing event handling in a threaded system with no wait states |
| US7174552B2 (en) * | 2002-01-12 | 2007-02-06 | Intel Corporation | Method of accessing a resource by a process based on a semaphore of another process |
| FI20020210A7 (fi) * | 2002-02-04 | 2003-08-05 | Nokia Corp | Moniprosessoriympäristöön tarkoitettu laitteistopohjainen opastin |
| US6978330B1 (en) * | 2002-04-04 | 2005-12-20 | Applied Micro Circuits Corporation | Shared resource access via declarations that contain a sequence number of a packet |
| US6938132B1 (en) | 2002-04-04 | 2005-08-30 | Applied Micro Circuits Corporation | Memory co-processor for a multi-tasking system |
| US7421693B1 (en) * | 2002-04-04 | 2008-09-02 | Applied Micro Circuits Corporation | Logic for synchronizing multiple tasks at multiple locations in an instruction stream |
| US7036125B2 (en) * | 2002-08-13 | 2006-04-25 | International Business Machines Corporation | Eliminating memory corruption when performing tree functions on multiple threads |
| KR100803450B1 (ko) * | 2002-11-19 | 2008-02-14 | 엘지노텔 주식회사 | 공유 버스 시스템의 스케줄링 장치 및 그 방법 |
| US6938054B2 (en) * | 2002-11-25 | 2005-08-30 | International Business Machines Corporation | Systems, methods, and computer program products to optimize serialization when porting code to IBM S/390 UNIX system services from a UNIX system |
| US7092973B2 (en) | 2002-12-23 | 2006-08-15 | Sap Aktiengesellschaft | Conflict detection in a distributed system landscape |
| US7047337B2 (en) * | 2003-04-24 | 2006-05-16 | International Business Machines Corporation | Concurrent access of shared resources utilizing tracking of request reception and completion order |
| US7739252B2 (en) * | 2003-07-14 | 2010-06-15 | Oracle America, Inc. | Read/write lock transaction manager freezing |
| US7512950B1 (en) * | 2003-08-14 | 2009-03-31 | Sun Microsystems, Inc. | Barrier synchronization object for multi-threaded applications |
| US7500242B2 (en) * | 2003-09-08 | 2009-03-03 | Intel Corporation | Low-contention lock |
| US7493618B2 (en) * | 2003-09-19 | 2009-02-17 | International Business Machines Corporation | Fault tolerant mutual exclusion locks for shared memory systems |
| US7395527B2 (en) | 2003-09-30 | 2008-07-01 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses |
| US8381037B2 (en) | 2003-10-09 | 2013-02-19 | International Business Machines Corporation | Method and system for autonomic execution path selection in an application |
| US7458078B2 (en) * | 2003-11-06 | 2008-11-25 | International Business Machines Corporation | Apparatus and method for autonomic hardware assisted thread stack tracking |
| US7895382B2 (en) | 2004-01-14 | 2011-02-22 | International Business Machines Corporation | Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs |
| US7415705B2 (en) | 2004-01-14 | 2008-08-19 | International Business Machines Corporation | Autonomic method and apparatus for hardware assist for patching code |
| US7366727B2 (en) | 2004-03-12 | 2008-04-29 | Sap Aktiengesellschaft | Management of inbound conflicts when merging data of distributed systems |
| EP1574955B1 (en) * | 2004-03-12 | 2012-10-24 | Sap Ag | Management of inbound conflicts when merging data of distributed systems |
| US7770172B2 (en) * | 2004-09-01 | 2010-08-03 | Microsoft Corporation | Conditional variables without spinlocks |
| GB2427045B (en) | 2005-06-06 | 2007-11-21 | Transitive Ltd | Method and apparatus for converting program code with access coordination for a shared resource |
| US7730491B2 (en) | 2005-08-30 | 2010-06-01 | Intel Corporation | Fair scalable reader-writer mutual exclusion |
| JP2007179190A (ja) * | 2005-12-27 | 2007-07-12 | Mitsubishi Electric Corp | セマフォ管理方法、およびセマフォ管理プログラム |
| US8099538B2 (en) * | 2006-03-29 | 2012-01-17 | Intel Corporation | Increasing functionality of a reader-writer lock |
| US7624237B2 (en) * | 2006-05-03 | 2009-11-24 | International Business Machines Corporation | Compare, swap and store facility with no external serialization |
| GB2437760A (en) * | 2006-05-03 | 2007-11-07 | Ibm | Computer program for compare, swap and store facility with no external serialization |
| US8429144B2 (en) * | 2010-07-16 | 2013-04-23 | International Business Machines Corporation | Interprocess communication using a single semaphore |
| US8392627B2 (en) * | 2011-04-25 | 2013-03-05 | Microsoft Corporation | Adaptive semaphore |
| US9141438B2 (en) | 2011-06-30 | 2015-09-22 | Net Navigation Systems, Llc | Logic for synchronizing multiple tasks |
| US10185564B2 (en) * | 2016-04-28 | 2019-01-22 | Oracle International Corporation | Method for managing software threads dependent on condition variables |
| US20200401412A1 (en) * | 2019-06-24 | 2020-12-24 | Intel Corporation | Hardware support for dual-memory atomic operations |
| US11294737B2 (en) * | 2019-06-24 | 2022-04-05 | International Business Machines Corporation | Self-managed lock access |
| 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 |
| US12619477B2 (en) | 2021-12-13 | 2026-05-05 | Nvidia Corporation | Application programming interface to cause graph code to wait on a semaphore |
| US20230185634A1 (en) * | 2021-12-13 | 2023-06-15 | Nvidia Corporation | Application programming interface to cause graph code to update a semaphore |
| CN114661481B (zh) * | 2022-05-25 | 2022-09-06 | 广州市保伦电子有限公司 | 一种单进程中多线程多互斥量间的控制方法以及终端 |
Family Cites Families (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| FR2253418A5 (ja) * | 1973-11-30 | 1975-06-27 | Honeywell Bull Soc Ind | |
| FR2253423A5 (ja) * | 1973-11-30 | 1975-06-27 | Honeywell Bull Soc Ind | |
| JPH02300939A (ja) * | 1989-05-16 | 1990-12-13 | Toshiba Corp | セマフォオペレーション方式 |
| US5313638A (en) * | 1992-03-24 | 1994-05-17 | International Business Machines Corp. | Method using semaphores for synchronizing communication between programs or processes resident in a computer system |
| US5922057A (en) * | 1997-01-10 | 1999-07-13 | Lsi Logic Corporation | Method for multiprocessor system of controlling a dynamically expandable shared queue in which ownership of a queue entry by a processor is indicated by a semaphore |
-
1998
- 1998-03-18 US US09/040,722 patent/US6237019B1/en not_active Expired - Lifetime
-
1999
- 1999-02-25 KR KR1019990006340A patent/KR19990077481A/ko not_active Ceased
- 1999-03-17 EP EP99302069A patent/EP0943993A3/en not_active Withdrawn
- 1999-03-18 JP JP11074165A patent/JPH11327931A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2009193362A (ja) * | 2008-02-14 | 2009-08-27 | Hitachi Ltd | 情報処理システム及びそのファイルのジョブ間排他制御方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| EP0943993A3 (en) | 2004-04-07 |
| KR19990077481A (ko) | 1999-10-25 |
| US6237019B1 (en) | 2001-05-22 |
| EP0943993A2 (en) | 1999-09-22 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US6237019B1 (en) | Method and apparatus for performing a semaphore operation | |
| EP0145889B1 (en) | Non-spinning task locking using compare and swap | |
| US6247025B1 (en) | Locking and unlocking mechanism for controlling concurrent access to objects | |
| US6269391B1 (en) | Multi-processor scheduling kernel | |
| EP0747815B1 (en) | Method and apparatus for avoiding dealocks by serializing multithreaded access to unsafe resources | |
| US5918248A (en) | Shared memory control algorithm for mutual exclusion and rollback | |
| TW498281B (en) | Interface system and method for asynchronously updating a shared resource | |
| Michael et al. | Nonblocking algorithms and preemption-safe locking on multiprogrammed shared memory multiprocessors | |
| US4584644A (en) | Method of controlling use of resources in a data processing system by at least two processes | |
| US5742785A (en) | Posting multiple reservations with a conditional store atomic operations in a multiprocessing environment | |
| US7653791B2 (en) | Realtime-safe read copy update with per-processor read/write locks | |
| AU707393B2 (en) | System and method for space efficient object locking | |
| US9448856B2 (en) | Lock-free dual queue with condition synchronization and time-outs | |
| JP4956418B2 (ja) | コンピュータ装置用のオペレーティング・システムの、またはそれに関する改良 | |
| US20020078119A1 (en) | System and method for improved complex storage locks | |
| US20030236816A1 (en) | Spin-yielding in multi-threaded systems | |
| US20050060559A1 (en) | Utilizing hardware transactional approach to execute code after initially utilizing software locking by employing pseudo-transactions | |
| JP4327972B2 (ja) | ロバスト且つ回復可能なプロセス間ロック | |
| JP2006031691A (ja) | スリープ‐起動機構を用いた比較および交換動作 | |
| US6862595B1 (en) | Method and apparatus for implementing a shared message queue using a list structure | |
| US6738846B1 (en) | Cooperative processing of tasks in a multi-threaded computing system | |
| JPH07191944A (ja) | 多重プロセッサによる多数の資源への命令におけるデッドロックを防止するためのシステムおよび方法 | |
| US7536582B1 (en) | Fault-tolerant match-and-set locking mechanism for multiprocessor systems | |
| JPH1115793A (ja) | 資源の保全性を保護する方法 | |
| JP4620871B2 (ja) | マルチスレッドコンピュータシステムにおけるモニタ変換 |