JPH0157373B2 - - Google Patents

Info

Publication number
JPH0157373B2
JPH0157373B2 JP57001083A JP108382A JPH0157373B2 JP H0157373 B2 JPH0157373 B2 JP H0157373B2 JP 57001083 A JP57001083 A JP 57001083A JP 108382 A JP108382 A JP 108382A JP H0157373 B2 JPH0157373 B2 JP H0157373B2
Authority
JP
Japan
Prior art keywords
list
anchor
pointer
new
format
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired
Application number
JP57001083A
Other languages
English (en)
Other versions
JPS57153344A (en
Inventor
Raanaa Adorian
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPS57153344A publication Critical patent/JPS57153344A/ja
Publication of JPH0157373B2 publication Critical patent/JPH0157373B2/ja
Granted legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

【発明の詳細な説明】
本発明は、アドレス可能記憶装置内にある1つ
又はそれ以上の逐次に再使用可能な資源へのアク
セスを有する2つ又はそれ以上のプロセスが同時
に実行されるデイジタル・データ処理装置に関す
る。 本発明は次の条件の1つ又は全てを有するデー
タ処理システムに適用できる。 (1) 同一のアドレス可能記憶装置へのアクセスを
有する単数又は複数のコンピユータによつて同
時的プロセスが実行される場合。 (2) 或る優先順位方式に従つて、単数又は複数の
制御プロセスが、システム中の単数又は複数の
コンピユータの使用を、システム中のいくつか
の又は全てのプロセスへ割当てる場合。 (3) プロセスが、一時的又は永久的に、及びその
通常の実行過程又は入出力動作及びマシン及び
プログラムの誤動作を含む他のプロセスによる
割込みによつて、それ自体コンピユータの使用
を放棄するか又は放棄させられる場合。 (4) プロセスがコンピユータの使用を一時的に放
棄するか又は放棄させられた時、そのプロセス
が同一又は他のコンピユータを使用して、コン
ピユータの使用が失われたプログラム地点又は
その時実行されているプログラムの他の地点で
再開されてよい場合。 (5) ページング機構がハードウエアによつて、又
はハードウエア及びプログラミングによつて設
けられている場合であつて、次の場合。 (イ) システム中のいくつかの又は全てのプロセ
スが、主記憶装置中にあるデータ(プログラ
ムを含む)のみでなく、周辺記憶装置(磁気
デイスク及びドラムを含む)上に保持された
データをもアドレスする場合。 (ロ) プロセスがアドレス可能記憶装置内のデー
タを参照するが、主記憶装置中のデータを参
照しない時、ページング機構が参照の時点で
データが存在していた装置から主記憶装置へ
必要なデータを複写してしまうまで、上記プ
ロセスがそれを実行しているコンピユータの
使用を失う場合。 用 語 本明細書において、プロセスの語はコンピユー
タの使用を必要とする作業単位として定義され、
従つてジヨブ、ジヨブ・ステツプ、タスク、出口
プロセス、プログラム糸、又はサービス・リクエ
ストなど多様な名称で呼ばれる。プロセスはそれ
に割当てられた記憶装置の範囲によつて識別され
る。データ処理システム中の各コンピユータが或
るプロセスを識別した時点で、そのプロセスはコ
ンピユータ上のアクチブなプロセスと呼ばれる。
それはその時点でコンピユータによつて実行され
ているプロセスである。アクチブなプロセスのこ
の識別は、そのプロセスを実行しているコンピユ
ータのコンポーネント部分である1つ又はそれ以
上のレジスタに保持されている値によつて実効化
される。複数のプロセスはデータ処理システム中
のコンピユータの使用を求めて競合する場合があ
る。この競合は、1つのプロセスが他方のプロセ
スに割込んだり、1つのプロセスが他方のプロセ
スに優先して選択されたりして、アクチブなプロ
セスになる結果をもたらす。2つのプロセスの中
で、どのプロセスが他方のプロセスに割込むか、
又はどのプロセスが他方のプロセスに優先して選
択されるかを決定するため、プロセス優先順位方
式がデータ処理システム中で限定されてよい。割
込みを実行するプロセス、又は先に選択されるプ
ロセスは、割込まれたり後で選択されるプロセス
よりも高い優先順位を有すると呼ばれる。 プロセスは、データ処理システム内に保持され
た値の重要な変更であるオペレーシヨンと区別さ
れ、またアクチブなプロセスのために1つ又はそ
れ以上のオペレーシヨンの実行をコンピユータに
命令するように使用されるアルゴリズムであるプ
ログラムと区別されねばならない。 アドレス可能記憶装置とは、データ(プログラ
ム)を含むデータ処理システムの1部であつて、
プロセス自体が記憶装置の1つの部分から他の部
分へ、又は或る型式の記憶装置から他の型式の記
憶装置へデータを移動することなく、プロセスに
よつてアクセス可能なものを言う。 ページング機構とはデータ処理システムの1部
であつて、プロセスがアドレス可能記憶装置中に
保持されているが、主記憶装置中には保持されて
いないデータにアクセスしようと試みる時、上記
プロセスを中断し、参照されてデータが主記憶装
置へ移動するように起動し、データが移動され終
つた時にのみ、中断されたプロセスがコンピユー
タを再び使用できるように、アドレス可能記憶装
置中に保持されたデータを管理するものを言う。 逐次的に再使用可能な資源(以下、逐次使用資
源という)とは、データ処理システムの1部であ
つて、任意のプロセスで使用を要求されてよいも
のを言う。それは1つ又は多くのプロセスによつ
て反復的に使用されてよいが、2つ又はそれ以上
のプロセスによつて同時に使用されてはならな
い。もし2つ又はそれ以上のプロセスが逐次使用
資源へのアクセスを有するならば、資源の逐次的
使用を確保するため、或る種の機構が必要とされ
る。逐次的に再使用可能でない資源は、或るオペ
レーシヨン(特に、資源にアクセスするがそれを
変更しないオペレーシヨン)に関して同時に再使
用可能であつてよい。 データ処理システム中の逐次使用資源としては
リスト、待ち行列、連鎖などがあるが、これらを
まとめてリストと呼ぶことにする。リストは2つ
又はそれ以上のプロセスによつて共通にアクセス
可能なアドレス可能記憶装置の1つ又はそれ以上
の区域より成り、特別の値を含む。プロセスがア
ンカー(anchor)と呼ばれる記憶装置の1つの
区域を位置づけた時、そのプロセスは記憶装置の
上記区域に保持された上記特別の値及び他の記憶
装置区域にある値(以下エレメントと呼ぶ)を操
作して、一連になつたエレメントの各々を位置づ
ける。リスト中の各エレメントは、テイル
(tail)と呼ばれる1つのエレメントを除いて、
他のエレメントによつて後続される。2つのエレ
メントが同一の後続エレメントを有することはな
い。従つて、リストの各エレメントは、ヘツド
(head)と呼ばれる1つのエレメントを除いて、
他のエレメントによつて先行される。リストがヘ
ツドでありかつテイルである1つのエレメントの
みを有する時、そのリストはシングルと呼ばれ、
リストがエレメントを有しない時、そのリストは
空と呼ばれる。 リスト中のエレメントの或るもの又は全てを他
のリストのアンカーとして使用することによつ
て、リストの複雑な構造が形成されるが、それも
同様なアルゴリズムで処理される。 リストは、それがプロセスへ割当てられない
時、正常な形態にあると呼ばれる。リストが正常
な形態にある時、そのアンカー及びエレメント中
にある値はプロセスをして各エレメントを位置づ
けさせ、次いでリストを処理させる。1度プロセ
スがリスト上でオペレーシヨンを開始しそれを完
了していない時、そのプロセスがアンカー及びエ
レメント中の値を変更すると、他のプロセスが各
エレメントを正しく位置づけることができない
か、又はリストを正しく処理できなくなる場合が
ある。そのような状態にあるリストは正常な形態
にない。 データ処理装置におけるリストの使用 オペレーテイング・システム、データ・ベース
制御プログラム、時分割及びデータ通信モニタを
含む資源管理プログラムは、システム資源をプロ
セスへ割当て、プロセスによる資源の解放をマー
クし、資源を保持しているプロセスを指定すると
ともにそれを制御するため、リスト処理に多くの
時間を費す。多くのそのようなリストは、それ自
体逐時使用資源であるばかりでなく、逐時使用資
源の制御において使用される。例えば、IBM
OS ENQUE機構は、磁気媒体上に保持されたデ
ータの逐次的使用を確保するために使用され、そ
れ自体名称(names)のリストを有している。リ
スト中に名称が存在すると、それはその名称に関
連したデータが或るプロセスに割当てられている
ことを示す。逐次使用資源を制御するそのような
機構は、無限の退歩という損失なしに、リストそ
れ自体の制御のために使用され得ないことは明ら
かである。 頻繁に現われる形式のリストは、プロセスへ割
当てられるか又はそのような割当てのために利用
可能な主記憶装置バツフアの連鎖、出力装置の如
き資源を使用するためのリクエスト待ち行列、プ
ログラム又はコンピユータの如き資源を使用して
いるか又は使用することを待機しているプロセス
の連鎖又は待ち行列を含む。 現在のリスト保護メカニズム リストを逐次に使用するため現在利用可能な方
法として、ハードウエア命令を無能化し逐次化す
るプログラム化ロツキング・メカニズムがある。
ロツキング・メカニズムには2種類がある。ラツ
チ又はゲートとも呼ばれる延期ロツクと、スピ
ン・ロツクである。 ロツクとは、それに関連した逐次使用資源がプ
ロセスに割当てられているかどうか、更にどのプ
ロセスに割当てられているかを示すスイツチであ
る。もしロツクに関連した資源が割当てられてい
れば、ロツクが保持されていると呼ばれる。資源
を獲得しようと試みているプロセスが、関連した
ロツクが保持されていることを発見すると、その
ロツクが延期ロツクであれば、プロセスは、資源
が利用可能となりロツクが解放されるまでコンピ
ユータの使用を放棄する。もしロツクがスピン・
ロツクであれば、プロセスはコンピユータの使用
を継続するが、プログラム内で非生産的なループ
が生じ、プログラムはロツクが解放されるまでロ
ツクを検査する。 無能化とは、プロセスが使用しているコンピユ
ータを、他のプロセスによつて獲得させないよう
にするハードウエア・メカニズムである。それは
無能化されたプロセスがシステム中で実行されて
いる唯一のプロセスであるようにする意図をもつ
て使用されてよい。しかし、この意図は、システ
ム中に2つ以上のコンピユータが存在する場合、
又は実行されているプロセスがアドレス可能記憶
装置中に存在するが主記憶装置中には存在しない
データを参照してページング・メカニズム及び他
のプロセスをしてコンピユータを使用せしめる場
合、達成されない。従つて現在のシステムにおい
て、無能化されたプロセスによる全ての参照が主
記憶装置に対するものであるようにされる。2つ
以上のコンピユータを有するシステムでは、無能
化は他のメカニズムに対する付属機能としてのみ
使用される。 逐次化ハードウエア命令は、記憶装置の小範囲
の制御された変更をもたらす。1つのプロセスの
ためにそのような命令が実行されている間、他の
プロセスは、たとえそれが他のコンピユータ上で
実行されているものであつても、同一の記憶装置
を変更することはできない。逐次化ハードウエア
命令は、その実行過程で、逐次に再使用可能な記
憶装置の小範囲を効果的に獲得し、使用し、解放
する。そのような命令は、ロツクを保持しかつ解
放するロツキング・メカニズムによつて使用され
る。逐次化ハードウエア命令を実行しているプロ
セスは、記憶装置の変更に成功するか、又は他の
プロセスがその命令の実行時に同一の記憶装置を
変更したのであれば、記憶装置を変更することが
できない。 現在のメカニズムの欠点及び制限 ロツクは次のような欠点を有する。 (イ) 延期ロツク (1) コンピユータを遊び状状態にするか、又は延
期されたプロセスよりも低い優先順位の作業を
実行せしめる。 (2) プロセスの延期及び再開を制御するため、コ
ンピユータの余分の使用を必要とする。 (3) ページング・メカニズムが設けられている場
合、保持ロツクのリクエストによつて延期され
たプロセスは、そのデータの或るものを主記憶
装置から周辺記憶装置へ転送するかも知れず、
またコンピユータを余計に使用したり、ページ
ング・メカニズムの実行により動作の遅延を生
じるかも知れない。 (ロ) スピン・ロツク スピン・ロツクは上記の欠点を有しないが、コ
ンピユータの使用が無駄になる。上記2種のロツ
クの共通の欠点は次のようである。 (1) ロツクを保持するプロセスは、他のプロセス
による割込み及びページング・メカニズムの実
行などを含む多くの原因によつて、その実行中
に遅延され、この遅延は、延期され又はロツク
の保持を発見するためにスピンせざるを得ない
他のプロセス上に課される。 (2) ロツクを保持するプロセスはロツクを解放す
ることなく異常に終了するかも知れない。従つ
て、この状況の下でロツクを解放するためのメ
カニズムが作られねばならず、このメカニズム
を実行する場合、コンピユータの余分の使用が
生じる。 ロツクを保持している(又は保持しようと試み
ている)プロセスは、ロツクを保持している間延
期の危険を減少させるため、無能化メカニズム又
は他のメカニズムを使用するよう強制されてよ
い。無能化はシステムの応答性を低下させる。即
ち、或るプロセスが無能化されようとしている
時、高い優先順位のプロセスは上記或るプロセス
を実行しているコンピユータを獲得しないかも知
れず、かくて優先順位方式の意図は妨害される。 ロツキング及び無能化はそれら自体リスト処理
メカニズムではない。それらは単にリストの使用
を逐次化する方法である。実際のリスト処理は、
正常なプログラミングによつて実行される。例え
ば、正常な形態におけるリストであつてプロセス
へ割当てられていないものは、ヘツド、テイル、
エレメントのアドレスを含むアンカーを有するか
も知れない。それらの各々には後続するエレメン
ト又はテイルのアドレスを含むが、例外的にテイ
ルはゼロ値を含む。新しいエレメントをリストの
後端に付加する場合、プロセスは次の動作を実行
する。 (1) 新しいエレメントにゼロ値を置いて、それが
テイルになる準備を行う。 (2) そのプロセスに関連したロツクを保持するこ
とによつてリストを獲得する。 (3) 新しいエレメントのアドレスをテイルに置く
ことによつて、新しいエレメントをテイルにす
る。 (4) 新しいエレメントのアドレスをアンカーに置
く。 上記の(3)と(4)との間では、リストは正常の形態
にない。なぜならば、アンカーはテイルのアドレ
スを含まないからである。 リストが同時に使用可能でなく、単に逐次に再
使用可能である理由は、その処理の間にリストが
正常の形態にないからである。さらに、プロセス
によつて処理されつつあるリストが正常な形態に
ない間に、プロセスが終了するようなことが起れ
ば、リストを正常な形態に回復するため、回復メ
カニズムが実行されねばならない。従つて、リス
ト処理メカニズムの主たる目的の1つは、リスト
が正常な形態にない時間を最小にするためであ
る。この目的は、逐次化ハードウエア命令によつ
て高度に達成されるが、厳格な制約の下にある。 IBMシステム370操作解説書(IBM System
370 Principles of Operation)第310頁〜第314
頁に記載されているように、Compare and
Swap(CS)及びCompare Double and Swap
(CDS)のような逐次化ハードウエア命令は、ア
ドレス可能記憶装置における小さい連続領域の条
件的変更を生じる。或るプロセスが記憶装置の領
域を変更するためそのような命令を使用する時、
他のプロセスはその命令の実行中同一の記憶装置
を変更することはできない。従つて、もし或るオ
ペレーシヨンが1つの逐次化ハードウエア命令を
用いてリスト上で実行され、そのリストがその命
令実行の直前及び直後正常な形態にあれば、その
オペレーシヨンに関してそのリストは同時に使用
可能である。 リストは記憶装置の異つたロケーシヨンにある
いくつかの領域より成る。従つて、前記の例のよ
うに、最も単純な場合、或る種のオペレーシヨン
を実行してリストを正常な形態に戻すため、記憶
装置の2つ又はそれ以上の非連続的な領域が変更
されねばならない。逐次化ハードウエア命令は連
続的記憶装置の小さい領域のみを処理するから、
そのようなリスト上のオペレーシヨンは、一般に
ロツキングのようなメカニズムの保護の下で実行
される。 注意すべきは、ロツクそれ自体はリストの退化
したものと見てもよいことである。そのリストは
空であるかシングルであり、このような簡単なリ
ストは逐次化ハードウエア命令によつて処理され
る。 逐次化ハードウエア命令の利点は、これら命令
によつて処理されるリストを割当てられる間、プ
ロセスは遅延されず、従つて他のプロセスを遅延
させることがなく、また終了もされないので、リ
ストを回復する必要もないことである。 本発明は、プログラミング又はそれと等価のハ
ードウエアによつて、コンピユータの最小の使用
コスト及び最小の応答性損失で、複雑なリストを
処理するように、逐次化ハードウエア命令の使用
を拡張する。それはリスト処理中の任意の時点で
プロセスによるコンピユータの一時的又は永久的
喪失を許すが、処理されつつあるリストは、、そ
のようなプロセスから解放される必要もなく、又
は他のプロセスによつて処理される前に通常の形
態へ回復される必要もない。それは、プロセスが
コンピユータの使用を失つた地点又は他の地点
で、プロセスの実行を再開せしめる。 本発明は無限に多くのコンピユータがシステム
中で使用できるようにし、かつページング・メカ
ニズムの実行を可能にする。それによつて、プロ
セスはコンピユータの使用を放棄したり、非生産
的にスピンしたり、無能化されたりする必要はな
い。それによつて、プロセスは他のプロセスの介
入又はページング・メカニズムの実行によつて生
じた遅延を受けるが、リストを処理する間に、上
記の遅延は、同じリストへのアクセスを必要とす
る他のプロセスに影響を与えることはない。 要するに、本発明の利点は逐次化ハードウエア
命令のそれと同じであるが、その種の命令の厳格
な制約を受けない。 リスト上のオペレーシヨンの分析 本発明を理解するため、リスト上で実行される
オペレーシヨンを分析することが必要である。こ
れらのオペレーシヨンはリスト中のエレメントの
挿入、除去、変更であある。 リストのアンカー及びエレメントは、2つ又は
それ以上のプロセスによつてアドレス可能な記憶
装置中に保持されている。各プロセスはそれ自体
に限られた記憶装置をアドレスしてよい。プロセ
スは、それ自体に限られた記憶装置と、それがリ
ストから除去したエレメントの双方を所有してい
ると言うことができる。 リスト上で実行されたオペレーシヨンは、1つ
又はそれ以上の変形を生じる。変形とはリスト中
のアンカー又はエレメントの変更である。この変
更は、本発明に従つて、逐次化ハードウエア命令
によつて実行される。従つて、プロセスによつて
開始されようとしているか、又は既に部分的に実
行されたオペレーシヨンは、アジエンダ(即ち、
変形の順序づけられた集合)によつて限定されて
よい。 1つの時点で、リストは或る状態にある。それ
はアンカーに或る値が存在し、リスト中に或るエ
レメントが存在し、これらのエレメントが所与の
順序に配列されておりかつ或る値を含んでいるこ
とを意味する。 リスト上でオペレーシヨンの集合を実行するた
めのアルゴリズムの定義は、リストがそれぞれの
状態にあるときそれぞれのオペレーシヨンを実行
するため、実効化されるべき状態の変化の仕様、
従つて目的に沿つた変形の仕様を必要とする。現
在のリスト処理アルゴリズムにおいて、リストが
或る状態、即ちリストが正常な形態ではない状態
にある時、そのような仕様は利用可能でない。 リストを瞬間的に見れば、オペレーシヨンがリ
スト上で実行されていないか、又はアクチブ・オ
ペレーシヨンと呼ばれるオペレーシヨンがリスト
上で実行されているかのいずれかである。前に開
始されたオペレーシヨンが完了される前に、即ち
アクチブ・オペレーシヨンを有するリスト上でオ
ペレーシヨンの実行が許されると、リストの完全
性が失われるかも知れない。このため、リストは
逐次に再使用可能とされる。一般的なアルゴリズ
ムは、そのようなリスト上でプロセスがオペレー
シヨンを開始しないようにするとともに全くリス
トを変更しないようにしている。 本発明に従えば、或るプロセスのアクチブ・オ
ペレーシヨンがリスト上で部分的に実行された時
点で、別のプロセスがそれに割り込むことのでき
るデータ処理システムが提供される。本発明にお
いては、リスト上で実行可能なアクチブ・オペレ
ーシヨンは一時にひとつだけである。リストをア
クセスするプロセスは前のオペレーシヨンが完了
しているかどうかを調べ、まだであればその時の
リストの状態に基づいて前のオペレーシヨンを完
了させる。そのため本発明では、オペレーシヨン
実行中のリストの状態(後述の「バインド」、「補
数化」等)を示す情報が記憶され、各プロセスは
この情報をみることによつて、前のオペレーシヨ
ンが完了してリストが正常な形態に戻つているか
どうかを調べる。例えば、リストが補数化されて
おらず、正しく連鎖されていると、正常な形態に
あると言える。もし前のオペレーシヨンが完了し
ていないことがわかると、その時のリストの状態
に基づいてリストを正常な形態に戻すことによ
り、前のオペレーシヨンが完了される。 実施例の説明 第1図において、左方にアンカーが示される。
それはヘツドとテイルを含む。ヘツドは中央に示
されるエレメントを指定する。実線の矢印はこの
関係を示す。 テイルはナル(NULL)である。 中央のエレメントは右方に示されるエレメント
を指定する(連鎖されている)。 点線の矢印はこの関係を示す。 連鎖内にはエレメントが存在しても存在しなく
てもよい。 最初のエレメント中には単一のフイールドが示
される(ネキスト、Next)。 右方のエレメントにおいて、ネキストは限定さ
れていない。それは任意の値を有してよい。この
エレメントは優先順位tを有する。 逐次化ハードウエア命令―オペレーシヨン 逐次化ハードウエア命令は次のように動作する
ものとして理解されるべきである。 命令は3つのオペランドを有する。その各々は
記憶装置の領域である。第1及び第2オペランド
は実行しているプロセスに私用のものであり、第
3オペランドは命令を実行してよい全てのプロセ
スによつてアクセス可能である。 オペランド中の値は旧値、新値、現在値と呼ば
れる。 命令の実行に当つては、第3オペランドにアク
セスする全てのプロセスはそのアクセスを完了
し、次にその命令が完了するまで、そのオペラン
ドのアクセスを許されない。旧値は現在値と比較
され、等しくなければ命令は完了する。旧値と現
在値が等しい場合、新値が第3オペランドに入れ
られ、それが現在値となり、命令は完了する。 命令の実行に続いて、命令を実行したプロセス
は、それが等価の比較に成功したか又は不等価の
比較に失敗したか、即ちそれが現在値を置換した
か置換しなかつたかをテストすることができる。 IBMシステム/370において、最初の2つのオ
ペランドは汎用レジスタであり、第3オペランド
は主記憶装置の1部である。Compare and
Swap命令は各オペランド中の4個の連続したバ
イクにアクセスし、Compare Double and
Swap命令は8個の連続したバイトにアクセスす
る。非等価の比較結果において、これらの命令は
現在値を第1オペランドヘロードするが、この機
能は必須のものでなく、以後無視される。今後、
逐次化ハードウエア命令の前述したような動作
は、スワツピング又はスワツプと呼ぶ。 このような逐次化ハードウエア命令は次のよう
にして使用される。 多くのプロセスによつてアクセス可能な記憶装
置の1つの領域を更新するため、その領域の内容
を実行しているプロセスに私用の記憶装置へ複写
し、かくて旧値を設定する。 要求された新値を計算し、それをプロセスに私
用の記憶装置中に保持する。更新されるべき記憶
装置のその領域は、今や現在値を含む。この現在
値は旧値であつてもよい。 新値を更新されるべき記憶装置領域へ入れ、旧
値及び現在値を検査し、それらが等しくなければ
現在値を不変のままにしておく。 もし逐次化ハードウエア命令が非等価の比較で
失敗すれば、再び記憶装置領域の内容を複写する
ことによつて全体のアルゴリズムを再開始する。 この方法の本質は、他のプロセスによつて影響
されることなく、私用記憶装置のデータ上で作業
を行ない、次いで更新の対象となつた情報が依然
として有効であれば、共通にアドレス可能な記憶
装置を更新することである。 リスト形式 リストは1つ又はそれ以上の部分(part)より
成る。各々の部分はブロツク(即ち、アドレス可
能な記憶装置の連続した領域)であり、アンカー
及びゼロ又はそれ以上のエレメントを含む。各ブ
ロツクはフイールドに分割されてよい。 リストの各部分は少なくとも1つのポインタを
含む。ポインタとは、指定される他のブロツクの
アドレス、又はそのようなアドレスを計算するた
めの値を含むために使用されるフイールドであ
る。更に、ポインタは特別の目的のために使用さ
れ、それ自体が含まれるブロツク又は名目的な値
を含むブロツクを指定するために使用される。上
記の名目的な値は一般的にゼロであり、これはど
こも指定しないことを意味する。この名目的な値
はナルと呼ばれ、それを含むポインタはナル・ポ
インタと呼ばれる。 一般的に、アンカーはリストの第1エレメント
(又はヘツド)に対するポインタを含み、かつリ
ストの最後のエレメント(又はテイル)に対する
ポインタを含んでよい。もしリストが空であれ
ば、そのようなポインタはナルである。アンカー
はリスト上のエレメントの計数値や、リストの逐
次的使用の制御に関連した値のような他のデータ
を含んでよい。 一般的に、エレメントはその先行エレメントに
対するポインタを含み、かつその後続エレメント
に対するポインタを含んでよい。テイル及びヘツ
ドにあるそのようなポインタはナルである。エレ
メントは、新しいエレメントをリスト中に置くと
きに使用される優先順位の値や、リストの逐次的
使用の制御に関連した値のような他のデータを含
んでよい。 一般的に、システム中の各リストは1つだけの
アンカーを有し、各アンカーは1つだけのリスト
に関連している。しかし、エレメントはリストか
らリストへ移動されてよい。 リストがとる各種の状態は、フオーマツトとし
て分類される。かくて、シングル状態のリストは
シングル・フオーマツトと呼ばれる。このフオー
マツトは、1つだけのエレメントを有するリスト
である。リストのフオーマツトは、オペレーシヨ
ンがリスト上でアクチブでない時、又はオペレー
シヨンがリスト上でアクチブである時に生じる状
態を含むかどうかに従つて、分類されてよい。そ
のようなフオーマツトはそれぞれ基本フオーマツ
ト及びアクチブ・フオーマツトと呼ばれる。 アクチブ・フオーマツトのリストは、アクチ
ブ・オペレーシヨンを完了するため、どのような
変形アジエンダが実行されるべく残つているかを
指示しなければならない。そのようなリスト及び
及びアジエンダは相互にバウンド(bound)され
ていると言つてよい。実際には、アンカー中のス
イツチに1つの値を設定して、リストがその上に
アクチブ・オペレーシヨンを有しアジエンダへバ
ウンドされていることを示すのが便宜である。バ
ウンドされたアジエンダの最終的変形がアンカー
を変更するのでなければ、そのようなスイツチ
は、オペレーシヨンが完了した時オンのままにさ
れ、その結果、リストはそのアンカーからアクチ
ブ・フオーマツトにあることが知られるが、その
エレメントを調べると、それ以上の変形は必要で
ないことが分る。そのような状態にあるリストは
擬似バウンド、又は空アジエンダにバウンドされ
ていると呼ばれる。リストのアクチブ・フオーマ
ツトの或るものは、このような擬似バウンド状態
の1つを含む。従つて、リスト・フオーマツトを
更に分類して、空でないアジエンダを有する状態
を含むアクチブ・フオーマツトと、基本的又は擬
似バウンド状態を含むフオーマツトへ分けること
が便宜である。そのようなフオーマツトはそれぞ
れ径路(routed)フオーマツト及び非径路
(unrouted)フオーマツトと呼ばれる。 リスト・オペレーシヨン リスト処理アルゴリズムによつて実行される主
たるオペレーシヨンは、エレメントをリストへ置
くこと(以下、プツト、PUTと呼ぶ)と、リス
トからエレメントを除くこと(以下、テイク、
TAKEと呼ぶ)である。 PUTオペレーシヨンは次のものを含むが、こ
れに尽きるものではない。 PUT HEAD エレメントをリストの最初のエレ
メントとしてリスト中に置く。 PUT TAIL エレメントをリストの最後のエレ
メントとしてリスト中に置く。 PUT BY PRIORITY エレメントをそのエレ
メント及びリスト中の他のエレメントに関
連した優先順位の値によつて決定されたリ
スト中の位置に置く。 TAKEオペレーシヨンは次のものを含むが、
これに尽きるものではない。 TAKE HEAD リストから最初のエレメントを
除く。 TAKE SPECIFIC リストから特定のエレメン
トを除く。 これらのオペレーシヨンに加えて、補数オペレ
ーシヨンが限定されてよい。リストが空であるか
又はリスト上に適当なエレメントがないために、
プロセスがリストからエレメントを除去すること
ができない時、そのようなプロセスは、エレメン
トが他のプロセスによつてリストへ置かれるま
で、その実行を延期する。延期されたそのような
プロセスを再開するため、TAKEが失敗した時、
補数エレメントがリスト中に置かれてよい。この
補数エレメントは、正規のエレメントがリスト中
に置かれた時、どのプロセスが再開されるべきか
を示す。 従つて、補数エレメントが許されるアルゴリズ
ムにおいて、TAKEリクエストは条件的である
か又は無条件的であつてよい。前者の場合、失敗
するかも知れないTAKEオペレーシヨンを生じ、
後者の場合、成功的なTAKEオペレーシヨン又
はPUT COMPLEMENTを生じる。PUTリクエ
ストPUTオペレーシヨンを生じるか、リスト中
に補数エレメントがあれば、TAKE
COMPLEMENTを生じる。 一般的に、システム中の各リストは、どのよう
なオペレーシヨンがリスト上で実行されてよいか
を決定する特定の処理原理と関連している。 PUT HEAD及びTAKE HEADに限定された
リストは後入れ先出し(LIFO)待ち行列と呼ば
れる。 PUT TAIL及びTAKE HEADに限定された
リストは先入れ先出し(FIFO)待ち行列と呼ば
れる。 PUT BY PRIORITY兼TAKE HEADに限
定されたリストは優先順位待ち行列と呼ばれる。 リスト処理オペレーシヨンの分析―現在の制限 リストへ適用されるべき処理原理が与えられる
と、リスト上のオペレーシヨンの分析は次の事項
の定義を必要とする。 (1) リストのフオーマツト。 (2) 各オペレーシヨンによつて実効化されたフオ
ーマツトの変更。 (3) 各オペレーシヨンを構成する変形のアジエン
ダ。各変形はフオーマツトの1つの変形を生じ
る。 (4) 各変形に含まれる記憶装置アクセス。 現在のリスト処理方法の制限は、この分析法を
FIFO待ち行列へ適用することによつて明らかに
されてよい。リストの基本フオーマツトは第2図
に示される。原理上は、無限に多くのフオーマツ
トが0個、1個、2個、……のエレメントを有す
るリストのために限定されることができる。実際
には、リストはその端部においてのみ変更される
から、1つのフオーマツトのみが(第2図のc)、
2つ又はそれ以上(即ち、マルチプル)のエレメ
ントを有するリストのために限定される。第2図
のaは空のフオーマツトを示し、第2図のbはシ
ングルのフオーマツトを示す。 このフオーマツトは指定関係ではなく連鎖関係
を使用して限定される。もしエレメントEが他の
エレメントFを指定するか、Fを指定するエレメ
ントを指定するか、Fを指定するエレメントを指
定するエレメントを指定するか、以下同様にして
エレメントを指定するならば、EはFに連鎖され
ると呼ばれる。形式的には、連鎖は指定の原型で
ある。 リストのアクチブ・フオーマツトは第3図のa
及びb、又は第3図のc及びdに示されるように
限定されてよい。フオーマツトの前者の対は、
PUT TAILが先ず旧いテイル・エレメントに新
しいエレメントを指定させ、次にアンカーに新し
いエレメントを指定させるが、後者の対は、これ
らの変形が逆の順序で実行されることを必要とす
る。どちらの方法を選択してもよい。第3図の
a,cはシングルの後のフオーマツトであり、第
3図のb,dはマルチプルの後のフオーマツトで
ある。 ここでフオーマツトの変更が限定されてよい。
即ち、各フオーマツト及び各オペレーシヨンにつ
いて、もしそのオペレーシヨンがそのフオーマツ
トにおけるリスト上で試みられたのであれば、ど
のような新しいフオーマツト又は一連のフオーマ
ツトへリストがセツトされるかが限定される。こ
のフオーマツト変更は、テーブルに要約される。
ここでは第3図のa及びbに示されるアクチブ・
フオーマツトが選択された。テーブルでは、例え
ば第2図のaのフオーマツトを2aの如く示す。
〔注〕
1 TAKEは空のリスト上で失敗する。 2 1個だけ少ないエレメントを有するフオーマ
ツト 3 1個だけ多いエレメントを有するフオーマツ
ト このテーブルにおいて、最初のフオーマツトは
最上部にリストされ、オペレーシヨンは最左方の
欄に記載される。テーブル中のエントリイは結果
のフオーマツト又はフオーマツトの連続を示す。 〔注〕は、どこでオペレーシヨンが失敗する
か、またどこでエレメントが付加され又は除去さ
れるかを示す(不明瞭である場合に)。 或るエントリイはブランクのまま残されている
ことが分る。これらのブランクはフオーマツトと
オペレーシヨン一致を表わす。そのオペレーシヨ
ンは、それを試みているプロセスを遅延させるこ
とによつて、ロツキング・メカニズムが妨害する
ことを要求されたものである。実際には、ロツキ
ング・メカニズムは基本フオーマツトを有する正
常な形態を指定する。 フオーマツト変更から、必要な変形は次のよう
に限定される。 TAKE HEADについて。 (1) もし空であれば、変更なし、TAKEは失敗
する。 (2) もしシングルであれば、アンカーのヘツド・
ポインタ及びテイル・ポインタはナルへセツト
される。 (3) もしマルチプルであれば、アンカーのヘツ
ド・ポインタはヘツド・エレメントのネキス
ト・ポインタの値へリセツトされる。 (4) もしシングルの後又はマルチプルの後であれ
ば、限定されない。 PUT TAILについて。 (1) もし空であれば、アンカーのヘツド・ポイン
タ及びテイル・ポインタは新しいエレメントを
指定するためにセツトされる。 (2) もしシングル又はマルチプルであれば、テイ
ル・エレメントのネキスト・ポインタは新しい
エレメントを指定するためにセツトされ、次い
でアンカーのテイル・ポインタは新しいエレメ
ントを指定するためにセツトされる。 (3) もしシングルの後又はマルチプルの後であれ
ば、限定されない。 各変形によつて要求された記憶装置アクセス
は、記憶装置のアドレス可能性及びアクセスの効
果に従つて分類されることができる。 リスト処理に使用される記憶装置領域は、1つ
だけのプロセスによつてアドレス可能な(以下、
私用という)記憶装置領域と、2つ以上のプロセ
スによつてアドレス可能な(以下、公用という)
記憶装置領域とを含む。 リストは公用記憶装置中に保持され、そのエレ
メントはリストされたエレメントと呼ばれる。も
しプロセスがTAKEを実行すると、それは過去
にリストの1部であつたが現在はそうでないエレ
メントを獲得する。そのようなエレメントはリス
トされていないエレメントと呼ばれる。PUTを
実行しているプロセスは、リストへ付加されるべ
き新しいエレメントを獲得していなければならな
い(多分、前のTAKEによつて)。そのようなエ
レメントは、PUTの実行前に、リストされてい
ないエレメントである。 従つて、各々のリストされていないエレメント
は1つだけのプロセスによつて所有されているが
公用記憶装置中にある。リスト処理アルゴリズム
は、所有プロセスではない他のプロセスがリスト
されていないエレメントを変更しないようにしな
ければならない。プロセスが所有しておらずリス
トされていないエレメントをそのプロセスが変更
しないようにする方法は、公用記憶装置中にエレ
メントに対するポインタを発見できないようにす
ることである。例えば、TAKE HEADの場合、
公用記憶装置中のヘツド・エレメント(即ち、ア
ンカー中のエレメント)に対するポインタが
TAKEの実行中に重ね書きされる。勿論、
TAKEが実行される前に、或るプロセスがその
ようなポインタをその私用記憶装置へ複写したか
も知れない。リスト処理アルゴリズムは、そのよ
うな複写がなされていないこと、もしなされてい
れば、それが新しいリストされていないエレメン
トを変更するために使用されていないことを保証
しなければならない。一般的に、1度リストされ
ていないエレメントに対するポインタがリストの
或る部分へ置かれると(例えばPUTによつて)、
そのエレメントはリストされたエレメントにな
る。 記憶装置アクセスは、記憶装置中に保持されて
いる値を変更するか、又は単に参照する。 本発明の実施例において、逐次化ハードウエア
命令による公用記憶装置領域(アンカー又はリス
トされたエレメント)の変更をトランザクシヨン
と云い、例えばPUTの実行中におけるリストさ
れていないエレメントの変更をプリペアレーシヨ
ンと云い、公用記憶装置にあるアンカー又はリス
トされたエレメントの変更を伴わない参照をイグ
ザミネーシヨンと云う。私用記憶装置アクセスは
重要性が少なく、別個の表示を必要としない。こ
の詳細な分析の例として、PUT TAILオペレー
シヨンの最初のトランザクシヨンは次のように限
定されることができる。 (1) 新しいエレメントのネキスト・ポインタをナ
ルへセツトすることによつて、新しいエレメン
ト(リストされていないエレメント)のプリペ
アレーシヨンを行う。 (2) アンカーのテイル・ポインターからテイル・
エレメントのロケーシヨンを決定するため、ア
ンカーのイグザミネーシヨンを行う。 (3) そのエレメントのネキスト・ポインタのイグ
ザミネーシヨンを行う。そのエレメントを次の
逐次化ハードウエア命令のための旧値として私
用記憶装置に複写する。 (4) 新しいエレメントへのポインタをテイル・エ
レメントのネキスト・ポインタへスワツピング
するトランザクシヨンの実行。 1つのオペレーシヨンに2つ又はそれ以上の変
形が存在すると、現在のリスト処理アルゴリズム
でロツキングが必要になるかも知れない。しか
し、各オペレーシヨンが1つの変形へ縮小される
場合にも(例えば、FIFO待ち行列のアンカーか
らテイル・ポインタを省略し、最後のエレメント
を発見するため、エレメント群を探索することに
よつて)、ロツキングを無効にすることは不可能
であろう。1つの変形が必要とされる場合でも、
それは複数のイグザミネーシヨンを含む。それら
のイグザミネーシヨンから得られた情報は、最後
のトランザクシヨンが実行されるまでに不正確に
なるかも知れない(極端な場合は、リストが他の
プロセスによつて空にされる場合)。かくて、ア
クチブはプロセスでない他のプロセスによる処理
からアクチブ・フオーマツト中のリストを保護す
るのみでなく、1つの変形の過程でプロセスによ
つてリストから収集された情報の有効性を確実に
するためにも、ロツキングが現時点で必要とされ
る。 現時点で利用可能なリスト処理アルゴリズム
は、逐次化ハードウエア命令によつてのみ、リス
トの逐次的使用を確実にしているが、、次のよう
な制限を有する。 (1) 各オペレーシヨンは1つだけの変形から構成
されること。 (2) オペレーシヨンは複数のイグザミネーシヨン
を含まないこと。 (3) PUT TAILのような或る種のオペレーシヨ
ンは、所与のリスト上で1つだけのプロセスに
よつて実行されること。 (4) 各プロセスは個別的な優先順位を割当てら
れ、或るプロセスがリスト上でオペレーシヨン
を実行している間、低い優先順位の他のプロセ
スはシステム中のコンピユータのサービスを受
けてはならない。この制限は単一コンピユー
タ・システムでのみ強制することができ、かつ
ページング・メカニズムがリスト上でオペレー
シヨンを実行しているプロセスからコンピユー
タの制御を獲得しないことを要する。 本発明は上記の制限の全てを除くものである。 リスト状態の制御 リストの状態に関する或る種の情報が、リスト
へエレメントを置き、又はリストからエレメント
を除去しようとしているプロセスに対して利用可
能でなければならない。例えば、LIFO待ち行列
からエレメントを除去しようとしているプロセス
は、その待ち行列中の最初のエレメントのアドレ
ス、及びその待ち行列中の第2番目のエレメント
のアドレスを知る必要がある。第2番目のエレメ
ントは、プロセスが新しい最初のエレメントにし
ようとしているものである。この情報は、逐次化
ハードウエア命令の準備として、リストの1部分
に対してイグザミネーシヨンを実行することによ
つて得られる。 第3オペランドの値が旧値の複写と逐次化ハー
ドウエア命令の実行との間で変化する時、スワツ
ピングは失敗することが分る。アンカーのような
リストの1部が逐次化ハードウエア命令によつて
更新される場合、この更新は、リストの状態が更
新されつつある部分に反映される限り、リストの
状態を維持する時に条件的に実行される。アルゴ
リズムが正しくコード化されているものと仮定し
て、リストを処理するため逐次化ハードウエア命
令が使用される場合、、リストの関連する部分が
私用記憶装置へ複写されてからリスト中に生じた
状態をスワツピング中の検査によつて検出するこ
とが、リストの完全性を維持するための十分条件
である。この条件が成立していることを確認する
ことはリスト状態集約と呼ばれる。情報がリスト
の検査によつて得られてから、逐次化ハードウエ
ア命令が依存している情報が変化すれば、そのス
ワツピングが失敗する時、リストの状態は逐次化
ハードウエア命令のために集約される。 状態変化を検出するため、現在使用されかつ本
発明で拡張的に使用される1つのメカニズムは、
リストの1部(一般的にはアンカー)で法
(modulus)を増加することである。法とは、そ
れが使用される記憶装置の長さに依存して或る最
大値へ増加されることができ、かつプロセスがそ
の最大値を超えてそれを増加させようとする時、
その最小値へ戻される数である。法の使用は、次
のような誤つたアルゴリズムを考察することによ
つて理解することができる。 LIFO待ち行列はヘツド・ポインタを含むアン
カーと、各々がネキスト・ポインタを含むエレメ
ントとより成る。テイル・エレメントのネキス
ト・ポインタはナルである。 PUT HEADは次の動作によつて実行される。 (1) リストのヘツド・エレメントに対する新しい
エレメントのネキスト・ポインタを指定するこ
と。 (2) 新しいエレメントに対するポインタをアンカ
ーへのヘツド・ポインタとスワツピングするこ
と。 TAKE HEADは次の動作により実行される。 (1) アンカーのヘツド・ポインタからヘツド・エ
レメントを識別すること。 (2) ヘツド・エレメントのネキスト・ポインタを
アンカーのヘツド・ポインタとスワツピングす
ること。 リストを空にするため、これらの動作を適当に
変更して使用することができるが、実施例とは直
接の関連を有しない。 アルゴリズムの欠点は、TAKEの間に何が起
るかを考察すれば分る。 リストがアンカー(A)及び2つのエレメント(E
及びF)より構成されているものとすれば、これ
は簡単に次のように表わされる。 A……→E……→F アクチブなプロセスはAを複写し、よつて旧値
(即ちEへのポインタ)を作る。次にEが位置づ
けられ複写されることによつて、新値(即ちFへ
のポインタ)が作られる。ここでプロセスは、A
及びFより成るリストを作るため、新しい値をA
へスワツピングする準備を終る。 A……→F しかし、ここでプロセスがスワツピングを実行
する前に、そのプロセスが中断され、他のプロセ
スがアクチブとなつて次のようなオペレーシヨン
のシーケンスを実行するものとする。 TAKE(エレメントEはリストから除かれる) A……→F TAKE(エレメントFはリストから除かれる) A (これは今や空である) PUT(新しいエレメントGをリストへ) A……→G PUT(再びエレメントEをリストへ) A……→E……→G 中断されたプロセスが今や再開され、新しい値
をアンカーへスワツピングしようと試みているも
のとする。リストの状態が変化したにも拘らず、
旧値と現在値は等しく、これらは共にEへのポイ
ンタである。従つてスワツピングは成功する。リ
ストはA及びGより成り、Eは除去されている。 A……→G しかし実際には、リストはA、F及びFに続く
エレメントより成る(Fがどのリストに置かれて
いようと)。 A……F……→? リストの完全性は失われている。 そのようなリストにあるアンカーの内容は、リ
ストの状態を適当に反映していないことは明らか
である。 もし我々がアンカーの中にゼロから無限に大き
い数へ変化することのできるフイールドを含ま
せ、TAKEのためにアンカーをスワツピングさ
せる度に、上記フイールド中の値を増加させると
すれば、これまで説明したようなスワツピングは
失敗する。なぜならば、スワツピング検査中に含
まれる新しいフイールドは、アンカーが旧値を作
るために複写されてから2だけ増加されているか
らである。実際には、そのようなフイールドは、
無限の長さになるので設けることができないが、
合理的長さの法は同様の保護を効果的に与える。
例えば16ビツトの法は、プロセスがリスト上で1
つのオペレーシヨンを実行している間に、他のプ
ロセスによつて約6万回の法の増加動作が実行さ
れる場合にのみ、リストの完全性を損う恐れがあ
る。 状態変化の表示を与えるのは、法のみでなくリ
ストの1部の全内容であることに注意されたい。
従つてオペレーシヨンごとに法を増加する必要は
ない。実際には、法の増加の頻度が少なければ、
少ないほどよい。それによつて、安全性が高めら
れ、又は逆に法は小さくてすむからである。前記
の例では、シングル・リストからのTAKEで法
を増加する必要は全然ない。 そのようなLIFO待ち行列のためのアルゴリズ
ムは、IBM社から出版されたIBMシステム/370
操作解説書(IBM、System/370Principles of
Operation)の第310頁から第314頁、及び本明細
書の第4図(フオーマツトに関して)及び付録2
(アルゴリズムに関して)に定義されている。 このアルゴリズムを明細書に掲げたのは、現在
の技術レベルを示すためであり、かつフオーマツ
ト及び付録中で使用される言語を理解し、また
LIFO及びその延長である優先順位待ち行列アル
ゴリズムの招介に資するためである。LIFO待ち
行列のフオーマツトの変更は、次のテーブルに示
される。
【表】 従つて、LIFO待ち行列は逐次化ハードウエア
命令のみを使用して処理される。もつと複雑なリ
ストは(比較的簡単なFIFO待ち行列も)重大な
制限なしに現在処理されることができない。 本発明は、これらの制限なしにLIFO待ち行列
よりも複雑なリストを処理するアルゴリズムを可
能とし、かつ原理的に現在制限を受けて処理され
ているリストよりも非常に複雑なリストへ適用で
きる。 非逐次状態の検査 リストの1部へ法を導入することは、リストの
その部分に保持された値が、リスト上で実行され
るべき次の逐次化ハードウエア命令のために、リ
ストの状態を十分に集約することを保証する1つ
の方法である。本発明で使用される第2の方法
は、非逐次状態の検査と呼ばれるものである。こ
れは、公用記憶装置中のフイールドと、私用記憶
装置中の同一フイールドの前に複写された値との
間で実行される比較よりも複雑なものではない。 スワツピングは逐次化され、かつリスト状態の
検査である比較を含む。非逐次状態の検査は同様
な状態検査であるが、記憶装置中の値を変更せ
ず、通常の非逐次化比較命令によつて実行される
ことができる。 非逐次状態の検査は次のように動作する。 命令は2つのオペランドを有する。その各々は
記憶装置の領域である。第1オペランドは実行し
ているプロセスに私用の記憶装置にあり、第2オ
ペランドは命令を実行する全てのプロセスによつ
てアクセス可能な記憶装置にある。 オペランド中の値はそれぞれ旧値及び現在値と
呼ばれる。 命令が実行されると、旧値は現在値と比較さ
れ、命令は完了する。 命令の実行に続いて、それを実行したプロセス
は、それが等価の比較で成功したか、又は不等価
の比較で失敗したかについてテストすることがで
きる。 今後チエツク(CHECK)の語は、前述したよ
うな非逐次状態の検査を意味するものとする。 本発明において、成功的なスワツピングのみが
トランザクシヨンを構成する。即ち、本発明の実
施に当つては、スワツピングによつてのみアンカ
ー及びリストされたエレメント中に保持された値
を変更する試みがなされる。しかし、失敗したス
ワツピング、又はチエツク、又はアンカー又はリ
ストされたエレメントの値を私用記憶装置へ複写
することによつてイグザミネーシヨンが設定され
てよい。 リスト処理上の問題及びその解決法 本発明を十分に理解するため、逐次化ハードウ
エア命令のみによるリスト処理の2つの問題点及
びその解決法、並びにそれを実行するために必要
な独特の論理を理解することが必要である。既に
前に示唆した2つの問題は次のとおりである。 (1) リストが常に正常な形式にあることを保証す
るため、基本フオーマツトと正常な形式との間
の接続を切断すること。 (2) すべてのスワツピングの前にリスト状態の集
約を確保すること。 もしリストが常に正常な形式にあるべきであれ
ば、オペレーシヨンを実行するためにリストを処
理しようとしているプロセスは、直ちにそのリス
トを処理し得なくてはならない。同時に、もしオ
ペレーシヨンが逐次化されるべきであれば、オペ
レーシヨンがリスト上でアクチブである限り、プ
ロセスはリスト上で他のオペレーシヨンを開始す
ることができない。これら2つの条件を組合せる
と、オペレーシヨンがリスト上でアクチブである
ことを発見したプロセスは、そのアクセスなオペ
レーシヨンを完了することができるのみである。
同一のオペレーシヨンを実行しようと試みている
複数のプロセスを制御するのに必要な特別の論理
は、再実行可能と呼ばれてよい。 オペレーシヨンの逐次化による正常形式の維持 本発明の必須の原理は、多くのプロセスがリス
ト上で同時に異つたオペレーシヨンを実行するこ
とは一般的に不可能であるが、多くのプロセスが
リスト上で同一のオペレーシヨンを実行できるよ
にする再実行可能なアルゴリズムを作ることがで
きるということである。かくて、プロセスを逐次
化することなく、リスト上のオペレーシヨンが逐
次化されてよい。 従つて、リスト処理において、プロセスは注意
の1時点で次の2つのオペレーシヨンに関連して
よい。 (1) リスト上でリスト処理アルゴリズムを実行す
るためのそれ自体のオペレーシヨン。 (2) リスト上のアクチブ・オペレーシヨン。 本発明の実施例は一般的に次のことを保証す
る。 (1) もしリスト上にアクチブ・オペレーシヨンが
存在すれば、そのオペレーシヨンを完了するた
め残つている変形アジエンダは、リストの状態
を検査することによつて、プロセスに対して利
用可能となる。 (2) そのアジエンダの最初の変形の実行は、アク
チブ・オペレーシヨンを完了してリストを非径
路フオーマツトにするが、アクチブ・オペレー
シヨンを完了するのに必要な変形を含む小さい
アジエンダによつてそのアジエンダを置換す
る。 (3) もしリスト上にアクチブ・オペレーシヨンが
なく、プロセスがそれ自体のオペレーシヨンを
開始したのでなければ、リストの1部分(一般
的にはアンカー)がスワツピングされる。その
ようなスワツピングはプロセス自体のオペレー
シヨンを開始する。もしプロセス自体のオペレ
ーシヨンが1つの変形のみを含むならば、その
開始はその完了でもある。 その他の場合、その開始はプロセス自体のオ
ペレーシヨンを完了するのに必要な変形アジエ
ンダのリストに対する結合を生じる。それによ
つて上記のオペレーシヨンはアクチブ・オペレ
ーシヨンとなる。 次の場合、プロセスはもはやリストを処理しな
い。 (1) それがそれ自体のオペレーシヨンを開始した
時。 (2) そのオペレーシヨンがもはやアクチブ・オペ
レーシヨンでない時。 プロセスがチエツク又は失敗したスワツピング
を実行する時、そのプロセスはリストを再び検査
し、もしそれがそれ自体のオペレーシヨンを開始
したが、そのオペレーシヨンがアクチブ・オペレ
ーシヨンでない場合、リストの処理を終り、もし
それがそれ自体のオペレーシヨンを開始しなかつ
たならば、それはアクチブ・オペレーシヨンを完
了しようとし、前述したようにそれ自体のオペレ
ーシヨンを開始しようとする。 しかし、ここで暗示された厳格性よりも幾分ゆ
るい厳格性が受入れられる場合もある。それは次
の場合である。 (1) プロセスの成功的な実行が保証されること以
上に、プロセスがそれ自体のオペレーシヨンに
ついて情報を必要としない場合、プロセスがそ
れ自体のオペレーシヨンを開始するや否や、そ
れはリストの処理を終つてよい。その場合、プ
ロセスがそれ自体のオペレーシヨンをリスト上
にアクチブのまま残すことになつてもよい。 そのようなオペレーシヨンは非生産的と呼ば
れてよい。その例はFIFO待ち行列に対する
PUT TAILである。 TAKE HEADのような他のオペレーシヨン
は生産的である。それは、所有プロセスは単に
オペレーシヨンが成功的であることを知る必要
があるだけでなく、どのエレメントがとられた
かを知る必要があるからである。 (2) リストへ結合されたアジエンダのの最終的変
形又は凝似バウンド・リストを基本フオーマツ
トへ戻す変形が、オペレーシヨンを開始するた
めスワツピングされるべき部分として指定され
たリスト部分(一般的にはアンカー)の変形で
ある場合、その変形及びプロセス自体のオペレ
ーシヨンの開始は同一のスワツピングによつて
実効化されてよい。 (3) まれな場合であるが、2つのオペレーシヨン
がリスト上で同時に実行されることができる場
合(即ち、リストがオペレーシヨンの1つに関
して同時に再使用可能な場合)、それらは逐次
化される必要はない。例えばTAKE HEAD,
PUT HEAD,PUT TAILが許される場合、
PUT HEADが完全に実行され、他のオペレー
シヨンはリスト上でアクチブであつてもよい。 リスト状態集約の達成 集約の問題は、処理されているリストの状態を
スワツピングされるべきリストの次の部分の中に
表わすようになつているので、リストの状態が変
化した時、スワツピングが失敗することによつて
生じる。この問題は、第2図、第3図のa及びb
に示されるFIFO待ち行列の論理、及びこれまで
の分析を用いて説明することができる。もしリス
トがシングルであれば(第2図のb)、2つのプ
ロセスがそれを同時に処理するように試みてよ
い。1つのプロセスはTAKEを試み、他のプロ
セスはPUTを試みる。TAKEプロセスはアンカ
ーをスワツピングして、空のリストを作る(第2
図のa)、PUTプロセスは単一のエレメントをス
ワツピングして、シングル後のリストを作る(第
3図のa)。もしこれらのスワツピングが同時又
は連続して実行されると、リストは空にされ、
TAKEエレメントは新しいPUTエレメントを指
定する。実際には、PUTプロセスはリストされ
ないエレメントを変更した。アンカー中の値も、
単一のエレメントにある値も、リスト状態の適当
な表現を与えない。 リスト状態集約の問題を解決するため、オペレ
ーシヨンの逐次化が前述したようにして達成され
たと仮定する。従つて、任意の時点で、リスト状
態は、リスト処理アルゴリズムと結合して、次の
事項を示す。 (1) リスト上にアクチブ・オペレーシヨンがある
こと。 (2) 次の変形において、リストのどの部分がスワ
ツピングされるべきか。 (3) その変形がどのような状態変化を生ずべき
か。又は (4) リスト上にアクチブ・オペレーシヨンがない
こと。 (5) 次の変形において、リストのどの部分がスワ
ツピングされるべきか。上記のの次の変形はリ
スト上で実行されるべき次のオペレーシヨンを
開始する。 従つて、或る地点でリストの状態がどうであつ
たかについてプロセスが完全な情報を有すれば、
それはリストのどの部分が次にスワツピングされ
たか、又はスワツピングされるべきであつたかを
決定することができる。プロセスがそのような完
全な情報を決定した時点は情報時点と呼ばれる。 プロセスは、他に方法がなければ、次のような
困難な方法で情報時点を得なければならない。プ
ロセスがアンカーのロケーシヨン以外にリストの
状態について情報を有していない地点にあるもの
とする。我々はこれをリスト処理アルゴリズムの
再試行地点と呼ぶ。 リストのそれぞれの部分はその部分の十分な変
形によつて変更される法を含み(もし必要ならば
その部分の全ての変形によつて)、法の変更の大
きさ及び頻度によつて許される時間内で、その部
分に含まれかつそれぞれのスワツピング又はチエ
ツクによつて比較されたトータルの値が、2つの
時点間でその部分の変形が起つたならば、それら
時点間で異なることを保証する。 次の手順が実行されるべきである。 (1) アンカーが私用記憶置へ複写される。 (2) アンカーの複写された部分にあるナルでない
それぞれのポインタ値から、エレメントが位置
づけられ、私用記憶装置へ複写される。 (3) エレメントの複写されたものの中にあるナル
でないそれぞれのポインタ値から、エレメント
が位置づけられ、私用記憶装置へ複写される。
エレメントは2回以上は複写されない。このプ
ロセスはリストの全ての部分が複写されてしま
うまで反復され、その複写は私用記憶装置中に
保持される。 この手順の間、エレメントを複写した後、アン
カーの複写及び前に得られた全てのエレメントの
複写が、リスト部分の現在値と比較される。 もし比較が一致しなければ、他のプロセスがリ
ストを変更しており、プロセスは再試行地点から
再開始される。 もし比較が一致すれば、手順は継続する。 リストの全ての部分が複写され、最終的チエツ
クが成功裏に実行されると、リストのエレメント
を複写した時点が情報時点であることが確定す
る。プロセスの私用記憶装置は、その時点におい
てリストに関する全ての情報を含む。ここで注意
すべきは、情報時点が得られた時、それが過去の
時点にあることである。現在の時点は情報時点で
はない。なせならば、リストの任意の部分にある
値は、それが最後にチエツクされた後に変更され
たかも知れないからである。 今やプロセスは情報時点の後に実行されるべき
次のスワツピングを決定することができる。 プロセスはスワツピングを試みる。 リストの各部分は法を与えられているので、そ
れがスワツピングされると、その値は最後の情報
時点に近い任意の時点における値とは異なるよう
になる。従つて、 (1) もしリストの選択された部分のスワツピング
が成功すると、情報時点とそのスワツピングと
の間で、他のプロセスはリストの変形を実行し
なかつた。なぜならば、プロセスはその部分を
スワツピングせざるを得なかつたからである。 (2) もし選択された部分のスワツピングが失敗す
ると、他のプロセスが同一部分のスワツピング
に成功したに違いない。プロセスは再試行地点
から再開始する。 ここで分るように、情報時点では、リストの
状態はリストの選択された部分の値へ集約され
ている。 前述したような一連のイグザネーシヨンが成功
的なスワツピングによつて後続されると、スワツ
プの時間は情報時点となる。従つて、そのような
成功的なスワツピングを実行したプロセスは、リ
スト処理アルゴリズムに従つて、直ちに、アクチ
ブ・オペレーシヨンの実行を完了するか、又はそ
れ自体のオペレーシヨンを開始するため、それが
手順を完了したか又は次のスワツピングを試みな
ければならないかを決定することができる。 既にそれ自体の生産的オペレーシヨンを開始し
たプロセスは、前述したイグザミネーシヨンの間
に、それ自体のオペレーシヨンがもはやアクチ
ブ・オペレーシヨンでないことを発見し、従つて
情報時点を得ることなく、又はスワツピングを実
行することなく手順を完了するかも知れない。そ
のようなプロセスは前に少なくとも1つの成功的
なスワツピングを実行しており、従つてそれ自体
のオペレーシヨンを開始している。 実際には、全体のリストを複写かつチエツクす
ることはあまり必要でなく、その状態及び結合ア
ジエンダの十分な表示が少数のリスト部分によつ
て与えられる。以下に説明するアルゴリズムは、
この制限されたイグザネーシヨンを例示する。 再実行可能なアルゴリズム 従つて、本発明の実施例は、次のような特色を
有する。即ちアルゴリズムの中に前述したような
再試行地点が設けられ、その地点から、リストの
一連のイグザミネーシヨン(必ずしも徹底的とは
言えない)が実行される。再試行地点に続くアル
ゴリズムを実行するプロセスは、 (1) リストの処理を完了し、 (2) 少なくとも1つの変形を実効化し、 (3) 他のプロセスが変形を実効化したことを検出
する。 このアルゴリズム、特に再試行地点に続く部分
は、プロセスが無限に多くの回数だけそれを実行
し、それが1回だけアルゴリズムを実行して全て
のスワツピング及びチエツクを成功させる時と同
じような結果を、それ自体のオペレーシヨンに関
して達成するという点で、再実行可能であると言
える。 プロセスではなくオペレーシヨンという観点か
らそのようなアルゴリズムに注目すると、それ
は、アジエンダが1つのメカニズムによつてリス
ト上で実行される方法と見ることができる。この
メカニズムは、少なくとも1つ又は任意選択的に
無限に多くのプロセスがリストを処理しているな
らば、変形が順次に実行されることを保証する
が、どのプロセスが所与の変形を実行するかは決
定されない。もつとも、各プロセスは少なくとも
それ自体のオペレーシヨンを開始する変形を実行
する。 本発明はこのようにしてオペレーシヨンからプ
ロセスを切離す。多くのプロセスは大部分1つの
プロセスと同じ効果を有するので、リストを処理
しているプロセスは悪影響を与えないでコンピユ
ータの制御を失うことができるのみでなく、プロ
セスがそのようにして制御を失い、かつ他のプロ
セスが少ない回数のスワツピング及びチエツクと
共にリストを処理することを可能ならしめる点
で、効率的なコンピユータの使用法ということが
できる。 本発明の唯一のオーバヘツドは、スワツピング
及びチエツクが失敗する時に無駄になる処理と
(このオーバヘツドは装置が割込みを処理して忙
しくなる時に減少する)、そのようなアルゴリズ
ムを考案するために必要な発明力である。 2つの実施例 本発明の2つの実施例を説明する。1つは
FIFO待ち行列に関するものであり、他の1つは
補数エレメントの優先順位待ち行列兼LIFO待ち
行列に関するものである。前者は、逐次使用資源
へ作業を待合せさせるため、通常使用される方法
であり、後者は、異つた優先順位のプロセスの使
用に供するため、固定長記憶バツフアのような受
動資源を制御するのに適当な方法である。 これらのアルゴリズムのために限定されたフオ
ーマツト変更は、試行されつつあるオペレーシヨ
ン(プロセス自体のオペレーシヨン)と独立した
径路フオーマツトの変更と、試行されつつあるオ
ペレーシヨンに依存し、かつ径路フオーマツトの
変更が実効化された後に(アクチブ・オペレーシ
ヨンが完了した後に)実効化される非径路フオー
マツトの変更とに分類される。従つて、径路フオ
ーマツトの変更は、非径路フオーマツトが作られ
るまで反復して試行される。 一般化されかつ事実上不完全なアルゴリズムも
説明する。
【表】
【表】 第5図のaは空、bはシングル、cはマルチプ
ル、dはシングルの後、eはマルチプルの後、f
は擬似バウンドのフオーマツトを示す。これらの
フオーマツトは第2図図及び第3図のa及びbと
対比されてよい。特に注意すべきは、テイル・エ
レメントが必ずしもナル・ポインタを含まないこ
とである。テイル・エレメントは、アンカー中の
テイル・ポインタがそれを指示するため、そのよ
うなものとして認識される。第5図のフオーマツ
トd,e,fはアクチブ・フオーマツトを示し、
それらのアジエンダは星印として示される結合フ
ラグ、アンカー中のテイル・ポインタ、及びテイ
ル・エレメント及び旧テイル・エレメント中のポ
インタによつて表示される。フオーマツトd及び
eは同一のアジエンダ(旧テイルをしてテイルを
指定せしめる単一のトランザクシヨン)を有し、
従つて空のアジエンダを有するフオーマツトfを
作る。 前記のフオーマツト変更は、フオーマツトd及
びeが径路フオーマツトであることを示す。それ
らは必然的にフオーマツトfへ変形される。図示
したオペレーシヨンの中で、TAKEは単一変形
のオペレーシヨンであり、PUTは重複変形のオ
ペレーシヨンであつて、その第2番目の変形はリ
ストの旧テイルを径路フオーマツト中に連鎖する
ことである。PUTオペレーシヨンは非生産的で
あり、従つてリストを径路フオーマツトとして残
す。 次に付録3に定義されるアルゴリズムを説明す
る。 レーベル「Fifo」において アルゴリズムへ渡されるパラメータは、アンカ
ーへのポインタ、及びTAKEオペレーシヨンに
ついてはナルであるポインタ、又はPUTされる
べき(リストされていない)エレメントを指定す
るポインタである。 アンカー、及び私用記憶装置中に作られたその
複写の各々は、最初のエレメントに対するポイン
タ、最後のエレメントに対するポインタ、結合フ
ラグ又はスイツチ(これらは第5図に含まれる)
及び法を含む。エレメント、及びその複写の各々
は、後続エレメントに対するポインタ(第5図参
照)及び法を含む。 ここで注意すべきは、フオーマツトd,e,f
において、テイル・エレメント中のポインタは、
その後続エレメントではなくその先行エレメント
を指示するために使用されることである。 レーベル「再試行」において (これは再試行地点である) アンカーが複写される。 ここで注意すべきは、空のリスト(第5図の
a)はアジエンダへ結合され得ないことである。
基本フオーマツトにあるリスト(結合されていな
い)のための論理が先ず考察されてよい。 TAKEについては、制御はレーベル「テイク」
へ渡されるか、又はリストが空であれば、レーベ
ル「ボイド」(失敗したTAKE)を介してレーベ
ル「出口」へ渡される。 PUT論理は、リストが空であるかどうかに依
存する。空のリストに対するPUTは1つの変形
中に実効化され、空でないリストに対するPUT
は2つの変形中に実効化される。従つて、リスト
が空でなければ、バインド・スイツチがセツトさ
れ、それは第2の変形を含む部分的アジエンダが
リストへ結合されることを示す。 アンカーのこの変更は、先ず私用記憶装置中に
保持されたアンカーの複写である新しいアンカー
中でなされる。これは本発明の全ての実施例を通
じてなされる慣行である(逐次化ハードウエア命
令―オペレーシヨンを参照)。 もし前のPUTがバインド・スイツチをオンの
ままにしておれば、非結合(アンバインド)ルー
チンが呼出され、他のオペレーシヨンが開始され
る前にPUTを完了する。 レーベル「ボイド」において 失敗したTAKEが検出される。 アンカーのヘツド・ポインタをセツトすること
によつて空のリストに対するPUTが開始される
(第5図のa及びb)。 (その後は、PUTオペレーシヨンは、空のリ
ストに対するPUT及び空でぜないリストに対す
るPUTの双方について同一である。後者の場合、
バインド・スイツチは既にセツトされている。) レーベル「PUT」において 新しい(リストされていない)エレメントが、
フオーマツトb,d,eにおけるリストのテイ
ル・エレメントになろうとしている。 新しいエレメントは旧テイルを指定するように
され、又はリストが空あれば、ナルにされる。 次に、新しいアンカーのテイル・ポインタが新
しいエレメントを指定するようにされる。 この時点で、もしアンカーが再試行ポインタの
後で変更されていなければ、新しいアンカーはそ
こにスワツプされるべき値を有する。 レーベル「TAKE」において シングル・リスト(第5図のb)は、同一値を
有するヘツド・ポインタ及びテイル・ポインタに
よつて識別される。空のリストは既に除かれてい
る。 もしリストがシングルでなければ、新しいアン
カー中のヘツド・ポインタがリスト中の第2エレ
メントを指定するようにされ、法が増加される
(LIFO論理の場合と同じである)。 レーベル「シングル」において 新しいアンカーが空のリストを表わすようにさ
れる。 レーベル「スワツプ」において PUT又はTAKEのオペレーシヨンを開始する
試みがなされる。 もしそれが失敗すれば、アルゴリズムが再開始
される。 もしそれが成功すれば、重複変形のPUTが開
始されるか、TAKE又は空のリストに対する単
一変形のPUTが実行される。 いずれの場合にも、アリゴリズムはレーベル
「出口」で終る。 レーベル「出口」において TAKEに関連した出力パラメータのみを説明
する。 制御はアルゴリズムを呼出したプログラムへ戻
る。 レーベル「アンバインド」において アンバインド・ルーチンは3つの機能を有す
る。 (1) 第5図のフオーマツトfにおけるように、ア
ジエンダを空として識別するか、フオーマツト
d及びeにおけるように空として識別しない。 (2) 後者の場合、フオーマツトfへの変形を実効
化する。 (3) 上記のいずれの場合にも、新しいアンカー中
のバインド・スイツチをオフにする。 ここで注意すべきは、もし実行中のプロセス自
体のオペレーシヨンがPUTであれば、バイン
ド・スイツチは前述したようにして再びオンにセ
ツトされることである。 バインド・スイツチはオフにセツトされる。 テイル・エレメントが複写される。これは勿論
アクチブなオペレーシヨン中でPUTされつつあ
るエレメントである。 そのポインタから、定義中で聖エレメントと呼
ばれる旧テイル・エレメントが位置づけられる。 このエレメントは同様に複写され、それが既に
テイル・エレメントを指定するかどうかをテスト
される。指定している状態は連鎖状態と呼ばれ、
フオーマツトfにおけるように空のアジエンダを
示す。 もしアジエンダが空であれば、他のプロセスが
リストを処理している可能性がある。なぜなら
ば、プロセスがアルゴリズムを実行していない
時、フオーマツトfはまれにしか発見されないか
らである。従つて、 (1) アンカーがチエツクされる。それは再試行地
点の後でアンカーが変更されなかつたことを確
めるためである。 (2) もしそれが変更されなかつたならば、アンバ
インド・ルーチンの呼出し(CALL)に続く命
令から実行が継続する。 このチエツクは、同様のテストが次のスワツピ
ングで暗示されているので、厳密には必要でな
い。 しかし実際には、それは失敗したスワツピング
よりも有効であろう。 もしこのチエツク(又は任意の)チエツクが失
敗すると、アルゴリズムは再試行地点から再開始
される。 フオーマツトfが除去されると、アルゴリズム
は旧テイル・エレメントをスワツピングする準備
をととのえる。それは旧テイル・エレメントをし
てテイル・エレメントを指定せしめ、かつその法
を増加するためである。法の増加は、リスト状態
集約のために必要である。 スワツピングの直前に、アンカーがチエツクさ
れる。前述した徹底的方法ではないが、上記のチ
エツクはリスト状態集約のために必要である。 次に旧テイル・エレメントがスワツピングされ
る。 もしスワツピングが失敗すれば、勿論アルゴリ
ズムは再試行地点から再開始される。 そうでなければ、アジエンダは空にされてお
り、アンバインド・ルーチンは制御ををその
CALLに続く命令へ戻す。 次にアルゴリズムはアンカーをスワツピングす
るために継続し、フオーマツトb,c,d又はe
が作られる。ここでフオーマツトfが常に一時的
なものであるかが分る。 一時的でないフオーマツトfが生じるのは、故
障によるか、プロセスがアンカーをスワツピング
することができる前にそのプロセスが終了したこ
とによるか、フオーマツトb又はcにおけるリス
トのテイル・エレメントがリストへPUTされた
(リストされていない)エレメントを指定して、
フオーマツトb又はcからフオーマツトfへの変
換を生じさせるという奇妙な一致による。奇妙な
ことであるが、これは全く害がなく、事実上スワ
ツピングを節約する。 レーベル「チエツク」において ここで注意すべきは、最初のチエツクの後では
アンバインド・ルーチンのCALLへ続く命令へリ
ターンがなされるが、第2のチエツクの後では、
チエツクのCALLに続く命令へリターンがなされ
ることである。前者の場合、チエツクはCALLの
代りにGOによつて呼出される(付録1の用語を
参照)。 アンバインド・ルーチンの機能は次のように要
約できる。それは、リストが非径路フオーマツト
(フオーマツトf)にあることを確実にし、新し
いアンカー中のバインド・スイツチをオフにセツ
トすることによつて、基本フオーマツト(フオー
マツトc)へリストを戻すようにする。従つて、
基本フオーマツトにあるリストのための論理が、
アンバインド・ルーチンの呼出しの後に適用可能
である。
【表】
【表】
【表】 このアルゴリズムは、付録2のLIFO待ち行列
アルゴリズムと比較されてよい。そのフオーマツ
トは第4図に示されている。第4図のaは空、b
はシングル、cはマルチプルのフオーマツトを示
す。特に、第4図と第6図のフオーマツトa,
b,cは全く等しく、上記の非径路フオーマツト
変更テーブルの左端にある3つの欄の変更も同じ
である。異なるところは空のリストからの
TAKEである。LIFOアルゴリズムは殆んど不変
のまま組込まれる(付録4のレーベル「補数」か
らレーベル「再試行」まで、及びレーベル「正
常」からレーベル「出口」までを参照)。 アルゴリズムを理解するため、各プロセスは優
先順位を有するタスクとし、優先順位はタスクに
対する資源の割当てに使用されるものと仮定す
る。各タスクは、それが所有するエレメントにそ
の優先順位をマークする。処理されつつあるリス
トは、固定長記憶装置バツフアの如き資源のリス
トであり、この資源はリスト中に置かれた時、タ
スクにとつて利用可能とされる。十分な資源が存
在するので、リストは単にLIFO待ち行列であり、
資源の1つを要求するタスクは待ち行列上の最初
の資源をとる。 待ち行列上に資源が存在しない時、資源を要求
するタスクは、資源が利用可能となるまで実行を
中止しなければならない。タスクは、それが資源
を待機していることを示す符号を待ち行列上に残
す。資源が利用可能となつた時、それを待機中の
最高優先順位のタスクへ割当てることが望まれ
る。このタスクは、待ち行列上に符号を有する最
高優先順位のタスクである。従つて、これら符号
又は補数エレメントの待合せは、優先順位の順序
でなければならない。 そのようなリストは、2つの状態のいずれかに
あつてよい。即ち、それが補数エレメントを有し
ない時には正常な状態にあり、又は補数化されて
いる。第6図において、aは空、bはシングル、
cはマルチプルのフオーマツトである。フオーマ
ツトa,b,cは正常な状態におけるリストを表
わす。これらの全ては基本フオーマツトである。
補数化状態における基本フオーマツトはフオーマ
ツトd及びeに示されている。dはシングル、e
はマルチプルのフオーマツトである。第7図及び
第8図に示されるフオーマツトはアクチブ・フオ
ーマツトである。 PUT COMPLEMENTは本質的に3つの変形
オペレーシヨンであることが分る。 最初の変形はオペレーシヨンの開始であり、ア
ンカー中に新しい補数エレメントに対するポイン
タをセツトすることより成る。これは第7図に示
されるような開始フオーマツトの1つを発生す
る。第7図のaは一般的な場合、bはリストエン
ド、cはリスタート、dはシングルのフオーマツ
トである。 第2の変形は、新しいエレメントがどのエレメ
ントの間に置かれるべきかを発見するため、リス
トが探索されるべきことを要する。図面におい
て、エレメントの順序を決定する優先順位のバラ
メータは文字として示されるが、これらの文字は
アルフアベツト順に配列されねばならない。挿入
に関連するエレメントは次のとおりである。 アクチブ・エレメント……これは挿入されつつ
あるエレメントである。 先行エレメント……これはアクチブ・エレメン
トに先行するエレメントである。 後続エレメント……これはアクチブ・エレメン
トに後続するエレメントである。 第2の変形は、アクチブ・エレメントをして後
続エレメントを指定せしめる。これは第8図のa
からdに示されるような挿入可能フオーマツトの
1つを発生する。第8図のaは一般的場合、bは
リストエンド、cはリスタート、dはシングルの
フオーマツトである。 最後の変形は、先行エレメントをしてアクチ
ブ・エレメントを指定せしめることによつて、そ
の挿入を完了する。新しいエレメントがリスト中
に最初のエレメントとして挿入されるべき時、最
後の変形はアンカー上で実行されねばならない。
従つて、それは次のオペレーシヨンを開始する同
一のスワツピングによつて実行されるのが便宜で
ある(上記のテーブルのフオーマツト8c及び8
dに対するエントリイを参照)。トランザクシヨ
ンのこの節約は、アルゴリズム定義中の状態リス
タート(Iistart)に関連している。この状態にお
いて、アクチブ・エレメントは先行エレメントを
欠いている(それはヘツド・エレメントになるべ
きである)。アルゴリズム定義中のリストエンド
(Iistend)状態は、アクチブ・エレメントが後続
エレメントを欠いている時に適用される(それは
テイル・エレメントになるべきである)。リスタ
ート及びリストエンドの双方が適用される時、リ
ストはシングルである(アクチブ・エレメントが
唯一のエレメントである)。 リスト上で実行される他のオペレーシヨン(正
常なエレメントのTAKE及びPUT)は、全て単
一の変形である。複数変形のPUT COMP
LEMENTは非生産的であることに注意された
い。 次に付録4に定義されるアルゴリズムを説明す
る。 レーベル「補数」について 渡されるパラメータはFIFO待ち行列に対する
パラメータと同一である。しかし注意すべきは、
TAKEリクエストが補数エレメントとして待合
せされてよいエレメントを渡さねばならないの
で、ポインタ・エレメントは決してナルにはなら
ないことである。従つて、このエレメントのネキ
スト・ポインタをしてそのエレメント自体を指定
せしめることによりTAKEが知らされる。 エレメントは優先順位を含み、アンカーは関連
した関係(relation related)を表示する。この
関係は次のようなものである。 大 小 等しくない 大きくない 小さくない 等しいか又は等しくないか(常に真) 等しくかつ等しくない(常に偽) この関係は、次の条件でリスト上の探索を終了
させるために使用される。 「アクチブ・エレメントの優先順位が推定上の
後続エレメントの関連づけられた優先順位である
こと。」 即ち、この条件が真であれば、後続エレメント
は識別されている。 後続エレメントが識別されなければ、エレメン
トはリストの端末に挿入される(リストエンドの
状態)。次のことが分る。 (1) 常に真の関係はLIFO待ち行列を作る。 (2) 常に偽の関係はFIFO待ち行列を作る。 (3) 「大きい」関係は、大きい優先順位パラメー
タに対して高い優先順位を有する真正の優先順
位待ち行列を作る(同一優先順位のエレメント
はFIFOとして配列される)。 第6図から第8図において、アルフアベツト的
に早く現われる文字は、遅く現われる文字より小
さいものと仮定される。従つて関連する関係は
「小さい」関係であり、最大の優先順位は「a」
によつて表わされ、最小の優先順位は「z」によ
つて表わされる。 レーベル「再試行」において これは再試行地点である。全ての失敗したスワ
ツピング及びチエツクはここからの再開始を生じ
る。 アンカーが複写される。 「補数化」及び「バウンド」の状態が定義され
る。 FIFOアルゴリズムにおけるようなバインド・
スイツチは存在しない。その代りに、バインド・
ポインタが必要とされないテイル・ポインタにと
つて代る。もしこのポインタがナルでもなく、リ
ストの最初のエレメントをも指定していなけれ
ば、それはリストへ挿入されるべきエレメントを
指定している(このエレメントは補数エレメント
でなければならない)。リストは或る(空である
かも知れない)アジエンダへ結合される。この地
点からレーベル「正常」までの定義は、第7図及
び第8図に示されるようなフオーマツトを有する
リストの処理に関連している。 挿入されるべきアクチブ・エレメントが位置づ
けられかつ複写される。 ここでリストの探索を開始するための値がセツ
トされる。 探索は、概念的には、アクチブ・エレメントを
アンカーと最初のエレメントとの間、最初のエレ
メントと第2エレメントとの間、第2エレメント
と第3エレメントとの間、以下同様にして最後か
ら2番目のエレメントと最後のエレメントとの間
に置くことである。その間に各位置における優先
順位関係がテストされ、適当な位置が発見された
時停止される。もし適当な位置が発見されない
と、アクチブ・エレメントはリストの端部に置か
れる(リストエンドの状態)。 探索を始めるに当つて、リスタートの状態がセ
ツトされる。探索の間推定上の先行エレメントを
指定する先行ポインタがアンカーを指定するよう
にされる。 後続ポインタは推定上の後続エレメントを指定
し、従つて先ずリスト中の最初のエレメントを指
定するようにセツトされる。 第7図のd及び第8図のdのフオーマツトで
は、リスト中に最初のエレメントが存在しない。
従つてこの時点で、リスタート及びリストエンド
の2つの状態が有効である。 レーベル「探索」において 探索はリストエンドの状態が発見されるまで繰
返される(もし早期に終了しなければ)。 推定上の先行エレメントは既に位置づけられて
いるか、又はリスタートが有効である。 推定上の後続エレメントが位置づけられかつ複
写される(このエレメントは、先行エレメント又
はリスタートであればアンカーのヘツド・ポイン
タによつて指定されたエレメントである)。 次に、アンカー、アクチブ・エレメント、先行
エレメント(リスタートの場合を除く)をチエツ
クすることによつて、広範囲の状態検査が実行さ
れる。 もしこの検査が成功すれば、優先順位関係がテ
ストされる。テスト結果が真であれば、探索は終
了する(アクチブ・エレメントは有効に配置され
た)。 もし優先順位関係の偽が発見されたならば、ア
クチブ・エレメントは概念的にリスト中の次の位
置へ移動される。今や後続エレメントは先行エレ
メントと見なされ、新しい後続エレメントに対す
るポインタがセツトされる。 前述したレーベル「探索」ヘループが戻ると、
新しい後続エレメントが位置づけられる。 もしチエツクが失敗しなければ、探索は常にレ
ーベル「フアウンド」へ行くことによつて完了す
る。 レーベル「チエツク」において (1) 状態検査が実行される。 (2) もし検査が成功しなければ、制御は再試行地
点へ戻る。 レーベル「フアウンド」において (1) テストされる状態はアクチブ・フオーマツト
に関連している。 (2) 「開始」は第7図に示されるフオーマツトに
関係する。 (3) 「擬似バウンド」は第8図のe及びfに関係
する。eは一般的場合、fはリストエンドのフ
オーマツトである。 (4) その他の場合は第8図のaからdまで示され
るフオーマツトに関係する。 ここで注意すべきは、「擬似バウンド」状態は
2つの文章が交互に成立することである。そのい
ずれが成立するかは、関連づけられた関係によ
る。もしリストが擬似バウンドされていれば、、
アクチブ・エレメントが先行エレメントと同じエ
レメントであるか、又は後続エレメントと同じエ
レメントである時、探索は停止する。 これらは2つの可能性として擬似バウンド条件
中に定義される。前者は、関連づけが「小」「大」
「等しくない」又は常に偽の関係にある時成立し、
後者は、他の関係にある時成立する。 レーベル「ジヤストオン」において (1) 第7図に示されるフオーマツトが第8図に示
される同一文字のフオーマツトaからdまで)
に変形される。 (2) アクチブ・エレメント中のネキスト・ポイン
タが後続エレメントを指定させられた時(リス
トエンドの場合、ナルにさせられた時)、アク
チブ・エレメント中の法が同時に増加させられ
る。 レーベル「挿入」において (1) リスタート状態はフオーマツト8c及び8d
を識別する。これらの最終的な変形は、リスト
上で次のオペレーシヨンを開始するスワツピン
グ中で実効化される。 (2) フオーマツト8a及び8bはそれぞれ8e及
び8fへ変換される。 レーベル「アンバインド」において 擬似バウンドのフオーマツト8e及び8fは、
アンカーの複写を、非結合としてマークされるべ
き新しいアンカーと呼ばれるようにする。 レーベル「セツトヘツド」において アクチブ・エレメントが新しい最初のエレメン
トになるべきことを新しいアンカー中に表示し、
同時に新しいアンカーを非結合化することによつ
て、フオーマツト8c及び8dが処理される。 レーベル「正常」において 正常状態のLIFO処理が実行される。 レーベル「ボイド」において 正常なLIFO処理で失敗したTAKEがPUT
COMPLEMENTへ変えられる。 レーベル「プツト」において 正常なLIFO処理が継続する。 レーベル「アンバウンド」において (1) 「アンバインド」から到達されようと、「セ
ツトヘツド」から到達されようと、又は全ての
探索処理をバイパスすることによつてであろう
と、新しいアンカーはアンバウンドとしてマー
クされている。 (2) そのポイントの後の次のアンカーのスワツピ
ングは、もしそのアンカーが次の変形によつて
結合されなければ、アンカーをアンバウンドと
してマークし、次の変形を実効化する。 リストは補数状態にあるので、TAKEはPUT
COMPLEMENTへ変えられ、PUTはTAKE
COMPLEMENTへ変えられる。 TAKE COMPLEMENT処理は、どの補数エ
レメントが取られるかを記録し、バインド・ポイ
ンタをリセツトすることを先行させた通常の
TAKE処理である。ここで注意すべきは、もし
リストがフオーマツト6dに示されるようにシン
グルであれば、バインド・ポインタのこのリセツ
トは、TAKE論理によるヘツド・ポインタのリ
セツトと共に、リストを空にし、前記の表の第2
行及び第4列に示される変化を生じることであ
る。 もしリストがシングルでなければ、バインド・
ポインタのこのリセツトは単にリストを補数化
し、アンバウンドのままに残す。 レーベル「テイク」において 普通のTAKE処理が実行される(即ち、本来
のTAKE又はTAKE COMPLEMENTへ変換さ
れたPUT)。 レーベル「補数プツト」 TAKEが意図された。しかしリストは空であ
つたか又は補数化された。 TAKEはそれ自体を指定するエレメントを指
定するポインタ・エレメントによつて信号を受け
るので、このエレメントをアンカーへ結合するこ
とによつて、第7図に示されるフオーマツトの1
つが作られねばならない。 これは複数トランザクシヨンPUT
COMPLEMENTの開始を構成する。 レーベル「スワツプ」において 普通のアンカー・スワツピングが実行される。 レーベル「出口」において 「失敗」状態は失敗した(即ち遅延した)
TAKEを示す。呼出しプログラムはタスクをし
て再開始されるまで待機させるべきである。再開
始されると、所望のエレメントが利用可能にされ
る。 「スケジユール」状態は、PUTがTAKE
COMPEMENTへ変換されたことを示す。 (1) 待ち行列上にエレメントを置いた待機中のタ
スクを再開始するため、所望のエレメントが使
用されるべきである。 (2) PUTされるべきであつたエレメント(即ち、
現在のプロセス自体のエレメント)が再開始さ
れたタスクに対して利用可能にされるべきであ
る。 「テイクン」状態は成功したTAKEを示す。 上記の状態のいずれも成立していなければ、正
常なPUTが実行された。 このアルゴリズムは中止再開メカニズム及び他
のリスト処理アルゴリズムと共に使用される必要
がある。後者のリスト処理アルゴリズムは自由な
エレメントのリストを管理するものであつて、こ
れらのエレメントは、このアルゴリズムを呼出し
かつ呼出した後にそれを解放するためタスクによ
つて獲得される。 実際には、定義したようなアルゴリズムは、必
ずしもその目的に沿つて完全に続行されるとは限
らない。TAKE COMPLEMENTへ変換された
PUTを完了したプロセスは、それが最高優先順
位の待機プロセスを再開始する前に中断されるか
も知れない。 次に他のプロセスが他のPUTを実行し、通常
のエレメントをリストへ置くか、又はTAKE
COMPLEMENTを実行し第2優先順位の待機プ
ロセスを再開始するかも知れない。このようなエ
ラーの可能性を除くため、優先順位計画を実施す
るに当つてアルゴリズムを変更することができ
る。しかし、これはプロセス再開論理をそのアル
ゴリズム自体の中に置くことを含み、複雑になる
のでここでは説明しない。 アルゴリズムの注意すべき特性は、探索及びア
ンバインド論理中でなされる作業量である。これ
はPUT COMPLEMENTの開始プロセスをし
て、それ自体のオペレーシヨンを開始する前に、
同様の探索を実行せしめることによつて減少させ
ることができる。次にアンカーへ結合されたエレ
メントが後続エレメントを指定するためセツトさ
れることができる。この変更が、どのような場合
に、効率上の改善をもたらすかどうかは研究され
ていない。アルゴリズムの現在の形態における1
つの重要な点は、リストへ結合されたアジエンダ
が事実上リスト中で見出される全ての情報を含む
ことである。しかし、これは理論的効果であつて
実際には重要でないかも知れない。。 一般的アルゴリズム 一般的アルゴリズムは付録5に定義される。 このアルゴリズムは本発明の一般的原理を組込
んだ構成体である。次のような注意点が、アルゴ
リズムへ挿入されるべき論理の種類を教える。 前書き 入力の定義 現在のアンカーの位置、アンカー及びエレメン
ト中のフイールドの定義。 アクチブ……実行中のプロセス自体のオペレー
シヨンがアクチブ・オペレーシヨンであれば真で
ある。これは新しいアンカー及び入力データ中の
値に依存する。 結合可能……実行中のプロセス自体のオペレー
シヨンが1つの変形よりも多いアジエンダを有す
れば真である。これは入力データ及び新しいアン
カー中の値に依存する。 非生産的……実行中のプロセス自体のオペレー
シヨンが非生産的であれば真である。これは入力
データに依存する。 新しいアンカーのテスト 状態の詳細な定義。 バウンド……アンカーが空であるかも知れない
アジエンダへ結合されていれば真である。 更に、空又はシングル・リストの如き特別の状
態をチエツクし処理しつつあれば真である。 次のトランザクシヨンの識別及び検査 リストの検査。 アジエンダの最初の変形の識別。 チエツクを使用して再実行へ行く状態の検査。 状態の定義。 擬似バウンド……結合されたアジエンダが空で
あるとき真である。これは新しいアンカーをノツ
トバウンドへリセツトする。 次のトランザクシヨンの実行 ネキスト・トランザクシヨン識別検査論理によ
つて識別されたリストの適当な部分をスワツピン
グすること。 自己オペレーシヨンの実行 逐次化ハードウエア命令を使用して単一の変形
オペレーシヨンを実行すること。 自己オペレーシヨンの開始 複数変形オペレーシヨンの最初の変形を実行
し、アジエンダをリストへ結合し、逐次化ハード
ウエア命令を用いてバウンド状態をセツトするこ
と。 出 口 出力の定義及びリターン 付録1 用語及び表現 付録1はアルゴリズムの様式定義中に使用され
る用語及び表現を説明する。 アルゴリズムの定義中で使用される用語 アルゴリズムの定義中、小文字は3つの方法で
使用される。 (1) 指令のところで説明されるように、命令及び
定義中の接続語として。 (2) ステートメントのところで説明されるよう
に、ステートメント中の接続語として。? (3) ステートメントの真機能接続語として、次の
ような用語が使用される。 not……notステートメントはステートメントの
否定である。 and……ステートメント1andステートメント
2はステートメント1とステートメント2
との論理積である。 or……ステートメント1orステートメント2は
ステートメント1及びステートメント2の
論理和である。 アルゴリズムの定義中、最初の文字が大文字の
用語は、次の5つの方法で使用される。 (1) レーベルとして それに続く指令をマークする。 GO,CALL,RESTART指令においては、
レーベルによつて先行された指令へ実行が移さ
れる時。 (2) CONDITION指令によつて定義されるよう
に、ステートメントの簡略語として。 (3) フイールド名称として。 不明瞭性を避け、読取可能性を増進するた
め、フイールド名称は次のいずれかである。 (イ) POINTERのようなフイールドの種類によ
つて先行される。 (ロ) ブロツク名称ブロツク種類の表現形式が続
く。 (4) ブロツク名称として。 (5) ブロツク種類として。 ブロツクとは、リストの1部、又はリストの1
部の複写、又は複写された後に1つ又はそれ以上
のフイールドを変更された複写である。 ブロツクはブロツク記述語によつて名称を与え
られる。ブロツク記述語は次のような表現形式を
有する。 ブロツク名称 ブロツク種類 ここでブロツク名称はブロツクの名称であり、
ブロツク種類はブロツクの種類である。 アルゴリズムの定義中、大文字の用語は次の3
つの方法で使用される。 (1) 命令又は定義中の最初の用語として生じる指
令識別語として。 (2) フイールドの種類として。次の用語が使用さ
れる。 POINTER……ポインタ。 MODULUS……法。 SWITCH……ON及びOFFの2つの値の1つ
を含むことのできるフイールド。 PARAMETER……比較のための数値を含む
フイールド。 RELATION……比較のために或る関係をマー
クするフイールド。 (3) 値として。次の用語が使用される。 NULL……ポインタ中にセツトされた無効値。 ON及びOFF……SWITCH中にセツトするこ
とができる2つの値。 ステートメント ステートメントは、アルゴリズムの実行中の任
意の地点で真又は偽のいずれかである表現語句で
ある。ステートメントは「単純」又は「複合」形
式のいずれかである。 単純ステートメントは次の形式を有する。 フイールド関係オペランド ここでフイールドはフイールド記述語である。
これは次のような表現形式を有する。 フイールド種類 フイールド名称 又は次のような形式を有する。 ブロツク名称 ブロツク種類のフイールド名称 関係とは例えば「大きい」などの表現である。 オペランドとはフイールド記述語又はNULL
の如き値を示す語である。 単純ステートメントは、フイールドによつて名
称づけられたフイールド値とオペランドによつて
名称づけられたフイールドの値、又はオペランド
によつて指示された値との間に、関係によつて表
現された関係が成立するとき真である。オペラン
ドが値を示す用語であり、関係が単純な等価又は
不等価を表現する時、関係は次のように書かれ
る。 is 又は is not これらは次のようには書かれない。 is equal to is not equal to 複合ステートメントは、前述したように否定、
論理積、論理和によつて単純ステートメントを連
結することによつて形成される。 CONDITION指令によつて定義された時、用
語は単純又は複合の完全ステートメントとして使
用されてよい。 指 令 指令は定義又は命令である。アルゴリズムの実
施例において、命令は1つ又はそれ以上のマシン
命令として実施される。定義は命令中で使用され
る表現語句を解釈するために使用される。定義
LOCATE及びWHENは後に説明するような或る
実施例中の命令に関連している。 実行の制御を移す命令 GO toレーベル。実行はアルゴリズム中のレー
ベルが指令をマークする地点で継続する。 CALLレーベル。CALL命令の直後に続く地点
のアドレスが、概念的にスタツク(リターン・ス
タツク)上に置かれ、実行はアルゴリズム中のレ
ーベルが指令をマークする地点で継続する。リタ
ーン・スタツクはアルゴリズムへのエントリイに
当つては空であると考えられる。 RETURN。もしリターン・スタツクが空であ
れば、アルゴリズムの実行は完了している。概念
的には、制御はアルゴリズムを呼出したプログラ
ムへ戻る。もしリターン・スタツクが空でなけれ
ば、スタツク上に置かれた最後のアドレスがそこ
から除去され、実行はそのアドレスによつて示さ
れた地点で継続する。 RESTART fromレーベル。リターン・スタ
ツクは空にされ、実行はアルゴリズム中のレーベ
ルが指令をマークする地点で継続する。 条件つき指令 IFステートメント指令。ステートメントの真
偽がテストされる。もしそれが真であれば、その
指令が実行される。そうでなければ、実行はIF
命令に続いて継続する。 WHENステートメント指令。WHENステート
メント指令は、アルゴリズムが制御を渡したプロ
グラムがどのようにしてそれに戻された情報を処
理するかを示す定義である。このプログラムは、
WHENステートメント指令と同じ形式のIF命令、
即ちIFステートメント指令を出してよい。 OTHERWISE指令。OTHERWISE指令はIF
命令の直後に書かれる。IFステートメント指令
の実行にあたつて、もしステートメントが真であ
つたならば、OTHERWISE指令中の指令は実行
されず、OTHERWISE指令に続いて実行が継続
する。もしステートメントが偽であつたならば、
OTHERWISE指令が実行される。 IF FAILED指令。IF FAILED指令はスワツ
ピング及びチエツクに続いて使用される。それは
IF指令として読まれてよく、その場合、
FAILEDは、実行されたばかりのスワツピング又
はチエツクが旧値と現在値の不等価を発見したこ
とを示すステートメントである。 スワツプ(オペランド1、オペランド2、オペ
ランド3)及びチエツク(オペランド1、オペラ
ンド2)。 オペランド1〜3の表現語句は、次の形式を有
するブロツク記述語である。 ブロツク名称 ブロツク種類 スワツピング及びチエツクの実行は、それぞれ
逐次化ハードウエア命令―オペレーシヨン及び非
逐次状態の検査のところで定義したとおりであ
る。 非逐次化データ変更命令 COPYオペランド1toオペランド2、オペラン
ド3、……。オペランド1、オペランド2などの
表現語句は全てブロツク記述語であるか、フイー
ルド記述語である。後者の場合、オペランド2な
どの値はオペランド1の値へセツトされる。前者
の場合、、オペランド2にある全てのフイールド
の値がオペランド1の同一名称のフイールドの値
へセツトされる。オペランドのブロツク種類は同
一である。 SETフイールドto値。フイールド記述語によ
つて名称づけられたフイールドの値が値によつて
指定された値へセツトされる。 INCREMENTフイールド。リスト状態の制御
のところで説明したように、フイールド記述語に
よつて名称づけられた法が増加される。 データ定義 INPUT is フイールド1、フイールド2、…
…。 フイールド1、フイールド2などの表現語局は
アルゴリズムを呼出したプログラムによつてその
アルゴリズムへ利用可能とされたフイールドに名
称を与えるフイールド記述語である。 FIELDS of block are種類1名称1、種類2
名称2、……。ブロツクはElementのようなブロ
ツク種類であり、種類1、種類2などは
POINTERのようなフイールド種類であり、名称
1、名称2などはNextのようなフイールド名称
である。各ブロツクは種類1名称、種類2名称2
などのフイールドから成るものと定義される。 ここで注意すべきは、FIELDS定義に続いて、
ブロツクのフイールドはブロツクの名称と考えら
れることである。例えば Next of New Element OUTPUT is フイールド、フイールド2、…
…。フイールド1、フイールド2などの表現語句
は、アルゴリズムによつて利用可能とされ、かつ
そのアルゴリズムを呼出したプログラムに関連し
た情報を含むフイールドに名称を与えるフイール
ド記述語である。 同義語の定義 CONDITION nameステートメント。 表現語句nameは、あたかもステートメントの
ように読まれるべきである(即ち、ステートメン
トの短縮語の如く取扱われるべきである)。 LOCATEブロツク名称 ブロツク種類from
フイールド。 表現語句フイールドは、ブロツク
名称ブロツク種類によつて名称を与えられたブロ
ツクを指示するポインタのフイールド記述語であ
る。 注意すべきは、もしポインタ・フイールド中の
値がアドレスを示すものであれば、この指令を使
用する場合、マシン命令は必要とされないことで
ある。しかし、ポインタが既知のアドレスからの
変位量を示すものとして使用された場合、この指
令はそのような変位量からアドレスを計算するた
めに使用されねばならない。 記憶装置領域の定義及び変更 公用記憶装置中のブロツクは、LOCATE指令
の第1オペランド位置にその記述語が現われるこ
とによつて明示的に定義される。 実行中のプロセスに対する私用記憶装置中のブ
ロツクは、オペランド又は命令のオペランドの1
部として現われるそのブロツク記述語によつて暗
黙的に定義される。 全てのブロツク種類はFIELDS指令中に明示的
に定義される。 ブロツク内のフイールドは、それを含むブロツ
ク及び関連したFIELDS指令の定義によつて定義
される。 ブロツク中にないフイールド(これは全て実行
中のプロセスに対して私用のものである)は、そ
の記述語がINPUT指令に現われることによつて
明示的に定義されるか、又はその記述語が命令の
オペランドとして現われることによつて暗黙的に
定義される。 注意すべきは、ブロツク内の或るフイールドが
COPY,SET、又はINCREMENTのような命令
によつて変更される時、ブロツク内の他のフイー
ルドは変更されないことである。 付録2 後入れ先出し待ち行列プログラム (現時点におけるアルゴリズム技術水準の例) 付録2は現在使用されているアルゴリズムの例
を様式的に定義する。 Lifo INPUT is POINTER Anchor,
POINTER Element.入力はポインタ「ア
ンカー」、ポインタ「エレメント」 CONDITION Taking is POINTER
Element is NULL.テーキングであれば、
ポインタ「エレメント」はナル LOCATE Current Anchor from
POINTER Anchor.ポインタ「アンカー」
から現在のアンカーを位置づける。 Fields of Anchor are POINTER
Head,MODULUS Amod.アンカーのフ
イールドはポインタ「ヘツド」、法のアモ
ード FIELDS of Element are POINTER
Next.エレメントのフイールドはポインタ
「ネキスト」 Retry再試行 COPY Current Anchor to
OldAnchor,New Anchor.現在のアンカ
ーを旧アンカー、新アンカーへ複写 CONDITION Empty is Head of New
Anchor is NULL.空であれば、新アンカ
ーのヘツドはナル If Empty GO to Void.空であれば、ボイ
ドへ行け IF not Taking GO to Put.テーキングで
なければ、プツトへ行け LOCATE Desired Element from Head
of Old Anchor.旧アンカーのヘツドから
所望のエレメントを位置づける COPY Next of Desired Element to
Head of New Anchor.所望エレメントの
ネキストを新アンカーのヘツドへ複写 IF not Empty INCREMENT Amod of
New Anchor.空でなければ、新アンカー
のアモードを増加 GO to Swap.スワツプへ行け Voidボイド IF Taking GO to Exit.テーキン
グであれば、、出口へ行け PUTプツト LOCATE New Element from
POINTER Element.ポインタ「エレメン
ト」から新エレメントを位置づける COPY Head of Old Anchor to Next
of New Element.旧アンカーのヘツドを
新エレメントのネキストへ複写 COPY POINTER Element to Head of
New Anchor.ポインタ「エレメント」を
新アンカーのヘツドへ複写 Swapスワツプ SWAP(Old Anchor、New
Anchor,Current Anchor).スワツプ
(旧アンカー、新アンカー、現在のアンカ
ー) IF FAILED GO to Retry.もし失敗すれ
ば、再試行へ行け EXIT出口 OUTPUT IS Head of Old
Anchor,POINTER Element.出力は旧ア
ンカーのヘツド、ポインタ「エレメント」 CONDITION Fail is Taking and
Head of Old Anchor is NULL.もし失
敗であれば、テーキング及び旧アンカーの
ヘツドはナル WHEN Taking and not Failテーキング
かつ失敗でないとき LOCATE Desired Element From Head
of Old Anchor.旧アンカーのヘツドから
所望エレメントを位置づける RETURN.リターン 付録3 先入れ先出し待ち行列プログラム 付録3は第5図に示されるフオーマツトを使用
する本発明の実施例を様式的に定義する。 Fifo INPUT is POINTER Anchor,
POINTER Element.入力はポインタ「ア
ンカー」、ポインタ「エレメント」 CONDITION Taking is POINTER
Element is NULL.テーキングであれば、
ポインタ「エレメント」はナル LOCATE Current Anchor from
POINTER Anchor.ポインタ「アンカー」
から現在のアンカーを位置づける FIELDS of Anchor are POINTER
Head,POINTER Tail,MODULUS
Amod、SWITC Bind. アンカーのフイールドはポインタ「ヘツ
ド」、ポインタ「テイル」、法「アモード」、
スイツチ「バインド」 FIELDS of Element are POINTER
Next,MODULUS Emod.エレメントの
フイールドはポインタ「ネキスト」、法
「エモード」 Retry再試行 COPY Current Anchor to Old
Anchor,New Anchor.現在のアンカーを
旧アンカー、新アンカーへ複写 CONDITION Empty is Head of New
Anchor is NULL.空であれば、新アンカ
ーのヘツドはナル CONDITION Bound is Bind of New
Anchor is ON.バウンドであれば、新ア
ンカーのバインドはオン IF Empty GO to Void.空であれば、ボ
イドへ行け IF Bound CALL Unbind.バウンドであ
れば、アンバインドを呼出せ IF Taking Go to Take.テーキングであ
れば、テイクへ行け SET Bind of New Anchor to ON.新ア
ンカーのバインドをオンへセツト GO to Put.プツトへ行け Voidボイド IF Taking GO to Exit.テーキン
グであれば、出口へ行け COPY POINTER Element to Head of
New Anchor.ポインタ「エレメント」を
新アンカーのヘツドへ複写 Putプツト LOCATE New Element from
POINTER Element.ポインタ「エレメン
ト」から新エレメントを位置づける COPY Tail of New Anchor to Next
of New Element.新アンカーのテイルを
新エレメントのネキストへ複写 COPY POINTER Element to Tail of
New Anchor.ポインタ「エレメント」を
新アンカーのテイルへ複写 GO to Swap.スワツプへ行け Take LOCATE Desired Element from
Head of Old Anchor.旧アンカーのヘツ
ドから所望エレメントを位置づける CONDITION Singulary is Head of
Old Anchor is equal to Tail of Old
Anchor. シングルであれば、旧アンカーのヘツドは
旧アンカーのテイルに等しい IF Singulary GO to Singleもしシングル
であれば、シングルへ行け COPY Next of Desired Element to
Head of New Anchor.所望エレメントの
ネキストを新アンカーのヘツドへ複写 INCREMENT Amod of New Anchor.
新アンカーのアモードを増加 GO to Swap.スワツプへ行け Singleシングル SET Head New Anchor to
NULL.新アンカーのヘツドをナルへセツ
ト SET Tail New Anchor to NULL.新ア
ンカーのテイルをナルへセツト Swapスワツプ SWAP (Old Anchor,New
Anchor、Current Anchor).スワツプ
(旧アンカー、新アンカー、現在のアンカ
ー) IF FAILED GO to Retry.もし失敗であ
れば、再試行へ行け Exit出口 OUTPUT is Head of Old Anchor,
POINTER Element.出力は旧アンカーの
ヘツド、ポインタ「エレメント」 CONDITION Fail is Taking and
Head of Old Anchor is NULL. 失敗であれば、テーキング及び旧アンカー
のヘツドはナル WHEN Taking and not Failテーキング
及び失敗でないとき、 LOCATE Desired Element from Head
of Old Anchor.旧アンカーのヘツドから
所望エレメントを位置づける RETURN.リターン Unbindアンバインド SET Bind of New
Anchor to OFF.新アンカーのバインドを
オフヘセツト LOCATE Tail Element from Tail of
New Anchor.新アンカーのテイルからテ
イル・エレメントを位置づける COPY Tail Element to Work Element.
テイル・エレメントを作業エレメントへ複
写 LOCATE Sacral Element from Next
of Work Element.作業エレメントのネキ
ストのネキストから聖エレメントを位置づ
ける COPY Sacral Element to Old
Element,Chain Element.聖エレメント
を旧エレメント、連鎖エレメントへ複写 CONDITION Chained is Next of
Chain Element is equal 連鎖があれば、
連鎖エレメントのネキストはto Tail of
New Anchor.新アンカーのテイルに等し
い IF Chained GO to Check.もし連鎖され
ていれば、チエツクへ行け COPY Tail of New Anchor to Next
of Chain Element.新アンカーのテイルを
連鎖エレメントのネキストへ複写 INCREMENT Emod of Chain
Element.連鎖エレメントのエモードを増
加 CALL Check チエツクを呼出す SWAP(Old Element,Chain Element,
Sacral Element).スワツプ(旧エレメン
ト、連鎖エレメント、聖エレメント) IF FAILED RESTART from Retry.も
し失敗であれば、、再試行から再開始 RETURN.リターン Checkチエツク Check(Old Anchor,Current
Anchor).チエツク(旧アンカー、現在の
アンカー) IF FAILED RESTART from Retry.も
し失敗であれば、再試行から再開始 RETURN.リターン 付録4 後入れ先出し兼優先順位待ち行列プログ
ラム 付録4は第6図乃至第8図に示されるフオーマ
ツトを使用する本発明の実施例を様式的に定義す
る。 Compl補数 INPUT is POINTER Anchor,
POINTER Element.入力はポインタ「ア
ンカー」、ポインタ「エレメント」 LOCATE Current Anchor from
POINTER Anchor.ポインタ「アンカー」
から現在のアンカーを位置づける LOCATE Own Element from
POINTER Element.ポインタ「エレメン
ト」から自己エレメントを位置づける FIELDS of Anchor are POINTER
Head,POINTER Bind,MODULUS
Amod,Relation related. アンカーのフイールドはポインタ「ヘツ
ド」、ポインタ「バインド」、法「アモー
ド」、関連づけられた関係 FIELDS of Element are POINTER
Next,MODULUS Emod,
PARAMETER Priority. エレメントのフイールドはポインタ「ネキ
スト」、法「エモード」、パラメータ「優先
順位」 Retry再試行 COPY Current Anchor to Old
Anchor New Anchor.現アンカーを旧ア
ンカー、新アンカーへ複写 CONDITION Complemented is Bind
of New Anchor IS NOT NULL. 補数化されていれば、新アンカーのバイン
ドはナルでない CONDITION Bound is Complemented
andバウンドが補数化されていれば、 Bind of New Anchor is not equal to
Head of New Anchor. 新アンカーのバインドは新アンカーのヘツ
ドに等しくない IF not Complement GO to Normal.補
数でなければ、正常へ行け IF not Bound GO to Unbound.バウンド
でなければアンバウンドへ行け LOCATE Active Element from Bind
of New Anchor.新アンカーのバインドか
らアクチブ・エレメントを位置づける COPY Active Element to Moving
Element.アクチブ・エレメントを移動エ
レメントへ複写 COPY POINTER Anchor to
POINTER Previous.ポインタ「アンカ
ー」をポインタ「プリビアス」へ複写 COPY Head of New Anchor to
POINTER Following.新アンカーのヘツ
ドをポインタ「フオロイング」へ複写 CONDITION Listart is POINTER
Previous is equal to POINTER
Anchor. リスタートであれば、ポインタ「プリビア
ス」はポインタ「アンカー」に等しい CONDITION Listend is POINTER
Following is NULL.リストエンドであれ
ば、ポインタ「フオロイング」はナル Search探索 IF Listend GO to Found.もしリ
ストエンドであれば、フアウンドへ行け LOCATE Following Element from
POINTER Following.ポインタ「フオロ
イング」から次のエレメントを位置づける COPY Following Element to
Pointfrom Element.次のエレメントをポ
イントフロム・エレメントへ複写 CALL Check.チエツクを呼出す IF Priority of Moving Element is
related Priority of Pointfrom Element
GO to Found. もし移動エレメントの優先順位がポイント
フロム・エレメントの関連づけられた優先
順位であれば、フアウンドへ行け COPY Pointfrom Element to Pointto
Element.ポイントフロム・エレメントを
ポイントツー・エレメントへ複写 COPY POINTER Following to
POINTER Previous.ポインタ「フオロイ
ング」をポインタ「プリビアス」へ複写 COPY Next of Pointto Element to
POINTER Following.ポイントツー・エ
レメントのネキストをポインタ「フオロイ
ング」へ複写 LOCATE Previous Element from
POINTER Previous.ポインタ「プリビア
ス」から前のエレメントを位置づける GO to Search.探索へ行け Checkチエツク CHECK (Old Anchor
Current Anchor).チエツク(旧アンカ
ー、現在のアンカー) IF FAILED RESTART fromRetry.もし
失敗であれば、再試行から再開始 CHECK (Moving Element,Active
Element).チエツク(移動エレメント、
アクチブ・エレメント) IF FAILED RESTART from Retry.も
し失敗であれば、再試行から再開始 IF Listart RETURN.もしリスタートで
あれば、リターン CHECK (Pointto Element,Previous
Element).チエツク(ポイントツー・エ
レメント、前のエレメント) IF FAILED RESTART from Retry.も
し失敗であれば、再試行から再開始 OTHERWISE RETURN.そうでなけれ
ば、リターン Foundフアウンド CONDITION Initial is
Next of Moving Element is equal to
Bind of New Anchor.開始であれば、移
動エレメントのネキストは新アンカーのバ
インドに等しい CONDITION Pseudobound is Next of
Moving Element is not equal to
POINTER Following擬似バウンドであ
れば、移動エレメントのネキストはポイン
タ「フオロイング」に等しくない or Bind of New Anchor is equal to
POINTER Previous.又は新アンカーのバ
インドはポインタ「プリビアス」に等しい IF Initial GO to Juston.もし開始であれ
ばジヤストオンへ行け IF not Pseudobound GO to Insert.もし
擬似バウンドでなければ、挿入へ行け OTHERWISE GO to Unbind.そうでな
ければ、アンバインドへ行け Justtonジヤストオン COPY Moving Element
to New Element.移動エレメントを新エ
レメントへ複写 COPY POINTER Following to Next
of New Element.ポインタ「フオロイン
グ」を新エレメントのネキストへ複写 INCREMENT Emod of New Element.
新エレメントのエモードを増加 SWAP (Moving Element New
Element,Active Element).スワツプ
(移動エレメント、新エレメント、アクチ
ブ・エレメント) IF FAILED GO to Retry.もし失敗であ
れば、再試行へ行け Insert挿入 IF Listart GO to Sethead.もしリ
スタートであれば、セツトヘツドへ行け COPY Pointto Element to New
Element.ポイントツー・エレメントを新
エレメントへ複写 COPY Bind of New Anchor to Next
of New Element.新アンカーのバインド
を新エレメントのネキストへ複写 INCREMENT Emod of New Element.
新エレメントのエモードを増加 SWAP(Pointto Element,New
Element,Previous Element).スワツプ
(ポイントツー・エレメント、新エレメン
ト、前のエレメント) IF FAILED GO to Retry.もし失敗であ
れば、再試行へ行け Unbindアンバインド COPY Head of New
Anchor to Bind of New Anchor.新アン
カーのヘツドを新アンカーのバインドへ複
写 GO to Unbound.アンバウンドへ行け Setheadセツトヘツド COPY Bind of New
Anchor to Head of New Anchor.新ア
ンカーのバインドを新アンカーのヘツドへ
複写 GO to Unbound.アンバウンドへ行け Normal正常 CONDITION Empty is Head
of New Anchor is NULL.空であれば、
新アンカーのヘツドはナル CONDITION Taking is Next of Own
Element is equal to POINTER
Element.テーキングであれば、自己エレ
メントのネキストはポインタ「エレメン
ト」に等しい IF Empty GO to Void.もし空であれば、
ボイドへ行け IF not Taking GO to Put.テーキングで
なければ、プツトへ行け LOCATE Desired Element from Head
of Old Anchor.旧アンカーのヘツドから
所望エレメントを位置づける GO to Take.テイクへ行け Voidボイド IF Taking GO to Putcomp.もし
テーキングであれば、補数プツトへ行け Putプツト COPY Head of Old Anchor to
Next of Own Element.旧アンカーのヘ
ツドを自己エレメントのネキストへ複写 COPY POINTER Element to Head of
New Anchor.ポインタ「エレメント」を
新アンカーのヘツドへ複写 GO to Swap.スワツプへ行け Unboundアンバウンド IF Taking GO to
Putcomp.もしテーキングであれば、補数
プツトへ行け COPY Head of New Anchor to Next
of Own Element.新アンカーのヘツドを
自己エレメントのネキストへ複写 LOCATE Desired Element from Next
of Own Element.自己エレメントのネキ
ストから所望エレメントを位置づける COPY Next of Desired Element to
Bind of New Anchor.所望エレメントの
ネキストを新アンカーのバインドへ複写 Takeテイク COPY Next of Desired
Element to Head of New Anchor.所望
エレメントのネキストを新アンカーのヘツ
ドへ複写 IF not Empty INCREMENT Amod of
New Anchor.空でなければ、新アンカー
のアモードを増加 GO to Swap.スワツプへ行け Putcomp補数プツト COPY POINTER
Element to Bind of New Anchor.ポイ
ンタ「エレメント」を新アンカーのバイン
ドへ複写 Swapスワツプ SWAP(Old Anchor,New
Anchor,Current Anchor).スワツプ
(旧アンカー、新アンカー、現在のアンカ
ー) IF FAILED GO to Retry.もし失敗であ
れば、再試行へ行け Exit出口 OUTPUT IS Head of New
Anchor Bind of New Anchor、出力は
新アンカーのヘツド、新アンカーのバイン
ド、旧アンカーのバインド、ポインタ「エ
レメント」、 Bind of Old Anchor、POINTER
Element、旧アンカーのバインド、ポイン
タ「エレメント」、 Next of Element,Head of Old
Anchor.自己エレメントのネキスト、旧ア
ンカーのヘツド CONDITION Fail is Bound.失敗であれ
ば、バウンド CONDITION Schedule is bind of Old
Anchor is not NULL and not Bound.
スケジユールであれば、旧アンカーのバイ
ンドはナルでなくかつバウンドでない CONDITION Taken is Head of New
Anchor is not equal to POINTER
Element.テイクンであれば、新アンカー
のヘツドはポインタ「エレメント」に等し
くない and not Boundかつバウンドでない and not Schedule.かつスケジユールでな
い WHEN Taken テイクンのとき LOCATE Desired Element from Head
of Old Anchor.旧アンカーのヘツドから
所望エレメントを位置づける WHEN Scheduleスケジユールのとき
LOCATE Desired Element from Next
of Own Element.自己エレメントのネキ
ストから所望エレメントを位置づける RETURN.リターン 付録5 一般的アルゴリズム 付録5は本発明の部分的実施例を様式的に定義
するものであつて、これを変更したものは他のリ
スト処理アルゴリズムとなる。 General一般 (Preface) (まえがき) SET SWITCH Ownswitch to OFF. スイツチ「自己スイツチ」をオフへセツト CONDITION Initiated is SWITCH
Ownswitch is ON.開始されていれば、ス
イツチ「自己スイツチ」はオン Retry再試行 COPY Current Anchor to Old
Anchor New Anchor.現在のアンカーを
旧アンカー、新アンカーへ複写 Own自己 (Test New Anchor) (新アンカーのテスト) IF Initiated and not Activeもし開始さ
れていてアクチブでなければ GO to Exit.出口へ行け IF not Bound もしバウンドでなければ GO to Unbound.アンバウンドへ行け Clearクリア (Identify and Verify next
Transaction) (次のトランザクシヨンの識別及び検査) IF Pseudoboundもし擬似バウンドであれ
ば GO to Own.自己へ行け (Perform next Transaction) (次のトランザクシヨンの実行) IF FAILED GO to Retryもし失敗であ
れば、再試行へ行け OTHERWISE GO to Clear.そうでなけ
れば、クリアへ行け Unboundアンバウンド IF Bindableもしバイン
ド可能であれば GO to Init.開始へ行け (Perform Own Operation) (自己オペレーシヨンを実行) IF FAILED GO to Retry.もし失敗であ
れば、再試行へ行け OTHERWISE GO to Exita.そうでなけ
れば、出口aへ行け Init開始 (Initiate Own Operation) (自己オペレーシヨンの開始) IF FAILED GO to Retry.もし失敗であ
れば、再試行へ行け IF Nonproductive GO to Exitb.もし非
生産的であれば、出口bへ行け SET SWITCH Ownswitch to ON.スイ
ツチ「自己スイツテ」をオンへセツト GO to Clear.クリアへ行け Exit出口 Exita.Exitb.(Exits)出口a、出口b
【図面の簡単な説明】
第1図は他の図面に対してキーとなるものであ
り、第2図及び第3図は先入れ先出し待ち行列の
ために可能なフオーマツトを示し、第4図は現在
使用されている後入れ先出し待ち行列のためのフ
オーマツトを示し、第5図は本発明の実施例にお
ける先入れ先出し待ち行列のためのフオーマツト
を示し、第6図、第7図、第8図は本発明の他の
実施例における後入れ先出し兼優先順位待ち行列
のためのフオーマツトを示す。

