(57)【特許請求の範囲】
【請求項１】
複数の要求装置による共用資源への非同期アクセスを防ぐコンピュータ・ベースの方法であり、その方法が
（１）前記共用資源の記憶場所に対応しているセマフォ・アドレスがあるか記憶比較装置をチェックするステップと、
（２）前記セマフォ・アドレスが前記記憶比較装置内にある場合には、セマフォ・フェイル信号を送るステップと、
（３）前記セマフォ・アドレスが前記記憶比較装置内に存在していない場合には、前記セマフォの内容をチェックするステップから成り、その結果、
（ａ）前記セマフォがロックされている場合には、前記セマフォ・アドレスを前記記憶比較装置に格納し、さらに
（ｂ）前記セマフォがロックされていない場合には、前記セマフォをロックし、前記セマフォ・アドレスを前記記憶比較装置に格納して、さらに記憶場所にアクセスすることを特徴とする方法。
【請求項２】
ステップ（３）（ａ）がさらに前記セマフォが既にロックされているかどうか判断するために前記記憶比較装置を周期的にチェックするステップを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記共用資源を複数の要求装置により使用しているか否かを表示する共用信号を、テスト・アンド・セットのメモリ・トランザクション中に要求装置が前記記憶比較装置の記入項目をクリアするのを防ぐために使うことを特徴とする請求項ｌに記載の方法。
【請求項４】
テスト・アンド・セット処理中に個々の要求装置がそれぞれ自主的に前記記憶比較装置をクリアする、のを防ぐことを特徴とする請求項１に記載の方法。
【請求項５】
共用資源にアクセスするための方法であり、その方法が
（１）要求装置から、セマフォによって保護された前記共用資源にアクセスしようとするテスト・アンド・セット命令を発行するステップと、
（２）前記セマフォ・アドレスがあるかローカル記憶比較装置をチェックし、且つ当該アドレスが存在している場合には前記要求装置にセマフォ・フェイル信号を戻すステップと、さらに
（３）前記アドレスが存在していない場合には、
（ｉ）前記セマフォ・アドレスを前記ローカル記憶比較装置に入れ、
（ii）前記セマフォを前記共用資源からフェッチし、且つそれを前記要求装置に戻し、さらに
（iii ）前記セマフォをロックするステップ、
から成ることを特徴とする方法。
【請求項６】
テスト・アンド・セット命令に基づく書き込み以外の書き込みで前記共用資源への書き込みが試みられている場合、前記ローカル記憶比較装置がクリアされることを特徴とする請求項５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は多重処理を同期させるためにセマフォを活用するシステム並びに方法に関し、より具体的には、メモリ帯域幅の無駄を減少するセマフォ（シグナル）・バイパス・メカニズムを提供するシステム並びに方法に関する。
【背景技術】
【０００２】
メモリ共用型マルチプロセッサの主要要件の１つは、共通するタスクを行なっているプロセスを調整する能力である。代表的な例をあげると、プログラマは処理を同期させるためにセマフォを使う。このように、セマフォはデバイスや記憶場所など資源への非同期アクセスを防ぐために幅広く使われている。一般的なセマフォ・インプリメンテーションの一つがテスト・アンド・セットのメカニズムによるものである（例えば、非特許文献１、特許文献１参照）。そうしたメカニズムにおいて、セマフォは、メモリやその他のアドレス指定可能な資源の特定領域へのアクセスを制御するためにアドレス指定可能な記憶場所に格納されているフラグもしくはラベルである。
【０００３】
一つのプロセスが、あるセマフォに対応するメモリのある領域、例えばメモリ領域ｘｙｚ、にアクセスしようとすれば、他のプロセスがその領域にアクセスしないように、そのプロセスはその特定のメモリ領域に対応したセマフォに全て「１」を書き込む。別のプロセスがメモリ領域ｘｙｚにアクセスしようとすれば、先ずセマフォを調べ、セマフォが全て「１」になっていれば、そのプロセスはアクセスを拒否されたことを知る。
【非特許文献１】「Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈ」  （Ｈｅｎｎｅｓｓｙ  他著、Ｍｏｒｇａｎ  Ｋａｕｆｍａｎ出版、１９９０年）第８章
【特許文献１】米国特許第５，０５０，０７２号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来の技術では、２番目のプロセスはメモリ領域ｘｙｚが使用されていないかを確認するために、絶えずメモリに行き、セマフォをチェックする。このようにセマフォを終始チェックすることは「スピン・ロッキング」と呼ばれるが、これは莫大な量のメモリ帯域幅を無駄にすることになる。それはなぜならば、セマフォが長時間アクセス不能になる場合もあるかもしれないし、またセマフォのアクセスは各々が記憶処理を意味するからである。
【０００５】
共通バス競合を減ずるためのシステム（例えば、特許文献１参照）では、セマフォのテスト・ビット・オペレーション及びセット・オペレーションが各ＣＰＵのローカルバス上で行なえるようになる。セマフォのロックビットと同一のコピーが各ＣＰＵ上のＳＲＡＭ内にローカルに格納される。ＳＲＡＭの記憶空間には限りがあり、結果として、そのＳＲＡＭのメモリはセマフォでいっぱいになり、このメカニズムもスピン・ロッキングは避けられない。さらに、このシステムではセマフォをキャッシュする。セマフォのキャッシングは費用がかかる上、困難であり、システムの性能を低下させる。とりわけ、このシステムで使用されているＳＲＡＭは全ての他のＣＰＵのＳＲＡＭと同じセマフォ・ロックビットを格納するので、空間の無駄使いが多い。
【課題を解決するための手段】
【０００６】
前文に鑑み、本発明は、従来の「スピン・ロッキング」の問題によるメモリ帯域幅使用を低減しつつ（即ち、より大きな有効メモリ帯域幅を提供）、且つセマフォへのアクセスを可能にするテスト・アンド・セットのバイパス・メカニズム並びに方法を提供する。概して言えば、要求に応じてセマフォのアドレスを格納するためにコンテント・アドレサブル・メモリ（ＣＡＭ）のようなＣＰＵ内の記憶比較構造が使われる。
【発明の効果】
【０００７】
セマフォ・アドレスは記憶比較装置１２０に格納されているから、そのセマフォをキャシュする必要はない。むしろ、一番新しくフェイルしたセマフォ・アドレスだけが記憶比較構造に格納される。従って、そのＣＰＵや多重プロセッサ・システム内のその他のＣＰＵのプロセスは該当するセマフォ・アドレスがそれぞれの記憶比較構造に存在しているか否かをチェックするだけでよい。従って、セマフォにアクセスするための記憶処理を行なう必要がなく、それゆえ、有効メモリ帯域幅が相当に増える。
【０００８】
プロセス／プロセッサがセマフォを囲むメモリの小領域に書き込みを実行すると、記憶比較構造内の記入項目はクリアされる。ＣＰＵは自身も含めＣＰＵのいずれかが関連するセマフォに書き込みをしているかを確かめるために共用メモリバスをチェックする（スヌープする）。ＣＰＵのいずれかが記憶比較装置の記入項目に適合するセマフォに書き込めば、その記憶比較装置の記入項目はクリアされる。
【０００９】
例えば、ロックされた資源のオーナ（即ち、メモリ領域もしくは周辺装置）がメモリ内のセマフォをクリアすると、記憶比較構造内のセマフォ・アドレスもクリアされる。それにより、その資源への他のプロセッサ／プロセスのアクセスが可能になる。
【発明を実施するための最良の形態】
【００１０】
図１において、本発明のテスト・アンド・セットのバイパス回路１００には基本メモリ要求装置１１０（キャッシュなど）、記憶比較装置１２０、さらに制御ブロック１３０が組み込まれている。バス１０５はテスト・アンド・セットのバイパス回路１００を記憶装置に配線接続している。バス１０５は、例えば、別のＣＰＵ上の他のテスト・アンド・セットのバイパス・データパスとも接続されていることもある。
【００１１】
記憶比較装置１２０は代表的なコンテント・アドレサブル・メモリ（ＣＡＭ）である。有効ビットは記憶比較装置１２０内の各々の記憶場所と対応付けられている。これは、（例えば、パワーアップ中に）記憶比較装置１２０にランダムに現われるかもしれないセマフォ・アドレスが既にロックされているセマフォ・アドレスと誤解されることにならないように保証する。従って、有効ビットがセットされれば、その有効ビットに対応しているセマフォ・アドレスはロックされていることになる。記憶比較装置１２０内の記入項目数は本発明を活用するシステムにおける特定のアーキテクチャ上の制約によって決定する。
【００１２】
後述するように、テスト・アンド・セットのバイパス回路１００はセマフォでのスピン・ロッキングのために浪費されてしまうメモリ帯域幅の量を低減する。図２において、セマフォ・メカニズムによって保護された記憶場所にアクセスする本発明による方法を記載する。ブロック２１０に示すように、ＣＰＵ（要求装置）、とりわけプロセッサ内のプロセスは、テスト・アンド・セット命令（即ち、セマフォへのアクセス要求に対応する事前決定の命令）を発することにより、セマフォが対応している資源へのアクセスを先ず要求する。ブロック２１２に示すように、初めに、当該セマフォが既にロックされているかどうかを確認するために記憶比較装置１２０がチェックされる。記憶比較装置１２０にそのセマフォが存在していなければ、ブロック２２０が記憶比較装置１２０にそのセマフォのアドレスを格納する。次に、ブロック２４５はセマフォをチェックし、別のプロセス／プロセッサにより既にロックされているかどうか確認するために記憶処理を実行する。
【００１３】
ブロック２４５並びに２６０に示すように、要求装置１１０が記憶場所へのアクセスを許可される（即ち、記憶比較装置１２０によって、その記憶場所に関わるセマフォがロックされていることが示されていない）と、当該要求装置はセマフォをロックし記憶比較装置１２０にそのセマフォ・アドレスを格納する。複数のテスト・アンド・セット命令が結果として記憶比較装置１２０に複数の記入項目を格納してしまうことがある。セマフォをチェックした後で、もしそのセマフォがロックされて（即ち、セマフォの全ビットが「１」であれば（＄ＦＦＦＦｓ））いれば、そのとき全ての「１」は要求装置に返送されアクセスが拒否されたことを示す。さらに、セマフォのアドレスは記憶比較装置１２０に格納される。
【００１４】
別のプロセス／プロセッサがセマフォへのアクセスを要求すると、ブロック２１２に示すように、そのプロセス／プロセッサはそれに対応している記憶比較装置１２０をチェックする。要求されているセマフォ・アドレスが記憶比較装置１２０に存在していれば、そのプロセス／プロセッサはそのセマフォをロックしたプロセス／プロセッサによってセマフォは未だ解放されていないことを知る。ブロック２５０に示すように、要求装置１１０は全て「１」を受信（即ち、セマフォがフェイルしたことを意味する）し、そのセマフォはメモリから要求されない。従って、メモリ帯域幅は不必要に無駄使いされない。その後、そのセマフォのロックが解除されたかどうかを確認するために、要求装置１１０は定期的にテスト・アンド・セット命令を繰り返して、記憶比較装置１２０をチェックする。
【００１５】
それに対し、セマフォ・アドレスが記憶比較装置１２０に存在していなければ、それはそのセマフォがまだ要求されたことがないか、既に解放されているか、あるいは別のセマフォ・アドレスで置き換えられているか、のいずれかということになる。従って、記憶処理が発生し、セマフォ・ロケーションへのアクセスが要求装置１１０によって試みられる。
【００１６】
具体的に、記憶比較装置１２０にそのセマフォ・アドレスを格納するための本発明によるシステム並びに方法について以下に記載する。再び図１において、記憶比較装置１２０は初め空の状態である。要求装置１１０がセマフォ要求（即ち、メモリの一部を要求）を出すと、制御ブロック１３０はそのセマフォ・アドレスが既に格納されているかどうかを確かめるために記憶比較装置１２０を調べる。もしそのセマフォ・アドレスがこの装置に格納されていれば、ＨＩＴ信号１２２が生成される。そのＨＩＴ信号１２２は制御ブロック１３０によって受信され、制御ブロック１３０はメモリ要求が制御ライン１３５によりメモリバス１０５上に送り出されるのを防ぐ。
【００１７】
制御ブロック１３０は制御信号１４０も送り出す。制御信号１４０はマルチプレクサ１５０に接続されている。制御信号１４０に従って、マルチプレクサ１５０はメモリバス１０５からのデータかもしくは全て「１」が書き込まれたデータのいずれかを選択する。もしＨＩＴ信号１２２が制御ブロック１３０によって生成されていれば、全て「１」が書き込まれたそのデータは要求装置に送り返される。全て「１」が書き込まれたそのデータは、その時点で別のプロセス／プロセッサが要求装置１１０によって要求された特定の記憶場所にアクセスしていることを示しており、従って、そのセマフォは既にロックされている。
【００１８】
ＨＩＴ信号１２２が記憶比較装置１２０によって生成されていなければ、制御ブロック１３０はそのセマフォがインスタント要求者によって以前に要求されていなかったことを知る。制御ブロック１３０は次に制御ライン１３７を使って記憶比較装置１２０にセマフォ・アドレスを書き込む。さらに、制御ブロック１３０は制御ライン１３５を使用可能にし、続いて制御ライン１３５が要求装置１１０からのメモリ要求をメモリバス１０５へ送り出すようにする。メモリ要求が完了したら、そのデータは、制御ライン１４０を介してマルチプレクサ１５０を適切に制御することによって、その要求装置に戻される。
【００１９】
特定の時間ならいつでもアクセス可能な異なる記憶場所の数が多いことと、メモリ・アクセス要求数も多いことから、記憶比較装置１２０は多数のセマフォ・アドレスでいっぱいになることがある。最終的に、記憶比較装置１２０はいっぱいになるだろう。記憶比較装置１２０に空の記入項目スペースがなくなれば、Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ（ＬＲＵ）など現在入手可能な置き換えのアルゴリズムの一つを使って、既に存在している記入項目が置き換えられる。その後、新規記入項目が古い記入項目の上に書き込まれる。従って、バイパス・メカニズム１００はその時点でのセマフォ要求によりスピン・ロックを防ぐ。
【００２０】
次に、記憶比較装置１２０の記入項目をクリアする本発明による方法とシステムについて説明する。セマフォが解放されれば、記憶比較装置１２０はクリアされなければならない。セマフォを囲む、検出可能な最小メモリブロックのいずれかの部分への書き込みがメモリバス１０５上のプロセッサのどれかにより実行されると、記憶比較装置１２０はクリアされる。こうすると、記憶比較装置１２０は既にクリアされているセマフォ・アドレスを保持しない。さらに、いずれかのプロセッサがセマフォに書き込みをすると、記憶比較装置１２０へのセマフォの記入項目はクリアされる。
【００２１】
図１に加え図３において、本発明ではメモリバス１０５を監視し（スヌープする）、記憶処理が発生しているかどうかを確認する。メモリ要求がＣＰＵなど何らかの装置によってメモリバス１０５上に送信されていれば、本発明によるスヌープ・メカニズムは相当するスヌープ（要求）・アドレスをアドレス・ジェネレータ１６０中に生成するために検出されたアドレス信号を使用する。
【００２２】
ブロック３１５に示すように、そのメモリ要求が書き込み要求であるか否かを確認する。ブロック３１７に示すように、それが書き込み要求であれば、次にテスト・アンド・セット命令に基づく書き込みなのかどうかを確かめるためにその要求がチェックされる。それが、テスト・アンド・セット命令に基づく書き込みであれば、記憶比較装置１２０の記入項目はクリアされない。そうでなければ、ブロック３２０に示すように、生成されたスヌープ・メモリ・アドレスは記憶比較装置１２０の記入項目と比較される。セマフォ・ロケーションへの書き込みはそのセマフォが解放されていることを意味するから、ＨＩＴがあればその記入項目はブロック３２５に示すようにクリアされる。
【００２３】
スヌープ・アドレス・ジェネレータ１６０は典型的にメモリ・アドレス・バス１０５上に現われるメモリ行及び列アドレスの１１ビットからキャッシュ・サブブロック・アドレス（高位ビット）を生成する。スヌープ・アドレス・ジェネレータ１６０はＲＡＳ（Ｒａｗ  Ａｄｄｒｅｓｓ  Ｓｅｌｅｃｔｏｒ）、ＣＡＳ（Ｃｏｌｕｍｎ  Ａｄｄｒｅｓｓ  Ｓｅｌｅｃｔｏｒ）及びＷＥ（Ｗｒｉｔｅ  Ｅｎａｂｌｅ）の制御信号を有する。アドレス分析はさらに他の制御信号やタイミング情報から得ることができる。
【００２４】
本発明では、他の要求装置からの（書き込み要求以外の）セマフォ要求に対してメモリバス１０５をスヌープすることはない。言い換えれば、別々のプロセスが情報を共用することはないということである。むしろ、個々の要求装置１１０はそれ自身の記憶比較装置１２０の内容のみに関わりをもつ。従って、要求装置１１０が既に他の要求装置によってロックされているセマフォ・ロケーションへのアクセスを求めると、その記憶比較装置１２０にセマフォ・アドレスを格納する手続きを進めるだけである。これは無駄な記憶処理のように見えるかもしれないが、このプロセスによって記憶比較装置１２０内のメモリ空間を大きく節約することになる。システム内の全ての要求装置がロックした全てのセマフォ・アドレスがローカル・メモリに格納されたら、相当に大規模な記憶装置（例えば、実施例にある大規模のＣＡＭ１２０）が必要になる。従って、相当な量のメモリ空間を節約するために、本発明では、本発明によるセマフォ・バイパス・メカニズム１００の使用に先立って、記憶処理を１回行うだけでよい。
【００２５】
図３のブロック３１７との関連において先に簡単に説明したように、メモリ内のセマフォにテスト・アンド・セットのオペレーションを行なうと、本質的に「読み込みー修正変更ー書き込み」が起こる。従って、「読み込みー修正変更ー書き込み」の書き込みの最中にいずれの記憶比較装置１２０においても該当する記入項目がクリアされることのないよう注意しなければならない。記憶比較装置１２０がクリアされるのは「真の」書き込み（即ち、格納）の時だけである。従って、記憶比較装置の記入項目をクリアすることのないよう、本発明の実施例ではスヌーピングは使用不能になっている。図１における本発明の実施例においては、共用（ＳＨＡＲＥ）信号１９０は、システム１００が現在共用メモリを使用しているか否かを表示している。共用信号１９０はスヌーピング・オペレーションを可能にする（即ち、キャッシュ可干渉性）。共用信号１９０がオフになっていると、前記の比較機能は全てのプロセッサにおいて使用不能になる。言い換えれば、共用信号１９０はテスト・アンド・セット命令の書き込みの期間中はスヌープしないようにスヌープ・アドレス・ジェネレータ１６０に指示する。
【００２６】
本発明は従来のテスト・アンド・セットのメカニズムにその使用が限定されるものではない。計数セマフォにも使用することができる。代表的な例をあげると、計数セマフォはセマフォに特定の値を格納するためのメカニズムを備えることにより実現される。セマフォに異なる値を保存するということはその記憶場所のロック解除をするということである。本発明によるシステム並びに方法は、計数セマフォを活用するシステム並びに方法に新たな制限を課することなく、使用することができる。
【００２７】
メモリバス１０５はテスト・アンド・セット命令が実行されたことを示すために、全てのスヌープ・アドレス・ジェネレータ１６０に符号化されたセマフォ・オペレーション信号を送る。
【００２８】
セマフォの大きさはメモリバス上を送信されるかもしくはメモリバス制御から導出される最小の別個のアドレスでなければならない。本発明の好適な実施例におけるセマフォの大きさは１メモリワード以下である。言い換えれば、バス上を送信された最小の別個のメモリ・アドレスがワード境界上に存在していれば、セマフォの大きさがワード境界上に存在する。これが記憶比較装置１２０内の記入項目を不要にクリアすることがないように保証する。
【００２９】
例えば、要求装置が先ずメモリ・アドレス「＄００００ ０００１」をもつテスト・アンド・セット命令を発信し、さらに初めは記憶比較装置１２０に何も記入項目がなかったと仮定して、メモリ・アドレス「＄００００ ０００１」は記憶比較装置１２０に格納される。要求装置１００はメモリ・アドレス「＄００００ ０００２」をもつ別のテスト・アンド・セット命令を再び出すと、このアドレスは記憶比較装置１２０の記入項目と比較されて、ＨＩＴ信号１２２を発生しない。
【００３０】
しかしながら、要求装置１１０がメモリ・アドレス「＄００００ ０００１」をもつ第１番目のセマフォを解放しようと決定し、且つメモリバス１０５上のメモリ・アドレスの単位が１ワードの大きさであれば、そのメモリバス上に現われるアドレスは「＄００００ ００ｘｘ」である（その場合、ｘｘは無視する）。このメモリ・アドレスの比較が記憶比較装置１２０内の記入項目と比較されると、メモリ・アドレス「＄００００ ０００１」及び「＄００００ ０００２」は共にＨＩＴ信号１２２を発生してクリアされる。セマフォの大きさが１ワードであるかもしくは１ワード内に単一のセマフォだけが保持されている場合、こうした変則的なことは避けられる。
【００３１】
こうした変則的なことがあっても、機能性という点においては何ら影響はない。このことが具体的に意味するのは、「＄００００ ０００２」が不要にクリアされているから、次回プロセスがセマフォ「＄００００ ０００２」を要求する、そのセマフォに対して不要なメモリ要求が生成されるということである。
【００３２】
本発明について具体的に好適な実施例をあげて示し説明してきたが、本発明の精神並びに適用範囲から逸脱することなく、形式並びに詳細において様々な変更ができることは、当業者の当然とするところであろう。
【図面の簡単な説明】
【００３３】
【図１】本発明に基づく好適な実施例を含む可能なデータパス・インプリメンテーションの概略的なブロック図である。
【図２】セマフォによって保護された記憶場所にアクセスする本発明の方法を示すフローチャートである。
【図３】本発明による記憶比較装置からアドレスをクリアする本発明の方法を示すフローチャートである。
【符号の説明】
【００３４】
１００…バイパス回路、１０５…メモリバス、１２０…記憶比較装置、１３０…制御ブロック、１５０…マクチプレクサ、１６０…スヌープ・アドレス・ジェネレータ
【図１】
0003700787.tif 000002
【図２】
0003700787.tif 000003
【図３】
0003700787.tif 000004