(57)【特許請求の範囲】
【請求項１】
それぞれが１つ以上のＣＰＵ、キャッシュ及び主記憶を持つ複数のノードと、ノード間を結ぶネットワークとを有し、主記憶を共有するノード間では前記ネットワークを介してキャッシュコヒーレント制御を行い、かつ前記複数のノードを、１つ以上のノードで構成され、それぞれが主記憶をローカルに共有する複数のパーティションに分割可能な主記憶共有型マルチプロセッサシステムであって、
前記システムのメモリアドレスとして前記複数のパーティションの各々にローカルなローカルリアルアドレスと、前記複数のパーティション間で共通に使用されるメモリ空間で共通に使用される共通メモリ空間のアドレスを有し、
各ノードの主記憶はノードの属するパーティションのローカルなリアルアドレスによりアクセスされ、
各ＣＰＵから他のノードの主記憶のアクセスは、
自パーティション内のノードの主記憶のデータに対しては、自パーティションのローカルリアルアドレスを一貫して使用した前記ネットワークを介するアクセスが行われ、
他パーティションにあるノードの主記憶のデータに対しては、前記ネットワークにアクセスコマンドが出される時、アクセスアドレスが前記共有メモリ空間のアドレスに変換され、前記他パーティションにあるノードに該アクセスコマンドが入る時に、前記共有メモリ空間のアドレスが該他パーティションのローカルリアルアドレスに変換されてアクセスが成されることを特徴とする主記憶共有型マルチプロセッサシステム。
【請求項２】
それぞれが１つ以上のＣＰＵ、キャッシュ及び主記憶を持つ複数のノードと、ノード間を結ぶネットワークとを有し、主記憶を共有するノード間では前記ネットワークを介してキャッシュコヒーレント制御を行い、かつ前記複数のノードを、それぞれが主記憶をローカルに共有する１つ以上のノードで構成された複数のパーティションに分割した時、該複数のパーティションではそれぞれメモリアドレスとして当該パーティションにローカルなローカルリアルアドレスを用いるようにされた主記憶共有型マルチプロセッサシステムにおいて、
前記複数のノードの前記ネットワークへの出入り口には、前記主記憶のいずれかに前記パーティションの２つ以上で共有する共有領域が設定されたとき用いられ、該共有領域をアクセスするためのコマンドの指定するアドレスを、パーティション内で使用される前記ローカルリアルアドレスと前記ネットワーク上で使用される共有メモリ空間のアドレスとの間で相互に変換するアドレス変換手段をそれぞれ備え、
各ノードの主記憶は前記共有領域であるか否かに関わらず前記ローカルリアルアドレスでアクセスされることを特徴とする主記憶共有型マルチプロセッサシステム。
【請求項３】
前記パーティション間で共有されていない領域をアクセスするためのコマンドについては、各ノードとノード間接続ネットワークとの間でアドレス変換を行わずに該コマンドをやり取りすることを特徴とする請求項２に記載の主記憶共有型マルチプロセッサ。
【請求項４】
前記複数のパーティションのうち、自パーティションに含む主記憶に前記共有領域が設定されたパーティションに含まれるノードの全てに、共有メモリ空間上のアドレスと前記共有領域の自パーティションのローカルリアルアドレスとの間を相互にマッピングする手段を有することを特徴とする請求項２に記載の主記憶共有型マルチプロセッサ。
【請求項５】
前記マッピングする手段は共有領域ごとにマッピング情報が設定されるテーブルにしたがってマッピングを行い、もって全体で複数の共有領域が設定可能なことを特徴とする請求項４に記載の主記憶共有型マルチプロセッサ。
【請求項６】
前記複数のパーティションのうち、他パーティションの主記憶に設定された共有領域を共有するパーティションのローカルリアルアドレス空間上には、前記他パーティションの主記憶に設定された共有領域をアクセスするための、自パーティション内に主記憶が存在しない窓領域を持ち、該窓領域の自パーティションのローカルリアルアドレスと、前記共有領域の前記共有メモリ空間アドレスとの間を相互にマッピングする手段を前記窓領域を持つパーティション内の全てのノードが持つことを特徴とする請求項２に記載の主記憶共有型マルチプロセッサ。
【請求項７】
複数のパーティションにそれぞれ設定された窓領域と一つの共有領域の共有メモリ空間アドレスとのマッピングを許容することにより、２つ以上のパーティションで一つの共有領域を共有可能にした請求項６に記載の主記憶共有型マルチプロセッサ。
【請求項８】
前記複数のノードの各々からノード間接続ネットワークにスヌープコマンドを送出する際に、パーティション間で共有されていない領域をアクセスするためのコマンドに対しては、該コマンドを、パーティション内のノードにのみマルチキャストし、パーティション間で共有されている領域をアクセスするためのコマンドに対しては、該コマンドを、少なくとも当該領域を共有しているパーティションに属するノードの全てに対してブロードキャストすることを特徴とする請求項２に記載の主記憶共有型マルチプロセッサシステム。
【請求項９】
それぞれが１つ以上のＣＰＵ、キャッシュ及び主記憶を持つ複数のノードと、ノード間を結ぶネットワークとを有し、主記憶を共有するノード間では前記ネットワークを介してキャッシュコヒーレント制御を行う主記憶共有型マルチプロセッサシステムにおいて、
前記複数のノードの各々には、前記複数のノードがそれぞれが主記憶をローカルに共有する１つ以上のノードで構成される複数のパーティションに分割され、かつ前記主記憶のいずれかに前記パーティションの２つ以上で共有する共有領域が設けられたとき用いられ、該ノードから前記ネットワークに送出するコマンドに対し、該コマンドが前記共有領域をアクセスするコマンドか前記パーティション内のローカルな領域をアクセスするコマンドかを区別する情報を付加する手段を備えたことを特徴とする主記憶共有型マルチプロセッサシステム。
【請求項１０】
それぞれが１つ以上のＣＰＵ、キャッシュ及び主記憶を持つ複数のノードと、ノード間を結ぶネットワークとを有し、主記憶を共有するノード間では前記ネットワークを介してキャッシュコヒーレント制御を行う主記憶共有型マルチプロセッサシステムにおいて、
前記複数のノードの各々には、
前記複数のノードが、それぞれが主記憶をローカルに共有する１つ以上のノードで構成される複数のパーティションに分割され、かつ前記主記憶のいずれかに前記パーティションの２つ以上で共有する共有領域が設けられたとき用いられ、該ノードから前記ネットワークに送出するコマンドに対し、該コマンドが前記共有領域をアクセスするコマンドか前記パーティション内のローカルな領域をアクセスするコマンドかを区別する情報を付加し、かつ前記共有領域をアクセスするコマンドであるとき該コマンドの指定するアドレスを自ノードが含まれるパーティションにローカルなリアルアドレスから共有メモリ空間のアドレスに変換して前記ネットワーク上に送出する手段と、
前記ネットワークから受け取ったコマンドの付加情報が前記共有領域をアクセスするコマンドであることを示すとき、該コマンドが指定する共有メモリ空間のアドレスを自ノードが含まれるパーティションにローカルなリアルアドレスに変換する手段を備え、
各ノードの主記憶は前記共有領域であるか否かに関われず前記リアルアドレスでアクセスされることを特徴とする主記憶共有型マルチプロセッサシステム。
【請求項１１】
それぞれが１つ以上のＣＰＵ、キャッシュ及び主記憶を持つ複数のノードと、ノード間を結ぶネットワークとを有し、主記憶を共有するノード間では前記ネットワークを介してキャッシュコヒーレント制御を行う主記憶共有型マルチプロセッサシステムにおいて、
前記複数のノードの各々には、
前記複数のノードが、それぞれが主記憶をローカルに共有する１つ以上のノードで構成される複数のパーティションに分割され、かつ前記主記憶のいずれかに前記パーティションの２つ以上で共有する共有領域が設けられたとき使用され、自ノードから前記ネットワークに送出するコマンドに対し、該コマンドが前記共有領域をアクセスするコマンドか前記パーティション内のローカルな領域をアクセスするコマンドかを区別する情報を付加する手段と、
自ノードの属するパーティションに含まれるノードが設定される記憶手段と、
前記ネットワークから受け取ったコマンドが前記ローカルな領域をアクセスするコマンドである時、該コマンドのアクセス元ノードが自ノードの属するパーティションに含まれるノードか否かチェックし、否であれば該コマンドのアクセスを抑止する手段とを備えたことを特徴とする主記憶共有型マルチプロセッサシステム。
【請求項１２】
それぞれが１つ以上のＣＰＵ、キャッシュ及び主記憶を持つ複数のノードと、ノード間を結ぶネットワークとを有し、主記憶を共有するノード間では前記ネットワークを介してキャッシュコヒーレント制御を行い、前記複数のノードがそれぞれが主記憶をローカルに共有する１つ以上のノードで構成される複数のパーティションに分割されたとき、該パーティションの各々の内部の主記憶をローカルにアクセスするコマンドと、複数のパーティションで主記憶を共有する共有領域をアクセスするコマンドとが用いられる主記憶共有型マルチプロセッサシステムにおいて、
前記複数のノードの各々には、
前記共有領域を共有するパーティションが定まったとき、該パーティションに含まれるノードが設定される記憶手段と、
前記ネットワークから受け取ったコマンドが共有領域をアクセスするコマンドであるとき、該コマンドのアクセス元ノードが前記記憶手段に設定されたノードに含まれるか否かをチェックし、否のときは該コマンドのアクセスを抑止する手段を備えたことを特徴とする主記憶共有型マルチプロセッサシステム。
【請求項１３】
前記共有領域は複数独立に設定され、前記記憶手段には該複数独立の共有領域についてそれぞれの共有を許されるパーティションの組のノードが独立に設定されることを特徴とする請求項１２の主記憶共有型マルチプロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は情報処理装置、特に、パーソナルコンピュータ（ＰＣ）、ワークステーション（ＷＳ），サーバ機等に用いられる、主記憶共有型の並列計算機システムについての発明であり、特に、パーティション間共有メモリの制御方式に関する。
【０００２】
【従来の技術】
近年の高多重並列サーバは、主記憶共有型のマルチプロセッサ（ＳＭＰ：Ｓｙｍｍｅｔｒｉｃａｌ  Ｍｕｌｔｉ  Ｐｒｏｃｅｓｓｏｒ）構成が広まっており、性能を向上させるために、数十〜百台規模のプロセッサの間で主記憶を共有するアーキテクチャが用いられる。主記憶共有型のマルチプロセッサの構成方法としては、ＰＣ等に用いられる共有バス型のＳＭＰが圧倒的に主流である。したがって、高多重並列サーバも、標準品のＣＰＵを利用したバス型のＳＭＰをコンポーネントとして用いることが、最先端のＣＰＵへの追従性、コストの低減等のためには圧倒的に有利である。しかし、バス型のＳＭＰではバスのスループットがネックになるため、接続可能なプロセッサの数は４台程度が原因であり、多数台のプロセッサを接続する方式としては適さない。
【０００３】
上記の課題を解決するために、クロスバスイッチ等により、バス型のＳＭＰを階層的に接続する方法が提案されている。階層型ＳＭＰの代表的な例は「Ｇｉｇａｐｌａｎｅ−ＸＢ：Ｅｘｔｅｎｄｉｎｇ  ｔｈｅ  Ｕｌｔｒａ  Ｅｎｔｅｒｐｒｉｓｅ  Ｆａｍｉｌｙ」（ＨＯＴ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ  Ｖ、ｐ９７〜１１２、１９９７  ８月）に見られる。ノード間のクロスバスイッチ等は論理的にはバスとして動作し、プロセッサと主記憶を持つバス型ＳＭＰのノード間のＣＰＵキャッシュの一貫性を、バススヌーププロトコルを用いて、高速に管理することができる。
【０００４】
上記のような大規模な、主記憶共有型マルチプロセッサの問題点の一つとして、信頼性がある。従来の主記憶共有型マルチプロセッサは、システム全体で一つのＯＳを持つ。この方式は、システムの全てのプロセッサを一つのＯＳで管理できるため、柔軟なシステム運用（負荷分散等）をできるという利点を持つ。しかし、多数台のプロセッサを主記憶共有のマルチプロセッサ構成で接続した場合、システムの信頼性が低下するという欠点を持つ。複数のプロセッサをネットワークで接続したクラスタ構成のサーバでは、ノード毎にＯＳは別なので、ＯＳなどのバグ等の致命的エラーが起こっても、システムダウンするのは当該のノードのみである。それに対して主記憶共有型のマルチプロセッサで、システム全体を１つのＯＳで制御する場合、あるプロセッサがシステムバグ等のためにダウンすると、ＯＳがダウンしてしまうため、全てのプロセッサが影響を受けてしまう。
【０００５】
この課題を解決するために、主記憶共有型のマルチプロセッサの内部を複数のパーティションに分け、複数のＯＳを独立に走らせる方式が提案されている。各パーティションは独立した主記憶を持ち、あるパーティションのプロセッサは、基本的に自パーティションの主記憶のみをアクセスする。これにより、パーティション間の障害封じ込めを実現し、システムの性能を向上させることが可能になる。
【０００６】
さらに、サーバコンソリデーションによる運用性向上、管理コスト削減のためにも、従来複数のサーバで行っていた仕事を、１つの高多重サーバに統合することが求められており、上記のパーティション技術は必須である。
【０００７】
主記憶共有型のマルチプロセッサをパーティションに分けた場合、パーティション間でどのように通信を行うかが課題になる。パーティションを切る前のシステムに備えられている共有メモリ機構を活用して、パーティション間通信を行う方式が、性能的に優位である。したがって、パーティション間での共有記憶の実現が必要になる。
【０００８】
一つのシステムの中に複数のＯＳを走らせるパーティション技術は、従来よりメインフレームで使われており、米国特許４８４３５４１において開示されている。この方式では、システム全体を管理するホストＯＳの管理の元で、複数のゲストＯＳを動作させることが可能である。各ゲストＯＳは別々のアドレス空間を持つ独立したシステムである。各パーティションにおける主記憶のアクセスは下記の手順で行われる。
【０００９】
（１）ゲストの仮想アドレスからリアルアドレスに変換する。
（２）上記のゲストリアルアドレスを、ホスト上の主記憶アドレスに変換する。
【００１０】
（３）（２）で求めたホスト上の主記憶アドレスを用いて主記憶をアクセスする。上記の２段階のアドレス変換はＣＰＵと主記憶の間で行われなければならない。
【００１１】
メインフレームのパーティションにおいては、上記の２段階のアドレス変換を行うことにより、各々のゲストパーティションが別個のアドレス空間を持つことを可能にするとともに、障害封じ込めを実現する。（３）のアドレス変換において、各ゲストのアドレスをオーバラップさせることにより、共有記憶を実現できる。
【００１２】
【発明が解決しようとする課題】
上記従来技術を用いて、階層バス型のＳＭＰのパーティション機構、パーティション間共有メモリを実現するには、以下に示す問題がある。
【００１３】
従来の、パーティション間共有メモリ機構は、各ＣＰＵと主記憶の間に２段階のアドレス変換機構を持った、集中型の主記憶アーキテクチャを前提としている。従って、階層バス型のＳＭＰとは、前提とするアーキテクチャが大きく異なるため、従来技術を階層バス型のＳＭＰにそのまま適用することはできない。特に、各ＣＰＵは標準部品を使うため、従来技術で行われている２段階のアドレス変換をＣＰＵで行うことができず、各パーティション（ゲスト）のアドレスのリロケーションを行うことができない。
【００１４】
さらに、階層型ＳＭＰにおいてはバススヌーププロトコルを用いてＣＰＵのキャッシュの一貫性を高速に保持する。従って、パーティション間の共有メモリ機構は、バススヌーププロトコルをサポートできなければならない。
【００１５】
従って、本発明の目的は、階層型ＳＭＰのアーキテクチャに適した、パーティション機構、パーティション間共有メモリ機構を実現する事である。
【００１６】
さらに、将来の並列システムは、汎用のＯＳをサポートしなければならない。そのため、パーティションシステムは、特定のＯＳによらない汎用的なアーキテクチャを採る必要があるり、各パーティションが自由なアドレス空間を持つことを可能にしなければならない。さらに、多数のアプリケーションに対応したり、パーティションの動的再構成により、システムの信頼性を向上させるため、パーティションの動的生成消去を実現する必要がある。
【００１７】
本発明のさらなる目的は、パーティション間共有メモリの構成を柔軟に管理することである。
【００１８】
さらに、パーティションシステムは、低いコストで高い信頼性を実現する必要があり、各パーティションが相互にバックアップすることが必須である。従って、本発明の第３の目的は、あるパーティションのＯＳがシステムダウンした場合に、他のパーティションから、エラーの回復が容易にすることである。
【００１９】
【課題を解決するための手段】
上記第１、第２の目的を達成するために、バスにより結合されたＣＰＵと主記憶を持つノードを、スイッチにより接続し、スイッチを通じてキャッシュ一致制御を行う階層型ＳＭＰにおいて、システム内を異なるＯＳが動作するパーティションに分けた際に、各ノードからスイッチへの出入り口において、パーティション間で共有される領域へのアクセスコマンドのアドレスを、パーティション内で使用されるリアルアドレスと、パーティション間で共通に使用されるアドレスとの間で相互に変換する手段を設ける。これにより、各パーティションのローカル領域のアドレスを自由に設定するとともに、階層型ＳＭＰのスヌープコマンドを使用して、共有領域のキャッシュ一致制御を高速に行うことができる。
【００２０】
さらに、本発明による他の望ましい態様では、各ノードの出入り口で、他のパーティションからのアクセスコマンドのアドレスと、共有領域の構成との整合性をチェックする。これにより、パーティション間で、障害封じ込めを実現することができる。
【００２１】
さらに、本発明による他の望ましい態様では、パーティション間の共有領域の構成情報を、システムソフトウェアが動的に変更する手段を設ける。これにより、共有領域の柔軟な管理が可能になる。
【００２２】
さらに、上記第３の目的を達成するために、各パーティションが他のパーティションのＣＰＵにリセットをかける機能を持たせる。これにより、あるパーティションがシステムダウンした場合に、他の正常に動作しているパーティションから、システムダウンしたパーティションをリセットし、再立上げすることができる。
【００２３】
【発明の実施の形態】
以下、本発明に係る主記憶共有型マルチプロセッサを、図面に示した実施の形態を参照してさらに詳細に説明する。
【００２４】
＜発明の実施の形態＞
図１は本発明に係る主記憶共有型マルチプロセッサのブロック図である。本システムは８ノードのシステムであり、複数のノード１００〜８００（これらはノード０〜ノード７と呼ぶことがある）が、バス型のスイッチ９００により接続される。なおノード１００、８００以外の６つのノードは図では複雑さを避けるために省略しているが、各ノードは同じ構造を有する。ノード０で代表して説明すると、ＣＰＵ１１０〜１１３、ＣＰＵバス１９０、主記憶１８０、ノード制御回路１２０より構成される。ノード制御回路１２０は、主記憶アクセス回路１３０、アドレス変換回路１４０、パーティション構成情報１６０、パーティション内主記憶構成情報１６５より構成される。ここで、１１０〜１１３、１８０、１３０については、公知の技術であるので内部の説明は省略する。
【００２５】
主記憶１８０は、このシステムに共通の主記憶の一部を構成し、各ノードで実行されるプログラムおよびデータの一部を保持するもので、このシステムはいわゆる分散共有メモリ型の並列計算機システムである。
【００２６】
ノード内の各ＣＰＵの間のキャッシュ一貫性はバススヌーププロトコルにより管理される。バススヌープ技術は公知であるので、詳細な説明は行わない。図１ではノード内のＣＰＵはバスにより接続されているが、ハードウェア的にはバス以外の結合方式、例えば一対一結合、スイッチによる結合でもよい。これらノード内の接続方法については公知の技術が種々適用可能である。
【００２７】
ノード間のＣＰＵの間のキャッシュ一貫性も、バススヌーププロトコルを用いて管理されている。スイッチ９００は、論理的にはバスと同じ働きをする。階層型ＳＭＰのキャッシュ一貫性保持については、公知の技術であるので、詳細な説明は行わない。
【００２８】
アドレス変換回路１４０は、ノード内のアドレス（ノード内のＣＰＵ１１０〜１１３、ＣＰＵバス１９０、主記憶１８０が使用するアドレス）と、ノード間接続スイッチ９００が使用するアドレス（ノード外のアドレス）を変換するためのハードウェアである。
【００２９】
アドレス変換回路１４０の内部では、ノード内からのコマンドを出力する側では、アクセスされた領域が共有領域かどうか判定するための共有領域判定回路１４１、共有領域のアドレスを変換するための、出力側変換回路１４４、コマンドを正しい宛先に送り出すための宛先指定・グローバルビット付加回路１４２から構成される。ノードの外からのコマンドを入力する側では、他のノードからのコマンドが共有領域へのコマンドかどうか判定し、アドレスのチェックを行う共有領域判定・アドレスチェック回路１４３、共有領域のアドレスを変換するための入力側変換回路１４５、自ノードが共有しない共有領域へのアクセス要求に対して返答を出すＤＮＤ返答回路１４６、他のノードからのスヌープコマンドの返答を待ち合わせる返答待合せ回路１４７から構成される。これらの回路は、本発明特有の動作を行う。
【００３０】
各ノードはシステムの立上げ、構成制御、デバッグなどに使用されるＯＳ間通信機能１７０を持ち、共有メモリを使わずに、各ノードのシステムソフトウェアが通信することができる。ＯＳ間通信パス９１０は、物理的にはノード間接続スイッチと同じハードウェアを共有することもできる。もしくは、ＬＡＮ等の一般的なネットワークを使うこともできる。
【００３１】
図２に本発明の階層型ＳＭＰにおけるパーティションの構成例を示す。パーティションはＳＭＰノードを単位に分けられ、任意のノードの組み合わせをとることができる。図２の例ではシステム内は３つのパーティションに分けられている。第１パーティション１０００はノード０〜３（１００、２００、３００、４００）で、第２パーティション１００１はノード４、５（５００、６００）で、だ第３パーティションはノード６、７（７００、８００）で構成される。各パーティションは別のＯＳが動作すると言う点で独立したシステムであり、以下に述べるように独立したアドレス空間を持つ。さらに、各パーティションの間で、主記憶の一部を共有するパーティション間の共有メモリを持つ。
【００３２】
パーティション間の共有メモリが無い場合は、パーティション間のデータのやり取りは、メッセージ通信機構や、一般的なネットワーク（ＬＡＮ）を使って行わなければならい。メッセージ通信のレーテンシは少なくとも１０μｓ程度はかかるため、高速な通信を実現することが困難である。それに対し、階層バス型の共有メモリ機構を活用すれば、ノード間の通信は数百ｎｓ以下で実現することができる。従って、パーティション間の通信の高速化、パーティション間でのリソースのロック処理の高速化、パーティション同士の高速フェイルオーバ等の実現のためには、パーティション間の共有メモリは必須である。
【００３３】
図３に本発明のパーティション間共有メモリ機構を使用した場合の各パーティションのアドレスマップの例を示す。この例は図２で例示したパーティション分割に対応している。
【００３４】
各パーティション（パーティション０〜パーティション２）はパーティション毎に独立したリアルアドレス空間を持つ（図３の左側）。パーティション内の各ノードは同一のリアルアドレス空間を持つ。上記のパーティションのリアルアドレスは、パーティションに含まれるノード内のＣＰＵバス１９０の上で使われるアドレスであり、ノード内ＣＰＵ１１０〜１１３， 主記憶１８０、主記憶アクセス回路１３０が使用するリアルアドレスである。システムは、上記の各パーティションのリアルアドレス空間の他に、システム全体で共通の共有メモリ空間（図３の右側）を持つ。パーティション間で共有される領域は、各パーティションの内部では、それぞれ異なるアドレスを持つが、共有メモリ空間上で共通なアドレスを持つ。
【００３５】
各パーティションから共有領域へのアクセスは、共有メモリ空間アドレスを介して、他のパーティションに伝えられる。つまり、各ノードから出される共有領域に対するキャッシュコヒーレントチェック（ＣＣＣ）コマンド等のアクセスコマンドは、アクセス元のノードを出る際に、自パーティションのリアルアドレスから共有メモリ空間アドレスへ変換され、アクセス先のノードに入る際に、共有メモリ空間アドレスからアクセス先のパーティションのリアルアドレスに変換される。これらのアドレス変換は各ノードの出入り口にあるアドレス変換回路１４０で行われる。このアドレス変換機能により、各パーティションにおいて、自パーティション内のノードの主記憶の実体の範囲を越えたリアルアドレス空間を自由に決めることができる。
【００３６】
ここで注意しなければならないのは、バススヌーププロトコルを用いる場合、ＣＣＣコマンドはあるキャッシュラインを共有している任意のＣＰＵから出される可能性があり、該当するラインを共有する可能性のあるＣＰＵ全てにブロードキャストされる場合があることである。したがって、各ノードにおいて行われる、パーティションのローカルなリアルアドレスと共有空間アドレスとの間のアドレス変換は、双方向に変換可能でなければならない。さらに、同じパーティションの中に主記憶の実体が存在する共有領域をアクセスする際にも（例えばノード０〜３が共有領域Ａをアクセスする際）、ＣＣＣコマンドをパーティション外のノードにも正しく伝えるために、ＣＣＣコマンド中のアドレスは、一旦共有メモリ空間のアドレスに変換しなければならない。また、非共有領域（パーティション内のノードからのみアクセスされる領域）へのアクセスに対しては、アドレス変換は全く行われない（ＣＣＣコマンドはパーティション内のノードにのみ送られる）。その際に、スイッチから入ってきたコマンドが非共有空間のアクセスか、パーティション間で共有されている空間へのアクセスかを、アドレスだけで判断することは不可能である。そこで、スイッチ上のコマンドには、コマンドが共有空間へのアクセスかどうかを判断するための、グローバルビットを持つ。
【００３７】
本発明の特長は、各ノードのスイッチへの出入り口に、アドレス変換回路１４０を持ち、共有領域の各ノード内のアドレスと共有メモリ空間アドレスの間を相互に変換することである。
【００３８】
以下では図３の例を元に、パーティション間のアドレスの管理方式を詳細に説明する。図３において、第１パーティション１０００のアドレス空間は、ノード０〜３のローカル主記憶１０、２０、３０、４０を、第２パーティション１００１のアドレス空間はノード４、５のローカル主記憶５０、６０および共有領域１ａを、第３パーティション１００２のアドレス空間は、ノード６、７のローカル主記憶７０、８０および共有領域１ｂ、２ａを持つ。各パーティションの内ノードは全て同じアドレス空間を持つ。例えば、ノード４、５はいずれも領域５０、６０、１ａをアクセスできる。
【００３９】
共有領域はＡ、Ｂの２つあり、共有領域Ａはノード０のローカル主記憶上に、共有領域Ｂはノード４のローカル主記憶上にアロケートされている。それぞれ共有領域Ａ（実体）１、共有領域Ｂ（実体）２で表わされている。これら共有領域に対応する主記憶を持つパーティションを、以下では輸出側のパーティションと呼ぶ。それに対して、共有メモリ空間においては、共有領域Ａ、共有領域Ｂは、それぞれ１ｚ、２ｚにおかれている。したがって、パーティション０は共有領域Ａをパーティション内のリアルアドレス空間１から共有メモリ空間１ｚに、パーティション１は共有領域Ｂをパーティション内のリアルアドレス空間２から共有メモリ空間２ｚにマッピング（輸出）している。
【００４０】
また、共有領域Ａはパーティション１、パーティション２、パーティション３と共有されており、共有領域Ｂはパーティション３と共有されている。パーティション２、３の共有領域Ａ、パーティション３の共有領域Ｂのように、パーティション内に該当する領域の主記憶を持たない（他のパーティションにある共有領域の実体をアクセスする側の）パーティションを、輸入側のパーティションと呼ぶ。輸入側のパーティションでは、自パーティションのリアルアドレスの主記憶が実装されていない部分に、他のパーティションが持つ主記憶領域をアクセスするための領域（窓）を作る。したがって、パーティション１は共有領域Ａを共有メモリ空間１ｚからパーティション内のリアルアドレス空間の１ａに、パーティション２は共有領域Ａを共有メモリ空間１ｚからパーティション内のリアルアドレス空間の１ｂに、共有領域Ｂを共有メモリ空間２ｚからパーティション内のリアルアドレス空間の２ａにマッピング（輸入）する。
【００４１】
以上の結果をまとめると、図３の例においては、各ノードの出入り口で以下に示すアドレス変換（双方向）が必要になる。
【００４２】
・ノード０〜３（第１パーティション１０００）
共有領域Ａをノード0上の主記憶１より、共有メモリ空間１ｚに輸出する
・ノード４、５（第２パーティション１００１）
共有領域Ｂをノード４上の主記憶２より、共有メモリ空間２ｚに輸出する。
【００４３】
共有領域Ａを共有メモリ空間１ｚより、自パーティション内の領域１ａに輸入する。
【００４４】
・ノード６、７（パーティション２）
共有領域Ａを共有メモリ空間１ｚより、自パーティション内の領域１ｂに輸入する。
【００４５】
共有領域Ｂを共有メモリ空間２ｚより、自パーティション内の領域２ａに輸入する。
【００４６】
上記に示されない非共有領域のアドレスはＣＣＣコマンドがノードの外に出る際にも変換されない。
【００４７】
図４に本発明の各ノードの出入り口においてどのようなアドレス変換が必要であるかをまとめて示す。リアルアドレスは、非共有アドレス（パーティション内からのみアクセス可能な領域）、共有アドレス（パーティション間で共有しているアドレス）の２種に分けられ、さらに、共有アドレスは、自パーティション内に主記憶が有る場合、無い場合の２種に分けられる。
【００４８】
（１）非共有領域
パーティション内からのみアクセスされる非共有領域については、スイッチ上でもパーティション内のアドレスが使われるため、ノードの出入り口でのアドレス変換は行われない。スヌープコマンドはパーティション内のノードにのみにマルチキャストされる。
【００４９】
（２）共有領域（輸出側）
パーティション内に主記憶の実体がある共有領域については、自パーティション内の主記憶のアドレスと、スイッチ上の共有メモリ空間のアドレスとの変換が必要である。スヌープコマンドは、全ノードに送られる。なお、スヌープコマンドを共有しているパーティションのノードのみに送る最適化も可能である。
【００５０】
（３）共有領域（輸入側）
パーティション内に主記憶の実体が無い共有領域については、自パーティション内の共有領域をアクセスするための窓のアドレスと、スイッチ上の共有メモリ空間のアドレスとの変換が必要である。スヌープコマンドは、全ノードに送られる。ここでも、共有しているパーティションのノードのみに送る最適化も可能である。
【００５１】
さらに、パーティション間の障害封じ込めを実現するために、各ノードの出入り口のアドレス変換において、パーティション間の不正なアクセスをチェックする。通常の高多重ＳＭＰにおいては、アクセス権チェックは、ＣＰＵが仮想アドレスからリアルアドレスに変換するアドレス変換時に行われる。しかし、他のパーティションのＯＳ等のシステムソフトウェアが暴走した時の事を考えると、アクセスを発行するＣＰＵ側でのアクセス権チェックだけでは不十分であり、アクセスされる側のパーティションにおいてアクセス権チェックを行う必要がある。さらに、ＣＰＵの間では、バスースヌーププロトコルによるキャッシュ一貫性管理が行われているため、主記憶上のデータのみでなく、キャッシュ上にキャッシングされているデータについても、不正なアクセスから保護しなければならない。上記のチェックを実現するために、各ノードの入口で、他のノードから到来したＣＣＣコマンドに対して以下に示すチェックを行う。
【００５２】
（１）非共有領域
パーティション外のノードからのコマンドは許さない。
【００５３】
（２）共有領域（輸出側、輸入側共）
アドレス変換ハードウェアにおいて、各共有領域毎に共有を許可する（該領域を共有している）ノードをビットマップ形式で覚えておく手段を設け、共有を許可していないノードからのコマンドを受けつけない。
【００５４】
以上述べたアドレス変換は、共有メモリをアローケートした際に、ＯＳ、ミドル等のシステムソフトウェアが動的に設定する。設定の方式については後に述べる。
【００５５】
以下では、以上で述べたパーティション間共有メモリ機構、パーティション間アドレス変換を実現する、本発明の主記憶共有マルチプロセッサの構成を詳細に説明する。
【００５６】
図１は本発明の主記憶構成マルチプロセッサの構成図である。各ノードの出入り口、具体的には主記憶アクセス回路１３０とノード間接続スイッチ９００の間に、アドレス変換回路１４０が置かれる。アドレス変換回路１４０は、アドレス変換テーブル１５０、パーティション構成情報１６０、パーティション内主記憶構成情報１６５に書かれた情報をもとに、ノード内外のアドレスの変換、ノード外へのＣＣＣコマンドの当て先指定、ノード外からのＣＣＣコマンドに対するエラーチェックを行う回路である。
【００５７】
アドレス変換テーブル１５０、パーティション構成情報１６０、パーティション内主記憶構成情報１６５はメモリマップされており、パーティション内のプロセッサがアクセスすることができる。
【００５８】
図５にアドレス変換テーブル１５０のエントリのフォーマットを示す。アドレス変換テーブルは、共有領域に対するアドレス変換を行うために、共有領域１つ毎に図５に示すエントリを１つ持つ。アドレス変換回路は、フルアソシアティブ、双方向のアドレス変換を行う。従って、あるノードが輸出・輸入する共有領域の数は、アドレス変換テーブルのエントリ数で制限されるため、アドレス変換テーブルのエントリ数は十分多く持たなくてはならない。各エントリは以下の情報を持つ。
【００５９】
・イネーブルビット（Ｅ）１５１                                          当該エントリを有効にする                                              ・パーティション内アドレス１５２                                        ・共有メモリ空間アドレス１５３                                          以上２つは各々における開始アドレス                                    ・サイズ１５４                                                          共有空間の大きさ                                                      ・ｈｏｍｅノード番号１５５                                              当該共有領域を、主記憶上に持つノードの番号                            ・共有を許すノード１５６                                                当該領域を共有する事ができるノード番号のリスト（ビットマップ形式で記憶される）（共有の可否はパーティション単位で決められるが、本テーブルでは処理の効率を考慮して、ノード番号単位に記憶される）
ここで、共有メモリは、ある一定の単位（例えば１ＭＢとする）毎に取り扱われる。その場合、フィールド１５２〜１５４は１ＭＢの倍数になる。したがって、１５２〜１５４の下位２０ビットは０固定である（テーブルのビットは実装されない）。
【００６０】
図７にパーティション構成情報１６０の詳細を示す。パーティション構成情報は、システムのパーティションがどのように切り分けられているかを示す。どのノードがどのパーティションに入っているかをビットマップ１６１および、自ノードがどのパーティションにはいっているかを示すフラグ１６２から構成される。テーブルのエントリ数はシステムのノード総数である（１ノード１／パーティションの場合までサポート可能である）。図７は図２におけるノード０〜３におけるパーティション構成情報１６０の値を示している（パーティション０が自パーティションであり、パーティション３〜７は使用されていない）。他のノードにおいても、自パーティションフラグ１６２以外は同じ情報が記憶されている。
【００６１】
図８にはパーティション内主記憶構成情報１６５の詳細を示す。パーティション内主記憶構成情報は、自パーティションに含まれる各ノードの（ローカル）主記憶が担当するアドレス範囲を示す（他パーティションの情報は持たない）。エントリ数はシステムのノード総数である（システム全体が１パーティションの場合までサポート可能である）。各ノードが担当する主記憶の開始アドレス１６６、終了アドレス１６７、エントリが有効なことを示すＶビット１６８により構成される。
【００６２】
次にノード間接続スイッチ９００でやりとりされるコマンドについて説明する。階層型ＳＭＰにおいては、各ＣＰＵのデータの読み書き（キャッシュの一貫性の保持）は、バススヌーププロトコルにより管理される。ノード間のＣＣＣについてであるが、ここでは例として、ノード間のＦｅｔｃｈコマンドによるバススヌープの手順の概略を述べる。ただし、説明のためパーティションは切られておらず、システム全体が１パーティションとする。
【００６３】
（１）あるＣＰＵがデータを読む場合は、他の全てのノード（全ＣＰＵおよびｈｏｍｅノードの主記憶）にＦｅｔｃｈコマンドが出される。
【００６４】
（２）Ｆｅｔｃｈコマンドを受け取ったノードでは、もし自ノード上のキャッシュ上に変更された（最新の）データがある場合には、データを返送し、そうでないならば、データが無いことを回答する。ｈｏｍｅノードにおいて、キャッシュ上に変更されたデータが無い場合には、主記憶上のデータを返送する。
【００６５】
（３）アクセス元ノードで他のノードからの返答を集計する。他ノードからキャッシュ上にあった変更された（最新の）データが送られてきていれば、該データをアクセス元のＣＰＵに返す。全てのノードが変更されたデータを持っていなかった場合には、主記憶から返送されたデータ（自ノードがｈｏｍｅである場合には、自ノード上の主記憶のデータ）をアクセス元のＣＰＵに返す。（ここで、主記憶から返送されたデータを使うかどうかを決めるためには、全てのノードからの「データが無い」と言う回答を待ち合わせる必要がある。）
以下に階層型ＳＭＰのノード内のバスで使われるＣＣＣコマンドを示す。括弧内はこの実施例で使われる略号である。
【００６６】
・Ｆｅｔｃｈ（Ｆ）
データのライン転送を要求する。
ＣＰＵの読み出しコマンドがミスした場合に出される。
・Ｆｅｔｃｈ＆Ｉｎｖａｌｉｄａｔｅ（ＦＩ）
データのライン転送と同時に、他のキャッシュ上のデータの無効化を要求する。
ＣＰＵの書き込みコマンドがミスした場合に出される。
・Ｉｎｖａｌｉｄａｔｅ（Ｉ）
他のキャッシュ上のデータの無効化を要求する。
ＣＰＵが、他のキャッシュと共有されているキャッシュラインに対して
書き込み要求を出した場合に出される。
・ＷｒｉｔｅＢａｃｋ（ＷＢ）
キャッシュラインの書き戻しを要求する。
リプレースにより、データが追い出されたときに生じる。
・Ｄａｔａ（Ｄ）
Ｆ，ＦＩコマンドに対し、キャッシュ上に変更された（最新の）データが存在する場合に、データを返送するためのコマンドである。
・ＤａｔａＭｅｍ（ＤＭ）
Ｆ，ＦＩコマンドに対し、ｈｏｍｅノードの主記憶上のデータを返送するためのコマンドである。ｈｏｍｅノードにおいて、ノード内のキャッシュ上に変更された（最新の）データが無い場合に返送される。他のいずれかのノードのよりＤコマンドが来た場合は、ＤＭコマンドで返送されたデータは無視される。
（キャッシュ上のデータが優先される。）
ＵｎｃａｃｈｅｄＲｅａｄの回答にも使われる。
・ＮｏＤａｔａ（ＮＤ）
Ｆ，ＦＩコマンドに対し、該当するノードのキャッシュ上には変更された  （最新の）データが無い場合に返送される（ｈｏｍｅノードは除く）。
・ＤｕｍｍｙＮｏＤａｔａ（ＤＮＤ）
Ｆ，ＦＩコマンドに対するパーティション外のノードからの返答。
（ＤＮＤは一般的なＣＣＣコマンドではなく、本実施例特有のインプリメンテーションにおいて必要なコマンドである。意味はＮＤと同一である。）・ＵｎｃａｃｈｅｄＲｅａｄ（ＵＲ）
・ＵｎｃａｃｈｅｄＲｅａｄ（ＵＷ）
キャッシュオフで直接主記憶をアクセスするためのコマンド
ノード間接続スイッチ上のコマンドは、コマンド、アドレス、データ等の、ＣＣＣに必要なフィールドの他に、本発明特有の下記のフィールドを持つ。
【００６７】
（１）宛先ノード番号
宛先ノード番号はビットマップで表される。宛先をビットマップで表現することにより、複数のビットを立てて、特定の複数のノード（例えばパーティション内のノード）に向けたマルチキャスト、さらには、全ビットを立てて、システムの全プロセッサに向けたブロードキャストを容易に実現することができる。
【００６８】
（２）グローバルビット
該アクセスコマンドが、共有領域に対するコマンド（従ってアドレスは共有メモリ空間のアドレスである）であるか、非共有領域に対するコマンド（従ってアドレスはパーティション内のローカルアドレスである）を区別するためのビット。
【００６９】
以下では、他のノードに向けてコマンドが出される場合、及び他のノードからコマンドを受け取った場合の、アドレス変換回路の動作を場合に分けて順に説明する。
【００７０】
（Ａ）ノードからコマンドが出される場合の処理
主記憶アクセス回路１３０からアドレス変換回路１４０にＣＣＣコマンドが渡されると、先ず共有領域判定回路１４１に入力される。
【００７１】
図９に共有領域判定回路１４１の詳細を示す。入力されたコマンド１４１ｃからアクセスアドレス１４１０ｂの部分が取り出される。アクセスアドレス１４１０ｂは、回路１４１０回路１４１１に入力される。
【００７２】
回路１４１０では、パーティション内主記憶構成情報（１６５ａ）を用いて、アクセスアドレス１４１０ｂがパーティション内主記憶の何れかに含まれているかが判断される。つまり、図８でＶａｌｉｄビット１６８が１であるエントリ全てに対して、アクセスアドレス１４１０ｂが開始アドレス１６６と終了アドレス１６７の間にあるかがチェックされる。何れかに含まれていれば、出力１４１０ａに１が出力され、アクセスアドレス１４１０ｂは、パーティション内に主記憶を持つアドレスであると判断される（内部の回路は後に述べる図６と同等であるため、詳細な説明は行わない）。
【００７３】
回路１４１１では、アドレス変換テーブルの情報（１５０ａ）を用いて、アクセスアドレス１４１０ｂが、アドレス変換テーブルに定義されているパーティション内共有領域の何れかに含まれるかが判定される。つまり、図５のＥビットが１であるエントリ全てに対して、アクセスアドレス１４１０ｂがパーティション内アドレス１５２からサイズ１５４までの間に含まれているかがチェックされる。何れかに含まれていれば、出力１４１１ａに１が出力され、アクセスアドレス１４１０ｂは、パーティション内から輸出もしくはパーティション内に輸入されている共有領域の一つであると判断される（内部の回路は後に述べる図６と同等であるため、詳細な説明は行わない）。
【００７４】
ゲート１４１２の出力が１であるとき、つまり、アクセスアドレス１４１０ｂはパーティション内に主記憶を持つが、輸出入されている共有領域で無い場合には、ゲート１４１３により、非共有側１４１ｂにアクセスコマンドが振り分けられる。そうでない時（ゲート１４１２の出力が０であるとき）、つまり、アクセスアドレス１４１０ｂが、パーティション内に主記憶を持たない場合、もしくは輸出入されている共有領域の場合には、共有側１４１ａにアクセスコマンドが振り分けられる。
【００７５】
非共有側１４１ｂでは、アクセスコマンドはアドレス変換を行わずに、宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２に送られる。これにより、非共有領域へのアクセスコマンドに対しては、アドレス変換は行われない。
【００７６】
それに対して、共有側１４１ａでは、アクセスコマンドは出力側変換回路１４４に入力される。図６に出力側変換回路１４４の詳細を示す。入力されたコマンド１４１ａからアクセスアドレス１４４２ａが分離される。アクセスアドレス１４４２ａは、アドレス変換テーブルの有効なエントリのパーティション内アドレス１５２からサイズ１５４までの間に入っているかどうかを範囲判定回路１４４０で判断される。範囲判定回路はアドレス変換テーブルのエントリ毎に設けられる（１４４０〜１４４０’）。アクセスアドレス１４４２ａがアドレス変換テーブルのパーティション内アドレスの範囲に含まれている場合、信号１４４０ａが出力される。信号１４４０ａが１の場合、セレクタ１４４１により、該当するアドレス変換テーブルのパーティション内アドレス１５２が出力Ａ  １４４１ａに、共有メモリ空間アドレス１５３が出力Ｂ  １４４１ｂに出力される。アドレス変換回路１４４２では、信号Ａより出力された旧ベースアドレス１４４１ａ（アドレス変換テーブルのパーティション内アドレスに対応）、信号Ｂより出力された新ベースアドレス１４４１ｂ（アドレス変換テーブルの共有メモリ領域アドレスに対応）、入力アドレス１４４２ａを用いて、以下の式により新アドレス１４４２ｂが計算される。
【００７７】
新アドレス＝入力アドレス−旧ベースアドレス＋新ベースアドレス
以上の計算により、パーティション内から出された入力アドレス（パーティションのローカルなリアルアドレス）を、共有メモリ空間のアドレスにリロケーションすることができる。アドレス変換テーブルの他のエントリに含まれていた場合にも、範囲判定回路１４４０’を介して同様な処理が進められる。出力アドレス１４４２ｂはコマンドのアドレス以外の部分と共に、ゲート１４４５（各選択信号のＯＲ１４４３ａによりイネーブルされる）を通じて、宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２に送られる。入力アドレス１４４２ａが、アドレス変換テーブルの何れのエントリともマッチしなかった場合は、エラーが検出される。
【００７８】
宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２は、ノード内から出されるコマンドをどのノードに出すかを決めるとともに、コマンド中のｇｌｏｂａｌ  ｂｉｔの値を決める。図１０に宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２ａの動作を示す。回路はコマンドの種類、および、コマンドが非共有領域へのコマンドか（コマンドが信号１４１ｂ側から入力された場合）、共有領域へのコマンドか（コマンドが信号１４４a側から入力された場合）に応じて、決められた動作を行う。
【００７９】
（１）非共有アドレスへのスヌープ要求（Ｆ、ＦＩ、Ｉ）コマンド
パーティション構成情報１６０よりパーティション内ノード構成を得た後、コマンドをパーティション内のノードにマルチキャストされる。
【００８０】
ｇｌｏｂａｌ  ｂｉｔは０にセットする。
【００８１】
（２）共有アドレスへのスヌープ要求（Ｆ、ＦＩ、Ｉ）コマンド
コマンドはシステムの全ノードにブロードキャストされる。
【００８２】
ｇｌｏｂａｌ  ｂｉｔは１にセットする。
【００８３】
（３）非共有アドレスへの主記憶アクセス（ＷＢ、ＵＷ、ＵＲ）コマンド
パーティション内主記憶構成情報１６５より、アクセスアドレスがどのノードの担当アドレス範囲に属するかを比較し、アクセスアドレスのＨｏｍｅノード（自パーティション内）を求めた後、Ｈｏｍｅノードにコマンドを送る。
ｇｌｏｂａｌ  ｂｉｔは０にセットする。
【００８４】
（４）共有アドレスへの主記憶アクセス（ＷＢ、ＵＷ、ＵＲ）コマンド
アドレス変換テーブルより、アクセスアドレスのＨｏｍｅノード１５５を求め、Ｈｏｍｅノードにコマンドを送る。
【００８５】
ｇｌｏｂａｌ  ｂｉｔは１にセットする。
【００８６】
（５）非共有アドレスへの返答（Ｄ、ＤＭ、ＮＤ）コマンド
要求元ノードにコマンドを返送する。（非共有領域へのＤＮＤは生じない。）
ｇｌｏｂａｌ  ｂｉｔは０にセットする。
【００８７】
（６）共有アドレスへの返答（Ｄ、ＤＭ、ＮＤ、ＤＮＤ）コマンド
要求元ノードにコマンドを返送する。
【００８８】
ｇｌｏｂａｌ  ｂｉｔは１にセットする。
【００８９】
以上の処理により、ノードから出されたコマンドをノード間接続スイッチ９００を介して、適当な送り先に送信することができる。
【００９０】
（Ｂ）ノードがコマンドを受け取った場合の処理
ノード間接続スイッチ９００より入力されたコマンドが、アドレス変換回路１４０に入力されると、先ず、共有領域判定・アドレスチェック回路１４３に入力される。共有領域判定・アドレスチェック回路１４３では、入力されたコマンドの分類、エラーチェックが行われる。図１１に共有領域判定・アドレスチェック回路１４３の詳細を示す。他ノードからのコマンド１４３ｄは先ず回路１４３０に入力され、ｇｌｏｂａｌ  ｂｉｔの値が調べられる。
【００９１】
ｇｌｏｂａｌ  ｂｉｔが０の場合、つまり、非共有領域のアクセスの場合は、コマンドは信号１４３０ａに出力される。その後、回路１４３２において、送り元ノードがパーティション内であるかどうかがパーティション構成情報１６０に基づきチェックされ、その後、回路１４３３において、アクセスアドレスが、パーティション内の何れかのノードの主記憶に含まれているかどうかが、パーティション内主記憶構成情報１６５に基づきチェックされる。１４３２、１４３３のチェックの両方が問題なかったコマンドは、信号１４３ｂを通じて返信待ち合わせ回路１４７に送られる（この場合アドレス変換は行われない）。１４３２、１４３３のチェックのどちらかに問題があったコマンド、つまり、パーティション外からのアクセス、パーティション内の主記憶の範囲外へのアクセスは、エラーとして検出される。以上により、パーティション内の非共有領域に対する不正なアクセスを防止することができる。
【００９２】
次にｇｌｏｂａｌ  ｂｉｔが１の場合（共有領域へのアクセスの場合）の処理を述べる。アクセスコマンドは、信号１４３０ｂを通じて回路１４３１に送られる。回路１４３１では、アドレス変換テーブル１５０の何れかのエントリの共有メモリ空間アドレス１５３からサイズ１５４までの範囲に、アクセスアドレスが含まれているかどうか（アクセスアドレスが、このノードが属しているパーティションが輸出入している共有領域の何れかに含まれているかどうか）がチェックされる。
【００９３】
アドレス変換テーブルに該当するエントリが有る場合、つまり、アクセスアドレスがこのノードが属するパーティションが共有するアドレスの場合は、コマンドは信号１４３１ａを通じて回路１４３４に伝えられる。回路１４３４では、ＤＮＤ以外のコマンドの場合（ＤＮＤは共有していないノードから返送される）、アドレス変換テーブルの該当するエントリの共有を許すノードを表わすビットマップ１５６に、アクセスコマンドの送り元のノードが入っているかどうかがチェックされる。チェックの結果問題がなかった場合、コマンドは信号１４３ａを通じて入力側変換回路１４５に送られる（共有領域アドレスから、パーティション内のリアルアドレスへの変換が行われる）。回路１４３４でのチェックの結果問題がある場合、つまり、該当する共有領域を共有することを許可されているパーティション以外のノードからのアクセスが行われた場合（ただし、ＤＮＤは除く）、エラーとして検出される。以上により、パーティション内の共有領域に対する不正なアクセスを防止することができる。
【００９４】
アドレス変換テーブルに該当するエントリが無い場合は、アクセスアドレスはこのノードが属するパーティションが共有する共有主記憶に含まれていない。この場合が起るのは、コマンドを送信した宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２において、共有領域へのスヌープ要求コマンド（Ｆ、ＦＩ、Ｉ）を一律に全てのノードにブロードキャストしているためである。従って、共有相手に入っていないノードにも、コマンドが送られてしまう。この場合は、スヌープ要求への返答の待ち合わせを正しく行うために、ノード内には該当するデータが無いことを示すＤＮＤコマンドを、アクセスノードに返答する必要がある（アクセスノードは、コマンドをブロードキャストした全ノードから返答があることを期待している）。そこで、アクセスコマンドは、回路１４３５でスヌープ要求であることをチェックされた後（スヌープ要求でない場合エラーが報告される）、信号１４３ｃを介してＤＮＤ返送回路１４６に伝えられる。ＤＮＤ返送回路１４６では、アクセス元のノードに対してＤＮＤコマンドを発行し、宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２を通じてアクセス元のノードに返送される。
【００９５】
次に、入力側変換回路１４５の動作について述べる。入力側変換回路では、アドレス変換テーブル１５０の情報に基づき、コマンド上の共有メモリ空間アドレスをパーティション内のリアルアドレスに変換する。内部の構成は、出力側変換回路と同等であるので（変換の方向が違うだけである）、詳細な説明は省略する。
【００９６】
最後に、返答待ち合わせ回路１４７の動作を述べる。返答待ち合わせ回路１４７は、他のノードからデータを読み出す事を要求する、Ｆ、ＦＩコマンドに対する返答（Ｄ，ＤＭ，ＮＤ，ＤＮＤ）を集計するための回路であり、その外のコマンドには影響を与えない。返答待ち合わせ回路１４７は、Ｆ，ＦＩコマンドを出した全てのノード、つまり、共有領域の場合はシステムの全ノード、非共有領域の場合はパーティション内の全ノード（パーティション構成情報１６０より判断する）、から返答（Ｄ，ＤＭ，ＮＤ，ＤＮＤの何れか）が来るまで待ち合わせ、以下の判断を行う。
【００９７】
（１）Ｄコマンドが返送された場合
Ｄコマンドが１つのノードから返送され、他のノードからはＮＤもしくはＤＮＤ、ＤＭが返送された場合、Ｄコマンドで読み出された最新のデータ（他のノードのキャッシュ上で変更されていたデータ）を返送する。
【００９８】
（２）ＤＭコマンドが返送された場合
ＤＭコマンドが１つのノードから返送され、他のノードからはＮＤもしくはＤＮＤが返送された場合、ＤＭコマンドで読み出された主記憶上のデータを返送する。
【００９９】
（３）ＮＤコマンドが返送された場合
他のノードからはＮＤもしくはＤＮＤのみが返送された場合、自ノードがｈｏｍｅノードである。データが無い旨返答する（その後主記憶アクセス回路１３０は主記憶１８０上のデータを読み出して返送する）。
【０１００】
以上述べた、返答待ち合わせ回路１４７の動作は、従来の階層型ＳＭＰのキャッシュ一貫性保持回路と同一であるので、内部の詳細は省略する。
【０１０１】
以上述べた本発明の主記憶共有型マルチプロセッサにおいて、他のノードへのアクセスがどのように行われるかを、Ｆコマンドを例に、以下に示す。
【０１０２】
（１）非共有領域へのＦコマンド
Ｆコマンドを発行したノードでは、ノード内より出されるＦコマンドは、共有領域判定回路１４１より、信号１４１ｂを通じて、宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２に送られ（アドレス変換は行われない）、パーティション内のノードにマルチキャストされる（ｇｌｏｂａｌ  ｂｉｔ＝０）。
【０１０３】
Ｆコマンドを受け取ったノードでは、共有領域判定・アドレスチェック回路１４３においてエラーチェックされた後に、信号１４３ｂ、返答待ち合わせ回路１４７を通じてノード内にＦコマンドが伝えられる（アドレス変換は行われない）。
【０１０４】
Ｆコマンドに対する返答（Ｄ、ＤＭ、ＮＤ）は、共有領域判定回路１４１より、信号１４１ｂを通じて、宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２に送られ（アドレス変換は行われない）、アクセス元のノードに返送される（ｇｌｏｂａｌ  ｂｉｔ＝０）。
【０１０５】
Ｆコマンドに対する返答を受け取ったアクセス元ノードでは、共有領域判定・アドレスチェック回路１４３においてエラーチェックされた後に、信号１４３ｂを通じて、返答待ち合わせ回路１４７に返答が伝えられる（アドレス変換は行われない）。返答待ち合わせ回路１４７では、パーティション内の全ノードからの回答を待ち合わせ、アクセス元のＣＰＵに回答を返す。
【０１０６】
（２）共有領域へのＦコマンド
Ｆコマンドを発行したノードでは、ノード内より出されるＦコマンドは、共有領域判定回路１４１より、出力側変換回路１４４を通じて、宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２に送られる。この過程でアクセスアドレスは、アクセス元パーティションのリアルアドレスから、共有メモリ空間のアドレスに変換される。Ｆコマンドは、システムの全ノードにブロードキャストされる（ｇｌｏｂａｌ  ｂｉｔ＝１）。
【０１０７】
Ｆコマンドを受け取ったノードが、アクセスされた共有領域を共有しているパーティションに入っている場合には、Ｆコマンドは、共有領域判定・アドレスチェック回路１４３においてエラーチェックされた後に、入力側変換回路を通じて返答待ち合わせ回路１４７にＦコマンドが伝えられる。この過程でアクセスアドレスは、共有メモリ空間のアドレスから、アクセス先のパーティションのリアルアドレスに変換される。その後、Ｆコマンドはノード内に伝えられる。ノード内でのスヌープは、アクセス先パーティションのローカルリアルアドレスで行われる。
【０１０８】
上記の結果生成された、Ｆコマンドに対する返答（Ｄ、ＤＭ、ＮＤ）は、共有領域判定回路１４１より、出力側変換回路１４４を通じて、宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２に送られる。この過程でアクセスアドレスは、アクセス先パーティションのリアルアドレスから、共有メモリ空間のアドレスに再度変換される。コマンドは、アクセス元のノードに返送される（ｇｌｏｂａｌ  ｂｉｔ＝１）。
【０１０９】
Ｆコマンドを受け取ったノードが、アクセスされた共有領域を共有しているパーティションに入っていない場合には、Ｆコマンドは、ＤＭＤ返答回路１４６に伝えられ、ＤＭＤコマンドがアクセス元のノードに返送される（ｇｌｏｂａｌ  ｂｉｔ＝１）。
【０１１０】
Ｆコマンドに対する返答（Ｄ、ＤＭ、ＮＤ、ＤＮＤ）を受け取ったアクセス元ノードでは、共有領域判定・アドレスチェック回路１４３においてエラーチェックされた後に、入力側変換回路１４５を通じて、返答待ち合わせ回路１４７に返答が伝えられる。この過程でアクセスアドレスは、共有メモリ空間のアドレスから、アクセス元のパーティションのリアルアドレスに戻される。返答待ち合わせ回路１４７では、システムの全ノードからの回答を待ち合わせ、アクセス元のＣＰＵに回答を返す。回答は、アクセス元パーティションのローカルリアルアドレスで行われる。
【０１１１】
以上述べたように、本発明のアドレス変換機構により、アクセス元ノード、アクセス先ノードともに、パーティション内のローカルなリアルアドレスを用いて、データをアクセスすることができる。
【０１１２】
次に、本発明の、主記憶共有型マルチプロセッサのパーティション間の共有メモリを、ＯＳ等のシステムソフトウェアがどのように管理するかを述べる。パーティション間共有メモリはＯＳそのものが管理するか、ＯＳとは別のパーティション間共有メモリを管理するためのシステムソフトウェア（ミドルウェア等）が管理してもよい。
【０１１３】
本システムでは、システムが立ち上がった際には、パーティション間は共有メモリを全く持たない。パーティション間の通信は、共有メモリとは別のＯＳ間通信手段１７０、９１０を用いて行う。以下で述べる共有メモリ管理のためのパーティション間通信は、全てこのＯＳ間通信手段を用いて行われる。
【０１１４】
以下では、共有メモリの主記憶の実体を持つノード（共有領域を輸出しているノード）をｈｏｍｅノードと呼ぶ。ｈｏｍｅノードが属するパーティションをｈｏｍｅパーティションと呼ぶ。以下では図１２〜１６を用いて、共有領域の主記憶のアロケーション、共有パーティションの追加、共有領域の削除、の３つに分けて、システムソフトウェアが動作する手順を詳細に述べる。
【０１１５】
以下では、共有領域の管理は、基本的にｈｏｍｅパーティションが集中管理すると仮定している。ｈｏｍｅパーティション以外が管理する場合も同様の手法で実現できる。
【０１１６】
（Ａ）共有領域の主記憶のアロケーション
共有領域の主記憶のアロケーションは、ｈｏｍｅパーティションで行われる（図１２）。要求されたサイズの共有領域に使用するための主記憶を確保し、アドレス変換テーブルに必要な情報を書込む。共有領域は動的にアロケートすることができる。
【０１１７】
先ず、パーティション内の各ノードのアドレス変換テーブルの未使用エントリ（Ｅ＝０のエントリ）を確保し（ステップ２００１）、要求されたサイズの実メモリをローカル主記憶上に確保する（ステップ２００２）。その後、システムソフトウェアは、他のパーティションのシステムソフトウェアと相談し、共有メモリ空間上に要求されたサイズの領域を確保する（ステップ２００３）。共有メモリ空間は全てのパーティションで同一のアドレスマップを持たなければならない。
【０１１８】
次に、パーティション内の各ノードのアドレス変換テーブルに、共有領域に関する以下の情報を書込む（ステップ２００４）。
【０１１９】
・パーティション内のリアルアドレス１５２（開始アドレス）
・共有メモリ空間のアドレス１５３（開始アドレス）
・共有領域の大きさ１５４
・ｈｏｍｅノード番号１５５（主記憶を確保したノードの番号）
・共有を許すノードのビットマップ１５６（０に初期化する）
この時点ではどのパーティションにも共有領域へのアクセス件は与えられていない。）
その後、パーティション内の各ノードのアドレス変換テーブルのＥビットに１を書込み、エントリを有効にする（ステップ２００５）。
【０１２０】
以上の処理により、自パーティションの主記憶上の領域を共有領域として輸出することができる。ステップ２００３で確保された共有メモリ空間上のアドレスから、ステップ２００２で確保された共有領域をアクセスできるようになる。
【０１２１】
ここで、注意しなければならないことは、パーティション内の全てのノードのアドレス変換テーブルに同一の内容を書込まなければならないことである。
【０１２２】
（Ｂ）共有パーティションの追加
（Ａ）で確保した共有領域を、他のパーティションがアクセスできるようにする（共有領域を輸入する）ためには以下に示す手順が必要である。共有領域の輸入処理は、ｈｏｍｅパーティションで共有領域が確保された後の任意のタイミングで、動的に行うことができる。
【０１２３】
（Ｂ１）共有領域を新しく輸入するパーティション
ある共有領域を新しく共有しようとする輸入側のパーティションでは以下の処理が必要である（図１３）。
【０１２４】
先ず、パーティション内の各ノードのアドレス変換テーブルの未使用エントリ（Ｅ＝０のエントリ）を確保し（ステップ２１０１）、主記憶が実装されていないリアル空間を、要求されたサイズだけ確保する（ステップ２１０２）。このリアル空間は、他のパーティションに主記憶の実体がある共有領域をアクセスするための窓として用いられる。その後、ｈｏｍｅパーティションのシステムソフトウェアに、該当する共有領域のアクセス許可を要求する（ステップ２１０３）。ここで、共有領域を新しく輸入するパーティションは、ｈｏｍｅノードがステップ２２０１〜２２０６の処理（後述）を行い、アクセス許可の回答を返送するのを待つ。
【０１２５】
その後、ｈｏｍｅパーティションからアクセス許可が来ると、アクセス許可と共に送られる、アドレス変換テーブルの該共有領域に関するエントリを受け取る（ステップ２１０４）。ステップ２１０４で受け取ったアドレス変換テーブルのエントリの内容（Ｅビット、パーティション内アドレス以外）を、パーティション内の各ノードのアドレス変換テーブルに書込み、ステップ２１０２で確保したリアルアドレスを、パーティション内の各ノードのアドレス変換テーブルのパーティション内アドレスフィールド１５２に書込む（ステップ２１０５）。最後に、パーティション内の各ノードのアドレス変換テーブルのＥビットに１を書込む。
【０１２６】
以上の処理により、共有領域の輸入は完了し、ステップ２１０２で確保されたリアルアドレスから、ｈｏｍｅノード上の共有領域をアクセスすることができる。
【０１２７】
（Ｂ２）ｈｏｍｅパーティション
ステップ２１０３において、共有領域のアクセス許可を要求されたパーティションのシステムソフトウェアでは、以下の処理が必要になる（図１４）。
【０１２８】
先ず、アクセス要求をチェックし、要求元のパーティションに、該当する共有領域のアクセスを許可するかどうか判断する（ステップ２２０１）。以下では、アクセスが許可されると仮定する。
【０１２９】
次に、アドレス変換テーブルの該共有領域に対応するエントリの共有を許すノードフィールド１５６の、（以前の）値をワーク変数（ここではＷとする）に記憶し（ステップ２２０２）、パーティション内の各ノードが持つアドレス変換テーブルの、該共有領域に対応するエントリの共有を許すノードフィールド１５６において、要求元パーティションに属する全ノードに該当するビットをセットする（ステップ２２０３）。これにより、要求元パーティションが、該当する共有領域を共有することが許可される。
【０１３０】
さらに、Ｗにおいて１が立っているノードが属するパーティション各々に（ただし、自パーティションは除く）、共有を許すノードフィールド１５６の新しい値を送り、該フィールドを更新することを要求する（ステップ２２０４）。ここで、注意しなければならないのは、パーティションごとに共有領域を管理するシステムソフトウェアは１つであり、各パーティションには１回要求を出せば良い事である。ステップ２２０４で、要求を出した全てのパーティションから、共有を許すノードフィールド１５６の変更が完了した旨のＡＣＫが来るのを待ち合わせる（ステップ２２０５）。
【０１３１】
最後に要求元のパーティションに、該共有領域のアクセス許可とともに、アドレス変換テーブルの該共有領域のエントリを送る（ステップ２２０６）。
【０１３２】
以上の処理により、該当する共有領域を共有している全ノードのアドレス変換テーブル上の、共有を許すノードフィールド１５６を更新し、要求元パーティションが該領域を共有できるようにすることができる。
【０１３３】
（Ｂ３）該当する領域を、今まで共有していたパーティション（ｈｏｍｅを除く）
該当する領域を、今まで共有していたパーティション（ｈｏｍｅを除く）では、ｈｏｍｅパーティションがステップ２２０４で出した要求を受け取り、パーティション内の各ノードが持つアドレス変換テーブルの、該共有領域に対応するエントリの共有を許すノードフィールド１５６を更新する。更新が完了すると、ｈｏｍｅパーティションにＡＣＫを返す。
【０１３４】
（Ｃ）共有領域の削除
共有領域の削除は、ｈｏｍｅパーティションにより開始され、該共有領域を共有していた全てのパーティションが協調して、以下の手順を実行する。共有領域の削除も動的に行うことができる。一旦共有領域が削除させた後は、今まで使われていたリソース（アドレス変換テーブル、主記憶、共有アドレス空間等）は再利用することができる。
【０１３５】
以下の処理では、アプリケーションプログラムは、該当する共有領域の使用を終了していると仮定する。従って、開放しようとしている共有領域へのアクセスは起らない。
【０１３６】
（Ｃ１）ｈｏｍｅパーティションにおける処理
ｈｏｍｅパーティションでは、該当している領域を共有している他の全てのパーティションに共有領域を削除させた後、自パーティションの共有領域を削除する。
【０１３７】
先ず、アドレス変換テーブルの共有を許すノードフィールド１５６に１が立っているノードが属するパーティション各々に（ただし、自パーティションは除く）、共有領域を消去することを依頼し（ステップ２３０１）、要求を出した全てのパーティションからＡＣＫが返るのを待つ（ステップ２３０２）。これにより、共有領域を輸入しているパーティションにおいて、共有領域が削除されたことが保証される。
【０１３８】
次に、自パーティション内の全てのプロセッサで、削除する共有領域のキャッシュ上のデータを全てパージし（ステップ２３０３）、キャッシュ上の古いデータを追い出す。その後、パーティション内の全ノードの、アドレス変換テーブルの削除する共有領域に該当するエントリを無効化し（Ｅビットに０を書込む）（ステップ２３０４）、共有メモリ空間上の領域、共有領域の実メモリを開放し（ステップ２３０５）、最後に、パーティション内の全てのプロセッサのＴＬＢをパージする（２３０６）。以上の処理により、共有領域をアクセスするために使われていたリソースを完全に開放することができる。
【０１３９】
（Ｃ２）共有領域を輸入しているパーティションにおける処理
ステップ２３０１で、ホームパーティションから共有領域を消去することを依頼された各パーティションでは、以下の処理が必要になる。
【０１４０】
先ず、自パーティション内の全てのプロセッサで、削除する共有領域のキャッシュ上のデータをパージする（ステップ２４０１）。その後、パーティション内の全てのノードのアドレス変換テーブルの該当するエントリを無効化し（ステップ２４０２）、共有メモリ空間、パーティション内のリアルアドレス空間に共有メモリをアクセスするために確保した領域（窓の領域）を開放し（ステップ２４０３）、パーティション内の全てのプロセッサのＴＬＢをパージする（２４０４）。これにより、該当するパーティションで、共有領域をアクセスするために使われていたリソースを完全に開放することができる。最後にｈｏｍｅパーティションにＡＣＫを返し（２４０５）、自パーティションで共有領域を完全に開放した事を通知する。
【０１４１】
以上述べた手順により、本発明の主記憶共有型マルチプロセッサにおいて、パーティション間の共有メモリを動的に管理することができる。
【０１４２】
以上述べた構成により、階層バス型ＳＭＰにおいて、パーティション間共有メモリを実現することができる。
【０１４３】
次に、パーティション間でリセットをかける機能について、詳細に説明する。図１７に本発明のリセット回路を示す。図ではノード０のみ詳細に示す。他のノードも全く同じ構成である。以下ではノード０の構成を詳細に説明する。各ノード内のＣＰＵ、主記憶アクセス回路、アドレス変換回路は、パーティションのリセット信号９２１によりドライブされる。各ノードは独立したリセット信号９２１〜９２８を持つ。各リセット信号はリセット伝達回路９２０によりドライブされる。さらに、各ノードはＣＰＵからアクセス可能なリセットレジスタ１７５を持ち、他のノードのリセットを要求できるようにする。
【０１４４】
先ず、外部リセット信号（パワーオン時のリセット、通常のリセットボタンからの信号）９２９がドライブされると、全てのノードのリセット信号（９２１〜９２８）がアクティブにされ、従来通り全ノードがリセットされる。
【０１４５】
各ノードのリセットレジスタは、リセットするノードを指示するノードのビットマップ１７５１とリセットを指示するＥｎａｂｌｅビット１７５０より、構成される。Ｅｎａｂｌｅビット１７５０が１にされると、ビットマップ１７５１が１であるノードに対してリセット信号が回路９２０を通じて送られる。
【０１４６】
以上の回路により、各ノードのソフトウェアが、任意のノードをリセットすることが可能になる。
【０１４７】
あるパーティション（以下ではパーティションＡと呼ぶ）がシステムダウンした場合には、システムダウンしなかったパーティションの一つ（以下ではパーティションＢと呼ぶ）のソフトウェアにより、下記の動作が行われる。
【０１４８】
（１）パーティションＢは、パーティションＡがシステムダウンしたことを検知する（共有メモリを介したハートビート機能等により知る事ができる）。
【０１４９】
（２）パーティションＢは、パーティション間共有メモリを介して、エラー原因の調査、エラー原因の除去を行い。さらに、パーティションＡが仕事を再開できるように情報を整備する。（本発明の共有メモリ機能は、システム領域を含めた任意のアドレスを共有することが可能であるため、ＯＳ迄含めたエラーの解析等が可能である。）
（３）パーティションＢは、ビットマップ１７５１のパーティションＡのノードに該当するビットを１にセットする（他のビットは０にする）。
【０１５０】
（４）パーティションＢは、Ｅｎａｂｌｅビット（１７５０）を１にした後０に戻す。（これにより、リセット伝達回路９２０を通じて、パーティションＡの各ノードにリセット信号が伝えられる。）
（５）以上の処理により、パーティションＡは実行を再開することができる。（（２）の情報を用いて、アプリケーションを再開する。）
以上述べたリセット機能により、各パーティションが相互にバックアップすることを可能にし、高い信頼性を実現することが可能になる。
【０１５１】
本発明は以上の実施の形態に限定されるのではなく、いろいろの変形例にも適用可能である。種々の変形例を以下に列挙する。
【０１５２】
（１）以上においては、共有領域に対するスヌープコマンドをシステム内の全ノードにブロードキャストしていた。
【０１５３】
それに対し、スイッチへのトラフィックを削減するために、アクセスされた共有領域を共有をしているパーティション内のノードにのみブロードキャストする方式も可能である。
【０１５４】
以下の点が変更になる。
【０１５５】
・宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２においてノード内から出たコマンドの送り先を決定する際に（図５参照）、共有領域に対するスヌープ（Ｆ，ＦＩ，Ｉ）
コマンドは、共有領域に対応するアドレス変換テーブルの、共有を許すパーティションフィールド１５６が１のノードのみにのマルチキャストされる。（これにより、共有していないパーティションにはスヌープ処理を送らない。）
・ＤＮＤコマンド、ＤＮＤ返答回路１４６は使用されない。
【０１５６】
・返答待合せ回路１４７において、共有領域へのコマンドの返答を待ち合わせる際には、共有領域に対応するアドレス変換テーブルの、共有を許すパーティションフィールド１５６が１であるノードの数の返答を待つ。（これにより、共有しているパーティション内のコマンドからの返答を待ち合わせる。）
（２）以上においては、アドレス変換テーブルにおいて、共有を許可するノードをノード毎のビットマップ１５６で覚えているが、パーティション毎のビットマップで覚える事も可能である。
【０１５７】
（３）以上においては、ノード内の主記憶アクセス回路１３０及び主記憶１８０は、アドレス変換回路１４０とＣＰＵバス１９０の間に入っているが、アドレス変換回路１４０がＣＰＵバス１９０に直結する（主記憶アクセス回路１３０とは直結しない）方式も可能である。主記憶アクセス回路１３０は、アドレス変換回路１４０とは別に、ＣＰＵバス１９０に接続される。この場合、他のノードから主記憶１８０へのアクセスは、ＣＰＵバス１９０を経由することになる。この場合も、ノードの入口にアドレス変換手段１４０を持つ、本発明をそのまま活用することができる。
【０１５８】
（４）以上においては、アドレス変換回路１４０の中の各要素１４１〜１４５、１４７は別の回路で書いているが、出力側（１４１、１４２、１４４）、入力側（１４３、１４５、１４７）の回路をそれぞれ共通化することにより、アドレス変換テーブルの検索等の重複する回路を削減することができる。
【０１５９】
（５）以上においては、共有メモリ空間のアドレスは任意の位置にとる事ができる。アドレス変換は任意の変換を実現するためにフルアソシアティブの表で実現する。
【０１６０】
それに対して、共有メモリ空間のアドレスを、上位ビットがノード番号、下位ビットがパーティション内のリアルアドレスとすることにより、ｈｏｍｅパーティションにおける、輸出側のアドレス変換を大幅に削減することができる。この場合、パーティション内リアルアドレスから、共有メモリ空間のアドレスに変換するためには、上位ビットにノード番号をつけ、共有メモリ空間のアドレスからパーティション内リアルアドレスに変換するためには、上位ビットのノード番号を削除するだけで良い。
【０１６１】
この場合、各ノードに、パーティション内の全主記憶空間についての共有領域の管理情報を覚えておくために、共有領域の管理単位（例えば１ＭＢ）毎に、共有の可否を表わすビット（その１ＭＢの空間が共有領域か、非共有領域かを覚えるビット）、共有を許すノードのビットマップ（アドレス変換テーブルのフィールド１５６と同じ情報）を、記憶するテーブルが必要である。
【０１６２】
これにより、輸出側（ｈｏｍｅパーティション）におけるアドレス変換、アクセスチェックを大幅に簡略化するとともひ、ハードウェアを削減することができる。
【０１６３】
（６）以上においては、輸出側と輸入側のアドレス変換テーブルは共通であるが、輸出側と輸入側で異なるテーブルを使用することができる。この場合、輸出側におけるｈｏｍｅノード番号１５５（冗長な情報である）を削除することができる。
【０１６４】
（７）以上において、共有領域は読み書き自由であるが、
共有領域をパーティション外からは読み出し専用にすることにより、ハードウェアを簡略化することができる。この場合、共有領域判定・アドレスチェック回路１４３における、アドレス、ノード番号のチェック（回路１４３２〜１４３４におけるチェック）は不要であり、また、共有を許すノードフィールド１５６はｈｏｍｅノードのみで記憶すればよい。共有領域判定・アドレスチェック回路１４３では、パーティション外からＦＩ，Ｉ，ＷＢ，ＵＷの書込み系のコマンドが到来した場合にはエラーを報告する。
【０１６５】
さらに、（５）〜（７）を組み合わせることにより、ハード量を大幅に削減できる。
【０１６６】
（８）アドレス変換テーブルに読み出し専用ビットを付加することにより、特定の共有領域のみをパーティション外から読み出し専用に設定することもできる。その場合、共有領域判定・アドレスチェック回路１４３は、読み出し専用ビットが立っている共有領域に、パーティション外からＦＩ，Ｉ，ＷＢ，ＵＷの書込み系のコマンドが到来した場合にはエラーを報告する。
【０１６７】
（９）以上においては、各ノードの出口の宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２において、ノードからのスヌープ（Ｆ，ＦＩ，Ｉ）コマンドの宛先を指定していた。それに対して、ノード間接続スイッチ９００内にパーティション構成情報１６０に相当する情報を持ち、ノード間接続スイッチ９００上で宛先を指定する方式をとることができる。その場合、コマンド中のｇｌｏｂａｌ  ｂｉｔに対応して、該ビットが１の場合（共有領域へのアクセスの場合）、システム内の全ノードにブロードキャストし、該ビットが０の場合（非共有領域へのアクセスの場合）、送り先のノードと同じパーティション内のノードにのみマルチキャストする
（１０）以上においては、ノード内のＣＰＵはバス１９０により接続されているが、その他の接続形態（スイッチによる接続、主記憶アクセス回路１３０への一対一接続）も可能である。
【０１６８】
（１１）上記実施の形態において、パーティション内主記憶構成情報１６５では、各ノードの担当する主記憶の範囲を開始アドレス１６６、終了アドレス１６７の組で別個に覚えていたが、ノードｎの終了アドレスとノードｎ＋１の開始アドレスを共通化する等の手法により、ハードウェアを削減する事ができる。また、各ノードが担当する領域の開始アドレス１６６、終了アドレス１６７の組を複数置くことにより、各ノードが複数のリアルアドレス領域を担当できるようにすることもできる。
【０１６９】
（１２）以上においては、ノード内の各ＣＰＵ（１１０〜１１３）は独立したキャッシュを持っているが、複数のＣＰＵに共有される外付けの３次キャッシュを持たせることも可能である。各ノードの主記憶アクセス回路１３０に、ＣＰＵのキャッシュＴＡＧのコピーを持ち、他のノードから到来するキャッシュコヒーレントトランザクションをフィルタリングする事も可能である。
【０１７０】
（１３）以上においては、ノード間接続スイッチ９００はクロスバネットワークにより接続されているが、他の形式のネットワーク（完全結合、多段網等）により接続することも可能である。
【０１７１】
（１４）上記実施の形態においては、他のノードへのネットワークコマンドを出す際に、宛先のノードをビットマップにより指定することにより、ブロードキャスト、マルチキャストを指示しているが、宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路１４２が、宛先のノード毎に複数のコマンドを出すことにより、ブロードキャスト、マルチキャストを実現することも可能である。
【０１７２】
【発明の効果】
本発明によれば、階層型バス型ＳＭＰの内部を複数のパーティションパーティションに分け、パーティション間で共有メモリを実現する際に、各ノードの出入り口において、共有領域のアドレスを、パーティション内のアドレスと、パーティション間で共通な共有メモリ空間アドレスとの間で、双方向に変換する手段を設けることにより、各パーティションが自由なアドレス空間を持つとともに、共有領域上のデータをスヌーププロトコルにより高速に管理することが可能であり、かつ、パーティション間での障害封じ込めを可能にする、パーティション間共有メモリ機構を実現することができる。さらに、上記アドレス変換情報を動的に生成、削除する手段を設けることにより、パーティション間の共有メモリを柔軟に管理することができる。
【図面の簡単な説明】
【図１】本発明のパーティション機構を持つ主記憶共有型マルチプロセッサである。
【図２】本発明の主記憶共有型マルチプロセッサにおけるパーティション分割の例である。
【図３】本発明の主記憶共有型マルチプロセッサにおける各パーティションのアドレス空間の例である。
【図４】アクセスアドレスと、各ノードのアドレス変換回路の動作との関係ををまとめた表である。
【図５】各ノードのアドレス変換テーブルの構成である。
【図６】各ノードの出力側変換回路の詳細図である。
【図７】各ノードのパーティション構成情報の構成である。
【図８】各ノードのパーティション内主記憶構成情報の構成である。
【図９】各ノードの共有領域判定回路の詳細図である。
【図１０】アクセスコマンドと、各ノードの宛先指定・ｇｌｏｂａｌ  ｂｉｔ付加回路の動作の関係を記述した表である。
【図１１】各ノードの共有領域判定・アドレスチェック回路の詳細図である。
【図１２】本発明のマルチプロセッサシステムにおいて、ｈｏｍｅパーティションが共有主記憶を確保する際のフロー図である。
【図１３】本発明のマルチプロセッサシステムにおいて、共有パーティションを追加する際の、追加されるパーティション側でのフロー図である。
【図１４】本発明のマルチプロセッサシステムにおいて、共有パーティションを追加する際の、ｈｏｍｅパーティション側でのフロー図である。
【図１５】本発明のマルチプロセッサシステムにおいて、共有領域を削除する際の、ｈｏｍｅパーティション側でのフロー図である。
【図１６】本発明のマルチプロセッサシステムにおいて、共有領域を削除する際の、共有領域を輸入しているパーティション側でのフロー図である。
【図１７】本発明のマルチプロセッサシステムにおける、リセット信号の詳細である。
【図１】
0004123621.tif 000002
【図２】
0004123621.tif 000003
【図３】
0004123621.tif 000004
【図４】
0004123621.tif 000005
【図５】
0004123621.tif 000006
【図６】
0004123621.tif 000007
【図７】
0004123621.tif 000008
【図８】
0004123621.tif 000009
【図９】
0004123621.tif 000010
【図１０】
0004123621.tif 000011
【図１１】
0004123621.tif 000012
【図１２】
0004123621.tif 000013
【図１３】
0004123621.tif 000014
【図１４】
0004123621.tif 000015
【図１５】
0004123621.tif 000016
【図１６】
0004123621.tif 000017
【図１７】
0004123621.tif 000018