Claims (1)

  1. 【特許請求の範囲】 1 複数のプロセツサが共通にアクセスできる記
    憶装置にリストが共有資源として記憶されてお
    り、選択されたプロセスが前記リストに対するオ
    ペレーシヨンを実行中に別のプロセスが割りこむ
    ことのできるデータ処理システムにおいて、 オペレーシヨン実行中の前記リストの状態を示
    す情報を前記記憶装置に記憶し、 前記リストをアクセスするプロセスは、前記情
    報から、前のオペレーシヨンが完了して前記リス
    トが正常な形態に戻つているかどうかを調べ、も
    し戻つていれば自己のオペレーシヨンを実行し、
    戻つていなければ前記状態に応じて前記リストを
    処理して正常な形態に戻すことにより前記前のオ
    ペレーシヨンを完了させることを特徴とする共有
    資源の制御方法。
JP57001083A 1981-03-16 1982-01-08 Data processing system Granted JPS57153344A (en)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
EP81301081A EP0063186B1 (en) 1981-03-16 1981-03-16 Improvements to digital data processing apparatus

Publications (2)

Publication Number Publication Date
JPS57153344A JPS57153344A (en) 1982-09-21
JPH0157373B2 true JPH0157373B2 (ja) 1989-12-05

Family

ID=8188238

