(57)【要約】【課題】  永久メモリを使用して、改良されたコンピュータシステムを提供する。【解決手段】  通信システムを介して少なくとも１つのクライアントプロセッサノードに通信可能に結合された一次ネットワーク永久メモリユニット（ｎＰＭＵ）の予め規定された部分に対応する一次領域であって、クライアントノード上で実行中のクライアントプロセスに割り当てられ、クライアントプロセスから受け取った情報を記憶するように構成される一次領域、および通信システムを介してクライアントプロセッサノードに通信可能に結合されたミラーｎＰＭＵの予め規定された部分に対応するミラー領域であって、クライアントプロセスに割り当てられ、クライアントプロセスから受け取った情報を記憶するように構成されるミラー領域を備える。【選択図】図１
2005276208.tif 000002
【特許請求の範囲】
【請求項１】
永久(persistent)メモリアクセスシステム（１００）であって、
通信システム（１０６）を介して少なくとも１つのクライアントプロセッサノード（８１０）に通信可能に結合された一次ネットワーク永久メモリユニット（ｎＰＭＵ）（８０２）の予め規定された部分に対応する一次領域であって、前記クライアントプロセッサノード（８１０）上で実行中のクライアントプロセス（１１２）に割り当てられ、前記クライアントプロセス（１１２）から受け取った情報を記憶するように構成される一次領域と、
前記通信システム（１０６）を介して前記クライアントプロセッサノード（８１０）に通信可能に結合されたミラーｎＰＭＵ（８０４）の予め規定された部分に対応するミラー領域であって、前記クライアントプロセス（１１２）に割り当てられ、前記クライアントプロセス（１１２）から受け取った前記情報を記憶するように構成されるミラー領域と
を備え、
前記一次ｎＰＭＵ（８０２）および前記ミラーｎＰＭＵ（８０４）は物理的に別個のユニットであり、別個のフォールトドメインを特徴とする
永久メモリアクセスシステム。
【請求項２】
前記一次領域は、
前記情報が前記一次領域に記憶される複数の物理ロケーションに対応する複数の一次仮想アドレス
を含み、
前記ミラー領域は、前記情報が前記ミラー領域に記憶される別の複数の物理ロケーションに対応する複数のミラー仮想アドレス
を含む
請求項１記載の永久メモリアクセスシステム。
【請求項３】
前記一次ｎＰＭＵ（８０２）は、前記情報に関連する前記一次仮想アドレスの１つと対応するクライアントアドレスの間で変換を行うように構成され、
前記ミラーｎＰＭＵ（８０４）は、前記情報に関連する前記ミラー仮想アドレスの１つと前記対応するクライアントアドレスの間で変換を行うように構成される
請求項２記載の永久メモリアクセスシステム。
【請求項４】
ベースポインタ（１１８）
をさらに備え、
該ベースポインタ（１１８）は、前記一次ｎＰＭＵ（８０２）が変換する前記一次仮想アドレスと前記対応するクライアントアドアレスの差に対応し、
該ベースポインタ（１１８）は、前記ミラーｎＰＭＵ（８０４）が変換する前記ミラー仮想アドレスと前記対応するクライアントアドレスの差にさらに対応する
請求項３記載の永久メモリアクセスシステム。
【請求項５】
前記通信システムを介して、前記クライアントプロセッサノード（８１０）に、通信可能に結合された永久メモリマネージャ（ＰＭＭ）（８２２）
をさらに備え、
該ＰＭＭ（８２２）は、
前記クライアントプロセス（１１２）からの永久メモリ割り当て要求に応答し、
前記一次ｎＰＭＵ（８０２）に、前記一次領域を作成させ、
前記ミラーｎＰＭＵ（８０４）に、前記ミラー領域を作成させる
請求項１記載の永久メモリアクセスシステム。
【請求項６】
一次ネットワーク永久メモリユニット（ｎＰＭＵ）（８０２）およびミラーｎＰＭＵ（８０４）における永久メモリに直接アクセスする方法であって、
前記一次ｎＰＭＵ（８０２）におけるメモリの一部に対応する、前記一次ｎＰＭＵ（８０２）における第１の領域を割り振ることと、
前記ミラーｎＰＭＵ（８０４）におけるメモリの一部に対応する、前記ミラーｎＰＭＵ（８０４）における第２の領域を割り振ることと、
前記第１の領域および前記第２の領域に対応する領域情報を求めることと、
該求められた領域情報をメタデータとして、前記一次ｎＰＭＵ（８０２）における第１のメタデータ領域（９０２）および前記ミラーｎＰＭＵ（８０４）における第２のメタデータ領域（９０２）に記憶することと
を含む永久メモリに直接アクセスする方法。
【請求項７】
クライアントプロセス（１１２）から、前記永久メモリにアクセスする初期要求を受け取ることと、
前記割り振ることと、前記求めることと、前記記憶すること行う前に、前記第１の領域および前記第２の領域を作成することと
をさらに含む請求項６記載の永久メモリに直接アクセスする方法。
【請求項８】
前記クライアントプロセス（１１２）から、前記永久メモリにアクセスする後続要求を受け取ることと、
前記第１の領域および前記第２の領域を開くことと、
前記クライアントプロセス（１１２）から通信される前記永久メモリに対する書き込み要求を受け取ることと、
前記永久メモリに記憶すべき情報を受け取ることと、
前記情報を前記第１の領域に記憶することと、
前記情報を前記第２の領域に記憶することと
をさらに含む請求項６記載の永久メモリに直接アクセスする方法。
【請求項９】
クライアントプロセス（１１２）から、前記永久メモリにアクセスする後続要求を受け取ることと、
前記第１の領域および前記第２の領域を開くことと、
前記クライアントプロセス（１１２）から通信される前記永久メモリに対する読み取り要求を受け取ることと、
前記情報が前記第１の領域に記憶されている第１の物理アドレスに対応する少なくとも１つの仮想アドレス、および、前記情報が前記第２の領域に記憶されている第２の物理アドレスに対応する少なくとも１つの仮想アドレスを指定する領域情報に基づいて、前記永久メモリに記憶されている情報を検索することと、
該永久メモリから検索された情報を前記クライアントプロセスに通信することと
をさらに含む請求項６記載の永久メモリに直接アクセスする方法。
【請求項１０】
クライアントプロセッサノード（８１０）により永久メモリシステム（１００）にアクセスするシステムであって、
前記永久メモリシステム（１００）にアクセスするクライアントプロセス（１１２）を実行する手段とと、
アプリケーションプロセスインタフェース（ＡＰＩ）（８２０）を実行する手段であって、該ＡＰＩ（８２０）は、前記クライアントプロセッサノード（８１０）に割り当てられた一次ネットワーク永久メモリユニット（ｎＰＭＵ）（８０２）における第１の領域およびミラーｎＰＭＵ（８０４）における第２の領域を識別する領域ハンドルを検索し、前記実行中のクライアントプロセスにより要求される関数に関連する少なくとも１つの領域関数を検索し、前記関数に関連する少なくとも１つのパラメータを検索する、クライアントプロセスを実行する手段と、
アクセス要求を前記永久メモリシステム（１００）に通信する手段と、
要求を前記永久メモリシステム（１００）に通信する手段と、
前記一次ｎＰＭＵ（８０２）における前記第１の領域および前記ミラーｎＰＭＵ（８０４）における前記第２の領域に対応する領域名を指定する手段と、
前記永久メモリシステム（１００）における情報を通信する手段であって、該情報のロケーションは、前記指定された領域と、前記第１の領域および前記第２の領域の仮想アドレスに対応するベースポインタ値とに基づいて求められる手段と
を備える永久メモリシステムにアクセスするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信リンク接続の永久メモリシステムに関する。
【背景技術】
【０００２】
従来、コンピュータはそれぞれのデータをメモリあるいは磁気テープや磁気ディスク等の他の入出力（I／Ｏ）記憶装置に記憶している。
I／Ｏ記憶装置は、ＰＣＩ（元々の名称は周辺機器相互接続）等のI／Ｏバスを通して、またはファイバチャネル、インフィニバンド、サーバネットやイーサネット(登録商標)等のネットワークを通してシステムに接続することができる。
I／Ｏ記憶装置は通常遅く、アクセス時間は１ミリ秒を超える。
I／Ｏ記憶装置は、小型コンピュータシステムインタフェース（ＳＣＳＩ）プロトコルや伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）等の特別なI／Ｏプロトコルを利用し、通常、ブロック交換装置として動作する（たとえば、データは固定サイズのデータブロックで読み書きされる）。
こういったタイプのI／Ｏ記憶装置の特徴は、電源を失う、または再開される場合に、それまで記憶されていた情報を保持するような永久性にある。
さらに、ネットワーク化されたI／Ｏ記憶装置には、いくつかのプロセッサが故障した後であっても、共有I／Ｏネットワークを通して複数のプロセッサからアクセスすることが可能である。
【０００３】
システムメモリは一般に、システムバスを通してプロセッサに接続され、このようなメモリは比較的高速であり、１０ナノ秒単位で測定されるアクセス時間が保証される。
さらに、システムメモリには、バイトレベルの粒度で直接アクセスすることができる。
しかし、システムメモリは通常揮発性であり、したがって、電源が失われた場合、またはこのようなメモリを採用したシステムが再開される場合に内容が失われる。
また、システムメモリは通常、プロセッサと同じフォールトドメイン内にあり、したがって、プロセッサが故障した場合、接続されたメモリもまた故障し、それ以降アクセスすることはできなくなる場合がある。
【０００４】
したがって、I／Ｏ記憶装置の永久性および耐久性を、システムメモリの速度およびバイト粒度アクセスとともに提供する、こういった技術に対する代替物を有することが望ましい。
さらに、リモートダイレクトメモリアクセス（ＲＤＭＡ）可能なネットワークを有して、複数のプロセッサで動作中の複数のクライアントプロセスがメモリを共有することができ、したがってネットワーク化されたＲＤＭＡメモリの耐故障性を提供することが望ましい。
【０００５】
従来技術によるシステムは、バッテリバックダイナミックランダムアクセスメモリ（ＢＢＤＲＡＭ）、固体状態ディスク、およびネットワーク接続揮発性メモリを使用してきた。
たとえば、従来の直接接続ＢＢＤＲＡＭは、真の永久（persistent；持続）メモリに勝るいくつかのパフォーマンスの利点を有することができる。
しかし、直接接続ＢＢＤＲＡＭはグローバルにアクセス可能ではないため、接続されたＣＰＵと同じフォールトドメイン内にある。
したがって、直接接続ＢＢＤＲＡＭは、ＣＰＵ故障時、またはオペレーティングシステムクラッシュ時にアクセス不能になる。
したがって、直接接続ＢＢＤＲＡＭは多くの場合、すべてのシステムメモリが永久的であり、したがって電源故障または再起動後にシステムを素早く再開することができる状況において使用される。
ＢＢＤＲＡＭは依然として、長時間停電中、バッテリが空になる前に、内容の記憶に代替の手段を提供しなければならないような揮発性のものである。
ＢＢＤＲＡＭのＲＤＭＡ接続は存在が知られていない。
重要なことに、この直接接続ＢＢＤＲＡＭの使用は非常に制限的であり、たとえば、ネットワーク接続永久メモリ用途での使用に適さない。
【０００６】
バッテリバック固体状態ディスク（ＢＢＳＳＤ）が他の実施態様に提案されてきた。
こういったＢＢＳＳＤは永久メモリを提供するが、機能的にディスクドライブをエミュレートする。
この手法の重大な欠点は、I／Ｏアダプタを通してのこれら装置へのアクセスに関連する待ち時間の追加である。
この待ち時間は、ディスク、ひいてはＢＢＳＳＤに使用されるブロック指向・ファイル指向ストレージモデルに固有のものである。
ＢＢＳＳＤは、オペレーティングシステムが迂回しない部分最適なデータパスを通る。
個体状態ディスクを変更していくつかの欠点を解消することは可能であるが、固有の待ち時間は、パフォーマンスがI／Ｏプロトコルおよびそれぞれに関連する装置ドライバによって制限されるため、なくすことができない。
直接接続ＢＢＤＲＡＭのように、長時間期間にわたる停電に対処するために、さらなる技術が必要である。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、長期間の停電を通して、あるいはオペレーティングシステムクラッシュを超えて永久的な（不揮発性の）メモリを提供することが望ましい。
さらに、プロセッサ故障に対して堅牢であるように、このようなメモリのすべてまたは一部をリモート（すなわち、故障したプロセッサのフォールトドメイン外）に配置することが望ましい。
必ずしも同時である必要はないが、多くのプロセッサが効率的にアクセスすることができるシステムエリアネットワーク（ＳＡＮ）を介してこのような永久メモリに対する（リモート）アクセスを提供することがさらに望ましい。
このような永久メモリを使用して、改良されたコンピュータシステムを実施することができる。
【課題を解決するための手段】
【０００８】
ネットワーク永久メモリユニット（ｎＰＭＵ）にアクセスするシステムおよび方法について記載する。
一実施形態は、通信システムを介して少なくとも１つのクライアントプロセッサノードに通信可能に結合された一次ネットワーク永久メモリユニット（ｎＰＭＵ）の予め規定された部分に対応する一次領域であって、クライアントノード上で実行中のクライアントプロセスに割り当てられ、クライアントプロセスから受け取った情報を記憶するように構成される一次領域、および通信システムを介してクライアントプロセッサノードに通信可能に結合されたミラーｎＰＭＵの予め規定された部分に対応するミラー領域であって、クライアントプロセスに割り当てられ、クライアントプロセスから受け取った情報を記憶するように構成されるミラー領域を備える。
【０００９】
本発明の多くの態様は添付の図面を参照することでよりよく理解することができる。
図面中の構成要素は必ずしも一定の縮尺ではなく、代わりに本発明の実施形態の原理を明確に示すことに重点が置かれている。
さらに、図面中、同様の参照番号は何枚かの図を通して対応する部分を示す。
【発明を実施するための最良の形態】
【００１０】
本開示には、I／Ｏ記憶装置の耐久性および回復性をシステムメモリの速度および細粒度アクセスと組み合わせる永久メモリ装置を記載する。
記憶装置のように、内容は停電またはシステム再開に耐え抜くことができる。
リモートメモリのように、システムエリアネットワーク（ＳＡＮ）を経由してアクセスされる。
しかし、直接接続メモリと異なり、装置には、アクセス中のプロセッサが故障した後であっても引き続きアクセスすることができる。
【００１１】
リモートダイレクトメモリアクセス（ＲＤＭＡ）は、ＳＡＮを他のクラスのネットワークから区別する鍵となる性能であり、メモリがリモートに配置される（すなわち、プロセッサに直接接続されない）場合であっても連続使用メモリセマンティクスをサポートする。
したがって、ＳＡＮもまたＲＤＭＡ対応ネットワークとして知られている。
ＳＡＮは特徴的に、バイト粒度での高速ゼロコピーメモリ動作が可能である。
【００１２】
ネットワーク接続永久メモリ装置には、メモリの内容が電源故障だけではなくオペレーティングシステムクラッシュ、他のソフトウェア故障、ハードウェアまたはソフトウェアのアップグレード、およびシステム保守再起動にも耐え抜かなければならない、ディスクのような永久特徴が要求される。
本教示は、揮発性メモリとは非常に異なる設計および実施態様の制約セットを課す永久（すなわち不揮発性）メモリの使用法において独自である。
たとえば、メタデータ（すなわち、メモリの状態についてのデータ）の管理ならびに仮想アドレスから物理アドレスに変換する情報の管理は、２つの場合でかなり異なる。
さらに、本教示は、永久メモリをＲＤＭＡ対応ネットワークに接続することにおいて独自である。
【００１３】
本明細書にさらに詳細に説明する一実施形態では、システムはネットワーク接続永久メモリユニット（ｎＰＭＵ）を備える。
システムは、読み書き動作等のメモリ動作を開始するプロセッサノードを備える。
プロセッサユニットは、永久メモリアドレス空間に対応する仮想アドレス空間をアドレス動作に関連付ける。
プロセッサノードは、ｎＰＭＵと通信する際に使用されるネットワークインタフェースをさらに備え、ｎＰＭＵは各自のネットワークインタフェースを有する。
したがって、プロセッサノードおよび永久メモリユニットは、ネットワーク、好ましくはシステムエリアネットワーク等の通信リンクを介して通信する。
永久メモリユニットは、プロセッサノードに既知の仮想アドレス空間と、ｎＰＭＵのみに既知の物理アドレス空間との間で変換するようにさらに構成される。
他の実施形態では、複数のアドレス空間が提供され、ｎＰＭＵはまたこれら複数のアドレス空間から物理アドレス空間への変換も提供する。
【００１４】
他の実施形態では、永久メモリ仮想アドレスから永久メモリ物理アドレスへの変換は、各プロセッサノード内で行われる。
さらに他の実施形態では、この変換はＳＡＮに関連するリンク、ポート、スイッチ、ルータ、ブリッジ、ファームウェア、ソフトウェア、またはサービス内で行われる。
本教示は、このような変換に必要なマッピング情報がｎＰＭＵに記憶されているデータと一貫して保持され、何らかのエンティティが記憶されているマッピング情報を使用してアドレス変換を効率的に実行することができ、エンティティおよび必要なマッピング情報は、情報をｎＰＭＵから回復する必要があるときはいつでも利用可能になるものとのみ仮定する。
【００１５】
さらに他の実施形態では、サーバネット、ギガネット、インフィニバンド、周辺機器相互接続（ＰＣＩ）エクスプレス、ＲＤＭＡ対応イーサネット、および仮想インタフェースアーキテクチャ（ＶＩＡ）ネットワーク等、他のタイプのネットワークが使用される。
さらに、磁気ランダムアクセスメモリ（ＭＲＡＭ）、磁気抵抗ランダムアクセスメモリ（ＭＲＲＡＭ）、強誘電体ポリマーランダムアクセスメモリ（ＰＦＲＡＭ）、ＯＵＭ（ovonics unified memory）、およびフラッシュメモリ等、様々なタイプの永久メモリが使用される。
【００１６】
本教示には、従来のI／Ｏ記憶装置のように永久的であるが、システムメモリのように細かい粒度かつ短い待ち時間でアクセスすることが可能なメモリを記載する。
図１に示すように、ネットワーク接続永久メモリを使用する永久メモリシステム１００は、ＲＤＭＡ対応システムエリアネットワーク（ＳＡＮ）１０６を通して１つまたは複数のプロセッサノード１０２によりアクセス可能なネットワーク接続永久メモリユニット（ｎＰＭＵ）１１０からなる。
ｎＰＭＵ１１０の永久メモリにアクセスするには、プロセッサノード１０２で実行中のクライアントプロセス１１２（実行中のソフトウェア等）が、プロセッサノードのネットワークインタフェース（ＮＩ）１０４を通してリモート読み取りまたは書き込み動作を開始する。
このようにして、読み取りまたは書き込みコマンドは、ＲＤＭＡ対応ＳＡＮ１０６でｎＰＭＵのネットワークインタフェース（ＮＩ）１０８に運ばれる。
したがって、処理後、しかるべきデータがＲＤＭＡ対応ＳＡＮ１０６を介して通信される。
ＲＤＭＡデータ移動動作に加えて、ｎＰＭＵ１１０は、以下説明するように様々な管理コマンドに応答するように構成することができる。
たとえば、プロセッサノード１０２により開始された書き込み動作では、データは、ｎＰＭＵに首尾よく記憶された後は、耐久性を有し、停電やプロセッサノード１０２の故障に耐え抜く。
特に、メモリの内容は、ｎＰＭＵ１１０が正しく機能し続ける限り、電源が長時間期間にわたって切断された、またはプロセッサノード１０２上のオペレーティングシステムが再起動した後であっても保持される。
【００１７】
この実施形態では、プロセッサノード１０２は、少なくとも１つの中央演算処理装置（ＣＰＵ）およびメモリからなるコンピュータシステムであり、ＣＰＵはオペレーティングシステムを実行するように構成される。
プロセッサノード１０２は、データベース等のアプリケーションソフトウェアを実行するようにさらに構成される。
プロセッサノード１０２は、ＳＡＮ１０６を使用して、他のプロセッサノード１０２、ならびにｎＰＭＵ１１０およびI／Ｏコントローラ（図示せず）等の装置と通信する。
【００１８】
この実施形態の一実施態様では、ＲＤＭＡ対応ＳＡＮ１０６は、プロセッサノード１０２のＣＰＵに通知することなく、２つのプロセッサノード間またはプロセッサノードと装置の間でのコピー動作等のバイトレベルのメモリ動作を行うことができるネットワークである。
この場合、ＳＡＮ１０６は、仮想アドレスから物理アドレスへの変換を行い、連続したネットワーク仮想アドレス空間を不連続の物理アドレス空間にマッピングすることができるように構成される。
このタイプのアドレス変換により、ｎＰＭＵ１１０の動的管理が可能である。
ＲＤＭＡ性能を備えた市販されているＳＡＮ１０６としては、サーバネット、ギガネット、インフィニバンド、および仮想インタフェースアーキテクチャ準拠ＳＡＮが挙げられるがこれらに限定されない。
【００１９】
プロセッサノード１０２は一般に、ＮＩ１０４を通してＳＡＮ１０６に接続されるが、多くの変形形態が可能である。
しかし、より一般には、プロセッサノードを、読み書き動作を通信する装置に接続する必要があるだけである。
たとえば、この実施形態の別の実施態様では、プロセッサノード１０２はマザーボード上の様々なＣＰＵであり、ＳＡＮを使用する代わりに、データバス、たとえばＰＣＩバスが使用される。
本教示は、必要に応じてスケールアップまたはダウンしてより大きなまたはより小さな実施態様に適応可能であることに留意する。
【００２０】
ネットワークインタフェース（ＮＩ）１０８がｎＰＭＵ１１０に通信可能に結合されて、ｎＰＭＵ１１０に収容されている永久メモリにアクセスできるようにする。
永久メモリのタイプを含め、多くの技術を図１の様々な構成要素に利用することが可能である。
したがって、図１の実施形態は、永久メモリを実現する特定の技術に限定されるものではない。
実際には、多種多様な磁気ランダムアクセスメモリ（ＭＲＡＭ）、磁気抵抗ランダムアクセスメモリ（ＭＲＲＡＭ）、強誘電体ポリマーランダムアクセスメモリ（ＰＦＲＡＭ）、ＯＵＭ（ovonics unified memory）、バッテリバックダイナミックランダムアクセスメモリ（ＢＢＤＲＡＭ）、およびフラッシュメモリを含む複数のメモリ技術が適している。
バッテリバック固体状態ディスク（ＢＢＳＳＤ）はブロックレベル転送を行ってきているが、この手法は、バイトレベルのメモリアクセスを含め、粒度のより細かいメモリアクセスを可能にする。
特に、メモリアクセス粒度は、様々な実施形態を使用してより細かく、またはより粗くすることができる。
ＳＡＮ１０６が使用される場合、メモリアクセスはＲＤＭＡアクセスをサポートするに十分高速であるべきである。
このようにして、ＳＡＮ１０６を介してのＲＤＭＡ読み書き動作が可能になる。
別のタイプの通信装置が使用される場合、使用されるメモリのアクセス速度もまた、通信装置に適応するに十分高速であるべきである。
永久情報は、使用中の永久メモリがデータを保持することができる程度まで提供されることに留意されたい。
たとえば、一実施形態では、永久メモリは電源が失われる時間量に関わりなくデータを記憶するが、別の実施形態では、永久メモリは数分間または数時間データを記憶する。
【００２１】
この手法と併せて、単一または複数の独立した、間接的にアドレス指定されるメモリ領域を作成するメモリ管理機能が提供される。
さらに、ｎＰＭＵメタデータが、停電後、またはプロセッサ故障後のメモリ回復のために提供される。
メタ情報は、たとえば、ｎＰＭＵ１１０内の保護メモリ領域の内容およびレイアウトを含む。
このようにして、ｎＰＭＵ１１０はデータおよびデータ使用方法を記憶する。
必要なときに、ｎＰＭＵ１１０により電源またはシステムの故障から回復することができる。
【００２２】
図２に、バス等の通信リンクを介してＮＩ２０４に通信可能に結合された不揮発性メモリ２０２を使用するｎＰＭＵ１１０の単純な実施形態を示す。
ここで、不揮発性メモリ２０２は、たとえば、ＭＲＡＭまたはフラッシュメモリであることができる。
ＮＩ２０４は各自のＲＤＭＡ要求を開始せず、そうする代わりに、ネットワークからコマンドを受け取り、要求された動作を実行する。
具体的には、ｎＰＭＵ１１０は、入力要求のアドレスを変換し、次いで要求された動作を実行する。
コマンド処理についてのさらなる詳細を以下考察する。
【００２３】
図３に、バッテリ３０４を備えた揮発性メモリ３０２と不揮発性二次記憶装置３１０の組み合わせを使用するｎＰＭＵ１１０の相対的により複雑な実施形態を示す。
この実施形態では、電源が落ちると、揮発性メモリ３０２内のデータは、各データを不揮発性二次記憶装置３１０に保存することができるまで、バッテリ３０４の電源を使用して保存される。
不揮発性二次記憶装置３１０は、たとえば、磁気ディスクまたは低速フラッシュメモリであることができる。
ｎＰＭＵ１１０（図１）が適宜動作するには、データの揮発性メモリ３０２から不揮発性二次メモリ記憶装置３１０への転送が、外部介入なしで、またはバッテリ３０４から以外のさらなる電源なしで行われるべきである。
したがって、バッテリ３０４が上がってしまう前に、要求されたいずれのタスクも完了されるべきである。
図示のように、ｎＰＭＵ１１０は、埋め込みオペレーティングシステムを実行するオプションのＣＰＵ３０６を備える。
したがって、バックアップタスク（すなわち、揮発性メモリ３０２から不揮発性二次メモリ記憶装置３１０へのデータ転送）は、ＣＰＵ３０６上で実行されているソフトウェアによって行うことができる。
ＮＩ３０８も、ＣＰＵ３０６上で実行されているソフトウェアの制御下でＲＤＭＡ要求を開始するために備えられる。
ここでもまた、ＣＰＵ３０６はネットワークから管理コマンドを受け取り、要求された管理動作を実行する。
【００２４】
ｎＰＭＵ１１０の実施形態は、資源の割り振りおよび共有をしやすくするために管理されるエンティティである必要がある。
この実施形態では、ｎＰＭＵ管理は永久メモリマネージャ（ＰＭＭ）によって実行される。
ＰＭＭはｎＰＭＵ内、または先に述べたプロセッサノードの１つ等、ｎＰＭＵ外に配置することができる。
プロセッサノードがｎＰＭＵの永久メモリを割り振る、または割り振り解除する必要がある場合、または永久メモリの既存の領域を使用する必要がある場合、プロセッサノードはまずＰＭＭと通信して、要求された管理タスクを行う。
ｎＰＭＵが耐久性のあるものであり（ディスクのように）、またｎＰＭＵは永久データの自己記述本体を保持するため、既存の永久メモリ領域に関連するメタデータはｎＰＭＵ装置自体に記憶しなければならないことに留意する。
したがって、ＰＭＭは、ｎＰＭＵの記憶データが常にｎＰＭＵの記憶メタデータを使用して解釈することができ、それによって発生し得るシステムのシャットダウンまたは故障後に回復できるようにするように、常にｎＰＭＵ上のメタデータをｎＰＭＵに記憶されている永久データと一貫するように保つように管理タスクを行わなければならない。
このようにして、ｎＰＭＵは、処理中のデータのみならず、このようなデータの処理状態も永久的に保持する。
回復が必要になると、ｎＰＭＵ１１０を使用する永久メモリシステム１００（図１）はこのようにして、電源故障またはオペレーティングシステムクラッシュが発生したメモリ状態から回復し、動作を続けることができる。
【００２５】
図１を参照して述べたように、ＳＡＮ１０６は、基本メモリ管理および仮想メモリサポートを提供する。
このような実施態様では、ＰＭＭは、リモート読み書き動作を可能にするために、ｎＰＭＵ１１０のＮＩ１０８内のロジックをプログラムすることが、同時にｎＰＭＵ１１０の永久メモリを、ＳＡＮ１０６上の選択されたエンティティセットを除くすべてによる許可を受けていないまたは意図しないアクセスから保護しながら可能でなければならない。
さらに、図４に示すように、ｎＰＭＵは仮想／物理アドレス変換をサポートすることができる。
たとえば、永久メモリ（ＰＭ）仮想アドレス４０２〜４１６等の連続した仮想アドレス空間を、不連続な永久メモリ物理アドレス４１８〜４４８にマッピングまたは変換することができる。
ｎＰＭＵネットワーク仮想アドレスは、Ｎ増分アドレスを通して基本アドレスを参照する。
しかし、このようなｎＰＭＵネットワーク仮想アドレスは不連続なｎＰＭＵ物理アドレスに対応する。
図示のように、ｎＰＭＵネットワーク仮想アドレス４０２は実際には、ｎＰＭＵ物理アドレス４３６に対応することができる。
したがって、ｎＰＭＵは、ｎＰＭＵネットワーク仮想アドレス空間からｎＰＭＵ物理アドレス空間への適切な変換を提供することができなければならない。
このようにして、変換メカニズムにより、ｎＰＭＵは、依然としてｎＰＭＵの物理メモリの動的管理を可能にしながら、連続した仮想アドレス範囲をプロセッサノードに提示することができる。
これは、ｎＰＭＵ上のデータの永久的な性質により特に重要である。
コンフィギュレーション変更により、特定のｎＰＭＵにアクセス中のプロセスの数、またはおそらくそれぞれの割り振りサイズが経時的に変化し得る。
アドレス変換メカニズムは、ｎＰＭＵがデータを失うことなくこのような変化に容易に適応できるようにする。
アドレス変換メカニズムはさらに、プロセッサノードに強制的に、割り振りに先立って将来のメモリニーズを予期させることなく、またプロセッサノードに強制的に、悲観的割り振りを通して永久メモリの容量を無駄にさせることもなく、永久メモリの容量を容易かつ効率的に使用できるようにする。
【００２６】
再び図１を参照すると、ネイティブアクセス検証および変換／ブロック転送エンジン（ＡＶＴ／ＢＴＥ）モードで動作しているサーバネットＳＡＮは、単一アドレス空間ＳＡＮ１０６の一例である。
このようなＳＡＮ上の各ターゲットは、同じフラットなネットワーク仮想アドレス空間を、プロセッサノード１０２等のＲＤＭＡ要求イニシエータのすべてに対して提示する。
ネットワーク仮想アドレス範囲は、ページ粒度で、ｎＰＭＵネットワーク仮想アドレスからｎＰＭＵ物理アドレス範囲にターゲットによりマッピングされる。
ネットワークｎＰＭＵネットワーク仮想アドレス範囲は、排他的に単一のイニシエータ（たとえば、プロセッサノード１０２）または複数のイニシエータ（たとえば、クライアントの一次プロセスおよびバックアッププロセスを実行中のプロセッサ）に割り振ることができる。
一実施形態はサーバネットのＡＶＴエントリ保護の制約を受ける。
これが可能ではない場合、またはイニシエータが異なるアクセス権を必要とする場合、複数のｎＰＭＵネットワーク仮想アドレスは同じ物理ページを指すことができる。
【００２７】
プロセッサノード１０２で動作中のクライアントプロセス１１２がＰＭＭにｎＰＭＵ内の永久メモリ領域を開く（すなわち、使用を開始する）ように要求すると、ｎＰＭＵのＮＩ１０８はＰＭＭにより、クライアントプロセス１１２を実行中のプロセッサノード１０２が適切な領域にアクセスできるようにするようにプログラムされる。
このプログラミングにより、ネットワーク仮想アドレスブロックが割り振られ、物理メモリ中の物理ページのセットにマッピング（すなわち、変換）される。
そして、ｎＰＭＵネットワーク仮想アドレスの範囲は、ＰＭの物理メモリ内のどこに存在するかに関わりなく、連続することができる。
変換のセットアップが成功すると、ＰＭＭは要求側のプロセッサノード１０２に、連続ブロックがマッピングされたｎＰＭＵネットワーク仮想アドレスを通知する。
開かれると、プロセッサノード１０２は、ＲＤＭＡ読み取りまたは書き込み動作をｎＰＭＵの、マッピングされた範囲内のネットワーク仮想アドレスに発行することによってｎＰＭＵメモリページにアクセスすることができる。
プロセッサノード１０２上のすべてのクライアントプロセスが開かれた領域を使用して完了した場合、マッピングは除去され、ｎＰＭＵネットワーク仮想アドレスを将来の領域マッピングに再使用することができる。
これは、領域自体がそれ以上使用されないことを意味しないことに留意する。
そうではなく、別のプロセッサ（または、同じプロセッサ）上に存在する１つまたは複数のプロセスにより開かれたままであってもよいが、ｎＰＭＵネットワーク仮想アドレスのマッピングは異なる。
【００２８】
これより図５を参照して、ｎＰＭＵ１１０の動作について、単一仮想アドレス空間のコンテキストの中で説明する。
ｎＰＭＵ物理アドレス空間５６２に変換される単一のｎＰＭＵネットワーク仮想アドレス空間５６０を示す。
或る範囲の永久メモリが開かれると、ＣＰＵ０  ５５０は、ＮＩ５５２およびＮＩ５５８の動作と併せてこのような範囲の永久メモリにアクセスすることができる。
ＰＭＭは、ＣＰＵに或る範囲の仮想アドレスを提供することによって或る範囲の永久メモリを開く。
開かれた範囲のｎＰＭＵネットワーク仮想アドレス空間へのアクセスを要求する際に、ＣＰＵ０  ５５０はＮＩ５５２を通してコマンド（たとえば、読み取りまたは書き込み）をＮＩ５５８に渡す。
一実施形態の動作では、ＣＰＵ０  ５５０のみが、指定された範囲のｎＰＭＵネットワーク仮想アドレスにアクセスすることができる。
他の実施形態では、或る範囲のｎＰＭＵネットワーク仮想アドレスは、２つ以上のＣＰＵで共有することができ、または１つまたは複数のＣＰＵ上のプロセスの部分集合にのみ制限することができる。
したがって、ＰＭＭ構成機能の一環として、ＮＩ５５８はまず、要求されたｎＰＭＵネットワーク仮想アドレス５６０をターゲットとするＣＰＵ０  ５５０の能力を検証する。
ＣＰＵ０  ５５０の許容範囲内の場合、ＮＩ５５８は必要なアドレス変換を行い、最後に、要求された動作（たとえば、読み取りまたは書き込み）をｎＰＭＵ物理アドレス５６２に対して行う。
【００２９】
図６に示すように、ｎＰＭＵ６２０は、それぞれｎＰＭＵネットワーク仮想アドレス空間を有する複数の仮想アドレスコンテキスト（空間）６７０および６７２に適応することもでき、各空間を独立してｎＰＭＵ物理アドレス空間６７４に変換する。
複数のアドレス空間を実施するＳＡＮとしては、ＶＩアーキテクチャ（ＶＩＡ）ＳＡＮが挙げられ、そしてＶＩアーキテクチャＳＡＮとしては、ギガネットおよびサーバネットＩＩ（ＶＩＡモードで）ならびにインフィニバンドが挙げられる。
図６のｎＰＭＵ６２０と図５のｎＰＭＵ１１０の間には類似性がある。
しかし、ｎＰＭＵ６２０では、ｎＰＭＵ６２０、より具体的にはｎＰＭＵのＮＩ６６８はまず、複数の仮想アドレスコンテキスト６７０と６７２とを識別し、それから仮想アドレスコンテキスト６７０および６７２を適切なｎＰＭＵ物理アドレス６７４に変換する必要がある。
【００３０】
この実施形態におけるＮＩ６６８は、プロセス等価仮想アドレスを提供する。
したがって、ＮＩ６６８は、ｎＰＭＵ仮想メモリ、ひいてはｎＰＭＵ物理メモリへのユーザモードならびにカーネルモードアクセスに向けて設計される。
多くの独立したネットワーク仮想アドレス空間を、異なるアドレスコンテキストを使用して提供することができる。
２つのアドレスコンテキストしか示さないが、はるかに多くのアドレスコンテキストが可能である。
実際には、これをインターネットアプリケーションにおいて適用することが可能な範囲まで、何千ものアドレスコンテキストが可能である。
特定のアドレス空間を指定するために、ＲＤＭＡコマンド（たとえば、読み取りまたは書き込み）が、コンテキスト識別子とともに所望の仮想アドレスを指定する。
したがって、ＮＩ６６８は、様々なプロセッサノード（たとえば、ＣＰＵ０  ６６０およびＣＰＵ１  ６６４）に適応して、同じコンテキスト識別子を共有することができる。
さらに、異なるコンテキストからの別個の仮想ページを同じ物理メモリページに変換することができる。
【００３１】
従来通り、クライアントプロセス１１２（図１）がアクセスのために永久メモリの領域を開くと、ＮＩ６６８は、ＰＭＭが要求側プロセッサノードがその領域にアクセスすることができることを検証した後で、ＰＭＭによりプログラムされる。
次いで、従来通り、ＰＭＭはＮＩ６６８をプログラムする。
しかし、この場合、プログラミングはここでＮＩ６６８にコンテキストを作成する。
コンテキストは、物理ページのセットに変換されるネットワーク仮想アドレスブロックを含む。
しかし、図５に概略した場合と異なり、これら仮想アドレスは新しいコンテキスト内でのみ有効であり、これはいずれのネットワーク動作の一環としても識別されなければならない。
たとえば、コンテキスト０  ６７０のｎＰＭＵネットワーク仮想アドレス６０２はｎＰＭＵ物理アドレス６１２に変換され、コンテキスト１  ６７２のｎＰＭＵネットワーク仮想アドレス６０６はｎＰＭＵ物理アドレス６１０に変換される。
従来通り、ｎＰＭＵネットワーク仮想アドレスは、割り振られるｎＰＭＵ物理ページの数に関わりなく連続している。
しかし、物理ページは、ｎＰＭＵ物理メモリ内のどこにでも配置することができる。
【００３２】
たとえば、図１に示す本手法のさらなる機能をここで理解することができる。
たとえば、プロセッサノード１０２は、ＰＭＭと通信してメモリ領域を開くと、再びＰＭＭを経由することなくｎＰＭＵ１１０のメモリに直接アクセスすることができる。
たとえば、リモート読み取りコマンドは、より詳細に以下説明するように、開始ネットワーク仮想アドレスおよびオフセット、ならびにコンテキスト識別子（複数のアドレス空間の場合）を提供する。
適宜動作のためには、このアドレス範囲はＰＭＭによって割り振られた範囲内にあるべきである。
プロセッサノード１０２は、ＮＩ１０４に、ノード１０２におけるローカル物理メモリロケーションへのポインタを含むリモート読み取りコマンドを提供する。
次いで、要求側プロセッサノード１０２におけるＮＩ１０４は、ＳＡＮ１０６を介してｎＰＭＵ１１０のＮＩ１０８にリモート読み取りコマンドを送る。
ＮＩ１０８は、領域に関連する変換テーブルエントリを使用して、開始ネットワーク仮想アドレスをｎＰＭＵ１１０内の物理アドレスに変換する。
ＮＩ１０８を用いて、次いでｎＰＭＵ１１０は、変換された物理アドレスで開始するデータを読み取り中のプロセッサノードに返す。
ＮＩ１０８は、アドレス変換ハードウェアが仮想ページアドレスを連続して見せるため、読み取りがページの境界をまたぐ場合であってもアドレスを変換し続ける。
読み取りコマンドが完了すると、ＮＩ１０４は読み取り転送を完了とマークする。
さらに、待機中のいずれのプロセスにも通知し、順に処理することができる。
【００３３】
より詳細に以下説明する永久メモリへのリモート書き込みも同様である。
プロセッサノード１０２は、開始ＰＭネットワーク仮想アドレスおよびオフセット、ならびにコンテキスト識別子（複数のアドレス空間の場合）をｎＰＭＵ１１０に提供する。
従来通り、ＰＭネットワーク仮想アドレス範囲は、割り当てられた範囲内になければならない。
プロセッサノード１０２は、送るべきデータの物理アドレスへのポインタも提供する。
次いで、プロセッサノード１０２内のＮＩ１０４はリモート書き込みコマンドをｎＰＭＵ１１０内のＮＩ１０８に発行し、データ送信を開始する。
ＮＩ１０８は、領域に関連する変換テーブルエントリを使用して、開始アドレスをｎＰＭＵ１１０の物理アドレスに変換する。
また、ｎＰＭＵ１１０は、変換された物理アドレスで開始するデータを記憶する。
ＮＩ１０８は、アドレス変換ハードウェアが仮想ページを連続して見せるため、書き込みがページの境界をまたぐ場合であってもアドレスを変換し続ける。
書き込みコマンドが完了すると、ＮＩ１０４は書き込み転送を完了とマークする。
次いで、待機中のいずれのプロセスにも通知し、順に処理することができる。
【００３４】
本教示によるｎＰＭＵの待ち時間テストでは、メモリアクセスを８０マイクロ秒以内で十分に実現することができることがわかり、これは８００マイクロ秒以上を必要とするI／Ｏ動作と比較して非常に好ましいことに留意されたい。
実際、この結果は、Ｉ／Ｏ動作の待ち時間が回避されるために可能となる。
したがって、本教示によるｎＰＭＵは記憶の永続性を有し、システムメモリの細粒度アクセスを有する。
【００３５】
ディスクの読み書きを加速する用途を含め、ｎＰＭＵに対して様々な用途が存在する。
また、ｎＰＭＵは電源またはプロセッサの故障からの回復を容易にすることができる。
読み取り動作と書き込み動作の固有の相違により、ｎＰＭＵは読み取り動作よりも書き込み動作においてより重要な改良を提供する。
これは、ｎＰＭＵが、はるかに高速なバスを介するシステムＲＡＭよりもネットワークを経由するより低速かつより小さいメモリを使用するためである。
したがって、頻繁に読み取るべきデータ構造は、ｎＰＭＵにコピーが存在する場合であってもシステムＲＡＭにキャッシュすることができ、あまり頻繁に使用されないデータ構造がｎＰＭＵに適している。
【００３６】
たとえば、トランザクション単位で保持されるデータベースロックは、ｎＰＭＵに記憶するのに適している。
ｎＰＭＵにおけるトランザクションにより保持されている、更新されたロックを追跡することにより、予期せぬ故障（および／またはおそらく予期されるトランザクションマネージャシャットダウン）からの回復を迅速化することができる。
さらに、ｎＰＭＵは故障にまたがって永続的であり、それによってクラッシュ時に進行中のトランザクションにより一貫しない状態のまま残されたデータベース資源を保護する新しいロックタイプの登場を容易にすることができる。
【００３７】
物理再実行キャッシュもｎＰＭＵの実施に適している。
ダーティである（すなわち、一部処理済み）であるが、最後から２番目の制御ポイント以前にフラッシュされないデータベースブロックのキャッシュを保持することにより、ファジーチェックポイントを使用するボリューム回復中に物理的な再実行が迅速化する。
一実施態様では、このようなキャッシュは、各制御ポイントが進むにつれて剪定される。
回復中、ディスクボリュームを読み取るのではなく、多くの場合無作為に、監査証跡内の再実行記録に関連するデータに関してｎＰＭＵ内の再実行キャッシュを調べることにより、回復をはるかに迅速に実現することができる。
これは、データベースキャッシュが大きく、トランザクションが相対的に小さいが高い率で発生する場合に特に重要であり得る。
このようなシナリオでは、大量の監査情報が連続した制御ポイント間に蓄積する場合があるが、これは回復迅速化のためにｎＰＭＵに記憶することができる。
【００３８】
ｎＰＭＵは、永久ログテイル(log tail)の使用を通して効率的なデータベースコミットを提供することもできる。
たとえば、データベーストランザクションをコミットする前に補助監査証跡に対応するディスク書き込み動作がフラッシュするのを待つのではなく、ｎＰＭＵは、ｎＰＭＵ書き込み時にデータベースコミットが可能であり、他のフラッシュ動作を待つ必要がない。
ｎＰＭＵはディスク記憶装置の１０分の１以下の待ち時間を有することができるため、データベーストランザクション待ち時間を大幅に短縮することができる。
さらに、トランザクションスループットも同様に向上する。
たとえば、それでもなお情報をディスクにコミットしなければならない程度まで、ｎＰＭＵは大幅に大量の情報を累積し、ひいてはより効率的にその情報をディスクに書き込むことができる。
【００３９】
データベースキューおよびイベント処理も、ｎＰＭＵの使用を通して改良することができる。
たとえば、キューおよびイベントは、リストデータ構造を使用してｎＰＭＵに保持し、企業間または企業規模の配備におけるいずれの故障またはストールも回避することができる。
イベントおよびキューをｎＰＭＵに保持することで、アクティブに情報を処理しているＣＰＵが故障に直面した場合であっても、円滑なワークフロー処理およびイベントの適時処理が可能になる。
【００４０】
一実施形態では、本手法は図７に示すコンピュータシステム７００において実施される。
図７を参照して、本教示を実施することができる例示的なコンピュータシステム７００（たとえば、パーソナルコンピュータ、ワークステーション、メインフレーム等）を示す。
コンピュータシステム７００には、様々な構成要素を通信可能に結合するデータバス７１４が構成される。
図７に示すように、プロセッサ７０２がバス７１４に結合され、情報および命令を処理する。
ＲＡＭ７０４等のコンピュータ可読揮発性メモリもバス７１４に結合され、プロセッサ７０２のために情報および命令を記憶する。
さらに、コンピュータ可読読み取り専用メモリ（ＲＯＭ）７０６もバス７１４に結合され、プロセッサ７０２のために静的情報および命令を記憶する。
磁気ディスク媒体または光ディスク媒体等のデータ記憶装置７０８もバス７１４に結合される。
データ記憶装置７０８は、大量の情報および命令の記憶に使用される。
英数字キーおよび機能キーを含む英数字入力装置７１０がバス７１４に結合され、情報およびコマンド選択をプロセッサ７０２に通信する。
マウス等のカーソル制御装置７１２がバス７１４に結合され、ユーザ入力情報およびコマンド選択を中央プロセッサ７０２に通信する。
入出力通信ポート７１６がバス７１４に結合され、たとえば、ネットワーク、他のコンピュータ、または他のプロセッサと通信する。
ディスプレイ７１８がバス７１４に結合され、情報をコンピュータユーザに表示する。
表示装置７１８は、液晶装置、陰極線管、またはユーザが認識可能なグラフィック画像および英数字文字の作成に適した他の表示装置であることができる。
英数字入力装置７１０およびカーソル制御装置７１２は、コンピュータユーザがディスプレイ７１８上の可視記号（ポインタ）の二次元の動きを動的に通知できるようにする。
【００４１】
図８は、一次ネットワーク接続永久メモリユニット（ｎＰＭＵ）８０２およびミラーｎＰＭＵ８０４の実施形態を備えた例示的な永久メモリシステム１００のブロック図である。
一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４は、ＮＩ８０６および８０８それぞれを介してＲＤＭＡ対応ＳＡＮ１０６に通信可能に結合される。
一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４は別個の装置である。
したがって、一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４は別個のフォールトドメインを有する。
すなわち、共有される物理構成要素がないため、一次ｎＰＭＵ８０２における故障（フォールト）も、またミラーｎＰＭＵ８０４における故障（フォールト）も他方のｎＰＭＵに悪影響を及ぼさず、それによって耐故障性があり冗長性のある永久メモリシステムを提供する。
【００４２】
複数のプロセッサノードが、ＲＤＭＡ対応ＳＡＮ１０６を介して一次ｎＰＭＵ８０２および／またはミラーｎＰＭＵ８０４と通信する。
したがって、プロセッサノードＡ  ８１０〜プロセッサノードｉ  ８１２は、ＮＩ８１４および８１６それぞれを介してＲＤＭＡ対応ＳＡＮ１０６に通信可能に結合される。
各プロセッサノードは、メモリ１１０４（図１１）に存在するソフトウェアとして実施される永久メモリユニット（ＰＭＵ）ライブラリ８１８を備える。
一実施形態では、ＰＭＵライブラリ８１８は、プロセッサノード上で実行中のアプリケーションと一次ｎＰＭＵ８０２および／またはミラーｎＰＭＵ８０４との間をインタフェースするアプリケーションプログラムインタフェース（ＡＰＩ）８２０を備える。
別の実施形態では、ＡＰＩ８２０はスタンドアロンソフトウェアとして存在する。
【００４３】
永久メモリマネージャ（ＰＭＭ）８２２は、ＮＩ８２４を介してＲＤＭＡ対応ＳＡＮ１０６に通信可能に結合される。
本明細書において説明するように、ＰＭＭ８２２は、プロセッサノードからの、永久メモリを使用するｎＰＭＵ管理機能要求に応答する。
説明の便宜を図り、ＰＭＭ８２２は装置８２６に存在するものとして示される。
装置８２６はＰＭＭ８２２の機能をサポートするプロセッサベースの装置であり、より詳細に本明細書において説明する。
他の実施形態では、ＰＭＭ８２２は他の都合のよいロケーションに存在する。
たとえば、ＰＭＭ８２２は、一次ｎＰＭＵ８０２またはミラーｎＰＭＵ８０４に存在しても、またはプロセッサノードに存在してもよい。
別の実施形態ではＰＭＭ８２２は適した装置のファームウェアとして実施される。
【００４４】
ＰＭＭ８２２は、プロセッサノードからの要求に応答して、一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４の管理機能を行う。
例示的な管理機能としては、ｎＰＭＵメモリの部分の作成、削除、および開閉、ならびに一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４からの既存領域に割り振られた、またはそこから削除された永久メモリ領域はどれかのリスト等のメタデータ処理動作が挙げられるがこれらに限定されるものではない。
これら機能について以下より詳細に説明する。
【００４５】
柔軟なメモリ管理を可能にするために、ＰＭＭ８２２は、プロセッサノードにおいてサポートされる仮想アドレス空間から一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４の物理メモリへのマッピングを作成する。
これらマッピングは、ｎＰＭＵ領域９０６（図９）にアクセス制御を行うためにも使用することができる。
これらマッピングの性質および／またはフォーマットは、プロセッサノードとｎＰＭＵ８０２／８０４の間の相互接続に依存する。
非限定的な例として、ＲＤＭＡスタイルの相互接続ネットワークの場合、マッピングの作成は、ｎＰＭＵ８０２／８０４のＮＩ８０６／８０８に変換テーブルを作成することを含み得る。
直接接続メモリのシナリオでは、マッピングの作成はシステムのページテーブルを処理することを含み得る。
【００４６】
図９は、一次ｎＰＭＵ８０２および／またはミラーｎＰＭＵ８０４の一実施形態をさらに詳細に示す実施形態のブロック図である。
ｎＰＭＵは、他のすべてのシステム構成要素のように、故障することがある。
したがって、ｎＰＭＵは、一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４の対で管理される。
一実施形態では、各ＰＭＭ８２２（図８）は単一対のｎＰＭＵ８０２／８０４を受け持つ。
代替の実施形態では、他のｎＰＭＵ対を管理する他のＰＭＭがあり得る。
さらに別の実施形態では、１つのＰＭＭ８２２が複数のｎＰＭＵ対を制御することができる。
【００４７】
一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４のメモリの一部は、本明細書では、メタデータ９０２に対応する情報が記憶されるメタデータ領域とも呼ばれるメタデータ９０２を含む。
メタデータ９０２は、一次ｎＰＭＵ８０２および／またはミラーｎＰＭＵ８０４に「何が」あるかを記述する。
たとえば、メタデータ９０２は、割り振られたｎＰＭＵ領域９０６を識別する情報、ベースポインタ値情報、および／または各領域の所有者および他の属性の識別を含むが、これらに限定されない。
メタデータ９０２は一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４の両方に保存される。
したがって、一次ｎＰＭＵ８０２またはミラーｎＰＭＵ８０４のいずれかが故障した場合、メタデータ９０２は保存される。
代替の実施形態では、メタデータ９０２は別の適した記憶媒体にも存在する。
【００４８】
一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４のメモリの別の部分は物理データ９０４を含む。
より詳細に本明細書において説明するように、ＰＭＭはＰＭクライアントに代わって、物理データ９０４の領域９０６を一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４の両方に作成する。
便宜上、一次ｎＰＭＵ８０２に存在する領域９０６を一次領域と呼び、便宜上、ミラーｎＰＭＵ８０４に存在する領域９０６をミラー領域と呼ぶ。
したがって、「領域９０６」という語は、本明細書において、一次領域あるいはミラー領域を指すために同義に使用される。
一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４はクライアントプロセスによる直接メモリアクセスをサポートするため、データは、領域を開いたクライアントプロセスによりｎＰＭＵメモリ領域９０６に直接書き込むことができる。
さらに、ｎＰＭＵメモリ領域９０６に存在するデータも、領域を開いたクライアントプロセスにより直接読み取ることができる。
【００４９】
領域９０６が作成される、開かれる、または閉じられると、動作は一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４の両方における領域９０６に影響を及ぼし、これを便宜上、本明細書では「ミラーリング」と呼ぶ。
管理コマンドは、ＰＭＭ８２２により一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４にミラーリングされる。
したがって、ＰＭＭ８２２は、一次ｎＰＭＵ８０２あるいはミラーｎＰＭＵ８０４が故障した後に管理情報を回復することができる。
したがって、プロセスは既存の領域９０６を正しく開くことができる。
【００５０】
図１０は、バッテリバックアップを使用する一次および／またはミラーネットワーク接続永久メモリユニット（ｎＰＭＵ）をさらに詳細に示す別の実施形態のブロック図である。
上に述べた揮発性メモリは、メタデータ９０２、物理データ９０４、および複数の領域９０６を含む。
一次ｎＰＭＵ８０２および／またはミラーｎＰＭＵ８０４のこの実施形態の他の構成要素については上述し、図３に示している。
【００５１】
図１１は、ｎＰＭＵ８０２／８０４（図８〜図１０）が実施される例示的なプロセッサノード１１００（上述し、図８において示したプロセッサノードＡ  ８１０〜プロセッサノードｉ  ８１２に対応する）のブロック図である。
プロセッサノード１１００は、プロセッサ１１０２、メモリ１１０４、およびＮＩ１１０６を備える。
プロセッサ１１０２、メモリ１１０４、およびＮＩ１１０６は、バス１１０８、接続１１１０を介して通信可能に結合される。
プロセッサノード１１００の代替の実施形態では、上述の構成要素は、図１１に示す様式とは別の様式で互いに接続的に結合される。
たとえば、上述の構成要素の１つまたは複数はプロセッサ１１０２に直接結合しても、または介在構成要素（図示せず）を介してプロセッサ１１０２に結合してもよい。
【００５２】
メモリ１１０４は、ＰＭＵライブラリ８１８、ＡＰＩ８２０、属性キャッシュ１１１２、領域ハンドル１１１４、および少なくとも１つのプロセス１１１６を含む。
プロセス１１１６は、本明細書に説明するようにｎＰＭＵ８０２／８０４のメモリを利用するプログラム等であることができる。
他の実施形態では、上述の要素は他の適した記憶媒体に別個に存在することができる。
【００５３】
領域ハンドル１１１４は、ベースポインタ値１１１８、領域が一次ｎＰＭＵにマッピングされた一次ベースネットワーク仮想アドレス１１２０、領域がミラーｎＰＭＵにマッピングされたミラーベースネットワーク仮想アドレス１１２２、一次ｎＰＭＵネットワーク識別子（ＩＤ）１１２４、およびミラーｎＰＭＵネットワークＩＤ１１２６を含む。
一次ｎＰＭＵ  ＩＤ１１２４およびミラーｎＰＭＵ  ＩＤ１１２６は、プロセッサノード１１００とｎＰＭＵ８０２／８０４（図８）の間で直接通信するためのネットワークＩＤに対応する。
領域ハンドル１１１４はまた、ＰＭＭ８２２（図８）が存在する装置８２６のＩＤも含むことができる。
領域ハンドル１１１４（便宜上、本明細書ではパラメータ「region_handle」と呼ぶ）はファイル記述子に類似する。
領域ハンドル１１１４は、領域９０６の識別およびアクセスのために（図９）、以下述べる関数内のパラメータとして渡される。
領域ハンドル１１１４は、実行中のＡＰＩ１１３０が開かれた領域９０６を指定してアクセスするために必要とするすべての情報（便宜上、まとめてアクセス情報と呼ぶ）を含む、またはアクセス情報を指す。
【００５４】
領域９０６は複数の属性によって記述することができる。
領域属性は、ｎＰＭＵ８０２／８０４の領域９０６についての情報である。
領域属性の非限定的な例としては、領域サイズを示す情報（便宜上、本明細書ではパラメータ「region_size」と呼ぶ）、作成日等が挙げられる。
領域属性の性質は、永久メモリシステム１００の特定および／または独自の要件に依存する。
【００５５】
領域のベースネットワーク仮想アドレスは、ｎＰＭＵ領域が、クライアントプロセスによって開かれたときにマッピングされた、開始ネットワーク仮想アドレスである。
このアドレスは、領域が開かれている場合のみ有効であり、複数のクライアントプロセスが同じネットワークの仮想アドレスマッピングを共有することが可能である。
ネットワーク仮想アドレスからｎＰＭＵにおける物理アドレスへのマッピングはＰＭＭによって管理され、クライアントプロセスからの要求に応答してこういったマッピングの作成・抹消を行うのはＰＭＭの担当である。
複数のアドレス空間ＮＩＣを利用する実施形態では、ベースネットワーク仮想アドレスは、仮想アドレスおよびアドレスコンテキスト識別子（ＩＤ）の両方、またはコンテキストハンドルを含み、特定の範囲のｎＰＭＵネットワーク仮想アドレスを指定することができる。
複数アドレス空間対応のＮＩＣの場合、任意所与のｎＰＭＵネットワーク仮想アドレスの多くのインスタンスが存在し得る。
しかし、仮想アドレスは所与のコンテキストＩＤに対して一意である。
たとえば、仮想インタフェースアーキテクチャベースのシステムのコンテキストＩＤを「memory handle」と呼ぶ。
インフィニバンドベースのシステムのコンテキストＩＤは「R_key」と呼ぶ。
ネットワーク上のイニシエータ（すなわち、クライアントプロセッサ内のＮＩ）がｎＰＭＵ領域に対してデータの読み取りまたは書き込みを行いたい場合、イニシエータは、ネットワーク仮想アドレスを使用して、アクセスしたいロケーションを指定する。
【００５６】
ｎＰＭＵベースポインタは、ポインタを含むデータ構造を記憶するクライアントプロセス１１２８を支援する。
領域９０６は、連続範囲のネットワーク仮想アドレスとしてアクセスされる。
クライアントプロセスがベースｎＰＭＵネットワーク仮想アドレス（領域を開く都度、異なり得る）を知る必要がないようにするために、クライアントのポインタ値は、領域が作成されたときに指定された範囲のアドレスに対応するように調整される。
したがって、領域ベースポインタ値１１１８は、クライアントプロセスがｎＰＭＵ領域９０６の最初のバイトにアクセスするために使用するアドレスに対応する値である（便宜上、本明細書ではパラメータ「base_pointer」と呼ぶ）。
次いで、このベースポインタパラメータを使用して、続く読み取りおよび書き込みコマンドにおいて使用するオフセットのベースを設定する。
ベースポインタ値は、実施形態に応じて、領域のベースｎＰＭＵネットワーク仮想アドレスに対応しても、またはしなくてもよいことに留意する。
さらに、ベースポインタ値１１１８は、クライアントプロセスがどのＣＰＵに存在するかに関わりなく、１つの領域を使用するすべてのクライアントプロセスで同じである。
さらに、ベースポインタ値１１１８は、領域９０６が作成されたときに指定され、後に変更することはできない。
非ゼロのベースポインタ値を利用して、ポインタを含む領域へのデータの記憶を容易にすることができる。
したがって、ベースポインタ値１１１８により、クライアントプロセスはｎＰＭＵ領域データ内のポインタを辿ることができる。
代替の実施形態では、領域９０６には、ファイルのようなゼロベースのオフセットを使用してアクセスすべき場合、ベースポインタ値１１１８はゼロに設定される。
【００５７】
プロセッサ１１０２はプロセス１１１６を検索し、次いでプロセス１１１６を実行し、これを便宜上「クライアントプロセス」１１２８として示す（図１および図８のクライアントプロセス１１２に対応する）。
プロセッサノード１１００のアクティブクライアントプロセスメモリ１１３２とｎＰＭＵ８０２／８０４（図８）の間のＲＤＭＡ書き込みまたは読み取りを容易にするために、プロセッサ１１０２はＡＰＩ８２０を検索し、次いでＡＰＩ８２０を実行し、これを便宜上「実行中ＡＰＩ」１１３０として示す。
したがって、クライアントプロセスが永久メモリシステム１００にアクセスしたい場合、実行中ＡＰＩ１１３０は、実行中プロセスによって前に開かれていたｎＰＭＵ８０２／８０４の領域９０６を識別する領域ハンドル１１１４を検索し、実行中プロセスが必要とする関数に関連する少なくとも１つの領域関数を検索し、関数に関連する少なくとも１つのパラメータを検索する。
これら関数およびパラメータについてより詳細に以下説明する。
この情報は必要であればフォーマットされ、次いでアクセス要求が永久メモリシステム１００に通信される。
【００５８】
複数のクライアントプロセスをプロセッサノード上で同時に実行可能であることが理解される。
複数の実行中クライアントプロセスは、ｎＰＭＵの同じ領域にアクセス（読み取り／書き込み）することができ、かつ／または同じｎＰＭＵおよび／または異なるｎＰＭＵ内の異なる領域にアクセスすることができる。
【００５９】
クライアントプロセスメモリ１１３２は、プロセッサ１１０２内に存在するメモリ媒体であり、かつ／またはランダムアクセスメモリ（ＲＡＭ）等の接続メモリ媒体ユニットであることができる。
クライアントプロセスメモリ１１３２は便宜上、実行中クライアントプロセス１１２８の動作を容易にするためにプロセッサ１１０２により使用される作業メモリとして示され、いずれの適した作業メモリ媒体であることができることが理解される。
【００６０】
図１２は、実行中クライアントプロセス１１２８（図１１）により使用されるクライアントプロセスメモリ１１３２のメモリバイト１２０４に存在する、ポインタおよびデータ等の情報のロケーションに対応するクライアントアドレス１２０２、およびｎＰＭＵ８０２／８０４のメモリバイト１２０８に存在する、クライアントアドレスに対応する、ポインタおよびデータ等の情報の物理ロケーションに対応する仮想ネットワークアドレス１２０６の例示的な図である。
上に述べたように、ｎＰＭＵ８０２／８０４のメモリバイト１２０８の物理ロケーションを識別する物理アドレスは、必ずしもネットワーク仮想アドレス１２０６に対応する必要はない。
また、上に述べた領域９０６（図９）は、ｎＰＭＵ８０２／８０４における複数の物理メモリバイト１２０８を含むものと理解され、領域に割り振られるメモリバイト１２０８の数は、より詳細に以下説明するように、領域９０６が作成されるときに指定されるregion_sizeパラメータによって決まる。
便宜上、アドレス１２０２および１２０６は１６進法（ＨＥＸ）で表されるが、いずれの適した記進法も使用することができる。
【００６１】
実行ＡＰＩ１１３０（図１１）は、データを整列化する必要なく、ｎＰＭＵ領域９０６（図９および図１０）内のポインタデータの記憶およびアクセスを行うメカニズムを提供する。
実行中クライアントプロセス１１２８が揮発性メモリベースのデータ構造の１つをｎＰＭＵ領域９０６にミラーリングしたく、そのデータ構造が連続したメモリの固定アドレスに記憶されている場合、ベースポインタ値１１１８をデータ構造の開始アドレスに設定することができる。
次いで、図１２に示すように、ｎＰＭＵ８０２／８０４に存在するデータ構造内のポインタは、実行中クライアントプロセス１１２８、および他の任意の許可を受けたクライアントプロセスにより領域を次に開くことの役に立つ。
図１２に示すベースポインタ計算は、読み取り／書き込み動詞の内部で実現することも、または複数のメモリコンテキスト（たとえば、ＶＩＡ、インフィニバンド、または直接メモリバス接続）をサポートするより柔軟な接続メカニズムを使用して実現することもでき、ｎＰＭＵ８０２／８０４は単純に、領域のベースアドレスを、ベースポインタの値に一致するようにマッピングすることができる。
【００６２】
一実施形態では、各ｎＰＭＵ対８０２／８０４はボリューム（便宜上、本明細書ではパラメータ「pm_volume」と呼ぶ）として識別される。
このパラメータは概ねディスクボリュームに類似する。
ｎＰＭＵボリュームは、ｎＰＭＵ領域９０６の名前空間を含む。
一実施形態では、各ｎＰＭＵボリュームは単一のＰＭＭ８２２によって制御され、永久メモリの単一ユニットとして管理される。
ｎＰＭＵボリュームへのアクセスは、２つの物理的なｎＰＭＵ８０２／８０４にわたってミラーリングされる。
便宜上、ｎＰＭＵボリュームはｎＰＭＵ対８０２／８０４にミラーリングされるため、以下列挙する動詞中のpm_volumeパラメータにおいて指定される単一の名前を使用して、単一のＰＭＭによって管理されるｎＰＭＵのミラーリング対を識別する。
他の実施形態は、他の適した識別子を採用してｎＰＭＵ対を識別する。
【００６３】
ｎＰＭＵ領域９０６は、ｎＰＭＵボリュームの割り振られた部分（すなわち、永久メモリの割り振られた部分）である。
本明細書では便宜上、特定の領域はパラメータ「region_name」で参照される。
一実施形態では、領域９０６は、ミラーリング対として一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４の両方に作成されるため、同じ領域９０６がミラーリングの片割れの両方において作成される。
２つの領域は必ずしも、それぞれのｎＰＭＵ８０２／８０４において物理的に連続する必要がなくてよいことが理解される。
しかし、クライアントプロセスは、本明細書に述べたようなネットワーク仮想アドレスの使用を通して、領域９０６に、あたかも連続しているかのようにアクセスする。
したがって、領域は連続範囲のネットワーク仮想アドレスにマッピングされる。
【００６４】
読み取りまたは書き込みがプロセッサノード１１００上のクライアントプロセスとｎＰＭＵ８０２／８０４の間で行われる場合、またはプロセッサノード１１００上で実行中のクライアントプロセスが領域９０６の作成または削除を要求する場合、実行中ＡＰＩ１１３０は、対応する永久メモリの関数を実行させる。
関数はｎＰＭＵライブラリ８１８において規定される。
これら関数についてより詳細に以下説明する。
【００６５】
「create_region」関数は、プロセッサノード１１００上のクライアントプロセスによる要求があると開始され、ｎＰＭＵ８０２／８０４にメモリの領域９０６を作成する。
クライアントプロセスが永久メモリの新しい領域を要求する場合、実行中ＡＰＩ１１３０は、領域９０６（図９）の作成を要求する通信をＰＭＭ８２２（図８）に向けて生成する。
実行中ＡＰＩ１１３０は必要な命令および要求されたパラメータリストをｎＰＭＵライブラリ８１８から得る。
一実施形態では、pm_volumeパラメータ（領域を作成すべきボリュームの名前を指定する）、region_nameパラメータ（永久メモリ領域の名前を指定する）、region_sizeパラメータ（割り振るべき領域のサイズをバイト単位で指定し、最大でｎＰＭＵの空き空間までの任意の値であることができる）、およびbase_pointerパラメータ（新しい領域のベースポインタ値を指定する）がＰＭＭ８２２に通信される（便宜上、まとめて領域情報と呼ぶ）。
すなわち、クライアントプロセスは、実行中ＡＰＩ１１３０によって決められた上述の命令および要求されたパラメータリストを含む初期領域作成要求を永久メモリシステム１００に通信する。
【００６６】
ｎＰＭＵ領域９０６を識別する領域名は、１つのｎＰＭＵボリューム内で一意でなければならない。
既存の領域名を使用して別のｎＰＭＵ領域を作成しようとすると、エラーが戻される。
【００６７】
ＰＭＭ８２２は、その特定の要求側クライアントプロセスに領域９０６をセットアップし、base_pointerの値を設定し、新しい領域のメタデータにおける他のしかるべき属性を設定する。
ベースポインタパラメータは、続く読み取りおよび書き込みコマンドにおいて使用されるオフセットのベースポインタ値１１１８を設定するために使用される。
したがって、実行中ＡＰＩ１１３０は後に、続く関数（書き込み、読み取り、および削除等であるがこれらに限定されない）の戻りパラメータにアクセスすることができる。
領域９０６のベースポインタは作成時に指定され、後に変更することはできない。
【００６８】
領域９０６の作成は、ＰＭメタデータ９０２（図９）における領域のエントリとともに、要求された空間を一次ｎＰＭＵ８０２およびミラーｎＰＭＵ８０４の両方の領域９０６に割り振る。
領域９０６が作成されると、領域９０６に「open_region」関数を使用してアクセスすることができる。
他の実施形態では、作成関数は、永久メモリシステム１００上で実行中の或るプロセスが新しい領域を必要とする場合等、必要に応じて開始することができる。
【００６９】
「delete_region」関数は、クライアントによる要求があると開始され、ｎＰＭＵ８０２／８０４におけるメモリの領域９０６に対する任意のクライアントプロセスによるアクセスを永久的に終了させ、対応するｎＰＭＵ物理メモリを解放する。
一実施形態では、クライアントプロセスが、領域に直接メモリアクセスする必要があるプロセスがないと判断する場合、実行中ＡＰＩ１１３０は、領域９０６の削除を要求する通信をＰＭＭ８２２（図８）に対して生成する。
実行中ＡＰＩ１１３０は必要な命令および要求されたパラメータリストをｎＰＭＵライブラリ８１８から得る。
一実施形態では、pm_volumeパラメータおよびregion_nameがＰＭＭ８２２に対して通信される。
領域が指定されたボリューム内に存在しない場合、エラーが戻される。
「delete_region」関数は、領域が存在しない場合、領域が別のクライアントプロセスによってまだ開かれている場合、またはクライアントプロセスが許可を受けていない場合、失敗する。
ＰＭＭ８２２は、その特定のクライアントプロセスからの要求に応答して、識別された領域９０６を削除する。
領域９０６が削除されると、領域９０６にはもはや、いずれのクライアントプロセスも「open_region」関数を使用してアクセスすることはできない。
【００７０】
「open_region」関数は、クライアントプロセスによる要求があると開始され、ｎＰＭＵ８０２／８０４におけるメモリの割り当て領域９０６を開く。
実行中ＡＰＩ１１３０は、必要な命令および要求されたパラメータリストをｎＰＭＵライブラリ８１８から得る。
一実施形態では、pm_volumeパラメータおよびregion_nameがＰＭＭ８２２に対して通信される。
open_region関数は、既存のメモリ領域しか開くことができない。
領域９０６が指定されたボリューム内に存在しない場合、エラーが戻される。
ＰＭＭ８２２は、領域に対応する物理ｎＰＭＵページを連続範囲のｎＰＭＵ仮想アドレスにマッピングすることにより、識別された領域９０６をその特定のクライアントプロセスに向けて「開く」。
すなわち、クライアントプロセスは、実行中ＡＰＩ１１３０によって決められた上述の命令および要求されたパラメータリストを含む、続くアクセス要求を永久メモリシステム１００に通信する。
【００７１】
領域が首尾よく開かれた場合、ＰＭＭ８２２はregion_sizeおよびbase_pointer値を戻す。
ＰＭＭ８２２はまた、領域の一次およびミラーメモリ領域を含むｎＰＭＵのネットワークＩＤ、ならびに領域がクライアントプロセスによるアクセスのためにマッピングされたベースネットワーク仮想アドレスおよびメモリコンテキストハンドル（複数のアドレス空間ネットワークの場合）も戻す。
これら戻り値を使用して、ＡＰＩはregion_handleを構築し、領域ハンドル１１１４をｎＰＭＵライブラリ８１８（または別の適したメモリロケーション）に保存する。
したがって、同じクライアントプロセスによる領域９０６への続く直接アクセスは、この領域ハンドル１１１４を使用して領域９０６を識別する。
【００７２】
「close_region」関数は、クライアントプロセスによる要求があると開始され、ｎＰＭＵ８０２／８０４におけるメモリの領域９０６を閉じる。
実行中ＡＰＩ１１３０は、必要な命令および要求されるパラメータリストをｎＰＭＵライブラリ８１８から得る。
一実施形態では、region_handleパラメータまたは他の識別情報がＰＭＭ８２２に対して通信される。
close_region関数は、現在開かれている（ひいては存在している）メモリ領域９０６しか閉じることができない。
領域９０６が存在しない場合、または指定されたボリューム内で、呼び出し中のクライアントプロセスにより開かれていない場合、エラーが戻される。
領域９０６を閉じることにより、開かれている領域９０６に関連するいずれのクライアント資源も解放される。
領域９０６が閉じられた後、クライアントプロセス１１２８はもはや領域９０６にアクセスすることはできず、領域ハンドル１１１４のパラメータは無効になる。
クローズは、ｎＰＭＵ領域を前もって開いていたプロセスが、ｎＰＭＵ領域を明示的に閉じる前に実行を終了する場合に暗黙的に行われるべきである。
【００７３】
領域９０６が開かれると、「write_region」関数が、クライアントプロセスによる要求があると開始され、データまたはポインタをｎＰＭＵ８０２／８０４における領域９０６に書き込む。
実行中ＡＰＩ１１３０は、必要な命令および要求されるパラメータリストをｎＰＭＵライブラリ８１８から得る。
一実施形態では、region_handleパラメータ、bufパラメータ（領域９０６に書き込むべきデータがクライアントプロセッサのメモリに記憶されているバッファへのポインタを指定する）、lenパラメータ（領域９０６に書き込むべきバイト数を指定する）、write_pointerパラメータ（データの書き込みを開始する、領域９０６内のアドレスを指定する）、およびmirrorパラメータ（使用すべきミラーリング方法を指定する）が、ＡＰＩ１１３０に通信される。
領域９０６は論理的にbase_pointerからbase_pointer＋region_sizeの範囲のアドレスを有するregion_sizeのバイトを含む。
したがって、write_region関数は、ｎＰＭＵライブラリにlenバイトを、bufによってポイントされたローカルクライアントバッファから永久メモリに書き込ませる。
いくつかの実施形態では、この書き込みは、いずれのコピーも介在することなく、クライアントプロセッサのメモリからｎＰＭＵ８０２／８０４に対して直接行われる。
永久メモリの書き込みは、region_handleによって指定された、前もって開かれた領域に対してのものである。
データは、連続範囲の領域アドレスに、write_pointerにより指定されたアドレスから開始して書き込まれる。
領域内のアドレスの範囲はbase_pointerからbase_pointer＋region_sizeまでであり、ｎＰＭＵ仮想または物理アドレスに対応しても、またはしなくてもよい。
しかし、領域アドレスが、領域がマッピングされたｎＰＭＵ仮想アドレスに等しくない場合は、領域アドレスとｎＰＭＵ仮想アドレスとの間の差を、一定のオフセット（base_pointer）−（network_virtual_address_base）として指定することができる。
したがって、write_pointer値Ｘを使用して書き込まれるデータは、［（ｎＰＭＵ仮想アドレスＸ）−（base_pointer）−（network_virtual_address_base）］に書き込まれる。
【００７４】
同様に、read_pointer値Ｘを使用して読み取られるデータも、より詳細に以下説明するように、［（ｎＰＭＵ仮想アドレスＸ）−（base_pointer）−（network_virtual_address_base）］から読み取られる。
したがって、図１２は、
（ネットワークアドレス）＝［読み取り／書き込み（Ｒ／Ｗ）ポインタ］−（ベースポインタ値）＋（ｎＰＭＵネットワーク仮想アドレス）
であることを示す。
【００７５】
mirrorパラメータは、ミラーリングされたＰＭボリュームのいずれの片割れ（一次ｎＰＭＵ８０２またはミラーｎＰＭＵ８０４）に書き込むべきかを指定する。
通常の状況下では、mirrorパラメータは常にPM_BOTHであるべきである。
他の値は、回復の際、またはミラーリングが望まれない場合にのみ使用されるべきである。
例示的な有効mirror値は、
PM_BOTH：通常動作に使用され、データは一次領域およびミラー領域の両方に書き込まれる
PM_PRIMARY：データは一次領域にのみ書き込まれる
PM_MIRROR：データはミラー領域にのみ書き込まれる
である。
【００７６】
領域９０６が開かれると、「read_region」関数が、クライアントプロセスによる要求があると開始され、データまたはポインタをｎＰＭＵ８０２／８０４における領域９０６から読み取る。
実行中ＡＰＩ１１３０は、必要な命令および要求されるパラメータリストをｎＰＭＵライブラリ８１８から得る。
一実施形態では、region_handleパラメータ、bufパラメータ（領域９０６から読み取られるデータを配置する、クライアントプロセッサにおけるバッファへのポインタを指定する）、lenパラメータ（領域９０６から読み取るべきバイト数を指定する）、read_pointerパラメータ（データの読み取りを開始する、領域９０６内のアドレスを指定する）、およびmirrorパラメータ（使用すべきミラーリング方法を指定する）が、ＡＰＩ１１３０に通信される。
領域９０６は、base_poinerからbase_pointer＋region_sizeまでの範囲のアドレスを有するrgion_sizeのバイトからなる。
したがって、read_region関数は、ＡＰＩ１１３０にlenバイトを、read_pointerのロケーションから開始して永久メモリから、bufによってポイントされたローカルクライアントバッファに読み取らせる。
いくつかの実施形態では、データは、いずれのコピーも介在することなくｎＰＭＵ８０２／８０４の一方からクライアントメモリに直接読み取られる。
領域内のアドレスの範囲はbase_pointerからbase_pointer＋region_sizeまでであり、ｎＰＭＵ仮想または物理アドレスに対応しても、またはしなくてもよい。
しかし、領域アドレスが、領域９０６がマッピングされたｎＰＭＵ仮想アドレスに等しくない場合は、領域アドレスとｎＰＭＵ仮想アドレスとの間の差を、一定のオフセットbase_pointer−network_virtual_address_baseとして指定することができる。
したがって、read_pointer値Ｘを使用して読み取られるデータは実際には、ｎＰＭＵ仮想アドレスＸ−（base_pointer−network_virtual_address_base）から読み取られる。
【００７７】
mirrorパラメータは、ミラーリングされたＰＭボリュームのいずれの片割れ（一次ｎＰＭＵ８０２またはミラーｎＰＭＵ８０４）を読み取るべきかを指定する。
通常の状況下では、mirrorパラメータは常にPM_ANYであるべきである。
他の値は、回復の際、またはミラーリングが望まれない場合にのみ使用されるべきである。
例示的な有効mirror値は、
PM_ANY：通常動作に使用され、データは一次領域およびミラー領域のいずれかから読み取られる、
PM_PRIMARY：データは一次領域のみから読み取られる、
PM_MIRROR：データはミラー領域のみから読み取られる
である。
【００７８】
一実施形態では、読み取り要求が、永久メモリシステム１００に記憶されている情報を一次ｎＰＭＵ８０２あるいはミラーｎＰＭＵ８０４から検索すべきであると指定する（mirror＝PM_ANY）場合、情報が一次ｎＰＭＵ８０２において利用可能であるか否かが判断される。
情報が一次ｎＰＭＵ８０２において利用可能でない場合、情報はミラーｎＰＭＵ８０４から検索される。
このプロセスは実行中クライアントプロセス１１２８にトランスペアレントである。
たとえば、一次ｎＰＭＵ８０４が故障している場合、一次ｎＰＭＵ８０２メモリ空間の一部が不良またはその他の理由により動作不能である場合、または一次ｎＰＭＵ８０２へのアクセスを提供する通信リンクが故障している場合がある。
【００７９】
同様に、要求が、永久メモリシステム１００に記憶されている情報を一次ｎＰＭＵ８０２あるいはミラーｎＰＭＵ８０４から検索すべきであると指定し（mirror＝PM_ANY）、永久メモリシステムが、おそらくパフォーマンスの理由により情報をミラーｎＰＭＵ８０４から得たい場合、情報がミラーｎＰＭＵ８０４において利用可能であるか否かが判断される。
情報がミラーｎＰＭＵ８０４において利用可能でない場合、情報は一次ｎＰＭＵ８０２から検索される。
【００８０】
一実施形態では、読み取り要求が、永久メモリシステム１００に記憶されている情報が一次ｎＰＭＵ８０２のみから検索されるべきであると指定する（mirror＝PM_PRIMARY）場合、情報が一次ｎＰＭＵ８０２において利用可能であるか否かが判断される。
情報が一次ｎＰＭＵ８０２において利用可能でない場合、要求は果たされず、エラーが戻される。
【００８１】
同様に、読み取り要求が、永久メモリシステム１００に記憶されている情報がミラーｎＰＭＵ８０４のみから検索されるべきであると指定する（mirror＝PM_MIRROR）場合、情報がミラーｎＰＭＵ８０４において利用可能であるか否かが判断される。
情報がミラーｎＰＭＵ８０４において利用可能でない場合、要求は果たされず、エラーが戻される。
【００８２】
「list_regions」関数が、pm_volumeにおいて指定されたボリューム内の領域のリスト１１３４（図１１）を取得する。
リスト１１３４は、文字列変数のユーザ割り振りアレイで戻される。
リスト１１３４は、満杯になるまで、またはすべての領域が列挙されるまで埋められる。
ボリューム内の実際の領域の数はregion_cntパラメータ（ボリューム内の領域の数を指定する）で戻される。
実行中ＡＰＩ１１３０は必要な命令および要求されるパラメータを、ｎＰＭＵライブラリ８１８内のリスト１１３４から得る。
一実施形態では、pm_volumeパラメータ（内容を調べるべきボリュームの名前を指定する）、region_listパラメータ（ボリューム内の領域のリストのポインタアレイへのポインタを指定する）、およびlist_sizeパラメータ（region_listアレイ内の要素の数を指定する）。
リストサイズは所望の長さであることができる。
ボリューム内の実際の領域の数および／または他の関連情報（便宜上、まとめてリスト情報と呼ぶ）は、region_cntで戻される。
list_sizeがregion_cntよりも大きい場合、region_cntエントリのみがlist_regionsにより埋められる。
list_sizeがregion_cntよりも小さい場合、region_listアレイ全体が埋められる。
【００８３】
一実施形態では、クライアントプロセスは、既存の永久メモリ領域の属性を読み取ることができる。
こういった属性としては、領域サイズ、領域ベースポインタ、作成時間、最後に開かれた時間等のパラメータに対応する指示を挙げることができる。
クライアントプロセスはまず、属性（便宜上、まとめて属性情報と呼ぶ）の「読み取り」を要求しなければならない。
ＰＭＭ８２２がメタデータ９０２（図９）を処理した後で、属性構造のコピーがＰＭＭ８２２から要求側クライアントプロセスに通信される。
次いで、以下説明する属性アクセッサ関数を使用して、実際の属性値にアクセスすることができる。
【００８４】
「読み取り属性」アクセッサ関数は、指定された領域９０６の属性情報をＰＭＭ８２２から要求し、これを便宜上属性要求と呼ぶ。
実行中ＡＰＩ１１３０は、必要な命令および要求されるパラメータリストをｎＰＭＵライブラリ８１８から得る。
一実施形態では、pm_volumeパラメータ（内容を調べるべきボリュームの名前を指定する）およびregion_nameパラメータ（対象領域の名前を指定する）がＰＭＭ８２２に通信される。
各属性要素毎にクライアントがＰＭＭ８２２と通信する必要がないため、read_attributesは、関数呼び出し時に属性データをキャッシュする。
属性は、read_attributes関数によって戻されるattr_handleパラメータに示されるメモリロケーションの属性キャッシュ１１１２（図１１）に記憶される。
したがって、ｎＰＭＵ８０２／８０４の続く属性の変更は、read_attributes関数が再び呼び出されるまで反映されない。
【００８５】
「get attr<datatype>」アクセッサ関数は、attr_handleによってポイントされた属性キャッシュ構造から属性値を読み取る。
これら属性は文字名によって指定され、戻り値はアクセッサ関数に固有のデータ型のものである。
実行中ＡＰＩ１１３０は、必要な命令および要求されるパラメータリストをｎＰＭＵライブラリ８１８から得る。
一実施形態では、attr_handleパラメータ（read_region_attribsが実行されたときに、指定領域のキャッシュされた属性を含む構造へのポインタを指定する）およびオプションのmax_string_lenパラメータがＡＰＩ１１３０に通信される。
max_string_lenパラメータは文字列アクセッサに適用され、attr_valによってポイントされる文字列のサイズである。
文字列属性を読み取る場合、最大でmax_string_len文字が、attr_valによってポイントされるバッファ中にコピーされる。
attr_valのサイズが属性全体の格納に不適である場合、最初のmax_string_len文字はコピーされ、エラーが戻される。
attr_valパラメータ（attr_nameによって指定された属性の値を指定する）が戻される。
このパラメータの型は、どのアクセッサ関数を使用するかによって指定される（すなわち、<data type>）。
クライアントプロセスは属性値に空間を割り振らなければならないことに留意する。
加えて、誤ったアクセッサ関数が特定の属性に呼び出される場合（すなわち、符号なし１６ビットアクセッサが６４ビット属性に呼び出される場合）、エラーが戻される。
【００８６】
「free region attrs」関数は、attr_handleによってポイントされる属性キャッシュ１１１２構造に関連するいずれの資源も解放する。
この関数が呼び出された後、attr_handleはもやは有効ではない。
実行中ＡＰＩ１１３０は、必要な命令および要求されるパラメータリストをｎＰＭＵライブラリ８１８から得る。
【００８７】
図１３は、永久メモリシステム１００の一実施形態により使用される、永久メモリ領域を作成するプロセスを示すフローチャート１３００である。
図１４は、クライアントプロセスにより使用される（図１１）、永久メモリシステム１００にアクセスするプロセスを示すフローチャート１４００である。
図１３および図１４のフローチャート１３００および１４００はそれぞれ、永久メモリシステム１００にアクセスするロジックを実施する一実施形態の構造、機能、および動作を示す。
代替の実施形態は、状態機械として構成されたハードウェアを使用してフローチャート１３００および１４００のロジックを実施する。
この点に関して、各ブロックは、指定の論理関数を実施する１つまたは複数の実行可能命令を含むモジュール、コードのセグメントまたは部分を表すことができる。
いくつかの代替の実施態様では、永久メモリシステム１００の機能から逸脱することなく、ブロックに記された機能を図１３または図１４に記した順序とは別の順序で行うこともでき、または追加の機能を含むことができることにも留意されたい。
たとえば、図１３および図１４において連続して示す２つのブロックは、さらに以下明確にするように、関わる機能に応じて、実際には略同時に実行してもよく、時によっては逆順で実行されてもよく、またはブロックのいくつかをすべてのインスタンスで実行しなくてもよい。
【００８８】
ＰＭ領域を作成するプロセスは図１３に示され、ブロック１３０２において開始する。
ブロック１３０４において、一次ｎＰＭＵにおける第１の領域が割り振られ、この第１の領域は一次ｎＰＭＵにおけるメモリの一部に対応する。
ブロック１３０６において、ミラーｎＰＭＵにおける第２の領域が割り振られ、この第２の領域は、ミラーｎＰＭＵにおけるメモリの一部に対応する。
ブロック１３０８において、第１の領域および第２の領域に対応する情報が求められる。
ブロック１３１０において、求められた情報は、一次ｎＰＭＵにおける第１のメタデータ領域に記憶されるとともに、ミラーｎＰＭＵにおける第２のメタデータ領域に記憶される。
プロセスはブロック１３１２において終了する。
【００８９】
図１４に示すプロセスはブロック１４０２において開始する。
ブロック１４０４において、永久メモリシステムにアクセスするプロセスが実行される。
ブロック１４０６において、アプリケーションプロセスインタフェース（ＡＰＩ）が実行され、このＡＰＩは、クライアントプロセッサノードに割り当てられた一次ｎＰＭＵにおける第１の領域およびミラーｎＰＭＵにおける第２の領域を識別する領域ハンドルを検索し、実行中プロセスにより要求される関数に関連する少なくとも１つの領域関数を検索し、関数に関連する少なくとも１つのパラメータを検索する。
ブロック１４０８において、領域ハンドル、領域関数、およびパラメータを含むアクセス要求が生成される。
ブロック１４１０において、アクセス要求は永久メモリシステムに通信される。
プロセスはブロック１４１２において終了する。
【００９０】
様々な実施形態および利点を説明したが、複数の変形形態が容易に明らかになることが認識される。
たとえば、永久メモリの実施にあたり、多くの技術が利用可能である。
したがって、本手法は、本明細書における開示および添付の特許請求の範囲に一致して広く適用することが可能である。
【図面の簡単な説明】
【００９１】
【図１】ネットワーク接続永久メモリユニット（ｎＰＭＵ）を備えたシステムのブロック図である。
【図２】ネットワーク接続永久メモリユニット（ｎＰＭＵ）の一実施形態のブロック図である。
【図３】バッテリバックアップを使用するネットワーク接続永久メモリユニット（ｎＰＭＵ）の一実施形態のブロック図である。
【図４】永久メモリ仮想アドレス空間から永久メモリ物理アドレス空間へのマッピングを示すブロック図である。
【図５】１つの永久メモリ仮想アドレス空間を有するネットワーク接続永久メモリユニット（ｎＰＭＵ）の一実施形態のブロック図である。
【図６】複数の永久メモリ仮想アドレス空間を有するネットワーク接続永久メモリユニット（ｎＰＭＵ）の一実施形態のブロック図である。
【図７】ネットワーク接続永久メモリユニット（ｎＰＭＵ）が実施される例示的なコンピュータシステムのブロック図である。
【図８】一次およびミラーネットワーク接続永久メモリユニット（ｎＰＭＵ）を備えた例示的なシステムのブロック図である。
【図９】一次および／またはミラーネットワーク接続永久メモリユニット（ｎＰＭＵ）をさらに詳細に示す一実施形態のブロック図である。
【図１０】バッテリバックアップを使用する一次および／またはミラーネットワーク接続永久メモリユニット（ｎＰＭＵ）をさらに詳細に示す別の実施形態のブロック図である。
【図１１】ネットワーク接続永久メモリユニット（ｎＰＭＵ）が実施される例示的なプロセッサノードのブロック図である。
【図１２】ネットワーク接続永久メモリユニット（ｎＰＭＵ）が実施される例示的なプロセッサノードのブロック図である。
【図１３】永久メモリシステムの一実施形態により使用される、永久メモリ領域を作成するプロセスを示すフローチャートである。
【図１４】クライアントプロセスにより使用される、永久メモリシステムにアクセスするプロセスを示すフローチャートである。
【符号の説明】
【００９２】
１０２・・・プロセッサノード
１０６・・・ＲＤＭＡ対応ＳＡＮ
１１０・・・ネットワーク永久メモリユニット（ｎＰＭＵ）
１１２・・・クライアントプロセス
２０２・・・不揮発性メモリ
３０２・・・揮発性メモリ
３０４・・・バッテリ
３１０・・・不揮発性二次記憶装置
７０２・・・プロセッサ
７０８・・・データ記憶装置
７１０・・・英数字入力装置
７１２・・・カーソル制御装置
７１６・・・通信ポート
７１８・・・ディスプレイ
８０２・・・一次ネットワーク永久メモリユニット（ｎＰＭＵ）
８０４・・・ミラーネットワーク永久メモリユニット（ｎＰＭＵ）
８１０、８１２・・・プロセッサノード
８１８・・・ＰＭＵライブラリ
８２２・・・永久メモリマネージャ
８２６・・・装置
９０２・・・メタデータ
９０４・・・物理データ
９０６・・・領域
１１００・・・プロセッサノード
１１０２・・・プロセッサ
１１０４・・・メモリ
１１１２・・・属性キャッシュ
１１１４・・・領域ハンドル
１１１６・・・プロセス
１１１８・・・ベースポインタ値
１１２０・・・一次ベースｎＰＭＵネットワーク仮想アドレス
１１２２・・・ミラーベースｎＰＭＵネットワーク仮想アドレス
１１２４・・・一次ｎＰＭＵネットワークＩＤ
１１２６・・・ミラーｎＰＭＵネットワークＩＤ
１１２８・・・クライアントプロセス
１１３０・・・実行中ＡＰＩ
１１３２・・・クライアントプロセスメモリ
１１３４・・・リスト
【図１】
2005276208.tif 000003
【図２】
2005276208.tif 000004
【図３】
2005276208.tif 000005
【図４】
2005276208.tif 000006
【図５】
2005276208.tif 000007
【図６】
2005276208.tif 000008
【図７】
2005276208.tif 000009
【図８】
2005276208.tif 000010
【図９】
2005276208.tif 000011
【図１０】
2005276208.tif 000012
【図１１】
2005276208.tif 000013
【図１２】
2005276208.tif 000014
【図１３】
2005276208.tif 000015
【図１４】
2005276208.tif 000016