(57)【特許請求の範囲】
【請求項１】
複数の他の情報処理装置とともに情報処理システムを構築し、該複数の他の情報処理装置からアクセスされる共有メモリを有する情報処理装置において、
前記共有メモリの単位領域毎にアクセスの認証制御に用いる認証情報を記憶する認証情報記憶部と、
前記共有メモリの単位領域毎に各情報処理装置又は各情報処理装置に含まれる各演算処理装置からのリードアクセス及びライトアクセスのそれぞれについてアクセス可否制御に用いる可否情報を記憶する可否情報記憶部と、
他の情報処理装置のうちのいずれかの情報処理装置に異常が発生すると、異常が発生した異常情報処理装置が使用していた共有メモリの単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとする設定部と、
他の情報処理装置又は他の情報処理装置に含まれる演算処理装置から認証情報を含むリードアクセス要求又はライトアクセス要求により共有メモリのいずれかの単位領域へのアクセスがあった場合に、
リードアクセス要求のときは前記可否情報記憶部が記憶するリードアクセスの可否情報に基づいて、リードアクセス要求された単位領域毎にアクセス可否を判定し、ライトアクセス要求のときは前記可否情報記憶部が記憶するライトアクセスの可否情報に基づいて、ライトアクセス要求された単位領域毎にアクセス可否を判定し、
前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが不可であれば判定対象の単位領域へのアクセスを拒否し、
前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが可であれば、前記リードアクセス要求又はライトアクセス要求に含まれる前記認証情報と前記認証情報記憶部が記憶する前記認証情報を比較した結果に基づいて、判定対象の単位領域へのアクセスを許可するか否かを判定する判定部と、
異常が発生した場合に、他の情報処理装置が備える共有メモリのうち使用していた単位領域のデータを読み込んでログを出力するログ出力部と
を有することを特徴とする情報処理装置。
【請求項２】
前記設定部が前記可否情報を不可に設定する前に前記異常情報処理装置が使用していた共有メモリの単位領域に対してキャッシュフラッシュを実行するフラッシュ実行部をさらに有することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記演算処理装置は、ＣＰＵチップ、コア、ストランド、仮想ノード又は仮想ＣＰＵであることを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記異常情報処理装置は、動作するアプリケーションに異常が発生した情報処理装置であることを特徴とする請求項１〜３のいずれか１つに記載の情報処理装置。
【請求項５】
前記共有メモリの単位領域と単位領域毎に使用許可を受けた情報処理装置を対応付ける管理情報を記憶する管理情報記憶部をさらに有し、
前記設定部は、前記管理情報を参照して、前記異常情報処理装置が使用していた共有メモリの単位領域を特定し、特定した単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとすることを特徴とする請求項１〜４のいずれか１つに記載の情報処理装置。
【請求項６】
複数の他の情報処理装置とともに情報処理システムを構築し、該複数の他の情報処理装置からアクセスされる共有メモリを有する情報処理装置による共有メモリ管理方法において、
前記共有メモリの単位領域毎に各情報処理装置又は各情報処理装置に含まれる各演算処理装置からのリードアクセス及びライトアクセスのそれぞれについてアクセス可否制御に用いる可否情報を記憶する可否情報記憶部にアクセス可を示す情報を設定し、
他の情報処理装置のうちのいずれかの情報処理装置に異常が発生すると、異常が発生した異常情報処理装置が使用していた共有メモリの単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとし、
他の情報処理装置又は他の情報処理装置に含まれる演算処理装置から認証情報を含むリードアクセス要求又はライトアクセス要求により共有メモリのいずれかの単位領域へのアクセスがあった場合に、
リードアクセス要求のときは前記可否情報記憶部が記憶するリードアクセスの可否情報に基づいて、リードアクセス要求された単位領域毎にアクセス可否を判定し、ライトアクセス要求のときは前記可否情報記憶部が記憶するライトアクセスの可否情報に基づいて、ライトアクセス要求された単位領域毎にアクセス可否を判定し、
前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが不可であれば判定対象の単位領域へのアクセスを拒否し、
前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが可であれば、前記リードアクセス要求又はライトアクセス要求に含まれる前記認証情報と、前記共有メモリの単位領域毎にアクセスの認証制御に用いる認証情報を比較した結果に基づいて、判定対象の単位領域へのアクセスを許可するか否かを判定し、
異常が発生した場合に、他の情報処理装置が備える共有メモリのうち使用していた単位領域のデータを読み込んでログを出力する
処理を前記情報処理装置が実行する共有メモリ管理方法。
【請求項７】
複数の他の情報処理装置とともに情報処理システムを構築し、該複数の他の情報処理装置からアクセスされる共有メモリを有する情報処理装置で実行される共有メモリ管理プログラムにおいて、
前記共有メモリの単位領域毎に各情報処理装置又は各情報処理装置に含まれる各演算処理装置からのリードアクセス及びライトアクセスのそれぞれについてアクセス可否制御に用いる可否情報を記憶する可否情報記憶部にアクセス可を示す情報を設定し、
他の情報処理装置のうちのいずれかの情報処理装置に異常が発生すると、異常が発生した異常情報処理装置が使用していた共有メモリの単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとし、
他の情報処理装置又は他の情報処理装置に含まれる演算処理装置から認証情報を含むリードアクセス要求又はライトアクセス要求により共有メモリのいずれかの単位領域へのアクセスがあった場合に、
リードアクセス要求のときは前記可否情報記憶部が記憶するリードアクセスの可否情報に基づいて、リードアクセス要求された単位領域毎にアクセス可否を判定し、ライトアクセス要求のときは前記可否情報記憶部が記憶するライトアクセスの可否情報に基づいて、ライトアクセス要求された単位領域毎にアクセス可否を判定し、
前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが不可であれば判定対象の単位領域へのアクセスを拒否し、
前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが可であれば、前記リードアクセス要求又はライトアクセス要求に含まれる前記認証情報と、前記共有メモリの単位領域毎にアクセスの認証制御に用いる認証情報を比較した結果に基づいて、判定対象の単位領域へのアクセスを許可するか否かを判定し、
異常が発生した場合に、他の情報処理装置が備える共有メモリのうち使用していた単位領域のデータを読み込んでログを出力する
処理を前記情報処理装置に実行させる共有メモリ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラムに関する。
【背景技術】
【０００２】
近年、複数の情報処理装置をクロスバースイッチ等で接続した情報処理システムが利用されている。各情報処理装置は、複数のＣＰＵ（Central  Processing  Unit）、メモリ、ＨＤＤ（Hard  Disk  Drive）等を有し、クロスバースイッチ等を介して他の情報処理装置と通信を行う。また、各情報処理装置が有するメモリには、自装置だけがアクセス可能なローカルメモリと他の情報処理装置がアクセス可能な共有メモリがある。
【０００３】
共有メモリについては、他の情報処理装置からのアクセスの許可を制御する技術としてアクセストークンを用いる技術が開発されている。各情報処理装置は、共有メモリの所定の大きさの単位領域毎にメモリトークンと呼ばれるキーをレジスタに記憶し、キーをアクセストークンとして指定した情報処理装置だけに対応する単位領域へのアクセスを許可する。そして、共有メモリを利用する他の情報処理装置に障害が発生すると、共有メモリを有する情報処理装置は、新たなメモリトークンをレジスタに記憶する。そして、共有メモリを有する情報処理装置は、新たなメモリトークンを障害が発生した他の情報処理装置に送信する。しかしながら、障害が発生した情報処理装置は新たなメモリトークンを受信できないためことによって、共有メモリにアクセスしてもメモリトークンが不一致となる。それゆえ、障害が発生した情報処理装置からの共有メモリへのアクセスを防ぐことができる。
【０００４】
また、物理メモリに対してアクセスを許されたプロセッサエレメントの識別子を含むページテーブルを参照して物理メモリに対するプロセッサエレメントによるアクセス可否を判定することで、並列処理プログラムによるメモリ破壊による誤動作を防ぐ技術がある。
【０００５】
また、プロセサが共有メモリをアクセスする際、リード、ライトについて可能・禁止を示すビットパターンに基づいてアクセス違反を判定することで、共有メモリのアクセス保護を実現する技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−１４０４４６号公報
【特許文献２】特開２０１１−７０５２８号公報
【特許文献３】特開昭５９−１２１５６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、共有メモリを利用するある情報処理装置に障害が発生した場合に、アクセストークンの再設定のために、共有メモリ全体に対するアクセスの一時的な停止が行われる。そのため、障害が発生した情報処理装置を除く他の正常な情報処理装置が、共有メモリに対してアクセスを行いたい場合であっても、共有メモリ全体に対するアクセスの停止及び再開の処理により、アクセスが中断してしまうという問題がある。
【０００８】
本発明は、１つの側面では、ある情報処理装置やあるアプリケーションに障害が発生しても、正常な情報処理装置や正常なアプリケーションによる共有メモリへのアクセスについては中断されず、障害が発生した異常な情報処理装置や異常なアプリケーションからの共有メモリへのアクセスについては瞬時に遮断可能にすることを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、情報処理装置は、複数の他の情報処理装置とともに情報処理システムを構築し、該複数の他の情報処理装置からアクセスされる共有メモリを有する。前記情報処理装置は、前記共有メモリの単位領域毎にアクセスの認証制御に用いる認証情報を記憶する認証情報記憶部を有する。前記情報処理装置は、前記共有メモリの単位領域毎に各情報処理装置又は各情報処理装置に含まれる各演算処理装置からのリードアクセス及びライトアクセスのそれぞれについてアクセス可否制御に用いる可否情報を記憶する可否情報記憶部を有する。前記情報処理装置は、他の情報処理装置のうちのいずれかの情報処理装置に異常が発生すると、異常が発生した異常情報処理装置が使用していた共有メモリの単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとする。前記情報処理装置は、他の情報処理装置又は他の情報処理装置に含まれる演算処理装置から認証情報を含むリードアクセス要求又はライトアクセス要求により共有メモリのいずれかの単位領域へのアクセスがあった場合に、リードアクセス要求のときは前記可否情報記憶部が記憶するリードアクセスの可否情報に基づいて、リードアクセス要求された単位領域毎にアクセス可否を判定し、ライトアクセス要求のときは前記可否情報記憶部が記憶するライトアクセスの可否情報に基づいて、ライトアクセス要求された単位領域毎にアクセス可否を判定する。そして、前記情報処理装置は、前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが不可であれば判定対象の単位領域へのアクセスを拒否する。一方、前記情報処理装置は、前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが可であれば、前記リードアクセス要求又はライトアクセス要求に含まれる前記認証情報と前記認証情報記憶部が記憶する前記認証情報を比較した結果に基づいて、判定対象の単位領域へのアクセスを許可するか否かを判定する。また、前記情報処理装置は、異常が発生した場合に、他の情報処理装置が備える共有メモリのうち使用していた単位領域のデータを読み込んでログを出力する。
【発明の効果】
【００１０】
１つの側面では、ある情報処理装置やあるアプリケーションに障害が発生しても、正常な情報処理装置や正常なアプリケーションによる共有メモリへのアクセスについては中断されず、障害が発生した異常な情報処理装置や異常なアプリケーションからの共有メモリへのアクセスについては瞬時に遮断可能にすることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１に係る情報処理システムのハードウェア構成を示す図である。
【図２】図２は、ＣＰＵチップのブロック図である。
【図３】図３は、実施例１に係る情報処理システムのハードウェアの論理構成及びソフトウェアの機能構成を示す図である。
【図４】図４は、管理テーブルの一例を示す図である。
【図５】図５は、アクセス許可レジスタ方式を説明するための図である。
【図６Ａ】図６Ａは、ノード毎のアクセス許可を説明するための第１の図である。
【図６Ｂ】図６Ｂは、ノード毎のアクセス許可を説明するための第２の図である。
【図７】図７は、ノード毎の許可設定レジスタを示す図である。
【図８Ａ】図８Ａは、ＣＰＵチップ毎のアクセス許可を説明するための第１の図である。
【図８Ｂ】図８Ｂは、ＣＰＵチップ毎のアクセス許可を説明するための第２の図である。
【図９】図９は、ＣＰＵチップ毎の許可設定レジスタを示す図である。
【図１０Ａ】図１０Ａは、ストランド毎のアクセス許可を説明するための第１の図である。
【図１０Ｂ】図１０Ｂは、ストランド毎のアクセス許可を説明するための第２の図である。
【図１１】図１１は、ストランド毎の許可設定レジスタを示す図である。
【図１２Ａ】図１２Ａは、ストランド毎のリード／ライト許可を説明するための第１の図である。
【図１２Ｂ】図１２Ｂは、ストランド毎のリード／ライト許可を説明するための第２の図である。
【図１３Ａ】図１３Ａは、ストランド毎のリード許可設定レジスタを示す図である。
【図１３Ｂ】図１３Ｂは、ストランド毎のライト許可設定レジスタを示す図である。
【図１４Ａ】図１４Ａは、共有メモリを使用する処理のフローを示す第１のフローチャート（ノード毎のアクセス可否が設定可能な場合）である。
【図１４Ｂ】図１４Ｂは、共有メモリを使用する処理のフローを示す第２のフローチャート（ノード毎のアクセス可否が設定可能な場合）である。
【図１５Ａ】図１５Ａは、共有メモリを使用する処理のフローを示す第１のフローチャート（ノード毎のリード・ライト許可が設定可能な場合）である。
【図１５Ｂ】図１５Ｂは、共有メモリを使用する処理のフローを示す第２のフローチャート（ノード毎のリード・ライト許可が設定可能な場合）である。
【図１６Ａ】図１６Ａは、共有メモリを使用するノードをセグメント単位で把握する処理のフローを示すフローチャートである。
【図１６Ｂ】図１６Ｂは、共有メモリを使用するプロセスをセグメント単位で把握する処理のフローを示すフローチャートである。
【図１７】図１７は、ノード異常発生時の処理のフローを示すフローチャート（ノード毎のアクセス可否が設定可能な場合）である。
【図１８】図１８は、ノード異常発生時の処理のフローを示すフローチャート（ノード毎のリード・ライト許可が設定可能な場合）である。
【図１９】図１９は、実施例２に係る情報処理システムのハードウェアの論理構成及びソフトウェアの機能構成を示す図である。
【図２０Ａ】図２０Ａは、複数トークン方式を説明するための第１の図である。
【図２０Ｂ】図２０Ｂは、複数トークン方式を説明するための第２の図である。
【図２１Ａ】図２１Ａは、共有メモリを使用する処理のフローを示す第１のフローチャートである。
【図２１Ｂ】図２１Ｂは、共有メモリを使用する処理のフローを示す第２のフローチャートである。
【図２２】図２２は、ノード異常発生時の処理のフローを示すフローチャートである。
【図２３】図２３は、アプリ異常発生時の処理のフローを示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に、本願の開示する情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラムの実施例を図面に基づいて詳細に説明する。なお、実施例は開示の技術を限定するものではない。
【実施例１】
【００１３】
まず、実施例１の記載で用いられる用語について説明する。
「ノード」：  一つ以上のＯＳ（Operating  System）が動作する情報処理装置（コンピュータシステム）。仮想化機能を有するコンピュータシステムでは、ノード内を論理的に複数の論理ドメインに分割して、複数のＯＳを稼働させることもできる。
「ノード間の共有メモリ」：  複数のノード（複数の異なるＯＳ上で動作する複数のアプリケーション）からアクセス（リード／ライト）可能な共有メモリ。
【００１４】
「ホームノード」：  ノード間の共有メモリ領域として設定した物理メモリを有するノード。
「リモートノード」：  ホームノードのメモリを参照したり更新したりするノード。
「セグメント」：  共有メモリの管理単位。セグメント毎に後述するメモリトークンを設定することができる。
「セグメントサイズ」：  共有メモリの管理単位のサイズ。例えば、４ＭＢ（メガバイト）、３２ＭＢ、２５６ＭＢ、２ＧＢ（ギガバイト）等。
【００１５】
「ＲＡ」：  実アドレス。仮想化機能を導入したシステムで論理ドメイン毎に割り振られるアドレス。
「ＰＡ」：  物理アドレス。物理位置によって割り振られるアドレス。
【００１６】
「メモリトークン」：  ホームノード側のＣＰＵチップのメモリトークンレジスタに設定されるメモリアクセスキー。セグメント毎に異なるメモリトークンが設定される。メモリアクセスキーは、トークンとも呼ばれる。
「アクセストークン」：  リモートノードからホームノード（他ノード）の共有メモリにアクセスする際に設定されるメモリアクセスキー。
・リモートノードからのメモリアクセス要求に付加されたアクセストークンとホームノードのメモリトークンレジスタに設定されたメモリトークンに基づいて、ハードウェアがメモリアクセス要求実行の可否を制御する。
・ホームノードのメモリトークンとリモートノードのアクセストークンが一致する場合は、共有メモリにアクセス（リード及びライト）することが可能。
・ホームノードのメモリトークンとリモートノードのアクセストークンが不一致の場合、共有メモリにアクセス（リード及びライト）しようとすると、例外トラップが発生してアクセス不可。
【００１７】
次に、実施例に係る情報処理システムのハードウェア構成について説明する。図１は、実施例に係る情報処理システムのハードウェア構成を示す図である。図１に示すように、情報処理システム２は、３つのノード１と、サービスプロセッサ３とを有する。また、３つのノード１とサービスプロセッサ３はクロスバーネットワーク４で接続される。
【００１８】
ノード１は、２つのＣＰＵチップ１１と、ディスクユニット１２と、通信インターフェイス１３とを有する情報処理装置である。ＣＰＵチップ１１は、２つのコア１４と、２つのメモリ１５を有するチップである。コア１４は、２つのストランド１６を有する演算処理装置である。ストランド１６は、コア１４において命令を実行する単位である。プログラムは、各ストランド１６で実行される。メモリ１５は、コア１４が実行するプログラムやコア１４が使用するデータを記憶するＲＡＭ（Random  Access  Memory）である。
【００１９】
ディスクユニット１２は、２つのＨＤＤ１７を有する記憶装置である。ＨＤＤ１７は、磁気ディスク装置である。通信インターフェイス１３は、クロスバーネットワーク４を介して他のノード１やサービスプロセッサ３と通信するためのインターフェイスである。
【００２０】
サービスプロセッサ３は、ノード１を制御する装置であり、ＣＰＵ３１と、メモリ３２と、通信インターフェイス３３とを有する。ＣＰＵ３１は、メモリ３２が記憶するプログラムを実行する中央処理装置である。メモリ３２は、ＣＰＵ３１によって実行されるプログラムやＣＰＵ３１が使用するデータ等を記憶するＲＡＭである。通信インターフェイス３３は、クロスバーネットワーク４を介してノード１と通信するためのインターフェイスである。
【００２１】
なお、説明の便宜上、図１では３つのノード１を示したが、情報処理システム２は、任意の個数のノード１を有してよい。また、図１では、ノード１が２つのＣＰＵチップ１１を有する場合を示したが、ノード１は、任意の個数のＣＰＵチップ１１を有してよい。また、図１では、ＣＰＵチップ１１が２つのコア１４を有する場合を示したが、ＣＰＵチップ１１は、任意の個数のコア１４を有してよい。また、図１では、コア１４が２つのストランド１６を有する場合を示したが、コア１４は、任意の個数のストランド１６を有してよい。また、図１では、ＣＰＵチップ１１が２つのメモリ１５を有する場合を示したが、ＣＰＵチップ１１は、任意の個数のメモリ１５を有してよい。また、図１では、ディスクユニット１２が２つのＨＤＤ１７を有する場合を示したが、ディスクユニット１２は、任意の個数のＨＤＤ１７を有してよい。
【００２２】
図２は、ＣＰＵチップ１１のブロック図である。図２に示すように、ＣＰＵチップ１１は、２つのコア１４と、メモリ２６と、メモリトークンレジスタ２７と、二次キャッシュ１８と、許可設定レジスタ２ａとを有する。なお、メモリ２６は、図１の２つのメモリ１５と対応する。また、図１において、メモリトークンレジスタ２７、二次キャッシュ１８及び許可設定レジスタ２ａは省略されている。
【００２３】
メモリトークンレジスタ２７は、セグメント毎にメモリトークンを記憶する。二次キャッシュ１８は、コア１４内の一次キャッシュ１９と比較して低速で大容量のキャッシュメモリを有するキャッシュ装置である。
【００２４】
許可設定レジスタ２ａは、セグメント毎に各ノード１についてアクセスを許可するか否かを示す情報を記憶する。許可設定レジスタ２ａは、異常が発生したノード１又は異常が発生したアプリケーションがない場合には、セグメント毎にアクセスを許可する情報を記憶する。許可設定レジスタ２ａは、ノード１に異常が発生すると、異常ノードが使用していたセグメントについて異常ノードからのアクセスを禁止する情報を記憶する。許可設定レジスタ２ａは、アプリケーションに異常が発生すると、異常アプリケーションが使用していたセグメントについて異常アプリケーションが動作しているノード１からのアクセスを禁止する情報を記憶する。
【００２５】
なお、許可設定レジスタ２ａは、各ノード１の代わりに各ＣＰＵチップ１１、各コア１４又は各ストランド１６についてアクセスを許可するか否かを示す情報を記憶してもよい。また、許可設定レジスタ２ａは、アクセスを許可するか否かを示す情報としてリードアクセス及びライトアクセスそれぞれについて許可するか否かを示す情報を記憶してもよい。
【００２６】
コア１４は、一次キャッシュ１９と、２つのストランド１６とを有する。一次キャッシュ１９は、二次キャッシュ１８と比較して高速で小容量のキャッシュメモリを有するキャッシュ装置である。一次キャッシュ１９は、命令キャッシュ２０とデータキャッシュ２１とを有する。命令キャッシュ２０は、命令を記憶し、データキャッシュ２１は、データを記憶する。
【００２７】
ストランド１６は、一次キャッシュ１９から命令及びデータを読み出す。ストランド１６が読み出す命令又はデータが一次キャッシュ１９にない場合には、一次キャッシュ１９は、二次キャッシュ１８から命令又はデータを読み出す。一次キャッシュ１９が読み出す命令又はデータが二次キャッシュ１８にない場合には、二次キャッシュ１８は、メモリ２６から命令又はデータを読み出す。
【００２８】
また、ストランド１６は、メモリ２６に格納するデータを一次キャッシュ１９に書き込む。ストランド１６が一次キャッシュ１９に書き込んだデータは、二次キャッシュ１８に書き込まれ、二次キャッシュ１８からメモリ２６に書き込まれる。
【００２９】
ストランド１６は、命令制御部２２と、命令バッファ２３と、演算部２４と、レジスタ部２５と、アクセストークンレジスタ２８とを有する。命令制御部２２は、命令バッファ２３から命令を読み出し、読み出した命令の実行を制御する。命令バッファ２３は、命令キャッシュ２０から読み出された命令を記憶する。演算部２４は、四則演算等の演算を実行する。レジスタ部２５は、命令の実行に用いられるデータや命令の実行結果等を記憶する。なお、ストランド１６は独自の命令バッファ２３とレジスタ部２５を備えるが、命令制御部２２と演算部２４は２つのストランド１６で共用される。
【００３０】
アクセストークンレジスタ２８は、他のノード１の共有メモリのセグメント毎にアクセストークンを記憶する。ストランド１６で実行されるプロセスは、アクセストークンレジスタ２８に記憶されたアクセストークンを用いて共有メモリにアクセスする。なお、図１では、一次キャッシュ１９及びアクセストークンレジスタ２８は省略されている。また、図２では、アクセストークンレジスタ２８はストランド１６に含まれるが、アクセストークンレジスタ２８の実装は図２の例に限定されることなく、各ストランド１６に対応する各アクセストークンレジスタ２８はストランド１６の外にあってもよい。
【００３１】
次に、実施例に係る情報処理システム２のハードウェアの論理構成及びソフトウェアの機能構成について説明する。ここで、ハードウェアの論理構成とは、ＯＳやアプリケーションが使用する論理的なハードウェアである。図３は、実施例に係る情報処理システム２のハードウェアの論理構成及びソフトウェアの機能構成を示す図である。なお、図３では、１つのノード１を１つの論理ドメインとした場合を示す。１つの論理ドメインでは１つのＯＳが実行される。したがって、図３では、各ノード１で１つのＯＳが実行される。
【００３２】
図３に示すように、ノード１は、論理資源として、４つのＶＣＰＵ４１と、ローカルメモリ４２と、共有メモリ４３と、ディスク装置４４と有する。ＶＣＰＵ４１は、論理的なＣＰＵであり、図１に示した８個のストランド１６のいずれかに対応付けられる。
【００３３】
ローカルメモリ４２は、自ノード１だけからアクセスされるメモリであり、共有メモリ４３は、他のノード１からもアクセス可能なメモリである。ローカルメモリ４２と共有メモリ４３は、図１に示した４つのメモリ１５に対応する。ローカルメモリ４２に２つのメモリ１５を対応付け、共有メモリ４３に他の２つのメモリ１５を対応付けてもよいし、ローカルメモリ４２に３つのメモリ１５を対応付け、共有メモリ４３に他の１つのメモリ１５を対応付けてもよい。ディスク装置４４は、図１に示したディスクユニット１２に対応する。
【００３４】
ハイパーバイザ５０は、情報処理システム２の物理資源を管理してＯＳ６０に論理資源を提供する基本ソフトウェアである。ＯＳ６０は、論理資源を用いてアプリケーションの実行を制御する。ＯＳ６０は、共有メモリ管理部６１を有する。
【００３５】
共有メモリ管理部６１は、共有メモリ４３を管理し、管理テーブル７０と、ノード・プロセス管理部７１と、許可設定部７２と、セグメント情報把握部７３と、キャッシュフラッシュ部７４と、許可解除部７５と、ログ出力部７６とを有する。
【００３６】
管理テーブル７０は、他のノード１が有する共有メモリ４３を含めて情報処理システム２が有する全ての共有メモリ４３について、セグメント毎に共有メモリ４３の情報が登録されるテーブルである。
【００３７】
図４は、管理テーブル７０の一例を示す図である。図４は、ノード番号が「０」であるホームノードが有する管理テーブル７０と、ノード番号が「１」であるホームノードが有する管理テーブル７０と、ノード番号が「２」であるリモートノードが有する管理テーブル７０を示す。図４において、セグメント番号が「０」〜「５」のセグメントは、ノード番号が「０」であるホームノードが物理メモリを有するセグメントである。また、セグメント番号が「１６」〜「２０」のセグメントは、ノード番号が「１」であるホームノードが物理メモリを有するセグメントである。
【００３８】
図４に示すように、ノード番号が「０」及び「１」であるホームノードの管理テーブル７０には、セグメント毎に、セグメント番号と、アドレスと、セグメントサイズと、使用許可ノード番号と、使用中アプリのＰＩＤと、メモリトークンとが登録される。また、ノード番号が「２」であるリモートノードの管理テーブル７０には、ホームノードの管理テーブル７０とほぼ同じ項目が登録されるが、メモリトークンの代わりにアクセストークンが登録される。
【００３９】
セグメント番号は、セグメントを識別する識別番号である。アドレスは、セグメントのＲＡである。なお、アドレスは、ＰＡであってもよい。セグメントサイズは、セグメントのサイズである。使用許可ノード番号は、ホームノードの管理テーブル７０でだけ用いられ、セグメントの使用が許可されたノード１の番号である。
【００４０】
使用中アプリのＰＩＤは、自ノードにおいてセグメントを使用するアプリケーションのプロセスＩＤである。メモリトークンは、セグメントのアクセス許可の制御に用いられるメモリアクセスキーである。アクセストークンは、ホームノードの共有メモリ４３にアクセスする際に使用されるメモリアクセスキーである。
【００４１】
例えば、ノード番号が「０」であるホームノードの管理テーブル７０では、識別番号が「０」であるセグメントは、ＲＡが１６進数で「００００００００」であり、サイズが「２５６ＭＢ」であり、使用が許可されたノードの番号は「０」及び「２」である。また、識別番号が「０」であるセグメントは、ホームノードにおいてプロセスＩＤが「１２３」、「４５６」等のプロセスで使用されており、メモリアクセスキーは１６進数で「０１２３」である。
【００４２】
また、ノード番号が「２」であるリモートノードの管理テーブル７０では、識別番号が「０」であるセグメントは、ＲＡが１６進数で「００００００００」であり、サイズが「２５６ＭＢ」である。また、識別番号が「０」であるセグメントは、自ノードが物理メモリを有する共有メモリ４３ではないので、使用許可ノード番号は使用されない。また、識別番号が「０」であるセグメントは、自ノードにおいてプロセスＩＤが「２１３」、「５４６」等のプロセスで使用されており、メモリアクセスキーは１６進数で「０１２３」である。また、識別番号が「２」であるセグメントは、使用が許可されていないので、使用しているアプリケーションのプロセスＩＤはない。
【００４３】
図３に戻って、ノード・プロセス管理部７１は、共有メモリ４３のセグメント毎に、どのノード１で使用され、どのプロセスで使用されているかを管理する。具体的には、ホームノードのノード・プロセス管理部７１は、リモートノードに共有メモリ４３の使用許可を与える際に、その共有メモリセグメントを使用するリモートノードのノード番号を管理テーブル７０に記録する。共有メモリ４３なので、その共有メモリ４３を使用するリモートノードは複数存在する可能性があり、ノード・プロセス管理部７１は、共有メモリ４３の使用許可を与える度にノード番号を全て記録する。
【００４４】
また、各ノード１のノード・プロセス管理部７１は、共有メモリ４３をアプリケーションに割り当てる際に、その共有メモリ４３を使用するアプリケーションのプロセスＩＤを管理テーブル７０に記録する。共有メモリ４３なので、その共有メモリ４３を使用するアプリケーションは複数存在する可能性があり、ノード・プロセス管理部７１は、共有メモリ４３をアプリケーションに割り当てる度にプロセスＩＤを全て記録する。なお、以下では、アプリケーションは「アプリ」と表される場合もある。
【００４５】
また、ホームノードのノード・プロセス管理部７１は、リモートノードから共有メモリ４３の使用終了の通知があった場合や、リモートノードが停止した場合は、該当リモートノードのノード番号の記録を管理テーブル７０から削除する。また、各ノード１のノード・プロセス管理部７１は、アプリから共有メモリ４３の使用終了の通知があった場合や、アプリが終了した場合は、該当アプリのプロセスＩＤの記録を管理テーブル７０から削除する。
【００４６】
許可設定部７２は、リモートノードに共有メモリ４３の各セグメントの使用を許可する際に、許可したリモートノードに関して許可設定レジスタ２ａの設定を許可に変更する。許可設定レジスタ２ａが各ＣＰＵチップ１１についてアクセス可否を記憶する場合には、許可設定部７２は、許可したリモートノードに含まれるＣＰＵチップ１１に関して許可設定レジスタ２ａの設定を許可に変更する。許可設定レジスタ２ａが各コア１４についてアクセス可否を記憶する場合には、許可設定部７２は、許可したリモートノードに含まれるコア１４に関して許可設定レジスタ２ａの設定を許可に変更する。許可設定レジスタ２ａが各ストランド１６についてアクセス可否を記憶する場合には、許可設定部７２は、許可したリモートノードに含まれるストランド１６に関して許可設定レジスタ２ａの設定を許可に変更する。
【００４７】
セグメント情報把握部７３は、リモードノードに異常が検出された場合に、異常ノードが使用していたセグメントのうち自ノードが物理メモリを有するセグメントを、管理テーブル７０を用いて特定する。また、セグメント情報把握部７３は、リモードノードで動作しているアプリに異常が検出された場合に、異常アプリが使用していたセグメントのうち自ノードが物理メモリを有するセグメントを、管理テーブル７０を用いて特定する。
【００４８】
キャッシュフラッシュ部７４は、後述する許可解除部７５が許可設定レジスタ２ａを変更する直前に、セグメント単位でキャッシュフラッシュを実行する。すなわち、キャッシュフラッシュ部７４は、一次キャッシュ１９又は二次キャッシュ１８にキャッシュされている最新データを共有メモリ４３に書き戻す。キャッシュフラッシュ部７４は、異常ノードが検出された場合には、異常ノードが使用していたセグメントに対してキャッシュフラッシュを実行する。キャッシュフラッシュ部７４は、異常アプリが検出された場合には、異常アプリが使用していたセグメントに対してキャッシュフラッシュを実行する。キャッシュフラッシュ部７４が許可設定レジスタ２ａの変更の直前に、セグメント単位でキャッシュフラッシュを実行することで、キャッシュコヒーレンシを保持した状態で異常ノード又は異常アプリからのアクセスを遮断することができる。
【００４９】
許可解除部７５は、リモードノードに異常が検出された場合に、セグメント情報把握部７３により把握されたセグメントについて、異常ノードからのアクセスを不可にするように許可設定レジスタ２ａを変更する。許可設定レジスタ２ａが、各ＣＰＵチップ１１についてアクセス可否を記憶する場合には、許可解除部７５は、異常ノードに含まれるＣＰＵチップ１１からのアクセスを不可にするように許可設定レジスタ２ａを変更する。許可設定レジスタ２ａが、各コア１４についてアクセス可否を記憶する場合には、許可解除部７５は、異常ノードに含まれるコア１４からのアクセスを不可にするように許可設定レジスタ２ａを変更する。許可設定レジスタ２ａが、各ストラント１６についてアクセス可否を記憶する場合には、許可解除部７５は、異常ノードに含まれるストランド１６からのアクセスを不可にするように許可設定レジスタ２ａを変更する。
【００５０】
許可解除部７５は、リモードノードで動作しているアプリに異常が検出された場合に、セグメント情報把握部７３により把握されたセグメントについて、異常アプリが動作しているノードからのアクセスを不可にするように許可設定レジスタ２ａを変更する。許可設定レジスタ２ａが、各ＣＰＵチップ１１についてアクセス可否を記憶する場合には、許可解除部７５は、異常アプリが動作しているノードに含まれるＣＰＵチップ１１からのアクセスを不可にするように許可設定レジスタ２ａを変更する。許可設定レジスタ２ａが、各コア１４についてアクセス可否を記憶する場合には、許可解除部７５は、異常アプリが動作しているノードに含まれるコア１４からのアクセスを不可にするように許可設定レジスタ２ａを変更する。許可設定レジスタ２ａが、各ストラント１６についてアクセス可否を記憶する場合には、許可解除部７５は、異常アプリが動作しているノードに含まれるストランド１６からのアクセスを不可にするように許可設定レジスタ２ａを変更する。
【００５１】
ログ出力部７６は、許可設定レジスタ２ａがリードアクセス及びライトアクセスそれぞれについて許可するか否かを示す情報を記憶する場合、ライトアクセスが許可されなかった共有メモリセグメントからデータを読み込んでディスク装置４４にログ出力する。異常ノードからのライトアクセスが許可されず異常終了する際に、ログ出力が行われる。
【００５２】
次に、許可設定レジスタ２ａを用いて共有メモリ４３へのアクセスを制御するアクセス許可レジスタ方式について図５〜図１３Ｂを用いて説明する。図５は、アクセス許可レジスタ方式を説明するための図である。図５は、ノード＃２の共有メモリ４３に含まれるセグメント８２をノード＃１がアクセスする場合を示す。なお、図５では、コア１４はストランド１６を１つ有し、アクセストークンレジスタ２８はコア１４に対応付けられる。図５に示すように、ノード＃２のＯＳ６０は、セグメント８２に対応させてメモリトークンレジスタ２７に設定したトークンを管理テーブル７０にセグメント番号に対応させて登録するとともに、ノード＃２で動作するアプリケーション８０に渡す。
【００５３】
ノード＃２で動作するアプリケーション８０は、ＯＳ６０から渡されたトークンをアクセストークン８１としてアドレスリージョン（アドレス及びサイズ）の情報とともに、ノード＃１で動作してセグメント８２をアクセスするアプリケーション８０に送信する。ノード＃１で動作するアプリケーション８０は、受け取ったアクセストークン８１をノード＃１で動作するＯＳ６０に渡す。そして、ノード＃１で動作するＯＳ６０は、アクセストークン８１をアクセストークンレジスタ２８に格納する。
【００５４】
そして、ノード＃１のコア１４は、セグメント８２をアクセスする場合にアクセストークン８１を含む情報をノード＃２に送信する。そして、ノード＃２のチェック部２９が、ノード＃１からセグメント８２へのアクセスに対応する許可設定レジスタ２ａの設定がアクセス可であるか否かを判定し、アクセス可である場合は、さらに、セグメント８２に対応するメモリトークンとアクセストークン８１を比較し、両者が一致するか否かを判定する。そして、ノード＃２のチェック部２９は、両者が一致する場合にセグメント８２へのアクセスを許可する。一方、ノード＃１からセグメント８２へのアクセスに対応する許可設定レジスタ２ａの設定がアクセス不可である場合、又は、セグメント８２に対応するメモリトークンとアクセストークンが一致しない場合には、ノード＃２のチェック部２９がアクセス拒否と判定し、セグメント８２へのアクセスは許可されない。
【００５５】
図６Ａは、ノード毎のアクセス許可を説明するための第１の図であり、図６Ｂは、ノード毎のアクセス許可を説明するための第２の図である。図６Ａは許可設定レジスタ２ａが全ノード１からのアクセス可を示す情報を記憶する場合を示し、図６Ｂは許可設定レジスタ２ａが一部のノード１からのアクセス不可を示す情報を記憶する場合を示す。図６Ａ及び図６Ｂでは、ノード＃０がホームノードであり、ノード＃１〜ノード＃３がそれぞれリモートノード＃Ａ〜リモートノード＃Ｃである。また、図６Ａ及び図６Ｂは、各ノード１は１つのＣＰＵチップ１１を有し、各ＣＰＵチップ１１は１つのコア１４を有する場合を示す。また、セグメント＃０〜セグメント＃Ｎは共有メモリ４３のセグメントを表し、トークン＃Ａ０〜トークン＃ＡＮはセグメント＃０〜セグメント＃Ｎにそれぞれ対応付けられるトークンを表す。
【００５６】
図６Ａに示すように、ホームノードの許可設定レジスタ２ａがセグメント＃０について、全てのノード１に対してアクセス可を示す情報を記憶する。そして、３つのリモートノードのアクセストークンレジスタ２８には、トークン＃Ａ０がセグメント＃０に対応付けられて記憶される。各リモートノードは、アクセストークンレジスタ２８に記憶されたアクセストークンを用いてセグメント＃０へのアクセスが可能である。
【００５７】
リモートノード＃Ａに異常が発生すると、図６Ｂに示すように、ホームノードにおいて許可設定レジスタ２ａのセグメント＃０に対応する情報が、リモートノード＃Ａすなわちノード＃１からのアクセスを不可とするように変更される。したがって、リモートノード＃Ｂ及びリモートノード＃Ｃは、セグメント＃０へ継続してアクセス可能であるが、リモートノード＃Ａからセグメント＃０へのアクセスは遮断される。
【００５８】
図７は、ノード毎の許可設定レジスタ２ａを示す図である。図７では、許可設定レジスタ２ａは、６４ビットのｎｏｄｅ＿ｅｎａｂｌｅ＿ｌｉｓｔで表され、６４個までのノード１についてアクセス可否の情報を記憶できる。ｎｏｄｅ＿ｅｎａｂｌｅ＿ｌｉｓｔは共有メモリセグメントに対応付けられる。
【００５９】
ｎｏｄｅ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｎ］＝０の時、ホームノードは、対応する共有メモリセグメントに対するノード＃ｎからのアクセスを禁止する。ここで、０≦ｎ≦６３である。アクセスが禁止されたノード＃ｎが対応する共有メモリセグメントにアクセスした場合、ノード＃ｎでアクセス例外のトラップが発生する。ｎｏｄｅ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｎ］＝１の時、ノード＃ｎからのアクセスは本レジスタと対応するセグメントのトークンの設定に従ってアクセス可否の検査が行われる。
【００６０】
図８Ａは、ＣＰＵチップ毎のアクセス許可を説明するための第１の図であり、図８Ｂは、ＣＰＵチップ毎のアクセス可否を説明するための第２の図である。図８Ａは許可設定レジスタ２ａが全ＣＰＵチップ１１からのアクセス可を示す情報を記憶する場合を示し、図８Ｂは許可設定レジスタ２ａが一部のＣＰＵチップ１１からのアクセス不可を示す情報を記憶する場合を示す。なお、図８Ａ及び図８Ｂでは、ＣＰＵチップ毎に論理ドメイン９１を作成することが可能である。
【００６１】
図８Ａに示すように、ホームノードの許可設定レジスタ２ａがセグメント＃０について、全てのＣＰＵチップ１１に対してアクセス可を示す情報を記憶する。そして、３つのリモートノードのアクセストークンレジスタ２８には、トークン＃Ａ０がセグメント＃０に対応付けられて記憶される。各リモートＣＰＵチップは、アクセストークンレジスタ２８に記憶されたアクセストークンを用いてセグメント＃０へのアクセスが可能である。
【００６２】
リモートノード＃Ａに異常が発生すると、図８Ｂに示すように、ホームノードにおいて許可設定レジスタ２ａのセグメント＃０に対応する情報が、リモートノード＃Ａに含まれるＣＰＵチップ＃２及びＣＰＵチップ＃３からのアクセスを不可とするように変更される。したがって、ＣＰＵチップ＃４〜ＣＰＵチップ＃７は、セグメント＃０へ継続してアクセス可能であるが、ＣＰＵチップ＃２及びＣＰＵチップ＃３からセグメント＃０へのアクセスは遮断される。
【００６３】
図９は、ＣＰＵチップ毎の許可設定レジスタ２ａを示す図である。図９では、許可設定レジスタ２ａは、６４ビットのｃｐｕ＿ｅｎａｂｌｅ＿ｌｉｓｔで表され、６４個までのＣＰＵチップ１１についてアクセス可否の情報を記憶できる。ｃｐｕ＿ｅｎａｂｌｅ＿ｌｉｓｔは共有メモリセグメントに対応付けられる。
【００６４】
図１０Ａは、ストランド毎のアクセス許可を説明するための第１の図であり、図１０Ｂは、ストランド毎のアクセス可否を説明するための第２の図である。図１０Ａは許可設定レジスタ２ａが全ストランド１６からのアクセス可を示す情報を記憶する場合を示し、図１０Ｂは許可設定レジスタ２ａが一部のストランド１６からのアクセス不可を示す情報を記憶する場合を示す。なお、図１０Ａ及び図１０Ｂでは、ストランド毎に論理ドメイン９１を作成することが可能である。
【００６５】
図１０Ａに示すように、ホームノードの許可設定レジスタ２ａがセグメント＃０について、全てのストランド１６に対してアクセス可を示す情報を記憶する。そして、３つのリモートノードのアクセストークンレジスタ２８には、トークン＃Ａ０がセグメント＃０に対応付けられて記憶される。各リモートストランドは、アクセストークンレジスタ２８に記憶されたアクセストークンを用いてセグメント＃０へのアクセスが可能である。
【００６６】
リモートノード＃Ａに異常が発生すると、図１０Ｂに示すように、ホームノードにおいて許可設定レジスタ２ａのセグメント＃０に対応する情報が、リモートノード＃Ａに含まれるストランド＃２及びストランド＃３からのアクセスを不可とするように変更される。したがって、ストランド＃４〜ストランド＃７は、セグメント＃０へ継続してアクセス可能であるが、ストランド＃２及びストランド＃３からセグメント＃０へのアクセスは遮断される。
【００６７】
図１１は、ストランド毎の許可設定レジスタ２ａを示す図である。図１１では、許可設定レジスタ２ａは、６４×ｍビットのｓｔｒａｎｄ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］で表され、６４×ｍ個までのストランド１６についてアクセス可否の情報を記憶できる。ｓｔｒａｎｄ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］は共有メモリセグメントに対応付けられる。
【００６８】
ｓｔｒａｎｄ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］［ｎ］＝０の時、ホームノードは、対応する共有メモリセグメントに対するストランド＃（６４×ｍ＋ｎ）からのアクセスを禁止する。ここで、ｍは０又は正の整数であり、０≦ｎ≦６３である。アクセスが禁止されたストランド＃（６４×ｍ＋ｎ）が対応する共有メモリセグメントにアクセスした場合、ストランド＃（６４×ｍ＋ｎ）でアクセス例外のトラップが発生する。ｓｔｒａｎｄ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］［ｎ］＝１の時、ストランド＃（６４×ｍ＋ｎ）からのアクセスは本レジスタと対応するセグメントのトークンの設定に従ってアクセス可否の検査が行われる。
【００６９】
図１２Ａは、ストランド毎のリード／ライト許可を説明するための第１の図であり、図１２Ｂは、ストランド毎のリード／ライト許可を説明するための第２の図である。図１２Ａは許可設定レジスタ２ａが全ストランド１６からのリード可及びライト可を示す情報を記憶する場合を示し、図１２Ｂは許可設定レジスタ２ａが一部のストランド１６からのライト不可を示す情報を記憶する場合を示す。
【００７０】
図１２Ａに示すように、ホームノードの許可設定レジスタ２ａがセグメント＃０について、全てのストランド１６に対してリード可及びライト可を示す情報を記憶する。そして、３つのリモートノードのアクセストークンレジスタ２８には、トークン＃Ａ０がセグメント＃０に対応付けられて記憶される。各リモートストランドは、アクセストークンレジスタ２８に記憶されたアクセストークンを用いてセグメント＃０へのアクセスが可能である。
【００７１】
リモートノード＃Ａに異常が発生すると、図１２Ｂに示すように、ホームノードにおいて許可設定レジスタ２ａのセグメント＃０に対応する情報が、リモートノード＃Ａに含まれるストランド＃２及びストランド＃３からのライトを不可とするように変更される。したがって、ストランド＃４〜ストランド＃７は、セグメント＃０へ継続してリード及びライトが可能であり、ストランド＃２及びストランド＃３からセグメント＃０へ継続してリードが可能である。一方、ストランド＃２及びストランド＃３からセグメント＃０へのライトは遮断される。
【００７２】
図１３Ａは、ストランド毎のリード許可設定レジスタを示す図であり、図１３Ｂは、ストランド毎のライト許可設定レジスタを示す図である。ここで、リード許可設定レジスタは、許可設定レジスタ２ａのリード可否を示す情報を記憶するレジスタであり、ライト許可設定レジスタは、許可設定レジスタ２ａのライト可否を示す情報を記憶するレジスタである。図１３Ａでは、リード許可設定レジスタは、６４×ｍビットのｓｔｒａｎｄ＿ｒｅａｄ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］で表される。図１３Ｂでは、ライト許可設定レジスタは、６４×ｍビットのｓｔｒａｎｄ＿ｗｒｉｔｅ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］で表される。
【００７３】
図１３Ａでは、ｓｔｒａｎｄ＿ｒｅａｄ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］［ｎ］＝０の時、ホームノードは、対応する共有メモリセグメントに対するストランド＃（６４×ｍ＋ｎ）からのリードを禁止する。図１３Ｂでは、ｓｔｒａｎｄ＿ｗｒｉｔｅ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］［ｎ］＝０の時、ホームノードは、対応する共有メモリセグメントに対するストランド＃（６４×ｍ＋ｎ）からのライトを禁止する。リード又はライトが禁止されたストランド＃（６４×ｍ＋ｎ）が対応する共有メモリセグメントにそれぞれリード又はライトした場合、ストランド＃（６４×ｍ＋ｎ）でアクセス例外のトラップが発生する。ｓｔｒａｎｄ＿ｒｅａｄ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］［ｎ］＝１の時、ストランド＃（６４×ｍ＋ｎ）からのリードは本レジスタと対応するセグメントのトークンの設定に従ってリード可否の検査が行われる。ｓｔｒａｎｄ＿ｗｒｉｔｅ＿ｅｎａｂｌｅ＿ｌｉｓｔ［ｍ］［ｎ］＝１の時、ストランド＃（６４×ｍ＋ｎ）からのライトは本レジスタと対応するセグメントのトークンの設定に従ってライト可否の検査が行われる。
【００７４】
次に、共有メモリ４３を使用する処理のフローについて説明する。図１４Ａは、共有メモリ４３を使用する処理のフローを示す第１のフローチャート（ノード毎のアクセス可否が設定可能な場合）である。図１４Ｂは、共有メモリ４３を使用する処理のフローを示す第２のフローチャート（ノード毎のアクセス可否が設定可能な場合）である。図１５Ａは、共有メモリ４３を使用する処理のフローを示す第１のフローチャート（ノード毎のリード・ライト許可が設定可能な場合）である。図１５Ｂは、共有メモリ４３を使用する処理のフローを示す第２のフローチャート（ノード毎のリード・ライト許可が設定可能な場合）である。図１４Ａ及び図１４Ｂは、許可設定レジスタ２ａがノード毎にアクセス可否の情報を記憶する場合を示し、図１５Ａ及び図１５Ｂは、許可設定レジスタ２ａがノード毎にリード及びライトのそれぞれについて可否の情報を記憶する場合を示す。
【００７５】
図１４Ａに示すように、ホームノードにおいて、ＯＳ６０が共有メモリ４３を使用するアプリケーションであるアプリＨを起動する（ステップＳ１）。そして、アプリＨは、共有メモリ４３のセグメントＡを獲得する（ステップＳ２）。そして、ホームノードのノード・プロセス管理部７１は、管理テーブル７０にセグメントＡを使用するアプリＨのプロセスＩＤを追加する（ステップＳ３）。
【００７６】
その後、ホームノードは、リモートノードＮに共有メモリ４３のセグメントＡの使用を許可し、セグメントＡの使用許可をリモートノードＮに通知する（ステップＳ４）。その際、ホームノードのノード・プロセス管理部７１は、管理テーブル７０にセグメントＡを使用するリモートノードＮのノード番号を追加する。
【００７７】
一方、リモートノードＮにおいては、ＯＳ６０が共有メモリ４３を使用するアプリＲを起動する（ステップＳ２３）。そして、リモートノードＮの共有メモリ管理部６１は、セグメントＡの使用許可をホームノードから通知されると、アプリＲにセグメントＡを割り当てる（ステップＳ２４）。また、リモートノードＮのノード・プロセス管理部７１は、管理テーブル７０にセグメントＡを使用するアプリＲのプロセスＩＤを追加する（ステップＳ２５）。
【００７８】
そして、ホームノードは、リモードノードＮからのアクセスを可に設定する（ステップＳ５）。すなわち、許可設定部７２は、セグメントＡへのリモードノードＮからのアクセスに関して、ノード毎の許可設定レジスタ２ａを０→１に更新する。そして、ホームノードは、セグメントＡのメモリトークンを設定し（ステップＳ６）、リモートノードＮにセグメントＡのメモリトークンを通知する（ステップＳ７）。そして、ホームノードは、セグメントＡのメモリトークンをＯＳ６０に通知し（ステップＳ８）、ＯＳ６０は管理テーブル７０にセグメントＡのメモリトークンを追加する（ステップＳ９）。
【００７９】
一方、リモートノードＮのアプリＲは、セグメントＡのメモリトークンをホームノードから通知されると、セグメントＡのメモリトークンをＯＳ６０に通知する（ステップＳ２６）。そして、リモートノードＮの共有メモリ管理部６１は、管理テーブル７０にセグメントＡのアクセストークンを追加し（ステップＳ２７）、アクセストークンレジスタ２８にアクセストークンを設定する（ステップＳ２８）。そして、図１４Ｂに示すように、リモートノードＮのアプリＲは、セグメントＡへのアクセスを開始する（ステップＳ２９）。
【００８０】
その後、ホームノードがリモートノードＮの異常を検出した場合（ステップＳ１０、Ｙｅｓ）には、キャッシュフラッシュ部７４が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する（ステップＳ１１）。そして、許可解除部７５が、異常ノードからのアクセスを不可に設定する（ステップＳ１２）。すなわち、許可解除部７５は、異常ノードからセグメントＡへのアクセスについて、ノード毎の許可設定レジスタ２ａを１→０に更新する。
【００８１】
一方、リモートノードＮの異常を検出しない場合（ステップＳ１０、Ｎｏ）には、ホームノードがセグメントＡへのアクセスを受信すると、ホームノードのチェック部２９が、リモートノードＮからセグメントＡへのアクセスに対応する許可設定レジスタ２ａの設定がアクセス可（１）であり、かつ、セグメントＡのメモリトークンとアクセストークンが一致するか否かを判定する（ステップＳ１３）。そして、許可設定レジスタ２ａの設定がアクセス可（１）であり、かつ、メモリトークンとアクセストークンが一致した場合には、チェック部２９は、アクセス可と判定する（ステップＳ１４）。一方、許可設定レジスタ２ａの設定がアクセス不可である場合、又は、セグメントＡのメモリトークンとアクセストークンが一致しない場合には、チェック部２９は、アクセス拒否と判定し（ステップＳ１５）、アクセス拒否をリモートノードＮに通知する。アクセス拒否を通知されると、リモートノードＮは、アクセス拒否のトラップを生成し（ステップＳ３０）、ステップＳ３２へ進む。
【００８２】
リモートノードＮは、セグメントＡへのアクセス開始後、異常が発生しない場合（ステップＳ３１、Ｎｏ）には、アクセス拒否のトラップが発生したか否かを判定する（ステップＳ３２）。その結果、リモートノードＮは、発生しない場合には、アクセス成功と判定し（ステップＳ３３）、発生した場合には、アクセス失敗と判定する（ステップＳ３４）。その後、リモートノードＮは、アクセストークンを解除し（ステップＳ３５）、アプリＲがセグメントＡの使用終了を通知する（ステップＳ３６）。
【００８３】
ホームノードは、リモートノードＮからセグメントＡの使用終了の通知があるか否かを判定し（ステップＳ１６）、通知がない場合には、ステップＳ１０へ戻る。一方、通知がある場合には、キャッシュフラッシュ部７４が、セグメントＡに対してキャッシュフラッシュを実行する（ステップＳ１７）。そして、許可解除部７５が、使用が終了したリモートノードＮからのアクセスを不可に設定する（ステップＳ１８）。すなわち、許可解除部７５は、セグメントＡについて、ノード毎の許可設定レジスタ２ａを１→０に更新する。
【００８４】
そして、ホームノードはセグメントＡのメモリトークンを解除し（ステップＳ１９）、ノード・プロセス管理部７１がリモートノードＮのセグメントＡ使用許可を解除する（ステップＳ２０）。すなわち、ノード・プロセス管理部７１は、管理テーブル７０からリモートノードＮのノード番号を削除する。
【００８５】
そして、ノード・プロセス管理部７１は、管理テーブル７０からセグメントＡのメモリトークンとアプリＨのプロセスＩＤを削除する（ステップＳ２１）。そして、ホームノードは、共有メモリ４３を使用するアプリＨを終了する（ステップＳ２２）。
【００８６】
一方、リモートノードＮのノード・プロセス管理部７１は、管理テーブル７０からセグメントＡのアクセストークンとアプリＲのプロセスＩＤを削除する（ステップＳ３７）。そして、リモートノードＮは、共有メモリ４３を使用するアプリＲを正常終了する（ステップＳ３８）。
【００８７】
また、異常が発生した場合（ステップＳ３１、Ｙｅｓ）には、リモートノードＮは、アクセス失敗と判定し（ステップＳ３９）、ノード・プロセス管理部７１が、管理テーブル７０からセグメントＡのアクセストークンとアプリＲのプロセスＩＤを削除する（ステップＳ４０）。そして、リモートノードＮは、共有メモリ４３を使用するアプリＲを異常終了する（ステップＳ４１）。
【００８８】
このように、リモートノードＮに異常が発生すると、ホームノードの許可解除部７５は、リモートノードＮが使用していたセグメントＡについて、ノード毎の許可設定レジスタ２ａのリモートノードＮに対応する箇所を１→０に更新する。したがって、ホームノードは、異常が発生したリモートノードＮからのセグメントＡへのアクセスを防ぐことができる。
【００８９】
また、許可設定レジスタ２ａがノード毎にリード及びライトのそれぞれについて可否の情報を記憶する場合には、図１５Ａに示すように、ホームノードにおいて、ＯＳ６０が共有メモリ４３を使用するアプリケーションであるアプリＨを起動する（ステップＳ５１）。そして、アプリＨは、共有メモリ４３のセグメントＡを獲得する（ステップＳ５２）。そして、ホームノードのノード・プロセス管理部７１は、管理テーブル７０にセグメントＡを使用するアプリＨのプロセスＩＤを追加する（ステップＳ５３）。
【００９０】
その後、ホームノードは、リモートノードＮに共有メモリ４３のセグメントＡの使用を許可し、セグメントＡの使用許可をリモートノードＮに通知する（ステップＳ５４）。その際、ホームノードのノード・プロセス管理部７１は、管理テーブル７０にセグメントＡを使用するリモートノードＮのノード番号を追加する。
【００９１】
一方、リモートノードＮにおいては、ＯＳ６０が共有メモリ４３を使用するアプリＲを起動する（ステップＳ７３）。そして、リモートノードＮの共有メモリ管理部６１は、セグメントＡの使用許可をホームノードから通知されると、アプリＲにセグメントＡを割り当てる（ステップＳ７４）。また、リモートノードＮのノード・プロセス管理部７１は、管理テーブル７０にセグメントＡを使用するアプリＲのプロセスＩＤを追加する（ステップＳ７５）。
【００９２】
そして、ホームノードは、リモードノードＮからのリードアクセス及びライトアクセスを可に設定する（ステップＳ５５）。すなわち、許可設定部７２は、セグメントＡへのリモードノードＮからのアクセスに関して、ノード毎のリード許可設定レジスタ及びライト許可設定レジスタを０→１に更新する。そして、ホームノードは、セグメントＡのメモリトークンを設定し（ステップＳ５６）、リモートノードＮにセグメントＡのメモリトークンを通知する（ステップＳ５７）。そして、ホームノードは、セグメントＡのメモリトークンをＯＳ６０に通知し（ステップＳ５８）、ＯＳ６０は管理テーブル７０にセグメントＡのメモリトークンを追加する（ステップＳ５９）。
【００９３】
一方、リモートノードＮのアプリＲは、セグメントＡのメモリトークンをホームノードから通知されると、セグメントＡのメモリトークンをＯＳ６０に通知する（ステップＳ７６）。そして、リモートノードＮの共有メモリ管理部６１は、管理テーブル７０にセグメントＡのアクセストークンを追加し（ステップＳ７７）、アクセストークンレジスタ２８にアクセストークンを設定する（ステップＳ７８）。そして、図１５Ｂに示すように、リモートノードＮのアプリＲは、セグメントＡへのアクセスを開始する（ステップＳ７９）。
【００９４】
その後、ホームノードがリモートノードＮの異常を検出した場合（ステップＳ６０、Ｙｅｓ）には、キャッシュフラッシュ部７４が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する（ステップＳ６１）。そして、許可解除部７５が、異常ノードからのライトを不可に設定する（ステップＳ６２）。すなわち、許可解除部７５は、異常ノードからセグメントＡへのアクセスについて、ノード毎のライト許可設定レジスタを１→０に更新する。
【００９５】
一方、リモートノードＮの異常を検出しない場合（ステップＳ６０、Ｎｏ）には、ホームノードがセグメントＡへのアクセスを受信すると、ホームノードのチェック部２９が、リモートノードＮからセグメントＡへのリード／ライトアクセスに対応するリード／ライト許可設定レジスタの設定がリード／ライト可（１）であり、かつ、セグメントＡのメモリトークンとアクセストークンが一致するか否かを判定する（ステップＳ６３）。そして、リード／ライト許可設定レジスタの設定がリード／ライト可（１）であり、かつ、メモリトークンとアクセストークンが一致した場合には、チェック部２９は、アクセス可と判定する（ステップＳ６４）。一方、リード／ライト許可設定レジスタの設定がリード／ライト不可（０）である場合、又は、セグメントＡのメモリトークンとアクセストークンが一致しない場合には、チェック部２９は、アクセス拒否と判定し（ステップＳ６５）、アクセス拒否をリモートノードＮに通知する。アクセス拒否を通知されると、リモートノードＮは、トークン不一致のトラップを生成し（ステップＳ８０）、ステップＳ８２へ進む。
【００９６】
リモートノードＮは、セグメントＡへのアクセス開始後、異常が発生しない場合（ステップＳ８１、Ｎｏ）には、トークン不一致のトラップが発生したか否かを判定する（ステップＳ８２）。その結果、リモートノードＮは、発生しない場合には、アクセス成功と判定し（ステップＳ８３）、発生した場合には、アクセス失敗と判定する（ステップＳ８４）。その後、リモートノードＮは、アクセストークンを解除し（ステップＳ８５）、アプリＲがセグメントＡの使用終了を通知する（ステップＳ８６）。
【００９７】
ホームノードは、リモートノードＮからセグメントＡの使用終了の通知があるか否かを判定し（ステップＳ６６）、通知がない場合には、ステップＳ６０へ戻る。一方、通知がある場合には、キャッシュフラッシュ部７４が、セグメントＡに対してキャッシュフラッシュを実行する（ステップＳ６７）。そして、許可解除部７５が、使用が終了したリモートノードＮからのアクセスを不可に設定する（ステップＳ６８）。すなわち、許可解除部７５は、セグメントＡについて、ノード毎のリード許可設定レジスタ及びライト許可設定レジスタを１→０に更新する。
【００９８】
そして、ホームノードはセグメントＡのメモリトークンを解除し（ステップＳ６９）、ノード・プロセス管理部７１がリモートノードＮのセグメントＡ使用許可を解除する（ステップＳ７０）。すなわち、ノード・プロセス管理部７１は、管理テーブル７０からリモートノードＮのノード番号を削除する。
【００９９】
そして、ノード・プロセス管理部７１は、管理テーブル７０からセグメントＡのメモリトークンとアプリＨのプロセスＩＤを削除する（ステップＳ７１）。そして、ホームノードは、共有メモリ４３を使用するアプリＨを終了する（ステップＳ７２）。
【０１００】
一方、リモートノードＮのノード・プロセス管理部７１は、管理テーブル７０からセグメントＡのアクセストークンとアプリＲのプロセスＩＤを削除する（ステップＳ８７）。そして、リモートノードＮは、共有メモリ４３を使用するアプリＲを正常終了する（ステップＳ８８）。
【０１０１】
また、異常が発生した場合（ステップＳ８１、Ｙｅｓ）には、リモートノードＮは、ライト失敗と判定し（ステップＳ８９）、セグメントＡに対するリードを実行し、ログとして出力する（ステップＳ９０）。そして、ノード・プロセス管理部７１が、管理テーブル７０からセグメントＡのアクセストークンとアプリＲのプロセスＩＤを削除する（ステップＳ９１）。そして、リモートノードＮは、共有メモリ４３を使用するアプリＲを異常終了する（ステップＳ９２）。
【０１０２】
このように、リモートノードＮに異常が発生すると、ホームノードの許可解除部７５は、リモートノードＮが使用していたセグメントＡについて、ノード毎のライト許可設定レジスタのリモートノードＮに対応する箇所を１→０に更新する。したがって、ホームノードは、異常が発生したリモートノードＮからのセグメントＡへのアクセスを防ぐことができる。
【０１０３】
次に、共有メモリ４３を使用するノード１をセグメント単位で把握する処理のフローについて説明する。図１６Ａは、共有メモリ４３を使用するノード１をセグメント単位で把握する処理のフローを示すフローチャートである。
【０１０４】
図１６Ａに示すように、ホームノードのノード・プロセス管理部７１は、リモートノードへの共有メモリ４３のセグメント使用の許可時であるか否かを判定する（ステップＳ１０１）。その結果、リモートノードへの共有メモリ４３のセグメント使用の許可時である場合には、ホームノードのノード・プロセス管理部７１は、管理テーブル７０にセグメントを使用するノード１のノード番号を追加する（ステップＳ１０２）。
【０１０５】
一方、リモートノードへの共有メモリ４３のセグメント使用の許可時でない場合、すなわち、使用終了時は、ホームノードのノード・プロセス管理部７１は、管理テーブル７０からセグメントの使用を終了したノード１のノード番号を削除する（ステップＳ１０３）。
【０１０６】
このように、ホームノードのノード・プロセス管理部７１は、セグメントを使用するノード１のノード番号を、管理テーブル７０を用いて管理することによって、セグメントを使用するリモートノードを把握することができる。
【０１０７】
次に、共有メモリ４３を使用するプロセスをセグメント単位で把握する処理のフローについて説明する。図１６Ｂは、共有メモリ４３を使用するプロセスをセグメント単位で把握する処理のフローを示すフローチャートである。
【０１０８】
図１６Ｂに示すように、リモートノードのノード・プロセス管理部７１は、セグメント割り当て時であるか否かを判定する（ステップＳ１１１）。その結果、セグメント割り当て時である場合には、リモートノードのノード・プロセス管理部７１は、管理テーブル７０にセグメントを使用するアプリケーションのＰＩＤを追加する（ステップＳ１１２）。
【０１０９】
一方、セグメント割り当て時でない場合、すなわち、解放時は、リモートノードのノード・プロセス管理部７１は、管理テーブル７０からセグメントを解放するアプリケーションのＰＩＤを削除する（ステップＳ１１３）。
【０１１０】
このように、リモートノードのノード・プロセス管理部７１は、セグメントを使用するアプリケーションのＰＩＤを、管理テーブル７０を用いて管理することによって、セグメントを使用するアプリケーションを把握することができる。
【０１１１】
次に、ノード異常発生時の処理のフローについて説明する。図１７は、ノード異常発生時の処理のフローを示すフローチャート（ノード毎のアクセス可否が設定可能な場合）であり、図１８は、ノード異常発生時の処理のフローを示すフローチャート（ストランド毎のリード・ライト許可が設定可能な場合）である。図１７は、許可設定レジスタ２ａがノード毎にアクセス可否の情報を記憶する場合を示し、図１８は、許可設定レジスタ２ａがストランド毎にリード及びライトのそれぞれについて可否の情報を記憶する場合を示す。
【０１１２】
図１７に示すように、ホームノードの許可設定部７２は、リモートノードからのアクセスを可に設定する（ステップＳ１２１）。すなわち、許可設定部７２は、リモートノードが使用する共有メモリセグメントに関して、ノード毎の許可設定レジスタ２ａを０→１に更新する。そして、ホームノードは、リモートノードが使用する共有メモリセグメントに関して、メモリトークンを設定し（ステップＳ１２２）、リモートノードにトークンを通知する（ステップＳ１２３）。
【０１１３】
そして、トークンを通知されたリモートノードは、アクセストークンを設定し（ステップＳ１２４及びステップＳ１２５）、共有メモリセグメントへのアクセスを開始する（ステップＳ１２６及びステップＳ１２７）。そして、１つのリモートノードに異常が発生する（ステップＳ１２８）と、ホームノードは、リモートノードの異常を検出する（ステップＳ１２９）。
【０１１４】
そして、キャッシュフラッシュ部７４が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する（ステップＳ１３０）。そして、許可解除部７５が、異常ノードからのアクセスを不可に設定する（ステップＳ１３１）。すなわち、許可解除部７５は、異常ノードが使用していた共有メモリセグメントへの異常ノードからのアクセスについて、ノード毎のアクセス許可設定レジスタ２ａを１→０に更新する。
【０１１５】
その後、異常が発生したリモートノードは、共有メモリセグメントにアクセスすると、アクセスに失敗し（ステップＳ１３２）、異常終了する（ステップＳ１３３）。また、正常なリモートノードは、共有メモリセグメントにアクセスすると、アクセスに成功する（ステップＳ１３４）。その後、正常なリモートノードは、共有メモリセグメントの使用を終了すると、アクセストークンの設定を解除し（ステップＳ１３５）、正常終了する（ステップＳ１３６）。
【０１１６】
このように、許可解除部７５が、異常ノードが使用していた共有メモリセグメントへの異常ノードからのアクセスについて、ノード毎の許可設定レジスタ２ａを１→０に更新する。したがって、ホームノードは、異常ノードからのアクセスのみを瞬時に遮断することができる。
【０１１７】
また、許可設定レジスタ２ａがストランド毎にリード及びライトのそれぞれについて可否の情報を記憶する場合には、図１８に示すように、許可設定部７２は、リモートノードのストランド１６からのリード及びライトを可に設定する（ステップＳ１４１）。すなわち、ホームノードの許可設定部７２は、リモートノードのストランド１６が使用する共有メモリセグメントへのアクセスに関して、ストランド毎のリード許可設定レジスタ及びライト許可設定レジスタを０→１に更新する。そして、ホームノードは、リモートノードのストランド１６が使用する共有メモリセグメントに関して、メモリトークンを設定し（ステップＳ１４２）、リモートノードのストランド１６にトークンを通知する（ステップＳ１４３）。
【０１１８】
そして、トークンを通知されたリモートノードのストランド１６は、アクセストークンを設定し（ステップＳ１４４及びステップＳ１４５）、共有メモリセグメントへのアクセスを開始する（ステップＳ１４６及びステップＳ１４７）。そして、１つのリモートノードに異常が発生する（ステップＳ１４８）と、ホームノードは、リモートノードの異常を検出する（ステップＳ１４９）。
【０１１９】
そして、キャッシュフラッシュ部７４が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する（ステップＳ１５０）。そして、許可解除部７５が、異常ノードのストランド１６からのライトを不可に設定する（ステップＳ１５１）。すなわち、許可解除部７５は、異常ノードが使用していた共有メモリセグメントについて、異常ノードのストランド１６のライト許可設定レジスタを１→０に更新する。
【０１２０】
その後、異常が発生したリモートノードは、共有メモリセグメントにライトすると、ライトに失敗する（ステップＳ１５２）。そこで、異常が発生したリモートノードは、ライトが失敗した共有メモリセグメントをリードすると、リードは成功し、リード結果をログ出力する（ステップＳ１５３）。そして、異常が発生したリモートノードは、異常終了する（ステップＳ１５４）。また、正常なリモートノードは、共有メモリセグメントにアクセスすると、アクセスに成功する（ステップＳ１５５）。その後、正常なリモートノードは、共有メモリセグメントの使用を終了すると、アクセストークンの設定を解除し（ステップＳ１５６）、正常終了する（ステップＳ１５７）。
【０１２１】
このように、許可解除部７５が、異常ノードが使用していた共有メモリセグメントについて、異常ノードに含まれるストランド１６のライト許可設定レジスタを１→０に更新するので、ホームノードは、異常ノードからのアクセスのみを瞬時に遮断することができる。
【０１２２】
上述してきたように、実施例１では、許可設定レジスタ２ａが、共有メモリ４３のセグメント毎に、各ノード１について、アクセス可否を示す情報を記憶する。そして、ノード１に異常が発生すると、許可解除部７５が、異常ノードが使用していたセグメントについて、許可設定レジスタ２ａの異常ノードに対応する情報をアクセス不可に設定する。そして、リモートノードから共有メモリセグメントへのアクセス要求があると、チェック部２９が、許可設定レジスタ２ａ、アクセス要求に含まれるアクセストークン及びメモリトークンレジスタ２７に基づいてハードウェアによりアクセスの可否を判定する。したがって、ホームノードは、異常ノードが使用していたセグメントについて、異常ノードからのアクセスを瞬時に遮断するとともに、正常ノードからのアクセスを継続許可することができる。
【０１２３】
なお、許可設定レジスタ２ａは、各ノード１についてアクセス可否を示す情報を記憶する代わりに、各ＣＰＵチップ１１、各コア１４、各ストランド１６、各仮想ノード又は各仮想ＣＰＵについてアクセス可否を示す情報を記憶してもよい。ここで、仮想ノードとは、１つの論理ドメイン９１を構成するノードであり、仮想ＣＰＵとは、論理ＣＰＵである。また、許可設定レジスタ２ａは、アクセス可否を示す情報を記憶する代わりに、リードアクセス及びライトアクセスについてそれぞれ可否を示す情報を記憶してもよい。
【０１２４】
ＣＰＵチップ毎の許可設定レジスタ２ａを使用して、ＣＰＵチップ毎にアクセス許可を設定できるようにすると、ＣＰＵチップ毎に異なるトークン制御が可能となるため、ＣＰＵチップ毎にドメイン分割して仮想ノードを作成できるようになる。同様に、コア毎の許可設定レジスタ２ａを使用して、コア毎にアクセス許可を設定できるようにすると、コア毎に異なるトークン制御が可能となるため、コア毎にドメイン分割して仮想ノードを作成できるようになる。ＣＰＵチップ単位よりコア単位の方が、仮想ノードの粒度が小さくなる。さらに同様に、ストランド毎の許可設定レジスタ２ａを使用して、ストランド毎にアクセス許可を設定できるようにすると、ストランド毎に異なるトークン制御が可能となるため、ストランド毎にドメイン分割して仮想ノードを作成できるようになる。ＣＰＵチップ単位やコア単位よりストランド単位の方が、さらに仮想ノードの粒度が小さくなる。
【０１２５】
また、実施例１では、ノード１に異常が発生すると、許可解除部７５が許可設定レジスタ２ａを設定する前に、キャッシュフラッシュ部７４が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する。したがって、ホームノードは、キャッシュコヒーレンスを維持した状態で、異常ノードが使用していた共有メモリセグメントへの異常ノードからのアクセスを遮断することができる。
【０１２６】
また、ノード１に異常が発生する代わりに、アプリに異常が発生してもよい。アプリに異常が発生した場合には、異常アプリが使用していた共有メモリセグメントについて、許可設定レジスタ２ａの異常アプリが動作しているノード１に対応する情報をアクセス不可に設定する。
【０１２７】
また、実施例１では、ＣＰＵチップ／コア／ストランド毎のリード／ライト許可設定レジスタを使用して、ＣＰＵチップ／コア／ストランド毎にリード／ライト許可を設定できる。このため、特定ＣＰＵチップ／コア／ストランドからの書き込みのみを不可（読み込みは可能）に設定することができる。したがって、異常ノード／異常アプリケーションからの不当な書き込みによるデータ破壊を防止しつつ、異常ノード／異常アプリケーションで共用メモリのデータを読み込んでディスクにログを書き出すなどのリカバリ処理を実行することができる。
【０１２８】
また、実施例１では、管理テーブル７０に使用を許可したノード１の番号を登録する場合について説明したが、管理テーブル７０に使用を許可したＣＰＵチップ１１、コア１４又はストランド１６を登録してもよい。この場合、ＣＰＵチップ１１、コア１４又はストランド１６が情報処理装置として機能する。
【０１２９】
また、実施例１では、アプリがセグメントを獲得する毎に使用を許可する場合について説明したが、アプリに一定の範囲の共有メモリ４３が割り当てられた際に、割り当てられた共有メモリ４３に含まれるセグメントについて使用を許可してもよい。
【実施例２】
【０１３０】
ところで、上記実施例１では、許可設定レジスタ２ａの異常ノードに対応する情報をアクセス不可にすることによって、異常ノードからのアクセスを遮断する場合について説明した。しかしながら、許可設定レジスタ２ａを用いることなく、セグメント毎にトークンを複数用いて異常ノードからのアクセスを遮断することもできる。そこで、実施例２では、セグメント毎にトークンを複数用いる複数トークン方式により異常ノードからのアクセスを遮断する情報処理システムについて説明する。
【０１３１】
なお、実施例２に係る情報処理システムは、共有メモリ管理部の機能構成及びメモリトークンレジスタの構成が実施例１に係る情報処理システム２と異なるので、主に共有メモリ管理部の機能構成及びメモリトークンレジスタの構成について説明する。
【０１３２】
図１９は、実施例２に係る情報処理システムのハードウェアの論理構成及びソフトウェアの機能構成を示す図である。なお、ここでは説明の便宜上、図３に示した各部と同様の役割を果たす機能部については同一符号を付すこととしてその詳細な説明を省略する。図１９に示すように、実施例２に係る共有メモリ管理部６１ａは、管理テーブル７０と、ノード・プロセス管理部７１と、メモリトークン設定部７２ａと、セグメント情報把握部７３と、キャッシュフラッシュ部７４と、メモリトークン設定解除部７５ａとを有する。
【０１３３】
メモリトークン設定部７２ａは、ノード毎又はアプリ毎に異なるトークンをメモリトークンレジスタに設定する。すなわち、実施例２に係るメモリトークンレジスタは、セグメント毎に複数のトークンを記憶する。ホームノードのメモリトークン設定部７２ａは、リモートノードの共有メモリ管理部６１ａにノード専用又はアプリ専用のトークンを通知する。そして、各リモートノードの共有メモリ管理部６１ａは、ノード専用又はアプリ専用のトークンをアクセストークンレジスタ２８に設定する。
【０１３４】
メモリトークン設定解除部７５ａは、メモリトークンの設定を解除する。リモートノードの異常が検出された場合、メモリトークン設定解除部７５ａは、異常ノードが使用していたセグメントのうち自ノードが物理メモリを有するセグメントの異常ノードに対応するトークンの設定のみを解除する。これにより、異常ノードからのアクセスのみを瞬時にハードウェア的に遮断する。また、アプリの異常が検出された場合、メモリトークン設定解除部７５ａは、異常アプリが使用していたセグメントのうち自ノードが物理メモリを有するセグメンの異常アプリに対応するトークンの設定のみを解除する。これにより、異常アプリからのアクセスのみを瞬時にハードウェア的に遮断する。
【０１３５】
図２０Ａは、複数トークン方式を説明するための第１の図であり、図２０Ｂは、複数トークン方式を説明するための第２の図である。図２０Ａは、ホームノードのメモリトークンレジスタ２７ａがセグメント毎に複数のトークンを記憶し、各リモートノードのアクセストークンレジスタ２８がノード専用のトークンを記憶する場合を示す。図２０Ｂは、ホームノードのメモリトークンレジスタ２７ａの一部が削除された場合を示す。
【０１３６】
図２０Ａに示すように、メモリトークンレジスタ２７ａは、セグメント＃０に対応して３つのトークン＃Ａ０〜トークン＃Ｃ０を記憶する。トークン＃Ａ０はリモートノード＃Ａ専用であり、トークン＃Ｂ０はリモートノード＃Ｂ専用であり、トークン＃Ｃ０はリモートノード＃Ｃ専用である。同様に、メモリトークンレジスタ２７ａは、セグメント＃１に対応して３つのトークン＃Ａ１〜トークン＃Ｃ１を記憶し、セグメント＃Ｎに対応して３つのトークン＃ＡＮ〜トークン＃ＣＮを記憶する。各リモートノードは、アクセストークンレジスタ２８に記憶されたアクセストークンを用いてセグメント＃０〜セグメント＃Ｎへのアクセスが可能である。
【０１３７】
リモートノード＃Ａに異常が発生すると、図２０Ｂに示すように、リモートノード＃Ａにおいて使用されていたセグメント＃０〜セグメント＃Ｎに対応するトークン＃Ａ０〜トークン＃ＡＮがホームノードにおいてメモリトークンレジスタ２７ａから削除される。したがって、リモートノード＃Ｂ及びリモートノード＃Ｃは、セグメント＃０〜セグメント＃Ｎへ継続してアクセス可能であるが、リモートノード＃Ａからセグメント＃０〜セグメント＃Ｎへのアクセスは遮断される。
【０１３８】
次に、共有メモリ４３を使用する処理のフローについて説明する。図２１Ａは、共有メモリ４３を使用する処理のフローを示す第１のフローチャートであり、図２１Ｂは、共有メモリ４３を使用する処理のフローを示す第２のフローチャートである。図２１Ａに示すように、ホームノードにおいて、ＯＳ６０が共有メモリ４３を使用するアプリケーションであるアプリＨを起動する（ステップＳ１６１）。そして、アプリＨは、共有メモリ４３のセグメントＡを獲得する（ステップＳ１６２）。そして、ホームノードのノード・プロセス管理部７１は、管理テーブル７０にセグメントＡを使用するアプリＨのプロセスＩＤを追加する（ステップＳ１６３）。
【０１３９】
その後、ホームノードは、リモートノードＮに共有メモリ４３のセグメントＡの使用を許可し、セグメントＡの使用許可をリモートノードＮに通知する（ステップＳ１６４）。その際、ホームノードのノード・プロセス管理部７１は、管理テーブル７０にセグメントＡを使用するリモートノードＮのノード番号を追加する。
【０１４０】
一方、リモートノードＮにおいては、ＯＳ６０が共有メモリ４３を使用するアプリＲを起動する（ステップＳ１８１）。そして、リモートノードＮの共有メモリ管理部６１は、セグメントＡの使用許可をホームノードから通知されると、アプリＲにセグメントＡを割り当てる（ステップＳ１８２）。また、リモートノードＮのノード・プロセス管理部７１は、管理テーブル７０にセグメントＡを使用するアプリＲのプロセスＩＤを追加する（ステップＳ１８３）。
【０１４１】
そして、ホームノードは、ノード毎に異なるメモリトークンをセグメントＡのメモリトークンレジスタ２７ａに設定し（ステップＳ１６５）、各リモートノードにセグメントＡの異なるメモリトークンを通知する（ステップＳ１６６）。そして、ホームノードは、セグメントＡのメモリトークンをＯＳ６０に通知し（ステップＳ１６７）、ＯＳ６０は管理テーブル７０にセグメントＡのメモリトークンを追加する（ステップＳ１６８）。
【０１４２】
一方、リモートノードＮのアプリＲは、セグメントＡのメモリトークンをホームノードから通知されると、セグメントＡのメモリトークンをＯＳ６０に通知する（ステップＳ１８４）。そして、リモートノードＮの共有メモリ管理部６１は、管理テーブル７０にセグメントＡのアクセストークンを追加し（ステップＳ１８５）、アクセストークンレジスタ２８にアクセストークンを設定する（ステップＳ１８６）。そして、図２１Ｂに示すように、リモートノードＮのアプリＲは、セグメントＡへのアクセスを開始する（ステップＳ１８７）。
【０１４３】
その後、ホームノードがリモートノードＮの異常を検出した場合（ステップＳ１６９、Ｙｅｓ）には、キャッシュフラッシュ部７４が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する（ステップＳ１７０）。そして、メモリトークン設定解除部７５ａが、異常ノードが使用していた共有メモリセグメントに関して、メモリトークンレジスタ２７ａから異常ノードに対応するメモリトークンの設定のみ解除する（ステップＳ１７１）。
【０１４４】
一方、リモートノードＮの異常を検出しない場合（ステップＳ１６９、Ｎｏ）には、ホームノードがセグメントＡへのアクセスを受信すると、ホームノードのチェック部２９がセグメントＡのメモリトークンとアクセストークンが一致するか否かを判定し（ステップＳ１７２）、一致した場合にはアクセス可と判定する（ステップＳ１７３）。一方、一致しない場合には、チェック部２９は、アクセス拒否と判定し（ステップＳ１７４）、アクセス拒否をリモートノードＮに通知する。アクセス拒否を通知されると、リモートノードＮは、トークン不一致のトラップを生成し（ステップＳ１８８）、ステップＳ１９０へ進む。
【０１４５】
リモートノードＮは、セグメントＡへのアクセス開始後、異常が発生しない場合（ステップＳ１８９、Ｎｏ）には、トークン不一致のトラップが発生したか否かを判定する（ステップＳ１９０）。その結果、リモートノードＮは、発生しない場合には、アクセス成功と判定し（ステップＳ１９１）、発生した場合には、アクセス失敗と判定する（ステップＳ１９２）。その後、リモートノードＮは、アクセストークンを解除し（ステップＳ１９３）、アプリＲがセグメントＡの使用終了を通知する（ステップＳ１９４）。
【０１４６】
ホームノードは、リモートノードＮからセグメントＡの使用終了の通知があるか否かを判定し（ステップＳ１７５）、通知がない場合には、ステップＳ１６９へ戻る。一方、通知がある場合には、キャッシュフラッシュ部７４が、セグメントＡに対してキャッシュフラッシュを実行する（ステップＳ１７６）。
【０１４７】
そして、ホームノードはセグメントＡのメモリトークンを解除し（ステップＳ１７７）、ノード・プロセス管理部７１がリモートノードＮのセグメントＡ使用許可を解除する（ステップＳ１７８）。すなわち、ノード・プロセス管理部７１は、管理テーブル７０からリモートノードＮのノード番号を削除する。
【０１４８】
そして、ノード・プロセス管理部７１は、管理テーブル７０からセグメントＡのメモリトークンとアプリＨのプロセスＩＤを削除する（ステップＳ１７９）。そして、ホームノードは、共有メモリ４３を使用するアプリＨを終了する（ステップＳ１８０）。
【０１４９】
一方、リモートノードＮのノード・プロセス管理部７１は、管理テーブル７０からセグメントＡのアクセストークンとアプリＲのプロセスＩＤを削除する（ステップＳ１９５）。そして、リモートノードＮは、共有メモリ４３を使用するアプリＲを正常終了する（ステップＳ１９６）。
【０１５０】
また、異常が発生した場合（ステップＳ１８９、Ｙｅｓ）には、リモートノードＮは、アクセス失敗と判定し（ステップＳ１９７）、ノード・プロセス管理部７１が、管理テーブル７０からセグメントＡのアクセストークンとアプリＲのプロセスＩＤを削除する（ステップＳ１９８）。そして、リモートノードＮは、共有メモリ４３を使用するアプリＲを異常終了する（ステップＳ１９９）。
【０１５１】
このように、リモートノードＮに異常が発生すると、メモリトークン設定解除部７５ａが、メモリトークンレジスタ２７ａから異常ノードに対応するメモリトークンの設定のみ解除する。したがって、ホームノードは、異常が発生したリモートノードＮからのセグメントＡへのアクセスを防ぐことができる。
【０１５２】
次に、ノード異常発生時の処理のフローについて説明する。図２２は、ノード異常発生時の処理のフローを示すフローチャートである。図２２に示すように、ホームノードのメモリトークン設定部７２ａは、リモートノードが使用する共有メモリセグメントに関して、ノード毎に異なるメモリトークンをメモリトークンレジスタ２７ａに設定する（ステップＳ２０１）。そして、メモリトークン設定部７２ａは、リモートノードにトークンを通知する（ステップＳ２０２）。
【０１５３】
そして、トークンを通知されたリモートノードは、アクセストークンを設定し（ステップＳ２０３及びステップＳ２０４）、共有メモリセグメントへのアクセスを開始する（ステップＳ２０５及びステップＳ２０６）。そして、１つのリモートノードに異常が発生する（ステップＳ２０７）と、ホームノードは、リモートノードの異常を検出する（ステップＳ２０８）。
【０１５４】
そして、キャッシュフラッシュ部７４が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する（ステップＳ２０９）。そして、メモリトークン設定解除部７５ａが、異常ノードが使用していた共有メモリセグメントに関して、メモリトークンレジスタ２７ａから異常ノードに対応するメモリトークンの設定のみ削除する（ステップＳ２１０）。
【０１５５】
その後、異常が発生したリモートノードは、共有メモリセグメントにアクセスすると、アクセスに失敗し（ステップＳ２１１）、異常終了する（ステップＳ２１２）。また、正常なリモートノードは、共有メモリセグメントにアクセスすると、アクセスに成功する（ステップＳ２１３）。その後、正常なリモートノードは、共有メモリセグメントの使用を終了すると、アクセストークンの設定を解除し（ステップＳ２１４）、正常終了する（ステップＳ２１５）。
【０１５６】
このように、メモリトークン設定解除部７５ａが、異常ノードが使用していた共有メモリセグメントについて、メモリトークンレジスタ２７ａから異常ノードに対応するメモリトークンの設定のみ解除する。したがって、ホームノードは、異常ノードからのアクセスのみを瞬時に遮断することができる。
【０１５７】
次に、アプリ異常発生時の処理のフローについて説明する。図２３は、アプリ異常発生時の処理のフローを示すフローチャートである。図２３に示すように、ホームノードのメモリトークン設定部７２ａは、リモートノードで動作するアプリが使用する共有メモリセグメントに関して、アプリ毎に異なるメモリトークンをメモリトークンレジスタ２７ａに設定する（ステップＳ２２１）。そして、メモリトークン設定部７２ａは、リモートノードのアプリにトークンを通知する（ステップＳ２２２）。
【０１５８】
そして、トークンを通知されたリモートノードアプリは、アクセストークンを設定し（ステップＳ２２３及びステップＳ２２４）、共有メモリセグメントへのアクセスを開始する（ステップＳ２２５及びステップＳ２２６）。そして、１つのリモートノードで動作しているアプリに異常が発生する（ステップＳ２２７）と、ホームノードは、リモートノードのアプリの異常を検出する（ステップＳ２２８）。
【０１５９】
そして、キャッシュフラッシュ部７４が、異常アプリが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する（ステップＳ２２９）。そして、メモリトークン設定解除部７５ａが、異常アプリが使用していた共有メモリセグメントに関して、メモリトークンレジスタ２７ａから異常アプリに対応するメモリトークンの設定のみ削除する（ステップＳ２３０）。
【０１６０】
その後、異常が発生したアプリは、共有メモリセグメントにアクセスすると、アクセスに失敗し（ステップＳ２３１）、異常終了する（ステップＳ２３２）。また、正常なアプリは、共有メモリセグメントにアクセスすると、アクセスに成功する（ステップＳ２３３）。その後、正常なアプリは、共有メモリセグメントの使用を終了すると、アクセストークンの設定を解除し（ステップＳ２３４）、正常終了する（ステップＳ２３５）。
【０１６１】
このように、メモリトークン設定解除部７５ａが、異常アプリが使用していた共有メモリセグメントについて、メモリトークンレジスタ２７ａから異常アプリに対応するメモリトークンの設定のみ解除する。したがって、ホームノードは、異常アプリからのアクセスのみを瞬時に遮断することができる。
【０１６２】
上述してきたように、実施例２では、メモリトークンレジスタ２７ａにノード毎又はアプリ毎に異なるメモリトークンを記憶する。そして、ノード１又はアプリに異常が発生すると、メモリトークン設定解除部７５ａが異常ノード又は異常アプリに対応するメモリトークンの設定のみ解除する。したがって、ホームノードは、異常ノード又は異常アプリが使用していた共有メモリセグメントについて、異常ノード又は異常アプリからのアクセスのみを瞬時に遮断し、正常ノード又は正常アプリからのアクセスを継続することができる。
【符号の説明】
【０１６３】
１    ノード
２    情報処理システム
２ａ    許可設定レジスタ
３    サービスプロセッサ
４    クロスバーネットワーク
１１    ＣＰＵチップ
１２    ディスクユニット
１３    通信インターフェイス
１４    コア
１５    メモリ
１６    ストランド
１７    ＨＤＤ
１８    二次キャッシュ
１９    一次キャッシュ
２０    命令キャッシュ
２１    データキャッシュ
２２    命令制御部
２３    命令バッファ
２４    演算部
２５    レジスタ部
２６    メモリ
２７，２７ａ    メモリトークンレジスタ
２８    アクセストークンレジスタ
２９    チェック部
３１    ＣＰＵ
３２    メモリ
３３    通信インターフェイス
４１    ＶＣＰＵ
４２    ローカルメモリ
４３    共有メモリ
４４    ディスク装置
５０    ハイパーバイザ
６０    ＯＳ
６１，６１ａ    共有メモリ管理部
７０    管理テーブル
７１    ノード・プロセス管理部
７２    許可設定部
７２ａ    メモリトークン設定部
７３    セグメント情報把握部
７４    キャッシュフラッシュ部
７５    許可解除部
７５ａ    メモリトークン設定解除部
７６    ログ出力部
８０    アプリケーション
８１    アクセストークン
８２    セグメント
９１    論理ドメイン
【図１】
0006651836.tif 000002
【図２】
0006651836.tif 000003
【図３】
0006651836.tif 000004
【図４】
0006651836.tif 000005
【図５】
0006651836.tif 000006
【図６Ａ】
0006651836.tif 000007
【図６Ｂ】
0006651836.tif 000008
【図７】
0006651836.tif 000009
【図８Ａ】
0006651836.tif 000010
【図８Ｂ】
0006651836.tif 000011
【図９】
0006651836.tif 000012
【図１０Ａ】
0006651836.tif 000013
【図１０Ｂ】
0006651836.tif 000014
【図１１】
0006651836.tif 000015
【図１２Ａ】
0006651836.tif 000016
【図１２Ｂ】
0006651836.tif 000017
【図１３Ａ】
0006651836.tif 000018
【図１３Ｂ】
0006651836.tif 000019
【図１４Ａ】
0006651836.tif 000020
【図１４Ｂ】
0006651836.tif 000021
【図１５Ａ】
0006651836.tif 000022
【図１５Ｂ】
0006651836.tif 000023
【図１６Ａ】
0006651836.tif 000024
【図１６Ｂ】
0006651836.tif 000025
【図１７】
0006651836.tif 000026
【図１８】
0006651836.tif 000027
【図１９】
0006651836.tif 000028
【図２０Ａ】
0006651836.tif 000029
【図２０Ｂ】
0006651836.tif 000030
【図２１Ａ】
0006651836.tif 000031
【図２１Ｂ】
0006651836.tif 000032
【図２２】
0006651836.tif 000033
【図２３】
0006651836.tif 000034