(57)【要約】【課題】短時間にて診断可能なストレージ装置、アダプタ、及び、診断方法を提供する。【解決手段】中継装置は、ホスト装置と記憶装置との間におけるデータ中継処理を協働して実行する複数の処理回路を備え、処理回路各々は、自処理回路にて実行する処理が終了すると自処理回路に対する自己診断処理を開始する。また、中継装置は、処理回路各々にて実行されるいずれの処理よりも上流の処理を実行し、処理回路各々における処理の開始を制御する処理回路である上流回路をさらに備える。また、中継装置では、上流回路は、処理回路にて自己診断処理が開始される場合には、自己診断処理を開始する処理回路にて新たな処理が発生しないように処理する。【選択図】図１
2010211529.tif 000002
【特許請求の範囲】
【請求項１】
ホスト装置と記憶装置との間におけるデータ中継処理を協働して実行する複数の処理回路を備え、
前記処理回路各々は、自処理回路にて実行する処理が終了すると自処理回路に対する自己診断処理を開始することを特徴とする中継装置。
【請求項２】
前記処理回路各々にて実行されるいずれの処理よりも上流の処理を実行し、当該処理回路各々における処理の開始を制御する処理回路である上流回路をさらに備え、
前記上流回路は、前記処理回路にて自己診断処理が開始される場合には、自己診断処理を開始する当該処理回路にて新たな処理が発生しないように処理することを特徴とする請求項１に記載の中継装置。
【請求項３】
前記上流回路および前記処理回路に対して、自己診断処理を開始する旨の開始指示を送信する自己診断制御回路をさらに備え、
前記上流回路は、前記自己診断制御回路から開始指示を受信すると、前記処理回路にて新たな処理が発生しないよう処理を開始し、
前記処理回路各々は、前記自己診断制御回路から開始指示を受信した後に、自処理回路にて実行する処理が終了すると、自己診断処理を開始することを特徴とする請求項２に記載の中継装置。
【請求項４】
前記自己診断制御回路は、前記処理回路に自己診断処理を中断させて新たな処理を実行させる場合に、前記上流回路および当該処理回路に対して、自己診断処理を中断する旨の中断指示を送信し、
前記上流回路は、開始指示を受信した後に前記自己診断制御回路から中断指示を受信すると、前記処理回路にて新たな処理が発生しないように処理することを中断し、当該処理回路にて新たな処理が発生するように処理し、
前記処理回路は、開始指示を受信した後に前記自己診断制御回路から中断指示を受信すると、自己診断処理を中断し、自処理回路にて新たに発生した処理を実行することを特徴とする請求項３に記載の中継装置。
【請求項５】
前記自己診断制御回路は、自己診断処理の中断後に自己診断処理を再開させる場合に、前記上流回路および前記処理回路に対して、自己診断処理を再開する旨の再開指示を送信し、
前記上流回路は、前記中断指示を受信した後に前記自己診断制御回路から再開指示を受信すると、前記処理回路にて新たな処理が発生しないように処理することを再開し、
前記処理回路は、前記中断指示を受信した後に前記自己診断制御回路から再開指示を受信すると、自処理回路にて新たに発生した処理の実行が終了すると自己診断処理を再開することを特徴とする請求項４に記載の中継装置。
【請求項６】
ホスト装置と記憶装置との間におけるデータ中継処理を協働して実行する複数の処理回路を有し、
前記処理回路各々は、自処理回路にて実行する処理が終了すると自処理回路に対する自己診断処理を開始することを特徴とする中継装置を備えたことを特徴とするストレージ装置。
【請求項７】
ホスト装置と記憶装置との間におけるデータ中継処理を協働して実行する複数の処理回路各々は、
自処理回路にて実行する処理を実行する処理ステップと、
前記処理ステップにて処理が終了すると、自処理回路に対する自己診断処理を開始する診断ステップと
を含むことを特徴とする診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、中継装置、及び、診断方法に関する。
【背景技術】
【０００２】
ストレージ装置内にあるアダプタでは、複数の処理回路が、ストレージ装置に接続されたホストサーバとストレージ装置内にある記憶媒体との間でのデータ中継処理を協働して実行する。
【０００３】
ここで、従来より、処理回路が正常に機能するかを診断する手法として、ＣＲＣ（Cyclic  Redundancy  Check）を用いたＣＲＣ診断技術が知られている。また、ストレージ装置の停止中に処理回路自身が自処理回路を診断する回路診断技術が知られており、回路診断技術では、処理回路全ての処理が終わった後に、自己診断処理を実行する。なお、ＰＣＩ（Peripheral  Components  Interconnect）バスコントローラのレジスタに記憶された内容を定期的に設定し直す技術も開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−２０４７７２号公報
【特許文献２】特開２００６−１５５４３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記した従来の技術では、処理回路を適切に診断できないという課題があった。例えば、ＣＲＣ診断技術では、回路規模にも左右されるが、短時間では診断できなかった。また、上記した回路診断技術では、回路を停止した上で診断しなければならなかった。
【０００６】
そこで、開示の技術は、上記に鑑みてなされたものであって、処理回路を適切に診断可能なストレージ装置、中継装置、及び、診断方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願の開示する中継装置は、一つの態様において、ホスト装置と記憶装置との間におけるデータ中継処理を協働して実行する複数の処理回路を備え、前記処理回路各々は、自処理回路にて実行する処理が終了すると自処理回路に対する自己診断処理を開始する。
【発明の効果】
【０００８】
本願の開示する中継装置の一つの態様によれば、処理回路を適切に診断可能であるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１に係る中継装置の概要を説明するための図である。
【図２】図２は、実施例１におけるストレージ装置の構成を説明するためのブロック図である。
【図３】図３は、実施例１に係るアダプタの構成を説明するためのブロック図である。
【図４】図４は、実施例１における読出処理時のアダプタを説明するための図である。
【図５】図５は、実施例１における書込処理時のアダプタを説明するための図である。
【図６】図６は、実施例１におけるメモリコントローラ内にある回路について説明するためのブロック図である。
【図７】図７は、実施例１における読出処理時に自己診断処理が実行されるタイミングを説明するための図である。
【図８】図８は、実施例１における書込処理時に自己診断処理が実行されるタイミングを説明するための図である。
【図９】図９は、実施例１におけるメモリコントローラに各回路が形成される処理の流れを説明するためのフローチャートである。
【図１０】図１０は、実施例１におけるメモリコントローラ内にて実行される自己診断処理の流れの概略について説明するためのシーケンス図である。
【図１１】図１１は、実施例１におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。
【図１２】図１２は、実施例１におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。
【図１３】図１３は、実施例２におけるメモリコントローラ内にある回路について説明するためのブロック図である。
【図１４】図１４は、実施例２におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。
【図１５】図１５は、実施例２におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。
【図１６】図１６は、実施例３におけるメモリコントローラ内にある回路について説明するためのブロック図である。
【図１７】図１７は、実施例３におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。
【図１８−１】図１８−１は、実施例３におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。
【図１８−２】図１８−２は、実施例３におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。
【図１９】図１９は、実施例３における新たなメモリ書込指示の発生を許可する場合における自己診断処理の流れについて説明するための図である。
【図２０−１】図２０−１は、実施例３における新たなメモリ書込指示の発生を許可する場合における自己診断処理の流れについて説明するための図である。
【図２０−２】図２０−２は、実施例３における新たなメモリ書込指示の発生を許可する場合における自己診断処理の流れについて説明するための図である。
【図２１】図２１は、実施例３における新たなメモリ読出指示の発生を許可する場合における自己診断処理の流れについて説明するための図である。
【図２２−１】図２２−１は、実施例３における新たなメモリ読出指示の発生を許可する場合における自己診断処理の流れについて説明するための図である。
【図２２−２】図２２−２は、実施例３における新たなメモリ読出指示の発生を許可する場合における自己診断処理の流れについて説明するための図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示するストレージ装置、中継装置、及び、診断方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１１】
［中継装置の概要］
まず最初に、図１を用いて、実施例１に係る中継装置の概要を説明する。なお、図１は、実施例１に係る中継装置の概要を説明するための図である。
【００１２】
実施例１に係る中継装置は、ホスト装置と記憶装置との間におけるデータ中継処理を協働して実行する複数の処理回路を備え、例えば、図１に示すように、「Ａ回路」と「Ｂ回路」と「Ｃ回路」とを備える。
【００１３】
そして、図１に示すように、実施例１に係る中継装置では、処理回路各々が、自処理回路にて実行する処理が終了すると、自処理回路に対する自己診断処理を開始する。例えば、図１に示すように、「Ａ回路」と「Ｂ回路」と「Ｃ回路」とは、協働してデータ中継処理を実行し、自処理回路にて実行する処理が終了すると、自己診断処理を開始する。例えば、「Ａ回路」や「Ｂ回路」、「Ｃ回路」は、自己診断処理として、所定のデータを受信したものとして処理を開始し、処理結果が所定の値になるか否かをチェックする。
【００１４】
このようなことから、実施例１に係る中継装置によれば、短時間にて診断可能である。具体的には、個々の回路が自処理回路にて実行する処理が終了すると自己診断処理を開始するので、短時間で診断可能である。
【００１５】
［ストレージ装置の構成］
次に、図１を用いて説明した中継装置（アダプタとも称する）を備えるストレージ装置の構成を説明する。図２は、実施例１におけるストレージ装置の構成を説明するためのブロック図である。
【００１６】
図２に示すように、ストレージ装置２００は、ホストサーバ１００と接続され、ディスクエンクロージャ２１０と、複数のコントローラモジュール２２０と、複数のアダプタ３００とを備える。また、ストレージ装置２００は、ホストサーバ１００によって用いられる情報を記憶する装置であり、例えば、ＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）装置が該当する。
【００１７】
ホストサーバ１００は、ストレージ装置２００と接続され、ストレージ装置２００を用いてデータの書き込みや読み出しを行う。具体的には、ホストサーバ１００は、データを読み出す場合には、読出指示を送り、データを書き込む場合には、書き込み対象となるデータと書込指示とをアダプタ３００に送る。
【００１８】
ディスクエンクロージャ２１０は、複数のコントローラモジュール２２０と接続され、一つまたは複数のディスク２１１を格納し、例えば、複数のディスク２１１を格納する筐体などが該当する。また、ディスク２１１は、ホストサーバ１００によって用いられるデータを記憶し、ホストサーバ１００からの指示に基づいて、コントローラモジュール２２０によってデータが書き込まれ、また、コントローラモジュール２２０によってデータが読み出される。
【００１９】
コントローラモジュール２２０は、ディスク２１１と複数のアダプタ３００と接続される。コントローラモジュール２２０は、ディスク２１１にデータを書き込む旨の指示であるディスク書込指示とデータとをアダプタ３００から受信すると、受信したデータをディスク２１１に書き込む。また、コントローラモジュール２２０は、ディスク２１１からデータを読み出す旨の指示であるディスク読出指示をアダプタ３００から受信すると、受信した情報によって特定されるデータをディスク２１１から読み出し、アダプタ３００に送信する。
【００２０】
なお、図２に示すように、ストレージ装置２００は、複数のコントローラモジュール２２０を備えているが、これは、冗長性のあるストレージ装置２００を実現させるためである。例えば、複数あるコントローラモジュール２２０の内一部が故障した場合には、ストレージ装置２００は、正常に機能するコントローラモジュール２２０を用いて、データの読み出しや書き込み処理を実行する。
【００２１】
アダプタ３００は、ホストサーバ１００とコントローラモジュール２２０と接続され、ホストサーバ１００とコントローラモジュール２２０との間でのデータ中継処理を実行する。つまり、アダプタ３００は、ホストサーバ１００とコントローラモジュール２２０との間におけるデータ送受信を中継する。
【００２２】
［アダプタの構成］
次に、図３を用いて、アダプタ３００の構成を説明する。図３は、実施例１に係るアダプタの構成を説明するためのブロック図である。アダプタ３００は、中継装置とも称し、ホストサーバ１００とコントローラモジュール２２０との間におけるデータ中継処理を協働して実行する複数の処理回路を備える。
【００２３】
図３に示すように、アダプタ３００は、メモリ３０１と、フラッシュメモリ３０２と、ロードデバイス３０３と、チャネルコントローラ３０４と、ＣＰＵ（Central  Processing  Unit）３０５と、メモリコントローラ４００とを備える。
【００２４】
なお、実施例１では、アダプタ３００が備える処理回路の内、メモリコントローラ４００内にある回路が自己診断処理を実行するものとして説明する。また、図３を用いてアダプタ３００の構成を説明する際には、メモリコントローラ４００内の回路の詳細については後述するため、説明を省略する。なお、自己診断処理を実行する回路は、メモリコントローラ４００内にある回路に限定されるものではなく、チャネルコントローラ３０４などであってもよい。
【００２５】
メモリ３０１は、メモリコントローラ４００と接続される。また、メモリ３０１は、アダプタ３００がデータ中継処理を実行する際に用いられ、具体的には、アダプタ３００が中継するデータを一時的に記憶する。
【００２６】
なお、メモリ３０１に記憶されたデータは、メモリコントローラ４００によって書き込まれ、メモリコントローラ４００によって読み出される。なお、メモリ３０１に記憶されたデータの内中継が終了したデータは、例えば、メモリコントローラ４００によって上書きされることで消去される。
【００２７】
フラッシュメモリ３０２は、ロードデバイス３０３と接続される。また、フラッシュメモリ３０２は、プログラマブルデバイス上に展開されることで回路として機能する回路情報を記憶する。また、フラッシュメモリ３０２が記憶する回路情報は、例えば、製造時に、外部端末によってフラッシュメモリ３０２に書き込まれる。なお、以下では、特に言及しない限り、フラッシュメモリ３０２には、予め、回路情報が書き込まれているものとして説明する。
【００２８】
なお、プログラマブルデバイスとは、例えば、ＦＰＧＡ（Field  Programmable  Gate  Array）やＣＰＬＤ（Complex  Programmable  Logic  Device）などが該当する。プログラマブルデバイスとは、デバイス外部の不揮発性メモリからデバイス内の回路構成用メモリに回路情報を展開し、デバイスに任意の回路を構成するものである。なお、回路構成用メモリとしては、例えば、ＳＲＡＭ（Static  Random  Access  Memory）などが用いられる。不揮発性メモリに格納する回路情報を差し替えることで、任意の回路を変更できるため、ＡＳＩＣ（Application  Specific  Integrated  Circuit）よりも論理不具合の修正が容易であり、開発期間を短縮することが可能である。
【００２９】
なお、プログラマブルデバイス内の処理回路は、プログラマブルデバイス内の記憶領域に所定のプログラムが展開されることで実現される。また、プログラマブルデバイス内の処理回路は、例えば、中性子線等の影響により記憶領域にエラーが発生すると正常に機能しなくなるので、回路が正常かを診断する必要性が高い。
【００３０】
また、実施例１では、図３には図示していないが、メモリコントローラ４００は、回路構成用メモリを備え、フラッシュメモリ３０２に記憶された回路情報が、メモリコントローラ４００内にある回路構成用メモリに展開されて回路として機能するものとして説明する。
【００３１】
ロードデバイス３０３は、フラッシュメモリ３０２とＣＰＵ３０５とメモリコントローラ４００と接続される。また、ロードデバイス３０３は、ＣＰＵ３０５から起動指示を受信すると、フラッシュメモリ３０２から回路情報を読み出し、読み出した回路情報をメモリコントローラ４００内に備えられた回路構成用メモリに展開する。なお、ＣＰＵ３０５から起動指示を受け付けるタイミングは、例えば、アダプタ３００に電源が投入されたタイミングなどが該当する。
【００３２】
次に、チャネルコントローラ３０４とＣＰＵ３０５とメモリコントローラ４００とについて説明する。以下では、まず、アダプタ３００内における各回路の接続関係について説明し、その後、各回路が協働して行うデータ中継処理について説明する。各回路が協働して行うデータ中継処理については、ホストサーバ１００がストレージ装置２００から情報を読み出す場合と、書き込む場合とについて説明する。
【００３３】
図３を用いて、アダプタ３００内における各回路の接続関係について説明する。図３に示すように、チャネルコントローラ３０４は、ホストサーバ１００とメモリコントローラ４００とＣＰＵ３０５と接続される。ＣＰＵ３０５は、チャネルコントローラ３０４とロードデバイス３０３とメモリコントローラ４００と接続される。また、ＣＰＵ３０５は、アダプタ３００に電源が投入されると、ロードデバイス３０３に起動指示を送り、ロードデバイス３０３にメモリコントローラ４００内の回路構成用メモリに回路を展開させる。
【００３４】
メモリコントローラ４００は、メモリ３０１とチャネルコントローラ３０４とＣＰＵ３０５とロードデバイス３０３とコントローラモジュール２２０と接続され、また、図３には図示していないが、回路構成用メモリを備える。メモリコントローラ４００は、ロードデバイス３０３によって回路情報が回路構成用メモリに展開され、メモリコントローラ４００内に回路各々が形成される。なお、メモリコントローラ４００による処理は、回路構成用メモリに回路情報が展開されることで形成された回路が協働して実行する。なお、メモリコントローラ４００についての詳細な説明については、後述するため、図４と図５とを用いた説明では、説明を省略する。
【００３５】
次に、図４と図５とを用いて、チャネルコントローラ３０４とＣＰＵ３０５とメモリコントローラ４００とが協働して行うデータ中継処理について説明する。なお、図４や図５では、説明の便宜上、コントローラモジュール２２０やディスクエンクロージャ２１０、ディスク２１１も併せて示した。なお、図４は、実施例１における読出処理時のアダプタを説明するための図である。図５は、実施例１における書込処理時のアダプタを説明するための図である。
【００３６】
図４を用いて、ホストサーバ１００がストレージ装置２００から情報を読み出す場合、言い換えると、ホスト読み出し時について説明する。すなわち、ホストサーバ１００がデータを読み出すための読出指示をアダプタ３００に行ってから、アダプタ３００からデータを受け取るまでの間に、アダプタ３００内にて行われる処理について説明する。
【００３７】
図４の（１）に示すように、チャネルコントローラ３０４は、ホストサーバ１００から読出指示（ＲＥＡＤコマンド）を受信すると、ディスク２１１からデータを読み出すディスク読出指示をＣＰＵ３０５に送信する。そして、図４の（２）や（３）に示すように、ＣＰＵ３０５は、ディスク読出指示をメモリコントローラ４００に送信する。
【００３８】
そして、図４の（４）に示すように、メモリコントローラ４００は、ディスク２１１から読み出されたデータをメモリ３０１に書きこむ。具体的には、メモリコントローラ４００は、ディスク読出指示をコントローラモジュール２２０に送り、コントロールモジュールがディスク２１１からデータを読み出す。その後、メモリコントローラ４００は、コントローラモジュール２２０からデータを受信し、受信したデータをメモリ３０１に書き込む。
【００３９】
そして、図４の（５）に示すように、メモリコントローラ４００は、ディスク２１１からの読み出しが終了した旨のディスク読出終了通知をＣＰＵ３０５に送る。そして、図４の（６）に示すように、ＣＰＵ３０５は、チャネルコントローラ３０４にホストサーバ１００に読み出されたデータをメモリ３０１から読み出す旨の指示であるメモリ読出指示を送信する。
【００４０】
そして、図４の（７）に示すように、チャネルコントローラ３０４は、メモリに書き込まれた読み出し対象となるデータを取得してホストサーバ１００に送信する。具体的には、チャネルコントローラ３０４は、メモリ読出指示をメモリコントローラ４００に送信する。その後、メモリコントローラ４００は、受信したメモリ読出指示により特定されるデータをメモリ３０１から読み出し、読み出したデータをチャネルコントローラ３０４に送信する。そして、チャネルコントローラ３０４は、メモリコントローラ４００から受信したデータをホストサーバ１００に送り、読出が終了した旨の読出終了通知を送信する。
【００４１】
次に、図５を用いて、ホストサーバ１００がストレージ装置２００にデータを書き込む場合、言い換えると、ホスト書き込み時について説明する。すなわち、ホストサーバ１００がデータを書き込むための書込指示をアダプタ３００に行ってから、アダプタ３００から書込終了通知を受け取るまでの間に、アダプタ３００内にて行われる処理について説明する。
【００４２】
図５の（１）に示すように、チャネルコントローラ３０４は、データと書込指示とをホストサーバ１００から受信すると、受信したデータをメモリ３０１に格納する。つまり、チャネルコントローラ３０４は、受信したデータと、データをメモリ３０１に書き込む旨の指示であるメモリ書込指示とをメモリコントローラ４００に送り、メモリコントローラ４００が、受信したデータをメモリ３０１に書き込む。
【００４３】
そして、図５の（２）に示すように、チャネルコントローラ３０４は、ディスク２１１にデータを書き込むディスク書込指示（ＷＲＩＴＥコマンド）をＣＰＵ３０５に送信する。そして、図５の（３）や（４）に示すように、ＣＰＵ３０５は、ディスク書込指示をメモリコントローラ４００に送信する。
【００４４】
そして、図５の（５）に示すように、メモリコントローラ４００は、メモリ３０１に書き込まれたデータを読み出し、読み出したデータとディスク書込指示とをコントローラモジュール２２０に送り、その後、コントローラモジュール２２０がデータをディスク２１１に書き込む。
【００４５】
そして、図５の（６）に示すように、メモリコントローラ４００は、ディスク２１１への書き込みが終了した旨のディスク書込終了通知をＣＰＵ３０５に送信する。そして、図５の（７）に示すように、ＣＰＵ３０５は、書き込みが終了した旨の情報をホストサーバ１００に送信する旨の書込終了通知指示をチャネルコントローラ３０４に送信する。そして、図５の（８）に示すように、チャネルコントローラ３０４は、書き込みが終了した旨の書込終了通知をホストサーバ１００に送信する。
【００４６】
［メモリコントローラの構成］
次に、図６を用いて、実施例１におけるメモリコントローラ４００内にある回路各々について簡単に説明する。なお、図６は、実施例１におけるメモリコントローラ内にある回路について説明するためのブロック図である。
【００４７】
図６に示すように、メモリコントローラ４００は、ＣＣ側ＰＣＩ−ＩＯ制御回路４０１と、Ｍｅｍｏｒｙ−ＩＯ制御回路４０４と、ＣＰＵ側ＰＣＩ−ＩＯ制御回路４０６と、ＣＭ側ＰＣＩ−ＩＯ制御回路４０９とを備える。また、メモリコントローラ４００は、ライトＢｒｉｄｇｅ回路４１２と、リードＢｒｉｄｇｅ回路４１３と、ディスクリプタ制御回路４１４と、自己診断制御回路４１７と、ライトＤＭＡ回路４１５と、リードＤＭＡ回路４１６とを備える。
【００４８】
なお、実施例１では、メモリコントローラ４００内の各回路の内、例えば、ライトＤＭＡ回路４１５と、リードＤＭＡ回路４１６とがプログラマブルデバイス上にて実現され、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とが自己診断を実行するものとして説明する。
【００４９】
以下では、まず、メモリコントローラ４００内の各部の接続関係について簡単に説明し、その後、各部にて処理が発生する流れについて簡単に説明する。
【００５０】
メモリコントローラ４００内の各部の接続関係について簡単に説明する。図６に示すように、ＣＣ側ＰＣＩ−ＩＯ制御回路４０１は、ＣＣ側マスタ制御回路４０２とＣＣ側ターゲット制御回路４０３とを備え、ＣＣ側マスタ制御回路４０２とＣＣ側ターゲット制御回路４０３とが、チャネルコントローラ３０４とライトＢｒｉｄｇｅ回路４１２とリードＢｒｉｄｇｅ回路４１３と接続される。
【００５１】
ＣＣ側マスタ制御回路４０２とＣＣ側ターゲット制御回路４０３とは、協働して、チャネルコントローラ３０４とメモリコントローラ４００との間のデータの送受信を中継する。
【００５２】
Ｍｅｍｏｒｙ−ＩＯ制御回路４０４は、メモリ側マスタ制御回路４０５を備え、メモリ側マスタ制御回路４０５が、メモリ３０１とライトＢｒｉｄｇｅ回路４１２とリードＢｒｉｄｇｅ回路４１３とライトＤＭＡ回路４１５とリードＤＭＡ回路４１６と接続される。メモリ側マスタ制御回路４０５は、メモリ３０１にデータを書き込み、また、メモリ３０１からデータを読み出す。
【００５３】
ＣＰＵ側ＰＣＩ−ＩＯ制御回路４０６は、ＣＰＵ側マスタ制御回路４０７とＣＰＵ側ターゲット制御回路４０８とを備える。また、ＣＰＵ側マスタ制御回路４０７とＣＰＵ側ターゲット制御回路４０８とは、ＣＰＵ３０５とディスクリプタ制御回路４１４と自己診断制御回路４１７と接続される。
【００５４】
ＣＰＵ側マスタ制御回路４０７とＣＰＵ側ターゲット制御回路４０８とは、協働して、ＣＰＵ３０５とメモリコントローラ４００との間のデータの送受信を中継する。
【００５５】
ＣＭ側ＰＣＩ−ＩＯ制御回路４０９は、ＣＭ側マスタ制御回路４１０とＣＭ側ターゲット制御回路４１１とを備え、ＣＭ側マスタ制御回路４１０とＣＭ側ターゲット制御回路４１１とが、リードＤＭＡ回路４１６とライトＤＭＡ回路４１５と接続される。
【００５６】
ＣＭ側マスタ制御回路４１０とＣＭ側ターゲット制御回路４１１とは、協働して、コントローラモジュール２２０とメモリコントローラ４００との間のデータの送受信を中継する。
【００５７】
ライトＢｒｉｄｇｅ回路４１２とリードＢｒｉｄｇｅ回路４１３とは、ＣＣ側マスタ制御回路４０２とＣＣ側ターゲット制御回路４０３とメモリ側マスタ制御回路４０５と接続され、ＣＣ側マスタ制御回路４０２やＣＣ側ターゲット制御回路４０３と、メモリ側マスタ制御回路４０５との間のデータや指示の送受信を中継する。
【００５８】
ディスクリプタ制御回路４１４は、ＣＰＵ側マスタ制御回路４０７とＣＰＵ側ターゲット制御回路４０８と自己診断制御回路４１７とライトＤＭＡ回路４１５とリードＤＭＡ回路４１６と接続される。また、ディスクリプタ制御回路４１４は、ＣＰＵ側ターゲット制御回路４０８からディスク書込指示やディスク読出指示を受信し、受信したディスク書込指示やディスク読出指示をライトＤＭＡ回路４１５やリードＤＭＡ回路４１６に送信する。
【００５９】
また、ディスクリプタ制御回路４１４は、ライトＤＭＡ回路４１５からディスク書込終了通知を受信すると、受信したディスク書込終了をＣＰＵ側マスタ制御回路４０７に送信する。また、ディスクリプタ制御回路４１４は、リードＤＭＡ回路４１６からディスク読出終了通知を受信すると、受信したディスク読出終了通知をＣＰＵ側マスタ制御回路４０７に送信する。
【００６０】
なお、ディスクリプタ制御回路４１４は、後述する診断モード開始予告を自己診断制御回路４１７から受信すると、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とが、現在処理中の処理以外に新たな処理を実行しないようにする。なお、診断モード開始予告を受信した後のディスクリプタ制御回路４１４による処理の詳細については、後述するため、説明を省略する。
【００６１】
ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とは、メモリ側マスタ制御回路４０５とＣＭ側マスタ制御回路４１０とＣＭ側ターゲット制御回路４１１とディスクリプタ制御回路４１４と自己診断制御回路４１７と接続される。また、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とは、ＣＰＵ３０５を介さずにデータ中継処理を行うＤＭＡ（Direct  Memory  Access）を実行し、具体的には、ディスクリプタ制御回路４１４から受信したディスク書込指示やディスク読出指示を用いて、データ中継処理を実行する。
【００６２】
また、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６は、診断モード開始予告を自己診断制御回路４１７から受信すると、現在処理中処理が終了するタイミングにて、自己診断を開始する。また、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６は、自己診断が終了すると、診断終了通知を自己診断制御回路４１７に送信する。なお、診断モード開始予告を受信した後のライトＤＭＡ回路４１５やリードＤＭＡ回路４１６による処理の詳細については、後述するため、説明を省略する。
【００６３】
次に、メモリコントローラ４００内の各部にて処理が発生する流れについて簡単に説明する。まず、ＣＣ側ターゲット制御回路４０３がメモリ読出指示を受信した場合について説明する。この場合、ＣＣ側ターゲット制御回路４０３、リードＢｒｉｄｇｅ回路４１３、メモリ側マスタ制御回路４０５、リードＢｒｉｄｇｅ回路４１３、ＣＣ側マスタ制御回路４０２に順に処理が発生することになる。
【００６４】
つまり、ＣＣ側ターゲット制御回路４０３は、メモリ読出指示をチャネルコントローラ３０４から受信すると、メモリ読出指示をリードＢｒｉｄｇｅ回路４１３に送信する。そして、リードＢｒｉｄｇｅ回路４１３は、ＣＣ側ターゲット制御回路４０３から受信したメモリ読出指示をメモリ側マスタ制御回路４０５に送信する。その後、メモリ側マスタ制御回路４０５は、メモリ３０１からデータを読み出してリードＢｒｉｄｇｅ回路４１３に送信し、リードＢｒｉｄｇｅ回路４１３が、データをＣＣ側マスタ制御回路４０２に送信する。そして、ＣＣ側マスタ制御回路４０２は、データをチャネルコントローラ３０４に送信する。
【００６５】
また、ＣＣ側ターゲット制御回路４０３がデータとメモリ書込指示を受信した場合について説明する。この場合、ＣＣ側ターゲット制御回路４０３、ライトＢｒｉｄｇｅ回路４１２、メモリ側マスタ制御回路４０５に順に処理が発生することになる。
【００６６】
つまり、ＣＣ側ターゲット制御回路４０３は、データとメモリ書込指示とをチャネルコントローラ３０４から受信すると、受信したデータとメモリ書込指示とをライトＢｒｉｄｇｅ回路４１２に送信する。そして、ライトＢｒｉｄｇｅ回路４１２は、ＣＣ側ターゲット制御回路４０３から受信したデータとメモリ書込指示とをメモリ側マスタ制御回路４０５に送信し、メモリ側マスタ制御回路４０５が、受信したデータをメモリ３０１に書き込む。
【００６７】
また、ＣＰＵ側ターゲット制御回路４０８がディスク読出指示を受信した場合について説明する。この場合、ＣＰＵ側ターゲット制御回路４０８、ディスクリプタ制御回路４１４、リードＤＭＡ回路４１６、ＣＭ側マスタ制御回路４１０、ＣＭ側ターゲット制御回路４１１に順に処理が発生することになる。その後、さらに、リードＤＭＡ回路４１６、メモリ側マスタ制御回路４０５、ディスクリプタ制御回路４１４、ＣＰＵ側マスタ制御回路４０７に順に処理が発生することになる。
【００６８】
つまり、ＣＰＵ側ターゲット制御回路４０８は、ＣＰＵ３０５からディスク読出指示を受信すると、受信したディスク読出指示をディスクリプタ制御回路４１４に送信する。そして、ディスクリプタ制御回路４１４は、ＣＰＵ側ターゲット制御回路４０８から受信したディスク読出指示をリードＤＭＡ回路４１６に送信する。その後、リードＤＭＡ回路４１６は、ディスク読出指示をＣＭ側マスタ制御回路４１０に送信し、ＣＭ側マスタ制御回路４１０がコントローラモジュール２２０にディスク読出指示を送信する。そして、ＣＭ側ターゲット制御回路４１１は、コントローラモジュール２２０から、ディスク２１１からの読み出しが終了した旨のディスク読出終了通知と、データとを受信し、リードＤＭＡ回路４１６に送信する。そして、リードＤＭＡ回路４１６は、受信したデータをメモリ側マスタ制御回路４０５に送信し、また、ディスク読出終了通知をディスクリプタ制御回路４１４に送信する。そして、メモリ側マスタ制御回路４０５は、受信したデータをメモリ３０１に書き込み、ディスクリプタ制御回路４１４が、ディスク読出終了通知をＣＰＵ側マスタ制御回路４０７に送信する。その後、ＣＰＵ側マスタ制御回路４０７が、ディスク読出終了通知をＣＰＵ３０５に送信する。
【００６９】
また、ＣＰＵ側ターゲット制御回路４０８がディスク書込指示を受信した場合について説明する。この場合、ＣＰＵ側ターゲット制御回路４０８、ディスクリプタ制御回路４１４、ライトＤＭＡ回路４１５、メモリ側マスタ制御回路４０５、ライトＤＭＡ回路４１５に順に処理が発生することになる。その後、さらに、ＣＭ側マスタ制御回路４１０、ＣＭ側ターゲット制御回路４１１、ライトＤＭＡ回路４１５、ディスクリプタ制御回路４１４、ＣＰＵ側マスタ制御回路４０７に順に処理が発生することになる。
【００７０】
つまり、ＣＰＵ側ターゲット制御回路４０８は、ＣＰＵ３０５からディスク書込指示を受信すると、受信したディスク書込指示をディスクリプタ制御回路４１４に送信する。そして、ディスクリプタ制御回路４１４は、ＣＰＵ側ターゲット制御回路４０８から受信したディスク書込指示をライトＤＭＡ回路４１５に送信する。そして、ライトＤＭＡ回路４１５は、ディスク書込指示をメモリ側マスタ制御回路４０５に送信し、メモリ側マスタ制御回路４０５が、書き込み対象となるデータをメモリ３０１から読み出してライトＤＭＡ回路４１５に送信する。その後、ライトＤＭＡ回路４１５は、受信したデータをＣＭ側マスタ制御回路４１０に送信し、ＣＭ側マスタ制御回路４１０が、受信したデータをコントローラモジュール２２０に送信する。その後、ＣＭ側ターゲット制御回路４１１は、ディスク２１１からの書き込みが終了した旨のディスク書込終了通知を受信し、ディスク書込終了通知をライトＤＭＡ回路４１５に送信する。そして、ライトＤＭＡ回路４１５は、ディスク書込終了通知をディスクリプタ制御回路４１４に送信し、ディスクリプタ制御回路４１４が、ディスク書込終了通知をＣＰＵ側マスタ制御回路４０７に送信する。そして、ＣＰＵ側マスタ制御回路４０７が、ディスク書込終了通知をＣＰＵ３０５に送信する。
【００７１】
上記した処理が発生する流れを踏まえた上で、上流回路について説明する。上流回路とは、自己診断処理を実行する処理回路各々にて実行されるいずれの処理よりも上流の処理を実行し、処理回路各々における処理の開始を制御する処理回路である。
【００７２】
例えば、実施例１では、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６が、自己診断処理を実行する。また、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６は、ディスクリプタ制御回路４１４から送られたディスク書込指示やディスク読出指示を用いて、データ中継処理（ライトＤＭＡ回路４１５によるデータ中継処理をライトＤＭＡ、リードＤＭＡ回路４１６によるデータ中継処理をリードＤＭＡとも称する）を行う。すなわち、ディスクリプタ制御回路４１４がディスク書込指示やディスク読出指示を送信することにより、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６による処理がはじまることになる。つまり、ディスクリプタ制御回路４１４が、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６の上流回路に該当する。
【００７３】
自己診断制御回路４１７は、ディスクリプタ制御回路４１４とライトＤＭＡ回路４１５とリードＤＭＡ回路４１６と接続される。また、自己診断制御回路４１７は、自己診断を実行するタイミングとなると、自己診断処理に関係する各回路に、自己診断処理に関する処理を実行する旨の情報である診断モード開始予告を送信する。つまり、自己診断制御回路４１７は、自己診断処理を開始する旨の開始指示を送信する。なお、診断モード開始予告を受信した各回路の処理については、後述するため説明を省略する。
【００７４】
具体的には、自己診断制御回路４１７は、自己診断処理を実行する回路と、上流回路とに診断モード開始予告を送信する。なお、自己診断を実行するタイミングとは、例えば、アダプタ３００を製造する製造者によって決定された所定のタイミングや、ホストサーバ１００から指示を受け付けるごとなどが該当する。
【００７５】
例えば、自己診断制御回路４１７は、自己診断処理を実行する回路であるライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とに診断モード開始予告を送信し、また、上流回路であるディスクリプタ制御回路４１４に診断モード開始予告を送信する。なお、自己診断処理の流れの詳細については、後述するため、説明を省略する。
【００７６】
また、自己診断制御回路４１７は、自己診断処理を実行する回路すべてから診断終了通知を受信すると、診断モード終了通知を送信し、ディスク読出終了通知やディスク書込終了通知を送信する。なお、診断終了通知とは、診断が終了した旨の情報である診断終了通知であり、診断結果を含むものとして説明する。
【００７７】
診断終了通知を送信する点について説明する。例えば、自己診断制御回路４１７は、自己診断処理を実行する回路すべてから診断終了通知を受信すると、上流回路に対して、診断モード終了通知を送信する。例えば、自己診断制御回路４１７は、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とから、診断終了通知を受信すると、診断モード終了通知をディスクリプタ制御回路４１４に送信する。
【００７８】
なお、例えば、自己診断制御回路４１７は、診断終了通知を受信するごとや、診断終了通知に含まれる診断結果にエラーが含まれていたごとに、診断結果をホストサーバ１００やコントローラモジュール２２０、ＣＰＵ３０５などに送信する。自己診断制御回路４１７は、例えば、専用の割り込み信号またはＭＳＩ（Message  Signaled  Interrupt）を用いて、診断結果を送信する。なお、ＭＳＩとは、各マスタ制御回路を介してメッセージを送信するものである。
【００７９】
また、例えば、自己診断制御回路４１７は、診断結果にエラーが含まれている場合にのみ、診断結果を送信し、その際、エラーの詳細な内容ではなく、エラーが含まれていたとの情報のみを送信してもよい。また、例えば、自己診断制御回路４１７は、レジスタを備え、エラーをレジスタに記憶し、診断結果を受信したＣＰＵ３０５やコントローラモジュール２２０などが、自己診断制御回路４１７のレジスタにアクセスすることで、自己診断制御回路４１７からエラーの内容の詳細を読み出してもよい。
【００８０】
ディスク読出終了通知やディスク書込終了通知を送信する点について説明する。自己診断制御回路４１７は、自己診断処理を実行する回路すべてから診断終了通知を受信すると、ディスクリプタ制御回路４１４に代わって、ＣＰＵ側マスタ制御回路４０７に対してディスク読出終了通知やディスク書込終了通知を送信する。
【００８１】
この結果、図７の（４）´や図８の（５）´に示すように、メモリコントローラ４００では、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６は、ディスク読出終了通知（図７の（７））やディスク書込終了通知（図８の（８））が送信される前に、自己診断を実行する。つまり、自己診断処理を実行する回路は、現在処理中の処理が終了したタイミングにて自己診断を開始し、ディスク読出終了通知（図７の（７））やディスク書込終了通知（図８の（８））が送信される前に、自己診断を実行する。なお、図７は、実施例１における読出処理時に自己診断処理が実行されるタイミングを説明するための図である。また、図８は、実施例１における書込処理時に自己診断処理が実行されるタイミングを説明するための図である。
【００８２】
［診断モード開始予告を受信した各回路の処理］
また、診断モード開始予告を受信した各回路の処理について説明する。以下では、まず、上流回路について説明し、その後、自己診断処理を実行する回路について説明する。
【００８３】
まず、上流回路について説明する。上流回路は、診断モード開始予告を受信すると、自己診断を実行する回路が現在実行中の処理が終了した後に、自己診断処理が終了するまで、新たな処理が開始されないよう処理する。
【００８４】
具体的には、上流回路は、診断モード開始予告を受信すると、つまり、自己診断処理が開始される場合には、自己診断処理を開始する処理回路にて新たな処理が発生しないように処理する。例えば、上流回路は、リトライする旨の情報を指示の送信元に送信するリトライ応答をする。なお、リトライ応答を受信した送信元は、再度、指示を上流回路に送信することになる。
【００８５】
また、上流回路は、診断モードを終了する旨の情報である診断モード終了通知を自己診断制御回路４１７から受信するまで、リトライ応答を継続し、診断モード終了通知を受信すると、リトライ応答を解除する。
【００８６】
また、上流回路は、自己診断を実行する各回路に対して、新たな処理が開始されない旨の情報を送信する。例えば、ディスクリプタ制御回路４１４は、現在実行されている処理に関するディスク書込指示やディスク読出指示をライトＤＭＡ回路４１５やリードＤＭＡ回路４１６に送信した後、新たなディスク書込指示やディスク読出指示を送信しない。また、ディスクリプタ制御回路４１４は、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６に、以降新たな処理が発生しない旨の情報を送信する。
【００８７】
次に、自己診断処理を実行する回路について説明する。自己診断処理を実行する回路は、診断モード開始予告を受信すると、現在処理中処理が終了したタイミングにて、自己診断を開始する。例えば、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６は、以降新たな処理が開始されない旨の情報をディスクリプタ制御回路４１４から受信すると、自己診断を開始し、自己診断が終了すると、診断終了通知を自己診断制御回路４１７に送信する。
【００８８】
［メモリコントローラ４００内の各回路形成処理］
次に、図９を用いて、実施例１におけるメモリコントローラ４００に各回路が形成される処理の流れについて説明する。なお、図９は、実施例１におけるメモリコントローラに各回路が形成される処理の流れを説明するためのフローチャートである。
【００８９】
図９に示すように、アダプタ３００に電源が投入されると（ステップＳ１０１肯定）、ＣＰＵ３０５は、ロードデバイス３０３に起動指示を送信する（ステップＳ１０２）。そして、ロードデバイス３０３は、ＣＰＵ３０５から起動指示を受信すると、フラッシュメモリ３０２から回路情報を読み出し（ステップＳ１０３）、読み出した回路情報をメモリコントローラ４００内に備えられた回路構成用メモリに展開する（ステップＳ１０４）。
【００９０】
［自己診断処理の流れの概略］
次に、図１０を用いて、実施例１におけるメモリコントローラ４００内にて実行される自己診断処理の流れの概略について説明する。図１０は、実施例１におけるメモリコントローラ内にて実行される自己診断処理の流れの概略について説明するためのシーケンス図である。
【００９１】
図１０に示すように、自己診断制御回路４１７は、自己診断を実行するタイミングとなると（ステップＳ２０１肯定）、診断モード開始予告を送信する（ステップＳ２０２）。例えば、自己診断制御回路４１７は、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６、ディスクリプタ制御回路４１４に送信する。
【００９２】
そして、上流回路は、診断モード開始予告を受信すると、リトライ応答を行う（ステップＳ２０３）。つまり、例えば、ディスクリプタ制御回路４１４は、新たな処理を開始する旨の指示を他の回路から受信すると、リトライする旨の情報を指示の送信元に送信する。
【００９３】
また、自己診断を実行する各回路は、診断モード開始予告を受信し、現在処理中処理が終了すると（ステップＳ２０４）、自己診断をそれぞれ開始する（ステップＳ２０５）。例えば、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６が、自己診断処理をそれぞれ開始する。そして、自己診断を実行する各回路は、自己診断が終了すると、診断終了通知を自己診断制御回路４１７にそれぞれ送信する（ステップＳ２０６）。
【００９４】
そして、自己診断制御回路４１７は、自己診断処理を実行する回路すべてから診断終了通知を受信すると（ステップＳ２０７）、つまり、自己診断処理を実行する回路にて自己診断処理が終了すると、上流回路に対して診断モード終了通知を送信する（ステップＳ２０８）。また、自己診断制御回路４１７は、自己診断処理をじっこうする回路にて実行された処理が終了した旨の情報を各回路に代わって送信する（ステップＳ２０９）。例えば、自己診断制御回路４１７は、ディスク書込終了通知や、ディスク読出終了通知を送信する。
【００９５】
また、自己診断制御回路４１７は、ディスク書込終了通知や、ディスク読出終了通知と併せて、診断結果を送信し、その後、アダプタ３００が、診断結果をホストサーバ１００に送信する。なお、本発明はこれに限定されるものではなく、診断結果を併せて送信しなくてもよい。
【００９６】
そして、上流回路は、診断モード終了通知を受信すると、リトライ応答を解除する（ステップＳ２１０）。
【００９７】
［自己診断処理の流れ］
次に、図１１と図１２とを用いて、ディスクリプタ制御回路４１４とライトＤＭＡ回路４１５とリードＤＭＡ回路４１６と自己診断制御回路４１７との処理の流れについてさらに説明する。なお、図１１と図１２とは、実施例１におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。なお、図１２に示す「依存する前処理」とは、対応する処理を実行する前に実行しなければならない処理を示す。
【００９８】
図１１や図１２の「１」に示すように、自己診断制御回路４１７は、診断開始タイミングとなると、図１１や図１２の「２」〜「４」に示すように、ディスクリプタ制御回路４１４とライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とに診断モード開始予告を送信する。
【００９９】
そして、図１１や図１２の「５」に示すように、ディスクリプタ制御回路４１４は、診断モード開始予告を受信すると、ライトＤＭＡ回路４１５に、以降は新たなライトＤＭＡが発生しない旨の情報を送信する。また、ディスクリプタ制御回路４１４は、以後、新たなライトＤＭＡを開始させない。
【０１００】
つまり、ディスクリプタ制御回路４１４は、新たなディスク書込指示をライトＤＭＡ回路４１５に送信せず、また、図１１に示すように、リトライ応答を行う。なお、ライトＤＭＡとは、ライトＤＭＡ回路４１５にて行われる処理であり、リードＤＭＡとは、リードＤＭＡ回路４１６にて行われる処理を示す。
【０１０１】
そして、図１１や図１２の「６」に示すように、ライトＤＭＡ回路４１５は、ライトＤＭＡ終了を待って、ディスクリプタ制御回路４１４に、以降はライトＤＭＡによるＣＰＵ３０５へのデータ中継が発生しない旨の情報を送信する。すなわち、ライトＤＭＡ回路４１５は、ライトＤＭＡを行わないので、なんらデータをディスクリプタ制御回路４１４に送信することはない旨の情報を送信する。そして、ライトＤＭＡ回路４１５は、自己診断を開始する。
【０１０２】
また、図１１や図１２の「７」に示すように、ディスクリプタ制御回路４１４は、リードＤＭＡ回路４１６に対しても、ライトＤＭＡ回路４１５と同様に、以降は新たなリードＤＭＡが発生しない旨の情報を送信し、以後、新たなリードＤＭＡを開始させない。つまり、ディスクリプタ制御回路４１４は、新たなディスク読出指示をリードＤＭＡ回路４１６に送信しない。
【０１０３】
そして、図１１や図１２の「８」に示すように、リードＤＭＡ回路４１６は、リードＤＭＡ終了を待って、ディスクリプタ制御回路４１４に、以降はリードＤＭＡによるＣＰＵ３０５へのデータ中継が発生しない旨の情報を送信する。すなわち、リードＤＭＡ回路４１６は、リードＤＭＡを行わないので、なんらデータをディスクリプタ制御回路４１４に送信することはない旨の情報を送信する。そして、リードＤＭＡ回路４１６は、自己診断を開始する。
【０１０４】
そして、図１１や図１２の「９」に示すように、ライトＤＭＡ回路４１５は、自己診断開始後、自己診断を終了すると、自己診断制御回路４１７に診断終了通知を送信する。
【０１０５】
また、図１１や図１２の「１０」に示すように、リードＤＭＡ回路４１６は、自己診断開始後、自己診断を終了すると、自己診断制御回路４１７に診断終了通知を送信する。
【０１０６】
そして、図１１や図１２の「１１」に示すように、自己診断制御回路４１７は、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６との自己診断が終了すると、診断モード終了通知をディスクリプタ制御回路４１４に送信する。以後、ディスクリプタ制御回路４１４は、リトライ応答を終了し、通常の処理を行う。
【０１０７】
そして、図１１や図１２の「１２」に示すように、自己診断を終了する。
【０１０８】
［実施例１の効果］
上記したように、実施例１によれば、アダプタ３００は、複数の処理回路を備え、処理回路各々は、自処理回路にて実行する処理が終了すると自処理回路に対する自己診断処理を開始する。この結果、実施例１によれば、短時間にて診断可能である。具体的には、個々の回路が自処理回路にて実行する処理が終了すると自回路を診断するので、短時間で診断可能である。
【０１０９】
例えば、従来の手法とは異なり、実施例１では、Ｂ回路にて処理が行われているのと並行して、Ａ回路が自己診断処理を実行することが可能である。また、アダプタ３００内にある処理回路すべての処理を停止させることなく、処理回路各々が適宜開始することが可能である。
【０１１０】
また、実施例１によれば、上流回路をさらに備え、上流回路が、自己診断処理が開始される場合には、自己診断処理を開始する処理回路にて新たな処理が発生しないように処理する。この結果、実施例１によれば、自己診断を実行する回路では、新たな処理が発生せず、自己診断を実行することが可能である。例えば、上流回路は、リトライ応答を実行し、または、新たな処理の開始を凍結する。
【０１１１】
例えば、自己診断処理を実行中の回路に対して、新たな処理を開始する指示が送信されてしまい、自己診断処理が失敗する事態を防止することが可能である。また、自己診断処理の実行中に新たな指示を受信することで、自己診断中の回路が受信した指示に対応できないような事態を防止することが可能である。例えば、自己診断中の回路は、受信した指示を適切に記憶もできずに失ってしまい、かつ、指示の送信元が、指示を送信済みとの認識のまま時間が経過するような事態を防止することが可能である。
【０１１２】
また、実施例１によれば、ディスク書込終了通知や、ディスク読出終了通知と併せて、診断結果を送信するので、データ中継処理の信頼性を向上することが可能である。つまり、ホストサーバ１００では、診断結果にエラーが含まれている場合には、アダプタ３００に指示したデータの読み出しや書き出し結果にエラーが含まれていたり、今後エラーが発生する可能性がると把握できる。
【実施例２】
【０１１３】
さて、これまで、実施例１として、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とが自己診断を実行する場合について説明したが、本発明はこれに限定されるものではない。そこで、実施例２では、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６に加えて、ディスクリプタ制御回路４１４も自己診断を実行する場合について説明する。
【０１１４】
つまり、例えば、実施例２では、メモリコントローラ４００内の各回路の内、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とディスクリプタ制御回路４１４とがプログラマブルデバイス上にて実現され、自己診断を実行するものとして説明する。なお、以下では、実施例１と同様の点については、簡単に説明し、または、説明を省略する。
【０１１５】
なお、実施例２では、ＣＰＵ側ターゲット制御回路４０８が、以下に説明するように、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とディスクリプタ制御回路４１４との上流回路に該当する。
【０１１６】
実施例２では、図１３に示すように、自己診断制御回路４１７は、ディスクリプタ制御回路４１４とライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とに加えて、ＣＰＵ側ターゲット制御回路４０８にも接続される。なお、図１３は、実施例２におけるメモリコントローラ内にある回路について説明するためのブロック図である。
【０１１７】
ここで、実施例２における上流回路について説明する。実施例２では、ＣＰＵ側ターゲット制御回路４０８が上流回路に該当する。ディスクリプタ制御回路４１４は、ＣＰＵ側ターゲット制御回路４０８からディスク書込指示やディスク読出指示を受信して処理を行うからである。
【０１１８】
そして、図１４や図１５の「２」に示すように、実施例２では、自己診断制御回路４１７は、ディスクリプタ制御回路４１４とライトＤＭＡ回路４１５とリードＤＭＡ回路４１６だけではなく、ＣＰＵ側ターゲット制御回路４０８に診断モード開始予告を送信する。なお、図１４と図１５とは、実施例２におけるメモリコントローラ４００内にて実行される自己診断処理の流れについて説明するための図である。
【０１１９】
なお、図１４や図１５の「３」〜「５」は、図１１や図１２の「２」〜「４」に対応する。また、図１４や図１５の「７」〜「１０」は、図１１や図１２の「５」〜「８」に対応する。また、図１４や図１５の「１１」〜「１２」は、図１１や図１２の「９」〜「１０」に対応する。
【０１２０】
そして、図１４や図１５の「６」に示すように、ＣＰＵ側ターゲット制御回路４０８は、ＣＰＵ３０５からのターゲットＩＯが途切れるのを待って、ディスクリプタ制御回路４１４に、以降はターゲットＩＯが発生しない旨の情報を送信する。なお、ここで、ＣＰＵ３０５からのターゲットＩＯとは、例えば、ディスク書込指示やディスク読出指示が該当する。そして、ＣＰＵ側ターゲット制御回路４０８は、リトライ応答を行う。つまり、ＣＰＵ側ターゲット制御回路４０８は、ディスク書込指示やディスク読出指示を新たに受信したとしても、受信したディスク書込指示やディスク読出指示を下流にあるディスクリプタ制御回路４１４に送らない。この結果、ディスクリプタ制御回路４１４やライトＤＭＡ回路４１５、リードＤＭＡ回路４１６では、新たな処理が発生しない。
【０１２１】
ここで、ＣＰＵ側ターゲット制御回路４０８のみがリトライ応答を行えばよい点について説明する。ディスクリプタ制御回路４１４は、ＣＰＵ側ターゲット制御回路４０８からディスク書込指示やディスク読出指示を受信して処理を行う。この結果、ディスク書込指示やディスク読出指示をＣＰＵ側ターゲット制御回路４０８が新たに送信しなければ、ディスクリプタ制御回路４１４にて新たな処理が発生しない。そして、ディスクリプタ制御回路４１４が新たなディスク書込指示やディスク読出指示を受信しなければ、新たなディスク書込指示やディスク読出指示をライトＤＭＡ回路４１５やリードＤＭＡ回路４１６に送信できず、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６でも新たな処理が開始されない。つまり、ＣＰＵ側ターゲット制御回路４０８がリトライ応答を実行すれば、ライトＤＭＡ回路４１５やリードＤＭＡ回路４１６の最上流回路がリトライ応答を実行することになり、下流に位置する各回路では新たな処理が開始されないからである。
【０１２２】
また、その後、図１４や図１５の「１０」に示すように、ディスクリプタ制御回路４１４は、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とからＣＰＵ３０５へのデータ中継が発生しない旨の情報を送信されると、自己診断を開始する。
【０１２３】
そして、図１４や図１５の「１３」に示すように、ディスクリプタ制御回路４１４は、自己診断が終了すると自己診断制御回路４１７に診断終了通知を送信する。
【０１２４】
そして、図１４や図１５の「１４」に示すように、自己診断制御回路４１７は、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６とだけではなく、ディスクリプタ制御回路４１４の自己診断が終了すると、診断モード終了通知をＣＰＵ側ターゲット制御回路４０８に送信する。以後、ＣＰＵ側ターゲット制御回路４０８は、リトライ応答を終了し、通常の処理を行う。
【０１２５】
そして、図１４や図１５の「１５」に示すように、診断を終了する。
【０１２６】
［実施例２の効果］
上記したように、実施例２によれば、ディスクリプタ制御回路４１４も自己診断を実行する対象になるので、実施例１と比較して自己診断を実行する回路を多くすることが可能である。
【実施例３】
【０１２７】
さて、実施例２では、ライトＤＭＡ回路４１５とリードＤＭＡ回路４１６に加えて、ディスクリプタ制御回路４１４が自己診断を実行する場合について説明したが、本発明はこれに限定されるものではない。例えば、メモリコントローラ４００の各回路の内、自己診断を実行させることができる全回路にて、自己診断を実行しても良い。
【０１２８】
つまり、例えば、実施例３では、メモリコントローラ４００内の回路すべてがプログラマブルデバイス上にて実現される場合について説明する。このため、実施例３では、メモリコントローラ４００の各回路の内、上流回路を除いた回路すべてが自己診断を実行する場合について説明する。
【０１２９】
ここで、実施例３では、メモリコントローラ４００内の各部の内、他の回路にて実行される処理のトリガーとなる処理回路を除き、残った全処理回路が自己診断処理を実行する。つまり、他の回路にて実行される処理のトリガーとなる処理回路に、上流回路としての役割を担わせることによって、他の全回路にて自己診断処理を実行させることが可能である。
【０１３０】
具体的には、実施例３では、メモリコントローラ４００の外部にある処理部から指示を受け付ける各回路が上流回路になる。ここで、図１６に示すように、メモリコントローラ４００の外部にある処理部には、チャネルコントローラ３０４とＣＰＵ３０５とコントローラモジュール２２０とがある。このため、実施例３における上流回路には、チャネルコントローラ３０４から送信された指示やデータを受信するＣＣ側ターゲット制御回路４０３が該当する。また、実施例３における上流回路には、ＣＰＵ３０５から送信された指示やデータを受信するＣＰＵ側ターゲット制御回路４０８が該当する。また、実施例３における上流回路には、コントローラモジュール２２０から送信されたデータを受信するＣＭ側ターゲット制御回路４１１が該当する。
【０１３１】
実施例３では、図１６に示すように、自己診断制御回路４１７は、メモリコントローラ４００内のすべての回路と接続される。なお、図１６は、実施例３におけるメモリコントローラ４００内にある回路について説明するためのブロック図である。
【０１３２】
実施例３では、図１７や図１８−１の「１」に示すように、自己診断制御回路４１７は、診断開始タイミングとなると、図１７や図１８−１の「２」〜「１３」に示すように、メモリコントローラ４００の全ての回路に対して診断モード開始予告を送信する。なお、図１７は、実施例３におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。図１８−１と図１８−２とは、実施例３におけるメモリコントローラ内にて実行される自己診断処理の流れについて説明するための図である。なお、説明の便宜上、以下では、図１８−１と図１８−２とを、単に図１８と記載する。
【０１３３】
そして、図１７や図１８の「１４」や「１５」に示すように、ＣＣ側ターゲット制御回路４０３は、診断モード開始予告を受信すると、チャネルコントローラ３０４からのターゲットＩＯが途切れるのを待つ。そして、ＣＣ側ターゲット制御回路４０３は、ターゲットＩＯが途切れると、ライトＢｒｉｄｇｅ回路４１２やリードＢｒｉｄｇｅ回路４１３に、以降はターゲットＩＯが発生しない旨の情報を送信する。なお、ここで、チャネルコントローラ３０４からのターゲットＩＯとは、例えば、メモリ書込指示やメモリ読出指示が該当する。
【０１３４】
また、ここで、ＣＣ側ターゲット制御回路４０３は、リトライ応答を実行する。つまり、ＣＣ側ターゲット制御回路４０３は、メモリ書込指示やメモリ読出指示を新たに受信したとしても、下流にあるライトＢｒｉｄｇｅ回路４１２やリードＢｒｉｄｇｅ回路４１３に送らず、新たな処理を発生させない。
【０１３５】
また、図１７や図１８の「１６」に示すように、ライトＢｒｉｄｇｅ回路４１２は、診断モード開始予告を受信すると、現在処理中の中継処理の終了を待って、メモリ側マスタ制御回路４０５に、以降はデータ中継が発生しない旨の情報を送信する。そして、以後、ライトＢｒｉｄｇｅ回路４１２では新たな処理は発生しないことから、自己診断を実行する。
【０１３６】
また、図１７や図１８の「１７」に示すように、リードＢｒｉｄｇｅ回路４１３は、診断モード開始予告を受信すると、現在処理中の中継処理の終了を待って、メモリ側マスタ制御回路４０５に、以降はデータ中継が発生しない旨の情報を送信する。
【０１３７】
そして、図１７や図１８の「１８」に示すように、リードＢｒｉｄｇｅ回路４１３は、中継処理終了を待って、ＣＣ側マスタ制御回路４０２に、以降はリードＢｒｉｄｇｅ回路４１３からデータが送信されない旨の情報を送信する。そして、以後、リードＢｒｉｄｇｅ回路４１３は、自己診断を実行する。また、同様に、ＣＣ側マスタ制御回路４０２では新たな処理は発生しないことから、ＣＣ側マスタ制御回路４０２は、自己診断を実行する。
【０１３８】
そして、図１７や図１８の「１９」に示すように、ＣＰＵ側ターゲット制御回路４０８は、ＣＰＵ３０５からのターゲットＩＯが途切れるのを待って、ディスクリプタ制御回路４１４に、以降はターゲットＩＯが発生しない旨の情報を送信する。そして、ＣＰＵ側ターゲット制御回路４０８は、以後、リトライ応答を実行する。つまり、ＣＰＵ側ターゲット制御回路４０８は、ディスク書込指示やディスク読出指示を新たに受信したとしても、下流にあるディスクリプタ制御回路４１４に送らず、新たな処理を発生させない。
【０１３９】
そして、図１７や図１８の「２０」に示すように、ディスクリプタ制御回路４１４は、ライトＤＭＡ回路４１５に、以降は新たなライトＤＭＡが発生しない旨の情報を送信する。
【０１４０】
そして、図１７や図１８の「２１」や「２２」に示すように、ライトＤＭＡ回路４１５は、ライトＤＭＡ終了を待って、メモリ側マスタ制御回路４０５やＣＭ側マスタ制御回路４１０に、以降はライトＤＭＡによるデータ中継が発生しない旨の情報を送信する。
【０１４１】
そして、図１７や図１８の「２３」に示すように、ライトＤＭＡ回路４１５は、現在実行中のライトＤＭＡ終了を待って、ディスクリプタ制御回路４１４に、以降はライトＤＭＡによるＣＰＵ３０５へのデータ中継が発生しない旨の情報を送信する。そして、ライトＤＭＡ回路４１５では新たな処理は発生しないことから、自己診断を開始する。
【０１４２】
また、図１７や図１８の「２４」に示すように、ディスクリプタ制御回路４１４は、リードＤＭＡ回路４１６に、以降はリードＤＭＡが発生しない旨の情報を送信する。
【０１４３】
そして、図１７や図１８の「２５」に示すように、リードＤＭＡ回路４１６は、リードＤＭＡ終了を待って、メモリ側マスタ制御回路４０５に、以降はリードＤＭＡ回路４１６によるデータ中継が発生しない旨の情報を送信する。そして、メモリ側マスタ制御回路４０５では新たな処理は発生しないことから、自己診断を開始する。
【０１４４】
また、図１７や図１８の「２６」に示すように、リードＤＭＡ回路４１６は、リードＤＭＡ終了を待って、ＣＭ側マスタ制御回路４１０に、以降はリードＤＭＡによるデータ中継が発生しない旨の情報を送信する。そして、ＣＭ側マスタ制御回路４１０では新たな処理は発生しないことから、自己診断を開始する。
【０１４５】
また、図１７や図１８の「２７」に示すように、リードＤＭＡ回路４１６は、リードＤＭＡ終了を待って、ＣＭ側ターゲット制御回路４１１に、以降はリードＤＭＡによるデータ中継が発生しない旨の情報を送信する。そして、以後、ＣＭ側ターゲット制御回路４１１は、リトライ応答を行う。
【０１４６】
また、図１７や図１８の「２８」に示すように、リードＤＭＡ終了を待って、ディスクリプタ制御回路４１４に、以降はリードＤＭＡによるＣＰＵ３０５へのデータ中継が発生しない旨の情報を送信する。そして、以後、リードＤＭＡ回路４１６では新たな処理は発生しないことから、自己診断を開始する。
【０１４７】
また、図１７や図１８の「２９」に示すように、ディスクリプタ制御回路４１４は、リードＤＭＡ回路４１６やライトＤＭＡ回路４１５によるデータ中継が以後ないことから、ＣＰＵ側マスタ制御回路４０７に、ＣＰＵ３０５へのデータ中継が発生しない旨の情報を送信する。そして、ディスクリプタ制御回路４１４やＣＰＵ側マスタ制御回路４０７では新たな処理は発生しないことから、自己診断を開始する。
【０１４８】
そして、図１７や図１８の「３０」〜「３３」に示すように、リードＢｒｉｄｇｅ回路４１３やライトＢｒｉｄｇｅ回路４１２、ＣＣ側マスタ制御回路４０２は、自己診断が終了すると、それぞれ診断終了通知を送信する。
【０１４９】
そして、図１７や図１８の「３４」に示すように、自己診断制御回路４１７は、ＣＣ側ターゲット制御回路４０３に、診断モード終了通知を送信する。つまり、ＣＣ側ターゲット制御回路４０３の下流にある各回路にて、自己診断が終了しており、新たな処理を発生させても問題ないことから、リトライ応答を解除させる。そして、ＣＣ側ターゲット制御回路４０３は以後、リトライ応答を終了し、通常の処理を行う。
【０１５０】
そして、図１７や図１８の「３５」〜「３９」に示すように、ＣＰＵ側マスタ制御回路４０７やライトＤＭＡ回路４１５、リードＤＭＡ回路４１６、ディスクリプタ制御回路４１４、ＣＭ側マスタ制御回路４１０は、自己診断が終了すると、それぞれ診断終了通知を送信する。
【０１５１】
そして、図１７や図１８の「４０」に示すように、自己診断制御回路４１７は、ＣＭ側ターゲット制御回路４１１に診断モード終了通知を送信する。つまり、ＣＭ側ターゲット制御回路４１１の下流にある各回路にて、自己診断が終了しており、新たな処理を発生させても問題ないことから、リトライ応答を解除させる。そして、ＣＭ側ターゲット制御回路４１１は、以後、リトライ応答を終了し、通常の処理を行う。
【０１５２】
また、図１７や図１８の「４１」に示すように、自己診断制御回路４１７は、ＣＰＵ側ターゲット制御回路４０８に診断モード終了通知を送信する。そして、ＣＰＵ側ターゲット制御回路４０８は以後、リトライ応答を終了し、通常の処理を行う。
【０１５３】
そして、図１７や図１８の「４２」に示すように、診断を終了する。
【０１５４】
［実施例３の効果］
上記したように、実施例３によれば、メモリコントローラ４００内の各回路の内、ＣＣ側ターゲット制御回路４０３とＣＰＵ側ターゲット制御回路４０８とＣＭ側ターゲット制御回路４１１以外の全ての回路が、自己診断を実行する。このため、実施例１や２と比較して自己診断を実行する回路を多くすることが可能である。
【実施例４】
【０１５５】
さて、実施例３では、診断モード開始予告が送信された後に、一切新たな処理を発生させない場合について説明したが、本発明はこれに限定されるものではなく、新たな処理を発生させてもよい。
【０１５６】
具体的には、新たな処理を発生させる回路について、自己診断を一時的に中断させて新たに発生した処理を実行させ、その後、自己診断処理を再開させてもよい。このため、実施例４では、自己診断を一時的に中断させて新たに発生した処理を実行させ、その後、自己診断処理を再開させる場合について説明する。具体的には、以下では、メモリ書込処理あるいは、メモリ読出指示を新たに発生させる場合を例に説明する。つまり、メモリ書込処理を新たに受信し、または、メモリ読出指示を新たに受け付ける場合について説明する。
【０１５７】
まず、図１９と図２０−１と図２０−２とを用いて、メモリ書込指示を新たに発生させる場合を例に説明する。なお、図１９と図２０−１と図２０−２とは、実施例３における新たなメモリ書込指示の発生を許可する場合における自己診断処理の流れについて説明するための図である。また、図１９や図２０における「１」〜「２９」は、図１７や図１８における「１」〜「２９」に対応する。なお、説明の便宜上、以下では、図２０−１と図２０−２とを、単に図２０と記載する。
【０１５８】
図１９や図２０の「３０」に示すように、メモリコントローラ４００に新たなメモリ書込指示が発生すると、図１９や図２０の「３１」に示すように、ＣＣ側ターゲット制御回路４０３は、自己診断制御回路４１７にメモリ書込指示が発生した旨の情報を送信する。
【０１５９】
そして、図１９や図２０の「３２」に示すように、自己診断制御回路４１７は、ライトＢｒｉｄｇｅ回路４１２に診断の中止を指示する。そして、図１９や図２０の「３３」に示すように、ライトＢｒｉｄｇｅ回路４１２は、自己診断制御回路４１７に自己診断を中止した旨の情報を送信する。
【０１６０】
また、図１９や図２０の「３４」に示すように、自己診断制御回路４１７は、メモリ側マスタ制御回路４０５に診断の中止を指示する。そして、図１９や図２０の「３５」に示すように、自己診断制御回路４１７に自己診断を中止した旨の情報を送信する。
【０１６１】
つまり、自己診断制御回路４１７は、メモリ書込指示を実行する上で処理を行う各回路に対して、診断の中止を指示する。言い換えると、自己診断制御回路４１７は、処理回路に自己診断処理を中断させて新たな処理を実行させる場合に、処理回路に対して、自己診断処理を中断する旨の中断指示を送信する。また、処理回路は、開始指示を受信した後に自己診断制御回路４１７から中断指示を受信すると、自己診断処理を中断し、自処理回路にて新たに発生した処理を実行する。
【０１６２】
そして、図１９や図２０の「３６」に示すように、自己診断制御回路４１７は、ＣＣ側ターゲット制御回路４０３に、メモリ書込指示に対するリトライ応答の解除を指示する旨の情報を送信する。つまり、自己診断制御回路４１７は、処理回路に自己診断処理を中断させて新たな処理を実行させる場合に、上流回路に対して、自己診断処理を中断する旨の中断指示を送信する。その後、ＣＣ側ターゲット制御回路４０３は、メモリ書込指示を受信する。つまり、ＣＣ側ターゲット制御回路４０３は、開始指示を受信した後に自己診断制御回路から中断指示を受信すると、処理回路にて新たな処理が発生しないように処理することを中断し、処理回路にて新たな処理が発生するように処理する。なお、ＣＣ側ターゲット制御回路４０３は、メモリ読出指示に対してはリトライ応答のままである。
【０１６３】
そして、図１９や図２０の「３７」に示すように、メモリ書込指示を受け付けるようになってから一定時間が経過すると、自己診断制御回路４１７は、図１９や図２０の「３７」〜「３９」に示すように、診断モード再開予告を送信する。つまり、自己診断制御回路４１７は、自己診断処理の中断後に自己診断処理を再開させる場合に、上流回路および処理回路に対して、自己診断処理を再開する旨の再開指示を送信する。具体的には、自己診断制御回路４１７は、ライトＢｒｉｄｇｅ回路４１２とメモリ側マスタ制御回路４０５とＣＣ側ターゲット制御回路４０３とに、診断モード再開予告を送信する。なお、診断モード再開予告とは、診断モードを再開する旨の指示である。
【０１６４】
そして、図１９や図２０の「４０」に示すように、ＣＣ側ターゲット制御回路４０３は、チャネル・ターゲットＩＯが途切れるのを待って、ライトＢｒｉｄｇｅ回路４１２に、以降はターゲットＩＯが発生しない旨の情報を送信する。そして、以後、ＣＣ側ターゲット制御回路４０３は、リトライ応答をする。つまり、上流回路は、中断指示を受信した後に自己診断制御回路４１７から再開指示を受信すると、処理回路にて新たな処理が発生しないように処理することを再開する。
【０１６５】
そして、図１９や図２０の「４１」に示すように、ライトＢｒｉｄｇｅ回路４１２は、中継処理終了を待って、メモリ側マスタ制御回路４０５に、以降はデータ中継が発生しない旨の情報を送信する。そして、以後、ライトＢｒｉｄｇｅ回路４１２やメモリ側マスタ制御回路４０５では新たな処理は発生しないことから、自己診断を開始する。つまり、処理回路は、中断指示を受信した後に自己診断制御回路４１７から再開指示を受信すると、自処理回路にて新たに発生した処理の実行が終了すると自己診断処理を再開する。
【０１６６】
次に、図２１や図２２−１と図２２−２とを用いて、メモリ読出指示を新たに発生させる場合を例に説明する。なお、図２１と図２２−１と図２２−２とは、実施例３における新たなメモリ読出指示の発生を許可する場合における自己診断処理の流れについて説明するための図である。また、図２１や図２２における「１」〜「２９」は、図１７や図１８における「１」〜「２９」に対応する。なお、説明の便宜上、以下では、図２２−１と図２２−２とを、単に図２２と記載する。
【０１６７】
図２１や図２２の「３０」に示すように、メモリコントローラ４００に新たなメモリ読出指示が発生すると、図２１や図２２の「３１」に示すように、ＣＣ側ターゲット制御回路４０３は、自己診断制御回路４１７に、メモリ読出指示が発生した旨の情報を送信する。
【０１６８】
そして、図２１や図２２の「３２」に示すように、自己診断制御回路４１７は、リードＢｒｉｄｇｅ回路４１３に診断の中止を指示し、図２１や図２２の「３３」に示すように、リードＢｒｉｄｇｅ回路４１３が、自己診断制御回路４１７に自己診断を中止した旨の情報を送信する。
【０１６９】
また、図２１や図２２の「３４」に示すように、自己診断制御回路４１７は、メモリ側マスタ制御回路４０５に診断の中止を指示し、図２１や図２２の「３５」に示すように、メモリ側マスタ制御回路４０５が、自己診断制御回路４１７に自己診断を中止した旨の情報を送信する。
【０１７０】
つまり、自己診断制御回路４１７は、メモリ読出指示を実行する上で処理を行う各回路に対して、診断の中止を指示する。
【０１７１】
また、図２１や図２２の「３６」に示すように、自己診断制御回路４１７は、ＣＣ側マスタ制御回路４０２に診断の中止を指示し、図２１や図２２の「３７」に示すように、ＣＣ側マスタ制御回路４０２が、自己診断制御回路４１７に自己診断を中止した旨の情報を送信する。
【０１７２】
また、図２１や図２２の「３８」に示すように、自己診断制御回路４１７は、ＣＣ側ターゲット制御回路４０３にメモリ読出指示に対するリトライ応答解除を指示し、その後、ＣＣ側ターゲット制御回路４０３は、外部からメモリ読出指示を受信する。なお、ＣＣ側ターゲット制御回路４０３は、メモリ書込指示に対してはリトライ応答のままである。
【０１７３】
そして、図２１や図２２の「３９」に示すように、メモリ読出指示を受け付けるようになってから一定時間が経過すると、自己診断制御回路４１７は、図２１や図２２の「３９」〜「４２」に示すように、診断モード再開予告を送信する。具体的には、自己診断制御回路４１７は、リードＢｒｉｄｇｅ回路４１３とメモリ側マスタ制御回路４０５とＣＣ側マスタ制御回路４０２とＣＣ側ターゲット制御回路４０３とに、診断モード再開予告を送信する。
【０１７４】
そして、図２１や図２２の「４３」に示すように、ＣＣ側ターゲット制御回路４０３は、チャネル・ターゲットＩＯが途切れるのを待って、リードＢｒｉｄｇｅ回路４１３に、以降はターゲットＩＯが発生しない旨の情報を送信する。そして、以後、ＣＣ側ターゲット制御回路４０３は、リトライ応答をする。
【０１７５】
また、図２１や図２２の「４４」に示すように、リードＢｒｉｄｇｅ回路４１３は、中継処理終了を待って、メモリ側マスタ制御回路４０５に、以降はデータ中継が発生しない旨の情報を送信する。そして、メモリ側マスタ制御回路４０５では、新たな処理は発生しないことから、自己診断を開始する。
【０１７６】
また、図２１や図２２の「４４」に示すように、リードＢｒｉｄｇｅ回路４１３は、中継処理終了を待って、ＣＣ側マスタ制御回路４０２に、以降はデータ中継が発生しない旨の情報を送信する。そして、図２１や図２２の「４５」に示すように、ＣＣ側マスタ制御回路４０２では、新たな処理は発生しないことから、自己診断を開始する。また、リードＢｒｉｄｇｅ回路４１３に新たな処理は発生しないことから、自己診断を開始する。
【０１７７】
［実施例４の効果］
上記したように、実施例４によれば、自己診断を一時的に中断させて新たに発生した処理を実行させることが可能である。
【実施例５】
【０１７８】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、その他の実施例にて実施されてもよい。そこで、以下では、その他の実施例について説明する。
【０１７９】
［リトライ応答］
例えば、実施例１〜４では、上流回路は、リトライ応答をする場合について説明したが、本発明はこれに限定されるものではなく、例えば、新たな指示そのものを受信した上で、新たな処理の開始を凍結してもよい。
【０１８０】
具体的には、上流回路は、診断モード予告を受信した後に新たな指示を受信すると、所定の記憶部に記憶した上で、受信した指示に対応する処理を開始しない。その後、上流回路は、診断モード終了通知を受信すると、所定の記憶部に記憶した新たな指示に対応する処理を開始する。
【０１８１】
［新たな処理の発生］
また、例えば、実施例４では、新たな処理を発生させる場合について説明したが、所定の条件を満たした場合にのみ、新たな処理の発生を許可しても良い。例えば、自己診断制御回路４１７は、タイマを備え、自己診断を開始するタイミングとなった時点から経過した時間を測定する。そして、自己診断制御回路４１７は、任意の処理タイミングにて、例えば、図２０の「３０」などにて、経過時間が一定時間を超えていたかを判定し、越えていなかった場合にのみ、新たな処理の発生を許可するなどしてもよい。また、自己診断制御回路４１７は、自己診断を開始するタイミングとなった時点から経過したい時間を測定することで、ホストサーバ１００への終了通知が長時間なされないのを防止することが可能である。
【０１８２】
［診断結果にエラーが含まれている場合］
また、診断結果にエラーが含まれている場合には、ＣＰＵ３０５は、ロードデバイス３０３に起動指示を再度送り、メモリコントローラ４００が備える回路構成用メモリに再度回路情報を展開する。これにより、回路に含まれるエラーを解消することが可能である。
【０１８３】
また、メモリコントローラ４００内の各回路は、過去のエラー内容を用いて、自己診断処理により実行する診断内容を変化させてもよい。例えば、ビット固着によりエラーが発生していた場合には、ビット固着によりエラーが発生しやすい箇所に対する診断を重点的に行っても良い。
【０１８４】
［自己診断制御回路に対する診断処理］
また、例えば、自己診断制御回路４１７に対する診断処理をさらに実行しても良い。例えば、自己診断制御回路４１７は、自己診断を実行する以外のタイミングでは処理を実行しないことから、自己診断を実行しないタイミングにて、自己診断を実行しても良い。これにより、自己診断制御回路４１７の回路情報にエラーが発生し、メモリコントローラ４００内の各回路における自己診断処理が正常に開始されない事態や、診断結果が正しく処理されない事態を防止することが可能である。
【０１８５】
また、例えば、自己診断制御回路４１７については、プログラマブルデバイス上に回路情報を展開することで実現するのではなく、ＡＳＩＣ（Application  Specific  Integrated  Circuit）などを用いて実現してもよい。なお、ここで、プログラマブルデバイスを用いた場合には、回路情報の作成が終了すると製品を出荷できる。また、ＡＳＩＣなどでは、回路情報を作成後に実際に回路を作成しなければならない一方、中性子線などの影響によりエラーが発生する確率がプログラマブルデバイス上に実現された回路と比較して低い。
【０１８６】
このため、例えば、エラーが発生すると自己診断処理が正常に機能しなくなる自己診断制御回路４１７については、ＡＳＩＣなどを用いて実現することで、回路の信頼性と、製品を出荷できるまでの時間（タイムツゥマーケット）の短縮とを両立することが可能である。
【０１８７】
［実施例の組み合わせについて］
また、上記した実施例では、処理回路が、自処理回路にて実行する処理が終了すると自処理回路に対する自己診断処理を開始する手法と、上流回路が新たな処理が発生しないように処理する手法とを併せて実施する場合について説明した。しかし、本発明はこれに限定されるものではなく、例えば、自処理回路にて実行する処理が終了すると自処理回路に対する自己診断処理を開始する手法のみを実施しもよい。
【０１８８】
［システム構成］
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。例えば、自己診断を開始するタイミングを手動にて指定しても良い。
【０１８９】
この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる（図１〜図２２）。
【０１９０】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【符号の説明】
【０１９１】
１００  ホストサーバ
２００  ストレージ装置
２１０  ディスクエンクロージャ
２１１  ディスク
２２０  コントローラモジュール
３００  アダプタ
３０１  メモリ
３０２  フラッシュメモリ
３０３  ロードデバイス
３０４  チャネルコントローラ
３０５  ＣＰＵ
４００  メモリコントローラ
４０１  ＣＣ側ＰＣＩ−ＩＯ制御回路
４０２  ＣＣ側マスタ制御回路
４０３  ＣＣ側ターゲット制御回路
４０４  Ｍｅｍｏｒｙ−ＩＯ制御回路
４０５  メモリ側マスタ制御回路
４０６  ＣＰＵ側ＰＣＩ−ＩＯ制御回路
４０７  ＣＰＵ側マスタ制御回路
４０８  ＣＰＵ側ターゲット制御回路
４０９  ＣＭ側ＰＣＩ−ＩＯ制御回路
４１０  ＣＭ側マスタ制御回路
４１１  ＣＭ側ターゲット制御回路
４１２  ライトＢｒｉｄｇｅ回路
４１３  リードＢｒｉｄｇｅ回路
４１４  ディスクリプタ制御回路
４１５  ライトＤＭＡ回路
４１６  リードＤＭＡ回路
４１７  自己診断制御回路
【図１】
2010211529.tif 000003
【図２】
2010211529.tif 000004
【図３】
2010211529.tif 000005
【図４】
2010211529.tif 000006
【図５】
2010211529.tif 000007
【図６】
2010211529.tif 000008
【図７】
2010211529.tif 000009
【図８】
2010211529.tif 000010
【図９】
2010211529.tif 000011
【図１０】
2010211529.tif 000012
【図１１】
2010211529.tif 000013
【図１２】
2010211529.tif 000014
【図１３】
2010211529.tif 000015
【図１４】
2010211529.tif 000016
【図１５】
2010211529.tif 000017
【図１６】
2010211529.tif 000018
【図１７】
2010211529.tif 000019
【図１８−１】
2010211529.tif 000020
【図１８−２】
2010211529.tif 000021
【図１９】
2010211529.tif 000022
【図２０−１】
2010211529.tif 000023
【図２０−２】
2010211529.tif 000024
【図２１】
2010211529.tif 000025
【図２２−１】
2010211529.tif 000026
【図２２−２】
2010211529.tif 000027