(57)【要約】  ストレージシステム内の共有メモリの容量が変化しても、ストレージシステム内の制御装置は共有メモリ内の特定の記憶領域に対し固定の仮想アドレスを指定してアクセスする。二つの制御サブシステムの中の自制御サブシステム内の複数のメモリ内の記憶領域を示す物理アドレスの空間と、他制御サブシステム内の複数のメモリ内の記憶領域を示す物理アドレスの空間とが、自制御サブシステム内のプロセッサ及び入出力デバイスの夫々により用いられる仮想アドレスの空間に関連付けられる。中継デバイスは、他制御サブシステムから自制御サブシステムへ転送されるデータを受信した場合、他制御サブシステムにより指定されデータの転送先を示す仮想アドレスを、予め設定されたオフセットに基づいて、自制御サブシステム内の仮想アドレスに変換し、変換された仮想アドレスへデータを転送する。
2015162745.tif 000002
【特許請求の範囲】
【請求項１】
記憶デバイスと、
前記記憶デバイスに接続される制御システムと、
を備え、
前記制御システムは、互いに接続されている二つの制御サブシステムを含み、
前記二つの制御サブシステムの夫々は、
互いに接続される複数の制御装置と、
前記複数の制御装置に夫々接続される複数のメモリと、
を含み、
前記複数の制御装置の夫々は、
プロセッサと、
前記プロセッサに接続される入出力デバイスと、
を含み、
前記入出力デバイスは、前記二つの制御サブシステムの中の他制御サブシステム内の制御装置に接続される中継デバイスを含み、
前記二つの制御サブシステムの中の自制御サブシステム内の複数のメモリ内の記憶領域を示す物理アドレスの空間と、前記他制御サブシステム内の複数のメモリ内の記憶領域を示す物理アドレスの空間とが、前記自制御サブシステム内のプロセッサ及び入出力デバイスの夫々により用いられる仮想アドレスの空間に関連付けられ、
前記中継デバイスは、前記他制御サブシステムから前記自制御サブシステムへ転送されるデータを受信した場合、前記他制御サブシステムにより指定され前記データの転送先を示す仮想アドレスを、予め設定されたオフセットに基づいて、前記自制御サブシステム内の仮想アドレスに変換し、前記変換された仮想アドレスへ前記データを転送する、
ストレージシステム。
【請求項２】
前記複数のメモリの夫々は、前記入出力デバイスからのアクセスが禁止される記憶領域であるシステムデータ領域と、前記入出力デバイスからのアクセスが許可される記憶領域であるユーザデータ領域とを含み、
前記自制御サブシステム内の物理アドレスの空間には、前記複数のメモリの中の第一メモリ内のシステムデータ領域と、前記第一メモリ内のユーザデータ領域と、前記複数のメモリの中の第二メモリ内のシステムデータ領域と、前記第二メモリ内のユーザデータ領域とが連続して配置される、
請求項１に記載のストレージシステム。
【請求項３】
前記自制御サブシステムにより指定される仮想アドレスの空間には、予め設定された自制御サブシステムアドレスから、前記自制御サブシステム内の複数のメモリの記憶領域が配置され、前記自制御サブシステム内の複数のメモリの記憶領域より後の、予め設定された他制御サブシステムアドレスから、前記他制御サブシステム内の複数のメモリの記憶領域が配置される、
請求項２に記載のストレージシステム。
【請求項４】
前記仮想アドレスの空間において、予め定められた第一システムデータアドレスから、前記第一メモリ内のシステムデータ領域及びユーザデータ領域が配置され、前記第一メモリ内のユーザデータ領域より後の、予め定められた第二システムデータアドレスから、前記第二メモリ内のシステムデータ領域及びユーザデータ領域が配置される、
請求項３に記載のストレージシステム。
【請求項５】
前記プロセッサは、前記自制御サブシステム内のシステムデータ領域及びユーザデータ領域の物理アドレスを、仮想アドレスに関連付ける第一関連情報を作成し、
前記プロセッサは、前記自制御サブシステム内の記憶領域を示す第一仮想アドレスを指定する命令を受けた場合、前記第一関連情報に基づいて、前記第一仮想アドレスを第一物理アドレスに変換し、前記第一物理アドレスへアクセスする、
請求項４に記載のストレージシステム。
【請求項６】
前記複数の制御装置の夫々は、前記プロセッサ及び前記入出力デバイスに接続されるメモリ管理デバイスを含み、
前記プロセッサは、前記自制御サブシステム内のユーザデータ領域の物理アドレスを、仮想アドレスに関連付ける第二関連情報を作成し、
前記メモリ管理デバイスは、前記第二関連情報を参照し、
前記入出力デバイスは、前記自制御サブシステム内のユーザデータ領域を示す第二仮想アドレスを指定する命令を受けた場合、前記メモリ管理デバイスを用いて、前記第二仮想アドレスを第二物理アドレスに変換し、前記第二物理アドレスへアクセスする、
請求項５に記載のストレージシステム。
【請求項７】
前記複数のメモリのそれぞれにおいて、前記システムデータ領域は、前記複数のメモリの中の他メモリに接続された制御装置内のプロセッサからのアクセスが禁止される記憶領域である制御データ領域と、前記自制御サブシステム内のプロセッサからのアクセスが許可される記憶領域である共有データ領域とを含み、
前記物理アドレスの空間には、前記システムデータ領域内に前記制御データ領域及び前記共有データ領域が連続して配置される、
請求項２に記載のストレージシステム。
【請求項８】
前記自制御サブシステム内の複数のメモリの容量の合計は、前記他制御サブシステム内の複数のメモリの容量の合計と異なる、
請求項１に記載のストレージシステム。
【請求項９】
前記プロセッサは、前記自制御サブシステム内の複数のメモリの容量の合計と、前記自制御サブシステム内の複数のメモリ内の物理アドレスとの関係を示す物理アドレス情報を取得し、前記自制御サブシステム内の複数のメモリの容量の合計を示すメモリ容量情報を取得し、前記物理アドレス情報と前記メモリ容量情報に基づいて、前記関連情報を作成する、
請求項１に記載のストレージシステム。
【請求項１０】
前記第一関連情報は、前記自制御サブシステム内の複数のメモリ内の記憶領域毎のアクセス権の情報を含み、
前記プロセッサは、前記第一関連情報内の記憶領域毎のアクセス権の情報に基づいて、前記第二関連情報に、対応する記憶領域のアクセス権の情報を設定する、
請求項６に記載のストレージシステム。
【請求項１１】
前記プロセッサは、仮想アドレスを別の仮想アドレスである拡張仮想アドレスに関連付ける第三関連情報を作成し、
前記拡張仮想アドレスの空間において、予め定められたシステムデータアドレスから、前記複数のメモリの中の自メモリ内のシステムデータ領域が配置され、前記自メモリ内のシステムデータ領域より後の、予め定められたユーザデータアドレスから、前記自メモリ内のユーザデータ領域が配置され、
前記プロセッサは、前記自制御サブシステム内の記憶領域を示す第一拡張仮想アドレスを指定する命令を受けた場合、前記第三関連情報に基づいて、前記第一拡張仮想アドレスを前記第一仮想アドレスに変換し、前記第一関連情報に基づいて、前記第一仮想アドレスを第一物理アドレスに変換し、前記第一物理アドレスへアクセスする、
請求項５に記載のストレージシステム。
【請求項１２】
記憶デバイスと、
前記記憶デバイスに接続されている制御システムと、
を備え、
前記制御システムは、
複数の制御装置と、
前記複数の制御装置に夫々接続されている複数のメモリと、
を含み、
前記複数の制御装置の夫々は、
プロセッサと、
前記プロセッサに接続される入出力デバイスと、
を含み、
前記複数のメモリの夫々は、前記入出力デバイスからのアクセスが禁止される記憶領域であるシステムデータ領域と、前記入出力デバイスからのアクセスが許可される記憶領域であるユーザデータ領域とを含み、
前記複数のメモリ内の記憶領域を示す物理アドレスの空間には、前記複数のメモリの中の第一メモリ内のシステムデータ領域と、前記第一メモリ内のユーザデータ領域と、前記複数のメモリの中の第二メモリ内のシステムデータ領域と、前記第二メモリ内のユーザデータ領域とが連続して配置される、
ストレージシステム。
【請求項１３】
前記複数のメモリ内の記憶領域を示す物理アドレスの空間が、前記プロセッサ及び前記入出力デバイスの夫々により用いられる仮想アドレスの空間に関連付けられ、
前記仮想アドレスの空間において、予め定められた第一システムデータアドレスから、前記第一メモリ内のシステムデータ領域及びユーザデータ領域が配置され、前記第一メモリ内のユーザデータ領域より後の、予め定められた第二システムデータアドレスから、前記第二メモリ内のシステムデータ領域及びユーザデータ領域が配置される、
請求項１２に記載のストレージシステム。
【請求項１４】
前記プロセッサは、前記複数のメモリ内の記憶領域を示す物理アドレスを、仮想アドレスに関連付ける第一関連情報を作成し、
前記プロセッサは、前記複数のメモリ内の記憶領域を示す第一仮想アドレスを指定する命令を受けた場合、前記第一関連情報に基づいて、前記第一仮想アドレスを第一物理アドレスに変換し、前記第一物理アドレスへアクセスする、
請求項１３に記載のストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
可用性の向上のために、二つのコントローラを有し、各コントローラが共有メモリを有するストレージシステムが知られている。各コントローラは、コントローラ間の接続を介して、他方のコントローラの共有メモリにアクセスすることができる。これにより、二つのコントローラの共有メモリに二重化してデータを格納することができる。【０００３】
これに関し、特許文献１には、複数のノードがＮＴＢ（Non-Transparent  Bridge）を介してスイッチに接続され、スイッチがアドレス変換量を算出して送信し、ＮＴＢに設定することが開示されている。【０００４】
また、性能の向上のために、一つのコントローラが、互いに接続された二つのプロセッサを有し、各プロセッサに接続された共有メモリを有するストレージシステムが知られている。各プロセッサは、プロセッサ間の接続を介して、他方のプロセッサの共有メモリにアクセスすることができる。【０００５】
これに関し、複数のプロセッサによる処理が対称でないアーキテクチャであるＡＭＰ（Asymmetric  Multiprocessing）が知られている。この場合、すべてのプロセッサが同一の仮想アドレスを用いてデータを扱うために、仮想アドレスを物理アドレスに変換し、共有メモリの物理アドレスにアクセスする。また、この場合、共有メモリの物理アドレス空間において、二つのプロセッサに夫々接続された二つの共有メモリの記憶領域は、均等にアクセスされるように配置されている。これにより、二つのプロセッサは二つの共有メモリの物理的位置を意識すること無くアクセスすることができる。しかし、プロセッサ間の通信が頻繁に発生することにより性能が低下する。【０００６】
また、複数のプロセッサによる共有メモリへのアクセス速度が均一でないアーキテクチャであるＮＵＭＡ（Non-Uniform  Memory  Access）が知られている。【０００７】
これに関し、特許文献２には、ＮＵＭＡシステム内の各ノードにノードの位置を識別する識別番号を割り当て、識別番号に基づいて効率的なアクセス方法を決定することが開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２０１２／１５７１０３号
【特許文献２】米国特許第７９９６４３３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ホストコンピュータから転送したデータをキャッシュするデータ量を増大させることを目的として、高可用実現のために冗長化された二つのコントローラの一つを停止してそのコントローラ内の共有メモリを増設した場合など、共有メモリの容量が変化する場合がある。このとき、一つのコントローラ内の物理アドレス空間が変化すること、また、一つのコントローラがもう一つのコントローラの物理アドレス空間の情報を持たないため、一方のコントローラが他方のコントローラ内の共有メモリへアクセスすると、アクセスに失敗する場合や共有メモリ内のデータを破壊する場合がある。これを防ぐために、ストレージシステムの管理者は、共有メモリの容量の変化に応じて、コントローラ間のアドレス変換の情報を再設定することが必要になる。【００１０】
また、一つのコントローラが複数のプロセッサを有する場合、一つのプロセッサに接続された共有メモリの容量が変化する場合がある。このとき、或るプロセッサが同一コントローラ内の他のプロセッサに接続された共有メモリへアクセスすると、アクセスに失敗する場合や共有メモリ内のデータを破壊する場合がある。これを防ぐために、ストレージシステムの管理者は、共有メモリの容量の変化に応じて、コントローラ内のアドレス変換の情報を再設定することが必要になる。【００１１】
このような共有メモリの容量の変化をアドレス変換の情報に反映させる作業の工数及びコストは膨大になる。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明の一態様であるストレージシステムは、記憶デバイスと、前記記憶デバイスに接続される制御システムと、を備える。前記制御システムは、互いに接続されている二つの制御サブシステムを含む。前記二つの制御サブシステムの夫々は、互いに接続される複数の制御装置と、前記複数の制御装置に夫々接続される複数のメモリと、を含む。前記複数の制御装置の夫々は、プロセッサと、前記プロセッサに接続される入出力デバイスと、を含む。前記入出力デバイスは、前記二つの制御サブシステムの中の他制御サブシステム内の制御装置に接続される中継デバイスを含む。前記二つの制御サブシステムの中の自制御サブシステム内の複数のメモリ内の記憶領域を示す物理アドレスの空間と、前記他制御サブシステム内の複数のメモリ内の記憶領域を示す物理アドレスの空間とが、前記自制御サブシステム内のプロセッサ及び入出力デバイスの夫々により用いられる仮想アドレスの空間に関連付けられる。前記中継デバイスは、前記他制御サブシステムから前記自制御サブシステムへ転送されるデータを受信した場合、前記他制御サブシステムにより指定され前記データの転送先を示す仮想アドレスを、予め設定されたオフセットに基づいて、前記自制御サブシステム内の仮想アドレスに変換し、前記変換された仮想アドレスへ前記データを転送する。
【発明の効果】
【００１３】
本発明の一態様によれば、ストレージシステム内の共有メモリの容量が変化しても、ストレージシステム内の制御装置は共有メモリ内の特定の記憶領域に対し固定の仮想アドレスを指定してアクセスすることができる。
【図面の簡単な説明】
【００１４】
【図１】実施例の計算機システムの構成を示す。
【図２】物理アドレス空間の構成を示す。
【図３】物理アドレス空間とコア仮想アドレス空間とＩＯ仮想アドレス空間との関係を示す。
【図４】コア変換テーブルを示す。
【図５】ＩＯ変換テーブルを示す。
【図６】クラスタ間のアドレス空間の関係を示す。
【図７】ハードウェア構成情報を示す。
【図８】物理アドレステーブルを示す。
【図９】クラスタ１１０の起動処理を示す。
【図１０】コア変換テーブル作成処理を示す。
【図１１】ＩＯ変換テーブル作成処理を示す。
【図１２】ホストＩ／Ｆ転送コマンド内のパラメータを示す。
【図１３】ＤＭＡ転送コマンド内のパラメータを示す。
【図１４】ＰＣＩｅデータ転送パケット内のパラメータを示す。
【図１５】ホストＩ／Ｆライト処理を示す。
【図１６】ＤＭＡライト処理を示す。
【図１７】実施例２におけるクラスタ間のアドレス空間の関係を示す。
【図１８】実施例２のコア拡張変換テーブルを示す。
【図１９】拡張仮想アドレステーブルを示す。
【図２０】実施例２のコア変換テーブル作成処理を示す。
【図２１】実施例３のＩＯ変換テーブル作成処理を示す。
【発明を実施するための形態】
【００１５】
以後の説明では「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」、「ａａａキュー」等の表現にて本発明の情報を説明するが、情報はテーブル、リスト、ＤＢ、キュー、等のデータ構造以外で表現されていてもよい。そのため、情報がデータ構造に依存しないことを示すために「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」、「ａａａキュー」等について「ａａａ情報」と呼ぶことがある。
【００１６】
さらに、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いるが、これらについてはお互いに置換が可能である。
【００１７】
以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御デバイス）を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理はストレージコントローラ等の計算機、情報処理装置が行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。
【００１８】
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディア（computer-readable  memory  media）によって各計算機にインストールされてもよい。この場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ：Central  Processing  Unit）と記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムを記憶している。そして、配布プログラムをＣＰＵが実行することで、プログラム配布サーバのＣＰＵは配布対象のプログラムを他の計算機に配布する。
【００１９】
以下、本発明の実施例について図面を用いて説明する。
【実施例１】
【００２０】
以下、実施例の計算機システムの構成について説明する。【００２１】
図１は、実施例の計算機システムの構成を示す。【００２２】
この計算機システムは、一つのストレージコントローラ１００と、二つのドライブボックス２００と、四つのホスト計算機３００とを含む。ドライブボックス２００は、二つのドライブ２１０を含む。ドライブボックス２００は、ストレージコントローラ１００に接続されており、不揮発性半導体メモリやＨＤＤ（Hard  Disk  Drive）などである。ホスト計算機３００は、ストレージコントローラ１００に接続されており、ストレージコントローラ１００を介してドライブ２１０内のデータにアクセスする。【００２３】
ストレージコントローラ１００は、互いに同じ構成を有する二つのクラスタ（ＣＬ）１１０を含む。二つのクラスタ１１０を区別する場合、ＣＬ０及びＣＬ１と呼ぶ。クラスタ１１０は、ＭＰ（Microprocessor  Package）１２０と、メモリ（ＭＭ）１４０と、ドライブＩ／Ｆ（Interface）１５０と、ホストＩ／Ｆ１６０との組を、二組含む。一つのクラスタ１１０内の二つのＭＰ１２０を区別する場合、夫々ＭＰ０及びＭＰ１と呼ぶ。一つのクラスタ１１０内の二つのメモリ１４０を区別する場合、夫々ＭＭ０及びＭＭ１と呼ぶ。ＭＭ０及びＭＭ１はそれぞれ、ＭＰ０及びＭＰ１に接続されている。メモリ１４０は、例えばＤＲＡＭ（Dynamic  Random  Access  Memory）である。メモリ１４０は、ＭＰ１２０により用いられるプログラム及びデータを格納する。【００２４】
本実施例において、ＣＬ０とＣＬ１が同一の構成を有しているが、互いに異なる構成を有していても良い。また、ＣＬ０内のメモリ１４０の容量とＣＬ１内のメモリ１４０の容量とが互いに異なっていても良い。【００２５】
ＭＰ１２０は、コア１２１と、ＩＯＭＭＵ（Input/Output  Memory  Management  Unit）１２２と、メモリＩ／Ｆ１２３と、ＭＰＩ／Ｆ１２４と、ＤＭＡ（ＤＭＡＣ：Direct  Memory  Access  Controller）１２５と、ＮＴＢ１２６と、ＰＣＩｅ（PCI  Express：Peripheral  Component  Interconnect  Express）Ｉ／Ｆ１３５、１３６、１３７、１３８とを含む。コア１２１と、ＩＯＭＭＵ１２２と、メモリＩ／Ｆ１２３と、ＭＰＩ／Ｆ１２４と、ＰＣＩｅＩ／Ｆ１３５、１３６、１３７、１３８との間は、ＭＰ内部のＩＯバスで接続されている。一つのクラスタ１１０内のＭＰ０及びＭＰ１に夫々設けられている二つのＮＴＢ１２６を区別する場合、夫々ＮＴＢ０及びＮＴＢ１と呼ぶ。また、ＰＣＩｅバスに接続されているデバイスをＩＯデバイスと呼ぶことがある。ＩＯデバイスは、ＤＭＡ１２５、ＮＴＢ１２６、ドライブＩ／Ｆ１５０、ホストＩ／Ｆ１６０などである。ＰＣＩｅＩ／Ｆ１３５、１３６、１３７、１３８の夫々には、ＰＣＩｅポートＩＤが与えられる。【００２６】
コア１２１は、メモリ１４０に格納されているプログラム及びデータに基づいてストレージコントローラ１００の制御を行う。なお、このプログラムが、コンピュータにより読み取り可能な記憶媒体に格納され、コア１２１がこの記憶媒体からプログラムを読み出しても良い。なお、コア１２１は、ＣＰＵなどのマイクロプロセッサのコアであっても良いし、マイクロプロセッサ自体であっても良い。【００２７】
メモリＩ／Ｆ１２３は、自ＭＰに対応するメモリ１４０に接続されている。【００２８】
ＭＰＩ／Ｆ１２４は、自クラスタ内の他ＭＰ内のＭＰＩ／Ｆに接続されており、自ＭＰと他ＭＰの間の通信を制御する。【００２９】
ＤＭＡ１２５は、ＰＣＩｅバス及びＰＣＩｅＩ／Ｆ１３５を介してＩＯバスに接続されており、自ＭＰのメモリ１４０と、ＩＯデバイス又は他ＭＰのメモリ１４０との間の通信を制御する。【００３０】
ＮＴＢ１２６は、ＰＣＩｅバス及びＰＣＩｅＩ／Ｆ１３６を介してＩＯバスに接続されており、他クラスタの対応するＭＰ１２０のＮＴＢ１２６にＰＣＩｅバスを介して接続されており、自クラスタと他クラスタの間の通信を制御する。【００３１】
ＰＣＩｅＩ／Ｆ１３７は、ＰＣＩｅバスを介して、自ＭＰに対応するドライブＩ／Ｆ１５０に接続されている。ＰＣＩｅＩ／Ｆ１３８は、ＰＣＩｅバスを介して、自ＭＰに対応するホストＩ／Ｆ１６０に接続されている。【００３２】
ＩＯデバイスがメモリ１４０へアクセスする際、当該ＩＯデバイスに接続されているＰＣＩｅＩ／Ｆは、ＩＯＭＭＵ１２２を用いて、当該ＩＯデバイスにより用いられる仮想アドレスを物理アドレスに変換し、その物理アドレスにアクセスする。【００３３】
ドライブＩ／Ｆ１５０は、対応するドライブ２１０に接続されている。ホストＩ／Ｆ１６０は、対応するホスト計算機３００に接続されている。【００３４】
本発明の表現のための用語について説明する。ストレージシステムは、ストレージコントローラ１００及びドライブボックス２００等に対応する。記憶デバイスは、ドライブ２１０等に対応する。制御システムは、ストレージコントローラ１００等に対応する。制御サブシステムは、クラスタ１１０等に対応する。制御装置は、ＭＰ１２０等に対応する。メモリは、メモリ１４０等に対応する。プロセッサは、コア１２１等に対応する。入出力デバイスは、ＩＯデバイス（ＤＭＡ１２５、ＮＴＢ１２６、ドライブＩ／Ｆ１５０、ホストＩ／Ｆ１６０）及びそれに接続されているＰＣＩｅＩ／Ｆ（１３５，１３６，１３７，１３８）等に対応する。中継デバイスは、ＮＴＢ１２６及びそれに接続されているＰＣＩｅＩ／Ｆ１３６等に対応する。メモリ変換デバイスは、ＩＯＭＭＵ１２２等に対応する。【００３５】
図２は、物理アドレス空間の構成を示す。【００３６】
メモリ１４０内の記憶領域の物理アドレスを示す物理アドレス空間には、先頭から順に、ＤＲＡＭ領域と、予約領域と、ＭＭＩＯ（Memory  Mapped  Input/Output）領域とが連続して配置される。【００３７】
ＤＲＡＭ領域には、自クラスタ内の二つのメモリ１４０内の記憶領域が連続して割り当てられている。ＤＲＡＭ領域には、ＮＵＭＡに基づき、先頭から順に、ＭＭ０割当領域と、ＭＭ１割当領域とが連続して配置される。ＭＭ０割当領域には、自クラスタ内のＭＭ０の記憶領域が割り当てられている。ＭＭ１割当領域には、自クラスタ内のＭＭ１の記憶領域が割り当てられている。【００３８】
一つのＭＰ１２０及び一つのメモリ１４０に対応する割当領域には、制御データ領域と、共有データ領域と、ユーザデータ領域とが連続して配置される。制御データ領域は、自ＭＰのコア１２１がプログラムとして実行可能なプログラムコードを含む制御データを格納し、自ＭＰ内のコア１２１によるアクセスが許可されており、自ＭＰ以外のコア１２１及びＩＯデバイスによるアクセスが禁止されている。共有データ領域は、自ＭＰの自分ＭＰ内の複数のコア１２１が読み書きできる情報となる共有データを格納し、ストレージコントローラ１００内のすべてのコア１２１によるアクセスが許可されており、ＩＯデバイスによるアクセスが禁止されている。ユーザデータ領域は、自ＭＰにより管理されるホスト計算機３００から転送されたユーザデータを格納し、ストレージコントローラ１００内のすべてのコア１２１及びＩＯデバイスによるアクセスが許可されている。制御データ領域は、自クラスタの構成を示すハードウェア構成情報と、コア１２１による仮想アドレスの変換に用いられるコア変換テーブルと、ＩＯＭＭＵ１２２による仮想アドレスの変換に用いられるＩＯ変換テーブルとを格納する。制御データ領域は更に、物理アドレステーブルを格納していても良い。制御データ領域は、コア変換テーブル及びＩＯ変換テーブルの基となるベーステーブルを予め格納していても良い。これらのデータについては後述する。また、これらのデータのポインタがコア１２１のレジスタに設定されることにより、コア１２１がこれらのデータを読み出しても良い。【００３９】
この図において、制御データ領域、共有データ領域、及びユーザデータ領域には、対応するＭＰ１２０の識別子を付けて区別する。ＭＭ０割当領域には、先頭から順に、ＭＰ０制御データ領域と、ＭＰ０共有データ領域と、ＭＰ０ユーザデータ領域とが連続して配置される。ＭＭ１割当領域には、先頭から順に、ＭＰ１制御データ領域と、ＭＰ１共有データ領域と、ＭＰ１ユーザデータ領域とが連続して配置される。【００４０】
予約領域は、アクセス不可能な記憶領域である。【００４１】
ＭＭＩＯ領域は、ＭＭ１割当領域より後の、予め定められたＭＭＩＯ先頭アドレスから配置される。ＭＭＩＯ先頭アドレスは、ＤＲＡＭ領域のサイズに比べて十分大きい。この例において、ＤＲＡＭ領域のサイズは、１６ＧＢであり、ＭＭＩＯ先頭アドレスは、先頭から２５６ＧＢの位置である。ＭＭＩＯ領域は、ＮＴＢ領域を含む。ＮＴＢ領域には、他クラスタのＤＲＡＭ領域がマッピングされている。ここでは、自クラスタのメモリ１４０の容量と他クラスタのメモリ１４０の容量とが等しいとする。このとき、ＮＴＢ領域のサイズは、ＤＲＡＭ領域のサイズに等しい。他クラスタの物理アドレス空間におけるＤＲＡＭ領域内の各領域の配置は、自クラスタの物理アドレス空間におけるＤＲＡＭ領域内の各領域の配置と同一である。言い換えれば、ＮＴＢ領域は、他クラスタの物理アドレス空間におけるＤＲＡＭ領域に、ＭＭＩＯ先頭アドレスのオフセットを加えた配置を有する。【００４２】
この物理アドレス空間によれば、ＭＭ０割当領域が一つにまとめて配置され、ＭＭ１割当領域が一つにまとめて配置されることにより、二つのメモリへのアクセスを均等化する物理アドレス空間に比べて、ＭＰ間の通信を低減し、ストレージコントローラ１００の性能を向上させることができる。また、物理アドレス空間において、一つのメモリ１４０の領域内に、制御データ領域、共有データ領域、及びユーザデータ領域を配置することにより、デバイス毎にアクセス権が異なる記憶領域を配置することができる。【００４３】
図３は、物理アドレス空間とコア仮想アドレス空間とＩＯ仮想アドレス空間との関係を示す。【００４４】
コア１２１は、コア１２１のための仮想アドレスと物理アドレスの関連を示すコア変換テーブルを作成し、メモリ１４０に保存する。コア１２１に対するコマンドは、メモリ１４０内の対象の記憶領域を仮想アドレスで指定する。コマンドは、例えばプログラムとしてメモリ１４０等に格納される。コア１２１は、コア変換テーブルに基づいて、指定された仮想アドレスを物理アドレスに変換し、その物理アドレスにアクセスする。コア１２１で指定される仮想アドレスの空間をコア仮想アドレス空間と呼ぶ。【００４５】
コア１２１は、ＩＯデバイスのための仮想アドレスと物理アドレスの関連を示すＩＯ変換テーブルを作成し、メモリ１４０に保存する。ＩＯデバイスに対するコマンドは、メモリ１４０内の対象の記憶領域を仮想アドレスで指定する。ＩＯデバイスがメモリ１４０にアクセスする際、ＩＯＭＭＵ１２２は、ＩＯ変換テーブルを用いて、指定された仮想アドレスを物理アドレスに変換する。ＩＯデバイスで指定される仮想アドレスの空間をＩＯ仮想アドレス空間と呼ぶ。【００４６】
コア仮想アドレス空間には、先頭から順に、ＭＰ０制御データ領域と、ＭＰ０共有データ領域と、ＭＰ０ユーザデータ領域と、ＭＰ間予約領域と、ＭＰ１制御データ領域と、ＭＰ１共有データ領域と、ＭＰ１ユーザデータ領域と、クラスタ間予約領域と、ＭＭＩＯ領域とが連続して配置される。このうち、ＭＰ０制御データ領域と、ＭＰ０共有データ領域と、ＭＰ０ユーザデータ領域と、ＭＰ１制御データ領域と、ＭＰ１共有データ領域と、ＭＰ１ユーザデータ領域と、ＭＭＩＯ領域とに格納されるデータは、物理アドレス空間と同一である。以後、各種の予約領域を、単に予約領域と呼ぶことがある。予約領域は、メモリ１４０の増設などメモリ１４０の容量の変化を契機に、ＤＲＡＭ領域として割り当てられても良い。又は、意図的にＩＯデバイスやコア１２１によるメモリアクセスを回避したい場合に、ＩＯデバイスやコア１２１がアクセスできない記憶領域として用いられても良い。【００４７】
本実施例においては、仮想アドレス空間において、制御データ領域や共有データ領域のように容量が変わらないことが前提となるデータ領域に続けて、ユーザデータ領域のように容量が可変である容量可変データ領域が配置される。更に、仮想アドレス空間において、容量可変データ領域の終端アドレスの後に、物理アドレス空間へのマッピングを行わないことなどによりメモリアクセスが出来ないようにした記憶領域（予約領域やマージンと呼ぶ）が配置され、その後に次の種別のデータ領域が配置される。このような配置とすることで、容量が変化した場合に、容量が変化しないデータ領域についてのアドレス空間のマッピングを変化させる必要がなく、当該容量可変データ領域の終端アドレスに関するマッピングを変化させるだけでよい。【００４８】
尚、少なくとも容量可変データ領域の終端アドレスの後にマージンを設けて次の種別のデータ領域を配置するようにすれば、上記実施例と異なる順序で各データ領域が配置されてもマッピング変更の負荷を低減するという効果を得ることができる。【００４９】
ＭＭ０割当領域（ＭＰ０制御データ領域と、ＭＰ０共有データ領域と、ＭＰ０ユーザデータ領域）について、コア仮想アドレス空間におけるアドレス範囲は、物理アドレス空間におけるアドレス範囲と等しい。【００５０】
ＭＭ１割当領域（ＭＰ１制御データ領域と、ＭＰ１共有データ領域と、ＭＰ１ユーザデータ領域）について、コア仮想アドレス空間における先頭アドレスは、物理アドレス空間における先頭アドレスより大きく、予め定められたＭＰ１先頭アドレスに設定される。ＭＰ０ユーザデータ領域の終端アドレスの最大値は、ＭＰ０に割り当てられるメモリ１４０の最大容量になる。ＭＰ１２０はＭＭ０とＭＭ１を認識する必要があるため、ＭＰ０に割り当てられるメモリ１４０の最大容量は、ＭＰ１２０が認識しうる最大のメモリ容量の半分に相当する。よって、ＭＰ１先頭アドレスは、ＭＰ０ユーザデータ領域の終端アドレスの最大値より大きくなる。この例において、ＭＰ０ユーザデータ領域の終端アドレスは、８ＧＢであり、ＭＰ１先頭アドレスは、先頭から３２ＧＢの位置である。これにより、コア仮想アドレス空間におけるＭＭ０割当領域とＭＭ１割当領域の間には、アクセス不可能なＭＰ間予約領域が配置される。【００５１】
コア仮想アドレス空間におけるＭＭＩＯ領域の先頭アドレスは、ＭＭＩＯ先頭アドレスである。これにより、ＭＭＩＯ領域について、コア仮想アドレス空間におけるアドレス範囲は、物理アドレス空間におけるアドレス範囲に等しい。ＭＭＩＯ先頭アドレスは、コア仮想アドレス空間におけるＭＰ１ユーザデータ領域の終端アドレスより大きい。この例において、ＭＰ１ユーザデータ領域の終端アドレスは、先頭から１６ＧＢの位置であり、ＭＭＩＯ先頭アドレスは、先頭から２５６ＧＢの位置である。これにより、コア仮想アドレス空間におけるＭＰ１ユーザデータ領域とＭＭＩＯ領域の間には、アクセス不可能なクラスタ間予約領域が配置される。【００５２】
コア仮想アドレス空間において、自クラスタのＭＭＩＯ領域は、他クラスタのＤＲＡＭ領域に対応する。また、他クラスタのコア仮想アドレス空間におけるＤＲＡＭ領域内の各領域の先頭アドレスは、自クラスタのコア仮想アドレス空間におけるＤＲＡＭ領域内の各領域の先頭アドレスに等しい。これにより、自クラスタ内のコア１２１は、他クラスタのメモリ１４０の容量が変化しても、固定の仮想アドレスを用いて他クラスタ内のメモリ１４０内の特定の記憶領域にアクセスすることができる。【００５３】
以後、或るＭＰ１２０の制御データ領域と共有データ領域を合わせた領域を、システムデータ領域と呼ぶことがある。システムデータ領域は、自クラスタ内のコアによるアクセスが許可され、ＩＯデバイスによるアクセスが禁止されている。ここでは、ＭＰ０のシステムデータ領域を、ＭＰ０システムデータ領域と呼び、ＭＰ１のシステムデータ領域を、ＭＰ１システムデータ領域と呼ぶ。【００５４】
ＩＯ仮想アドレス空間には、先頭から順に、ＭＰ０保護領域と、ＭＰ０ユーザデータ領域と、ＭＰ間保護領域と、ＭＰ１保護領域と、ＭＰ１ユーザデータ領域と、クラスタ間保護領域と、ＭＭＩＯ領域とが連続して配置される。以後、各種の保護領域を、単に保護領域と呼ぶことがある。保護領域は、物理アドレス空間にマッピングされるが、メモリアクセス権の設定によりメモリアクセスに制約が生じている記憶領域を指す。保護領域を設け、クラスタ１１０間のデータ転送において、クラスタ１１０が他方のクラスタ１１０のアドレス空間を自己のアドレス空間にマッピングすることにより、クラスタ１１０側が他方のクラスタ１１０から転送されるデータの受領可否を制御することができる。よってクラスタ１１０が他方のクラスタ１１０のアドレス空間マッピングの情報を持たなくてもメモリアクセス保護機能を実現できる。【００５５】
ＩＯ仮想アドレス空間におけるＭＰ０保護領域のアドレス範囲は、コア仮想アドレス空間におけるＭＰ０システムデータ領域のアドレス範囲に等しい。ＭＰ０保護領域は、ＩＯデバイスからアクセス不可能である。【００５６】
ＭＰ０ユーザデータ領域について、ＩＯ仮想アドレス空間におけるアドレス範囲は、コア仮想アドレス空間におけるアドレス範囲に等しい。【００５７】
ＩＯ仮想アドレス空間におけるＭＰ間保護領域のアドレス範囲は、コア仮想アドレス空間におけるＭＰ間予約領域のアドレス範囲に等しい。ＭＰ間保護領域は、ＩＯデバイスからアクセス不可能である。【００５８】
ＩＯ仮想アドレス空間におけるＭＰ１保護領域のアドレス範囲は、コア仮想アドレス空間におけるＭＰ１システムデータ領域のアドレス範囲に等しい。ＭＰ１保護領域は、ＩＯデバイスからアクセス不可能である。【００５９】
ＭＰ１ユーザデータ領域について、ＩＯ仮想アドレス空間におけるアドレス範囲は、コア仮想アドレス空間におけるアドレス範囲に等しい。【００６０】
ＩＯ仮想アドレス空間におけるＭＭＩＯ領域の先頭アドレスは、ＭＭＩＯ先頭アドレスである。これにより、ＭＭＩＯ領域について、ＩＯ仮想アドレス空間におけるアドレス範囲は、コア仮想アドレス空間におけるアドレス範囲に等しい。これにより、ＩＯ仮想アドレス空間におけるクラスタ間保護領域のアドレス範囲は、コア仮想アドレス空間におけるクラスタ間予約領域のアドレス範囲に等しい。クラスタ間保護領域は、ＩＯデバイスからアクセス不可能である。【００６１】
コア仮想アドレス空間と同様、ＩＯ仮想アドレス空間において、自クラスタのＭＭＩＯ領域は、他クラスタのＤＲＡＭ領域に対応する。また、他クラスタのＩＯ仮想アドレス空間におけるＤＲＡＭ領域内の各領域の先頭アドレスは、自クラスタのＩＯ仮想アドレス空間におけるＤＲＡＭ領域内の各領域の先頭アドレスに等しい。これにより、自クラスタ内のＩＯデバイスは、他クラスタのメモリ１４０の容量が変化しても、固定の仮想アドレスを用いて、他クラスタ内のメモリ１４０内の特定の記憶領域にアクセスすることができる。【００６２】
前述のようにＭＭＩＯ先頭アドレスは、ＤＲＡＭ領域のサイズに比べて十分大きい。これにより、自クラスタは、自クラスタのメモリ１４０の容量の変化に依らず、固定の仮想アドレスを用いて、他クラスタのメモリ１４０内の特定の記憶領域へアクセスすることができる。また、ＭＭ０割当領域のサイズに比べて十分大きいＭＰ１先頭アドレスからＭＭ１割当領域を開始することにより、ストレージコントローラ１００内のコア１２１又はＩＯデバイスは、メモリ１４０の容量の変化に依らず、固定の仮想アドレスを用いて、ＭＭ１内の特定の記憶領域へアクセスすることができる。また、ＩＯ仮想アドレス空間に保護領域を設けることにより、ＭＰ０システムデータ領域とＭＰ１システムデータ領域に対するＩＯデバイスからのアクセスを防ぐことができる。【００６３】
なお、物理アドレス空間、コア仮想アドレス空間、及びＩＯ仮想アドレス空間において、ＤＲＡＭ領域の先頭アドレスを予め設定された自制御サブシステムアドレスに設定し、ＭＭＩＯ領域の先頭アドレスを予め設定された他制御サブシステムアドレスに設定しても良い。本実施例において、自制御サブシステムアドレスは、アドレス空間の先頭であり、他制御サブシステムアドレスは、ＭＭＩＯ先頭アドレスである。【００６４】
また、コア仮想アドレス空間及びＩＯ仮想アドレス空間において、ＭＰ０システムデータ領域の先頭アドレスを予め設定された第一システムデータアドレスに設定し、ＭＰ１システムデータ領域の先頭アドレスを予め設定された第二システムデータアドレスに設定しても良い。本実施例において、第二システムデータアドレスは、アドレス空間の先頭であり、第二システムデータアドレスは、ＭＰ１先頭アドレスである。【００６５】
図４は、コア変換テーブルを示す。【００６６】
ストレージコントローラ１００は、メモリ１４０内の記憶領域を、複数のページに分割して管理する。コア変換テーブルは、ページテーブルであり、ページ毎のエントリを有する。【００６７】
一つのページのエントリは、ページ番号（＃）と、領域種別と、物理アドレスと、ページサイズと、仮想アドレスと、アクセス権とのフィールドを有する。ページ番号は、当該ページの識別子を示す。領域種別は、当該ページが属する領域の種別を示す。領域種別は、例えば、制御データ領域（制御）、共有データ領域（共有）、ユーザデータ領域（ユーザ）の何れかを示す。物理アドレスは、物理アドレス空間における当該ページの先頭アドレスを示す。ページサイズは、当該ページのサイズを示す。仮想アドレスは、コア仮想アドレス空間における当該ページの先頭アドレスを示す。アクセス権は、自ＭＰのコアによる当該ページへのアクセス権を示し、Ｒｅａｄアクセス権と、Ｗｒｉｔｅアクセス権と、Ｅｘｅｃｕｔｅアクセス権とを有する。Ｒｅａｄアクセス権は、当該ページへのＲｅａｄアクセスの可否を示す。Ｗｒｉｔｅアクセス権は、当該ページへのＷｒｉｔｅアクセスの可否を示す。Ｅｘｅｃｕｔｅアクセス権は、当該ページに格納されているデータについてコア１２１がプログラム実行可能なコードとして扱えるかどうかを示す。【００６８】
コア変換テーブルは、コア１２１により用いられる仮想アドレスを、物理アドレスに関連付けている。これにより、コア１２１は、メモリ１４０の容量の変化に依らず、固定の仮想アドレスを用いて特定の記憶領域へアクセスすることができる。また、メモリ１４０の容量の変化が発生しても、コア１２１へのコマンドを含むプログラムの修正を避けることができる。【００６９】
図５は、ＩＯ変換テーブルを示す。【００７０】
ＩＯ変換テーブルは、ページテーブルであり、ページ毎のエントリを有する。【００７１】
一つのページのエントリは、ページ番号（＃）と、変換有効フラグと、対象デバイスと、物理アドレスと、ページサイズと、仮想アドレスと、アクセス権とのフィールドを有する。ページ番号は、当該ページの識別子を示す。変換有効フラグは、当該ページの仮想アドレスと物理アドレスの変換が行われるか否かを示す。対象デバイスは、当該ページへアクセスするＩＯデバイスの識別子を示す。物理アドレスは、物理アドレス空間における当該ページの先頭アドレスを示す。ページサイズは、当該ページのサイズを示す。仮想アドレスは、ＩＯ仮想アドレス空間における当該ページの先頭アドレスを示す。アクセス権は、Ｒｅａｄアクセス権と、Ｗｒｉｔｅアクセス権とを有する。Ｒｅａｄアクセス権は、当該ページへのＲｅａｄアクセスの可否を示す。Ｗｒｉｔｅアクセス権は、当該ページへのＷｒｉｔｅアクセスの可否を示す。【００７２】
ＩＯ変換テーブルは、一つの物理アドレスに複数のＩＯデバイスを関連付けていても良い。また、ＩＯ変換テーブルは、一つの仮想アドレスに複数のＩＯデバイスを関連付けていても良い。【００７３】
ＩＯ変換テーブルは、ＩＯデバイスが用いる仮想デバイスに対し、物理アドレスを関連付けている。これにより、ＩＯデバイスは、メモリ１４０の容量の変化に依らず、固定の仮想アドレスを用いて特定の記憶領域へアクセスすることができる。また、メモリ１４０の容量の変化が発生しても、ＩＯデバイスへのコマンドを含むプログラムの修正を避けることができる。【００７４】
なお、コア変換テーブル及びＩＯ変換テーブルにおいて、仮想アドレスは仮想ページ番号で表されても良く、物理アドレスは物理ページ番号で表されても良い。【００７５】
コア１２１が、自クラスタ内のメモリ１４０の容量に基づいて、コア変換テーブル及びＩＯ変換テーブルを作成することにより、自クラスタ内のメモリ１４０の容量が変化しても、特定の記憶領域に固定の仮想アドレスを関連付けることができる。【００７６】
図６は、クラスタ間のアドレス空間の関係を示す。【００７７】
この図は、ＣＬ０内のコア１２１により用いられるＣＬ０内のコア仮想アドレス空間であるＣＬ０コア仮想アドレス空間と、ＣＬ０内の物理アドレス空間であるＣＬ０物理アドレス空間と、ＣＬ０内のコア及びＣＬ１内のＩＯデバイスにより用いられるＣＬ１内のＩＯ仮想アドレス空間であるＣＬ１ＩＯ仮想アドレス空間と、ＣＬ１内の物理アドレス空間であるＣＬ１物理アドレス空間とを示す。ここでのＣＬ０内の二つのメモリ１４０の容量は、ＣＬ１内の二つのメモリ１４０の容量に等しいとする。夫々のシステムデータ領域、ユーザデータ領域には、対応するクラスタ１１０の識別子とＭＰ１２０の識別子とを付けて区別する。【００７８】
ＣＬ０コア仮想アドレス空間には、先頭から順に、ＤＲＡＭ領域と、ＭＭＩＯ領域とが連続して配置される。【００７９】
ＣＬ０コア仮想アドレス空間のＤＲＡＭ領域には、先頭から順に、ＣＬ０ＭＰ０システムデータ領域と、ＣＬ０ＭＰ０ユーザデータ領域と、ＣＬ０ＭＰ間予約領域と、ＣＬ０ＭＰ１システムデータ領域と、ＣＬ０ＭＰ１ユーザデータ領域と、クラスタ間予約領域とが連続して配置される。【００８０】
ＣＬ０内のコア１２１が、ＤＲＡＭ領域内の仮想アドレスを指定するコマンドを取得すると、当該コアは、指定された仮想アドレスを物理アドレスに変換し、変換された物理アドレスにアクセスする。【００８１】
ＣＬ０物理アドレス空間には、先頭から順に、ＣＬ０ＭＰ０システムデータ領域と、ＣＬ０ＭＰ０ユーザデータ領域と、ＣＬ０ＭＰ１システムデータ領域と、ＣＬ０ＭＰ１ユーザデータ領域とが連続して配置される。【００８２】
ＣＬ０コア仮想アドレス空間のＭＭＩＯ領域には、先頭から順に、ＣＬ１ＭＰ０保護領域と、ＣＬ１ＭＰ０システムデータ領域と、ＣＬ１ＭＰ０ユーザデータ領域と、ＣＬ１ＭＰ間保護領域と、ＣＬ１ＭＰ１保護領域と、ＣＬ１ＭＰ１システムデータ領域と、ＣＬ１ＭＰ１ユーザデータ領域と、ＣＬ１クラスタ間保護領域とが連続して配置される。【００８３】
ＣＬ０内のコア１２１が、ＭＭＩＯ領域内の仮想アドレスを指定するコマンドを取得すると、当該コアは、ＮＴＢ１２６を介してＣＬ１へアクセスする。ＣＬ１内のＮＴＢ１２６は、ＣＬ０コア仮想アドレス空間のＭＭＩＯ領域内の仮想アドレスを、ＣＬ１ＩＯ仮想アドレス空間のＤＲＡＭ領域内の仮想アドレスに変換する。【００８４】
ＣＬ１ＩＯ仮想アドレス空間のＤＲＡＭ領域には、ＣＬ０コア仮想アドレス空間のＭＭＩＯ領域と同様、先頭から順に、ＣＬ１ＭＰ０保護領域と、ＣＬ１ＭＰ０システムデータ領域と、ＣＬ１ＭＰ０ユーザデータ領域と、ＣＬ１ＭＰ間保護領域と、ＣＬ１ＭＰ１保護領域と、ＣＬ１ＭＰ１システムデータ領域と、ＣＬ１ＭＰ１ユーザデータ領域と、ＣＬ１クラスタ間保護領域とが連続して配置される。即ち、ＣＬ１ＩＯ仮想アドレス空間のＤＲＡＭ領域内のアドレスは、ＣＬ０コア仮想アドレス空間のＭＭＩＯ領域内のアドレスからＭＭＩＯ先頭アドレスのオフセットを減じたアドレスである。【００８５】
ＣＬ１内のＮＴＢ１２６がＭＭＩＯ領域内の仮想アドレスをＤＲＡＭ領域内の仮想アドレスに変換した後、当該ＮＴＢに接続されているＰＣＩｅＩ／Ｆ１３６は、ＩＯＭＭＵ１２２を用いて、ＣＬ１ＩＯ仮想アドレス空間内の仮想アドレスを、ＣＬ１物理アドレス空間内の物理アドレスに変換し、変換された物理アドレスにアクセスする。【００８６】
ＣＬ１物理アドレス空間のＤＲＡＭ領域には、先頭から順に、ＣＬ１ＭＰ０システムデータ領域と、ＣＬ１ＭＰ０ユーザデータ領域と、ＣＬ１ＭＰ１システムデータ領域と、ＣＬ１ＭＰ１ユーザデータ領域とが連続して配置される。ＣＬ１物理アドレス空間におけるＣＬ１ＭＰ０システムデータ領域及びＣＬ１ＭＰ１システムデータ領域のそれぞれは、ＣＬ１ＩＯ仮想アドレス空間における保護領域に対応する。これにより、ＣＬ０内のコア１２１及びＩＯデバイスは、ＣＬ１内のシステムデータ領域にアクセスできない。【００８７】
或るクラスタ１１０内のコア１２１に対するコマンドは、ＭＭＩＯ領域を用いることにより、他クラスタ内のメモリ１４０の容量の変化に依らず、固定の仮想アドレスを用いて、他クラスタ内のメモリ１４０内の特定の記憶領域を指定することができる。【００８８】
ＤＲＡＭ領域内の各領域の先頭の仮想アドレスは、メモリ１４０の容量に依らず、二つのクラスタ１１０において同一になる。これにより、他クラスタ内のメモリ１４０の容量が自クラスタ内のメモリ１４０の容量と異なる場合でも、自クラスタ内のコア１２１及びＩＯデバイスは、固定の仮想アドレスを指定して他クラスタ内のメモリ１４０へアクセスすることができる。【００８９】
図７は、ハードウェア構成情報を示す。【００９０】
ハードウェア構成情報は、自クラスタのハードウェア構成に関するデータ毎のエントリを有する。一つの情報は、データ番号（＃）と、項目名と、内容とのフィールドを含む。データ番号は、当該データを示す識別子を示す。項目名は、当該データの名称を示す。項目名は、例えば、当該クラスタ内のＭＰ１２０の数である搭載ＭＰ数、当該クラスタのＭＰの動作周波数であるＭＰ周波数、当該クラスタ内のコア１２１の数であるコア数、当該クラスタ内のメモリ１４０の容量の合計であるメモリ容量、当該クラスタ内のＰＣＩｅポート１（ＰＣＩｅＩ／Ｆ１３８）に接続されているＩＯデバイスの有無、そのポートに接続されているＩＯデバイス（接続ＩＯデバイス）の種別、当該クラスタ内のＰＣＩｅポート２（ＰＣＩｅＩ／Ｆ１３６）に接続されているＩＯデバイスの有無、そのポートに接続されているＩＯデバイスの種別、当該クラスタ内のＰＣＩｅポート３（ＰＣＩｅＩ／Ｆ１３７）に接続されているＩＯデバイスの有無、そのポートに接続されているＩＯデバイスの種別などである。内容は、当該データの内容を示す。例えば、搭載ＭＰ数の内容は２であり、メモリ容量の内容は１６ＧＢである。【００９１】
このハードウェア構成情報がメモリ１４０等に格納されていることにより、コア１２１は、自クラスタの搭載ＭＰ数やメモリ容量など、コア変換テーブルやＩＯ変換テーブルの作成に必要な情報を参照することができる。【００９２】
図８は、物理アドレステーブルを示す。【００９３】
物理アドレステーブルは、クラスタ内のメモリ容量と当該クラスタ内のＭＰの識別子に対応するエントリを有する。クラスタメモリ容量は、クラスタ内のメモリ容量の合計であり、クラスタに搭載可能なメモリ容量の値を示す。一つのクラスタメモリ容量と一つのＭＰに対応するエントリは、クラスタメモリ容量（メモリ／クラスタ）と、ＭＰ番号（ＭＰ）と、システムデータ領域範囲と、ユーザデータ領域範囲とのフィールドを含む。ＭＰ番号は、当該ＭＰを示す識別子であり、ＭＰ０又はＭＰ１を示す。システムデータ領域範囲は、物理アドレス空間における当該ＭＰのシステムデータ領域の先頭アドレス及び終端アドレスを示す。ユーザデータ領域範囲は、物理アドレス空間における当該ＭＰのユーザデータ領域の先頭アドレス及び終端アドレスを示す。【００９４】
例えば、コア１２１は、システムデータ領域の先頭アドレスを制御データ領域の先頭アドレスとして決定し、制御データ領域の先頭アドレスに予め設定された制御データ領域のサイズを加えたアドレスを、共有データ領域の先頭アドレスとして算出する。【００９５】
このようにクラスタ１１０内のメモリ１４０の容量の合計と、各領域の先頭の物理アドレスとの関係が予め設定されていることにより、コア１２１は、メモリ１４０の容量に応じて、各領域の先頭の物理アドレスを決定することができ、コア変換テーブルやＩＯ変換テーブルを作成することができる。【００９６】
図９は、クラスタ１１０の起動処理を示す。【００９７】
クラスタ１１０の管理者が、当該クラスタ内のメモリ１４０の増設など、当該クラスタ内のメモリ１４０の容量を変化させた後、当該クラスタを起動させる。【００９８】
Ｓ１１０においてコア１２１は、後述するコア変換テーブル作成処理を行う。【００９９】
その後、Ｓ１２０においてコア１２１は、ＮＴＢ１２６を除くＩＯデバイスを初期化する。【０１００】
その後、Ｓ１３０においてコア１２１は、後述するＩＯ変換テーブル作成処理を行う。【０１０１】
その後、Ｓ１４０においてコア１２１は、他クラスタのモデルと接続状態の情報を取得する。その後、Ｓ１５０においてコア１２１は、取得された情報に基づいて、自クラスタと同じモデルの他クラスタが自クラスタに接続されているか否かを判定する。【０１０２】
Ｓ１５０において同じモデルのクラスタが自クラスタに接続されていないと判定された場合（Ｎ）、コア１２１は処理をＳ１４０に戻す。【０１０３】
Ｓ１５０において同じモデルのクラスタが自クラスタに接続されていると判定された場合（Ｙ）、Ｓ１６０においてコア１２１は、ＮＴＢ０及びＮＴＢ１のリンクアップを試行する。その後、Ｓ１７０においてコア１２１は、ＮＴＢ０及びＮＴＢ１がリンクアップ済であるか否かを判定する。【０１０４】
Ｓ１７０においてＮＴＢ０及びＮＴＢ１がリンクアップ済でないと判定された場合（Ｎ）、コア１２１は処理をＳ１６０に戻す。【０１０５】
Ｓ１７０においてＮＴＢ０及びＮＴＢ１がリンクアップ済であると判定された場合（Ｙ）、Ｓ１８０においてコア１２１は、他クラスタに起動完了を通知する。その後、Ｓ１９０においてコア１２１は、両クラスタの起動処理完了を確認し、このフローを終了する。【０１０６】
以上の起動処理によれば、メモリ１４０の容量の変化後に、コア変換テーブルとＩＯ変換テーブルを作成することができる。【０１０７】
図１０は、コア変換テーブル作成処理を示す。【０１０８】
Ｓ２１０においてコア１２１は、ハードウェア構成情報を参照し、メモリ１４０のメモリ容量とＭＰ数の情報を取得する。その後、Ｓ２２０においてコア１２１は、物理アドレステーブルを参照する。その後、Ｓ２３０においてコア１２１は、コア変換テーブルのベーステーブルと、メモリ容量と、物理アドレステーブルに基づいて、コア変換テーブルを作成し、アクセス権以外を設定する。コア変換テーブルのベーステーブルにおいて、ＭＰ１の制御データ領域の先頭ページの仮想アドレスには、ＭＰ１先頭アドレスが設定されている。【０１０９】
その後、Ｓ２５０においてコア１２１は、コア変換テーブルから未選択のページを選択し、当該ページがＭＰ間予約領域の条件を満たすか否かを判定する。ＭＰ間予約領域の条件は、当該ページの仮想アドレスがＭＰ０ユーザデータ領域の終端アドレスより大きく、且つＭＰ１システムデータ領域の先頭アドレスより小さいことである。【０１１０】
Ｓ２５０において当該ページがＭＰ間予約領域の条件を満たすと判定された場合（Ｙ）、Ｓ２７０においてコア１２１は、当該ページをアクセス不可に設定し、処理をＳ２８０へ移行させる。ここで、コア１２１は、当該ページのアクセス権において、Ｒｅａｄ禁止、Ｗｒｉｔｅ禁止、Ｅｘｅｃｕｔｅ禁止に設定する。【０１１１】
Ｓ２５０において当該ページがＭＰ間予約領域の条件を満たさないと判定された場合（Ｎ）、Ｓ２６０においてコア１２１は、当該ページがクラスタ間予約領域の条件を満たすか否かを判定する。クラスタ間予約領域の条件は、当該ページの仮想アドレスがＭＰ１ユーザデータ領域の終端アドレスより大きいことである。【０１１２】
Ｓ２６０において当該ページがクラスタ間予約領域の条件を満たすと判定された場合（Ｙ）、コア１２１は処理をＳ２７０へ移行させる。Ｓ２６０において当該ページがクラスタ間予約領域の条件を満たさないと判定された場合（Ｎ）、Ｓ２８０においてコア１２１は、コア変換テーブル内のすべてのページの処理を終了したか否かを判定する。【０１１３】
Ｓ２８０においてすべてのページの処理を終了していないと判定された場合（Ｎ）、コア１２１は処理をＳ２５０へ戻す。【０１１４】
Ｓ２８０においてすべてのページの処理を終了したと判定された場合（Ｙ）、Ｓ２９０においてコア１２１は、コア変換テーブルへのポインタを、コア１２１のＭＳＲ（Model  Specific  Register）にセットすることにより、仮想アドレスの変換を有効化し、このフローを終了する。【０１１５】
以上のコア変換テーブル作成処理によれば、コア１２１は、メモリ１４０の容量に応じたコア変換テーブルを作成することができる。また、コア１２１は、コア仮想アドレス領域において、先頭のＭＰのユーザデータ領域の終端アドレスと、ＭＰ１先頭アドレスの間に、ＭＰ間予約領域を設定することができる。【０１１６】
図１１は、ＩＯ変換テーブル作成処理を示す。【０１１７】
Ｓ３１０においてコア１２１は、ハードウェア構成情報を参照し、メモリ容量、ＭＰ数、接続ＩＯデバイスの情報を取得する。その後、Ｓ３２０においてコア１２１は、物理アドレステーブルを参照する。その後、Ｓ３３０においてコア１２１は、ＩＯ変換テーブルのベーステーブルと、メモリ容量と、物理アドレステーブルに基づいて、ＩＯ変換テーブルを作成し、変換有効フラグ以外を設定する。ＩＯ変換テーブルのベーステーブルにおいて、ＭＰ１の制御データ領域の先頭ページの仮想アドレスには、ＭＰ１先頭アドレスが設定されており、各ページの対象デバイスにはＩＯデバイスが設定されている。【０１１８】
その後、Ｓ３５０においてコア１２１は、ＩＯ変換テーブルから未選択のページを選択し、当該ページの対象デバイスがＰＣＩｅポートに接続されているか否かを判定する。【０１１９】
Ｓ３５０において対象デバイスがＰＣＩｅポートに接続されていると判定された場合（Ｙ）、Ｓ３６０においてコア１２１は、ＩＯ変換テーブル内の当該ページの変換有効フラグの値を”Ｙｅｓ”に設定し、処理をＳ３８０へ移行させる。【０１２０】
Ｓ３５０において対象デバイスがＰＣＩｅポートに接続されていないと判定された場合（Ｎ）、Ｓ３７０においてコア１２１は、ＩＯ変換テーブル内の当該ページの変換有効フラグの値を”Ｎｏ”に設定し、処理をＳ３８０へ移行させる。【０１２１】
Ｓ３８０においてコア１２１は、ＩＯ変換テーブル内のすべてのページの処理を終了したか否かを判定する。【０１２２】
Ｓ３８０においてすべてのページの処理を終了していないと判定された場合（Ｎ）、コア１２１は処理をＳ３５０へ戻す。【０１２３】
Ｓ３８０においてすべてのページの処理を終了したと判定された場合（Ｙ）、Ｓ３９０においてコア１２１は、自ＭＰ内のＩＯＭＭＵ１２２のレジスタにＩＯ変換テーブルへのポインタをセットすることにより、ＩＯＭＭＵ１２２による仮想アドレスの変換を有効化し、このフローを終了する。【０１２４】
以上のＩＯ変換テーブル作成処理によれば、コア１２１は、自クラスタ内のメモリ１４０の容量に応じたＩＯ変換テーブルを作成することができる。また、コア１２１は、接続されているＩＯデバイスに対応するページのアドレス変換を有効にすることができる。【０１２５】
以下、計算機システムにおけるフロントエンドライト処理について説明する。【０１２６】
フロントエンドライト処理は、ホスト計算機３００がストレージコントローラ１００へライトコマンド及びユーザデータを送信し、そのユーザデータを二つのクラスタ１１０のメモリ１４０へ書き込む処理である。【０１２７】
図１２は、ホストＩ／Ｆ転送コマンド内のパラメータを示す。【０１２８】
コア１２１は、ホストＩ／Ｆ転送コマンドを作成し、メモリ１４０内でホストＩ／Ｆ１６０に対応する記憶領域へ書き込むことにより、ホストＩ／Ｆ１６０に対してデータ転送の指示（命令）を行う。ホストＩ／Ｆ転送コマンドは、コマンド種別と、ＩＯ転送長と、タグ番号と、メモリアドレスとのフィールドを有する。コマンド種別は、当該コマンドの種別を示し、例えばリードやライトを示す。ここではコマンド種別がライトである場合を示す。この場合、ホストＩ／Ｆ転送コマンドはホストＩ／Ｆ１６０からメモリ１４０への転送を指示する。ＩＯ転送長は、ホストＩ／Ｆ１６０とメモリ１４０の間で転送されるデータの長さを示す。タグ番号は、転送されるデータに付与される識別子を示す。メモリアドレスは、メモリ１４０の記憶領域を示す仮想アドレスである。コマンド種別がライトである場合、メモリアドレスは転送先の記憶領域を示す。なお、コマンド種別がリードである場合、ホストＩ／Ｆ転送コマンドはメモリ１４０からホストＩ／Ｆ１６０への転送を指示し、メモリアドレスは転送元の記憶領域を示す。【０１２９】
図１３は、ＤＭＡ転送コマンド内のパラメータを示す。【０１３０】
コア１２１は、ＤＭＡ転送コマンドを作成し、メモリ１４０内でＤＭＡ１２５に対応する記憶領域へ書き込むことにより、ＤＭＡ１２５に対してデータ転送を命令する。ＤＭＡ転送コマンドは、コマンド種別と、データ転送長と、転送元メモリアドレスと、転送先メモリアドレスと、制御内容とのフィールドを有する。コマンド種別は、当該コマンドの種別を示し、例えばデータコピーやパリティ生成を示す。ここでは、コマンド種別がデータコピーである場合を示す。データ転送長は、ＤＭＡ１２５により転送されるデータの長さを示す。転送元メモリアドレスは、転送元のメモリ１４０の記憶領域を示す仮想アドレスである。転送先メモリアドレスは、転送先のメモリ１４０の記憶領域を示す仮想アドレスである。制御内容は、ＤＭＡ１２５による制御の内容を示す。転送元メモリアドレス及び転送先メモリアドレスの夫々は、自クラスタ内のメモリ１４０を示すＤＲＡＭ領域内の仮想アドレスであっても良いし、他クラスタ内のメモリ１４０を示すＭＭＩＯ領域内の仮想アドレスであっても良い。【０１３１】
図１４は、ＰＣＩｅデータ転送パケット内のパラメータを示す。【０１３２】
ＰＣＩｅデータ転送パケットは、ＰＣＩｅバスを介するデータ転送のパケットである。ＰＣＩｅデータ転送パケットは、パケット種別と、リクエスタＩＤと、転送先メモリアドレスと、データ長と、転送先データ内容［０］〜［Ｎ−１］とのフィールドを有する。パケット種別は、当該パケットの種別を示し、例えばメモリリクエストやコンフィギュレーションやメッセージを示す。リクエスタＩＤは、当該パケットを発行したＩＯデバイスを識別する識別子である。転送先メモリアドレスは、当該パケットの転送先の記憶領域を示すアドレスであり、仮想アドレス又は物理アドレスで表される。データ長は、その後に続くデータの長さを示す。転送先データ内容［０］〜［Ｎ−１］は、当該パケットのデータ内容を示す。【０１３３】
ＮＴＢ１２６は、他クラスタからのＰＣＩｅデータ転送パケット内のリクエスタＩＤを書き換えると共に、転送先メモリアドレスを示す仮想アドレスをＭＭＩＯ領域からＤＲＡＭ領域に書き換える。更に、ＮＴＢ１２６に接続されているＰＣＩｅ／ＩＦ１３６は、ＩＯＭＭＵ１２２を用いて、転送先メモリアドレスを示す仮想アドレスを物理アドレスに書き換え、その物理アドレスへ転送する。【０１３４】
図１５は、ホストＩ／Ｆライト処理を示す。【０１３５】
ホストＩ／Ｆ１６０は、起動処理が終了すると、受信準備完了を示す情報を、接続されているホスト計算機３００へ送信する。その後、当該ホストＩ／Ｆは、当該ホスト計算機からライトコマンドを受信すると、自ＭＰのコア１２１へライトコマンドを通知する。当該コアは、ホストＩ／Ｆ転送コマンドを作成し、ホストＩ／Ｆ転送コマンドを読み込むことを当該ホストＩ／Ｆに指示する。これにより、当該ホストＩ／Ｆは、ホストＩ／Ｆライト処理を開始する。【０１３６】
Ｓ４１０において当該ホストＩ／Ｆは、当該ホスト計算機からユーザデータを受信する。その後、Ｓ４２０において当該ホストＩ／Ｆは、ユーザデータにＣＲＣコードを付与し、ホストＩ／Ｆ転送コマンドにより指定された転送先メモリアドレスを持つＰＣＩｅデータ転送パケットを生成して転送する。このとき、当該ホストＩ／Ｆに接続されているＰＣＩｅＩ／Ｆ１３８は、ＩＯＭＭＵ１２２を用いて、ＰＣＩｅデータ転送パケットの転送先メモリアドレスを示す仮想アドレスを物理アドレスに書き換え、ＰＣＩｅデータ転送パケットをその物理アドレスへ転送する。【０１３７】
その後、Ｓ４３０において当該ホストＩ／Ｆは、自ＭＰのコア１２１へデータ転送完了を通知し、このフローを終了する。【０１３８】
以上のホストＩ／Ｆライト処理によれば、ホストＩ／Ｆ１６０は、ホスト計算機３００から受信したユーザデータを、対応するメモリ１４０へ転送することができる。【０１３９】
図１６は、ＤＭＡライト処理を示す。【０１４０】
本実施例においては、二つのクラスタ１１０がライトデータを二重化してメモリ１４０に格納するために、ライトデータを受信して格納した一方のクラスタは、他方のクラスタへライトデータを転送する。ここでは、ライトコマンドを受信したクラスタ１１０を転送元クラスタと呼び、ライトコマンドを受信したＭＰ１２０を転送元ＭＰと呼び、他方のクラスタを転送先クラスタと呼ぶ。【０１４１】
Ｓ５１０において、ホストＩ／Ｆライト処理によりデータ転送完了の通知を受けた転送元クラスタのコア１２１は、転送元ＭＰのＤＭＡ１２５に対するＤＭＡ転送コマンドを作成し、転送元ＭＰに接続されているメモリ１４０へ書き込む。【０１４２】
Ｓ５２０において、当該コアは、ＤＭＡ転送コマンドを読み込むことを当該ＤＭＡに指示する。【０１４３】
Ｓ５３０において、当該ＤＭＡは、ＤＭＡ転送コマンドを読み込む。Ｓ５４０において、当該ＤＭＡは、転送元メモリアドレスのユーザデータを読み込み、ＤＭＡ転送コマンドにより指定された転送先メモリアドレスへのＰＣＩｅデータ転送パケットを生成して転送する。このとき、当該ＤＭＡに接続されているＰＣＩｅＩ／Ｆ１３５は、ＩＯＭＭＵ１２２を用いて、転送元メモリアドレスを、仮想アドレスから物理アドレスに変換する。当該ＤＭＡ１２５は、その物理アドレス内のユーザデータを読み込み、読み込んだユーザデータを転送先メモリアドレスへ転送する。転送先メモリアドレスがＭＭＩＯ領域内のＮＴＢ領域内であるため、ＰＣＩｅＩ／Ｆ１３５は、ユーザデータを転送元ＭＰのＮＴＢ１２６へ転送する。転送元ＭＰのＮＴＢ１２６は、接続されている転送先クラスタのＮＴＢ１２６へ、ユーザデータを含むＰＣＩｅデータ転送パケットを転送する。このＰＣＩｅデータ転送パケットにおける転送先メモリアドレスは、他クラスタのメモリ１４０内のユーザデータ領域を示し、ＭＭＩＯ領域内の仮想アドレスである。【０１４４】
Ｓ５５０において、転送先クラスタのＮＴＢ１２６は、転送元クラスタから転送されたＰＣＩｅデータ転送パケットを受信する。ここで、当該ＮＴＢは、ＰＣＩｅデータ転送パケット内の転送先メモリアドレスからＭＭＩＯ先頭アドレスを減ずることにより、転送先メモリアドレスをＤＲＡＭ領域内のアドレスに書き換える。更に、当該ＮＴＢは、ＰＣＩｅデータ転送パケット内のリクエスタＩＤを書き換える。【０１４５】
その後、Ｓ６１０において当該ＮＴＢは、ＩＯ変換テーブルにおける、転送先メモリアドレスの仮想アドレスに対応する変換有効フラグに基づいて、仮想アドレスの変換が有効であるか否かを判定する。【０１４６】
Ｓ６１０において仮想アドレスの変換が無効であると判定された場合（Ｎ）、当該ＮＴＢは、処理をＳ６３０へ移行させる。【０１４７】
Ｓ６１０において仮想アドレスの変換が有効であると判定された場合（Ｙ）、Ｓ６２０において当該ＮＴＢに接続されているＰＣＩｅＩ／Ｆ１３６は、自ＭＰのＩＯＭＭＵ１２２を用いて、ＰＣＩｅデータ転送パケット内の転送先メモリアドレスを仮想アドレスから物理アドレスに変換し、ＰＣＩｅデータ転送パケットを書き換える。【０１４８】
その後、Ｓ６３０において当該ＰＣＩｅＩ／Ｆは、転送先メモリアドレスがＭＭ１割当領域であるか否かを判定する。【０１４９】
Ｓ６３０において転送先メモリアドレスがＭＭ０割当領域であると判定された場合（Ｎ）、Ｓ６４０において当該ＰＣＩｅＩ／Ｆは、ＰＣＩｅデータ転送パケットをＭＭ０へ転送し、処理をＳ６６０へ移行させる。【０１５０】
Ｓ６３０において転送先メモリアドレスがＭＭ１割当領域であると判定された場合（Ｙ）、Ｓ６５０において当該ＰＣＩｅＩ／Ｆは、ＰＣＩｅデータ転送パケットをＭＭ１へ転送し、処理をＳ６６０へ移行させる。【０１５１】
その後、Ｓ６６０において転送先のメモリ１４０に接続されているＭＰ１２０のコア１２１は、転送先のメモリ１４０に格納されているユーザデータを読み出してＣＲＣチェックを行うことにより、ユーザデータにエラーが無いことを確認し、このフローを終了する。【０１５２】
以上のＤＭＡライト処理によれば、ＤＭＡは、自クラスタのメモリ１４０に格納されているユーザデータを他クラスタのメモリ１４０へ転送することができ、ユーザデータを二重化して格納することができる。また、ＮＴＢ１２６が、転送先を示す他クラスタのＭＭＩＯ領域内の仮想アドレスを、自クラスタのＤＲＡＭ領域内の仮想アドレスに変換することにより、他クラスタから自クラスタへアクセスすることができる。更にＮＴＢ１２６に接続されているＰＣＩｅＩ／Ｆ１３６が、ＩＯＭＭＵ１２２を用いて、転送先を示す自クラスタのＤＲＡＭ領域内の仮想アドレスを物理アドレスに変換することにより、他クラスタから自クラスタ内のメモリ１４０へアクセスすることができる。【０１５３】
フロントエンドライト処理の第一具体例について説明する。【０１５４】
ＣＬ０ＭＰ０のホストＩ／Ｆ１６０がホスト計算機３００からユーザデータを受信すると、自ＭＰのコア１２１は当該ホストＩ／ＦへホストＩ／Ｆ転送コマンドを発行する。当該ホストＩ／Ｆは、ホストＩ／Ｆ転送コマンドに従って、ユーザデータにＣＲＣ（Cyclic  Redundancy  Check）コードを追加し、ユーザデータをＣＬ０ＭＭ０へ転送する。【０１５５】
ここでＣＬ０ＭＰ０のコア１２１は、ＤＭＡ１２５に対し、ユーザデータをＣＬ１ＭＭ０へ転送することを示すＤＭＡ転送コマンドを発行する。当該ＤＭＡは、ＤＭＡ転送コマンドに応じて、ＣＬ０ＭＭ０からＣＬ１ＭＭ０へユーザデータを転送する。このとき、ユーザデータは、ＣＬ０ＭＰ０のＮＴＢ１２６からＰＣＩｅバスを介してＣＬ１ＭＰ０のＮＴＢ１２６へ転送され、ＣＬ１ＭＰ０のＮＴＢ１２６からＣＬ１ＭＭ０へ転送される。【０１５６】
ＣＬ１ＭＰ０のコア１２１は、ＣＬ１ＭＭ０に格納されているユーザデータをリードし、ＣＲＣチェックを行う。【０１５７】
以上の第一具体例において、ＣＬ０ＭＰ０に接続されているホスト計算機３００からのユーザデータは、ＣＬ０ＭＭ０に格納された後、ＣＬ０ＭＰ０及びＣＬ１ＭＰ０を介してＣＬ１ＭＭ０へ転送される。これにより、ユーザデータは、ＣＬ０ＭＭ０及びＣＬ１ＭＭ０に二重化されて格納される。【０１５８】
フロントエンドライト処理の第二具体例について説明する。【０１５９】
ユーザデータをＣＬ０ＭＭ０へ転送するまでの動作は、第一具体例と同様である。その後、ＣＬ０ＭＰ０のコア１２１は、ＤＭＡ１２５に対し、ユーザデータをＣＬ１ＭＭ１へ転送することを示すＤＭＡ転送コマンドを発行する。当該ＤＭＡは、ＤＭＡ転送コマンドに応じて、ＣＬ０ＭＭ０からＣＬ１ＭＭ１へユーザデータを転送する。このとき、ユーザデータは、ＣＬ０ＭＰ０のＮＴＢ１２６からＰＣＩｅバスを介してＣＬ１ＭＰ０のＮＴＢ１２６へ転送され、ＣＬ１ＭＰ０のＮＴＢ１２６からＭＰＩ／Ｆ１２４及びＣＬ１ＭＰ１を介してＣＬ１ＭＭ１へ転送される。【０１６０】
ＣＬ１ＭＰ１のコア１２１は、ＣＬ１ＭＭ１に格納されているユーザデータをリードし、ＣＲＣチェックを行う。【０１６１】
以上の第二具体例において、ＣＬ０ＭＰ０に接続されているホスト計算機３００からのユーザデータは、ＣＬ０ＭＭ０に格納された後、ＣＬ０ＭＰ０、ＣＬ１ＭＰ０、及びＣＬ１ＭＰ１を介してＣＬ１ＭＭ０へ転送される。これにより、ユーザデータは、ＣＬ０ＭＭ０とＣＬ１ＭＭ１に二重化されて格納される。【０１６２】
以上のフロントエンドライト処理によれば、ストレージコントローラ１００は、ホスト計算機３００からのユーザデータを、二つのクラスタ１１０のメモリ１４０へ書き込み、ユーザデータを二重化して格納することにより、ユーザデータの信頼性を高めることができる。その後、ストレージコントローラ１００は、メモリ１４０に格納されたデータをドライブ２１０へ書き込むことができる。
【実施例２】
【０１６３】
実施例１の仮想アドレスと異なる拡張仮想アドレスを用いる場合について説明する。本実施例においては、主に実施例１との相違点について説明する。【０１６４】
本実施例のコア１２１に対するコマンドは、メモリ１４０内の記憶領域を、拡張仮想アドレスにより指定する。コア１２１は、拡張仮想アドレスと仮想アドレスの関連を示すコア拡張変換テーブルを作成し、メモリ１４０に保存する。コア１２１は、メモリ１４０へのアクセス時に、コア拡張変換テーブルを用いて、指定された拡張仮想アドレスを仮想アドレスに変換し、実施例１と同様に、コア変換テーブルを用いて、仮想アドレスを物理アドレスに変換する。【０１６５】
図１７は、実施例２におけるクラスタ間のアドレス空間の関係を示す。【０１６６】
この図は、ＣＬ０のＭＰ０のコア１２１により用いられる拡張仮想アドレスの空間であるＣＬ０ＭＰ０コア拡張仮想アドレス空間と、ＣＬ０コア仮想アドレス空間と、ＣＬ０物理アドレス空間と、ＣＬ１ＩＯ仮想アドレス空間と、ＣＬ１物理アドレス空間とを示す。このうち、ＣＬ０ＭＰ０コア拡張仮想アドレス空間以外は、実施例１と同様である。【０１６７】
或るコア１２１により用いられる拡張仮想アドレスの空間であるコア拡張仮想アドレス空間のＤＲＡＭ領域には、先頭から自ＭＰシステムデータ領域が配置され、予め設定されたユーザデータ領域先頭アドレスから自ＭＰユーザデータ領域が配置される。ユーザデータ領域先頭アドレスは、例えば、自クラスタ内のすべてのＭＰのシステムデータ領域の合計サイズと等しい。なお、ユーザデータ領域先頭アドレスは、自クラスタ内のすべてのＭＰのシステムデータ領域の合計サイズより大きくても良い。コア拡張仮想アドレス空間のＭＭＩＯ領域は、コア仮想アドレス空間のＭＭＩＯ領域と同一である。自ＭＰのシステムデータ領域と自ＭＰのユーザデータ領域との間には、システムデータ予約領域が配置され、自ＭＰのユーザデータ領域とＭＭＩＯ領域との間には、ユーザデータ予約領域が配置される。すなわち、コア拡張仮想アドレス空間のＤＲＡＭ領域には、他ＭＰのシステムデータ領域及びユーザデータ領域は配置されない。【０１６８】
すなわち、ＣＬ０ＭＰ０コア拡張仮想アドレス空間のＤＲＡＭ領域には、先頭からＣＬ０ＭＰ０システムデータ領域が配置され、ユーザデータ領域先頭アドレスからＣＬ０ＭＰ０ユーザデータ領域が配置される。【０１６９】
ＣＬ０内のコア１２１が、ＤＲＡＭ領域内の拡張仮想アドレスを指定するコマンドを取得すると、当該コアは、コア拡張変換テーブルを用いて、拡張仮想アドレスを仮想アドレスに変換し、コア変換テーブルを用いて、変換された仮想アドレスを物理アドレスに変換し、変換された物理アドレスにアクセスする。【０１７０】
ＣＬ０内のコア１２１が、ＭＭＩＯ領域内の拡張仮想アドレスを指定するコマンドを取得すると、当該コアは、ＣＬ１へアクセスする。ＭＭＩＯ領域内の拡張仮想アドレスは、ＭＭＩＯ領域内の仮想アドレスと同一である。したがって、以後の動作は、ＭＭＩＯ領域内の仮想アドレスを指定するコマンドと同様である。【０１７１】
なお、コア拡張仮想アドレス空間において、ＭＰ０システムデータ領域の先頭アドレスを予め設定されたシステムデータアドレスに設定し、ＭＰ０ユーザデータ領域の先頭アドレスを予め設定されたユーザデータアドレスに設定しても良い。本実施例において、システムデータアドレスは、アドレス空間の先頭であり、ユーザデータアドレスは、ユーザデータ領域先頭アドレスである。【０１７２】
また、ＣＬ０のＭＰ０のＩＯデバイスにより用いられる拡張仮想アドレスの空間であるＣＬ０ＭＰ０ＩＯ拡張仮想アドレス空間においては、ＣＬ０ＭＰ０コア拡張仮想アドレス空間のうち、ＣＬ０ＭＰ０システムデータ領域、システムデータ予約領域、ユーザデータ予約領域が、保護領域となり、ＩＯデバイスによるアクセスが禁止される。ＣＬ０ＭＰ０ＩＯ拡張仮想アドレス空間におけるＣＬ０ＭＰ０ユーザデータ領域は、ＣＬ０ＭＰ０コア拡張仮想アドレス空間と同様である。【０１７３】
図１８は、実施例２のコア拡張変換テーブルを示す。【０１７４】
コア拡張変換テーブルは、ページテーブルであり、ページ毎のエントリを有する。【０１７５】
一つのページのエントリは、ページ番号（＃）と、領域種別と、拡張仮想アドレスと、ページサイズと、仮想アドレスと、アクセス権とのフィールドを有する。このうち、ページ番号と、領域種別と、ページサイズと、アクセス権との夫々は、コア変換テーブルにおいて対応するフィールドと同一である。拡張仮想アドレスは、コア拡張仮想アドレス空間における当該ページの先頭アドレスを示す。仮想アドレスは、コア仮想アドレス空間における当該ページの先頭アドレスを示す。【０１７６】
コア１２１は、コア拡張変換テーブルを用いることにより、拡張仮想アドレスを仮想アドレスに変換することができる。これにより、コア１２１に対し、仮想アドレスとは異なる配置を有する拡張仮想アドレスを指定してメモリ１４０へアクセスさせることができる。【０１７７】
図１９は、拡張仮想アドレステーブルを示す。【０１７８】
コア拡張変換テーブルは、ページ毎のエントリを有する。【０１７９】
一つのページのエントリは、ページ番号（＃）と、拡張仮想アドレスとのフィールドを有する。ページ番号は、当該ページの識別子を示す。拡張仮想アドレスは、当該ページに予め定められた拡張仮想アドレスを示す。【０１８０】
コア１２１は、拡張仮想アドレステーブルを用いることにより、コア拡張変換テーブルを作成することができる。【０１８１】
図２０は、実施例２のコア変換テーブル作成処理を示す。【０１８２】
本実施例のコア変換テーブル作成処理において、コア１２１は、コア変換テーブル及びコア拡張変換テーブルを作成する。【０１８３】
Ｓ１２１０、Ｓ１２２０は夫々、コア変換テーブル作成処理のＳ２１０、Ｓ２２０と同様である。【０１８４】
その後、Ｓ１２３０においてコア１２１は、コア変換テーブルのベーステーブルと、メモリ容量と、物理アドレステーブルとに基づいて、コア変換テーブルを作成し、アクセス権以外を設定する。更にコア１２１は、コア変換テーブルと、拡張仮想アドレステーブルとに基づいて、コア拡張変換テーブルを作成し、アクセス権以外を設定する。【０１８５】
Ｓ１２５０、Ｓ１２６０、Ｓ１２８０は、コア変換テーブル作成処理のＳ２５０と同様である。【０１８６】
Ｓ１２５０において当該ページがＭＰ間予約領域の条件を満たすと判定された場合（Ｙ）、Ｓ１２７０においてコア１２１は、コア変換テーブル及びコア拡張変換テーブルにおける当該ページをアクセス不可に設定し、処理をＳ１２８０へ移行させる。ここで、コア１２１は、当該ページのアクセス権において、Ｒｅａｄ禁止、Ｗｒｉｔｅ禁止、Ｅｘｅｃｕｔｅ禁止に設定する。【０１８７】
Ｓ１２８０においてすべてのページの処理を終了したと判定された場合（Ｙ）、Ｓ１２９０においてコア１２１は、コア変換テーブル及びコア拡張変換テーブルへのポインタを、コア１２１のＭＳＲにセットすることにより、拡張仮想アドレスの変換を有効化し、このフローを終了する。【０１８８】
以上のコア変換テーブル作成処理によれば、メモリ１４０の容量に応じたコア変換テーブル及びコア拡張変換テーブルを作成することができる。
【実施例３】
【０１８９】
本実施例のＩＯ変換テーブル作成処理において、コア１２１は、コア変換テーブルに基づいてＩＯ変換テーブルを作成する。【０１９０】
図２１は、実施例３のＩＯ変換テーブル作成処理を示す。【０１９１】
Ｓ１３１０においてコア１２１は、ハードウェア構成情報を参照し、メモリ容量、ＭＰ数、接続ＩＯデバイスの情報を取得する。【０１９２】
その後、Ｓ１３２０においてコア１２１は、ＩＯ変換テーブルにおいて、接続ＩＯデバイスに対応するエントリを作成する。その後、Ｓ１３３０においてコア１２１は、コア変換テーブルを読み込む。【０１９３】
Ｓ１３４０においてコア１２１は、コア変換テーブルから未選択のページを選択し、ページサイズが所定のシステムデータページサイズであるか否かを判定する。システムデータページサイズは、例えば４ｋＢである。【０１９４】
Ｓ１３４０においてページサイズがシステムデータページサイズであると判定された場合（Ｙ）、Ｓ１３６０においてコア１２１は、コア変換テーブルにおける当該ページのＥｘｅｃｕｔｅアクセス権が許可（Ｙｅｓ）であるか否かを判定する。【０１９５】
Ｓ１３６０において当該ページのＥｘｅｃｕｔｅアクセス権が許可であると判定された場合（Ｙ）、Ｓ１３７０においてコア１２１は、ＩＯ変換テーブルにおける当該ページのアクセス権をすべて禁止（Access  Denied）に設定し、処理をＳ１４１０へ移行させる。【０１９６】
Ｓ１３６０において当該ページのＥｘｅｃｕｔｅアクセス権が禁止であると判定された場合（Ｎ）、Ｓ１３８０においてコア１２１は、ＩＯ変換テーブルにおける当該ページのアクセス権を、コア変換テーブルにおける当該ページのアクセス権と同一に設定し、処理をＳ１４１０へ移行させる。【０１９７】
Ｓ１３４０においてページサイズがシステムデータページサイズでないと判定された場合（Ｎ）、Ｓ１３５０においてコア１２１は、コア変換テーブルにおける当該ページのＲｅａｄアクセス権又はＷｒｉｔｅアクセス権が禁止（Ｎｏ）であるか否かを判定する。【０１９８】
Ｓ１３５０において当該ページのＲｅａｄアクセス権又はＷｒｉｔｅアクセス権が禁止であると判定された場合（Ｙ）、コア１２１は処理を前述のＳ１３８０へ移行させる。【０１９９】
Ｓ１３５０において当該ページのＲｅａｄアクセス権及びＷｒｉｔｅアクセス権が許可であると判定された場合（Ｎ）、Ｓ１３９０においてコア１２１は当該ページのアクセス権をＲｅａｄ許可及びＷｒｉｔｅ許可（Ｒ／Ｗ）に設定し、処理をＳ１４１０へ移行させる。【０２００】
その後、Ｓ１４１０においてコア１２１は、ＩＯ変換テーブル内のすべてのページの処理を終了したか否かを判定する。【０２０１】
Ｓ１４１０においてすべてのページの処理を終了していないと判定された場合（Ｎ）、コア１２１は処理をＳ１３４０へ戻す。【０２０２】
Ｓ１４１０においてすべてのページの処理を終了したと判定された場合（Ｙ）、Ｓ１４２０においてコア１２１は、自ＭＰ内のＩＯＭＭＵ１２２のレジスタにＩＯ変換テーブルへのポインタをセットすることにより、ＩＯＭＭＵ１２２による仮想アドレスの変換を有効化し、このフローを終了する。【０２０３】
以上のＩＯ変換テーブル作成処理によれば、コア１２１は、コア変換テーブルに基づいてＩＯ変換テーブルを作成することができる。ここでコア１２１は、コア変換テーブルに基づいて、ＩＯ変換テーブルに各ページのアクセス権を設定することができる。【０２０４】
なお、ストレージコントローラ１００が一つのクラスタ１１０であっても良い。この場合、ストレージコントローラ１００からＮＴＢ１２６が省かれ、物理アドレス及び仮想アドレスの空間からＭＭＩＯ領域が省かれる。【０２０５】
以上の各実施例においては、仮想アドレス空間において、ユーザデータ領域のように容量が可変である領域の終端アドレスの後にマージンが配置され、その後に次の種別の領域が配置される。【０２０６】
尚、少なくとも容量可変データの終端アドレスの後にマージンを設けて次の種別のデータを配置するようにすれば、上記実施例と異なる順序で各領域が配置されてもマッピング変更の負荷を低減するという効果を得ることができる。【０２０７】
本発明は、以上の実施例に限定されるものでなく、その趣旨から逸脱しない範囲で、他の様々な形に変更することができる。【０２０８】
本発明の表現のための用語について説明する。第一メモリは、ＭＭ０等に対応する。第二メモリは、ＭＭ１等に対応する。オフセットは、ＭＭＩＯ先頭アドレス等に対応する。第一関連情報は、コア変換テーブル等に対応する。第二関連情報は、ＩＯ変換テーブル等に対応する。第三関連情報は、コア拡張変換テーブル等に対応する。
【符号の説明】
【０２０９】
１００…ストレージコントローラ  １１０…クラスタ  １２０…ＭＰ  １２１…コア  １２２…ＩＯＭＭＵ  １２３…メモリＩ／Ｆ  １２４…ＭＰＩ／Ｆ  １２５…ＤＭＡ  １２６…ＮＴＢ  １３５，１３６，１３７，１３８…ＰＣＩｅＩ／Ｆ  １５０…ドライブＩ／Ｆ  １６０…ホストＩ／Ｆ  １４０…メモリ  ２００…ドライブボックス  ２１０…ドライブ  ３００…ホスト計算機
【図１】
2015162745.tif 000003
【図２】
2015162745.tif 000004
【図３】
2015162745.tif 000005
【図４】
2015162745.tif 000006
【図５】
2015162745.tif 000007
【図６】
2015162745.tif 000008
【図７】
2015162745.tif 000009
【図８】
2015162745.tif 000010
【図９】
2015162745.tif 000011
【図１０】
2015162745.tif 000012
【図１１】
2015162745.tif 000013
【図１２】
2015162745.tif 000014
【図１３】
2015162745.tif 000015
【図１４】
2015162745.tif 000016
【図１５】
2015162745.tif 000017
【図１６】
2015162745.tif 000018
【図１７】
2015162745.tif 000019
【図１８】
2015162745.tif 000020
【図１９】
2015162745.tif 000021
【図２０】
2015162745.tif 000022
【図２１】
2015162745.tif 000023
【国際調査報告】
2015162745.tif 000024
2015162745.tif 000025
2015162745.tif 000026
2015162745.tif 000027