(57)【要約】計算機システムは、メモリとプロセッサを備えたハードウェアで構成されメモリにＯＳプログラムとストレージプログラムが格納されプロセッサで前記ＯＳプログラムとストレージプログラムを実行する、通信回線で相互に接続された複数のサーバを有し、複数のサーバのいずれかが依頼元サーバとなり他のいずれかが依頼先サーバとなる。依頼元サーバが依頼先サーバのデータを読み出すとき、依頼元サーバのプロセッサは、ストレージプログラムを実行することにより、データを読出す要求を依頼先サーバに送り、依頼先サーバのプロセッサは、ＯＳプログラムに組み込まれたストレージメモリドライバを実行することにより、要求されたデータを自身のメモリから読み出して依頼元サーバに送り、依頼元サーバは、ストレージプログラムを実行することにより、前記データを取得する。
2018020630.tif 000002
【特許請求の範囲】
【請求項１】
メモリとプロセッサを備えたハードウェアで構成され前記メモリにＯＳプログラムとストレージプログラムが格納され前記プロセッサで前記ＯＳプログラムと前記ストレージプログラムを実行する、通信回線で相互に接続された複数のサーバを有し、
前記複数のサーバのいずれかが依頼元サーバとなり他のいずれかが依頼先サーバとなり、
前記依頼元サーバが前記依頼先サーバのデータを読み出すとき、
前記依頼元サーバのプロセッサは、前記ストレージプログラムを実行することにより、データを読出す要求を前記依頼先サーバに送り、
前記依頼先サーバのプロセッサは、前記ＯＳプログラムに組み込まれたストレージメモリドライバを実行することにより、要求された前記データを自身のメモリから読み出して前記依頼元サーバに送り、
前記依頼元サーバは、前記ストレージプログラムを実行することにより、前記データを取得する、
計算機システム。
【請求項２】
前記依頼元サーバと前記依頼先サーバを含む前記複数のサーバが予め相互にメモリマップを共有し、
前記依頼元サーバのプロセッサは、前記依頼先サーバのメモリマップを参照して、読みだすデータの前記依頼先サーバのメモリ上の第１のアドレスを特定し、前記依頼先サーバへ、前記第１のアドレスを指定したデータ読出しの要求を送り、
前記依頼先サーバのプロセッサは、前記要求を受けると、前記第１のアドレスからデータを読み出して前記依頼元サーバに送る、
請求項１に記載の計算機システム。
【請求項３】
前記依頼元サーバと前記依頼先サーバを含む前記複数のサーバが予め相互にメモリマップを共有し、
前記依頼先サーバのプロセッサは、前記依頼元サーバのメモリマップを参照して、前記依頼元サーバから要求されたデータを書き込む前記依頼元サーバのメモリ上の第２のアドレスを特定し、読み出した前記データを前記依頼元サーバの前記第２のアドレスに書き込み、
前記依頼元サーバは、自身のメモリ上の前記第２のアドレスから前記データを読み出す、
請求項１に記載の計算機システム。
【請求項４】
前記依頼元サーバは前記依頼先サーバ毎に応答格納領域を備え、
前記依頼先サーバは、前記依頼元サーバの前記第２のアドレスに前記データを書き込むと、前記依頼元サーバにおける自身に対応する応答格納領域に前記要求に対する応答を格納し、
前記依頼元サーバは、前記応答格納領域に格納された前記応答を検出すると、前記第２のアドレスから前記データを読み出す、
請求項３に記載の計算機システム。
【請求項５】
前記依頼元サーバと前記依頼先サーバを含む前記複数のサーバが予め相互にメモリマップを共有し、
前記依頼先サーバのプロセッサは、依頼先サーバ自身のメモリマップと前記依頼元サーバのメモリマップを参照し、前記依頼先サーバのメモリの連続領域から読み出すことができ、かつ、前記依頼元サーバのメモリの連続領域に書き込むことができる転送量を決定し、前記転送量のデータを前記依頼元サーバに送ることを、要求された前記データを送り終えるまで繰り返す、
請求項１に記載の計算機システム。
【請求項６】
前記依頼先サーバのプロセッサは、前記依頼元サーバから指定された前記第１のアドレスが妥当な領域にあるか否か判定し、妥当でなければ前記依頼元サーバにエラーの応答を送る、請求項２に記載の計算機システム。
【請求項７】
前記依頼元サーバが前記依頼先サーバのデータをアトミック更新するとき、
前記依頼元サーバのプロセッサは、前記ストレージプログラムを実行することにより、データのアトミック更新の要求を前記依頼先サーバに送り、
前記依頼先サーバのプロセッサは、前記要求を受けた、前記ＯＳプログラムに組み込まれたストレージメモリドライバが、要求された前記データをアトミック更新する処理を起動し、更新完了の応答を前記依頼元サーバに通知し、
前記依頼元サーバのプロセッサは、前記ストレージプログラムを実行することにより、前記データの更新完了を確認する、
請求項１に記載の計算機システム。
【請求項８】
請求項１に記載の計算機システムにおいて、
前記依頼元サーバは前記依頼先サーバ毎に応答格納領域を備え、
（ａ）前記依頼元サーバおよび前記依頼先サーバを含む前記複数のサーバが相互にメモリマップを共有し、
前記依頼元サーバが前記依頼先サーバのデータを読み出すとき、
前記依頼元サーバのプロセッサは、前記ストレージプログラムの実行で生成されるストレージプロセスにより、
（ｂ）前記依頼先サーバのメモリマップを参照して、読みだすデータの前記依頼先サーバのメモリ上の第１のアドレスを特定し、
（ｃ）前記依頼先サーバへ、前記第１のアドレスを指定したデータ読出しの要求の割り込みを送り、
前記依頼先サーバのプロセッサは、前記依頼元サーバからの前記割り込みを受けると、前記ＯＳプログラムに組み込まれたストレージメモリドライバにより、
（ｄ）前記依頼元サーバのメモリマップを参照して、前記依頼元サーバから要求されたデータを書き込む前記依頼元サーバのメモリ上の第２のアドレスを特定し、
（ｅ）前記第１のアドレスからデータを読みだして前記依頼元サーバの前記第２のアドレスに書き込み、
（ｆ）前記依頼元サーバにおける自身に対応する応答格納領域に前記要求に対する応答を格納し、
前記依頼元サーバは、前記ストレージプロセスにより、
（ｇ）前記応答格納領域に格納された前記応答をポーリングにより検出し、
（ｈ）前記依頼元サーバ自身のメモリ上の前記第２のアドレスから前記データを読み出す、
請求項１に記載の計算機システム。
【請求項９】
メモリとプロセッサを備えたハードウェアで構成され前記メモリにＯＳプログラムとストレージプログラムが格納され前記プロセッサで前記ＯＳプログラムと前記ストレージプログラムを実行する、通信回線で相互に接続された複数のサーバを有する計算機システムによる処理方法であって、
前記複数のサーバのいずれかが依頼元サーバとなり他のいずれかが依頼先サーバとなり、
前記依頼元サーバが前記依頼先サーバのデータを読み出すとき、
前記依頼元サーバのプロセッサは、前記ストレージプログラムを実行することにより、データを読出す要求を前記依頼先サーバに送り、
前記依頼先サーバのプロセッサは、前記ＯＳプログラムに組み込まれたストレージメモリドライバを実行することにより、要求された前記データを自身のメモリから読み出して前記依頼元サーバに送り、
前記依頼元サーバは、前記ストレージプログラムを実行することにより、前記データを取得する、
処理方法。
【請求項１０】
メモリとプロセッサを備えたハードウェアで構成され、通信回線で相互に接続された複数のサーバを有する計算機システムの前記サーバに実行させるためのドライバプログラムであって、
前記複数のサーバのいずれかである依頼元サーバが依頼先サーバのデータを読み出すとき、前記依頼先サーバとして、前記依頼元サーバから、データを読出す要求を受けると、
処理手段が、要求された前記データを自サーバのメモリから読み出す手順と、
前記処理手段が、前記データを前記依頼元サーバに送る手順とを、前記プロセッサに実行させるためのドライバプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ機能を持った計算機システムに関する。
【背景技術】
【０００２】
システムコスト低減を目的に、ストレージ装置のハードウェアとして専用ＬＳＩを用いず、廉価なサーバ向け汎用ハードウェアによりストレージコントローラを構成し、複数のストレージコントローラによりストレージ装置を構成する技術がある。複数のコントローラはそれぞれが他のコントローラのメモリ上の情報を読み込む必要がある。例えば、自コントローラからの他コントローラのメモリ上のデータの読み込みは、他コントローラによる自コントローラのメモリ上へのデータの書き込みにより実現することができる。【０００３】
その場合にＩ／Ｏ処理の応答性能の低下を抑止する技術が特許文献１に開示されている。特許文献１の技術は、コントローラ間でやりとりされる処理要求に優先度を設定し、処理を要求されたコントローラは優先度の高い処理から実行する。これにより、優先度の高いＩ／Ｏ処理の応答性能の低下を抑制することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許ＵＳ９００３０８１Ｂ２
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般に汎用ＯＳ（オペレーティング・システム）は日々改良が重ねられ、利便性の高い新規な機能が順次、組み込まれていくと考えられる。そのため、汎用ＯＳ上の処理プロセスとしてストレージの機能を実現する場合、汎用ＯＳに新規に組み込まれる利便性の高い機能を活用できるようにストレージの処理プロセスを改良していくことが望まれる。また、処理プロセスの改良により利便性の高い機能を活用しながらも開発コストを継続的に低く維持することも望まれる。それらを両立させるために、処理プロセスを改良する際に汎用ＯＳのプログラム構造を踏襲し、修正範囲を狭い範囲に限定することが重要となる。【０００６】
汎用ＯＳの処理プロセスでストレージ機能を実現するサーバは、通常、他サーバから要求された処理を以下に示す（１）〜（３）の一連の処理で実現する。（１）依頼先サーバは依頼元サーバからの要求を汎用ＯＳのカーネルが割込み要求として受領する。（２）依頼先サーバは依頼元サーバからの当該要求を汎用ＯＳ上のストレージ機能を実現する処理プロセスへ通知し、当該処理プロセスを起動する。（３）依頼先サーバの当該処理プロセスが依頼元サーバからの要求を処理する。【０００７】
しかしながら、そのような動作においては、上記（２）において、依頼先サーバで処理プロセスを起動する処理によるオーバヘッドが大きく、Ｉ／Ｏ処理の性能が低下してしまう。これは特許文献１に開示された技術では解決されない。【０００８】
本発明の目的は、汎用ハードウェアによるストレージ処理性能を向上する技術を提供することである。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明の一態様による計算機システムは、メモリとプロセッサを備えたハードウェアで構成され前記メモリにＯＳプログラムとストレージプログラムが格納され前記プロセッサで前記ＯＳプログラムと前記ストレージプログラムを実行する、通信回線で相互に接続された複数のサーバを有し、前記複数のサーバのいずれかが依頼元サーバとなり他のいずれかが依頼先サーバとなる。前記依頼元サーバが前記依頼先サーバのデータを読み出すとき、前記依頼元サーバのプロセッサは、前記ストレージプログラムを実行することにより、データを読出す要求を前記依頼先サーバに送り、前記依頼先サーバのプロセッサは、前記ＯＳプログラムに組み込まれたストレージメモリドライバを実行することにより、要求された前記データを自身のメモリから読み出して前記依頼元サーバに送り、前記依頼元サーバは、前記ストレージプログラムを実行することにより、前記データを取得する。
【発明の効果】
【００１０】
依頼先サーバにおける処理がＯＳプログラムにより実現されるので、依頼先サーバは依頼元サーバから要求を受けたときに処理プロセスを起動する必要がなく、迅速に処理を実行することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態による計算機システムのブロック図である。
【図２】本実施形態による計算機システムのハードウェア構成を示すブロック図である。
【図３】要求格納領域６０の一例を示す図である。
【図４】依頼元要求情報６００の一例を示す図である。
【図５】応答格納領域６１の一例を示す図である。
【図６】応答結果情報６１０の一例を示す図である。
【図７】ストレージメモリマップ６２の一例を示す図である。
【図８】メモリマップ６３の一例を示す図である。
【図９】割込みハンドラ登録テーブル６４の一例を示す図である。
【図１０】自サーバから他サーバへの依頼を伴うリード処理のフローチャートである。
【図１１】依頼元のストレージプロセス５１ａで動作するデータアクセス処理を示すフローチャートである。
【図１２】依頼元のストレージプロセス５１ａで動作する他サーバ依頼処理を示すフローチャートである。
【図１３】依頼先のＯＳカーネル５０ｂで動作する割込み起動処理を示すフローチャートである。
【図１４】依頼先のＯＳカーネル５０ｂで動作するストレージメモリドライバ処理を示すフローチャートである。
【図１５】依頼先のＯＳカーネル５０ｂで動作する、ストレージメモリドライバ処理におけるリード処理を示すフローチャートである。
【図１６】依頼先のＯＳカーネル５０ｂで動作するストレージメモリドライバ処理におけるアトミック更新処理を示すフローチャートである。
【図１７】サーバ全体の初期設定処理を示すフローチャートである。
【図１８】計算機システムの他の構成例を示す図である。
【発明を実施するための形態】
【００１２】
図１に、本発明の実施形態による計算機システムのブロック図である。計算機システムはサーバ１ａ、１ｂを有している。サーバ１ａ、１ｂはいずれも、メモリおよびプロセッサを備えた汎用ハードウェアで構成されている。サーバ１ａは通信部１２ａを有し、サーバ１ｂは通信部１２ｂを有している。サーバ１ａ、１ｂは、それぞれが持つ通信部１２ａ、通信部１２ｂで互いに接続されている。
【００１３】
２つのサーバ１ａ、１ｂは同じの構成であるため、ここではサーバ１ａについて説明する。サーバ１ａ内は、ＣＰＵ１０ａとメモリ１１ａと通信部１２ａが接続された構成である。通信部１２ａは、例えば、ＰＣＩ Ｅｘｐｒｅｓｓで接続されたＮＴＢ（Ｎｏｎ-Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ）等であっても良い。尚、サーバ１ａから見た場合、サーバ１ａを自サーバ、サーバ１ａ以外のサーバ１ｂ等を他サーバと呼ぶ。以下では、サーバ１ａからサーバ１ｂが持つメモリ上のデータを取得する場合の動作概要を説明する。
【００１４】
まず、サーバ１ａのストレージプロセス５１ａにおいて、リード対象データがサーバ１ｂの要求データ読み込み元７０ｂに存在することが検出された場合、サーバ１ａがデータの読み出しを依頼する依頼元サーバとなり、サーバ１ｂが依頼先サーバとなる。サーバ１ａとサーバ１ｂはメモリマップを相互に共有している。
【００１５】
サーバ１ａは、（１）ストレージメモリマップ６２ａを参照し、（２）他サーバの要求格納領域６０ｂにリード対象データのサーバ１ｂでのアドレス、長さ、サーバ１ａにおけるリード対象データの格納先アドレス、応答格納領域６１ｂの情報等を設定する。次にサーバ１ａが、（３）割込レジスタ１５０ａに割り込みを設定すると、通信部１２ａと接続された通信部１２ｂの割込レジスタ１５０ｂに割り込みが通知され、サーバ１ｂに割込みが発生する。
【００１６】
サーバ１ｂは、（４）当該通信部１２ｂの割込みに対応したＯＳカーネル５０ｂのストレージメモリドライバ５２ｂが起動され、ストレージメモリドライバ５２ｂは、ストレージプロセス５１ｂに通知することなく、以下の動作を行う。（５）ストレージメモリドライバ５２ｂは、要求格納領域６０ｂを参照し、また、（６）ストレージメモリマップ６２ｂを参照し、（７）要求データ読込み元７０ｂからリード対象データを読み出してサーバ１ａに転送する（要求データ書込み先７０ａへ書き込む）。更に、サーバ１ｂは、（８）処理結果を応答格納領域６１ａに書き込む。
【００１７】
サーバ１ａでは、（９）応答格納領域６１ａに格納されている処理結果を示す応答を検出したストレージプロセス５１ａが、要求データ書込み先７０ａのリード対象データを読み込み、処理を継続する。なお、サーバ１ｂは、処理結果の応答を、例えば、ポーリングにより検出する。
【００１８】
上述した動作（４）において、サーバ１ｂでは、（５ｘ）ストレージメモリドライバ５２ｂが、ストレージプロセス５１ｂにストレージプロセス５１ａからの処理の依頼を伝達せず、ストレージメモリドライバ５２ｂ自体が当該ストレージプロセス５１ａからの処理の依頼を処理することで、ＯＳカーネル５０ｂがストレージプロセス５１ｂを再起動する処理によるオーバヘッドを削減し、Ｉ／Ｏ処理性能の低下を回避している。すなわち、依頼元サーバ１ａが依頼先サーバ１ｂのデータを読み出すとき、依頼元サーバ１ａのプロセッサは、ストレージプログラムを実行し、それによるストレージプロセス５１ａがデータを読出す要求を依頼先サーバ１ｂに送る。依頼先サーバ１ｂのプロセッサは、ＯＳプログラム（ＯＳカーネル）５０ａに組み込まれたストレージメモリドライバ５２ｂを実行することにより、要求されたデータを自身のメモリから読み出して依頼元サーバ１ａに送る。依頼元サーバ１ａは、ストレージプログラムを実行することにより、そのデータを取得する。依頼先サーバ１ｂにおける処理がＯＳプログラムにより実現されるので、依頼先サーバ１ｂは依頼元サーバ１ａから要求を受けたときに処理プロセスを起動する必要がなく、迅速に処理を実行することができる。
【００１９】
図２は、本実施形態による計算機システムのハードウェア構成を示すブロック図である。
【００２０】
サーバ１は、ＣＰＵ（プロセッサ）１０、メモリ１１、通信部１２、および外部Ｉ／Ｆ１３を有し、それらが互いに接続された構成である。ＣＰＵ１０、メモリ１１、通信部１２、および外部Ｉ／Ｆ１３の組は複数存在し、また、組同士が相互に結合されている。
【００２１】
ＣＰＵ１０は複数のコア１００を持つ。メモリ１１には、ＯＳが管理するＯＳメモリ領域１１０と、ＯＳが管理しないストレージメモリ領域１２０がある。ＯＳメモリ領域１１０には、ＯＳカーネルとして動作するＯＳプログラム５０、ＯＳカーネル上でストレージプロセスとして動作するストレージプログラム５１、ＯＳカーネル上で割込みドライバとして動作するストレージメモリドライバ５２が存在する。ストレージメモリ領域１２０は、各種の管理情報１３０を格納する領域と、ユーザデータ１４０を格納する領域に分けられる。通信部１２はサーバ間の情報伝達や割り込みを実現する。
【００２２】
サーバ１は外部Ｉ／Ｆ１３を介しネットワーク４と接続されおり、サーバ１に、ファイルやブロックによるリード／ライト等のＩ／Ｏ処理を依頼するクライアント２と、サーバ１がユーザデータを格納する記憶装置３が接続されている。また、ネットワーク４には、サーバ１の設定および状態を管理する管理端末５と、サーバ１の障害部位の保守を行うための保守端末６が接続されている。
【００２３】
図３は、要求格納領域６０の一例を示す図である。要求格納領域６０は、ストレージメモリ領域１２０に管理情報１３０として格納される。要求格納領域６０は、サーバ単位に設けられる領域である。サーバ１には、データ読み出しなどの依頼元となる、複数のサーバの複数のストレージプロセスに応じた複数の依頼元要求情報６００を格納する領域が設けられる。図３には、サーバ＃１における、サーバ＃１以外の複数のサーバの複数のストレージプロセス＃０〜＃（ｐ−１）から依頼される要求が格納される要求格納領域６０が示されている。
【００２４】
図４は、依頼元要求情報６００の一例を示す図である。依頼元要求情報６００はストレージメモリ領域１２０に管理情報１３０として格納される。依頼元要求情報６００は、あるサーバのあるストレージプロセスからの同時に依頼を受領する多重度ｒだけのエントリを持つ。依頼元要求情報のエントリの内容としては、当該エントリの有効／無効を示す有効フラグ、依頼先での処理内容を示すアクセス種別（リード／アトミック更新）、依頼先でアクセスする情報の種別を示す要求情報種別、依頼先でアクセスする情報の先頭アドレスを示す要求情報アドレス、依頼先でアクセスする情報の長さを示す要求情報アクセス長、アクセス種別がリードの場合に使用し、依頼元においてリードした情報を格納する先頭アドレスである要求結果格納先アドレス、アクセス種別がアトミック更新の場合に使用し、依頼先においてアトミック更新する内容である更新データ、依頼先においてアトミック更新する範囲を指定する更新マスク、依頼した処理の応答結果を格納する先頭アドレスである応答結果格納先アドレス、応答結果を格納する領域の長さを示す応答結果格納長がある。なお、ここでは、要求アクセス種別として、リードとアトミック更新のみを記載したが、他のアクセス形態があっても良い。
【００２５】
図５は、応答格納領域６１の一例を示す図である。応答格納領域６１は、ストレージメモリ領域１２０に管理情報１３０として格納される。応答格納領域６１はサーバ単位に設けられる領域である。依頼先となる、複数のサーバの複数のストレージプロセスに応じた複数の応答結果情報６１０を格納する領域がある。図５には、サーバ＃０における、サーバ＃０以外の複数のサーバの複数のストレージプロセス＃０〜＃（ｐ−１）からの応答を格納することが可能な応答格納領域６１が示されている。
【００２６】
図６は、応答結果情報６１０の一例を示す図である。応答結果情報６１０はストレージメモリ領域１２０に管理情報１３０として格納される。応答結果情報６１０は、あるサーバのあるストレージプロセスから同時に依頼を受領することを可能にする多重度ｒだけのエントリを持つ。応答結果情報のエントリの内容として、正常／エラーを示す応答結果と、応答結果がエラーの場合の要因等を格納するエラー情報がある。
【００２７】
図７は、ストレージメモリマップ６２の一例を示す図である。ストレージメモリマップ６２はストレージメモリ領域１２０に管理情報１３０として格納される。全てのサーバ１は、自サーバと他サーバのメモリマップを含めた全サーバ分のストレージメモリマップ６２を保持する。各サーバのストレージメモリマップ６２は情報種別毎のメモリマップ６３を持つ。
【００２８】
図８は、メモリマップ６３の一例を示す図である。メモリマップ６３はストレージメモリ領域１２０に管理情報１３０として格納される。メモリマップ６３は、格納する情報が離散的なメモリ領域に分散して格納されている状態に対応するため、複数のエントリを持つ。メモリマップ６３には、有効なエントリ数を格納する有効エントリ数と、各エントリに対する、当該情報種別の情報が格納されている先頭アドレスとその長さである長さとが含まれる。
【００２９】
図９は、割込みハンドラ登録テーブル６４の一例を示す図である。割込みハンドラ登録テーブル６４は、ＯＳメモリ領域１１０に格納される。割込みハンドラ登録テーブル６４は、ＯＳプログラム５０の管理構造を有し、発生した割込みの割込み種別番号に対応した位置に割込みハンドラが登録される。システム起動時あるいは障害等発生後の保守回復時等に、通信部１２の割込み種別番号に対応した位置（図９では割込み種別番号＃ｔ）に、割り込みハンドラとして、ストレージメモリドライバ５２が登録される。尚、同じ割込み種別番号に、割り込みハンドラとして、他のドライバ５３が登録されることもある。
【００３０】
図１０は、自サーバから他サーバへの依頼を伴うリード処理のフローチャートである。ここでは、依頼元が、依頼元サーバ１ａのストレージプロセス５１ａであり、依頼先が、依頼先サーバ１ｂのＯＳカーネル５０ｂである。なお、ここでは動作主体をストレージプロセス５１ａとして説明するが、ＣＰＵ１０ａとしてもよいし、依頼元サーバ１ａとしてもよい。
【００３１】
依頼元となるストレージプロセス５１ａは、ストレージメモリマップ６２ａを参照し（ステップ１０００）、要求格納領域６０ｂに他サーバへの依頼を登録し（ステップ１００１）、割込レジスタ１５０ａに他サーバへの割込みを設定する（ステップ１００２）。
【００３２】
その後、ストレージプロセス５１ａは動作を継続し、応答結果受領を待ち(ステップ１００３)、応答格納領域６１ａに応答結果を検出した後(ステップ１００４)、要求データ書き込み先７０ａから要求データを読込む（ステップ１００５）。
【００３３】
依頼先となるＯＳカーネル５０ｂは、割込みを検出した後（ステップ１０１０）、割込み処理中の更なる割込みを禁止する（ステップ１０１１）。次に、ＯＳカーネル５０ｂは、割込レジスタ１５０ｂをクリアし（ステップ１０１２）、要求格納領域６０ｂに格納された要求を検出する（ステップ１０１３）。ＯＳカーネル５０ｂは、次に、ストレージメモリマップ６２ｂを参照し（ステップ１０１４）、要求データ読み込み元７０ｂから要求データを読み込み（ステップ１０１５）、要求データ書き込み先７０ａに要求データを書込む（ステップ１０１６）。更に、応答格納領域６１ａに応答結果を書き込み(ステップ１０１７)、割り込み禁止を解除する（ステップ１０１８）。
【００３４】
その際、依頼元サーバ１ａは、依頼先サーバ１ｂのメモリマップを参照して、読みだすデータの依頼先サーバ１ｂのメモリ上のアドレス（第１のアドレス）を特定し、依頼先サーバ１ｂへ、第１のアドレスを指定したデータ読出しの要求を送る。依頼先サーバ１ｂは、その要求を受けると、第１のアドレスからデータを読み出して依頼元サーバ１ａに送る。依頼元サーバ１ａが依頼先サーバ１ｂのメモリマップを知っているので、依頼元サーバ１ａは依頼先サーバ１ｂのアドレスを指定してデータの読み出しを要求することができ、所望のデータを容易に取得することができる。
【００３５】
また、依頼先サーバ１ｂは、依頼元サーバ１ａのメモリマップを参照して、依頼元サーバ１ａから要求されたデータを書き込む依頼元サーバ１ａのメモリ上のアドレス（第２のアドレス）を特定し、読み出したデータを依頼元サーバ１ａの第２のアドレスに書き込み、依頼元サーバ１ａは、自身のメモリ上の第２のアドレスからデータを読み出す。依頼先サーバ１ｂが依頼元サーバ１ａのメモリマップを予め知っているので、依頼先サーバ１ｂは依頼元サーバ１ａのアドレスを特定してデータを書き込むことができ、所望のデータを容易に渡すことができる。
【００３６】
また、依頼元サーバ１ａは依頼先サーバ１ｂ毎に応答格納領域を備えている。依頼先サーバ１ｂは、依頼元サーバ１ａの第２のアドレスにデータを書き込むと、依頼元サーバ１ａにおける自身に対応する応答格納領域に要求に対する応答を格納する。依頼元サーバ１ａは、その応答格納領域に格納された応答を検出すると、第２のアドレスからデータを読み出す。依頼元サーバ１ａには依頼先サーバ１ｂ毎に応答格納領域があるので、依頼元サーバ１ａは複数の依頼先サーバ１ｂへの要求を並行して行うことができる。
【００３７】
以下、図１０に示した動作の詳細について説明する。
【００３８】
図１１は、依頼元のストレージプロセス５１ａで動作するデータアクセス処理を示すフローチャートである。ここでは動作主体をストレージプロセス５１ａとして説明するが、ＣＰＵ１０ａとしてもよいし、依頼元サーバ１ａとしてもよい。
【００３９】
データアクセス処理は、ストレージプロセス５１ａが様々な処理をする過程で、メモリ１１ａに格納された管理情報等のデータにアクセスする必要が生じた場合に実行される。
【００４０】
ストレージプロセス５１ａは、まず、発生したデータアクセス要求が他サーバへの依頼を必要とするリード系の要求であるか否か判断する（ステップ１１００）。データアクセス要求が他サーバへの依頼を必要とするリード系の要求である場合（ステップ１１００のＹ）、ストレージプロセス５１ａはステップ１１０７へ進む。データアクセス要求が他サーバへの依頼を必要とするリード系の要求でない場合（ステップ１１００のＮ）、ストレージプロセス５１ａは当該要求がライト要求であると判断し、ライトの実行先が自サーバであるか否か判断する（ステップ１１０１）。
【００４１】
ライトの実行先が自サーバである場合（ステップ１１０１のＹ）、ストレージプロセス５１ａは、ストレージメモリマップ６２ａの自サーバの範囲を参照する（ステップ１１０２）。ライトの実行先が自サーバでない場合（ステップ１１０１のＮ）、ストレージプロセス５１ａは、ストレージメモリマップ６２ａのライト実行先に相当する他サーバの範囲を参照する（ステップ１１０３）。
【００４２】
次に、ストレージプロセス５１ａは、ステップ１１０２またはステップ１１０３で参照したストレージメモリマップ６２ａにおいて、ライト実行先のアクセス範囲が妥当であるか否か判断する（ステップ１１０４）。具体的には、ストレージプロセス５１ａは、ライト実行先の先頭アドレスおよび領域の長さで示される領域が、メモリマップ６３において、エントリの開始アドレスおよび長さで示される範囲に含まれているか否か判断する。
【００４３】
ライト実行先のアクセス範囲が妥当である場合（ステップ１１０４のＹ）、ストレージプロセス５１ａは、ライトを実行し（ステップ１１０５）、処理を終了する。
【００４４】
一方、ライト実行先のアクセス範囲が妥当でない場合（ステップ１１０４のＮ）、ストレージプロセス５１ａは、ライト失敗と判断し、ストレージプロセスの障害処理を実行する（ステップ１１０６）。ストレージプロセスの障害処理は、例えば、当該アクセス障害に関連する詳細な情報をログとして記録し、当該アクセス障害の発生回数をカウントし、実行中のＩ／Ｏ要求をエラーにより実行せずに処理を終了し、ストレージプロセス５１ａ自身をリセットする。
【００４５】
また一方、データアクセス要求が他サーバへの依頼を必要とするリード系の要求である場合（ステップ１１００のＹ）、ストレージプロセス５１ａは、ステップ１１０７において、他サーバへデータの読み出しを依頼する他サーバ依頼処理を実行する（ステップ１１０７）。他サーバ依頼処理の詳細は図１２を用いて後述する。
【００４６】
次に、ストレージプロセス５１ａは、他サーバ依頼処理が正常終了したか否か判断する（ステップ１１０８）。他サーバ依頼処理が正常終了した場合（ステップ１１０８のＹ）、ストレージプロセス５１ａは処理を終了する。一方、他サーバ依頼処理が正常終了しなかった場合（ステップ１１０８のＮ）、ストレージプロセス５１ａは、ステップ１１０６と同様のストレージプロセスの障害処理を実行する（ステップ１１０９）。
【００４７】
図１２は、依頼元のストレージプロセス５１ａで動作する他サーバ依頼処理を示すフローチャートである。ここでは動作主体をストレージプロセス５１ａとして説明するが、ＣＰＵ１０ａとしてもよいし、依頼元サーバ１ａとしてもよい。
【００４８】
まず、ストレージプロセス５１ａは、ストレージメモリマップ６２ａにおける、要求の実行先に相当する他サーバの範囲を参照する（ステップ１２００）。
【００４９】
次に、ストレージプロセス５１ａは、依頼先サーバ１ｂへ送る依頼元要求情報６００を作成する（ステップ１２０１）。このとき、ストレージプロセス５１ａは、自サーバのストレージメモリ領域１２０ａの空き領域に、依頼元要求情報６００として、要求アクセス種別、要求情報アドレス、要求情報アクセス長、応答結果格納先アドレス、応答結果格納長を設定する。更に、ストレージプロセス５１ａは、要求がリード要求の場合は、要求結果格納先アドレスを設定し、要求がアトミック更新要求の場合は、更新データおよび更新マスクを設定する。
【００５０】
次に、ストレージプロセス５１ａは、自サーバのストレージメモリ領域１２０ａの空き領域に作成した依頼元要求情報６００を他サーバのストレージメモリ領域１２０ｂの要求格納領域６０ｂに書込む。続いて、ストレージプロセス５１ａは、有効フラグを有効に設定する(ステップ１２０２)。尚、依頼先サーバ１ｂへ依頼している要求の多重度がｒ以上となっている場合、ストレージプロセス５１ａは、実行中の要求が終了するのを待ってから有効フラグを有効にすることにしても良い。
【００５１】
次に、ストレージプロセス５１ａは、割込レジスタ１５０ａに割り込みを設定する（ステップ１２０３）。割込レジスタ１５０ａに割り込みが設定されると、それが依頼先の割込レジスタ１５０ｂに通知され、依頼先サーバ１ｂに割込みが発生する。
【００５２】
次に、ストレージプロセス５１ａは、依頼先サーバ１ｂからの応答結果を待っている間に計測する応答結果待ち時間をゼロに初期化する（ステップ１２０４）。次に、ストレージプロセス５１ａは、依頼先サーバ１ｂからの応答結果待ち時間が閾値を超過したか否か判断する（ステップ１２０５）。応答結果待ち時間が閾値を超過した場合(ステップ１２０５Ｙ)、ストレージプロセス５１ａは、エラー終了を設定し（ステップ１２１２）、処理を終了する。一方、依頼先サーバ１ｂからの応答結果待ち時間が閾値を超過していない場合(ステップ１２０５Ｎ)、ストレージプロセス５１ａは、応答格納領域６１ａをポーリングし、応答結果が格納されているか否か判断する（ステップ１２０６）。
【００５３】
応答格納領域６１ａに応答結果が格納されていない場合（ステップ１２０６のＮ）、ストレージプロセス５１ａは、応答結果待ち時間を加算し（ステップ１２０７）、ステップ１２０５へ戻る。応答格納領域６１ａに応答結果が格納されている場合（ステップ１２０６のＹ）、ストレージプロセス５１ａは、その応答結果を確認する（ステップ１２０８）、続いて、ストレージプロセス５１ａは、応答結果が正常であるか否か判断する(ステップ１２０９)。
【００５４】
応答結果が正常であれば（ステップ１２０９のＹ）、ストレージプロセス５１ａは、要求がリード要求の場合、要求したデータを読み込み、また、要求がアトミック更新要求の場合、必要であれば実行結果の読み込み等を実行する（ステップ１２１０）。次に、正常終了を設定し（１２１１）、処理を終了する。
【００５５】
一方、応答結果が正常でない場合（ステップ１２０９のＮ）、ストレージプロセス５１ａは、エラー終了という情報を設定し（ステップ１２１２）、処理を終了する。
【００５６】
図１３は、依頼先のＯＳカーネル５０ｂで動作する割込み起動処理を示すフローチャートである。当該割込み起動処理は、ＯＳカーネルが通常機能として実装している処理である。ここでは動作主体をＯＳカーネル５０ｂとして説明するが、ＣＰＵ１０ｂとしてもよいし、依頼先サーバ１ｂとしてもよい。
【００５７】
まず、ＯＳカーネル５０ｂは、割り込みが検出されいるか否か判断する（ステップ１３００）。割り込みが検出されていない場合（ステップ１３００のＮ）、ＯＳカーネル５０ｂは、処理を終了する。割り込みが検出されている場合（ステップ１３００のＹ）、ＯＳカーネル５０ｂは、割り込み処理の競合を避けるため、更なる割り込みが発生するのを禁止する割り込み禁止を設定する（ステップ１３０１）。
【００５８】
次に、ＯＳカーネル５０ｂは、割り込みの種別を判定する（ステップ１３０２）。次に、ＯＳカーネル５０ｂは、判定した割り込みの種別を基に、図９に例示した割り込みハンドラ登録テーブル６４を参照し、実行すべき割り込みハンドラを特定する。実行すべき割り込みハンドラは複数の場合もある。
【００５９】
次に、ＯＳカーネル５０ｂは、当該割り込み種別に対応する全ての割込みハンドラを実行したか否か判断する（ステップ１３０３）。当該割込み種別に対応する全ての割込みハンドラを実行していない場合（ステップ１３０３のＮ）、ＯＳカーネル５０ｂは、当該割り込み種別に対応する残りの割込みハンドラを選択し、実行する（ステップ１３０４）。当該割込み種別に対応する全ての割込みハンドラを実行した場合（ステップ１３０３のＹ）、ＯＳカーネル５０ｂは、割り込み禁止の設定を解除し（ステップ１３０５）、処理を終了する。
【００６０】
図１４は、依頼先のＯＳカーネル５０ｂで動作するストレージメモリドライバ処理を示すフローチャートである。ストレージメモリドライバ処理は、ＯＳカーネル５０ｂで動作する、割り込みにより起動される処理であり、割込みハンドラの１つとしてステップ１３０４で実行される。ここでは動作主体をＯＳカーネル５０ｂとして説明するが、ＣＰＵ１０ｂとしてもよいし、依頼先サーバ１ｂとしてもよい。
【００６１】
割り込みによりストレージメモリドライバ処理が起動されると、ＯＳカーネル５０ｂは、まず、割込レジスタ１５０ｂをクリアすることにより、次の割り込み通知を受領できる状態とする。ただし、ＯＳカーネル５０ｂは、ステップ１３０１にて割り込み禁止を設定しているため、次の割り込み通知を受領しても、ステップ１３０５にて割り込み禁止の設定を解除するまで、割り込みは発生しない。
【００６２】
次に、ＯＳカーネル５０ｂは、ストレージメモリマップ６２ｂの自サーバの範囲を参照する（ステップ１４０１）。次に、ＯＳカーネル５０ｂは、自サーバの要求格納領域６０ｂを参照する（ステップ１４０２）。続いて、ＯＳカーネル５０ｂは、要求格納領域６０ｂに、有効フラグが有効に設定されている依頼元要求情報６００があるか否か判断する（ステップ１４０３）。
【００６３】
有効フラグが有効に設定されている依頼元要求情報６００が無い場合（ステップ１４０３のＮ）、ＯＳカーネル５０ｂは、処理を終了する。一方、有効フラグが有効に設定されている依頼元要求情報６００が有る場合（ステップ１４０３のＹ）、ＯＳカーネル５０ｂは、次に、依頼元要求情報６００のアクセス範囲が妥当か否か判断する（ステップ１４０４）。具体的には、要求情報アドレスと要求情報アドレス長で示される範囲が、要求情報種別に該当するストレージメモリマップ６２ｂのメモリマップ６３において、エントリの開始アドレスとエントリの長さで示される範囲に含まれているかか否かで判断することができる。
【００６４】
依頼元要求情報６００のアクセス範囲が妥当でない場合（ステップ１４０４のＮ）、ＯＳカーネル５０ｂは、応答格納領域６１ａの応答結果にエラーを設定し（ステップ１４０９）、依頼元要求情報の有効フラグを無効に設定し（ステップ１４１０）、ステップ１４０４へ戻る。一方、依頼元要求情報６００のアクセス範囲が妥当である場合（ステップ１４０４のＹ）、ＯＳカーネル５０ｂは、依頼元要求情報６００の要求アクセス種別がリードであるか否か判断する（ステップ１４０５）。
【００６５】
要求アクセス種別がリードである場合（ステップ１４０５のＹ）、ＯＳカーネル５０ｂは、リード処理を実行する（ステップ１４０６）。ステップ１４０６のリード処理は、データを読み出す処理であるが、その詳細については後述する。一方、要求アクセス種別がリードでない場合（ステップ１４０５のＮ）、ＯＳカーネル５０ｂは、アトミック更新処理を実行する（ステップ１４０７）。ステップ１４０７のアトミック更新処理は、中間的な状態を経ずにデータを更新する処理であるが、その詳細については後述する。
【００６６】
次に、ＯＳカーネル５０ｂは、応答格納領域６１ａの応答結果に正常であるということを設定し（ステップ１４０８）、依頼元要求情報６００の有効フラグを無効に設定し（ステップ１４１０）、ステップ１４０４へ戻る。
【００６７】
尚、応答格納領域６１ａの応答結果の格納先は、依頼元要求情報６００の多重度ｒに対応する、依頼元要求情報エントリの番号０〜（ｒ−１）と同じ番号を付与してもよい。
【００６８】
ここに示したように、依頼先サーバ１ｂのＣＰＵ１０ｂにより実行されるＯＳカーネルｂは、依頼元サーバ１ａから指定された依頼先サーバ１ｂでのアクセス先のアドレス（第１のアドレス）が妥当な領域にあるか否か判定し、妥当でなければ依頼元サーバ１ａにエラーの応答を送る。そのため、依頼元サーバ１ａが指定したアドレスが依頼先サーバ１ｂにおいて妥当な領域でなければエラー処理するので、依頼元サーバ１ａと依頼先サーバ１ｂのメモリマップの共有が崩れて、妥当でない領域へのアクセスが生じる前に、それをエラーとすることができる。
【００６９】
図１５は、依頼先のＯＳカーネル５０ｂで動作する、ストレージメモリドライバ処理におけるリード処理を示すフローチャートである。当該リード処理では、以下の（ａ）、（ｂ）を判断しながらデータ転送を実行する。（ａ）ストレージメモリマップ６２ｂの自サーバと他サーバの両方の範囲を参照し、メモリマップ６３の開始アドレスと長さから、転送元（依頼先）と転送先（依頼元）の両方で連続アドレス範囲となるように、一度に転送できるデータ量を決定する。（ｂ）転送元または転送先がアドレス境界に達した場合には、その転送元または転送先の境界のアドレスをメモリマップ６３の次のエントリの開始アドレスにしてメモリマップ６３を更新する。
【００７０】
まず、ＯＳカーネル５０ｂは、ストレージメモリマップ６２ｂのリード要求の依頼元に相当する他サーバの範囲を参照する（ステップ１５００）。次に、ＯＳカーネル５０ｂは、図４に例示した依頼元要求情報６００を参照して、転送元アドレスに要求情報アドレスを設定し、転送先アドレスに要求結果格納先アドレスを設定し、総転送量を初期化する（ステップ１５０１）。
【００７１】
次に、ＯＳカーネル５０ｂは、総転送量は要求情報アクセス長以上か否か判断する（ステップ１５０２）。総転送量が要求情報アクセス長以上の場合（ステップ１５０２のＹ）、ＯＳカーネル５０ｂは処理を終了する。一方、総転送量が要求情報アクセス長未満の場合（ステップ１５０２のＮ）、ＯＳカーネル５０ｂは、次の転送量を決定する（ステップ１５０３）。そのとき、ＯＳカーネル５０ｂは、ストレージメモリマップ６２ｂのメモリマップ６３より、転送元アドレスに転送量を加算したアドレスがエントリ境界を跨がず、かつ、転送先アドレスに転送量を加算したアドレスもエントリ境界を跨がない一定量を転送量として決定する。
【００７２】
次に、ＯＳカーネル５０ｂは、転送元アドレスから転送先アドレスに、転送量として決定した一定量のデータを転送する（ステップ１５０４）。次に、ＯＳカーネル５０ｂは、転送元アドレス、転送先アドレス、総転送量を一定量のデータ分だけ増やすように更新する（ステップ１５０５）。
【００７３】
次に、ＯＳカーネル５０ｂは、転送元アドレスが自サーバに対応するストレージメモリマップ６２ｂにおけるメモリマップ６３のエントリ境界に到達したか否か判断する（ステップ１５０６）。転送元アドレスがメモリマップ６３のエントリ境界に到達していない場合（ステップ１５０６のＮ）、ＯＳカーネル５０ｂは、ステップ１５０８へ進む。一方、転送元アドレスがメモリマップ６３のエントリ境界に到達した場合（ステップ１５０６のＹ）、ＯＳカーネル５０ｂは、転送元アドレスに自サーバに対応するストレージメモリマップ６２ｂのメモリマップ６３の次のエントリ情報を設定する（ステップ１５０７）。
【００７４】
次に、ＯＳカーネル５０ｂは、転送先アドレスが他サーバに対応するストレージメモリマップ６２ｂにおけるメモリマップ６３のエントリ境界に到達したか否か判断する（ステップ１５０８）。転送先アドレスがメモリマップ６３のエントリ境界に到達していない場合（ステップ１５０８のＮ）、ＯＳカーネル５０ｂは、ステップ１５０２へ進む。一方、転送先アドレスがメモリマップ６３のエントリ境界に到達している場合（ステップ１５０８のＹ）、ＯＳカーネル５０ｂは、転送先アドレスに、他サーバに対応するストレージメモリマップ６２ｂのメモリマップ６３の次のエントリ情報を設定する（ステップ１５０９）。
【００７５】
ここに説明したように、依頼先サーバ１ｂののＣＰＵ１０ｂで実行されるＯＳカーネル５０ｂは、依頼先サーバ１ｂ自身のメモリマップと依頼元サーバ１ａのメモリマップを参照し、依頼先サーバ１ｂのメモリの連続領域から読み出すことができ、かつ、依頼元サーバ１ａのメモリの連続領域に書き込むことができる転送量を決定し、その転送量のデータを依頼元サーバ１ａに送ることを、要求されたデータを送り終えるまで繰り返す。これにより、データ転送元である依頼先サーバ１ｂとデータ転送先である依頼元サーバ１ａの両方のメモリにおいて連続領域で処理できるような量のデータを一度に送るので、データを効率よく転送し、迅速に処理を終えることができる。
【００７６】
図１６は、依頼先のＯＳカーネル５０ｂで動作するストレージメモリドライバ処理におけるアトミック更新処理を示すフローチャートである。アトミック更新処理は、依頼先サーバ１ｂにおいてＯＳカーネル５０ｂにより起動されると、ハードウェアが一連の単一処理を実行する。図１６のステップ１６００〜ステップ１６０２の複数ステップに記載されている処理がハードウェアで実行される処理である。
【００７７】
ハードウェアは、まず、要求情報アドレスから要求情報アクセス長だけデータを読み込み（ステップ１６００）、次に、読み込み結果のデータに更新マスクを設定し、更新データにより読み込み結果を更新し（ステップ１６０１）、最後に、更新した読み込み結果のデータを要求情報アドレスに書き込む（ステップ１６０２）。ステップ１６００で読み込んだデータを応答格納領域６１ｂの応答結果格納先アドレスに実行結果として格納することにしてもよい。
【００７８】
図１４および図１６を用いて説明したように、依頼元サーバ１ａが依頼先サーバ１ｂのデータをアトミック更新するとき、依頼元サーバ１ａのＣＰＵ１０ａは、ストレージプログラムを実行することにより、データのアトミック更新の要求を依頼先サーバ１ｂに送る。依頼先サーバ１ｂのＣＰＵ１０ｂは、要求を受けた、ＯＳプログラムに組み込まれたストレージメモリドライバが、要求されたデータをアトミック更新する処理を起動する。アトミック更新処理はハードウェアにより実行される。アトミック更新処理が完了すると、ＣＰＵ１０ｂは、更新完了の応答を依頼元サーバ１ａに通知する。依頼元サーバ１ａのＣＰＵ１０ａは、ストレージプログラムを実行することにより、データの更新完了を確認する。依頼先サーバ１ｂにおけるアトミック更新の処理がＯＳプログラムにより実現されるので、依頼先サーバ１ｂは依頼元サーバ１ａから要求を受けたときに処理プロセスを起動する必要がなく、迅速にアトミック更新処理を実行することができる。
【００７９】
図１７は、サーバ全体の初期設定処理を示すフローチャートである。この初期設定処理は、システム起動時と、障害等発生後の保守回復時とに実行される。
【００８０】
まず、サーバ１のＣＰＵ１０は、ＢＩＯＳ初期設定（ステップ１７００）の後、ブートローダを実行する（ステップ１７０１)。これにより、ＯＳカーネルの初期設定が開始される。
【００８１】
ＯＳカーネルの初期設定では、ブートローダは、一般的な初期設定項目として、メモリ管理の情報を初期化し（ステップ１７０２）、割り込みの状態を初期化し（ステップ１７０３）、プロセス管理の情報を初期化し（ステップ１７０４）、ファイル管理の情報を初期化し（ステップ１７０５）、マルチプロセッサ管理の情報を初期化し（ステップ１７０６）、ドライバ等を初期化し（ステップ１７０７）、ルートファイルシステムを初期化（ステップ１７０８）する。図９に例示した割込みハンドラ登録テーブル６４にストレージメモリドライバ５２を登録する処理は、上記ステップ１７０７のドライバ等の初期化の中で実行しても良い。
【００８２】
次に、ブートローダは、サーバ内メモリマップを確定し（ステップ１７０９）、サーバ間で相互にメモリマップを共有する（ステップ１７１０）。これにより、自サーバと他サーバのストレージメモリマップ６２が参照できるようになる。
【００８３】
最後に、ブートローダは、ストレージプロセスを順次起動する（ステップ１７１１〜１７１２）。
【００８４】
図１８は、計算機システムの他の構成例を示す図である。本構成例でも、依頼元サーバ１ａと依頼先サーバ１ｂは同じ構成である。
【００８５】
依頼元サーバ１ａを例にして共通する構成について説明する。依頼元サーバ１ａではハイパーバイザ２０３０が動作し、ハイパーバイザ２０３０上に１または複数の仮想計算機２０１０、２０２０が構築され、稼働している。ここでは仮想計算機２０１０がストレージ機能を有し、仮想計算機２０２０がホスト機能を果たす。仮想計算機２０１０ａ上で、上述したＯＳカーネル５０ａとストレージプロセス５１ａが動作する。
【００８６】
依頼元サーバ２００１ａにおいて仮想計算機２０１０ａ上で稼働するＯＳカーネル５０ａおよびストレージプロセス５１ａが、図１に示した依頼元サーバ１ａのＯＳカーネル５０ａおよびストレージプロセス５１ａにそれぞれ対応する。依頼先サーバ２００１ｂにおいて仮想計算機２０１０ｂ上で稼働するＯＳカーネル５０ｂおよびストレージプロセス５１ｂが、図１に示した依頼先サーバ１ｂのＯＳカーネル５０ｂおよびストレージプロセス５１ｂにそれぞれ対応する。ＯＳカーネル５０ａ、ストレージプロセス５１ａ、ＯＳカーネル５０ｂ、およびストレージプロセス５１ｂの動作は図１〜図１７を用いて説明したものと同様である。
【００８７】
以上のように、ＯＳプログラム５０、ストレージプログラム５１、およびストレージメモリドライバ５２の各プログラムは、図２に示したように、物理計算機のハードウェア上で動作してもよいし、図１８に示したように、仮想計算機２０１０上で動作してもよい。
【００８８】
また、ホスト５５は、物理的なホスト計算機であっても良いし、図１８に示したように、仮想計算機２０２０上で動作するホストプログラムであってもよい。
【００８９】
また、ストレージ機能を果たす仮想計算機２０１０とホスト機能を果たす仮想計算機２０２０とが、図１８に示したように、同一サーバ２００１であってもよいし、ネットワークを介して接続する異なるサーバ上であってもよい。
【００９０】
以上、本発明の実施形態について述べてきたが、本発明は、これらの実施形態だけに限定されるものではなく、本発明の技術思想の範囲内において、これらの実施形態を組み合わせて使用したり、一部の構成を変更したりしてもよい。
【符号の説明】
【００９１】
１…サーバ、１ａ…依頼元サーバ、１ｂ…依頼先サーバ、１０…ＣＰＵ、１００…コア、１０ａ…ＣＰＵ、１０ｂ…ＣＰＵ、１１…メモリ、１１０…ＯＳメモリ領域、１１ａ…メモリ、１１ｂ…メモリ、１２…通信部、１２０…ストレージメモリ領域、１２０ａ…ストレージメモリ領域、１２０ｂ…ストレージメモリ領域、１２ａ…通信部、１２ｂ…通信部、１３０…管理情報、１５０ａ…割込レジスタ、１５０ｂ…割込レジスタ、２…クライアント、２００１ａ…依頼元サーバ、２００１ｂ…依頼先サーバ、２０１０…仮想計算機、２０１０ａ…仮想計算機、２０１０ｂ…仮想計算機、２０２０…仮想計算機、２０３０…ハイパーバイザ、３…記憶装置、４…ネットワーク、５…管理端末、５０…ＯＳプログラム（ＯＳカーネル）、５０ａ…ＯＳプログラム（ＯＳカーネル）、５０ｂ…ＯＳプログラム（ＯＳカーネル）、５１…ストレージプログラム（ストレージプロセス）、５１ａ…ストレージプログラム（ストレージプロセス）、５１ｂ…ストレージプログラム（ストレージプロセス）、５２…ストレージメモリドライバ、５２ａ…ストレージメモリドライバ、５２ｂ…ストレージメモリドライバ、５３…ドライバ、５５…ホスト、６…保守端末、６０…要求格納領域、６０ａ…要求格納領域、６０ｂ…要求格納領域、６００…依頼元要求情報、６１…応答格納領域、６１ａ…応答格納領域、６１ｂ…応答格納領域、６１０…応答結果情報、６２…ストレージメモリマップ、６２ａ…ストレージメモリマップ、６２ｂ…ストレージメモリマップ、６３…メモリマップ、６４…ハンドラ登録テーブル、７０ａ…要求データ書き込み先、７０ｂ…要求データ読み込み元
【図１】
2018020630.tif 000003
【図２】
2018020630.tif 000004
【図３】
2018020630.tif 000005
【図４】
2018020630.tif 000006
【図５】
2018020630.tif 000007
【図６】
2018020630.tif 000008
【図７】
2018020630.tif 000009
【図８】
2018020630.tif 000010
【図９】
2018020630.tif 000011
【図１０】
2018020630.tif 000012
【図１１】
2018020630.tif 000013
【図１２】
2018020630.tif 000014
【図１３】
2018020630.tif 000015
【図１４】
2018020630.tif 000016
【図１５】
2018020630.tif 000017
【図１６】
2018020630.tif 000018
【図１７】
2018020630.tif 000019
【図１８】
2018020630.tif 000020
【手続補正書】
【提出日】平成30年7月20日(2018.7.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリとプロセッサを備えたハードウェアで構成され前記メモリにＯＳプログラムとストレージプログラムが格納され前記プロセッサで前記ＯＳプログラムと前記ストレージプログラムを実行する、通信回線で相互に接続された複数のサーバを有し、
前記複数のサーバのいずれかが依頼元サーバとなり他のいずれかが依頼先サーバとなり、
前記依頼元サーバが前記依頼先サーバのデータを読み出すとき、
前記依頼元サーバのプロセッサは、前記ストレージプログラムを実行することにより、データを読出す要求を前記依頼先サーバに送り、
前記依頼先サーバのプロセッサは、前記ＯＳプログラムに組み込まれたストレージメモリドライバを実行することにより、要求された前記データを自身のメモリから読み出して前記依頼元サーバに送り、
前記依頼元サーバは、前記ストレージプログラムを実行することにより、前記データを取得する、
計算機システム。
【請求項２】
前記依頼元サーバと前記依頼先サーバを含む前記複数のサーバが予め相互にメモリマップを共有し、
前記依頼元サーバのプロセッサは、前記依頼先サーバのメモリマップを参照して、読みだすデータの前記依頼先サーバのメモリ上の第１のアドレスを特定し、前記依頼先サーバへ、前記第１のアドレスを指定したデータ読出しの要求を送り、
前記依頼先サーバのプロセッサは、前記要求を受けると、前記第１のアドレスからデータを読み出して前記依頼元サーバに送る、
請求項１に記載の計算機システム。
【請求項３】
前記依頼元サーバと前記依頼先サーバを含む前記複数のサーバが予め相互にメモリマップを共有し、
前記依頼先サーバのプロセッサは、前記依頼元サーバのメモリマップを参照して、前記依頼元サーバから要求されたデータを書き込む前記依頼元サーバのメモリ上の第２のアドレスを特定し、読み出した前記データを前記依頼元サーバの前記第２のアドレスに書き込み、
前記依頼元サーバは、自身のメモリ上の前記第２のアドレスから前記データを読み出す、
請求項１に記載の計算機システム。
【請求項４】
前記依頼元サーバは前記依頼先サーバ毎に応答格納領域を備え、
前記依頼先サーバは、前記依頼元サーバの前記第２のアドレスに前記データを書き込むと、前記依頼元サーバにおける自身に対応する応答格納領域に前記要求に対する応答を格納し、
前記依頼元サーバは、前記応答格納領域に格納された前記応答を検出すると、前記第２のアドレスから前記データを読み出す、
請求項３に記載の計算機システム。
【請求項５】
前記依頼元サーバと前記依頼先サーバを含む前記複数のサーバが予め相互にメモリマップを共有し、
前記依頼先サーバのプロセッサは、依頼先サーバ自身のメモリマップと前記依頼元サーバのメモリマップを参照し、前記依頼先サーバのメモリの連続領域から読み出すことができ、かつ、前記依頼元サーバのメモリの連続領域に書き込むことができる転送量を決定し、前記転送量のデータを前記依頼元サーバに送ることを、要求された前記データを送り終えるまで繰り返す、
請求項１に記載の計算機システム。
【請求項６】
前記依頼先サーバのプロセッサは、前記依頼元サーバから指定された前記第１のアドレスが妥当な領域にあるか否か判定し、妥当でなければ前記依頼元サーバにエラーの応答を送る、請求項２に記載の計算機システム。
【請求項７】
前記依頼元サーバが前記依頼先サーバのデータをアトミック更新するとき、
前記依頼元サーバのプロセッサは、前記ストレージプログラムを実行することにより、データのアトミック更新の要求を前記依頼先サーバに送り、
前記依頼先サーバのプロセッサは、前記要求を受けた、前記ＯＳプログラムに組み込まれたストレージメモリドライバが、要求された前記データをアトミック更新する処理を起動し、更新完了の応答を前記依頼元サーバに通知し、
前記依頼元サーバのプロセッサは、前記ストレージプログラムを実行することにより、前記データの更新完了を確認する、
請求項１に記載の計算機システム。
【請求項８】
前記依頼元サーバは前記依頼先サーバ毎に応答格納領域を備え、
（ａ）前記依頼元サーバおよび前記依頼先サーバを含む前記複数のサーバが相互にメモリマップを共有し、
前記依頼元サーバが前記依頼先サーバのデータを読み出すとき、
前記依頼元サーバのプロセッサは、前記ストレージプログラムの実行で生成されるストレージプロセスにより、
（ｂ）前記依頼先サーバのメモリマップを参照して、読みだすデータの前記依頼先サーバのメモリ上の第１のアドレスを特定し、
（ｃ）前記依頼先サーバへ、前記第１のアドレスを指定したデータ読出しの要求の割り込みを送り、
前記依頼先サーバのプロセッサは、前記依頼元サーバからの前記割り込みを受けると、前記ＯＳプログラムに組み込まれたストレージメモリドライバにより、
（ｄ）前記依頼元サーバのメモリマップを参照して、前記依頼元サーバから要求されたデータを書き込む前記依頼元サーバのメモリ上の第２のアドレスを特定し、
（ｅ）前記第１のアドレスからデータを読みだして前記依頼元サーバの前記第２のアドレスに書き込み、
（ｆ）前記依頼元サーバにおける自身に対応する応答格納領域に前記要求に対する応答を格納し、
前記依頼元サーバは、前記ストレージプロセスにより、
（ｇ）前記応答格納領域に格納された前記応答をポーリングにより検出し、
（ｈ）前記依頼元サーバ自身のメモリ上の前記第２のアドレスから前記データを読み出す、
請求項１に記載の計算機システム。
【請求項９】
メモリとプロセッサを備えたハードウェアで構成され前記メモリにＯＳプログラムとストレージプログラムが格納され前記プロセッサで前記ＯＳプログラムと前記ストレージプログラムを実行する、通信回線で相互に接続された複数のサーバを有する計算機システムによる処理方法であって、
前記複数のサーバのいずれかが依頼元サーバとなり他のいずれかが依頼先サーバとなり、
前記依頼元サーバが前記依頼先サーバのデータを読み出すとき、
前記依頼元サーバのプロセッサは、前記ストレージプログラムを実行することにより、データを読出す要求を前記依頼先サーバに送り、
前記依頼先サーバのプロセッサは、前記ＯＳプログラムに組み込まれたストレージメモリドライバを実行することにより、要求された前記データを自身のメモリから読み出して前記依頼元サーバに送り、
前記依頼元サーバは、前記ストレージプログラムを実行することにより、前記データを取得する、
処理方法。
【請求項１０】
メモリとプロセッサを備えたハードウェアで構成され、通信回線で相互に接続された複数のサーバを有する計算機システムの前記サーバに実行させるためのドライバプログラムであって、
前記複数のサーバのいずれかである依頼元サーバが依頼先サーバのデータを読み出すとき、前記依頼先サーバとして、前記依頼元サーバから、データを読出す要求を受けると、
処理手段が、要求された前記データを自サーバのメモリから読み出す手順と、
前記処理手段が、前記データを前記依頼元サーバに送る手順とを、前記プロセッサに実行させるためのドライバプログラム。
【国際調査報告】
2018020630.tif 000021
2018020630.tif 000022
2018020630.tif 000023
2018020630.tif 000024