Family Applications (1)

Application Number Title Priority Date Filing Date
JP57001083A Granted JPS57153344A (en) 1981-03-16 1982-01-08 Data processing system

Country Status (4)

Country Link
US (1) US4584644A (ja)
EP (1) EP0063186B1 (ja)
JP (1) JPS57153344A (ja)
DE (1) DE3173549D1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04130929A (ja) * 1990-09-21 1992-05-01 Nec Corp キュー管理方式

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6140643A (ja) * 1984-07-31 1986-02-26 Hitachi Ltd システムの資源割当て制御方式
JPH0792782B2 (ja) * 1985-09-30 1995-10-09 富士通株式会社 処理実行システム
US4750116A (en) * 1985-10-11 1988-06-07 International Business Machines Corporation Hardware resource management
US4847754A (en) * 1985-10-15 1989-07-11 International Business Machines Corporation Extended atomic operations
US4947315A (en) * 1986-12-03 1990-08-07 Finnigan Corporation System for controlling instrument using a levels data structure and concurrently running compiler task and operator task
US5369778A (en) * 1987-08-21 1994-11-29 Wang Laboratories, Inc. Data processor that customizes program behavior by using a resource retrieval capability
NZ226733A (en) * 1987-12-21 1990-05-28 Honeywell Bull Coupling incompatible cpu to data processing system
US5274809A (en) * 1988-05-26 1993-12-28 Hitachi, Ltd. Task execution control method for a multiprocessor system with enhanced post/wait procedure
JP2650965B2 (ja) * 1988-05-27 1997-09-10 株式会社日立製作所 計算機システムおよびそのタスクスケジュール方法
EP0381655A3 (en) * 1989-01-31 1992-12-02 International Business Machines Corporation Method for synchronizing the dispatching of tasks among multitasking operating systems
DE68920740D1 (de) * 1989-09-20 1995-03-02 Ibm Vorrichtung zur Nachrichtenwarteschlangenbetriebssteuerung in einem Speicher.
US5247658A (en) * 1989-10-31 1993-09-21 Microsoft Corporation Method and system for traversing linked list record based upon write-once predetermined bit value of secondary pointers
US5319774A (en) * 1990-05-16 1994-06-07 International Business Machines Corporation Recovery facility for incomplete sync points for distributed application
US5276876A (en) * 1990-05-16 1994-01-04 International Business Machines Corporation Registration of resources for commit procedures
JP3293839B2 (ja) * 1990-05-16 2002-06-17 インターナショナル・ビジネス・マシーンズ・コーポレーション 作業ユニットに合わせてコミット範囲を調整するコンピュータ・システム
US5165031A (en) * 1990-05-16 1992-11-17 International Business Machines Corporation Coordinated handling of error codes and information describing errors in a commit procedure
US5319773A (en) * 1990-05-16 1994-06-07 International Business Machines Corporation Asynchronous resynchronization of a commit procedure
US5261089A (en) * 1990-05-16 1993-11-09 International Business Machines Corporation Optimization of commit procedures by utilizing a two-phase commit procedure only when necessary
JP2691081B2 (ja) * 1990-05-16 1997-12-17 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータ・ネットワーク
US5327532A (en) * 1990-05-16 1994-07-05 International Business Machines Corporation Coordinated sync point management of protected resources
US5551041A (en) * 1990-06-13 1996-08-27 Hewlett-Packard Company Wait for service request in an iconic programming system
US5220653A (en) * 1990-10-26 1993-06-15 International Business Machines Corporation Scheduling input/output operations in multitasking systems
US6256642B1 (en) 1992-01-29 2001-07-03 Microsoft Corporation Method and system for file system management using a flash-erasable, programmable, read-only memory
US5398330A (en) * 1992-03-05 1995-03-14 Seiko Epson Corporation Register file backup queue
US5274823A (en) * 1992-03-31 1993-12-28 International Business Machines Corporation Interrupt handling serialization for process level programming
US5515538A (en) * 1992-05-29 1996-05-07 Sun Microsystems, Inc. Apparatus and method for interrupt handling in a multi-threaded operating system kernel
US5341502A (en) * 1992-12-14 1994-08-23 Motorola, Inc. Device for assigning a shared resource in a data processing system
US5535365A (en) * 1993-10-22 1996-07-09 Cray Research, Inc. Method and apparatus for locking shared memory locations in multiprocessing systems
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
US8694999B2 (en) * 2006-12-07 2014-04-08 Wind River Systems, Inc. Cooperative scheduling of multiple partitions in a single time window
JP2009020508A (ja) * 2007-06-15 2009-01-29 Asahi Kasei Chemicals Corp 液状版感光性樹脂凸版の樹脂回収装置
US8874457B2 (en) * 2010-11-17 2014-10-28 International Business Machines Corporation Concurrent scheduling of plan operations in a virtualized computing environment
US11288095B2 (en) * 2019-09-30 2022-03-29 Advanced Micro Devices, Inc. Enhanced atomics for workgroup synchronization

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5168748A (ja) * 1974-12-12 1976-06-14 Yokogawa Electric Works Ltd

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4183083A (en) * 1972-04-14 1980-01-08 Duquesne Systems, Inc. Method of operating a multiprogrammed computing system
US4104718A (en) * 1974-12-16 1978-08-01 Compagnie Honeywell Bull (Societe Anonyme) System for protecting shared files in a multiprogrammed computer
US4318174A (en) * 1975-12-04 1982-03-02 Tokyo Shibaura Electric Co., Ltd. Multi-processor system employing job-swapping between different priority processors
US4224664A (en) * 1976-05-07 1980-09-23 Honeywell Information Systems Inc. Apparatus for detecting when the activity of one process in relation to a common piece of information interferes with any other process in a multiprogramming/multiprocessing computer system
US4128880A (en) * 1976-06-30 1978-12-05 Cray Research, Inc. Computer vector register processing
US4481583A (en) * 1981-10-30 1984-11-06 At&T Bell Laboratories Method for distributing resources in a time-shared system

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5168748A (ja) * 1974-12-12 1976-06-14 Yokogawa Electric Works Ltd

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04130929A (ja) * 1990-09-21 1992-05-01 Nec Corp キュー管理方式

