(57)【特許請求の範囲】
【請求項１】
通信アダプタ上で高速ロード・コード・イメージ更新を行うための並列コード・ロード装置であって、
前記通信アダプタ上の高速ロード・コード・イメージ更新を示すための高速ロード・キーを作成し格納するように構成された高速キー・モジュールと、
新コード・イメージのコピーを前記通信アダプタ内のメモリにロードするように構成されたイメージ・ロード・モジュールであって、前記メモリが前記通信アダプタによって使用された旧コード・イメージのコピーを並列に格納するイメージ・ロード・モジュールと、
前記旧コード・イメージのデータ構造体の値、フォーマット、前記新コード・イメージのレジスタ再設定、バッファ、キャッシュまたはバッファおよびキャッシュの消去を含む初期化要件を識別し、前記旧コード・イメージと前記新コード・イメージの間の差を判断するように構成されたクエリ・モジュールと、
メモリ初期化操作を実施するために、前記新コード・イメージを起動するように構成されたメモリ初期化モジュールと、
標準初期化シーケンスを使用して、前記通信アダプタを初期化するように構成された標準アダプタ初期化モジュールと、
前記標準初期化シーケンスの一部に対応する高速ロード初期化シーケンスを実施することにより、前記新コード・イメージを起動するように構成された高速ロード・アダプタ初期化モジュールと、
前記旧コード・イメージに前記新コード・イメージをオーバーレイするように構成されたイメージ・オーバーレイ・モジュールとを含み、
前記高速ロード・キーが存在する場合に、前記高速ロード初期化シーケンスを使用し、前記高速ロード・キーが存在しない場合に、前記標準初期化シーケンスを使用して、前記通信アダプタを初期化するように構成され、
前記旧コード・イメージには、旧コード・イメージ更新を制御するように構成され、かつ前記旧コード・イメージから前記新コード・イメージに分岐するように構成された分岐モジュールが含まれ、
前記新コード・イメージには、前記旧コード・イメージと前記新コード・イメージの間の非互換性を照合調整するように構成された変換モジュールを使用して、ブートストラップ操作を定義するように構成され、前記ブートストラップ操作によりコード・イメージ更新を実行するブートストラップ・モジュールが含まれる、並列コード・ロード装置。
【請求項２】
前記高速ロード・アダプタ初期化モジュールは、さらに、前記高速ロード初期化シーケンスを使用する前に、高速ロード・キーにアクセスする、請求項１に記載の装置。
【請求項３】
コード・イメージ更新モジュールが、前記新コード・イメージを前記メモリにロードするように構成されたロード・モジュールを含む、請求項１に記載の装置。
【請求項４】
イメージ・ブリッジ・モジュールが、前記旧コード・イメージと前記新コード・イメージの間のデータ構造体の値、フォーマット、前記新コード・イメージのレジスタ再設定、バッファ、キャッシュまたはバッファおよびキャッシュの消去を含む初期化要件についての非互換性を照合調整するように構成される、請求項１に記載の装置。
【請求項５】
前記ブートストラップ・モジュールがコピー・モジュールを含み、前記イメージ・オーバーレイ・モジュールが、前記コピー・モジュールを使用して、前記旧コード・イメージに前記新コード・イメージをオーバーレイするように構成される、請求項１に記載の装置。
【請求項６】
請求項１〜５のいずれか１項に記載の並列コード・ロード装置を含むソース通信アダプタ上での高速ロード・コード・イメージ更新するためのストレージ・システムであって、
ソース電子記憶媒体装置を受け入れるように構成されたソース入力装置であって、前記ソース電子記憶媒体装置が新コード・イメージを格納するように構成されるソース入力装置と、
前記高速ロード・コード・イメージ更新を開始し、前記ソース通信アダプタに、前記高速ロード・コード・イメージ更新について通知するように構成されるストレージ・システム・プロセッサと、
前記新コード・イメージをローカル・メモリ装置にコピーし、前記高速ロード・コード・イメージ更新を実施するように構成される前記ソース通信アダプタとを含むストレージ・システム。
【請求項７】
請求項１〜５のいずれか１項に記載の並列コード・ロード装置を含む通信アダプタ上で高速ロード・コード・イメージ更新を行う並列コード・ロード装置が実行する方法であって、前記並列コード・ロード装置が、
前記通信アダプタ上の高速ロード・コード・イメージ更新を示すための高速ロード・キーを作成し格納するステップと、
新コード・イメージのコピーを前記通信アダプタ内のメモリにロードするステップであって、前記メモリが前記通信アダプタによって使用された新コード・イメージのコピーを並列に格納するステップと、
前記旧コード・イメージの特徴を識別し、前記旧コード・イメージと前記新コード・イメージの間の差を判断するステップと、
前記旧コード・イメージと前記新コード・イメージの間のデータ構造体の値、フォーマット、前記新コード・イメージのレジスタ再設定、バッファ、キャッシュまたはバッファおよびキャッシュの消去を含む初期化要件についての非互換性を照合調整するステップと、
メモリ初期化操作を実施するために、前記新コード・イメージを起動するステップと、
前記高速ロード・キーが存在する場合に、高速ロード初期化シーケンスを使用して、前記通信アダプタを初期化するステップと、
前記高速ロード・キーが存在しない場合に標準初期化シーケンスを使用して、前記通信アダプタを初期化するステップと、
前記旧コード・イメージに前記新コード・イメージをオーバーレイするステップと、
を含む方法。
【請求項８】
請求項７に記載の高速ロード・コード・イメージ更新を行うための方法を実行するプログラムを記録したコンピュータ可読な記憶媒体。
【請求項９】
請求項７に記載の高速ロード・コード・イメージ更新を行うための方法を実行するためのコンピュータ実行可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコードなどの埋め込みコードに関し、より詳細には、通信アダプタ上でコード・イメージを更新するための装置、システムおよび方法に関する。
【背景技術】
【０００２】
ユーザは、コンピュータ・システムおよびコンピュータ・サブシステムの高い可用性を必要とし続ける。ウェブ・サーバ、データベース・サーバ、アプリケーション・サーバなどは、２４時間使用可能であるものと期待されている。こうしたシステムのメンテナンスおよびアップグレードでは、システムがオフラインである時間を最小限に抑えるべきである。
【０００３】
コンピュータ・システムまたはサブシステムは、操作を実施するための基本的な命令セットを含む。この基本的な命令セットは、コンピュータ・システムまたはサブシステムがどのように機能するかを定義するオペレーティング・システムに類似している、基本的な１組のコンピュータ命令を含む。一般に、この基本的な命令セットは、コード・イメージ、マイクロコード、埋め込みコードなどと称される。コード・イメージは一般に、アセンブリ・コード命令、または特定のマイクロプロセッサまたはハードウェア・セットあるいはその両方のために最適化される生のマシン言語のバイナリ・コード命令を含む。
【０００４】
一般に、コンピュータ・システムに電源が入ると、基本入出力システム（ＢＩＯＳ：BasicInput Output System）プログラムは、コード・イメージを揮発性ＲＡＭにロードする。あるいは、コード・イメージは、不揮発性ＲＡＭまたは他の形のメモリに格納される。コンピュータ・システムが適切に初期化されると、コード・イメージ内の命令の実行が開始する。
【０００５】
コード・イメージは、改善された機能の提供、プログラミングのバグの解決、および新しいハードウェアのサポートの全てまたはそれらの何れかのために、定期的に更新されなければならない。旧コード・イメージを並列に実行しているコンピュータ・システムの中断を最小限に抑えながら、旧コード・イメージが新コード・イメージで更新されることが望ましい。さらに、新コード・イメージが、旧コード・イメージとおよそ同じメモリ位置に格納されることが望ましい。具体的には、新コード・イメージは、旧コード・イメージより大きいことも小さいこともあるが、一般に、少なくとも一部は、旧コード・イメージ上に格納される。コード・イメージの更新では、時間が最小限に抑えられることを必要とし、複雑さが最小限に抑えられた操作を含み、また更新の完了直後、通常の操作を開始する際に、最小限の遅延がもたらされるべきである。
【０００６】
従来、コード・イメージの更新は、ブートストラップ・コードとして知られている旧コード・イメージのあるセクションによって実施される。ブートストラップ・コードは、コード・イメージ更新操作を知らせる割込みに応答して実行される。一般に、ブートストラップ・コードは、ディスク・ドライブなどのソースから、旧コード・イメージが占めている同じ空間に、新コード・イメージを直接にコピーする。コピー操作は部分的に、または全体的に、旧コード・イメージを新コード・イメージで上書きする。このプロセスは、コード・オーバーレイとして知られている。
【０００７】
典型的なコード・オーバーレイ・プロセスは、影響を受けるハードウェア装置が、比較的に大きな時間の間、オフラインであることを必要とする。ホスト・バス・アダプタなどのＩ／Ｏアダプタの場合、このプロセスは、完了するのに数分間かかることがあり、この時間の間に、ホストは、アダプタに障害が発生したと判断し、代替パスに切り換えることができる。代替パスが存在しない場合は、この長いプロセスの間、システム全体が停止することがある。タイムアウトおよびフェイルオーバの時間の間に、システムを停止するにしろ、コード・オーバーレイのプロセスの間に、システムを完全にオフラインにするにしろ、Ｉ／Ｏパスの中断およびユーザのシステム可用性が損なわれることによって、大きな損害が及ぼされ得る。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
したがって、コード・オーバーレイ・プロセスの間に発生し得る、Ｉ／Ｏの中断を最小限に抑える装置、システムおよび方法が求められている。こうした装置、システムおよび方法が、複数のパスの必要性を克服し、またタイムアウト、障害、および回復時間の必要性を回避して、許容できる閾値内にまで、中断時間を低減することが有益である。
【課題を解決するための手段】
【０００９】
本発明は、当技術分野の現状に応えて、また具体的には、現在使用可能な通信アダプタおよびシステムによってまだ十分に解決されていない、当技術分野の問題およびニーズに応えて、開発されてきた。したがって、本発明は、上記で論じた、当技術分野における欠点の多くまたはすべてを克服する、通信アダプタ上で高速ロード・コード・イメージ更新を行うための装置、システムおよび方法を提供するために開発されてきた。
【００１０】
通信アダプタ上で高速ロード・コード・イメージ更新を行うための装置に、通信アダプタ上での高速ロード・コード・イメージ更新に必要なステップを、機能的に実行するように構成された複数のモジュールを含む論理装置を設ける。説明する実施形態内のこうしたモジュールは、クエリ・モジュール、イメージ・ロード・モジュール、イメージ・ブリッジ・モジュール、メモリ初期化モジュール、イメージ・オーバーレイ・モジュール、高速ロード・キー・モジュール、標準アダプタ初期化モジュール、および高速ロード・アダプタ初期化モジュールを含む。
【００１１】
ある実施形態では、クエリ・モジュールは、旧コード・イメージの特徴を識別し、旧コード・イメージと新コード・イメージの間の差または非互換性を判断するように構成される。イメージ・ロード・モジュールは、新コード・イメージのコピーを、ホスト上のホスト・バス・アダプタなど、通信アダプタ内のメモリにロードするように構成される。イメージ・ブリッジ・モジュールは、旧コード・イメージと新コード・イメージの間の非互換性を照合調整するように構成される。
【００１２】
別の実施形態では、メモリ初期化モジュールは、メモリ初期化操作を実施するために、新コード・イメージを起動するように構成される。イメージ・オーバーレイ・モジュールは、旧コード・イメージに新コード・イメージをオーバーレイするように構成される。高速キー・モジュールは、通信アダプタ上の高速ロード・コード・イメージ更新を示すための高速ロード・キーを作成し格納するように構成される。標準アダプタ初期化モジュールは、高速ロード・キーへのアクセスの失敗に応答して、標準初期化シーケンスを使用して、通信アダプタを初期化するように構成される。あるいは、高速ロード・アダプタ初期化モジュールは、高速ロード・コード・イメージ更新、ならびに高速ロード初期化シーケンスを起動する前に、高速ロード・キーに首尾よくアクセスしたことに応答して、高速ロード初期化シーケンスを使用して、通信アダプタを初期化するように構成される。別の実施形態では、高速ロード初期化シーケンスの１つまたは複数の部分を、標準の初期化方法のステップとインターリーブし、またはそれで置き換えることができ、したがって、高速ロード・キーの存在に動的に反応する、単一の初期化バスだけが必要になる。
【００１３】
通信アダプタ上の高速ロード・コード・イメージ更新を容易にするためのストレージ・システムも提示される。ある実施形態では、記載のシステムは、ストレージ・サーバであり、ソース入力装置、ストレージ・システム・プロセッサ、およびストレージ・システム通信アダプタを含む。ソース入力装置は、新コード・イメージを格納する、ソース電子記憶媒体装置を受け入れるように構成される。ストレージ・システム・プロセッサは、高速ロード・コード・イメージ更新を開始し、ホスト通信アダプタに、高速ロード・コード・イメージ更新について通知するように構成される。ストレージ・システム通信アダプタは、ホスト通信アダプタに、新コード・イメージを送信するように構成される。
【００１４】
通信アダプタ上で高速ロード・コード・イメージ更新を行うための本発明の方法もまた、提示される。開示する実施形態では、この方法は、記載の装置およびシステムの操作に関して、上記で提示した機能を実施するのに必要なステップを実質的に含む。具体的には、記載の方法の一実施形態は、新コード・イメージのコピーを、通信アダプタ内のメモリにロードするステップと、メモリ初期化操作を実施するために、新コード・イメージを起動するステップと、旧コード・イメージに新コード・イメージをオーバーレイするステップとを含む。この方法は、本明細書で述べる追加のステップをも含み得る。
【００１５】
本発明の一実施形態では、有益に、コード・イメージ更新時に、ホスト・バス・アダプタなどの通信アダプタがオフラインでいる時間を最小限に抑える。別の実施形態では、ホストが、コマンドのタイムアウト、不適切なポートの指定、パスの削除、回復シーケンスの必要性などを回避することができるように、通信アダプタがオフラインになる時間を有利に低減する。さらに、ある実施形態では、本発明は、単一ホストからストレージ・システムへのマルチパス接続の現在の必要性をなくし、または少なくとも大幅に減少させる。
【００１６】
別の実施形態では、有益に、本発明によって、旧コードの更新は、並列に新コードをロードし、または通信アダプタにステージングしながら、Ｉ／Ｏ要求の処理を継続することができる。さらに、本発明の一実施形態では、新コード・イメージまたは少なくともそのブートストラップ・モジュールが、準備のコード・イメージ更新機能を含めて、１つまたは複数のブートストラップ操作を並列に実行する一方で、旧コード・イメージが、Ｉ／Ｏ要求の処理を継続できるようにする。
【００１７】
本明細書を通して、特徴、利点または類似の言語への言及は、本発明によって実現され得るすべての特徴および利点が、本発明のいずれの単一の実施形態にも、存在すべきであり、または存在することを示唆するものではない。そうではなく、特徴および利点に言及する言語は、一実施形態に関連して述べた具体的な特徴、利点または特性が、本発明の少なくとも１つの実施形態に含まれることを意味するものと理解されよう。したがって、本明細書を通して、特徴、利点および類似の言語についての議論は、同じ実施形態について言及するものであり得るが、必ずしもそうであるとは限らない。
【００１８】
さらに、記載する本発明の特徴、利点および特性は、１つまたは複数の実施形態において、任意の適切なやり方で、組み合わせることができる。特定の実施形態の１つまたは複数の具体的な特徴または利点なしに、本発明が実施され得ることが、関連分野の技術者には理解されよう。他の場合では、本発明のすべての実施形態に必ずしも存在しないことがあり得る追加の特徴および利点が、一部の実施形態で
認識され得る。
【００１９】
本発明のこうした特徴および利点は、以下の説明および添付の特許請求の範囲から、より完全に明らかになり、または以下で述べる本発明を実施することによって知ることができる。
【００２０】
本発明の利点が容易に理解されるように、上記で簡潔に述べた本発明のより具体的な説明を、添付の図面に図示される特定の実施形態を参照して示す。これらの図面は、本発明の典型的な実施形態を示すものにすぎず、したがって、その範囲を限定するものと見なすべきでないという理解のもとに、本発明について、添付の図面を用いて、さらに具体的にかつ詳細に示し説明する。
【発明を実施するための最良の形態】
【００２１】
本明細書で述べる機能ユニットの多くは、実装の独立性をより特別に強調するために、モジュールと称されている。たとえば、あるモジュールは、カスタムのＶＬＳＩ回路またはゲート・アレイ、論理チップ、トランジスタまたは他の個別部品などの既成半導体を含む、ハードウェア回路として実装され得る。モジュールは、フィールド・プログラマブル・ゲート・アレイ、プログラマブル・アレイ論理、プログラマブル論理装置など、プログラマブルなハードウェア装置で実装することもできる。
【００２２】
モジュールは、様々なタイプのプロセッサによって実行するためのソフトウェアで実装することもできる。実行可能コードのある識別されたモジュールは、たとえば、オブジェクト、プロシージャまたは関数などとして構成され得る、コンピュータ命令の１つまたは複数の物理的なまたは論理的なブロックを含み得る。しかし、識別されたモジュールの実行可能コードは、物理的に共に位置する必要はなく、しかし、それぞれ異なる位置に格納された、全く異なる命令を含むことができ、この命令は、論理的に組み合わせられると、そのモジュールを含んでおり、モジュールの定められた目的を達成する。
【００２３】
実際に、実行可能コードのモジュールは、単一の命令であることも、多数の命令であることもあり、さらに、様々なプログラム間で、また複数のメモリ装置に渡って、複数の異なるコード・セグメントに分散され得る。同様に、本明細書では、モジュール内で、オペレーショナル・データを、識別し示すことができ、任意の適切な形で実装し、また任意の適切なタイプのデータ構造体内で構成することができる。オペレーショナル・データは、単一のデータ・セットとして収集されることがあり、それぞれ異なる記憶装置を含めて、異なる場所に分散されることもあり、また少なくとも部分的には、システムまたはネットワーク上の単なる電子信号として存在し得る。
【００２４】
この明細書を通して、「ある実施形態」、「一実施形態」、または類似の言語への言及は、実施形態に関連して述べる具体的な特徴、構造または特性が、本発明の少なくとも１つの実施形態に含まれることを意味する。したがって、この明細書を通して、表現「ある実施形態における」、「一実施形態における」、または類似の言語が現れる場合は、同じ実施形態に言及するものであり得るが、必ずしもすべてがそうであるとは限らない。
【００２５】
さらに、記載する本発明の特徴、構造または特性は、１つまたは複数の実施形態で、任意の適切なやり方で組み合わせることができる。以下の説明では、本発明の実施形態について、完全な理解をもたらすために、プログラミング、ソフトウェア・モジュール、ユーザ選択、ネットワーク・トランザクション、データベース・クエリ、データベース構造体、ハードウェア・モジュール、ハードウェア回路、ハードウェア・チップの例など、多くの具体的な詳細を提供する。しかし、こうした具体的な詳細のうちの１つまたは複数の詳細なしに、または他の方法、構成要素、材料などを用いて、本発明を実施できることが関連分野の技術者には理解されよう。他の場合では、本発明の側面を不明瞭にすることを避けるために、周知の構造体、材料または操作については、詳細には示しまたは説明していない。
【００２６】
図１に、従来のコード・イメージ更新方法１００を示す。従来のコード・オーバーレイを実施し、Ｉ／Ｏアダプタを再ロードするための標準の技法は、ホスト・バス・アダプタ（ＨＢＡ：host bus adapter）をオフラインにし１０４、したがって、Ｉ／Ｏを休止することから開始する１０２。次いで、従来のコード・イメージ更新方法１００は、新コード・イメージをホスト・バス・アダプタにロードし１０６、旧コード・イメージをオーバーレイする。コード・オーバーレイは従来、たとえば旧コードまたはフラッシュ・イメージに格納されたブートストラップ・コードによって実施される。さらに、新コード・イメージは、必要に応じて、いずれかのフラッシュに書き込み１０８、電源投入時自己診断（ＰＯＳＴ：power-onself-test）を実行する１１０。
【００２７】
次いで、新コード・イメージは、いずれかのコード構造体を初期化し１１２、ホスト・バス・アダプタをオンラインに戻し１１４、Ｉ／Ｏが再開できるようにする。次いで、図示する従来のコード・イメージ更新方法１００は、終了する１１６。この説明は、コード・イメージ更新方法１００を正確に示すものであるが、図示するステップが実行される順序、および追加のステップは、実装によって異なり得る。
【００２８】
ホスト・バス・アダプタが位置するホストは、ホスト・バス・アダプタがオフラインでいる時間、たとえば約２分またはそれ以上などの間に、Ｉ／Ｏの送信を再試行することがある。ホストが再試行の閾値時に、Ｉ／Ｏを送信することができない場合、コマンドは、ある時間、たとえば通常３０秒から６０秒の間、タイムアウトになり得る。ここで述べるオフラインおよびタイムアウトの時間枠は、おおよそのものであり、特定のハードウェアまたはアプリケーションの構成によって異なり得る。タイムアウトになると、ホストは、ホスト・バス・アダプタが機能していないと見なし、そのポートを「不良」とラベル付けし、パス・グループから、そのパスを削除し得る。ホストは、パスを再び確立するために、回復シーケンスを実施しなければならない可能性が高い。したがって、従来のコード・イメージ更新方法１００では、２分またはそれ以上に渡るホストの停止を引き起こし得る。
【００２９】
図２に、本発明を実施するのに適した通信システム２００の一実施形態を示す。図示する通信システム２００は、ストレージ・システム２０８に接続された、３つのホスト２０２、２０４、２０６を含む。ある実施形態では、ストレージ・システム２０８は、データを格納するように構成されたストレージ・サーバである。第１および第２のホスト２０２、２０４は、交換機２１０を介してストレージ・システム２０８に、重複して接続される。あるいは、第３のホスト２０６は、ストレージ・システム２０８に直接に接続される。分かりやすくするために、他の接続装置は省略してある。
【００３０】
図示する実施形態では、３つのホスト２０２、２０４、２０６が示されているが、通信システム２００は、それより多いまたは少ないホスト２０２、２０４、２０６およびストレージ・システム２０８で動作し得る。さらに、ホスト２０２、２０４、２０６は、冗長性および直接性が様々である、代替構成のストレージ・システム２０８に接続され得る。さらに、図示するケーブル接続は、ファイバ・チャネル、エンタープライズ・システム接続（ＥＳＣＯＮ：Enterprise System Connection（Ｒ））、ファイバ接続（ＦＩＣＯＮ：Fiber Connection）チャネル、小型コンピュータ・システム・インターフェイス（ＳＣＳＩ：SmallComputer System Interface）などを含み得る。
【００３１】
図示するホスト２０２、２０４、２０６は、１つまたは複数のホスト・バス・アダプタ（ＨＢＳ）２１２、２１４、２１６を含む。ＨＢＡ２１２、２１４、２１６はそれぞれ、対応するホスト２０２、２０４、２０６とストレージ・システム２０８の間でデータを転送するのに必要な、Ｉ／Ｏ操作の大部分を管理するように構成される。具体的には、ホスト・バス・アダプタ２１２、２１４、２１６はそれぞれ、ほとんどまたは全くホスト２０２、２０４、２０６が介在しない状態で、非常に高速に多くのＩ／Ｏ操作を実施するように最適化され、ホスト２０２、２０４、２０６の作業負荷が最小限に抑えられる。
【００３２】
図示するストレージ・システム２０８は、複数の冗長ホスト・アダプタ２１８、２２０およびクラスタ２２２、２２４を含む。ホスト・アダプタ２１８、２２０は、上述のホスト・バス・アダプタ２１２、２１４、２１６に実質的に類似している。クラスタ２２２、２２４はそれぞれ、１つまたは複数のマルチプロセッサ２２６、２２８および複数の論理装置番号（ＬＵＮ：logical unit number）２３０、２３２、２３４、２３６への接続を含み得る。ある特定の実施形態では、１つのクラスタ２２２は主に、偶数のＬＵＮ２３０、２３４にアクセスすることができ、他のクラスタ２２４は主に、奇数のＬＵＮ２３２、２３６にアクセスすることができる。ホスト・アダプタ２１８、２２０とクラスタ２２２、２２４の間、ならびにマルチプロセッサ２２６、２２８とＬＵＮ２３０、２３２、２３４、２３６の間の冗長パスによって、ハードウェア障害などの障害の場合に、データの格納およびアクセスが可能になる。さらに、ストレージ・システム２０８は、ＲＡＩＤアレイ（redundantarray of independent disk：独立ディスクの冗長アレイ）を使用することができ、格納されたデータをたぶんミラーリングおよびストライピングし、またパリティ・データを計算し格納する。
【００３３】
図示するホスト２０２、２０４、２０６のうちの１つについてのどんな言及も、特に明記しない限り、ホスト２０２、２０４、２０６のうちのいずれかまたはすべてについての言及であると理解されよう。同様に、図示するホスト・バス・アダプタ２１２、２１４、２１６のうちの１つについてのどんな言及も、特に明記しない限り、ホスト・バス・アダプタ２１２、２１４、２１６またはホスト・アダプタ２１８、２２０のうちのいずれか１つまたはすべてについての言及であると理解されよう。また重複して図示するクラスタ２２２、２２４、マルチプロセッサ２２６、２２８、またはＬＵＮ２３０、２３２、２３４、２３６のうちの１つについての言及も、特に明記しない限り、それぞれ単一の対応する装置についての言及であると理解されよう。
【００３４】
本発明を説明するに当たって、簡潔で分かりやすくするために、この明細書を通して、本発明の様々な実施形態について、具体的には、ホスト・バス・アダプタ２１２、２１４、２１６およびホスト・アダプタ２１８、２２０で使用されるプロセッサおよびメモリに関連して説明する。本明細書で述べる諸実施形態は、代表的な例にすぎず、特許請求の範囲で定義される本発明の範囲を限定するためのものではない。本発明は、コード・イメージを実行し、またコード・オーバーレイを使用して、コード・イメージを更新することができる、マイクロプロセッサなどのプロセッサ、特定用途向け集積回路（ＡＳＩＣ：Application Specific Integrated Circuit）などを含む、任意のコンピュータまたは電気システムで実装され得ることが当業者には理解されよう。
【００３５】
図３に、図２のホスト・アダプタ２１８、２２０に実質的に類似している、ホスト・バス・アダプタ（ＨＢＡ）３００の一実施形態を示す。図示するホスト・アダプタ３００は、プロセッサ（ＣＰＵ）３０２、１つまたは複数のフラッシュ・メモリ装置３０４、１つまたは複数のプログラマブル論理アレイ（ＰＬＡ：programmable logic array）３０６、Ｉ／Ｏポート３０８、ローカル・メモリ装置３１０および並列コード・ロード装置３１２を含む。既存のコード・イメージ３１４は、ローカル・メモリ装置３１０に格納される。既存のコード・イメージ３１４は、新コード・イメージ３１６によって置き換えられ、または他の方法で、新コード・イメージ３１６によって廃棄され得るので、旧コード・イメージ３１４と称される。新コード・イメージ３１６は、ローカル・メモリ装置３１０にロードされ、格納され得る。
【００３６】
ＣＰＵ３０２は、旧コード・イメージ３１４内の操作命令を実行するように構成される。ある実施形態では、旧コード・イメージ３１４は、ホスト・アダプタ３００がホスト２０２とストレージ・システム２０８の間などの高速Ｉ／Ｏ操作を実施することを可能にするように構成される。フラッシュ・メモリ装置３０４およびＰＬＡ３０６は、Ｉ／Ｏ操作を適切に実施するために、ＣＰＵ３０２と対話する。さらに、Ｉ／Ｏポート３０８は、ホスト・アダプタ３００が、ホスト２０２などの他の装置と、データおよび制御情報を通信できるようにする。
【００３７】
ある実施形態では、新コード・イメージ３１６は、ローカル・メモリ装置３１０内の一時的なメモリ位置に格納される。好ましくは、一時的なメモリ位置は、ＣＰＵ３０２が一時的なメモリ位置に格納される命令を実行することができるように構成される。ある実施形態では、一時的なメモリ位置は、メモリ３１０内のバッファである。好ましくは、一時的なメモリ位置を含む、ローカル・メモリ装置３１０は、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、不揮発性ランダム・アクセス・メモリ（ＮＶＲＡＭ：non-volatile randomaccess memory）などの高速メイン・メモリである。
【００３８】
ある実施形態では、旧コード・イメージ３１４および新コード・イメージ３１６は、ローカル・メモリ装置３１０内の連続したブロック内に格納される。あるいは、旧コード・イメージ３１４および新コード・イメージ３１６は、ローカル・メモリ装置３１０内の別個のブロックに格納されることも、それぞれ異なるメモリ装置に格納されることもある。さらに、ローカル・メモリ装置３１０は、旧コード・イメージ３１４および新コード・イメージ３１６とは別個の１つまたは複数のデータ構造体３０６を格納するように構成され得る。
【００３９】
図示する並列コード・ロード装置３１２は、クエリ・モジュール３１８、イメージ・ロード・モジュール３２０、イメージ・ブリッジ・モジュール３２２、メモリ初期化モジュール３２４、イメージ・オーバーレイ・モジュール３２６、高速ロード・キー・モジュール３２８、標準アダプタ初期化モジュール３３０、および高速ロード・アダプタ初期化モジュール３３２を含む。並列コード・ロード装置３１２は、ホスト・アダプタ３００内に図示されているが、並列コード・ロード装置３１２、あるいは１つまたは複数のモジュールは、ストレージ・システム２０８内のプロセッサ２２６内に格納されることも、別の装置内に格納されることもある。
【００４０】
ある実施形態では、クエリ・モジュール３１８は、旧コード・イメージ３１４の特徴を識別し、旧コード・イメージ３１４と新コード・イメージ３１６の間の差または非互換性があるかどうかを判断するように構成される。旧コード・イメージ３１４と新コード・イメージ３１６の間に非互換性が存在するかどうかを判断するために、クエリ・モジュール３１８は、旧コード・イメージ３１４のバージョンが新コード・イメージ３１６のバージョンと異なるかどうかを判断することができる。あるいはクエリ・モジュール３１８は、旧コード・イメージ３１４のサイズ、場所または他の特徴が、新コード・イメージ３１６のそれと異なるかどうかを判断することができる。
【００４１】
ある実施形態では、イメージ・ロード・モジュール３２０は、新コード・イメージ３１６のコピーを、ローカル・メモリ装置３１０または別の類似のメモリ装置にロードするように構成される。別の実施形態では、イメージ・ロード・モジュール３２０は、新コード・イメージ３１６を、旧コード・イメージ３１４の一部によって占有されていない、ローカル・メモリ装置３１０内のある位置にロードすることができる。新コード・イメージ３１６は、磁気ディスクまたは光ディスクなどのソース媒体からロードすることができ、またある実施形態では、ストレージ・システム２０８にロードされ、ホスト・アダプタ２１８に送信される。あるいは、ホスト・バス・アダプタ２１２上で、旧コード・イメージ３１４を更新するために、新コード・イメージ３１６をホスト２０２にロードすることもできる。
【００４２】
ある実施形態では、イメージ・ブリッジ・モジュール３２２は、旧コード・イメージ３１４と新コード・イメージ３１６の間の非互換性を照合調整するように構成される。非互換性を照合調整するために実行され得る厳密な命令は、照合調整される非互換性のタイプに依存する。ある場合では、非互換性の照合調整は、記憶レジスタ、メモリ、またはハードウェア装置のための初期化の順序を変更することを含み得る。別の場合では、非互換性の照合調整は、新コード・イメージ３１６がデータ構造体を使用するために、そのデータ構造体のフォーマットを変換することを含み得る。さらに他のタイプの操作が、別のタイプの非互換性を照合調整するために実行され得る。
【００４３】
ある実施形態では、メモリ初期化モジュール３２４は、旧コード・イメージ３１４に新コード・イメージ３１６をオーバーレイすることに備えて、ローカル・メモリ装置３１０、またはその一部を初期化するように構成される。メモリ初期化モジュール３２４は、新コード・イメージ３１６内の実行可能コードが、一時的なメモリ位置から実行され得るように、ローカル・メモリ装置３１０、またはその一部を初期化するようにさらに構成される。別の実施形態では、メモリ初期化モジュール３２４は、フラッシュ・メモリ装置３０４およびＰＬＡ３０６を初期化するように構成され得る。
【００４４】
ある実施形態では、イメージ・オーバーレイ・モジュール３２６は、旧コード・イメージ３１４に新コード・イメージ３１６をオーバーレイするように構成される。こうしたオーバーレイでは、新コード・イメージ３１６を、旧コード・イメージ３１４のすべてまたは一部の上にコピーし得る。さらに、こうしたオーバーレイでは、旧コード・イメージ３１４によって占有されていない位置に、新コード・イメージ３１６の一部をコピーし得る。さらに、イメージ・オーバーレイ・モジュール３２６は、新コード・イメージ３１６がうまくコピーされたことを確認するために、エラー検出およびエラー訂正を実施するように構成され得る。代替実施形態では、新コード・イメージ３１６のコピーを、一時的なメモリ位置から削除することも、削除しないこともある。
【００４５】
ある実施形態では、高速ロード・キー・モジュール３２８は、高速ロード・キーを作成し格納するように構成される。高速ロード・キーによって、高速ロード・コード・オーバーレイを使用して、ホスト・アダプタ２１８内の旧コード・イメージ３１４が、高速ロード・コード・オーバーレイを用いて、新コード・イメージ３１６によってうまくオーバーレイされたことを示すことができる。ある実施形態では、高速ロード・キーは、新コード・イメージ３１６のメタデータ・セグメント５０２内に格納され得る。高速ロード・キー・モジュール３２８は、高速ロード・コード・オーバーレイの後に、Ｉ／Ｏ通信が再確立されると、標準初期化シーケンスではなく、高速ロード・初期化シーケンスを使用して、ホスト・アダプタ２１８を初期化できるかどうかを判断することもできる。ある実施形態では、高速ロード初期化シーケンスは、標準アダプタ初期化シーケンスのすべてまたは一部を含み得る。
【００４６】
ある実施形態では、標準アダプタ初期化モジュール３３０は、従来の初期化シーケンスを使用して、ホスト・アダプタ２１８を初期化するように構成される。ホスト・アダプタ２１８は、初期化されて、その後に、Ｉ／Ｏ通信を開始し、たとえば、ホスト・アダプタ２１８は、オフラインにされ、オンラインに戻される。標準アダプタ初期化モジュール３３０は、新コード・イメージ３１６のメタデータ・セグメント５０２内に、高速ロード・キーが見つからない場合には、通常のブート・ハンドシェークおよびＰＯＳＴを含めて、従来の初期化シーケンスを使用して、ホスト・アダプタ２１８を初期化することができる。
【００４７】
ある実施形態では、高速ロード・アダプタ初期化モジュール３３２は、高速ロード初期化シーケンスを使用して、ホスト・アダプタ２１８を初期化するように構成される。高速ロード初期化シーケンスは、たとえば、コード・オーバーレイの前に、状態が確認されるので、メモリまたはハードウェアあるいはその両方が既に有効な状態であると見なすことによって、ホスト・アダプタ３００を初期化するのに必要な時間を最小限に抑える。ある実施形態では、コード更新プロセスで、ローカル・メモリ装置３１０内の初期化変数が初期化される。別の実施形態では，ハードウェア・マシン状態が有効であり、すなわちコード更新プロセスの開始前に、良好なエラー訂正コード（ＥＣＣ：error correction code）を有することが確認される。ある特定の実施形態では、高速ロード・アダプタ初期化モジュール３３２は、適切な高速ロード・キーが提供される場合にだけ、高速ロード初期化シーケンスを起動する。さらに、高速ロード・アダプタ初期化モジュール３３２は、従来の初期化シーケンス時、実施されるべき高速ロード初期化シーケンスの１つまたは複数の部分を起動することができる。このようにして、標準初期化シーケンスが、高速ロード初期化シーケンスからの１つまたは複数のステップを含むように修正され得る。たとえば、高速ロード・アダプタ初期化モジュール３３２は、従来の初期化シーケンスの実施時に、１つまたは複数の高速ロード初期化操作を起動することができ、それによって、高速ロード初期化シーケンスを実施する。
【００４８】
図４に、図３に示すホスト・アダプタ３００のローカル・メモリ装置３１０に格納され得る、旧コード・イメージ３１４の一実施形態を示す。図示する旧コード・イメージ３１４は、メタデータ・セグメント４０２、ランタイム・セグメント４０４およびデータ・セグメント４０６を含む。メタデータ・セグメント４０２は、旧コード・イメージ３１４およびその内容を表すメタデータを含み得る。ある実施形態では、ランタイム・セグメント４０４は、ＣＰＵ３０２によって実行可能な１つまたは複数の命令を含む。ランタイム・セグメント４０４内の命令は、「テキスト」と称され得る。データ・セグメント４０６は、ランタイム・セグメント４０４内の実行可能コードによって使用され得る、いずれのデータまたはデータ構造体あるいはその両方をも含む。メタデータ・セグメント４０２、ランタイム・セグメント４０４およびデータ・セグメント４０６はそれぞれ、単一のデータ・ブロックとして示されているが、こうしたセグメント４０２、４０４、４０６を分割し、ローカル・メモリ装置３１０内に、様々な構成で、互いに分散させることができる。
【００４９】
ある実施形態では、ランタイム・セグメント４０４は、更新モジュール４０８を含み得る。更新モジュール４０８は、ロード・モジュール４１０および分岐モジュール４１２を含み得る。ある実施形態では、ロード・モジュール４１０は、新コード・イメージ３１６を、ローカル・メモリ装置３１０にロードするように構成される。ロード・モジュール４１０は、マニュアルまたは自動のコード更新コマンドまたは割込みに応答して、新コード・イメージ３１６をロードすることができる。
【００５０】
上述のように、新コード・イメージ３１６は、バッファ、一時的な記憶場所または別の類似の場所に格納することができる。別の実施形態では、ロード・モジュール４１０は、新コード・イメージ３１６をローカル・メモリ装置３１０にロードした後に、エラー・チェック、および新コード・イメージ３１６の他の有効性チェックを実施するように構成され得る。さらに、ロード・モジュール４１０は、一時的なメモリ位置から、新コード・イメージ３１６内の命令を実行することを可能にするように、ローカル・メモリ装置３１０を構成することができる。
【００５１】
従来のコード・イメージ更新では、旧コード・イメージ３１４内のブートストラップ・コード（図示せず）が実行され得る。しかし、本発明では、分岐モジュール４１２が、ＣＰＵ３０２に、旧コード・イメージ３１４ではなく、新コード・イメージ３１６内に位置する命令の実行を開始させることができる。したがって、旧コード・イメージ３１４および新コード・イメージ３１６が、ローカル・メモリ装置３１０または他の装置内の重複しない場所に格納されるので、新コード・イメージ３１６からの命令が、一次的な場所から実行される一方で、旧コード・イメージ３１４のランタイム・セグメント４０４およびデータ・セグメント４０６を保持することができる。
【００５２】
図５に、図３に示すホスト・アダプタ３００のローカル・メモリ装置３１０内に格納され得る、新コード・イメージ３１６の一実施形態を示す。図示する新コード・イメージ３１６は、メタデータ・セグメント５０２、ランタイム・セグメント５０４およびデータ・セグメント５０６を含む。メタデータ・セグメント５０２は、新コード・イメージ３１６およびその内容を表すメタデータを含み得る。ある実施形態では、ランタイム・セグメント５０４は、ＣＰＵ３０２によって実行可能な１つまたは複数の命令を含む。データ・セグメント５０６は、ランタイム・セグメント５０４内の実行可能コードによって使用され得る、いずれのデータまたはデータ構造体あるいはその両方をも含む。メタデータ・セグメント５０２、ランタイム・セグメント５０４およびデータ・セグメント５０６はそれぞれ、単一のデータ・ブロックとして示されているが、こうしたセグメント５０２、５０４、５０６を分割し、ローカル・メモリ装置３１０内に、様々な構成で、互いに分散させることができる。
【００５３】
ある実施形態では、メタデータ・セグメント５０２は、図３を参照して述べた高速ロード・キー５０８を含み得る。ある実施形態では、ランタイム・セグメント５０４は、ブートストラップ・モジュール５１０を含み得る。ブートストラップ・モジュール５１０は、変換モジュール５１２およびコピー・モジュール５１４を含み得る。
【００５４】
ある実施形態では、変換モジュール５１２は、旧コード・イメージ３１４と新コード・イメージ３１６の間の潜在的な非互換性を照合調整するように構成される。非互換性は、新コード・イメージ３１６が、旧コード・イメージ３１４のパフォーマンス・レベルにまで、少なくとも１つの機能を実施できない原因になる、旧コード・イメージ３１４と新コード・イメージ３１６の間の差を含み得る。したがって、非互換性は、様々な形で表れ得る。まず第１に、新コード・イメージ３１６のバージョンが旧コード・イメージ３１４のバージョンとは異なることが知られている場合、非互換性は、黙示的であり得る。ある実施形態では、新コード・イメージ３１６のバージョンは、新コード・イメージ３１６のメタデータ・セグメント５０２内に格納され得る。同様に、旧コード・イメージ３１４のバージョンは、旧コード・イメージ３１４のメタデータ・セグメント４０２内に格納され得る。
【００５５】
少なくとも１つの非互換性は、旧コード・イメージ３１４によって使用されるデータ構造体と、新コード・イメージ３１６によって使用されるデータ構造体の間の差を含み得る。データ構造体間の差は、異なる値、異なるフォーマットなどであり得る。データ構造体は、旧コード・イメージ３１４または新コード・イメージ３１６内に格納されるデータ構造体であり得る。
【００５６】
別の実施形態では、別の非互換性は、旧コード・イメージ３１４とは異なる、新コード・イメージ３１６の初期化要件を含み得る。初期化要件は、レジスタの再設定、バッファまたはキャッシュあるいはその両方の消去などを含み得る。さらに、新コード・イメージ３１６がデータ構造体を追加する場合、こうしたデータ構造体もまた、初期化される必要がある。
【００５７】
変換モジュール５１２は、識別されるどんな非互換性をも照合調整するように構成することもできる。たとえば、変換モジュール５１２は、新コード・イメージ３１６が旧コード・イメージ３１４と少なくとも同じ機能を十分に実施することができるように、データ構造体および構成設定を調整するように構成することもできる。さらに、新コード・イメージ３１６は、追加の機能を実施し、旧コード・イメージ３１４よりも改良された点をもたらし得る。
【００５８】
ある実施形態では、ブートストラップ・モジュール５１０のコピー・モジュール５１４は、旧コード・イメージ３１４の少なくとも１部に、新コード・イメージ３１６をオーバーレイするように構成される。好ましくは、旧コード・イメージ３１４が開始したのと同じローカル・メモリ装置３１０のアドレスで開始するために、新コード・イメージ３１６がオーバーレイされる。このようにして、不都合な影響が、ローカル・メモリ装置３１０の事前に定義されまたは固定のアドレス位置に依存し得る、他のマイクロコードおよびハードウェアの割込み部分までに、最小限に抑えられる。ある特定の実施形態では、コピー・モジュール５１４は、オーバーレイされたコピーにエラーがないことを確認するために、新コード・イメージ３１６のコピーについて、保全性および有効性チェックを実施することができる。さらに、コピー・モジュール５１４は、新コード・イメージ３１６が一時的に格納された、ローカル・メモリ装置３１０をフラッシュすることができる。別の実施形態では、コピー・モジュール５１４または変換モジュール５１２は、フラッシュ・メモリ装置３０４、ＰＬＡ３０６、または新コード・イメージ３１６にインターフェイスすることができる他のモジュールを更新することもできる。
【００５９】
以下の概略フローチャートでは、論理フローチャートとして、一般的に説明している。したがって、図示する順序およびラベル付けされたステップは、提示するプロセスの一実施形態を示すものである。図示するプロセスの機能、論理、あるいは１つまたは複数のステップ、またはその一部に対する効果において等価である、他のステップおよびプロセスが考案され得る。さらに、使用するフォーマットおよび記号体系は、プロセスの論理ステップを説明するために示されており、プロセスの範囲を限定するものではないことが理解されよう。様々な矢印タイプおよび直線タイプがフローチャート内で使用され得るが、それらは、対応するプロセスの範囲を限定するものではないことが理解されよう。実際、一部の矢印または他の結合子を使用して、プロセスの論理フローだけを示すことができる。たとえば、矢印は、図示するプロセスの列挙されたステップ間の特定されていない継続時間の待機または監視期間を示し得る。さらに、特定のプロセスが発生する順序は、図の対応するステップの順序に厳密に従うことも、従わないこともある。
【００６０】
図６に、ホスト・アダプタ３００またはホスト・バス・アダプタ２１２で使用され得る、コード・イメージ準備方法６００の一実施形態を示す。図示するコード・イメージ準備方法６００は、ホスト・アダプタ３００に、マシン状態、コード・レベルおよび更新について問い合わせる６０４ことから開始する６０２。ある実施形態では、クエリ・モジュール３１８は、ホスト・アダプタ３００に問い合わせるクエリ６０４。クエリ・モジュール３１８は、高速ロード・コード更新がホスト・アダプタ３００によってサポートされているかどうかを判断することもできる６０６。こうしたサポートは、旧コード・イメージ３１４のバージョン、新コード・イメージ３１６のバージョン、ホスト・アダプタ３００のハードウェア・コンポーネントなどに依存し得る。
【００６１】
ホスト・アダプタ３００上で、高速ロード・コード更新がサポートされる場合、ある実施形態では、イメージ・ロード・モジュール３２０は、次いで、新コード・イメージ３１６を、ローカル・メモリ装置３１０にロードする６０８。イメージ・ロード・モジュール３２０は、新コード・イメージ３１６が適切にロードされた６０８ことを確認するために、新コード・イメージ３１６を検査することもできる６１０。ある実施形態では、イメージ・ロード・モジュール３２０は、エラー検出およびエラー訂正技術を使用して、新コード・イメージ３１６を検査することができる６１０。
【００６２】
次いで、図示するコード・イメージ準備方法６００は、新コード・イメージ３１６内のレベルを、現在はたとえばフラッシュ・メモリ装置３０４内にあるレベルと比較して継続する。ある実施形態では、次いで、イメージ・ブリッジ・モジュール３２２は、フラッシュ・メモリ装置３０４を更新する必要があるかどうかを判断し６１４、そうである場合は、フラッシュ・メモリ装置３０４を更新する６１６。フラッシュ・メモリ装置３０４の更新６１６について、図７を参照して、より詳しく論じる。別の実施形態では、イメージ・ブリッジ・モジュール３２２は、いずれかのＰＬＡ３０６またはホスト・アダプタ３００内の他のハードウェア・コンポーネントを更新する必要があるかどうかを判断することもできる。別の実施形態では、イメージ・ブリッジ・モジュール３２２は、旧コード・イメージ３１４と新コード・イメージ３１６の間の非互換性を照合調整することもできる。
【００６３】
ある実施形態では、ホスト・アダプタ３００が、たとえばホスト２０２とのＩ／Ｏ通信を処理し続けながら、上記ステップのすべてが実行される。これは、旧コード・イメージ３１４とは別個のメモリ位置に格納される、新コード・イメージ３１６内のブートストラップ・モジュール５１０に、更新モジュール４０８が分岐するときに、旧コード・イメージ３１４をそのまま維持することによって、少なくとも一部、可能になる。換言すると、ホスト・アダプタ３００が、ホスト２０２からのＩ／Ｏを受け付け続ける間、ブートストラップ・モジュール５１０は、上記機能の多くまたはすべてを実施することができる。
【００６４】
ある実施形態では、上記ステップが完了した後にだけ、ホスト・アダプタ３００がオフラインにされ６１８、Ｉ／Ｏが休止（中断）される。ある実施形態では、ホスト・アダプタ３００は、こうしたコマンドを処理せずに、ホストから、Ｉ／Ｏコマンドを引き続き受け付けることができる。こうした機能を実施する前に、ホスト・アダプタ３００をオフラインにすることと比べると、図示するコード・イメージ準備方法６００では、ホスト・アダプタ３００がオフラインにされ、Ｉ／Ｏ要求を処理できない時間を、大きく最小限に抑えることができる。次いで、図示するコード・イメージ準備方法６００は、終了する６２０。
【００６５】
図７に、フラッシュ更新方法７００の一実施形態を図示するが、これは、図６のコード・イメージ準備方法６００で提示したフラッシュ・メモリ装置３０４の更新６１６を例示するために示すものである。ある実施形態では、フラッシュ・メモリ装置３０４の更新は、小さいセグメント内で実施される。図示するフラッシュ更新方法７００は、フラッシュ・メモリ装置３０４のあるセグメントを消去し７０４、次いで、その消去７０４の完了を確認する７０６ことから開始する７０２。フラッシュ更新方法７００は続けて、消去されたセグメントを更新し７０８、更新７１０が適切に完了したことを確認する７１０。次いで、フラッシュ更新方法７００は、追加のセグメントを更新する必要があるかどうかを判断し７１２、そうである場合は、戻って、次のセグメントを消去する７０４。
【００６６】
すべてのセグメントが適切に更新され７０８、確認されると７１０、図示するフラッシュ更新方法７００は次いで、終了する７１４。上述のように、ホスト・アダプタ３００が並行にＩ／Ｏ要求を受け付ける間に、１つまたは複数のフラッシュ・メモリ装置３０４を更新することができる。このように、それぞれのセグメントの消去７０４および更新７０８に比較的に長い時間が必要であっても、フラッシュ・メモリ装置３０４の更新によって、ホスト・アダプタ３００がオフラインでいる時間が増加されない。別の実施形態では、並列Ｉ／Ｏ処理時に、ＰＬＡ３０６および他のハードウェアを更新することもできる。
【００６７】
図８に、ホスト・バス・アダプタ３００上で使用することができる、コード・イメージ・コピー方法８００の一実施形態を示す。ある実施形態では、コード・イメージ・コピー方法８００は、コード・イメージ準備方法６００が完了し、ホスト・バス・アダプタ３００がオフラインにされた６１８後のある時点に行われる。図示するコード・イメージ・コピー方法８００は、たとえばホスト・バス・アダプタ３００のローカル・メモリ装置３１０内で、新コード・イメージ３１６を見つける８０４ことから開始する８０２。次いで、メモリ初期化モジュール３２４は、必要に応じて、ローカル・メモリ装置３１０を初期化する８０６。
【００６８】
次いで、イメージ・オーバーレイ・モジュール３２６は、図３を参照して上記で論じたように、旧コード・イメージ３１４に新コード・イメージ３１６をオーバーレイする。ある実施形態では、イメージ・オーバーレイ・モジュール３２６は、いずれのコード・イメージ・データ参照をもフラッシュし８１０、またキャッシュから、命令参照をフラッシュし得る８１２。これは、こうした参照が、オーバーレイされた８０８、旧コード・イメージ３１４に対応しているからである。しかし、一部の実施形態では、イメージ・オーバーレイ・モジュール３２６は、新コード・イメージ３１６または旧コード・イメージ３１４のどんな部分または参照をも削除する必要はない。次いで、高速ロード・キー・モジュール３２８は、高速ロード・キーを生成して、たとえば新コード・イメージ３１６のメタデータ・セグメント５０２内に、それを格納して８１４、高速ロード・コード更新が実施されることを示すことができる。次いで、ブートストラップ・モジュール５１０は、初期化に分岐し８１６、図示するコード・イメージ・コピー方法８００は、次いで、終了する８１８。
【００６９】
図９に、ホスト・バス・アダプタ３００上で使用することができる、コード・イメージ初期化方法９００の一実施形態を示す。ある実施形態では、コード・イメージ初期化方法は、図７のコード・イメージ・コピー方法７００によって起動される。図示するコード・イメージ初期化方法９００は、ホスト・アダプタ３００の「ライトを消す」９０４ことから開始する９０２。この時点まで、ホスト・アダプタ３００は、短い間、Ｉ／Ｏ処理を中断していたが、光ファイバ伝送ハードウェアを含めて、いずれのハードウェアをもシャットダウンしていない。この時点で、ホスト・バス・アダプタ３００は、通信装置の少なくとも一部をシャットダウンして、「ライトをオフにする」９０４。代替実施形態では、「ライトをオフにする」９０４ことが不要であり得る。実際、ある特定の実施形態では、ライトが「オン」であるか、「オフ」であるかは、重要でない。
【００７０】
次いで、コード・イメージ初期化方法９００は、高速ロード・コード更新が実施されたことを意味する、高速ロード・キーが存在するかどうかを判断する９０６。ある実施形態では、高速ロード・キー・モジュール３２８が、新コード・イメージ３１６内に、適切な高速ロード・キー５０８を見つけると、高速ロード・アダプタ初期化モジュール３３２は、高速ロード初期化シーケンスを実行する。そうでない場合は、標準初期化モジュール３３０は、高速ロード初期化シーケンスよりも長い時間を要し得る、従来の初期化シーケンスを実施し得る。高速ロードまたは標準の初期化シーケンスが完了した後に、ホスト・バス・アダプタ３００は、「ライトをオンにし」９１２、Ｉ／Ｏ要求の処理を再開する。
【００７１】
別の実施形態では、高速ロード初期化モジュール３３２は、標準初期化シーケンスを補完する、一部の高速ロード初期化ステップを実行することができる。このようにして、標準初期化モジュール３３０は、一部の従来のステップを、高速ロード初期化シーケンスからのステップで置き換えて、従来の初期化シーケンスを実施することができる。代替実施形態では、高速ロード初期化モジュール３３２は、従来の初期化シーケンスを補完するように、１つまたは複数の高速ロード初期化ステップを実施することができる。
【００７２】
高速ロード・コード更新および初期化シーケンスを使用して、ホスト・アダプタ３００は、上記プロセスのほとんどを通じて、Ｉ／Ｏ処理を継続することができる。たとえば、ある実施形態では、ホスト・アダプタ３００がオフラインでいる合計時間は、ライトが「オフ」であるおよそ１秒を含めて、およそ２〜３秒であり得る。ライトが「オフになる」９０４と、ホスト２１２は、状態変化を認識し、再びログインする。ホスト・アダプタ３００は、従来の技術を用いた２分間以上ではなく、「許容できる欠陥」であると見え得る間、オフラインであるにすぎないので、ホスト２１２は、タイムアウト時間を使い果たす前に、再びログインすることができる。別の実施形態では、通信システム２００の特定のトポロジ、およびホスト・アダプタ３００によって使用されるプロトコル次第で、コード・イメージ初期化方法９００の時に、ライトを「オフにする」９０４ことが不要であり得る。
【００７３】
上記の説明で、ストレージ・システムおよびストレージ・エリア・ネットワークの範囲内において、用語「ホスト・アダプタ」および「ホスト・バス・アダプタ」を使用しているが、本発明の範囲は、マイクロコードが更新され得る、すべての通信アダプタにまで及ぶことが理解されよう。本発明は、コード・イメージ更新時の最小限のオフライン時間または最大限のＩ／Ｏ処理時間によって利益を得る、通信システムの一部を形成する通信アダプタ上で、コード・イメージを更新することに特に適用することができる。
【００７４】
本発明は、その精神または基本的な特徴から逸脱せずに、他の特定の形で実施することができる。上述の諸実施形態は、すべての点において、限定的ではなく、例示的なものにすぎないと見なすべきである。したがって、本発明の範囲は、上記の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲の等価物の意味および範囲内に含まれるすべての変更は、その範囲内に包含されるべきである。
【図面の簡単な説明】
【００７５】
【図１】従来のコード・イメージ更新方法を示す概略フローチャートである。
【図２】本発明による通信システムの一実施形態を示す概略ブロック図である。
【図３】本発明によるホスト・バス・アダプタの一実施形態を示す概略ブロック図である。
【図４】本発明による旧コード・イメージの一実施形態を示す概略ブロック図である。
【図５】本発明による新コード・イメージの一実施形態を示す概略ブロック図である。
【図６】本発明によるコード・イメージ準備方法の一実施形態を示す概略フローチャートである。
【図７】本発明によるフラッシュ更新方法の一実施形態を示す概略フローチャートである。
【図８】本発明によるコード・イメージ・コピー方法の一実施形態を示す概略フローチャートである。
【図９】本発明によるコード・イメージ初期化方法の一実施形態を示す概略フローチャートである。
【符号の説明】
【００７６】
１００  コード・イメージ更新方法
２００  通信システム
２０２  ホスト
２０４  ホスト
２０６  ホスト
２０８  ストレージ・システム
２１０  交換機
２１２  ホスト・バス・アダプタ
２１４  ホスト・バス・アダプタ
２１６  ホスト・バス・アダプタ
２１８  ホスト・アダプタ
２２０  ホスト・アダプタ
２２２  クラスタ
２２４  クラスタ
２２６  マルチプロセッサ
２２８  マルチプロセッサ
２３０  論理装置番号
２３２  論理装置番号
２３４  論理装置番号
２３６  論理装置番号
３００  ホスト・アダプタ
３０２  ＣＰＵ
３０４  フラッシュ・メモリ装置
３０６  プログラマブル論理アレイ
３０８  Ｉ／Ｏポート
３１０  ローカル・メモリ装置
３１２  並列コード・ロード装置
３１４  旧コード・イメージ
３１６  新コード・イメージ
３１８  クエリ・モジュール
３２０  イメージ・ロード・モジュール
３２２  イメージ・ブリッジ・モジュール
３２４  メモリ初期化モジュール
３２６  イメージ・オーバーレイ・モジュール
３２８  高速ロード・キー・モジュール
３３０  標準アダプタ初期化モジュール
３３２  高速ロード・アダプタ初期化モジュール
４０２  メタデータ・セグメント
４０４  ランタイム・セグメント
４０６  データ・セグメント
４０８  更新モジュール
４１０  ロード・モジュール
４１２  分岐モジュール
５０２  メタデータ・セグメント
５０４  ランタイム・セグメント
５０６  データ・セグメント
５０８  高速ロード・キー
５１０  ブートストラップ・モジュール
５１２  変換モジュール
５１４  コピー・モジュール
６００  コード・イメージ準備方法
７００  フラッシュ更新方法
８００  コード・イメージ・コピー方法
９００  コード・イメージ初期化方法
【図１】
0004620430.tif 000002
【図２】
0004620430.tif 000003
【図３】
0004620430.tif 000004
【図４】
0004620430.tif 000005
【図５】
0004620430.tif 000006
【図６】
0004620430.tif 000007
【図７】
0004620430.tif 000008
【図８】
0004620430.tif 000009
【図９】
0004620430.tif 000010