JPH02163835A - 待ち行列又はスタックから要素を除去する方法 - Google Patents
待ち行列又はスタックから要素を除去する方法Info
- Publication number
- JPH02163835A JPH02163835A JP1276178A JP27617889A JPH02163835A JP H02163835 A JPH02163835 A JP H02163835A JP 1276178 A JP1276178 A JP 1276178A JP 27617889 A JP27617889 A JP 27617889A JP H02163835 A JPH02163835 A JP H02163835A
- Authority
- JP
- Japan
- Prior art keywords
- operand
- queue
- block
- value
- program
- 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
Links
- 238000012545 processing Methods 0.000 title claims description 21
- 238000000034 method Methods 0.000 claims description 23
- 230000008859 change Effects 0.000 claims description 14
- 238000012546 transfer Methods 0.000 claims description 5
- 238000003672 processing method Methods 0.000 claims 2
- 230000008901 benefit Effects 0.000 abstract description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 10
- 230000008569 process Effects 0.000 description 9
- 238000007792 addition Methods 0.000 description 6
- 238000012217 deletion Methods 0.000 description 6
- 230000037430 deletion Effects 0.000 description 6
- 238000003780 insertion Methods 0.000 description 6
- 230000037431 insertion Effects 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 5
- 230000009977 dual effect Effects 0.000 description 3
- 239000011435 rock Substances 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 241000972773 Aulopiformes Species 0.000 description 1
- 102100032986 CCR4-NOT transcription complex subunit 8 Human genes 0.000 description 1
- 102100036402 DAP3-binding cell death enhancer 1 Human genes 0.000 description 1
- 101000942586 Homo sapiens CCR4-NOT transcription complex subunit 8 Proteins 0.000 description 1
- 101000929221 Homo sapiens DAP3-binding cell death enhancer 1 Proteins 0.000 description 1
- 101001094629 Homo sapiens Popeye domain-containing protein 2 Proteins 0.000 description 1
- 101000608230 Homo sapiens Pyrin domain-containing protein 2 Proteins 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 231100000518 lethal Toxicity 0.000 description 1
- 230000001665 lethal effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000135 prohibitive effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 235000019515 salmon Nutrition 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
A、産業上の利用分野
この発明は多重プロセッシング・ユニットないし多重プ
ログラム・コンピュータ・システムにおける時系列リス
トの操作に関し、より具体的には、多重プロセッシング
・ユニットが非同期でリストをアクセスするときでもロ
ック機構なしで項目の付加または削除を行えるようにし
たものである。
ログラム・コンピュータ・システムにおける時系列リス
トの操作に関し、より具体的には、多重プロセッシング
・ユニットが非同期でリストをアクセスするときでもロ
ック機構なしで項目の付加または削除を行えるようにし
たものである。
またこの発明はリスト操作を実行するための新規なコン
ピュータ命令にも関連する。
ピュータ命令にも関連する。
B、従来の技術
この発明は待ち行列およびスタックの双方を扱う。FI
FO(ファースト・イン・ファースト・アウト)リスト
とも呼ばれる待ち行列においては、最初にリストに付加
された項目が最初に除去される。LIFO(ラスト・イ
ン・ラスト・アウト)リストとも呼ばれるスタックにお
いては最後にリストに付加された項目が最初に除去され
る。オペレーション・システムやサブ・システム環境に
おいて非同期のFrFOおよびLIFOリストの操作は
非常に一般的である。このような環境下で時系列リスト
をす・ばやくかつ簡易に操作できないと、多大な制約と
なってしまり。緊密結合構成において用いられるプロセ
ッサの個数が増大し続けているので、ソフトウェアによ
シシリアル化のコストも増大していく。時系列リストは
頻繁に用いられるので、このコストはたえがたいものに
なりつつある。
FO(ファースト・イン・ファースト・アウト)リスト
とも呼ばれる待ち行列においては、最初にリストに付加
された項目が最初に除去される。LIFO(ラスト・イ
ン・ラスト・アウト)リストとも呼ばれるスタックにお
いては最後にリストに付加された項目が最初に除去され
る。オペレーション・システムやサブ・システム環境に
おいて非同期のFrFOおよびLIFOリストの操作は
非常に一般的である。このような環境下で時系列リスト
をす・ばやくかつ簡易に操作できないと、多大な制約と
なってしまり。緊密結合構成において用いられるプロセ
ッサの個数が増大し続けているので、ソフトウェアによ
シシリアル化のコストも増大していく。時系列リストは
頻繁に用いられるので、このコストはたえがたいものに
なりつつある。
現在F I F O!Jコスト管理手法としては2つの
ものがある。単ヘッド待ち行列に対しては、リストはア
ンカ点を有するものとして定義され、すべてのエレメン
トはこのアンカ点を用いて付加され、またリストをサー
チ・ダウンして最後のエレメントを除去してすべてのエ
レメントが削除されていく。この手法では多重付加が可
能となるが一方単一削除しか実現できない。またこの手
法では削除サーチをリストの終りまで行う必要があり、
削除がページ・フォールトによって割り込まれることが
ある、ページ・フォールトを復旧することは可能だけれ
ど、これにともなうオーバーヘッドはリストが長くなる
と過大なものとなる。
ものがある。単ヘッド待ち行列に対しては、リストはア
ンカ点を有するものとして定義され、すべてのエレメン
トはこのアンカ点を用いて付加され、またリストをサー
チ・ダウンして最後のエレメントを除去してすべてのエ
レメントが削除されていく。この手法では多重付加が可
能となるが一方単一削除しか実現できない。またこの手
法では削除サーチをリストの終りまで行う必要があり、
削除がページ・フォールトによって割り込まれることが
ある、ページ・フォールトを復旧することは可能だけれ
ど、これにともなうオーバーヘッドはリストが長くなる
と過大なものとなる。
二重ヘッド待ち行列に対しては、リストは2つのアンカ
点を有するものとして定義され、すべてのエレメントは
一方のアンカ点を用いて付加され、他方のアンカ点を用
いて削除される。この手法では一時に1つの付加または
削除しかりストにアクセスできない。単一アクセスしか
一時に許されないということを保障するため、何らかの
実現方法(ロック機構)を採用しなければなら々い。
点を有するものとして定義され、すべてのエレメントは
一方のアンカ点を用いて付加され、他方のアンカ点を用
いて削除される。この手法では一時に1つの付加または
削除しかりストにアクセスできない。単一アクセスしか
一時に許されないということを保障するため、何らかの
実現方法(ロック機構)を採用しなければなら々い。
最初の手法は、過剰なベージングが予想されるので実際
的でない。第2の手法はロック機構を必要とするという
制約の点から効率の劣化が予想される。
的でない。第2の手法はロック機構を必要とするという
制約の点から効率の劣化が予想される。
L I F O1,1ストをモニタする最も一般的な手
法はスタック中に1つのアンカ点をセットし、とのアン
カ点を利用してすべてのエレメントを付加(ブツシュ)
および削除(ポツプ)するというものである。IBM
System/370 ExtendedArch
itecture Pr1ntiples of O
peration(IBM 出版物番号5A22−7
085−0、以下では文献370XAと呼ぶ)の第A4
5頁には多重非同期ロックなしの付加および削除を実現
する例が示されている。これは表1と同一である。
法はスタック中に1つのアンカ点をセットし、とのアン
カ点を利用してすべてのエレメントを付加(ブツシュ)
および削除(ポツプ)するというものである。IBM
System/370 ExtendedArch
itecture Pr1ntiples of O
peration(IBM 出版物番号5A22−7
085−0、以下では文献370XAと呼ぶ)の第A4
5頁には多重非同期ロックなしの付加および削除を実現
する例が示されている。これは表1と同一である。
このリストは標準的なS/370プログラム・セグメン
トを含み、これは当業者に周知である。第1列は二−モ
ニツク・ラベルを列挙し、第2列はオペレーションない
しインストラクション・フィールドであり、第6列はオ
ペランド・フィールドを列挙し、第4列はコメント欄で
ある。これは当業者に周知の標準的なフォーマットであ
る。
トを含み、これは当業者に周知である。第1列は二−モ
ニツク・ラベルを列挙し、第2列はオペレーションない
しインストラクション・フィールドであり、第6列はオ
ペランド・フィールドを列挙し、第4列はコメント欄で
ある。これは当業者に周知の標準的なフォーマットであ
る。
1L二+((剃狡鮭上
フリー・リストへの付加ルーチン
初期状態:
GR2は付加されるエレメントのアドレスを含む。
GR4けヘッダのアドレスを含む。
1、ADDQ LM Oll、0(4
)2、 TRYAGN ST 010(
2)ろ、
LR3、14、BCTR3,0 5、CDS O12,0(4) 6、 BC7TRYAGNフリー
・リストからの削除ルーチン Z DELETEQ LM 2.3.0(4)
8、TRYAGN LTR2,2 9、BC8、EMPTY l[]、 L D、0(2)
11、 LR1,512゜
CDS 2.0.0(4)13、
BC7TRYAGN14、USE
(任意のインストラクション)GROlGRlをヘッ
ダの内容と等しくする。
)2、 TRYAGN ST 010(
2)ろ、
LR3、14、BCTR3,0 5、CDS O12,0(4) 6、 BC7TRYAGNフリー
・リストからの削除ルーチン Z DELETEQ LM 2.3.0(4)
8、TRYAGN LTR2,2 9、BC8、EMPTY l[]、 L D、0(2)
11、 LR1,512゜
CDS 2.0.0(4)13、
BC7TRYAGN14、USE
(任意のインストラクション)GROlGRlをヘッ
ダの内容と等しくする。
新エレメントをリストのトップにポイントする。
カウントをGR3に移動する。
カウントを減分する。
ヘッダを更新する。
GR2、GR3をヘッダの内容と等しくする。
リストは空か?
インスならヘルプとする。
/−なII)GROを第1エレメントからのポインタと
等しくする。
等しくする。
カウントをGRIに移動する。
ヘッダを更新する。
ヘッダを更新する。
第1の例は10番目および11番目のDELETEQの
インストラクション間の割り込みに対する問題しか解消
しない。7番目および10番目のインストラクションの
間の割シ込みに対する問題は解消しない。もしDELE
TEQが7番目および10番目のインストラクションの
間で割り込みを受けると、リストの第1番目のエレメン
トが待行列から解除され自由になり、10番目のインス
トラクションが無効アドレスのためにプログラム・チエ
ツクにぶつかる。
インストラクション間の割り込みに対する問題しか解消
しない。7番目および10番目のインストラクションの
間の割シ込みに対する問題は解消しない。もしDELE
TEQが7番目および10番目のインストラクションの
間で割り込みを受けると、リストの第1番目のエレメン
トが待行列から解除され自由になり、10番目のインス
トラクションが無効アドレスのためにプログラム・チエ
ツクにぶつかる。
他の例としては米国特許第4394727号明細書およ
び米国特許第4320455号明細書およびI BM
Technical DisclosureBut
letin、Vol、24、pp2716〜2723.
1981年11月がある。これらはロック・ピットやロ
ック・ワードを用いている。
び米国特許第4320455号明細書およびI BM
Technical DisclosureBut
letin、Vol、24、pp2716〜2723.
1981年11月がある。これらはロック・ピットやロ
ック・ワードを用いている。
多重プロセッシングないし多重プログラム・コンピユー
テイング1システムにおいて所定の場合にロック機構を
用いないですませる1つの手法が、米国特許第3886
525号明細書に記載されている。
テイング1システムにおいて所定の場合にロック機構を
用いないですませる1つの手法が、米国特許第3886
525号明細書に記載されている。
米国特許第5886525号明細書の手法は[比較およ
びスワップJ (Compare and Swap
)という新しいインストラクションを含んでいた。
びスワップJ (Compare and Swap
)という新しいインストラクションを含んでいた。
このインストラクションを用いることにより、共有デー
タの各ユーザは共有データ記憶におけるアドレス可能位
置でその共有データをアクセスすること許され、プログ
ラム・インストラクション・シーケンスによってさらに
処理を行える。処理ののち、処理されたデータは共有デ
ータ記憶におけるアドレス位置に戻される。[比較およ
びスワップ」を用いると、インストラクションによりア
クセスされたアドレス位置のデータ内容が、処理前アド
レス位置からアクセスされたデータと比較される。この
比較の結果、共有データの処理の間に他のユーザが共有
データをアクセスして処理し、値の異なった共有データ
をアドレス記憶位置に戻したか否かを判別できる。C8
(比較およびスワップ)インストラクションに応じて、
アドレス位置の値が他のユーザによって修正されたこと
が判明すると、修正値はそのユーザによって保持され、
処理がその修正値について再起動させられる。CSイン
ストラクションによってアクセスされたアドレス位置の
データ値が処理前にそのユーザによってアクセスされた
データの値と同じであれば、他のユーザが共有データに
アクセスし、修正シていることがないと判明する。した
がって処理データはアドレス位置に転送され、後続の処
理が許される(米国特許第3886525号明細書第2
欄8〜39行)。
タの各ユーザは共有データ記憶におけるアドレス可能位
置でその共有データをアクセスすること許され、プログ
ラム・インストラクション・シーケンスによってさらに
処理を行える。処理ののち、処理されたデータは共有デ
ータ記憶におけるアドレス位置に戻される。[比較およ
びスワップ」を用いると、インストラクションによりア
クセスされたアドレス位置のデータ内容が、処理前アド
レス位置からアクセスされたデータと比較される。この
比較の結果、共有データの処理の間に他のユーザが共有
データをアクセスして処理し、値の異なった共有データ
をアドレス記憶位置に戻したか否かを判別できる。C8
(比較およびスワップ)インストラクションに応じて、
アドレス位置の値が他のユーザによって修正されたこと
が判明すると、修正値はそのユーザによって保持され、
処理がその修正値について再起動させられる。CSイン
ストラクションによってアクセスされたアドレス位置の
データ値が処理前にそのユーザによってアクセスされた
データの値と同じであれば、他のユーザが共有データに
アクセスし、修正シていることがないと判明する。した
がって処理データはアドレス位置に転送され、後続の処
理が許される(米国特許第3886525号明細書第2
欄8〜39行)。
COMPARE AND 5WAP(C8)インス
トラクションおよびその変形COMPAREDOUBL
E AND 5WAP(CDS)インストラクショ
ンは現在マルチ・プログラミングおよびマルチ・グロセ
ツシング環境で用いられカウンタ、フラグ、コントロー
ル・ワードおよび他の共通記憶領域のアクセスをシリア
ル化している。
トラクションおよびその変形COMPAREDOUBL
E AND 5WAP(CDS)インストラクショ
ンは現在マルチ・プログラミングおよびマルチ・グロセ
ツシング環境で用いられカウンタ、フラグ、コントロー
ル・ワードおよび他の共通記憶領域のアクセスをシリア
ル化している。
文献370XAはC8およびCDSインストラクション
の使用例を示している。多分最も留意すべき点は、機能
が割り込み用に実行可能とされるプログラムによって実
現され(マルチ・プログラミング)、またマルチ・プロ
セッシング構成で実行されるプロ・ダラムによって実現
されるという点である。換言すれば、インストラクショ
ンC8およびCDSにより、プログラムが、実行可能時
に記憶位置の内容を修正できる。これはルーチンが、た
とえ同一のCPUにはりついている他のプログラム(そ
の記憶位置を修正する)により割り込まれ得る場合も同
じである。また他のCPUが同時に同じ記憶位置を更新
する可能性がある場合ですら同じである。
の使用例を示している。多分最も留意すべき点は、機能
が割り込み用に実行可能とされるプログラムによって実
現され(マルチ・プログラミング)、またマルチ・プロ
セッシング構成で実行されるプロ・ダラムによって実現
されるという点である。換言すれば、インストラクショ
ンC8およびCDSにより、プログラムが、実行可能時
に記憶位置の内容を修正できる。これはルーチンが、た
とえ同一のCPUにはりついている他のプログラム(そ
の記憶位置を修正する)により割り込まれ得る場合も同
じである。また他のCPUが同時に同じ記憶位置を更新
する可能性がある場合ですら同じである。
CSインストラクションは記憶位置の値をまずチエツク
し、こののち、この値がプログラムの予期したものと同
じである場合のみこの値を修正する。通常はこの値が先
にフェッチした値と同じである。記憶部内の値がプログ
ラムの予期したものと異なるならば、その位置では修正
が行われず、かわりにその位置の現行の値が汎用レジス
タに転送さ、れて、プログラムがループ・バックして再
試行できるようにされる。CSインストラクションの実
行の間、他のCPUはその特定の位置にアクセスできな
い。
し、こののち、この値がプログラムの予期したものと同
じである場合のみこの値を修正する。通常はこの値が先
にフェッチした値と同じである。記憶部内の値がプログ
ラムの予期したものと異なるならば、その位置では修正
が行われず、かわりにその位置の現行の値が汎用レジス
タに転送さ、れて、プログラムがループ・バックして再
試行できるようにされる。CSインストラクションの実
行の間、他のCPUはその特定の位置にアクセスできな
い。
ダブル・ワードより大きな共通記憶領域を更新すべきと
きには、特別のインターロックを行って、単一のプログ
ラムのみか一時に共通領域を更新するのを確実にする必
要がある。このような領域はシリアルに再利用可能なリ
ソース(シリアル・リューザル・リソース% 5RR)
と呼ぶ。一般にリストの更新、またはリストの走査でさ
え、リストのロックなしに安全に行うことはできない。
きには、特別のインターロックを行って、単一のプログ
ラムのみか一時に共通領域を更新するのを確実にする必
要がある。このような領域はシリアルに再利用可能なリ
ソース(シリアル・リューザル・リソース% 5RR)
と呼ぶ。一般にリストの更新、またはリストの走査でさ
え、リストのロックなしに安全に行うことはできない。
しかしながら、CSインストラクションは所定の制限的
な場合において、ロック/アンロック機能を実現し、競
合を解消するに足る十分の待行列を提供する。LIOの
態様でもF’IF’Oの態様でもそうである。ロック/
アンロック機能は任意の複合構成のSRHの更新用のイ
ンターロック機構として用いることができる。
な場合において、ロック/アンロック機能を実現し、競
合を解消するに足る十分の待行列を提供する。LIOの
態様でもF’IF’Oの態様でもそうである。ロック/
アンロック機能は任意の複合構成のSRHの更新用のイ
ンターロック機構として用いることができる。
ロック/アンロック機能はSRRに関連した「ヘッダ」
を用いる点に基礎を置く。ヘッダはSRRの状態を決定
する共通開始点であり(フリーのときも使用中のときも
)、また競合時に要求を待ち行列処理するにも用いられ
る。競合はWAITおよびPO8Tを用いて解消される
、一般的プログラミング手法では、SRHのロックに遭
遇したプログラムが[壁にマークを付ける」必要があり
、これでそのプログラムがウェイトしているECUのア
ドレスを表示する。「アンロック嬢プログラム」はこの
マークを見てECBをポスト(PO8T)する。これに
よってウェイト・プログラムの継続が許容される。多く
の場合、個々のSRRを用いるすべてのプログラムはL
FFO待ち行列スキームまたはFIFOスキームを用い
なければならず、2つは定まっていない。より複雑な待
ち行列が必要なときには5文献370XAにおいて、S
RR用の待ち行列を2つの方法のいずれかでゾロツクす
ることが提案されている。
を用いる点に基礎を置く。ヘッダはSRRの状態を決定
する共通開始点であり(フリーのときも使用中のときも
)、また競合時に要求を待ち行列処理するにも用いられ
る。競合はWAITおよびPO8Tを用いて解消される
、一般的プログラミング手法では、SRHのロックに遭
遇したプログラムが[壁にマークを付ける」必要があり
、これでそのプログラムがウェイトしているECUのア
ドレスを表示する。「アンロック嬢プログラム」はこの
マークを見てECBをポスト(PO8T)する。これに
よってウェイト・プログラムの継続が許容される。多く
の場合、個々のSRRを用いるすべてのプログラムはL
FFO待ち行列スキームまたはFIFOスキームを用い
なければならず、2つは定まっていない。より複雑な待
ち行列が必要なときには5文献370XAにおいて、S
RR用の待ち行列を2つの方法のいずれかでゾロツクす
ることが提案されている。
指摘したように、C8およびCDSインストラクション
は極めてうまく用いられてきた。これらインストラクシ
ョンによってユーザは共有データへのアクセスないし、
後続の処理のためのヘッダを得ることができる。他のユ
ーザがデータをアクセスしているときにアドレス位置へ
のアクセスを禁止する要請はCSインストラクションに
よって解消された。しかしながらC8およびCDSイン
ストラクションは単一ワードないしダブル・ワードにし
か適用できない。
は極めてうまく用いられてきた。これらインストラクシ
ョンによってユーザは共有データへのアクセスないし、
後続の処理のためのヘッダを得ることができる。他のユ
ーザがデータをアクセスしているときにアドレス位置へ
のアクセスを禁止する要請はCSインストラクションに
よって解消された。しかしながらC8およびCDSイン
ストラクションは単一ワードないしダブル・ワードにし
か適用できない。
これに対し、後述するとおり、この発明のCOMPAR
E AND 5WAP DISJOINT(C8
D)インストラクションおよびCOMPARE AN
D LOAD(CAL)インストラクションによれば
2つの隣接していないワード(または拡張板ではダブル
・ワード)を参照することができる。
E AND 5WAP DISJOINT(C8
D)インストラクションおよびCOMPARE AN
D LOAD(CAL)インストラクションによれば
2つの隣接していないワード(または拡張板ではダブル
・ワード)を参照することができる。
C9発明が解決しようとする課題
この発明の目的は、マルチ・プロセッシング・ユニット
ないしユーザがリストにアンロック状態で非同期にアク
セスできるようにすることである。
ないしユーザがリストにアンロック状態で非同期にアク
セスできるようにすることである。
またこの発明の他の目的はリストの一貫性を維持しなが
ら上述の動作を保障することである。
ら上述の動作を保障することである。
またこの発明の他の目的はそのようなリストの維持を効
率良く行えるようにすることである。
率良く行えるようにすることである。
またこの発明のさらに他の目的は上述の目的を実現でき
るコンピュータ・インストラクションを提供することで
ある。
るコンピュータ・インストラクションを提供することで
ある。
08課題を解決するだめの手段
この発明では以上の目的を達成するために、新たなコン
ピュータ・インストラクションすなわち「COMPAR
E AND 5WAP DISJOINTJおよ
び[cOMPARE AND LOADJを生成す
る新しい手順を採用する。このようなメモリ・アクセス
・シリアル化インストラクションを用いることにより、
任意の個数の付加および削除がこれらリストを無制約に
非同期に操作を行える。またこの発明では多重プロセッ
サが、リストの一貫性を維持したままでFIFOまたは
LIFO型の時系列リストのエレメントの付加や削除を
行える。用語「D I S JOI NTJ(解体)は
処理されている2つのワードが記憶領域で隣シ合ってい
ないことを意味する。1−I)fsJOINT」の同義
語は[DISCONTIGUOUSJである。
ピュータ・インストラクションすなわち「COMPAR
E AND 5WAP DISJOINTJおよ
び[cOMPARE AND LOADJを生成す
る新しい手順を採用する。このようなメモリ・アクセス
・シリアル化インストラクションを用いることにより、
任意の個数の付加および削除がこれらリストを無制約に
非同期に操作を行える。またこの発明では多重プロセッ
サが、リストの一貫性を維持したままでFIFOまたは
LIFO型の時系列リストのエレメントの付加や削除を
行える。用語「D I S JOI NTJ(解体)は
処理されている2つのワードが記憶領域で隣シ合ってい
ないことを意味する。1−I)fsJOINT」の同義
語は[DISCONTIGUOUSJである。
新たなCOMPARE AND LOAD(CAL
)インストラクションは第2レジスタのデータをアドレ
ス位置と比較し、比較結果が一致であれば第2位置から
の値を第2レジスタにフェッチする。このインストラク
ションの利点は、1の位置の内容が変わっていないこと
に応じて他の位置の値をフェッチできるという点である
。
)インストラクションは第2レジスタのデータをアドレ
ス位置と比較し、比較結果が一致であれば第2位置から
の値を第2レジスタにフェッチする。このインストラク
ションの利点は、1の位置の内容が変わっていないこと
に応じて他の位置の値をフェッチできるという点である
。
新たなCOMPARE AND 5WAP DI
SJOINT(CSD)によれば、COMPARE
AND 5WAP(C8)インストラクションやCO
MPARB DOIJBLE ANDSWAP(C
DS)インストラクションと違って、プログラムが2つ
の隣り合っていないワードやダブル・ワードを参照でき
る。すなわち2つの隣接していない記憶位置を同時に更
新させることができる。多くの実際的な場合では2つの
隣接しないエンティティを扱う必要があるので、これは
実益がある。
SJOINT(CSD)によれば、COMPARE
AND 5WAP(C8)インストラクションやCO
MPARB DOIJBLE ANDSWAP(C
DS)インストラクションと違って、プログラムが2つ
の隣り合っていないワードやダブル・ワードを参照でき
る。すなわち2つの隣接していない記憶位置を同時に更
新させることができる。多くの実際的な場合では2つの
隣接しないエンティティを扱う必要があるので、これは
実益がある。
E、実施例
まず2つの新しいインストラクションCOMPARE
AND LOAD%COMPARE AND
5WAP DISJOINTおよびその操作について
説明する。インストラクションは文献370XAのフォ
ーマットを用いて記載するが、その方法はより多くのア
プリケーションを有する。
AND LOAD%COMPARE AND
5WAP DISJOINTおよびその操作について
説明する。インストラクションは文献370XAのフォ
ーマットを用いて記載するが、その方法はより多くのア
プリケーションを有する。
COMPARE AND LOAD(CAL)R1
、D2(B2)、R3、D4(B4)0 8
12 1S 20 32 3647先の説明
は第1図およびCALフォーマントとの関連で示される
。
、D2(B2)、R3、D4(B4)0 8
12 1S 20 32 3647先の説明
は第1図およびCALフォーマントとの関連で示される
。
COMPARE AND LOADインストラクシ
ョンによって特定されるアドレス可能データはつぎのと
おりである。
ョンによって特定されるアドレス可能データはつぎのと
おりである。
2値ビット0−7のオペレーション・コードはデコード
されてCOMPARE AND LOADインスト
ラクションであることを示す。4つの異なるオペランド
はインストラクションの残りの部分のアドレス情報によ
り特定される。5つの2値ピノ)8−1j(R1によっ
て表示)はオペランド1を含む汎用レジスタを特定する
。2値ビット12−15(R3によって表示)は処理さ
れたデータまたはオペランド3を含む汎用レジスタを特
定する。2値ピツ)16−19(B2によって表示)は
、所定のベース・アドレス情報を含む汎用レジスタを特
定する。インストラクションのピッ)20−21(B2
によって表示)をこのベース・アドレス情報に付加して
共有記憶のアドレス位置を特定する。2値ビット32−
35(B4によって表示)も所定のベース・アドレス情
報を含む汎用レジスタを特定する。ビット36−47(
B4によって表示)をこのベース・アドレス情報に付加
して共有記憶のアドレス位置を特定する。
されてCOMPARE AND LOADインスト
ラクションであることを示す。4つの異なるオペランド
はインストラクションの残りの部分のアドレス情報によ
り特定される。5つの2値ピノ)8−1j(R1によっ
て表示)はオペランド1を含む汎用レジスタを特定する
。2値ビット12−15(R3によって表示)は処理さ
れたデータまたはオペランド3を含む汎用レジスタを特
定する。2値ピツ)16−19(B2によって表示)は
、所定のベース・アドレス情報を含む汎用レジスタを特
定する。インストラクションのピッ)20−21(B2
によって表示)をこのベース・アドレス情報に付加して
共有記憶のアドレス位置を特定する。2値ビット32−
35(B4によって表示)も所定のベース・アドレス情
報を含む汎用レジスタを特定する。ビット36−47(
B4によって表示)をこのベース・アドレス情報に付加
して共有記憶のアドレス位置を特定する。
第1図のブロック30において、COMPAREVAL
UEはオペランド1(R1)、COMPARE LOC
ATIONはオペランド2(B2(B2))、FETC
HVALUEはオペランド3 (R3)そしてFETC
HLOCATIONはオペランド4(B4(B4))で
ある。待ち行列操作と関連して検討するように、2つの
不連続ないし非隣接のエレメントはたとえばリストのヘ
ッドおよびリスト中の他のエレメントである。
UEはオペランド1(R1)、COMPARE LOC
ATIONはオペランド2(B2(B2))、FETC
HVALUEはオペランド3 (R3)そしてFETC
HLOCATIONはオペランド4(B4(B4))で
ある。待ち行列操作と関連して検討するように、2つの
不連続ないし非隣接のエレメントはたとえばリストのヘ
ッドおよびリスト中の他のエレメントである。
記憶領域の第2オペランド位置のフル・ワードD2(B
2)は第1図のブロック32に示すようにR1の第1オ
ペランドと比較される。両者が等しければ、プログラム
が第3オペランドすなわち記憶領域中の第4オペランド
D4(B4)によって定められる位置のフル・ワードを
レジスタ中へとフェッチする。これはブロック34に示
すようにベース/ディスプレースメントとして行う。ブ
ロック40に示すように条件コードCCはゼロに設定さ
れる。
2)は第1図のブロック32に示すようにR1の第1オ
ペランドと比較される。両者が等しければ、プログラム
が第3オペランドすなわち記憶領域中の第4オペランド
D4(B4)によって定められる位置のフル・ワードを
レジスタ中へとフェッチする。これはブロック34に示
すようにベース/ディスプレースメントとして行う。ブ
ロック40に示すように条件コードCCはゼロに設定さ
れる。
判別ブロック62では、第2オペランド位置のフル・ワ
ードが第1オペランドと等しくなければ。
ードが第1オペランドと等しくなければ。
第1オペランドは第2オペランドと等しくされ、第3オ
ペランドは不変とする。ブロック5乙に示すとおりであ
る。第4オペランドは使用されず、条件コード(CC)
は1に設定される。ブロック38に示すとおりである。
ペランドは不変とする。ブロック5乙に示すとおりであ
る。第4オペランドは使用されず、条件コード(CC)
は1に設定される。ブロック38に示すとおりである。
R1およびR3は各々任意の一般レジスタ手段を表わす
。第2および第4オペランドはワード境界で指定された
記憶領域中のフル・ワードである。
。第2および第4オペランドはワード境界で指定された
記憶領域中のフル・ワードである。
第2オペランドが第1オペランドに等しくないなら、ア
クセス例外処理は第4オペランドに対しては認識されな
い(換言すれば第4オペランドに対して参照がなされな
い)。
クセス例外処理は第4オペランドに対しては認識されな
い(換言すれば第4オペランドに対して参照がなされな
い)。
記憶領域の第2オペランドD2(B2)がR1中の第1
オペランドと等しいとき、他のCUPは第2オペランド
がフェッチされてから第4オペランドがフェッチされる
までの間第2オペランドにアクセスすることができない
。この種のステップを通常記憶アクセス・シリアル化と
呼ぶ。
オペランドと等しいとき、他のCUPは第2オペランド
がフェッチされてから第4オペランドがフェッチされる
までの間第2オペランドにアクセスすることができない
。この種のステップを通常記憶アクセス・シリアル化と
呼ぶ。
各オペランドに関するシリアル化はステップ62におい
て、値が当該位置からフェッチされる前および処理が完
了したのちに実行される。CPUの操作は当該CPUの
先行する記憶アクセスが終了しくチャネルや他のCPU
が監視する)、さらに第2オペランドがフェッチされる
まで遅延される。第1オペランドと第2オペランドとの
比較結果が等しいというものであれば、第4オペランド
(B4)84がフェッチされる。当該CPUは後続のイ
ンストラクションやそのオペランドを、CALインスト
ラクションの実行が完了するまでアクセスしない。
て、値が当該位置からフェッチされる前および処理が完
了したのちに実行される。CPUの操作は当該CPUの
先行する記憶アクセスが終了しくチャネルや他のCPU
が監視する)、さらに第2オペランドがフェッチされる
まで遅延される。第1オペランドと第2オペランドとの
比較結果が等しいというものであれば、第4オペランド
(B4)84がフェッチされる。当該CPUは後続のイ
ンストラクションやそのオペランドを、CALインスト
ラクションの実行が完了するまでアクセスしない。
条件コード(CC)結果:
0 = 第1および第2オペランドが等しく、第6オペ
ランドを第4オペランドで交換した。
ランドを第4オペランドで交換した。
1 :第1および第2オペランドが等しくない。
第1オペランドを第2オペランドで交換した。第3およ
び第4オペランドは不変。
び第4オペランドは不変。
2 : 1・
3 : 1 舎
プログラム例外処理
アクセス(オペランド2および4をフェッチして記憶)
オペレーション
COMPARE AND 5WAP DISJO
INT(C8D)CSOR1、B2(B2)、R3、B
4(B4)第2図において、C8D処理は全般的にブロ
ック50で開始され、第1および第2オペランドを比較
し、つぎに所定の条件下で第3および第4オペランドを
比較する。第1オペランドR1および記憶領域の第2オ
ペランドD2(B2)は判別ブロック52において比較
される。これらが等しければR3中の第3オペランドお
よび記憶領域の第4オペランドD4(B4)が判別ブロ
ック58において比較される。さらにこれらが等しけれ
ば、R1+1オペランド(Replace Valu
e 1)が第2オペランド位置(Location
1)にストアされ、R3+1オペランド(Rapla
ce Value2)が第4オペランド位置にストアさ
れる。これはブロック64に示すとおりである。条件コ
ードCCはブロック66に示すようにゼロに設定される
。
INT(C8D)CSOR1、B2(B2)、R3、B
4(B4)第2図において、C8D処理は全般的にブロ
ック50で開始され、第1および第2オペランドを比較
し、つぎに所定の条件下で第3および第4オペランドを
比較する。第1オペランドR1および記憶領域の第2オ
ペランドD2(B2)は判別ブロック52において比較
される。これらが等しければR3中の第3オペランドお
よび記憶領域の第4オペランドD4(B4)が判別ブロ
ック58において比較される。さらにこれらが等しけれ
ば、R1+1オペランド(Replace Valu
e 1)が第2オペランド位置(Location
1)にストアされ、R3+1オペランド(Rapla
ce Value2)が第4オペランド位置にストアさ
れる。これはブロック64に示すとおりである。条件コ
ードCCはブロック66に示すようにゼロに設定される
。
第1オペランドR1および第2オペランドD2(B2)
が等しくなければ、ブロック54において第2オペラン
ドを第1オペランドに転送する。
が等しくなければ、ブロック54において第2オペラン
ドを第1オペランドに転送する。
第1および第2オペランドが等しく、かつ第6および第
4オペランドが等しくなければ(ブロック58)、ブロ
ック60に示すように第4オペランドが等6オベランド
に転送される。条件コードCCはブロック62に示すよ
うに2に設定される。
4オペランドが等しくなければ(ブロック58)、ブロ
ック60に示すように第4オペランドが等6オベランド
に転送される。条件コードCCはブロック62に示すよ
うに2に設定される。
R1およびR3は各々一般レジスタの奇偶ベアを表わし
、偶数番のレジスタを指示する。R1+1およびR3+
1はベアの奇数番のレジスタを表わす。第2オペランド
D2 (B 2 )および第4オペランドD4(B4)
は記憶領域のワードである。
、偶数番のレジスタを指示する。R1+1およびR3+
1はベアの奇数番のレジスタを表わす。第2オペランド
D2 (B 2 )および第4オペランドD4(B4)
は記憶領域のワードである。
第1および第2オペランドが等しくないという比較結果
の場合、第2オペランドは不変であり、第4オペランド
はアクセスされない。第3および第4オペランドが等し
くないという比較結果の場合、第2および第4オペラン
ドは不変である。第1および第2オペランドが等しくな
いなら、第4オペランドに対するアクセス例外処理は認
識されない。
の場合、第2オペランドは不変であり、第4オペランド
はアクセスされない。第3および第4オペランドが等し
くないという比較結果の場合、第2および第4オペラン
ドは不変である。第1および第2オペランドが等しくな
いなら、第4オペランドに対するアクセス例外処理は認
識されない。
ブロック52および58での双方の比較結果が等しいこ
とを示すときには、他のCPUが第2オペランド位置ま
たは第4オペランド位置にアクセスするが、対応するオ
ペランドが比較用にフェッチされてから、記憶されるま
での間、許されない。
とを示すときには、他のCPUが第2オペランド位置ま
たは第4オペランド位置にアクセスするが、対応するオ
ペランドが比較用にフェッチされてから、記憶されるま
での間、許されない。
各オペランド位置に関するシリアル化は各オペランドが
ブロック52および58でフェッチされるまえに実行さ
れ、またブロック68で処理が終了したのち再び実行さ
れる。CPHの記憶領域への先行するアクセスがすべて
完了しくチャネルや他のCPUが監視する)、第2オペ
ランドがフェッチされるまで(ブロック52)、CUP
操作が遅延される。第1および第2オペランドが等しけ
れば、第4オペランドがフェッチされる(ブロック58
)。CDSインストラクションの実行が完了するまでC
PUは後続のインストラクションやそのオペランドをア
クセスしない。結果としての値があったとしてもそれを
供給するのも同じである(これはチャネルや他のCPU
に監視される。
ブロック52および58でフェッチされるまえに実行さ
れ、またブロック68で処理が終了したのち再び実行さ
れる。CPHの記憶領域への先行するアクセスがすべて
完了しくチャネルや他のCPUが監視する)、第2オペ
ランドがフェッチされるまで(ブロック52)、CUP
操作が遅延される。第1および第2オペランドが等しけ
れば、第4オペランドがフェッチされる(ブロック58
)。CDSインストラクションの実行が完了するまでC
PUは後続のインストラクションやそのオペランドをア
クセスしない。結果としての値があったとしてもそれを
供給するのも同じである(これはチャネルや他のCPU
に監視される。
第2および第4オペランドはワード境界に指示されてい
る。R1およびR3フィールドは偶数レジスタを指示す
る。そうでなければ指定例外を認識する。
る。R1およびR3フィールドは偶数レジスタを指示す
る。そうでなければ指定例外を認識する。
CCa果:
0 : 第1および第2オペランドが等しく、かつ第3
および第4オペランドが等しい。第2および第4オペラ
ンドが置き換えられている。
および第4オペランドが等しい。第2および第4オペラ
ンドが置き換えられている。
1 : 第1および第2オペランドは等しくない。
第1オペランドは第2オペランドで置き換えられている
。第3および第4オペランドは不変。
。第3および第4オペランドは不変。
2 : 第1および第2オペランドは等しいが、第3お
よび第4オペランドは等しくない。第3オペランドは第
4オペランドで置き換えられている。第1および第2オ
ペランドは不変。
よび第4オペランドは等しくない。第3オペランドは第
4オペランドで置き換えられている。第1および第2オ
ペランドは不変。
3 : ・ ・ ・
プログラム例外処理
アクセス(オペランド2および4をフェッチして配憶)
指定(5pecification)
オペレーション
さてつぎに以上のインストラクションを用いてどのよう
に時系列リストないし待ち行列を操作するかについて説
明する。待ち行列はヘッド・ポインタおよびテイル・ポ
インタを有するものとして定義される、エレメントは待
ち行列のテイルに付加され、ヘッドから取シ出される。
に時系列リストないし待ち行列を操作するかについて説
明する。待ち行列はヘッド・ポインタおよびテイル・ポ
インタを有するものとして定義される、エレメントは待
ち行列のテイルに付加され、ヘッドから取シ出される。
第5図は二重ヘッド待ち行列からエレメントを取り出す
場合を示す。既述のとおり、待ち行列はQ T(FA
DおよびQ TAILを有する。ここでQ HEA
Dは待ち行列中の最も新しい要素をポイントし、QTA
ILは待ち行列中の最も古い要素をポイントする。実線
は操作前のリストを示す。図示の待チ行列でエレメント
がA、B%Cの順で付加され、Aが削除されるとすると
、QHEADポインタは破線で示すようにニレメン)B
をポイントしなければならない。
場合を示す。既述のとおり、待ち行列はQ T(FA
DおよびQ TAILを有する。ここでQ HEA
Dは待ち行列中の最も新しい要素をポイントし、QTA
ILは待ち行列中の最も古い要素をポイントする。実線
は操作前のリストを示す。図示の待チ行列でエレメント
がA、B%Cの順で付加され、Aが削除されるとすると
、QHEADポインタは破線で示すようにニレメン)B
をポイントしなければならない。
この発明の方法は第4A図および第4B図ならびに表H
のインストラクションの一部で示され、これは待ち行列
解除に関する。
のインストラクションの一部で示され、これは待ち行列
解除に関する。
待ち行列はヘッドおよびティル・ボイ/りを有するもの
として定義されている。エレメントは待ち行列のテイル
に付加され、ヘッドから取り出される。
として定義されている。エレメントは待ち行列のテイル
に付加され、ヘッドから取り出される。
この発明によれば、何ら修正を加えることなく、Q
HEADのポインタの置き換えおよびニレメン)Aの次
のポインタの置き換えが可能になる。
HEADのポインタの置き換えおよびニレメン)Aの次
のポインタの置き換えが可能になる。
この結果、リストの操作の間にリストの一貫性が保持さ
れる。
れる。
リスト操作
つぎに、多重プロセスがエレメントを同時に待ち行列解
除および待ち行列挿入でき、しかもイベント制御ブロッ
ク(ECB)でロックしたり待ち状態をとったシする必
要がなく、゛さらに待ち行列が改ざんされないことを保
障することについて説明しよう。これはCALおよびC
8Dインストラクシヨンをプログラムに挿入することに
よって達成される。
除および待ち行列挿入でき、しかもイベント制御ブロッ
ク(ECB)でロックしたり待ち状態をとったシする必
要がなく、゛さらに待ち行列が改ざんされないことを保
障することについて説明しよう。これはCALおよびC
8Dインストラクシヨンをプログラムに挿入することに
よって達成される。
待ち行列はヘッドおよびティル・ポインタを有するもの
として定義される。エレメントは待ち行列のテイルに付
加され、ヘッドから取り出される。
として定義される。エレメントは待ち行列のテイルに付
加され、ヘッドから取り出される。
機能的に定義は第6図および第4図の二重ヘッド待ち行
列と同じである。以下のインストラクションの説明につ
いては文献370XAを参照されたい。列の説明はすで
に表1について行った。
列と同じである。以下のインストラクションの説明につ
いては文献370XAを参照されたい。列の説明はすで
に表1について行った。
表
以下の宣言を仮定する
QUEVE DS
QHEAD DC
QTA I L DC
*
ELEMENT
NEXT DS
ELEMENTL EQU
*
NEWELF:M DS
5ECT
F
A(0)
A(0)
*−ELEMENT
CL(ELEMENTL)
待チ行列のヘッドへのポインタ
待ち行列のテイルへのポインタ
待ち行列エレメント
待ち行列のつぎのエレメントへのポインタ待ち行列に挿
入する新エレメント 表 2 (続) 1゜ 2゜ QUEUEからのエレメントの解除(第4図参照)DE
QUEUE L R2,QHEADDEQ
I LTRR2,R2 BZ DEQEXrT Z 18、 DEQEXIT C TR NZ LR LR DS C LR・ LR C C DS 4、DEQI R4,R4 EQ5 R5,R4 R3,R2 R2,R4,QUEUE 4、DEQl DEQEXIT Ft5. R4 R5,R5 4、DEQl 2、DEQ2 H ヘッドへのポインタを得る 何かあるか?(転送かつテスト) ノー、そのまま QHEADを次のエレメントにセット QHEAD変化で、再試行 最初のエレメントが唯一のエレメントカマノー、C8D
で待ち行列解除 イエス、R5=14二〇 テイルはヘッド・ポインタと等しくなければならない待
ち行列ポインタをゼロに置き換える 失敗したら、再試行 成功したら、それを表示して終了 NEXTフィールドを用いてQHEADを置き換えるN
EXTフィールドをゼロに置き換えるインクを更新する R2=NEXT、再試行 R4=NEXT 再試行 待ち行列解除なら、R2=ELEMENTそうでないな
らR2−0表 2 (続) QUEUF:へのニレメン ENQUE LA ENQ I LM TR NZ LR DS C ENQ2 LR LR LR トの挿入(第6図参照) R5,NEWELEM R2,R5,QUEUE R2、R2 ENQ 2 R4%R5 R2,R4、QUEUE 4、ENQI ENQ EX I T R2,R3 R3,R5 R4,R4 13゜ NZ ENQ 1 14 ENQEXIT DSH 新エレメントのアドレス金得る QHEADおよびQTAILポインタ全得るQUEUE
に何かあるか イエス、通常の待ち行列挿入 ノー、QHEADおよびQTAILは新ニレメン)fポ
イントすべきポインタを更新 失敗したら、再試行 成功したら、終了 QUEUEのテイルのポインタ 新エレメントのポインタ 現行テイルのエレメントがゼロの次ポインタヲ有するポ
インタを更新 失敗したら再試行 第4A図において、プログラムDEQUEUEは二重ヘ
ッドF’IFOリストからこの発明にしたがってエレメ
ントを除去する。プログラムの第1のステップはブロッ
ク231に示すように、転送すべきものがあれば自動的
にエレメントをQHEADおよびQ TAILに転送
することである。
入する新エレメント 表 2 (続) 1゜ 2゜ QUEUEからのエレメントの解除(第4図参照)DE
QUEUE L R2,QHEADDEQ
I LTRR2,R2 BZ DEQEXrT Z 18、 DEQEXIT C TR NZ LR LR DS C LR・ LR C C DS 4、DEQI R4,R4 EQ5 R5,R4 R3,R2 R2,R4,QUEUE 4、DEQl DEQEXIT Ft5. R4 R5,R5 4、DEQl 2、DEQ2 H ヘッドへのポインタを得る 何かあるか?(転送かつテスト) ノー、そのまま QHEADを次のエレメントにセット QHEAD変化で、再試行 最初のエレメントが唯一のエレメントカマノー、C8D
で待ち行列解除 イエス、R5=14二〇 テイルはヘッド・ポインタと等しくなければならない待
ち行列ポインタをゼロに置き換える 失敗したら、再試行 成功したら、それを表示して終了 NEXTフィールドを用いてQHEADを置き換えるN
EXTフィールドをゼロに置き換えるインクを更新する R2=NEXT、再試行 R4=NEXT 再試行 待ち行列解除なら、R2=ELEMENTそうでないな
らR2−0表 2 (続) QUEUF:へのニレメン ENQUE LA ENQ I LM TR NZ LR DS C ENQ2 LR LR LR トの挿入(第6図参照) R5,NEWELEM R2,R5,QUEUE R2、R2 ENQ 2 R4%R5 R2,R4、QUEUE 4、ENQI ENQ EX I T R2,R3 R3,R5 R4,R4 13゜ NZ ENQ 1 14 ENQEXIT DSH 新エレメントのアドレス金得る QHEADおよびQTAILポインタ全得るQUEUE
に何かあるか イエス、通常の待ち行列挿入 ノー、QHEADおよびQTAILは新ニレメン)fポ
イントすべきポインタを更新 失敗したら、再試行 成功したら、終了 QUEUEのテイルのポインタ 新エレメントのポインタ 現行テイルのエレメントがゼロの次ポインタヲ有するポ
インタを更新 失敗したら再試行 第4A図において、プログラムDEQUEUEは二重ヘ
ッドF’IFOリストからこの発明にしたがってエレメ
ントを除去する。プログラムの第1のステップはブロッ
ク231に示すように、転送すべきものがあれば自動的
にエレメントをQHEADおよびQ TAILに転送
することである。
プログラムはブロック232に進んで待ち行列が空かど
うかを判別する。答えがイエスであればブロック233
に示すようにDEQUEUEプログラムを終了する。答
えがノーであれば、CoMPARE AND LO
ADルーチンをブロック234で用いて最も い作業エ
レメントからっぎのポインタの値をフェッチする。この
間Q HEADが変わらないようにする。
うかを判別する。答えがイエスであればブロック233
に示すようにDEQUEUEプログラムを終了する。答
えがノーであれば、CoMPARE AND LO
ADルーチンをブロック234で用いて最も い作業エ
レメントからっぎのポインタの値をフェッチする。この
間Q HEADが変わらないようにする。
プロセスのつぎのステップはブロック235においてQ
HEADポインタが変わったがどうがを判別するこ
とである。答えがイエスであれば、ルーチンは判別ブロ
ック232に戻ってっぎのエレメントの待ち行列解除を
試みる。
HEADポインタが変わったがどうがを判別するこ
とである。答えがイエスであれば、ルーチンは判別ブロ
ック232に戻ってっぎのエレメントの待ち行列解除を
試みる。
CALを用いて、QHEADによってアドレスされるチ
エインの第1のエレメントからつぎのポインタの値をフ
ェッチする。この操作は、同じCALや待ち行列解除操
作を実行する他のプロセスによってエレメントが除去さ
れていないことを保障しながら実行される。Q )(
EADが変化したことが判別されると(これは何かがリ
ストからエレメントを除去したことを示す〕、上述の次
検索位置をプログラムが再フエツチしなければならない
。実際Q HEADが変化しなかったなら、プログラ
ムは有効な次ポインタ位置を保持している。
エインの第1のエレメントからつぎのポインタの値をフ
ェッチする。この操作は、同じCALや待ち行列解除操
作を実行する他のプロセスによってエレメントが除去さ
れていないことを保障しながら実行される。Q )(
EADが変化したことが判別されると(これは何かがリ
ストからエレメントを除去したことを示す〕、上述の次
検索位置をプログラムが再フエツチしなければならない
。実際Q HEADが変化しなかったなら、プログラ
ムは有効な次ポインタ位置を保持している。
処理のつぎのステップはブロック234によってフェッ
チされたつぎのポインタをフェッチすることである。つ
ぎのポインタがゼロでなかったら、1個以上のエレメン
トが存在しくブロック236)、プログラムはQ H
EAD用のリプレースメント値をブロック234でフェ
ッチしたつぎのポインタに設定する。ブロック237に
おいてプログラムはQ TAIL値をQ HEAD
と等しい値に設定する。Q HEADおよびQ T
AILが変化しないようにしながら(自動的に)、Q
HEADおよびQ TAILをゼロに置き換える。
チされたつぎのポインタをフェッチすることである。つ
ぎのポインタがゼロでなかったら、1個以上のエレメン
トが存在しくブロック236)、プログラムはQ H
EAD用のリプレースメント値をブロック234でフェ
ッチしたつぎのポインタに設定する。ブロック237に
おいてプログラムはQ TAIL値をQ HEAD
と等しい値に設定する。Q HEADおよびQ T
AILが変化しないようにしながら(自動的に)、Q
HEADおよびQ TAILをゼロに置き換える。
他方Q HEADまたはQ TAILが変化したな
ら、プログラムはブロック232に戻り、QHEADを
再びテストする。Q HEADおよびQ TAIL
が変化しなかったなら、プログラムはゼロまたは待ち行
列解除したエレメントのアドレスを伴って終了する(ブ
ロック243)。
ら、プログラムはブロック232に戻り、QHEADを
再びテストする。Q HEADおよびQ TAIL
が変化しなかったなら、プログラムはゼロまたは待ち行
列解除したエレメントのアドレスを伴って終了する(ブ
ロック243)。
第4B図のブロック240では、Q HEADおよび
次のフィールドが変化しないことを確かめながら、プロ
グラムがQ 、HEADの値を待ち行列中の2番目に古
いエレメントと交換し、つぎのポインタの値をゼロに設
定する。図に示すように、これはCOMPARE A
ND 5WAP DrSJOINT(C8D)イン
ストラクションによって行う。判別ブロック241にお
いて、Q HEADポインタが変化したかどうかが判
別される。
次のフィールドが変化しないことを確かめながら、プロ
グラムがQ 、HEADの値を待ち行列中の2番目に古
いエレメントと交換し、つぎのポインタの値をゼロに設
定する。図に示すように、これはCOMPARE A
ND 5WAP DrSJOINT(C8D)イン
ストラクションによって行う。判別ブロック241にお
いて、Q HEADポインタが変化したかどうかが判
別される。
ポインタが変化していればプログラムは判別ブロック2
32に戻って待ち行列が空かどうかの判別を行う。QH
EADポインタが変わっていなければプログラムは判別
ブロック242に進む。待ち行列解除ルーチンはブロッ
ク243で終了する。
32に戻って待ち行列が空かどうかの判別を行う。QH
EADポインタが変わっていなければプログラムは判別
ブロック242に進む。待ち行列解除ルーチンはブロッ
ク243で終了する。
このように終了して、ゼロまたは待ち行列解除エレメン
トのアドレスを得る。
トのアドレスを得る。
判別ブロック236において、待ち行列中にそれまでに
たった1つのエレメントしかな(、かつ転送時からQ
HEADおよびQ TAILが変化していないなら
、両者をゼロにセットする。プログラムはつぎに判別ブ
ロック238に進みQ)IEADおよびQ TAIL
が変化したかどうかを判別する。Q HEADおよび
Q TAILが変化していればプロセスはステップ2
32に戻り待ち行列が空かと5か判別する。しかしQ
HEADおよびQ TAILが変化していないなら
、プログラムは終了して待ち行列解除されたエレメント
のアドレスを生じる。
たった1つのエレメントしかな(、かつ転送時からQ
HEADおよびQ TAILが変化していないなら
、両者をゼロにセットする。プログラムはつぎに判別ブ
ロック238に進みQ)IEADおよびQ TAIL
が変化したかどうかを判別する。Q HEADおよび
Q TAILが変化していればプロセスはステップ2
32に戻り待ち行列が空かと5か判別する。しかしQ
HEADおよびQ TAILが変化していないなら
、プログラムは終了して待ち行列解除されたエレメント
のアドレスを生じる。
C8Dを用いると、DEQUEUEプログラムは、Q
HEADの値とチエインの第1のエレメントのつぎの
ポインタ位置の値とを、両者の値が変化しないことを確
かめながら交換する。つぎにC8Dは、QHEADおよ
びつぎのポインタが変化しないことを確かめながら、こ
れらの値をチエインの第2のエレメントのアドレスおよ
びゼロとそれぞれ交換する。
HEADの値とチエインの第1のエレメントのつぎの
ポインタ位置の値とを、両者の値が変化しないことを確
かめながら交換する。つぎにC8Dは、QHEADおよ
びつぎのポインタが変化しないことを確かめながら、こ
れらの値をチエインの第2のエレメントのアドレスおよ
びゼロとそれぞれ交換する。
Q HEADポインタが変化したか、またはつぎのポ
インタが変化したなら、これは、他のエレメントがチエ
インに付加されたか、あるいは、CALおよびC8Dの
間に他の何者かが待ち行列からエレメントを除去したこ
とを示す。この時点で、プログラムは先に示したよ5に
CALインストラクションを再実行する。ポインタがい
ずれも変わらなかったなら、待ち行列の第1のエレメン
トが除去されて処理が成功する。
インタが変化したなら、これは、他のエレメントがチエ
インに付加されたか、あるいは、CALおよびC8Dの
間に他の何者かが待ち行列からエレメントを除去したこ
とを示す。この時点で、プログラムは先に示したよ5に
CALインストラクションを再実行する。ポインタがい
ずれも変わらなかったなら、待ち行列の第1のエレメン
トが除去されて処理が成功する。
第5図は二重ヘッド待ち行列へのエレメントの付加を示
す。待ち行列はQ HEADおよびQ−TAILを有
するものとして定義される。ここでQ HEADは待
ち行列中の最も古いエレメントをポイントし、Q T
AILは待ち行列中の最も新しいエレメントをポイント
する。図示の待ち行列においてA1 B、Cの順でエレ
メントが付加されるとすると、Q TAILポインタ
はエレメントNをポイントするよう変わらなければなら
ず、またエレメントCからのポインタ(Cの次のポイン
タ)もニレメン)Nをポイントするように変わらなけれ
ばならない。
す。待ち行列はQ HEADおよびQ−TAILを有
するものとして定義される。ここでQ HEADは待
ち行列中の最も古いエレメントをポイントし、Q T
AILは待ち行列中の最も新しいエレメントをポイント
する。図示の待ち行列においてA1 B、Cの順でエレ
メントが付加されるとすると、Q TAILポインタ
はエレメントNをポイントするよう変わらなければなら
ず、またエレメントCからのポインタ(Cの次のポイン
タ)もニレメン)Nをポイントするように変わらなけれ
ばならない。
第6図はこの発明の待ち行列挿入を示すフローチャート
である。この場合の事例は第5図に示すように二重ヘッ
ドFIFOリストにエレメントを付加するというもので
ある。第6図のフローチャートに関連するインストラク
ションの詳細なセットは表2の第2の部分に示しである
。
である。この場合の事例は第5図に示すように二重ヘッ
ドFIFOリストにエレメントを付加するというもので
ある。第6図のフローチャートに関連するインストラク
ションの詳細なセットは表2の第2の部分に示しである
。
ブロック100に示すように、QHEADおよびQ
TAILポインタは自動的にフェッチされる。判別ブロ
ック102ではQ HEADをテストして待ち行列が
空かどうかを判別する。待ち行列が空でないならばプロ
グラムはブロック106に進み、新しいエレメントが非
空のリストに付加される。Q TAI・しのアドレス
および新エレメントのアドレスが確立される。何らかの
レジスタ手段を用いて最後のエレメントが待ち行列中に
に最後のエレメントとしてとどまっているかどうかを確
かめる。プログラムはつぎに判別ブロック108に進み
、ここでQ TAILまたはつぎのポインタが変化し
ているかどうかを判別する。両者が変化していなければ
、プログラムは待ち行列挿入ルーチンから出る。Q
TAILまたはつぎのポインタが変化しているならば、
プログラムはブロック100に戻り、その時点で再び開
始する。
TAILポインタは自動的にフェッチされる。判別ブロ
ック102ではQ HEADをテストして待ち行列が
空かどうかを判別する。待ち行列が空でないならばプロ
グラムはブロック106に進み、新しいエレメントが非
空のリストに付加される。Q TAI・しのアドレス
および新エレメントのアドレスが確立される。何らかの
レジスタ手段を用いて最後のエレメントが待ち行列中に
に最後のエレメントとしてとどまっているかどうかを確
かめる。プログラムはつぎに判別ブロック108に進み
、ここでQ TAILまたはつぎのポインタが変化し
ているかどうかを判別する。両者が変化していなければ
、プログラムは待ち行列挿入ルーチンから出る。Q
TAILまたはつぎのポインタが変化しているならば、
プログラムはブロック100に戻り、その時点で再び開
始する。
Q TAILもつぎのポインタも変わっていないなら
、待ち行列に新エレメントが成功裡に付加されたことで
あり、プログラムはブロック112に示すように待ち行
列挿入から出る。
、待ち行列に新エレメントが成功裡に付加されたことで
あり、プログラムはブロック112に示すように待ち行
列挿入から出る。
ブロック108の判別結果が、Q TAILまたハ最
後のエレメントのつぎのポインタがフェッチ以後に変化
していることを示すなら、プロセスはブロック100で
再び開始されなければならない。答えがノーであれば、
待ち行列挿入処理は終了してプログラムはブロック11
2で終わる。
後のエレメントのつぎのポインタがフェッチ以後に変化
していることを示すなら、プロセスはブロック100で
再び開始されなければならない。答えがノーであれば、
待ち行列挿入処理は終了してプログラムはブロック11
2で終わる。
ブロック102において、待ち行列が空であれば、プロ
グラムはブロック104に進む。新エレメントを付加し
、QHEADおよびQ TAILポインタの双方が新
エレメントをポイントする(ブロック104)。フロー
チャートに示すように自動的に実行される。
グラムはブロック104に進む。新エレメントを付加し
、QHEADおよびQ TAILポインタの双方が新
エレメントをポイントする(ブロック104)。フロー
チャートに示すように自動的に実行される。
ブロック110において、QHBADおよびQ TA
ILが、新エレメントをポイントしたあとで、変化した
かどうかを判別する。判別ブロック110で示すように
それらが変化していないならプログラムは待ち行列挿入
ルーチンから出る。
ILが、新エレメントをポイントしたあとで、変化した
かどうかを判別する。判別ブロック110で示すように
それらが変化していないならプログラムは待ち行列挿入
ルーチンから出る。
Q TAILまたは最後のエレメントのつぎのポイン
タが変化しているなら、プログラムはブロック100に
戻り、手続を再開する。
タが変化しているなら、プログラムはブロック100に
戻り、手続を再開する。
繰り返していえば、ブロック106f′i、C5D(ン
ストラクションを表わす。Q TAILがエレメント
Cをポイントする間、C8Dインストラクシヨンがレジ
スターオペランド1をQfitオペランド5と比較する
ことが保障される。両者が等しければプログラムは位置
オペランド3の値をレジスターオペランド2の値で置き
換える。両者が等しくなければ、レジスタ・オペランド
1は位置オペランド3の値を取って条件コードを設定す
る。
ストラクションを表わす。Q TAILがエレメント
Cをポイントする間、C8Dインストラクシヨンがレジ
スターオペランド1をQfitオペランド5と比較する
ことが保障される。両者が等しければプログラムは位置
オペランド3の値をレジスターオペランド2の値で置き
換える。両者が等しくなければ、レジスタ・オペランド
1は位置オペランド3の値を取って条件コードを設定す
る。
C8DインストラクシヨンがC8やその改良版であるC
OMPARE DOUBLE ANDSWAPイン
ストラクションとどこが違うか留意されたい。C8およ
びCDSは1つの位置を比較して置き換える。1つの位
置のフル・ワードないしダブル鹸ワードについてである
。C8Dおよびその変種のCD5Dは条件付きで2つの
隣り合わないエレメントを置き換える。2つの位置のフ
ルーワードないしダブル・ワードについてである。
OMPARE DOUBLE ANDSWAPイン
ストラクションとどこが違うか留意されたい。C8およ
びCDSは1つの位置を比較して置き換える。1つの位
置のフル・ワードないしダブル鹸ワードについてである
。C8Dおよびその変種のCD5Dは条件付きで2つの
隣り合わないエレメントを置き換える。2つの位置のフ
ルーワードないしダブル・ワードについてである。
CSはたった1つの記憶位置を比較してそれを条件付き
で置き換えるが、C8Dは1つの位置を比較し、最初の
位置の比較結果が一致であることを条件に第2の位置を
比較する。2つの比較がともに一致であれば、双方の位
置を置き換える。これによって、待ち行列またはスタッ
クおよびリストの最初のエレメントの双方を同時に操作
でき、しかもリストの一貫性を維持できる(リストの一
貫性がないとはたとえばエレメントが損失してしまうと
いうことである)。
で置き換えるが、C8Dは1つの位置を比較し、最初の
位置の比較結果が一致であることを条件に第2の位置を
比較する。2つの比較がともに一致であれば、双方の位
置を置き換える。これによって、待ち行列またはスタッ
クおよびリストの最初のエレメントの双方を同時に操作
でき、しかもリストの一貫性を維持できる(リストの一
貫性がないとはたとえばエレメントが損失してしまうと
いうことである)。
スタック(LIFOリスト)のリスト操作第7図はスタ
ックからのエレメントの除去を示す。この場合処理はエ
レメント人をスタックから除去する。
ックからのエレメントの除去を示す。この場合処理はエ
レメント人をスタックから除去する。
スタックはTo 5(TOP of 5tack po
inter)を有するものとして定義される。
inter)を有するものとして定義される。
To8に示されるスタックおよびエレメントA1B>よ
びC(C,B、Aの順でスタックにブツシュされる)を
考えると、スタックから第1のエレメントを除去(ない
しポツプ)するにはスタックのトップの値をBすなわち
スタックの第2のエレメントのアドレスで置き換えてA
のアドレスの値を戻す必要がある。
びC(C,B、Aの順でスタックにブツシュされる)を
考えると、スタックから第1のエレメントを除去(ない
しポツプ)するにはスタックのトップの値をBすなわち
スタックの第2のエレメントのアドレスで置き換えてA
のアドレスの値を戻す必要がある。
この発明では、エレメントに対して多重プロセスが同時
にポツプ(スタックからの除去)処理を行うようにでき
、そのためにと(にロックを保持するとかECBを待つ
とかがなく、またスタックがこわれてしまうおそれもな
い。この手法は表1および第8図に示す。
にポツプ(スタックからの除去)処理を行うようにでき
、そのためにと(にロックを保持するとかECBを待つ
とかがなく、またスタックがこわれてしまうおそれもな
い。この手法は表1および第8図に示す。
表 3
つぎの宣言を仮定する
5TACK DS
TO3DC
*
ELEMENT DSECT
NEXT DS
ELEMENTL EQU
*
NEWELEM DS
F
A(0)
*−ELEMENT
CL(ELEMENTL)
スタックのトップへのポインタ
スタック番エレメント
スタックのつぎのエレメントへのポインタエレメントの
長さ スタックに付加する新エレメント k 3(続) スタックからのエレメントのポツプ(第8図参照)PO
P L R2、TO8POPI
LTRR2、R2 BZ POPEXIT op2 POPEXIT C R LR 4、POPI R3、R4 R5,R5 4、POPl 2、POP2 POP H TO8を得る エレメントあるか? ノー、出 R2←TO8,R4−つぎのTO8 TO8変化で、再試行 ツキのエレメントへのポインタ つぎのTO8がゼロ ポインタの更新 R2=TO8,再試行 R4=NEXT、再試行 失敗したら再試行 ポツプされたらR2=エレメント、 そうでなければR2=0 第8図はLIFOリストからエレメントを除去する場合
のフローチャートである。第1のステップでブロック7
2に示すよ5にスタックのトップ(TO3)のアドレス
がフェッチされる。判別ブロック74においてスタック
のトップをテストしてスタックが空なのかまたは値を有
するのかを判別する。スタックが空であればPOPプロ
グラムが76で終了する。除去するものが何もないから
である。
長さ スタックに付加する新エレメント k 3(続) スタックからのエレメントのポツプ(第8図参照)PO
P L R2、TO8POPI
LTRR2、R2 BZ POPEXIT op2 POPEXIT C R LR 4、POPI R3、R4 R5,R5 4、POPl 2、POP2 POP H TO8を得る エレメントあるか? ノー、出 R2←TO8,R4−つぎのTO8 TO8変化で、再試行 ツキのエレメントへのポインタ つぎのTO8がゼロ ポインタの更新 R2=TO8,再試行 R4=NEXT、再試行 失敗したら再試行 ポツプされたらR2=エレメント、 そうでなければR2=0 第8図はLIFOリストからエレメントを除去する場合
のフローチャートである。第1のステップでブロック7
2に示すよ5にスタックのトップ(TO3)のアドレス
がフェッチされる。判別ブロック74においてスタック
のトップをテストしてスタックが空なのかまたは値を有
するのかを判別する。スタックが空であればPOPプロ
グラムが76で終了する。除去するものが何もないから
である。
しかし、スタックが空でないなら、ブロック78のCO
MPARE AND LOAD(CAL)インスト
ラクションを用いて、スタックのトップ(TO8)が変
化しないことを確かめながら最新エレメントからつぎの
ポインタの値をフェッチする。TO8が変化したなら(
ブロック82で判別)、プログラムは判別ブロック74
に戻る。
MPARE AND LOAD(CAL)インスト
ラクションを用いて、スタックのトップ(TO8)が変
化しないことを確かめながら最新エレメントからつぎの
ポインタの値をフェッチする。TO8が変化したなら(
ブロック82で判別)、プログラムは判別ブロック74
に戻る。
TO8が変化しなかったなら、プログラムはCOMPA
RF: AND 5WAP(CSD)インストラクシ
ョンへとブロック86に示すように進む。TO8のリプ
レースメント値をブロック78において、CALインス
トラクションによりフェッチしたつぎのポインタの値に
設定する。ブロック86においてつぎのフィールド用の
リプレースメント値をゼロに設定する。TO8およびつ
ぎのフィールドが変化しないことを確かめながら、TO
8の値をつぎのポインタの値で置き換え、つぎのポイン
タの値をゼロで置き換える。これをC8Dインストラク
シヨンで行う。
RF: AND 5WAP(CSD)インストラクシ
ョンへとブロック86に示すように進む。TO8のリプ
レースメント値をブロック78において、CALインス
トラクションによりフェッチしたつぎのポインタの値に
設定する。ブロック86においてつぎのフィールド用の
リプレースメント値をゼロに設定する。TO8およびつ
ぎのフィールドが変化しないことを確かめながら、TO
8の値をつぎのポインタの値で置き換え、つぎのポイン
タの値をゼロで置き換える。これをC8Dインストラク
シヨンで行う。
判別ブロック79においてTOSポインタが変わったか
どうガ為を判別する。答えがイエスなら、プログラムは
判別ブロック74に戻る。答えがノーであれば、ブロッ
ク84においてつぎのポインタが変わったかを判別する
。答えがイエスであれば、プログラムはCOMPARE
AND 5WAPDISJOINTインストラク
シヨンに戻る。ブロック84での答えがノーであれば、
POPルーチンをブロック88で終了させる。プログラ
ムが終了してゼロまたはエレメントのアドレスが生じる
。
どうガ為を判別する。答えがイエスなら、プログラムは
判別ブロック74に戻る。答えがノーであれば、ブロッ
ク84においてつぎのポインタが変わったかを判別する
。答えがイエスであれば、プログラムはCOMPARE
AND 5WAPDISJOINTインストラク
シヨンに戻る。ブロック84での答えがノーであれば、
POPルーチンをブロック88で終了させる。プログラ
ムが終了してゼロまたはエレメントのアドレスが生じる
。
F1発明の詳細
な説明したようにこの発明によればCOMPARE
AND LOADインストラクションを用いて1の位
置の自答が変わっていないことに応じて他の位置の値を
フェッチすることができる。
AND LOADインストラクションを用いて1の位
置の自答が変わっていないことに応じて他の位置の値を
フェッチすることができる。
またCOMF’ARE AND 5WAP DIS
JOINTインストラクションを用いて、2つの隣接し
ていない記憶位置を同時に更新することができる。
JOINTインストラクションを用いて、2つの隣接し
ていない記憶位置を同時に更新することができる。
第1図はこの発明のCOMPARF: ANDLOAD
インストラクションの操作を示すフローチャート、第2
図はこの発明のCOMPAREAND 5WAP
DISJOINTインストラクショ/の操作を示すフロ
ーチャート、第3図は二重ヘッド待ち行列FIFOおよ
びこの発明によるリスト操作後の状態を示す図、第4A
図および第4B図はこの発明によって第3図の二重ヘッ
ド待ち行列からエレメントを削除する場合を説明するフ
ローチャート、第5図はこの発明によって二重ヘッド待
ち行列にエレメントを付加する場合を示す図、第6図は
第5図のエレメントを待ち行列へ挿入する方法を示すフ
ローチャート、第7図はLIFO待ち行列リストおよび
この発明によるリスト操作後の状態を示す図、第8図は
この発明によって第7図のスタックからエレメントを除
去する場合を説明するフローチャートである。 出願人 インターナショナル・ビジネス・マシーンズ
・コーポレーション 復代理人 41′理士 澤 113 俊
夫FIG。 4B
インストラクションの操作を示すフローチャート、第2
図はこの発明のCOMPAREAND 5WAP
DISJOINTインストラクショ/の操作を示すフロ
ーチャート、第3図は二重ヘッド待ち行列FIFOおよ
びこの発明によるリスト操作後の状態を示す図、第4A
図および第4B図はこの発明によって第3図の二重ヘッ
ド待ち行列からエレメントを削除する場合を説明するフ
ローチャート、第5図はこの発明によって二重ヘッド待
ち行列にエレメントを付加する場合を示す図、第6図は
第5図のエレメントを待ち行列へ挿入する方法を示すフ
ローチャート、第7図はLIFO待ち行列リストおよび
この発明によるリスト操作後の状態を示す図、第8図は
この発明によって第7図のスタックからエレメントを除
去する場合を説明するフローチャートである。 出願人 インターナショナル・ビジネス・マシーンズ
・コーポレーション 復代理人 41′理士 澤 113 俊
夫FIG。 4B
Claims (2)
- (1)データ処理システムにおいて不連続の位置に配さ
れたデータを比較して転送するデータ処理システムのデ
ータ操作方法において、 メモリ中に配された第1のオペランドおよび第2のオペ
ランドを比較するステップと、 比較結果が不一致であるときにメモリ中に配された第3
オペランドに第4オペランドの値を転送するステップと
、 メモリ中の標識を成功を示すように設定するステップと
、 第2のオペランドをフェッチするのに先だつて第2オペ
ランドの位置でシリアル化処理を実行するステップとを
有し、 メモリ中の1の位置の値が変化しないことに基づいて他
の位置から値をフェッチするようにしたことを特徴とす
るデータ処理システムのデータ操作方法。 - (2)データ処理システムにおいて不連続の位置に配さ
れたデータを比較して交換するデータ処理システムのデ
ータ操作方法において、 メモリ中に配された第1のオペランドおよび第2のオペ
ランドを比較する第1の比較ステップと、第1の比較ス
テップの比較結果が一致であるときに、メモリ中に配さ
れた第3のオペランドおよび第4のオペランドを比較す
る第2の比較ステップと、 第2の比較ステップが一致であるときに、第1の比較ス
テップ用に第2のオペランドがフェッチされてから、第
2の比較ステップ用の第4のオペランドがフェッチされ
るまでの間他のユーザが第2のオペランドの位置または
第4のオペランドの位置にアクセスするのを禁止するス
テップと、比較および交換の操作を終了させるステップ
とを有し、第1の比較ステップおよび第2の比較ステッ
プでの比較がともに一致であるときに第1の置換オペラ
ンドが第2のオペランドの位置にストアされ、第2の置
換オペランドが第4のオペランドの位置にストアされる
ようにしたデータ処理システムのデータ操作方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US264289 | 1988-10-28 | ||
US07/264,289 US5081572A (en) | 1988-10-28 | 1988-10-28 | Manipulation of time-ordered lists and instructions therefor |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH02163835A true JPH02163835A (ja) | 1990-06-25 |
JPH0642204B2 JPH0642204B2 (ja) | 1994-06-01 |
Family
ID=23005378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP1276178A Expired - Lifetime JPH0642204B2 (ja) | 1988-10-28 | 1989-10-25 | 待ち行列又はスタックから要素を除去する方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US5081572A (ja) |
EP (1) | EP0366585B1 (ja) |
JP (1) | JPH0642204B2 (ja) |
DE (1) | DE68926874D1 (ja) |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE68920740D1 (de) * | 1989-09-20 | 1995-03-02 | Ibm | Vorrichtung zur Nachrichtenwarteschlangenbetriebssteuerung in einem Speicher. |
JP2781092B2 (ja) * | 1991-11-06 | 1998-07-30 | 富士通株式会社 | システム間排他制御方式 |
US5398330A (en) * | 1992-03-05 | 1995-03-14 | Seiko Epson Corporation | Register file backup queue |
US5448708A (en) * | 1992-10-30 | 1995-09-05 | Ward; James P. | System for asynchronously delivering enqueue and dequeue information in a pipe interface having distributed, shared memory |
US5673307A (en) * | 1994-02-17 | 1997-09-30 | Spectralink Corporation | Handoff method for indoor cellular phone system |
US6247064B1 (en) * | 1994-12-22 | 2001-06-12 | Unisys Corporation | Enqueue instruction in a system architecture for improved message passing and process synchronization |
US5893157A (en) * | 1997-05-28 | 1999-04-06 | International Business Machines Corporation | Blocking symbol control in a computer system to serialize accessing a data resource by simultaneous processor requests |
US5895492A (en) * | 1997-05-28 | 1999-04-20 | International Business Machines Corporation | Processor associated blocking symbol controls for serializing the accessing of data resources in a computer system |
US5956714A (en) * | 1997-08-13 | 1999-09-21 | Southwestern Bell Telephone Company | Queuing system using a relational database |
US5895494A (en) * | 1997-09-05 | 1999-04-20 | International Business Machines Corporation | Method of executing perform locked operation instructions for supporting recovery of data consistency if lost due to processor failure, and a method of recovering the data consistency after processor failure |
US6009261A (en) * | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6496975B1 (en) | 1999-10-15 | 2002-12-17 | International Business Machines Corporation | Method, system, and program for performing conditional program operations |
US7000234B1 (en) | 2000-01-20 | 2006-02-14 | Sun Microsystems, Inc. | Maintaining a double-ended queue as a linked-list with sentinel nodes and delete flags with concurrent non-blocking insert and remove operations using a double compare-and-swap primitive |
WO2001053942A2 (en) * | 2000-01-20 | 2001-07-26 | Sun Microsystems, Inc. | Double-ended queue with concurrent non-blocking insert and remove operations |
US7539849B1 (en) * | 2000-01-20 | 2009-05-26 | Sun Microsystems, Inc. | Maintaining a double-ended queue in a contiguous array with concurrent non-blocking insert and remove operations using a double compare-and-swap primitive |
US7017160B2 (en) | 2000-04-18 | 2006-03-21 | Sun Microsystems, Inc. | Concurrent shared object implemented using a linked-list with amortized node allocation |
US6826757B2 (en) | 2000-04-18 | 2004-11-30 | Sun Microsystems, Inc. | Lock-free implementation of concurrent shared object with dynamic node allocation and distinguishing pointer value |
US7117502B1 (en) * | 2000-11-10 | 2006-10-03 | Sun Microsystems, Inc. | Linked-list implementation of a data structure with concurrent non-blocking insert and remove operations |
US7769791B2 (en) | 2001-01-12 | 2010-08-03 | Oracle America, Inc. | Lightweight reference counting using single-target synchronization |
US7299242B2 (en) | 2001-01-12 | 2007-11-20 | Sun Microsystems, Inc. | Single-word lock-free reference counting |
US6880071B2 (en) * | 2001-04-09 | 2005-04-12 | Sun Microsystems, Inc. | Selective signalling of later reserve location memory fault in compound compare and swap |
US7836228B1 (en) | 2004-06-18 | 2010-11-16 | Oracle America, Inc. | Scalable and lock-free first-in-first-out queue implementation |
US7908441B2 (en) * | 2002-01-11 | 2011-03-15 | Oracle America, Inc. | Value recycling facility for multithreaded computations |
US9052944B2 (en) | 2002-07-16 | 2015-06-09 | Oracle America, Inc. | Obstruction-free data structures and mechanisms with separable and/or substitutable contention management mechanisms |
US7395274B2 (en) | 2002-07-16 | 2008-07-01 | Sun Microsystems, Inc. | Space- and time-adaptive nonblocking algorithms |
US7814488B1 (en) | 2002-09-24 | 2010-10-12 | Oracle America, Inc. | Quickly reacquirable locks |
US7293143B1 (en) | 2002-09-24 | 2007-11-06 | Sun Microsystems, Inc. | Efficient non-blocking k-compare-single-swap operation |
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 |
US7424477B1 (en) | 2003-09-03 | 2008-09-09 | Sun Microsystems, Inc. | Shared synchronized skip-list data structure and technique employing linearizable operations |
US10049127B1 (en) | 2003-12-19 | 2018-08-14 | Oracle America, Inc. | Meta-transactional synchronization |
US7703098B1 (en) | 2004-07-20 | 2010-04-20 | Sun Microsystems, Inc. | Technique to allow a first transaction to wait on condition that affects its working set |
US8074030B1 (en) | 2004-07-20 | 2011-12-06 | Oracle America, Inc. | Using transactional memory with early release to implement non-blocking dynamic-sized data structure |
US7395382B1 (en) | 2004-08-10 | 2008-07-01 | Sun Microsystems, Inc. | Hybrid software/hardware transactional memory |
US7711909B1 (en) | 2004-12-09 | 2010-05-04 | Oracle America, Inc. | Read sharing using global conflict indication and semi-transparent reading in a transactional memory space |
US7680986B1 (en) | 2004-12-30 | 2010-03-16 | Sun Microsystems, Inc. | Practical implementation of arbitrary-sized LL/SC variables |
US7577798B1 (en) | 2004-12-30 | 2009-08-18 | Sun Microsystems, Inc. | Space-adaptive lock-free queue using pointer-sized single-target synchronization |
US7533221B1 (en) | 2004-12-30 | 2009-05-12 | Sun Microsystems, Inc. | Space-adaptive lock-free free-list using pointer-sized single-target synchronization |
US9990240B2 (en) * | 2015-12-11 | 2018-06-05 | Successfactors, Inc. | Event handling in a cloud data center |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3886525A (en) * | 1973-06-29 | 1975-05-27 | Ibm | Shared data controlled by a plurality of users |
US4136386A (en) * | 1977-10-06 | 1979-01-23 | International Business Machines Corporation | Backing store access coordination in a multi-processor system |
US4320455A (en) * | 1978-01-09 | 1982-03-16 | Honeywell Information Systems Inc. | Queue structure for a data processing system |
US4394727A (en) * | 1981-05-04 | 1983-07-19 | International Business Machines Corporation | Multi-processor task dispatching apparatus |
US4482956A (en) * | 1982-11-04 | 1984-11-13 | International Business Machines Corporation | Parallel queueing method |
US4604694A (en) * | 1983-12-14 | 1986-08-05 | International Business Machines Corporation | Shared and exclusive access control |
US4584640A (en) * | 1984-06-27 | 1986-04-22 | Motorola, Inc. | Method and apparatus for a compare and swap instruction |
US4673633A (en) * | 1984-06-28 | 1987-06-16 | Cooperbiomedical, Inc. | Method of determining cystic fibrosis ciliostatic factor |
US4858116A (en) * | 1987-05-01 | 1989-08-15 | Digital Equipment Corporation | Method and apparatus for managing multiple lock indicators in a multiprocessor computer system |
US4807111A (en) * | 1987-06-19 | 1989-02-21 | International Business Machines Corporation | Dynamic queueing method |
-
1988
- 1988-10-28 US US07/264,289 patent/US5081572A/en not_active Expired - Lifetime
-
1989
- 1989-09-12 DE DE68926874T patent/DE68926874D1/de not_active Expired - Lifetime
- 1989-09-12 EP EP89480142A patent/EP0366585B1/en not_active Expired - Lifetime
- 1989-10-25 JP JP1276178A patent/JPH0642204B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US5081572A (en) | 1992-01-14 |
EP0366585A3 (en) | 1992-06-03 |
DE68926874D1 (de) | 1996-08-29 |
EP0366585A2 (en) | 1990-05-02 |
JPH0642204B2 (ja) | 1994-06-01 |
EP0366585B1 (en) | 1996-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH02163835A (ja) | 待ち行列又はスタックから要素を除去する方法 | |
US5742785A (en) | Posting multiple reservations with a conditional store atomic operations in a multiprocessing environment | |
US5317739A (en) | Method and apparatus for coupling data processing systems | |
US7873794B2 (en) | Mechanism that provides efficient multi-word load atomicity | |
US4316245A (en) | Apparatus and method for semaphore initialization in a multiprocessing computer system for process synchronization | |
US4394725A (en) | Apparatus and method for transferring information units between processes in a multiprocessing system | |
US5442763A (en) | System and method for preventing deadlock in multiprocessor multiple resource instructions | |
US5968157A (en) | Locking of computer resources | |
US4369494A (en) | Apparatus and method for providing synchronization between processes and events occurring at different times in a data processing system | |
US4395757A (en) | Process synchronization utilizing semaphores | |
JPH0324696B2 (ja) | ||
US6963882B1 (en) | Method and apparatus for processing a list structure | |
JP3335352B2 (ja) | アウトオブオーダジョブ処理方法および装置 | |
US5297281A (en) | Multiple sequence processor system | |
US6862595B1 (en) | Method and apparatus for implementing a shared message queue using a list structure | |
JPS60128537A (ja) | 多重プログラミング・システム | |
JPS5939785B2 (ja) | デ−タ処理装置 | |
JPH0227440A (ja) | 記憶システム | |
WO1999035563A1 (en) | Method of asynchronous management of a circular queue in a multiprocess environment | |
KR19990077481A (ko) | 세마포어연산을수행하기위한방법및장치 | |
US6230230B1 (en) | Elimination of traps and atomics in thread synchronization | |
JPH0231419B2 (ja) | ||
CN1303043A (zh) | 具有指令历史信息的基本块高速缓存的微处理器 | |
EP1852781A1 (en) | Compare, swap and store facility with no external serialization | |
US5897658A (en) | Method and apparatus for protecting portions of memory by providing access requests to a communications area for processing by a hidden server |