(57)【特許請求の範囲】
【請求項１】
複数のノードと、前記複数のノードと通信可能に接続されたノード間コントローラと、を少なくとも有し、
各前記ノードと前記ノード間コントローラとの間で転送されるべきデータを記憶する、１バイトのデータモジュールと、各前記ノードと前記ノード間コントローラとの間におけるデータ転送に関する状態情報およびコマンドを記憶する、１バイトの制御モジュールとが、各前記ノード内に設けられ、
前記複数のノードの各々から前記ノード間コントローラとの間の通信が、前記ノード毎に対応して設けられる各前記ノードと前記ノード間コントローラに直接結合する直接チャネルを通して実行されるマルチ・ノードコンピュータシステムにおけるデータを転送する方法において、
前記ノードが、前記データモジュールに第１のデータを書込む段階と、
前記ノードが、前記制御モジュールに対し第１のデータ転送コマンドを書込む段階と、
前記ノード間コントローラが、前記制御モジュールから前記第１のデータ転送コマンドを読取る段階と、
前記第１のデータ転送コマンドに応答して、前記ノード間コントローラが前記データモジュールから前記第１のデータを読取る段階と、
前記ノード間コントローラによる前記データモジュールからの前記第１のデータ読取りの完了に応答して、前記ノード間コントローラが前記制御モジュール内に第１のデータ転送状態コードを書込む段階と、
前記ノードが、前記制御モジュールから前記第１のデータ転送状態コードを読取る段階と、
前記第１のデータ転送状態コードに応答して、前記ノードが前記のデータ転送を続行すべきか否かを決定する段階と、を含んでなる方法。
【請求項２】
前記ノードによる前記制御モジュールに対する前記データ転送コマンドの書込みに続いて、前記ノードから前記ノード間コントローラに対して中断信号を送信する段階をさらに含んでなる請求項１に記載の方法。
【請求項３】
前記制御モジュールからの転送コマンドの読取りに先立ち、前記データ転送コマンドの存在を見極めるべく前記ノードが前記制御モジュールをポーリングする段階をさらに含んでなる請求項１に記載の方法。
【請求項４】
前記ノード間コントローラに対し全てのデータが送信されたことに応答して、該ノード間コントローラが前記制御モジュール内にデータ転送完了状態制御コードを書込む段階をさらに含んでなる請求項１に記載の方法。
【請求項５】
前記第１のデータを前記データモジュールに書込む前に、前記ノードが、前記データモジュールおよび制御モジュールのコンテキストを記憶する段階をさらに含んでなる請求項１に記載の方法。
【請求項６】
全てのデータが前記ノード間コントローラに送信された後、前記ノードが、前記データモジュールおよび制御モジュールの前記記憶されたコンテキストを復旧させる段階をさらに含んでなる請求項５に記載の方法。
【請求項７】
複数のノードと、前記複数のノードと通信可能に接続されたノード間コントローラと、を少なくとも有し、
各前記ノードと前記ノード間コントローラとの間で転送されるべきデータを記憶する、１バイトのデータモジュールと、各前記ノードと前記ノード間コントローラとの間におけるデータ転送に関する状態情報およびコマンドを記憶する、１バイトの制御モジュールとが、各前記ノード内に設けられ、
前記複数のノードの各々から前記ノード間コントローラとの間の通信が、前記ノード毎に対応して設けられ各前記ノードと前記ノード間コントローラに直接結合する直接チャネルを通して実行されるマルチ・ノードコンピュータシステムにおける、
前記ノード間コントローラから各前記ノードへデータを転送する方法において、
前記ノードが、前記制御モジュール内に第１のデータ転送コマンドを書込む段階と、
前記ノード間コントローラが、前記制御モジュールから前記第１のデータ転送コマンドを読取る段階と、
前記第１のデータ転送コマンドに応答して、前記ノード間コントローラが前記データモジュール内に第１のデータを書込む段階と、
前記データモジュール内への前記第１のデータの書込みに応答して、前記ノード間コントローラが前記制御モジュール内に第１のデータ転送状態コードを書込む段階と、
前記制御モジュール内に書込まれた前記第１のデータ転送状態コードの読取りに応答して、前記ノードが前記のデータ転送を続行すべきか否かを決定する段階と、を含んでなる方法。
【請求項８】
前記制御モジュールに対する前記第１のデータ転送コマンドの書き込みに応答して、前記ノードから前記ノード間コントローラに対して中断信号を送信する段階をさらに含んでなる請求項７に記載の方法。
【請求項９】
複数のノードと、前記複数のノードと通信可能に接続されたノード間コントローラと、を少なくとも有し、
各前記ノードと前記ノード間コントローラとの間で転送されるべきデータを記憶する、１バイトのデータモジュールと、各前記ノードと前記ノード間コントローラとの間におけるデータ転送に関する状態情報およびコマンドを記憶する、１バイトの制御モジュールとが、各前記ノード内に設けられ、
前記複数のノードの各々から前記ノード間コントローラとの間の通信が、前記ノード毎に対応して設けられ各前記ノードと前記ノード間コントローラに直接結合する直接チャネルを通して実行されるマルチ・ノードコンピュータシステムにおける、
各前記ノードから前記ノード間コントローラへデータを転送する方法において、
前記ノードが、前記データモジュールに第１のデータを書込む段階と、
前記ノード間コントローラに対する前記第１のデータの転送を可能にするため、前記ノードが前記制御モジュールに対し第１のデータ転送コマンドを書込む段階と、
前記ノード間コントローラによる前記第１のデータ転送コマンドの履行状態に対応する第１のデータ転送状態コードを、前記制御モジュールが受信しているか否かを、前記ノードが監視する段階と、
前記第１のデータ転送状態コードの受信に応答して、前記ノードが前記のデータ転送を続行するか否かを決定する段階と、を含んでなる方法。
【請求項１０】
複数のノードと、前記複数のノードと通信可能に接続されたノード間コントローラと、を少なくとも有し、
各前記ノードと前記ノード間コントローラとの間で転送されるべきデータを記憶する、１バイトのデータモジュールと、各前記ノードと前記ノード間コントローラとの間におけるデータ転送に関する状態情報およびコマンドを記憶する、１バイトの制御モジュールとが、各前記ノード内に設けられ、
前記複数のノードの各々から前記ノード間コントローラとの間の通信が、前記ノード毎に対応して設けられ各前記ノードと前記ノード間コントローラに直接結合する直接チャネルを通して実行されるマルチ・ノードコンピュータシステムにおける、
前記ノード間コントローラから前記ノードにおいてデータを受信するための方法であって、
第１のデータ転送コマンドに応答して前記ノード間コントローラが前記データモジュールにデータを送信できるようにするため、前記制御モジュール内に前記第１のデータ転送コマンドを書込む段階と、
前記ノード間コントローラによる前記第１のデータ転送コマンドの履行状態に対応する第１のデータ転送状態コードを前記制御モジュールが受信しているか否かを監視する段階と、
前記第１のデータ転送状態コードに応答して、前記のデータ転送を続行するか否かを前記ノードが決定する段階と、を含んでなる方法。
【請求項１１】
複数のノードと、前記複数のノードと通信可能に接続されたノード間コントローラと、を少なくとも有し、
各前記ノードと前記ノード間コントローラとの間で転送されるべきデータを記憶する、１バイトのデータモジュールと、各前記ノードと前記ノード間コントローラとの間におけるデータ転送に関する状態情報およびコマンドを記憶する、１バイトの制御モジュールとが、各前記ノード内に設けられ、
前記複数のノードの各々から前記ノード間コントローラとの間の通信が、前記ノード毎に対応して設けられ各前記ノードと前記ノード間コントローラに直接結合する直接チャネルを通して実行されるマルチ・ノードコンピュータシステム内で、前記ノードが前記ノード間コントローラとの間の通信を可能にするためのコンピュータプログラムを含むコンピュータ読取り可能な記録媒体において、
前記データモジュールに第１のデータを書込む段階と、
前記ノード間コントローラに対する前記第１のデータの転送を可能にするため、前記制御モジュールに対し第１のデータ転送コマンドを書込む段階と、
前記ノード間コントローラによる前記第１のデータ転送コマンドの履行状態に対応する第１のデータ転送状態コードを前記制御モジュールが受信しているか否かを監視する段階と、
前記第１のデータ転送状態コードの受信に応答して、前記のデータ転送を続行するか否かを決定する段階と、
を履行させるコンピュータ読取り可能な記録媒体。
【請求項１２】
複数のノードと、前記複数のノードと通信可能に接続されたノード間コントローラと、を少なくとも有し、
各前記ノードと前記ノード間コントローラとの間で転送されるべきデータを記憶する、１バイトのデータモジュールと、各前記ノードと前記ノード間コントローラとの間におけるデータ転送に関する状態情報およびコマンドを記憶する、１バイトの制御モジュールとが、各前記ノード内に設けられ、
前記複数のノードの各々から前記ノード間コントローラとの間の通信が、前記ノード毎に対応して設けられ各前記ノードと前記ノード間コントローラに直接結合する直接チャネルを通して実行されるマルチ・ノードコンピュータシステム内で、前記ノードが前記ノード間コントローラとの間の通信を可能にするためのコンピュータプログラムを含むコンピュータ読取り可能な記録媒体において、
前記第１のデータ転送コマンドに応答して、前記ノード間コントローラが前記データモジュールにデータを送信できるようにするため、前記制御モジュール内に前記第１のデータ転送コマンドを書込む段階と、
前記ノード間コントローラによる前記第１のデータ転送コマンドの履行状態に対応する第１のデータ転送状態コードを前記制御モジュールが受信しているか否かを監視する段階と、
前記第１のデータ転送状態コードに応答して前記のデータ転送を続行するか否かを決定する段階と、
を履行させるコンピュータ読取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
関連出願
本発明は、その主題が本明細書の全体に亘って参考として取り入れられている、Yukio Nishimura et al.により２００１年６月１９日付けで出願された「マルチ・ノードシステムにおけるノード内ファームウェアとノード間ファームウェアとの間での最小のハードウェア資源を用いた正常条件およびエラー条件中の単純なデータ転送方法」の名称の、同時係属米国暫定特許出願第６０／２９９,５７９号に対し、３５Ｕ.Ｓ.Ｃ§１１９（ｅ）に基づく優先権を主張するものである。
【０００２】
【発明に属する技術分野】
本発明は一般に、マルチ・ノードコンピュータシステム，より特定的には、マルチ・ノードコンピュータシステムのノード内ファームウェアとノード間ファームウェアの間でデータを転送するための方法およびシステムに関する。
【０００３】
【従来の技術および発明が解決しようとする課題】
マルチ・ノードコンピュータシステムは、図８に示すような多数の中央処理装置（ＣＰＵ）ノード、メモリノード、および入出力（ＩＯ）ノードを含む。これらのＣＰＵノード、メモリノードおよびＩＯノードは、相互接続を通して結合され得る。
【０００４】
マルチＣＰＵノードは通常、さまざまなシステム管理タスクに関連するデータまたはメッセージを転送するため、ノード間コントローラに接続している。従来のマルチ・ノードコンピュータシステムは通常、データ転送を制御および完了するため各ＣＰＵノードとノード間コントローラとの間に直接チャネルを樹立する。これを行うためには、従来のシステムにおけるＣＰＵノードは、１バイトコマンドレジスタ、１バイト状態レジスタ、１バイトデータ−インレジスタおよび１バイトデータ−アウトレジスタを含む、共用４バイトレジスタを使用する。しかしながら、かかるハードウェア構成は、ハードウェア資源を浪費し、マルチ・ノードコンピュータシステムのその他の実現上の問題をひき起こす。たとえば、従来のＣＰＵノードは、データを送受信するためにそのスクラッチレジスタを使用する。その結果、各ＣＰＵノード内のスクラッチレジスタは、その他のいずれの目的のためにも利用できない可能性がある。従って、最小限のハードウェア資源を使用し、従来のマルチ・ノードコンピュータシステムで遭遇する問題点をなくするような、マルチ・ノードコンピュータシステム内のノード間コントローラおよびＣＰＵノードのための単純なデータ転送メカニズムを提供することが望まれる。
【０００５】
【課題を解決するための手段】
本発明の好ましい実施形態は、従来のコマンドレジスタと状態レジスタを１バイトモジュールの形に統合し、データインレジスタとデータアウトレジスタを１バイトデータモジュールの形に統合する。こうして、ノード内ファームウェアとノード間ファームウェアの間のデータ転送を可能にするために２バイトハードウェアを用いることによってハードウェア資源は実質的に削減される。
【０００６】
さらに、２バイトデータモジュールおよび制御モジュールを用いてデータを転送するようノード内ファームウェアとノード間ファームウェアに命令すべく複数の制御コードおよびデータ転送機能を用いるための方法が提供されている。該データ転送メカニズムは、ノード内ファームウェアとノード間ファームウェアとの間で多数の優先順位決定済データを取扱う能力をもつ。より高い優先順位にあるデータ転送ルーチンは、優先順位のより高いデータの転送を確保すべく、より低い優先順位にある現行データ転送を中断または延期することができる。中断されたデータ転送は、後で再開または再試行され得る。
【０００７】
【発明の実施の形態】
図１は、マルチ・ノードコンピュータシステム１００を示している。該システム１００は、中央処理装置（ＣＰＵ）ノード１１４，メモリ（ＭＥＭ）ノード１０７および入出力（ＩＯ）ノード１０６といった複数のノード、相互接続スイッチ１０２およびノード間コントローラ１０４を含む。ＣＰＵノード１１４およびＩＯノード１０６といったようなノード素子は、相互接続スイッチ１０２を介して接続されている。ＣＰＵノード１１４は以下で示すようにチャネル接続を介してノード間コントローラ１０４に接続されている。ＩＯノード１０６は少なくとも１つのＩＯデバイス１０８を収納する。マルチ・ノードコンピュータシステム１００においては、各ノード１１４，１０６は、別々のコンピュータチップ，コンピュータボードまたは独立型ユニット上に実現することができる。相互接続スイッチ１０２は例えば、さまざまなコンピュータアプリケーションのために要求およびデータをノード１１４，１０６間で切換えるべくグローバルインターコネクトであるかまたはルーターを含むことができる。システム１００のアプリケーション例としては、サーバアプリケーションがある。
【０００８】
図１はまた、ノード内ファームウェア１１６としてＣＰＵノード１１４内に含まれる全てのソフトウェアおよびハードウェアにも関するものである。ノード内ファームウェア１１６は、分散型計算、ＩＯデバイス１０８を用いた入出力読取り／書込みオペレーションといった意図された機能を各ＣＰＵノード１１４が履行できるようにする。かかるノード内ファームウェアは従来のものであってよいが、マルチ・ノードコンピュータアーキテクチュア内で有効に動作するため、各ノード内ファームウェア１１６は、標準的に、システム初期化、エラー取扱い、ドメイン分割などを履行するノード間コントローラ１０４に結合される。説明のために、ノード間コントローラ１０４内の全てのソフトウェアおよび関係するハードウェアは、ノード間ファームウェア１１８と称する。ノード間ファームウェア１１８は、ＣＰＵノード１１４およびＩＯノード１０６の動作を管理する能力をもつ。例えば、ノード間ファームウェア１１８はシステム初期化およびエラーログを担当する。ノード間ファームウェア１１８はメモリノード１０７，ＩＯノード１０６およびノード間コントローラ１０４を初期化することができる。ノード間ファームウェア１１８はまた、ノード温度または電圧ファンなどを観察することもできる。これらのタスクを達成するために、ノード間ファームウェア１１８およびノード内ファームウェア１１６は標準的に、図１および２を参照して以下で詳細に記述するようなデータおよび制御チャネルを通して互いに通信する。
【０００９】
図１は、２つのタイプのデータおよび制御チャネル、すなわち正規チャネル１１０と直接チャネル１１２を示している。マルチ・ノードコンピュータシステム１００内の正規チャネル１１０には、相互接続スイッチ１０２，ＩＯノード１０６およびＩＯデバイス１０８が関与している。標準的には、正規チャネル１１０は、ノード間ファームウェア１１８をＩＯノード１０６内でＩＯデバイス１０８と結合する。マルチ・ノードコンピュータシステム内での正規チャネル１１０の現行の実現は信頼性の高いものではなく、その動作にはシステム１００の初期化が必要である。かくして、システム１００の好ましい実施形態においては、ノード間ファームウェア１１８をノード内ファームウェア１１６と結合させるために直接チャネル１１２が具備されている。ノード内ファームウェア１１６とノード間ファームウェア１１８との間の直接チャネル１１２は、エラーロギングおよびシステム管理情報収集といったようなさまざまな目的のために信頼性の高いデータ転送メカニズムを提供する。
【００１０】
図２は、直接チャネル１１２を通してノード間ファームウェア１１８と結合する１つのノード内ファームウェア１１６を例示する概略図である。マルチ・ノードシステム１００においては、直接チャネル１１２の数は、ＣＰＵノード１０６の数と等しい。すなわち、各ＣＰＵノード１０６は、１つの直接チャネル１１２を通してノード間コントローラ１０４に結合される。通信を確立するために、ノード内ファームウェア１１６は、データモジュール１２０と制御モジュール１２２を含む。データモジュール１２０は、ノード内ファームウェア１１６とノード間ファームウェア１１８との間で転送されるべきデータを記憶する。かかるデータは、エラー情報、ノード性能レベル、ノード構成情報、フロントパネルメッセージ情報およびウォッチドッグ情報であってよく、これらは、ノード間ファームウェア１１８に報告される必要がある。ノード間ファームウェア１１８はまた、システム管理の必要性に応じて、特定のオペレーションを履行するためにノード内ファームウェア１１６にデータを送信することもできる。制御モジュール１２２は、ノード内ファームウェア１１６と相互接続コントローラ１０４の間のデータ転送に関する状態情報およびさまざまなコマンドに対応する複数の制御コードを記憶する。以下で例示するように、本発明の実施形態によって提供されている制御コードは、マルチ・ノードコンピュータシステム１００のために最小限のハードウェアコストしか用いずに多数の優先順位決定済みデータを取り扱うデータ転送メカニズムを有効化する。
【００１１】
好ましい一実施形態においては、各、データモジュール１２０および制御モジュール１２２のサイズはちょうど１バイトである。この実施形態を実現するためには、モジュール１２０および１２２は、ＣＰＵノード１１４内で共通使用されるスクラッチレジスタ、あるいはＣＰＵノード１１４のその他のコンポーネントと共用されるその他のあらゆる従来のメモリーデバイスであってよい。各直接チャネル１１２について、本発明によると、わずか２バイトのレジスタまたはメモリしか必要でない。こうすることによって、本発明は、ノード内ファームウェア１１６とノード間ファームウェア１１８との間のデータ転送を履行するために４バイトレジスタを使用するという必要条件をなくしている。こうして、ＣＰＵノード１１６のためのハードウェア必要条件は容易になり、結果として、多重優先順位決定済みデータ転送の１００％の能力を提供する一方で、ハードウェアコストは実質的にさらに低いものとなる。
【００１２】
図３および４を参照しながら以下でより詳細に記述するように、システム１００の動作中、ノード内ファームウェア１１６がノード間ファームウェア１１８に対しより優先順位の高いデータ、例えばＣＰＵノード１１４によるエラーレポートを送信する必要がある場合、本明細書で提供されているデータ転送メカニズムは中断ルーチンを開始させ、ファームウェア１１６とファームウェア１１８の間で進捗する間に現行のデータ転送ルーチンを中断または延期させることができる。一実施形態においては、データ通信を開始するため、ノード内ファームウェア１１６は、ノード間ファームウェア１１８に対し中断信号を送信する。ノード間ファームウェア１１８は、このとき制御モジュール１２２から制御コマンドを読取り、データモジュール１２０からデータを検索するか、データモジュール１２０からデータを送信する。ノード間ファームウェア１１８が、制御コマンドによって指示されたとおりに１つのオペレーションを終了した後、ノード間ファームウェア１１８は、ノード内ファームウェア１１６が次になすべきことを知ることができるように状態コードを制御モジュール１２２に戻すことができる。こうすることによって、より優先順位の高い中断ルーチンは、その後より高い優先順位決定済みデータをファームウェア１１８に送達あるいは、ファームウェアからそれを受信することができる。同時に、延期されたデータ転送のコンテキストを、以下で図５および６を参照しながら記述するように一時的に記憶し、かつその後、より高い優先順位のデータ転送が完了した後で回復させることができる。
【００１３】
好ましい一実施形態においては、２つのモジュール１２０，１２２を通してのデータ転送を可能にすべく一組の制御コードが提供される。ファームウェア１１６および１１８はこれらの制御コードを、データ転送の必要性によって決定されるように、制御モジュール１２２内にアサートすることができる。一実施形態においては、データ転送を制御するために使用される制御コードのカテゴリーは少なくとも４つ存在し得る。すなわち、
（１）トランザクションなしを表わす制御コード。例えば、制御コード「０」は、ファームウェア１１６と１１８の間にいかなるトランザクションも発生していないことを示す。
【００１４】
（２）ノード内ファームウェア１１６からノード間ファームウェア１１８へ発出されるコマンドに対応する制御コード。例えば制御コード ０ｘ０１−０ｘ７Ｆ１６進数は、ノード内ファームウェア１１６がノード間ファームウェア１１８に対し送信することのできる複数のコマンドに対応する。
【００１５】
（３）ノード間ファームウェア１１８からノード内ファームウェア１１６に送信される状態情報に対応する制御コード。例えば制御コード、０×Ｃ０−０×ＥＦ １６進数は、ノード内ファームウェア１１６によって発出されたコマンドを履行するノード間ファームウェア１１８のさまざまな状態を表わす。（４）ノード内ファームウェア１１６によって設定された状態情報に対応する制御コード。ある条件下、例えばデータ転送にエラーが発生している場合などには、ノード内ファームウェア１１６は、中断されたデータ転送を再開せず、ファームウェア１１６とファームウェア１１８との間のかかる中断されたデータ転送を打ち切ることを選択する可能性がある。後に、ファームウェア１１６はこの打ち切られたデータ転送を再試行することができる。
【００１６】
本発明の上述の実施形態は、ノード内ファームウェア１１６に対してコマンドを発出すべくノード間ファームウェア１１８のための特定の一組の制御コードを規定していないという点に留意されたい。これは、ファームウェアの実現を単純化させる上で一助となる。ノード間ファームウェア１１８は、データ転送を指令（コマンド）する必要がある場合、ノード内ファームウェア１１６に対し中断信号を送信することができる。このとき、ノード内ファームウェア１１６は、ノード間ファームウェア１１８がどのようなタイプのオペレーションを要望しているかを見い出すため、ノード間ファームウェア１１８からのデータを受信することになる。
【００１７】
下記の表１は、本発明の一実施形態による制御コードリストを示している。表１の左欄には、制御コードの名前が含まれている。中央欄は、それぞれの制御コードを実現する実施形態としての１６進コードに対応する。右欄は、４つのカテゴリーのうちのいずれにその制御コードが属するかを表わしている。
【００１８】
【表１】
0004675541.tif 000002
【００１９】
１６進数の０で表現されている表１中の制御コード、「ＮＯ＿ＴＲＡＮＳＡＣＴＩＯＮ」は、ファームウェア１１６と１１８の間に現行の相互作用が全く存在しないことを表わしている。ノード内ファームウェア１１６は、コマンドが履行され完了したときに制御モジュール１２２内にこのコードを書込む。新しい中断ルーチンがこの制御コードを読取ったときに、かかる中断ルーチンは、その他のデータ転送を全く打切ることなしに 制御モジュール１２２に対してコマンドを発出することができる。
【００２０】
１６進数の０ｘ０１で表現された制御コード、「ＣＭＤ＿ＡＢＯＲＴ」は、現行コマンドを打切るよう、ノード内ファームウェア１１６がノード間ファームウェア１１８に依頼していることを表わしている。かかる制御コードは、より高い優先順位のデータ転送のために現行データ転送を中断するために必要とされる。この制御コードを読取った時点で、ノード間ファームウェア１１８は、現行コマンドのコンテキストを一掃する。コマンドのコンテキストは、送信または受信された最後のデータおよび状態情報を含むことができる。
【００２１】
標準的には、２５６バイト以下の長さのデータを送信するのに用いられる１６進数の０ｘ２０で表現される制御コード「ＣＭＤ＿ＳＳＮＤ＿ＦＳＴ」は、ノード内ファームウェア１１６がノード間ファームウェア１１８に転送されたデータの第１のバイトを送信していることを表わす。一実施形態においては、転送されたデータの第１のバイトは、１つのセッション内で転送すべきデータのバイト長の情報を含んでいる。データ転送全体の実際の長さは、最初のデータを考慮に入れてバイト長に１を加えたものとなる。一実施形態においては、転送されたデータの最小の長さは、１バイトであり、最大長は２５６バイトである。この制御コードを読取った時点で、ノード間ファームウェア１１８は、データモジュール１２０から第１のバイトを読取り、入データを受信するためメモリまたはレジスタを割当てることになる。「ＣＭＤ＿ＳＳＮＤ＿ＦＳＴ」コマンドに対応する関連オペレーションが完了した後、ノード間ファームウェア１１８は、標準的には、状態コード「ＳＴＳ＿ＮＸＴ＿ＯＫ」を用いて制御モジュール１２２に応答し、ノード内ファームウェア１１６が以下に記述するように次のコマンドを送り続けることができるようにする。
【００２２】
標準的に２５６バイト以下の長さのデータを送信する上で使用される、１６進数の０ｘ２１で表現される制御コード、「ＣＭＤ＿ＳＳＮＤ＿ＣＮＴ」は、ノード内ファームウェア１１６がノード間ファームウェア１１８に第２またはそれ以降のデータバイトを送っていることを表わす。このコマンドは、現在データモジュール１２０内で利用可能であるデータをノード内ファームウェア１１６が読取ることを可能にする。データがそのメッセージの最後のバイトでない場合、ノード間ファームウェア１１８は状態コード「ＳＴＳ＿ＮＸＴ＿ＯＫ」で応答し、次にノード内ファームウェア１１６が次のデータを送信し続ける。ノード間ファームウェア１１８は、ノード内ファームウェア１１６からこのセッション内の全てのデータを受信したときに、状態「ＳＴＳ＿ＣＭＰＬＴ」で応答することになる。
【００２３】
標準的に２５６バイト以上の長さのデータを送信する上で使用される、１６進数の０ｘ２２で表現される制御コード、「ＣＭＤ＿ＬＳＮＤ＿ＦＳＴ」は、ノード内ファームウェア１１６がノード間ファームウェア１１８に第１のデータバイトを送っていることを表わす。「ＣＭＤ＿ＳＳＮＤ＿ＦＳＴ」と同様、ノード間ファームウェア１１８は、コマンドが正常終了で完了したときに「ＳＴＳ＿ＮＸＴ＿ＯＫ」で応答する。
【００２４】
標準的に２５６バイト以上の長さのデータを送信する上で使用される、１６進数の０ｘ２３で表現される制御コード、「ＣＭＤ＿ＬＳＮＤ＿ＣＮＴ」は、ノード内ファームウェア１１６がノード間ファームウェア１１８に第２またはそれ以降のデータバイトを送っていることを表わす。ノード間ファームウェア１１８は、コマンドが正常終了で完了したときに「ＳＴＳ＿ＮＸＴ＿ＯＫ」で応答する。
【００２５】
標準的に２５６バイト以上の長さのデータを送信する上で使用される、１６進数の０ｘ２４で表現される制御コード、「ＣＭＤ＿ＬＳＮＤ＿ＥＮＤ」は、ノード内ファームウェア１１６がノード間ファームウェア１１８に、そのデータ転送の最後のバイトを送っていることを表わす。ノード間ファームウェア１１８は、それがこのセッションの全てのデータを受信したときに、ＳＴＳ＿ＣＭＰＬＴで応答する。
【００２６】
標準的に２５６バイト以下の長さのデータを送信する上で使用される、１６進数の０ｘ４０で表現される制御コード、「ＣＭＤ＿ＳＲＣＶ＿ＦＳＴ」は、ノード内ファームウェア１１６がノード間ファームウェア１１８から第１のデータバイトを受信する準備ができていることを表わす。ここでもまた、一実施形態においては、第１のバイトは、ノード間ファームウェア１１８から受信すべきデータのバイト長に対応する。最小長は１バイトであり、最大長は２５６バイトである。ノード間ファームウェア１１８は、このコマンドを読取った後、第１のバイトをノード内ファームウェア１１６のデータモジュール１２０に送り、次に状態コード「ＳＴＳ＿ＮＸＴ＿ＯＫ」で制御モジュール１２２に応答することになる。ノード内ファームウェア１１６は、データモジュール１２０から第１のバイトを読取り、ノード間ファームウェア１１８から残りのデータを受信するよう準備する。
【００２７】
標準的に２５６バイト以下の長さのデータを送信する上で使用される、１６進数の０ｘ４１で表現される制御コード、「ＣＭＤ＿ＳＲＣＶ＿ＣＮＴ」は、ノード内ファームウェア１１６がノード間ファームウェア１１８から第２またはそれ以降のデータバイトを受信していることを表わす。ノード間ファームウェア１１８は、それが情報の最後のバイトを送信する前は「ＳＴＳ＿ＮＸＴ＿ＯＫ」で応答し、データを全て送信し切ったときに「ＳＴＳ＿ＣＭＰＬＴ」で応答する。
【００２８】
標準的に２５６バイト以上の長さのデータを受信する上で使用される、１６進数の０ｘ４２で表現される制御コード、「ＣＭＤ＿ＬＲＣＶ＿ＦＳＴ」は、ノード内ファームウェア１１６がノード間ファームウェア１１８から第１のデータバイトを受信していることを表わす。ノード間ファームウェア１１８は、コマンドが完了したときに「ＳＴＳ＿ＮＸＴ＿ＯＫ」で応答する。
【００２９】
標準的に２５６バイト以上の長さのデータを受信する上で使用される、１６進数の０ｘ４３で表現される制御コード、「ＣＭＤ＿ＬＲＣＶ＿ＣＮＴ」は、ノード内ファームウェア１１６がノード間ファームウェア１１８から第２またはそれ以降のデータバイトを受信していることを表わす。ノード間ファームウェア１１８は、それが情報の最後のバイトを送信する前は「ＳＴＳ＿ＮＸＴ＿ＯＫ」で応答し、データを全て送信し切ったときに「ＳＴＳ＿ＣＭＰＬＴ」で応答する。
【００３０】
１６進数の０×Ｃ０で表現される制御コード、「ＳＴＳ＿ＣＭＰＬＴ」は、ノード間ファームウェア１１８が、正常終了でコマンドシーケンスを完了することを表わす。ノード間ファームウェア１１８は、コマンドシーケンスを完了すべく付加的なコマンドを有する場合、「ＳＴＳ＿ＮＸＴ＿ＯＫ」で応答する。制御コード「ＮＯ＿transaction」と同様、ノード内ファームウェア１１６の中断ルーチンは、そのルーチンがＳＭＥＭスクラッチレジスタの先行するデータレジスタをセーブ／復旧させるかぎり、この値を読取ったときに、いかなる打切りもなく、コマンドを発出することができる。
【００３１】
１６進数の０ｘＣ１で表現される制御コード、「ＳＴＳ＿ＮＸＴ＿ＯＫ」は、ノード間ファームウェア１１８が正常終了でコマンドシーケンスの最初または中間のコマンドを完了したことを表わす。ノード内ファームウェア１１６の中断ルーチンが、制御モジュール１２２において「ＳＴＳ＿ＮＸＴ＿ＯＫ」を読取った場合、中断ルーチンは、より高い優先順位のデータ転送を開始するため、いずれかの新しいコマンドを発出する前に現行データ転送を打切るべく「ＣＭＤ＿ＡＢＯＲＴ」を発出する必要がある。
【００３２】
１６進数の０−Ｄ０で表現される制御コード「ＳＴＳ＿ＳＤＮ＿ＣＮＴ＿ＣＭＤ」は、ノード間ファームウェア１１８が、第１のコマンドなしでコマンドシーケンスの第２またはそれ以降のコマンドを受信したことを表わす。この状況下では、ノード間ファームウェア１１８は、不完全なコマンドコンテキストが存在する場合、これを一掃しなければならない。
【００３３】
１６進数の０ｘＦ０により表現される制御コード「ＳＴＳ＿ＡＢＯＲＴＥＤ＿ＢＹ＿ＳＦ」は、ノード内ファームウェア１１６自体によって発出される状態情報の例である。前述のように、この制御コードは、ノード内ファームウェア１１６がある状況下で中断されたデータ転送ルーチンを後に再開するのではなく、むしろ打切ることを決定していることを表わしている。例えば、中断されたデータ転送に何らかのエラーが起こった場合または中断されたデータ転送のコンテキストをセーブできない場合などがそれである。従って、より効率がよいのは、中断されたデータ転送を打切ることである。この状態制御コードを受信した時点で、中断されたノード内ファームウェア１１６は、打切られたコマンドを再試行してデータ転送を再度開始させることができる。
【００３４】
制御コードについての前述の説明が単に、１バイトのデータモジュール１２０および制御モジュール１２２を通してデータ転送を実現するために使用されるコマンドおよび状態コードの一例にすぎないという点に留意されたい。それぞれのノード内ファームウェア１１６およびとノード間ファームウェア１１８との間のデータ転送を可能にできる代替的制御コードセットが存在する。
【００３５】
図３は、ノード内ファームウェア１１６からノード間ファームウェア１１８へデータを送信するための方法を例示するフローチャートである。かかる方法は、ファームウェア１１６によるデータ転送を開始させるべく、新しい中断ルーチンによって毎回呼出され得る関数（function）ＳＭreceive として実現可能である。図３に示すように、ノード内ファームウェア１１６における中断ルーチンが、この関数を呼出した場合、ノード内ファームウェア１１６とノード間ファームウェア１１８との間の現行データ転送のコンテキストはセーブされる（２０２）。現在ノード間ファームウェア１１８が取扱っている現行データ転送のコンテキストのセーブは、以下で詳述する図５に記述されているような関数saveＳＭＥＭcontext によって実現され得る。中断されたデータ転送ルーチンのコンテキストセービングは、その後、より高い優先順位のデータ転送が完了した後そのデータ転送を再開することを可能にする。
【００３６】
コンテキストがセーブされた後、ノード内ファームウェア１１６は、制御モジュール１２２内にコマンドを書込む（２０１）。一例としては、コマンドは、上述したように、ノード間ファームウェア１１８から第１のデータバイトを受理するコマンドを表わすコード「ＣＭＤ＿ＳＲＣＶ＿ＦＳT」であり得る。その後、ノード内ファームウェア１１６は、データモジュール１２０にデータを送るべくノード間ファームウェア１１８に要請するため、中断信号（ＳＭ．ＩＮＴ＃と称する）を送信する（２０３）。ノード間ファームウェア１１８がこのＳＭ．ＩＮＴ＃に反応しデータを送信する一方、ノード内ファームウェア１１６は、制御モジュール１２２から現行コマンドの状態を表わす制御コードを読取るまで待機する（２０３）。
【００３７】
ノード間ファームウェア１１８の側では、中断信号ＳＭ．ＩＮＴ＃を受信した時点（２０５）で、ノード間ファームウェア１１８は制御モジュール１２２からコマンドを読取る（２０７）。コマンド「ＣＭＤ＿ＳＲＣＶ＿ＦＳＴ」はデータの第１のバイトを受信するよう命令することから、ノード間ファームウェア１１８は、データの第１のバイトをデータモジュール１２０内に書き戻す（２０９）。前述のように、データの第１のバイトは、１つのセッション内でノード内ファームウェア１１６に送達するよう意図されているデータの長さに対応する。ノード内ファームウェア１１６は、データの第１のバイトに基づいて、ノード間ファームウェア１１６からどれだけのデータを受理することが予想されるかを知ることになる。
【００３８】
同時に、ノード間ファームウェア１１８はまた、モジュール１２０内への第１のデータバイトの書込み完了後、制御モジュール１２２内に状態コードを戻す（２０９）ことになる。コマンド「ＣＭＤ＿ＳＲＣＶ＿ＦＳＴ」の場合においては、ノード間ファームウェア１１８は、状態「ＳＴＳ＿ＮＸＴ＿ＯＫ」を制御モジュール１２２内に挿入して、ノード内ファームウェア１１６が残りのデータを受信するべく、次のコマンドを書込み続けるようにする。
【００３９】
ノード内ファームウェア１１６は、状態「ＳＴＳ＿ＮＸＴ＿ＯＫ」を受信した後、データモジュール１２０からデータを読取る（２１０）。「ＳＴＳ＿ＮＸＴ＿ＯＫ」は、データ転送がなおも完了していないことを意味することから、ノード内ファームウェア１１６は、次のデータ転送を要求すべく制御モジュール１２２に別のコマンドを出すために戻る。例えば、ファームウェア１１６はここで、コマンド「ＣＭＤ＿ＳＲＣＶ＿ＣＮＴ」を制御モジュール１２２内に入れる。ファームウェア１１８はこのコマンドをモジュール１２２から読取り続け、キュー内の残りのデータを送信することによって応答する。このセッションについて全てのデータを送信し切った後、ファームウェア１１８は、完了状態「ＳＴＳ＿ＣＭＬＴ」を戻すことになる。ノード内ファームウェア１１６は、制御モジュール１２２内でこの完了状態コードをひとたび読取った（２０８）ならば次に進むことができ、ノード内ファームウェア１１６は制御モジュール１２２をクリアし、以前に中断されたコマンドを復旧させる。中断されたデータ転送の回復は、図６に記述されているような関数restoreＳＭＥＭcontextを呼出すことによって実現可能である。
【００４０】
図４は、ノード内ファームウェア１１６からノード間ファームウェア１１８までデータを送信するための方法を示すフローチャートである。この方法は、ノード内ファームウェア１１６の新しい中断ルーチンによって呼出されるべき関数ＳＭsendとして実現できる。中断ルーチンがノード間ファームウェア１１６からノード内ファームウェア１１８まで、より優先順位の高いデータを送るためにひとたび呼出しを行うと、現行データ転送は中断され、そのコンテキストがセーブされる（３００）。上述のように、コンテキストセーブは、saveＳＭＥＭcontext関数を呼出すことによって履行できる。このとき、ノード内ファームウェア１１６はデータモジュール１２０内に第１のデータを書込み（３０１）、コマンドを制御モジュール１２２に書込んで（３０３）、ノード間ファームウェア１１８にデータをノード内ファームウェア１１６から読取るよう命令する。例えば、コマンドは、ノード間ファームウェア１１８にこのセッションで転送されようとしている第１のデータバイトを受信するように要求する「ＣＭＤ＿ＳＳＮＤ＿ＦＳＴ」である。コマンドが書込まれた後、ノード内ファームウェア１１６は次にノード間ファームウェア１１８に対し中断信号、ＳＭ.ＩＮＴ＃を発出する（３０５）。
【００４１】
ノード間ファームウェア１１８の側では、ノード間ファームウェア１１８が取扱っている現行データ転送は、ＳＭ.ＩＮＴ＃により中断される（３０７）。中断信号に応答して、ノード間ファームウェア１１８は次に、制御モジュール１２２からコマンドを読取る（３０９）。例を挙げると、「ＣＭＤ＿ＳＳＮＤ＿ＦＳＴ」というコマンドの場合、ノード間ファームウェア１１８は、データモジュール１２０から第１のデータバイトを読取り（３１１）、「ＳＴＳ＿ＮＸＴ＿ＯＫ」状態を制御モジュール１２２内に書き戻す。上述のように、第１のデータバイトは、転送されるべきデータの長さを表わす。その結果、ノード間ファームウェア１１８は、このセッションについての残りのデータを受信する準備をすることができ、ノード内ファームウェア１１６から全てのデータが受信されたことをひとたび検出した時点で、「ＳＴＳ＿ＣＭＰＬＴ」を戻す。
【００４２】
ノード内ファームウェア１１６の側では、中断ルーチンは制御モジュール１２２から状態情報を読取り、それが「ＳＴＳ＿ＣＭＬＴ」であるか否かを検出する（３１３）。そうでない場合には、ノード内ファームウェア１１６は、第２のデータバイトをデータモジュール１２０に書込み続け（３０１），第２のデータバイトをノード間ファームウェア１１８に送ることができるように制御モジュール１２２に対して例えば「ＣＭＤ＿ＳＳＮＤ＿ＣＮＴ」といった別のコマンドを書込む。ノード間ファームウェア１１８が状態「ＳＴＳ＿ＣＭＰＬＴ」を戻したときに、ノード内ファームウェア１１６は、制御モジュール１２２をクリアし（３１７）、前に中断されたデータ転送を回復させる（３１９）。
【００４３】
本発明を実現するのにＳＭ.ＩＮＴ＃を使用する必要はないという点に留意されたい。変形実施形態においては、中断信号は制御モジュール１２２をポーリングすべく、ノード間ファームウェア１１８とノード内ファームウェア１１６との両方を周期的に構成することによって、省略可能である。かかるポーリングプロセスは、ノード間ファームウェア１１８およびノード内ファームウェア１１６に、制御モジュール１２２内の新たにアサートされたコマンドまたは状態の存在に関する通知を与えることができる。その結果、ノード間ファームウェア１１８およびノード内ファームウェア１１６は、制御モジュール１２２内のコマンドおよび状態情報を読取って、上述したようにデータ転送関数ＳＭsendまたはＳＭreceiveを履行することができる。
【００４４】
図５は、中断されたルーチンのコンテキストをセーブするための方法を例示するフローチャートである。上述したように、この方法は、中断ルーチン内の関数 saveＳＭＥＭcontextを呼出すことによって実現可能である。
【００４５】
一実施形態においては、関数 saveＳＭＥＭcontextは、全ての中断されたデータ転送が後に回復されるべきであるということを推定する、「Ｎｏ＿Ａｂｏｒｔ」にコンテキスト値をセットする（４０１）ことによって開始する。かかるコンテキスト値は、特殊な状況下で「打切る」ように変えることができる。例えば、現行データ転送に何か異常なことが発生した場合、中断ルーチンが完了した後，かかるデータ転送を復旧させる必要性は全くなくなるかもしれない。saveＳＭＥＭcontextはただ単に、ノード間ファームウェア１１８に現行データ転送の打切りについて知らせるような形で、値を「Ａｂｏｒｔ」となるようセットし、制御モジュール１２２に対してコマンド「ＣＭＤ＿ＡＢＯＲＴ」を書込むことができる。次にノード内ファームウェア１１６がかかるデータ転送を復旧させるべく再試行し、値「Ａｂｏｒｔ」を読取った場合、ノード内ファームウェア１１６は、中断された場所から再開する代わりに中断されたデータ転送を単純に再試行することができる。
【００４６】
別のケースにおいては、より優先順位の高いデータ転送が確実に間に合うように行えるようにするため、saveＳＭＥＭcontext関数は、必要とあらば、受信するファームウェア１１８が状態コードを書き戻すまで待つのではなくむしろ、ノード間ファームウェア１１８に対し打切りコマンドを発出することができる。より優先順位の高いデータ転送のために打切られたかかるルーチンは、その後再開されることはないという点に留意されたい。以下で記述するように、restoreＳＭＥＭcontext関数は、この打切られたルーチンを後に正に再試行できるような形で、制御モジュール１２２内に「ＳＴＳ＿ＡＢＯＲＴＥＤ＿ＢＹ＿ＳＦ」を単にセットすることができる。
【００４７】
値「Ｎｏ＿Ａｂｏｒｔ」をセットした後、中断されたルーチンが進行中である場合、ノード内ファームウェア１１６は、ノード間ファームウェア１１８が任意の状態情報を制御モジュール１２２内に書込むまで待つ。状態が制御モジュール１２２内に書込まれ、中断されたルーチンの新しいコマンドが制御モジュール１２２で出された後、ノード内ファームウェア１１６は、ＳＭ.ＩＮＴ＃を「Ｏｎ」になるようセットし（４０７）、これは、ノード間ファームウェア１１８に対しこのコマンドを送るプロセスを中断するかまたは、ノード間ファームウェア１１８が任意の状態コードを制御モジュール１２２内に戻すのを妨げる。さらにノード内ファームウェア１１６は次に、制御モジュール１２２内の現行制御コードおよびデータモジュール１２０内の現行データを所定の場所にセーブすることによって、現行データ転送のコンテキストをセーブする（４０７）。かかる所定の場所は、ＣＰＵノード１１４における共用メモリまたはレジスタであってよい。これらのセーブされた情報はその後、中断されたルーチンを再開するために検索されることになる。
【００４８】
ステップ４０９では、上述の通り、中断されたルーチンに付随する何らかの異常条件が存在するか否かが決定される。制御モジュール１２２内に何らかのエラー情報が存在する場合、この中断されたルーチンを打切るために値「Ａｂｏｒｔ」をセットすることができる。中断されたルーチンのコンテキストがセーブされた後、saveＳＭＥＭcontextは、中断ルーチンにまで戻り、このルーチンは優先順位決定済みデータ転送を履行し始める。
【００４９】
図６は、中断されたルーチンのコンテキストを復旧させるための方法を例示するフローチャートである。図４および５で上述したように、優先順位の高いデータ転送が完了した後、前に中断されたものを復旧させることが好ましい。それを行うためには、中断されたデータ転送のコンテキストは、データモジュール１２０および制御モジュール１２２へ復旧させられる（５０１）。
【００５０】
一方では、中断されたルーチンのコンテキストが値「Ａｂｏｒｔ」を含む場合（５０３）、その中断されたルーチンは再開されない。その代わり、状態「ＳＴＳ＿ＡＢＯＲＴＥＤ＿ＢＹ＿ＳＦ」が制御モジュール１２２内に書込まれる（５０５）。上述のように、状態コード「ＳＴＳ＿ＡＢＯＲＴＥＤ＿ＢＹ＿ＳＦ」は、ノード内ファームウェア１１６に対しデータ転送を再開せず、そのデータ転送全体を再試行するよう命令することになる。そうすることにより、中断されたデータ転送に関連する潜在的エラーが回避される。
【００５１】
回復されたルーチンが状態に関する知識を全くもたないように、中断されたルーチンを復旧させるときに後続コマンドを状態「ＳＴＳ＿ＡＢＯＲＴＥＤ＿ＢＹ＿ＳＦ」に重ね書きすることができる変形実施形態においては、ノード間ファームウェア１１８は、状態コード「ＳＴＳ＿ＡＢＯＲＴＥＤ＿ＢＹ＿ＳＦ」に続くあらゆる後続コマンドをエラーとして処理することができる。ノード間ファームウェア１１８はかくして、その第１のコマンドから中断されたルーチンの再試行を指図するよう、上述のとおり状態コード「ＳＴＳ＿ＳＤＮ＿ＣＮＴ＿ＣＭＤ」を戻す。
【００５２】
本発明は、別の変形実施形態において、実現を単純化するためいかなる現行データ転送も中断しないようにノード内ファームウェア１１６を構成することができる。新しいまたさらに優先順位がより高いあらゆるデータ転送は、現行データ転送が正常終了で完了するまで待機する。この実施形態においては、本発明はコンテキストをセーブまたは復旧させる関数を必要としない。
【００５３】
図７は、ノード内ファームウェア１１６により初期化された要求を処理するため、ノード間ファームウェア１１８がノード内ファームウェア１１６とインタフェースする方法を詳細に示すフローチャートである。この方法は、ノード内ファームウェア１１６からのあらゆる要求を取扱うため、ノード間ファームウェア１１８によって呼出され得る関数（function）ＳＭＥＭＩＮＴＯＵＴintとして実現できる。理解するため、図７は、ノード内ファームウェア１１６からのデータ受信を例示している。上述のようなノード内ファームウェア１１６からデータを受信する標準的プロセスにおいては、ノード内ファームウェア１１６においてモジュール１２０，１２２をインタフェースするため、ノード間ファームウェア１１８はまず最初に制御モジュール１２２からコマンドを検索する（６０１）。コマンドが「ＣＭＤ＿ＳＳＮＤ＿ＦＳＴ」である場合（６０１）、ノード間ファームウェア１１８はデータモジュール１２０から第１のデータバイトを読取り、その後第１のデータバイトに基づいてデータ転送の長さの値をセットする（６０３）。上述のように、第１のデータバイトは、セッションにおいて転送されようとしているデータの長さである。かくして、ノード間ファームウェア１１８は、このセッションにおいてノード内ファームウェア１１６から受信されることになるデータ量に対し警告を受ける。
【００５４】
データ長がセットされた後、ノード間ファームウェア１１８は、ノード間ファームウェア１１８が次のデータを受信する準備ができていることを表示すべく、制御モジュール１２２に対して状態「ＳＴＳ＿ＮＸＴ＿ＯＫ」を戻す（６０５）。次に、ファームウェア１１８は、制御モジュール１２２から読取られたコマンドが「ＣＭＤ＿ＳＳＮＤ＿ＣＮＴ」であるか否かを検出する（６０５）。「ＣＭＤ＿ＳＳＮＤ＿ＣＮＴ」の場合、ノード間ファームウェア１１８はデータモジュール１２０から第２またはそれ以降のデータバイトを読取り続ける。これに対応して、データ長カウンタは、１つだけ減少させられることになる（６１１）。データ長カウンタがゼロ、すなわち転送されたデータが最後のものである場合、ファームウェア１１８は単に状態「ＳＴＳ＿ＣＭＰＬＴ」を戻す（６１７）。ファームウェア１１８は、データ全体を受信しなかった場合、状態「ＳＴＳ＿ＮＸＴ＿ＯＫ」を戻す（６１５）。
【００５５】
ファームウェア１１８がコマンド「ＣＭＤ＿ＡＢＯＲＴ」を受信した場合（６１９）、それは、現行のデータ転送が打切られることを意味する。このときファームウェア１１８は、ファームウェア１１６とのトランザクションをクリアし、次のデータ転送またはその他のオペレーションのために初期化する。
【００５６】
ファームウェア１１８と１１６との間のデータ転送をさらに例示する目的で、以下の例は、データを転送するために上述の方法を使用したファームウェア１１８に対するメッセージ「ＢＳＰSelection done！」の転送について記述している。表２は、転送すべきデータ列全体を示す。第１のデータ「１２ｈ」は、メッセージ「ＢＳＰ Selection Done」の長さを表わす。かくして、転送すべき実際のデータ長は１６進数で１３ｈである。
【００５７】
一実施形態においては、表２中でメッセージを表示するため、ファームウェア１１６上で実行中であるメッセージ表示関数が、図３に関して上述したようなＳＭsend関数を呼出す。
【００５８】
【表２】
0004675541.tif 000003
【００５９】
ＳＭsend関数は、第１のデータ（１２ｈ）をデータモジュール１２０内に送り込み、ＣＭＤ＿ＳＳＮＤ＿ＦＳＴ、すなわち１６進数２０ｈを制御モジュール１２２内に書込むために作用する。このとき、ＳＭsend関数は、中断信号ＳＭ.ＩＮＴ＃信号をノード間ファームウェア１１８に対してもたらす。ノード内ファームウェア１１６は、制御モジュール１２２を定期的にポーリングすることにより、ノード間ファームウェア１１８から戻された状態情報を待つ。ノード間ファームウェア１１８側では、図７に関して上述した通りのＳＭＥＭＩＮＴＯＵＴintは、ファームウェア１１８とファームウェア１１６との間のインタフェースプロセスを取扱う。それは、ＳＭ.ＩＮＴ＃により中断され、その後、制御モジュール１２２からコマンドＣＭＤ＿ＳＳＮＤ＿ＦＳＴ（２０ｈ）を読取るようノード間ファームウェア１１８に指示する。次に、ノード間ファームウェア１１８は、ＣＭＤ＿ＳＳＮＤ＿ＦＳＴによって要求されるようにデータモジュール１２０からデータ（１２ｈ）を読取る。上述のように、ノード間ファームウェア１１８は、１３ｈ（１２ｈ＋１）でメッセージ長をセットするべくコマンドＣＭＤ＿ＳＳＮＤ＿ＦＳＴ（２０ｈ）を知るように構成される。このときＳＭＥＭＩＮＴＯＵＴintは、次に進んで制御コード ＳＴＳ＿ＮＸＴ＿ＯＫ（Ｃ１ｈ）を制御モジュール１２２内に書込む。ノード内ファームウェア１１６が制御モジュール１２２をポーリングし、状態（Ｃ１ｈ）を読取った後で、ノード内ファームウェア１１６がＳＭ．ＩＮＴ＃信号をデアサートする。
【００６０】
次に、ファームウェア１１６は、表示されるべきメッセージの中の最初の文字である第２のデータ「Ｂ」を送る。図３に関して上述したように、ＳＭsendは第２のデータ（「Ｂ」）をデータモジュール１２０内に書込む。ＳＭsend関数は、ＣＭＤ＿ＳＳＮＤ＿ＣＮＴ（２１ｈ）を制御モジュール１２２内に書込み、別の中断信号ＳＭ.ＩＮＴ＃信号をノード間ファームウェア１１８に対してもたらす。ＳＭＥＭＩＮＴＯＵＴint 関数は、ＳＭ.ＩＮＴ＃によって中断され、その後制御モジュール１２２からコマンド（２１ｈ）を読取る。コマンド（２１ｈ）を受信した時点で、ＳＭＥＭＩＮＴＯＵＴint 関数は、データモジュール１２０からデータ（「Ｂ」）を読取るべくコマンドに従って作用し、１３ｈを１２ｈまで差し引くことにより残りのメッセージを減少させる。メッセージ長の調整の後、ノード間ファームウェア１１８は、ＳＴＳ＿ＮＸＴ＿ＯＫ（Ｃ１ｈ）を制御モジュール１２２内に書込んで、次のデータを送信するようノード内ファームウェア１１６に通知する。ノード内ファームウェア１１６は、制御モジュール１２２から状態（Ｃ１ｈ）を読取り、ＳＭ．ＩＮＴ＃信号をデアサートし、次のデータを送信するよう準備する。
【００６１】
同様にして、ＳＭsend関数は、ノード間ファームウェア１１８に対するメッセージの中で表２に示されているようなその他の文字「ｓ」〜「ｅ」を送るように作用する。ファームウェア１１８は、データの各々を受信し、メッセージ長を減少させる。特に最後のデータ「＿」を受信すると、ノード間ファームウェア１１８は、残りのメッセージ長を１から０まで減少させることにより、そのプロセスを完了する。データ長は「ゼロ」であることから、ファームウェア１１８は、制御モジュール１２２内に制御コードＳＴＳ＿ＣＭＰＬＴ（Ｃ０ｈ）を書込む。従って、メッセージ全体は、ノード内ファームウェア１１６からノード間ファームウェア１１８までうまく転送される。以上で分かるように、かかるデータ転送は、正常条件中でもエラー条件中でも行うことができる。かかるデータ転送がより高い優先順位に置かれた場合、ノード間ファームウェア１１８がこのメッセージを確実に間に合うように受信するようにするため、現行データ転送を中断することができる。
【００６２】
従って、本発明は、ハードウェアの開発およびハードウェア動作上の問題を同時に低減させながら、マルチ・ノードコンピュータシステム内でのデータ転送に必要とされるハードウェア資源を低減させる。これはまた、例えばデータ転送のためにビジービットを配置することといった従来の特殊メカニズムを不要にする。さらに本発明は、より高い優先順位をもつデータの転送を取扱う能力をも有している。
【００６３】
本発明による好ましい実施形態は、以下の通りである。
【００６４】
（付記１）  マルチ・ノードコンピュータシステム内のノード内ファームウェアからノード間ファームウェアへデータを転送するための方法であって、該ノード内ファームウェアが直接チャネルを通して該ノード間ファームウェアに結合され、該ノード内ファームウェアが制御モジュールおよびデータモジュールを有する方法において、
前記ノード内ファームウェアにより前記データモジュールに第１のデータを送信する段階と、
前記ノード内ファームウェアにより前記制御モジュールに対し第１のデータ転送コマンドを送る段階であって、該第１のデータ転送コマンドが、前記ノード間ファームウェアに対する第１のデータの転送を可能にする段階と、
前記ノード間ファームウェアにより前記制御モジュールから前記第１のデータ転送コマンドを読取る段階と、
前記第１のデータ転送コマンドに応答して前記ノード間ファームウェアにより前記データモジュールから前記第１のデータを読取る段階と、
前記データモジュールからの前記第１のデータ読取りの完了に応答して、前記ノード間ファームウェアにより前記制御モジュール内に第１のデータ転送状態コードを書込む段階と、
前記ノード内ファームウェアにより前記制御モジュールから前記第１のデータ転送状態コードを読取る段階と、
前記第１のデータ転送状態コードに応答して前記のデータ転送を続行すべきか否かを決定する段階と、
を含んでなる方法。
【００６５】
（付記２）  前記ノード内ファームウェアによる前記制御モジュールに対する前記データ転送コマンドの送信に続いて、前記ノード内ファームウェアから前記ノード間ファームウェアまで中断信号を送信する段階をさらに含んでなる付記１に記載の方法。
【００６６】
（付記３）  前記制御モジュールからの転送コマンドの読取りに先立ち、前記データ転送コマンドの存在を見極めるべく前記ノード内ファームウェアにより前記制御モジュールをポーリングする段階をさらに含んでなる付記１に記載の方法。
【００６７】
（付記４）  前記第１のデータ転送コマンドが、転送されるべきデータ長を表わすコマンドを送信することに対応する付記１に記載の方法。
【００６８】
（付記５）  前記ノード間ファームウェアに対し全てのデータが送信されたことに応答して、該ノード間ファームウェアによって前記制御モジュール内にデータ転送完了状態制御コードを書込む段階をさらに含んでなる付記１に記載の方法。
【００６９】
（付記６）  前記第１のデータ転送状態コードがデータ転送続行状態に対応する付記１に記載の方法。
【００７０】
（付記７）  前記第１のデータを前記データモジュールに送信する前に、前記データモジュールおよび制御モジュールのコンテキストを記憶する段階をさらに含んでなる付記１に記載の方法。
【００７１】
（付記８）  全てのデータが前記ノード間ファームウェアに送信された後、前記データモジュールおよび制御モジュールの前記記憶されたコンテキストを復旧させる段階をさらに含んでなる付記７に記載の方法。
【００７２】
（付記９）  マルチ・ノードコンピュータシステム内でノード間ファームウェアからノード内ファームウェアによってデータを受信するための方法であって、該ノード内ファームウェアが直接チャネルを通して該ノード間ファームウェアに結合されており、該ノード内ファームウェアが制御モジュールおよびデータモジュールを有する方法において、
前記ノード内ファームウェアにより前記制御モジュール内に第１のデータ転送コマンドを書込む段階と、
前記ノード間ファームウェアにより前記制御モジュールから前記第１のデータ転送コマンドを読取る段階と、
前記第１のデータ転送コマンドに応答して、前記ノード間ファームウェアにより前記データモジュール内に第１のデータを書込む段階と、
前記データモジュール内への前記第１のデータの書込みに応答して、前記制御モジュール内に第１のデータ転送状態コードを書込む段階と、
前記第１のデータ転送状態コードの読取りに応答して、前記のデータ転送を続行すべきか否かを決定する段階と、
を含んでなる方法。
【００７３】
（付記１０）  前記制御モジュールに対する前記第１のデータ転送コマンドの送信に応答して、前記ノード内ファームウェアから前記ノード間ファームウェアまで中断信号を送信する段階をさらに含んでなる付記９に記載の方法。
【００７４】
（付記１１）  前記第１のデータ転送コマンドが、転送されるべきデータ長を表わすコマンドを送信することに対応する付記９に記載の方法。
【００７５】
（付記１２）  前記第１のデータ転送状態コードが、データ転送続行状態に対応する付記９に記載の方法。
【００７６】
（付記１３）  前記ノード間ファームウェアに対し全てのデータが送信されたことに応答して、該ノード間ファームウェアによって前記制御モジュール内にデータ転送完了状態制御コードを書込む段階と、
をさらに含んでなる付記９に記載の方法。
【００７７】
（付記１４）  前記第１のデータ転送コマンドを前記制御モジュールに送信する前に、前記データモジュールおよび制御モジュールの前記コンテキストを記憶する段階をさらに含んでなる付記９に記載の方法。
【００７８】
（付記１５）  全てのデータが前記ノード間ファームウェアに送信された後、前記データモジュールおよび制御モジュールの前記記憶されたコンテキストを復旧させる段階をさらに含んでなる付記６に記載の方法。
【００７９】
（付記１６）  マルチ・ノードコンピュータシステムの動作を管理するためのノード間ファームウェアと、
各々、１バイトのデータモジュールおよび１バイトの制御モジュールを備え、該データモジュールおよび制御モジュールを通して優先順位決定済みデータ転送ルーチンが動作することができるようにする、複数のノード内ファームウェアであって、前記優先順位決定済みデータ転送ルーチンが前記ノード間ファームウェアと通信すべく動作可能である、複数のノード内ファームウェアと、
を含んでなるマルチ・ノードコンピュータシステム。
【００８０】
（付記１７）  マルチ・ノードコンピュータシステム内のノード内ファームウェアからノード間ファームウェアへデータを転送するための方法であって、該ノード内ファームウェアが直接チャネルを通して該ノード間ファームウェアに結合され、該ノード内ファームウェアが制御モジュールおよびデータモジュールを有する方法において、
前記データモジュールに第１のデータを送信する段階と、
前記ノード間ファームウェアに対する前記第１のデータの転送を可能にするため、前記制御モジュールに対し第１のデータ転送コマンドを送信する段階と、
前記ノード間ファームウェアによる前記第１のデータ転送コマンドの履行状態に対応する第１のデータ転送状態コードを前記制御モジュールが受信しているか否かを監視する段階と、
前記第１のデータ転送状態コードの受信に応答して、前記のデータ転送を続行するか否かを決定する段階と、
を含んでなる方法。
【００８１】
（付記１８）  マルチ・ノードコンピュータシステム内でノード間ファームウェアからノード内ファームウェアによってデータを受信するための方法であって、該ノード内ファームウェアが直接チャネルを通して該ノード間ファームウェアに結合されており、該ノード内ファームウェアが制御モジュールおよびデータモジュールを有する方法において、
前記第１のデータ転送コマンドに応答して前記ノード間ファームウェアが前記データモジュールにデータを送信できるようにするため、前記制御モジュール内に第１のデータ転送コマンドを書込む段階と、
前記ノード間ファームウェアによる前記第１のデータ転送コマンドの履行状態に対応する第１のデータ転送状態コードを前記制御モジュールが受信しているか否かを監視する段階と、
前記第１のデータ転送状態コードに応答して、前記のデータ転送を続行するか否かを決定する段階と、
を含んでなる方法。
【００８２】
（付記１９）  マルチ・ノードコンピュータシステム内でノード内ファームウェアとノード間ファームウェアとの間の通信を可能にするためのコンピュータプログラムを含むコンピュータ読取り可能な記録媒体において、該ノード内ファームウェアがデータモジュールと制御モジュールを含み、前記コンピュータプログラムは該ノード内ファームウェアによって実行された場合に、該ノード内ファームウェアに、
前記データモジュールに第１のデータを送信する段階と、
前記ノード間ファームウェアに対する前記第１のデータの転送を可能にするため前記制御モジュールに対し第１のデータ転送コマンドを送信する段階と、
前記ノード間ファームウェアによる前記第１のデータ転送コマンドの履行状態に対応する第１のデータ転送状態コードを前記制御モジュールが受信しているか否かを監視する段階と
前記第１のデータ転送状態コードの受信に応答して前記のデータ転送を続行するか否かを決定する段階と、
を履行させるコンピュータ読取り可能な記録媒体。
【００８３】
（付記２０）  マルチ・ノードコンピュータシステム内でノード内ファームウェアとノード間ファームウェアとの間の通信を可能にするためのコンピュータプログラムを含むコンピュータ読取り可能な記録媒体において、該ノード内ファームウェアがデータモジュールと制御モジュールを含み、前記コンピュータプログラムは該ノード内ファームウェアによって実行された場合に該ノード内ファームウェアに、
前記第１のデータ転送コマンドに応答して、前記ノード間ファームウェアが前記データモジュールにデータを送信できるようにするため、前記制御モジュール内に第１のデータ転送コマンドを書込む段階と、
前記ノード間ファームウェアによる前記第１のデータ転送コマンドの履行状態に対応する第１のデータ転送状態コードを前記制御モジュールが受信しているか否かを監視する段階と、
前記第１のデータ転送状態コードに応答して前記のデータ転送を続行するか否かを決定する段階と、
を履行させるコンピュータ読取り可能な記録媒体。
【図面の簡単な説明】
【図１】本発明によるマルチ・ノードコンピュータシステムの実施形態の概略図である。
【図２】本発明の実施形態によるマルチ・ノードコンピュータシステム内のノード内ファームウェアとノード間ファームウェアとの間のデータ転送構造を表すブロック図である。
【図３】ノード内ファームウェアがノード間ファームウェアからのデータを受信するための方法を表すフローチャートである。
【図４】ノード内ファームウェアからノード間ファームウェアまでデータを送信するための方法を表すフローチャートである。
【図５】中断されたルーチンのコンテキストをセーブするための方法を表すフローチャートである。
【図６】中断されたルーチンのコンテキストを復旧させるための方法を表すフローチャートである。
【図７】ノード間ファームウェアによるインタフェース取扱い方法を表すフローチャートである。
【図８】従来の相互接続ベースのマルチ・ノードコンピュータシステムを表す図である。
【符号の説明】
１００…マルチ・ノードコンピュータシステム
１０２…相互接続スイッチ
１０４…ノード間コントローラ
１０６…入出力（ＩＯ）ノード
１０７…メモリ（ＭＥＭ）ノード
１０８…ＩＯデバイス
１１０…正規チャネル
１１２…直接チャネル
１１４…中央処理装置（ＣＰＵ）ノード
１１６…ノード内ファームウェア
１１８…ノード間ファームウェア
１２０…データモジュール
１２２…制御モジュール
【図１】
0004675541.tif 000004
【図２】
0004675541.tif 000005
【図３】
0004675541.tif 000006
【図４】
0004675541.tif 000007
【図５】
0004675541.tif 000008
【図６】
0004675541.tif 000009
【図７】
0004675541.tif 000010
【図８】
0004675541.tif 000011