(57)【特許請求の範囲】
【請求項１】
データ処理システムにおいて、プロセッサとメモリ・フロー制御（ＭＦＣ）ユニットとの間で命令およびデータを通信するための方法であって、
前記プロセッサと前記ＭＦＣユニットとの間にＭＦＣコマンド・パラメータ・データを転送するための１つ以上のＭＦＣコマンド・パラメータ・チャンネルが設けられており、前記ＭＦＣコマンド・パラメータ・チャンネルはＭＦＣコマンド操作符号チャンネルを含み、
前記ＭＦＣユニットにおいて、前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルを介してＭＦＣコマンド・パラメータ・データを受信するステップと、
前記１つ以上のチャンネルに関連した１つ以上のＭＦＣコマンド・パラメータ・レジスタに前記ＭＦＣコマンド・パラメータ・データを記憶するステップと、
前記ＭＦＣコマンド操作符号チャンネルへのチャンネル書き込み命令を受信するステップと、
前記ＭＦＣコマンド操作符号チャンネルへの前記チャンネル書き込み命令に応答して、前記１つ以上のＭＦＣコマンド・パラメータ・レジスタに保持されたＭＦＣコマンド・パラメータ・データをＭＦＣコマンド・キューへ送るステップと、
前記ＭＦＣコマンド・キュー内の１つ以上のコマンドを処理するステップとを備え、
前記ＭＦＣコマンド・パラメータ・データは、関連ＭＦＣコマンドによって実行されるべき動作を識別する、前記ＭＦＣコマンド操作符号チャンネル上で送信されたコマンド操作符号を含む、方法。
【請求項２】
前記ＭＦＣコマンド・パラメータ・データは、マルチプロセッサ・システム内のプロセッサから受信される、請求項１に記載の方法。
【請求項３】
前記プロセッサは、前記プロセッサとローカル記憶装置とを有する相乗作用処理ユニットの一部である、請求項２に記載の方法。
【請求項４】
前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルは、非ブロッキング・チャンネルであり、前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルは、チャンネル・カウントを有しない、請求項２に記載の方法。
【請求項５】
前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルは、ＭＦＣローカル記憶アドレス・チャンネルと、ＭＦＣ有効アドレスｈｉｇｈチャンネルと、ＭＦＣ有効アドレスｌｏｗまたはリスト・アドレス・チャンネルと、ＭＦＣ転送サイズまたはリスト・サイズ・チャンネルと、ＭＦＣコマンド・タグ識別チャンネルと、ＭＦＣコマンド操作符号チャンネルと、ＭＦＣクラスＩＤチャンネルとのうちの少なくとも１つを備える、請求項１に記載の方法。
【請求項６】
前記コマンド操作符号の有効性を非同期にチェックするステップと、
前記コマンド操作符号が無効である場合に、ＭＦＣコマンド・キューの処理を中断するステップと、
無効ＭＦＣコマンド割り込みを生成するステップと
をさらに備える、請求項１に記載の方法。
【請求項７】
前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルは、ＭＦＣクラスＩＤチャンネルを備え、前記ＭＦＣコマンド・パラメータ・データは、関連ＭＦＣコマンドのキャッシュ置換を制御するために置換管理テーブルと共に使用される、前記ＭＦＣクラスＩＤチャンネル上で受信された置換クラスＩＤを含む、請求項１に記載の方法。
【請求項８】
前記置換クラスＩＤは、制御プロセッサ動作のためのロード・記憶アドレスから生成される、請求項７に記載の方法。
【請求項９】
前記置換クラスＩＤに基づいて、前記置換管理テーブルのインデックスを生成するステップと、
前記インデックスによって識別された前記置換管理テーブルの入力に基づいて、置換ポリシーを制御するステップと
をさらに備える、請求項８に記載の方法。
【請求項１０】
前記ＭＦＣコマンド・パラメータ・データは、記憶に対するアクセスを識別するために使用される、前記ＭＦＣクラスＩＤチャンネル上で受信された転送クラスＩＤをさらに含む、請求項８に記載の方法。
【請求項１１】
前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルは、ＭＦＣコマンド・タグ識別チャンネルを備え、前記ＭＦＣコマンド・パラメータ・データは、ＭＦＣコマンドの群を識別する、前記ＭＦＣコマンド・タグ識別チャンネル上で受信されたコマンド・タグ識別子を含む、請求項１に記載の方法。
【請求項１２】
前記コマンド・タグ識別子の有効性を非同期にチェックするステップと、
前記コマンド・タグ識別子が０に設定されていない場合に、前記ＭＦＣコマンド・キューの処理を中断するステップと、
割り込みを生成するステップと
をさらに備える、請求項１１に記載の方法。
【請求項１３】
前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルは、ＭＦＣコマンド転送サイズまたはリスト・サイズ・チャンネルを備え、前記ＭＦＣコマンド・パラメータ・データは、関連ＭＦＣコマンドの直接メモリ・アドレス（ＤＭＡ）転送のサイズを識別する、前記ＭＦＣコマンド転送サイズまたはリスト・サイズ・チャンネル上で受信された転送サイズまたはリスト・サイズ・パラメータを含む、請求項１に記載の方法。
【請求項１４】
前記転送サイズまたはリスト・サイズ・パラメータの有効性を非同期に検証するステップと、
前記転送サイズまたはリスト・サイズ・パラメータが無効である場合に、ＭＦＣコマンド・キューの処理を中断するステップと、
ＭＦＣ・ＤＭＡアラインメント割り込みを生成するステップと
をさらに備える、請求項１３に記載の方法。
【請求項１５】
前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルは、ＭＦＣローカル記憶アドレス・チャンネルを備え、前記ＭＦＣコマンド・パラメータ・データは、ＭＦＣ転送の送信元または送信先アドレスのいずれかを識別する、前記ＭＦＣローカル記憶アドレス・チャンネル上で受信された前記ＭＦＣコマンドに関連したＳＰＵローカル記憶アドレス・パラメータを含む、請求項１に記載の方法。
【請求項１６】
前記ＳＰＵローカル記憶アドレス・パラメータの有効性を非同期で検証するステップと、
前記ＳＰＵローカル記憶アドレスが整列していない場合に、ＭＦＣコマンド・キューの処理を中断するステップと、
ＭＦＣ・ＤＭＡアラインメント例外を生成するステップと
をさらに備える、請求項１５に記載の方法。
【請求項１７】
前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルは、ＭＦＣ有効アドレスｌｏｗまたはリスト・アドレス・チャンネルを備え、前記ＭＦＣコマンド・パラメータ・データは、ＭＦＣ有効アドレスｌｏｗまたはリスト・アドレス・チャンネル上で受信された関連ＭＦＣコマンドについてのＭＦＣ有効アドレスｌｏｗまたはリスト・アドレスを含む、請求項１に記載の方法。
【請求項１８】
ＭＦＣ有効アドレスｌｏｗまたはリスト・アドレスの有効性を非同期に検証するステップと、
前記ＭＦＣ有効アドレスｌｏｗまたはリスト・アドレスが整列していない場合に、ＭＦＣコマンド・キューの処理を中断するステップと、
割り込みを生成するステップと
をさらに備える、請求項１７に記載の方法。
【請求項１９】
前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルは、ＭＦＣ有効アドレスｈｉｇｈチャンネルを備え、前記ＭＦＣコマンド・パラメータ・データは、ＭＦＣ有効アドレスｈｉｇｈチャンネル上で受信された関連ＭＦＣコマンドについてのＭＦＣ有効アドレスｈｉｇｈアドレスを含む、請求項１に記載の方法。
【請求項２０】
ＭＦＣ有効ｈｉｇｈアドレスの有効性を非同期に検証するステップと、
前記ＭＦＣ有効ｈｉｇｈアドレスが整列していない場合に、ＭＦＣコマンド・キューの処理を中断するステップと、
割り込みを生成するステップと
をさらに備える、請求項１９に記載の方法。
【請求項２１】
プロセッサ、メモリ・フロー制御（ＭＦＣ）ユニット、および前記プロセッサと前記ＭＦＣユニットとの間でＭＦＣコマンド・パラメータ・データを転送するための１つ以上のＭＦＣコマンド・パラメータ・チャンネルを含むコンピューティング装置であって、前記ＭＦＣコマンド・パラメータ・チャンネルがＭＦＣコマンド操作符号チャンネルを含むコンピューティング装置に、
前記ＭＦＣユニットにおいて、前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルを介してＭＦＣコマンド・パラメータ・データを受信する手順と、
前記１つ以上のチャンネルに関連した１つ以上のＭＦＣコマンド・パラメータ・レジスタに前記ＭＦＣコマンド・パラメータ・データを記憶する手順と、
前記ＭＦＣコマンド操作符号チャンネルへのチャンネル書き込み命令を受信する手順と、
前記ＭＦＣコマンド操作符号チャンネルへの前記チャンネル書き込み命令に応答して、前記１つ以上のＭＦＣコマンド・パラメータ・レジスタに保持されたＭＦＣコマンド・パラメータ・データをＭＦＣコマンド・キューへ送る手順と、
前記ＭＦＣコマンド・キュー内の１つ以上のコマンドを処理する手順と
を実行させるためのプログラム。
【請求項２２】
プロセッサ、メモリ・フロー制御（ＭＦＣ）ユニット、および前記プロセッサと前記ＭＦＣユニットとの間でＭＦＣコマンド・パラメータ・データを転送するための１つ以上のＭＦＣコマンド・パラメータ・チャンネルを含み、前記ＭＦＣコマンド・パラメータ・チャンネルがＭＦＣコマンド操作符号チャンネルを含む装置であって、
前記ＭＦＣユニットにおいて、前記１つ以上のＭＦＣコマンド・パラメータ・チャンネルを介してＭＦＣコマンド・パラメータ・データを受信する手段と、
前記１つ以上のチャンネルに関連した１つ以上のＭＦＣコマンド・パラメータ・レジスタに前記ＭＦＣコマンド・パラメータ・データを記憶する手段と、
前記ＭＦＣコマンド操作符号チャンネルへのチャンネル書き込み命令を受信する手段と、
前記ＭＦＣコマンド操作符号チャンネルへの前記チャンネル書き込み命令に応答して、前記１つ以上のＭＦＣコマンド・パラメータ・レジスタに保持されたＭＦＣコマンド・パラメータ・データをＭＦＣコマンド・キューへ送る手段と、
前記ＭＦＣコマンド・キュー内の１つ以上のコマンドを処理する手段と
を備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、改良されたデータ処理システムおよび方法に関する。より特定的には、本発明は、プロセッサとメモリ・フロー・コントローラとの間でコマンド・パラメータを通信するためのシステムおよび方法に向けられている。
【背景技術】
【０００２】
通常、従来技術においては、ＣＰＵまたは他の処理ユニット（ＰＵ）がプログラム外部の何らかのイベントを待っている場合には、オペレーティング・システムまたはアクティブなプログラムは、プログラムに関連してＰＵによって使用されているイベント・レジスタを読み続けるようなポーリング・ループを、待っているイベントが生じるまで実行することになる。プログラムが動作している間は、ＰＵはイベント・レジスタをポーリングし続け、有用なワークを行っていない。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
典型的な現在のプロセッサは、この通信のために、仮想メモリと、外部装置のメモリ・マッピングとを使用することが多い。その一方で、プロセッサによっては、特にマルチプロセッサ環境においては、ローカル・メモリにしかアクセスできず、仮想メモリにアクセスできないものもある。ローカル・メモリには限界があり、典型的なマルチプロセッサ構成においては、このローカル・メモリの外部のメモリは、ロード・記憶動作によってアクセスすることができない。よって、外部装置からの応答を待っている間は、他のＰＵ機能についてのローカル・メモリの使用は制限されている。ＰＵがいくつかの装置からの通信応答を同時に待っている場合には、他の機能についての使用可能なメモリは、さらに制限されている。
【０００４】
また、メモリは、入力レジスタまたは出力レジスタ内に有効データがあるかどうかを常に把握するために使用されてもよい。有効データとは、受信装置によって使用されるレジスタ内にあるが受信装置によってまだアクセスされていないデータのことである。よって、上記から、最先端のコンピューティング装置におけるメモリ・リソースの流出の原因となるものが数多くあることは明らかである。
【０００５】
上記に鑑み、プロセッサと、プロセッサの外部にある他の装置、例えば、他のプロセッサ、入出力（Ｉ／Ｏ）装置などとの間の通信のためのシステムおよび方法であって、そのような通信がプロセッサのローカルまたは仮想メモリに負担とならないものがあれば有益だろう。さらに、データまたはイベントを待っている間はプロセッサを低電力状態にすることができるシステムおよび方法があれば有益だろう。
【課題を解決するための手段】
【０００６】
本発明は、プロセッサとメモリ・フロー・コントローラとの間でコマンド・パラメータを通信するためのシステムおよび方法を提供する。本システムおよび方法は、チャンネル・インターフェースを、プロセッサとメモリ・フロー・コントローラとの間の通信のための主要な機構として活用する。チャンネル・インターフェースは、例えば、プロセッサ・ファシリティ、メモリ・フロー制御ファシリティ、マシン・ステータス・レジスタ、および外部プロセッサ割り込みファシリティと通信するためのチャンネルを提供する。これらのチャンネルは、プロセッサのローカル記憶に対する負担を軽減すると共に、バス・トラフィックを最小限にする役割を果たす。
【０００７】
これらのチャンネルは、ブロッキングまたは非ブロッキングとして指定されてもよい。ブロッキング・チャンネルによって、対応レジスタから読み出されるべきデータが使用可能でない場合、または対応レジスタに書き込む空間がない場合には、プロセッサは、低電力の「ストール」状態にされる。データが使用可能になるか、または空間が開放されると、プロセッサは、ブロッキング・チャンネル上での通信を介して自動的に呼び起こされる。したがって、本発明のチャンネルにより、プロセッサは、従来技術のシステムにおけるようなイベント・レジスタに対するポーリングまたはスピニングをし続けるのではなく、低電力状態のままでいることができる。
【０００８】
本発明のこれらおよび他の特徴および利点は、本発明の例示的な実施形態の以下の詳細な説明に記載されており、または、これを考慮すれば当業者に明らかになるだろう。
【発明を実施するための最良の形態】
【０００９】
図１は、本発明の局面が実施されるであろうデータ処理システムのブロック図の例である。図１に例示するデータ処理システムは、インターナショナル・ビジネス・マシン社から入手可能なＣＥＬＬブロードバンド・エンジン・プロセッサのような、異機種ブロードバンド・プロセッサ・アーキテクチャの実装の例である。ブロードバンド・プロセッサ・アーキテクチャ（ＢＰＡ）を好適な実施形態の説明に使用するが、本発明はこれに限定されないことは、以下の説明を読めば当業者にとって容易に明らかであろう。
【００１０】
図１に示すように、ＢＰＡ１００は、パワー・プロセッサ要素（ＰＰＥ）１１０と、複数の相乗作用プロセッサ要素（ＳＰＥ）１２０〜１３４との異機種の仕組みを含む。ＰＰＥ１１０は、プロセッサ（ＰＰＵ）１１６と、そのＬ１およびＬ２キャッシュ１１２および１１４とを有する。ＳＰＥ１２０〜１３４は、それぞれ、自身のプロセッサ・ユニット（ＳＰＵ）と、メモリ・フロー・コントローラ（ＭＦＣ）１５５〜１６２と、ローカルメモリまたは記憶（ＬＳ）１６３〜１７０と、バス・インターフェース・ユニット（ＢＩＵユニット）１８０〜１９４とを有し、ＢＩＵ１８０〜１９４は、例えば、直接メモリ・アクセス（ＤＭＡ）と、メモリ管理ユニット（ＭＭＵ）と、およびバス・インターフェース・ユニットとの組み合わせであってもよい。高帯域幅内部要素相互接続バス（ＥＩＢ）１９６と、バス・インターフェース・コントローラ（ＭＩＣ）１９８も提供されている。ブロードバンド・エンジン１００は、図１に示す各要素が１つのマイクロプロセッサ・チップに提供されてもよいようなシステム・オン・チップであってもよい。
【００１１】
ＢＰＡ１００は、図１に示す各要素が１つのマイクロプロセッサ・チップ上に提供されてもよいようなシステム・オン・チップであってもよい。さらに、ＢＰＡ１００は、各ＳＰＵがシステム内の他の各ＳＰＵとは異なる命令を受信してもよいような異機種処理環境である。さらに、ＳＰＵについての命令セットは、ＰＰＵについてのそれとは異なっている。例えば、ＰＰＵが縮小命令セットコンピュータ（ＲＩＳＣ）ベースの命令を実行し、ＳＰＵがベクター化された命令を実行してもよい。
【００１２】
ＳＰＥ１２０〜１３４は、互いに結合されており、またＥＩＢ１９６を介してＬ２キャッシュ１１４に結合されている。加えて、ＳＰＥ１２０〜１３４は、ＥＩＢを介してＭＩＣ１９８およびＢＩＣ１９７に結合されている。ＭＩＣ１９８は、共有メモリ１９９に対する通信インターフェースを提供する。ＢＩＣ１９７は、ＢＰＡ１００と、他の外部バスおよび装置との間の通信インターフェースを提供する。
【００１３】
ＰＰＥ１１０は、二重スレッドのＰＰＥ１１０である。この二重スレッドのＰＰＥ１１０と、８つのＳＰＥ１２０〜１３４との組み合わせによって、ＢＰＡ１００は、１０個の同時スレッドと、１２８以上の未処理のメモリ要求とを処理することができる。ＰＰＥ１１０は、計算作業負荷の大半を処理する他の８つのＳＰＥ１２０〜１３４に対するコントローラとしての役割を果たす。例えば、ＳＰＥ１２０〜１３４がベクトル化された浮動点コードの実行を行う間に、ＰＰＥ１１０を使用して従来のオペレーティングシステムを実行してもよい。
【００１４】
ＳＰＥ１２０〜１３４は、相乗作用処理ユニット（ＳＰＵ）１４０〜１５４と、メモリ・フロー制御ユニット１５５〜１６２と、ローカル・メモリまたは記憶１６３〜１７４と、インターフェースユニット１８０〜１９４とを備える。例示的な一実施形態において、ローカル・メモリまたは記憶１６３〜１７４は、ＰＰＥ１１０の管理下にあり、ソフトウェアから直接アドレスしてできる２５６ＫＢの命令およびデータ・メモリを備える。
【００１５】
ＰＰＥ１１０は、ＳＰＥ１２０〜１３４に小さなプログラムまたはスレッドをロードして、ＳＰＥを互いにつないで複雑な動作における各ステップを処理するようにしてもよい。例えば、ＢＰＡ１００を実装するセット・トップ・ボックスが、ＤＶＤ、映像および音声復号化、ならびに表示のためのプログラムをロードしてもよく、最終的に出力ディスプレイ上に至るまで、データがＳＰＥからＳＰＥへ渡されることになる。
【００１６】
メモリ・フロー制御ユニット（ＭＦＣ）１５５〜１６２は、ＳＰＵに対して、残りのシステムおよび他の要素へのインターフェースとしての役割を果たす。ＭＦＣ１５５〜１６２は、データ転送、保護、およびメイン記憶とローカル記憶１６３〜１７４との間の同期についての主要な機構を提供する。論理的には、プロセッサ内のＳＰＵ毎にＭＦＣがある。実装によっては、複数のＳＰＵ間で１つのＭＦＣのリソースを共有できる。そのような場合には、ＭＦＣについて規定されたすべてのファシリティおよびコマンドは、ＳＰＵ毎のソフトウェアに対して独立してみえなければならない。ＭＦＣを共有する効果は、実装に依存するファシリティおよびコマンドに限定される。
【００１７】
メモリ・フロー制御（ＭＦＣ）ユニット
図２は、本発明の例示的な一実施形態に係る典型的なメモリ・フロー制御（ＭＦＣ）ユニット２００のブロック図の例である。この例示的な実施形態において、ＭＦＣ２００は、ＳＰＵに対する２つのインターフェース２１０および２１２と、バス・インターフェース・ユニット（ＢＩＵ）２２０に対する２つのインターフェース２１４および２１６と、オプションのＳＬ１キャッシュ２３０に対する２つのインターフェース２２２および２２４とを有する。ＳＰＵインターフェース２１０および２１２は、ＳＰＵチャンネル・インターフェース２１０およびＳＰＵローカル記憶インターフェース２１２である。ＳＰＵチャンネル・インターフェース２１０によって、ＳＰＵは、ＭＦＣファシリティをアクセスすることと、ＭＦＣを発行することができる。ＳＰＵローカル記憶インターフェース２１２は、ＳＰＵ内のローカル記憶をアクセスするためにＭＦＣ２００によって使用される。ＢＩＵ２２０に対する一方のインターフェース２１４によって、ＭＦＣファシリティに対するメモリ・マップＩ／Ｏ（ＭＭＩＯ）アクセスが可能になる。このインターフェース２１４によって、他のプロセッサがＭＦＣコマンドを発行することができる。ＭＭＩＯを使用して発行されたコマンドを、ＭＦＣプロキシ・コマンドと称する。
【００１８】
ＳＬ１キャッシュに対するインターフェース２２２および２２４は、主にデータ転送のためのものである。アドレス変換テーブルに対するアクセスのためにＭＦＣ２００によって一方のインターフェース２２２が使用され、メイン記憶とローカル記憶との間のデータ転送のために、他のインターフェース２２４が使用される。
【００１９】
図２に示すように、典型的なＭＦＣ内のメイン・ユニットは、メモリ・マップ入力／出力（ＭＭＩＯ）インターフェース２４０と、ＭＦＣレジスタ２５０と、ＤＭＡコントローラ２６０とを含む。ＭＭＩＯインターフェース２４０は、ＳＰＵのＭＦＣファシリティをシステムの実アドレス空間にマッピングする。これにより、どのプロセッサまたはシステム内のどの装置からもＭＦＣファシリティにアクセスすることができる。加えて、ＭＭＩＯインターフェース２４０は、ＳＰＵのローカル記憶を実アドレス空間にマッピングするように構成されてもよい。これにより、どのプロセッサまたはシステム内のどの装置からもローカル記憶にアクセスすることができ、ローカル記憶からローカル記憶への転送と、Ｉ／Ｏ装置がＳＰＵのローカル記憶ドメインに直接アクセスすることが可能となる。
【００２０】
ＭＦＣレジスタ・ユニット２５０は、ＭＦＣファシリティの大半を含む。あるファシリティは、直接メモリ・アクセス・コントローラ（ＤＭＡＣ）２６０に含まれる。以下は、ＭＦＣ２００内のファシリティのリストである。ユーザ・モード環境ファシリティ、すなわち、非特権的アプリケーションからアクセスされてもよい環境ファシリティは、（１）メールボックス・ファシリティ、（２）ＳＰＵ信号通知ファシリティ、（３）プロキシ・タグ・グループ完了ファシリティ、（４）ＭＦＣマルチソース同期ファシリティ、（５）ＳＰＵ制御およびステータス・ファシリティ、および（６）ＳＰＵ分離ファシリティを含む。特権的モード環境ファシリティ、すなわち、オペレーティング・システムなどの特権的ソフトウェアからのみアクセスされてもよいファシリティは、（１）ＭＦＣステート・レジスタ１、（２）ＭＦＣ論理パーティションＩＤレジスタ、（３）ＭＦＣ記憶記述レジスタ、（４）ＭＦＣデータ・アドレス・レジスタ、（５）ＭＦＣデータ記憶割り込みステータス・レジスタ、（６）ＭＦＣアドレス比較制御レジスタ、（７）ＭＦＣローカル記憶アドレス比較ファシリティ、（８）ＭＦＣコマンド・エラー・レジスタ、（９）ＭＦＣデータ記憶割り込みポインタ・レジスタ、（１０）ＭＦＣ制御レジスタ、（１１）ＭＦＣアトミック・フラッシュ・レジスタ、（１２）ＳＰＵアウトバウンド割り込みメールボックス・レジスタ、（１３）ＳＰＵ特権的ファシリティ、（１４）ＳＰＵ特権的制御レジスタ、（１５）ＳＰＵローカル記憶制限レジスタ、（１６）ＳＰＵ構成レジスタ、および（１７）ＳＰＥコンテキスト退避／復元を含む。
【００２１】
本発明の機構にとって特に重要なファシリティ、すなわち、メールボックス・ファシリティ、ＳＰＵ信号通知ファシリティ、プロキシ・タグ・グループ完了ファシリティ、ＭＦＣマルチソース同期ファシリティ、ＳＰＵチャンネル・アクセス・ファシリティ、ＳＰＵイベント・ファシリティ、および割り込みファシリティを、以下により詳細に説明する。
【００２２】
データの同期および転送は、一般的には、ＭＦＣ２００内のＤＭＡＣ２６０がその役割を担う。ＤＭＡＣ２６０は、ＳＰＵのローカル記憶と、メイン記憶領域との間でデータを移動できる。オプションとして、データはＳＬ１キャッシュにキャッシュできる。
【００２３】
ＳＰＥおよびＰＰＥは、ＭＦＣ２００に対して、コマンド・キュー２７０および２８０のうちの１つを介してＭＦＣに対するＤＭＡコマンド要求をキューイングすることによってこれらのＤＭＡ動作を行うように命令する。あるＳＰＥによって発行されたコマンドは、ＭＦＣ・ＳＰＵコマンド・キュー２８０に入れられる。ＰＰＥによって発行されたコマンドは、ＭＦＣプロキシ・コマンド・キュー２７０に入れられる。ＭＦＣは、メモリ・マッピング・ユニット（ＭＭＵ）２９０を使用して、ＤＭＡ転送に必要な、すべてのＭＦＣアドレス変換およびＭＦＣアクセス保護チェックを行う。
【００２４】
ＭＦＣコマンドは、ＳＰＵにおいて実行する符号がメイン記憶にアクセスしかつシステム内の他のプロセッサおよび装置との同期を維持することができる主要な方法を提供する。また、コマンドは、オプションのキャッシュを管理するためにも提供される。ＭＦＣコマンドは、ＳＰＵ上で実行する符号か、またはＰＰＥのような他のプロセッサまたは装置上で実行する符号のいずれかによって発行される。関連ＳＰＵ上で実行する符号は、ＭＦＣコマンドを発行するための一連のチャンネル命令を実行する。他のプロセッサまたは装置上で実行する符号は、ＭＦＣコマンドをＳＰＥへ発行するための一連のメモリ・マップＩ／Ｏ（ＭＭＩＯ）転送を実行する。発行されたコマンドは、コマンド・キュー２７０および２８０のうちの１つに入れられる。
【００２５】
一般的に、コマンドは、ＭＭＩＯレジスタを使用して、または関連ＳＰＵによって実行されたチャンネル命令を通してキューイングすることができる。ＭＭＩＯ方法は、メイン記憶と、関連ローカル記憶との間のデータ転送をＳＰＥに代わってＰＰＥが制御するために使用されるものである。データを転送するＭＦＣコマンドを、ＭＦＣ・ＤＭＡコマンドと称する。ＭＦＣ・ＤＭＡコマンドのためのデータ転送方向は、ＳＰＥの観点から常に参照される。したがって、データをＳＰＥへ転送（メイン記憶からローカル記憶へ）するコマンドは、ゲット（ｇｅｔ）コマンドとみなされ、データをＳＰＥから転送（ローカル記憶からメイン記憶へ）するコマンドは、プット（ｐｕｔ）コマンドとみなされる。
【００２６】
ＭＦＣコマンドは、コマンド動作に影響を与える複数のパラメータを活用する。図３は、本発明の例示的な一実施形態に係るＭＦＣコマンドについてのニーモニック・パラメータを示す図の例である。すべてのパラメータがすべてのコマンドによって使用されるわけではない。例えば、ＥＡＨパラメータは、オプションである。オプションのパラメータは、コマンド上では指定されないが、オプションのパラメータは、ハードウェアによって「０」に設定される。
【００２７】
ＭＦＣコマンドは、定義コマンド、違法コマンド、予約コマンドという３つのクラスに分類されてもよい。コマンドのクラスは、操作符号および、もしあれば拡張操作符号を検査することによって決定される。コマンド操作符号、または操作符号および拡張操作符号との組み合わせは、定義または予約コマンドではないので、コマンドは違法である。
【００２８】
定義コマンドは、データ転送コマンド、ＳＬ１キャッシュ管理コマンド、および同期コマンドという３つのカテゴリーのうちの１つに当てはまる。データ転送コマンドは、データ移動の方向を定義するサブカテゴリにさらに分割される。プットコマンドは、ローカル記憶からメイン記憶へデータを移動するデータ転送コマンドである。ゲットコマンドは、メイン記憶からローカル記憶へデータを移動するデータ転送コマンドである。アプリケーションは、データ転送コマンドをＭＦＣプロキシ・コマンド・キュー２７０に置くことができる。特筆されていない限り、これらのコマンドは、任意の順番で（非同期）実行できる。
【００２９】
コマンドの「違法」クラスは、定義クラスまたは予約クラスではないコマンドを対象としている。コマンドの「予約」クラスは、実装に依存して使用されているものである。
【００３０】
ＳＬ１記憶制御コマンドは、ＳＬ１キャッシュに関する動作を制御するためのコマンドである。これらの記憶制御コマンドは、例えば、ゲットまたはプット・コマンド、アドレス範囲操作コマンド、フラッシュ・コマンドといった特定の種類のデータ転送コマンドが恐らく発行されることになっていることをＳＬ１キャッシュに対して通知するための「ヒント」コマンドを含む。
【００３１】
ＭＦＣ同期コマンドは、他のＭＦＣ、プロセッサ、および装置に関して記憶アクセスが行われる順序を制御するために使用される。ＭＦＣ同期コマンドは、順序どおりの実行を実現するためのコマンド、ＤＭＡコマンド・キューにおけるバリア・コマンドに先行するすべてのコマンドに関するすべての後続のコマンドを順序付けするためのコマンド、対象信号通知レジスタ内の信号ビットを論理的に設定するための送信信号コマンドなどを含む。
【００３２】
ＭＦＣコマンドは、個別のＤＭＡコマンドであってもよく、またはＤＭＡリスト・コマンドであってもよい。本発明の例示的な実施形態に係るＤＭＡリスト・コマンドの詳細を図４に示す。ＤＭＡリスト・コマンドは、ローカル記憶に記憶された有効アドレスのリスト、転送サイズの対、またはリスト要素を、ＤＭＡ転送のためのパラメータとして使用する。これらのパラメータは、ＭＦＣプロキシ・コマンド・キュー上でサポートされていない、ＳＰＵが開始したＤＭＡリスト・コマンドのために使用される。各リスト要素の第１のワードには、転送サイズと、ストール／通知フラグとを含む。第２のワードには、有効アドレスの下位の桁３２ビットを含む。開始有効アドレスは、リスト内の転送要素毎に指定される一方で、転送に含まれるローカル記憶アドレスは、主要リスト・コマンドにおいてのみ指定される（「主要（ｐｒｉｍａｒｙ）」という用語は、図３に示すパラメータによって指定されるリスト・コマンドのことを指す）。
【００３３】
ローカル記憶アドレスは、リストにおける各要素によって転送されるデータ量に基づいて、内部的にインクリメントされる。しかしながら、アラインメントの制約により、ローカル記憶アドレスがリスト要素転送についての１６バイト境界で開始しない場合には、ハードウェアは、ローカル記憶アドレスを次の１６バイト境界に自動的にインクリメントする。これは、１６バイト未満の転送サイズが使用される場合にのみ生じる。１６バイト未満の転送サイズのリスト要素は、有効アドレスの最小桁４ビットによって定義されるクワッドワード（１６バイト）内のローカル記憶オフセットを使用する。
【００３４】
リスト要素内で指定された有効アドレスは、ベースＤＭＡリスト・コマンド内で指定された有効アドレスの上位３２ビットによって定義された４ＧＢ領域に関連している。ＤＭＡリスト開始アドレスは、１つの４ＧＢ領域に関連している一方で、リスト要素内の転送は、４ＧＢ境界を横断する。
【００３５】
「Ｓ（ストール／通知）」ビットを設定すると、ＤＭＡ動作に対して、現在のリスト要素が実行された後にこのリストの実行を中断させ、ＳＰＵに対してストール／通知イベントステータスを設定させる。ストールされたリストの実行は、ＭＦＣがＳＰＵプログラムからストール／通知確認を受信するまでは再開されない。ストール／通知イベントは、関連コマンド・タグ・グループ・識別子を使用して、ＳＰＵプログラムに書き込まれる。ストール／通知要素を有する同一タグ・グループ内に複数のＤＭＡリスト・コマンドがある場合には、ソフトウェアは、タグ別のバリアまたはグローバル・バリアを使用してＤＭＡリスト・コマンドの命令された実行を強制して、曖昧性を避けることを保証する。
【００３６】
ＤＭＡリスト・コマンド内のすべてのＤＭＡリスト要素は、順番に開始および発行されることが保証される。ＤＭＡリスト・コマンド内のすべての要素は、固有のローカル順序を有する。１つのＤＭＡリスト・コマンドは、２０４８個の要素までを含むことができ、ローカル記憶１６ＫＢを占める。
【００３７】
チャンネル・インターフェース
ＢＰＡにおいて、チャンネルは、相乗作用処理ユニット（ＳＰＵ）とメモリ・フロー制御（ＭＦＣ）ユニットとの間の主要インターフェースとして使用される。ＳＰＵチャンネル・アクセス・ファシリティを使用して、ＳＰＵチャンネルを構成、退避、および復元する。ＳＰＵ命令セット・アーキテクチャ（ＩＳＡ）は、チャンネル・インターフェース（またはＳＰＵチャンネル）を介した外部装置との通信のためのチャンネル命令の組を提供する。表１は、これらの命令を列記している。
【００３８】
【表１】
0004516941.tif 000002
【００３９】
アーキテクチャ的には、ＳＰＵチャンネルは、読み出し専用または書き込み専用のアクセス種類を有するように構成される。チャンネルは、読み出しおよび書き込みとして構成することはできない。アクセス種類に加えて、各チャンネルは、非ブロッキングまたはブロッキングとして構成できる。ブロッキングとして構成されたチャンネルは、ＳＰＵに対して、チャンネル・カウント「０」のチャンネルを読み出す場合またはフル・チャンネル（すなわち、チャンネル・カウント「０」のチャンネル）に書き込む場合にはストールさせる。「読み出し」チャンネルとは、チャンネル読み出し命令（ｒｄｃｈ）のみがこのチャンネルに発行でき、データが常に返されることを意味する。「書き込み」チャンネルとは、チャンネル書き込み命令（ｗｒｃｈ）のみがこのチャンネルに発行でき、データは当該チャンネルに常に受理される。
【００４０】
「読み出しブロッキング」チャンネルとは、チャンネル読み出し命令（ｒｄｃｈ）のみがこのチャンネルに発行できることを意味する。読み出しブロッキング・チャンネルへ送られたチャンネル読み出し命令（ｒｄｃｈ）は、チャンネル・カウントがゼロでない場合にのみ完了する。チャンネル・カウント「０」は、チャンネルが空であることを示す。チャンネル読み出し（ｒｄｃｈ）を読み出しブロッキング・チャンネルに対してカウント「０」で実行すると、データが当該チャンネル内で使用可能になるまでＳＰＵストールとなる。
【００４１】
「書き込みブロッキング」チャンネルとは、チャンネル書き込み命令（ｗｒｃｈ）のみがこのチャンネルに発行できることを意味する。書き込みブロッキング・チャンネルへ送られたチャンネル書き込み（ｗｒｃｈ）命令は、チャンネル・カウントがゼロでない場合にのみ完了する。チャンネル・カウント「０」は、チャンネルがフルであることを示す。チャンネル書き込み（ｒｄｃｈ）命令を書き込みブロッキング・チャンネルに対してカウント「０」で実行すると、アドレス指定されたチャンネル内のエントリが使用可能になるまでＳＰＵストールとなる。
【００４２】
チャンネル構成に不適切なチャンネル命令を発行すると、無効なチャンネル命令割り込みという結果になることに注意すべきである。例えば、チャンネル読み出し命令（ｒｄｃｈ）を書き込みまたは書き込みブロッキング・チャンネルに対して発行すると、無効なチャンネル命令割り込みという結果になる。
【００４３】
各チャンネルは、当該チャンネルについて発行可能な未処理の動作の数を示す対応カウント（すなわち、深度）を有する。チャンネル深度（すなわち、未処理の転送の最大数）は、実施に依存する。ソフトウェアは、ＳＰＵ内で新たなコンテキストを確立する場合、または既存のコンテキストを再開させる場合には、チャンネル・カウントを初期化しなければならない。
【００４４】
チャンネルおよびチャンネル・インターフェースの動作は、２００３年６月２６に出願の同時係属および本発明の譲受人に譲渡された米国特許出願公開第２００４／０２６４４４５号、「Ｅｘｔｅｒｎａｌ  Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ」に記載されており、その内容を参照により本願に引用するものとする。図５は、米国特許出願公開第２００４／０２６４４４５号に記載された機構に係るチャンネルの単一の対のためのチャンネル回路に関するＳＰＵ発行／制御論理の仕組みならびにデータ・フローを示す図の例である。チャンネル・インターフェースの動作を、図５に示す様々なブロックを参照して説明する。
【００４５】
図５に示すように、ブロック４３０は、ＳＰＵの外部装置命令発行／制御論理である。ブロック４３２は、ＳＰＵへおよびそこからのデータ・フローを表わす。周知のように、プロセッサは、数多くの互いに異なる外部装置と同時に通信してもよい。このプロセッサにおいて、通信はチャンネル・レジスタを介して達成される。各チャンネルは、１方向にのみ動作し、チャンネル上においてＳＰＵによって行われうる動作に従って、読み出しチャンネルまたは書き込みチャンネルのいずれかと呼ばれる。ブロック４３４は、ブロック４３５によって表わされるような１つの外部装置のためのチャンネルの１組についてのチャンネル論理を表わす。後でさらに詳細に説明するように、この外部装置４３５は、ＭＦＣ２００、マシン・ステータス・レジスタ、または任意の他の種類の外部装置のようなＭＦＣであってもよい。特に、ＭＦＣ、マシン・ステータス・レジスタ、イベント・ファシリティ、メールボックス・ファシリティ、および信号通知ファシリティと通信するためのチャンネル・インターフェースの使用については、チャンネル・インターフェースについての以下のこの一般的な説明において説明する。
【００４６】
ブロック４３４内部において、チャンネル読み出しカウンタ４３６と、読み出しレジスタ４３６と、チャンネル書き込みカウンタ４４０と、書き込みレジスタ４４２と、ＭＵＸ（マルチプレクサ）４４４と、ＭＵＸ４４６とが示されている。チャンネル命令は、バス４４８上で、ＳＰＵ発行／制御論理４３０から読み出し及び書き込みカウンタ４３６および４４０へ送付されると共に、ＭＵＸ４４４および３３６のゲート入力へも送付される。これらの命令は、チャンネルＯＵＴリード４５０上で、４３５のような適切な外部装置に対しても供給される。データＩＮリード４５２は、外部装置４３５から読み出しレジスタ４３８へデータを提供する。チャンネル・カウントＩＮ信号は、チャンネルＩＮリード４５４上で、外部装置４３５から、データがレジスタに入力されたことを示してカウンタ４３６内のカウントを値または桁１つ分変更するように動作するカウンタ４３６へ供給される。
【００４７】
書き込みレジスタ４４２から外部装置４３５へ出力されているデータは、データＯＵＴリード上で提供される。チャンネル確認信号は、外部装置４３５が満足のいくデータ受信を完了してカウンタ４４０内のカウントを値または桁１つ分変更するように動作する場合に、チャンネルＡＣＫリード４５８上で、外部装置４３５から書き込みチャンネル・カウンタ４４０へ返される。本発明の好ましい一実施形態において、バス４４８上の信号は、適切な読み出しまたは書き込みカウンタをデクリメントする一方で、リード４５４または４５８のいずれかの上の信号は、適切な読み出しまたは書き込みカウンタをインクリメントすることになる。
【００４８】
図示のように、カウンタ４３６および４４０の両方のカウントは、ＭＵＸ４４４を通って、チャンネル・ストール・リード４６０上で、ＳＰＵ発行／制御論理４３０へ供給される。チャンネル書き込みデータは、ＳＰＵデータ・フロー・ブロック４３２から、チャンネル書き込みデータ・リード４６２上で、書き込みレジスタ４４２へ供給される。ブロック４３６，４３８および４４０からの出力は、バス４６４上でデータ・フロー・ブロック４３２へ返される。非チャンネル命令は、バス４６６を介して、ブロック４３０および４３２間で通信される。
【００４９】
図６は、本発明の例示的な一実施形態に係るチャンネル・インターフェースの動作の例の概略を示すフローチャートを提供する。図６におけるフローチャート図の各ブロックおよびブロックの組み合わせ、および以下に説明する後続の図面におけるフローチャート図は、コンピュータ・プログラム命令によって実施することができることが理解されるだろう。これらのコンピュータ・プログラム命令は、プロセッサまたは他のプログラム可能なデータ処理装置へ提供されて、プロセッサまたは他のプログラム可能なデータ処理装置上で実行する命令がフローチャートのブロックまたは複数のブロックにおいて指定された機能を指示するための手段を作成するようなマシンを生じさせてもよい。こららのコンピュータ・プログラム命令は、プロセッサまたは他のプログラム可能なデータ処理装置が特定のやり方で機能するように指示することができるコンピュータ読み出し可能なメモリまたは記憶媒体に記憶されてもよい。特定のやり方とは、コンピュータ読み出し可能なメモリまたは記憶媒体に記憶された命令が、フローチャートのブロックまたは複数のブロックにおいて指定された機能を実施する指示手段を含む製品を生じさせるようなやり方である。
【００５０】
従って、フローチャート図のブロックは、特定の機能を実行するための手段の組み合わせ、特定の機能を実行するためのステップの組み合わせ、および当該特定の機能を実行するためのプログラム命令手段をサポートする。また、フローチャート図の各ブロックおよびフローチャート図のブロックの組み合わせは、特定の機能またはステップを実行する専用のハードウェア・ベースのコンピュータ・システムによって、または専用のハードウェアおよびコンピュータ命令の組み合わせによって実施できることが理解されるだろう。
【００５１】
図６に示すように、チャンネル読み出しまたは書き込みコマンドの発行によって、指定のチャンネルが上述のような制御機構が実装されているものであるかどうかを判断することになる（ステップ５７６）。そうなければ、チャンネル・エラー論理がイネーブルかどうかについて決定する（ステップ５７８）。イネーブルであれば、プロセッサは停止する（ステップ５８０）。イネーブルでなければ、コマンドが読み出しか書き込みかどうかの判断がなされる（ステップ５８２）。
【００５２】
非実装コマンドが書き込みである場合は、当該コマンドに対してはこれ以上何も行われない（ステップ５８４）。それに対して、非実装コマンドが読み出しである場合には、データ・プロセッサ・データ・フローへゼロを返す（ステップ５８６）。いずれの場合も、処理は次の読み出しまたは書き込み命令を待つステータスへ戻る。図示の好ましい実施形態において、すべての有効な読み出し命令は、値を返さなければならない。本明細書に規定するように、非実装チャンネルのチャンネル読み出し命令は、すべてゼロの値を返す。
【００５３】
なお、特定の実施においては、チャンネルのすべてを定義する必要はない。各チャンネルは、固有の数値識別子を有することになる。好ましい一実施形態において、このチャンネル識別子は、０から１２７までの範囲である。しかしながら、チャンネルのすべてを定義する必要はないので、識別子のすべてが使用されなくてもよい。よって、未定義チャンネルへの命令がある場合には、処理は、上述の非実装経路へと下る。実施によっては、非実装チャンネルへのチャンネル読み出しまたは書き込みコマンドは、違法動作であるとみなされるのが望ましい場合がある。前述のステップ５８０に示すように、さらなる行為によってプロセッサが強制的に停止されることもある。
【００５４】
図６に戻ると、ステップ５７６において、指定されたチャンネルが実装されていると判断される場合には、指定されたチャンネルがブロッキング・チャンネルかどうかをチェックする（ステップ５８８）。そうでなければ、当該チャンネルについてのカウントがデクリメントされるが、０未満になることは許可されていない（ステップ５９０）。チャンネルがブロッキングであると判断される場合には、当該チャンネルについてのカウントがゼロより大きいかどうかを判断するためのチェックが行われる（ステップ５９２）。ゼロより大きければ、処理はステップ５９０へ戻る。
【００５５】
カウントが既にゼロである場合には、ステップ５９２において判断されるように、ＳＰＵは、外部装置がこのチャンネルに関する入力を提供してカウントをゼロから変更させるまで、ストールする（ステップ５９４および５９５）。よって、ステップ５９４および５９５のループは、このチャンネルについてのカウントに変化があるまで、定期的に処理される。一旦カウントが変更されると、処理はステップ５９５からステップ５９０へと続く。
【００５６】
その後、チャンネルが能動か受動かを判断する（ステップ５９６）。チャンネルが受動である場合には、コマンドが書き込みまたは読み出し命令かどうかをチェックする（ステップ５９８）。コマンドが書き込み命令である場合には、データは外部読み出しのためのローカルに記憶される（ステップ６００）。コマンドが読み出し命令である場合には、データは、図５のＳＰＵデータ・フロー４３２を介してＳＰＵへ返される（ステップ６０２）。
【００５７】
受動チャンネルである場合に、ＳＰＵは、処理を完了するのに外部処理に依存することに注意すべきである。一例として、読み出しチャンネルは、データをロードするのに外部装置に依存してもよい。これに対して、能動チャンネルにおいて、ＳＰＵは、読み出しまたは書き込み動作を実行する動作を能動的に完了させる。この種の動作の一例として、接続されたハードウェアが能動読み出しチャンネルからデータに対する外部要求を行う場合が挙げられる。
【００５８】
チャンネルが能動チャンネルであるとステップ５９６において判断されると、コマンドが読み出しまたは書き込みコマンドかどうかをチェックする（ステップ６０４）。コマンドが書き込みのためのものである場合は、書き込みデータを、ＳＰＵへ外部に、または内部レジスタに出力する（ステップ６０６）。コマンドが読み出しである場合には、読み出し要求を適切な外部装置へ送る（ステップ６０８）。
【００５９】
要求されたデータの入力を待つ（ステップ６１０）。定期的に、読み出しデータが受信されたかどうかについて判断する（ステップ６１２）。そうでなければ、処理は、次のチェックのための時間が生じるまで、ステップ６１０へ戻る。データが受信されると、処理は完了する（ステップ６０２）。
【００６０】
上記から、チャンネル番号がその内部で指定される、特定のチャンネル読み出しまたは書き込み命令を使用して、各チャンネルがアクセスされることは明らかであろう。各チャンネルは、それによって指定されたカウントを有する。このカウントは、当該チャンネルがその内部で指定される、チャンネル読み出しカウント命令を使用して、読み出される。チャンネルコマンドは、投機的ではなく、外部のインターフェースにおいて順序正しくなく処理されることはできない。チャンネル・アーキテクチャは、ＳＰＵ外部の装置がチャンネルコマンドを順序通りに処理することを要求してはいないが、プロセッサおよび外部装置の実施によっては、それを要求することもある。このカウントレジスタ内の値は、このレジスタへのアクセス数を、このレジスタに生じた外部確認の数と対比して常に追跡している。
【００６１】
動作において、チャンネル・カウントを（複数の）外部インターフェースを通じたアクセスを介して変更するやり方は、実施に基づいている。好ましい一実施形態において、カウントは、レジスタへまたはそこからの成功したデータ転送毎に１ずつインクリメントされる。チャンネル毎に、ＳＰＵアクセスは、読み出しまたは書き込みチャンネルとして定義される。さらに、好ましい実施形態において、「０」カウントを使用して、チャンネルが「ブロッキング」チャンネルとして定義または実施される場合にこれ以上の動作をストールする。チャンネル・レジスタがキュー深度「１」を有すると定義される場合には、「０」カウントを使用して、当該データ内のデータが有効でない旨を示してもよい。チャンネルは、読み出しまたは書き込みチャンネル上でのＳＰＵ動作をストールするために定義することもでき、当該コマンドにおいて、カウントがもはや「０」でないようなときになるまでカウントが「０」の場合であれば、このようにできる。
【００６２】
好ましい一実施形態において、カウンタ値は、ＳＰＵが開始したチャンネル読み出しまたは書き込みコマンド毎にデクリメントされ、外部が開始した読み出しまたは書き込み（データありまたはデータなし）アクセス毎にインクリメントされる。言い換えれば、カウンタは、入力対出力を示すことを維持する。よって、値またはカウント「０」は、書き込みに関しては、外部書き込みスロットがこれ以上使用可能ではないことを示す。それに対して、読み出しに関する値またはカウント「０」は、有効なデータがないことを示す。カウントがゼロの場合に、追加のＳＰＵチャンネル読み出しまたは書き込みコマンドが発行されてチャンネルが非ブロッキングと定義される場合には、カウントは「０」のままとなり、レジスタ内のデータは失われる。好ましい実施形態において実施されるように、当該レジスタの以前の直近データが失われる。カウントが当該レジスタの実施のビット数の最大値にあって、さらにトランザクションがあるとカウントに範囲外のインクリメントを生じさせる場合には、カウントは最大値に留まる。
【００６３】
カウント値を初期化する方法は実施に依存し、その方法の１つは、外部インターフェースを介する初期化である。このカウントは、外部キューの深度に予め設定できる。カウントレジスタ内のゼロの値は、この外部キュー内にこれ以上空間がないことを意味する。外部キュー深度「１」については、カウントは「１」に予め設定されなければならない。ＳＰＵがこのチャンネルに書き込む場合、カウントは「０」となる。外部装置がこのチャンネルを読み出す場合、カウントは「１」にインクリメントされ、それによって、チャンネルが他の書き込み動作に対して準備ができていることを示す。
【００６４】
上述のように、チャンネルレジスタの読み出しによって、カウントは有効データを示すことができる。カウントレジスタが「０」に予め設定されると、これはデータが有効でないことを示す。外部装置がこのチャンネルに書き込みを行う場合には、カウントは「１」にインクリメントし、データはＳＰＵ読み出しについて有効である旨を示す。ＳＰＵがこのチャンネルから読み出しを行う場合には、カウントは「０」にデクリメントし戻されて、他の外部書き込みが生じうることを示す。
【００６５】
本発明の好ましい一実施形態において、コンピュータ符号チャンネル・カウント読み出し命令がカウンタへ送られて、読み出しおよび書き込みチャンネル両方に関するカウントを確認する。外部装置がマルチプロセッサ環境における他のＳＰＵまたはコンピューティング装置のようなインテリジェント装置である場合は、外部装置は、チャンネル・カウント読み出し命令をカウンタに送って、カウントを確認してもよい。このように、外部装置は、チャンネルが読み出しまたは書き込みチャンネルのいずれかに読み出しされていないデータを含む時、または、読み出しチャンネルを含むプロセッサへ追加のデータを送付するのが適切な時、あるいはその両方を判断してもよい。
【００６６】
本発明の使用において、読み出しおよび書き込みチャンネルは、非累積または累積のいずれであってもよい。累積チャンネルは、複数の書き込みを累積するチャンネルである。すなわち、チャンネルが読み出されるまで、レジスタまたは他の記憶手段に既に含まれるデータに入力データが論理的に追加される。チャンネルを読み出す場合に、累積レジスタは、典型的には「０」に再設定されて、チャンネルは、再び累積を開始する。この行為は、読み出しまたは書き込みチャンネルの両方について可能である。
【００６７】
さらに、累積チャンネルは、ブロッキングであっても、または非ブロッキングであってもよい。典型的には、累積チャンネルはカウント深度「１」を有するのに対して、非累積チャンネルは、当該チャンネルへの書き込み毎にカウントを行ってもよい。
【００６８】
要約すると、チャンネル・インターフェースは、定義されたチャンネルを使用してメモリを開放するが、それでも、レジスタ内のデータがいつ有効になるか、または、言い換えれば、かつて読み出されていないときについてのアクセス可能な情報を容易に提供する。この情報は、チャンネル・カウント読み出し命令をカウント機構へ送ることによって主翼される。インテリジェント外部装置が所定のチャンネルに接続されている場合には、所定のチャンネルへデータを送信、またはそこからデータ受信する際に、同様の命令が外部装置によって使用されてもよい。チャンネル・インターフェースは、チャンネル・カウント読み出し命令を使用することによって、指定されたチャンネルが非ブロッキング・チャンネルとして定義される場合に、レジスタ内のデータの不測の上書きをさらに防止する。
【００６９】
本発明は、チャンネル・インターフェースおよび定義されたチャンネルを利用して、互いに異なる種類の外部装置およびそのような外部装置によって提供されたファシリティへ、またはそこから、命令およびデータを通信する。例えば、本発明は、ＳＰＵのチャンネル・インターフェースのを使用して、命令およびデータを、ＭＦＣ、マシン・ステータス・レジスタ、および割り込みファシリティと通信するための機構を提供する。さらに、チャンネル・インターフェースを使用して、命令およびデータを、ＢＰＡのイベント・ファシリティ、メールボックス・ファシリティ、マルチソース同期ファシリティ、プロキシ・タグ・グループ完了ファシリティ、信号通知ファシリティなどと通信する。
【００７０】
図７は、チャンネルが本発明の一実施形態によって使用されるやり方を示す図の例である。図７に示すように、チャンネルインターフェース６２０は、複数のチャンネルを提供し、それを介して、ＭＦＣ６２４、マシン・ステータス・レジスタ６３４、および割り込みファシリティ６３６と通信してもよい。各チャンネルは、図５に関連して上述したものと同様の要素からなってもよく、その動作は、図６において説明したものと同様である。本発明の一実施形態において、チャンネル・インターフェース６２０は、図５におけるブロック４３４によって表わされるすべてのチャンネル対の総計に対応してもよい。ＳＰＵ６２２は、図５におけるブロック４３０および４３２の組み合わせに対応してもよく、図７〜１１におけるすべての他のブロックは図５のブロック４３５に対応してもよい。
【００７１】
図７に示すように、チャンネル６３１，６３３，および６３５は、ＳＰＵイベント・ファシリティ６３０とデクリメンタ６３２とがＭＦＣ６２４と通信できるようなＳＰＵ６２２に関する通信経路を提供する。ＳＰＵイベント・ファシリティ６３０は、ＢＰＡ内で生成されたイベントを処理するための機構を提供する。チャンネル６３３は、後にさらに少佐に説明するように、当該イベントを識別して、当該イベントに関する情報を取得するための機構を提供する。デクリメンタ６３２は、ＳＰＵ上で実行するソフトウェアが時間の進行を計測でき、または所定の時間単位の経過が通知される機構を提供する。デクリメンタ６３２は、その値セットおよびチャンネル６３１を介して読み出されたステータスを有してもよい。
【００７２】
ＳＰＵ（発行／制御論理、プロセッサ・データ・フロー）６２２は、外部装置と通信するための命令、データおよびファシリティを提供する。例えば、ＳＰＵ６２２は、ＳＰＵチャンネルを初期化、退避、および復元する特権的ファシリティであるＳＰＵチャンネル・アクセス・ファシリティを提供する。当該ファシリティは、ＳＰＵチャンネル・インデックス・レジスタ、ＳＰＵチャンネル・カウント・レジスタ、およびＳＰＵチャンネル・データ・レジスタという３つのＭＭＩＯレジスタからなる。ＰＵチャンネル・インデックス・レジスタは、ＳＰＵチャンネル・カウント・レジスタおよびＳＰＵチャンネル・データ・レジスタによってアクセスされたそれぞれカウントおよびデータのチャンネルへのポインタである。ＳＰＵチャンネル・インデックス・レジスタは、ＳＰＵチャンネル・カウント・レジスタまたはＳＰＵチャンネル・データ・レジスタを使用してアクセスされたＳＰＵチャンネルを選択する。読み出しまたはＳＰＵチャンネル・インデックス・レジスタによって選択されたＳＰＵチャンネル・データを初期化するために、ＳＰＵチャンネル・データ・レジスタが使用される。
【００７３】
ＳＰＵ６２２のファシリティと通信するためのチャンネル６３１，６３３，および６３５に加えて、チャンネル６３７は、マシン・ステータス・レジスタ６３４に関連した通信経路を提供する。マシン・ステータス・レジスタ６３４は、現在のマシン・分離ステータスと、割り込みステータスとを含む。分離ステータスは、ＳＰＵが分離されているか否かを示す。ＢＰＡの分離ファシリティによって、特権的ソフトウェアおよびアプリケーションは、１つ以上のＳＰＵへ符号画像をロードすることができる。ＳＰＵ分離ファシリティは、ＳＰＵの関連ローカル記憶にロードされた符号画像が決して変更されなかった旨を保証する。入れ子型の割り込みがサポートされる場合には、割り込みステータス関連のマシン・ステータス・レジスタを使用して割り込み状態情報を退避する。
【００７４】
さらに、チャンネル６３９は、割り込みファシリティ６３６に関連した通信経路を提供する。割り込みファシリティ６３６は、割り込みおよび割り込みステータス情報をＰＰＥまたは外部装置にルーティングし、ＰＰＥに提供される割り込みを優先させて、内部プロセッサ割り込みを生成するのに使用される。
【００７５】
加えて、チャンネル６４１は、メールボックス・ファシリティ６３８に関連した通信経路を提供する。他のＳＰＵ、ＰＰＥなどのような外部装置へ、およびそこから情報を送受信するために、メールボックス・ファシリティ６３８が使用される。
【００７６】
チャンネル６４３は、ＳＰＵ信号通知ファシリティ６４０に関連した通信経路を提供する。バッファ完了フラグのような信号をシステム内の他のプロセッサおよび装置からＳＰＵへ送るために、ＳＰＵ信号通知ファシリティ６４０が使用される。
【００７７】
チャンネル６４５は、プロキシ・タグ・グループ完了ファシリティ６４２に関連した通信経路を提供する。プロキシ・タグ・グループ完了ファシリティ６４２は、同様にタグ付けされた命令のグループの処理が完了したときを判断するためのファシリティである。
【００７８】
チャンネル６４７は、ＭＦＣマルチソース同期ファシリティ６４４に関連した通信経路を提供する。ＭＦＣマルチソース同期ファシリティ６４４は、ローカル記憶およびメイン記憶アドレス・ドメインに渡る累積順序付けを達成する。複数のソース（すなわち、２つ以上のプロセッサまたはユニット）によって他のプロセッサまたはユニットに対して行われる記憶アクセスの順序付けを、累積順序付けと称する。
【００７９】
図８および図９は、本発明の例示的な一実施形態に係るＳＰＵチャンネル・マップを表で示す図の例である。図７〜図１１に示すように、ＳＰＵチャンネル・インターフェースは、命令およびデータを通信するための様々な種類のチャンネルをサポートしている。これらのチャンネルには、ＳＰＵイベント・チャンネル６５０と、ＳＰＵ信号通知チャンネル６５２と、ＳＰＵデクリメンタ・チャンネル６５４と、ＭＦＣマルチソース同期チャンネル６５６と、ＳＰＵ予約チャンネル６５８と、マスク読み出しチャンネル６６０と、ＳＰＵ状態管理チャンネル６６２と、ＭＦＣコマンド・パラメータ・チャンネル６６４と、ＭＦＣタグ・ステータス・チャンネル６６６と、ＳＰＵメールボックス・チャンネル６６８とが含まれる。これらの「チャンネル」は、実質的には、メモリ・マップ・レジスタおよびこれらのレジスタに書き込むための対応回路である。よって、「チャンネル」という用語は、本明細書においては、指定された「チャンネル」に対応するデータ値を記憶するための単数または複数のレジスタを指すためにも使用されてもよい。これらの各チャンネルの動作は、後述する。これらのチャンネルを使用するためのＰＰＥ、ＳＰＵ、およびＭＦＵにおいて、様々なファシリティが提供される。これらの種類の各チャンネルを、ＭＦＣと通信するために使用されるチャンネルから始めて、以下に詳細に説明する。
【００８０】
ＭＦＣコマンド・パラメータ・チャンネル
ＭＦＣコマンド・パラメータ・チャンネル６６４は、ＭＦＣ・ＳＰＵコマンド・キューのコマンド・パラメータ・レジスタへデータを書き込むために使用されるチャンネルである（図２および上記表１を参照）、ＭＦＣコマンド・パラメータ・チャンネル６６４は、非ブロッキングであり、関連のチャンネル・カウントを有しない。よって、これらのチャンネルのいずれに送られるチャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令も、カウント「１」を返す。
【００８１】
ＭＦＣコマンド・パラメータ・チャンネル６６４は、ＭＦＣローカル記憶アドレス・チャンネルと、ＭＦＣ有効アドレスｈｉｇｈチャンネルと、ＭＦＣ有効アドレスｌｏｗまたはリスト・アドレス・チャンネルと、ＭＦＣ転送サイズまたはリスト・サイズ・チャンネルと、ＭＦＣコマンド・タグ識別チャンネルと、ＭＦＣコマンド操作符号チャンネルと、ＭＦＣクラスＩＤチャンネルとを含む。これらの各チャンネルを、以下に詳細に説明する。
【００８２】
ＭＦＣコマンド操作符号チャンネル
ＭＦＣコマンド操作符号チャンネルの詳細を、本発明の例示的な一実施形態に係る図１２に示す。ＭＦＣコマンド操作符号チャンネルは、操作符号に基づいて実行されるべき動作を識別する。この操作符号の有効性は、命令ストリームとは非同期でチェックされる。ＭＦＣコマンドまたは任意のコマンドパラメータが無効である場合には、ＭＦＣコマンド・キュー処理は中断されて、無効なＭＦＣコマンド割り込みが生成される。
【００８３】
ＭＦＣコマンドおよびクラスＩＤパラメータは、１つのチャンネル命令を使用して、ＭＦＣ・ＳＰＵコマンド・キューへ書き込まれる。図１２に示すように、一実施形態において、ＭＦＣコマンド操作符号パラメータは、３２ビットワードの下位１６ビットである。このフィールドの上位８ビットは、ＭＦＣコマンド操作符号を識別する。
【００８４】
ＭＦＣクラスＩＤチャンネル
ＭＦＣクラスＩＤチャンネルは、図１３に示すように、ＭＦＣコマンド毎の置換クラスＩＤおよび及び転送クラスＩＤを指定するために使用される。これらのＩＤは、ＳＰＵおよびソフトウェアによって使用されて、システムの全体的な性能を向上させる。特に、置換クラスＩＤ（ＲｃｌａｓｓＩＤ）は、置換管理テーブル（ＲＭＴ）と共に使用されて、キャッシュ置換を制御する。置換クラスＩＤは、例えば、ＰＰＥ動作についてのロード・記憶アドレスから生成されてもよい（ＰＰＥは、ＰＰＥのロード・記憶ならびにキャッシュ置換管理ファシリティのためのクラスＩＤへの命令フェッチについての有効アドレスまたは実アドレスをマッピングする方法を提供するアドレス範囲ファシリティを含む）。
【００８５】
ＲｃｌａｓｓＩＤは、特権的ソフトウェアによって管理されたテーブル、すなわち、置換管理テーブル（ＲＭＴ）へのインデックスを生成するために使用される。ＲＭＴは、置換ポリシーを制御するために使用される。ＲＭＴのフォーマットは、実施に依存する。ＲＭＴは、実施に依存するエントリ数からなり、セット・イネーブルビットと、有効ビットと、他の制御情報を含まなければならない。オプションとして、ある実施においては、キャッシュ・バイパス・ビットおよびアルゴリズム・ビットが提供される。ＲＭＴ内のエントリの数および各エントリのサイズは、実施に依存する。
【００８６】
図１４は、本発明の例示的な一実施形態に係る８ウェイ・セット・アソシエィティブ・キャッシュに対する典型的なＲＭＴエントリを示す。ＲＭＴテーブルは、システムの実アドレス空間に位置する。特権的ソフトウェアは、これらのＲＭＴテーブルを特権的ページとしてマッピングしなければならない。ある実施においては、主要なキャッシュ構成毎にＲＭＴが提供されなければならない。
【００８７】
図１３に戻ると、転送クラスＩＤ（ＴｃｌａｓｓＩＤ）は、互いに異なる特徴を有する記憶へのアクセスを識別するために使用される。ＴｃｌａｓｓＩＤを使用して、ある実施においては、記憶場所の特徴に基づいて、ＭＦＣコマンドに対応する転送を最適化することができる。ＴｃｌａｓｓＩＤのセットアップおよび使用は、実施に依存する。
【００８８】
ＲｃｌａｓｓＩＤおよびＴｃｌａｓｓＩＤは、以後「クラスＩＤパラメータ」と称し、その内容は永続的ではなく、コマンド・エンキュー・シーケンス毎に書き込まれなければならない。クラスＩＤパラメータは、共に使用するコマンドがＰＰＥから発行されたか、それともＳＰＵコマンド・キューのＳＰＵ側から発行されたかに関わらず、同一の機能を実行する。クラスＩＤパラメータは、ＳＰＥに関連したリソースを制御するために使用され、他のＳＰＥまたはＰＰＥに関連したリソースへは影響を与えない。クラスＩＤパラメータの有効性は、検証されない。サポートされるクラスＩＤパラメータの数は、実施に依存する。
【００８９】
ＭＦＣコマンド・タグ命令チャンネル
ＭＦＣコマンド・タグ命令チャンネルは、コマンド毎、またはコマンドのグループ毎に識別子を指定するために使用される。ＭＦＣコマンド・タグ識別チャンネルの詳細を、図１５に示す。識別タグは、例えば、ｘ’０’とｘ’１Ｆ’との間の任意の値である。識別タグは、ハードウェアにおける単なるローカルな範囲を有する。よって、同一のタグを互いに異なるＳＰＥまたはＰＰＥにおいて使用してもよい。
【００９０】
任意の数のＭＦＣコマンドは、同一の識別子でタグ付けすることができる。同一の識別子でタグ付けされたＭＦＣコマンドは、タグ・グループと称される。タグは、特定のキューへ書き込まれたコマンドに関連する。ＭＦＣ・ＳＰＵコマンド・キューへ供給されたタグは、ＭＦＣプロキシ・コマンド・キューへ供給されたタグとは独立している。ＭＦＣコマンド・タグ識別パラメータは、永続的ではなく、ＭＦＣコマンド・エンキュー・シーケンス毎に書き込まれなければならない。このパラメータの有効性は、命令ストリームとは非同期でチェックされる。上位ビット（例えば、ビット０から１０）が０に設定されていなければ、ＭＦＣコマンド・キュー処理は中断されて、割り込みが生成される。
【００９１】
ＭＦＣ転送サイズまたはリスト・サイズ・チャンネル
ＭＦＣ転送サイズまたはリスト・サイズ・チャンネルは、ＭＦＣ転送のサイズ、またはＭＦＣ・ＤＭＡ転送リスト、すなわち、一連のＤＭＡ転送コマンドのリストのサイズを指定するために使用される。ＭＦＣ転送サイズまたはリスト・サイズ・チャンネルの詳細を図１６に示す。例示的な一実施形態において、転送サイズは、１，２，４，８，１６，または１６バイトから最大１６ＫＢまでの倍数を有することができる。ＭＦＣ・ＤＭＡ転送リスト・サイズは、８という値か、または最大１６ＫＢまでの８の倍数かを有することができる。ＭＦＣ転送サイズまたはリスト・サイズ・チャンネルの内容は、永続的ではなく、ＭＦＣコマンド・エンキュー・シーケンス毎に書き込まれなければならない。このパラメータの有効性は、命令ストリームとは非同期でチェックされる。サイズが無効であれば、ＭＦＣコマンド・キュー処理は中断されて、ＭＦＣ・ＤＭＡアラインメント割り込みが生成される。
【００９２】
ＭＦＣローカル記憶アドレス・チャンネル
ＭＦＣローカル記憶アドレス・チャンネルは、キューイングされたＭＦＣコマンドに関連したＳＰＵローカル記憶アドレスを供給するために使用される。ＭＦＣローカル記憶アドレスは、ＭＦＣコマンド内で定義されるように、ＭＦＣ転送の送信元または送信先として使用される。ＭＦＣローカル記憶アドレス・チャンネルの詳細を図１７に示す。
【００９３】
ＭＦＣローカル記憶アドレス・チャンネルの内容は、永続的ではなく、ＭＦＣコマンド・エンキュー・シーケンス毎に書き込まれなければならない。ＭＦＣローカル記憶アドレス・パラメータの有効性は、命令ストリームとは非同期でチェックされる。アドレスが整列していない場合には、ＭＦＣコマンド・キュー処理は中断されて、ＭＦＣ・ＤＭＡアラインメント例外が生成される。整列されているとみなされるためには、例えば、ローカル記憶アドレスの最小桁４ビットが、有効アドレスの最小桁４ビットに一致しなければならない。
【００９４】
ＭＦＣ有効アドレスＬｏｗまたはリスト・アドレス・チャンネル
ＭＦＣ有効アドレスＬｏｗまたはリスト・アドレス・チャンネルは、ＭＦＣコマンドについての有効なｌｏｗアドレス、またはＭＦＣ・ＤＭＡリスト・コマンドについてのリスト要素へのローカル記憶ポインタを指定するために使用される。ＭＦＣステートレジスタ内で変換がイネーブルな場合には、ＰＰＥのアドレス変換ファシリティによって有効アドレスが実アドレスに変換される。図１８は、ＭＦＣ有効アドレスＬｏｗまたはリスト・アドレス・チャンネルの詳細を示す。
【００９５】
ＭＦＣ有効アドレスＬｏｗまたはリスト・アドレス・チャンネルの内容は、永続的ではなく、ＭＦＣコマンド・エンキュー・シーケンス毎に書き込まれなければならない。１６バイト未満の転送サイズについては、このパラメータのビット２８から３１が転送サイズに基づく自然整列を提供しなければならない。１６バイト以上の転送サイズについては、ビット２８から３１が「０」でなければならない。変換がディスエーブルの場合は、このパラメータは、メイン記憶ドメインの実アドレス空間制限内でなければならない。ＭＦＣリスト・コマンドについては、リスト・アドレスのビット２９から３１が「０」でなければならない。これらの条件のいずれかが満たされない場合には、パラメータは無効であり、整列されていないとみなされる。
【００９６】
ＭＦＣ有効アドレスＬｏｗまたはリスト・アドレス・パラメータの有効性は、命令ストリームとは非同期でチェックされる。例えばセグメント障害、マッピング障害、保護違反、またはアドレスが整列されていないのでアドレスが無効の場合は、ＭＦＣコマンド・キュー処理は中断されて、割り込みが生成される。生成される可能性のあるこの種類の割り込みは、ＭＦＣデータ・セグメント割り込み、ＭＦＣデータ記憶割り込み、およびＤＭＡアラインメント割り込みである。
【００９７】
ＭＦＣ有効アドレスＨｉｇｈチャンネル
ＭＦＣ有効アドレスＨｉｇｈチャンネルは、ＭＦＣコマンドについての有効アドレスを指定するために使用される。変換がＭＦＣ状態レジスタ内でイネーブルの場合は、有効アドレスは、アドレス変換ファシリティによって実アドレスに変換される。ＭＦＣ有効アドレスｈｉｇｈチャンネルの詳細を図１９に示す。
【００９８】
ＭＦＣ有効アドレスｈｉｇｈチャンネルの内容は、永続的ではなく、ＭＦＣコマンド・エンキュー・シーケンス毎に書き込まれなければならない。上位３２ビットが書き込まれていない場合には、ハードウェアはＥＡＨを設定し、高アドレスビットが０、すなわちアドレスが０から４ＧＢであるように設定される。このパラメータの有効性は、命令ストリームとは非同期でチェックされる。例えばセグメント障害、マッピング障害、または保護違反のためにアドレスが無効の場合は、ＭＦＣコマンド・キュー処理は中断されて、割り込みが生成される。生成される可能性のあるこの種類の割り込みは、ＭＦＣデータ・セグメント割り込み、およびＭＦＣデータ記憶割り込みである。有効アドレスの有効性は、転送中にチェックされることに注意すべきである。無効アドレスとなって例外が生成される前であれば、部分的な転送が可能である。
【００９９】
上述のＭＦＣコマンド・パラメータ・チャンネルを使用して、ＳＰＵからＭＦＣコマンドをキューイングするためには、ＭＦＣコマンド・パラメータは、まずＭＦＣコマンド・パラメータ・チャンネルに書き込まれなければならない。これは任意の順序で行われてもよいが、ＭＦＣコマンド操作符号およびクラスＩＤパラメータは最後に書き込まれなければならない。よって、ＭＦＣコマンド・パラメータを書き込むためには、図２０に概略を示す動作に従う。
【０１００】
図２０に示すように、動作は、ＭＦＣローカル記憶アドレス・パラメータをＭＦＣローカル記憶アドレス・チャンネルを書き込むこと（ステップ８１０）を含む。有効アドレスＨｉｇｈパラメータは、ＭＦＣ有効アドレスＨｉｇｈチャンネルへ書き込まれる（ステップ８２０）。ＭＦＣ有効アドレスＬｏｗまたはリスト・アドレス・パラメータは、ＭＦＣ有効アドレスＬｏｗまたはリスト・アドレス・チャンネルへ書き込まれる（ステップ８３０）。ＭＦＣ転送またはリスト・サイズ・パラメータは、ＭＦＣ転送サイズまたはリスト・サイズ・チャンネルへ書き込まれる（ステップ８４０）。ＭＦＣコマンド・タグ・パラメータは、ＭＦＣコマンド・タグ識別子チャンネルへ書き込まれる（ステップ８５０）。上述のすべてのパラメータがそれぞれのチャンネルに書き込まれた後、ＭＦＣコマンド操作符号およびクラスＩＤパラメータが、ＭＦＣ操作符号およびＭＦＣクラスＩＤチャンネルへ書き込まれて（ステップ８６０）、動作は終了する。ステップ８１０〜８５０は任意の順序で行われてもよく、ステップ８６０は他のパラメータのそれぞれのチャンネルへの書き込みの後に続くことが理解されるべきである。
【０１０１】
ＭＦＣコマンド・パラメータは、ＭＦＣコマンド操作符号およびクラスＩＤパラメータの書き込みがＭＦＣによって行われるまで、ＭＦＣコマンド・パラメータ・チャンネル内に保持される。ＭＦＣコマンド操作符号チャンネルおよびＭＦＣクラスＩＤチャンネルへのチャンネル書き込み（ｗｒｃｈ）命令によって、ＭＦＣコマンド・パラメータ・チャンネル内に保持されたパラメータは、ＭＦＣコマンド・キューへ送られる。ＭＦＣコマンド・パラメータは、ＭＦＣコマンド自身がＭＦＣコマンド・キューへ発行される前であれば任意の順序で書き込むことができる。ＭＦＣコマンド・パラメータ・チャンネルへ書き込まれた最後のパラメータの値が、エンキュー動作に使用される。
【０１０２】
ＭＦＣコマンドがキューイングされた後、ＭＦＣパラメータの値は無効となり、次のＭＦＣコマンドキューイング要求について再指定されなければならない。必要なＭＦＣパラメータのすべて（すなわち、オプションのＥＡＨ以外のすべてのパラメータ）を指定しないと、ＭＦＣコマンド・キューの動作が不適切になりうる。
【０１０３】
ＭＦＣコマンド操作符号チャンネルおよびＭＦＣクラスＩＤチャンネルは、ハードウェアによってサポートされたＭＦＣキューの数にハードウェアによって構成された最大カウントを有する。ソフトウェアは、電源投入後であってＭＦＣプロキシ・コマンド・キューのパージ後に、ＭＦＣコマンド操作符号チャンネルのチャンネル・カウントを、実施によってサポートされるＭＦＣプロキシ・コマンド・キュー・スロットの数に初期化しなければならない。また、ＭＦＣコマンド操作符号チャンネルのチャンネル・カウントは、ＳＰＥプリエンプティブ・コンテキスト・スイッチ上で退避および復元されなければならない。
【０１０４】
ＭＦＣタグ・グループ・ステータス・チャンネル
上述のように、各コマンドは、５ビット識別子などのＭＦＣコマンド・タグと称される識別子でタグ付けされる。同一の識別子を複数のＭＦＣコマンドのために使用することができる。同一の識別子を有するコマンドの組は、タグ・グループと定義される。ソフトウェアは、タグ・グループ毎のキューイングされたすべてのコマンドの完了をチェックまたは待つために、使用することができる。加えて、ＭＦＣコマンド・タグは、ＭＦＣ・ＤＭＡリスト・コマンドのチェックまたはそれを待つこと、ストール／通知フラグセットを有する要素への到達、ＭＦＣ・ＤＭＡリスト・コマンドを再開するためのリスト要素の確認のために、ソフトウェアによって使用される。
【０１０５】
ＭＦＣタグ・グループ・ステータス・チャンネルをまず説明し、その後、タグ・グループのステータスの判断と、ＭＦＣ・ＤＭＡリスト・コマンドの完了の判断のための手順を説明する。
【０１０６】
ＭＦＣタグ・グループ・ステータス・チャンネルは、ＭＦＣ書き込みタグ・グループ・クエリ・マスク・チャンネルと、ＭＦＣ読み出しタグ・グループ・クエリ・マスク・チャンネルと、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルと、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルと、ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルと、ＭＦＣ書き込みリスト・ストール／通知タグ確認チャンネルと、ＭＦＣ読み出しアトミック・コマンド・ステータス・チャンネルとを含む。これらの各チャンネルを、以下に詳細に説明する。
【０１０７】
ＭＦＣ書き込みタグ・グループ・クエリ・マスク・チャンネル
ＭＦＣ書き込みタグ・グループ・クエリ・マスク・チャンネルは、クエリまたは待ち動作に含まれるべきタグ・グループを選択するために使用される。ＭＦＣ書き込みタグ・グループ・クエリ・マスク・チャンネルの詳細を図２１に示す。
【０１０８】
このチャンネルによって提供されるデータは、このチャンネルへ発行される後続のチャンネル書き込み（ｗｒｃｈ）命令によって変更されるまで、ＭＦＣに保持される。したがって、データは、ステータス・クエリまたは待ち毎に再指定される必要はない。ＭＦＣタグ・ステータス更新要求が保留中の場合にマスクがソフトウェアによって修正されると、結果の意味合いは曖昧である。保留ＭＦＣタグ・ステータス更新要求は、このマスクの修正の前に常にキャンセルされなければならない。ＭＦＣタグ・ステータス更新要求は、「０」の値（すなわち、直接更新）をＭＦＣ書き込みタグ・ステータス更新要求チャンネルに書き込むことによってキャンセルすることができる。このチャンネルの現在の内容は、ＭＦＣ読み出しタグ・グループ・クエリ・マスク・チャンネルを読み出す（ｒｄｃｈ）ことによってアクセスすることができる。このチャンネルは、非ブロッキングであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令がこのチャンネルに送られると、カウントは常に「１」として返される。
【０１０９】
ＭＦＣ読み出しタグ・グループ・クエリ・マスク・チャンネル
ＭＦＣ読み出しタグ・グループ・クエリ・マスク・チャンネルは、プロキシ・タグ・グループ・クエリ・マスク・レジスタの現在の値を読み出すために使用される。ＭＦＣ読み出しタグ・グループ・クエリ・マスク・チャンネルの詳細を図２２に示す。このチャンネルを読み出すと、ＭＦＣ書き込みタグ・グループ・クエリ・マスク・チャンネルへ書き込まれた最後のデータを返す。プロキシ・タグ・グループ・クエリ・マスクのソフトウェア・シャドー・コピーを回避し、ＳＰＥコンテキスト退避／復元コマンド動作のために、このチャンネルを使用することができる。このチャンネルは、非ブロッキングであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令がこのチャンネルに送られると、カウントは常に「１」として返される。
【０１１０】
ＭＦＣ書き込みタグ・ステータス更新要求チャンネル
ＭＦＣ書き込みタグ・ステータス更新要求チャンネルは、ＭＦＣタグ・グループ・ステータスがＭＦＣ読み出しタグ・グループ・ステータス・チャンネルにおいて更新される時を制御する。ＭＦＣ書き込みタグ・ステータス更新要求チャンネルの詳細を図２３に示す。
【０１１１】
ＭＦＣ書き込みタグ・ステータス更新要求チャンネルは、ステータスを即時に更新、または条件の発生で更新を指定することができる。条件の発生とは、例えば、イネーブルなＭＦＣタグ・グループ完了が「未処理の処理なし」ステータスを有する場合に更新される、またはすべてのイネーブルなＭＦＣタグ・グループ「未処理の処理なし」ステータスを有するときにのみ更新されるといったことである。このチャンネルへのチャンネル書き込み（ｗｒｃｈ）命令は、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルからのチャンネル読み出し（ｒｄｃｈ）が発生するまでに、発生しなければならない。
【０１１２】
ＭＦＣ書き込みタグ・ステータス更新要求は、タグ・グループ・マスクの設定後、および当該タグ・グループに対するコマンドの発行後に行われなければならない。タグ・グループに対するコマンドがＭＦＣ書き込みタグ・ステータス更新要求を発行する前に完了させて、更新ステータス条件を満たすと、ステータスは待たずに戻る。ＭＦＣ書き込みタグステータス更新要求チャンネルに書き込むことによって最初にステータス更新を要求することをせずにＭＦＣ読み出しタグ・グループ・ステータス・チャンネルから読み出すと、ソフトウェアによって引き起こされるデッドロックという結果となる。
【０１１３】
以前のＭＦＣタグ・ステータス更新要求のキャンセルは、直接更新ステータス要求をＭＦＣ書き込みタグ・ステータス更新要求チャンネルへ発行し、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルに関するカウントを「１」の値が返るまで読み出し、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルから読み出して、所望の不要な結果を破棄および判断することによって行うことができる。
【０１１４】
介在ステータス読み出し要求なしの条件付きの更新要求は、予測できないタグ・ステータスを返すこととなる。予測できない結果を回避するために、ソフトウェア対は、直接更新要求を介して要求キャンセルが行われていなければ、タグ・ステータスへの読み出しを伴うタグ・ステータス更新を要求する。
【０１１５】
特権的ソフトウェアは、このチャンネルについてのカウントを「１」に初期化する。チャンネル書き込み（ｗｒｃｈ）命令がこのチャンネルに対して発行されると、このチャンネルについてのカウントは「０」に設定される。ＭＦＣがタグ・ステータス更新要求を受信すると、カウントは「１」に設定される。このチャンネルは、最大カウント「１」で書き込みブロッキングイネーブルされる。
【０１１６】
ＭＦＣ読み出しタグ・グループ・ステータス・チャンネル
ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルは、最後のタグ・グループ・ステータス更新要求からのタグ・グループのステータスを含む。ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルの詳細を図２４に示す。
【０１１７】
タグ・グループ・ステータス更新の時にイネーブルなタグ・グループのステータスのみが有効である。タグ・グループ・ステータス更新の時にディスエーブルなタグ・グループに対応するビット位置は、「０」に設定される。
【０１１８】
ＭＦＣ書き込みタグ・ステータス更新要求チャンネルは、このチャンネルからの読み出し前に要求されなければならない。それを行わないと、ソフトウェアによって引き起こされるデッドロックという結果となる。
【０１１９】
ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルへ送られたチャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令は、ステータスがまだ使用可能でなければ「０」を、ステータスが使用可能であれば「１」を返す。この命令は、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルが読み出される場合にＳＰＵがストールするのを回避するために使用することができる。ソフトウェアは、このチャンネルについてのカウントを「０」の値に初期化する。このチャンネルは、最大カウント「１」で読み出しブロッキングイネーブルされる。
【０１２０】
ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネル
ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルの詳細を図２５に示す。上述のように、ＭＦＣリスト・コマンドについてのリスト要素は、ストール／通知タグを含む。フラグがリスト要素に設定されている場合には、ＭＦＣは、ＭＦＣリスト・コマンド、すなわち、ＤＭＡリスト・コマンドを実行するのを停止して、このチャンネルのＭＦＣリスト・コマンドのタグ・グループに対応するビットを設定する。また、このチャンネルに関連したカウントが「１」に設定される。ＭＦＣリスト・コマンドは、ＭＦＣ書き込みリスト・ストール／通知タグ確認チャンネルへタグ値を書き込むことによって確認されるまでタグ値を書き込むことによって確認されるまで、ストールされたままでいる。
【０１２１】
ＭＦＣリスト・ストール／通知ファシリティは、ＤＭＡリストの実行がある特定の点に到達した場合にプログラムが通知を受けたい場合に有用である。これは、ストールされたリスト要素に続くリスト要素（転送サイズまたは有効アドレス）をアプリケーションが動的に変更したい場合にも有用である。また、リスト要素は、その転送サイズを「０」に設定することによってスキップすることができる。ハードウェアは、ストール／通知要素を越えてリスト要素を先取りすることができない。
【０１２２】
特権的ソフトウェアは、ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルのカウントを０に初期化する。ソフトウェアは、どのタググループがこのチャンネルの最後の読み出し以降ストールしているかコマンドを有するかを、このチャンネルの内容を再び読み出すことによって判断することができる。チャンネル読み出し（ｒｄｃｈ）命令をこのチャンネルに発行すると、すべてのビットを０にリセットし、このチャンネルに対応するカウントを「０」に設定する。したがって、「１」に設定されたストール／通知フラグを含む未処理のリストと、ストールされたコマンドとがないチャンネル読み出し（ｒｄｃｈ）命令を発行すると、ソフトウェアによって引き起こされるデッドロックという結果となる。
【０１２３】
ストールされているタグ・グループがない場合にこのチャンネル上にチャンネル読み出し（ｒｄｃｈ）命令を発行すると、ストール／通知フラグが設定されたリスト要素が生じるまで、ＳＰＵ実行がストールする結果となる。また、ソフトウェアは、このチャンネルに関連したカウントを読み出して（ｒｃｈｃｎｔ）、ＳＰＵイベント・ファシリティと共に、ストール／通知フラグが設定されたＭＦＣリスト要素が生じるときを判断するために使用することができる。ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルへ送られたチャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令は、このチャンネルの最後の読み出し以降新たにストールされたＭＦＣリスト・コマンドがない場合は、「０」を返す。このチャンネルは、読み出しブロッキングであり、最大カウント「１」を有する。
【０１２４】
ＭＦＣ書き込みリスト・ストール／通知タグ確認チャンネル
ＭＦＣ書き込みリスト・ストール／通知タグ確認チャンネルの詳細を図２６に示す。ＭＦＣ書き込みリスト・ストール／通知タグ確認チャンネルは、ストール／通知フラグが設定されたリスト要素でストールされているＭＦＣリスト・コマンドを含むタグ・グループを受け取り確認するために使用される。ＭＦＣタグ・グループをこのチャンネルに書き込むことによって、タグ・グループは確認される。書き込みの後、このチャンネルに書き込まれた値と一致するタグ・グループのすべてのストールされたＭＦＣリスト・コマンドが再開される。
【０１２５】
ＭＦＣリスト・ストール／通知ファシリティは、ＤＭＡリストの実行がある特定の点に到達した場合にプログラムが通知を受けたい場合に有用である。これは、ストールされたリスト要素に続くリスト要素（転送サイズまたは有効アドレス）をアプリケーションが動的に変更したい場合にも有用である。また、リスト要素は、その転送サイズを「０」に設定することによってスキップすることができる。ハードウェアは、ストール／通知要素を越えてリスト要素を先取りすることができない。
【０１２６】
ストール／通知状態によって現在ストールされていないタグ・グループを確認することは、定義されていない。そうすると、ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネル内の無効なステータスという結果となる。整合性のために、この状態は、ノー・オペレーション（ｎｏ−ｏｐ）として扱われる。
【０１２７】
このチャンネルは、非ブロッキング・チャンネルであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令をこのチャンネルへ送る度に、カウントは常に「１」として返される。
【０１２８】
ＭＦＣ読み出しアトミック・コマンド・ステータス・チャンネル
ＭＦＣ読み出しアトミック・コマンド・ステータス・チャンネルの詳細を図２７に示す。ＭＦＣ読み出しアトミック・コマンド・ステータス・チャンネルは、最後に完了した直接ＭＦＣアトミック更新コマンドのステータスを含む。アトミック・コマンドとは、ＭＦＣ・ＳＰＵキュー内の他のコマンドを待たずに実行され、かつ、ＭＦＣ・ＳＰＵキュー内の他のコマンドとは独立して実行されるコマンドである。ＭＦＣによってサポートされているアトミック・コマンドは、ｇｅｔｌｌａｒ（ｇｅｔ  ｌｏｃｋ  ｌｉｎｅ  ｒｅｓｅｒｖｅｒ）、ｐｕｔｌｌｃ（ｐｕｔ  ｌｏｃｋ  ｌｉｎｅ  ｃｏｎｄｉｔｉｏｎａｌ）、ｐｕｔｌｌｕｃ（ｐｕｔ  ｌｏｃｋ  ｌｉｎｅ  ｕｎｃｏｎｄｉｔｉｏｎａｌ）、ｐｕｔｑｌｌｕｃ（ｐｕｔ  ｑｕｅｕｅｄ  ｌｏｃｋ  ｌｉｎｅ  ｕｎｃｏｎｄｉｔｉｏｎａｌ）の４つである。これらのコマンドは、「ロック」を解除するためにソフトウェアによって従来使用されたキャッシュ可能な記憶命令と同様の機能を行う。ｐｕｔｌｌｕｃおよびｐｕｔｑｌｌｕｃコマンドの違いは、ｐｕｔｑｌｌｕｃコマンドは、ＭＦＣ・ＳＰＵコマンド・キュー内の他のＭＦＣコマンドの後ろにタグ付けまたはキューイングされるが、ｐｕｔｌｌｕｃコマンドは、即座に実行される点である。
【０１２９】
ｐｕｔｑｌｌｕｃコマンドはタグ付けされて、黙示のタグ別フェンスを有するので、ＭＦＣ・ＳＰＵコマンド・キュー内に既にある同じタグ・グループ内のすべての他のコマンドに対して命令される。ｇｅｌｌａｒ，ｐｕｔｌｌｃ，およびｐｕｔｌｌｕｃコマンドはタグ付けされていないので、これらは即座に実行される。ｇｅｌｌａｒ，ｐｕｔｌｌｃ，およびｐｕｔｌｌｕｃコマンドは即座に実行されるが、それでも、これらのコマンドは、ＭＦＣ・ＳＰＵコマンド・キュー内の使用可能なスロットを必要とする。ＭＦＣ・ＳＰＵコマンド・キュー内での他のコマンドとの順序付けは想定されてはならない。各ｇｅｌｌａｒ，ｐｕｔｌｌｃ，およびｐｕｔｌｌｕｃコマンドの発行後、ソフトウェアは、ＭＦＣ読み出しアトミック・コマンド・ステータス・チャンネルからの読み出しを発行して、コマンドの完了を検証しなければならない。直接アトミック・コマンドを発行する前にチャンネル読み出し（ｒｄｃｈ）命令をこのチャンネルに発行すると、ソフトウェアによって引き起こされるデッドロックという結果となる。
【０１３０】
ソフトウェアは、このチャンネルに関連したチャンネル・カウント（ｒｃｈｃｎｔ）を読み出して、即座のアトミックＭＦＣコマンドが完了したかどうかを判断することができる。「０」の値が返る場合には、即座のアトミックＭＦＣコマンドは完了していない。「１」の値が返る場合には、即座のアトミックＭＦＣコマンドは完了しており、このチャンネルを読み出す（ｒｄｃｈ）ことによって、ステータスを使用できる。
【０１３１】
ＭＦＣ読み出しアトミック・コマンド・ステータス・チャンネルからの読み出し（ｒｄｃｈ）の後には、即座のアトミックＭＦＣコマンドが常に続かなくてはならない。ＭＦＣ読み出しアトミック・コマンド・ステータス・チャンネルからの介在読み出しをすることなく複数のアトミックＭＦＣコマンドを行うと、誤ったステータスという結果となる。
【０１３２】
特権的ソフトウェアは、このチャンネルのカウントを「０」に初期化する。このチャンネルは、最大カウント「１」の読み出しブロッキングである。このチャンネルの内容は、読み出されるとクリアされる。後続の即座のＭＴＣアトミック更新コマンドは、先行するＭＦＣコマンドの状態を上書きする。
【０１３３】
上記のＭＦＣタグ・グループ・ステータス・チャンネルは、タグ・グループのステータスの判断を促進すると共に、ＭＦＣ・ＤＭＡリスト・コマンド完了を判断するために使用される。タグ・グループのステータスを判断するための以下の３つの基本的な手順がサポートされている。すなわち、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルをポーリングすることと、タグ・グループ更新を待つことまたはイベントを待つことと、タグ・グループ・ステータス更新イベントに割り込むことである。ＭＦＣコマンドの完了およびＭＦＣコマンドのグループの完了についてのポーリングのための基本的な手順は、図２８に示すとおりである。
【０１３４】
図２８に示すように、いずれの保留タグ・ステータス更新要求もクリアされる（ステップ１０１０）。これは、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルに０を書き込み、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルに関連したチャンネル・カウントを「１」の値が返るまで読み出し、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルを読み出してタグ・ステータス・データを廃棄することによって達成されてもよい。
【０１３５】
当該タグ・グループは、その後、ＭＦＣ書き込みタグ・グループ・クエリ・マスク・チャンネルに適切なマスク・データを書き込む（ステップ１０２０）。その後、例えば、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルに「０」の値を書き込むことによって、直接タグステータス更新が要求される（ステップ１０３０）。
【０１３６】
その後、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルの読み出しが行われる（ステップ１０４０）。返されるデータは、タグ・グループ・マスクを適用した状態の各タグ・グループの現在のステータスである。当該タグ・グループの追加があるかどうかの判断が行われる（ステップ１０５０）。追加があれば、動作はステップ１０３０に戻る。相でなければ、動作は終了する。
【０１３７】
タグ・グループ更新またはイベント（１つ以上のタグ・グループ完了）を待つための基本的な手順を図２９に示す。図示のように、動作は、いずれの保留タグ・ステータス更新要求もクリアすることによって開始する（ステップ１１１０）。これは、例えば、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルに「０」を書き込み、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルに関連したチャンネル・カウントを「１」の値が返るまで読み出し、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルを読み出してタグ・ステータス・データを廃棄することによって達成されてもよい。
【０１３８】
条件付タグステータス更新は、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルに「０１」または「１０」の値を書き込むことによって要求される（ステップ１１２０）。「０１」の値は、タグ・グループ更新内の任意のタグ・グループの完了を指定する。「１０」の値は、すべてのイネーブルなタグ・グループはＳＰＵタグ・グループステータス更新という結果になるように干渉しなければならないということを指定する。
【０１３９】
その後、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルを読み出して、ステップ１１２０において指定された特定のタグ・イベントを待つ（ステップ１１３０）。この読み出しにより、ステップ１１２０において指定された条件が満たされるまでＳＰＵの実行がストールする。代わりに、特定のタグ・イベントのためのポーリングまたは待ちのためのＭＦＣ読み出しタグ・グループ・ステータス・チャンネルに関連したカウントの読み出しが行われてもよい（ステップ１１３２）。
【０１４０】
返ってきたカウントが「１」の値を有するかどうかの判断が行われる（ステップ１１４０）。もしそうでなければ、動作はステップ１１３２へ戻る。カウントが「１」である場合には、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルを読み出して、１つのタグ・グループまたは複数のタグ・グループが完了するかどうかを判断する（ステップ１１５０）。その後、動作は終了する。
【０１４１】
条件付タグ・イベントを待つこと、またはそれをポーリングすることの代わりとしては、ＳＰＵイベント・ファシリティを使用することが挙げられる。この手順は、典型的には、アプリケーションが複数のイベントのうちの１つが生じるのを待っているか、コマンド完了を待っている間に他のワークを行うことができる場合に使用される。この手順は、図３０に示すとおりである。
【０１４２】
図３０に示すように、任意の保留タグ・ステータス更新要求がクリアされる（ステップ１２１０）。上述のように、これは、例えば、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルに「０」を書き込み、ＭＦＣ書き込みタグ・ステータス更新要求チャンネルに関連したチャンネル・カウントを「１」の値が返るまで読み出し、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルを読み出してタグ・ステータス・データを廃棄することによって達成されてもよい。
【０１４３】
１つのタグ・グループまたは複数のタグ・グループを選択する（ステップ１２２０）。ＳＰＵ書き込みイベント確認チャンネルに「１」の値を書き込む（ｗｒｃｈ）ことによって、いずれの保留タグ・ステータス更新イベントもクリアする（ステップ１２３０）。ＭＦＣタグ・グループ・ステータス更新イベントを、ＳＰＵ書き込みイベント・マスク・チャンネルに「１」を書き込むことによって、アンマスクする（ステップ１２４０）。その後、ＳＰＵ読み出しイベント・ステータス・チャンネルを読み出して、イネーブルなイベントが生じるのを待つ（ステップ１２５０）。この読み出しにより、イネーブルなイベントが生じるまで、ＳＰＵの実行はストールする。代わりに、ＳＰＵ読み出しイベント・ステータス・チャンネルを読み出して、カウントが「１」として返るまで、特定のタグ・イベントをポーリングまたは待ってもよい。
【０１４４】
ＳＰＵ読み出しイベント・ステータス・チャンネルを読み出して、イネーブルなイベントが生じたかどうかについての判断が行われる（ステップ１２６０）。生じていなかった場合、動作はステップ１２５０へ戻る。イネーブルなイベントが生じた場合は、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルを読み出して、どのタグまたはタグ・グループがイベントを生じさせたかを判断する（ステップ１２７０）。その後、動作は終了する。
【０１４５】
ＭＦＣ・ＤＭＡリスト・コマンドがストール／通知フラグが設定されたリスト要素に到達したかを判断するための３つの基本的な手順がサポートされている。すなわち、ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルをポーリングすることと、ＭＦＣ・ＤＭＡリスト・コマンド・ストール／通知イベントを待つことと、ＭＦＣ・ＤＭＡリスト・コマンド・ストール／通知イベントに割り込むことである。ＭＦＣ・ＤＭＡリスト・コマンドがストール／通知フラグが設定されたリスト要素に到達したかを判断するためのポーリングのための基本的な手順は、図３１に示すとおりである。
【０１４６】
図３１に示すように、動作は、ストール／通知フラグが設定されたリスト要素を有するＭＦＣ・ＤＭＡリスト・コマンドの発行によって開始する（ステップ１３１０）。ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルに関連したカウントを、「１」の値が返るまで読み出す（ｒｃｈｃｎｔ）（ステップ１３２０）。「１」という値が返る場合（ステップ１３３０）、ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルを読み出す（ｒｄｃｈ）（ステップ１３４０）。返ったデータは、このチャンネルの最終読み出し以降ストール／通知フラグが設定されたリスト要素に到達した各タググループの現在のステータスである。
【０１４７】
１つのタグ・グループまたは複数の当該タグ・グループがストール／通知フラグが設定されたリスト要素に到達したかどうかについての判断がなされる（ステップ１３５０）。到達していなければ、タググループまたは複数の当該タグ・グループがストール／通知フラグが設定されたリスト要素に到達するまで、動作はステップ１３４０へ戻る。
【０１４８】
１つのタグ・グループまたは複数の当該タグ・グループがストール／通知フラグが設定されたリスト要素に到達した場合には、ＭＦＣ書き込みリスト・ストール／通知タグ確認チャンネルに、ストールしたタグ・グループに対応するタグ・グループ番号を書き込んで（ｗｒｃｈ）、ＭＦＣ・ＤＭＡリスト・コマンドを再開する（ステップ１３６０）。その後、動作は停止する。
【０１４９】
ストール／通知フラグが設定されたリスト要素に到達するためにＭＦＣ・ＤＭＡリスト・コマンドを待つ基本的な手順は、図３２に示すとおりである。図示のように、動作は、ストール／通知フラグが設定されたリスト要素を有するＭＦＣ・ＤＭＡリスト・コマンドが発行されることで開始する（ステップ１４１０）。ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルの読み出し（ｒｄｃｈ）が行われる（ステップ１４２０）。返されたデータは、このチャンネルの最終読み出し以降のストール／通知フラグが設定されたリスト要素に到達した各タグ・グループの現在のステータスである。この読み出しにより、ＭＦＣ・ＤＭＡリスト・コマンドがストール／通知フラグが設定されたリスト要素に到達するまで、ＳＰＵはストールする。
【０１５０】
１つのタグ・グループまたは複数の当該タグ・グループがストール／通知フラグが設定されたリスト要素に到達したかどうかについての判断がなされる（ステップ１４３０）。対応ビットが、返りデータに設定される。読み出し毎にビットがリセットされるので、ソフトウェアは、複数のタグ・グループがストールするのを待つ間に、タグ・グループの蓄積を行う。
【０１５１】
到達していなければ、単数のタグ・グループまたは複数の当該タグ・グループがストール／通知フラグが設定されたリスト要素に到達するまで、動作はステップ１４２０に戻る。そうでなければ、ＭＦＣ書き込みリスト・ストール／通知タグ確認チャンネルに対して、ストールされたタグ・グループに対応するタグ・グループ番号の書き込み（ｗｒｃｈ）が行われて、ＭＦＣ・ＤＭＡリスト・コマンドを再開させる（ステップ１４４０）。
【０１５２】
ストール／通知タグ・グループ・ステータスを待つこと、またはそれをポーリングすることの代わりとしては、ＳＰＵイベント・ファシリティを使用することが挙げられる。この手順は、典型的には、ＭＦＣ・ＤＭＡリスト・コマンドが実行している間に、他のワークがＳＰＵプログラムによって事項できる場合に使用される。この手順は、例えば、図３３にその概略を示すとおりである。
【０１５３】
図３３に示すように、手順は、どの保留ＭＦＣ・ＤＭＡリスト・コマンド・ストール／通知イベントもクリアすることによって開始する（ステップ１５１０）。これは、例えば、ＳＰＵ書き込みイベント確認チャンネルに「１」の値を書き込む（ｗｒｃｈ）ことによって達成されてもよい。ＭＦＣ・ＤＭＡリスト・コマンド・ストール／通知イベントは、「１」をＳＰＵ書き込みイベント・マスク・チャンネルのＳｎビットに書き込むことによってイネーブルされる（１５２０）。ストール／通知フラグが設定されたリスト要素を有するＭＦＣ・ＤＭＡリスト・コマンドが発行される（ステップ１５３０）。
【０１５４】
イネーブルなイベントが生じるのを待つために、ＳＰＵ読み出しイベント・ステータス・チャンネルからの読み出し（ｒｄｃｈ）が行われてもよい（１５４０）。この読み出しにより、イネーブルなイベントが生じるまでＳＰＵの実行がストールされる。代わりに、カウントが「１」に戻るまで特定のタグ・イベントをポーリングするために、ＳＰＵ読み出しイベント・ステータス・チャンネルに関連したカウントの読み出し（ｒｃｈｃｎｔ）が行われてもよい。
【０１５５】
イネーブルなイベントが生じたかどうかについての判断が行われる（ステップ１５５０）。生じていない場合には、動作はステップ１５４０に戻る。イネーブルなイベントが生じた場合には、ＤＭＡリスト・ストール／通知イベントが生じているかどうかについての判断が行われる（ステップ１５６０）。ＤＭＡリスト・ストール／通知イベントが生じていない場合には、動作はステップ１５４０に戻る。
【０１５６】
ＤＭＡリスト・ストール／通知イベントが生じている場合には、ＭＦＣ読み出しリストストール／通知タグ・ステータス・チャンネルからの読み出しが行われて、どの１つのタグ・グループまたは複数のグループがイベントを生じさせたかを判断する（ステップ１５７０）。ＭＦＣ書き込みリスト・ストール／通知タグ確認チャンネルに対して、ストールされたタグ・グループに対応するタグ・グループ番号の書き込み（ｗｒｃｈ）が行われて、ＭＦＣ・ＤＭＡリスト・コマンドを再開させる（ステップ１５８０）。
【０１５７】
ＭＦＣ書き込みマルチソース同期要求チャンネル
ＭＦＣ書き込みマルチソース同期要求チャンネルの詳細を図３４に示す。ＭＦＣ書き込みマルチソース同期要求チャンネルは、ＭＦＣマルチソース同期ファシリティの一部であり、ＭＦＣに対して、関連ＭＦＣへ送られた未処理の転送を追跡することを開始させる。ＭＦＣマルチソース同期ファシリティは、プロセッサまたは装置がメイン記憶アドレスドメインから同期を制御できるようにするＭＦＣマルチソース同期レジスタと、ＳＰＵがローカル記憶アドレスドメインから同期を制御できるようにするＭＦＣ書き込みマルチソース同期要求チャンネル（ＭＦＣ＿ＷｒＭＳＳｙｎｃＲｅｑ）とを含む。
【０１５８】
同期は、ＭＦＣ書き込みマルチソース同期要求チャンネルへの書き込みによって要求されてもよい。要求された同期が完了すると、チャンネル・カウントは「１」に設定し戻され、このチャンネルに書き込まれたデータは無視される。このチャンネルに対する第２の書き込みにより、ＳＰＵは、第１の書き込みによって追跡された未処理の転送が完了するまでストールする結果となる。
【０１５９】
ＭＦＣ書き込みマルチソース同期要求チャンネルを使用するには、プログラムが、ＭＦＣ書き込みマルチソース同期要求チャンネルに対して書き込みを行い、その後、ＭＦＣ書き込みマルチソース同期要求チャンネルが使用可能になるのを待つ。すなわち、チャンネル・カウントが「１」に設定し戻されるのを待つ。ソフトウェアは、このチャンネルについてのカウントを「１」の値に初期化する。このチャンネルは、最大カウント「１」で書き込みブロッキング・イネーブルされる。
【０１６０】
メールボックス・ファシリティ
ＭＦＣとの通信のためのチャンネルに加えて、本発明のチャンネル・インターフェースは、ＳＰＵにおいて提供されるメールボックス・ファシリティとの通信のためのチャンネルをさらに提供する。ＭＦＣは、ＳＰＵと他のプロセッサおよび装置との間のメールボックス・キューのセットを提供する。各メールボックス・キューは、割り当てられたＳＰＵチャンネルと、対応のＭＭＩＯレジスタとを有する。ＳＰＵソフトウェアは、ＳＰＵチャンネル命令を使用してメールボックス・キューをアクセスする。他のプロセッサおよび装置は、ＭＭＩＯレジスタのうちの１つを使用してメールボックス・キューをアクセスする。キューに加えて、ＭＦＣは、キュー・ステータスと、メールボックス割り込みと、メールＳＰＵイベント通知とをメールボックス用に提供する。ＭＭＩＯレジスタ、チャンネル、ステータス、割り込み、メールボックス・キュー、およびイベントを総称して、「メールボックス・ファシリティ」と称する。上述のように、メールボックス・ファシリティは、図２のＭＦＣレジスタ・ユニット２４０内に提供される。
【０１６１】
ＳＰＵから他のプロセッサまたは他の装置へ情報を送るために、ＭＦＣによって２つのメールボックス・キュー、すなわち、ＳＰＵアウトバウンド・メールボックス・キューと、ＳＰＵアウトバウンド割り込みメールボックス・キューとが提供される。これらのメールボックス・キューは、短いメッセージをＰＰＥへ送るためのものである（例えば、復帰コードまたはステータス）。チャンネル書き込み（ｗｒｃｈ）命令を使用してＳＰＵによってこれらのキューのうちの１つに書き込まれたデータは、対応するＭＭＩＯレジスタを読み出すことによって、どのプロセッサまたは装置にも使用可能である。
【０１６２】
ＳＰＵ書き込みアウトバウンド・割り込みメールボックス・チャンネルへ送られた書き込み（ｗｒｃｈ）命令によっても、システム内のプロセッサまたは他の装置へ割り込みを送ることができる。これらのキューのいずれか（ＳＰＵアウトバウンド・メールボックス・キューまたはＳＰＵアウトバウンド割り込みメールボックス・キュー）からのＭＭＩＯ読み出しによって、ＳＰＵイベントを設定することができ、それによってＳＰＵ割り込みが生じる。
【０１６３】
ＳＰＵへ情報を送るために、外部プロセッサまたは他の装置のいずれかに対して、１つのメールボックス・キュー、すなわち、ＳＰＵインバウンド・メールボックス・キューが提供される。このメールボックス・キューは、ＰＰＥによって書き込まれるものである。しかしながら、他のプロセッサ、ＳＰＵ、または他の装置がこのメールボックス・キューを使用してもよい。ＭＭＩＯ書き込みを使用してプロセッサまたは他の装置によってこのキューに書き込まれるデータは、ＳＰＵ読み出しインバウンド・メールボックス・チャンネルを読み出すことによって、ＳＰＵが使用可能である。ＳＰＵインバウンド・メールボックス・レジスタへのＭＭＩＯ書き込みによって、ＳＰＵイベントを設定することができ、それによってＳＰＵ割り込みが生じる。
【０１６４】
ＳＰＵアウトバウンド割り込みメールボックス・レジスタは、対応のＳＰＵアウトバウンド・メールボックス・キューから３２ビットのデータを読み出すために使用される。ＳＰＵアウトバウンド割り込みメールボックス・レジスタは、ＳＰＵアウトバウンド・メールボックス・キューへデータを書き込むための対応ＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルを有する。ＳＰＵアウトバウンド・メールボックス・キューへ送られたチャンネル書き込み（ｗｒｃｈ）命令は、当該命令内で指定された３２ビットのデータを、他のプロセッサまたは他の装置が読み出すことができるように、ＳＰＵアウトバウンド・メールボックス・キューへロードする。ＳＰＵアウトバウンド・メールボックス・キューが満杯の場合には、ＳＰＵは、このメールボックス・レジスタからのＭＭＩＯ読み出しが生じるまで、このキューへ送られるチャンネル書き込み（ｗｒｃｈ）命令でストールする。
【０１６５】
このレジスタのＭＭＩＯ読み出しは、ＳＰＵによって書き込まれた順序で情報を常に返す。空のＳＰＵアウトバウンド・メールボックス・キューからの読み出しで返された情報は、定義されていない。ＳＰＵアウトバウンド・メールボックス・キュー内のエントリの数（またはキュー深度）は、実施に依存する。
【０１６６】
ＳＰＵメールボックス・ステータス・レジスタのＭＭＩＯ読み出しは、メールボックス・キューのステータスを返す。ＳＰＵアウトバウンド・メールボックス・キュー内の有効なキュー・エントリの数は、ＳＰＵメールボックス・ステータス・レジスタのＳＰＵ＿Ｏｕｔ＿Ｍｂｏｘ＿Ｃｏｕｎｔフィールド内に与えられる。ＳＰＵメールボックス・ステータス・レジスタのＭＭＩＯ読み出しは、保留ＳＰＵアウトバウンド・メールボックス使用可能イベントを設定する。メールボックス・キューに残っているデータ量が実施に依存する閾値を下回り、この条件がイネーブル（すなわち、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｌｅ］が「１」に設定される）の場合、ＳＰＵ読み出しイベント・ステータス・チャンネルが更新され（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｌｅ］が「１」に設定される）、そのチャンネル・カウントが「１」に設定される。これにより、ＳＰＵアウトバウンド割り込みメールボックス使用可能イベントが生じる。
【０１６７】
ＳＰＵインバウンド・メールボックス・レジスタは、対応のＳＰＵインバウンド・メールボックス・キューへ３２ビットのデータを書き込むために使用される。ＳＰＵインバウンド・メールボックス・キューは、キューからデータを読み出すための対応ＳＰＵ読み出しインバウンド・メールボックス・チャンネルを有する。ＳＰＵ読み出しインバウンド・メールボックス・チャンネルのチャンネル読み出し（ｒｄｃｈ）命令は、チャンネル読み出し（ｒｄｃｈ）命令によって指定されたＳＰＵレジスタにＳＰＵインバウンド・メールボックス・キューからの３２ビットのデータをロードする。ＳＰＵは、空のメールボックスから読み出すことはできない。ＳＰＵインバウンド・メールボックス・キューが空の場合には、ＳＰＵは、メールボックスにデータが書き込まれるまで、このチャンネルに対するチャンネル読み出し（ｒｄｃｈ）命令でストールする。このチャンネルに対するチャンネル読み出し（ｒｄｃｈ）命令は、ＰＰＥまたは他のプロセッサまたは装置によって書き込まれた順序で情報を常に返す。
【０１６８】
キュー内のエントリの数（またはキュー深度）は、実施に依存する。ＳＰＵメールボックス・ステータス・レジスタのＭＭＩＯ読み出しは、メールボックス・キューの状態を返す。ＳＰＵメールボックス・キュー内の使用可能なキュー位置の数は、ＳＰＵメールボックス・ステータス・レジスタのＳＰＵ＿Ｉｎ＿Ｍｂｏｘ＿Ｃｏｕｎｔフィールド（すなわち、ＳＰＵ＿Ｍｂｏｘ＿Ｓｔａｔ［ＳＰＵ＿Ｉｎ＿Ｍｂｏｘ＿Ｃｏｕｎｔ］）内で与えられる。
【０１６９】
ソフトウェアは、ＳＰＵメールボックスをオーバランするのを回避するために、ＳＰＵ＿Ｉｎ＿Ｍｂｏｘへ書き込む前にＳＰＵメールボックス・ステータス・レジスタをチェックする。ＳＰＵインバウンド・メールボックス・レジスタのＭＭＩＯ書き込みにより、保留ＳＰＵメールボックス・イベントが設定される。イネーブル（すなわち、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｍｂｏｘ］＝「１」）の場合は、ＳＰＵ読み出しイベント・ステータス・チャンネルは更新され、そのチャンネル・カウントは「１」に設定されて、それにより、ＳＰＵインバウンド・メールボックス使用可能イベントが生じる。
【０１７０】
ＳＰＵメールボックス・ステータス・レジスタは、ＳＰＵと、対応するＳＰＥ内のＰＰＥとの間のメールボックス・キューの現在の状態を含む。このレジスタを読み出すことは、メールボックス・キューの状態に影響を与えない。
【０１７１】
ＳＰＵメールボックス・チャンネル
上述のように、ＭＦＣによって提供されるメールボックス・ファシリティは、ＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルと、ＳＰＵ書き込みアウトバウンド割り込みメールボックス・チャンネルと、ＳＰＵ読み出しインバウンド・メールボックス・チャンネルとを含む複数のＳＰＵメールボックス・チャンネルを含む。これらのＳＰＵメールボックス・チャンネルは、ブロッキング、すなわち、チャンネルが満杯の場合にＳＰＵをストールする（書き込みブロッキング）、または、データが使用可能でない場合にＳＰＵをストールする（読み出しブロッキング）として定義される。チャンネルのブロッキング方法は、実行する他のワークがアプリケーションにない場合に、電力節約のために非常に有利である。元来、プロセッサは、空間が開放されるまで、またはデータが使用可能となるまで、低電力状態に置かれてもよい。
【０１７２】
これらのチャンネルはブロッキングであるので節電上の利点を得る一方で、これらのチャンネルをアクセスすると、ＳＰＵが無期限にストールしてしまう場合がある。ソフトウェアは、後述のようにＳＰＵイベント・ファシリティを使用して、またはメールボックス・チャンネルに関連したチャンネル・カウントを読み出すことによって、ＳＰＵのストールを回避することができる。
【０１７３】
ＳＰＵ書き込みアウトバウンド・メールボックス・チャンネル
図３５は、本発明の例示的な一実施形態に係るＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルの詳細を示す。このチャンネルへ送られたチャンネル書き込み（ｗｒｃｈ）命令は、ＳＰＵ書き込みアウトバウンド・メールボックス・キューへデータを書き込む。このチャンネルにＳＰＵによって書き込まれたデータは、ＳＰＵアウトバウンド・メールボックス・レジスタのＭＭＩＯ読み出しのために使用可能である。また、このチャンネルへのチャンネル書き込み（ｗｒｃｈ）命令により、関連チャンネル・カウントは「１」デクリメントされる。満杯のＳＰＵ書き込みアウトバウンド・メールボックス・キューへの書き込みは、ＳＰＵ書き込みアウトバウンド・メールボックス・レジスタが読み出されてＳＰＵ書き込みアウトバウンド・メールボックス・キューが開放されるまで、ＳＰＵの実行をストールさせる。
【０１７４】
ストール状態を回避するために、このチャンネルに関連したチャンネル・カウントを読み出して、チャンネル書き込みを発行する前に、ＳＰＵ書き込みアウトバウンド・メールボックス・キュー内にスロットがあることを保証することができる。代わりに、ＳＰＵアウトバウンド・メールボックス使用可能イベントを使用して、ＳＰＵ書き込みアウトバウンド・メールボックス・キュー内のスロットの使用可能性を、満杯と判断した場合に知らせることもできる。
【０１７５】
ＳＰＵ書き込みアウトバウンド・メールボックス・キューが満杯の場合は、このチャンネルに関連したチャンネル・カウントの読み出しは「０」の値を返す。非ゼロの値は、ＳＰＵ書き込みアウトバウンド・メールボックス・キュー内の空いている３２ビットワード数を示す。
【０１７６】
特権的ソフトウェアは、ＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルのカウントをＳＰＵ書き込みアウトバウンド・メールボックス・キューの深度に初期化する。このチャンネルは、書き込みブロッキングである。このチャンネルについての最大カウントは、実施に依存しており、ＳＰＵ書き込みアウトバウンド・メールボックス・キューの深度（すなわち、使用可能なスロット数）でなければならない。
【０１７７】
ＳＰＵ書き込みアウトバウンド割り込みメールボックス・チャンネル
図３６は、本発明の例示的な一実施形態に係るＳＰＵ書き込みアウトバウンド割り込みメールボックス・チャンネルの詳細を示す。このチャンネルへのチャンネル書き込み（ｗｒｃｈ）命令は、ＳＰＵ書き込みアウトバウンド割り込みメールボックス・キューへデータを書き込む。このチャンネルにＳＰＵによって書き込まれたデータは、ＳＰＵアウトバウンド割り込みメールボックス・レジスタのＭＭＩＯ読み出しに使用可能となる。
【０１７８】
また、このＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルへのチャンネル書き込み（ｗｒｃｈ）命令により、関連チャンネル・カウントは「１」デクリメントされる。満杯のＳＰＵ書き込みアウトバウンド割り込みメールボックス・キューへの書き込みは、ＳＰＵアウトバウンド割り込みメールボックス・レジスタが読み出されて、ＳＰＵ書き込みアウトバウンド割り込みメールボックス・キューを開放するまで、ＳＰＵの実行をストールさせる。
【０１７９】
ストール状態を回避するために、このチャンネルに関連したチャンネル・カウントを読み出して、チャンネル書き込みを発行する前に、ＳＰＵ書き込みアウトバウンド割り込みメールボックス・キュー内にスロットがあることを保証することができる。代わりに、ＳＰＵアウトバウンド割り込みメールボックス使用可能イベントを使用して、ＳＰＵ書き込みアウトバウンド割り込みメールボックス・キュー内のスロットの使用可能性を、満杯と判断した場合に知らせることもできる。また、ＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルへのチャンネル書き込み（ｗｒｃｈ）命令により、プロセッサまたは他の装置へ割り込みが送られる。割り込みおよび左記に発行されたＭＦＣコマンドの順序はない。
【０１８０】
ＳＰＵ書き込みアウトバウンド割り込みメールボックス・キューが満杯の場合に、このチャンネルに関連したチャンネル・カウントの読み出しは、「０」の値を返す。非ゼロのカウント値は、このキュー内の空いている３２ビットワード数を示す。
【０１８１】
特権的ソフトウェアは、このチャンネルのカウントをＳＰＵ書き込みアウトバウンド割り込みメールボックス・キューの深度に初期化する。このチャンネルは、書き込みブロッキングである。このチャンネルについての最大カウントは、実施に依存しており、ＳＰＵ書き込みアウトバウンド割り込みメールボックス・キューの深度（すなわち、使用可能なスロット数）でなければならない。
【０１８２】
ＳＰＵ読み出しイントバウンド・メールボックス・チャンネル
図３７は、本発明の例示的な一実施形態に係るＳＰＵ読み出しインバウンド・メールボックス・チャンネルの詳細を示す。このチャンネルからの読み出しは、ＳＰＵ読み出しインバウンド・メールボックス・キュー内の次のデータを返す。プロセッサまたは装置がＳＰＵ読み出しインバウンド・メールボックス・レジスタへの書き込みを発行することによって、ＳＰＵ読み出しインバウンド・メールボックス・キューにデータが置かれる。
【０１８３】
ＳＰＵ読み出しインバウンド・メールボックス・チャンネルからの読み出しにより、関連チャンネル・カウントは「１」デクリメントされる。空のメールボックスの読み出しは、ＳＰＵ読み出しインバウンド・メールボックス・レジスタに書き込まれてＳＰＵ読み出しインバウンド・メールボックス・キューにデータ項目が置かれるまで、ＳＰＵの実行をストールさせる。ストール状態を回避するために、このチャンネルに関連したチャンネル・カウントを読み出して、チャンネル読み出しを発行する前に、ＳＰＵ読み出しインバウンド・メールボックス・キュー内にデータがあることを保証することができる。代わりに、ＳＰＵインバウンド・メールボックス使用可能イベントを使用して、ＳＰＵ読み出しインバウンド・メールボックス・キュー内のデータの使用可能性を知らせることもできる。
【０１８４】
メールボックスが空の場合は、チャンネル・カウント（ｒｃｈｃｎｔ）は「０」の値を返す。ｒｃｈｃｎｔの結果が非ゼロの場合は、メールボックスは、ＰＰＥによって書き込まれたがＳＰＵによって読まれてはいない情報を含む。
【０１８５】
ＳＰＵ読み出しインバウンド・メールボックス・チャンネルのチャンネル・カウントは、特権的ソフトウェアによって「０」に初期化される。最大カウントは、実施に依存する。このチャンネルは、読み出しブロッキングである。
【０１８６】
ＳＰＵ信号通知ファシリティ
ＭＦＣは、システム内の他のプロセッサおよび装置からのＳＰＵに対するバッファ完了フラグのように、信号を送るために使用されるＳＰＵ信号通知ファシリティを提供する。この信号通知ファシリティは、例えば、図２のＭＦＣレジスタユニット２５０内に提供される。
【０１８７】
ＢＰＡは、ＳＰＵ信号通知１と、ＳＰＵ信号通知２という、２つの独立した信号通知ファシリティを提供する。各ファシリティは、１つのレジスタと、１つのチャンネルからなる。すなわち、ＳＰＵ信号通知１レジスタおよびＳＰＵ信号通知１チャンネルと、ＳＰＵ信号通知２レジスタおよびＳＰＵ信号通知２チャンネルである。
【０１８８】
信号は、ＳＰＵが、信号送信コマンドのセットを、信号が送られるＳＰＵに関連した信号通知レジスタの有効アドレスと共に使用することによって、発行される。信号送信コマンドをサポートしていないＰＰＥおよび他の装置は、信号が送られるＳＰＵに関連したＳＰＵ信号通知レジスタへのＭＭＩＯ書き込みを行うことによって、信号コマンドを送ることをシミュレートする。
【０１８９】
各信号通知ファシリティは、１対１の信号方式環境において有用な上書きモードか、多対１の信号方式環境において有用な論理和モードのいずれかにプログラムできる。各チャンネルのモードは、ＳＰＵ構成レジスタ内に設定される。
【０１９０】
信号送信コマンド、または上書きモードにプログラムされたシグナリング・レジスタを対象とするＭＭＩＯを実行すると、関連チャンネルの内容が、信号動作のデータに設定される。また、この実行は、対応チャンネル・カウントを「１」に設定する。論理和モードにおいて、信号動作のデータは、チャンネルの現在の内容との論理和が取られて、対応カウントは、「１」の値に設定される。
【０１９１】
加えて、関連性のないロードを行う場合に、信号通知レジスタを画像の有効アドレスとして使用する。これらの場合に、ＳＰＵ信号通知１レジスタは、６４ビットの有効アドレスの上位３２ビットを含み、ＳＰＵ信号通知２レジスタは、最小桁の３２ビットを含む。ソフトウェアは、関連性のないロード要求の適切な動作のために、上書きモードにおいてＳＰＵ信号通知ファシリティを有しなければならない。
【０１９２】
ＳＰＵシグナリング・チャンネル
ＳＰＵシグナリング・チャンネルは、ＳＰＵ信号通知ファシリティのＰＰＥ部分である。これらは、システム内の他のプロセッサおよび他の装置からの信号を読み出すのに使用される。シグナリング・チャンネルは、最大カウント「１」の読み出しブロッキングとして構成される。チャンネル読み出し（ｒｄｃｈ）命令がこれらのチャンネルのうちの１つに送られ、かつ関連チャンネル・カウントが「１」の場合に、チャンネルの現在の内容および関連カウントは「０」に再設定される。チャンネル読み出し（ｒｄｃｈ）命令は、これらのチャンネルのうちの１つに送られ、チャンネル・カウントは「０」である場合に、処理または動作がＭＭＩＯ書き込みを関連レジスタに対して行うまで、ＳＰＵはストールする。
【０１９３】
ＳＰＵ信号通知チャンネル
図３８は、本発明の例示的な一実施形態に係るＳＰＵ信号通知チャンネルの詳細を示す。信号通知チャンネルは、ＳＰＵ信号通知１または２チャンネルであってもよい。ＳＰＵ信号通知チャンネルへ送られたチャンネル読み出し（ｒｄｃｈ）命令は、信号制御ワード１の３２ビットワードを返し、読み出す際に設定された任意のビットをアトミック的に再設定する。保留中の信号がない場合には、このチャンネルからの読み出しにより、ＳＰＵは、信号が発行されるまでストールする。保留中の信号がない場合には、このチャンネルへ送られたチャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令は「０」を返す。読み出していない信号が保留中の場合には、「１」を返す。
【０１９４】
特権的ソフトウェアは、このチャンネルについてのカウントを「０」の値に初期化する。このチャンネルは、最大カウント「１」で書き込みブロッキングイネーブルされる。
【０１９５】
ＳＰＵデクリメンタ
各ＳＰＵは、３２ビットのデクリメンタを含む。ＭＦＣ制御レジスタ内でイネーブルであれば、「０」に設定されたＭＦＣ＿ＣＮＴＬ［Ｄｈ］が書き込まれる。ＳＰＵデクリメンタは、チャンネル書き込み（ｗｒｃｈ）命令がＳＰＵ書き込みデクリメンタチャンネルへ発行されると開始する。デクリメンタは、後述のプログラム・シーケンスに従って、またはＭＦＣ制御レジスタに「１」に設定されたＭＦＣ＿ＣＮＴＬ［Ｄｈ」が書き込まれる場合に停止する。デクリメンタの現在稼動中のステータスは、ＭＦＣ制御レジスタ（すなわち、ＭＦＣ＿ＣＮＴＬ［Ｄｓ］）において使用可能である。デクリメンタ・イベントは、デクリメンタを停止させるために保留させる必要はない。
【０１９６】
デクリメンタの管理のために、２つのチャンネルが割り当てられる。１つは、デクリメンタ値を設定するためのもので、もう１つは、デクリメンタの現在の内容を読み出すためのものである。デクリメンタ・イベントは、最上位ビット（ビット０）が「０」から「１」へ変更すると生じる。
【０１９７】
ＳＰＵ書き込みデクリメンタ・チャンネル
図３９は、本発明の例示的な一実施形態に係るＳＰＵ書き込みデクリメンタ・チャンネルの詳細を示す。ＳＰＵ書き込みデクリメンタ・チャンネルは、デクリメンタの３２ビット値をロードするために使用される。デクリメンタにロードされた値は、チャンネル書き込み（ｗｒｃｈ）命令と、デクリメンタ・イベントとの間の経過時間を決定する。デクリメンタの最上位ビット（ｍｓｂ）が「０」から「１」変化すると、イベントが生じる。デクリメンタにロードされた値がｍｓｂにおける「０」から「１」への変化を生じさせると、イベントは即座に知らされる。デクリメンタを「０」の値に設定すると、１つ分のデクリメンタ間隔の後のイベントという結果が生じる。
【０１９８】
デクリメンタの状態を適切に退避および復元するためには、デクリメンタは、デクリメンタ値を変更する前に停止されなければならない。以下のシーケンスは、新たなデクリメンタ値を設定するための手順の概略である。
【０１９９】
１．ＳＰＵ書き込みイベント・マスク・チャンネルに書き込んで、デクリメンタ・イベントをディスエーブルにする。
【０２００】
２．ＳＰＵ書き込みイベント確認チャンネルに書き込んで任意の保留イベントを確認してデクリメンタを停止させる。デクリメンタが停止するのは、デクリメンタ・イベントがステップ１でディスエーブルされたからである。
【０２０１】
３．ＳＰＵ書き込みデクリメンタチャンネルに書き込んで、新たなデクリメンタ・カウント値を設定する（注：デクリメンタが開始するのは、ステップ２がデクリメンタを停止していたからである）。
【０２０２】
４．ＳＰＵ書き込みイベント・マスク・チャンネルに書き込んで、デクリメンタ・イベントをイネーブルにする。
【０２０３】
５．タイマが期限切れになるのを待つ。
【０２０４】
このチャンネルは、非ブロッキングであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令がこのチャンネルへ送られる度に、カウントは「１」として常に返される。
【０２０５】
ＳＰＵ読み出しデクリメンタチャンネル
図４０は、本発明の例示的な一実施形態に係るＳＰＵ読み出しデクリメンタ・チャンネルの詳細を示す。ＳＰＵ読み出しデクリメンタ・チャンネルは、３２ビットのデクリメンタの現在の値を読み出すために使用される。デクリメンタ・カウントの読み出しは、デクリメンタの精度に影響を与えない。デクリメンタの連続読み出しは、同じ値を返す。
【０２０６】
このチャンネルは、非ブロッキングであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令がこのチャンネルへ送られる度に、カウントは「１」として常に返される。
【０２０７】
ＳＰＵ状態管理チャンネル
上記に加えて、ＳＰＵ状態管理チャンネルが提供される。これらのＳＰＵ状態管理チャンネルは、ＳＰＵ読み出し・マシン・ステータスチャンネルと、２つの割り込み関連状態チャンネルとを含む。割り込み関連状態チャンネルは、ＳＰＵ書き込み状態退避／復元チャンネルと、ＳＰＵ読み出し状態退避／復元チャンネルとを含む。
【０２０８】
図４１は、本発明の例示的な一実施形態に係るＳＰＵ読み出し・マシン・ステータス・チャンネルの詳細を示す。ＳＰＵ読み出し・マシン・ステータス・チャンネルは、現在のＳＰＵマシン・ステータス情報を含む。このチャンネルは、分離ステータスと、ＳＰＵ割り込みステータスという２つのステータス・ビットを含む。この分離ステータスは、分離または非分離という、ＳＰＵの現在の動作状態を反映している。
【０２０９】
ＳＰＵ割り込みイネーブル・ステータスは、ＳＰＵ割り込みイネーブルの現在の状態を反映している。イネーブルの場合、任意のイネーブルなＳＰＵイベントがあれば、ＳＰＵ割り込みが生成される。
【０２１０】
このチャンネルは、非ブロッキングであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令がこのチャンネルへ送られる度に、カウントは「１」として常に返される。
【０２１１】
ＳＰＵ書き込み状態退避／復元チャンネル
図４２は、本発明の例示的な一実施形態に係るＳＰＵ書き込み状態退避／復元チャンネルの詳細を示す。このチャンネルへの書き込みにより、ＳＰＵ内の状態退避／復元レジスタ０（ＳＲＲ０）の内容が更新される。このチャンネルへの書き込みは、典型的には、入れ子型の割り込みがサポートされる場合に、割り込み状態情報を復元するために使用される。
【０２１２】
このチャンネルは、ＳＰＵ割り込みがイネーブルの場合は書き込まれてはならない。それをおこなうと、ＳＲＲ０の内容が不確かになる。このチャンネルの書き込み後であって、ＳＲＲ０の内容に依存する命令の実行前に、同期命令のチャンネル形式が発行されなければならない。
【０２１３】
このチャンネルは、非ブロッキングであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令がこのチャンネルへ送られる度に、カウントは「１」として常に返される。
【０２１４】
ＳＰＵ読み出し状態退避／復元チャンネル
図４３は、本発明の例示的な一実施形態に係るＳＰＵ読み出し状態退避／復元チャンネルの詳細を示す。このチャンネルの読み出しにより、ＳＰＵ内の状態退避／復元レジスタ０（ＳＲＲ０）の内容が返される。このチャンネルへの読み出しは、典型的には、入れ子型の割り込みがサポートされる場合に、割り込み状態情報を退避するために使用される。
【０２１５】
このチャンネルは、非ブロッキングであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令がこのチャンネルへ送られる度に、カウントは「１」として常に返される。
【０２１６】
ＳＰＵイベント・ファシリティ
図４４および図４５は、本発明の例示的な一実施形態に係るＳＰＵイベント・ファシリティの論理表現を示すブロック図の例である。図４４および図４５に示すように、エッジトリガされたイベントが、ＳＰＵ保留イベント・レジスタ２１１０内の対応ビットを「１」に設定する。ＳＰＵ保留イベント・レジスタ２１１０内のイベントは、チャンネル命令を使用して、ＳＰＵ書き込みイベント確認チャンネル２１１０内の対応ビットに「１」を書き込むことによって確認または再設定される。
【０２１７】
ＳＰＵ保留イベント・レジスタ（Ｐｅｎｄ＿Ｅｖｅｎｔ）２１１０は、内部レジスタである。ＳＰＵ保留イベント・レジスタ２１１０は、ＳＰＵチャンネル・アクセス・ファシリティを使用して読み出すことができる。
【０２１８】
ＳＰＵ読み出しイベント・ステータス・チャンネル２１３０をチャンネル読み出し（ｒｄｃｈ）命令で読み出すと、ＳＰＵ書き込みイベント・マスク・チャンネル２１４０内の値との論理積が取られたＳＰＵ保留イベント・レジスタの値を返す。この昨日は、ＳＰＵプログラムに、イネーブルなイベントの上体のみを提供する一方で、ＳＰＵ保留イベント・レジスタ２１１０は、特権的ソフトウェアに対して、発生したすべてのイベントを見ることができるようにしている。すべてのイベントに対するアクセスには、ＳＰＥコンテキスト退避／復元動作が必要である。
【０２１９】
ＳＰＵ読み出しイベント・ステータス・チャンネル２１３０の内容は、ＳＰＵ書き込みイベント・マスク・チャンネル２１４０に新たな値が書き込まれる場合、または、新たなイベントがＳＰＵ保留イベント・レジスタ２１１０に記録される場合に、変化する。ＳＰＵ読み出しイベント・ステータス・チャンネル２１３０内の「０」から「１」へのビットの変化によって、ＳＰＵ読み出しイベント・ステータス・チャンネル・カウントが「１」インクリメントされる。また、カウントは、ＳＰＵ書き込みイベント確認チャンネル２１２０に書き込みが送られた後にＳＰＵ読み出しイベント・ステータス・チャンネル２１３０内にまだイベントが設定されている場合にもインクリメントする。カウントは、ＳＰＵ読み出しイベント・ステータス・チャンネル２１３０がチャンネル読み出し（ｒｄｃｈ）命令を使用して読み出される場合に、「１」デクリメントされる。カウントは、「１」の値で飽和し、「０」の値を回ってデクリメントされない。ＳＰＵ読み出しイベント・ステータス・チャンネル・カウントが非ゼロの場合、イネーブルであれば、割り込み状態がＳＰＵへ送られる。
【０２２０】
ＳＰＵイベント・チャンネル
ＳＰＵプログラムは、数多くのＳＰＵイベント・チャンネルを使用してイベントを監視してもよい。これらのＳＰＵイベント・チャンネルは、ＳＰＵ読み出しイベント・ステータス・チャンネルと、ＳＰＵ読み出しイベント・マスク・チャンネルと、ＳＰＵ書き込みイベント確認チャンネルとを含む。ＳＰＵ読み出しイベント・ステータス・チャンネルは、ＳＰＵ書き込みイベント・マスク・チャンネル内のイネーブルなすべてのイベントのステータスを含む。ＳＰＵ書き込みイベント確認チャンネルは、イベントのステータスを再設定するために使用され、これは、通常、イベントがＳＰＵプログラムによって処理または記録されたことを示す。イネーブルなイベントがない場合には、ＳＰＵ読み出しイベント・ステータス・チャンネルからの読み出しにより、ＳＰＵプログラムはストールする。
【０２２１】
個々のイベントがＳＰＵプログラムをストールするための同様の方法を有する場合、イベントが生じなければ、ＳＰＵイベント・ファシリティは、ソフトウェアに対して、複数のイベントを探してＳＰＵプログラムに割り込みを生じさせるための方法を提供する。
【０２２２】
ＳＰＵ読み出しイベント・ステータス・チャンネル
図４６は、本発明の例示的な一実施形態に係るＳＰＵ読み出しイベント・ステータス・チャンネルの詳細を示す。ＳＰＵ読み出しイベント・ステータス・チャンネルは、このチャンネルが読み出されたときにＳＰＵ書き込みイベント・マスク・チャンネルによってイネーブルされたすべてのイベントの現在のステータスを含む。ＳＰＵ書き込みイベント・マスク・チャンネルが、イベントはクエリの一部ではないと指定する場合には、その対応位置は、報告されたステータス内の「０」である。
【０２２３】
「０」のチャンネル・カウントを有するＳＰＵ読み出しイベント・ステータス・チャンネルからの読み出しにより、ＳＰＵストールという結果となって、「イベント待ち」機能を提供する。チャンネル・かウント「１」でのこのチャンネルからの読み出しは、任意のイネーブルな保留イベントのステータスを返し、チャンネル・カウントを「０」に設定する。以下の条件の場合には、チャンネル・カウントは「１」に設定される。
【０２２４】
・イベントが発生し、ＳＰＵ書き込みイベント・マスク・チャンネル内の対応マスクが「１」である場合。
【０２２５】
・ＳＰＵ書き込みイベント・マスク・チャンネルに対して、ＳＰＵ保留イベント・レジスタ内の「１」に対応するビット位置に「１」が書き込まれる場合。
【０２２６】
・ＳＰＵ書き込みイベント確認チャンネルの書き込み後、イネーブルなイベントが保留中の場合。
【０２２７】
・特権的ソフトウェアが、ＳＰＵチャンネル・アクセス・ファシリティを使用して、チャンネル・カウントを「１」に設定する場合。
【０２２８】
イネーブルなイベントが発生しなかった場合、ＳＰＵ読み出し・イベント・ステータス・チャンネルのチャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令は、ゼロを返す。ＳＰＵ読み出しイベント・ステータス・チャンネルからイベント・ステータスを読み出す場合に、ＳＰＵがストールするのを回避するために、チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令を使用することができる。
【０２２９】
特権的ソフトウェアは、ＳＰＵ読み出し・イベント・ステータス・チャンネルについてのカウントを「０」に初期化する。チャンネル・カウントは、ＳＰＵチャンネル・アクセス・ファシリティ内のＳＰＵチャンネル・カウント・レジスタを使用して初期化される。ＳＰＵ割り込みがイネーブルの場合（ＳＰＵ＿ＲｄＭａｃｈＳｔａｔ［ＩＥ］が「１」に設定）、非ゼロＳＰＵ読み出し・イベント・ステータス・チャンネル・カウントにより、ＳＰＵに対して割り込みを生じさせることになる。
【０２３０】
ソフトウェアは、以下の２つの場合に、疑似イベントを発生させることができる。
【０２３１】
１．イベントがＳＰＵ読み出しイベント・ステータス・チャンネル・カウントをインクリメントした後であって、ＳＰＵ読み出しイベント・ステータス・チャンネルからイベント・ステータスを読み出す前に、ソフトウェアがイベントを確認またはマスクした場合。この場合には、ＳＰＵ読み出しイベント・ステータス・チャンネルの読み出しは、イベントはもはや存在しないか、またはディスエーブルであることを示すデータを返す。
【０２３２】
２．ＳＰＵ読み出しイベント・ステータス・チャンネルの読み出し前であって、イベントを確認する前に、イネーブルなイベントの割り込み条件をソフトウェアが再設定する場合（例えば、メールボックスからの読み出し）。この場合、イベント・ステータスレジスタの読み出しは、イベントを生成した条件はもはや存在しないがイベントはまだ保留中であることを示すデータを返す。この場合、イベントは依然として確認されなければならない。
【０２３３】
疑似イベントの生成を回避するために、イベントは以下のように処理されなくてはならない。
【０２３４】
・ＳＰＵ読み出しイベント・ステータス・チャンネルを読み出す。
【０２３５】
・処理すべきすべてのイベントについて、ＳＰＵ書き込みイベント確認チャンネルに対応ビットを書き込むことによって、イベントを確認する。
【０２３６】
・イベントを処理する（例えば、メールボックスを読む、タイマを再設定または停止させる、もしくは信号通知レジスタについて読み出す）
【０２３７】
ＳＰＵ書き込みイベント・マスク・チャンネル
図４７は、本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント・マスク・チャンネルの詳細を示す。ＳＰＵ書き込みイベント・マスク・チャンネルは、ＳＰＵ読み出しイベント・ステータス・チャンネルの状態に影響を与える保留イベントを選択する。このチャンネルの内容は、後続のチャンネル書き込みまたはＳＰＵチャンネル・アクセスが生じるまで、保持される。このチャンネルの現在の内容は、ＳＰＵ読み出しイベント・マスク・チャンネルを読み出すことによって、アクセスできる。
【０２３８】
すべてのイベントは、ＳＰＵイベントマスク設定に関わらず、ＳＰＵ保留イベント・レジスタに記録される。チャンネル書き込み（ｗｒｃｈ）命令によってＳＰＵ書き込みイベント確認チャンネルにクリアされるまで、または、特権的ソフトウェアがＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタに新たな値をロードするまでは、イベントは保留のままである。保留イベントは、ディスエーブルになった場合もクリアされる。
【０２３９】
保留イベントは、ディスエーブルされた後にクリアされるが、これはＳＰＵ読み出しイベント・ステータスチャンネルに反映されていない。保留イベントをイネーブルすると、イネーブルであれば、ＳＰＵ読み出しイベント・ステータス・チャンネルの更新およびＳＰＵ割り込みという結果となる。
【０２４０】
このチャンネルは、非ブロッキング・チャンネルであり、関連カウントを有しない。このチャンネルのチャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令は、常に「１」を返す。
【０２４１】
ＳＰＵ読み出しイベント・マスク・チャンネル
図４８は、本発明の例示的な一実施形態に係るＳＰＵ読み出しイベント・マスク・チャンネルの詳細を示す。ＳＰＵ読み出しイベント・マスク・チャンネルは、イベント・ステータス・マスクの現在の値を読み出すために使用される。このチャンネルを読み出すと、ＳＰＵ書き込みイベント・マスク・チャンネルによって書き込まれた最終データを常に返す。このチャンネルは、イベント・ステータス・マスクのソフトウェア・シャドウ・コピーを回避するため、およびＳＰＥコンテキスト退避／復元動作のために、使用することができる。このチャンネルは、非ブロッキングであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令をこのチャンネルへ送る度に、カウントは常に「１」として返される。
【０２４２】
ＳＰＵ書き込みイベント確認チャンネル
図４９は、本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント確認チャンネルの詳細を示す。特定のイベントビットを設定した状態でのＳＰＵ書き込みイベント確認チャンネルへの書き込みは、対応のイベントがソフトウェアによってサービス提供中であることを確認する。確認されたイベントは、再設定および再サンプリングされる。報告はされたが確認はされていないイベントは、確認されるまで、またはＳＰＵチャンネル・アクセス・ファシリティを使用して特権的ソフトウェアによってクリアされるまで、報告が継続される。
【０２４３】
ディスエーブルなイベントは、ＳＰＵ読み出しイベント・ステータス・チャンネルにおいては報告されないが、ＳＰＵ書き込みイベント確認チャンネル内の対応ビットに「１」が書き込まれることによってクリアされるまで、保留のままとなる。ディスエーブルなイベントを確認すると、当該イベントは、報告はされなかったがクリアされる。生じつ前にイベントをクリアすると、ソフトウェアによって引き起こされるデッドロックという結果となる。
【０２４４】
このチャンネルは、非ブロッキングであり、関連カウントを有しない。チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令がこのチャンネルへ送られる度に、カウントは「１」として常に返される。
【０２４５】
ＳＰＵイベント
ハードウェアは、適切なチャンネル・カウント、デクリメンタカウント、またはＳＰＵチャンネル・アクセス動作を検出することによってイベントを判断する。数多くの互いに異なる種類のイベントが、上述のＢＰＡによってサポートされている。例えば、ＭＦＣタグ・グループ・ステータス更新イベントは、ＭＦＣ読み出しタグ・グループ・ステータス・チャンネルについてのカウントが０から非ゼロ値へ変化する場合に設定される。ＭＦＣ・ＤＭＡリスト・コマンド・ストール／通知イベントは、ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルについてのカウントが０から非ゼロ値へ変化する場合に設定される。ＭＦＣ・ＳＰＵコマンド・キュー使用可能イベントは、キューイングされたＭＦＣコマンド操作符号レジスタについてのカウントが０（満杯）から非ゼロ値（満杯でない）へ変化する場合に設定される。ＳＰＵインバウンド・メールボックス使用可能イベントは、ＳＰＵ読み出しインバウンド・メールボックス・チャンネルが０から非ゼロ値へ変化する場合に設定される。
【０２４６】
同様に、ＳＰＵデクリメンタ・イベントは、デクリメンタ・カウントの最上位ビットが０から１に変化する場合に設定される。デクリメンタにロードされた値が最上位ビットにおいて０から１に変化する場合には、イベントが即座に知らされる。デクリメンタ値を０に設定すると、１つ分のデクリメンタ間隔の後のイベントという結果が生じる。
【０２４７】
さらに、ＳＰＵアウトバウンド・メールボックス使用可能イベントは、ＳＰＵ書き込みアウトバウンド割り込みメールボックス・チャンネル・カウントが０から非ゼロの値に変化した場合に設定される。ＳＰＵ信号通知１または２使用可能イベントは、対応するＳＰＵ信号通知チャンネルが０から非ゼロの値に変化した場合に設定される。ロック・ライン予約イベントは、アトミック予約が失われた場合に設定される（後述の「ロック・ライン予約喪失イベント」の項を参照）。特権的アテンション・イベントは、ＳＰＵ特権的制御レジスタがアテンション・イベント要求ビットが１に設定されて書き込まれた場合に設定される（後述の「特権的アテンション・イベント」の項を参照）。マルチソース同期イベントは、ＭＦＣ書き込みマルチソース同期要求チャンネルが０から１の値に変化した場合に設定される。これらのイベントをさらに詳細に説明する。
【０２４８】
ＭＦＣタグ・グループ・ステータス更新イベント
ＭＦＣタグ・グループ・ステータス更新イベントは、１つのタグ・グループまたは複数のグループが完了したことと、ＭＦＣ読み出しタグ・グループ・ステータスチャンネルが更新されたこととをＳＰＵプログラムに通知するために使用され、ＳＰＵをストールせずに読み出すことができる（上記「ＭＦＣタグ・グループ・ステータス・チャンネル」の項を参照）。ＭＦＣ読み出しタグ・グループ・ステータスチャンネルが「０」から「１」へ変化した場合に生じる。イベントが生じたことにより、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｔｇ］が「１」へ設定される。イベントがイネーブル（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｔｇ］が「１」に設定される）の場合は、ＳＰＵイベント・ステータス・チャンネルについてのカウントが「１」に設定される。
【０２４９】
チャンネル書き込み（ｗｒｃｈ）がＳＰＵ保留イベント・レジスタへ発行された場合、または、特権的ソフトウェアが、対応ビットが「０」に設定されてＳＰＵチャンネルアクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合は、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｔｇ］ビットが０に設定される。このイベントは、タグ・グループまたは複数のグループに対する任意のコマンドを発行する前にクリアされなければならない。
【０２５０】
ＭＦＣ・ＤＭＡリスト・コマンド・ストール／通知イベント
ＭＦＣ・ＤＭＡリスト・コマンド・ストール／通知イベントは、ＭＦＣ・ＤＭＡリスト・コマンド内のリスト要素が完了して、ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルが更新されたことをＳＰＵプログラムに通知するために使用され、ＳＰＵをストールせずに読み出すことができる。このイベントは、ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルが「０」から「１」へ変化したときに生じる。
【０２５１】
ストール／通知フラグが設定されているすべてのリスト要素の転送と、ＭＦＣ・ＤＭＡリスト・コマンド内のすべての以前のリスト要素についての転送とが関連ＳＰＥに対して完了した場合に、カウントが「１」に設定される。このイベントが生じると、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｓｎ］は「１」に設定される。このイベントがイネーブルされると（すなわち、ＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｓｎ］が「１」に設定されると）、ＳＰＵ読み出しイベント・ステータス・チャンネルは「１」に設定される。タグ・ビットが「１」に設定されたＳＰＵ書き込みイベント確認チャンネルへチャンネル書き込み（ｗｒｃｈ）が発行されるか、対応ビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用して特権的ソフトウェアがＳＰＵ保留イベント・レジスタを更新する場合に、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｓｎ］ビットは「０」に設定される。
【０２５２】
ＭＦＣ・ＤＭＡリスト・コマンド・ストール／通知イベントの処理のための手順を図５６に概略的に示す。図５６に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルに対して実行して、データを「マスク」に退避することによって開始する（ステップ２３１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｓｎ］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み命令を発行することによってマスクされる（ステップ２３２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｓｎ］が１に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ２３３０）。
【０２５３】
その後、読み出しチャンネル（ｒｄｃｈ）命令を、ＭＦＣ読み出しリスト・ストール／通知タグ・ステータス・チャンネルＭＦＣ＿ＳｔａｌｌＳｔａｔ［ｇｎ］へ送る（ステップ２３４０）。返された情報を使用して、どのタグ・グループまたは複数のタグ・グループがストール／通知状態のＤＭＡリスト要素を有しているかを判断する（ステップ２３５０）。その後、ストールされたＤＭＡリスト要素を有するタグ・グループ毎にアプリケーション別の動作を実行する（ステップ２３６０）。
【０２５４】
ストールされた各ＤＭＡリスト・コマンドは、チャンネル書き込み（ｗｒｃｈ）命令をリスト・ストール／通知タグ確認チャンネルＭＦＣ＿ＳｔａｌｌＡｃｋ［ＭＦＣ  Ｔａｇ］に発行することによって、確認および再開される（ステップ２３７０）。当該チャンネルでは、与えられたＭＦＣタグは、再開すべきタグ・グループの符号化されたタグＩＤである。その後、ＤＭＡリスト・ストール／通知ハンドラを終了する（ステップ２３８０）。ソフトウェアは、ＭＦＣ＿ＳｔａｌｌＳｔａｔ［ｇｎ］チャンネルにおいて示されているすべてのストールされたタグ・グループを確認するのではなく、第２のストール／通知イベントは未確認のタグ・グループには生じないことに注意すべきである。
【０２５５】
チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルに発行することによって、マスクを復元する（ステップ２３９０）。その後、一般イベント・ハンドラを終了する（ステップ２３９５）。
【０２５６】
ＤＭＡリストがストール／通知フラグが設定された複数のリストを含み、または、タグ・グループがストール／通知フラグが設定された要素でキューイングされた複数のＤＭＡリスト・コマンドを含む場合、ならびにその両方の場合には、ＤＭＡリスト・コマンドがタグ・グループにキューイングされる前に、アプリケーション・ソフトウェアは、タグ・グループ別のストール・カウンタを０に初期化する。加えて、複数のＤＭＡリスト・コマンドがストール／通知要素を有するタグ・グループのためにキューイングされている場合には、タグ別のフェンス、バリア、またはコマンド・バリアで順序付けが実現される。ストール／通知ステータスがタグ・グループに示される度に、対応カウンタがインクリメントされる。その後、アプリケーション・ソフトウェアはこのカウンタを使用して、リスト内のどの点でストールが生じるのかを判断する。
【０２５７】
アプリケーション・ソフトウェアは、ストール／通知を使用して、動的に変化する条件のためにストールしたリスト要素に続くリスト要素アドレスと、転送サイズとを更新する。ストールされたリスト要素の後のリスト要素は、それらの転送サイズを０に設定することによって、スキップすることができる。しかしながら、キューイングされたＤＭＡリストコマンド内のリスト要素の数は、変更することができない。
【０２５８】
ＭＦＣ・ＳＰＵコマンド・キュー使用可能イベント
ＭＦＣ・ＳＰＵコマンド・キュー使用可能イベントは、ＭＦＣ・ＳＰＵコマンド・キュー使用可能イベント内のエントリが使用可能であり、ＭＦＣコマンド操作符号チャンネルがＳＰＵをストールせずに書き込みできることをＳＰＵプログラムに通知するために使用される。このイベントは、ＭＦＣマンド操作符号チャンネルについてのチャンネルカウントが「０」（フル）から非ゼロ（非フル）の値に変化することで生じる。
【０２５９】
ＭＦＣ・ＤＭＡコマンド・キュー内の１つ以上のＭＦＣ・ＤＭＡコマンドが完了した場合に、カウントが「１」に設定される。このイベントが生じると、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｑｖ］は「１」に設定される。このイベントがイネーブルされると（すなわち、ＰＵ＿ＲｄＥｖｅｎｔＭａｓｋ［Ｑｖ］が「１」に設定されると）、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｑｖ］が「１」に設定され、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントが「１」に設定される。チャンネル書き込み（ｗｒｃｈ）がＳＰＵ書き込みイベント確認チャンネルに発行される（すなわち、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｑｖ］）場合、または、特権的ソフトウェアが、対応ビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合に、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｑｖ］ビットは「０」に設定される。
【０２６０】
ＭＦＣ・ＳＰＵコマンド・キュー使用可能イベントを処理する手順を図５７に概略的に示す。図５７に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルへ送って、データを「マスク」に退避することによって開始する（ステップ２４１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｑｖ］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み命令を発行することによってマスクされる（ステップ２４２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｑｖ］が１に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ２４３０）。
【０２６１】
チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令をＭＦＣコマンド操作符号チャンネル（ＭＦＣ＿ＣＭＤ）に発行することによって、チャンネル・カウントを取得する（ステップ２４４０）。チャンネル・カウントが「０」かどうかについての判断がなされる（ステップ２４５０）。もし「０」でなければ、ＭＦＣコマンドキューへＤＭＡコマンドをエンキューする（ステップ２４６０）。その後、キューに追加のコマンドが残っているかどうかについての判断がなされる（ステップ２４７０）。もし残っていれば、処理はステップ２４３０へ戻る。追加のコマンドが残っている場合、またはチャンネル・カウントが「０」の場合は、ＳＰＵコマンド・キュー・ハンドラを終了する（ステップ２４９０）。その後、一般イベント・ハンドラを終了する（ステップ２４９５）。
【０２６２】
ＳＰＵインバウンド・メールボックス使用可能イベント
ＳＰＵインバウンド・メールボックス使用可能イベントは、ＰＰＥまたは他の装置が、空のＳＰＵメールボックスに書き込みを行ったこと、およびＳＰＵ読み出しインバウンド・メールボックス・チャンネルがＳＰＵをストールすることなく読み出されたことを、ＳＰＵプログラムに通知するために使用される。このイベントがイネーブルされる（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｍｂ］が「１」であれば）、ＳＰＵ読み出しイベント・ステータス・チャンネルは「１」に設定される。
【０２６３】
このイベントは、ＳＰＵ読み出しインバウンド・メールボックス・チャンネルについてのカウントが「０」（空）から非ゼロ（空でない）値に変化した場合に生じる。このイベントが生じると、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｍｂ］は「１」に設定される。チャンネル書き込み（ｗｒｃｈ）がＳＰＵ書き込みイベント確認チャンネルに発行される（すなわち、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｍｂ］が「１」に設定される）か、または、特権的ソフトウェアが、対応のビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合には、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｍｂ］ビットは「０」に設定される。
【０２６４】
ＳＰＵインバウンド・メールボックス使用可能イベントの処理のための手順を図５８に概略的に示す。図５８に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルに対して送って、データを「マスク」に退避することによって開始する（ステップ２５１０）。その後、イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔ［Ｍａｓｋｉｎｇ］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み命令を発行することによってマスクされる（ステップ２５２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｓｎ］が１に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ２５３０）。
【０２６５】
チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令をＳＰＵ読み出しインバウンド・メールボックス・チャンネルに発行することによって、チャンネル・カウントを取得する（ステップ２５４０）。チャンネル・カウントが「０」かどうかについての判断がなされる（ステップ２５５０）。もし「０」でなければ、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しインバウンド・メールボックス・チャンネル（ＳＰＵ＿ＲｄＩｎＭｂｏｘ）に発行することによって、次のメールボックスデータエントリを読み出す（ステップ２５６０）。その後、手順はステップ２５３０へ戻る。
【０２６６】
チャンネル・カウントが「０」の場合は、ＳＰＵインバウンド・メールボックス・ハンドラを終了する（ステップ２５７０）。チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルへ発行することによって、「マスク」を復元する（ステップ２５８０）。その後、一般イベント・ハンドラを終了する（ステップ２５９０）。
【０２６７】
ＳＰＵデクリメンタ・イベント
ＳＰＵデクリメンタ・イベントは、デクリメンタが「０」に到達したことをＳＰＵに通知するために使用される。イベントがイネーブル（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｔｍ］が「１」に設定されている）であり、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントが「１」に設定されている場合に、デクリメンタの最上位ビットが「０」から「１」（負）の値に変化すると、このイベントが生じる。このイベントが生じると、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｔｍ］は「１」に設定される。チャンネル書き込み（ｗｒｃｈ）がＳＰＵ書き込みイベント確認チャンネルに発行される（ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｔｍ］が「１」に設定される）か、または、特権的ソフトウェアが、対応のビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合には、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｔｍ］ビットは「０」に設定される。
【０２６８】
ＳＰＵデクリメンタ・イベントの処理のための手順を図５９に概略的に示す。図５９に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルに対して実行して、データを「マスク」に退避することによって開始する（ステップ２６１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｔｍ］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み命令（ｗｒｃｈ）を発行することによってマスクされる（ステップ２６２０）。イベントは、（ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｔｍ］が１に設定された）ＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を発行することによって確認される（ステップ２６３０）。
【０２６９】
チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しデクリメンタ・チャンネルに発行することによって、デクリメンタ値を読み出する（ステップ２６４０）。この値が負の場合は、所望の期間から追加の時間がどの程度経過したかを判断するのに使用できる。新たなタイマ・イベントを所望するかどうかについての判断が行われる（ステップ２６５０）。新たなタイマ・イベントを所望する場合には、新たなデクリメンタ値をＳＰＵ書き込みデクリメンタ・チャンネルへ書き込む（ステップ２６６０）。その後、または新たなタイマ・イベントを所望しない場合は、ＳＰＵデクリメンタ・イベント・ハンドラを終了する（ステップ２６７０）。チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルへ発行することによって、「マスク」を復元する（ステップ２６８０）。その後、一般イベント・ハンドラを終了する（ステップ２６９０）。
【０２７０】
ＳＰＵアウトバウンド割り込みメールボックス使用可能イベント
ＳＰＵアウトバウンド割り込みメールボックス使用可能イベントは、ＰＰＥまたは他の装置が完全なＳＰＵアウトバウンド割り込みメールボックス・レジスタを読み出したことと、ＳＰＵ書き込みアウトバウンド割り込みメールボックス・チャンネルがＳＰＵのストールなしで書き込み可能であることとをＳＰＵプログラムに通知するために使用される。このイベントがイネーブル（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｍｅ］が「１」に設定されている）である場合であって、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントが「１」に設定されている場合に、ＳＰＵ書き込みアウトバウンド割り込みメールボックスチャンネルが「０」（フル）から非ゼロ（フルでない）値に変化すると、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントは「１」に設定される。このイベントは、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｍｅ］を「１」に設定する。チャンネル書き込み（ｗｒｃｈ）が、Ｍｅビットが「１」に設定された（すなわち、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｍｅ］が１に設定された）ＳＰＵ書き込みイベント確認チャンネルに発行される場合、または、特権的ソフトウェアが、対応ビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合に、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｍｅ］ビットは「０」に設定される。
【０２７１】
ＳＰＵアウトバウンド割り込みメールボックス使用可能イベントを処理する手順を図６０に概略的に示す。図６０に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルへ送って、データを「マスク」に退避することによって開始する（ステップ２７１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｍｅ］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み（ｗｒｃｈ）命令を発行することによってマスクされる（ステップ２７２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｍｅ］が１に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ２７３０）。
【０２７２】
チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令をＳＰＵ書き込みアウトバウンド割り込みメールボックス・チャンネルに発行することによって、チャンネル・カウントを取得する（ステップ２７４０）。チャンネル・カウントが「０」かどうかについての判断がなされる（ステップ２７５０）。もしチャンネル・カウントが「０」でなければ、チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ書き込みアウトバウンド割り込みメールボックス・チャンネルへ発行することによって、新たなメールボックス・データ・エントリが書き込まれる（ステップ２７６０）。チャンネル・カウントが「０」の場合は、チャンネル・カウントが再び読み出される（ステップ２７４０）。その後、ＳＰＵアウトバウンド割り込みメールボックス使用可能ハンドラを終了する（ステップ２７７０）。チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルへ発行することによって、「マスク」を復元する（ステップ２７８０）。その後、一般イベント・ハンドラを終了する（ステップ２７９５）。
【０２７３】
ＳＰＵアウトバウンド・メールボックス使用可能イベント
ＳＰＵアウトバウンド・メールボックス使用可能イベントは、プロセッサまたは他の装置のいずれかが完全なＳＰＵアウトバウンド・メールボックス・レジスタから読み出したことと、ＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルがＳＰＵのストールなしで書き込み可能であることとをＳＰＵプログラムに通知するために使用される。このイベントは、ＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルのチャンネル・カウントが「０」（フル）から非ゼロ（フルでない）値に変化すると生じる。このイベントが生じると、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｌｅ］は「１」に設定される。このイベントがイネーブルされると（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｌｅ］が「１」に設定されると）、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントは「１」に設定される。チャンネル書き込み（ｗｒｃｈ）が、Ｌｅビットが「１」に設定された（すなわち、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｌｅ］が１に設定された）ＳＰＵ書き込みイベント確認チャンネルに発行されるか、または、特権的ソフトウェアが、対応のビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合には、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｌｅ］ビットは「０」に設定される。
【０２７４】
ＳＰＵアウトバウンド・メールボックス使用可能イベントを処理する手順を図６１に概略的に示す。図６１に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルへ送って、データを「マスク」に退避することによって開始する（ステップ２８１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｌｅ］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み（ｗｒｃｈ）命令を発行することによってマスクされる（ステップ２８２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｌｅ］が「１」に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ２８３０）。
【０２７５】
チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令をＳＰＵ書き込みアウトバウンドメールボックス・チャンネルに発行することによって、チャンネル・カウントを取得する（ステップ２８４０）。チャンネル・カウントが「０」かどうかについての判断がなされる（ステップ２８５０）。もしチャンネル・カウントが「０」でなければ、チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルへ発行することによって、新たなメールボックス・データ・エントリが書き込まれる（ステップ２８６０）。チャンネル・カウントが「０」の場合は、チャンネル・カウントが再び読み出される（ステップ２８４０）。その後、ＳＰＵアウトバウンド・メールボックス使用可能ハンドラを終了する（ステップ２８７０）。チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルへ発行することによって、「マスク」を復元する（ステップ２８８０）。その後、一般イベント・ハンドラを終了する（ステップ２８９５）。
【０２７６】
ＳＰＵ信号通知２使用可能イベント
ＳＰＵ信号通知２使用可能イベントは、他のプロセッサまたは装置が空のＳＰＵ信号通知２レジスタに書き込みを行ったことと、ＳＰＵ信号通知２チャンネルがＳＰＵのストールなしで読み出し可能であることとをＳＰＵプログラムに通知するために使用される。このイベントは、ＳＰＵ信号通知２チャンネルについてのチャンネル・カウントが「０」（空）から「１」（有効）の値へ変化すると生じる。このイベントがイネーブル（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｓ２］が「１」に設定されている）である場合であって、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントが「１」に設定されている場合に、このイベントは、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｓ２］ビットを「１」に設定する。チャンネル書き込み（ｗｒｃｈ）が、Ｓ２ビットが「１」に設定された（ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｓ２］）ＳＰＵ書き込みイベント確認チャンネルに発行される場合、または、特権的ソフトウェアが、対応ビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合に、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｓ２］ビットは「０」に設定される。
【０２７７】
ＳＰＵ信号通知２使用可能イベントを処理する手順を図６２に概略的に示す。図６２に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルへ送って、データを「マスク」に退避することによって開始する（ステップ２９１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｓ２］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み（ｗｒｃｈ）命令を発行することによってマスクされる（ステップ２９２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｓ２］が１に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ２９３０）。
【０２７８】
チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令をＳＰＵ信号通知２チャンネルに発行することによって、チャンネル・カウントを取得する（ステップ２９４０）。チャンネル・カウントが「０」かどうかについての判断がなされる（ステップ２９５０）。もしチャンネル・カウントが「０」でなければ、チャンネル読み出し命令をＳＰＵ信号通知２チャンネルへ発行することによって、信号データを読み出す（ステップ２９６０）。その後、またはチャンネル・カウントが「０」の場合は、信号通知２ハンドラを終了する（ステップ２９７０）。チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルへ発行することによって、「マスク」を復元する（ステップ２９８０）。その後、一般イベント・ハンドラを終了する（ステップ２９９０）。
【０２７９】
ＳＰＵ信号通知１使用可能イベント
ＳＰＵ信号通知１使用可能イベントは、他のプロセッサまたは装置が空のＳＰＵ信号通知１レジスタに書き込みを行ったことと、ＳＰＵ信号通知１チャンネルがＳＰＵのストールなしで読み出し可能であることとをＳＰＵプログラムに通知するために使用される。このイベントは、ＳＰＵ信号通知１チャンネルについてのチャンネル・カウントが「０」（空）から「１」（有効）の値へ変化すると生じる。このイベントがイネーブル（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｓ１］が「１」に設定されている）である場合であって、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントが「１」に設定されている場合に、このイベントは、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｓ１］を「１」に設定する。チャンネル書き込み（ｗｒｃｈ）が、Ｓ１ビットが「１」に設定された（ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｓ１］）ＳＰＵ書き込みイベント確認チャンネルに発行される場合、または、特権的ソフトウェアが、対応ビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合に、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｓ１］ビットは「０」に設定される。
【０２８０】
ＳＰＵ信号通知１使用可能イベントを処理する手順を図６３に概略的に示す。図６３に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルへ送って、データを「マスク」に退避することによって開始する（ステップ３０１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｓ１］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み（ｗｒｃｈ）命令を発行することによってマスクされる（ステップ３０２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｓ１］が１に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ３０３０）。
【０２８１】
チャンネル・カウント読み出し（ｒｃｈｃｎｔ）命令をＳＰＵ信号通知１チャンネルに発行することによって、チャンネル・カウントを取得する（ステップ３０４０）。チャンネル・カウントが「０」かどうかについての判断がなされる（ステップ３０５０）。
【０２８２】
もしチャンネル・カウントが「０」でなければ、チャンネル読み出し命令をＳＰＵ信号通知１チャンネルへ発行することによって、信号データを読み出す（ステップ３０６０）。その後、またはチャンネル・カウントが「０」の場合は、信号通知１ハンドラを終了する（ステップ３０７０）。チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルへ発行することによって、「マスク」を復元する（ステップ３０８０）。その後、一般イベント・ハンドラを終了する（ステップ３０９０）。
【０２８３】
ロック・ライン予約喪失イベント
ロック・ライン予約喪失イベントは、キャッシュ・ライン上の予約の喪失が生じたバス・アクションについてＳＰＵプログラムに通知するために使用される。予約は、ＳＰＵプログラムによって、ｇｅｔ  ｌｏｃｋ  ｌｉｎｅ  ａｎｄ  ｒｅｓｅｒｖｅ（ｇｅｔｌｌａｒ）コマンドを発行することによって取得される。予約は、他のプロセッサまたは装置がキャッシュ・ラインを予約で修正する場合に失われる。
【０２８４】
また、予約は、特権的ソフトウェアがＭＦＣアトミック・フラッシュ・レジスタにフラッシュ・ビットを書き込む（ＭＦＣ＿Ａｔｏｍｉｃ＿Ｆｌｕｓｈ［Ｆ］が「１」に設定される）場合に失われる場合がある。予約が失われると、イベントが生じる。このイベントが生じると、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｌｒ］は「１」に設定される。このイベントがイネーブルされると（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｌｒ］が「１」に設定されると）、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントは「１」に設定される。チャンネル書き込み（ｗｒｃｈ）が、Ｌｒビットが「１」に設定された（ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｌｒ］）ＳＰＵ書き込みイベント確認チャンネルに発行されるか、または、特権的ソフトウェアが、対応のビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合には、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｌｒ］ビットは「０」に設定される。
【０２８５】
ロック・ライン予約喪失イベントを処理する手順を図６４に概略的に示す。図６４に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルへ発行して、データを「マスク」に退避することによって開始する（ステップ３１１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｌｒ］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み（ｗｒｃｈ）命令を発行することによってマスクされる（ステップ３１２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｌｒ］が「１」に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ３１３０）。
【０２８６】
ロック・ライン領域のデータのシステム修正に応じて、アプリケーション別の機能を実行する（ステップ３１４０）。これは、通常、メモリ内のソフトウェア構造をチェックして、ロック・ラインがまだ監視されているかを判断することによって開始される。まだ「待っている」状態であれば、次のステップとしては、典型的には、ｇｅｔｌｌａｒコマンドを修正されたのと同一のロック・ライン領域へ発行して新たなデータを取得して、その後、当該データを処理するというものであろう。
【０２８７】
その後、ロックライン予約喪失イベント・ハンドラを終了する（ステップ３１５０）。チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルへ発行することによって、「マスク」を復元する（ステップ３１６０）。その後、一般イベント・ハンドラを終了して（ステップ３１７０）、処理が終わる。
【０２８８】
特権的アテンション・イベント
特権的アテンション・イベントは、特権的ソフトウェアがＳＰＵプログラムからのアテンションを要求していることをＳＰＵプログラムに通知するために使用される。特権的ソフトウェアは、ＳＰＵ特権的制御レジスタにおけるアテンション・イベントを必要とするビットに「１」を書き込む（すなわち、ＳＰＵＰｒｉｖＣｎｔｌ［Ａ］が１に設定される）ことによって、アテンションを要求する。イベントがイネーブル（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ａ］が「１」に設定されている）である場合であって、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントが「１」に設定されている場合に、このイベントは、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ａ］ビットを「１」に設定する。チャンネル書き込み（ｗｒｃｈ）が、Ａビットが「１」に設定された（すなわち、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ａ］が「１」である）ＳＰＵ書き込みイベント確認チャンネルに発行される場合、または、特権的ソフトウェアが、対応ビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合に、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ａ］ビットは「０」に設定される。
【０２８９】
特権的アテンション・イベントを処理する手順を図６５に概略的に示す。図６５に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルへ発行して、データを「マスク」に退避することによって開始する（ステップ３２１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ａ］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み（ｗｒｃｈ）命令を発行することによってマスクされる（ステップ３２２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ａ］が「１」に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ３２３０）。
【０２９０】
特権的アテンション・イベントに応じて、アプリケーション別の機能を実行する（ステップ３２４０）。これは、例えば、ＳＰＵの産物または何らかの他の行為が要求されているを知らせるために使用することができる。停止、知らせ、ＳＰＵインバウンド・メールボックス書き込み、ＳＰＵアウトバウンド割り込みメールボックス書き込み、またはシステムまたはＩ／Ｏメモリシステム内のステータスの更新などといった、特権的アテンション・イベントへのアプリケーションまたはオペレーティング・システム専用の応答が発行されなければならない。
【０２９１】
特権的アテンション・イベント・ハンドラを終了する（ステップ３２５０）。チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルへ発行することによって、「マスク」を復元する（ステップ３２６０）。その後、一般イベント・ハンドラを終了する（ステップ３２７０）。
【０２９２】
マルチソース同期イベント
マルチソース同期イベントは、マルチソース同期要求が完了した旨をＳＰＵプログラムに通知するために使用される。マルチソース同期は、ＭＦＣ書き込みマルチソース同期要求チャンネル（ＭＦＣ＿ＷｒＭＳＳｙｎｃＲｅｑ）への書き込み（ｗｒｃｈ）によって要求される。このイベントは、ＭＦＣ書き込みマルチソース同期要求チャンネル（ＭＦＣ＿ＷｒＭＳＳｙｎｃＲｅｑ）についてのチャンネル・カウントが「０」から「１」の値へ変化すると生じる。このイベントがイネーブル（すなわち、ＳＰＵ＿ＲｄＥｖｅｎｔＳｔａｔ［Ｍｓ］が「１」）である場合であって、ＳＰＵ読み出しイベント・ステータス・チャンネルについてのカウントが「１」に設定されている場合に、このイベントは、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｍｓ］ビットを「１」に設定する。チャンネル書き込み（ｗｒｃｈ）が、Ｍｓビットが設定された（すなわち、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｍｓ］が「１」に設定された）ＳＰＵ書き込みイベント確認チャンネルに発行される場合、または、特権的ソフトウェアが、対応ビットが「０」に設定されたＳＰＵチャンネル・アクセス・ファシリティを使用してＳＰＵ保留イベント・レジスタを更新する場合に、Ｐｅｎｄ＿Ｅｖｅｎｔ［Ｍｓ］ビットは「０」に設定される。マルチソース同期イベントは、マルチソース同期要求が発行されるメッセージ前にクリアされなくてはならない。
【０２９３】
マルチソース同期イベントを処理する手順を図６６に概略的に示す。図６６に示すように、手順は、チャンネル読み出し（ｒｄｃｈ）命令をＳＰＵ読み出しイベント・マスク・チャンネルへ送って、データを「マスク」に退避することによって開始する（ステップ３３１０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［Ｔｍ］が「０」に設定されたＳＰＵ書き込みイベント・マスク・チャンネルに、チャンネル書き込み命令を発行することによってマスクされる（ステップ３３２０）。イベントは、ＳＰＵ＿ＷｒＥｖｅｎｔＡｃｋ［Ｍｓ］が「１」に設定されたＳＰＵ書き込みイベント確認チャンネルに対してチャンネル書き込み（ｗｒｃｈ）命令を実行することによって確認される（ステップ３３３０）。
【０２９４】
保留マルチソース同期動作の完了に応じて、アプリケーション別の機能を実行する（ステップ３３４０）。これは、典型的には、例えば、特定のバッファ内のデータが完全に更新されたこと、またはバッファ領域はもはや使用されていないことなどを示すことであろう。マルチソース同期イベント・ハンドラを終了する（ステップ３３５０）。チャンネル書き込み（ｗｒｃｈ）命令をＳＰＵ＿ＷｒＥｖｅｎｔＭａｓｋ［ｍａｓｋ］を有するＳＰＵ書き込みイベント・マスク・チャンネルへ発行することによって、「マスク」を復元する（ステップ３３６０）。その後、一般イベント・ハンドラを終了する（ステップ３３７０）。
【０２９５】
要約すると、本発明は、プロセッサと、ローカル記憶の負担を軽減しかつプロセッサがデータ、空間の開放、またはイベントの発生を待つときに低電力状態でいられる外部装置との間の通信を促進するための機構を提供する。本発明の機構は、プロセッサ、メモリ・フロー・コントローラ、マシン・ステート・レジスタ、および外部プロセッサ割り込みファシリティなどの様々なファシリティとの通信のための複数のチャンネルを提供する。これらのチャンネルは、命令、命令パラメータ、内部プロセッサ情報、信号通知、マシン分離情報、マシン割り込み状態情報、生成されたイベントを提供し、またイベント処理を行うのに使用されてもよい。
【０２９６】
本発明を、完全に機能するデータ処理システムにおいて説明してきたが、本発明の処理は、コンピュータ読み取り可能な媒体の命令の形式および様々な形式で分散できること、また、本発明は、分散を実行するのに実際に使用される、信号が記録された媒体の特定の種類に関係なく等しく当てはまることを、当業者は理解するだろうということに留意することが重要である。コンピュータ読み取り可能な媒体の例としては、フレキシブルディスク、ハードディスクドライブ、ＲＡＭ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなどといった記録可能型の媒体、ならびに、例えば無線周波数および光波送信などの送信形式を使用するデジタルおよびアナログ通信リンクおよび有線または無線の通信リンクなどといった送信型の媒体が含まれる。コンピュータ読み取り可能な媒体は、符号化された形式を取ってもよく、この復号化された形式は、特定のデータ処理システムにおける実際の使用のためには復号化される。
【０２９７】
本発明の説明を例示および説明の目的で提示してきたが、網羅的なものでもなく、開示された形式に本発明を限定するものでもない。数多くの修正および変更が当業者にとって明らかであろう。本発明の原理および実際の応用を最もよく説明するため、また、予期された特定の使用に適した様々な変更を伴う様々な実施形態について当業者が本発明を理解することができるようにするために、選択かつ説明されたものである。
【図面の簡単な説明】
【０２９８】
【図１】本発明の例示的な一実施形態に係るブロードバンド・プロセッサ・アーキテクチャ（ＢＰＡ）のブロック図の例である。
【図２】本発明の例示的な一実施形態に係る典型的なＭＦＣ２００のブロック図の例である。
【図３】本発明の例示的な一実施形態に係るＭＦＣコマンドについてのニーモニック・パラメータを示す図の例である。
【図４】本発明の例示的な一実施形態に係るＤＭＡリスト・コマンドの詳細を示す図の例である。
【図５】米国特許出願公開第２００４／０２６４４４５号に記載された機構に係るチャンネルの単一の対のためのチャンネル回路に関するＳＰＵ発行／制御論理の仕組みならびにデータ・フローを示す図の例である。
【図６】本発明の例示的な一実施形態に係るチャンネル・インターフェースの動作の例の概略を示すフローチャートである。
【図７】チャンネルが本発明の一実施形態によって使用されるやり方を示す図の例である。
【図８】本発明の例示的な一実施形態に係るＳＰＵチャンネル・マップを表で示す図の例である。
【図９】本発明の例示的な一実施形態に係るＳＰＵチャンネル・マップを表で示す図の例である。
【図１０】本発明の例示的な一実施形態に係るＳＰＵチャンネル・マップを表で示す図の例である。
【図１１】本発明の例示的な一実施形態に係るＳＰＵチャンネル・マップを表で示す図の例である。
【図１２】本発明の例示的な一実施形態に係るＭＦＣコマンド操作符号チャンネルの詳細を示す図の例である。
【図１３】本発明の例示的な一実施形態に係るＭＦＣクラスＩＤチャンネルの詳細を示す図の例である。
【図１４】本発明の例示的な一実施形態に係る８ウェイ・セット・アソシエィティブ・キャッシュに対する典型的なＲＭＴエントリを示す。
【図１５】本発明の例示的な一実施形態に係るＭＦＣコマンド・タグ識別チャンネルの詳細を示す図の例である。
【図１６】本発明の例示的な一実施形態に係るＭＦＣ転送サイズまたはリスト・サイズ・チャンネルの詳細を示す図の例である。
【図１７】本発明の例示的な一実施形態に係るＭＦＣローカル記憶アドレス・チャンネルの詳細を図の例である。
【図１８】本発明の例示的な一実施形態に係るＭＦＣ有効アドレスｌｏｗまたはリスト・アドレス・チャンネルの詳細を示す図の例である。
【図１９】本発明の例示的な一実施形態に係るＭＦＣ有効アドレスｈｉｇｈチャンネルの詳細を示す図の例である。
【図２０】本発明の例示的な一実施形態に係るＭＦＣコマンド・パラメータを書き込むための動作の例の概略を示す図の例である。
【図２１】本発明の例示的な一実施形態に係るＭＦＣ書き込みタグ・グループ・クエリ・マスク・チャンネルの詳細を示す図の例である。
【図２２】本発明の例示的な一実施形態に係るＭＦＣ読み出しタグ・グループ・クエリ・マスク・チャンネルの詳細を示す図の例である。
【図２３】本発明の例示的な一実施形態に係るＭＦＣ書き込みタグ・ステータス更新要求チャンネルの詳細を示す図の例である。
【図２４】本発明の例示的な一実施形態に係るＭＦＣ読み出しタグ・ステータス更新要求チャンネルの詳細を示す図の例である。
【図２５】本発明の例示的な一実施形態に係るＭＦＣ読み出しリスト・ストール／通知タグ・ステータスチャンネルの詳細を示す図の例である。
【図２６】本発明の例示的な一実施形態に係るＭＦＣ書き込みリスト・ストール／通知タグ・ステータスチャンネルの詳細を示す図の例である。
【図２７】本発明の例示的な一実施形態に係るＭＦＣ読み出しアトミック・コマンド・ステータス・チャンネルの詳細を示す図の例である。
【図２８】本発明の例示的な一実施形態に係るＭＦＣコマンドの完了またはＭＦＣコマンド・グループの完了のためのポーリングのための動作の例の概略を示すフローチャートの例である。
【図２９】本発明の例示的な一実施形態に係るタグ・グループ更新待機またはイベント待機（１つ以上のタグ・グループの完了）のための動作の例の概略を示すフローチャートの例である。
【図３０】本発明の例示的な一実施形態に係る条件付タグ・イベントの待機またはポーリングに代わるものとしての、ＳＰＵイベント・ファシリティを使用するための動作の例の概略を示すフローチャートの例である。
【図３１】本発明の例示的な一実施形態に係る、ＭＦＣ・ＤＭＡリスト・コマンドがストール／通知フラグ・セットを有するリスト要素に到達したかどうかを判断するためのポーリングのための動作の例の概略を示す図の例である。
【図３２】本発明の例示的な一実施形態に係る、ＭＦＣ・ＤＭＡリスト・コマンドがストール／通知フラグ・セットを有するリスト要素に到達するのを待つための動作の例の概略を示す図の例である。
【図３３】本発明の例示的な一実施形態に係る、ストール／通知タグ・グループ・ステータスのリストを待機またはポーリングする代わりとして、ＳＰＵイベント・ファシリティを使用するための動作の例の概略を示す図の例である。
【図３４】本発明の例示的な一実施形態に係るＭＦＣ書き込みマルチソース同期要求チャンネルの詳細を示す図の例である。
【図３５】本発明の例示的な一実施形態に係るＳＰＵ書き込みアウトバウンド・メールボックス・チャンネルの詳細を示す図の例である。
【図３６】本発明の例示的な一実施形態に係るＳＰＵ書き込みアウトバウンド割り込みメールボックス・チャンネルの詳細を示す図の例である。
【図３７】本発明の例示的な一実施形態に係るＳＰＵ読み出しインバウンド・メールボックス・チャンネルの詳細を示す図の例である。
【図３８】本発明の例示的な一実施形態に係るＳＰＵ信号通知チャンネルの詳細を示す図の例である。
【図３９】本発明の例示的な一実施形態に係るＳＰＵ書き込みデクリメンタ・チャンネルの詳細を示す図の例である。
【図４０】本発明の例示的な一実施形態に係るＳＰＵ読み出しデクリメンタ・チャンネルの詳細を示す図の例である。
【図４１】本発明の例示的な一実施形態に係るＳＰＵ読み出しマシン・ステータス・チャンネルの詳細を示す図の例である。
【図４２】本発明の例示的な一実施形態に係るＳＰＵ書き込み状態退避／復元チャンネルの詳細を示す図の例である。
【図４３】本発明の例示的な一実施形態に係るＳＰＵ読み出し状態退避／復元チャンネルの詳細を示す図の例である。
【図４４】本発明の例示的な一実施形態に係るＳＰＵイベント・ファシリティの論理表現を示すブロック図の例である。
【図４５】本発明の例示的な一実施形態に係るＳＰＵイベント・ファシリティの論理表現を示すブロック図の例である。
【図４６】本発明の例示的な一実施形態に係るＳＰＵ読み出しイベント・ステータス・チャンネルの詳細を示す図の例である。
【図４７】本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント・マスク・チャンネルの詳細を示す図の例である。
【図４８】本発明の例示的な一実施形態に係るＳＰＵ読み出しイベント・マスク・チャンネルの詳細を示す図の例である。
【図４９】本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント確認チャンネルの詳細を示す図の例である。
【図５０】本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント確認チャンネルの詳細を示す図の例である。
【図５１】本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント確認チャンネルの詳細を示す図の例である。
【図５２】本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント確認チャンネルの詳細を示す図の例である。
【図５３】本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント確認チャンネルの詳細を示す図の例である。
【図５４】本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント確認チャンネルの詳細を示す図の例である。
【図５５】本発明の例示的な一実施形態に係るＳＰＵ書き込みイベント確認チャンネルの詳細を示す図の例である。
【図５６】本発明の例示的な一実施形態に係るＭＦＣ・ＤＭＡリスト・コマンド・ストール／通知イベントを処理するための動作の例の概略を示すフローチャートである。
【図５７】本発明の例示的な一実施形態に係るＭＦＣ・ＳＰＵコマンド・キュー使用可能イベントを処理するための動作の例の概略を示すフローチャートである。
【図５８】本発明の例示的な一実施形態に係るＳＰＵインバウンドメールボックス使用可能イベントを処理するための動作の例の概略を示すフローチャートである。
【図５９】本発明の例示的な一実施形態に係るＳＰＵデクリメンタ・イベントを処理するための動作の例の概略を示すフローチャートである。
【図６０】本発明の例示的な一実施形態に係るＳＰＵアウトバウンド割り込みメールボックス使用可能イベントを処理するための動作の例の概略を示すフローチャートである。
【図６１】本発明の例示的な一実施形態に係るＳＰＵアウトバウンド・メールボックス使用可能イベントを処理するための動作の例の概略を示すフローチャートである。
【図６２】本発明の例示的な一実施形態に係るＳＰＵ信号通知２使用可能イベントを処理するための動作の例の概略を示すフローチャートである。
【図６３】本発明の例示的な一実施形態に係るＳＰＵ信号通知１使用可能イベントを処理するための動作の例の概略を示すフローチャートである。
【図６４】本発明の例示的な一実施形態に係るロック・ライン予約喪失イベントを処理するための動作の例の概略を示すフローチャートである。
【図６５】本発明の例示的な一実施形態に係る特権的アテンション・イベントを処理するための動作の例の概略を示すフローチャートである。
【図６６】本発明の例示的な一実施形態に係るマルチソース同期イベントを処理するための動作の例の概略を示すフローチャートである。
【符号の説明】
【０２９９】
１２０，１２２，１２４，１２６，１２８，１３０，１３２，１３４  ＳＰＥ
１４０，１４２，１４４，１４６，１４８，１５０，１５２，１５４  ＳＰＵ
１６３〜１６７  ＬＳ
１５５〜１６２  ＭＦＣ
１８０，１８２，１８４，１８６，１８８，１９０，１９２，１９４  ＢＩＵ
１１２  Ｌ２キャッシュ
１１４  Ｌ１キャッシュ
１１６  ＰＰＵ
１９６  ＥＩＢ
１９７  ＢＩＵ
１９８  ＭＩＣ
１９９  共有メモリ
【図１】
0004516941.tif 000003
【図２】
0004516941.tif 000004
【図３】
0004516941.tif 000005
【図４】
0004516941.tif 000006
【図５】
0004516941.tif 000007
【図６】
0004516941.tif 000008
【図７】
0004516941.tif 000009
【図８】
0004516941.tif 000010
【図９】
0004516941.tif 000011
【図１０】
0004516941.tif 000012
【図１１】
0004516941.tif 000013
【図１２】
0004516941.tif 000014
【図１３】
0004516941.tif 000015
【図１４】
0004516941.tif 000016
【図１５】
0004516941.tif 000017
【図１６】
0004516941.tif 000018
【図１７】
0004516941.tif 000019
【図１８】
0004516941.tif 000020
【図１９】
0004516941.tif 000021
【図２０】
0004516941.tif 000022
【図２１】
0004516941.tif 000023
【図２２】
0004516941.tif 000024
【図２３】
0004516941.tif 000025
【図２４】
0004516941.tif 000026
【図２５】
0004516941.tif 000027
【図２６】
0004516941.tif 000028
【図２７】
0004516941.tif 000029
【図２８】
0004516941.tif 000030
【図２９】
0004516941.tif 000031
【図３０】
0004516941.tif 000032
【図３１】
0004516941.tif 000033
【図３２】
0004516941.tif 000034
【図３３】
0004516941.tif 000035
【図３４】
0004516941.tif 000036
【図３５】
0004516941.tif 000037
【図３６】
0004516941.tif 000038
【図３７】
0004516941.tif 000039
【図３８】
0004516941.tif 000040
【図３９】
0004516941.tif 000041
【図４０】
0004516941.tif 000042
【図４１】
0004516941.tif 000043
【図４２】
0004516941.tif 000044
【図４３】
0004516941.tif 000045
【図４４】
0004516941.tif 000046
【図４５】
0004516941.tif 000047
【図４６】
0004516941.tif 000048
【図４７】
0004516941.tif 000049
【図４８】
0004516941.tif 000050
【図４９】
0004516941.tif 000051
【図５０】
0004516941.tif 000052
【図５１】
0004516941.tif 000053
【図５２】
0004516941.tif 000054
【図５３】
0004516941.tif 000055
【図５４】
0004516941.tif 000056
【図５５】
0004516941.tif 000057
【図５６】
0004516941.tif 000058
【図５７】
0004516941.tif 000059
【図５８】
0004516941.tif 000060
【図５９】
0004516941.tif 000061
【図６０】
0004516941.tif 000062
【図６１】
0004516941.tif 000063
【図６２】
0004516941.tif 000064
【図６３】
0004516941.tif 000065
【図６４】
0004516941.tif 000066
【図６５】
0004516941.tif 000067
【図６６】
0004516941.tif 000068