Also Published As

Publication number Publication date
EP0063186A1 (en) 1982-10-27
EP0063186B1 (en) 1986-01-22
DE3173549D1 (en) 1986-03-06
JPS57153344A (en) 1982-09-21
US4584644A (en) 1986-04-22

Similar Documents

Publication Publication Date Title
JPH0157373B2 (ja)
US5895494A (en) 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
US7653791B2 (en) Realtime-safe read copy update with per-processor read/write locks
US8661206B2 (en) Hybrid hardware and software implementation of transactional memory access
EP0145889B1 (en) Non-spinning task locking using compare and swap
US20020138483A1 (en) Selective pessimistic locking for a concurrently updateable database
JP2500101B2 (ja) 共用変数の値を更新する方法
US6237019B1 (en) Method and apparatus for performing a semaphore operation
US7734879B2 (en) Efficiently boosting priority of read-copy update readers in a real-time data processing system
US8028132B2 (en) Collision handling apparatus and method
JPH0465414B2 (ja)
JPH0324696B2 (ja)
JPH05197604A (ja) マルチプロセッサ・コンピュータ及びその動作方法
JPS62262142A (ja) 複数実行ユニツト・ユニプロセツサ・システム
JPH0713813B2 (ja) データアクセス方法及びデータ処理システム
JPH0296849A (ja) Tpキューイングシステムにおける正確に1回のセマンティクス
JPH1115793A (ja) 資源の保全性を保護する方法
US6349322B1 (en) Fast synchronization for programs written in the JAVA programming language
US5386560A (en) Execution of page data transfer by PT processors and issuing of split start and test instructions by CPUs coordinated by queued tokens
US20090064141A1 (en) Efficient utilization of transactions in computing tasks
JPH0588954A (ja) データベースの更新方法
US7447875B1 (en) Method and system for management of global queues utilizing a locked state
Capdevielle et al. Solo-fast universal constructions for deterministic abortable objects
KR960014825B1 (ko) 정보처리시스템
CN118260051A (zh) 线程访问控制设备、方法与计算设备