JPS5983249A - 待ち行列制御方法 - Google Patents
待ち行列制御方法Info
- Publication number
- JPS5983249A JPS5983249A JP58172351A JP17235183A JPS5983249A JP S5983249 A JPS5983249 A JP S5983249A JP 58172351 A JP58172351 A JP 58172351A JP 17235183 A JP17235183 A JP 17235183A JP S5983249 A JPS5983249 A JP S5983249A
- Authority
- JP
- Japan
- Prior art keywords
- queue
- pointer
- anchor
- delete
- deletion
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/76—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
- G06F7/78—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2205/00—Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F2205/06—Indexing scheme relating to groups G06F5/06 - G06F5/16
- G06F2205/064—Linked list, i.e. structure using pointers, e.g. allowing non-contiguous address segments in one logical buffer or dynamic buffer space allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Multi Processors (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
[発明の分*]
本発明は、マルチプロセッサ(MP)システムの各プロ
セッサで非同期的に実行されている複数のプログラムが
1つの待ち行列に対する挿入及び削除を並列に行なえる
ようにすることによって、Mr’システムの動作効率を
改善する方法に係る。
セッサで非同期的に実行されている複数のプログラムが
1つの待ち行列に対する挿入及び削除を並列に行なえる
ようにすることによって、Mr’システムの動作効率を
改善する方法に係る。
[発明の背景]
待ち行列は過去及び現在のデータ処理システムで一般に
使用されている。ある待ち行列はハードウェア論理回路
によって管理され、他の待ち行列はプログラム式または
マイクロプログラム式のルーチンによって管理されてい
る。多数の待ち行列は一般に、データ処理システムの再
使用可能なハードウェア及びソフトウェアの資源(待ち
行列自身を含む)を制御するためにシステム制御プログ
ラムによって用いられる。
使用されている。ある待ち行列はハードウェア論理回路
によって管理され、他の待ち行列はプログラム式または
マイクロプログラム式のルーチンによって管理されてい
る。多数の待ち行列は一般に、データ処理システムの再
使用可能なハードウェア及びソフトウェアの資源(待ち
行列自身を含む)を制御するためにシステム制御プログ
ラムによって用いられる。
各々の待ち行列は一般に複数の要素から成る。
例えば、ある待ち行列は現在レコードを読取りまたは書
込むプロセス中のすべての■/○装置を追跡するシステ
ムで用いられることがあり、その場合、待ち行列の要素
の数は使用中のI10装置がないことを表わすゼロから
、多数のI10装置が使用中であることを表わす大きな
数までの間を変動する。別の例は、実行可能なユーザー
・プログラム・タスクにCPUを割振るシステム資源で
ある監視ディスパッチャ・プログラムの使用に関する全
てのユーザー要求を受取るのに用いらILる待ち行列で
ある。
込むプロセス中のすべての■/○装置を追跡するシステ
ムで用いられることがあり、その場合、待ち行列の要素
の数は使用中のI10装置がないことを表わすゼロから
、多数のI10装置が使用中であることを表わす大きな
数までの間を変動する。別の例は、実行可能なユーザー
・プログラム・タスクにCPUを割振るシステム資源で
ある監視ディスパッチャ・プログラムの使用に関する全
てのユーザー要求を受取るのに用いらILる待ち行列で
ある。
待ち行列は待ち行列中の要素の相対的な位置関係によっ
て次の2つの一般的なタイプに分類されることがある。
て次の2つの一般的なタイプに分類されることがある。
第1は物理的に連続した位置に要素を有する連続待ち行
列である。
列である。
第2は物理的に主記憶(M S )内のどこにでも分散
さ汎うる要素を有する連鎖待ち行列であ、る。
さ汎うる要素を有する連鎖待ち行列であ、る。
連続待ち行列の例は、M 、 T a r a d a
]、s k y、”FjrsL−T++/First
;−0ul; Queueing 丁ecl+r+
1que tjsingCompare and S
wRp″、IBM Technical、 Discl
osure13ulletin、 ■o1. 18
、 Na 5 、 Oct;ober i
9 75.1547頁に示されている。
]、s k y、”FjrsL−T++/First
;−0ul; Queueing 丁ecl+r+
1que tjsingCompare and S
wRp″、IBM Technical、 Discl
osure13ulletin、 ■o1. 18
、 Na 5 、 Oct;ober i
9 75.1547頁に示されている。
本発明は連続待ち行列は取扱わず、連鎖待ち行列だけ、
特にアンカーを有する単−系(singlel;hre
ad)の連鎖待ち行列だけを取扱う。各々の連鎖待ち行
列は主記憶の所定の位置にアンカー・ブロックを有し、
その待ち行列を制御する。アンカー・ブロックはその待
ち行列を構成する要素の連鎖をアドレス指定する(アン
カー・ポインタと呼ばれる)アドレスを含み、各々の要
素はその待ち行列中の次の要素へのポインタを含む。待
ち行列の最後の要素はそれを最後の要素として識別する
標識コード(しばしば全0)をそのポインタ位置に有す
る。現在もし待ち行列中に要素がない(すなわち、その
待ち行列は空である)ならば、アンカー・ブロックはそ
のアンカー・ポインタの位置に空のコード(例えば、全
0)を含む。
特にアンカーを有する単−系(singlel;hre
ad)の連鎖待ち行列だけを取扱う。各々の連鎖待ち行
列は主記憶の所定の位置にアンカー・ブロックを有し、
その待ち行列を制御する。アンカー・ブロックはその待
ち行列を構成する要素の連鎖をアドレス指定する(アン
カー・ポインタと呼ばれる)アドレスを含み、各々の要
素はその待ち行列中の次の要素へのポインタを含む。待
ち行列の最後の要素はそれを最後の要素として識別する
標識コード(しばしば全0)をそのポインタ位置に有す
る。現在もし待ち行列中に要素がない(すなわち、その
待ち行列は空である)ならば、アンカー・ブロックはそ
のアンカー・ポインタの位置に空のコード(例えば、全
0)を含む。
要素はそのアンカー・ブロックを変更することによって
待ち行列に挿入されたり、待ち行列から1411除され
たりする。最も容易モ最も速い挿入と削除はアンカー・
ポインタ自身を変えることによって行なわ]し、その場
合、挿入はアンカー・ポインタを待ち行列に置かれる新
しい要素のアドレスに変更することを伴ない、削除はア
ンカー・ポインタをそれによってアドレス指定された要
素中のポインタに変更することを伴なう。アンカー・ポ
インタによって直接アドレス指定される待ち行列の先頭
要素は「アンカー・ポイント要素」と呼ばれる。後入先
出(L J FO)型の待ち行列はアンカー・ポイン1
−要素を挿入し削除する。アンカー・ポイント要素はL
IFO待ち行列において最新かつ最後の要素であり、削
除される要素の候補である。
待ち行列に挿入されたり、待ち行列から1411除され
たりする。最も容易モ最も速い挿入と削除はアンカー・
ポインタ自身を変えることによって行なわ]し、その場
合、挿入はアンカー・ポインタを待ち行列に置かれる新
しい要素のアドレスに変更することを伴ない、削除はア
ンカー・ポインタをそれによってアドレス指定された要
素中のポインタに変更することを伴なう。アンカー・ポ
インタによって直接アドレス指定される待ち行列の先頭
要素は「アンカー・ポイント要素」と呼ばれる。後入先
出(L J FO)型の待ち行列はアンカー・ポイン1
−要素を挿入し削除する。アンカー・ポイント要素はL
IFO待ち行列において最新かつ最後の要素であり、削
除される要素の候補である。
しかしながら、多くのデータ処理活動は1. i l?
0型の削除操作を使用できず、先入先出(171FO)
型または他の非LIFO型の削除操作を必要とする。
0型の削除操作を使用できず、先入先出(171FO)
型または他の非LIFO型の削除操作を必要とする。
本発明は、IjFO削除操作及び非し、IFO削除操作
の組合せに対しても使用できるが、基本的には純粋なL
IFO削除操作以外の操作を必要とする連鎖待ち行列に
重点が置かjbている。
の組合せに対しても使用できるが、基本的には純粋なL
IFO削除操作以外の操作を必要とする連鎖待ち行列に
重点が置かjbている。
MSを共有する2台以上のプロセッサあるいはCPUが
同時に且つ非同期で別個の命令ス1〜リームを実行しう
る多重処理は、共有M’S中の待ち行列の変更に関する
特殊な問題を呈すること力1d忍ぬられている。例えば
、第1のプロセッサ力へ待ち41列要素の挿入または削
除を完了する前L;、第2のプロセッサが別の待ち行列
要素の挿入また番よIJ+J Pfiを試みることは望
ましくなく、どのプロセッサも別のプロセッサによる待
ち行列中の不完全な変更に基づいた動作をしてはならな
い。
同時に且つ非同期で別個の命令ス1〜リームを実行しう
る多重処理は、共有M’S中の待ち行列の変更に関する
特殊な問題を呈すること力1d忍ぬられている。例えば
、第1のプロセッサ力へ待ち41列要素の挿入または削
除を完了する前L;、第2のプロセッサが別の待ち行列
要素の挿入また番よIJ+J Pfiを試みることは望
ましくなく、どのプロセッサも別のプロセッサによる待
ち行列中の不完全な変更に基づいた動作をしてはならな
い。
この問題は先行技術では一般に2つの異なる方法で解決
されている。先行技術における第1の解決方法は待ち行
列をロックするもので、それ(こよりその待ち行列を使
用しているプログラムの全てを直列化し、任意の時間に
おいて1つのプログラムだけがその待ち行列をアクセス
できるよう番こする。このようなロッキング動作は、例
えば18Mシステム/370のテスト設定命令(TS)
または比較置換命令(C5,CD’S)の実行によって
サポートされる。待ち行列を使用する全てのプログラム
の間のプログラミング規約として、全てのプログラムは
待ち行列の変更を試みる前に自発的に待ち行列ロック・
フィールドを検査してその状態を確認することが要求さ
れ、1つのプログラムだけが選択されてロック・フィー
ルドをセラ1−シてからその待ち行列を変更する。選択
されたプログラムは、待ち行列の変更を完rすると、ロ
ック・フィールドをアンロック状態に変更し、かくて別
のプログラムがその後で待ち行列をロックして使用する
ことができる。この方法では、−・度に単一挿入操作ま
たは単一削除操作だけが遂行可能であって、同時遂行は
不可能である。
されている。先行技術における第1の解決方法は待ち行
列をロックするもので、それ(こよりその待ち行列を使
用しているプログラムの全てを直列化し、任意の時間に
おいて1つのプログラムだけがその待ち行列をアクセス
できるよう番こする。このようなロッキング動作は、例
えば18Mシステム/370のテスト設定命令(TS)
または比較置換命令(C5,CD’S)の実行によって
サポートされる。待ち行列を使用する全てのプログラム
の間のプログラミング規約として、全てのプログラムは
待ち行列の変更を試みる前に自発的に待ち行列ロック・
フィールドを検査してその状態を確認することが要求さ
れ、1つのプログラムだけが選択されてロック・フィー
ルドをセラ1−シてからその待ち行列を変更する。選択
されたプログラムは、待ち行列の変更を完rすると、ロ
ック・フィールドをアンロック状態に変更し、かくて別
のプログラムがその後で待ち行列をロックして使用する
ことができる。この方法では、−・度に単一挿入操作ま
たは単一削除操作だけが遂行可能であって、同時遂行は
不可能である。
先行技術における第2の解決方向はロックを使用せず、
L、IFO待ち行列だけを対象にしている。
L、IFO待ち行列だけを対象にしている。
L T I” 0待ち行列はその保全性を維持しつつ、
複数のCPUにおける異なるプロゲラ11からの同時要
求によってアンカー・ポイント要素が挿入されたり削除
されたりすることを可能にする。第2の解決方法は13
Mシステム/370のO8命令またはCI) S命令を
待ち行列アンカー・ポイントに直接用いて、アンカー・
ポイン1〜要素の挿入または削除を成しとげる。第2の
解決方法の背景は18Mシステム/370解説書(N
: GA 22−7比較置換命令は、単一ワード・フィ
ールド(CS)命令及び2重ワード・フィールド(CD
S命令)を扱う2つの形式があり、待ち行列アンカー・
フィールドの大きさく1ワードまたは2ワード)によっ
ていずtyかが選択される。C8命令またはCL) S
命令の実行中は、MPシステ11におけるどのプロセッ
サも別のプロセッサによる削除操作または挿入操作に干
渉することはできない。
複数のCPUにおける異なるプロゲラ11からの同時要
求によってアンカー・ポイント要素が挿入されたり削除
されたりすることを可能にする。第2の解決方法は13
Mシステム/370のO8命令またはCI) S命令を
待ち行列アンカー・ポイントに直接用いて、アンカー・
ポイン1〜要素の挿入または削除を成しとげる。第2の
解決方法の背景は18Mシステム/370解説書(N
: GA 22−7比較置換命令は、単一ワード・フィ
ールド(CS)命令及び2重ワード・フィールド(CD
S命令)を扱う2つの形式があり、待ち行列アンカー・
フィールドの大きさく1ワードまたは2ワード)によっ
ていずtyかが選択される。C8命令またはCL) S
命令の実行中は、MPシステ11におけるどのプロセッ
サも別のプロセッサによる削除操作または挿入操作に干
渉することはできない。
全ての待ち行列管理プログラムは、指定された汎用レジ
スタB2の現在の内容に変位D2を加算した値を待ち行
列アンカー・ポインタの主記憶アドレスとして使用する
。有効アドレス1)2(B2)を用いて取出されたアン
カー・ポインタは汎用レジスタR1にロードされ、それ
により最初の待ち行列要素が指定される。L T ’F
O挿入ルーチンは最初に、待ち行列に挿入されるべき
新しい要素をセラ1−アップし、その中にアンカー・ポ
インタを書込み、そして汎用レジスタR3にこの要素の
アドレスを記憶せねばならない。LfFO削除ルーチン
は最初に、待ち行列から削除されるべきアンカー・ポイ
ン1〜要素内のポインタの内容を汎用レジスタR3に記
憶せねばならない。次に、要求された挿入または削除を
行なうためにC8命令が実行される。そのときC8命令
はR1を検査してアンカー・ポインタの内容が変更さ]
したかどうかを決定する。それが変更されていない場合
は、R3にあるアドレスがアンカー・ポインタに記憶さ
れ、待ち行列においてアンカー・ポイント要素の挿入ま
たは削除が行なわれる。アンカー・ポインタがR1で変
更されていると5挿入または削除の試みは失敗するが、
R1には現アンカー・ポインタが再ロードされる。C8
命令の条件コード(CC)はその実行が成功したかまた
は失敗したかを表わす。
スタB2の現在の内容に変位D2を加算した値を待ち行
列アンカー・ポインタの主記憶アドレスとして使用する
。有効アドレス1)2(B2)を用いて取出されたアン
カー・ポインタは汎用レジスタR1にロードされ、それ
により最初の待ち行列要素が指定される。L T ’F
O挿入ルーチンは最初に、待ち行列に挿入されるべき
新しい要素をセラ1−アップし、その中にアンカー・ポ
インタを書込み、そして汎用レジスタR3にこの要素の
アドレスを記憶せねばならない。LfFO削除ルーチン
は最初に、待ち行列から削除されるべきアンカー・ポイ
ン1〜要素内のポインタの内容を汎用レジスタR3に記
憶せねばならない。次に、要求された挿入または削除を
行なうためにC8命令が実行される。そのときC8命令
はR1を検査してアンカー・ポインタの内容が変更さ]
したかどうかを決定する。それが変更されていない場合
は、R3にあるアドレスがアンカー・ポインタに記憶さ
れ、待ち行列においてアンカー・ポイント要素の挿入ま
たは削除が行なわれる。アンカー・ポインタがR1で変
更されていると5挿入または削除の試みは失敗するが、
R1には現アンカー・ポインタが再ロードされる。C8
命令の条件コード(CC)はその実行が成功したかまた
は失敗したかを表わす。
LTFO方式で要素を挿入または削除するためにC8命
令によってアンカー・ポインタだけが置換される場合に
は、挿入操作または削除操作の間に待ち行列を破壊する
大きな危険が存在することが経験によって知られている
。
令によってアンカー・ポインタだけが置換される場合に
は、挿入操作または削除操作の間に待ち行列を破壊する
大きな危険が存在することが経験によって知られている
。
待ち行列の保全性が危険にされされるのは=(1)
第1のプログラムが、アンカー・ポイント要素中のポイ
ンタがゼロであることを発見した後に、そのとき待ち行
列における単一の要素を削除することを試みている間に
;(2)第2のプログラムがその要素を削除して、新し
い要素を挿入し、次いで前に削除した要素を新しいアン
カー・ポイン1−要素として再び挿入したときであって
;(3)これらが第1のプログラムにおけるC8命令の
実行前に全て行なわれたときである。この場合、第1の
プログラムは、再挿入されたアンカー・ポインタとの比
較で一致が得られる為、そのC8命令の実行を成功裏に
完了する。その結果、アンカー・ポインタに全0フイー
ルドが挿入され、待ち行列が空であることを表わす。こ
れは、途中で別の要素が待ち行列に置かれたこと゛を第
1のプログラムが知らないからである。この全0のアン
カー・ポインタがポインタ連鎖を壊し、それによって待
ち行列(そのとき空ではない)における要素の存在を無
視するので、待ち行列が破壊される。
第1のプログラムが、アンカー・ポイント要素中のポイ
ンタがゼロであることを発見した後に、そのとき待ち行
列における単一の要素を削除することを試みている間に
;(2)第2のプログラムがその要素を削除して、新し
い要素を挿入し、次いで前に削除した要素を新しいアン
カー・ポイン1−要素として再び挿入したときであって
;(3)これらが第1のプログラムにおけるC8命令の
実行前に全て行なわれたときである。この場合、第1の
プログラムは、再挿入されたアンカー・ポインタとの比
較で一致が得られる為、そのC8命令の実行を成功裏に
完了する。その結果、アンカー・ポインタに全0フイー
ルドが挿入され、待ち行列が空であることを表わす。こ
れは、途中で別の要素が待ち行列に置かれたこと゛を第
1のプログラムが知らないからである。この全0のアン
カー・ポインタがポインタ連鎖を壊し、それによって待
ち行列(そのとき空ではない)における要素の存在を無
視するので、待ち行列が破壊される。
待ち行列障害は多分、データ処理動作が停止するか、ま
たは正しくない結果を生じる原因となるから、高速デー
タ処理システムにおいては危険性の高い待ち行列は無用
のものである。このタイプのソフトウェア障害の検出は
、発見して訂正することが困難なことがあり、これはシ
ステtトダウンにつながる。
たは正しくない結果を生じる原因となるから、高速デー
タ処理システムにおいては危険性の高い待ち行列は無用
のものである。このタイプのソフトウェア障害の検出は
、発見して訂正することが困難なことがあり、これはシ
ステtトダウンにつながる。
待ち行列の保全性に対するこの危険性は先行技術ではカ
ウンタ・フィールドのイ1加によって軽減されている。
ウンタ・フィールドのイ1加によって軽減されている。
カウンタ・フィールドはアンカー・ブロック内でアンカ
ー・ポインタの隣りに置かれる。アンカー・ポインタ及
びカウンタ・フィールドはいずれも1ワ一ド幅であり、
そり両方がCDS命令によって1単位として置換される
。
ー・ポインタの隣りに置かれる。アンカー・ポインタ及
びカウンタ・フィールドはいずれも1ワ一ド幅であり、
そり両方がCDS命令によって1単位として置換される
。
CS命令またはCDS命令に条件付き分岐命令が続き、
実行されたC8命令またはCDS命令の条件コードを検
査して、要求された挿入または削除が成功したかどうか
を決定する。不成功の場合は、ルーチンはループを戻っ
てR3の内容を再検査したのちC84命令またはCDS
命令を再実行し、必要ならばC8命令またはCDS命令
の実行が成功するまでこのループを反復する。
実行されたC8命令またはCDS命令の条件コードを検
査して、要求された挿入または削除が成功したかどうか
を決定する。不成功の場合は、ルーチンはループを戻っ
てR3の内容を再検査したのちC84命令またはCDS
命令を再実行し、必要ならばC8命令またはCDS命令
の実行が成功するまでこのループを反復する。
下記の表は前掲のIBMシステム/370解説書の31
4頁に載っているものと殆んど同じ挿入ルーチン及び削
除ルーチンを示したもので、コーディングはシステム/
370アセンブラによっている。CD S命令を実行す
ると、■ワード幅のアンカー・ポインタ及びその隣りに
位置するJワード幅のカウント値を1単位として待ち行
列アンカー・ブロックに記憶することができる。
4頁に載っているものと殆んど同じ挿入ルーチン及び削
除ルーチンを示したもので、コーディングはシステム/
370アセンブラによっている。CD S命令を実行す
ると、■ワード幅のアンカー・ポインタ及びその隣りに
位置するJワード幅のカウント値を1単位として待ち行
列アンカー・ブロックに記憶することができる。
要素挿入ルーチンまたは要素削除ルーチンの実行を開始
する時点から、C8命令またはCDS命令の条件コード
が0である(挿入または削除が成功であったことを表わ
す)ことを各々のルーチンが発見するまで、c p u
は待ち行列の要素を挿入または削除するプロレス中であ
ると考えらAしる。
する時点から、C8命令またはCDS命令の条件コード
が0である(挿入または削除が成功であったことを表わ
す)ことを各々のルーチンが発見するまで、c p u
は待ち行列の要素を挿入または削除するプロレス中であ
ると考えらAしる。
従って、M I)システ11においては、異なるC P
Uのいくつかのプログラムが同時に同じL I F”
O待ち行列において挿入ルーチンまたは削除ルーチン
を実行することがあり、そのC8命令またはCI)S命
令の実行が成功して各々のルーチンの競合が終るまでそ
]しらのルーチンのいくつかは競合によ−〕でルーピン
グを行なう。
Uのいくつかのプログラムが同時に同じL I F”
O待ち行列において挿入ルーチンまたは削除ルーチン
を実行することがあり、そのC8命令またはCI)S命
令の実行が成功して各々のルーチンの競合が終るまでそ
]しらのルーチンのいくつかは競合によ−〕でルーピン
グを行なう。
2台のCI) Uが同じLIFO待ち行列に対して同時
に待ち行列管理ルーチンを実行している場合を例にとっ
てもう少し詳しく説明する。これらのCPUの間では、
互いにLIFO待ち行列をアクセスしようとしているこ
とが分らない、すなわち両者の間には同期通信手段がな
いので、どちらのCPUもLIFO待ち行列に対し非同
期で挿入ま一チンがそのオペランドをセラ1〜アツプす
ることによって実行を開始したが、第2のCPUのルー
チンがそのCl) S命令の実行に成功して現アンカー
・ポインl−要素を挿入または削除し、それによって記
憶場所I)2(B2)にあるアンカー・ポインタの内容
が変更されたときに、まだ自身のCI)S命令を実行し
ていなかったものと仮定すれば、第1のCI) Uのル
ーチンがそのCDS命令を実行しても成功しない。その
理由は、B2(B2)にある実際のアンカー・ポインタ
またはカウンタが前にロードさtしてR1のアンカー・
ポインタまたはR1+ 1のカウンタに一致しないから
である。
に待ち行列管理ルーチンを実行している場合を例にとっ
てもう少し詳しく説明する。これらのCPUの間では、
互いにLIFO待ち行列をアクセスしようとしているこ
とが分らない、すなわち両者の間には同期通信手段がな
いので、どちらのCPUもLIFO待ち行列に対し非同
期で挿入ま一チンがそのオペランドをセラ1〜アツプす
ることによって実行を開始したが、第2のCPUのルー
チンがそのCl) S命令の実行に成功して現アンカー
・ポインl−要素を挿入または削除し、それによって記
憶場所I)2(B2)にあるアンカー・ポインタの内容
が変更されたときに、まだ自身のCI)S命令を実行し
ていなかったものと仮定すれば、第1のCI) Uのル
ーチンがそのCDS命令を実行しても成功しない。その
理由は、B2(B2)にある実際のアンカー・ポインタ
またはカウンタが前にロードさtしてR1のアンカー・
ポインタまたはR1+ 1のカウンタに一致しないから
である。
しかしながら、CI) S実行の失敗はR1に新しい実
際のポインタ値を再びロードし、第1のCPUによる次
のCDS実行のため′の準備をする。もしB2(B2)
にある実際のポインタ及びカウンタ値が次のCDS実行
の時点でR1及びR1+1の内容と変っていなかったな
らば、その実行は成功である。従って、CDS命令はL
IFO待ち行列の不適当な変更を防ぎ、その保全性を維
持する。
際のポインタ値を再びロードし、第1のCPUによる次
のCDS実行のため′の準備をする。もしB2(B2)
にある実際のポインタ及びカウンタ値が次のCDS実行
の時点でR1及びR1+1の内容と変っていなかったな
らば、その実行は成功である。従って、CDS命令はL
IFO待ち行列の不適当な変更を防ぎ、その保全性を維
持する。
先行技術の待ち行列管理プログラムは、ロックなしのL
IFO待ち行列のための挿入ルーチン及び削除ルーチン
を多年にわたり行なって%Nる。その理由は、複数のプ
ログラム及びC’PTJが挿入及び削除を並行して行な
えるからである。あシ)シこく、このタイプのロックさ
れない待ち行列の処理番よ、LIFO(先入先出)のよ
うな非LIFO待ち行列に対して使用できない。
IFO待ち行列のための挿入ルーチン及び削除ルーチン
を多年にわたり行なって%Nる。その理由は、複数のプ
ログラム及びC’PTJが挿入及び削除を並行して行な
えるからである。あシ)シこく、このタイプのロックさ
れない待ち行列の処理番よ、LIFO(先入先出)のよ
うな非LIFO待ち行列に対して使用できない。
第3図及び第4図は、LIFO待ち行列におり)で新た
なアンカー・ポイント要素の挿入または現アンカー・ポ
イン1−要素の削除を行なう在来の待ち行列オペレーシ
ョンで使用されることがある前述の先行技術のLIFO
挿入及び削除ルーチンの流れ図を示す。これらのルーチ
ンは待ち行列サービスを必要とするプログラムに挿入さ
れている。
なアンカー・ポイント要素の挿入または現アンカー・ポ
イン1−要素の削除を行なう在来の待ち行列オペレーシ
ョンで使用されることがある前述の先行技術のLIFO
挿入及び削除ルーチンの流れ図を示す。これらのルーチ
ンは待ち行列サービスを必要とするプログラムに挿入さ
れている。
第3図のLIFO要素挿入ルーチンにおいて、要素挿入
はステップ34で、与えられたCPUにおけるCDS命
令の実行の成功によって得られる。
はステップ34で、与えられたCPUにおけるCDS命
令の実行の成功によって得られる。
すなわち、R1にロードさAしたアンカー・ポインタ及
び次の汎用レジスタR1+1にロードされたカウンタ(
これらはステップ31によって、またはこのルーチンの
前回の反復でステップ34によってMSのB2(B2)
に位置するアンカー・ポインタ及びカウンタにロードさ
れている)を、現在アンカー・ブロックに存在している
実際のアンカー・ポインタ及びカウンタと比較し、それ
己が依然として同じでいる(ステップ31からステップ
34でのCDS命令の実行までの間に、他のいず4しの
ルーチンも待ち行列の挿入または削除を行なっていない
ことを表わす)かどうかを決定する。
び次の汎用レジスタR1+1にロードされたカウンタ(
これらはステップ31によって、またはこのルーチンの
前回の反復でステップ34によってMSのB2(B2)
に位置するアンカー・ポインタ及びカウンタにロードさ
れている)を、現在アンカー・ブロックに存在している
実際のアンカー・ポインタ及びカウンタと比較し、それ
己が依然として同じでいる(ステップ31からステップ
34でのCDS命令の実行までの間に、他のいず4しの
ルーチンも待ち行列の挿入または削除を行なっていない
ことを表わす)かどうかを決定する。
もし1り1とR1+1の内容がCDS命令実行時にB2
(132)における値に依然と−して同じてあれば、M
Sのアンカー・ブロックにレジスタR3からの新しい要
素のアドレス及びR3+1からの増加さ]tたカウンタ
値を記憶するとともに、そのCPUにおける条件コード
(CC)を0にセットする。しかしながら、もしR1及
びR1+1の内容がB2 (B2)における実際のアン
カー・ポインタ及びカウンタの値と異なるならば、CD
S命令は代りにレジスタR1及びR1+1にアドレスD
2(B2)の実際のアンカー・ポインタ及びカウンタの
値をロードするとともに、そのCI) Uの条件コード
(cc)を1にセラ1−する。
(132)における値に依然と−して同じてあれば、M
Sのアンカー・ブロックにレジスタR3からの新しい要
素のアドレス及びR3+1からの増加さ]tたカウンタ
値を記憶するとともに、そのCPUにおける条件コード
(CC)を0にセットする。しかしながら、もしR1及
びR1+1の内容がB2 (B2)における実際のアン
カー・ポインタ及びカウンタの値と異なるならば、CD
S命令は代りにレジスタR1及びR1+1にアドレスD
2(B2)の実際のアンカー・ポインタ及びカウンタの
値をロードするとともに、そのCI) Uの条件コード
(cc)を1にセラ1−する。
レジスタR3は前にステップ33で、挿入さJLる新し
い要素のアドレスによってセットアツプ済であり、その
隣接汎用レジスタR3+1は1だけ増分されたカウンタ
の値によってセラ1〜アツプ済みである。
い要素のアドレスによってセットアツプ済であり、その
隣接汎用レジスタR3+1は1だけ増分されたカウンタ
の値によってセラ1〜アツプ済みである。
それぞれのルーチンはステップ35で条件イ・1き分岐
命令を用いて条件コード(CC)を検査する。
命令を用いて条件コード(CC)を検査する。
もしCCが1であることが分れば、挿入は生じなかった
ことになり、ルーチンはステップ32に戻り、次の反復
動作で新しい要素のポインタを新しいアンカー・ポイン
タにセラ1〜し、ステップ33でR3+1の増分された
カウンタ値を再決定し、次いでステップ34で、もう1
つの挿入の試みとして、成功するかどうかは分らないが
CDS命令を再実行する。それによってルーチンは必要
な挿入がなされる(CC=Q)までCDS命令を1回以
上実行する。
ことになり、ルーチンはステップ32に戻り、次の反復
動作で新しい要素のポインタを新しいアンカー・ポイン
タにセラ1〜し、ステップ33でR3+1の増分された
カウンタ値を再決定し、次いでステップ34で、もう1
つの挿入の試みとして、成功するかどうかは分らないが
CDS命令を再実行する。それによってルーチンは必要
な挿入がなされる(CC=Q)までCDS命令を1回以
上実行する。
第4図のLIFO要素削除ルーチンにおいて、こJLが
呼出しプログラムによって開始されると、ステップ41
で汎用レジスタR1及びR1+1が第3図のステップ3
1で行なわれたようにロードされる。汎用レジスタIt
i + tにロードされたカウンタ値は挿入または削
除の度に増分される。空の待ち行列から要素を削除しえ
ないから、次にステップ42で待ち行列が空である(す
なわち、要素を1つも持たない)かどうがが決定される
。もし待ち行列が空であれば、アンカー・ポインタが全
Oになっている。よって、ステップ42では、アンカー
・ポインタの全0値に関して検査が行なわれ、待ち行列
が空でない、すなわち1つ以上の要素を有する場合にの
みステップ43以下の削除動作が続行する。
呼出しプログラムによって開始されると、ステップ41
で汎用レジスタR1及びR1+1が第3図のステップ3
1で行なわれたようにロードされる。汎用レジスタIt
i + tにロードされたカウンタ値は挿入または削
除の度に増分される。空の待ち行列から要素を削除しえ
ないから、次にステップ42で待ち行列が空である(す
なわち、要素を1つも持たない)かどうがが決定される
。もし待ち行列が空であれば、アンカー・ポインタが全
Oになっている。よって、ステップ42では、アンカー
・ポインタの全0値に関して検査が行なわれ、待ち行列
が空でない、すなわち1つ以上の要素を有する場合にの
みステップ43以下の削除動作が続行する。
ステップ43では、R1の内容によってアドレス指定さ
れるアンカー・ポイント要素にある現在のポインタ値が
R3にロードされる。ステップ44では、新しいカウン
タ値、すなわちアンカー・ブロックから取出されIだけ
増分されたカウンタ値が次の汎用レジスタR3+1にロ
ードされる。
れるアンカー・ポイント要素にある現在のポインタ値が
R3にロードされる。ステップ44では、新しいカウン
タ値、すなわちアンカー・ブロックから取出されIだけ
増分されたカウンタ値が次の汎用レジスタR3+1にロ
ードされる。
次にステップ45では、R1の値とRI+1のカウンタ
値が依然としてMSのB2 (B2)におけるアンカー
・ポインタ及びカウンタの値と同じであるかどうかを検
査して、他のいすJLかのプログラムが実際のアンカー
・ポインタを変更するように干渉したか、例えば要素の
挿入または削除を行なったかどうかを決定する。次のス
テップ46では、得ら汎だ条件コードを検査してCDS
実行によって挿入がなされたかどうかを決定する。CC
COO場合は、削除がなされており、アンカー・ブロッ
クは新しいポインタ及び新しいカウンタ値を有する。ス
テップ47は、R1にあるアドレスが削除された要素を
表わし、ルーチンがその呼出プログラムにリターンする
ときR1が削除操作の出力を含むことを表わす。
値が依然としてMSのB2 (B2)におけるアンカー
・ポインタ及びカウンタの値と同じであるかどうかを検
査して、他のいすJLかのプログラムが実際のアンカー
・ポインタを変更するように干渉したか、例えば要素の
挿入または削除を行なったかどうかを決定する。次のス
テップ46では、得ら汎だ条件コードを検査してCDS
実行によって挿入がなされたかどうかを決定する。CC
COO場合は、削除がなされており、アンカー・ブロッ
クは新しいポインタ及び新しいカウンタ値を有する。ス
テップ47は、R1にあるアドレスが削除された要素を
表わし、ルーチンがその呼出プログラムにリターンする
ときR1が削除操作の出力を含むことを表わす。
しかしながら、もしステップ46でCCが1であること
を表わせば、挿入は行なわhなかったが、CDS命令が
実際の現アンカー・ポインタ及びカウンタの値をR1及
びR1+1に各々ロードしている。従って干渉するプロ
グラムが待ち行列を空にしていることがありうるので、
条件付き分岐によってルーチンはステップ42に戻り、
待ち行列の空のステータスを再検査する。ステップ42
〜46は、削除が行なわれ、ステップ46でCCCOO
検出されるまで反復される。
を表わせば、挿入は行なわhなかったが、CDS命令が
実際の現アンカー・ポインタ及びカウンタの値をR1及
びR1+1に各々ロードしている。従って干渉するプロ
グラムが待ち行列を空にしていることがありうるので、
条件付き分岐によってルーチンはステップ42に戻り、
待ち行列の空のステータスを再検査する。ステップ42
〜46は、削除が行なわれ、ステップ46でCCCOO
検出されるまで反復される。
アンカー・ポインタと共にカウンタが使用されている理
由は、ステップ43とステップ44の間で他のプロセッ
サが介入して複数の挿入操作及び削除操作を行なったた
めに、アンカー・ポインタの値は同じままであるが、ア
ンカー・ポイント要素のポインタ・フィールドの値が変
えられていることがあるからである。このような可能性
に対する保護どしてCDS命令が使用され、各々の挿入
または削除のカウンタ値を調整するとともに、ステップ
44で新しいカウンタ値を比較する。等しくないカウン
タ値はcc=iを生じ、ルーチンはステップ46からス
テップ42に戻って再び削除を試みる。
由は、ステップ43とステップ44の間で他のプロセッ
サが介入して複数の挿入操作及び削除操作を行なったた
めに、アンカー・ポインタの値は同じままであるが、ア
ンカー・ポイント要素のポインタ・フィールドの値が変
えられていることがあるからである。このような可能性
に対する保護どしてCDS命令が使用され、各々の挿入
または削除のカウンタ値を調整するとともに、ステップ
44で新しいカウンタ値を比較する。等しくないカウン
タ値はcc=iを生じ、ルーチンはステップ46からス
テップ42に戻って再び削除を試みる。
先行技術において、同じ要素を含む2つの待ち行列、即
ち要素挿入用の入力待ち行列及び要素削除用の出力待ち
行列を用いることにより、FIFO方式のオペレーショ
ンが行なわれている。この方法は従来のIBM MV
Sプロゲラ11のIEAVEDSOモジュール及びIE
AVESC1モジュールで用いられている。前にLIF
O要素挿入について説明したように、比較置換技法を用
いれば、入力待ち行列をロックせずにその保全性を失う
ことなく複数のCPUによって要素を人力待ちfT列に
効率的に挿入することができる。ある状態(例えば、人
力待ち行列のサイズが最大であるが、または出力待ち行
列が空である状S)が生じると、両方の待ち行列がロッ
クされてその使用が阻止されるとともに、第1の待ち行
列の全要素が除去さJ+、て、(例えば、そのポインタ
・チェーンを逆にすることによって)FIFOシーケン
スに再配列された後、第2の待ち行列である出力待ち行
列に挿入される。第1の待ち行列からの出力及び第2の
待ち行列への入力は、この待ち行列再構成プロセスの間
はロックされている。出力待ち行列はその後、挿入ロッ
クを維持して挿入を阻止するが、アンカー・ポイント要
素を削除することによって、削除ロックなしにFIFO
方式での削除操作を可能にする。よって、第2の待ち行
列が空にされている間に新しい要素がその中に挿入され
ることはない。第2の待ち行列の挿入可能な唯一の要素
は、ロック制御の下に第1の待ち行列から与えらhる要
素である。
ち要素挿入用の入力待ち行列及び要素削除用の出力待ち
行列を用いることにより、FIFO方式のオペレーショ
ンが行なわれている。この方法は従来のIBM MV
Sプロゲラ11のIEAVEDSOモジュール及びIE
AVESC1モジュールで用いられている。前にLIF
O要素挿入について説明したように、比較置換技法を用
いれば、入力待ち行列をロックせずにその保全性を失う
ことなく複数のCPUによって要素を人力待ちfT列に
効率的に挿入することができる。ある状態(例えば、人
力待ち行列のサイズが最大であるが、または出力待ち行
列が空である状S)が生じると、両方の待ち行列がロッ
クされてその使用が阻止されるとともに、第1の待ち行
列の全要素が除去さJ+、て、(例えば、そのポインタ
・チェーンを逆にすることによって)FIFOシーケン
スに再配列された後、第2の待ち行列である出力待ち行
列に挿入される。第1の待ち行列からの出力及び第2の
待ち行列への入力は、この待ち行列再構成プロセスの間
はロックされている。出力待ち行列はその後、挿入ロッ
クを維持して挿入を阻止するが、アンカー・ポイント要
素を削除することによって、削除ロックなしにFIFO
方式での削除操作を可能にする。よって、第2の待ち行
列が空にされている間に新しい要素がその中に挿入され
ることはない。第2の待ち行列の挿入可能な唯一の要素
は、ロック制御の下に第1の待ち行列から与えらhる要
素である。
[発明の概要]
本発明は単一の連鎖された待ち行列に対する並列オペレ
ーションを可能にする。すなわち複数のプロセッサが要
素挿入ルーチンを同時に実行すること、及びそれと同時
に任意のプロセッサが要素削除ルーチンを実行すること
によって待ち行列から任意の要素を取り除くこと゛が可
能である。削除プロセスの間、削除ロックがオンにセラ
1〜されるが、これはアンカー・ポイン1〜要素を挿入
するために並列に実行される1以上のルーチンの処理に
は影響しない。
ーションを可能にする。すなわち複数のプロセッサが要
素挿入ルーチンを同時に実行すること、及びそれと同時
に任意のプロセッサが要素削除ルーチンを実行すること
によって待ち行列から任意の要素を取り除くこと゛が可
能である。削除プロセスの間、削除ロックがオンにセラ
1〜されるが、これはアンカー・ポイン1〜要素を挿入
するために並列に実行される1以上のルーチンの処理に
は影響しない。
非I、iFI待ち行列をロックしてそこから非アンカー
・ポイント要素を削除する場合には、まず要求された非
アンカー・ポイン1〜要素を見つけるために待ち行列が
探索され(アンカー・ポインタから始める)、待ち行列
中の先行要素にあるポインタが削除される要素のアドレ
スとして出力される。そして、削除される要素にあるポ
インタをその先行要素へ移すことによって目的とする非
アンカー・ポイント要素が削除される。
・ポイント要素を削除する場合には、まず要求された非
アンカー・ポイン1〜要素を見つけるために待ち行列が
探索され(アンカー・ポインタから始める)、待ち行列
中の先行要素にあるポインタが削除される要素のアドレ
スとして出力される。そして、削除される要素にあるポ
インタをその先行要素へ移すことによって目的とする非
アンカー・ポイント要素が削除される。
待ち行列をロックしてアンカー・ポイント要素を削除す
る場合は、待ち行列においてアンカー・ポイン1−要素
に続く要素をアドレス指定するようにアンカー・ポイン
タが変更され、そして削除されるアンカー・ポイン1−
要素のアドレスが出力される。
る場合は、待ち行列においてアンカー・ポイン1−要素
に続く要素をアドレス指定するようにアンカー・ポイン
タが変更され、そして削除されるアンカー・ポイン1−
要素のアドレスが出力される。
非LIFO処理のうちで重要なのは、待ち行列の最後の
要素を要求された要素と考えるFIFO処理である。最
後の要素はそのポインタ・フィールドにある待ち行列終
結コードによって識別される。
要素を要求された要素と考えるFIFO処理である。最
後の要素はそのポインタ・フィールドにある待ち行列終
結コードによって識別される。
本発明は非純粋LIFO待ち行列(ユーザのオプション
によって待ち行列がLIFO方式または非L I FO
方式で削除されるという意味で「非純粋」である)にお
いて効率的な処理を与える。本発明は、待ち行列にアン
カー・ポイン1〜要素を挿入する場合は、いかなるロッ
クも使用しない。そのときの待ち行列の保全性は、前述
のCS命令の使用によって維持される。
によって待ち行列がLIFO方式または非L I FO
方式で削除されるという意味で「非純粋」である)にお
いて効率的な処理を与える。本発明は、待ち行列にアン
カー・ポイン1〜要素を挿入する場合は、いかなるロッ
クも使用しない。そのときの待ち行列の保全性は、前述
のCS命令の使用によって維持される。
本発明の目的は多重プロゲラミンクあるいは多重処理の
ための新規な待ち行列管理方法を提供することにあり、
それにより下記のことが可能になる。
ための新規な待ち行列管理方法を提供することにあり、
それにより下記のことが可能になる。
(1) 非LIFO待ち行列及びLTFO待ち行列ど
して働く単一の待ち行列の処理効率を増大しながら、カ
ウンタ・フィールドを用いずに待ち行列の保全性に関す
る危険を除く′。
して働く単一の待ち行列の処理効率を増大しながら、カ
ウンタ・フィールドを用いずに待ち行列の保全性に関す
る危険を除く′。
(2) 同じ待ち行列に対し、あるユーザ・プログラ
ムによる非LIF○削除操作と、1以上の他のユーザー
・プログラムによるアンカー・ポイン1−要素の挿入操
作とを平行して行なえる。
ムによる非LIF○削除操作と、1以上の他のユーザー
・プログラムによるアンカー・ポイン1−要素の挿入操
作とを平行して行なえる。
(3) 待ち行列を破壊するおそれなしに、任意のC
PUによる非アンカー・ポイン1−要素またはアンカー
・ポイン1へ要素の削除操作と、他の任意のCI) U
による1つ以上のアンカー・ポイント要素の挿入操作と
を並列に遂行し得る非L I F O待ち行列出力ロッ
クを与える。
PUによる非アンカー・ポイン1−要素またはアンカー
・ポイン1へ要素の削除操作と、他の任意のCI) U
による1つ以上のアンカー・ポイント要素の挿入操作と
を並列に遂行し得る非L I F O待ち行列出力ロッ
クを与える。
(4)非LII”O待ち行列及びLIFO待ち行列どし
て効率的に動作可能であって、その待ち行列に挿入さJ
している1つ以上のアンカー・ポイン1〜要素の処理と
平行していかなる要素の削除処理をも可能にする待ち行
列を与える。
て効率的に動作可能であって、その待ち行列に挿入さJ
している1つ以上のアンカー・ポイン1〜要素の処理と
平行していかなる要素の削除処理をも可能にする待ち行
列を与える。
(5)異なるタイプのLIFO及び非LIFO削除操作
が待ち行列の保全性を害する危険なしにいずれのプログ
ラムによっても任意に実行可能である効率的な並列挿入
/削除操作を可能にする単−待ち行列を与える。
が待ち行列の保全性を害する危険なしにいずれのプログ
ラムによっても任意に実行可能である効率的な並列挿入
/削除操作を可能にする単−待ち行列を与える。
(6)従来は挿入操作及び削除操作の間、待ち行列の保
全性を維持するために必要とされていた待ち行列アンカ
ー・ブロック中のカウンタを使用することなく、待ち行
列の並列LIFO/非LIFOオペレーションを可能に
する。
全性を維持するために必要とされていた待ち行列アンカ
ー・ブロック中のカウンタを使用することなく、待ち行
列の並列LIFO/非LIFOオペレーションを可能に
する。
[良好な実施例の説明コ
第1図は、主記憶にある連鎖待ち行列(以下、単に[待
ち行列]という)10を共有する複数のOPUで複数の
プログラム(1〜K)が実行されているMPシステムに
おいて、本発明に従い単一の待ち行列10に対してなさ
れる一般的なオペレージAンを示す。プログラム1〜プ
ログラムJは同時に待ち行列IOに要素を挿入すること
ができそれと同時にプログラムにはアンカー・ポイン1
−要素を含み得る1つ以上の要素を同じ待ち行列10か
ら削除することができる。
ち行列]という)10を共有する複数のOPUで複数の
プログラム(1〜K)が実行されているMPシステムに
おいて、本発明に従い単一の待ち行列10に対してなさ
れる一般的なオペレージAンを示す。プログラム1〜プ
ログラムJは同時に待ち行列IOに要素を挿入すること
ができそれと同時にプログラムにはアンカー・ポイン1
−要素を含み得る1つ以上の要素を同じ待ち行列10か
ら削除することができる。
本発明は挿入操作及び削除操作を並列に遂行している間
、フィールドなしに待ち行列の保全性を維持しうるから
カウンタ・フィールドは待ち行列10に対して与えられ
ていな゛い。
、フィールドなしに待ち行列の保全性を維持しうるから
カウンタ・フィールドは待ち行列10に対して与えられ
ていな゛い。
プログラム1−Jのどれも待ち行列】0において、いか
なるロックも用いず、こILらのプログラムの各々はS
/370C8命令を用いて要素を待ち行列のアンカ一端
に挿入する。しかしながら、プログラムにはその削除操
作を遂行するため番こ(よ。
なるロックも用いず、こILらのプログラムの各々はS
/370C8命令を用いて要素を待ち行列のアンカ一端
に挿入する。しかしながら、プログラムにはその削除操
作を遂行するため番こ(よ。
削除ロック11を得なけオしばならなし)。ブロク゛ラ
ムにはアンカー・ポイン1へ要素の場合を除き、要素(
単数または複数)を削除するのにCS命令またはCI)
S命令を用いなくてもよい。(非同期しこ動作してい
る他のCI) Uが削除ロック11を要求していること
があるので、削除ロック11を得るため、CS命令、C
I)S命令またはTS命令を用いる必要があるかも知れ
ない。) 第2図は、アンカー・ブロック20及び要素N〜0(こ
れらはアンカー・ブロックと各々の待ち行列要素N〜0
に含まれたポインタによってアンカー・ブロック20に
連鎖されている)を含む待ち行列10において要素を挿
入または削除するため同時に遂行できるプロセスの構造
例である。アンカー・ポインタ21は待ち行列10にお
けるアンカー・ポイント要素Nの位置を示すアドレスで
ある。アンカー・ポイン1−要素Nはアンカー・ポイン
タ21に含まれたアドレスによって直接アドレス指定さ
れる。
ムにはアンカー・ポイン1へ要素の場合を除き、要素(
単数または複数)を削除するのにCS命令またはCI)
S命令を用いなくてもよい。(非同期しこ動作してい
る他のCI) Uが削除ロック11を要求していること
があるので、削除ロック11を得るため、CS命令、C
I)S命令またはTS命令を用いる必要があるかも知れ
ない。) 第2図は、アンカー・ブロック20及び要素N〜0(こ
れらはアンカー・ブロックと各々の待ち行列要素N〜0
に含まれたポインタによってアンカー・ブロック20に
連鎖されている)を含む待ち行列10において要素を挿
入または削除するため同時に遂行できるプロセスの構造
例である。アンカー・ポインタ21は待ち行列10にお
けるアンカー・ポイント要素Nの位置を示すアドレスで
ある。アンカー・ポイン1−要素Nはアンカー・ポイン
タ21に含まれたアドレスによって直接アドレス指定さ
れる。
アンカー・ポイン1−要素Nのポインタは次の待ち行列
要素(N−1)の位置を示し、要素(N−1)のポイン
タはその次の待ち行列要素の位置を示す。以下同様な位
置指定が最後の要素0に達するまで続Uられる。最後の
要素0はポインタ・フィールド中の特殊なコード、例え
ば全0によって識別される。ゼロ(アンカー・ポインタ
21番よ全0)を含む任意の数の要素が任意の時点にお
り)で待ち行列IOに存在し得る。このように、待ち行
列10における要素の連鎖順序は最も新い)要素Nから
最も古い要素0に至る。
要素(N−1)の位置を示し、要素(N−1)のポイン
タはその次の待ち行列要素の位置を示す。以下同様な位
置指定が最後の要素0に達するまで続Uられる。最後の
要素0はポインタ・フィールド中の特殊なコード、例え
ば全0によって識別される。ゼロ(アンカー・ポインタ
21番よ全0)を含む任意の数の要素が任意の時点にお
り)で待ち行列IOに存在し得る。このように、待ち行
列10における要素の連鎖順序は最も新い)要素Nから
最も古い要素0に至る。
待ち行列10に入力される各々の要素はアンカー・ポイ
ン1〜要素Nとして挿入され、それ番こよって前のアン
カー・ポイント要素は待ち行列10番;おいて2番目の
要素(N−]、)になる。アンカー・ポイン1〜要素N
は待ち行列10の先頭に位置し、論理的にアンカーに最
も近いとみなされるのに対し、要素0は待ち行列10の
末尾し;位置し、論理的にアンカーから最も遠いとみな
される。
ン1〜要素Nとして挿入され、それ番こよって前のアン
カー・ポイント要素は待ち行列10番;おいて2番目の
要素(N−]、)になる。アンカー・ポイン1〜要素N
は待ち行列10の先頭に位置し、論理的にアンカーに最
も近いとみなされるのに対し、要素0は待ち行列10の
末尾し;位置し、論理的にアンカーから最も遠いとみな
される。
待ち行列10のアンカー・ブロック20及び各々の要素
は、ポインタ・フィールドの他に、待ち行列によって管
理されている要素情報を含む他の周知のフィールドを有
することがある。
は、ポインタ・フィールドの他に、待ち行列によって管
理されている要素情報を含む他の周知のフィールドを有
することがある。
フィールド11 (アンカー・ブロック2oに存在しな
くてもよい)は削除ロックを含む。削除ロックは全0を
含む場合にはオフ(アンロック状態)にセットされ、そ
れ以外の場合にはオン(ロック状態)にセットされる。
くてもよい)は削除ロックを含む。削除ロックは全0を
含む場合にはオフ(アンロック状態)にセットされ、そ
れ以外の場合にはオン(ロック状態)にセットされる。
削除ロックは、削除ルーチンを呼出して削除ロックを渡
す待ち行列アクセス・プログラムによってセラ1〜さJ
Lることかある。
す待ち行列アクセス・プログラムによってセラ1〜さJ
Lることかある。
この場合、削除ルーチンは「削除ロックを保持する」と
みなされる。
みなされる。
待ち行列10の各要素は、普通はMSの異なる領域に位
置し、待ち行列10の他の要素と物理的に連続して配置
されることはめったにない。このように、これらの要素
は待ち行列1oでアンカー・ポインタ21で始まる要素
のポインタの連鎖によって位置が示されるから、MS内
のどこにでも広く散在しうる。従って、アンカー・ポイ
ント要素Nは物理的にアンカー・ブロック20の近くに
存在しなくてもよい。
置し、待ち行列10の他の要素と物理的に連続して配置
されることはめったにない。このように、これらの要素
は待ち行列1oでアンカー・ポインタ21で始まる要素
のポインタの連鎖によって位置が示されるから、MS内
のどこにでも広く散在しうる。従って、アンカー・ポイ
ント要素Nは物理的にアンカー・ブロック20の近くに
存在しなくてもよい。
待ち行列アクセス・プログラムはアンカー・ブロック2
0のMSアドレス及びその中のアンカー・ポインタ21
に苅する指標を知ることによって待ち行列10をアクセ
スする。待ち行列アクセス・プログラムの要素削除ルー
チンは、アンカー・ポインタ21を含む待ち行列中のポ
インタの連鎖を用いることによって待ち行列10の任意
の要素を見つけることができる。
0のMSアドレス及びその中のアンカー・ポインタ21
に苅する指標を知ることによって待ち行列10をアクセ
スする。待ち行列アクセス・プログラムの要素削除ルー
チンは、アンカー・ポインタ21を含む待ち行列中のポ
インタの連鎖を用いることによって待ち行列10の任意
の要素を見つけることができる。
第2図において3台のCPUI、2及び3は同時に待ち
行列アクセス・プログラムを実行している。CPUI及
び2はそれぞれ独立して待ち行列挿入ルーチンを実行し
て新しいアンカー・ポイン1〜要素を待ち行列10に挿
入しようとしており、CPU3は並行して削除ルーチン
50を実行して待ち行列10の非アンカー・余インド要
素、例えば要素(0)を削除しようとしている。CPU
1またはCPU2の一方が最初に新しい要素Nの挿入
に成功し、次いで他方のCPUがもう1つの新しい要素
Nを挿入し、これらの2つの新しい要素は待ち行列lO
の要素N及び要素(N−1)になる。
行列アクセス・プログラムを実行している。CPUI及
び2はそれぞれ独立して待ち行列挿入ルーチンを実行し
て新しいアンカー・ポイン1〜要素を待ち行列10に挿
入しようとしており、CPU3は並行して削除ルーチン
50を実行して待ち行列10の非アンカー・余インド要
素、例えば要素(0)を削除しようとしている。CPU
1またはCPU2の一方が最初に新しい要素Nの挿入
に成功し、次いで他方のCPUがもう1つの新しい要素
Nを挿入し、これらの2つの新しい要素は待ち行列lO
の要素N及び要素(N−1)になる。
詳細に説明すれば、第2図で実行される各々の挿入ルー
チンはそオしぞれの新しい要素(N)26及び27をセ
ットアツプした後、C8命令のオペランドとしてそれぞ
れのCPUの汎用レジスタR1及びR3をロードする。
チンはそオしぞれの新しい要素(N)26及び27をセ
ットアツプした後、C8命令のオペランドとしてそれぞ
れのCPUの汎用レジスタR1及びR3をロードする。
すなわち、各々のR1は、MSにおいて待ち行列10の
全てのユーザに知られているアドレスD2(B2)に置
かれているアンカー・ポインタ20のアドレスを受取る
。
全てのユーザに知られているアドレスD2(B2)に置
かれているアンカー・ポインタ20のアドレスを受取る
。
CF) U 1及び2のR3のそれぞれの挿入ルーチン
によって、新たにセットアツプされた要素26及び27
のMSアドレスをそれぞれロードされる。
によって、新たにセットアツプされた要素26及び27
のMSアドレスをそれぞれロードされる。
各挿入ルーチンは、待ち行列をロックしない従来のルー
チン(第3図)に似ているが、カウンタ・フィールドを
使用しない点が異なっている。
チン(第3図)に似ているが、カウンタ・フィールドを
使用しない点が異なっている。
第2図において、削除ルーチン50は同時に待ち行列1
0から要素を削除するように働く。削除ルーチン50は
最初に待ち行列10に対する削除ロック11を保持せね
ばならない。これは削除ルーチン50の実行が完了する
まで保持される。削除ロック11は削除ルーチン、また
は削除ルーチンを呼出してオンにセットされた削除ロッ
クを渡すルーチンによってオンにセットされる。
0から要素を削除するように働く。削除ルーチン50は
最初に待ち行列10に対する削除ロック11を保持せね
ばならない。これは削除ルーチン50の実行が完了する
まで保持される。削除ロック11は削除ルーチン、また
は削除ルーチンを呼出してオンにセットされた削除ロッ
クを渡すルーチンによってオンにセットされる。
第2図において、削除ルーチン50は非LIFOオペレ
ーションの場合、非アンカー・ポイン1〜要素を削除す
るものとして示されている。しかしながら、本発明によ
って、アンカー・ポイン1−要素を含む任意の要素を削
除ルーチン50によって削除することができる。
ーションの場合、非アンカー・ポイン1〜要素を削除す
るものとして示されている。しかしながら、本発明によ
って、アンカー・ポイン1−要素を含む任意の要素を削
除ルーチン50によって削除することができる。
良りrな削除ロックに関するプログラミング」二の規約
は次の通りである。MPシステムで待ち行列削除ルーチ
ンを実行する事がある全てのユーザ・プログラムは待ち
行列で要素の削除を試みる前にそのロック・フィールド
の状態を検査し、非0値によってオンにセットされたロ
ック・フィールドを見つけた時は待ち行列からの削除は
行なわない。
は次の通りである。MPシステムで待ち行列削除ルーチ
ンを実行する事がある全てのユーザ・プログラムは待ち
行列で要素の削除を試みる前にそのロック・フィールド
の状態を検査し、非0値によってオンにセットされたロ
ック・フィールドを見つけた時は待ち行列からの削除は
行なわない。
この規約は待ち行列挿入ルーチンを実行することがある
ユーザ・プログラムがロック・フィール 、ドの状態を
検査することを必要としない。
ユーザ・プログラムがロック・フィール 、ドの状態を
検査することを必要としない。
この規約を用いる場合、削除ロック・フィールドは削除
ルーチンを呼出す前にユーザ・プログラムによって検査
されてもよい。もしロックがオフにセラ1−されている
ことをユーザ・ルーチンが発見す九ば、ユーザ・ルーチ
ンは自身に割当てられたロック・コード(非Oのユーザ
識別コードでもよい)を書込むことによりロックをオン
にセットしうる。次いで、ユーザ・ルーチンは削除ルー
チンを呼出してそれに削除ロック・ア1くレスを渡す。
ルーチンを呼出す前にユーザ・プログラムによって検査
されてもよい。もしロックがオフにセラ1−されている
ことをユーザ・ルーチンが発見す九ば、ユーザ・ルーチ
ンは自身に割当てられたロック・コード(非Oのユーザ
識別コードでもよい)を書込むことによりロックをオン
にセットしうる。次いで、ユーザ・ルーチンは削除ルー
チンを呼出してそれに削除ロック・ア1くレスを渡す。
削除ルーチンは削除操作を試みる前に、正しいロック・
コードが書込まれているかどうかを検査する。要素削除
が終了した後、削除ルーチンはロック・フィールドをオ
フ状態、すなわち全O値にリセットせねばならない。こ
れは任意の他のユーザ・プログラムに対し、待ち行列が
削除のために使用可能であることを表わす。
コードが書込まれているかどうかを検査する。要素削除
が終了した後、削除ルーチンはロック・フィールドをオ
フ状態、すなわち全O値にリセットせねばならない。こ
れは任意の他のユーザ・プログラムに対し、待ち行列が
削除のために使用可能であることを表わす。
しかしながら、この規約は挿入ルーチンが削除ロック・
フィールドの状態を検査することを必要としないから、
たとえそれがオンにセットされていても、要素の同時挿
入を阻止しない。よって、たとえ削除ロックが保持され
ている間でも、待ち行列の保全性に危険を及ぼさずに、
要素挿入及び要素削除を同時に行なうことができ、その
際同時に実行される任意の数の要素挿入ルーチンによっ
て複数の新しい要素を待ち行列のアンカ一端に挿入する
ことができる。
フィールドの状態を検査することを必要としないから、
たとえそれがオンにセットされていても、要素の同時挿
入を阻止しない。よって、たとえ削除ロックが保持され
ている間でも、待ち行列の保全性に危険を及ぼさずに、
要素挿入及び要素削除を同時に行なうことができ、その
際同時に実行される任意の数の要素挿入ルーチンによっ
て複数の新しい要素を待ち行列のアンカ一端に挿入する
ことができる。
ロックされた削除操作においては、待ち行列を探索して
要求された要素を見つけるのに任意のユーザ基!曽が使
用可能であり、そJLを削除ルーチンに含ませておくこ
ともできる。例えば、各々の待ち行列要素中の既知の位
置に優先順位標識が与えられ、そして削除ルーチンは探
索引数として特定の優先順位標識を指定することにより
、待ち行列においてその優先順位を含む最初の要素を探
す。
要求された要素を見つけるのに任意のユーザ基!曽が使
用可能であり、そJLを削除ルーチンに含ませておくこ
ともできる。例えば、各々の待ち行列要素中の既知の位
置に優先順位標識が与えられ、そして削除ルーチンは探
索引数として特定の優先順位標識を指定することにより
、待ち行列においてその優先順位を含む最初の要素を探
す。
例えば、所与の優先順位を有する要素を見つけるために
、各要素に含まれるポインタを用いて要素が次々にアク
セスされ、その中の優先順位標識が指定された優先順位
標識と比較さJLる。指定された優先順位標識がどれか
の要素で見つかると探索は停止され、その要素が削除さ
れる。
、各要素に含まれるポインタを用いて要素が次々にアク
セスされ、その中の優先順位標識が指定された優先順位
標識と比較さJLる。指定された優先順位標識がどれか
の要素で見つかると探索は停止され、その要素が削除さ
れる。
要求された優先順位を有する要素の全部を削除するので
あれば、待ち行列の最後の要素に達するまで探索は続く
。
あれば、待ち行列の最後の要素に達するまで探索は続く
。
よって、第2図において、例えばCP U 3のブロク
ラムによる削除ロックの保持は、アンカー・ポイント要
素がCPUIまたはCP U 2によって並行して挿入
さJしるのを妨げない。削除ロックは同じ待ち行列の削
除操作に現在1台のcpuだけが携一つでいることを保
証する。
ラムによる削除ロックの保持は、アンカー・ポイント要
素がCPUIまたはCP U 2によって並行して挿入
さJしるのを妨げない。削除ロックは同じ待ち行列の削
除操作に現在1台のcpuだけが携一つでいることを保
証する。
このように、第2図のCP (J 3で実行中の削除ル
ーチンは次の基本ステップを含む: (A) 待ち行列10を使用して削除操作を行なって
いることを他のユーザに知らせるためにロック・フィー
ルドを保持する。
ーチンは次の基本ステップを含む: (A) 待ち行列10を使用して削除操作を行なって
いることを他のユーザに知らせるためにロック・フィー
ルドを保持する。
(13) 削除される要素を見つけるため待ち行列1
0を探索する。
0を探索する。
(C) 削除ルーチンの出力領域に見つかった要素の
アドレスを書込む。このアドレスは待ち行列中の先行要
素にあるポインタであって、削除さオしるべき要素をア
ドレス指定する。
アドレスを書込む。このアドレスは待ち行列中の先行要
素にあるポインタであって、削除さオしるべき要素をア
ドレス指定する。
(D) 見つかった要素内のポインタを先行要素のポ
インタ・フィールドに移し、それによって先行要素のポ
インタは見つかった要素の次にある要素をアドレス指定
する。この動作は見つかった要素を削除するためそれに
対するポインタを待ち行列から除去し、見つかった要素
がもはや待ち行列でアドレス指定さ]しないようにする
。もしアンカー・ポイント要素が削除されるのであれば
、先行要素は存在せずそしてアンカー・ポインタは、O
8命令を用いて削除さ]しるアンカー・ポイント要素に
あるポインタに変更され、その次にある要素をアドレス
指定せねばならない。O8命令は、他のCPUで同時に
遂行されている挿入操作によるアンカー・ポインタの変
化に対して待ち行列の保全性を保証するのに必要である
。
インタ・フィールドに移し、それによって先行要素のポ
インタは見つかった要素の次にある要素をアドレス指定
する。この動作は見つかった要素を削除するためそれに
対するポインタを待ち行列から除去し、見つかった要素
がもはや待ち行列でアドレス指定さ]しないようにする
。もしアンカー・ポイント要素が削除されるのであれば
、先行要素は存在せずそしてアンカー・ポインタは、O
8命令を用いて削除さ]しるアンカー・ポイント要素に
あるポインタに変更され、その次にある要素をアドレス
指定せねばならない。O8命令は、他のCPUで同時に
遂行されている挿入操作によるアンカー・ポインタの変
化に対して待ち行列の保全性を保証するのに必要である
。
([E) 待ち行列10がもはや削除操作で使用され
ておらず、従って新たな削除操作が可能であることを他
のユーザ・プロゲラl\に知らせるためにロック・フィ
ールドをオフにセットする。
ておらず、従って新たな削除操作が可能であることを他
のユーザ・プロゲラl\に知らせるためにロック・フィ
ールドをオフにセットする。
挿入または削除ルーチンを実行するには、最初に第2図
のアンカー・ポインタ20の内容をアクセスして待ち行
列10の最初のアンカー・ポイン1〜要素を見つける。
のアンカー・ポインタ20の内容をアクセスして待ち行
列10の最初のアンカー・ポイン1〜要素を見つける。
削除探索はアンカー・ポイン1〜要素にあるポインタを
もアクセスして次の要素を見つけねばならない。このス
テップは、要求された要素が見つかるまで、または待ち
行列10の終りを示す全Oのポインタが見つかるまで続
けられる。CP [J 3によって実行さJしることが
ある特殊な削除ルーチンの例は、待ち行列から要素をF
IFO方式で取出す技術を表わす次の表のシステlz/
370アセンブラ言語ルーチンの目的コードによって
−Ijえらicる。
もアクセスして次の要素を見つけねばならない。このス
テップは、要求された要素が見つかるまで、または待ち
行列10の終りを示す全Oのポインタが見つかるまで続
けられる。CP [J 3によって実行さJしることが
ある特殊な削除ルーチンの例は、待ち行列から要素をF
IFO方式で取出す技術を表わす次の表のシステlz/
370アセンブラ言語ルーチンの目的コードによって
−Ijえらicる。
第5図及び第6図は同様なF’IFO削除ルーチンの流
れ図である。第5図のステップ64は待ち行列に1より
も多くの要素があるかどうかを調べ、1つの要素だけが
ある場合はステップ67でそれを待ち行列から削除する
ことを試みる。ステップ61.62.63.68及び6
9については説明は不要であろう。
れ図である。第5図のステップ64は待ち行列に1より
も多くの要素があるかどうかを調べ、1つの要素だけが
ある場合はステップ67でそれを待ち行列から削除する
ことを試みる。ステップ61.62.63.68及び6
9については説明は不要であろう。
第6図は待ち行列の最後の要素を探索する。次の要素が
順次見つかるごとに、ステップ71及び72で現要素と
その先行要素のアドレスを1<7と1り3に各々保管す
る。12.7にある先行要素のアドレスは、ステップ7
4で最後の要素が見つかると保持される。ぞして、ステ
ップ76で、その要素のポインタ・フィールド(全O)
が1テアの内容によってアドレス指定さオした先行要素
に移さ4しる。
順次見つかるごとに、ステップ71及び72で現要素と
その先行要素のアドレスを1<7と1り3に各々保管す
る。12.7にある先行要素のアドレスは、ステップ7
4で最後の要素が見つかると保持される。ぞして、ステ
ップ76で、その要素のポインタ・フィールド(全O)
が1テアの内容によってアドレス指定さオした先行要素
に移さ4しる。
ステップ77は、削除された要素の出力アドレスがR3
にあることを示す。そしてステップ78で非FIFO削
除ロック・フィールドがオフにセットされる。
にあることを示す。そしてステップ78で非FIFO削
除ロック・フィールドがオフにセットされる。
第5図及び第6図における重要な点は第5図のステップ
61が終った後は、削除ルーチンによる待ち行列の探索
が保証されていることである。要素を削除するためには
、削除ロックを保持しなければならないので、この削除
ルーチンが削除ロックを保持している限り待ち行列中の
どの要素も他のCPUのプログラムによって削除される
ことはない。しかしながら、前に説明したように、他の
複数のCPUで実行さ九ている挿入ルーチンによって新
しい要素(アンカー・ポイン1〜要F3)を次々に挿入
していくことは可能である。新しい要素の挿入は、最初
に識別されたアンカー・ポイント要素とその待ち行列の
最後の要素の間にある要メ4の連鎖には影響しない。
61が終った後は、削除ルーチンによる待ち行列の探索
が保証されていることである。要素を削除するためには
、削除ロックを保持しなければならないので、この削除
ルーチンが削除ロックを保持している限り待ち行列中の
どの要素も他のCPUのプログラムによって削除される
ことはない。しかしながら、前に説明したように、他の
複数のCPUで実行さ九ている挿入ルーチンによって新
しい要素(アンカー・ポイン1〜要F3)を次々に挿入
していくことは可能である。新しい要素の挿入は、最初
に識別されたアンカー・ポイント要素とその待ち行列の
最後の要素の間にある要メ4の連鎖には影響しない。
第7図及び第8図は、汎用レジスタ1り6で指定された
探索引数を含む最初の要素を削除する削除ルーチンの流
れ図である。待ち行列の各要素の探索引数(SA)は、
第9図に示すように、先行要素内のポインタによって指
定されたアドレスから指標値■だけ離れたところに置か
れる。
探索引数を含む最初の要素を削除する削除ルーチンの流
れ図である。待ち行列の各要素の探索引数(SA)は、
第9図に示すように、先行要素内のポインタによって指
定されたアドレスから指標値■だけ離れたところに置か
れる。
第7図のルーチンは、要素の削除を要求するプログラム
がR6に探索引数をロードした後に開始さAしる。
がR6に探索引数をロードした後に開始さAしる。
第7図のステップ80において、呼出しプログラムによ
ってオンにセットされた状態でロックを受取ることによ
って、またはオフの状態で受取らばした場合にはそJし
をオンにセラ1〜することによって、削除ロックが保持
される。削除ロックのオンの状態は他のプログラムが待
ち行列中の現アンカー・ポイント要素を含む任意の要素
を変更することに阻止する。(ロックは削除ルーチンか
ら出るどきにオフにセラ1−さhる。)ステップ81に
おいて、アンカー・ポインタがR1にロードさオしる。
ってオンにセットされた状態でロックを受取ることによ
って、またはオフの状態で受取らばした場合にはそJし
をオンにセラ1〜することによって、削除ロックが保持
される。削除ロックのオンの状態は他のプログラムが待
ち行列中の現アンカー・ポイント要素を含む任意の要素
を変更することに阻止する。(ロックは削除ルーチンか
ら出るどきにオフにセラ1−さhる。)ステップ81に
おいて、アンカー・ポインタがR1にロードさオしる。
ステップ82において、ロードされたアンカー・ポイン
タ値を検査して空の待ち行列であるかどうかを調べる。
タ値を検査して空の待ち行列であるかどうかを調べる。
空でない場合は、ステップ83において、R1の内容に
よってアドレス指定されたアンカー・ポイント要素内の
ポインタをR3にロードする。よって、R3は現アンカ
ー・ポイント要素にあるポインタを有する。ステップ8
4において、最初の要素の探索引数がR6の内容と比較
さtシ、もしそれらが一致すると、ステップ87におい
て、その削除を試みる。ステップ88において、削除が
成功であるかどうかが決定され、成功の場合は、ステッ
プ89において、R1が削除された要素のアドレスを含
むことが表示され、ステップ90において、ロックがオ
フにセラ1−さ4シ、吐出プログラムへのリターンが行
なわ]しる。
よってアドレス指定されたアンカー・ポイント要素内の
ポインタをR3にロードする。よって、R3は現アンカ
ー・ポイント要素にあるポインタを有する。ステップ8
4において、最初の要素の探索引数がR6の内容と比較
さtシ、もしそれらが一致すると、ステップ87におい
て、その削除を試みる。ステップ88において、削除が
成功であるかどうかが決定され、成功の場合は、ステッ
プ89において、R1が削除された要素のアドレスを含
むことが表示され、ステップ90において、ロックがオ
フにセラ1−さ4シ、吐出プログラムへのリターンが行
なわ]しる。
しかし、ステップ84において、最初の要素が目的とす
る’JAM引数を有しない場合は、ステップ85におい
て、R3にあるポインタを検査してそれが最後の要素で
あるかどうか、すなわちそのポインタ値が0であるかど
うかを決定する。待ち行列にある要素が1つだけの場合
は、この時点で探索は終了し、ステップ86において、
ルーチンはロックをオフにセットし、呼出しプログラム
にリターンする。
る’JAM引数を有しない場合は、ステップ85におい
て、R3にあるポインタを検査してそれが最後の要素で
あるかどうか、すなわちそのポインタ値が0であるかど
うかを決定する。待ち行列にある要素が1つだけの場合
は、この時点で探索は終了し、ステップ86において、
ルーチンはロックをオフにセットし、呼出しプログラム
にリターンする。
しかしながら、ステップ85において、待ち行列に2つ
以上の要素が見つかった場合には、r3点を経由して第
8図に進む。
以上の要素が見つかった場合には、r3点を経由して第
8図に進む。
第8図は待ち行列10の探索の継続である。これは待ち
行列の2番目の要素から開始し、(a)所望の探索引数
を含む要素が見つかるか、または(b)そのような要素
が見つかることなく待ち行列の終りに達する場合に終了
する。
行列の2番目の要素から開始し、(a)所望の探索引数
を含む要素が見つかるか、または(b)そのような要素
が見つかることなく待ち行列の終りに達する場合に終了
する。
第9図は、第8図のプロセスによって探索される待ち行
列の一部を表わす。汎用レジスタR3は現在検査されて
いる要素のアドレスをロードされる。汎用レジスタR5
は現在検査されている要素にあるポインタをロードされ
る。このポインタは待ち行列10の次の要素をアドレス
指定する。
列の一部を表わす。汎用レジスタR3は現在検査されて
いる要素のアドレスをロードされる。汎用レジスタR5
は現在検査されている要素にあるポインタをロードされ
る。このポインタは待ち行列10の次の要素をアドレス
指定する。
第8図のステップ9Jが開始さJしるとき、R1はアン
カー・ポイント要素のアドレスを含み、R3はアンカー
・ポイン1〜要素にあるポインタを含む。そして、ステ
ップ91においてR5はアンカー・ポイント要素にある
ポインタをロードされる。
カー・ポイント要素のアドレスを含み、R3はアンカー
・ポイン1〜要素にあるポインタを含む。そして、ステ
ップ91においてR5はアンカー・ポイント要素にある
ポインタをロードされる。
ステップ92において、現在検査されている(すなわち
、R3によってアドレス指定された)要素の探索引数か
ら、それが要求された要素であるかどうかを検査する。
、R3によってアドレス指定された)要素の探索引数か
ら、それが要求された要素であるかどうかを検査する。
要求された要素ではない場合は、ステップ93において
、R5にあるポインタが待ち行列の終りを示しているか
どうかを決定する。もしそ1しが待ち行列の最後の要素
ならば、ステップ94において、出力領域に「未発見」
標識が記憶さ]し、ステップ96において、削除ロック
がオフにセラ1〜され、呼出プログラムへのリターンが
行なわiシる。現要素が最後の要素ではない場合、ステ
ップ97において、R1にR3の内容をロードし、R3
にR5の内容をロードすることによって探索が続行され
る。
、R5にあるポインタが待ち行列の終りを示しているか
どうかを決定する。もしそ1しが待ち行列の最後の要素
ならば、ステップ94において、出力領域に「未発見」
標識が記憶さ]し、ステップ96において、削除ロック
がオフにセラ1〜され、呼出プログラムへのリターンが
行なわiシる。現要素が最後の要素ではない場合、ステ
ップ97において、R1にR3の内容をロードし、R3
にR5の内容をロードすることによって探索が続行され
る。
ステップ92で探索引数の一致が検出されると、ステッ
プ]、 Olにおいて、現在R3にそのアドレスを有す
る要素が削除される。すなわち削除される要素内の(R
5にある)ポインタが、R1の内容によってアドレス指
定さJしる先行要素のポインタ・フィールドに記憶され
る。次に、ステップ102において、R3の内容すなわ
ち削除さJした要素のアドレスが特定の出力領域に記憶
される。そしてステップ96において、削除ロックがオ
フにセットされ、呼出プログラムへのリターンが行なわ
れる。
プ]、 Olにおいて、現在R3にそのアドレスを有す
る要素が削除される。すなわち削除される要素内の(R
5にある)ポインタが、R1の内容によってアドレス指
定さJしる先行要素のポインタ・フィールドに記憶され
る。次に、ステップ102において、R3の内容すなわ
ち削除さJした要素のアドレスが特定の出力領域に記憶
される。そしてステップ96において、削除ロックがオ
フにセットされ、呼出プログラムへのリターンが行なわ
れる。
第7図、第8図及び第9図の削除ルーチンは目的とする
探索引数を含む全ての要素を1回の探索オペレーション
で削除するように、容易に変更しうる。例えば、所与の
優先順次値を有する要素を単一の削除要求に応答してす
べて削除することができる。
探索引数を含む全ての要素を1回の探索オペレーション
で削除するように、容易に変更しうる。例えば、所与の
優先順次値を有する要素を単一の削除要求に応答してす
べて削除することができる。
第1図は実施例の概略を示すブロック図、第2図は3台
のCPUで2つの挿入ルーチン及び1つの削除ルーチン
が同時に実行される例を示すブロック図、 第3図及び第4図は先行技術のLIF○挿入ルーチン及
びLIFO削除ルーチンの流れ図、第5図及び第6図は
本発明に従うFIFO削除ルーチンの流れ図、 第7図及び第8図は本発明に従う他の削除ルーチンの流
れ図、 第9図は第8図に従って処理される待ち行列の一部分を
示すブロック図である。 FIG、4 FIG、3 FIG、4 FIG 6 nc、sカ\4FIG
、7 rlG、8
のCPUで2つの挿入ルーチン及び1つの削除ルーチン
が同時に実行される例を示すブロック図、 第3図及び第4図は先行技術のLIF○挿入ルーチン及
びLIFO削除ルーチンの流れ図、第5図及び第6図は
本発明に従うFIFO削除ルーチンの流れ図、 第7図及び第8図は本発明に従う他の削除ルーチンの流
れ図、 第9図は第8図に従って処理される待ち行列の一部分を
示すブロック図である。 FIG、4 FIG、3 FIG、4 FIG 6 nc、sカ\4FIG
、7 rlG、8
Claims (1)
- 【特許請求の範囲】 1以上の要素が該要素に含まれるポインタによって連鎖
されている待ち行列に対し。 オフ状態にセラ1〜されている場合にのみ前記待ち行列
に含まれる任意の要素の削除をri(能にする削除ロッ
クと、前記待ち行列中の先頭要素をアドレス指定するア
ンカー・ポインタとを準備し、前記削除に先立つ゛C前
記削除ロックをオン状態にセラj〜し、 前記アンカー・ポインタによって゛アドレス指定された
新たな要素を比較置換型の命令によって前記待ち行列へ
挿入するときは前記削除ロックを無視する。 ことを特徴とする待ち行列制御方法。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US06/438,993 US4482956A (en) | 1982-11-04 | 1982-11-04 | Parallel queueing method |
| US438993 | 1982-11-04 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPS5983249A true JPS5983249A (ja) | 1984-05-14 |
| JPH0324696B2 JPH0324696B2 (ja) | 1991-04-03 |
Family
ID=23742849
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP58172351A Granted JPS5983249A (ja) | 1982-11-04 | 1983-09-20 | 待ち行列制御方法 |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US4482956A (ja) |
| EP (1) | EP0108338B1 (ja) |
| JP (1) | JPS5983249A (ja) |
| DE (1) | DE3379518D1 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6292061A (ja) * | 1985-10-15 | 1987-04-27 | インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション | 共有資源に対するアクセスを直列化する方法 |
Families Citing this family (50)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4604694A (en) * | 1983-12-14 | 1986-08-05 | International Business Machines Corporation | Shared and exclusive access control |
| US4615001A (en) * | 1984-03-29 | 1986-09-30 | At&T Bell Laboratories | Queuing arrangement for initiating execution of multistage transactions |
| US5133062A (en) * | 1986-03-06 | 1992-07-21 | Advanced Micro Devices, Inc. | RAM buffer controller for providing simulated first-in-first-out (FIFO) buffers in a random access memory |
| US4949301A (en) * | 1986-03-06 | 1990-08-14 | Advanced Micro Devices, Inc. | Improved pointer FIFO controller for converting a standard RAM into a simulated dual FIFO by controlling the RAM's address inputs |
| US5134702A (en) * | 1986-04-21 | 1992-07-28 | Ncr Corporation | Serial-to-parallel and parallel-to-serial converter |
| JPS6355636A (ja) * | 1986-08-27 | 1988-03-10 | Hitachi Ltd | デ−タ処理システム |
| US4807111A (en) * | 1987-06-19 | 1989-02-21 | International Business Machines Corporation | Dynamic queueing method |
| US5159686A (en) * | 1988-02-29 | 1992-10-27 | Convex Computer Corporation | Multi-processor computer system having process-independent communication register addressing |
| US5050070A (en) * | 1988-02-29 | 1991-09-17 | Convex Computer Corporation | Multi-processor computer system having self-allocating processors |
| US4965716A (en) * | 1988-03-11 | 1990-10-23 | International Business Machines Corporation | Fast access priority queue for managing multiple messages at a communications node or managing multiple programs in a multiprogrammed data processor |
| US4965718A (en) * | 1988-09-29 | 1990-10-23 | International Business Machines Corporation | Data processing system incorporating a memory resident directive for synchronizing multiple tasks among plurality of processing elements by monitoring alternation of semaphore data |
| US5081572A (en) * | 1988-10-28 | 1992-01-14 | Arnold Michael E | Manipulation of time-ordered lists and instructions therefor |
| US5339418A (en) * | 1989-06-29 | 1994-08-16 | Digital Equipment Corporation | Message passing method |
| EP0418447B1 (en) * | 1989-09-20 | 1995-01-18 | International Business Machines Corporation | Device for controlling the enqueuing and dequeuing operations of messages in a memory |
| US5265229A (en) * | 1990-07-02 | 1993-11-23 | Digital Equipment Corporation | Single load, multiple issue queue with error recovery capability |
| US5224215A (en) * | 1990-07-13 | 1993-06-29 | International Business Machines Corporation | Message queue processing among cooperative processors having significant speed differences |
| US5606666A (en) * | 1994-07-19 | 1997-02-25 | International Business Machines Corporation | Method and apparatus for distributing control messages between interconnected processing elements by mapping control messages of a shared memory addressable by the receiving processing element |
| US5774745A (en) * | 1995-03-31 | 1998-06-30 | Cirrus Logic, Inc. | Method and apparatus for writing and reading entries in an event status queue of a host memory |
| US6587889B1 (en) | 1995-10-17 | 2003-07-01 | International Business Machines Corporation | Junction manager program object interconnection and method |
| KR0152714B1 (ko) * | 1995-12-06 | 1998-10-15 | 양승택 | 다중 사용자 환경의 저장시스템에서 버퍼 잠금기법을 이용한 버퍼 관리방법 |
| US6898650B1 (en) | 2000-08-10 | 2005-05-24 | Novell, Inc. | Queueing method supporting multiple client accesses simultaneously |
| US7203782B1 (en) | 2000-04-12 | 2007-04-10 | Novell, Inc. | Queueing method supporting multiple client accesses simultaneously |
| US6823351B1 (en) * | 2000-05-15 | 2004-11-23 | Sun Microsystems, Inc. | Work-stealing queues for parallel garbage collection |
| US7103887B2 (en) * | 2001-06-27 | 2006-09-05 | Sun Microsystems, Inc. | Load-balancing queues employing LIFO/FIFO work stealing |
| US6996645B1 (en) * | 2002-12-27 | 2006-02-07 | Unisys Corporation | Method and apparatus for spawning multiple requests from a single entry of a queue |
| US7346664B2 (en) | 2003-04-24 | 2008-03-18 | Neopath Networks, Inc. | Transparent file migration using namespace replication |
| US8539081B2 (en) | 2003-09-15 | 2013-09-17 | Neopath Networks, Inc. | Enabling proxy services using referral mechanisms |
| US8190741B2 (en) | 2004-04-23 | 2012-05-29 | Neopath Networks, Inc. | Customizing a namespace in a decentralized storage environment |
| US8195627B2 (en) | 2004-04-23 | 2012-06-05 | Neopath Networks, Inc. | Storage policy monitoring for a storage network |
| KR100703725B1 (ko) * | 2004-12-22 | 2007-04-05 | 삼성전자주식회사 | 서버의 성능 측정을 위한 장치 및 방법 |
| US7865684B2 (en) * | 2005-06-27 | 2011-01-04 | Ab Initio Technology Llc | Managing message queues |
| WO2007002855A2 (en) | 2005-06-29 | 2007-01-04 | Neopath Networks, Inc. | Parallel filesystem traversal for transparent mirroring of directories and files |
| US9176741B2 (en) * | 2005-08-29 | 2015-11-03 | Invention Science Fund I, Llc | Method and apparatus for segmented sequential storage |
| US8131689B2 (en) | 2005-09-30 | 2012-03-06 | Panagiotis Tsirigotis | Accumulating access frequency and file attributes for supporting policy based storage management |
| US8571962B1 (en) * | 2009-06-26 | 2013-10-29 | United Services Automobile Association (Usaa) | Systems and methods for automatically reinvesting certificate of deposits with an increase of the investment |
| US8996845B2 (en) * | 2009-12-22 | 2015-03-31 | Intel Corporation | Vector compare-and-exchange operation |
| US9473590B1 (en) | 2012-12-21 | 2016-10-18 | Emc Corporation | Client connection establishment over fibre channel using a block device access model |
| US9712427B1 (en) | 2012-12-21 | 2017-07-18 | EMC IP Holding Company LLC | Dynamic server-driven path management for a connection-oriented transport using the SCSI block device model |
| US9531765B1 (en) | 2012-12-21 | 2016-12-27 | Emc Corporation | System and method for maximizing system data cache efficiency in a connection-oriented data proxy service |
| US9509797B1 (en) | 2012-12-21 | 2016-11-29 | Emc Corporation | Client communication over fibre channel using a block device access model |
| US9514151B1 (en) * | 2012-12-21 | 2016-12-06 | Emc Corporation | System and method for simultaneous shared access to data buffers by two threads, in a connection-oriented data proxy service |
| US9237057B1 (en) | 2012-12-21 | 2016-01-12 | Emc Corporation | Reassignment of a virtual connection from a busiest virtual connection or locality domain to a least busy virtual connection or locality domain |
| US9407601B1 (en) | 2012-12-21 | 2016-08-02 | Emc Corporation | Reliable client transport over fibre channel using a block device access model |
| US9270786B1 (en) | 2012-12-21 | 2016-02-23 | Emc Corporation | System and method for proxying TCP connections over a SCSI-based transport |
| US9473591B1 (en) | 2012-12-21 | 2016-10-18 | Emc Corporation | Reliable server transport over fibre channel using a block device access model |
| US9232000B1 (en) | 2012-12-21 | 2016-01-05 | Emc Corporation | Method and system for balancing load across target endpoints on a server and initiator endpoints accessing the server |
| US9591099B1 (en) | 2012-12-21 | 2017-03-07 | EMC IP Holding Company LLC | Server connection establishment over fibre channel using a block device access model |
| US9473589B1 (en) | 2012-12-21 | 2016-10-18 | Emc Corporation | Server communication over fibre channel using a block device access model |
| US9647905B1 (en) | 2012-12-21 | 2017-05-09 | EMC IP Holding Company LLC | System and method for optimized management of statistics counters, supporting lock-free updates, and queries for any to-the-present time interval |
| US9563423B1 (en) | 2012-12-21 | 2017-02-07 | EMC IP Holding Company LLC | System and method for simultaneous shared access to data buffers by two threads, in a connection-oriented data proxy service |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4320455A (en) * | 1978-01-09 | 1982-03-16 | Honeywell Information Systems Inc. | Queue structure for a data processing system |
| US4271468A (en) * | 1979-11-06 | 1981-06-02 | International Business Machines Corp. | Multiprocessor mechanism for handling channel interrupts |
-
1982
- 1982-11-04 US US06/438,993 patent/US4482956A/en not_active Expired - Lifetime
-
1983
- 1983-09-20 JP JP58172351A patent/JPS5983249A/ja active Granted
- 1983-10-26 EP EP83110685A patent/EP0108338B1/en not_active Expired
- 1983-10-26 DE DE8383110685T patent/DE3379518D1/de not_active Expired
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6292061A (ja) * | 1985-10-15 | 1987-04-27 | インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション | 共有資源に対するアクセスを直列化する方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| DE3379518D1 (en) | 1989-05-03 |
| US4482956A (en) | 1984-11-13 |
| EP0108338A2 (en) | 1984-05-16 |
| JPH0324696B2 (ja) | 1991-04-03 |
| EP0108338B1 (en) | 1989-03-29 |
| EP0108338A3 (en) | 1987-04-08 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| EP0145889B1 (en) | Non-spinning task locking using compare and swap | |
| JPH0324696B2 (ja) | ||
| US6889269B2 (en) | Non-blocking concurrent queues with direct node access by threads | |
| US4320455A (en) | Queue structure for a data processing system | |
| JP4042945B2 (ja) | 共用資源を非同期的に更新するためのインターフェース・システムおよび方法 | |
| US4318182A (en) | Deadlock detection and prevention mechanism for a computer system | |
| US5081572A (en) | Manipulation of time-ordered lists and instructions therefor | |
| US7395383B2 (en) | Realtime-safe read copy update with per-processor read/write locks | |
| US4320451A (en) | Extended semaphore architecture | |
| US5287521A (en) | Method and apparatus for releasing and obtaining shared and exclusive locks | |
| US5319778A (en) | System for manipulating elements in linked lists sharing one or more common elements using head nodes containing common offsets for pointers of the linked lists | |
| US4807111A (en) | Dynamic queueing method | |
| US9448856B2 (en) | Lock-free dual queue with condition synchronization and time-outs | |
| US6934950B1 (en) | Thread dispatcher for multi-threaded communication library | |
| US5274823A (en) | Interrupt handling serialization for process level programming | |
| US4584644A (en) | Method of controlling use of resources in a data processing system by at least two processes | |
| US20200310963A1 (en) | Real-time replicating garbage collection | |
| EP4068094B1 (en) | Lock-free ring buffer | |
| US7793023B2 (en) | Exclusion control | |
| US6976260B1 (en) | Method and apparatus for serializing a message queue in a multiprocessing environment | |
| US20060048162A1 (en) | Method for implementing a multiprocessor message queue without use of mutex gate objects | |
| US20170026242A1 (en) | System and method for use of a non-blocking process with a resource pool in a computing environment | |
| CN109683984A (zh) | 数据热加载方法、装置、电子设备及计算机可读存储介质 | |
| US5666546A (en) | Method of managing concurrent accesses to a memory by a plurality of users using atomic instructions to prevent read/write errors | |
| CN116010121A (zh) | 基于环形链表的多线程消息数据存取方法及装置 |