(57)【特許請求の範囲】
【請求項１】
プロセッサ、メモリ及びＩ／Ｏ回路を含む複数のシステムリソースを有するコンピュータシステムにおいて、
各プロセッサが全てのメモリ及び少なくともあるＩ／Ｏ回路に電気的にアクセスするように、プロセッサ、メモリ及びＩ／Ｏ回路を電気的に相互接続するための相互接続メカニズムと、
複数の区画に上記システムリソースを分割するためのソフトウェアメカニズムと、
複数の上記区画のそれぞれにおいて実行される少なくとも１つのオペレーティングシステムのインスタンスと、
それぞれのプロセッサと前記複数のインスタンスの１つとの関連を定義するための複数のプロセッサのそれぞれに対する指示情報を記憶するプロセッサ指示情報記憶装置と、を備え、前記指示情報の内で所定のインスタンスのための指示情報のセットのそれぞれが、対応する複数の前記プロセッサが前記指示情報のセットによって表わされる特定の動作状態を有するかを示す複数の指示情報を含み、その動作状態は、前記プロセッサが前記所定のインスタンスと合致するタイプである潜在的な状態、前記プロセッサが前記所定のインスタンスの制御下にあるかどうかを示す構成状態、前記プロセッサが前記所定のインスタンスにより対称マルチプロセシング動作のために利用可能であるかどうかを示すアクティブ状態、を含み、
前記所定のインスタンスのための前記指示情報のセットと異なる指示情報のセットは、前記異なる指示情報のセットのそれぞれの指示情報が、前記所定のインスタンスと関連するプロセッサと異なるプロセッサに関連する指示情報であり、前記異なる指示情報のセットのそれぞれの指示情報が、その指示情報と関連するプロセッサが前記インスタンスからの特別な開始命令を必要とすることなく、前記インスタンスの制御に移された後に所定のインスタンスによる処理アクティビティを開始することが許されるべきかどうかを示す指示情報であることを特徴とするコンピュータシステム。
【請求項２】
上記指示情報は、第１のインスタンスに関連したメモリビットによるものであり、前記メモリビットの第１の特定の設定は、プロセッサが第１のインスタンスの制御下にあることを指示する請求項１に記載のコンピュータシステム。
【請求項３】
前記メモリビットの第２の設定は前記第１インスタンスの制御下にはない請求項２に記載のコンピュータシステム。
【請求項４】
前記プロセッサ指示情報記憶装置は、それぞれが異なるインスタンスに関連付けられ、その異なるインスタンスによって検査可能である、前記プロセッサがそれに関連するインスタンスの制御下にあるかどうかをそれぞれが示す、複数の指示情報を記憶する請求項１に記載のコンピュータシステム。
【請求項５】
それぞれの指示情報は、メモリビットの第１の特定の設定が、前記プロセッサが前記メモリビットと関連する前記区画の制御下にあることを示すものである前記メモリビットを含む請求項４に記載のコンピュータシステム。
【請求項６】
前記指示情報のそれぞれのセットは、前記メモリ中の複数のビットを含み、その複数のビットは前記所定のインスタンスに制御されるビットベクトルとして編成されることを特徴とする請求項１に記載のコンピュータシステム。
【請求項７】
前記指示情報は、前記メモリ中のビットによるものであり、そのビットは前記第１のインスタンスに制御されるビットベクトルの一部であることを特徴とする請求項２に記載のコンピュータシステム。
【請求項８】
前記オペレーティングシステムインスタンスの少なくとも２つは異なるオペレーティングシステムであることを特徴とする請求項１に記載のコンピュータシステム。
【請求項９】
前記コンピュータシステムは、前記区画のどれが前記コンピュータシステムの一部であるのかに関する情報を含む構成データベースを含むことを特徴とする請求項１に記載のコンピュータシステム。
【請求項１０】
マスターコンソールが、前記コンピュータシステムのパワーアップ時に前記構成データベースを生成する手段を含むことを特徴とする請求項９に記載のコンピュータシステム。
【請求項１１】
前記ソフトウェアメカニズムは、前記システムリソースを、それぞれが少なくとも１つのプロセッサ、いくつかのメモリ、及び幾つかのＩ／Ｏ回路を含む、複数の区画に分割するためのメカニズムを含むことを特徴とする請求項１に記載のコンピュータシステム。
【請求項１２】
プロセッサ、メモリ及びＩ／Ｏ回路を含む複数のシステムリソースを有するようにコンピュータシステムを構成させる方法において、
（ａ）各プロセッサが全てのメモリ及び少なくともあるＩ／Ｏ回路に電気的にアクセスするように、プロセッサ、メモリ、及びＩ／Ｏ回路を電気的に相互接続する段階；
（ｂ）少なくとも１つのプロセッサ、あるメモリ及びあるＩ／Ｏ回路を各々含む複数の区画に上記システムリソースを分割する段階；
（ｃ）複数の上記区画において少なくとも１つのオペレーティングシステムインスタンスを実行する段階；
（ｄ）各インスタンスごとに、前記システムに存在するプロセッサの記録を維持し、前記プロセッサが前記インスタンスと合致することを示す潜在的な状態、前記プロセッサが前記インスタンスの制御下にあるかどうかを示す構成状態、前記プロセッサが対称マルチプロセシング動作のために前記区画に利用可能であるかどうかを示すアクティブ状態を含む、前記インスタンスに関する前記プロセッサの複数の異なる動作状態を認識する段階であって、前記インスタンスからの特別な開始命令を必要とすることなく、前記インスタンスの制御に移された後、所定のインスタンスによる処理アクティビティを開始するように選択された状態を認識することを含む段階を備えたことを特徴とする方法。
【請求項１３】
（ｆ）第１インスタンスとの関連性及び第１インスタンスに対する動作状態を定義するために第１リソースに対する指示情報を前記メモリに記憶し、上記指示情報は、前記プロセッサを使用すべきかどうかを決定し、そしてビットマスクを用いて前記メモリの内容を変更するやり方で上記指示情報を変更するように、第１インスタンスにより使用される；
という段階を更に備えた請求項１２に記載の方法。
【請求項１４】
段階（ｃ）は、（ｃ１）前記複数の区画で少なくとも２つの異なるオペレーティングシステムインスタンスを実行させる段階であって、前記２つの異なるインスタンスは異なるオペレーティングシステムである段階を含むことを特徴とする請求項１２に記載の方法。
【請求項１５】
（ｅ）前記区画のどれが前記コンピュータシステムの一部であるのかに関する情報を含む構成データベースを生成する段階を含むことを特徴とする請求項１２に記載の方法。
【請求項１６】
段階（ｅ）は、（ｅ１）前記コンピュータシステムのパワーアップ時に前記構成データベースを生成する段階を含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記システムを複数の区画に分割する段階は、前記システムを、それぞれが少なくとも１つのプロセッサ、いくつかのメモリ、及び幾つかのＩ／Ｏ回路を含む、複数の区画に分割する段階を含むことを特徴とする請求項１２に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセッサ及び他のコンピュータハードウェアリソースが区画においてグループ編成され、その各々がオペレーティングシステムインスタンスを有するようなマルチプロセッサコンピュータアーキテクチャに係る。
【０００２】
【従来の技術】
現在の計算環境における多数のアプリケーションの効率的な動作は、高速で、パワフルなそして融通性のある計算システムによって左右される。このようなシステムの構成及び設計は、多数の個別の部門や、多数の異なる問題形式や、常時変化する計算ニーズが存在する「事業的」商業環境にこのようなシステムを使用すべきときには非常に複雑なものとなる。このような環境のユーザは、一般に、システムの容量、その速度及びその構成を迅速且つ容易に変更できることを希望する。又、ユーザは、システム上でのアプリケーションプログラムの実行を停止せずにリソースの良好な使用を達成するためにシステムの作業容量を拡張しそして構成を変更することも希望する。更に、ユーザは、リソースの利用性が最大になるようにシステムを構成して各アプリケーションに最適な計算構成をもたせるようにすることも希望する。
【０００３】
【発明が解決しようとする課題】
従来、計算速度は、データ、ビジネスロジック及びグラフィックユーザインターフェイスが別々の接続体であって、各接続体に専用の特定の計算リソースを有するような「何も共用しない」計算アーキテクチャを使用することにより対処されている。最初は、単一の中央処理ユニットが使用され、そしてこの単一の中央処理ユニットのクロックレートを高めることによりこのような計算システムのパワー及び速度が増加された。最近、１つの大きさプロセッサが単独で動作するのではなく、チームとして動作する多数のプロセッサを使用する計算システムが開発されている。このように、複雑なアプリケーションが単一のプロセッサにより実行されるのを待機するのではなく、それを多数のプロセッサ間に分散させることができる。このようなシステムは、一般に、単一のオペレーティングシステムにより制御される多数の中央処理ユニット（ＣＰＵ）で構成される。「系統的多処理」又はＳＭＰと称するマルチプロセッサシステムの形態においては、アプリケーションが全てのプロセッサにわたって等しく分散される。プロセッサはメモリも共用する。「非系統的多処理」又はＡＭＰと称する別の態様においては、１つのプロセッサが「マスター」として働き、そして他の全てのプロセッサが「スレーブ」として働く。それ故、オペレーティングシステムを含む全てのオペレーションは、マスターを通った後にスレーブプロセッサへ通されねばならない。これら多処理アーキテクチャは、付加的なプロセッサを追加することにより性能を高められるという利点を有するが、このようなシステムで実行されるソフトウェアは多数のプロセッサの利点を取り入れるために入念に書き込まれねばならず、そしてプロセッサの数が増加するにつれてソフトウェアを拡張することが困難であるという欠点もある。現在の商業的なワークロードは、単一ＳＭＰシステムとして８ないし２４個のＣＰＵを越えて拡張することができず、その厳密な数は、プラットフォーム、オペレーティングシステム及びアプリケーションの混合によって左右される。
【０００４】
性能を高めることについては、コンピュータリソース（マシン）をあるアプリケーション専用としてマシンリソースをそのアプリケーションに最適に同調する別の典型的な回答がある。しかしながら、異なる売主により開発された多数のアプリケーション及び別々のデータベースがほとんどの場所にあるために、大部分のユーザはこのような解決策を採用していない。それ故、特に、アプリケーションの混合体が常時変化するような環境においては全てのアプリケーションの間でリソースを専用化することは困難であり且つ経費がかかる。更に、専用リソースでは、特に異なる売り主が含まれる場合、リソースをあるコンピュータシステムから別のコンピュータシステムへ迅速且つ容易に移動することが本質的に不可能である。たとえこのような移動を実行することができても、通常、システムアドミニストレータの介在を伴い、少なくとも幾つかのコンピュータシステムをパワーダウンして再ブートすることが必要となる。
【０００５】
或いは又、コンピュータにおけるリソースのサブセットを特定のアプリケーションに使用できるように、コンピュータシステムをハードウェアで区画化することもできる。この解決策は、区画を変更できるのでリソースの永久的な専用化を回避するが、区画間のリソースの負荷バランス及びリソースの利用性により性能改善に関する問題は依然として残される。
利用性及びメンテナンス性の問題は、ほとんどのリソースを含む大きな集中型の頑丈なサーバが、多数の小さな複雑でないクライエントネットワークコンピュータとネットワーク形成されてそれらにサービスするような「全てを共用する」モデルによって対処されている。或いは、各システム即ち「 ノード」 がそれ自身のメモリを有しそしてそれ自身のオペレーティングシステムによって制御されるような「クラスター」が使用される。システムは、ディスクを共用しそしてある形式の通信ネットワークを経てそれらの間にメッセージを通すことにより対話する。クラスターシステムは、付加的なシステムをクラスターに容易に追加できるという利点を有する。しかしながら、ネットワーク及びクラスターは、共用メモリが欠乏し、そして相互接続帯域巾に限度があって、性能上制限を課するという悩みがある。
【０００６】
多くの事業用計算環境においては、２つの別々の計算モデルを同時に受け入れて、各モデルを最適化しなければならないことが明らかである。更に、いずれのシステムも再ブートせずに「オンザフライ」でコンピュータ構成を変更できることも強く要望される。このような受け入れを試みるために多数の公知解決策が使用されている。例えば、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシン・コーポレーションにより開発されて市場に出された「バーチャルマシン」又はＶＭと称する設計は、多数のバーチャルマシンを模擬するソフトウェアと組み合わせて１つ以上の物理的なプロセッサを伴う単一の物理的なマシンを使用している。これらバーチャルマシンの各々は、原理的に、その基礎となるリアルコンピュータの全ての物理的リソースにアクセスする。各バーチャルマシンへのリソースの指定は、「ハイパーバイザー」と称するプログラムによって制御される。システムには１つのハイパーバイザーしかなく、そしてそれは、全ての物理的なリソースを受け持つ。従って、他のオペレーティングシステムではなく、ハイパーバイザーが物理的ハードウェアの割り当てを取り扱う。ハイパーバイザーは、他のオペレーティングシステムからのリソースの要求をインターセプトし、そしてそれらの要求を全体的に正しいやり方で取り扱う。
【０００７】
ＶＭアーキテクチャは、「論理的区画」即ちＬＰＡＲの概念をサポートする。
各ＬＰＡＲは、その区画に論理的に指定された使用可能な物理的ＣＰＵ及びリソースの幾つかを含む。同じリソースを２つ以上の区画に指定することができる。
ＬＰＡＲは、アドミニストレータにより静的に設定されるが、負荷の変化に動的に、且つ再ブートを伴わずに、多数の仕方で応答し得る。例えば、各々１０個のＣＰＵを含む２つの論理的な区画が、１０個の物理的ＣＰＵを含む物理的システムに共用され、そして論理的な１０個のＣＰＵの区画が相補的なピーク負荷を有する場合には、ワークロードがシフトするときに再ブート又はオペレータの介入を伴わずに各区画が物理的な１０個のＣＰＵのシステム全体を引き継ぐことができる。
【０００８】
更に、各区画に論理的に指定されたＣＰＵは、通常のオペレーティングシステムのオペレータコマンドによって再ブートを伴わずに動的にターン「オン」及び「オフ」にすることができる。唯一の制約は、システムの初期化時にアクティブなＣＰＵの数が、任意の区画においてターン「オン」することのできるＣＰＵの最大数である点である。
更に、全ての区画の全体的なワークロード需要が、物理的なシステムによって供給できるもの以上になる場合には、ＬＰＡＲの重みを使用して、全ＣＰＵリソースのいかに多くを各区画に与えるかを定めることができる。これらの重みは、何ら障害を伴わずにオペレータがオンザフライで変更することができる。
別の公知システムは、「パラレルシスプレックス(Parallel Sysplex)」と称するもので、これも、インターナショナル・ビジネス・マシン・コーポレーションにより開発されて市場に出されたものである。このアーキテクチャは、各ＣＰＵに取り付けられる「カプリング・ファシリティ」と称するハードウェアエンティティを経てクラスター化された１組のコンピュータで構成される。各ノードにおけるカプリング・ファシリティは光ファイバリンクを経て接続され、そして各ノードは、最大１０個のＣＰＵを伴う従来のＳＭＰマシンとして働く。あるＣＰＵ命令は、カプリング・ファシリティを直接的にインボークする。例えば、あるノードは、カプリング・ファシリティと共にデータ構造体を登録し、次いで、カプリング・ファシリティは、各ノードのローカルメモリ内でデータ構造体をコヒレントに維持するように注意を払う。
【０００９】
カリフォルニア州、マウンテンビューのサン・マイクロシステムズにより開発されて市場に出されたエンタープライズ１００００ユニックスサーバは、「ダイナミック・システム・ドメインズ」と称する区画化構成体を使用して、単一物理的サーバのリソースを、各々スタンドアローンサーバとして動作する多数の区画即ちドメインへと論理的に分割する。各区画は、ＣＰＵ、メモリ及びＩ／Ｏハードウェアを有する。動的な再構成は、システムアドミニストレータが、再ブートを伴わずにドメインをオンザフライで形成し、サイズ変更し又は削除することができるようにする。各ドメインは、システム内の他のドメインから論理的に分離されたままであり、他のドメインにより発生されるソフトウェアエラー、或いはＣＰＵ、メモリ又はＩ／Ｏエラーからそれを完全に分離する。いずれのドメイン間でもリソースの共用はない。
【００１０】
スタンフォード大学で行われたハイブプロジェクト(Hive Project)は、１組のセルとして構成されたアーキテクチャを使用している。システムがブートするときに、各セルには、実行全体にわたってそれが所有するある範囲のノードが指定される。各セルは、あたかもそれが独立したオペレーティングシステムであるかのように、これらノードにおけるプロセッサ、メモリ及びＩ／Ｏデバイスを管理する。これらのセルは、ユーザレベルプロセスに単一システムの幻覚を与えるように協働する。
ハイブセルは、それらのリソースをローカル要求とリモート要求との間でいかに分割するかを決定する役目を負わない。各セルは、その内部リソースを維持しそしてそれが割り当てられたりソース内で性能を最適化するという役目のみを果たす。全体的なリソース割り当ては、「ワックス(wax) 」と称するユーザレベルプロセスにより行われる。ハイブシステムは、セル間にある欠陥含有境界を使用することによりデータの崩壊を防止するように試みる。セル間の欠陥含有境界にも拘わらずマルチプロセッサシステムから予想される緊密な共用を実施するために、種々のセルカーネルの協働によりリソース共用が実施されるが、そのポリシーは、ワックスプロセスにおいてカーネルの外部で実施される。メモリ及びプロセッサの両方を共用することができる。
【００１１】
カリフォルニア州、マウンテンビューのシリコン・グラフィックス・インクにより開発されて市場に出された「セルラーＩＲＩＸ」と称するシステムは、従来の系統的な多処理システムを拡張することによってモジュラー計算をサポートする。セルラーＩＲＩＸアーキテクチャは、全体的なカーネルテキスト及びデータを最適なＳＭＰサイズのチャンク即ち「セル」へと分散する。セルは、１つ以上のマシンモジュールより成る制御ドメインを表わし、各モジュールは、プロセッサ、メモリ及びＩ／Ｏより成る。これらセルにおいて実行されるアプリケーションは、オペレーティングシステムテキスト及びカーネルデータ構造体のローカルコピーを含むローカルオペレーティングシステムサービスの全セットに大きく依存し、オペレーティングシステムの１つのインスタンスのみが全システムに存在する。セル間整合は、アプリケーションイメージが、データコピー又は余計なコンテクストスイッチのオーバーヘッドを被ることなく他のセルからの処理、メモリ及びＩ／Ｏリソースを直接的及び透過的に利用できるようにする。
【００１２】
オレゴン州、ビューバートンのシーケント・コンピュータ・システム・インクにより開発されて市場に出されたＮＵＭＡ―Ｑと称する別の既存のアーキテクチャは、メモリの一部分当たり４つのプロセッサのグループ即ち「クオド」を、ＮＵＭＡ−Ｑ  ＳＭＰノードのための基本的なビルディングブロックとして使用している。各クオドにＩ／Ｏを追加すると、性能が更に改善される。それ故、ＮＵＭＡ―Ｑアーキテクチャは、物理的メモリを分散するだけでなく、所定数のプロセッサ及びＰＣＩスロットを各プロセッサの次に入れる。各クオドのメモリは、慣例的な意味のローカルメモリではない。むしろ、これは、物理的なメモリアドレス空間の一部分であり、特定のアドレス範囲を有する。アドレスマップは、メモリにわたって均一に分割され、各クオドはアドレス空間の隣接部分を含む。オペレーティングシステムの１つのコピーのみが実行され、そしていずれのＳＭＰシステムの場合とも同様に、それはメモリにあって、１つ以上のプロセッサにおいて区別なく同時にプロセスを実行する。
【００１３】
従って、融通性のあるコンピュータシステムを提供するために多数の試みがなされているが、既存のシステムは、どれも、著しい欠点を有する。それ故、改良された融通性、リソース利用性、リソース移動能力及び拡張性を与える新規なコンピュータシステム設計をもつことが要望される。
【００１４】
【課題を解決するための手段】
本発明は、プロセッサ、メモリ及びＩ／Ｏ回路を含む複数の指定可能なシステムリソースを有するコンピュータシステムに関する。このコンピュータシステムは、各プロセッサが全てのメモリ及び少なくともあるＩ／Ｏ回路に電気的にアクセスするように、プロセッサ、メモリ及びＩ／Ｏ回路を電気的に相互接続するための相互接続メカニズムと；少なくとも１つのプロセッサ、あるメモリ及びあるＩ／Ｏ回路を各々含む複数の区画に上記指定可能なシステムリソースを指定するためのソフトウェアメカニズムと；各区画において実行されるオペレーティングシステムインスタンスとを備えたことを特徴とする。
本発明は、プロセッサ、メモリ及びＩ／Ｏ回路を含む複数の指定可能なシステムリソースを有するコンピュータシステムを動作する方法として実施することができる。この方法は、各プロセッサが全てのメモリ及び少なくともあるＩ／Ｏ回路に電気的にアクセスするように、プロセッサ、メモリ、及びＩ／Ｏ回路を電気的に相互接続し；少なくとも１つのプロセッサ、あるメモリ及びあるＩ／Ｏ回路を各々含む複数の区画に上記指定可能なシステムリソースを指定し；そして各区画においてオペレーティングシステムインスタンスを実行するという段階を備えたことを特徴とする。
【００１５】
【発明の実施の形態】
本発明の上記及び更に別の効果は、添付図面を参照した以下の詳細な説明から良く理解されよう。
Ａ．全システム
本発明の原理により構成されたコンピュータプラットホームは、オペレーティングシステムソフトウェアの多数のインスタンスを同時に実行できるように区画化することのできるマルチプロセッサシステムである。このシステムは、そのメモリ、ＣＰＵ及びＩ／Ｏサブシステムを区画化するためのハードウェアサポートを必要としないが、あるハードウェアを使用して、欠陥を分離しそしてソフトウェアエンジニアリングのコストを最小にするための付加的なハードウェア支援を与えることもできる。本発明のソフトウェアアーキテクチャをサポートするのに必要なインターフェイス及びデータ構造体を以下に説明する。ここに述べるインターフェイス及びデータ構造体は、特定のオペレーティングシステムを使用しなければならないことを意味するものでもないし、又、単一形式のオペレーティングシステムのみが同時に実行することを意味するものでもない。以下に述べるソフトウェア要件を実施するオペレーティングシステムは、本発明のシステムオペレーションに関与することができる。
【００１６】
システムビルディングブロック
本発明のソフトウェアアーキテクチャは、多数のＣＰＵ、メモリ及びＩ／Ｏハードウェアを組み込んだハードウェアプラットホームにおいて動作する。図１に示すようなモジュラーアーキテクチャを使用するのが好ましいが、他のアーキテクチャも使用できることが当業者に明らかであり、これらのアーキテクチャは、モジュラーである必要がない。図１は、４つの基本的なシステムビルディングブロック（ＳＢＢ）１００―１０６で構成されたコンピュータシステムを示す。ここに示す実施形態では、ブロック１００のような各ビルディングブロックは同一のものであり、多数のＣＰＵ１０８―１１４と、多数のメモリスロット（メモリ１２０として集合的に示されている）と、Ｉ／Ｏプロセッサ１１８と、システムを別のシステムに接続できるスイッチ（図示せず）を含むポート１１６とを備えている。しかしながら、他の実施形態では、ビルディングブロックは、同一である必要はない。所望数のシステムビルディングブロックをそれらのポートにより接続することにより大きなマルチプロセッサシステムを構成することができる。バス技術ではなく、スイッチ技術を使用して、ビルディングブロック要素を接続し、改良された帯域巾が得られると共に、非均一なメモリアーキテクチャ（ＮＵＭＡ）を得ることができる。
【００１７】
本発明の原理によれば、ハードウェアスイッチは、ライン１２２で概略的に示すように構成されたビルディングブロックの数に拘わりなく各ＣＰＵが使用可能な全てのメモリ及びＩ／Ｏポートをアドレスできるように構成される。更に、全てのＣＰＵは、プロセッサ間割り込みのような従来のメカニズムによって全てのＳＢＢのいずれかの又は全ての他のＣＰＵと通信することができる。従って、ＣＰＵ及び他のハードウェアリソースは、ソフトウェアのみに関連することができる。このようなプラットホームアーキテクチャは、本来拡張可能であり、多量の処理能力、メモリ及びＩ／Ｏを単一のコンピュータで得ることができる。
ソフトウェアの観点から本発明の原理に基づいて構成されたＡＰＭＰコンピュータシステム２００が図２に示されている。このシステムでは、多数のオペレーティングシステムインスタンス２０８、２１０、２１２を同時に実行できるようにハードウェア要素が割り当てられている。好ましい実施形態では、この割り当ては、「コンソール」プログラムと称するソフトウェアプログラムにより実行され、これは、以下で詳細に述べるように、パワーアップ時にメモリにロードされる。コンソールプログラムは、プログラム２１３、２１５及び２１７として図２に概略的に示されている。コンソールプログラムは、既存のアドミニストレーティブプログラム又は個別のプログラムの変形であって、これは、オペレーティングシステムと対話して好ましい実施形態のオペレーションを制御する。コンソールプログラムは、システムリソースを仮想化せず、即ち実行中のオペレーティングシステム２０８、２１０及び２１２と、メモリ及びＩ／Ｏユニット（図２には示さず）のような物理的なハードウェアとの間にソフトウェアレイヤを形成しない。又、同じハードウェアにアクセスするために、実行中のオペレーティングシステム２０８、２１０及び２１２がスワップされる状態もない。むしろ、本発明のシステムは、ハードウェアを区画へと論理的に分割する。オペレーティングシステムインスタンス２０８、２１０及び２１２の役割は、リソースを適切に使用して、リソース割り当て及び共用の整合を与えることである。ハードウェアプラットホームは、リソースを分割するためのハードウェア支援を任意に与えることができ、そしてオペレーティングシステムがメモリを崩壊したり或いは別のオペレーティングシステムコピーにより制御されるデバイスに悪影響を及ぼすおそれを最小にするための欠陥バリアを与えることもできる。
【００１８】
コピー２０８のようなオペレーティングシステムの単一のコピーに対する実行環境は「区画」２０２と称され、そして区画２０２における実行中のオペレーティングシステム２０８は、「インスタンス」２０８と称される。各オペレーティングシステムインスタンスは、コンピュータシステムにおける他の全てのオペレーティングシステムインスタンスとは独立してブート及び実行することができ、そして以下に述べるように、オペレーティングシステムインスタンス間でにリソースの共用に協働的に参加することができる。
オペレーティングシステムインスタンスを実行するために、区画は、ハードウェア再スタートパラメータブロック（ＨＷＲＰＢ）と、コンソールプログラムのコピーと、ある量のメモリと、１つ以上のＣＰＵと、コンソールに対する専用の物理的ポートをもたねばならない少なくとも１つのＩ／Ｏバスとを含まねばならない。ＨＷＲＰＢは、コンソールプログラムとオペレーティングシステムとの間に通される構成ブロックである。コンソールプログラム２１３、２１５及び２１７の各々は、ポート２１４、２１６及び２１８として各々示されたコンソールポートに接続される。ポート２１４、２１６及び２１８のようなコンソールポートは、一般的に、シリアルラインポート、又は取り付けられるグラフィックス、キーボード及びマウスオプションの形態である。本発明のコンピュータシステムの説明上、専用のグラフィックポート及び関連入力デバイスをサポートする能力は必要とされないが、特定のオペレーティングシステムはそれを必要とする。各区画に対してシリアルポートで充分であるというように基本的に仮定する。個別のターミナル又は独立したグラフィックコンソールを用いて、各コンソールにより発生された情報を表示できるが、ワークステーション、ＰＣ又はＬＡＴ２２８に取り付けられた単一のマルチプレクサ２２６にシリアルライン２２０、２２２及び２２４を全て接続してコンソール情報を表示できるのが好ましい。
【００１９】
区画は、システムビルディングブロックと同意語ではないことに注意するのが重要である。例えば、区画２０２は、図１のビルディングブロック１００及び１０６のハードウェアを構成するが、区画２０４及び２０６は、各々、ビルディングブロック１０２及び１０４のハードウェアを構成してもよい。又、区画は、ビルディングブロックのハードウェアの一部分を含んでもよい。
区画は、「初期化」或いは「非初期化」することができる。初期化された区画は、オペレーティングシステムインスタンスを実行するのに充分なリソースを有し、イメージロードされたコンソールプログラムと、使用可能で且つ実行を行う一次ＣＰＵとを有する。初期化された区画は、コンソールプログラムの制御下にあってもよいし、或いはオペレーティングシステムインスタンスを実行してもよい。初期化された状態においては、区画は、それに指定されたハードウェア要素の完全な所有権及び制御権を有し、そして区画それ自体だけがその要素を解除できる。
【００２０】
本発明の原理によれば、リソースは、１つの初期化された区画から別の区画へ再指定することができる。リソースの再指定は、リソースが現在指定されている初期化された区画でしか実行できない。ある区画が非初期化状態にあるときは、他の区画は、そのハードウェア要素を再指定したり、それを削除したりすることができる。
非初期化の区画とは、コンソールプログラム又はオペレーティングシステムの制御下で実行する一次ＣＰＵをもたない区画である。例えば、ある区画は、パワーアップ時に一次ＣＰＵを実行するに充分なリソースがないために非初期化とされるか、又はシステムアドミニストレータがコンピュータシステムを再構成するときに非初期化とされる。非初期化状態にあるときは、ある区画は、そのハードウェア要素を再指定することもできるし、その区画を別の区画によって削除することもできる。非指定のリソースは、いずれの区画によって指定することもできる。区画は、協働リソース共用を許すために個別の実行コンテクストをグループ分けするための基礎となる「コミュニティ」に編成することができる。同じコミュニティ内の区画は、リソースを共用することができる。同じコミュニティ内にない区画は、リソースを共用できない。リソースは、同じコミュニティにない区画間では、システムアドミニストレータによりリソースを指定解除し（及び使用を停止し）そしてリソースを手動で再構成することによって手動で移動するしかない。コミュニティは、独立したオペレーティングシステムドメインを形成したり、又はハードウェア使用のためのユーザポリシーを実施したりするのに使用できる。図２において、区画２０２及び２０４は、コミュニティ２３０へと編成されている。区画２０６は、それ自身のコミュニティ２０５にある。これらのコミュニティは、以下に述べる構成ツリーを用いて形成することができ、そしてハードウェアにより実施することができる。
【００２１】
コンソールプログラム
本発明の原理により構成されたコンピュータシステムがプラットホームにおいてイネーブルされたときには、多数のＨＷＲＰＢを形成しなければならず、多数のコンソールプログラムコピーをロードしなければならず、そして各ＨＷＲＰＢがシステムの特定の要素に関連するようにシステムリソースを指定しなければならない。これを行うために、実行すべき第１のコンソールプログラムは、システムないの全てのハードウェアを表わす構成ツリー構造体をメモリに形成する。このツリーは、又、ソフトウェア区画化情報、及び区画に対するハードウェア指定も含み、このツリーについては、以下で詳細に述べる。より詳細には、ＡＰＭＰシステムがパワーアップされるときには、システムが動作しているプラットホームに特有のハードウェアにより、あるＣＰＵが従来のやり方で一次ＣＰＵとして選択される。一次ＣＰＵは、次いで、コンソールプログラムのコピーをメモリにロードする。このコンソールコピーは、「マスターコンソール」プログラムと称される。一次ＣＰＵは、最初に、マスターコンソールプログラムの制御の下で動作し、マシン全体を所有している単一のシステムが存在するという仮定でテスト及びチェックを実行する。その後、システム区画を定義する１組の環境変数がロードされる。最終的に、マスターコンソールは、環境変数に基づいて区画を形成しそして初期化する。この後者のプロセスにおいて、マスターコンソールは、構成ツリーを形成し、付加的なＨＷＲＰＢデータブロックを形成し、付加的なコンソールプログラムコピーをロードし、そして別のＨＷＲＰＢにおけるＣＰＵを始動するように動作する。各区画は、次いで、そこで実行されるオペレーティングシステムインスタンスを有し、このインスタンスは、これも又その区画で実行されるコンソールプログラムコピーと協働する。非構成のＡＰＭＰシステムでは、マスターコンソールプログラムは、一次ＣＰＵと、最低量のメモリと、プラットホーム特定のやり方で選択された物理的なシステムアドミニストレータのコンソールとを含む単一の区画を最初に形成する。コンソールプログラムコマンドは、次いで、システムアドミニストレータが付加的な区画を形成すると共に、各区画に対するＩ／Ｏバス、メモリ及びＣＰＵを構成できるようにする。
【００２２】
区画に対するリソースの関連付けがコンソールプログラムによって行われた後に、その関連性が不揮発性ＲＡＭに記憶され、その後のブート中にシステムを自動的に構成できるようにされる。その後のブート中に、マスターコンソールプログラムは、新たな要素の追加及び除去を取り扱うために現在の構成を記憶された構成で確認しなければならない。新たに追加される要素は、それらがシステムアドミニストレータによって指定されるまで非指定状態に入れられる。ハードウェア要素を除去したときに、区画のもつリソースがオペレーティングシステムを実行するのに不充分なものとなる場合には、リソースがその区画に指定され続けるが、付加的な新たなりソースがそこに指定されるまでオペレーティングシステムインスタンスを実行することはできない。既に述べたように、コンソールプログラムは、オペレーティングシステムのブートアップ中にオペレーティングシステムへ通されたＨＷＲＰＢによりオペレーティングシステムインスタンスと通信する。コンソールプログラムに対する基本的な要件は、ＨＷＲＰＢそれ自体及びその多数のコピーを形成できねばならないことである。コンソールプログラムにより形成された各ＨＷＲＰＢコピーは、独立したオペレーティングシステムインスタンスをメモリのプライベート区分へとブートすることができ、そしてこのようにブートされる各オペレーティングシステムインスタンスは、ＨＷＲＰＢに入れられる独特の値によって識別することができる。この値は区画を指示し、そしてオペレーティングシステムインスタンスＩＤとしても使用される。
【００２３】
更に、コンソールプログラムは、区画内で実行されているオペレーティングシステムによる要求に応答してその区画内で使用できるＣＰＵからあるＣＰＵを除去するためのメカニズムを形成するように構成される。各オペレーティングシステムインスタンスは、コンソールプログラムに制御権が通されるように、遮断、停止又はさもなくばクラッシュできねばならない。逆に、各オペレーティングシステムインスタンスは、他のオペレーティングシステムインスタンスとは独立して、あるオペレーションモードへと再ブートできねばならない。
コンソールプログラムにより形成された各ＨＷＲＰＢは、システム内にあるか又はシステム全体をパワーダウンせずにシステムに追加できる各ＣＰＵに対してＣＰＵスロット特有のデータベースを含む。物理的に存在する各ＣＰＵは、「存在」とマークされるが、特定の区画において最初に実行するＣＰＵだけは、区画のＨＷＲＰＢにおいて「使用可能」とマークされる。ある区画において実行されるオペレーティングシステムインスタンスは、ＨＷＲＰＢのＣＰＵごとの状態フラグフィールドにおける「存在」（ＰＰ）ビットにより将来のある時間にＣＰＵを使用できると確認することができ、そしてこれを表わすデータ構造体を形成することができる。ＣＰＵごとの状態フラグフィールドにおける「使用可能」（ＰＡ）ビットは、これがセットされると、その関連ＣＰＵが区画に現在関連されていて、ＳＭＰオペレーションに加えるように案内できることを指示する。
【００２４】
構成ツリー
上述したように、マスターコンソールプログラムは、ハードウェアの構成と、各区画に対するシステムの各要素の指定とを表わす構成ツリーを形成する。次いで、各コンソールプログラムは、ＨＷＲＰＢにツリーのポインタを入れることにより構成ツリーをそれに関連したオペレーティングシステムインスタンスに識別する。図３に戻ると、構成ツリー３００は、システム内のハードウェア要素と、プラットホームの制約及び最小値と、ソフトウェア構成とを表わす。マスターコンソールプログラムは、以前の初期化中に発生された構成情報を含む不揮発性ＲＡＭに記憶された情報と、ハードウェアの検知とにより発見された情報を用いてツリーを形成する。
【００２５】
マスターコンソールは、全てのオペレーティングシステムインスタンスによってコピーが共用されるところのツリーの単一コピーを発生することもできるし、又は各インスタンスごとにツリーを複写することもできる。ツリーの単一コピーは、独立したメモリを伴うシステムに単一の欠陥点を形成し得るという欠点がある。しかしながら、多数のツリーコピーを発生するプラットホームは、コンソールプログラムがツリーに対する変化を同期状態に保持できることを必要とする。
構成ツリーは、根ノード、子ノード及び兄弟ノードを含む多数のノードより成る。各ノードは、固定のヘッダと、オーバーレイデータ構造体に対する可変長さ延長部とで形成される。ツリーは、全システムボックスを表わすツリー根ノード３０２で出発し、その後、ハードウェア構成（ハードウェア根ノード３０４）、ソフトウェア構成（ソフトウェア根ノード３０６）及び最小区画要件（テンプレート根ノード３０８）を示すブランチが続く。図３において、矢印は、子供及び兄弟関係を表わす。あるノードの子供は、ハードウェア及びソフトウェア構成の構成要素を表わす。兄弟は、同じ親をもつ意外関係のない要素の同等のものを表わす。ツリー３００のノードは、ソフトウェアコミュニティ及びオペレーティングシステムインスタンス、ハードウェア構成、構成制約、性能境界及びホットスワップ能力に関する情報を含む。又、これらノードは、ハードウェア対ソフトウェア所有権の関係又はハードウェア要素の共用も与える。これらのノードは、メモリ内に隣接して記憶され、そしてツリー３００のツリー根ノード３０２から特定ノードへのアドレスオフセットが「ハンドル」を形成し、これは、オペレーティングシステムインスタンスにおける同じ要素を明確に識別するためにオペレーティングシステムインスタンスにより使用することができる。更に、本発明のコンピュータシステムの各要素は、個別のＩＤを有する。これは、説明上、６４ビットの無符号値である。このＩＤは、要素の形式及びサブ形式値と組み合わされたときには独特の要素を特定しなければならない。即ち、所与の形式の要素に対し、ＩＤは、特定の要素を識別しなければならない。ＩＤは、単純な数字、例えば、ＣＰＵ  ＩＤであってもよいし、他の何らかの独特のエンコード又は物理的なアドレスであってもよい。要素ID及びハンドルは、任意の数のコンピュータシステムがハードウェア又はソフトウェアの特定の部片を識別できるようにする。即ち、いずれの特定方法を使用するいかなる区画も、同じ仕様を用いて同じ結果を得ることができねばならない。
【００２６】
上記のように、本発明のコンピュータシステムは、１つ以上のコミュニティより成り、これらコミュニティは、次いで、１つ以上の区画より成る。独立したコミュニティにわたって区画を分割することにより、本発明のコンピュータシステムは、デバイス及びメモリの共用を制限し得る構成にすることができる。コミュニティ及び区画は、高密度でパックされるＩＤを有する。ハードウェアプラットホームは、システムに存在するハードウェアに基づいて区画の最大数を決定し、そしてプラットホーム最大限界を有する。区画及びコミュニティＩＤは、ランタイム中にこの値を決して越えることがない。ＩＤは、削除された区画及びコミュニティに対して再使用される。コミュニティの最大数は、区画の最大数と同じである。更に、各オペレーティングシステムインスタンスは、独特のインスタンス識別子、例えば、区画ＩＤと具体的な数字との組み合わせにより識別される。
【００２７】
コミュニティ及び区画は、ソフトウェア根ノード３０６により表わされ、これは、コミュニティノード子供（そのコミュニティノード３１０が示されている）と、区画ノード孫（その２つのノード３１２及び３１４が示されている）とを有する。ハードウェア要素は、ハードウェア根ノード３０４により表わされ、これは、コンピュータシステムに現在存在する全てのハードウェアのハイアラーキー表示を示す子供を含む。ハードウェア要素の「所有権」は、適当なソフトウェアノード（３１０、３１２又は３１４）を指す関連ハードウェアノードにおけるハンドルにより表わされる。これらのハンドルは図４に示されており、これについて、以下に説明する。特定の区画が所有する要素は、その区画を表わすノードを指すハンドルを有する。多数の区画が共用するハードウェア（例えば、メモリ）は、その共用が拘束されるコミュニティを指すハンドルを有する。未所有のハードウェアは、ゼロのハンドル（根ノード３０２を表わす）を有する。
【００２８】
ハードウェア要素は、所有権をいかに分割するかについて構成上の制約を課する。各要素に関連した構成ツリーノードにおける「ｃｏｎｆｉｇ」ハンドルは、ハードウェア根ノード３０４を指すことにより要素をコンピュータシステムのどこにでも自由に関連させるべきかどうか決定する。しかしながら、あるハードウェア要素は、祖先ノードに結合することができ、そしてこのノードの一部分として構成されねばならない。この例は、どこで実行するかの制約をもたないが、ＳＢＢ３２２又は３２４のようなシステムビルディングブロック（ＳＢＢ）の構成要素であるＣＰＵである。この場合、たとえＣＰＵがＳＢＢの子供であっても、そのｃｏｎｆｉｇハンドルは、ハードウェア根ノード３０４を指す。しかしながら、Ｉ／Ｏバスは、そのＩ／Ｏプロセッサを所有する区画以外の区画が所有することはできない。この場合に、Ｉ／Ｏバスを表わす構成ツリーノードは、Ｉ／Ｏプロセッサを指すｃｏｎｆｉｇハンドルを有する。ハードウェア構成を支配するルールは、プラットホーム特有のものであるから、この情報は、ｃｏｎｆｉｇハンドルによりオペレーティングシステムインスタンスに与えられる。各ハードウェア要素は、「親和力(affinity)」ハンドルも有する。この親和力ハンドルは、ｃｏｎｆｉｇハンドルと同じであるが、要素の最良の性能を得る構成を表わす。例えば、ＣＰＵ又はメモリは、コンピュータシステムのどこででも構成できるようにするｃｏｎｆｉｇハンドル（ハードウェア根ノード３０４を指す）を有するが、最適な性能のためには、ＣＰＵ又はメモリは、それらが一部分であるところのシステムビルディングブロックを使用するように構成されねばならない。その結果、ｃｏｎｆｉｇポインタは、ハードウェア根ノード３０４を指すが、親和力ポインタは、ノード３２２又は３２４のようなＳＢＢノードを指す。いかなる要素の親和力もプラットホーム特有のもので、ファームウェアにより決定される。ファームウェアは、「最適」な自動構成を作るように求めるときに子の情報を使用することができる。
【００２９】
又、各ノードは、ノードの形式及び状態を指示する多数のフラグも含む。これらのフラグは、表わされる要素が「ホットスワップ可能」な要素でありそしてその親及び兄弟とは独立してパワーダウンできることを指示するｎｏｄｅ ｈｏｔｓｗａｐフラグを含む。しかしながら、このノードの全ての子供は、この要素がパワーダウンする場合にはパワーダウンしなければならない。子供がこの要素と独立してパワーダウンできる場合には、それに対応するノードにおいてこのビットをセットしなければならない。別のフラグは、ｎｏｄｅ ｕｎａｖａｉｌａｂｌｅフラグであり、これは、セットされると、ノードにより表わされる要素が使用のために現在入手できないことを指示する。
２つのフラグｎｏｄｅ ｈａｒｄｗａｒｅ及びｎｏｄｅ ｔｅｍｐｌｅｔｅはノードの形式を指示する。又、ノードが初期化された区画を表わすか又は現在の一次ＣＰＵであるＣＰＵを表わすかを指示するために、ｎｏｄｅ ｉｎｉｔｉａｌｉｚｅｄ及びｎｏｄｅ ｃｐｕ ｐｒｉｍａｒｙのような更に別のフラグを設けることもできる。
【００３０】
構成ツリー３００は、オペレーティングシステムがバスを検知せずにバス及びデバイス構成テーブルを形成できるようにするデバイスコントローラのレベルまで拡張できる。しかしながら、ツリーは任意のレベルで終了してもよい。但し、それより下の全ての要素を独立して構成できない場合である。システムソフトウェアは、ツリーにより与えられないバス及びデバイス情報を検知することが依然として要求される。
コンソールプログラムは、システムの各要素に構成の制約がもしあればそれを実行及び実施する。一般に、要素は、制約なしに指定可能である（例えば、ＣＰＵは、制約をもたない）、又は別の要素の一部分としてのみ構成可能である（例えば、デバイスアダプタは、そのバスの一部分としてのみ構成可能である）。上記のように、ＣＰＵ、メモリ及びＩ／Ｏデバイスを独特のソフトウェアエンティティへとグループ編成したものである区画は、最小要件も有する。例えば、区画のための最小ハードウェア要件は、少なくとも１つのＣＰＵと、あるプライベートメモリ（プラットホームに従属する最小のもので、コンソールメモリを含む）と、物理的な非共用コンソールポートを含むＩ／Ｏバスとである。
【００３１】
区画のための最小要素要件は、テンプレート根ノード３０８に含まれた情報によって与えられる。テンプレート根ノード３０８は、ノード３１６、３１８及び３２０を含み、これは、コンソールプログラム及びオペレーティングシステムインスタンスを実行することのできる区画を形成するために設けなければならないハードウェア要素を表わす。構成エディタは、新たな区画を形成するためにどんな形式及びどれほど多くのリソースを使用できねばならないかを決定するための基礎としてこの情報を使用することができる。
新たな区画の形成中に、テンプレートサブツリーは、「ウオーキング」され、そしてテンプレートサブツリーの各ノードごとに、新たな区画により所有される同じ形式及びサブ形式のノードがあって、コンソールプログラムをロードし且つオペレーティングシステムインスタンスをブートすることができねばならない。テンプレートツリーに同じ形式及びサブ形式のノードが２つ以上ある場合には、新たな区画にも多数のノードがなければならない。コンソールプログラムは、コンソールプログラムをロードしそして初期化オペレーションを試みる前に、テンプレートを使用して、新たな区画が最小要件を有することを確認する。
【００３２】
構成ツリーノードの特定の実施に関する詳細な例を以下に示す。これは、単に説明上のものに過ぎず、これに限定されるものではない。各ＨＷＲＰＢは、現在の構成と、区画に対する要素の指定とを与える構成ツリーを指さねばならない。ＨＷＲＰＢの構成ポインタ（ＣＯＮＦＩＧフィールドにおける）は、構成ツリーを指すのに使用される。ＣＯＮＦＩＧフィールドは、ツリーに対するメモリプールのサイズと、メモリの初期チェック和とを含む６４バイトヘッダを指す。ヘッダの直後に、ツリーの根ノードがある。ツリーのヘッダ及び根ノードは、ページ整列される。
構成ツリーに割り当てられるメモリの全サイズ（バイト）は、ヘッダの第１のクオドワードに位置される。このサイズは、ハードウェアページサイズの倍数となるように保証される。ヘッダの第２のクオドワードは、チェック和に指定される。構成ツリーを検査するために、オペレーティングシステムインスタンスは、ツリーをそのローカルアドレス空間にマップする。オペレーティングシステムインスタンスは、全てのアプリケーションに許された読み取りアクセスでこのメモリをマップするので、特権のないアプリケーションが、それがアクセスしてはならないコンソールデータへのアクセスを得るのを防止するための何らかの構成を設けねばならない。メモリを適当に割り当てることによってアクセスが制限される。例えば、メモリはページ整列されそして全ページに割り当てられてもよい。通常は、オペレーティングシステムインスタンスは、構成ツリーの第１ページをマップし、ツリーサイズを得、そして構成ツリーの使用のために割り当てられたメモリを再マップする。全サイズは、ツリーへの動的な変化に対してコンソールにより使用される付加的なメモリを含むことができる。
【００３３】
好ましくは、構成ツリーノードは固定のヘッダで形成され、そしてその固定のヘッダに続いて形式特有の情報を任意に含む。サイズフィールドは、ノードの全長を含み、ノードは、この例では６４バイトの倍数で割り当てられ、そして必要に応じてパッドが付けられる。ノードの固定ヘッダにおけるフィールドを以下に一例として説明する。
0004634548.tif 000002
0004634548.tif 000003
上記定義において、形式定義「ｕｎｉｔ」は、適当なビット長さをもつ無符号の整数である。上述したように、ノードは、ハンドルにより位置決めされ、識別される（上記定義では、ｔｙｐｅｄｅｆ  ＧＣＴ ＨＡＮＤＬＥにより識別される）。ここに例示するハンドルは、構成ツリーのベースからノードまでの符号付き３２ビットオフセットである。値は、コンピュータシステムの全ての区画にわたって独特である。即ち、ある区画において得られるハンドルは、全ての区画において、ノードをルックアップするために、又はコンソールコールバックへの入力として有効でなければならない。ｍａｇｉｃフィールドは、ノードが実際に有効なノードであることを指示する所定のビットパターンを含む。
【００３４】
ツリー根ノードは、システム全体を表す。そのハンドルは常にゼロである。即ち、それは、常に、ｃｏｎｆｉｇヘッダに続く構成ツリーに割り当てられたメモリの第１の物理的な位置に配置される。これは、次の定義を有する。
0004634548.tif 000004
根ノードにおけるフィールドは、次のように定義される。
【００３５】
ｌｏｃｋ
このフィールドは、ツリーの構造体への変更を禁止しようとするソフトウェアと、ソフトウェア構成とによって単純なロックとして使用される。この値が―１（全てのビットがオン）であるときには、ツリーがロック解除され、そしてこの値が０以上であるときには、ツリーがロックされる。このフィールドは、原子オペレーションを用いて変更される。ロックルーチンの発呼者は区画ＩＤを送り、これはロックフィールドに書き込まれる。これは、欠陥追跡を助成しそしてクラッシュ中に回復するのに使用できる。
ｔｒａｎｓｉｅｎｔ ｌｅｖｅｌ
このフィールドは、ツリー更新の始めに増加される。
【００３６】
ｃｕｒｒｅｎｔ ｌｅｖｅｌ
このフィールドは、ツリー更新の完了時に更新される。
ｃｏｎｓｏｌｅ ｒｅｑ
このフィールドは、区画のベースメモリセグメントにおいてコンソールに対して要求されるメモリ（バイト）を特定する。
ｍｉｎ ａｌｌｏｃ
このフィールドは、メモリ断片の最小サイズと、割り当て単位を保持する（断片サイズは、割り当ての倍数でなければならない）。これは、２の累乗でなければならない。
ｍｉｎ ａｌｉｇｎ
このフィールドは、メモリ断片に対する整列要求を保持する。これは、２の累乗でなければならない。
【００３７】
ｂａｓｅ ａｌｌｏｃ
このフィールドは、区画のベースメモリセグメントとして要求される最小メモリ（バイト）（ｃｏｎｓｏｌｅ ｒｅｑを含む）を特定する。これは、区画に対してコンソール、コンソール構造体及びオペレーティングシステムがどこでロードされるかである。これは、ｍｉｎａｌｌｏｃ及びｍｉｎａｌｌｏｃの倍数以上でなければならない。
ｂａｓｅ ａｌｉｇｎ
このフィールドは、区画のベースメモリセグメントに対する整列要求を保持する。これは、２の累乗でなければならず、そして少なくともｍｉｎ ａｌｉｇｎの整列を有していなければならない。
【００３８】
ｍａｘ ｐｈｙｓ ａｄｄｒｅｓｓ
このフィールドは、現在パワーオン及び使用可能でないメモリサブシステムを含むシステムに存在し得る計算された最大の物理的アドレスを保持する。
ｍｅｍ ｓｉｚｅ
このフィールドは、現在システムにある全メモリを保持する。
ｐｌａｔｆｏｒｍ ｔｙｐｅ
このフィールドは、ＨＷＲＰＢのフィールドから得たプラットホームの形式を記憶する。  ｐｌａｔｆｏｒｍ ｎａｍｅ
このフィールドは、ツリー根ノードのベースからプラットホームの名前を表わすストリングまでの整数オフセットをあらわす。
【００３９】
ｐｒｉｍａｒｙ ｉｎｓｔａｎｃｅ
このフィールドは、第１のオペレーティングシステムインスタンスの区画ＩＤを保持する。
ｆｉｒｓｔ ｔｒｅｅ
このフィールドは、ツリー根ノードから新たなノードに使用されるメモリプールの第１の空きバイトまでのオフセットを保持する。
ｈｉｇｈ ｌｉｍｉｔ
このフィールドは、構成ツリー内に有効なノードを配置できるところの最上位アドレスを保持する。これは、ハンドルが適正なものであることを確認するためにコールバックにより使用される。
【００４０】
ｌｏｏｋａｓｉｄｅ
このフィールドは、削除されていて再請求することのできるノードのリンクされたリストのハンドルである。コミュニティ又は区画が削除されたときには、ノードがこのリストにリンクされ、そして新たな区画又はコミュニティを形成すると、空きプールからの割り当ての前にこのリストが探索される。
ａｖａｉｌａｂｌｅ
このフィールドは、ｆｉｒｓｔ ｔｒｅｅフィールドにより指示された空きプールに残っているバイト数を保持する。
ｍａｘ ｐａｒｔｉｔｉｏｎｓ
このフィールドは、現在使用できるハードウェアリソースの量に基づいてプラットホームにより計算される区画の最大数を保持する。
【００４１】
ｐａｒｔｉｔｉｏｎｓ
このフィールドは、根ノードのベースからハンドルのアレーまでのオフセットを保持する。各区画ＩＤは、このアレーへのインデックスとして使用され、そして区画ノードハンドルは、インデックスされた位置に記憶される。新たな区画が形成されたときに、このアレーを検査し、対応する区画ノードハンドルをもたない第１の区画ＩＤを見つけ、この区画ＩＤは新たな区画に対するＩＤとして使用される。
ｃｏｍｍｕｎｉｔｉｅｓ
このフィールドも、根ノードのベースからハンドルのアレーまでのオフセットを保持する。各コミュニティＩＤは、このアレーへのインデックスとして使用され、そしてコミュニティノードハンドルがこのアレーに記憶される。新たなコミュニティが形成されると、このアレーを検査して、対応するコミュニティノードハンドルをもたない第１のコミュニティＩＤを見つけ、このコミュニティＩＤは新たなコミュニティに対するＩＤとして使用される。区画以上の多くのコミュニティが存在することはなく、従って、アレーは、区画の最大数に基づくサイズとされる。
【００４２】
ｍａｘ ｐｌａｔｆｏｒｍ ｐａｒｔｉｔｉｏｎ
このフィールドは、たとえ付加的なハードウェアが追加されても（潜在的にインスワップされる）プラットホームに同時に存在し得るプラットホームの最大数を保持する。
ｍａｘ ｆｒａｇｍｅｎｔｓ
このフィールドは、メモリ記述子を分割できるところの断片のプラットホーム定義最大数を保持する。これは、メモリ記述子ノードにおける断片のアレーサイズを決めるのに使用される。
ｍａｘ ｄｅｓｃ
このフィールドは、プラットホームのメモリ記述子の最大数を保持する。
【００４３】
ＡＰＭＰ ｉｄ
このフィールドは、システムソフトウェアによってセットされて不揮発性ＲＡＭにセーブされるシステムＩＤを保持する。
ＡＰＭＰ ｉｄ ｐａｄ
このフィールドは、ＡＰＭＤ  ＩＤのパッディングバイトを保持する。
ｂｉｎｄｉｎｇｓ
このフィールドは、「バインディング」のアレーに対するオフセットを保持する。各バインディングエントリは、ハードウェアノードの形式、親でなければならないノードの形式、構成バインディング、及びノード形式に対する親和力バインディングを記述する。バインディングは、ノード形式がいかに関係しているか及び構成及び親和力ルールを決定するためにソフトウェアにより使用される。
【００４４】
コミュニティは、区画間のリソースの共用の基礎を与える。ハードウェア要素は、コミュニティのいずれの区画にも指定できるが、メモリのようなデバイスの実際の共用は、コミュニティ内で生じるだけである。コミュニティノード３１０は、ＡＰＭＰデータベースと称する制御区分のポインタを含み、これは、オペレーティングシステムインスタンスがインスタンス間でメモリ及び通信を共用する目的でコミュニティにおけるアクセス及び会員資格を制御できるようにする。ＡＰＭＰデータベース及びコミュニティの形成は、以下に詳細に述べる。コミュニティに対する構成ＩＤは、コンソールプログラムにより指定された符号付き１６ビット整数値である。ＩＤ値は、プラットホームにおいて形成できる区画の最大数より決して大きくならない。
【００４５】
ノード３１２又は３１４のような区画ノードは、コンソールプログラムの独立コピー及びオペレーティングシステムの独立コピーを実行することのできるハードウェアの集合をあらわす。このノードに対する構成ＩＤは、コンソールにより指定される符号月６ビット整数値である。このＩＤは、プラットホームにおいて形成できる区画の最大数より決して大きくならない。ノードは、次の定義を有する。
0004634548.tif 000005
定義されたフィールドは、次の定義を有する。
【００４６】
ｈｗｒｐｂ
このフィールドは、この区画に対するハードウェア再スタートパラメータブロックの物理的なアドレスを保持する。ＨＷＲＰＢの対する変化を最小にするために、ＨＷＲＰＢは、区画のポインタ又は区画ＩＤを含まない。むしろ、区画がＨＷＲＰＢのポインタを含む。従って、システムソフトウェアは、ＨＷＲＰＢの物理的アドレスを含む区画に対する区画ノードをサーチすることにより、それが実行される区画の区画ＩＤを決定することができる。
ｉｎｃａｒｎａｔｉｏｎ
このフィールドは、区画の一次ＣＰＵが区画においてブート又は再スタート動作を実行するたびに増加される値を保持する。
【００４７】
ｐｒｉｏｒｉｔｙ
このフィールドは、区画の優先順位を保持する。
ｏｓ ｔｙｐｅ
このフィールドは、区画にロードされるオペレーティングシステムの形式を指示する値を保持する。
ｐａｒｔｉｔｉｏｎ ｒｅｓｅｒｖｅｄ １
このフィールドは、将来の使用のために指定される。
ｉｎｓｔａｎｃｅ ｎａｍｅ ｆｏｒｍａｔ
このフィールドは、インスタンス名ストリングのフォーマットを示す値を保持する。
【００４８】
ｉｎｓｔａｎｃｅ ｎａｍｅ
このフィールドは、ｉｎｓｔａｎｃｅ ｎａｍｅ ｆｏｒｍａｔフィールドを使用して解釈されるフォーマット化ストリングを保持する。このフィールドの値は、区画において実行されているオペレーティングシステムインスタンスに高レベル経路名を与える。このフィールドは、システムソフトウェアによりロードされ、そしてパワーサイクルにわたってセーブされない。このフィールドは、パワーアップ時及び区画形成及び削除時にクリアされる。
ノード３２２又は３２４のようなシステムビルディングブロックノードは、図２に示すようなモジュラー設計のシステムプラットホームにより使用されるハードウェア又は概念的グループ構成の任意の断片をあらわす。ＱＢＢ（クオドビルディングブロック）は、ＳＢＢの特定例であって、図１のユニット１００、１０２、１０４及び１０６のようなユニットに対応する。ＳＢＢノード３２２及び３２４の子供は、入力／出力プロセッサノード３２６及び３４０を含む。
【００４９】
ノード３２８ないし３３２及び３４２ないし３４６のようなＣＰＵノードは、ＳＭＰ動作に対して一次ＣＰＵとして動作できると仮定する。ＣＰＵが一次として動作できない稀なケースにおいては、ＳＭＰ動作において一次ＣＰＵとして使用できないことを示すＳＵＢＴＹＰＥコードを有する。この情報は、新たな区画を形成するリソースを構成するときに重要である。又、ＣＰＵノードは、ＣＰＵが現在どこで実行するかについての情報を搬送する。ある区画の一次ＣＰＵは、ＮＯＤＥ ＦＬＡＧフィールドのＮＯＤＥ ＣＰＵ ＰＲＩＭＡＲＹフラグをセットする。ＣＰＵノードは、次の定義を有する。
0004634548.tif 000006
ノード３３４又は３４８のようなメモリサブシステムノードは、物理的メモリコントローラと、それらコントローラが与えるメモリの指定とを表わすノードを一緒にグループ構成にする「擬似」ノードである。このノードの子供は、コンソールが一緒に動作する（インターリーブされて）ように構成した１つ以上のメモリコントローラノード（例えば、ノード３３６及び３５０）と、メモリの物理的な連続範囲を示す１つ以上の物理的な記述ノード（例えば、ノード３３８及び３５２）とで構成される。
【００５０】
メモリコントローラノード（例えば、ノード３３６又は３５０）は、物理的なハードウェア要素を表わすのに使用され、そしてその所有者は、通常、エラー及び初期化を取り扱う区画である。メモリコントローラは、初期化、テスト及びエラーに対する特定のオペレーティングシステムインスタンスを必要とするので、コミュニティに指定することはできない。しかしながら、メモリ記述子ノードにより定義されるメモリ記述は、異なる区画又はコミュニティがメモリ記述子内の特定のメモリ範囲を所有できるようにする「断片」に分割することができる。メモリは、同時に共用することができるか又は「プライベート」エリアに分割できるという点で他のハードウェアリソースとは異なる。各メモリ記述子ノードは、メモリを区画間で分割できると共に、区画（コミュニティによって所有された）間で共用できるようにするサブセット範囲のリストを含む。メモリ記述子ノード（例えば、ノード３３８又は３５２）は、次のように定義される。
【００５１】
0004634548.tif 000007
ｍｅｍ ｆｌａｇフィールドは、メモリ記述子ノードのベースから、次の定義をもつＧＣＴ ＭＥＭ ＤＥＳＣ構造体のアレーまでのオフセットを保持する。
【００５２】
0004634548.tif 000008
メモリ記述ノード（ノード３３８又は３５２）における断片の数は、プラットホームファームウェアにより制限される。これは、メモリ区分の上限を形成し、そして構成ツリーの無制限成長を制限する。ソフトウェアは、ツリー根ノード３０２（上記した）におけるｍａｘ ｆｒａｇｍｅｎｔｓフィールドにより、又は値を返送するための適当なコンソールコールバックを呼び出すことにより、断片の最大数を決定することができる。各断片は、ｃｏｎｆｉｇバインディングと、メモリ記述子及びメモリサブシステムノードの所有権とが許す場合には、いかなる区画に指定することもできる。各断片は、基本的物理アドレスと、サイズと、所有者フィールドと、使用の形式を指示するフラグとを含む。
【００５３】
共用メモリアクセスを許すために、メモリサブシステムの親ノード及びメモリ記述子ノードは、コミュニティにより所有されねばならない。メモリ記述子内の断片は、コミュニティ（共用）によるか又はコミュニティ内の任意の区画によって所有される。
断片は、ツリー根ノード３０２に与えられる最小割り当てサイズ及び指定をもつことができる。区画に対する基本的メモリ（コンソール及びオペレーティングシステムがロードされるところの断片）は、他の断片よりも大きな割り当て及び指定をもつことができる（上記のツリー根ノード定義を参照）。メモリ記述子ノードの所有者フィールドがある区画である場合には、その区画でしか断片を所有することができない。
【００５４】
図４は、所有権のパースペクティブから見たときの図３の構成ツリーを示す。
ある区画のコンソールプログラムは、その区画の一次ＣＰＵが実行を開始するときにその区画において実行されているオペレーティングシステムインスタンスに区画リソースの所有権及び制御を譲る。「所有権」の概念は、ハードウェアリソース及びＣＰＵがソフトウェア区画及びコミュニティにいかに指定されるかを決定する。構成ツリーは、図４に示す所有権ポインタを有し、これは、区画（排他的アクセス）及びコミュニティ（共用アクセス）のようなソフトウェアへのハードウェアデバイスのマッピングを決定する。オペレーティングシステムインスタンスは、構成ツリーの情報を使用して、それがどのハードウェアリソースに対してアクセス及び再構成制御を有するかを決定する。
【００５５】
所有者をもたない受動的なハードウェアリソースは、所有権が確立されるまで使用することができない。構成ツリーを変更することにより所有権が確立されると、オペレーティングシステムインスタンスは、リソースの使用を開始することができる。あるインスタンスが初期要求を行うと、所有するオペレーティングシステムがリソースの使用を停止するようにさせるか、又はオペレーティングシステムインスタンスが実行されていない区画においてコンソールプログラムがリソースの使用を停止する動作をとることにより、所有権を変更することができる。次いで、構成ツリーは、リソースの所有権を別のオペレーティングシステムインスタンスへ移行するように変更される。オペレーティングシステムがハードウェアリソースの使用を停止するようにさせるに必要な動作は、オペレーティングシステムに特有のもので、変更により影響を受けるオペレーティングシステムインスタンスの再ブートを必要とする。
【００５６】
所有されたアクティブな状態から非所有のインアクティブな状態へのリソースの移行を管理するために、ツリーの各ノードには、２つのフィールドが与えられる。「ｏｗｎｅｒ」フィールドは、リソースの所有者を表し、所有するソフトウェア区画又はコミュニティのハンドルが設けられる。ＡＰＭＰシステムのパワーアップ時に、ハードウェアノードの「ｏｗｎｅｒ」フィールドは、不揮発性ＲＡＭの内容からロードされて、初期構成を確立する。
リソースの所有者を変更するために、ハードウェア要素の「ｏｗｎｅｒ」フィールドと、ｃｏｎｆｉｇハンドルにより要素に結合されたハードウェア要素の子孫の「ｏｗｎｅｒ」フィールドとにおいてハンドル値が変更される。「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドは、リソースの現在のユーザを表わす。「ｏｗｎｅｒ」及び「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドが同じ非ゼロ値を保持するときには、そのリソースが所有されそしてアクティブとなる。リソースの所有者のみがリソースの指定を解除することができる（「ｏｗｎｅｒ」フィールドをゼロにセットする）。ナルの「ｏｗｎｅｒ」及び「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドをもつリソースは、非所有であり、インアクティブである。ナルの「ｏｗｎｅｒ」及び「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドを有するリソースのみが新たな区画又はコミュニティに指定される。
【００５７】
リソースが指定解除されるときには、所有者は、「ｏｗｎｅｒ」フィールド又は「ｏｗｎｅｒ」及び「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」の両フィールドを指定解除するように決定することができる。この決定は、区画において実行される所有のオペレーティングシステムインスタンスが、所有権の指定解除の前に、リソースの使用を停止できる機能に基づく。所有権を引き継ぐために再ブートが必要とされる場合は、「ｏｗｎｅｒ」フィールドがクリアされるが、「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドは変更されない。所有のオペレーティングシステムインスタンスが再ブートされるときには、コンソールプログラムは、初期化中に所有者をもたないリソースに対していかなる「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドもクリアすることができる。
【００５８】
初期化中に、コンソールプログラムは、それが所有者であり且つ「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドがナルであるところのいかなるノードについても「ｏｗｎｅｒ」フィールドに合致するように「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドを変更する。システムソフトウェアは、それが現在所有者であるところのハードウェアしか使用してはならない。コミュニティにより所有されたリソースを指定解除する場合には、状態間の移行を管理するのはシステムソフトウェアの役割である。ある実施形態では、リソースを別の区画にロードすることができる。この状態において、「ｏｗｎｅｒ」及び「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドは、両方とも有効であるが、等しくはない。以下のテーブルは、考えられるリソース状態と、「ｏｗｎｅｒ」及び「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドの値とを要約するものである。
【００５９】
0004634548.tif 000009
ＣＰＵは能動的なデバイスであり、そしてＣＰＵの共用は、ＣＰＵがその所有者でない区画のコンテクストにおいて実行し得ることを意味するので、ＣＰＵの所有権は、受動的なリソースの所有権とは異なる。構成ツリーにおけるＣＰＵノードは、ＣＰＵが通常どの区画により所有されるかそしてＣＰＵがどの区画で現在実行しているかを指示する２つのフィールドを備えている。「ｏｗｎｅｒ」フィールドは、ＣＰＵの公称所有権、又はより詳細にはシステムパワーアップ時にＣＰＵが最初に実行するところの区画を示す値を含む。
【００６０】
初期の所有権が確立されるまで（即ち、「ｏｗｎｅｒ」フィールドが非指定である場合は）、ＣＰＵがマスターコンソールにより指令されたＨＷＲＰＢに入れられるが、ＣＰＵに対するＨＷＲＰＢａｖａｉｌａｂｌｅビットは、いかなるＨＷＲＰＢでも送られない。この組み合わせは、ＣＰＵがＳＭＰオペレーションにおいていかなるオペレーティングインスタンスに加わることも防止する。ＣＰＵの所有権が確立されると（「ｏｗｎｅｒ」フィールドに有効区画ハンドルが満たされると）、ＣＰＵは、もし必要であれば、所有する区画へと移動し、その区画に関連したＨＷＲＰＢの「ａｖａｉｌａｂｌｅ」ビットをセットし、そしてその区画において実行されているインスタンスのＳＭＰオペレーションに加わるか又はＳＭＰモードにおいてコンソールプログラムに加わるように要求する。ＨＷＲＰＢにおける「ｐｒｅｓｅｎｔ」ビット及び「ａｖａｉｌａｂｌｅ」ビットの組み合わせは、ＣＰＵがＳＭＰオペレーションに使用できることをオペレーティングシステムインスタンスに通知し、そしてオペレーティングシステムインスタンスは、これらのビットを使用して、適当なＣＰＵごとのデータ構造体を構築すると共に、ＳＭＰオペレーションに加わることを要求するメッセージをＣＰＵに送信する。
【００６１】
ＣＰＵは、ＨＷＲＰＢの「ａｖａｉｌａｂｌｅ」ビットをセットするときに、構成ツリーの対応するＣＰＵノードにおける「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドに値も入力する。この「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドの値は、ＣＰＵが「ａｃｔｉｖｅ」のＨＷＲＰＢビットをセットしそしてＳＭＰオペレーションに加わることのできる区画のハンドルである。ＣＰＵの「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドは、コンソールプログラムによってのみセットされる。ＣＰＵがある区画から別の区画へ移動するとき、又は非指定状態へ停止されるときは、「ａｖａｉｌａｂｌｅ」ビットがＨＷＲＰＢにおいてクリアされるのと同時に、「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドがクリアされる（又は新たなハンドル値へと変更される）。「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドは、システムソフトウェアによって直接書きこまれてはならず、そしてどのＨＷＲＰＢがＣＰＵに対して「ａｖａｉｌａｂｌｅ」ビットをセットしたかを表わすだけである。
【００６２】
ランタイム中に、オペレーティングシステムインスタンスは、ＣＰＵの公称所有権を変更せずに、ＣＰＵを別の区画に一時的に「ローン」することができる。ＨＷＲＰＢの「ｐｒｅｓｅｎｔ」及び「ａｖａｉｌａｂｌｅ」ビットを用いた所有権の従来のＳＭＰ概念は、原子的オペレーションにおいてＨＷＲＰＢ及び構成ツリーを変更することによりＣＰＵの現在実行コンテクストを表わすのに使用される。「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドは、更に、１つの区画のシステムソフトウェアにより、どの区画においてＣＰＵが現在実行しているかを決定するのに使用することができる（他のインスタンスは、構成ツリーを検査することにより特定のＣＰＵの位置を決定することができる）。
又、ＣＰＵを指定解除し、そしていかなるＨＷＲＰＢにおいても「ａｖａｉｌａｂｌｅ」ビットがセットされず且つＣＰＵの構成ツリーノードにおける「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールドがクリアされた状態へとＣＰＵを復帰させることができる。これは、ＣＰＵの実行を停止し、そしてコンソールプログラムが構成ツリーノードの「ｏｗｎｅｒ」フィールド、「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」フィールド及び「ａｖａｉｌａｂｌｅ」ＨＷＲＰＢビットをクリアするようにさせることにより行われる。次いで、ＣＰＵは、コンソールモードで実行し、そして有効な区画ハンドルが書き込まれるのを待機する「ｏｗｎｅｒ」フィールドをポーリングする。次いで、システムソフトウェアは、新たな所有者を確立することができ、そしてＣＰＵは、新たな区画において実行を開始する。
【００６３】
例示的な所有権ポインタが図４に矢印で示されている。図３の同様のノードに対応する図４の各ノードには、対応する番号が与えられる。例えば、図３においてノード３０６と示されたソフトウェア根ノードは、図４ではノード４０６として示されている。図４に示すように、コミュニティ４１０は、ソフトウェア根４０６により「所有」される。同様に、システムビルディングブロック１及び２（４２２及び４２５）は、コミュニティ４１０により所有される。同様に、区画４１２及び４１４も、コミュニティ４１０により所有されて示されている。
区画４１２は、ＣＰＵ４２８―４３２及びＩ／Ｏプロセッサ４２６を所有する。メモリコントローラ４３６は、区画１（４１２）の一部分でもある。同様に、区画２（４１４）は、ＣＰＵ４４２―４４６、Ｉ／Ｏプロセッサ４４０及びメモリコントローラ４５０を所有する。
【００６４】
システムの共通メモリ即ち共用メモリは、メモリサブシステム４３４及び４４８と、メモリ記述子４３８及び４５２とで構成される。これらは、コミュニティ４１０により所有される。従って、図４は、オペレーティングシステムインスタンスに対して表れるときのシステムのレイアウトを示す。
オペレーティングシステムの特徴
上述したように、ここに示すコンピュータシステムは、異なる区画における多数の異なるオぺレーティングシステムで動作することができる。しかしながら、従来のオペレーティングシステムは、そのシステムがいかに構成されているかに基づいて本発明のシステムに合致させるように幾つかの観点において変更を行う必要がある。ここに示す実施形態の幾つかの変更例を以下に示す。
【００６５】
１．インスタンスは、コンソールを動作するための区画内の「一次」ＣＰＵを選択するメカニズムを含ませるように変更されると共に、他のインスタンスからの通信のターゲットとなることが必要である。一次ＣＰＵの選択は、裁定メカニズム又は他の従来の装置を用いて従来のやり方で行うことができる。
２．各インスタンスは、そのインスタンスが実行される区画に使用できるリソースを示す構成データブロックを形成する役目を果たすコンソールプログラムと通信及び協働できるようにする変更を必要とする。例えば、インスタンスは、そのインスタンスによってどんなインスタンスが使用できるかを決定するためにその基礎となるハードウェアを検知してはならない。むしろ、インスタンスがどんなリソースにアクセスすることが許されたかを示す構成データブロックが通過された場合には、指定のリソースと共に動作することが必要となる。
【００６６】
３．インスタンスは、任意の物理的アドレスでスタートすることができ、そしてその特定のアドレスで実行される他のオペレーティングシステムとの競合を回避するために特定の物理的アドレスを指定できないようにする必要がある。
４．インスタンスは、メモリが区画間で共用されるシステム構成の一部分である場合に、多数の任意の物理的ホールをそのアドレス空間にサポートできることが必要である。更に、インスタンスは、メモリの「ホットインスワップ」をサポートするためにそのアドレス空間において物理的ホールを取り扱う必要がある。
５．インスタンスは、メッセージを通すと共に、新たなりソースが区画及びインスタンスに使用できるという通知を受け取る必要がある。より詳細には、新たなリソースをサーチするためのインスタンスを通知するプロトコルが必要とされる。さもなくば、インスタンスは、リソースが到着しそして使用の準備ができることが決して分からない。
【００６７】
６．インスタンスは、インスタンスがメモリを共用しないシステムに使用される場合にその「プライベートメモリ」内で完全に実行できることが必要である。或いは又、インスタンスは、そのインスタンスがメモリを共用するシステムの一部分である場合にコンピュータ内で実行される他のインスタンスとデータを通信又は共用するための物理的な「共用メモリ」を使用できることが必要である。このような共用メモリシステムでは、インスタンスは、構成ツリーにおいて識別された物理的な「共用メモリ」を、その仮想アドレス空間と、そのオペレーティングシステムインスタンス内で実行される「プロセス」の仮想アドレス空間とにマッピングできることが必要である。
【００６８】
７．各インスタンスは、コンピュータシステム内の他のＣＰＵとコンタクトしてそれと通信するための何らかのメカニズムを必要とする。
８．インスタンスは、たとえＣＰＵがその区画に現在指定されなくても、そのオペレーションに合致する他のＣＰＵを確認できることも必要である。例えば、インスタンスは、そのインスタンスが実行されている区画にＣＰＵが再指定された場合に、そのＣＰＵと共に動作できるかどうかを決定するために、コンソール改定数及びクロック速度のようなＣＰＵパラメータを確認できることが必要である。
構成ツリーの変更
各コンソールプログラムは、例えば、新たなコミュニティ又は区画を形成するか又はメモリ断片の所有権を変更することにより、関連するオペレーティングシステムインスタンスがＡＰＭＰシステムの構成を変更できるようにする多数のコールバック機能を与える。更に、他のコールバック機能は、コミュニティ又は区画を除去したり、或いは新たに形成された区画においてオペレーションをスタートしたりする能力も与える。
【００６９】
しかしながら、コールバック機能は、実行されているオペレーティングシステムインスタンスに何ら変化を生じさせない。構成ツリーに生じる変化は、その変化により影響される各インスタンスによって作用されねばならない。構成ツリーが変更されるときにインスタンスにおいて行なわねばならない動作の形式は、変化の形式及びオペレーティングシステムインスタンスの能力に基づく。例えば、入力／出力プロセッサをある区画から別の区画へ移動する場合に、両区画を再ブートする必要がある。一方、断片のメモリ割り当てを変更することは、再ブートの必要なくオペレーティングシステムインスタンスによって取り扱われる。
ＡＰＭＰシステムの構成は、コミュニティ及び区画の形成と、未指定の要素の指定とを伴う。ある要素がある区画から別の区画へ移動されるときには、現在所有者がリソースの所有者としてそれ自身を除去し、そしてリソースの新たな所有者を指示する。次いで、新たな所有者がリソースを使用することができる。ある区画で実行されるインスタンスがある要素を解除するときには、そのインスタンスはその要素をもはやアクセスしてはならない。この簡単な手順は、インスタンスからの要素の盲目的な盗用(blind stealing)を許すのに必要な複雑な同期と、再構成中にインスタンスをブートする際に考えられる競合状態とを排除する。
【００７０】
構成ツリーノードは、いったん初期化されると、決して削除又は除去されず、即ちそれらのハンドルは常に有効である。従って、ハードウェアノードアドレスは、ソフトウェアによってキャッシュ処理することができる。区画又はコミュニティを削除することを意図するコールバック機能は、実際には、その関連ノードを削除したり又はツリーからそれを除去したりすることはなく、むしろ、ノードにＵＮＡＶＡＩＬＡＢＬＥというフラグを立てると共に、ソフトウェア要素により所有されたハードウェアリソースの所有権フィールドをクリアする。
構成ツリーへの変更を同期させるために、ツリーの根ノードは、２つのカウンタ（ｔｒａｎｓｉｅｎｔ ｌｅｖｅｌ及びｃｕｒｒｅｎｔ ｌｅｖｅｌ）を維持する。ｔｒａｎｓｉｅｎｔ ｌｅｖｅｌは、ツリーへの更新の開始に増加され、そしてｃｕｒｒｅｎｔ ｌｅｖｅｌカウンタは、更新が完了したときに増加される。ソフトウェアは、これらのカウンタを使用して、ツリーへの変更がいつ生じたか又は生じるかを決定することができる。更新がコンソールによって完了したときに、ＡＰＭＰシステムの全てのＣＰＵに割り込みを発生することができる。この割り込みを使用して、システムソフトウェアがその状態をツリーへの変更に基づいて更新するようにすることができる。
【００７１】
ＡＰＭＰコンピュータシステムの形成
図５は、ここに示す適応的区画化マルチプロセッサ（ＡＰＭＰ）コンピュータシステムの編成を全体的に示すフローチャートである。このルーチンはステップ５００でスタートし、そしてステップ５０２へ進み、マスターコンソールプログラムがスタートされる。ＡＰＭＰコンピュータシステムがパワーアップ時に形成される場合には、マスターコンソールが動作されるＣＰＵは、裁定又は他のハードウェアメカニズムのような所定のメカニズムによって選択される。ＡＰＭＰコンピュータシステムが、既に動作中のハードウェアにおいて形成される場合は、（非存在の）システムに加わろうと試みる第１区画のＣＰＵは、以下に述べるようにマスターコンソールプログラムを実行する。
【００７２】
次いで、ステップ５０４において、マスターコンソールプログラムは、ハードウェアを検知し、そして上述したように、ステップ５０６において構成ツリーを形成する。パワーアップ時にＡＰＭＰシステムに２つ以上の区画が存在する場合には、各区画が初期化され、そしてそのコンソールプログラムがスタートされる（ステップ５０８）。
最終的に、オペレーティングシステムインスタンスは、ステップ５１０に示されたように、少なくとも１つの区画においてブートされる。ブートすべき第１のオペレーティングシステムインスタンスは、以下に述べるように、ＡＰＭＰデータベースを形成しそしてエンティティを充填する。ＡＰＭＰデータベースは、システムにおけるアクティブなオペレーティングシステムインスタンスの状態に関する情報を記憶する。次いで、ルーチンは、ステップ５１２で終了する。インスタンスは、ＡＰＭＰシステムに加入する必要がないことに注意されたい。インスタンスは、ブートより充分に後の時間に加入すべきか否かを選択することができる。加入しないインスタンスは、「共用セット」を形成する。共用セットに加わると決定した第１のインスタンスは、それを形成しなければならない。単一のＡＰＭＰシステムにおいて動作する多数の共用セットがあり、各共用セットは、それ自身のＡＰＭＰデータベースを有する。
【００７３】
新たなＡＰＭＰシステムを形成するか又は既存のＡＰＭＰシステムに加わるかの判断
ＡＰＭＰコンピュータシステムを動作しているプラットホーム上で実行されるオペレーティングシステムインスタンスは、必ずしもＡＰＭＰコンピュータシステムのメンバーでなくてもよい。インスタンスは、ブートの後にいつでもＡＰＭＰシステムのメンバーになるよう試みることができる。これは、ブート時に自動的に行われてもよいし、又はオペレータコマンドが加入を明確に開始した後に行われてもよい。オペレーティングシステムがブート時にロードされた後に、オペレーティングシステム初期化ルーチンが呼び出され、そして記憶されたパラメータを検査して、それが即座の加入を指定するかどうか調べ、もしそうであれば、システムは、ＡＰＭＰコンピュータシステムの一部分である加入ルーチンを実行する。オペレータコマンドは、同じルーチンの実行を生じる。
【００７４】
ＡＰＭＰデータベース
本発明によるリソースのソフトウェア割り当てをサポートする重要なデータ構造体は、共用セットのメンバーであるオペレーティングシステムインスタンスを追跡するＡＰＭＰデータベースである。ＡＰＭＰコンピュータシステムを設定しようと試みる第１のオペレーティングシステムインスタンスは、ＡＰＭＰデータベースを初期化し、従って、初期の共用セットに対する本発明のソフトウェアリソース割り当てを形成し又はインスタンス生成する。共用セットの一部分になろうとするその後のインスタンスは、その共用セットに関連したＡＰＭＰデータベースに登録することにより加入する。ＡＰＭＰデータベースは、共用セットの共用リソースを管理するのに必要な集中情報を含む共用データ構造体である。又、ＡＰＭＰデータベースは、ＡＰＭＰコンピュータシステムが回復不能なエラーに応答して再形成されるときにも初期化される。
より詳細には、各ＡＰＭＰデータベースは３部分構造体である。第１部分は、ＡＰＭＰコンピュータシステムを形成するための基本的同期構造体と、データベースのアドレスマップ情報と、第２部分を形成するサービス特有セグメントに対するオフセットとを含む固定サイズヘッダ部分である。第２部分は、各潜在的なインスタンスに１つのブロックが指定されるデータブロックのアレーである。データブロックは、「ノードブロック」と称する。第３部分は、コンピュータシステムのサブファシリティの各々により使用されるセグメントへと分割される。各サブファシリティは、それ自身のセグメントの内容及びそこへの同期アクセスについて責任を負う。
【００７５】
ＡＰＭＰデータベースの最初のヘッダ部分は、加入するオペレーティングシステムインスタンスによりマップされるＡＰＭＰデータベースの第１部分である。ヘッダの部分は、インスタンスが共用セットに加入する前にアクセスされ、そして実際には、ＡＰＭＰコンピュータシステムが存在することをインスタンスが知る前にアクセスされる。
ヘッダ区分は、次のものを含む。
１．メンバーシップ及び形成同期クオドワード
２．コンピュータシステムのソフトウェアバージョン
３．状態情報、形成時間、インカーネーションカウント、等
４．メンバーシップマスクに対するポインタ（オフセット）
５．クラッシュインスタンス、クラッシュ確認ビット、等
６．各サービスに対するビットを含む有効化マスク
７．全ＡＰＭＰデータベースに対するメモリマッピング情報（ページフレーム番号情報）
８．サービスセグメントの各々を示すオフセット／長さ対（ページ及びオフセット全ページへと丸められたバイト長さ）であって、
共用メモリサービス、
ＣＰＵ通信サービス、
メンバーシップサービス（もし必要であれば）、
ロッキングサービス、
を含むもの。
【００７６】
ノードブロックのアレーは、システム区画ＩＤ（現在プラットホームにおいて考えられるインスタンス当たり１つ）によりインデックスされ、そして各ブロックは、次のものを含む。
インスタンスソフトウェアバージョン
割り込み理由マスク
インスタンス状態
インスタンスインカーネーション
インスタンスハードビート
インスタンスメンバーシップタイムスタンプ
弟インスタンスｉｄ及びインアクティブ時間；兄インスタンスｉｄ
インスタンス有効化終了ビット
ＡＰＭＰデータベースは、共用メモリに記憶される。Ｎ個の物理的に隣接するページの最初の固定部分は、ハードウェアの最初の区画化の間に加入するために第１インスタンスにより割り当てられた２つのメモリ範囲の一方の最初のＮページを占有する。インスタンスは、構成ツリーにおけるこれら範囲の物理的なスタートアドレスを記憶するようにコンソールに指令する。２つの範囲を割り当てる目的は、ハードウェアメモリ欠陥の場合にフェイルオーバーを許すことである。メモリマネージメントは、物理的メモリをＡＰＭＰデータベースに対する仮想アドレス空間へマッピングする役目を果たす。
【００７７】
オペレーティングシステムインスタンスによって行われる詳細な動作が図６に示されている。より詳細には、オペレーティングシステムインスタンスは、それが共用セットのメンバーになろうとするときに、非存在のシステムに「加入」しようと試みる第１のインスタンスである場合に、ＡＰＭＰコンピュータシステムを形成するよう準備しなければならない。ＡＰＭＰシステムが既に存在するかどうかをインスタンスが決定するために、インスタンスは、上記のように共用メモリの状態を検査できねばならない。更に、競合する形成試みを防止するために、ＡＰＭＰシステム及び共用セットに同時に加入しようと試みる他のインスタンスとの同期を取ることができねばならない。その後、メモリのある領域が、ブートのために第１の即ち一次のオペレーティングシステムインスタンスにより初期化されそしてこのメモリ領域をＡＰＭＰデータベースに使用することができる。
【００７８】
ＡＰＭＰデータベースヘッダのマッピング
全てのオペレーティングシステムインスタンスによって行われる最初の動作の目標は、ＡＰＭＰデータベースのヘッダ部分をマップし、そして原始的なインスタンス間割り込み処理を初期化して、形成又は加入を判断するための基礎を整えることである。使用するルーチンは図６に示され、ステップ６００から始まる。各インスタンスにより行われる第１の動作（ステップ６０２）は、上記のようにＡＰＭＰデータベースの初期セグメントをマップするためにメモリマネージメントに関与することである。このときには、第２のデータベース区分におけるノードブロックのアレーもマップされる。メモリマネージメントは、ＡＰＭＰデータベースの最初のセグメント及び第２セグメントを一次オペレーティングシステムのアドレス空間へマップし、そしてスタートアドレス及び長さを返送する。次いで、インスタンスは、構成ツリーにおけるセグメントの位置及びサイズを記憶するようにコンソールに通知する。
【００７９】
次いで、ステップ６０４において、ＡＰＭＰデータベースの初期仮想アドレスを使用して、初期化ルーチンが、現在インスタンスに指定されたノードブロックにおいて割り込み理由マスクをゼロにすることができるようにする。
次いで、このノードブロック及び他のノードブロックフィールドにおいてインスタンスのハートビートフィールドにゼロの初期値が記憶される。ある場合に、新たなＡＰＭＰコンピュータシステムを形成しようと試みるインスタンスは、以前にＡＰＭＰシステムのメンバーであり、ＡＰＭＰシステムから引き出すものではない。このインスタンスが、他のインスタンスがそれを除去する前に再ブートする場合は、そのビットがシステムメンバーシップマップにおいて依然「オン」である。他の例外的な又はエラーのケースは、システムメンバーシップマスクに「廃物」が記憶される事態を招く。
【００８０】
次いで、ステップ６０８において、ＡＰＭＰデータベースの仮想アドレス（ＶＡ）は、プロセッサ間割り込みハンドラーにより検査されるプライベートセルに記憶される。ハンドラーは、このセルを検査して、行うべき作業に対しＡＰＭＰデータベースヘッダにおけるインスタンスごとの割り込み理由マスクをテストすべきかどうか決定する。このセルがゼロである場合には、ＡＰＭＰデータベースがマップされず、そしてハンドラーによってそれ以上何も行われない。上述したように、このマスクを含む全ＡＰＭＰデータベースは、アドレスが記憶されるまでハンドラーが何も行なわないように初期化される。更に、クロック割り込みハンドラーは、同じプライベートセルを検査して、適当なノードブロックにおいてこのインスタンスに対しインスタンス特有のハートビートフィールドを増加すべきかどうか決定することができる。プライベートセルがゼロの場合には、割り込みハンドラーは、ハートビートフィールドを増加しない。
【００８１】
この点において、ルーチンが終了し（ステップ６１０）、ＡＰＭＰデータベースヘッダがアクセス可能となり、加入インスタンスは、ヘッダを検査して、ＡＰＭＰコンピュータシステムが存在しないかどうか、ひいては、インスタンスがそれを形成しなければならないかどうか、或いはインスタンスが既に存在するＡＰＭＰシステムに加わるかどうかを決定する。
ＡＰＭＰヘッダがマップされたときには、そのヘッダが検査されて、ＡＰＭＰコンピュータシステムがアップでそして機能するかどうかを決定し、もしそうでなければ、現在インスタンスがＡＰＭＰデータベースを初期化しそしてＡＰＭＰコンピュータシステムを形成しなければならないかどうかを決定する。既存のＡＰＭＰシステムに加わるという問題は、例えば、ＡＰＭＰコンピュータシステムがあるときに形成されたが現在はメンバーを有していない場合、或いはＡＰＭＰシステムがエラーの後に再形成される場合には更に困難なものとなる。この場合には、ＡＰＭＰデータベースメモリの状態が前もって分からず、簡単なメモリテストでは不充分である。おそらく現存するＡＰＭＰシステムに加わろうと試みるインスタンスは、ＡＰＭＰシステムが存在するか否かを決定できねばならず、そしてもし存在しなければ、そのインスタンスは、他のインスタンスからの干渉を受けずに新たなＡＰＭＰシステムを形成できねばならない。この干渉は、同じインスタンス又は別のインスタンスにおいて実行されるスレッドから生じ得る。
【００８２】
このような干渉を防止するために、先ず、ＡＰＭＰデータベースをロックし、そしてＡＰＭＰヘッダを検査して、機能するＡＰＭＰコンピュータシステムが存在するかどうか決定することにより、形成／加入の判断がなされる。適切に機能しているＡＰＭＰシステムが存在する場合には、インスタンスがシステムに加わり、そしてＡＰＭＰデータベースのロックを解除する。或いは又、ＡＰＭＰシステムが存在しないか、又はＡＰＭＰシステムは存在するが、機能していない場合には、インスタンスは、それ自身がメンバーとして新たなＡＰＭＰシステムを形成し、そしてＡＰＭＰデータベースのロックを解除する。
ＡＰＭＰシステムが移行中であると考えられる場合には、インスタンスは、ＡＰＭＰシステムが再び動作するか又はデッド状態になるまで待機し、そして上記のように進行する。システムを形成できない場合には、加入が失敗となる。
【００８３】
新たなＡＰＭＰコンピュータシステムの形成
新たなＡＰＭＰシステムを形成しなければならないと仮定すれば、形成インスタンスは、ＡＰＭＰデータベースの残りを割り当て、ヘッダを初期化しそしてシステムサービスを呼び出すという役割を果たす。ＡＰＭＰデータベースが上記のようにロックされたと仮定すれば、ＡＰＭＰシステムを初期化するために、形成インスタンスにより次のステップがとられる（これらのステップは、図７Ａ及び７Ｂに示す）。
ステップ７０２  形成インスタンスは、ＡＰＭＰシステム状態及びそのノードブロック状態を「初期化」にセットする。
ステップ７０４  形成インスタンスは、ヘッダにおける長さフィールドのアドレスで各システムサービスのサイズルーチンをコールする。
【００８４】
ステップ７０６  得られた長さフィールドが加算され、そして形成インスタンスは、メモリマネージメントをコールして、新たなマッピングを形成そして古いマッピングを削除することにより全ＡＰＭＰデータベースに対するスペースを割り当てる。
ステップ７０８  形成インスタンスは、各システムサービスセグメントの開始までオフセットを満たす。
ステップ７１０  各サービスに対する初期化ルーチンは、ＡＰＭＰデータベースの仮想アドレス、サービスセグメント及びセグメント長さでコールされる。
ステップ７１２  形成インスタンスは、メンバーシップマスクを初期化してそれ自身を唯一のメンバーにすると共に、インカーネーションカウントを増加する。次いで、形成時間、ソフトウェアバージョン及び他の形成パラメータをセットする。
【００８５】
ステップ７１４  次いで、インスタンスは、それ自体を自分の兄弟としてセットする（以下に述べるハートビート監視目的で）。
ステップ７１６  次いで、インスタンスは、そのインスタンス状態を「メンバー」として及びＡＰＭＰシステム状態を「動作」として満たす。
ステップ７１８  最終的に、インスタンスは、ＡＰＭＰデータベースのロックを解除する。
次いで、ルーチンは、ステップ７２０で終わる。
既存のＡＰＭＰコンピュータシステムへの加入
インスタンスがＡＰＭＰデータベースをロックしたと仮定すれば、既存のＡＰＭＰシステムのメンバーとなるためにインスタンスにより次のステップが取られる（図８Ａ及び８Ｂ）。
【００８６】
ステップ８０２  インスタンスは、そのインスタンス名が独特であることを保証するためにチェックを行う。別の現在メンバーがインスタンスの提案する名前を有する場合には、加入が拒絶される。
ステップ８０４  インスタンスは、ＡＰＭＰシステム状態及びそのノードブロック状態を「インスタンス加入」にセットする。
ステップ８０６  インスタンスは、ＡＰＭＰデータベースの変数部分をそのローカルアドレス空間にマップするためにメモリ管理ルーチンをコールする。
ステップ８０８  インスタンスは、ＡＰＭＰデータベースの仮想アドレス、そのセグメント及びそのセグメント長さで各システムサービスのシステム加入ルーチンをコールする。
【００８７】
ステップ８１０  全てのシステムサービス加入ルーチンが成功を報告する場合には、インスタンス加入ルーチンが継続する。いずれかのシステムサービス加入ルーチンが失敗した場合には、インスタンス加入ルーチンは、新たなＡＰＭＰコンピュータシステムをスタートしそしておそらくは形成しなければならない。
ステップ８１２  ステップ８１０で成功が得られたと仮定すれば、インスタンスはそれ自身をシステムメンバーシップマスクに追加する。
ステップ８１４  インスタンスは、以下に述べるように、兄を選択して、そのインスタンスの健全さを監視する。
ステップ８１６  インスタンスは、そのインスタンス状態を「メンバー」として満たし、そしてローカルメンバーシップフラグをセットする。
【００８８】
ステップ８１８  インスタンスは、構成データベースのロックを解除する。
次いで、ルーチンは、ステップ８２０で終了となる。
インアクティビティ、時間切れ又はクラッシュのいずれかによるインスタンスの損失は、ＡＰＭＰデータベースにおいて実施される「ハートビート」メカニズムにより検出される。インスタンスは、最小チェック及びクリーンアップを行うように試み、そしてインスタンスクラッシュ中にＡＰＭＰシステムの残りに通知する。これが可能でない場合には、システムサービスは、ソフトウェアハートビートメカニズムによりインスタンスの消失を検出する。特に、「ハートビート」フィールドは、各アクティブなインスタンスに対してＡＰＭＰデータベースに割り当てられる。このフィールドは、所定値より短い時間間隔、例えば、２ミリ秒ごとに、対応するインスタンスにより書き込まれる。
【００８９】
いかなるインスタンスも、他のインスタンスのハートビートフィールドにおいて検査を行い、ある特定の目的で直接的な決定を行うことができる。インスタンスは、別のインスタンスのハートビートフィールドを、２ミリ秒の時間間隔で分離して２回読み取ることにより、そのハートビートフィールドを読み取る。２つの読み取り間でハートビートが増加されない場合には、インスタンスがインアクティブ（終了、コントロールＰで停止、又はクロック割り込み優先順位レベル以上で保留）とみなされる。インスタンスが所定時間にわたりインアクティブに保たれる場合には、インスタンスがデッド又は無関心とみなされる。
更に、全てのインスタンスを監視するために特殊な構成が使用される。というのは、特にＡＰＭＰシステムが大きくなるにつれて、各インスタンスごとに他の各インスタンスを監視することができないからである。この構成は、「兄―弟」方式を使用する。より詳細には、インスタンスがＡＰＭＰシステムに加わるときに、ＡＰＭＰデータベースのロックを解除する前に、現在メンバーの１つをその兄として取り上げ、そして加入するインスタンスにわたって監視する。加入するインスタンスは、先ず、その選択された兄の現在の弟に対して兄の義務を仮定して、それ自身を、選択されたインスタンスの新たな弟として指定する。これとは逆に、インスタンスが依然として動作しながらＡＰＭＰコンピュータシステムから退出して、退出処理を実行できる一方、ＡＰＭＰデータベースのロックを保持するときには、その兄の義務をその現在の兄に指定した後に、そのハートビートの増加を停止する。
【００９０】
クロックの刻みごとに、各インスタンスは、それ自身のハートビートを増加した後に、その弟のハートビートを読み取り、そしてそれを最後のクロックの刻みにおいて読み取った値と比較する。新たな値が大きいか、又は弟のＩＤが変化した場合には、その弟がアクティブであるとみなす。しかしながら、弟のＩＤ及びそのハートビート値が同じである場合は、その弟がインアクティブとみなされ、現在インスタンスは、その弟の弟も監視し始める。この責任の累積は、所定の最大値まで続けられ、１つのインスタンスの欠陥がその弟の欠陥の欠落を生じないよう確保する。弟もハートビートを増加し始める場合には、全ての付加的な責任がドロップされる。
メンバーインスタンスがデッド又は無関心と判断され、そして停止またはクラッシュの意図をＡＰＭＰコンピュータシステムに通知しなかった場合には、そのインスタンスがＡＰＭＰシステムから除去される。これは、例えば、インスタンスの原子的割り込みマスクの「バグチェック」ビットをセットしそしてＩＰ割り込みをインスタンスの全てのＣＰＵに送信することにより行われる。その結果、共用メモリは、ＩＰ割り込みのハードウェア優先順位のもとでのみアクセスされる。これは、インスタンスのＣＰＵがＩＰ割り込みより低い優先順位で実行しようと試みる場合に、ＩＰ割り込みが最初に生じ、従って、ＣＰＵが「バグチェック」ビットを見た後に、それより優先順位の低いスレッドを実行できるよう保証する。これは、インスタンスがデッドと判断されたときに他の目的で再割り当てされているメモリのような共用リソースをオペレーティングシステムインスタンスがクラッシュしそしてタッチしないように確保する。付加的な又は別のメカニズムとして、コンソールコールバック（もし存在すれば）を呼び出して、インスタンスを除去することもできる。更に、好ましい実施形態によれば、インスタンスが警報なしにＡＰＭＰコンピュータシステムから消え又はドロップしたときには、残りのインスタンスは、ある公正なチェックを行って、それらが継続できるかどうか決定する。これらのチェックは、ＡＰＭＰデータベースの全てのページが依然アクセスでき、即ちメモリ欠陥がなかったことを照合することを含む。
【００９１】
加入後のリソースの指定
ＣＰＵは、ＡＰＭＰシステムのパワーアップ寿命における所与の時間にせいぜい１つの所有者区画をもつことができる。しかしながら、その所有権の反映及びそれを制御する役目を果たすエンティティは、リソース自体が受けた構成及び状態移行、それが存在する区画、及びその区画内で実行されるインスタンスの結果として変化し得る。
ＣＰＵの所有権は、そのときリソースを管理するエンティティにより指令される多数の方法、多数の構造で指示される。ほとんどの基本的なケースでは、ＣＰＵが非指定の状態にあり、ＣＰＵと同じ共用セットに存在する全ての区画に使用できる。最終的に、そのＣＰＵは、オペレーティングシステムインスタンスを実行してもしなくてもよい特定の区画に指定される。いずれにせよ、区画は、その所有権を構成ツリー構造を介して多の全ての区画に反映すると共に、ＨＷＲＰＢのＣＰＵごとのグラグフィールドにおけるＡＶＡＩＬＡＢＬＥビットを介してその区画で実行される全てのオペレーティングシステムインスタンスに反映する。
【００９２】
所有する区画が、そこで実行されるオペレーティングシステムインスタンスをもたない場合には、そのコンソールが、その中のリソースに対する移行事象に応答し及びそれを開始する役目を果たす。コンソールは、リソースが、これを別の区画へ移動できるか又は非指定の状態へ復帰できる状態にあるかどうかを決定する。
しかしながら、区画においてインスタンスが現在実行されている場合に、コンソールは、リソースの移行を開始する責任を放棄し、そして構成変化が生じるときに実行中の一次インスタンスにそれを通知する責任を果たす。これは、依然、基礎となるハードウェア移行を容易にするが、リソース移行の制御は、オペレーティングシステムインスタンスまで１レベル上げられる。責任の移行は、一次ＣＰＵがシステムブートにおいてコンソールモードの外部でその第１命令を実行するときに行われる。
【００９３】
オペレーティングシステムインスタンスは、情報の最も効率的な使用を内部で促進する多数の仕方で所有権状態情報を維持することができる。例えば、インスタンス特有の情報を内部及び全体の両方で反映する（ＡＰＭＰデータベースを共用する他のメンバーに）状態ビットベクトルのハイアラーキーを使用することができる。
内部の表示は、厳密に、インスタンスの使用に対するものである。これらは、ブート時間に、基礎的な構成ツリー及びＨＷＲＰＢ情報から形成されるが、オペレーティングシステムインスタンスの寿命にわたり厳密なソフトウェア構成として維持される。これらは、インスタンスに使用できる区画リソースのソフトウェア観点を表わし、そしてソフトウェアルールセットを介して、構成を、物理的な制約により指示されたもののサブセットに更に制限する。しかし、区画内の全てのリソースは、オペレーティングシステムの呼び出しがもはや生きたエンティティでなくなるまで、状態移行を指令するコンソールメカニズムを用いて、インスタンスにより所有され且つ管理される。この状態は、再ブートなしに復帰するおそれなく一次ＣＰＵを停止して再びコンソールモードへ戻すことにより指示される。
【００９４】
ＣＰＵリソースの所有権は、決してインスタンスを越えて延びることはない。
各個々のインスタンスの状態情報は、読取専用の判断実行目的でＡＰＭＰデータベースにおいて複写されるが、他のインスタンスは、別のＣＰＵリソースに対し状態移行事象を強制することができない。各インスタンスは、それ自身のリソースセットを理解しそして制御する責任を果たし、そのリソースに対する外部要求を受け取るが、リソースを転送できるようにする判断を行うことしかできない。
このような各ＣＰＵが動作状態になると、ＣＰＵごとのフラグにおけるＡＶＡＩＬＡＢＬＥビットをセットしない。ＡＶＡＩＬＡＢＬＥビットがセットされないと、ＳＭＰオペレーションに加わるようにＣＰＵをスタートさせるか又はそのように予想するよう試みるインスタンスは存在しない。むしろ、ＣＰＵは、コンソールモードにおいて、有効な区画が指定されるのを待機する構成ツリーの所有者フィールドをポーリングする。有効な区画が一次コンソールにより所有者として指定されると、ＣＰＵは、その区画においてオペレーションを開始する。
【００９５】
ランタイム中に、ｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドは、ＣＰＵが実行する区画を反映する。ＨＷＲＰＢのＣＰＵごとのフラグにおけるＡＶＡＩＬＡＢＬＥビットは、オペレーティングシステムインスタンスとのＳＭＰオペレーションに対してＣＰＵが実際に使用できるか又は実行できるかの最終的な指示子を保持し、そして従来のＳＭＰシステムの場合と同じ意味を有する。
インスタンスは、ＡＰＭＰコンピュータシステムの多数の再構成特徴に関与するために共用セットのメンバーである必要はないことに注意されたい。インスタンスは、そのリソースをＡＰＭＰシステムの別のインスタンスへ転送して、共用セットの一部分でないインスタンスが、共用セットの一部分であるインスタンスへリソースを転送できるようにする。同様に、共用セットの一部分でないインスタンスは、共用セットの一部分であるインスタンスからリソースを受け取ることができる。
【００９６】
共用メモリ
コンソール構成ツリーに記録されたソフトウェア構成により、あるメモリは、コミュニティの全てのインスタンスの間で共用とマークされる。あるメモリは、オペレーティングシステムのインスタンスにより実行できる区画に対してプライベートとマークされる。他の全てのメモリは、非所有とマークされる。構成は、ソフトウェアによって定義されるので、区画及び区画の相対的なサイズを動的に変更することができる。
物理的なハードウェアシステム内の全てのメモリは、構成ツリー内の所有者フィールドが関連される。メモリは区画によって所有することができ、この場合、メモリは、その区画内で実行されるオペレーティングシステム又はコンソールソフトウェアによりプライベートメモリとして使用される。これは、「プライベート」メモリと称される。或いは又、メモリはコミュニティによって所有することもでき、この場合、メモリはコミュニティ内の全てのインスタンスに対して共用され、このようなメモリは「共用」メモリと称される。又、メモリは、区画又はコミュニティにより所有されないように構成することもできる。このような「非所有」メモリは、ハードウェアが「ホットアウトスワッピング」を許す場合にはシステムの他部分が動作を継続する間にパワーダウンされそしてホットアウトスワッピングされる。
【００９７】
メモリは、共用メモリ領域の使用によりコミュニティのインスタンス間で共用することができる。共用メモリ領域は、いかなるインスタンスによって形成することもできる。タグは、多数のインスタンスによる同じ領域へのアクセスを整合するように特定される。仮想サイズ及び物理的サイズが特定される。仮想サイズは、物理的サイズと同じサイズであってもよいしそれより大きくてもよい。共用メモリは、コールバックルーチンにより初期化される。領域が初期化される間に他のインスタンスがその領域にマッピングされるのを阻止するために初期化中にロックが保持される。共用メモリ領域が１つのインスタンスによって形成されると、他のインスタンスをその領域にマッピングし取り付けることができる。仮想的に領域の一部分であるがそれに関連した物理的なメモリをもたないページを指示するために、ゼロページテーブルエントリが使用される。メモリ領域データ構造体は、どのインスタンスが領域に取り付けられるかを記録する。インスタンスは、共用メモリ領域に取り付けられるときにコールバックルーチンを指定しなければならない。このルーチンは種々の理由で呼び出され、即ちシステムの初期化又は遮断中、又は別のインスタンスが領域に取り付けられるか又はそこから取り外されるとき、或いは取り付けられたインスタンスがクラッシュした（順序ずれした状態で取り外された）ときに呼び出される。コールバックの理由に基づき、例えば、遮断中に、コールバックルーチンは、共用メモリ領域へのアクセスを阻止することが期待される。
【００９８】
インスタンスは、より物理的なメモリを領域に取り付けることを要求できる。この要求を発するインスタンスのみが、最初に、これらの新たなページをマップする。別のインスタンスがこれらのページをアクセスするよう試みるときには、アクセス違反ハンドラーが制御権を得（そのインスタンスは、そのメモリ領域に関連したゼロページテーブルエントリ（ＰＴＥ）を有するので）、そしてアクセス違反ハンドラーは、新たなページでマッピング領域を更新する。インスタンスが領域をマッピングしないときは、ＡＰＭＰデータベースに取り外しが記録される。全てのインスタンスが領域から取り外されると、それを削除し、そして共用メモリに解放される全てのページがページリストを空きにする。又、共用メモリ領域データ構造体は、どのインスタンスが領域内のページに未解決のＩ／Ｏを有するかも記録する。オペレーティングシステムインスタンスは、それらの個々の基準カウンタが領域内のＩ／Ｏビットをいつセット及びクリアすべきかを知るようにそれらカウンタを記録する。インスタンスは、領域内のページに対して未解決のＩ／Ｏを有する場合には共用メモリ領域をマップ解除しそしてそこから取り外すことができない。
【００９９】
共用メモリＡＰＩは、ユーザモードアプリケーションによって呼び出すことのできる１組のルーチンであって、これは共用メモリをアプリケーションのアドレススペースへとマップする。共用メモリ領域が上記のように形成されるときは、それに関連した形成インスタンスが、オペレーティングシステムのデータ構造体が共用メモリ領域にいかに関連するかを追跡する。インスタンスが共用メモリ領域のデータ構造体を形成すると、そのインスタンスが領域に取り付けられる。次いで、共用メモリマッピングＡＰＩルーチンが呼び出されるときに、通常のオペレーティングシステムメカニズムを使用して、アプリケーションアドレススペースが共用メモリへとマッピングされる。ローカルオペレーティングシステムデータ構造体がクリーンアップされると、インスタンスが領域から取り外される。全体的区分は、共用メモリ領域と１対１の形態で関連される。
【０１００】
インスタンスは、領域に関連されるべき「コンテクスト変数」を特定することができる。別のインスタンスが領域への取り付けを試みそして同じコンテクストを特定しない場合には、エラーが返送される。コンテクスト変数のこの特定は、例えば、バージョン番号をアプリケーションに関連付けするのに使用される。更に、インスタンスは、ある領域に対して記憶されるインスタンスプライベートデータと関連付けされるべきプライベートコンテクスト変数を特定することもできる。コールバックルーチンが呼び出されるときには、インスタンスは、プライベートコンテクスト変数を得ることにより領域に関する付加的な情報を収集することができる。プライベートコンテクストは、例えば、ポート番号を記憶するのに使用される。
【０１０１】
共用メモリは、インスタンスプライベートメモリとして使用するためにオペレーティングシステムインスタンスによって借りることができる。共用メモリは、共用メモリＡＰＩの使用により借りることができる。共用メモリは、ローカルインスタンスのみによって形成し、次いで、使用することができる。この技術は、共用とマークされた全てのメモリがコミュニティメンバーインスタンスによって使用されるのではない場合に有用である。余分な共用メモリは、空きメモリのプールされたソースである。換言すれば、共用メモリは、共用メモリ領域の形成によって借りることができる。共用メモリ領域のページは、種々の目的でローカルオペレーティングシステムにより使用することができる。
プライベートメモリは、ＣＰＵ（１つ又は複数）がメモリに最も速くアクセスするインスタンスによって所有されるように構成できる。この設計の共用メモリでは、メモリのハードウェア特性に基づき共用メモリの内部データ構造をグループで編成することにより、非均一なメモリアクセスが受け入れられる。これらの内部データ構造は、共通特性区画と称される。共用メモリＡＰＩは、メモリ特性を発呼者により特定できるようにする。これらの特性は、「近」又は「遠」のような非均一なメモリアクセス特性として表すことができる。
【０１０２】
ＰＦＮデータベースは、ページフレーム番号（ＰＦＮ）データベースエントリの大きなアレーを使用してプライベートメモリ及び共用メモリ並びに再構成メモリを受け入れる。別のインスタンスに対してプライベートであるページを記述する仮想アレーの背後に物理的なメモリは存在せず、又、システムから欠落するメモリボードによりサポートされるメモリ位置に対応するものもないし、物理的なメモリアドレスホールに対応するものもない。ＰＦＮデータベースのレイアウトは、物理的メモリの特定の粒度を示唆する。即ち、メモリの各ブロックに存在すべきＰＦＮデータベースに対して整数の物理的ページを割り当てそして消費するために、物理的なメモリは、以下に述べる粒度をもたねばならない。物理的メモリの粒度は、整数のページ及び整数のＰＦＮデータベースエントリを含む最小量のメモリとして選択される。これは、クオドワードにおけるメモリページサイズ及びページフレーム番号データベースエントリの最小公倍数により与えられる。
【０１０３】
上記のように、形成インスタンス、より詳細には、ＡＰＭＰコンピュータシステムの初期化プログラムは、構成ツリーを歩き、そしてその関連コミュニティの共用メモリに対してマネージメント構造体を構築する。一般に、４つのハイアラーキアクセスモードは、メモリアクセス制御を与える。これらのアクセスモードは、最大特権から最小特権へ、カーネル、実行、スーパーバイザー及びユーザである。更に、個々のページレベルにおいてメモリ保護が特定され、この場合に、ページは、４つのアクセスモードの各々に対してアクセス不能、読み取り専用、又は読み取り／書き込みである。アクセス可能なページは、データ又は命令アクセスのみを有するように制限することができる。メモリマネージメントソフトウェアは、各仮想ページが物理的メモリ内のどこにあるかを追跡するマッピング情報のテーブル（ページテーブル）を維持する。あるプロセスは、メモリマネージメントユニットを介して、このマッピング情報を、仮想アドレスから物理的アドレスへと変換したときに使用する。仮想アドレススペースは、再配置、共用及び保護ページの単位に分割され、これらはページと称される。オペレーティングシステムインスタンスは、仮想−物理的マッピングテーブルを制御し、そして仮想メモリアドレススペースのインアクティブな部分を外部記憶媒体にセーブする。
【０１０４】
メモリマネージメントは、説明上、仮想アドレスを物理的アドレスに変換するためのクオドワードページテーブルエントリを使用する。各ページテーブルエントリ（ＰＴＥ）は、ページ境界を指すページフレーム番号（ＰＦＮ）を含み、仮想アドレスのページ内バイト指示子と連結されて、物理的アドレスを形成する。
物理的アドレス変換は、多レベルページ構造体におけるエントリをアクセスすることにより実行される。ページテーブルベースレジスタ（ＰＴＢＲ）は、最高レベルページテーブルの物理的ＰＦＮを含む。仮想アドレスのビットは、上位レベルページテーブルをインデックスするのに使用され、ベース下位レベルページテーブルの物理的ＰＦＮを得ると共に、最下位レベルでは、参照されるページの物理的ＰＦＮを得る。このＰＦＮは、仮想アドレスのページ内バイト指示子と連結されて、アクセスされる位置の物理的アドレスを得る。
【０１０５】
上述したように、インスタンスは、必ずしもシステムブート時ではなく、いつでもコミュニティのオペレーションに加わるように判断することができる。インスタンスがＡＰＭＰシステムに加わるように判断すると、ルーチンＤＢ ＭＡＰ ｉｎｉｔｉａｌをコールし、これは、構成ツリーのコミュニティノードからＡＰＭＰデータベースページを得て、ＡＰＭＰデータベースの初期部片をマップする。構成ツリーがＡＰＭＰデータベースページをまだ含まない場合に、インスタンスは、ＡＰＭＰデータベースに対して使用されるべき共用メモリページを選択する。インスタンスは、コンソールコードを呼び出して、構成ツリーに非同期的に書き込む。ＡＰＭＰデータベースの初期断片をマッピングした後に、上記のように、インスタンスがＡＰＭＰシステムを形成するかそれに加わるかが決定される。
【０１０６】
インスタンスがＡＰＭＰシステムの形成者である場合には、そのインスタンスがルーチンＤＢ ａｌｌｏｃａｔｅを呼び出し、ＡＰＭＰデータベースに対してページを割り当てると共に、ＭＭＡＰデータ構造体内のマッピング情報を初期化する。以下に詳細に述べるＭＭＡＰデータ構造体は、共用メモリのマッピングを記述するのに使用される。ルーチンＤＢ ａｌｌｏｃａｔｅは、ＡＰＭＰデータベースの初期断片をマップ解除しない。インスタンスがＡＰＭＰシステムの参加者である場合には、そのインスタンスは、ルーチンＤＢ Ｍａｐ ｃｏｎｔｉｎｕｅをコールし、ＡＰＭＰデータベースをマップする。ルーチンＤＢ Ｍａｐ ｃｏｎｔｉｎｕｅは、ＡＰＭＰデータベースの初期断片をマップ解除しない。ＡＰＭＰデータベースがマップされ、そして参加するインスタンスのコードが、初期ＡＰＭＰデータベースではなく、新たにマップされたＡＰＭＰデータベースを参照するように切り換わった場合には、初期ＡＰＭＰデータベースは、ルーチンＤＢ ｕｎｍａｐを呼び出すことによりマップ解除される。このルーチンは、インスタンスがＡＰＭＰシステムを出るときにＡＰＭＰデータベースをマップ解除するために呼び出すこともできる。
【０１０７】
ＡＰＭＰデータベースは、全てのインスタンスに対して同じ仮想位置に配置される必要はない。というのは、これは、所与の範囲の仮想アドレスが使用できない場合にインスタンスがＡＰＭＰシステムに参加するのを防止するからである。この融通性は、異なる仮想アドレススペースレイアウトを有する異なるオペレーティングシステムが新たなＡＰＭＰシステムに容易に共存できるようにする。
ＤＢ Ｍａｐ ｉｎｉｔｉａｌルーチンは、ＡＰＭＰデータベースの初期断片をマップし、初期ＡＰＭＰデータベースの長さを受け入れ、そして初期ＡＰＭＰデータベースの仮想アドレスを返送する。更に、ＤＢ Ｍａｐ ｉｎｉｔｉａｌは、マップされたページをテストして、そのページが共用メモリからのものであるよう確保すると共に、不良ページをマークする。
【０１０８】
ＤＢ ａｌｌｏｃａｔｅルーチンは、初期のＡＰＭＰデータベースの全アドレス、初期のＡＰＭＰデータベースの長さ、及び全ＡＰＭＰデータベースの長さを受け入れる。このルーチンは、仮想アドレスを全ＡＰＭＰデータベースに返送する。このルーチンは、全ＡＰＭＰデータベースをマップするに充分なインスタンスアドレススペースを割り当て、そしてこのスペースの始めにＡＰＭＰデータベースの初期断片を再マップする。より多くのＡＰＭＰデータベースページが共用メモリから必要に応じてマップされる。これらページはテストされ、そして不良ページに遭遇した場合に、それが使用されたとマークされる。ＡＰＭＰデータベースページの残りは、適当なページテーブルエントリにマップされる。隣接ページは、ＡＰＭＰデータベースＰＦＮリストに対して割り当てられる。ＡＰＭＰデータベースのＰＦＮは、未使用のエントリがゼロ化された状態でＰＦＮリストページに記憶される。全ＡＰＭＰデータベースに対して充分な隣接ページが使用できる場合には、ＰＦＮリストページは使用されない。共用ページは、構成ツリーから直接割り当てられ、そして初期ＡＰＭＰデータベースページの直後にページから取り出される。
ＤＢ Ｍａｐ ｃｏｎｔｉｎｕｅルーチンは、発呼者がＡＰＭＰシステムの形成者でない場合に全ＡＰＭＰデータベースをマップする。このルーチンは、初期ＡＰＭＰデータベースの仮想アドレス及び初期ＡＰＭＰデータベースの長さを受け入れる。このルーチンは、全ＡＰＭＰデータベースのスタート仮想アドレス及び全ＡＰＭＰデータベースの長さを返送する。
【０１０９】
各オペレーティングシステムインスタンスは、構成ツリーのメモリ特徴に焦点を合わせたメモリ構成情報機能を含む。ＭＥＭ ＣＯＮＦＩＧ ＩＮＦＯルーチンは、構成ツリーフィールドＭＡＸ ＤＥＳＣ及びＭＡＸ ＦＲＡＧＭＥＮＴＳを読み取りそして最大数のメモリ記述子ノード及び記述子ノード当たりの最大数のメモリ断片を返送することにより基本的なメモリ構成情報を返送する。ＭＥＭ ＣＯＮＦＩＧ ＰＦＮルーチンは、どの区画が所与のＰＦＮを所有するか決定する。このルーチンはページフレーム番号を受け入れ、そしてそれがどんな形式のページであるか、即ちページが共用であるか、特定区画に対してプライベートであるか、入力／出力（Ｉ／Ｏ）ページであるか、又は非所有メモリであるかの指示を返送する。更に、ページがプライベートであるか又はＩ／Ｏデバイスをアクセスするのに使用される場合には、ルーチンは、どの区画がこのＰＦＮを所有するかの指示を返送し、そしてページが共用である場合には、どのコミュニティがＰＦＮを所有するかの指示を返送する。ＳＨＭＥＭ ＣＯＮＦＩＧ ＤＥＳＣルーチンは、構成ツリーにおけるメモリ記述子に関する共用メモリ情報を返送する。メモリ記述子ノードが見つかると、このルーチンは、共用とマークされた断片に対してメモリ断片をサーチし、そして各断片に対するＰＦＮ及びページカウントを返送バッファに満たす。共用とマークされたメモリ断片がない場合には、断片カウントがゼロにセットされる。
【０１１０】
ＳＨＭＥＭ ＣＯＮＦＩＧ ＡＬＬルーチンは、共用メモリを含む全てのメモリ記述子ノードに関する情報を返送する。このルーチンは、ループにおいてＳＨＭＥＭ ＣＯＮＦＩＧ ＤＥＳＣを呼び出して、全ての共用メモリページ範囲を得る。入力アーギュメントは、最大数のメモリ記述子ノードと、記述子ノード当たり最大数のメモリ断片とを含む。このルーチンは、共用メモリ範囲を記述する構造体のアレーから全数の共用メモリ断片を返送する。
ＳＨＭＥＭ ＣＯＮＦＩＧ ＡＭＡＰルーチンは、構成ツリーにおいてＡＰＭＰ  ＰＦＮ範囲を設定する。ＡＰＭＰ  ＰＦＮ範囲が既に設定された場合には、それが情報を返送する。このルーチンは、ＡＰＭＰデータベースに使用するための第１のＰＦＮと、ＡＰＭＰページの数とを返送する。このルーチンは、コミュニティノード内の値を読み取り、そしてその値がゼロである場合には、ＳＨＭＥＭ ＣＯＮＦＩＧ ＤＥＳＣルーチンを呼び出すことにより、共用メモリの第１の隣接範囲、ここに示す実施形態では８メガバイト、を得る。次いで、コンソールディスパッチルーチンを呼び出して、この範囲をコミュニティノードにおいてセットする。ＡＰＭＰページ範囲の設定に競合があった場合には、構成ツリーに設定された範囲が読み取られ、発呼者へ返送される。
【０１１１】
ＡＰＭＰデータベースＳＨＭＥＭにおける共用メモリマネージメントデータ構造体は、バージョン数、ＳＨＭＥＭ構造体の固定部分のサイズ、共用メモリが有効であるかどうか、初期化が進行中であるかどうか、デバッグ構造フォーマットが使用されるかどうか、全ての共用メモリ共通特性区画内の全てのページがテストされたかどうか、そして最大数の共用メモリ共通特性区画があるかどうかを示すフラグを備えている。更に、このデータ構造体は、有効な共用メモリ共通特性区画の全数、１つの共用メモリ共通特性区画構造体のサイズ、共用メモリデータ構造体の開始から共用メモリ共通特性区画アレーまでのオフセット、共用メモリデータ構造体の開始から共用メモリロック構造体までのオフセット、共用メモリロックハンドル、及びＡＰＭＰシステム内にサポートされた共用メモリ領域の最大数も含む。又、このデータ構造体は、有効な共用メモリ領域の全数、及び共用メモリデータ構造体の開始から共用メモリ領域タグアレーまでのオフセットも含む。共用メモリ領域構造体のサイズ、及び共用メモリマネージメントデータ構造体の開始から共用メモリ領域アレーまでのオフセットも含まれる。
【０１１２】
インスタンスプライベートメモリデータセルは、ＡＰＭＰデータベースにおける共用メモリマネージメントエリアに関する情報を含む。この情報は、共用メモリデータ構造体の開始を指すポインタと、共用メモリデータ構造体に関連して述べたものと同じ記述子、即ち共用メモリ共通特性区画の最大数、各共用メモリ共通特性区画におけるメモリ断片の最大数、１つの共用メモリ共通特性区画構造体のサイズ、ＡＰＭＰデータベース内の共用メモリ共通特性区画アレーを指すポインタ、共用メモリリストのポインタ、及びＡＰＭＰデータベース内の共用メモリ領域タグアレーのポインタを含む。更に、共用メモリ領域の最大数、１つの共用メモリ領域構造体のサイズ、ＡＰＭＰデータベース内の共用メモリ領域アレーを指すポインタ、及びプライベートメモリ内の共用メモリ記述子アレーを指すポインタも含まれる。
【０１１３】
共用メモリ共通特性区画（ＣＰＰ）構成エリアが初期化されるときには、ＡＰＭＰデータベースページが除外される。共用メモリ共通特性区画は、共用メモリを、共通特性を有する区画へと区画化することによりホットスワッピング及び非均一メモリアクセスをサポートする。フラグ及びルーチンを使用して、例えば、ＣＰＰがどの非均一メモリアクセスユニットにあるか、又はＣＰＰがどのホットスワップ可能なユニットにあるかを、そのユニット内のメモリページの範囲及び位置と共に指示する。ＡＰＭＰシステムのメンバーである各インスタンスは、それが接続される各共用メモリＣＰＰに関するデータをそれ自身のプライベートメモリに維持する。共用メモリ共通特性区画データ構造体へのアクセスを同期するためにロック構造体が使用される。区画が共用メモリＣＰＰに接続されるとき、区画が共用メモリＣＰＰから切断されるとき、ページが共用メモリＣＰＰから割り当てられるとき、又はページが共用メモリＣＰＰに対して割り当て解除されるときに、ロックが保持される。各共用メモリＣＰＰは、空きページリスト、不良ページリスト、及び非テストページリストを有する。ページは、空きページ及び非テストページリストから割り当てることができ、そして空きページリスト及び不良ページリストへと割り当て解除される。共用メモリＣＰＰページリストリンクは、ページに対するＰＦＮデータベースエントリ内に維持される。
【０１１４】
共用メモリロックは、ＳＨＭ ＴＡＧアレーと、有効ＳＨＭ ＲＥＧ構造体の関連リストとを同期すると共に、空きＳＨＭ ＲＥＧ構造体のリストへのアクセスを同期するために使用される。ＳＨＭＥＭロックは、ＳＨＭ ＴＡＧアレーを読み取り又は書き込みする間、有効ＳＨＭ ＲＥＧ構造体のリストを操作する間又は空きＳＨＭ ＲＥＧリストを操作する間に保持されねばならない。共用メモリロックは、次のようにランク付けされる。最も高次のロックは、ＩＰＬ８ＳＭＰスピンロック、それに続いてＳＨＭ ＣＰＰロック、次いで、ＳＨＭ ＲＥＧロック、そして最後に、ＳＨＭＥＭロックである。例えば、ＳＨＭＥＭロックを保持する間に、ＳＨＭ ＲＥＧロック、ＳＨＭ ＣＰＰロック及び／又はＳＭＰスピンロックをこの順序で収集することができる。共用メモリに関する情報を得るためにカーネルモードから共用メモリマネージメント機能を呼び出すことができる。ＳＨＭＥＭロックは、デッドロックが生じないように他のロックに対してランクを有する。
【０１１５】
Ｂ．マルチプロセッサコンピュータシステムにおけるリソースの移動（図９−１０Ｅ）
本発明の特徴によれば、オペレーティングシステムの多数のインスタンスは、単一マルチプロセッサコンピュータにおいて協働的に実行され、ここでは、単一の物理的マシンがソフトウェアにより多数の区画に分割され、各区画は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各個々のインスタンスは、独立して実行するために必要なリソースを有するが、これらインスタンスは、リソースをある区画から別の区画へ移動するように協働する。本発明のこの特徴の原理によれば、移動は、システムアドミニストレータの介在なしに「オンザフライ」でオペレーティングシステムインスタンスの制御のもとで開始及び実行することができる。或いは又、システムアドミニストレータがシステムを再構成することもできる。
【０１１６】
１つの実施形態によれば、リソースの移動は、「プッシュ」モデルのもとで行われ、ここでは、リソースがその所有区画によって制御され、そしてリソースが別の区画へ移動する前にその区画により解除されねばならない。このモデルによれば、リソースを必要とする第１のオペレーティングシステムインスタンスは、先ず、第２インスタンスからリソースを要求する。この要求に応答して、第２のインスタンスは、それがリソースを予備とすることができるかどうか決定し、もしそうであれば、リソースをアイドル状態にし始める。リソースは、第２インスタンスがリソースの使用を停止したときに転送される。又、「プッシュ」モデルによれば、リソース移動の要求は、オペレータが第２インスタンスにおいてプログラムを実行することにより開始されるか、又は要求を開始するポリシーマネージメントソフトウェアによって開始される。
【０１１７】
リソースのランタイム移動
ＡＰＭＰシステムが実行された後に、１つの区画に最初に割り当てられたリソースは、別の区画へ移動することができる。この移動は、システムアドミニストレータの制御のもとで行うこともできるし、又はシステムアドミニストレータを関与させずにオペレーティングインスタンスにより開始することもできる。移動は、所有するオペレーティングシステムインスタンスがリソースの使用を停止するか又はコンソールプログラムがリソースの使用を停止する動作を行うことにより達成される。次いで、構成ツリーは、リソースの所有権を別のオペレーティングシステムインスタンスへ転送するように変更される。オペレーティングシステムインスタンスがリソースの使用を停止するようにさせるに必要な動作は、オペレーティングシステムに特有のものである。
【０１１８】
一般に、いなかるリソースも、付加的なシステム制約によって移動が防止されない限り移動することができる。例えば、ＡＰＭＰシステムのＣＰＵは、それが現在第１区画における一次ＣＰＵでなく且つ分散割り込みハンドリングのようなオペレーティングシステム制約により結合されていなければ、第１区画から第２区画へ移動することができる。いつそしてどこにＣＰＵが移動するかのポリシーは、厳密に、ＣＰＵが実行するオペレーティングシステムコードによる。
メモリも、第１区画から第２区画へ移動することができる。メモリが第１区画によりプライベートに所有される場合には、単純な仕方で移動できる。メモリが２つの区画間に共用される場合には、メモリが移動の前に全ての区画により完全にロード解除されたことを保証するために、ある付加的な段階が必要となる。
【０１１９】
移動は、全ＡＰＭＰシステムの再ブートを伴わずに行われるのが好ましいが、あるリソースの移動は、変化の形式及びオペレーティングシステムの能力に基づき、リソース移動に関与する１つ又は両方の区画の再ブートを必要とする。例えば、１つの区画から別の区画への入力／出力プロセッサの移動は、両区画を再ブートすることを必要とする。しかしながら、１つ以上のメモリ断片のメモリ割り当ての変更は、再ブートを必要とせずに、オペレーティングシステムコードによって取り扱われる。
移動プロセスは、新たな所有者がリソースの使用を開始できる前に元のリソース所有者が先ずリソースを解除しなければならないという点で「プッシュ」モデルのもとで動作する。このプッシュ移動プロセスの１つの実施形態における基本的な段階が図９のフローチャートに示されていると共に、図１０Ａ−１０Ｅに概略的に示されている。
【０１２０】
図９において、リソース移動動作はステップ９００で始まり、そしてステップ９０２へ進み、ここで、リソースを必要とするオペレーティングシステムインスタンス（例えば、オペレーティングシステムインスタンス２）が、別のオペレーティングシステム、例えば、オペレーティングシステムインスタンス１からのリソースの使用を要求する。プロセス間割り込み、共通メモリ又はいずれかのメカニズムのような多数の従来の公知のメカニズムによってプロセス間通信を行うことができる。同じ動作段階が、図１０Ａにも示されている。図１０Ａは、区画１（１０００）及び区画２（１００２）の２つの区画より成る例示的システムを示す。各区画１０００及び１００２は、ボックス１００６及び１０１６として各々概略的に示されたコンソールプログラムを含む。又、各区画１０００及び１００２は、オペレーティングシステムインスタンス１（１００８）及びオペレーティングシステムインスタンス２（１０１８）で示されたオペレーティングシステムインスタンスも含む。区画１（１０００）は、矢印１０１１で概略的に示すようにオペレーティングシステムインスタンス１（１００８）により使用されるリソース１０１０も含む。移動プロセスの第１ステップにおいて、オペレーティングシステムインスタンス２（１０１８）は、リソース１０１０を使用するために、矢印１０１４で概略的に示された要求をオペレーティングシステムインスタンス１（１００８）へ行う。
【０１２１】
本発明に使用されるプッシュモデルによれば、オペレーティングシステムインスタンス１（１００８）は、オペレーティングシステムインスタンス２（１０１８）への要求されたリソース１０１０の転送に合意しなければならない。オペレーティングシステムインスタンス１（１００８）が合意した場合には、ステップ９０４に示すようにリソース１０１０を静止させる。プロセスの次のステップが図１０Ｂにも概略的に示されており、ここでは、図１０Ａと共通の要素が同じ参照番号で示されている。例えば、区画１は、図１０Ａ及び１０Ｂの両方に１０００で示されている。図１０Ｂに示すように、オペレーティングシステムインスタンス１（１００８）がリソースの移動に合意する場合には、オペレーティングシステムインスタンス１（１００８）は、破線矢印１０２０で概略的に示すようにリソース１０１０の使用を静止即ち停止する。
【０１２２】
次いで、オペレーティングシステムインスタンス１（１００８）は、ステップ９０６に示すように、リソースの所有権の意図された変更をコンソール１（１００６）に通知する。移動プロセスのこのステップが図１０Ｃに示されている。このステップにおいては、オペレーティングシステムインスタンス１（１００８）は、矢印１０２２で概略的に示すように所有権の転送が要求されたことをコンソール１（１００６）に通知する。特に、オペレーティングシステムインスタンス１（１００８）は、以下に述べるように、構成ツリー１０１２においてリソース１０１０のｏｗｎｅｒ及びｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドを変更するようにコンソール１（１００６）に通知する。
次いで、ステップ９０８において、コンソール１（１００６）は、リソースの新たな所有者を指示するように構成ツリー１０１２を変更する。このステップは図１０Ｄに概略的に示されており、コンソール１（１００６）は、矢印１０２６で概略的に示すように構成ツリー１０１２を変更する。この変更は、矢印１０２８で概略的に示すように、区画１（１０００）から区画２（１００２）へリソース１０１０を効果的に移動し、リソースは、要素１０２４で概略的に示すように区画２（１００２）に新たに現れる。
【０１２３】
最終的に、ステップ９１０において、コンソール１（１００６）に関連するオペレーティングシステムインスタンス１（１００８）は、コンソール２（１０１６）に関連するオペレーティングシステムインスタンス２（１０１８）に転送を通知し、従って、オペレーティングシステムインスタンス２（１０１８）はリソースの使用を開始できる。このルーチンは、ステップ９１２で終了する。プロセスにおけるこの最終段階は、図１０Ｅに示されており、オペレーティングシステムインスタンス１（１００８）は、リソース１０２４が今や使用できることをオペレーティングシステムインスタンス２（１０１８）に通知する。このオペレーションは、矢印１０３０により概略的に示され、既知の従来のプロセス間通信を伴う。オペレーティングシステムインスタンス２（１０１８）は、次いで、矢印１０３２で概略的に示すようにリソース１０２４を使用することができる。
【０１２４】
既に述べたように、所有されたアクティブな状態から非所有のインアクティブな状態へのリソースの転送を管理するために構成ツリーの各ノードにはｏｗｎｅｒ及びｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドが設けられている。リソースを所有するオペレーティングシステムインスタンスだけが、ｏｗｎｅｒフィールドをゼロにセットすることによりリソースを指定解除できる。ナルのｏｗｎｅｒ及びｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドを有するリソースだけが新たな区画及びコミュニティに指定され得る。リソース移動中には、いずれかのインスタンスが構成の不正確な観点を得るのを防止するためにＨＷＲＰＢ及び構成ツリーが一斉に且つ原子的に変更される。同様に、ＨＷＲＰＢ及び構成ツリーに対する原子的及び整合された変更により「ホットスワップ」を付随させることもできる。
【０１２５】
リソースが指定解除されるときには、所有するオペレーティングシステムは、ｏｗｎｅｒフィールドを指定解除するか又はｏｗｎｅｒ及びｃｕｒｒｅｎｔ ｏｗｎｅｒの両方のフィールドを指定解除するかを選択することができる。どのフィールドを指定解除するかの判断は、所有するオペレーティングシステムが所有権の指定解除の前にリソースの使用を停止できる能力に基づいている。所有権を放棄するために再ブートが必要な場合には、ｏｗｎｅｒフィールドがクリアされるが、ｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドは不変である。所有するオペレーティングシステムインスタンスが再ブートするときには、初期化中にナルのｏｗｎｅｒフィールドを有するリソースに対してｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドをクリアするように区画のコンソールプログラムを指定することができる。
【０１２６】
コミュニティの一部分であるオペレーティングシステムインスタンス間にリソースが共用される場合には、オペレーティングシステムインスタンスは、リソースを指定解除するために協働しなければならない。この指定解除は、コミュニティの一部分であるインスタンスによって管理される。
リソースの所有権は、構成ツリーを変更することにより変更される。構成ツリーが変更されるときには、あるルールに従わねばならない。これは、次のものを含む。
１）構成ツリーノードの構成(config)フィールドがツリーハードウェア根ノードを指す場合には、それに対応するリソースは、コミュニティ又は区画とは独立して指定され得る。
【０１２７】
２）そのノードの構成フィールドがツリーハードウェアの根ノードを指さない場合には、リソースが区画に指定されるときに、対応するツリーノードの全ての子孫を変更してそれらが同じ区画に指定されるようにすると共に、構成ノードに対して変更されつつあるツリーノードからの親チェーン内の全てのツリーノードも同じ区画又はコミュニティ所有者をもたねばならない。構成ノードは、変更されつつあるノードの祖先であって、親ポインタをたどることにより到達できねばならない。
ハードウェアノードの所有権がコミュニティに与えられるときには、全ての子孫がコミュニティ、コミュニティの区画により所有されるか、又は非所有でなければならない。構成ポインタがハードウェアの根でない場合には、構成ノードに対して変更されつつあるノードからの親チェーン内の全てのノードも、同じコミュニティ所有者をもたねばならない。構成ノードは、親ノードをたどることにより到達し得る変更されたノードの祖先でなければならない。
【０１２８】
ハードウェア要素、例えばＣＰＵは、独立して自由に動作することができる。この場合に、構成ポインタはハードウェアの根を特定する。しかしながら、これらの要素は、独立して動作できない他の要素で構成されることもある。例えば、ＰＣＩバスのＩ／Ｏコントローラは、ＰＣＩバスから分離できねばならない。
メモリのようなあるハードウェア要素は、多数の区画により共用できる。これは、コミュニティを指す所有者フィールドにより表される。従って、コミュニティ内の区画は、要素へのアクセスを共有できる。共用されるハードウェア要素の子孫は、子孫である所有者を特定できる。例えば、メモリサブシステムは、コミュニティにより所有できる。この場合、メモリのハードウェア特徴を表し、エラーの取り扱いを含むメモリコントローラは、コミュニティ内の区画によって所有され、メモリ記述子ノードは、コミュニティによって所有され、そしてその断片は、コミュニティ（共用）及び区画（プライベート）の両方により所有される。
【０１２９】
別の実施形態
他の移動形態も考えられる。例えば、システムマネージャーは、リソースを静止しそしてリソースを「非指定」状態に入れるように第１のオペレーティングシステムインスタンスに指令することができる。ある時間の後に、第２のインスタンスは、リソースに対する必要性を見つけ、非指定リソースのプールからそれを移動することができる。或いは又、システムマネージャーは、リソースを割り当てるように第２のインスタンスに指令することができる。或いは又、システムポリシーは、あるリソースを一方的に静止させて第２のインスタンスへ転送させるバッチジョブを第１インスタンスにおいて所定の時間に実行させてもよい。これら後者の両方の例においては、リソースに関するインスタンス間の明確な通信はないが、リソースの全体的な使用を整合するある程度の人間の介在又はポリシーが明らかに存在する。
【０１３０】
更に別の解決策では、インスタンスは、リソースを必要とするときに、非指定のプールからリソースを割り当てることができる。インスタンスは、リソースで終了となると、それを非指定のプールに返送する。プールが空の場合には、インスタンスは、そのときに存在するリソース割り当てで動作しなければならない。従って、共通のプールを有するが、インスタンス間には要求／解除プロトコルが必要とされない。特定の機能を達成するのに使用される特定の命令のような他の特徴、及び本発明の概念に対する他の変更は、特許請求の範囲によって包含されることが意図される。
Ｃ．融通性のあるリソース共用レベルをもつソフトウェア区画化のマルチプロセッサシステム（図１１−１５）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが互いに電気的に接続された単一のマルチプロセッサコンピュータにおいて協働的に実行される。多数の物理的プロセッサ及びリソースを伴う単一の物理的マシンがソフトウェアによって多数の区画に細分化され、各区画は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース、及び共用と指示されたリソースにアクセスする。１つの実施形態によれば、区画化は、構成ツリーのような構成データ構造体を用いてリソースを指定することにより実行される。
【０１３１】
ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートをある区画に指定することによりそれらを論理的に区画化するので、多数の区画間に共用として指示されるリソースは、全部でもよいし、若干でもよいし、又は皆無でもよい。各個々のオペレーティングインスタンスには、一般に、それが独立して実行するために必要なリソースが指定され、これらリソースは、「プライベート」と称される。他のリソース、特にメモリは、２つ以上のインスタンスに指定されそして共用され得る。共用メモリはキャッシュコヒレントであり、従って、インスタンスは緊密に接続され、そして分散型ロックマネージャー及びクラスター相互接続部のような単一のインスタンスに通常割り当てられるリソースを共用することができる。
ＣＰＵ及びメモリのような新たに加えられるリソースは、異なる区画に動的に指定することができ、そして構成の変更によりマシン内で実行されるオペレーティングシステムのインスタンスにより使用することができる。
【０１３２】
上記コンピュータシステムを使用して、構成ツリーを適当に操作するだけで、種々のシステム構成を得ることができる。図１１は、本発明のコンピュータシステムがマシンにおいてインスタンス生成されるときにどんな構造的記述に似ているかを示す外観図である。この例は、３つの区画１１０１、１１０２及び１１０４に区画化された９個のＣＰＵのＳＭＰマシン１１００である。各区画は、１つ以上のＣＰＵ（グループ１１０６、１１０８及び１１１０）と、幾つかのプライベートＩ／Ｏリソース（１１１２、１１１４及び１１１６と示された）とを有していて、オペレーティングシステムのインスタンス（１１１８、１１２０及び１１２２と概略的に示された）を実行する。オペレーティングシステムは、同じオペレーティングシステムの３つのコピー又は３つの異なるオペレーティングシステムである。このシステムのメモリは、キャッシュコヒレントな共用メモリである。共通メモリ１１２４は、各オペレーティングシステムインスタンスに対して１つづつの、プライベートメモリの３つのセグメント１１２６、１１２８及び１１３０に区画化され、そしてその残り１１３２は、協働して使用するための３つの全てのオペレーティングシステムインスタンスに対する共用メモリである。
【０１３３】
図１１に概略的に示すような構成は、図３及び４に示された構成ツリーにおける適当なエントリーにより形成することができる。形成されたものは、単一のコンピュータ内の３つの物理的に独立したコンピュータと同等である。この構造体は、本発明のコンピュータシステムの１つの実施形態の基礎であり、即ちオペレーティングシステムの多数の独立したインスタンスが単一のコンピュータにおいて協働して実行されるものである。本発明のコンピュータシステムは、単一のコンピュータにおいて共用メモリを経て通信する１組の整合された異種オペレーティングシステムである。このようなシステムにおけるオペレーティングシステムのインスタンスは、同じコンピュータシステム内の他のオペレーティングシステムインスタンスとクラスター化することもできるし、又は他のコンピュータシステム内のオペレーティングシステムインスタンスとクラスター化することもできる。
【０１３４】
本発明のコンピュータシステムにおけるオペレーティングシステムのインスタンスは、ＳＭＰ構成である。ＣＰＵの数はインスタンスの定義の一部部であり、そして構成ツリーのエントリによって決定される。本発明のシステムのインスタンスは、完全なオペレーティングシステムであるから、全てのアプリケーションは、慣例的な単一インスタンスコンピュータにおける場合と同様に振る舞う。例えば、既存の単一システムアプリケーションは、本発明のコンピュータシステムではインスタンスに変化を伴うことなく実行される。既存のクラスターアプリケーションも、システム内のオペレーティングシステムにおいてクラスター化されたインスタンスに変化を伴うことなく実行される。システムは、慣例的な単一システムビューのＳＭＰシステムよりも利用性が高い。というのは、オペレーティングシステムの多数のインスタンスがシステムにおいて実行されるからである。その結果、単一のインスタンスに欠陥が生じても、その欠陥を生じさせたハードウェア又はソフトウェアエラーにも関わらず、他のインスタンスが実行を続けることができる。
【０１３５】
このようなシステムでは、メモリ１１２４は、プライベート区分（１１２６、１１２８及び１１３０）及び共用区分（１１３２）へと論理的に区画化される。各オペレーティングシステムインスタンスは、最小限、それ自身のプライベートメモリ区分を有する。所有するオペレーティングシステムインスタンスの指令による以外は、他のインスタンスがこの物理的メモリ区分にマップすることはできない。オペレーティングシステムのインスタンス（１１１８、１１２０及び１１１２）に対して共用メモリ１１２４のある部分を使用して互いに通信することができ、そして共用メモリの残り部分をアプリケーションに対して使用することができる。
本発明のシステムにおいて、Ｉ／Ｏサブシステムは、拡張可能でもある。システムには、各インスタンスごとに１つづつ、多数の「一次」ＣＰＵがあるので、Ｉ／Ｏワークロードの負荷バランスは良好である。加えて、Ｉ／Ｏコントローラは、ＳＭＰシステムにおいて二次ＣＰＵへのＩ／Ｏの分配をサポートし、Ｉ／Ｏワークロードを更にバランスすることができる。
【０１３６】
図１１には、３つの別々のオペレーティングシステムインスタンスがあるが、インスタンス間の協働が予想される。このような協働は、次の３つの広い分類又は計算モデルにおいて定義することができる。
１）「何も共用しない」−オペレーティングシステムインスタンスは、いかなるリソースも共用せず、互いに干渉せずに協働するよう合意する。
２）「部分的共用（何かを共用する）」−オペレーティングシステムインスタンスは、協働すると共に、メモリ又は記憶装置のようなある限定されたリソースを共用するように合意する。
３）「全てを共用する」−オペレーティングシステムインスタンスは、それらがネットワークに対し単一の凝集したエンティティを表すような点まで、完全に協働しそして全ての使用可能なリソースを共用するよう合意する。
【０１３７】
例えば、オペレーティングシステムインスタンスは、ユーザに対しオープンＶＭＳクラスターとして現れる。
たとえあるオペレーティングシステムインスタンスがリソースを共用しても、１つ以上のオペレーティングシステムインスタンスは、他の全てから完全にソフトウェア分離した状態で実行することができる。いかなるリソースも共用せずに存在するインスタンスは、独立インスタンスと称され、共用メモリの使用には全く参加しない。より詳細には、基本的なオペレーティングシステムも、そのアプリケーションも、共用メモリにアクセスしない。本発明のコンピュータシステムは、独立したインスタンスのみで構成することができ、このようなシステムは、慣例的なメインフレーム型の区画化に類似している。
【０１３８】
図１２は、「何も共用しない」計算モデルをサポートするために本発明のシステムをいかに構成できるかを示す。この例では、３つの区画１２０６、１２１０及び１２１４が単一のマシン１２００内に形成されており、その各々はオペレーティングシステムのインスタンスを実行する。使用可能な１２個のＣＰＵは、この例では１２０６、１２１０及び１２１４と示された区画間で任意に等しく分割されている。使用可能なメモリは、プライベートメモリに分割され、そしてインスタンスに指定されている。図１２においては、プライベートメモリ部分１２１６、１２１８及び１２２０が示されている。各インスタンスのコード及びデータの両方は、そのインスタンスに指定されたプライベートメモリに記憶される。メモリ１２１６、１２１８及び１２２０は、図１２では等しく分割されて示されているが、本発明のアーキテクチャーは、インスタンス間でのメモリの任意の分割をサポートする。従って、ある区画が大きなメモリを必要としそして別の区画が限定されたメモリしか必要としない場合には、システムは、使用可能なメモリを最大限に使用するようにその両方を受け入れることができる。
【０１３９】
又、各区画は、Ｉ／Ｏ部分１２０４、１２０８及び１２１２として示されたプライベートＩ／Ｏコントローラ／ディスクも有している。メモリが任意に分割されるのと同様に、Ｉ／Ｏ回路についても同じことが言える。図１２に示す「何も共用しない」構成では、使用可能なＩ／Ｏリソースは、各区画に対してプライベートであるが、均一に分割されなくてもよい。区画１２０６、１２１０及び１２１４は、マシン内の物理的リンク１２０２を経て互いにネットワークすることができ、そしてこのリンクは、マシンから他のコンピュータへと延長することができる。
形成されたものは、互いにネットワークされた３つの物理的に別々のマシンと同等である。従来のコンピュータシステムと本発明のシステムとの間の相違は、３つの物理的なボックスではなく、１つのボックスしかないことである。又、マシンが配備されるまで各区画の厳密な構成を決定する必要がない。本発明のシステムの別の独特の特徴は、マシンの配備後に区画の数／サイズを動的に構成できることである。
【０１４０】
図１３は、区画がメモリを共用する部分共用モデルとして構成された本発明のシステムを示す。図１３において、図１２の要素に対応する要素は、対応する番号で示されている。例えば、図１２のマシン１２００は、図１３ではマシン１３００として示されている。前記のように、各区画１３０６、１３１０及び１３１４は、そのインスタンスのコード及びデータが記憶されるそれ自身のプライベートメモリ区分１３１６、１３１８及び１３２０を有する。しかしながら、この構成では、共用メモリ区分１３２２もあり、全てのインスタンス１３０６、１３１０及び１３１４によりアクセスできるデータ及び／又はコードがここに記憶される。又、３つのインスタンス１３０６、１３１０及び１３１４は、相互接続部１３０２によって互いにネットワークされる。
【０１４１】
図１３に示された構成の効果は、大きな共用キャッシュメモリ（例えば、データベース又はファイルシステム）を形成して多数のインスタンスによって一緒に使用できることである。又、このシステムは、オペレーティングシステムのインスタンスがこの構成をデアクチベートし又はそこから退出することができ、そして再びそこに加わるときに、依然アクティブなキャッシュメモリへと再マップできることである。キャッシュメモリが大きくなるにつれて、既存のメモリへと再マップするこの能力は、非常に重要なものとなる。というのは、非常に大きなキャッシュメモリの全てのエントリをプライベートメモリスペースにロードするのに非常に時間がかかるからである。
図１４は、「全てを共用する」コンピュータシステムとして動作するよう構成された本発明のシステムを示す。図１３の場合と同様に、図１２及び１３の同様の要素に対応する図１４の要素は、対応する番号が与えられている。各区画１４０６、１４１０及び１４１４は、ここでも、そのインスタンスのコード及びデータが記憶されるそれ自身のプライベートメモリ１４１６、１４１８及び１４２０を有している。又、データが記憶される共用メモリ区分１４２２もある。３つのインスタンスは、相互接続部１４０２により互いにネットワークされるが、記憶相互接続部１４２４及びクラスター相互接続部１４２６もある。全てを共用するコンピュータシステムを構成する場合には、次の効果が得られる。
【０１４２】
１）分散型ロックマネージャー（図示せず）は、共用メモリ１４２２を使用してそのロックキャッシュ（図示せず）を記憶し、ロック性能を高めることができる。
２）クラスター相互接続部１４２８は、独立したハードウェアを使用するのに代わって、共用メモリ１４２２内に配置され、これにより、インスタンス１４０６、１４１０及び１４１４がクラスター化される場合にクラスター通信性能を高めることができる。
３）非常に特殊な機能に対して区画を形成することができる。例えば、Ｉ／Ｏコントローラ（図示せず）をもたずに区画を形成することができ、それを効果的に「計算エンジン」とすることができる。
【０１４３】
本発明のシステムでは、図１２、１３及び１４に示す３つの全ての計算モデルを区画の適当な構成により単一のコンピュータボックス内で実行することができる。即ち、ある区画は、「何も共用しない」コンピュータとして動作できる。別の区画グループは、「部分的に共用した」コンピュータシステムとして動作することができ、そして更に別の区画グループは、「全てを共用する」コンピュータシステムとして動作することができる。更に、所与のインスタンスが１組のインスタンスとの「部分的に共用した」構成において動作すると同時に、別の（そして完全に個別の）１組のインスタンスとの「全てを共用する」構成において動作するようにすることもできる。
本発明のアーキテクチャーのもとで動作する計算モデル又はモデルの組合せに関わりなく、リソースを動的に再割り当てする能力は、いずれのオペレーティングシステムインスタンスの完全性にも影響することなく可能となる。特に、ＣＰＵ及びメモリを区画間で移動する能力がサポートされる。
【０１４４】
従って、システムは、ビジネスのニーズが成長又は変化するときにアプリケーションの要求に適合するようにシステムマネージャーがリソースを指定できるので、システムリソースをより直線的に拡張するという能力を与える。ＣＰＵは、本発明のコンピュータ構成に追加されるときに、オペレーティングシステムのいかなるインスタンスに指定することもできそしてシステムのオペレーション中に後で再指定することもでき、従って、リソースを指定する「試行錯誤」方法は有効な戦略となる。特に、システムマネージャーは、リソースの最も効率的な組合せが見つかるまで、オペレーティングシステムのインスタンス間でＣＰＵを移動することができる。オペレーティングシステムの全てのインスタンス及びそれらのアプリケーションは、ＣＰＵが移動されるときに実行を継続する。最終的に、インスタンスにわたる割り込みの分配が多数のＩ／Ｏ構成の可能性を与え、例えば、システムのＩ／Ｏワークロードは、あるＩ／Ｏトラフィックが特定のインスタンスにおいて行われるように区画化することができる。
又、本発明のシステムは、システムが動作している間にリソースを転送することもできる。従って、ＣＰＵのような要素は、システム電力がオンに保持されそしてハードウェアシステムの他部分が動作を続ける間に、あるインスタンスから別のインスタンスへ移動できる。これは図１５に示されている。図１３及び１４と同様に、図１２、１３及び１４の同様の要素に対応する図１５の要素は、対応する番号が与えられている。図１５は、矢印１５２８及び１５３０で各々概略的に示されたように、ＣＰＵ２及び３とＣＰＵ８及び９のインスタンス１５１０への移動を示している。この移動は、８個のＣＰＵをもつインスタンス１５１０を形成する。このような構成では、インスタンスは「全てを共用する」構成で動作することを要求されず、インスタンスは、いずれのリソース共用レベルで動作することもでき、リソースの移動を完全にサポートする。
【０１４５】
本発明のシステムは、ある区画において実行されるオペレーティングシステムインスタンスが他の区画に影響を及ぼすことなく停止され得るという性質により個々のＩ／Ｏサブシステムを静止させることができる。一般に、スワップされる要素を除いてハードウェアが実行を続ける場合に、ソフトウェアは、できるだけ多くのインスタンス及びそれらのアプリケーションを実行状態に保つ。又、本発明は、システムが動作しそして電力が供給される間にシステムにリソースを追加できるようにするハードウェア特徴である「ホットインスワッピング」もサポートする。ホットインスワッピングの例は、付加的なメモリである。特定の区画のオペレーティングシステムインスタンスが付加的なメモリを動的にマッピングできると仮定すれば、システムは、ホットインスワップされるメモリを、マシンに継続するアクティブな計算環境へと吸収することができる。
【０１４６】
Ｄ．マルチプロセッサコンピュータシステムにおける仮想リソースハンドリング（図１６−１８）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが電気的に互いに接続された単一のマルチプロセッサコンピュータにおいて協働して実行される。多数の物理的プロセッサ及びリソースをもつ単一の物理的マシンは、ソフトウェアにより適応式に多数の区画に細分化され、その各々は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース及び共用と指示されたリソースにアクセスする。１つの実施形態によれば、リソースの区画化は、ある構成内にリソースを指定することにより実行される。
【０１４７】
より詳細には、ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートを一緒に指定することによりそれらを論理的及び適応式に区画化する。次いで、オペレーティングシステムのインスタンスが区画にロードされる。異なる時間に、異なるオペレーティングシステムインスタンスが所与の区画にロードされる。システムマネージャーが指令するこの区画化は、ソフトウェア機能であり、ハードウェアの境界は必要とされない。各個々のインスタンスは、それが独立して実行するのに必要なリソースを有する。ＣＰＵ及びメモリのようなリソースは、異なる区画に動的に指定することができ、そして構成を変更することによりマシン内で実行されるオペレーティングシステムのインスタンスによって使用することができる。区画それ自身も、構成ツリーを変更することによりシステムを再ブートすることなく変更することができる。これにより得られる適応式に区画化されたマルチプロセッサ（ＡＰＭＰ）システムは、拡張性及び高い性能の両方を示す。
【０１４８】
個々の各インスタンスは、システムの全ての処理リソースの別々の記録を維持する。各インスタンスは、そのインスタンスに対する各動作状態に基づいてプロセッサを分類する。好ましい実施形態では、インスタンスは、各ＣＰＵが動作についてそのインスタンスに適合するかどうか、そのインスタンスの制御下にあるかどうか、そしてそのインスタンス内のＳＭＰオペレーションに使用できるかどうかの記録を維持する。これらの異なる動作状態は、システムのＣＰＵのハイアラーキ分類を表し、そしてシステムは、付加的な分類に適応できる。使用できる付加的な状態は、プロセッサがインスタンスに最初に加わるときに直ちに処理アクティビティを開始するように選択されたかどうかを指示する。
好ましい実施形態では、異なる分類の動作状態のいずれかにあるＣＰＵのメンバーシップが、各分類ごとにビットベクトルを維持する各インスタンスによって記録され、各ビットベクトルの少なくとも１つのビットは、その分類における１つのＣＰＵのメンバーシップ状態に対応する。通常、各ビットベクトルは、各ＣＰＵごとに１ビットを有し、例えば、当該インスタンスによるＣＰＵ制御を表すビットベクトルは、第１の対応するＣＰＵがそのインスタンスの制御下にある場合には、その第１ビットが第１アサーションレベルにセットされる。ＣＰＵがそのインスタンスの制御下にない場合には、第１ビットは第２のアサーションレベルにセットされる。各ＣＰＵを表すビットにより、このビットベクトルは、各ＣＰＵに対しどれがインスタンスの制御下にあるかを示す指示を与える。同様に、他のビットベクトルも、各ＣＰＵの指示を与え、これらの指示は、例えば、どのＣＰＵが動作についてインスタンスに適合するか、どれがＳＭＰ動作についてインスタンスに使用できるか、そしてどれが初期化の直後にＳＭＰ処理アクティビティに加われるかを示す。このように、各インスタンスは、全ての処理リソースを個々に追跡できると共に、インスタンスに対してそれらの動作状態がどんなものであるかを追跡できる。
【０１４９】
別の実施形態では、システムのインスタンスに対する処理リソースの動作状態を示す指示が、全てのインスタンスにアクセスできる記憶エリアに維持される。特に、異なるインスタンスの各々とプロセッサとの適合性に関する情報が与えられる。これは、所与のプロセッサが特定のインスタンスへの転送に適しているかどうか各インスタンスが識別できるようにする。
仮想リソースマネージメント
本発明の好ましい実施形態では、コンピュータシステムのＣＰＵリソースは、各インスタンスに対して特定のハイアラーキーに構成される。即ち、システムのＣＰＵは、各インスタンスにより識別され、そして各インスタンスは、ＣＰＵをそれ自身の使用又はそれらの潜在的な使用に基づいて分類する。これは、以下に詳細に説明する。
【０１５０】
好ましい実施形態においては、各インスタンスは、システムにおけるＣＰＵの記録を維持し、それらを、３つのセット、即ち「潜在的」セット、「構成」セット及び「アクティブ」セットの１つに各々分類する。所与のインスタンスの見地から、潜在的セットは、任意の時間におそらくそのインスタンスにおいて実行できる全てのＣＰＵをカバーする。これは、通常、インスタンス及び／又はそれが実行される区画と適合しないようにする構成又は改定レベルのものを除いてシステムの全てのＣＰＵを含む。各インスタンスは、それに適合するシステム内のＣＰＵを決定し、そしてそれらを潜在的セットに含ませる。
構成セットは、所与のインスタンスに対しそのインスタンスの制御下にある全てのＣＰＵを含む。即ち、構成セットは、インスタンスにより制御（又は管理）されるＣＰＵであって、ＳＭＰオペレーションに現在関与しているか又は将来関与し得る全てのＣＰＵを含む。ＣＰＵの制御がインスタンスによって得られると（そのインスタンスが実行される区画に対するＨＷＲＰＢのＣＰＵごとのビットにおいてそのＣＰＵの「ｃｕｒｒｅｎｔ ｏｗｎｅｒ」ビットをセットすることにより指示される）、新たなインスタンスとのオペレーションに対してそれ自身を初期化する周期が存在する。この周期中に、ＣＰＵはＳＭＰオペレーションに関与しないが、尚もそのインスタンスの構成セットの一部分である。初期化が完了すると、ＣＰＵは、ＳＭＰオペレーションに加わるよう要求する。それが加わると、新たなＣＰＵは、アクティブなセットの一部分ともみなされる。アクティブなセットは、インスタンスのＳＭＰオペレーションに関与する全てのＣＰＵを含む。アクティブモードのＣＰＵは、そのインスタンスのスケジューリングモデルの一部分として命令待ち行列から命令を引き出すことができる。
【０１５１】
図１６は、多数の区画１６００、１６０２及び１６０４を概略的に示すと共に各区画のインスタンスがＣＰＵをいかにセットへと編成するか示している。この例は、８個の異なるＣＰＵのみを使用するが、いかなる数のＣＰＵでシステムを形成してもよいことが当業者に明らかであろう。図１６の例では、各インスタンスは、ＣＰＵ０−７の各々を潜在的セットとして識別している。従って、これらはシステム内の全てのＣＰＵを表すか、又はシステム内の他のＣＰＵがどのインスタンスとも適合しないかのいずれかである。もちろん、２つのインスタンスが異なる適合性要件を有すると仮定すれば、ＣＰＵが１つのインスタンスの潜在的セットにあるが、別のインスタンスの潜在的セットにはないような他の例も存在する。
【０１５２】
区画１６００、１６０２、１６０４におけるインスタンスの構成セットは、各インスタンスごとに異なる。所与の時間にＣＰＵリソースの制御権をもつことができるのは１つのインスタンスだけであるから、常にこのようにならねばならない。図示されたように、ＣＰＵ０、ＣＰＵ２、ＣＰＵ３及びＣＰＵ７は、区画１６００において実行されるインスタンスの構成セットにある。ＣＰＵ１及びＣＰＵ５は、区画１６０２において実行されるインスタンスの構成セットにある。更に、ＣＰＵ４及びＣＰＵ６は、区画１６０４において実行されるインスタンスの構成セットにある。従って、これらのＣＰＵは、これらの異なるインスタンスにより各々制御される。
区画１６００、１６０２、１６０４で各々実行される３つのインスタンスのアクティブセットにおけるＣＰＵは、区画１６００のインスタンスの唯一の構成セットであるＣＰＵ２を除いて、これらインスタンスの構成セットにおけるものと同じである。この場合に、ＣＰＵ２は、区画１６００のインスタンスの制御へと最近移動されており、そしてＳＭＰオペレーションに加わる前に初期化段階を通ろうとしていると仮定する。実際の処理アクティビティにおいてシステムの他のＣＰＵに加わると、区画１６００のインスタンスに対するアクティブなセットの一部分となる。
【０１５３】
好ましい実施形態では、各インスタンスは、ビットのグループ即ち「ビットベクトル」を経てＣＰＵにおける所有権の状態を追跡する。各インスタンスのビットベクトルは、そのインスタンスの潜在的セット、構成セット及びアクティブなセットの各々におけるＣＰＵの関与を追跡するのに使用される。その例が、区画１６００において実行されるインスタンスの潜在的セット、構成セット及びアクティブなセットの各々に対するビットベクトルを概略的に示した図１７に示されている。
図１７に示すように、当該ビットグループの各々に対し、ビットのアサーションレベルは、インスタンスによって確認される３つの指示されたセットの１つにおいてそのビットにより表されるＣＰＵの相対的なメンバーシップを指示する。所与のビットベクトルにおける各ビットは、そのセットに対するＣＰＵの１つの状態を表す。図１７のビットベクトルの各々は、異なるセットに対応し、そして所与の１つのビットにより表される特定のＣＰＵは、この図において、ビットの表示の上の「ＣＰＵ＃」ラベルで指示される。従って、図１７に示されたインスタンスの場合に、ＣＰＵの各々は、インスタンスの潜在的セットのメンバーである。これは、区画１６００（図１６）におけるインスタンスの「潜在的セット」の見出しの下に示されたＣＰＵのリストに対応する。同様に、ＣＰＵ０、２、３及び７は、インスタンスの構成セットのメンバーであるから、図１７のこれらのＣＰＵに対応するビットは各々「１」にセットされ、一方、他のビットは「０」にセットされる。最終的に、アクティブなセットは、ＣＰＵ０、３及び７に各々対応するビットを有し、これらは「１」にセットされ、他のビットは「０」にセットされる。これは、ＣＰＵ０、２、３及び７が区画１６００のインスタンスの構成セットにあり、一方、ＣＰＵ０、３及び７のみがそのアクティブなセットにあることを指示する。
【０１５４】
図１７に示すビットベクトルは、８個のＣＰＵを表すように制限される。しかしながら、これは、説明を簡略化するために過ぎない。当業者であれば、コンピュータシステムは、おそらく、更に多くのＣＰＵを有し、そして現在、好ましい実施形態では、６４個までのＣＰＵを許すように各ビットグループに６４個の異なるビットが使用されるが、もっと多くを追加できることが明らかであろう。更に、システムのインスタンスに対するＣＰＵの動作状態を追跡するための別の方法も存在し、これらの別の方法も、本発明の範囲内とみなされることが当業者に明らかであろう。
上記したＣＰＵの分類は、システムのインスタンスに対するＣＰＵセットのハイアラーキー的分割を与える。この点において、異なるオペレーションレベルが各インスタンスにより独立して確認され、そして将来、付加的なレベルを追加することができる。所与のインスタンスの構成セットのメンバーであるＣＰＵは、そのインスタンスが実行される区画が構成ツリーにおいてｃｕｒｒｅｎｔ ｏｗｎｅｒとして指示されるところのＣＰＵに対応する。アクティブなセットのメンバーであるものは、当該インスタンスにより現在所有されているとして指示されるだけでなく、ＳＭＰに加わるようにも使用できる。従って、本発明は、どの処理リソースがその使用のために現在得られるかを各インスタンスに指示するだけでなく、インスタンスへ転送できる他のどんなプロセッサがシステム全体にあるかも指示することにより、各インスタンスの情報ベースを拡張する。これは、例えば、インスタンスが、プロセッサを制御すると分かっている他のインスタンスからプロセッサを選択的に要求できるようにする。
【０１５５】
本発明の別の実施形態では、各インスタンスは、システムのＣＰＵリソースを分類するために付加的なセットを使用する。この付加的なセットは、「オートスタート」セットと称されるもので、インスタンスが構成セットに入った後に処理アクティビティを直ちにスタートできるようにするプロセッサを識別する。通常は、ＣＰＵが新たな区画に移動されるときに、それが新たなインスタンスによって停止され、次いで、処理アクティビティを再開するまでにインスタンスからの特定のスタート命令を待機しなければならない。しかしながら、オートスタートセットのプロセッサは、新たなインスタンスによって停止されず、初期化の際にＳＭＰ処理に加わるように直ちに要求する。
図１８は、異なるＣＰＵが所与のインスタンスのビットベクトルにより異なるセットでいかに識別されるかを示すという点で図１７に類似している。又、図１８は、オートスタートセットにあるプロセッサを識別するのに使用されるビットベクトルを概略的に示す。図示されたように、オートスタートセットは、他のいずれのセットのサブセットでなく、それ故、構成セット又はアクティブなセットのいずれとも異なる設定を有する。例えば、ＣＰＵ０はアクティブなセットであり、従って、ＳＭＰ処理に現在関与しているが、これはオートスタートセットのメンバーではなく、従って、インスタンスに最初に加わるときに停止され、そしてＳＭＰ処理に加わることができる前に特定のスタート命令を必要とする。一方、ＣＰＵ５は、現在、構成セットでもアクティブなセットでもなく、オートスタートセット内にあると識別される。従って、ＣＰＵ５がシステムの別のインスタンスによって現在制御される間に、図１８のセットが示されたところのインスタンスの制御へと移動されるべき場合には、インスタンスによって停止されずに、必要な初期化を受け、次いで、進行中の処理アクティビティに加わるように試みる。
【０１５６】
別の実施形態においては、各インスタンスごとにそのインスタンスのローカルであるところの上記セットにより与えられる情報は、システムの全てのインスタンスに全体的に使用することもできる。全てのインスタンスに対する全てのセット情報を共用メモリの中央アレーに配置することにより、全てのインスタンスには、どのプロセッサがどのインスタンスに適合するかに関わりなく情報へのアクセスが与えられる。この情報が与えられると、所与のインスタンスからの特定の要求に応答しなかったプロセッサのプッシュ移動を、そのプロセッサが適合すると分かっているインスタンスへ向けることができる。従って、プロセッサが適合しないインスタンスへ移動される状態が回避される。更に、もし必要であれば、付加的なリソースを要求するインスタンスは、目標とする要求ではなくて、一般的なブロードキャスト要求としてそれを行うことができ、そして要求側インスタンスに適合すると分かっているリソースのみを移動するためにその要求に応じる別のインスタンスに依存することができる。この実施形態の変形は、各インスタンスの潜在的セットに関する情報のみを全体的なアレーとして与える。従って、各インスタンスは、それ自身のリソースの状態を決定するためにそれ自身のローカルセット情報を有し、そしてシステム内の全てのインスタンスに関する適合性情報に対して全体的アレーをアクセスする。
【０１５７】
Ｅ．マルチプロセッサシステムにおけるメモリの動的な共用（図１−８ｂ）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが互いに電気的に接続された単一のマルチプロセッサコンピュータにおいて協働して実行される。多数の物理的プロセッサ及びリソースをもつ単一の物理的マシンは、ソフトウェアにより多数の区画へ適応式に分割され、各区画は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース及び共用と示されたリソースにアクセスする。１つの実施形態によれば、リソースの区画化は、構成内にリソースを指定することにより実行される。
より詳細には、ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートを一緒に指定することによりそれらを論理的に且つ適応式に区画化する。オペレーティングシステムのインスタンスは、次いで、区画にロードされる。異なる時間に、異なるオペレーティングシステムインスタンスが所与の区画にロードされる。システムマネージャーが指令するこの区画化は、ソフトウェア機能であり、ハードウェアの境界は必要とされない。各個々のインスタンスは、独立して実行するために必要なリソースを有する。ＣＰＵ及びメモリのようなリソースは、異なる区画に動的に指定することができ、そして構成を変更することによりマシン内で実行されるオペレーティングシステムのインスタンスによって使用することができる。又、区画それ自身は、構成ツリーを変更することによりシステムを再ブートせずに変更することができる。それにより得られる適応式に区画化されたマルチプロセッサ（ＡＰＭＰ）システムは、拡張性及び高い性能の両方を示す。
【０１５８】
オペレーティングシステムの単一コピー又はインスタンスに対する実行環境を「区画」と称する。コミュニティは、リソースを共用できる区画のグループである。メモリは、特定の区画に対してプライベートであってもよいし、コミュニティ内の区画によって共用されてもよい。ＡＰＭＰコンピュータシステムが形成されるときには、形成インスタンスが構成ツリーを読み取り、そしてコミュニティにより所有されるメモリを含む共用リソースのためのマネージメント構造体を構築する。単一のシステムは、構成ツリー内に自分の表示を各々有する１つ以上のコミュニティをもつことができる。
構成ソフトウェアは、ＡＰＭＰコンピュータシステムに対する同期ポイントとなるように共用メモリページのグループを選択する。これらのページは、他のインスタンスがＡＰＭＰコンピュータシステムのアクティブなメンバーであるかどうかを決定するのに使用される情報を含む。これら同期ページの位置の指示が構成ツリー内に記憶される。あるインスタンスがＡＰＭＰコンピュータシステムに加わるときには、それが構成ツリー内の情報を使用して、共用ページへのマップを行う。共用ページの内容から、インスタンスは、それがアクティブなＡＰＭＰコンピュータシステムに加わるか又はＡＰＭＰコンピュータシステムを形成するかを決定することができる。インスタンスがＡＰＭＰコンピュータシステムを形成する場合には、構成ツリーを変更することによりＡＰＭＰコンピュータシステムを同期するのに使用されるページを構成することができる。このように、同期ポイントとして既に使用された物理的メモリは、システムから除去することができる。
【０１５９】
共用メモリは、メモリのハードウェア特性に基づいて、共通特性区画と称するグループに編成することができる。共用メモリは、１つ以上のオペレーティングシステムインスタンスにより同時にマップすることのできる領域へ指定される。又、共用メモリは、１つ以上のオペレーティングシステムインスタンスにおいて実行されるアプリケーションによってマップすることもできる。共用メモリは、インスタンスのプライベートメモリとして使用するためにオペレーティングシステムインスタンスによって「借りる」こともできる。更に、プライベートメモリの場合には、ＣＰＵがメモリに最も速くアクセスするインスタンスによりプライベートメモリを所有できるようにすることにより、非均一なメモリアクセスが受け入れられる。
【０１６０】
Ｆ．共用メモリをもつマルチプロセッサシステムのメモリの再構成（図１９−２１）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが互いに電気的に接続された単一のマルチプロセッサコンピュータにおいて協働して実行される。多数の物理的プロセッサ及びリソースをもつ単一の物理的マシンは、ソフトウェアにより多数の区画へ適応式に分割され、各区画は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース及び共用と示されたリソースにアクセスする。１つの実施形態によれば、リソースの区画化は、構成内にリソースを指定することにより実行される。
【０１６１】
より詳細には、ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートを一緒に指定することによりそれらを論理的に且つ適応式に区画化する。オペレーティングシステムのインスタンスは、次いで、区画にロードされる。異なる時間に、異なるオペレーティングシステムインスタンスが所与の区画にロードされる。システムマネージャーが指令するこの区画化は、ソフトウェア機能であり、ハードウェアの境界は必要とされない。各個々のインスタンスは、独立して実行するために必要なリソースを有する。ＣＰＵ及びメモリのようなリソースは、異なる区画に動的に指定することができ、そして構成を変更することによりマシン内で実行されるオペレーティングシステムのインスタンスによって使用することができる。又、区画それ自身は、構成ツリーを変更することによりシステムを再ブートせずに変更することができる。それにより得られる適応式に区画化されたマルチプロセッサ（ＡＰＭＰ）システムは、拡張性、融通性及び高い性能を示す。
【０１６２】
メモリは、ソフトウェア制御のもとで区画又はコミュニティへ或いはそこから再構成することができ、そしてハードウェアホットインスワッピング又はアウトスワッピングがサポートされる。一般に、メモリは、プライベート、共用又は非所有の３つの状態の１つにある。メモリは、それが単一のシステム区画によって「所有」される場合にプライベートである。メモリは、それがコミュニティにより所有される場合に共用である。コミュニティは、リソースを共用する１つ以上の区画の集合である。さもなくば、非所有である。メモリは、３つのいずれかの状態の間で直接再構成することができる。例えば、メモリは、ある区画のプライベートから別の区画のプライベートへ、又はコミュニティにおける共用からある区画のプライベートへと再構成することができる。メモリは、これをアウトスワップ又はインスワップできる前に、オペレーティングシステムインスタンス及びコンソールソフトウェアによって非所有状態に入れられ、これはシステム構成ツリーに反映される。ページフレーム番号データベースは、インスワップすることのできる全ての考えられるメモリを含むサイズにされ、そして追加されるメモリページは、ページフレーム番号データベースエントリーページとして使用することができる。従って、新たなメモリを容易に受け入れることができる。上記のように、メモリをアウトスワップするためには、メモリが非所有状態になければならない。アウトスワップされるべきメモリが共用状態又はプライベート状態にある場合には、アウトスワッピングを許すためにそれが非所有状態に入れられる。
【０１６３】
メモリの再構成
ページフレーム番号（ＰＦＮ）データベース設計は、ソフトウェア制御のもとでメモリをオペレーティングシステムインスタンスへ又はそこから再構成することができる。プライベートメモリは、共用されるように再構成することができ、共用メモリは、プライベートとなるように再構成することができ、そして１つの区画に対してプライベートなメモリは、別の区画に対してプライベートとなるように再構成することができる。又、プライベートであるか又は共用であるメモリは、非所有となるように再構成することができる。メモリ再構成は、ハードウェアホットインスワッピング又はホットアウトスワッピングをサポートすることができる。メモリが構成ツリーにおいて「非所有」状態にあるときには、それをインスタンスのプライベートメモリへと再構成することもできるし、又はコミュニティにおける共用メモリの一部分として再構成することもできる。新たなメモリがシステムへとインスワップされるときには、メモリは最初に非所有状態に入れられる。更に、メモリは、それがシステムからアウトスワップできるまでに、非所有状態になければならない。それ故、メモリのホットスワッピングをサポートするためには、オペレーティングシステムインスタンス及びコンソールソフトウェアは、メモリを非所有状態へ及び非所有状態から再構成しなければならない。メモリを再構成するときには、ページの範囲は、説明上、８メガバイト（ＭＢ）整列される（システムページサイズ平方分割８バイト）。ページの範囲は、８ＭＢの倍数のサイズであり、システムから再構成されるべき範囲内のページが使用される場合には、他の制約が、以下に述べるように適用される。
【０１６４】
新たなメモリは、いつでもシステムに追加することができる。というのは、ＰＦＮデータベースは、インスワップすることのできる全ての考えられるメモリを含むサイズにされ、そして新たなページは、ＰＦＮデータベースエントリページを形成するように常に使用できるからである。システムからメモリを除去するために、ページの範囲がプライベートであるか、共用であるか又は非所有であるかが最初に決定される。メモリが既に非所有とマークされている場合には、それが除去されると考えられる。
プライベートメモリを除去するためには、空きページリストに類似したページフレーム番号の除去ページリストが、メモリの除去をサポートするために確立される。いずれかのときに、ページをオンラインで除去できないと決定された場合には、システムを遮断し、ページをコンソールソフトウェアで非所有として構成し、そしてオペレーティングシステムインスタンスを再スタートさせることができる。コンソールが範囲内の全ての又は幾つかのページを使用する場合には、コンソールは、それ自身を異なる組のページへと再配置する。この再配置は、種々の方法で行うことができる。例えば、コンソールは、そのページを、区画が所有する別の種類のページにコピーし、次いで、他の組のページにおいて実行を開始することができる。或いは又、別の区画内の別のコンソールが区画を分解し、ページの範囲を「非所有」に再指定し、次いで、メモリを伴わずに区画を再形成することができる。更に、全システムを遮断し、メモリを除去し、そしてシステムを再スタートさせることができる。除去動作は、除去ページリストから、空き、ゼロ化又は不良ページリストへとページを移動することにより、いつでも断念することができる。
【０１６５】
除去されるべきページの範囲がプライベートメモリである場合には、全てのページを除去できるか又は除去動作が断念されるまで、次の段階が繰り返される。このプロセスが図１９のフローチャートに示されている。図１９のフローチャートに示されたプロセスに入る前に、メモリの除去を許すに充分なメモリがあるかどうか決定される。容易に使用できる予備メモリの量を指示するために、通常、システムパラメータ、即ち流動的ページカウントが使用される。この流動的ページカウントが小さ過ぎ、即ち除去を受け入れるには不充分な流動的ページしかシステムにない場合には、ユーザへエラーが返送され、さもなくば、除去されるべき範囲の各ページが、図１９に示すステップで述べるように検査される。
プロセスは、ステップ１９００で始まり、そしてそこからステップ１９０２へ進み、除去されるべきページ範囲内の第１の非除去ページが位置決めされる。ステップ１９０２から、プロセスはステップ１９０４へ進み、そこで、除去されるべきページ（１つ又は複数）が保留中の入力／出力オペレーションを有しそしてこれらページがスキップされるかどうか決定され、それらのＩ／Ｏオペレーションが完了すると、ページを除去に対して再考慮することができる。ページが保留中のＩ／Ｏを有する場合には、動作がステップ１９０２へ復帰し、そこで、第１の非除去ページが位置決めされ、そしてそこから上記のようにステップ１９０４へ進む。システムが他の作業を実行できるようにするために、システムは、この点でストールし、Ｉ／Ｏが完了するのを待機する。
【０１６６】
現在の非除去ページが保留中のＩ／Ｏを有していない場合には、プロセスは、ステップ１９０４からステップ１９０６へ進み、そこで、ページが空きページリストにあるか、ゼロ化ページリストにあるか、非テストページリストにあるか、又は不良ページリストにあるかを決定する。メモリページのいずれかがこれらリストのいずれかにある場合には、ステップ１９０８においてリストからページが除去されそして除去ページリストに入れられる。空きページは、再構成される範囲の一部分でもある空きページへコピーページがコピーされないように、最初に処理される。ステップ１９０８から、プロセスはステップ１９２６へ進み、そこで、全てのページが除去ページリストに入れられたかどうか決定され、そしてもしそうであれば、プロセスはステップ１９２８で終了となる。一方、全てのページが除去ページリストに入れられない場合には、プロセスはステップ１９０２へ戻り、そしてそこから上記のように進む。もし所望ならば、永久的なループ動作を回避するために、繰り返しの数を制限しそしてエラー回復メカニズムを実行するように選択することもできる。
【０１６７】
空き、ゼロ化、非テスト又は不良ページリストにページがない場合には、プロセスはステップ１９０６からステップ１９１０へ進み、そこで、変更ページリストにページがあるかどうか決定される。変更ページリストにページがない場合には、プロセスはステップ１９１４へ進む。一方、変更ページリストにページがある場合には、プロセスはステップ１９１２へ進み、そこで、ページがシステムページファイルのような補助記憶部に書き込まれる。ステップ１９１２から、プロセスはステップ１９２６へ進み、そしてそこから上記のように進む。一方、プロセスがステップ１９１０からステップ１９１４へ進んだ場合には、ステップ１９１４において、いずれかのページがプロセスページであるかどうか、即ちアプリケーションが実行されるページであるかどうか決定される。各プロセスは、多数のスレッドを有するので、各プロセスは、他のプロセスから離れたそれ自身のページテーブルを有する。いずれかのページがプロセスページである場合には、プロセスページテーブルへのアクセスを得るためにプロセスのコンテクスト内で実行するメカニズムを与えるＡＳＴがプロセスに送られ、このＡＳＴは、ページテーブルへのアクセスを同期させるために必要に応じてプロセスを単一スレッドにセットする。ページには新たなページフレーム番号が割り当てられ、そしてページの内容が新たなページフレーム番号にコピーされる。古いページフレーム番号は、ステップ１９１６においてインスタンスの除去ページリストに入れられる。ステップ１９１６から、プロセスはステップ１９２６へ進み、そしてそこから、上記のように進む。
【０１６８】
ステップ１９１４において、どのページもプロセスページでないことが決定された場合には、プロセスはステップ１９１８へ進み、そこで、いずれかのページが全体的区分の一部分であるかどうか、即ち多数のプロセスにより同時にアクセスされた１組のプライベートページであるかどうかが決定される。いずれかのページが全体的区分の一部分である場合には、プロセスはステップ１９１８からステップ１９２０へ進む。ステップ１９２０において、全体的区分の名前がユーザに表示され、したがって、ユーザは、メモリを解放するためにどのアプリケーションを遮断すべきか決定することができる。或いは又、ページがどこにマップされるかを追跡することのできるオペレーティングシステムは、その区分にマップされた全てのプロセスを保留し、全てのページをコピーし、全てのプロセスページテーブルエントリーを変更し、そして古いページフレーム番号を除去ページリストに入れることができる。ステップ１９２０から、プロセスは、ステップ１９２６へ進み、そしてそこから上記のように進むことができる。ステップ１９１８において、全体的区分の一部分であるページがないことが決定された場合には、プロセスはステップ１９２２へ進み、そこで、いずれかのページがシステムアドレススペースにマップされるかどうか決定される。どのページもシステムアドレススペースにマップされない場合には、プロセスはステップ１９２２からステップ１９２６へ進み、そしてそこから上記のように進む。
【０１６９】
一方、システムアドレススペースへマップされるページがある場合には、プロセスはステップ１９２４へ進み、そこで読み取り専用のページがコピーされる。コピーされると、ページは除去ページリストに入れられる。読み取り／書き込みページは、インスタンス内の全てのＣＰＵが実行を一時的に阻止され、それらがページの内容を変更しない間だけ、コピーされる。一度に１ページがコピーされそしてコピーされたページが除去ページリストに入れられる。ステップ１９２４における移動の後に、プロセスはステップ１９２６へ進み、そしてそこから上記のように進む。
共用メモリを除去するために、ページフレーム番号の新たなリストが、各共用メモリ共通特性区画データ構造体内に確立され、即ちＡＰＭＰデータベース内の各ＳＨＭ  ＣＰＰ構造体内に確立される。このリストは、共通特性区画除去ページリストと称する。これらのリストは、除去される準備のできた全てのページの場所を一時的に保持する。８ＭＢ範囲内の全てのページが適当な除去ページリストに配置されたときだけ、ページを除去することができる。任意の時点に、共用セット（メモリのようなリソースを共用するインスタンスのセット）が動作する間にページが除去できないと決定された場合には、共用セットを分解し、ページを非所有とマークし、そして共用セットを再形成することができる。ページを、共通特性区画除去ページリストから、ページの手前の状態に基づいて空きページ又は不良ページリストへ移動し、即ちそれが空きページリストにあった場合には空きページリストへそして不良ページリストにあった場合には不良ページリストへ移動することにより、除去動作をいつでも断念することができる。
【０１７０】
共用メモリを除去するプロセスが図２０のフローチャートに示されており、このプロセスはステップ２０００で始まり、そしてそこからステップ２００２へ進み、除去されるべきページ範囲の第１の非除去ページが位置決めされる。ステップ２００２から、プロセスはステップ２００４へ進み、そこで、除去されるべきページ範囲内のいずれかのページが保留中のＩ／Ｏを有するかどうかが決定される。保留中のＩ／Ｏを有するページはスキップされ、そしてプロセスはステップ２００２へ復帰し、上記のように第１の非除去ページが位置決めされる。システムが他の作業を行えるようにするために、システムはこの時点でストールし、Ｉ／Ｏの完了を待機する。
保留中のＩ／Ｏを有するページがない場合には、プロセスはステップ２００４からステップ２００６へ進み、そこで、いずれかのページがＡＰＭＰデータベースの一部分であるかどうかの決定がなされる。いずれかのページがＡＰＭＰデータベースの一部分である場合には、ステップ２００８においてエラーがユーザへ返送される。このような場合には、異なるページにおいてＡＰＭＰデータベースで共用セットを再形成しなければならない。これは、共用セットを分解し、古いＡＰＭＰデータベースページを非所有とマークし、新たな組のＡＰＭＰデータベースページを選択し、次いで、共用セットを再形成することにより達成することができる。このプロセスは、ステップ２００８から進み、ステップ２０３０において終了となる。
これらのページを記述するページフレーム番号データベースエントリページはマップ解除されそして共通特性区画空きページリストへ解放され、共用メモリを記述するＰＭＡＰアレーは変化を反映するように更新され、そしてコンソールが呼び出されてページが非所有とマークされる。ステップ２０２８からプロセスはステップ２０３０へ進んで終了となる。ステップ２０２６において、共用メモリ共通特性区画除去ページリストに全てのページが存在しないとプロセスが決定すると、プロセスはステップ２０２６からステップ２００２へ戻り、そしてそこから上記のように進む。ステップ２００６において、どのページもＡＰＭＰデータベースの一部分でないとプロセスが決定すると、プロセスはステップ２０１０へ進み、そこで、いずれかのページが空き、不良又は非テストページリストにあるかどうか決定され、もしそうである場合には、ページが除去されそしてステップ２０１２において共通特性区画除去ページリストに入れられる。ステップ２０１２からプロセスはステップ２０２６へ進み、そしてそこから上記のように進む。
【０１７１】
ステップ２０１０において、どのページも空き、不良又は非テストページリストにないことが決定されると、プロセスはステップ２０１４へ進み、そこで、いずれかのページが共用メモリページフレーム番号データベースページであるかどうか決定され、そしてもしそうであれば、プロセスはステップ２０１６へ進む。ステップ２０１６において、ページの範囲が、共通特性区画除去ページリストにない共用メモリ共通特性区画内に残された唯一のページを含むと仮定すれば、共用メモリ共通特性区画がそのコミュニティから除去される。ステップ２０１６において、共用メモリ共通特性区画は無効とマークされ、従って、そこからページを割り当てる試みはなされない。共用メモリを記述するＰＭＡＰアレーは、メモリの除去を反映するように更新される。他の共用メモリＡＰＭＰデータベース構造体は、共用メモリ共通特性区画の除去を反映するように更新され、そしてコンソールが呼び出されて、ページが非所有とマークされる。或いは又、ＰＦＮデータベースページが、除去ページリストにない共用メモリ共通特性区画内に残された唯一のページでない場合には、ユーザにエラーが返送され、この場合には、ユーザは、共用セットを分解し、ページを非所有とマークし、そして共用セットを再形成することができる。これらのページをコピーするために、そのページを含む共用メモリ共通特性区画は、一時的に無効とマークされ、そしてＰＦＮデータベースページのマッピングは、読み取り専用とマークされる。次いで、あるインスタンスが共通特性区画から割り当てられた新たな組のページへそれらのページをコピーすることができる。次いで、全てのインスタンスは、それらのマッピングを古いページから新たなページへと変更し、そして古いページを共通特性区画除去ページリストに入れることができる。次いで、プロセスは、ステップ２０１６からステップ２０２６へ進み、そしてそこから上記のように進む。
【０１７２】
ステップ２０１４において、あるページが共用メモリページフレーム番号データベースページでないと決定された場合には、プロセスはステップ２０１８へ進み、そこで、いずれかのページが、システムスペースへマップされた共用メモリ領域の一部分であるかどうか決定され、もしそうであれば、プロセスはステップ２０２０へ進み、そこで、共用メモリ領域コールバックルーチンが呼び出され、除去されるべく使用されるメモリを含む。コールバックルーチンは、アプリケーションを遮断するか、又は新たな共用メモリ領域を形成して新たな領域を使用し始める。それとは別に、又はコールバックルーチンに関連して、コンソールを通して共用メモリ領域のタグを表示することができる。これは、共用メモリを使用しているアプリケーションを遮断するようにユーザが助成できるようにする。ステップ２０２０から、プロセスはステップ２０２６へ進み、そしてそこから上記のように進む。
【０１７３】
ステップ２０１８において、どのページも、システムスペースにマップされた共用メモリ領域の一部分でないことが決定されると、プロセスはステップ２０２２へ進み、そこで、いずれかのページが共用メモリの全体的区分の一部分であるかどうか、即ち１つ以上のプロセスのアドレススペースへの１組の共用ページマッピングであるかどうか、従って、全てのプロセスが同じページにアクセスできるかどうか決定される。共用メモリの全体的区分の一部分である幾つかのページが存在する場合には、プロセスはステップ２０２４へ進み、そこで、この全体的区分をマップした全てのインスタンスにおいてコールバックルーチンが呼び出される。全体的区分へマップされた全てのプロセスは保留することができ、このとき、コードは、１組のページから別の組へ全てのデータをコピーし、全てのプロセスページテーブルエントリを変更し、全体的区分のデータ構造体を変更し、そして古いページフレーム番号を共通特性区画除去ページリストに入れることができる。或いは又、全体的区分へマップする各プロセスは、遮断することが通知されるか、又は全体的区分の名前を表示して、除去オペレーションを助成するためにどのアプリケーションを遮断すべきかユーザが決定できるようにする。ステップ２０２４から、プロセスはステップ２０２６へ進み、そしてそこから上記のように進む。
【０１７４】
Ｉ／Ｏが共用メモリへと開始された場合に、共用メモリの全てのＩ／Ｏが完了するのを確かめるまでメモリが別の目的で再使用されないよう確保するために、Ｉ／Ｏデバイスは、Ｉ／Ｏが完了したときにインスタンスに割り込み、次いで、システムは、Ｉ／Ｏが完了したことを記録する。或いは又、インスタンスの区画内の全てのＩ／Ｏバスがリセットされたときに、Ｉ／Ｏが完了する。プライベートメモリにおけるＳＨＭ ＤＥＳＣ構造体では、Ｉ／Ｏ基準カウントを意味するＩ／Ｏｒｅｆｃｎｔと称するフィールドがある。共用メモリ領域当たりに１つのＳＨＭ ＤＥＳＣ構造体がある。
ＡＰＭＰデータベースにおけるＳＨＭ ＲＥＧ構造体では、「取り付けられたビットマスク」と称するビットマスクがある。共用メモリ領域当たり１つのＳＨＭ ＲＥＧ構造体がある。取り付けられたビットマスクは、ＡＰＭＰシステムの各インスタンス当たり１つのビットを含む。取り付けられたビットマスクのビットがセットされた場合には、対応するインスタンスが領域に取り付けられる。
【０１７５】
コンソールにより維持される構成ツリー構造体においては、コンソールコールバックルーチンを呼び出すことによりセット又はクリアすることのできる区画ノードにＩＤフィールドが存在する。区画のＩ／Ｏバスがリセットされた後のシステムブート中に、インスタンスの区画ノードにおけるこのフィールドがクリアされる。
共用セットがクリアされるときには、
１）このコミュニティ内の他の全てのインスタンスの区画ノードを通るループを形成する。
２）ＩＤフィールドが非ゼロであり、そして構成ツリー内に指示された区画において実行されるインスタンスがない場合には、その区画に接続された全てのＩ／Ｏバスをリセットする。
【０１７６】
３）このインスタンスの区画ノードにおけるＩＤフィールドをＩＤ（ＡＰＭＰデータベースが再形成されるたびに増加する数）にセットする。
インスタンスが共用セットに加わるときには、
１）インスタンスの区画ノードにおけるＩＤフィールドを現在ＩＤにセットする。
共用セットの退出中に、
１）全ての共用メモリ領域から取り外されるルーチンをコールする。
２）構成ツリーのインスタンス区画ノードにおけるＩＤフィールドをクリアする。
Ｉ／Ｏが開始されるときには、Ｉ／Ｏが実行される各ページに対してルーチンｓｈｉｍ ｒｅｇ ｉｎｃｒｅｆがコールされる。Ｉ／Ｏが完了したときに、各ページごとにルーチンｓｈｉｍ ｒｅｇ ｄｅｃｒｅｆがコールされる。
【０１７７】
0004634548.tif 000010
【０１７８】
0004634548.tif 000011
タグが、供給されたタグに合致するような共用メモリのＳＨＭ ＲＥＧ構造体をサーチする。
このようなＳＨＭ ＲＥＧ構造体が見つからない場合には、
−新たなＳＨＭ ＲＥＧ構造体を割り当てる。
【０１７９】
−ＳＨＭ ＲＥＧロックを得る。
−ＳＨＭ ＲＥＧ構造体の「init in progress」ビットをセットする。
−領域に対する共用メモリページを割り当てる。
−ＳＨＭ ＲＥＧ構造体の「init in progress」ビットをクリアする。
−ＳＨＭ ＲＥＧロックを解除する。
このインスタンスに対するＳＨＭ ＲＥＧ取付されたビットマスクのビットをセットする。
供給される仮想マッピング情報を用いて共用メモリ領域へマップする。
ルーチンｓｈｍ ｒｅｇ ｄｅｌａｔｅ：
入力：共用メモリ領域ｉｄ
この領域のプライベートメモリにおいてＳＨＭ ＤＥＳＣアドレスを得る。
【０１８０】
Ｉ／Ｏｒｅｆｃｎｔフィールドが非ゼロの場合には、エラーを返送する。
共用メモリ領域をマップ解除する。
この領域の共用メモリにおいてＳＨＭ ＲＥＧアドレスを得る。
このインスタンスのＳＨＭ ＲＥＧ取付されたビットマップにおいてビットをクリアする。
取り付けられたビットマスクが、セットされたビットをより多く有する場合には、復帰する。
ＳＨＭ ＲＥＧ取付されたビットマスクがセットされたビットをもたない場合には、
−ＳＨＭ ＲＥＧロックを得る。
【０１８１】
−ＳＨＭ ＲＥＧ構造体の「delete in progress」ビットをセットする。
−全ての共用メモリページを適当な共用メモリ空きページリストへ割り当て解除する。
−「delete in progress」ビットをクリアする。
−ＳＨＭ ＲＥＧロックを解除する。
−ＳＨＭ ＲＥＧデータ構造体をクリーンアップする。
システムクラッシュ中に：
全てのＩ／Ｏバスをリセットする。
インスタンスの区画ノードにおけるＩＤフィールドをクリアする。
別のインスタンスに割り込むシステムコードをコールし、インスタンスがクラッシュしたことを指示する（他のインスタンスの割り込みハンドラーは、ｓｈｍｅｍ ＡＰＭＰＤＢ ｒｅｃｏｖｅｒをコールする）。
【０１８２】
クラッシュダンプを開始する。
ハートビート監視中に：
インスタンスのハートがある時間中にビートしない場合に、インスタンスがデッドが宣言され、共用セットから除去される。
ＳＨＭ ＲＥＧ同期ロックを得、必要に応じてロックをブレークする。ロックがデッドインスタンスにより保持される場合には：
初期化が進行中であること又は領域が削除中であることをＳＨＭ ＲＥＧ構造体が指示する場合に、ｓｈｍ ｒｅｇ ｄｅｌｅｔｅをコールする。
ルーチンｓｈｍｅｍ ＡＰＭＰＤＢ ｒｅｃｏｖｅｒが他のインスタンスの少なくとも１つにおいてコールされる。この場合に、インスタンスの区画ノードのＩＤフィールドがクリアされる。
【０１８３】
0004634548.tif 000012
ＡＰＭＰデータベースにおいて全てのＳＨＭ ＲＥＧ構造体を通るループを形成する。
クラッシュインスタンスが領域に取り付けられた場合に、
１）インスタンスの区画ノードにおけるＩＤフィールドが非ゼロの場合には、これは、インスタンスが停止されたのであって、クラッシュされたのではないことを指示する。Ｉ／Ｏデバイスは、依然、共用メモリに書き込みする。
このインスタンスを取付状態にしそして共用メモリ領域をそのままにして次のＳＨＭ ＲＥＧ構造体へとループ形成する。インスタンスが共用セットに再び加わるときに、Ｉ／Ｏバスをリセットした後に、取り付けられたビットをクリアする。これは、共用メモリ領域が領域に取り付けられた最後のインスタンスである場合にそれを削除する。
【０１８４】
２）インスタンスの区画ノードにおけるＩＤフィールドがクリアの場合：
取り付けられたビットマスクにおいてインスタンスのビットをクリアする。
取り付けられたビットマスクが、セットされたビットをもたない場合：
ｓｈｍ ｒｅｇ ｄｅｌｅｔｅをコールする。
次のＳＨＭ ＲＥＧ構造体へループする。
全てのＳＨＭ ＲＥＧ構造体が処理された後に、更なる共用メモリ回復コードを実行する。
0004634548.tif 000013
【０１８５】
共用メモリにおけるＡＰＭＰデータベースへマップする。
他の共用メモリコミュニティ参加コードを実行する。
ＡＰＭＰデータベースにおける全てのＳＨＭ ＲＥＧ構造体を通るループを形成する。
このインスタンスが領域に取り付けられる場合には：
−取り付けられたビットマスクにおいてこのインスタンスのビットをクリアする。
取り付けられたビットマスクが、セットされたビットをそれ以上もたない場合には：
−ｓｈｍ ｒｅｇ ｄｅｌｅｔｅをコールする。
【０１８６】
次のＳＨＭ ＲＥＧ構造体へループする。
全てのＳＨＭ ＲＥＧ構造体が処理された後に、復帰する。
初期のＡＰＭＰデータベースページを選択するために、ルーチンｓｈｍｅｍ ｃｏｎｆｉｇ ＡＰＭＰＤＢは、ＡＰＭＰＤＢ ｍａｐ ｉｎｉｔｉａｌによってコールされて、ＡＰＭＰＤＢページの初期セットを選択する。
データ構造体：
構成ツリーにおけるコミュニティノードは、ＡＰＭＰＤＢ ＩＮＦＯと称する６４ビットフィールドを含み、これは、ＡＰＭＰＤＢページ情報を記憶するのに使用される。第１の３２ビットＡＰＭＰＤＢ ＩＮＦＯ〔３１：０〕は、ＡＰＭＰＤＢページの低ＰＦＮである。第２の３２ビットＡＰＭＰＤＢ ＩＮＦＯ〔６３：３２〕は、ＡＰＭＰＤＢページのページカウントである。
【０１８７】
各インスタンスは、「共用メモリアレー」と称するアレーをプライベートメモリに保持する。このアレーの各エレメントは、共用メモリＰＦＮ及びページカウントを含む。全アレーは、このインスタンスが一部分であるところのコミュニティが所有する全ての共用メモリを記述する。
構成ツリーは、共用メモリに対するテストされたメモリビットマップを含む。
構成ツリーがある範囲のメモリに対してビットマップを含まない場合には、メモリがテストされそしてそれが良好となる。ある範囲のメモリに対してビットマップが存在する場合には、ビットマップの各ビットは、共用メモリのページが良好であるか不良であるかを指示する。
ＭＡＸ ＡＰＭＰＤＢ ＰＡＧＥＳの値は、システムを初期化するのに必要なページの最大数にセットされる。この数は、共用メモリの粒度より小さくなければならない。ＭＡＸ ＡＰＭＰＤＢ ＰＡＧＥＳは、ＡＰＭＰデータベースの初期化に対して隣接する良好なメモリが見つかる機会を高めるためには、小さい数でなければならない。
【０１８８】
0004634548.tif 000014
このルーチンは、構成ツリーの多数のコピーがコンソールによって維持される場合には更に複雑になる。
【０１８９】
１．コミュニティノードからＡＰＭＰＤＢ ＩＮＦＯを読み取る。
２．ＡＰＭＰＤＢ ＩＮＦＯがｏｌｄ ＡＰＭＰＤＢ ｉｎｆｏに等しくない場合には、エラーを返送する。
３．ｎｅｗ ＡＰＭＰＤＢ ＩＮＦＯを原子的命令でＡＰＭＰＤＢ ＩＮＦＯへ記憶する。
ルーチンＳＨＭＥＭ ｃｏｎｆｉｇ ＡＰＭＰＤＢは、ＡＰＭＰデータベースを構成するのに使用される。ルーチンは、第１のＡＰＭＰデータベースページフレーム番号と、ＡＰＭＰデータベースに対して指定されたページ数とを与える。
このルーチンは、次のように進行する。
（１）構成ツリー内のコミュニティノードを指すポインタを得る。
【０１９０】
（２）構成ツリーを横切って共用メモリアレーを形成する。共用メモリが存在しない場合には、エラーを返送する。
（３）ＡＰＭＰＤＢ ＩＮＦＯフィールドを読み取る。
（４）ＡＰＭＰＤＢ ＩＮＦＯフィールドが非ゼロの場合には、
ＰＡＧＥＳをＡＰＭＰＤＢ ＩＮＦＯにセットする。
共用メモリアレーをサーチして、ページＰＦＮないしＰＦＮ＋ＰＡＧＥＳ−１が共用メモリにあることを確保する。
これらのページが共用メモリアレーにある場合には：
テストされるメモリビットマップが存在すれば、ビットマップをチェックして、これらページが不良とマークされないよう確保する。
【０１９１】
全てのページが良好であれば、ｓｅｔ ＡＰＭＰＤＢ ＩＮＦＯをコールして、ＰＦＮ及びＰＡＧＥＳをＡＰＭＰＤＢ ＩＮＦＯフィールドに書き込む。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯがエラーを返送する場合は、上記（２）に復帰する。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯが成功を返送する場合には、ＰＦＮ及びＰＡＧＥＳを発呼者に返送する。
いずれかのページが共用メモリにないか又は不良である場合には、
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯをコールして、ＡＰＭＰＤＢ ＩＮＦＯフィールドをクリアする。
【０１９２】
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯがエラーを返送する場合は、上記（２）に復帰する。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯが成功を返送する場合には、新たなＡＰＭＰＤＢページを選択するために（５）へ進む。
（５）ＰＡＧＥＳをＭＡＸ ＡＰＭＰＤＢ ＰＡＧＥＳにセットする。
（６）共用メモリアレーを通るループを形成する。アレーの各エレメントに対し、
(6.1)ＰＦＮをその範囲の最小共用メモリＰＦＮにセットする。
(6.2)テストされたメモリビットマップが存在する場合には、ビットマップをチェックして、これらのページが不良とマークされないように確保する。
【０１９３】
(6.3)全てのページが良好な場合には、
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯをコールして、ＰＦＮページをＡＰＭＰＤＢフィールドに書き込む。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯがエラーを返送する場合は、上記（２）に復帰する。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯが成功を返送する場合には、ＰＦＮ及びＰＡＧＥＳを発呼者へ返送する。
(6.4)範囲内で不良ページに遭遇した場合には、
ＰＦＮを最も高い番号の不良ＰＦＮ＋１にセットする。
ＰＦＮ＋ＰＡＧＥＳ−１が依然共用メモリアレーエレメント内にある場合には、 (6.2)へ復帰する。
【０１９４】
ＰＦＮ＋ＰＡＧＥＳ−１がこの共用メモリアレーエレメントにより示された範囲より大きい場合には、次の共用メモリアレーエレメントへ移動する。
(6.5)共用メモリアレーエレメントが残されていない場合には、エラーを返送する。
例示的なページフレーム番号データベースレイアウトが図２１のメモリマップにより示されている。この説明上の例では、システムは、６４メガバイトのプライベートメモリ及び６４メガバイトの共用メモリを各々含む２つのインスタンスＡ及びＢを備えている。メモリは、８キロバイトページとして構成され、インスタンスＡのプライベートメモリは、ページフレーム番号（ＰＦＮ）０からＰＦＮ１ＢＦＦ（１６進）へと延びる。６４メガバイトの共用メモリは、ＰＦＮ２０００からＰＦＮ３ＦＦＦまで延びる。インスタンスＢのプライベートメモリは、ＰＦＮ８０００００からＰＦＮ８０１ＦＦＦまで延びる。インスタンスＡのＰＦＮデータベースを保持するのに使用されるメモリは、インスタンスＡのプライベートメモリから到来し（０−１ＦＦＦ）、インスタンスＢのＰＦＮデータベースを保持するのに使用されるメモリは、インスタンスＢのプライベートメモリから到来し（２０００−３ＦＦＦ）、そして共用メモリのＰＦＮデータベースを保持するのに使用されるメモリは、共用メモリから到来する（８０００００−８０１ＦＦＦ）。インスタンスＡは、インスタンスＢのメモリに対するＰＦＮデータベースエントリにアクセスすることができない。というのは、図示されたように、このメモリ領域がインスタンスＡのシステムスペースへとマップされないからである。同様に、インスタンスＢは、インスタンスＡのメモリに対するＰＦＮデータベースエントリにアクセスすることができない。というのは、このメモリ領域がインスタンスＢのシステムスペースへとマップされないからである。インスタンスＡ及びＢの両方は、共用ページを共用メモリのためのＰＦＮデータベースエントリへとマップする。インスタンスは、プライベートメモリページテーブルで共用ページへマップする。というのは、プライベートメモリ及び共用メモリのＰＦＮデータベースエントリは、同じページテーブルのページによってマップされるからである。上記のように、物理的メモリの粒度は、ＰＦＮデータベースのエントリサイズ及びメモリページサイズの最小公倍数として選択される。ここに示す例では、メモリページサイズは８キロバイトであり、そして物理的メモリの粒度は、ページサイズを平方して８（バイト）で分割したもの即ち８ＭＢに等しい。１６、３２及び６４ＫＢのページサイズは、各々、３２、１２８及び５１２ＭＢの物理的メモリ粒度を形成する。
【０１９５】
Ｇ．マルチプロセッサコンピュータシステムの欠陥回復（図２２−３２）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが電気的に互いに接続された単一のマルチプロセッサコンピュータにおいて協働して実行される。多数の物理的プロセッサ及びリソースをもつ単一の物理的マシンは、ソフトウェアにより適応式に多数の区画に細分化され、その各々は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース及び共用と指示されたリソースにアクセスする。１つの実施形態によれば、リソースの区画化は、ある構成内にリソースを指定することにより実行される。
より詳細には、ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートを一緒に指定することによりそれらを論理的及び適応式に区画化する。次いで、オペレーティングシステムのインスタンスが区画にロードされる。異なる時間に、異なるオペレーティングシステムインスタンスが所与の区画にロードされる。システムマネージャーが指令するこの区画化は、ソフトウェア機能であり、ハードウェアの境界は必要とされない。各個々のインスタンスは、それが独立して実行するのに必要なリソースを有する。ＣＰＵ及びメモリのようなリソースは、異なる区画に動的に指定することができ、そして構成を変更することによりマシン内で実行されるオペレーティングシステムのインスタンスによって使用することができる。区画それ自身も、構成ツリーを変更することによりシステムを再ブートすることなく変更することができる。これにより得られる適応式に区画化されたマルチプロセッサ（ＡＰＭＰ）システムは、拡張性及び高い性能の両方を示す。
【０１９６】
本発明において、個々の各インスタンスは、システムの全ての処理リソースの別々の記録を維持する。各インスタンスは、そのインスタンスに対する各動作状態に基づいてプロセッサを分類する。好ましい実施形態では、インスタンスは、各ＣＰＵが動作についてそのインスタンスに適合するかどうか、そのインスタンスの制御下にあるかどうか、そしてそのインスタンス内のＳＭＰオペレーションに使用できるかどうかの記録を維持する。これらの異なる動作状態は、システムのＣＰＵのハイアラーキ分類を表し、そしてシステムは、付加的な分類に適応できる。
好ましい実施形態では、異なる分類の動作状態のいずれかにあるＣＰＵのメンバーシップが、各分類ごとにビットベクトルを維持する各インスタンスによって記録され、各ビットベクトルの少なくとも１つのビットは、その分類における１つのＣＰＵのメンバーシップ状態に対応する。通常、各セットは、各ＣＰＵごとに１ビットを有し、例えば、インスタンスによるＣＰＵ制御を表すビットベクトルは、第１の対応するＣＰＵがそのインスタンスの制御下にある場合には、その第１ビットが第１アサーションレベルにセットされる。ＣＰＵがそのインスタンスの制御下にない場合には、第１ビットは第２のアサーションレベルにセットされる。各ＣＰＵを表すビットにより、このビットベクトルは、各ＣＰＵに対しどれがインスタンスの制御下にあるかを示す指示を与える。同様に、他のビットベクトルも、各ＣＰＵの指示を与え、これらの指示は、例えば、どのＣＰＵが動作についてインスタンスに適合するか、又はどれがＳＭＰ動作についてインスタンスに使用できるかを示す。このように、各インスタンスは、全ての処理リソースを個々に追跡できると共に、インスタンスに対してそれらの動作状態がどんなものであるかを追跡できる。
【０１９７】
又、本発明は、インスタンス欠陥状態においてプロセッサを第１インスタンスから第２インスタンスへと自動的に移動するための手段も含む。このような移動は、移動プロセッサによる命令の実行を使用することができる。移動が開始されると、移動プロセッサは、その現在ハードウェア状態を記憶し、そして以前の実行中に第２インスタンス内に保持したハードウェア状態をロードすることができる。従って、プロセッサは、第２インスタンスにおいてそれが以前に退出したところから動作を再開する。プロセッサが移動することろのインスタンスにハードウェア状態が記憶されていない場合には、それが初期化状態に入れられる。
本発明の好ましい実施形態では、システムは、第１インスタンス内の欠陥に応答して、そのインスタンスで実行されているオペレーティングシステムを遮断するだけでなく、先ず、処理リソースを第１インスタンスから行先インスタンスへ移動させる。即ち、第１インスタンスに関連した所与のリソースに対する制御がオペレータの介在なしに第２インスタンスへ転送される。システムは、第１インスタンスの欠陥の前に処理デューティをもたず、第１インスタンスをバックアップするように働くインスタンスを有することができる。各ＣＰＵは、行先インスタンスへ移動し、そして好ましくは、第１インスタンスで行われていた同じ機能を引き継ぐ。各インスタンスは、ＣＰＵ  ＩＤにより編成されたアレーに行先インスタンスＩＤを記憶するのが好ましい。従って、第１インスタンス内に欠陥が発生すると、第１インスタンスの制御下にある各プロセッサは、それに関連したアレーエレメントを見つけて、それが移動するところのインスタンスのＩＤを決定することができる。
【０１９８】
欠陥後の第１インスタンスからのプロセッサの移動は、二次プロセッサのみを伴う。そのインスタンスの一次プロセッサは、二次の全てがそれ自体を移動するように確保するか、又は個別の移動ルーチンを呼び出して、ＳＭＰ処理アクティビティに全く参加しないいずれかのプロセッサを移動するように確保する。次いで、一次プロセッサは、第１インスタンスにより制御されるメモリの全てのデータを新たなメモリ位置に記憶し、その後、それ自身を遮断する。第１インスタンスの一次ＣＰＵが遮断すると、コンソールプログラムは、そのことを識別し、そして第１インスタンスの一次ＣＰＵが「コンソール」モードにあることを指示する共用メモリのフラグをセットする。次いで、コンソールは、システムの他のインスタンスの各々に割り込みを送って、それらがフラグの設定に気付くようにする。その間に、バックアップインスタンスにおいて処理が再開される。ある場合には、欠陥が生じたインスタンスから移動するＣＰＵは、異なる行先インスタンスへ移動することができる。異なるリソースに対して異なる行先インスタンスを許す場合には、インスタンスの１つに欠陥が生じた後にシステムのリソースを再分配する上で融通性が与えられる。
【０１９９】
リソースのランタイム移動
本発明では、ＣＰＵは、多数の区画によりシリアルな形態で共用することができる。コンピュータシステムのＣＰＵは、そのときに存在する区画内の一次ＣＰＵではなく且つ分散型割り込みハンドリングのようなシステム制約により束縛されていなければ、ある区画から別の区画へ移動することができる。いつそしてどこにＣＰＵが移動されるかのポリシーは、ＣＰＵが実行するオペレーティングシステムコードに厳密に依存する。好ましい実施形態では、ＣＰＵは、「ＰＡＬＭＩＧＲＡＴＥ」命令を実行することにより移動する。
ＰＡＬ  ＭＩＧＲＡＴＥ命令は、ＣＰＵをインスタンス間で移動させる１組のステップを呼び出す。この移動方法は、ＣＰＵの移動を要求する他のアクティビティと共に使用され、そして一般に、多数のＨＷＲＰＢ間にコンテクストスイッチを伴う。ＣＰＵが特定のインスタンスから離れるように移動するときは、ＣＰＵが実行されたインスタンスに関連したＨＷＲＰＢにそのコンテクストが記憶される。このように、ＣＰＵが、以前に動作していたインスタンスへ移動して戻る場合には、ＣＰＵがその動作を迅速に再開できるようにコンテクストが再記憶される。ＰＡＬ移動の段階が図２２Ａ−２２Ｂに示されている。
【０２００】
ＣＰＵによるＰＡＬ  ＭＩＧＲＡＴＥ命令の実行は、ステップ２２００に示すように移動ルーチンをスタートさせる。ステップ２２０２においてＣＰＵの現在ハードウェア状態がセーブされ、その後、ＣＰＵは行先区画を位置決めし、そしてそれが有効な行先であるかどうか決定する（ステップ２２０４）。有効化プロセスが失敗に終わると、元のハードウェア状態がステップ２２０５において回復され、そしてＣＰＵは元の区画内でオペレーションを再開する。ＣＰＵが行先区画を首尾良く有効化すると、ステップ２２０６において、構成ツリーのＣＰＵノードのｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドがクリアされ、そしてその利用性ビットがＣＰＵごとのフラグにおいてクリアされる（ステップ２２０８）。次いで、ステップ２２１０において、ＣＰＵキャッシュがクリアされる。
【０２０１】
ＣＰＵに対するプラットホーム特有の状態がステップ２２１２において初期化され（図２２Ｂ）、そしてステップ２２１４において、ＣＰＵに対する利用性ビットがＣＰＵごとのフラグにおいてクリアされる。次いで、構成ツリーのＣＰＵノードにおいてｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドがセットされ（ステップ２２１６）、ＣＰＵが移動した区画のＩＤを表す。次いで、ＣＰＵにはハードウェアコンテクストが与えられる（ステップ２２１８）。ＣＰＵに対して以前のハードウェア状態が存在する（即ちその区画において以前に動作したことがある）場合には、そのコンテクストが回復される。その区画に伴う以前のハードウェア状態がない（即ちＣＰＵがその区画で実行したことがない）か、或いは以前のハードウェア状態がもはや有効でない場合には、ＣＰＵの状態が初期化される。最終的に、ステップ２２２０においてＣＰＵの実行が再開される。実行は、その区画のＣＰＵにより実行される最後の移動命令に続く命令において続けられるか、或いは初期化される場合には、コンソール初期化ルーチンにおいて二次プロセッサとしてスタートする。図２２Ｂに示すように、実行が再開された後にプロセスが終了する。
【０２０２】
プロセッサが移動するたびに、行先区画のコンソールは、新たに移動されるＣＰＵを受け入れねばならない。図２３は、移動を完了するために行先区画においてコンソールが行うステップを示す。このルーチンは、ステップ２３００で始まり、そしてステップ２３０２へ進み、そこで、コンソールは、ＳＴＡＲＴＲＥＱメッセージを、ＣＰＵごとのスロットにおける移動されたＣＰＵのＴＸバッファに入れ、そしてＨＷＲＰＢのＴＸＲＤＹビットをセットする。次いで、コンソールは、ステップ２３０４に示すように、割り込みにより区画の一次ＣＰＵに通知する。移動されたＣＰＵは、ＨＷＲＰＢのＲＸＲＤＹビットをポールし、ステップ２３０６に示すように、オペレーションを開始するためにＳＴＡＲＴのようなコマンドを待機する。このルーチンは、ステップ２３０８で終了する。
【０２０３】
システム欠陥に続くリソース再割り当て
本発明の好ましい実施形態は、欠陥が生じたインスタンスに対する欠陥回復手段を含む。システムの各区画は互いに他の区画とは独立して機能するので、１つの区画の欠陥が他の区画に影響を及ぼすことはないが、その影響を受ける区画のオペレーティングシステムインスタンス及びその区画で実行されるアプリケーションに対して回復を必要とする。しかしながら、欠陥は、その影響を受けるインスタンスによって検出されたときでも、区画が再ブートされそしてその全てのリソースが再初期化されるので、修正に著しい時間を要する。この時間中に、区画の処理タスクは保留され、そしてリソースは、インスタンスの回復を待機する間アイドル状態のままとなる。実際に、インスタンスは、それ自身を再ブートできないこともあり、この場合には、リソースが不定にアイドル状態となる。
【０２０４】
本発明の好ましい実施形態では、システムは、１つのインスタンスに欠陥が生じた後にシステムの効率を最大にする助けをするように構成される。各主な区画に対し、バックアップ区画が形成され、それに対応する主たる区画と同じ基本的構造が与えられる。これが図２４に概略的に示されており、主たる区画２４００は、一次ＣＰＵ２４０４及び多数の二次ＣＰＵ２４０８をもつように示されている。バックアップ区画２４０２は、区画２４００とは完全に独立して機能し、それ自身の一次ＣＰＵ２４０６及びそれ自身のオペレーティングシステムインスタンスを有する。同様に、区画２４０２は、それ自身のＨＷＲＰＢ、コンソールプログラムのコピー、メモリ及びＩ／Ｏ接続を有し、そして構成ツリーにおける独立したノードを表す。しかしながら、最初、バックアップ区画２４０２のインスタンスは、主たる区画２４００のインスタンスがシステムにアクティブに関与している間に、処理デューティをもたない。又、全てのインスタンスにアクセスできる情報が記憶される共用メモリ２４１０の領域も図示されている。
【０２０５】
各インスタンスは、１つのインスタンスに欠陥が生じた後にＣＰＵ移動に対して特に使用される情報のコピーを維持する。この情報は、システムの各ＣＰＵに対して与えられる識別コード（ＩＤ）を含み、各ＩＤは、現在ホストインスタンスが欠陥モードに入るときに、関連するＣＰＵが移動すべきところの行先インスタンス（又は区画）を識別する。この情報の構成が図２５に概略的に示されており、メモリのＩＤ部分の異なる区分が各々行先ＩＤを含むものとして示されている。隣接するＣＰＵ識別は、各行先ＩＤを適当なＣＰＵに関連付ける。従って、欠陥が検出されたときに、適当なメモリ位置を検査して、所与のＣＰＵに対するターゲットインスタンスを決定し、そしてこの情報を用いて、新たなインスタンスへの制御された移動を受けることができる。例えば、図２４に示す区画の構成では、区画２４００の二次ＣＰＵの全部ではないまでもその多くが、それらのターゲットとして指定されたバックアップ区画（区画２４０２）を有することができる。従って、区画２４００のインスタンスが欠陥を受けた場合には、これらのＣＰＵが区画２４００から区画２４０２へ移動する。しかしながら、当業者に明らかなように、ある状況においては、区画２４００の１つ以上のＣＰＵを異なる区画へ一緒に送信することが所望される。更に、インスタンスの仮想リソース機能では、新たに得られるＣＰＵは、例えば、上記のオートスタートセットを使用することにより、アクティブなセットに自動的に入ることができる。
【０２０６】
インスタンスの欠陥中に、システムは、欠陥の生じたインスタンスのリソースの使用損失を最小にし、そしてある場合には、欠陥の生じた区画のインスタンスとで行われる全てのオペレーションを新たなインスタンス及び区画へできるだけ迅速に転送するよう試みるように構成された一連の段階をたどる。これらの段階が図２６Ａ及び２６Ｂのフローチャートに一般的に示されている。
検出された欠陥に続く事象のシーケンスは、図２６Ａに示すスタートステップ２６００で始まる。欠陥が検出された後に、欠陥が生じたオペレーティングシステムインスタンスは、アクティブなセットにある全てのＣＰＵの実行コンテクストの制御権を得る（ステップ２６０２）。残りのシステム遮断手順がその区画の一次ＣＰＵにより遂行される一方、二次ＣＰＵは、それらの移動に必要な手順を行う。ステップ２６０４において、一次ＣＰＵは、欠陥の生じたインスタンスのアクティブな二次ＣＰＵに、その各々がその処理コンテクストをシステム共用メモリの選択された領域へダンプするように命令し、その後、それらは、移動プロセスを開始するように命令される。全てのアクティブな二次ＣＰＵがそれらの処理コンテクストをダンプすると、一次ＣＰＵは、次の動作に進む（ステップ２６０６）。二次ＣＰＵの幾つかは、アクティブモードでないことがあるので、一次ＣＰＵは、各々の二次が欠陥回復プロセスを進めていることを確認しなければならない。構成セットにはあるが、当該インスタンスのアクティブセットにはないような二次ＣＰＵが存在する場合には、一次ＣＰＵは、ステップ２６０８において個別の移動機能を呼び出し、停止したＣＰＵをいずれかの識別された行先区画へ移動する。
【０２０７】
欠陥回復プロセスが図２６Ｂにおいて続けられ、図２６Ａと２６Ｂとの継続部は、接続ノードＡで示されている。ステップ２６１０において、一次は、欠陥インスタンスにより制御されるメモリに記憶されたデータをダンプし、それを新たな位置へコピーする。図２６Ｂのステップ２６１２で示すように、欠陥インスタンスの一次ＣＰＵは、次いで、コンソール「コールバック」命令を送信し、これは、コンソールモードに入ったことを指示し、そしてコンソールプログラムが多数の異なるタスクを実行するようにさせる。これらタスクの１つは、システムインカーネーションカウントを増加することであり、このカウントは、構成ツリーに変化があるたびに変更される。又、コンソールは、プロセッサ間割り込み（ＩＰＩＮＴ）の発生を開始し、これは、他の全てのインスタンスがインカーネーションカウントを見て、それが変化したことに気付き、そして構成ツリーを検査して、プロセスにおける欠陥インスタンスの状態の変化を識別するようにさせる。更に、コンソールは、一次の遮断を見ると（即ちコンソールモードに入ると）、現在インスタンスの機能へ復帰するおそれなく、一次ＣＰＵに対するＣＰＵごとのデータビットにおいて適当な状態コードをセットする。一次ＣＰＵがコンソールモードに入り、そしてコンソールが上記状態コードをセットするようにさせる段階がステップ２６１４に示されている。この点において、区画は完全にディスエイブルされ、そして欠陥ステップが完了となる。
【０２０８】
二次ＣＰＵ（アクティブセットの）は、一次ＣＰＵにより欠陥移動を開始するよう命令されると、図２７に一般的に示された一連のステップを行う。第１に、二次ＣＰＵは、一次ＣＰＵにより指令されたときに、その処理コンテクストをダンプする（ステップ２７００）。次いで、フェイルオーバーＩＤを含むメモリアレーの適当な部分をポールし、それがどこに移動すべきかを決定する（ステップ２７０２）。ターゲットＩＤが検索されると、プロセッサは、それを現在区画のＩＤと比較する（ステップ２７０４）。ある場合には、区画に欠陥が生じた場合にＣＰＵを移動しないことが所望される。このような場合に、当該ＣＰＵに対してロードされたターゲットＩＤは、現在区画のＩＤとなる。従って、ＣＰＵが、ステップ２７０４において、ターゲットＩＤ及び現在区画のＩＤが同じであると決定した場合には、それが単にコンソールモードに入り、そしてプロセスは終了となる。しかしながら、ターゲットＩＤが現在ＩＤと異なる場合に、ＣＰＵは、与えられた移動方法の１つを使用して新たな区画への移動を受け、その後、プロセスが完了となる。
【０２０９】
上記実施形態の１つの変形においては、割り込みハンドラーが、欠陥の特定アプリケーションを通知することでチャージされる。この別の実施形態では、ＩＰＩＮＴハンドラーは、特定事象の通知に対して特定アプリケーションが「登録」を行うようにする登録プロセスを与える。このメカニズムを使用して、いかなるアプリケーションにも、構成ツリーの変更を通知することができ、そして欠陥が生じたことを決定することができる。アプリケーションが、欠陥インスタンス上で実行されたアプリケーションのコピーであった場合には、これがバックアップインスタンス上のアプリケーションに対するトリガーを与え、欠陥インスタンス上で実行されたアプリケーションに代わって処理アクティビティを開始する。
Ｈ．マルチプロセッサコンピュータシステムにおけるリソースの永久所有権指定（図２８−２９）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが電気的に互いに接続された単一のマルチプロセッサコンピュータにおいて協働して実行される。多数の物理的プロセッサ及びリソースをもつ単一の物理的マシンは、ソフトウェアにより適応式に多数の区画に細分化され、その各々は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース及び共用と指示されたリソースにアクセスする。１つの実施形態によれば、リソースの区画化は、ある構成内にリソースを指定することにより実行される。
【０２１０】
より詳細には、ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートを一緒に指定することによりそれらを論理的及び適応式に区画化する。次いで、オペレーティングシステムのインスタンスが区画にロードされる。異なる時間に、異なるオペレーティングシステムインスタンスが所与の区画にロードされる。システムマネージャーが指令するこの区画化は、ソフトウェア機能であり、ハードウェアの境界は必要とされない。各個々のインスタンスは、それが独立して実行するのに必要なリソースを有する。ＣＰＵ及びメモリのようなリソースは、異なる区画に動的に指定することができ、そして構成を変更することによりマシン内で実行されるオペレーティングシステムのインスタンスによって使用することができる。区画それ自身も、構成ツリーを変更することによりシステムを再ブートすることなく変更することができる。これにより得られる適応式に区画化されたマルチプロセッサ（ＡＰＭＰ）システムは、拡張性及び高い性能の両方を示す。
【０２１１】
本発明は、プロセッサを第１区画から第２区画へ移動するための手段を含むことができる。このような移動は、移動に対する黙従（及びプロセッサが動作しているところのオペレーティングシステムインスタンスの黙従）が確保されるように移動プロセッサによる命令の実行を要求する。移動が開始されるときは、移動プロセッサがその現在ハードウェア状態を記憶し、そして第２区画内での以前の実行中にそれが保持したハードウェア状態をロードする。従って、プロセッサは第２区画においてそれが以前に退出したところから動作を再開する。プロセッサが移動するところの区画のハードウェア状態が記憶されていない場合には、それが初期化状態に入れられる。
本発明のシステムは、全システムの再ブートを必要とせずにプロセッサをある区画から別の区画へ移動できるようにする区画間の相互接続を有する。現在区画において実行されるソフトウェア、又はその区画にある一次プロセッサは、移動されるべきプロセッサに、それが移動オペレーションを開始する要求を与えることができる。このような移動は、それが存在するところのオペレーティングシステムの割り込みを伴ったり伴わなかったりして行うことができる。即ち、プロセッサは、システムの他部分が動作を続ける間に単に静止されて再指定されるか、又はその区画内のリソースが停止され、コンソールプログラムが呼び出されて、移動を整合する。
【０２１２】
システムのプロセッサを追跡するために、各区画は、各プロセッサが各々関連した区画を識別するフラグを含む１組のハードウェアフラグを有する。又、ハードウェアフラグは、ＳＭＰオペレーションにおいて所与のプロセッサがいつ使用できるかも指示する。プロセッサが移動されるたびにこれらのフラグを更新することにより、各プロセッサの現在状態が分かり、そしてシステムの必要な再ブートに使用するためにハードウェアフラグ内に保持される。
好ましい実施形態では、ＣＰＵに、これを区画の特定の１つに結び付ける永久所有権指定も与えられる。これは、ＣＰＵをシステム初期化中に各区画に各々関連付けできるようにする。所与のＣＰＵに対する所有権指定は、不揮発性メモリにおける特定のメモリ位置の内容により指示される。システムが初期化されるときには、所有者フィールドに指示される有効所有者区画をもたないＣＰＵは、再指定が実行されるまで任意の区画に指定される。又、ＣＰＵが再指定の命令を受け取る場合は、ＣＰＵの永久所有権も変化し得る。システムが初期化されると、ＣＰＵの移動が第２のメモリ位置の内容の変化によって生じ、これは、ＣＰＵの一時的所有権を有する区画を指示し、そして不揮発性メモリに配置される。
【０２１３】
リソースの永久指定
本発明では、ＣＰＵが多数の区画によりシリアル形態で共用される。コンピュータシステムのいかなるＣＰＵも、そのときそれが存在する区画の一次ＣＰＵではなく且つ分散型割り込みハンドリングのようなシステム制約により束縛されていなければ、ある区画から別の区画へ移動することができる。しかしながら、所与のＣＰＵの「現在所有者」がオンザフライで変化する間に、特定区画でＣＰＵを識別する「永久所有者」も確立されるが、この永久所有権もシステム内で変化し得る。
システムにおけるＣＰＵの所有権は、ＣＰＵノード構造体を区画ノード構造体に関連付ける構成ツリーによって確立される。一次ＣＰＵは、これがオペレーションを初期化するときに、現在ハードウェア構成及び記憶されたソフトウェア構成情報から構成ツリーを形成する。各ＣＰＵは、区画に指定される（即ち所有される）か、非指定（即ち非所有）である。ＣＰＵに関する所有権情報は、構成ツリーにおけるＣＰＵノードの所有者フィールドの内容に基づく。システムにおけるＣＰＵの初期指定に関する詳細が図２８に示されている。
【０２１４】
システムは初期化され、そしてプロセスはステップ２８００においてスタートする。構成ツリーが作られるときには、適当なＣＰＵノードの所有者フィールドが検査される（ステップ２８０２）。所有者フィールドに、特定区画を指示するコードが満たされる場合には（ステップ２８０４にテスト状態で示す）、ＣＰＵがその区画において初期化される（ステップ２８０６）。その後、ＣＰＵそれ自体は、その利用性ビットをセットし（ステップ２８０８）、そしてその区画のＳＭＰオペレーションに加わるよう要求する（ステップ２８１０）。これで、指定プロセスが完了となる。
ステップ２８０４において、所与の区画によるＣＰＵの所有権を指示する有効コードがないことが決定された場合には、ＣＰＵは、コンソールにより指令されてＨＷＲＰＢコンテクストに加わる（ステップ２８０５）。即ち、任意の区画に加わるようにコンソールにより指令される。しかしながら、ＣＰＵは、その利用性ビットをセットせず、その結果、ＳＭＰオペレーションに加わることが期待されない。次いで、待機状態に入り、その間にそれ自身のフィールドをポールし続ける（ステップ２８０７及び２８０９）。所有者フィールドに有効区画のコードが満たされると、ＣＰＵはその区画を位置決めし、そして必要に応じて、そこに移動する（ステップ２８１１）。次いで、利用性ビットをセットし（ステップ２８０８）、そして新たな区画においてＳＭＰオペレーションに加わるように要求する（ステップ２８１０）。この区画は、その所有者フィールドに変化が生じるまでこのＣＰＵの「永久所有者」を維持する。
【０２１５】
ＣＰＵの永久所有権は、コンソールによる相互作用で変更し得る。このプロセスは、図２９のフローチャートに示されており、ステップ２９００で始まる。ステップ２９０２において、当該ＣＰＵが動作している区画のオペレーティングシステムインスタンスは、ＤＥＡＳＳＩＧＮのＨＡＬＴ ＲＥＱＵＥＳＴＥＤコードでＨＡＬＴ命令を実行する。即ち、ＣＰＵが指定解除されるべきであることを指示する停止コードがＣＰＵごとのＳＴＡＴＥ ＧＬＡＧＳフィールドのＨＡＬＴ ＲＥＱＵＥＳＴＥＤビットにロードされる。ＣＰＵは、このコードに多数の仕方で応答する。これは、ＣＰＵノードにおいてそのｃｕｒｒｅｎｔフィールドをクリアし（ステップ２９０４）そしてｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドをクリアする（ステップ２９０６）。又、その利用性ビットもクリアする（ステップ２９０８）。次いで、ＣＰＵは、そのｏｗｎｅｒフィールドを検査し、有効区画コードがそこに入るのを待機する。即ち、ＣＰＵは図２８のステップ２８０２へ進み、上記の指定プロセスを受ける。これは、図２８及び２９の両方に示された接続部「Ａ」で指示される。
【０２１６】
又、二次ＣＰＵがコンソールＩ／Ｏモードにあるときは、その区画の一次ＣＰＵがＤＥＡＳＳＩＧＮメッセージを二次ＣＰＵのＲＸバッファに送信することによってもその指定解除を開始することができる。これにより、ＣＰＵは図２９に示す１組のステップを開始する。
ＣＰＵの永久所有権特性は、システムを最初に作動するのに特に有用な重要な情報を与える。構成ツリーが作られるときには、各ＣＰＵの永久所有権を使用して区画が作られる。その後、ｃｕｒｒｅｎｔ ｏｗｎｅｒフィールド（所与のＣＰＵを制御する区画を指定する）を用いて、各ＣＰＵが所与の時間にどこで動作するかが追跡される。しかしながら、永久所有権情報は、システムを将来再編成したり又はシステムを将来再初期化するのに使用できるように保持される。従って、永久所有権データはｎｖＲＡＭ（即ち不揮発性メモリ）に記憶され、一方、一時的所有権データは揮発性メモリに記憶される。
【０２１７】
Ｉ．マルチプロセッサコンピュータシステムにおけるプロセッサの移動（図２２Ａ−２７）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが電気的に互いに接続された単一のマルチプロセッサコンピュータにおいて協働して実行される。多数の物理的プロセッサ及びリソースをもつ単一の物理的マシンは、ソフトウェアにより適応式に多数の区画に細分化され、その各々は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース及び共用と指示されたリソースにアクセスする。１つの実施形態によれば、リソースの区画化は、ある構成内のリソースを指定することにより実行される。
【０２１８】
より詳細には、ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートを一緒に指定することによりそれらを論理的及び適応式に区画化する。次いで、オペレーティングシステムのインスタンスが区画にロードされる。異なる時間に、異なるオペレーティングシステムインスタンスが所与の区画にロードされる。システムマネージャーが指令するこの区画化は、ソフトウェア機能であり、ハードウェアの境界は必要とされない。各個々のインスタンスは、それが独立して実行するのに必要なリソースを有する。ＣＰＵ及びメモリのようなリソースは、異なる区画に動的に指定することができ、そして構成を変更することによりマシン内で実行されるオペレーティングシステムのインスタンスによって使用することができる。区画それ自身も、構成ツリーを変更することによりシステムを再ブートすることなく変更することができる。これにより得られる適応式に区画化されたマルチプロセッサ（ＡＰＭＰ）システムは、拡張性及び高い性能の両方を示す。
【０２１９】
本発明は、プロセッサを第１区画から第２区画へ移動するための手段を含むことができる。このような移動は、移動に対する黙従（及びプロセッサが動作しているところのオペレーティングシステムインスタンスの黙従）が確保されるように移動プロセッサによる命令の実行を要求する。移動が開始されるときは、移動プロセッサがその現在ハードウェア状態を記憶し、そして第２区画内での以前の実行中にそれが保持したハードウェア状態をロードする。従って、プロセッサは第２区画においてそれが以前に退出したところから動作を再開する。プロセッサが移動するところの区画のハードウェア状態が記憶されていない場合には、それが初期化状態に入れられる。
本発明のシステムは、全システムの再ブートを必要とせずにプロセッサをある区画から別の区画へ移動できるようにする区画間の相互作用を有する。現在区画において実行されるソフトウェア、又はその区画にある一次プロセッサは、移動されるべきプロセッサに、それが移動オペレーションを開始する要求を与えることができる。このような移動は、それが存在するところのオペレーティングシステムの割り込みを伴ったり伴わなかったりして行うことができる。即ち、プロセッサは、システムの他部分が動作を続ける間に単に静止されて再指定されるか、又はその区画内のリソースが停止され、コンソールプログラムが呼び出されて、移動を整合する。
【０２２０】
システムのプロセッサを追跡するために、各区画は、各プロセッサが各々関連した区画を識別するフラグを含む１組のハードウェアフラグを有する。又、ハードウェアフラグは、ＳＭＰオペレーションにおいて所与のプロセッサがいつ使用できるかも指示する。プロセッサが移動されるたびにこれらのフラグを更新することにより、各プロセッサの現在状態が分かり、そしてシステムの必要な再ブートに使用するためにハードウェアフラグ内に保持される。
リソースのランタイム移動
オペレーティングシステムインスタンスがクラッシュするときには、その区画においてアクティブなＣＰＵが、再ブート時に同じインスタンスの一部分であり続ける。ＣＰＵは、それらの公称の「所有者」へ自動的に移動するのではない。又、ある区画により「所有」されたＣＰＵは、クラッシュ又は再ブートしているオペレーティングシステムインスタンスへ移動して戻ることはない。ＨＷＲＰＢにおけるＣＰＵごとのフラグの利用性ビットは、現在所有権を指示する。これは構成ツリーにおけるＣＰＵノードのｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドにも反映される。
【０２２１】
オペレーティングシステムは、そのクラッシュロジックの一部分として二次ＣＰＵの自動的な移動を実施する。即ち、二次ＣＰＵがそのクラッシュロジックの終わりに到達しそして通常待機状態に入るときには、オペレーティングシステムは、ＣＰＵがむしろ予め定められた区画へ移動するようにさせるポリシーを実施することができる。これは、一次アプリケーション区画がフェイルしたときにウオームバックアップ区画においてＣＰＵを直ちに使用できるような指令ウオームフェイルオーバーシステムを実施することができる。
Ｊ．マルチプロセッサコンピュータシステムにおける異なるプロセッサ状態からのプロセッサ移動（図３０Ａ−３２Ｂ）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが電気的に互いに接続された単一のマルチプロセッサコンピュータにおいて協働して実行される。多数の物理的プロセッサ及びリソースをもつ単一の物理的マシンは、ソフトウェアにより適応式に多数の区画に細分化され、その各々は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース及び共用と指示されたリソースにアクセスする。１つの実施形態によれば、リソースの区画化は、ある構成内のリソースを指定することにより実行される。
【０２２２】
より詳細には、ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートを一緒に指定することによりそれらを論理的及び適応式に区画化する。次いで、オペレーティングシステムのインスタンスが区画にロードされる。異なる時間に、異なるオペレーティングシステムインスタンスが所与の区画にロードされる。システムマネージャーが指令するこの区画化は、ソフトウェア機能であり、ハードウェアの境界は必要とされない。各個々のインスタンスは、それが独立して実行するのに必要なリソースを有する。ＣＰＵ及びメモリのようなリソースは、異なる区画に動的に指定することができ、そして構成を変更することによりマシン内で実行されるオペレーティングシステムのインスタンスによって使用することができる。区画それ自身も、構成ツリーを変更することによりシステムを再ブートすることなく変更することができる。これにより得られる適応式に区画化されたマルチプロセッサ（ＡＰＭＰ）システムは、拡張性及び高い性能の両方を示す。
【０２２３】
本発明は、プロセッサを第１区画から第２区画へ移動するための手段を含むことができる。このような移動は、移動に対する黙従（及びプロセッサが動作しているところのオペレーティングシステムインスタンスの黙従）が確保されるように移動プロセッサによる命令の実行を要求する。移動が開始されるときは、移動プロセッサがその現在ハードウェア状態を記憶し、そして第２区画内での以前の実行中にそれが保持したハードウェア状態をロードする。従って、プロセッサは第２区画においてそれが以前に退出したところから動作を再開する。プロセッサが移動するところの区画のハードウェア状態が記憶されていない場合には、それが初期化状態に入れられる。
本発明のシステムは、全システムの再ブートを必要とせずにプロセッサをある区画から別の区画へ移動できるようにする区画間の相互作用を有する。現在区画において実行されるソフトウェア、又はその区画にある一次プロセッサは、移動されるべきプロセッサに、それが移動オペレーションを開始する要求を与えることができる。このような移動は、プロセッサがその現在区画においてオペレーティングシステムインスタンスの制御下で動作されるとき、又は停止状態にあってシステムコンソールプログラムの制御下で動作されるときに行われる。又、プロセッサは、新たな区画に再指定されるまで、不定に指定解除されてもよく、即ち指定区画が与えられなくてもよい。
【０２２４】
リソースのランタイム移動
ＣＰＵ移動は、移動が求められたときのＣＰＵの状態と、移動が行われる方法とに基づいて異なる１組の段階で構成される。ＣＰＵ移動の好ましい方法を以下に詳細に説明する。これらの方法は、１）その区画のオペレーティングシステムインスタンスのもとで動作するＣＰＵの直接移動、２）コンソールモードで現在動作しているＣＰＵの直接移動、及び３）非指定状態を経て移行させることによるＣＰＵの移動をカバーする。
ＣＰＵがオペレーティングシステムの指令のもとで動作しているときは、移動プロセスを「停止」移動と称する。というのは、ＰＡＬ ＭＩＧＲＡＴＥ命令を経て再指定の前にＣＰＵを停止しなければならないからである。停止移動に必要な段階が図３０Ａ及び３０Ｂに示されている。
【０２２５】
ステップ３０００で始まって、移動ルーチンはステップ３００２へ進み、そこで、移動ＣＰＵは、一次ＣＰＵからの移動命令に応答して、特殊なＨＡＬＴ ＭＩＧＲＡＴＥコードをＨＷＲＰＢのＲＥＡＳＯＮ ＦＯＲ ＨＡＬＴ  ｐｅｒ−ＣＰＵフィールドに入れる。次いで、ステップ３００４において、ＣＰＵは、行先区画ＩＤをＲＥＡＳＯＮ ＦＯＲ ＨＡＬＴフィールドに入れる。次いで、ＣＰＵは、ＨＡＬＴ命令を実行する（ステップ３００６）。オペレーティングシステムは、ＣＰＵの動作を静止し、そしてＨＡＬＴの実行の前にＣＰＵのＳＭＰ関与を停止させる役目を果たす。これらのサブステップの実際の実行は、オペレーティングシステム特有のもので、従来型のものである。
ＣＰＵがＲＥＡＳＯＮ ＦＯＲ ＨＡＬＴ  ｐｅｒ−ＣＰＵフィールドのＨＡＬＴ ＭＩＧＲＡＴＥコードでＨＡＬＴを実行するときには、ステップ３００８に示すように制御がコンソールＨＡＬＴエントリポイントへ移行する。次いで、コンソールは、ＲＥＡＳＯＮ ＦＯＲ ＨＡＬＴ  ｐｅｒ−ＣＰＵフィールドから行先の区画ＩＤを得（ステップ３０１０）、そしてステップ３０１２に示すように、ＲＥＡＳＯＮ ＦＯＲ ＨＡＬＴフィールドをクリアする。次いで、コンソールは、ＨＡＬＴ ＭＩＧＲＡＴＥオペレーションが有効かどうかをステップ３０１４において決定する。もし有効であれば、コンソールは、ステップ３０１６において構成ツリーのＣＰＵノードにおけるｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドをクリアし、そしてステップ３０１８においてＰＡＬ ＭＩＧＲＡＴＥ命令を実行し、その後、ルーチンはステップ３０２０で終了となる。ステップ３０１４において、ＨＡＬＴ ＭＩＧＲＡＴＥオペレーションが有効でない（例えば無効の区画ＩＤが特定された）ことをコンソールが決定すると、コンソールは、図３０Ｃのステップを実行する。
【０２２６】
図３０Ｃに示すように、ＨＡＬＴ ＭＩＧＲＡＴＥオペレーションが無効であるというコンソールによる決定は、先ず、ＲＥＡＳＯＮ ＦＯＲ ＨＡＬＴ  ｐｅｒ−ＣＰＵフィールドをクリアし（ステップ３０２２）、そして現在区画にＨＡＬＴ状態を保持する。ステップ３０２４において、コンソールは、ＣＰＵごとのスロットにおいてＣＰＵのＴＸバッファにＳＴＡＲＴＲＥＱメッセージを入れそしてステップ３０２６において、ＨＷＲＰＢにおけるＴＸＲＤＹビットをセットする。次いで、コンソールは、ステップ３０２８に示すように、割り込みにより区画の一次ＣＰＵに通知する。次いで、コンソールは、ステップ３０３０に示すように、ＲＸＲＤＹビットをＨＷＲＰＢにポールし、オペレーションを開始するためのＳＴＡＲＴ、ＤＥＡＳＳＩＧＮ又はＭＩＧＲＡＴＥのようなコマンドを待機する。これで、ルーチンが終了となる。ＨＡＬＴ ＭＩＧＲＡＴＥオペレーションが有効化されないときは、コンソールは、ＣＰＵごとのフラグにおける利用性ビットをクリアせず、そして構成ツリーのＣＰＵノードにおけるｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドをクリアしない。
【０２２７】
ＣＰＵが既にコンソールモードにあるときには、それを移動するステップが、上記のものとは若干相違する。コンソールＩ／Ｏモードにあって、利用性ビットがセットされ且つ構成ツリーのｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドがセットされたＣＰＵは、ＣＰＵごとのＲＸバッファをポールし、オペレーティングシステムを実行している一次ＣＰＵからのコマンドを待機する。このＣＰＵの移動に続くステップが図３１に示されている。
ここに示す方法は、ステップ３１００で始まり、そしてステップ３１０２へ進み、そこで、一次は、移動されるべきＣＰＵのＲＸバッファにＭＩＧＲＡＴＥコマンドを入れる。次いで、一次は、ＣＰＵのＲＸＲＤＹビットをセットして、それに移動命令の存在を警告する（ステップ３１０４）。次いで、移動するＣＰＵのｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドがコンソールによってクリアされ、その再指定の準備をする（ステップ３１０６）。次いで、ＰＡＬ ＭＩＧＲＡＴＥ命令（図２２Ａ−２２Ｂ）がコールされ（ステップ３１０８）、その後、プロセスはステップ３０２０で終了となる。
【０２２８】
ＣＰＵがそのオペレーティングシステムインスタンスのもとで動作するときには、行先区画の即時指定を要求しない（上記の停止移動のように）ＣＰＵの移動方法は、先ず、ＣＰＵを指定解除し、その後、それを異なる区画に再指定することである。この方法は、図３２Ａ及び３２Ｂに示されている。この方法は、図３２Ａのステップ３２００において開始され、そしてステップ３２０２へ進み、ここで、移動するＣＰＵが存在する区画の一次ＣＰＵは、移動するＣＰＵのＲＸバッファにＤＥＡＳＳＩＧＮ（指定解除）コードを入れる。次いで、ＣＰＵは、一次ＣＰＵにより、それが行うＨＡＬＴ命令を実行するように指令される（ステップ３２０４）。ＨＡＬＴが実行されるときにＤＥＡＳＳＩＧＮコードが存在することは、ＣＰＵが、構成ツリーのｏｗｎｅｒフィールドと、ＡＶＡＩＬＡＢＬＥ（利用性）ビット及びｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドとをクリアするようにさせる。次いで、ＣＰＵは、コンソールＩ／Ｏモードにおいて、コンソールにより指令されてＨＷＲＰＢコンテクストに加わる動作を実行する。
【０２２９】
指令解除されて、ＣＰＵは、そのｏｗｎｅｒフィールドを連続的にポールする（ステップ３２０８及び３２１０）。ｏｗｎｅｒフィールドに有効区画に対するコードが満たされると、ＣＰＵは、その区画を位置決めし、そしてもし必要ならば、そこに移動する（図３２Ｂのステップ３２１２）。次いで、その利用性ビットをセットし（ステップ３２１４）、そして新たな区画においてＳＰＭオペレーションに加わるよう要求する（ステップ３２１６）。この区画は、そのｏｗｎｅｒフィールドに変更がなされるまでこのＣＰＵの「永久所有者」のままである。オペレーティングシステムインスタンスがクラッシュするときには、その区画においてアクティブなＣＰＵが、再ブートの際に同じインスタンスの一部分であり続ける。ＣＰＵは、それらの公称「所有者」へ自動的に移動しない。又、区画により「所有」されたＣＰＵも、クラッシュ又は再ブートするオペレーティングシステムインスタンスへ移動して戻ることはない。ＨＷＲＰＢのＣＰＵごとのフラグにおける利用性ビットは、現在所有権を指示する。これは、構成ツリーにおけるＣＰＵノードのｃｕｒｒｅｎｔ ｏｗｎｅｒフィールドに反映される。
【０２３０】
オペレーティングシステムは、そのクラッシュロジックの一部分として二次ＣＰＵの自動的な移動を実行する。即ち、二次ＣＰＵがそのクラッシュロジックの終わりに到達し、そして通常待機状態に入るときに、オペレーティングシステムは、ＣＰＵがむしろ予め定められた区画へ移動するようにさせるポリシーを実施することができる。これは、一次のアプリケーション区画がフェイルするときにウオームバックアップ区画においてＣＰＵが直ちに使用できるような指令されたウオームフェイルオーバーシステムを実施することができる。
Ｋ．マルチプロセッサシステムにおける通信（図３３Ａ−３４Ｂ）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが電気的に互いに接続された単一のマルチプロセッサコンピュータにおいて協働して実行される。多数の物理的プロセッサ及びリソースをもつ単一の物理的マシンは、ソフトウェアにより適応式に多数の区画に細分化され、その各々は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース及び共用と指示されたリソースにアクセスする。１つの実施形態によれば、リソースの区画化は、ある構成内のリソースを指定することにより実行される。
【０２３１】
より詳細には、ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートを一緒に指定することによりそれらを論理的及び適応式に区画化する。次いで、オペレーティングシステムのインスタンスが区画にロードされる。異なる時間に、異なるオペレーティングシステムインスタンスが所与の区画にロードされる。システムマネージャーが指令するこの区画化は、ソフトウェア機能であり、ハードウェアの境界は必要とされない。各個々のインスタンスは、それが独立して実行するのに必要なリソースを有する。ＣＰＵ及びメモリのようなリソースは、異なる区画に動的に指定することができ、そして構成を変更することによりマシン内で実行されるオペレーティングシステムのインスタンスによって使用することができる。区画それ自身も、構成ツリーを変更することによりシステムを再ブートすることなく変更することができる。これにより得られる適応式に区画化されたマルチプロセッサ（ＡＰＭＰ）システムは、拡張性及び高い性能の両方を示す。
【０２３２】
本発明のこの特徴では、ここのインスタンスは、インスタンス間通信を行うことができる。即ち、第１の区画で実行される第１インスタンスは、第２の区画で実行される第２インスタンスと通信することができる。この通信は、システムの共用メモリを使用し、そして１つのインスタンスが、システムのどこかで実行されている別のインスタンスにアクティブに信号送信できるようにする。２つの好ましい通信方法は、単一ビット通知によるものと、パケット化データ転送によるものである。
単一ビット通知は、多数の所定の事象がシステムの全てのインスタンスに分かるという事実を利用するもので、それ故、事象当たり１ビットで表すことができる。従って、各インスタンスには、共用メモリにおいてそれ自身の通知ビットベクトルが関連され、これは、所定の事象の異なる１つを各々表すビットの組である。第１インスタンスは、共用メモリにおいて第２区画のビットベクトルをアクセスしそしてその事象に対応するビットの値を変更することにより、所定事象の１つが発生したことを第２インスタンスに通知することができる。次いで、第１インスタンスは、割り込みにより第２インスタンスに信号を送り、それがビットベクトルを検査するようにさせる。変更されたビットが見つかると、ビットベクトルにおけるそのビットの位置をインデックスとして使用して、そのビットにより表された事象に適した処理ルーチンを開始するルーチンコール命令をメモリにおいて探索する。
【０２３３】
パケット化されたデータの通過も、共用メモリを使用するが、第１インスタンスが先ず必要なメモリの量を決定しそして共用メモリにそのスペースを割り当てることを含む。又、共用メモリには、各インスタンスに対するパケット処置待ち行列のリストヘッドも配置される。第１インスタンスは、それが共用メモリにパケット化データを記憶した後に、第２インスタンスに対するパケット処理待ち行列リストヘッドを探索し、そしてリストヘッドにパケット化データに関する必要な情報を入れる。次いで、第１インスタンスは、上記のような単一ビット通知を使用して、パケット化データを検索する準備ができたことを第２インスタンスに通知する。換言すれば、第１インスタンスは、第２インスタンスにより処理される準備がなされているパケット化データの事象に対応する第２インスタンス通知ビットベクトルのビットをセットする。次いで、割り込みによって第２インスタンスに警告を与え、ビットベクトルをチェックして、事象を確認する。第２インスタンスは、次いで、そのパケット処理待ち行列を処理して、パケット化されたデータを検索する。好ましくは、パケットデータ内の要素ＩＤは、適当な処理ルーチン（即ち、正しいデータフォーマットを使用するもの）のコール機能を見つけることのできるメモリ位置へのインデックスとして第２インスタンスによって使用される。
【０２３４】
メモリの再構成
ページフレーム番号（ＰＦＮ）データベース設計は、ソフトウェア制御のもとでメモリをオペレーティングシステムインスタンスへと又はそこから再構成できるようにする。プライベートメモリは、共用されるように再構成され、共用メモリは、プライベートとなるように再構成され、そして１つの区画に対してプライベートなメモリは、別の区画に対してプライベートとなるよう再構成され得る。又、プライベートであるか又は共用されるメモリは、非所有となるように再構成され得る。メモリ再構成は、ハードウェアホットインスワッピング又はホットアウトスワッピングをサポートすることができる。メモリは、それが構成ツリーにおいて「非所有」状態にあるときは、インスタンスのプライベートメモリへと再構成することもできるし、又はコミュニティにおける共用メモリの一部分として再構成することもできる。新たなメモリがシステムへとインスワプされるときには、メモリが最初に非所有状態に入れられる。それ故、メモリホットスワッピングをサポートするために、オペレーティングシステムインスタンス及びコンソールソフトウェアは、メモリを非所有状態へと及びその状態から再構成しなければならない。メモリを再構成するときには、ページの範囲が、説明上、整列された８メガバイト（ＭＢ）（システムページサイズ平方分割８バイト）である。ページの範囲は、８ＭＢの倍数のサイズであり、そしてシステムから再構成されるべき範囲内のページが使用される場合には、他の制約が以下に述べるように適用される。
【０２３５】
ＰＦＮデータベースは、インスワップすることのできる全ての考えられるメモリを含むサイズにされるので、新たなメモリをいつでもシステムに追加できると共に、常に新たなページを使用してＰＦＮデータベースエントリページを作り上げることができる。システムからメモリを除去するために、先ず、ページの範囲がプライベートであるか、共用であるか、又は非所有であるかが決定される。メモリが既に非所有とマークされた場合には、それが除去されるとみなされる。
プライベートメモリを除去するために、空きページリストと同様のページフレーム番号の除去ページリストが、メモリからの除去をサポートするために確立される。ページをオンラインで除去できないことが任意の時間に決定された場合には、システムを遮断することができ、ページをコンソールソフトウェアで非所有と構成することができ、そしてオペレーティングシステムインスタンスを再スタートすることができる。コンソールがその範囲内の幾つかの又は全てのページを使用する場合に、コンソールは、それ自身を異なる組のページへと再配置する。この再配置は、多数の方法で行うことができる。例えば、コンソールは、そのページを、区画により所有される別の種類のページへコピーし、次いで、他のページでの実行を開始することができる。或いは又、別の区画内の別のコンソールが区画を分解し、ページの範囲を「非所有」に再指定し、次いで、メモリを伴わずに区画を再形成することができる。更に、全システムを遮断し、メモリを除去しそしてシステムを再スタートすることができる。除去動作は、ページを除去ページリストから空き、ゼロ化又は不良ページリストへ移動することによりいつでも断念することができる。
除去されるべきページの範囲がプライベートメモリの場合には、全てのページを除去できるか又は除去オペレーションを断念するまで、次の段階が繰り返される。このプロセスが図３３Ａ−３３Ｂに示されている。図３３Ａ−３３Ｂのフローチャートに示されたプロセスに入る前に、メモリの除去を許すに充分なメモリがあるかどうか決定される。容易に使用できる予備メモリの量を指示するためにシステムパラメータ即ち流動的ページカウントが通常使用される。この流動的ページカウントが低過ぎ、即ち除去を受け入れるに充分な流動的ページがシステムにない場合には、ユーザにエラーが返送され、さもなくば、除去されるべき範囲の各ページが図３３Ａ−３３Ｂに示すステップで説明するように検査される。
【０２３６】
このプロセスはステップ３３００で始まり、そしてそこからステップ３３０２へ進み、そこで、除去されるべきページ範囲内の第１の非除去ページが探索される。ステップ３３０２から、プロセスはステップ３３０４へ進み、そこで、除去されるべきページ（１つ又は複数）が保留中の入力／出力オペレーションを有し且つこれらのページがスキップされるかどうか決定され、即ちそれらのオペレーションが完了すると、それらのページを除去に対して再考慮することができる。ページが保留中のＩ／Ｏを有する場合には、オペレーションがステップ３３０２へ復帰し、そこで、第１の非除去ページが探索され、そしてそこから上記のようにステップ３３０４へ進む。システムが他の作業を実行できるように、システムは、この点においてストールし、Ｉ／Ｏが完了するのを待機するよう希望する。
【０２３７】
現在の非除去ページが保留中のＩ／Ｏを有していない場合には、プロセスは、ステップ３３０４からステップ３３０６へ進み、そこで、ページが空きページリストにあるか、ゼロ化ページリストにあるか、非テストページリストにあるか、又は不良ページリストにあるかを決定する。メモリページのいずれかがこれらリストのいずれかにある場合には、ステップ３３０８においてリストからページが除去されそして除去ページリストに入れられる。空きページは、再構成される範囲の一部分でもある空きページへコピーページがコピーされないように、最初に処理される。ステップ３３０８から、プロセスはステップ３３２６へ進み、そこで、全てのページが除去ページリストに入れられたかどうか決定され、そしてもしそうであれば、プロセスはステップ３３２８で終了となる。一方、全てのページが除去ページリストに入れられない場合には、プロセスはステップ３３０２へ戻り、そしてそこから上記のように進む。もし所望ならば、永久的なループ動作を回避するために、繰り返しの数を制限しそしてエラー回復メカニズムを実行するように選択することもできる。
【０２３８】
空き、ゼロ化、非テスト又は不良ページリストにページがない場合には、プロセスはステップ３３０６からステップ３３１０へ進み、そこで、変更ページリストにページがあるかどうか決定される。変更ページリストにページがない場合には、プロセスはステップ３３１４へ進む。一方、変更ページリストにページがある場合には、プロセスはステップ３３１２へ進み、そこで、ページがシステムページファイルのような補助記憶部に書き込まれる。ステップ３３１２から、プロセスはステップ３３２６へ進み、そしてそこから上記のように進む。一方、プロセスがステップ３３１０からステップ３３１４へ進んだ場合には、ステップ３３１４において、いずれかのページがプロセスページであるかどうか、即ちアプリケーションが実行されるページであるかどうか決定される。各プロセスは、多数のスレッドを有するので、各プロセスは、他のプロセスから離れたそれ自身のページテーブルを有する。いずれかのページがプロセスページである場合には、プロセスページテーブルへのアクセスを得るためにプロセスのコンテクスト内で実行するメカニズムを与えるＡＳＴがプロセスに送られ、このＡＳＴは、ページテーブルへのアクセスを同期させるために必要に応じてプロセスを単一スレッドにセットする。ページには新たなページフレーム番号が割り当てられ、そしてページの内容が新たなページフレーム番号にコピーされる。古いページフレーム番号は、ステップ３３１６においてインスタンスの除去ページリストに入れられる。ステップ３３１６から、プロセスはステップ３３２６へ進み、そしてそこから、上記のように進む。
【０２３９】
ステップ３３１４において、どのページもプロセスページでないことが決定された場合には、プロセスはステップ３３１８へ進み、そこで、いずれかのページが全体的区分の一部分であるかどうか、即ち多数のプロセスにより同時にアクセスされた１組のプライベートページであるかどうかが決定される。いずれかのページが全体的区分の一部分である場合には、プロセスはステップ３３１８からステップ３３２０へ進む。ステップ３３２０において、全体的区分の名前がユーザに表示され、従って、ユーザは、メモリを解放するためにどのアプリケーションを遮断すべきか決定することができる。或いは又、ページがどこにマップされるかを追跡することのできるオペレーティングシステムは、その区分にマップされた全てのプロセスを保留し、全てのページをコピーし、全てのプロセスページテーブルエントリーを変更し、そして古いページフレーム番号を除去ページリストに入れることができる。ステップ３３２０から、プロセスは、ステップ３３２６へ進み、そしてそこから上記のように進むことができる。ステップ３３１８において、全体的区分の一部分であるページがないことが決定された場合には、プロセスはステップ３３２２へ進み、そこで、いずれかのページがシステムアドレススペースにマップされるかどうか決定される。どのページもシステムアドレススペースにマップされない場合には、プロセスはステップ３３２２からステップ３３２６へ進み、そしてそこから上記のように進む。
【０２４０】
一方、システムアドレススペースへマップされるページがある場合には、プロセスはステップ３３２４へ進み、そこで読み取り専用のページがコピーされる。コピーされると、ページは除去ページリストに入れられる。読み取り／書き込みページは、インスタンス内の全てのＣＰＵが実行を一時的に阻止され、それらがページの内容を変更しない間だけ、コピーされる。一度に１ページがコピーされそしてコピーされたページが除去ページリストに入れられる。ステップ３３２４における移動の後に、プロセスはステップ３３２６へ進み、そしてそこから上記のように進む。
共用メモリを除去するために、ページフレーム番号の新たなリストが、各共用メモリ共通特性区画データ構造体内に確立され、即ちＡＰＭＰデータベース内の各ＳＨＭ  ＣＰＰ構造体内に確立される。このリストは、共通特性区画除去ページリストと称する。これらのリストは、除去される準備のできた全てのページの場所を一時的に保持する。８ＭＢ範囲内の全てのページが適当な除去ページリストに配置されたときだけ、ページを除去することができる。任意の時点に、共用セット（メモリのようなリソースを共用するインスタンスのセット）が動作する間にページが除去できないと決定された場合には、共用セットを分解し、ページを非所有とマークし、そして共用セットを再形成することができる。ページを、共通特性区画除去ページリストから、ページの手前の状態に基づいて空きページ又は不良ページリストへ移動し、即ちそれが空きページリストにあった場合には空きページリストへそして不良ページリストにあった場合には不良ページリストへ移動することにより、除去動作をいつでも断念することができる。
【０２４１】
共用メモリを除去するプロセスが図３４Ａ−３４Ｂのフローチャートに示されており、このプロセスはステップ３４００で始まり、そしてそこからステップ３４０２へ進み、除去されるべきページ範囲の第１の非除去ページが位置決めされる。ステップ３４０２から、プロセスはステップ３４０４へ進み、そこで、除去されるべきページ範囲内のいずれかのページが保留中のＩ／Ｏを有するかどうかが決定される。保留中のＩ／Ｏを有するページはスキップされ、そしてプロセスはステップ３４０２へ復帰し、上記のように第１の非除去ページが位置決めされる。システムが他の作業を行えるようにするために、システムはこの時点でストールし、Ｉ／Ｏの完了を待機する。
保留中のＩ／Ｏを有するページがない場合には、プロセスはステップ３４０４からステップ３４０６へ進み、そこで、いずれかのページがＡＰＭＰデータベースの一部分であるかどうかの決定がなされる。いずれかのページがＡＰＭＰデータベースの一部分である場合には、ステップ３４０８においてエラーがユーザへ返送される。このような場合には、異なるページにおいてＡＰＭＰデータベースで共用セットを再形成しなければならない。これは、共用セットを分解し、古いＡＰＭＰデータベースページを非所有とマークし、新たな組のＡＰＭＰデータベースページを選択し、次いで、共用セットを再形成することにより達成することができる。このプロセスは、ステップ３４０８から進み、ステップ３４３０において終了となる。
【０２４２】
これらのページを記述するページフレーム番号データベースエントリページはマップ解除されそして共通特性区画空きページリストへ解放され、共用メモリを記述するＰＭＡＰアレーは変化を反映するように更新され、そしてコンソールが呼び出されてページが非所有とマークされる。ステップ３４２８からプロセスはステップ３４３０へ進んで終了となる。ステップ３４２６において、共用メモリ共通特性区画除去ページリストに全てのページが存在しないとプロセスが決定すると、プロセスはステップ３４２６からステップ３４０２へ戻り、そしてそこから上記のように進む。ステップ３４０６において、どのページもＡＰＭＰデータベースの一部分でないとプロセスが決定すると、プロセスはステップ３４１０へ進み、そこで、いずれかのページが空き、不良又は非テストページリストにあるかどうか決定され、もしそうである場合には、ページが除去されそしてステップ３４１２において共通特性区画除去ページリストに入れられる。ステップ３４１２からプロセスはステップ３４２６へ進み、そしてそこから上記のように進む。
【０２４３】
ステップ３４１０において、どのページも空き、不良又は非テストページリストにないことが決定されると、プロセスはステップ３４１４へ進み、そこで、いずれかのページが共用メモリページフレーム番号データベースページであるかどうか決定され、そしてもしそうであれば、プロセスはステップ３４１６へ進む。ステップ３４１６において、ページの範囲が、共通特性区画除去ページリストにない共用メモリ共通特性区画内に残された唯一のページを含むと仮定すれば、共用メモリ共通特性区画がそのコミュニティから除去される。ステップ３４１６において、共用メモリ共通特性区画は無効とマークされ、従って、そこからページを割り当てる試みはなされない。共用メモリを記述するＰＭＡＰアレーは、メモリの除去を反映するように更新される。他の共用メモリＡＰＭＰデータベース構造体は、共用メモリ共通特性区画の除去を反映するように更新され、そしてコンソールが呼び出されて、ページが非所有とマークされる。或いは又、ＰＦＮデータベースページが、除去ページリストにない共用メモリ共通特性区画内に残された唯一のページでない場合には、ユーザにエラーが返送され、この場合には、ユーザは、共用セットを分解し、ページを非所有とマークし、そして共用セットを再形成することができる。これらのページをコピーするために、そのページを含む共用メモリ共通特性区画は、一時的に無効とマークされ、そしてＰＦＮデータベースページのマッピングは、読み取り専用とマークされる。次いで、あるインスタンスが共通特性区画から割り当てられた新たな組のページへそれらのページをコピーすることができる。次いで、全てのインスタンスは、それらのマッピングを古いページから新たなページへと変更し、そして古いページを共通特性区画除去ページリストに入れることができる。次いで、プロセスは、ステップ３４１６からステップ３４２６へ進み、そしてそこから上記のように進む。
【０２４４】
ステップ３４１４において、あるページが共用メモリページフレーム番号データベースページでないと決定された場合には、プロセスはステップ３４１８へ進み、そこで、いずれかのページが、システムスペースへマップされた共用メモリ領域の一部分であるかどうか決定され、もしそうであれば、プロセスはステップ３４２０へ進み、そこで、共用メモリ領域コールバックルーチンが呼び出され、除去されるべく使用されるメモリを含む。コールバックルーチンは、アプリケーションを遮断するか、又は新たな共用メモリ領域を形成して新たな領域を使用し始める。それとは別に、又はコールバックルーチンに関連して、コンソールを通して共用メモリ領域のタグを表示することができる。これは、共用メモリを使用しているアプリケーションを遮断するようにユーザが助成できるようにする。ステップ３４２０から、プロセスはステップ３４２６へ進み、そしてそこから上記のように進む。
【０２４５】
ステップ３４１８において、どのページも、システムスペースにマップされた共用メモリ領域の一部分でないことが決定されると、プロセスはステップ３４２２へ進み、そこで、いずれかのページが共用メモリの全体的区分の一部分であるかどうか、即ち１つ以上のプロセスのアドレススペースへの１組の共用ページマッピングであるかどうか、従って、全てのプロセスが同じページにアクセスできるかどうか決定される。共用メモリの全体的区分の一部分である幾つかのページが存在する場合には、プロセスはステップ３４２４へ進み、そこで、この全体的区分をマップした全てのインスタンスにおいてコールバックルーチンが呼び出される。全体的区分へマップされた全てのプロセスは保留することができ、このとき、コードは、１組のページから別の組へ全てのデータをコピーし、全てのプロセスページテーブルエントリを変更し、全体的区分のデータ構造体を変更し、そして古いページフレーム番号を共通特性区画除去ページリストに入れることができる。或いは又、全体的区分へマップする各プロセスは、遮断することが通知されるか、又は全体的区分の名前を表示して、除去オペレーションを助成するためにどのアプリケーションを遮断すべきかユーザが決定できるようにする。ステップ３４２４から、プロセスはステップ３４２６へ進み、そしてそこから上記のように進む。
【０２４６】
Ｉ／Ｏが共用メモリへと開始された場合に、共用メモリの全てのＩ／Ｏが完了するのを確かめるまでメモリが別の目的で再使用されないよう確保するために、Ｉ／Ｏデバイスは、Ｉ／Ｏが完了したときにインスタンスに割り込み、次いで、システムは、Ｉ／Ｏが完了したことを記録する。或いは又、インスタンスの区画内の全てのＩ／Ｏバスがリセットされたときに、Ｉ／Ｏが完了する。プライベートメモリにおけるＳＨＭ ＤＥＳＣ構造体では、Ｉ／Ｏ基準カウントを意味するＩ／Ｏｒｅｆｃｎｔと称するフィールドがある。共用メモリ領域当たりに１つのＳＨＭ ＤＥＳＣ構造体がある。
ＡＰＭＰデータベースにおけるＳＨＭ ＲＥＧ構造体では、「取り付けられたビットマスク」と称するビットマスクがある。共用メモリ領域当たり１つのＳＨＭ ＲＥＧ構造体がある。取り付けられたビットマスクは、ＡＰＭＰシステムの各インスタンス当たり１つのビットを含む。取り付けられたビットマスクのビットがセットされた場合には、対応するインスタンスが領域に取り付けられる。
【０２４７】
コンソールにより維持される構成ツリー構造体においては、コンソールコールバックルーチンを呼び出すことによりセット又はクリアすることのできる区画ノードにＩＤフィールドが存在する。区画のＩ／Ｏバスがリセットされた後のシステムブート中に、インスタンスの区画ノードにおけるこのフィールドがクリアされる。
共用セットがクリアされるときには、
１）このコミュニティ内の他の全てのインスタンスの区画ノードを通るループを形成する。
２）ＩＤフィールドが非ゼロであり、そして構成ツリー内に指示された区画において実行されるインスタンスがない場合には、その区画に接続された全てのＩ／Ｏバスをリセットする。
【０２４８】
３）このインスタンスの区画ノードにおけるＩＤフィールドをＩＤ（ＡＰＭＰデータベースが再形成されるたびに増加する数）にセットする。
インスタンスが共用セットに加わるときには、
１）インスタンスの区画ノードにおけるＩＤフィールドを現在ＩＤにセットする。
共用セットの退出中に、
１）全ての共用メモリ領域から取り外されるルーチンをコールする。
２）構成ツリーのインスタンス区画ノードにおけるＩＤフィールドをクリアする。
Ｉ／Ｏが開始されるときには、Ｉ／Ｏが実行される各ページに対してルーチンｓｈｉｍ ｒｅｇ ｉｎｃｒｅｆがコールされる。Ｉ／Ｏが完了したときに、各ページごとにルーチンｓｈｉｍ ｒｅｇ ｄｅｃｒｅｆがコールされる。
【０２４９】
0004634548.tif 000015
【０２５０】
0004634548.tif 000016
タグが、供給されたタグに合致するような共用メモリのＳＨＭ ＲＥＧ構造体をサーチする。
このようなＳＨＭ ＲＥＧ構造体が見つからない場合には、
−新たなＳＨＭ ＲＥＧ構造体を割り当てる。
【０２５１】
−ＳＨＭ ＲＥＧロックを得る。
−ＳＨＭ ＲＥＧ構造体の「init in progress」ビットをセットする。
−領域に対する共用メモリページを割り当てる。
−ＳＨＭ ＲＥＧ構造体の「init in progress」ビットをクリアする。
−ＳＨＭ ＲＥＧロックを解除する。
このインスタンスに対するＳＨＭ ＲＥＧ取付されたビットマスクのビットをセットする。
供給される仮想マッピング情報を用いて共用メモリ領域へマップする。
ルーチンｓｈｍ ｒｅｇ ｄｅｌａｔｅ：
入力：共用メモリ領域ｉｄ
この領域のプライベートメモリにおいてＳＨＭ ＤＥＳＣアドレスを得る。
【０２５２】
Ｉ／Ｏｒｅｆｃｎｔフィールドが非ゼロの場合には、エラーを返送する。
共用メモリ領域をマップ解除する。
この領域の共用メモリにおいてＳＨＭ ＲＥＧアドレスを得る。
このインスタンスのＳＨＭ ＲＥＧ取付されたビットマップにおいてビットをクリアする。
取り付けられたビットマスクが、セットされたビットをより多く有する場合には、復帰する。
ＳＨＭ ＲＥＧ取付されたビットマスクがセットされたビットをもたない場合には、
−ＳＨＭ ＲＥＧロックを得る。
【０２５３】
−ＳＨＭ ＲＥＧ構造体の「delete in progress」ビットをセットする。
−全ての共用メモリページを適当な共用メモリ空きページリストへ割り当て解除する。
−「delete in progress」ビットをクリアする。
−ＳＨＭ ＲＥＧロックを解除する。
−ＳＨＭ ＲＥＧデータ構造体をクリーンアップする。
システムクラッシュ中に：
全てのＩ／Ｏバスをリセットする。
インスタンスの区画ノードにおけるＩＤフィールドをクリアする。
別のインスタンスに割り込むシステムコードをコールし、インスタンスがクラッシュしたことを指示する（他のインスタンスの割り込みハンドラーは、ｓｈｍｅｍ ＡＰＭＰＤＢ ｒｅｃｏｖｅｒをコールする）。
【０２５４】
クラッシュダンプを開始する。
ハートビート監視中に：
インスタンスのハートがある時間中にビートしない場合に、インスタンスがデッドと宣言され、共用セットから除去される。
ＳＨＭ ＲＥＧ同期ロックを得、必要に応じてロックをブレークする。ロックがデッドインスタンスにより保持される場合には：
初期化が進行中であること又は領域が削除中であることをＳＨＭ ＲＥＧ構造体が指示する場合に、ｓｈｍ ｒｅｇ ｄｅｌｅｔｅをコールする。
ルーチンｓｈｍｅｍ ＡＰＭＰＤＢ ｒｅｃｏｖｅｒが他のインスタンスの少なくとも１つにおいてコールされる。この場合に、インスタンスの区画ノードのＩＤフィールドがクリアされる。
【０２５５】
0004634548.tif 000017
ＡＰＭＰデータベースにおいて全てのＳＨＭ ＲＥＧ構造体を通るループを形成する。
クラッシュインスタンスが領域に取り付けられた場合に、
１）インスタンスの区画ノードにおけるＩＤフィールドが非ゼロの場合には、これは、インスタンスが停止されたのであって、クラッシュされたのではないことを指示する。Ｉ／Ｏデバイスは、依然、共用メモリに書き込みする。
このインスタンスを取付状態にしそして共用メモリ領域をそのままにして次のＳＨＭ ＲＥＧ構造体へとループ形成する。インスタンスが共用セットに再び加わるときに、Ｉ／Ｏバスをリセットした後に、取り付けられたビットをクリアする。これは、共用メモリ領域が領域に取り付けられた最後のインスタンスである場合にそれを削除する。
【０２５６】
２）インスタンスの区画ノードにおけるＩＤフィールドがクリアの場合：
取り付けられたビットマスクにおいてインスタンスのビットをクリアする。
取り付けられたビットマスクが、セットされたビットをもたない場合：
ｓｈｍ ｒｅｇ ｄｅｌｅｔｅをコールする。
次のＳＨＭ ＲＥＧ構造体へループする。
全てのＳＨＭ ＲＥＧ構造体が処理された後に、更なる共用メモリ回復コードを実行する。
0004634548.tif 000018
【０２５７】
共用メモリにおけるＡＰＭＰデータベースへマップする。
他の共用メモリコミュニティ参加コードを実行する。
ＡＰＭＰデータベースにおける全てのＳＨＭ ＲＥＧ構造体を通るループを形成する。
このインスタンスが領域に取り付けられる場合には：
−取り付けられたビットマスクにおいてこのインスタンスのビットをクリアする。
取り付けられたビットマスクが、セットされたビットをそれ以上もたない場合には：
−ｓｈｍ ｒｅｇ ｄｅｌｅｔｅをコールする。
【０２５８】
次のＳＨＭ ＲＥＧ構造体へループする。
全てのＳＨＭ ＲＥＧ構造体が処理された後に、復帰する。
初期のＡＰＭＰデータベースページを選択するために、ルーチンｓｈｍｅｍ ｃｏｎｆｉｇ ＡＰＭＰＤＢは、ＡＰＭＰＤＢ ｍａｐ ｉｎｉｔｉａｌによってコールされて、ＡＰＭＰＤＢページの初期セットを選択する。
データ構造体：
構成ツリーにおけるコミュニティノードは、ＡＰＭＰＤＢ ＩＮＦＯと称する６４ビットフィールドを含み、これは、ＡＰＭＰＤＢページ情報を記憶するのに使用される。第１の３２ビットＡＰＭＰＤＢ ＩＮＦＯ〔３１：０〕は、ＡＰＭＰＤＢページの低ＰＦＮである。第２の３２ビットＡＰＭＰＤＢ ＩＮＦＯ〔６３：３２〕は、ＡＰＭＰＤＢページのページカウントである。
【０２５９】
各インスタンスは、「共用メモリアレー」と称するアレーをプライベートメモリに保持する。このアレーの各エレメントは、共用メモリＰＦＮ及びページカウントを含む。全アレーは、このインスタンスが一部分であるところのコミュニティが所有する全ての共用メモリを記述する。
構成ツリーは、共用メモリに対するテストされたメモリビットマップを含む。
構成ツリーがある範囲のメモリに対してビットマップを含まない場合には、メモリがテストされそしてそれが良好となる。ある範囲のメモリに対してビットマップが存在する場合には、ビットマップの各ビットは、共用メモリのページが良好であるか不良であるかを指示する。
ＭＡＸ ＡＰＭＰＤＢ ＰＡＧＥＳの値は、システムを初期化するのに必要なページの最大数にセットされる。この数は、共用メモリの粒度より小さくなければならない。ＭＡＸ ＡＰＭＰＤＢ ＰＡＧＥＳは、ＡＰＭＰデータベースの初期化に対して隣接する良好なメモリが見つかる機会を高めるためには、小さい数でなければならない。
【０２６０】
0004634548.tif 000019
このルーチンは、構成ツリーの多数のコピーがコンソールによって維持される場合には更に複雑になる。
【０２６１】
１．コミュニティノードからＡＰＭＰＤＢ ＩＮＦＯを読み取る。
２．ＡＰＭＰＤＢ ＩＮＦＯがｏｌｄ ＡＰＭＰＤＢ ｉｎｆｏに等しくない場合には、エラーを返送する。
３．ｎｅｗ ＡＰＭＰＤＢ ＩＮＦＯを原子的命令でＡＰＭＰＤＢ ＩＮＦＯへ記憶する。
ルーチンＳＨＭＥＭ ｃｏｎｆｉｇ ＡＰＭＰＤＢは、ＡＰＭＰデータベースを構成するのに使用される。ルーチンは、第１のＡＰＭＰデータベースページフレーム番号と、ＡＰＭＰデータベースに対して指定されたページ数とを与える。
このルーチンは、次のように進行する。
（１）構成ツリー内のコミュニティノードを指すポインタを得る。
【０２６２】
（２）構成ツリーを横切って共用メモリアレーを形成する。共用メモリが存在しない場合には、エラーを返送する。
（３）ＡＰＭＰＤＢ ＩＮＦＯフィールドを読み取る。
（４）ＡＰＭＰＤＢ ＩＮＦＯフィールドが非ゼロの場合には、
ＰＡＧＥＳをＡＰＭＰＤＢ ＩＮＦＯにセットする。
共用メモリアレーをサーチして、ページＰＦＮないしＰＦＮ＋ＰＡＧＥＳ−１が共用メモリにあることを確保する。
これらのページが共用メモリアレーにある場合には：
テストされるメモリビットマップが存在すれば、ビットマップをチェックして、これらページが不良とマークされないよう確保する。
【０２６３】
全てのページが良好であれば、ｓｅｔ ＡＰＭＰＤＢ ＩＮＦＯをコールして、ＰＦＮ及びＰＡＧＥＳをＡＰＭＰＤＢ ＩＮＦＯフィールドに書き込む。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯがエラーを返送する場合は、上記（２）に復帰する。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯが成功を返送する場合には、ＰＦＮ及びＰＡＧＥＳを発呼者に返送する。
いずれかのページが共用メモリにないか又は不良である場合には、
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯをコールして、ＡＰＭＰＤＢ ＩＮＦＯフィールドをクリアする。
【０２６４】
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯがエラーを返送する場合は、上記（２）に復帰する。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯが成功を返送する場合には、新たなＡＰＭＰＤＢページを選択するために（５）へ進む。
（５）ＰＡＧＥＳをＭＡＸ ＡＰＭＰＤＢ ＰＡＧＥＳにセットする。
（６）共用メモリアレーを通るループを形成する。アレーの各エレメントに対し、
(6.1)ＰＦＮをその範囲の最小共用メモリＰＦＮにセットする。
(6.2)テストされたメモリビットマップが存在する場合には、ビットマップをチェックして、これらのページが不良とマークされないように確保する。
【０２６５】
(6.3)全てのページが良好な場合には、
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯをコールして、ＰＦＮページをＡＰＭＰＤＢフィールドに書き込む。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯがエラーを返送する場合は、上記（２）に復帰する。
ＳＥＴ ＡＰＭＰＤＢ ＩＮＦＯが成功を返送する場合には、ＰＦＮ及びＰＡＧＥＳを発呼者へ返送する。
(6.4)範囲内で不良ページに遭遇した場合には、
ＰＦＮを最も高い番号の不良ＰＦＮ＋１にセットする。
ＰＦＮ＋ＰＡＧＥＳ−１が依然共用メモリアレーエレメント内にある場合には、 (6.2)へ復帰する。
【０２６６】
ＰＦＮ＋ＰＡＧＥＳ−１がこの共用メモリアレーエレメントにより示された範囲より大きい場合には、次の共用メモリアレーエレメントへ移動する。
(6.5)共用メモリアレーエレメントが残されていない場合には、エラーを返送する。
例示的なページフレーム番号データベースレイアウトが図１１のメモリマップにより示されている。この説明上の例では、システムは、６４メガバイトのプライベートメモリ及び６４メガバイトの共用メモリを各々含む２つのインスタンスＡ及びＢを備えている。メモリは、８キロバイトページとして構成され、インスタンスＡのプライベートメモリは、ページフレーム番号（ＰＦＮ）０からＰＦＮ１ＢＦＦ（１６進）へと延びる。６４メガバイトの共用メモリは、ＰＦＮ２０００からＰＦＮ３ＦＦＦまで延びる。インスタンスＢのプライベートメモリは、ＰＦＮ８０００００からＰＦＮ８０１ＦＦＦまで延びる。インスタンスＡのＰＦＮデータベースを保持するのに使用されるメモリは、インスタンスＡのプライベートメモリから到来し（０−１ＦＦＦ）、インスタンスＢのＰＦＮデータベースを保持するのに使用されるメモリは、インスタンスＢのプライベートメモリから到来し（２０００−３ＦＦＦ）、そして共用メモリのＰＦＮデータベースを保持するのに使用されるメモリは、共用メモリから到来する（８０００００−８０１ＦＦＦ）。インスタンスＡは、インスタンスＢのメモリに対するＰＦＮデータベースエントリにアクセスすることができない。というのは、図示されたように、このメモリ領域がインスタンスＡのシステムスペースへとマップされないからである。同様に、インスタンスＢは、インスタンスＡのメモリに対するＰＦＮデータベースエントリにアクセスすることができない。というのは、このメモリ領域がインスタンスＢのシステムスペースへとマップされないからである。インスタンスＡ及びＢの両方は、共用ページを共用メモリのためのＰＦＮデータベースエントリへとマップする。インスタンスは、プライベートメモリページテーブルで共用ページへマップする。というのは、プライベートメモリ及び共用メモリのＰＦＮデータベースエントリは、同じページテーブルのページによってマップされるからである。上記のように、物理的メモリの粒度は、ＰＦＮデータベースのエントリサイズ及びメモリページサイズの最小公倍数として選択される。ここに示す例では、メモリページサイズは８キロバイトであり、そして物理的メモリの粒度は、ページサイズを平方して８（バイト）で分割したもの即ち８ＭＢに等しい。１６、３２及び６４ＫＢのページサイズは、各々、３２、１２８及び５１２ＭＢの物理的メモリ粒度を形成する。
【０２６７】
Ｌ．マルチプロセッサシステムにおける共用メモリ領域の回復（図１９−２１）
本発明の更に別の特徴によれば、オペレーティングシステムの多数のインスタンスは、全てのプロセッサ及びリソースが電気的に互いに接続された単一のマルチプロセッサコンピュータにおいて協働して実行される。多数の物理的プロセッサ及びリソースをもつ単一の物理的マシンは、ソフトウェアにより適応式に多数の区画に細分化され、その各々は、オペレーティングシステムの個別のコピー又はインスタンスを実行する能力を有する。各区画は、それ自身の物理的リソース及び共用と指示されたリソースにアクセスする。１つの実施形態によれば、リソースの区画化は、ある構成内にリソースを指定することにより実行される。
【０２６８】
より詳細には、ソフトウェアは、ＣＰＵ、メモリ及びＩ／Ｏポートを一緒に指定することによりそれらを論理的及び適応式に区画化する。次いで、オペレーティングシステムのインスタンスが区画にロードされる。異なる時間に、異なるオペレーティングシステムインスタンスが所与の区画にロードされる。システムマネージャーが指令するこの区画化は、ソフトウェア機能であり、ハードウェアの境界は必要とされない。各個々のインスタンスは、それが独立して実行するのに必要なリソースを有する。ＣＰＵ及びメモリのようなリソースは、異なる区画に動的に指定することができ、そして構成を変更することによりマシン内で実行されるオペレーティングシステムのインスタンスによって使用することができる。区画それ自身も、構成ツリーを変更することによりシステムを再ブートすることなく変更することができる。これにより得られる適応式に区画化されたマルチプロセッサ（ＡＰＭＰ）システムは、拡張性、柔軟性及び高い性能を示す。
【０２６９】
メモリは、ソフトウェア制御のもとで区画又はコミュニティへ或いはそこから再構成することができ、そしてハードウェアホットインスワッピング又はアウトスワッピングがサポートされる。一般に、メモリは、プライベート、共用又は非所有の３つの状態の１つにある。メモリは、それが単一のシステム区画によって「所有」される場合にプライベートである。メモリは、それがコミュニティによって所有される場合に共用である。コミュニティ又は共用セットは、リソースを共用する１つ以上の区画の集合である。さもなくば、非所有である。メモリは、３つのいずれかの状態の間で直接再構成することができる。例えば、メモリは、ある区画のプライベートから別の区画のプライベートへ、又はコミュニティにおける共用からある区画のプライベートへと再構成することができる。メモリは、これをアウトスワップ又はインスワップできる前に、オペレーティングシステムインスタンス及びコンソールソフトウェアによって非所有状態に入れられ、これはシステム構成ツリーに反映される。ページフレーム番号データベースは、インスワップすることのできる全ての考えられるメモリを含むサイズにされ、そして追加されるメモリページは、ページフレーム番号データベースエントリーページとして使用することができる。従って、新たなメモリを容易に受け入れることができる。上記のように、メモリをアウトスワップするためには、メモリが非所有状態になければならない。アウトスワップされるべきメモリが共用状態又はプライベート状態にある場合は、アウトスワッピングを許すためにそれが非所有状態に入れられる。
【０２７０】
インスタンスは、共用メモリであるところの特性を領域に指定することにより共用メモリの領域を形成することができる。共用メモリの領域は、形成インスタンスと同じ共用セット内のいかなるインスタンスに取り付けることもできる。あるインスタンスが共用メモリ領域に取り付けられそしてフェイルした場合には、その後のシステム使用に対して共用メモリページが得られるよう確保するためにメモリが回復される。インスタンスの欠陥は、説明上、長い時間周期にわたってインスタンスが動作停止したり、インスタンスがクラッシュしたり、又はその他インスタンスが非応答になったりすることにより明らかになる。インスタンスが共用メモリ領域に取り付けられそしてフェイルした場合には、共用セットの別のインスタンスが、そのフェイルしたインスタンスがもはや共用メモリ領域に取り付けられないことを指示することにより、共用メモリ領域を回復する。フェイルするインスタンスが共用メモリ領域の同期ロックを保持しそして共用メモリ領域を初期化又は削除している場合には、その領域内の共用メモリページを解放することにより共用メモリ領域が回復される。同様に、フェイルするインスタンスが共用メモリ領域に取り付けられた唯一のインスタンスである場合にも、その領域内の共用メモリページを解放することにより共用メモリ領域が回復される。インスタンスがフェイルするときに共用セット内に他のインスタンスがない場合は、共用セットが後で再形成されたときに共用メモリページが自動的に回復される。入力／出力（Ｉ／Ｏ）がインスタンスのフェイル中に共用メモリ領域内のいずれかのページへ進行中である場合には、その影響を受ける共用メモリ領域内の共用メモリページが、別の共用メモリ領域による解放及び再使用を、それが安全に行われるまで受けないよう確保することにより、共用メモリ回復メカニズムが共用メモリの崩壊を防止する。
上記実施形態のソフトウェア実施体は、コンピュータ読み取り可能な媒体のような有形媒体、例えば、図１のディスケット１４２、ＣＤ−ＲＯＭ１４７、ＲＯＭ１１５又は固定ディスク１５２に固定されるか、或いは媒体１９１を経てネットワーク１９５に接続された通信アダプタ１９０のようなモデム又は他のインターフェイスデバイスを介してコンピュータシステムに送信可能な一連のコンピュータ命令より成る。媒体１９１は、光学又はアナログ通信ラインを含む（これに限定されないが）有形媒体であってもよいし、或いはマイクロ波、赤外線又は他の送信技術を含む（これに限定されないが）ワイヤレス技術で実施することもできる。これはインターネットであってもよい。一連のコンピュータ命令は、本発明に関して既に述べた機能の全部又は一部分を実施する。当業者であれば、このようなコンピュータ命令は、多数のコンピュータアーキテクチャー又はオペレーティングシステムと共に使用される多数のプログラミング言語で書き込めることが明らかであろう。更に、このような命令は、半導体、磁界、光学又は他のメモリデバイスを含む（これに限定されないが）現在又は将来のメモリ技術を用いて記憶することもできるし、或いは光学、赤外線、マイクロ波又は他の送信技術を含む（これに限定されないが）現在又は将来の通信技術を用いて送信することもできる。このようなコンピュータプログラム製品は、印刷物又は電子的ドキュメンテーションを付随する取り外し可能な媒体、例えば、収縮包装されたソフトウェアとして配布されるか、又はコンピュータシステムで例えばシステムＲＯＭ又は固定ディスクに予めロードされるか、或いはサーバーや電子ブルティンボードからネットワーク例えばインターネット又はワールドワイドウェブを経て配布されることが意図される。
【０２７１】
以上、本発明の実施形態を詳細に説明したが、本発明の精神及び範囲から逸脱せずに種々の変更及び修正を行っても本発明の幾つかの効果が達成されることが当業者に明らかであろう。例えば、上記の説明は、特定のハードウェアシステム及びオペレーティングシステムに向けられたが、他のハードウェア及びオペレーティングシステムソフトウェアを上記と同様に使用することもできる。特定の機能を達成するのに使用される特定の命令のような他の特徴、並びに本発明の概念に対する他の変更は、特許請求の範囲によって包含されるものとする。
【図面の簡単な説明】
【図１】多数のシステムビルディングブロックを示したハードウェアプラットホームの概略ブロック図である。
【図２】本発明の原理に基づいて構成されたＡＰＭＰコンピュータシステムの概略図であって、多数の区画を示す図である。
【図３】ハードウェアリソース構成及びソフトウェア構成、並びにそれらの構成要素を子供及び兄弟ポインタと共に示す構成ツリーの概略図である。
【図４】所有権ポインタによりソフトウェアインスタンスへのハードウェアの指定を示すように再構成した図３の構成ツリーの概略図である。
【図５】本発明の原理に基づいてＡＰＭＰコンピュータシステムを形成するための例示的ルーチンにおける段階を示すフローチャートである。
【図６】ＡＰＭＰシステム及びその構成に関連した情報を維持するＡＰＭＰシステムマネージメントデータベースのエントリを形成するための例示的ルーチンにおける段階を示すフローチャートである。
【図７Ａ】本発明の原理基づいてＡＰＭＰコンピュータシステムを形成するための例示的ルーチンにおける段階を示すフローチャートの一部分である。
【図７Ｂ】本発明の原理基づいてＡＰＭＰコンピュータシステムを形成するための例示的ルーチンにおける段階を示すフローチャートの一部分である。
【図８Ａ】既に形成されたＡＰＭＰコンピュータシステムに加わるためにオペレーティングシステムインスタンスがたどる例示的ルーチンにおける段階を示すフローチャートの一部分である。
【図８Ｂ】既に形成されたＡＰＭＰコンピュータシステムに加わるためにオペレーティングシステムインスタンスがたどる例示的ルーチンにおける段階を示すフローチャートの一部分である。
【図９】１つの区画から別の区画へリソースを移動する段階を一般的に示す図である。
【図１０Ａ】１つの区画から別の区画へリソースを移動する段階をグラフ的に示すブロック図である。
【図１０Ｂ】１つの区画から別の区画へリソースを移動する段階をグラフ的に示すブロック図である。
【図１０Ｃ】１つの区画から別の区画へリソースを移動する段階をグラフ的に示すブロック図である。
【図１０Ｄ】１つの区画から別の区画へリソースを移動する段階をグラフ的に示すブロック図である。
【図１０Ｅ】１つの区画から別の区画へリソースを移動する段階をグラフ的に示すブロック図である。
【図１１】本発明のシステム全体を示すブロック回路図である。
【図１２】何も共用しないコンピュータシステムとして動作する本発明のコンピュータシステムのブロック回路図である。
【図１３】部分的に共用するコンピュータシステムとして動作する本発明のコンピュータシステムのブロック回路図である。
【図１４】全てを共用するコンピュータシステムとして動作する本発明のコンピュータシステムのブロック回路図である。
【図１５】本発明のコンピュータシステムにおいてＣＰＵの移動を示すブロック回路図である。
【図１６】本発明のコンピュータシステムの多数の各区画において実行されるインスタンスにより使用されるＣＰＵセットを示すと共に、これらのインスタンスに対するシステムのＣＰＵの分類を示す図である。
【図１７】システムのどのＣＰＵが区画において実行されるインスタンスの種々のセットにあるかを示すのに使用される区画及び１組のメモリ位置を示す概略図である。
【図１８】図１７と同様であるが、本発明の別の実施形態に対する付加的な組を示す図である。
【図１９】システムからプライベートメモリを除去するときにオペレーティングシステムインスタンスがたどるルーチンの段階を例示するフローチャートである。
【図２０】システムから共用メモリを除去するときにオペレーティングシステムインスタンスがたどるルーチンの段階を例示するフローチャートである。
【図２１】本発明によるＰＦＮデータベースのメモリマップを示す図である。
【図２２Ａ】「ＰＡＬ」型移動のもとである区画から別の区画へ移動するＣＰＵがたどるルーチンの段階を例示するフローチャートである。
【図２２Ｂ】「ＰＡＬ」型移動のもとである区画から別の区画へ移動するＣＰＵがたどるルーチンの段階を例示するフローチャートである。
【図２３】ＣＰＵが移動するところの区画においてソフトウェアがたどるルーチンの段階を例示するフローチャートである。
【図２４】第１区画と、第１区画内に欠陥が生じた際に第１区画のリソースが移動されるバックアップ区画とを示す図である。
【図２５】ローカルインスタンスに欠陥が生じたときに制御遮断の一部分として区画から移動されるリソースの行先区画を決定するためにローカルインスタンスによって使用されるターゲットインスタンスＩＤのアレーを示す図である。
【図２６Ａ】第１区画のインスタンスに欠陥が生じた後にリソースを再配置するためにたどる一般的手順を示すフローチャートである。
【図２６Ｂ】第１区画のインスタンスに欠陥が生じた後にリソースを再配置するためにたどる一般的手順を示すフローチャートである。
【図２７】欠陥が生じたインスタンスから移動するＣＰＵがたどる手順を示すフローチャートである。
【図２８】本発明のＣＰＵの永久所有権の初期指定中にたどる段階を示すフローチャートである。
【図２９】本発明のＣＰＵの永久所有権の変更中にたどる段階を示すフローチャートである。
【図３０Ａ】ＣＰＵが「ＨＡＬＴ」型移動のもとで移動するときにシステムがたどるルーチンの段階を例示するフローチャートである。
【図３０Ｂ】ＣＰＵが「ＨＡＬＴ」型移動のもとで移動するときにシステムがたどるルーチンの段階を例示するフローチャートである。
【図３０Ｃ】ＣＰＵが「ＨＡＬＴ」型移動のもとで移動するときにシステムがたどるルーチンの段階を例示するフローチャートである。
【図３１】停止状態にあるＣＰＵが移動するときにシステムがたどるルーチンの段階を例示するフローチャートである。
【図３２Ａ】指定解除した後に再指定することによりＣＰＵが移動されるときにシステムがたどるルーチンの段階を例示するフローチャートである。
【図３２Ｂ】指定解除した後に再指定することによりＣＰＵが移動されるときにシステムがたどるルーチンの段階を例示するフローチャートである。
【図３３Ａ】単一ビット通知を用いて１つのインスタンスから他のインスタンスへ通信するために２つのオペレーティングシステムがたどるルーチンの段階を例示するフローチャートである。
【図３３Ｂ】単一ビット通知を用いて１つのインスタンスから他のインスタンスへ通信するために２つのオペレーティングシステムがたどるルーチンの段階を例示するフローチャートである。
【図３４Ａ】パケット化データ転送を使用して１つのインスタンスから他のインスタンスへ通信するために２つのオペレーティングシステムがたどるルーチンの段階を例示するフローチャートである。
【図３４Ｂ】パケット化データ転送を使用して１つのインスタンスから他のインスタンスへ通信するために２つのオペレーティングシステムがたどるルーチンの段階を例示するフローチャートである。
【符号の説明】
１００−１０６  システムビルディングブロック（ＳＢＢ）
１０８−１１４  ＣＰＵ
１１６  ポート
１１８  Ｉ／Ｏプロセッサ
１２０  メモリスロット
２００  ＡＰＭＰコンピュータシステム
２０２、２０４、２０６  区画
２０８、２１０、２１２  オペレーティングシステムインスタンス
２１３、２１５、２１７  コンソールプログラム
２３０  コミュニティ
３００  構成ツリー
１０００  区画１
１００２  区画２
１００６  コンソール１
１０１６  コンソール２
１００８  オペレーティングシステムインスタンス１
１０１０、１０２４  リソース
１０１２  構成ツリー
１０１８  オペレーティングシステムインスタンス２
【図１】
0004634548.tif 000020
【図２】
0004634548.tif 000021
【図３】
0004634548.tif 000022
【図４】
0004634548.tif 000023
【図５】
0004634548.tif 000024
【図６】
0004634548.tif 000025
【図７Ａ】
0004634548.tif 000026
【図７Ｂ】
0004634548.tif 000027
【図８Ａ】
0004634548.tif 000028
【図８Ｂ】
0004634548.tif 000029
【図９】
0004634548.tif 000030
【図１０Ａ】
0004634548.tif 000031
【図１０Ｂ】
0004634548.tif 000032
【図１０Ｃ】
0004634548.tif 000033
【図１０Ｄ】
0004634548.tif 000034
【図１０Ｅ】
0004634548.tif 000035
【図１１】
0004634548.tif 000036
【図１２】
0004634548.tif 000037
【図１３】
0004634548.tif 000038
【図１４】
0004634548.tif 000039
【図１５】
0004634548.tif 000040
【図１６】
0004634548.tif 000041
【図１７】
0004634548.tif 000042
【図１８】
0004634548.tif 000043
【図１９】
0004634548.tif 000044
【図２０】
0004634548.tif 000045
【図２１】
0004634548.tif 000046
【図２２Ａ】
0004634548.tif 000047
【図２２Ｂ】
0004634548.tif 000048
【図２３】
0004634548.tif 000049
【図２４】
0004634548.tif 000050
【図２５】
0004634548.tif 000051
【図２６Ａ】
0004634548.tif 000052
【図２６Ｂ】
0004634548.tif 000053
【図２７】
0004634548.tif 000054
【図２８】
0004634548.tif 000055
【図２９】
0004634548.tif 000056
【図３０Ａ】
0004634548.tif 000057
【図３０Ｂ】
0004634548.tif 000058
【図３０Ｃ】
0004634548.tif 000059
【図３１】
0004634548.tif 000060
【図３２Ａ】
0004634548.tif 000061
【図３２Ｂ】
0004634548.tif 000062
【図３３Ａ】
0004634548.tif 000063
【図３３Ｂ】
0004634548.tif 000064
【図３４Ａ】
0004634548.tif 000065
【図３４Ｂ】
0004634548.tif 000066