(57)【要約】  対称型マルチプロセッシング・フォルトトレラントコンピュータシステムは、対称型マルチプロセッシングコンピュータシステムにおいてメモリアクセスを制御する。これを行うために、仮想ページ構造が作成され、該仮想ページ構造は対称型マルチプロセッシングコンピュータシステム内のプロセッサに対して共有メモリへの物理ページアクセス権限を反映する。共有メモリへのアクセスは、仮想ページング構造内に反映された物理ページアクセス権限に基づいて制御されて、対称型マルチプロセッシングコンピュータシステム内のプロセッサ間で決定論的共有メモリアクセスを調整する。対称型マルチプロセッシング・フォルトトレラントコンピュータシステムは、複写又は連続再生を用いることができる。【選択図】図１
2008542878.tif 000002
【特許請求の範囲】
【請求項１】
対称型マルチプロセッシングコンピュータシステムを用いてフォルトトレラントコンピュータシステムを実装する方法であって、該方法は、
前記対称型マルチプロセッシングコンピュータシステム内のプロセッサと関連付けられた仮想ページング構造を作成して、前記プロセッサにおける共有メモリへの物理ページアクセス権限を反映し、
前記仮想ページング構造内で反映された物理ページアクセス権限に基づいて共有メモリへのアクセスを制御して、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサ間で決定論的共有メモリアクセスを調整する、
ことによって前記対称型マルチプロセッシングコンピュータシステムの少なくとも１つを制御する段階を含む、
ことを特徴とする方法。
【請求項２】
前記共有メモリへのアクセスを制御する段階が、
プロセッサからメモリの一部分にアクセスする要求を受け取る段階と、
前記プロセッサに対する前記仮想ページング構造を、前記メモリの一部分にアクセスする他のプロセッサに対する仮想ページング構造と比較することによって、前記プロセッサによる許可されることになる前記メモリの一部分へのアクセスを決定する段階と、
前記プロセッサによる許可されることになる前記アクセスに基づいて、前記プロセッサに対する前記仮想ページング構造内の物理ページアクセス権限を更新する段階と、
を含む、
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記プロセッサは、プロセッサ上で実行するタスクを含む、
ことを特徴とする請求項１に記載の方法。
【請求項４】
前記仮想ページング構造は、シャドーページテーブルを含み、該シャドーページテーブルは、前記対称型マルチプロセッシングコンピュータシステムのオペレーティングシステムによって作成されたページテーブルのコピーを含み、前記対称型マルチプロセッシングコンピュータシステムのプロセッサと関連付けられる、
ことを特徴とする請求項１に記載の方法。
【請求項５】
前記仮想ページング構造は、仮想アドレスから物理アドレスへの変換の２つ又はそれ以上のレベルを集合的に提供する多段ページテーブルを含む、
ことを特徴とする請求項１に記載の方法。
【請求項６】
仮想ページング構造を作成する段階が、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前にページテーブルを作成する段階を含む、
ことを特徴とする請求項１に記載の方法。
【請求項７】
仮想ページング構造を作成する段階が、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前に少なくともページディレクトリを作成する段階を含む、
ことを特徴とする請求項１に記載の方法。
【請求項８】
前記フォルトトレラントコンピュータシステムは、命令ロックステップで同時に作動する２つの対称型マルチプロセッシングコンピュータシステムを備えた複写フォルトトレラントコンピュータシステムであり、前記各対称型マルチプロセッシングコンピュータシステムが、仮想ページング構造内に反映された物理ページアクセス権限に基づいて共有メモリへのアクセスを制御し、前記対称型マルチプロセッシングコンピュータシステムのプロセッサ間で決定論的共有メモリアクセスを調整する、
ことを特徴とする請求項１に記載の方法。
【請求項９】
前記対称型マルチプロセッシングコンピュータシステムが第１の対称型マルチプロセッシングコンピュータシステムを備え、
前記フォルトトレラントコンピュータシステムが、前記第１の対称型マルチプロセッシングコンピュータシステム及び第２の対称型マルチプロセッシングコンピュータシステムを備える連続再生フォルトトレラントコンピュータシステムであり、
前記方法が更に、
前記第１の対称型マルチプロセッシングコンピュータシステムに命令ストリームを処理させ、前記第１の対称型マルチプロセッシングコンピュータシステムにおけるイベントシーケンスを反映するジャーナルを作成させる段階と、
前記第１の対称型マルチプロセッシングコンピュータシステムの故障が検出されたときに、前記第２の対称型マルチプロセッシングコンピュータシステムを用いて前記ジャーナルを処理し、前記第１及び第２の対称型マルチプロセッシングコンピュータシステムが命令ロックステップで作動するようにする段階と、
前記第２の対称型マルチプロセッシングコンピュータシステム内のプロセッサと関連付けられ且つ前記プロセッサに対する共有メモリへの物理ページアクセス権限を反映する仮想ページング構造を、前記第２の対称型マルチプロセッシングコンピュータシステムに作成させる段階と、
前記仮想ページング構造内に反映された物理ページアクセス権限に基づいて前記第２の対称型マルチプロセッシングコンピュータシステムに共有メモリへのアクセスを制御させて、前記第２の対称型マルチプロセッシングコンピュータシステム内のプロセッサ間で決定論的共有メモリアクセスを調整する段階と、
を更に含む、
ことを特徴とする請求項１に記載の方法。
【請求項１０】
コンピュータ読取り可能媒体上に記憶されたコンピュータソフトウェアであって、
実行時に、フォルトトレラントコンピュータシステムの少なくとも１つの対称型マルチプロセッシングコンピュータシステムを、
前記対称型マルチプロセッシングコンピュータシステム内のプロセッサと関連付けられ且つ該プロセッサに対する共有メモリへの物理ページアクセス権限を反映する仮想ページング構造を作成する段階と、
前記仮想ページング構造に反映された前記物理ページアクセス権限に基づいて共有メモリへのアクセスを制御して、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサ間で決定論的共有メモリアクセスを調整する段階と、
によって制御する命令を含むコンピュータソフトウェア。
【請求項１１】
前記共有メモリへのアクセスを制御する段階が、
プロセッサからメモリの一部分にアクセスする要求を受け取る段階と、
前記プロセッサに対する前記仮想ページング構造を、前記メモリの一部分にアクセスする他のプロセッサに対する仮想ページング構造と比較することによって、前記プロセッサによる許可されることになる前記メモリの一部分へのアクセスを決定する段階と、
前記プロセッサによる許可されることになる前記アクセスに基づいて、前記プロセッサに対する前記仮想ページング構造内の物理ページアクセス権限を更新する段階と、
を含む、
ことを特徴とする請求項１０に記載のコンピュータソフトウェア。
【請求項１２】
前記プロセッサは、プロセッサ上で実行するタスクを含む、
ことを特徴とする請求項１０に記載のコンピュータソフトウェア。
【請求項１３】
前記仮想ページング構造は、シャドーページテーブルを含み、該シャドーページテーブルは、前記対称型マルチプロセッシングコンピュータシステムのオペレーティングシステムによって作成されたページテーブルのコピーを含み、前記対称型マルチプロセッシングコンピュータシステムのプロセッサと関連付けられる、
ことを特徴とする請求項１０に記載のコンピュータソフトウェア。
【請求項１４】
前記仮想ページング構造は、仮想アドレスから物理アドレスへの変換の２つ又はそれ以上のレベルを集合的に提供する多段ページテーブルを含む、
ことを特徴とする請求項１０に記載のコンピュータソフトウェア。
【請求項１５】
仮想ページング構造を作成する段階が、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前にページテーブルを作成する段階を含む、
ことを特徴とする請求項１０に記載のコンピュータソフトウェア。
【請求項１６】
仮想ページング構造を作成する段階が、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前に少なくともページディレクトリを作成する段階を含む、
ことを特徴とする請求項１０に記載のコンピュータソフトウェア。
【請求項１７】
前記フォルトトレラントコンピュータシステムは、命令ロックステップで同時に作動する２つの対称型マルチプロセッシングコンピュータシステムを備えた複写フォルトトレラントコンピュータシステムであり、前記各対称型マルチプロセッシングコンピュータシステムが、仮想ページング構造内に反映された物理ページアクセス権限に基づいて共有メモリへのアクセスを制御し、前記対称型マルチプロセッシングコンピュータシステムのプロセッサ間で決定論的共有メモリアクセスを調整する、
ことを特徴とする請求項１０に記載のコンピュータソフトウェア。
【請求項１８】
前記対称型マルチプロセッシングコンピュータシステムが第１の対称型マルチプロセッシングコンピュータシステムを備え、
前記フォルトトレラントコンピュータシステムが、前記第１の対称型マルチプロセッシングコンピュータシステム及び第２の対称型マルチプロセッシングコンピュータシステムを備える連続再生フォルトトレラントコンピュータシステムであり、
前記方法が更に、
前記第１の対称型マルチプロセッシングコンピュータシステムに命令ストリームを処理させ、前記第１の対称型マルチプロセッシングコンピュータシステムにおけるイベントシーケンスを反映するジャーナルを作成させる段階と、
前記第１の対称型マルチプロセッシングコンピュータシステムの故障が検出されたときに、前記第１及び第２の対称型マルチプロセッシングコンピュータシステムが命令ロックステップで作動するように前記第２の対称型マルチプロセッシングコンピュータシステムを用いて前記ジャーナルを処理する段階と、
前記第２の対称型マルチプロセッシングコンピュータシステム内のプロセッサと関連付けられ且つ前記プロセッサに対する共有メモリへの物理ページアクセス権限を反映する仮想ページング構造を、前記第２の対称型マルチプロセッシングコンピュータシステムに作成させる段階と、
前記仮想ページング構造内に反映された物理ページアクセス権限に基づいて前記第２の対称型マルチプロセッシングコンピュータシステムに共有メモリへのアクセスを制御させて、前記第２の対称型マルチプロセッシングコンピュータシステム内のプロセッサ間で決定論的共有メモリアクセスを調整する段階と、
を更に含む、
ことを特徴とする請求項１０に記載のコンピュータソフトウェア。
【請求項１９】
命令ロックステップで同時に作動する２つの対称型マルチプロセッシングコンピュータシステムを備えた複写フォルトトレラントコンピュータシステムであって、
前記各対称型マルチプロセッシングコンピュータシステムが、仮想ページング構造内に反映された物理ページアクセス権限に基づいて共有メモリへのアクセスを制御して、前記対称型マルチプロセッシングコンピュータシステムのプロセッサ間で決定論的共有メモリアクセスを調整し、
前記仮想ページング構造が、前記対称型マルチプロセッシングコンピュータシステムの内の一方におけるプロセッサと関連付けられ、前記プロセッサに対する共有メモリへの物理ページアクセス権限を反映する、
ことを特徴とする複写フォルトトレラントコンピュータシステム。
【請求項２０】
前記共有メモリへのアクセスを制御する段階が、
プロセッサからメモリの一部分にアクセスする要求を受け取る段階と、
前記プロセッサに対する前記仮想ページング構造を、前記メモリの一部分にアクセスする他のプロセッサに対する仮想ページング構造と比較することによって、前記プロセッサによる許可されることになる前記メモリの一部分へのアクセスを決定する段階と、
前記プロセッサによる許可されることになる前記アクセスに基づいて、前記プロセッサに対する前記仮想ページング構造内の物理ページアクセス権限を更新する段階と、
を含む、
ことを特徴とする請求項１９に記載のフォルトトレラントコンピュータシステム。
【請求項２１】
前記プロセッサは、プロセッサ上で実行するタスクを含む、
ことを特徴とする請求項１９に記載のフォルトトレラントコンピュータシステム。
【請求項２２】
前記仮想ページング構造は、シャドーページテーブルを含み、該シャドーページテーブルは、前記対称型マルチプロセッシングコンピュータシステムのオペレーティングシステムによって作成されたページテーブルのコピーを含み、前記対称型マルチプロセッシングコンピュータシステムのプロセッサと関連付けられる、
ことを特徴とする請求項１９に記載のフォルトトレラントコンピュータシステム。
【請求項２３】
前記仮想ページング構造は、仮想アドレスから物理アドレスへの変換の２つ又はそれ以上のレベルを集合的に提供する多段ページテーブルを含む、
ことを特徴とする請求項１９に記載のフォルトトレラントコンピュータシステム。
【請求項２４】
仮想ページング構造を作成する段階が、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前にページテーブルを作成する段階を含む、
ことを特徴とする請求項１９に記載のフォルトトレラントコンピュータシステム。
【請求項２５】
仮想ページング構造を作成する段階が、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前に少なくともページディレクトリを作成する段階を含む、
ことを特徴とする請求項１９に記載のフォルトトレラントコンピュータシステム。
【請求項２６】
命令ロックステップで作動する第１の対称型マルチプロセッシングコンピュータシステム及び第２の対称型マルチプロセッシングコンピュータシステムを備えた連続再生フォルトトレラントコンピュータシステムであって、
前記各対称型マルチプロセッシングコンピュータシステムが、仮想ページング構造内に反映された物理ページアクセス権限に基づいて共有メモリへのアクセスを制御して、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサ間で決定論的共有メモリアクセスを調整し、
前記第１の対称型マルチプロセッシングコンピュータシステムが命令ストリームを処理して、前記第１の対称型マルチプロセッシングコンピュータシステムにおけるイベントシーケンスを反映するジャーナルを作成し、
前記第１の対称型マルチプロセッシングコンピュータシステムの故障が検出されたときに、前記第２の対称型マルチプロセッシングコンピュータシステムを用いて前記ジャーナルを処理し、前記第１及び第２の対称型マルチプロセッシングコンピュータシステムが命令ロックステップで作動し、
前記仮想ページング構造が前記対称型マルチプロセッシングコンピュータシステムの各々におけるプロセッサと関連付けられ、前記プロセッサに対する共有メモリへの物理ページアクセス権限を反映する、
ことを特徴とする連続再生フォルトトレラントコンピュータシステム。
【請求項２７】
前記共有メモリへのアクセスを制御する段階が、
プロセッサからメモリの一部分にアクセスする要求を受け取る段階と、
前記プロセッサに対する前記仮想ページング構造を、前記メモリの一部分にアクセスする他のプロセッサに対する仮想ページング構造と比較することによって、前記プロセッサによる許可されることになる前記メモリの一部分へのアクセスを決定する段階と、
前記プロセッサによる許可されることになる前記アクセスに基づいて、前記プロセッサに対する前記仮想ページング構造内の物理ページアクセス権限を更新する段階と、
を含む、
ことを特徴とする請求項２６に記載のフォルトトレラントコンピュータシステム。
【請求項２８】
前記プロセッサは、プロセッサ上で実行するタスクを含む、
ことを特徴とする請求項２６に記載のフォルトトレラントコンピュータシステム。
【請求項２９】
前記仮想ページング構造は、シャドーページテーブルを含み、該シャドーページテーブルは、前記対称型マルチプロセッシングコンピュータシステムのオペレーティングシステムによって作成されたページテーブルのコピーを含み、前記対称型マルチプロセッシングコンピュータシステムのプロセッサと関連付けられる、
ことを特徴とする請求項２６に記載のフォルトトレラントコンピュータシステム。
【請求項３０】
前記仮想ページング構造は、仮想アドレスから物理アドレスへの変換の２つ又はそれ以上のレベルを集合的に提供する多段ページテーブルを含む、
ことを特徴とする請求項２６に記載のフォルトトレラントコンピュータシステム。
【請求項３１】
仮想ページング構造を作成する段階が、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前にページテーブルを作成する段階を含む、
ことを特徴とする請求項２６に記載のフォルトトレラントコンピュータシステム。
【請求項３２】
仮想ページング構造を作成する段階が、前記対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前に少なくともページディレクトリを作成する段階を含む、
ことを特徴とする請求項２６に記載のフォルトトレラントコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願に対する相互参照）
本出願は、２００５年５月２４日に出願された名称「ＳＹＭＭＥＴＲＩＣ  ＭＵＬＴＩＰＲＯＣＥＳＳＯＲ  ＦＡＵＬＴ  ＴＯＬＥＲＡＮＴ  ＣＯＭＰＵＴＥＲ  ＳＹＳＴＥＭ（対称型マルチプロセッサ・フォルトトレラントコンピュータシステム）」の米国仮出願第６０／６８３，８０１号の利益を主張し、該出願は引用により組み込まれる。
【０００２】
本明細書は、フォルトトレラント（耐障害性）、フォルトレジリアント（障害回復性）、又はディザスタトレラント（耐災害性）コンピュータシステムにおいて疎結合対称型マルチプロセッサの同期実行を維持することに関する。
【背景技術】
【０００３】
フォルトトレラントは一般に、スペース（空間）又は時間における複製を必要とする。スペースにおける複製（複写と呼ぶことができる）では、プロセッサの２つのセットは、同じ起点及び同じ入力ストリームを与えた場合に、同じイベントシーケンスを示さなければならない。故障時には、故障が発生したプロセッサのセットは機器構成から取り除かれ処理が続行される。
【０００４】
時間における複製（再生と呼ぶことができる）では、チェックポイント／再始動及び連続再生という２つの一般的な選択肢がある。チェックポイント／再始動システムは、システムの現在の状態のチェックポイント又はスナップショットと、チェックポイントからの全入力のジャーナルファイルとを作成する。故障時には、チェックポイントがプロセッサの別のセット上にロードされ、ジャーナルファイルが適用される。幾つかの実装又はある条件では、元のイベントシーケンスは、例えばオペレーティングシステム（ＯＳ）、アプリケーション、及びチェックポイントファシリティの間の調整レベルによっては重要ではない場合がある。一例として、作業がコミットされていない場合には、あらゆる許可されたイベントシーケンスが受け入れ可能である。
【０００５】
複製はまた、プロセッサの２つのセット（複写など）及びジャーナルストリーム（チェックポイント／再始動システムに類似する）を用いる連続再生によって遂行することができる。プロセッサの第１のセットは、観測されたイベントシーケンスをジャーナルに記録する。プロセッサの第２のセットは、このジャーナルを用いて再生中に当該イベントシーケンスを再現する。
【０００６】
一般に複写は、イベントシーケンスにおいて高レベルの決定性を必要とする。複写の利点は、フォルトトレランスを一般にアプリケーション非依存及びオペレーティングシステム非依存にすることができる点である。複写の欠点は、一般に複写が専用の複写ハードウェア及び高レベルの決定性を必要とする点である。
【０００７】
チェックポイント／再始動システムは、イベントシーケンスにおいて必ずしも決定性を要するとは限らない。またチェックポイント／再始動システムは、専用の複写ハードウェアリソースを必要としない。しかしながら、チェックポイント／再始動システムは一般に、システムを機能させるためにアプリケーション及びオペレーティングシステムの修正を必要とする。またチェックポイント／再始動システムは、チェックポイントの周波数及びジャーナルファイルの長さに基づいてある程度の長い回復時間を有する。
【０００８】
連続再生は、複写と同様にアプリケーション及びオペレーティングシステム非依存であるが、必要とされる決定性のレベルは低い。複写と同様、連続再生は専用の複写ハードウェアを要する。連続再生は、チェックポイント／再始動と類似したジャーナルストリームを必要とするが、チェックポイント又はオペレーティングシステムのサポートを必要とせず、一般に、長い回復時間を有さない。ジャーナルストリームは、リソースの１次セットからリソースの２次セットに流れる方向のシーケンスであり、観測したイベントシーケンスを示す。
【発明の開示】
【課題を解決するための手段】
【０００９】
１つの一般的な態様において、対称型マルチプロセッシングコンピュータシステムを用いたフォルトトレラントコンピュータシステムの実装は、仮想ページング構造を作成し、仮想ページング構造内に反映された物理ページアクセス権限に基づいて共有メモリへのアクセスを制御して対称型マルチプロセッシングコンピュータシステム内のプロセッサ間で決定論的共有メモリアクセスを調整することによって、対称型マルチプロセッシングコンピュータシステムの少なくとも１つを制御する段階を含む。仮想ページング構造は、対称型マルチプロセッシングコンピュータシステム内のプロセッサと関連付けられ、このプロセッサに対して共有メモリへの物理ページアクセス権限を反映する。
【００１０】
実装は、次の機能の内の１つ又はそれ以上を含むことができる。例えば、共有メモリへのアクセスを制御する段階は、プロセッサからメモリの一部分にアクセスする要求を受け取る段階と、該プロセッサに対する仮想ページング構造を、メモリの一部分にアクセスする他のプロセッサに対する仮想ページング構造と比較することによってプロセッサによるメモリの一部分への許可すべきアクセスを決定する段階と、プロセッサによる許可されることになるアクセスに基づいてプロセッサに対する仮想ページング構造内の物理ページアクセス権限を更新する段階とを含むことができる。
【００１１】
プロセッサは、プロセッサ上で実行するタスクを含むことができる。仮想ページング構造は、シャドーページテーブルを含むことができ、該シャドーページテーブルは、対称型マルチプロセッシングコンピュータシステムのオペレーティングシステムによって作成されたページテーブルのコピーを含み、該対称型マルチプロセッシングコンピュータシステムのプロセッサと関連付けられる。仮想ページング構造は、仮想アドレスから物理アドレスへの変換の２つ又はそれ以上のレベルを集合的に提供する多段ページテーブルを含むことができる。
【００１２】
ページテーブルは、対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前に作成することができる。少なくともページディレクトリは、対称型マルチプロセッシングコンピュータシステム内のプロセッサによるあらゆるタスクの実行の前に作成することができる。
【００１３】
フォルトトレラントコンピュータシステムは、命令ロックステップで同時に作動する２つの対称型マルチプロセッシングコンピュータシステムを含む複写フォルトトレラントコンピュータシステムとすることができる。各対称型マルチプロセッシングコンピュータシステムは、仮想ページング構造内に反映された物理ページアクセス権限に基づいて共有メモリへのアクセスを制御して、対称型マルチプロセッシングコンピュータシステム内のプロセッサ間で決定論的共有メモリアクセスを調整する。
【００１４】
フォルトトレラントコンピュータシステムは、第１の対称型マルチプロセッシングコンピュータシステム及び第２の対称型マルチプロセッシングコンピュータシステムを含む連続再生フォルトトレラントコンピュータシステムとすることができる。第１の対称型マルチプロセッシングコンピュータシステムは命令ストリームを処理し、該第１の対称型マルチプロセッシングコンピュータシステムにおけるイベントシーケンスを反映するジャーナルを作成する。第１の対称型マルチプロセッシングコンピュータシステムの故障が検出されたときには、第２の対称型マルチプロセッシングコンピュータシステムを用いてジャーナルが処理され、第１及び第２の対称型マルチプロセッシングコンピュータシステムが命令ロックステップで作動するようにする。第２の対称型マルチプロセッシングコンピュータシステムは仮想ページング構造を作成し、該仮想ページング構造は第２の対称型マルチプロセッシングコンピュータシステム内のプロセッサと関連付けられて、且つプロセッサに対する共有メモリへの物理ページアクセス権限を反映する。共有メモリへのアクセスは、仮想ページング構造内に反映された物理ページアクセス権限に基づいて制御されて、第２の対称型マルチプロセッシングコンピュータシステム内のプロセッサ間で決定論的共有メモリアクセスを調整する。
【００１５】
実装の１つ又はそれ以上の詳細が添付図面及び以下の説明において記載される。他の機能は、これらの説明及び図面、並びに請求項から明らかになるであろう。
【発明を実施するための最良の形態】
【００１６】
種々の図における同様の参照記号は同様の要素を表す。
対称型マルチプロセッサ（ＳＭＰ）フォルトトレラント及び／又はディザスタトレラントコンピュータシステム（総称的に「フォルトトレラントコンピュータシステム」）を生成するための技術を説明する。複写を用いる例示的なＳＭＰフォルトトレラントコンピュータシステムを説明し、同様に連続再生を用いる別の例示的なＳＭＰフォルトトレラントコンピュータを説明する。
【００１７】
ＳＭＰに伴う問題は、メモリへの同時アクセスの調整及び解決に関する。単一のプロセッサと割り込み部及びＩ／Ｏ完了部との対話にのみ対処するシングルプロセッサのフォルトトレラントシステムとは対照的に、ＳＭＰフォルトトレラントコンピュータシステムはまた、複数のプロセッサ間の対話も考慮に入れる必要がある。従って、対称型マルチプロセッサ・フォルトトレラントコンピュータシステムは、シングルプロセッサ・フォルトトレラントコンピュータシステムと比較して、追加のレベルの決定性に対処する必要がある。複写又は連続再生のいずれかを用いるフォルトトレラントシステムの１つの課題は、プロセッサ及びタスクによるメモリアクセスの順序付けを再現可能にすることである。別の課題は、メモリアクセスが発生する場所又は時点に関する知識を持たずにメモリアクセスの順序付けを再現することであり、これは、フォルトトレラントシステムにおいてオペレーティングシステム及びアプリケーション非依存性を維持するのに必要である。
【００１８】
銀行口座への２つの同時変更を処理するアプリケーションの実施例を示す。銀行口座は７５ドルの初期残高を有し、銀行口座への一方の変更が１００ドルを控除するものであり、他方の変更が５０ドルを加算するものである。２つのプロセッサが各々、銀行口座への変更の内の一方を実質的に同時に実施しようと試みる場合、２つの可能な口座残高シーケンスが存在する。各可能なシーケンスは同じ解を生成する。より具体的には、プロセッサＡは、口座から１００ドルを控除しようと試み、同時にプロセッサＢは口座に５０ドルを加算しようと試みる。プロセッサＢが加算を実施する前にプロセッサＡが控除を実施する場合には、口座残高シーケンスは、７５ドル（初期残高）、−２５ドル（プロセッサＡが控除した後）、＋２５ドル（プロセッサＢが加算した後）である。それとは対照的に、プロセッサＡが控除を実施する前にプロセッサＢが加算を実施する場合には、口座残高シーケンスは、７５ドル（初期残高）、１２５ドル（プロセッサＢが加算した後）、２５ドル（プロセッサＡが控除した後）である。フォルトトレラントシステムは、アプリケーションにより生成される解を全く同じように生成しなければならない。
【００１９】
共通メモリアクセスの別の形態は、メモリアクセスの疎結合形態であり、例えば監視機能に用いることができる。例えば、データベースシステムは、データベース更新回数、記録が修正された回数、及び時間間隔当たりに実行されるトランザクションの数などを追跡するための性能指標のセットを保持することができる。幾つかのデータベースアプリケーションの関連では、指標は、現実の狭近似であることだけが必要とされる場合がある（より厳密な評価値を必要としない）。例示的な実施例では、プロセッサＡ及びプロセッサＢは、競合を回避するどのような試みも行わずに記録カウントをインクリメントする。記録カウント値５から始めて、両方のプロセッサがインクリメントを試みた後のカウントは７とすることができ、これはインクリメントが衝突しない場合である。しかしながら、２つのプロセッサのインクリメントが衝突する場合、両方のプロセッサがインクリメントを試みた後のカウントは６になる。幾つかの状況では、マルチプロセッシングデータベースアプリケーションの開発者は、目的とするアプリケーションにはどちらの解（すなわち６又は７）も十分であり、カウントが７であるか又は６であるかという厳密な記録は必要ではないと判断する可能性がある。しかしながら、競合を回避するために緩やかにカウントするイベントのこのような実施は、非決定論的な挙動であり、複写又は連続再生のいずれかを用いるフォルトトレラントシステムにおいて用いるべきではない。フォルトトレラントシステムは一貫した解を生成する必要があるので、複写又は連続再生のいずれのフォルトトレラントシステムにおいても非決定論的な挙動は許されない。
【００２０】
業界標準のマザーボードを用いてＳＭＰフォルトトレラントシステムを製作するのは困難な場合がある。一般に、クロック・ロックステップ設計は、システム内の複製部分が同じクロック構造を受け取り、このクロック構造に対して同じ様に応答することに依存する。これは、決定論的且つ反復可能な様式で自動的に衝突を解決するのに役立つ。このことには、クロック構造、メモリ、チップセット、プロセッサ、及びマザーボードレイアウトが決定論的に動作することを必要とする。これはカスタム設計においては実施可能とすることができるが、業界標準のマザーボードでは一般に利用できない可能性がある。
【００２１】
対称型マルチプロセッサ・フォルトトレラントシステムにおいて競合解決のシーケンスを保証することができるように命令ロックステップ設計を調整する技術を説明する。命令ロックステップとは、２つのプロセッサが、同じ始動状態で且つそれぞれの命令ストリームに対して同じ入力を加えたと仮定した場合に、同じ命令ストリームを実行するようなプロセッサ調整を指す。ここでの説明は、メモリアクセスが決定論的に扱われるようなイベントシーケンス調整に関する。加えて、業界標準のサーバ及びマザーボードを用いて、或いは市場で入手可能なサーバ及びマザーボードを用いて、疎結合（命令ロックステップを通じて結合するような）対称型マルチプロセッシング・フォルトトレラントシステムの構築を可能にする技術を説明する。
【００２２】
複写フォルトトレラントシステム
図１は、共有メモリへのアクセスが、仮想ページング構造内に反映される物理ページアクセス権限に基づく対称型マルチプロセッシングコンピュータシステムを用いた複写フォルトトレラントシステムの実施例を示している。システム１００は、２つの業界標準の対称型マルチプロセッシングコンピュータサーバ１１０及び１６０を含み、例えば、各々は、標準的なｘ８６サーバとすることができる。サーバ１１０は、２つの実行環境、すなわちコンピュータ環境１１５とＩ／Ｏ環境１２０とを含む。Ｉ／Ｏ環境１２０は、リンク１３５を通じたディスク１３０へのアクセス、リンク１４５を通じたネットワーク１５０へのアクセス、及びリンク１９５を通じた別のサーバ１６０へのアクセスを有する。サーバ１６０は、２つの実行環境、すなわちコンピュータ環境１６５とＩ／Ｏ環境１７０とを含む。Ｉ／Ｏ環境１７０は、リンク１８５を通じたディスク１８０へのアクセス、リンク１５５を通じたネットワーク１５０へのアクセス、及びリンク１９５を通じた他方のサーバ１１０へのアクセスを有する。Ｉ／Ｏ環境１２０及び１７０は、システム１００において非同期の、従って非決定論的なＩ／Ｏ操作を扱う。コンピュータ環境１１５及び１６５は、対称型マルチプロセッシングの決定論的要素であり、命令ロックステップで動作する。簡単にするために、システム１００は、例示的なフォルトトレラントシステムの一般的な形態を表しているが、他の構成を用いてもよい。例えば、複数のネットワーク、ネットワーク接続ストレージ、複数のディスクサブシステム、又はストレージエリアネットワーク（ＳＡＮ）ストレージサブシステムを含む構成を用いることができる。一般に、両方のサーバ１１０及び１６０は、同じ初期状態から始動し、同じ入力データに対して操作して同じ出力応答を生成する命令ロックステップで動作する。
【００２３】
図２は、図１のサーバ１１０又は１６０の内の一方の実装とすることができるサーバ２００を示している。サーバ２００は、２つの構成要素、すなわちＩ／Ｏ環境２２０及びコンピュータ環境２１５を有する。Ｉ／Ｏ環境２２０は、Ｉ／Ｏデバイスを扱うための１つ又はそれ以上のプロセッサを含むことができ、コンピュータ環境２１５と通信する。コンピュータ環境２１５は、複数のアプリケーション処理部２０１、２０２、．．．２４０及びロックステップ管理部２４０から構成される。アプリケーション処理部は、オペレーティングシステム及びオペレーティングシステム上で実行されるアプリケーションを含む。オペレーティングシステム及びアプリケーションをアプリケーション処理部とみなすことは、フォルトトレラントシステムにとって有用である。例えば、これにより、フォルトトレラントシステムが業界標準のオペレーティングシステム及びアプリケーションを使用可能になることができる。
【００２４】
図１及び２を参照すると、サーバ１１０のコンピュータ環境１１５内のアプリケーション処理部２０１、２０２、．．．２４０は、サーバ１６０のコンピュータ環境１６５内のアプリケーション処理部２０１、２０２、．．．２４０によって複写される。コンピュータ環境１１５内の各アプリケーション処理部は、コンピュータ環境１６５内の対応するアプリケーション処理部と命令ロックステップで動作している。各コンピュータ環境１１５及び１６５内のロックステップ管理部２４０は、アプリケーション処理部２０１、２０２、．．．２０４の命令ストリームを調整する役割を果たす。
【００２５】
コンピュータの中央処理ユニット（ＣＰＵ）は、アプリケーション処理部２０１及びロックステップ管理部２４０の一部分で表すことができる。カリフォルニア州サンタクララ所在のＩｎｔｅｌ  ＣｏｒｐｏｒａｔｉｏｎによるＩｎｔｅｌ  Ｐ４  ＸｅｏｎのようなハイパースレッドＣＰＵ設計では、各ハイパースレッドは、アプリケーション処理部２０１のインスタンス及びロックステップ管理部２０４の一部分で表すことができる。マルチコアＣＰＵ設計では、各コア又はコア内の各ハイパースレッドは、アプリケーション処理部２０１のインスタンス及びロックステップ管理部２０４の一部分で表すことができる。
【００２６】
Ｉ／Ｏ環境２２０内にロックステップ管理部２４０が存在する、ロックステップ管理部２４０に対する代替の手法を用いることができる。このような場合には、一般にコンピュータ環境２１５において同期アクティビティーのみが発生する。またロックステップ管理部２４０は、コンピュータ環境２１５とＩ／Ｏ環境２２０とにまたがることができる。
【００２７】
幾つかの実装では、コンピュータ環境２１５内の１つのプロセッサをロックステップ管理部２４０に専用にすることができる。代替的に又はこれに加えて、コンピュータ環境２１５内の各プロセッサは、ロックステップ管理部２４０の一部を実行することができる。図２の実施例では、アプリケーション処理部２０１にロックステップ管理部２４０の一部分を加えたものがコンピュータ環境２１５内の１つの論理プロセッサを表している。
【００２８】
ロックステップ管理部２４０は、一般に２つの基本技術を通じてロックステップアプリケーション処理部２０１を制御する。第１の技術は、アプリケーション処理部２０１によって行うべき作業分担をスケジュール化することを含む。第２の技術は、仮想メモリから物理メモリへのマッピングページテーブルを制御することを含む。分担技術は、未知の命令ストリームを同期的に分割又は切り分けるのに用いるプロセスである。実行中のオペレーティングシステム及びアプリケーションは、フォルトトレラントコンピュータシステムで用いるように修正されておらず、すなわち市場のオペレーティングシステム又はアプリケーションへの修正を必要とせずに、これらのオペレーティングシステム及びアプリケーションをフォルトトレラントコンピュータシステムの一部として用いることができるので、該オペレーティングシステム及びアプリケーションは両方とも未知の命令ストリームと考えられる。従って、オペレーティングシステム及びアプリケーションは、フォルトトレラント状況を認識せずにフォルトトレラントコンピュータシステムの一部として動作することができる。
【００２９】
多くの場合、オペレーティングシステムは、イベントを監視し、タスク及びスレッドをスケジュール化するためにタイマ割り込みを用いる。従来のタイマ割り込みは、必ずしも命令ストリームに対して同期しておらず、従って、複写フォルトトレラントシステムにおいて逸脱を生じる可能性がある。命令ストリームに関連する作業分担は、プロセッサに同期割り込みを提供するのに使用される。この作業分担が完了すると、分担割り込みはアプリケーション処理部からロックステップ管理部へと制御を移行させる。
【００３０】
ＳＭＰ処理環境を制御するための基本プロセスは、プロセッサに修正仮想ページング構造を提示することである。次いで、プロセッサ間の対話をページフォルト及びページング構造変化を通じて検出し制御することができる。
【００３１】
図３〜８を参照すると、メモリアクセスの調整には一般に、メモリアクセス要求を検出して必要に応じて当該要求の配信に介入できることが必要である。これを行うための１つの手法は、仮想アドレス変換のためのメモリ管理システムにおけるページフォルトの使用によるものである。
【００３２】
図３を参照すると、例示的な変換プロセス３００は、３２ビットのページテーブル及び４Ｋの物理ページを用いて４ＧＢのアドレス空間を扱う、カリフォルニア州Ｓｕｎｎｙｖａｌｅ局所性のＡＭＤ又はＩｎｔｅｌ（登録商標）によるｘ８６プロセッサファミリー用の仮想アドレス３１０から物理アドレスへの変換を示している。またこの技術は、２メガバイトページ、４メガバイトページ、６４ビットページテーブル、３６ビットページサイズ拡張、３６ビットページアドレス拡張、及び５２ビット線形アドレス変換など、別のタイプのｘ８６プロセッサに対する他のメモリ変換構造で用いることもできる。更にこれらの技術は、他のプロセッサファミリーにも適用することができる。
【００３３】
命令は、３２ビットの仮想アドレス３１０を用いてメモリへの参照を行う。テーブル３３０及び３４０を用いて仮想アドレス３１０を物理アドレスに変換する。プロセッサレジスタＣＲ３  ３２０は、ページディレクトリ（ＰＤ）テーブル３３０のベースアドレスを含む。仮想アドレス３１０のビット＜３１：２２＞３１２は、ページディレクトリテーブルのベースからの１０ビットのインデックスを提供する。このメモリ位置の内容は、ページディレクトリエントリ（ＰＤＥ）３３５と呼ばれ、これはページテーブル（ＰＴ）３４０にベースアドレスを提供する。仮想アドレス３１０のビット＜２１：１２＞３１４は、ページテーブルのベースからの１０ビットのインデックスを提供する。このメモリ位置の内容はページテーブルエントリ（ＰＴＥ）３４５と呼ばれ、これは参照しているメモリの物理ページ３５０におけるベースアドレスを提供する。仮想アドレス３１０のビット＜１１：００＞３１６は、物理ページのベースから参照している物理メモリ位置３５５への１２ビットに対するインデックスを提供する。
【００３４】
図４及び５は、図３のＰＤＥ３３０のようなページディレクトリエントリと、図３のＰＴＥ３４５のようなページテーブルエントリのフォーマットをそれぞれ示している。これらのテーブルの全ての中で重要なビットは、ビット＜２：０＞４１０である。ビット０は、セットされているときにはこのエントリにより指されている構造がメモリ内に存在することを示し、クリアされているときにはアクセス不可である（ディスクにページアウトされているか、又は存在しない）ことを示す、存在（Ｐ）フラグ４１２である。ビット１は、このエントリにより指されている構造が書込み可能であることを示すためにセットされる、書込み可能フラグ４１４である。ビット２は、このエントリが指している構造に対してユーザ又はシステム（Ｕ／Ｓ）アクセスが許可されることを示すアクセスフラグ４１６である。加えて、ビット＜１１：９＞４２０は、プロセッサのハードウェアが構造内でこれらのビットを使用せず、ソフトウェアが要求通りにこれらを用いることができることを示すために利用可能（ＡＶＬ）としてマークされる。
【００３５】
ページフォルトは、許可（Ｒ／Ｗアクセス）、セキュリティ（Ｕ／Ｓアクセス制限）、又は物理的存在の欠如（Ｐフラグ）により仮想メモリ参照を正常に行うことができない場合に発生するシステムトラップである。このトラップによって、プロセッサは、現在の命令（メモリアクセス）の実行を中断し、ページフォルトハンドラの実行を開始する。アクセス違反を解決することができた場合には、ページテーブルを調節し、割り込まれた命令ストリームを再開して、更新されたページテーブルによって仮想メモリ参照が再変換されるようにする。再変換が正常にされると、命令ストリームはページフォルトが発生しなかったかのように続行する。
【００３６】
ページフォルトを用いて、物理メモリページへのアクセスを調整することができる。仮想変換制御部Ｒ／Ｖ及び存在ビットを修正することによって、現在の命令ストリームがメモリにアクセスするのを許可又は阻止することができる。このような技術が全てのアクティブな命令ストリームに適用されると、以下でより詳細に説明するように、メモリの全てに対して調整されたアクセスを達成することができる。
【００３７】
以下で検討する目的で次の用語が用いられる。タスクとは、オペレーティングシステムによってスケジュール化が可能な命令シーケンスである。スレッドとは、マルチスレッドプログラムにおいて発生する、共通仮想アドレス構造を共有する幾つかのタスクの内の１つである。プロセスとは、固有の仮想アドレス構造を有するタスクである。
【００３８】
図６は、オペレーティングシステムの観点から見た仮想メモリから物理メモリへの構成の実施例６００を表している。実施例６００では、オペレーティングシステムは、幾つかのタスク（６０１、６０２、．．．６０３）をサポートする。各タスクは、オペレーティングシステムがシステム仮想アドレス空間６１０全体にわたって維持するタスクの固有アドレス空間を有する。あらゆる時点において、タスク６０１のアドレス空間のメモリページは物理メモリ６４０及び／又はシステムページファイル６２０内に含めることができる。物理メモリ６４０内に含まれるアドレス空間に対して、図３に関して上述されたように、仮想変換テーブル６３０は、仮想アドレスから物理アドレスへの変換を提供する。通常、オペレーティングシステムによって維持されているタスクは、存在するプロセッサ（ＣＰＵ）の数よりも遙かに多い。各ＣＰＵは、図３におけるように単一のタスク（６０１、６０２、又は６０３）に対して仮想から物理への変換構造を含む。オペレーティングシステムは、タスク６０１においてページフォルトが発生する場合は常に、フォルトを生じているタスクを終了させることによって、或いは仮想変換テーブル６３０及び物理メモリ６４０の変更を通じてフォルトを生じたメモリ要求を有効にすることによってこのフォルトを解決する。このフォルトの解決には、物理メモリ６４０のページの再割り当て、タスク６０１並びに他の何らかのタスク（６０２及び６０３）に対する仮想変換テーブル６３０の更新、及び物理メモリ６４０とシステムページファイル６２０との間のメモリページの交換が必要となる場合がある。
【００３９】
図７を参照すると、図６の仮想変換テーブル６３０に関する更なる詳細が示されている。各ＣＰＵ７０１〜７０４は、対応するＣＲ３レジスタ７１１、７１２、７１３、及び７１４を有し、当該ＣＰＵ上で実行される対応するタスク（すなわち７２１、７２２、７２３、及び７２４）に対する仮想変換構造に向けたポインタであるページディレクトリベースアドレスを保持する。システムの相互接続性を強調するため、図７では変換構造の一部だけが示されている。タスク７２１及び７２２は、共通のページ変換構造ＰＤ７３０を共有し、又は定義によれば、これらのタスクは、単一のプロセスからの２つのスレッドである。タスク７２３及び７２４は、ページ変換構造ＰＤ５４０及びＰＤ７５０にそれぞれ対応する別個のプロセスである。図７に示すように、同じ物理ページ、すなわち物理ページ７８０に帰着する異なる仮想アドレス変換が存在する。より具体的には、表示７９０のテーブルは、タスク７２１〜７２４に対しての物理ページ７８０への種々の仮想変換のリストを示している。タスク７２１は、物理ページ７８０への１つのマッピング、すなわちＰＤＥ７３１／ＰＴＥ７６１を有する。タスク７２１と同じプロセスからのスレッドであるタスク７２２は、物理ページ７８０への同じ単一のマッピング、すなわちＰＤＥ７３１／ＰＴＥ７６１を有する。タスク７２３は、物理ページ７８０への３つのマッピング、すなわちＰＤＥ７４１／ＰＴＥ７６１、ＰＤＥ７４２／ＰＴＥ７７１、及びＰＤＥ７４２／ＰＴＥ７７２を有する。タスク７２４は、物理ページ７８０への２つのマッピング、すなわちＰＤＥ７５１／ＰＴＥ７７１及びＰＤＥ７５１／ＰＴＥ７７２を有する。
【００４０】
従って、図７は、マッピング構造においてタスク間で共有する要素が共有アクセス権限を示す、仮想アドレスから物理アドレスへの変換を表している。以下により完全に説明するように、この構造を図８の構造８００と共に用いて、メモリへの決定論的な共有アクセスを調整することができる。
【００４１】
図８は、各個々のＣＰＵ（７０１、７０２、７０３、及び７０４）に提示されたページ変換構造が実際の物理ページにおいて重複に関係なく固有であるように構成された、仮想アドレスから物理アドレスへの変換構造８００を示している。仮想アドレスから物理アドレスへの変換構造８００は、仮想ページング構造と呼ぶことができる。タスクに対する物理ページアクセス権限を用いることで、仮想アドレスから物理アドレスへの変換構造８００を用いてメモリアクセスを調整することができる。図８は、仮想アドレスから物理アドレスへのマッピングにおいては図７と同一である。相違点は、図８がどのようなページディレクトリ又はページテーブル構造も共有しない点である。あらゆるＣＰＵは、仮想アドレスから物理アドレスへのマッピングテーブルの別個のセットを有する。仮想アドレスから物理アドレスへのあらゆる変換経路が固有であることで、アクセス権限は、図４及び５に示されたＲ／Ｗビット４１４及び存在ビット４１２を修正することによって各タスクに対して個々に制御することができる。
【００４２】
固有の変換を作成するための２つの技術が提示される。第１の技術は、シャドーページテーブルと呼ぶことができる。オペレーティングシステムは、図７におけるようにページテーブル構造を構成する。いずれかのタスクが実行を開始する前に、このタスクに対する図７のページテーブル構造を図８のシャドーページテーブル構造内にコピーする。タスク７２１では、ページテーブル構造は、ＣＲ３  ７１１から位置付けられる。ページディレクトリＰＤ７３０はＰＤ８３０Ａにコピーされる。ページテーブルＰＴ７６０はＰＴ８６０Ａにコピーされる。新しいページディレクトリであるＰＤ８３０Ａは、このディレクトリが新しいページテーブルであるＰＴ８６０Ａを指すように修正される。しかしながら、新しいページテーブルＰＴ８６０Ａは、古いページテーブルＰＴ７６０と同じ物理ページを指す。最後にＣＲ３  ７１１は、ＰＤ７３０ではなくＰＤ８３０Ａを指すように修正される。
【００４３】
この固有の変換構造を作成するための第２の技術は、多段ページテーブルと呼ぶことができる。多段ページテーブルは、２つ又はそれ以上のレベルの仮想アドレスから物理アドレスへの変換を提供する。これは、システムの仮想化を助けるためにプロセッサチップに付加されたハードウェアメカニズムである。仮想化システムでは、実際のハードウェア上で実行されるホストオペレーティングシステムが存在する。また、仮想化されたハードウェア上で各々が実行されている幾つかのゲストオペレーティングシステムも存在する。ゲストオペレーティングシステムは、実際のハードウェア上にインストールされているかのように実行する。ゲストオペレーティングシステムによりセットアップされる仮想アドレスから物理アドレスへの変換は現実のものではない。あらゆるゲストオペレーティングシステムは、同じ物理メモリ位置にアクセスできると考える。これは、仮想アドレスから物理アドレスへの変換がアプリケーションに対して解決する問題と実質的に同じであり、この各アプリケーションは、同じ物理アドレス空間を用いているかのように作動し、現実には、各アプリケーションが同じ仮想アドレス空間を用いて作動する。多段ページテーブルを用いると、ゲストオペレーティングシステム上で実行されるアプリケーションは仮想メモリ位置を参照する。実際のハードウェアは、ゲスト仮想アドレスをゲスト物理アドレスに変換するためにゲストオペレーティングシステムによりセットアップされるページテーブル構造を用いる。ゲスト物理アドレスは、プロセッサ特定仮想アドレスとして用いられ、ホストオペレーティングシステムによりセットアップされるページテーブルを用いて物理アドレスに転換される。以下でより詳細に説明するように、２つのレベルの多段化された（仮想アドレス−仮想アドレス−物理アドレス変換）ページテーブル構造を用いて、タスク毎に固有のページテーブル構造を提供することができる。
【００４４】
図８のページング構造８００のような仮想ページング構造を作成するための１つの手法は、オペレーティングシステムにより生成された実際のページング構造を修正して、元のページング構造と現在動作している構造との間の相違点を追跡するためにデータ構造を維持するようにすることである。別の方法は、ページング構造を複製し、修正したページング構造の複写物をプロセッサに提示することである。この複製は、一斉複製（全テーブルを直ちに複写する）、又は漸次的複製（プロセッサがそのアドレス空間のセクションにアクセスするときに複写テーブル構造が拡張される）とすることができる。全テーブルを一斉に複写するプロセスを以下に説明する。
【００４５】
オペレーティングシステムによりタスクが最初に作成されるときには、図７におけるようなタスクをロードするのに十分大きいページング構造が作成される。次いで、タスクをメモリ内にロードし、ページングテーブルにおいて適切なビット（Ｐ、Ｒ／Ｗ、Ｕ／Ｓ）が設定される。最上位レベルのページング構造のベースアドレスがＣＲ３レジスタにロードされ、次いで、タスクが開始される。ロックステップ管理部２４０は、ＣＲ３へのアクセスをトラップすることによってこの挙動を修正する。オペレーティングシステムによりセットアップされたページング構造がシャドーセット（図８）に複写される。シャドー構造は、制限されたアクセス権限でセットアップされる。システム内の全ての他のプロセッサに対するシャドーページング構造がこのタスクに対するシャドーページング構造と比較される。他のいずれかのプロセッサが特定のページへの書込みアクセスをできる場合には、このタスクはアクセスを取得しない（ページが存在しないものとしてマークされ、Ｐ＝０）。他のいずれかのプロセッサが特定ページへの読出しアクセスをできる場合には、このタスクは読出しアクセスをする。他のプロセッサが特定ページへのアクセスをできない場合には、このタスクは、必要な場合に書込みアクセスをすることができる。次いで、ＣＲ３レジスタには、ロックステップ管理部２４０によりシャドーページング構造のベースアドレスがロードされる。このページング構造は、ページへの書込みアクセスを有するプロセッサが当該ページへの固有のアクセスをすることを保証する。ページを共有する唯一の手法は、読出しアクセスを用いるものである。
【００４６】
アプリケーションの実行は以下のように進む。
１）全てのプロセッサに実行すべき作業の最大分担がロードされる。
２）全てのプロセッサは、排他的書込みアクセスを保証するページングテーブルのシャドーセット上で実行されている。
【００４７】
全プロセッサは、ページがフォルトするか又は作業分担が終了するまで命令ストリームを実行する。プロセッサがページ参照でフォルトすると常に、当該ページにどのアクセスを認可すべきかについてロックステップ管理部２４０が決定する。ページフォルトの解決又は作業分担の終了後のいずれかを待機して全プロセッサが機能停止した場合には、ページング構造を更新し、新しい分担目標で実行を続行する。
【００４８】
ページアクセスは、アクセスなし、読出し、及び読出し／書込みの間で変更される。アクセスなしは、メモリからそのページが実際に存在しない、又は潜在的競合を回避するために問題のプロセッサがアクセス拒否されていることを意味する。読出しは、このプロセッサに対する無制限の読出しアクセスを意味する。所与の物理ページへの読出しアクセスは、複数のプロセッサに対して同時に認可することができる。読出し／書込みは、このプロセッサによる所与の物理ページへの排他的アクセスを意味する。
【００４９】
図９は、トラップをＰＴＥアクセスに基づいて調整する場合の２つのプロセッサＡとＢ（すなわちＰｒｏｃＡとＰｒｏｃＢ）との間の対話９００を示している。同じ種類の対話がＰＤＥについても発生する。対話９００は、全ページがアクセスなしとして始める状況で示されている。これは、タスクが最初に実行し始めたときにメモリ内に存在しないページについての場合である。これとは対照的に、生成されたスレッドでは、ＰＴＥは、そのエントリの大部分において読出し専用アクセスで始める可能性が高い。プロセッサのタイムラインが「高」であるときには、プロセッサは実行中である。プロセッサのタイムラインが「低」のときには、プロセッサは停止している。以下に図９のステップをウォークスルーする。
ステップ９０１：
いずれかのプロセッサによるページＸ、Ｙ、Ｚのいずれかへのアクセスがない。
ステップ９０２：
ＰｒｏｃＡは権限なしでＸ書込みを試みる。
ＰｒｏｃＢは権限なしでＸ読出しを試みる。
ＰｒｏｃＡにページＸへの読出し／書込み（排他的）を与える。
ＰｒｏｃＢはＸへのアクセスなしで機能停止される。
ステップ９０３：
ＰｒｏｃＡの分担の有効期限が切れる。
ＰｒｏｃＢはステップ９０２から依然としてＸ読出しを待機している。
ＰｒｏｃＡをＸ読出し専用（共有）にダウングレードする。
ＰｒｏｃＢにＸ読出し専用（共有）を与える。
ステップ９０４：
ＰｒｏｃＡは権限なしでＹ読出しを試みる。
ＰｒｏｃＢは権限なしでＺ読出しを試みる。
ＰｒｏｃＡにＹ専用読出し（共有）を与える。
ＰｒｏｃＢにＺ専用読出し（共有）を与える。
ステップ９０５：
ＰｒｏｃＡは読出し専用権限でＺ書込みを試みる。
ＰｒｏｃＢは読出し専用権限でＸ書込みを試みる。
ＰｒｏｃＡにＸアクセスなし及びＺ読出し／書込み（排他的）を与える。
ＰｒｏｃＢにＸ読出し／書込み（排他的）及びＺアクセスなしを与える。
ステップ９０６：
ＰｒｏｃＡは読出し専用権限でＹ書込みを試みる。
ＰｒｏｃＢは読出し専用権限でＺ読出しを試みる。
ＰｒｏｃＡに読出し／書込みＹ（排他的）及びＺ読出し専用（共有）を与える。
ＰｒｏｃＢにＺ読出し専用（共有）を与える。
ステップ９０７：
ＰｒｏｃＡは権限なしでＸ書込みを試みる。
ＰｒｏｃＢは権限なしでＹ読出しを試みる。
ＰｒｏｃＡにＸ読出し／書込み（排他的）及びＹ読出し専用（共有）を与える。
ＰｒｏｃＢにＸアクセスなし及びＹ読出し専用（共有）を与える。
ステップ９０８：
ＰｒｏｃＡは読出し専用権限でＺ書込みを試みる。
ＰｒｏｃＢは読出し専用権限でＺ書込みを試みる。
ＰｒｏｃＡはＺへのアクセスなしで機能停止される。
ＰｒｏｃＢに読出し／書込みＺ（排他的）を与える。
ステップ９０９：
ＰｒｏｃＡは、ステップ９０８から依然としてＺ書込みを待機している。
ＰｒｏｃＢは権限なしでＸ読出しを試みる。
ＰｒｏｃＡにＸ読出し専用（共有）及びＺ読出し／書込み（排他的）を与える。
ＰｒｏｃＢにＸ読出し専用（共有）及びＺアクセスなしを与える。
ステップ９１０：
ＰｒｏｃＡの分担の有効期限が切れる。
ＰｒｏｃＢの分担の有効期限が切れる。
ＰｒｏｃＡ−アクセス変化なし。
ＰｒｏｃＢ−アクセス変化なし。
【００５０】
図９の対話９００は、２つのプロセッサが互いに時間的に同期せずにＰＴＥ競合状態に達することができることを示している。リソース内で真の競合が発生した場合には、プロセッサは次の実行サイクルを実行ではなく機能停止状態で過ごす。これは、ステップ９０２と９０３との間のＰｒｏｃＢにおける場合であり、更にステップ９０８と９０９との間のＰｒｏｃＡにおける場合である。
【００５１】
上記のステップ９０１から９１０に示されるアクセス違反を順序付けするためのポリシーは、公平性及び決定論の両方でなければならない。このポリシーはプロセッサを枯渇するのを防ぐために公平でなくてはならない。このポリシーは、「ラウンドロビン」又は統計平均の形とすることができる。２つの別個で同等のコンピュータシステムが僅かにずれたタイミングで同時に同じプロセスを実行している複写フォルトトレラントシステムにおいて対話が行われているので、決定論は必要である。従って、ページフォルトの到達時間は、結果を判断する上での要因とすることはできない。
【００５２】
図１０は、プロセッサに対して維持されるシャドーページテーブルの決定論的共有メモリアクセス（ＤＳＭＡ）の状態遷移図である。シャドー構造内のエントリは、アクセスなし状態１０１０で始まる。これは、図３のＰＴＥ３４５において存在ビットＰ＝０（ビット＜０＞＝０）を有するものとして示される。このページにアクセスするあらゆる試みによりページフォルトハンドラへのトラップが生じる。プロセッサがこのページへの読出しアクセスを実行するときには、読出し専用状態１０２０への読出しアクセス遷移１０１１が行われる。この遷移はプロセッサＢにおける図９のステップ９０２及び９０３と同様に遅延させることができる点に留意されたい。プロセッサがこのページへの書込みアクセスを実行するときには、読出し／書込み状態１０３０への書込みアクセス遷移１０１２が行われる。これは、プロセッサＡにおける図９のステップ９０２において見ることができる。
【００５３】
読出し専用状態１０２０では、プロセッサは、ページフォルトハンドラへのトラップを受けることなくページを読み出す能力を有する。これは、図３のＰＴＥ３４５においてＲ／Ｗ＝０及びＰ＝１（ビット＜１：０＞＝０１）を有することで表される。読出し専用状態１０２０に戻る読出しアクセス遷移１０２１は、読出しアクセスを実施するこの損なわれていない能力を表す。この遷移は、図９においてプロセッサＡ及びＢの両方のステップ９０７と９０８との間に見ることができる。ページへの書込みアクセスが発生すると、読出し／書込み状態１０３０への書込みアクセス遷移１０２２が行われる。これは、図９のプロセッサＢにおけるステップ９０５で見ることができる。他方のプロセッサがこのページへの排他的書込みアクセスを必要とするときには、アクセスなし状態１０１０への書込み競合遷移１０２３が行われる。これは、プロセッサＡにおける図９のステップ９０４で見ることができる。
【００５４】
読出し／書込み状態１０３０では、プロセッサは、ページフォルトハンドラへのトラップを受けずにページに対して読出し又は書込みを行う能力を有する。読出し又は書込みアクセス遷移１０３１はこの能力を示している。これは、図９においてプロセッサＡにおけるステップ９０２と９０３との間、及びステップ９０７と９０８との間に見ることができる。他方のプロセッサがこのページに対して読出しを実施するときには、読出し専用状態１０２０への読出し競合遷移１０３２が行われる。これは、図９においてプロセッサＡにおけるステップ９０３で見ることができる。他方のプロセッサがこのページに対して書込みを実施するときには、アクセスなし状態１０１０への書込み競合遷移１０３３が行われる。これは、図９においてプロセッサＢにおけるステップ９０７で見ることができる。
【００５５】
プロセッサがページフォルトを生成していない場合には、ＰＴＥフォルトにおいて他のプロセッサの機能停止を回避するために、いずれかの種類の分担アクセスによって妨害しなければならない。これは、図９においてプロセッサＡにおけるステップ９０３で見ることができる。
【００５６】
追加の又は代替的なポリシーを用いることができる。例えば、以下のポリシーを用いることができる。
１）全てのメモリ内ページを図１０の読出し専用１０２０として始め、これは図１０において全ページＪに対し（Ｊ（ＲＯ））と表すことができる。
２）読出し競合１０３２上で読出し／書込み１０３０からアクセスなし１０１０に遷移する。また、読出し競合１０２４（図示していない）上で読出し専用１０２０からアクセスなし１０１０に遷移する。このことによって読出し専用１０２０及び読出し／書込み１０３０において排他的アクセスが強制され、このリストにおいて他の別のポリシーを用いる上でより柔軟性を持たせる。
３）読出し競合１０１３（図示していない）上でアクセスなし１０１０から読出し専用１０２０に遷移する。これによりいずれかのプロセッサが読出しアクセスを取得するときに全プロセッサにページに読出しアクセスが与えられる。
４）他のプロセッサのいずれもが、ページＪに対し（Ｊ（ＲＷ））と表すことができる読出し／書込み状態１０３０にない場合には、いかなる他のプロセッサとのアクセス解決も待機せずに、読出しアクセス１０１１上でアクセスなし１０１０から読出し専用１０２０に遷移する。
５）全ての他のプロセッサがページＪに対しアクセスなし状態１０１０（Ｊ（ＮＯＮＥ））にある場合には、いかなる他のプロセッサとのアクセス解決も待機せずに、書込みアクセス１０１２上でアクセスなし１０１０から読出し／書込み１０３０に遷移し、又は書込みアクセス１０２２上で読出し専用１０２０から遷移する。
【００５７】
図７及び８を再び参照すると、複写フォルトトレラントシステム７００は、各々が複数のプロセッサを含む２つのコンピュータ環境７１５及び７６５を有している。アプリケーション処理部８０１から８０４は、コンピュータ環境７１５とコンピュータ環境７６５との間の命令ロックステップで実行される。命令ロックステップは、以下の詳細により維持することができる。
１）プロセッサはどのような非同期Ｉ／Ｏデバイスにも直接アクセスしない。
２）非同期割り込みがない。
３）時間挿入は、タイマ割り込みによってではなく、プロセッサ命令ストリームに対して行われる。
４）プロセッサがメモリに書込み中である場合には、メモリへのアクセスが排他的アクセスに制限される。
５）メモリアクセスポリシーの変更は、全ての影響を受けるプロセッサが機能停止されたときにのみ行われる。
６）プロセッサは、メモリアクセストラップ時又は作業分担の完了時（共に同期イベント）にのみ機能停止される。
７）メモリポリシーを調整しているロックステップ管理部２４０は、制御中のメモリ構造への無制限アクセスを有する環境で作動する。
【００５８】
これは、プロセッサに可視であるプロセッサ命令ストリームに対して非同期のアクティビティーが存在しないことを保証するのに役立つ。従って、プロセッサが命令ロックステップで始動されると、これらのプロセッサは命令ロックステップに留まる。これらのルールは、マルチプロセッシング環境におけるいかなる数のプロセッサに対しても適用することができる。
【００５９】
ｘ８６プラットフォーム上のフォルトトレラントシステムでは、オペレーティングシステム又はアプリケーションが接触することが許可される場合に逸脱を引き起こす可能性がある幾つかの命令及びアーキテクチャ機能が存在する。過去においては、ソフトウェア層は、ハードウェアをアプリケーション及びオペレーティングシステムから分離することが要求された。Ｗｉｎｄｏｗｓ（登録商標）ベースのオペレーティングシステムでは、これらの問題領域の大部分をトラップするためにハードウェア抽象化層（ＨＡＬ）が用いられた。他の逸脱機能は、命令ストリーム内で事前にスキャンして問題のあるアクセスをエミュレートすることにより、又は逸脱が発生した後に一掃することによって削除しなければならない。最近のプロセッサの進歩により、仮想化ハードウェアを商品化することが可能である。仮想化ハードウェアは、フォルトトレラントシステムが、潜在的に逸脱したアーキテクチャ機能をオペレーティングシステム及びアプリケーションから分離するようにハードウェアに指示することを可能にすることができる。この仮想化ハードウェアは、アプリケーション及びオペレーティングシステムが存在する参照プラットフォームとして用いることができる。アーキテクチャ的に逸脱した処理は、システム管理モードに類似した分離環境を目的とする。ロックステップ管理部は、この分離環境を有することができ、又は含めることができる。今後の仮想化ハードウェアプラットフォームにおいてトラップされる機能は、
・Ｉ／Ｏデバイスへのアクセス
・システム制御レジスタ（タイムスタンプカウンタ、とりわけＣＲ３）へのアクセス
・性能カウンタ（分担）へのアクセス
・メモリ管理構造へのアクセス
である。
【００６０】
連続再生フォルトトレラントシステム
前述のように、フォルトトレラントシステムは、連続再生を用いて実装することができる。連続再生フォルトトレラントシステムの利点は、分担の調整を必要とせずに、ページへのアクセス待機をプロセッサに負わせる機能停止時間を短縮することができる点である。一般に、プロセッサが機能停止するときには常に、潜在的なシステム性能が失われている。最大待機時間を抑制するために分担を小さくすることができるが、分担を小さくし過ぎるとロックステップ管理部２４０のオーバーヘッドによりシステム性能が制限される。分担調整の複雑さを回避するために、連続再生では、コンピュータ環境１１５が、待機ではなくメモリアクセス変化を調整するためのプロセッサ間割り込みを用いることができる。プロセッサ間割り込み（ＩＰＩ）は、受信するプロセッサの命令ストリームに対して非同期であり、従って、複写フォルトトレラントシステムにおいて同期化ロジックなしでは用いることができない。しかしながら、再生システムでは、目標は元の結果を再現する（命令ストリームの順序付けを再現する）ことである。再生中に再現が忠実に行われる限り、非決定論的プロセスを用いて元の結果を順序付けすることができる。一般に、連続再生システムは、プロセッサのセット（プロセッサのマスターセット）上で命令ストリームの集合を実行し、初期のプロセッサ及びメモリ状態から始まり入力ストリームを消費する。これは、新しいプロセッサ及びメモリ状態、出力ストリーム、並びに様々な命令ストリーム間の対話を示すジャーナルエントリを生成する。このジャーナルストリームを用いて、同じプロセッサ状態、メモリ状態、及び入力ストリームで始まるプロセッサの１つ又はそれ以上の第２のセット（これらの各々はプロセッサのスレーブセットである）を調整することができる。ジャーナルストリームの指示に基づいて、このプロセッサの第２のセットは、同じ終了時プロセッサ状態、メモリ状態、及び出力ストリームを生成する。この整合はスレーブプロセッサによって検証することができる。
【００６１】
連続再生フォルトトレラントシステムは、図１の構成要素によって表すことができる。この議論では、サーバ１１０が初期処理を実施し、サーバ１６０が再生を実施する。図１１は、アプリケーションプロセス１１０１、１１０２．．．１１０４及びロックステップ管理部１１４０インターフェースを有する再生サーバ１１００（図１のサーバ１６０の実装とすることができる）を示している。サーバ１１１０上のアプリケーションプロセスを調整するのに用いることができる３つの技術は、ページフォルト（ＰＦ）、分担割り込み（ＱＩ）、及びプロセッサ間割り込み（ＩＰＩ）を含む。ＰＦ及びＱＩメカニズムは上記で説明した。ＩＰＩメカニズムを用いて、他のプロセッサ上でＰＦ又はＱＩのいずれかを待機するのを回避する。プロセッサがページフォルトを起こすと、ロックステップ管理部１１４０が他のプロセッサにＩＰＩを送り、他のプロセッサに効果的にブレークポイントを設定する。ロックステップ管理部１１４０は、ジャーナルストリームに各プロセッサのプロセッサ命令ストリーム（例えばプログラムカウンタ及び分担カウンタ）を記録し、ページ競合を解決し、分担カウンタを再ロードし、アプリケーション処理を再開する。ＩＰＩを用いることなくジャーナルストリームを用いてサーバ１１６０上での再生が実施される。サーバ１１０が生成したジャーナルストリーム内の各エントリでは、各プロセッサについての記録及び入力消費についての記録が存在する。各プロセッサ記録は、３つの主アイテム、すなわち分担目標値、命令ポインタ、及びアクセス解決を含む。分担目標値は、サーバ１１０内の対応プロセッサが停止したところでサーバ１６０内のプロセッサを停止させるために分担カウンタにロードする値である。ページフォルトによってプロセッサが停止した場合、分担目標値は十分大きく、ページフォルトが再び発生することが可能になる。命令ポインタは、サーバ１６０上での再生がサーバ１１０と同じシーケンスを辿っていることを検証するためのものである。アクセス解決は、実行が再び始まる前に修正する必要があるページアクセス権である。入力消費記録は、集合的なプロセッサ状態にどのような入力シーケンスが加えられたか、及びどのように時間が進行したかを示す。以下の議論でプロセッサ記録を説明する。
【００６２】
図１２及び１４は、２プロセッサＳＭＰシステムでの命令ストリームの対話のシーケンス１２００及び１４００をそれぞれ示している。図１２のシーケンスは、再生システムのサーバ１１０から取り込まれ、図１４のシーケンスは再生システムのサーバ１６０が再生を実行するときにサーバ１６０から取り込まれる。再生システムの両方のサーバ１１０及び１６０においても、図１０に示したＤＳＭＡ状態遷移は有効である。図１３は、図１２の対話１２００によって作成され、図１４の対話１４００を作成するのに用いた入力消費記録をジャーナルストリームから除いたものである。
【００６３】
図１２は、ＰＴＥアクセスに基づいてトラップが調整されたときの２つのプロセッサＡ及びＢ間の対話１２００を示している。ページテーブル構造の様々なレベルにおいて類似のプロセスが発生する。対話１２００は、全ページがアクセスなしとして始まる状況で発生し、これはタスクが最初に実行を始めるときにメモリ内にページが存在しない場合である。これとは対照的に、生成されたスレッドでは、ＰＴＥは、そのエントリの大部分において読出し専用アクセスで始める可能性が高い。プロセッサのタイムラインが「高」であるときには、プロセッサは実行中である。プロセッサのタイムラインが「低」のときには、プロセッサは停止している。以下に図１２のステップをウォークスルーする。
ステップ１２０１：
いずれかのプロセッサによるページＸ、Ｙ、Ｚのいずれかへのアクセスがない。
ステップ１２０２：
ＰｒｏｃＡは権限なしでＸ書込みを試みる。ＰｒｏｃＢにＩＰＩが送られる。
ＩＰＩによってＰｒｏｃＢは停止する。
ＰｒｏｃＡにページＸへの読出し／書込み（排他的）を与える。
ＰｒｏｃＢはページＸ、Ｙ、Ｚへのアクセスがない状態を継続する。
ステップ１２０３：
ＰｒｏｃＢは権限なしでＸ読出しを試みる。ＰｒｏｃＡにＩＰＩが送られる。
ＩＰＩによってＰｒｏｃＡは停止する。
ＰｒｏｃＡをＸ読出し専用（共有）にダウングレードする。
ＰｒｏｃＢにＸ読出し専用（共有）を与える。
ステップ１２０４：
ＰｒｏｃＢは権限なしでＺ読出しを試みる。ＰｒｏｃＡにＩＰＩが送られる。
ＰｒｏｃＡは権限なしでＹ読出しを試みる。
ＰｒｏｃＡにＹ読出し専用（共有）を与える。ＰｒｏｃＢからのＩＰＩが無効にされる。
ＰｒｏｃＢにＺ読出し専用（共有）を与える。
ステップ１２０５：
ＰｒｏｃＡは権限なしでＹ書込みを試みる。ＩＰＩがＰｒｏｃＢに送られる。
ＰｒｏｃＢは権限なしでＹ書込みを試みる。
ＰｒｏｃＡにＹ読出し／書込み（排他的）を与える。
ＰｒｏｃＢはＹアクセス待機して機能停止する。ＰｒｏｃＡからのＩＰＩが無効にされる。
ステップ１２０６：
ＰｒｏｃＡは権限なしでＺ書込みを試みる。ＰｒｏｃＢにＩＰＩが送られる。
ＰｒｏｃＢはＹアクセスを待機して機能停止する。
ＰｒｏｃＡにＹアクセスなし及びＺ読出し／書込み（排他的）を与える。
ＰｒｏｃＢにＹ読出し／書込み（排他的）及びＺアクセスなしを与える。ＰｒｏｃＡからのＩＰＩが無効にされる。
ステップ１２０７：
ＰｒｏｃＢは権限なしでＸ書込みを試みる。ＰｒｏｃＡにＩＰＩが送られる。
ＩＰＩによってＰｒｏｃＡは停止する。
ＰｒｏｃＡをＸアクセスなしにダウングレードする。
ＰｒｏｃＢにＸ読出し／書込み（排他的）を与える。
ステップ１２０８：
分担によってＰｒｏｃＡは停止する。
分担によってＰｒｏｃＢは停止する。
ＰｒｏｃＡは変化のない状態を継続する。
ＰｒｏｃＢは変化のない状態を継続する。
ステップ１２０９：
ＰｒｏｃＡは権限なしでＸ読出しを試みる。ＰｒｏｃＢにＩＰＩが送られる。
ＰｒｏｃＢは権限なしでＺ書込みを試みる。ＰｒｏｃＡにＩＰＩが送られる。
ＰｒｏｃＡにＸ読出し専用（共有）及びＺアクセスなしを与える。ＰｒｏｃＢからのＩＰＩが無効にされる。
ＰｒｏｃＢにＸ読出し専用（共有）及びＺ読出し／書込み（排他的）を与える。ＰｒｏｃＡからのＩＰＩが無効にされる。
【００６４】
図１２の各ステップにおいて、プロセッサ間の対話を概説するジャーナルエントリが作成される。図１３は、図１２のシーケンスについての利用可能なジャーナルストリーム１３００を示している。図１３では、ステップ欄１３１０は、図１２についての上記説明に対応するステップ番号である。分担欄１３２０Ａ又は１３２０Ｂは、実行を開始する前に分担カウンタにロードすべき値を表している。プロセッサＡでのステップ１２０２の値（Ｐ，ＱＡ２＋１）は、分担ＱＡ２を実行した後にプロセッサＡがページフォルトによって停止したことを示している。このカウンタは、再生が同じページフォルトに達することをできるように、少なくとも１つ大きく設定される。両方のプロセッサＡ及びＢにおけるステップ１２０８の値（Ｉ，Ｑｍａｘ）は、プロセッサが分担割り込みによって停止したことを示す。プロセッサＡにおけるステップ１２０３の値（Ｉ，ＱＡ３）は、これがＩＰＩによってプロセッサの停止したところであることを示す。再生サーバ７６０では、ＩＰＩによる停止と分担割り込みによる停止との間で差違はない。ＰＣ欄１３３０Ａ又は１３３０Ｂは、プロセッサが停止したプログラムカウンタを表す。ページフォルトの場合（プロセッサＡでのステップ１２０２）には、ＰＣ値はアクセス違反によってトラップされた命令を指す。ＩＰＩ又は分担割り込みの場合には、ＰＣ値は、実行すべき次の命令である。アクセス欄１３４０Ａ又は１３４０Ｂは、実行を続ける前にページング構造に適用された変更を示している。
【００６５】
プロセッサＡ及びＢは、図１２のタイムラインでは、サーバ１１０に対してＰｒｏｃＡ及びＰｒｏｃＢと称され、図１４のタイムラインではサーバ１６０に対してＰｒｏｃＡ’及びＰｒｏｃＢ’と称されている。図１３のジャーナルファイルにおいて概説された命令に従って図１２のタイムラインが図１４として再現される。
ステップ１２０１：
ＰｒｏｃＡ’は命令Ａ１で始まり、これにＸアクセスなし、Ｙアクセスなし、及びＺアクセスなしを与える。
ＰｒｏｃＢ’は命令Ｂ１で始まり、これにＸアクセスなし、Ｙアクセスなし、及びＺアクセスなしを与える。
ステップ１２０２：
ＰｒｏｃＡ’は分担ＱＡ２＋１をロードし、命令Ａ２で権限なしでＸ書込みを試みるまで実行される。
ＰｒｏｃＢ’は分担ＱＢ２をロードし、命令Ｂ２で分担の有効期限が切れるまで実行される。
ＰｒｏｃＡ’にＸ読出し／書込み（排他的）を与える。
ＰｒｏｃＢ’には何の変更も与えない。
ステップ１２０３：
ＰｒｏｃＡ’は分担ＱＡ３をロードし、命令Ａ３で分担の有効期限が切れるまで実行される。
ＰｒｏｃＢ’は分担ＱＢ３＋１をロードし、命令Ｂ３で権限なしでＸ読出しを試みるまで実行される。
ＰｒｏｃＡ’にＸ読出し専用（共有）を与える。
ＰｒｏｃＢ’にＸ読出し専用（共有）を与える。
ステップ１２０４：
ＰｒｏｃＡ’は分担ＱＡ４＋１をロードし、命令Ａ４で権限なしでＹ読出しを試みるまで実行される。
ＰｒｏｃＢ’は分担ＱＢ４＋１をロードし、命令Ｂ４で権限なしでＺ読出しを試みるまで実行される。
ＰｒｏｃＡ’にＹ読出し専用（共有）を与える。
ＰｒｏｃＢ’にＺ読出し専用（共有）を与える。
ステップ１２０５：
ＰｒｏｃＡ’は分担ＱＡ５＋１をロードし、命令Ａ５で権限なしでＹ書込みを試みるまで稼働する。
ＰｒｏｃＢ’は分担ＱＢ５＋１をロードし、命令Ｂ５で権限なしでＹ書込みを試みるまで実行される。
ＰｒｏｃＡ’にＹ読出し／書込み（排他的）を与える。
ＰｒｏｃＢ’には何の変更も与えない。
ステップ１２０６：
ＰｒｏｃＡ’は分担ＱＡ６＋１をロードし、命令Ａ６で権限なしでＺ書込みを試みるまで実行される。
ＰｒｏｃＢ’は命令Ｂ５で停止する。ＰｒｏｃＡ’にＹアクセスなし及びＺ読出し／書込み（排他的）を与える。
ＰｒｏｃＢ’にＹ読出し／書込み（排他的）及びＺアクセスなしを与える。
ステップ１２０７：
ＰｒｏｃＡ’は分担ＱＡ７をロードし、命令Ａ７で分担の有効期限が切れるまで実行される。
ＰｒｏｃＢ’は分担ＱＢ７＋１をロードし、命令Ｂ７で権限なしでＸ書込みを試みるまで実行される。
ＰｒｏｃＡ’にＸアクセスなしを与える。
ＰｒｏｃＢ’にＸ読出し／書込み（排他的）を与える。
ステップ１２０８：
ＰｒｏｃＡ’は分担Ｑｍａｘをロードし、命令Ａ８で分担の有効期限が切れるまで実行される。
ＰｒｏｃＢ’は分担Ｑｍａｘをロードし、命令Ｂ８で分担の有効期限が切れるまで実行される。
ＰｒｏｃＡ’には何の変更も与えない。
ＰｒｏｃＢ’には何の変更も与えない。
ステップ１２０９：
ＰｒｏｃＡ’は分担ＱＡ９＋１をロードし、命令Ａ９で権限なしでＸ読出しを試みるまで実行される。
ＰｒｏｃＢ’は分担ＱＢ９＋１をロードし、命令Ｂ９で権限なしでＺ書込みを試みるまで実行される。
ＰｒｏｃＡ’にＸ読出し専用（共有）及びＺアクセスなしを与える。
ＰｒｏｃＢ’にＸ読出し専用（共有）及びＺ読出し／書込み（排他的）を与える。
【００６６】
図１２及び図１４のタイムラインは類似しているが同じではない。サーバ１１０及び１６０のアプリケーション処理部は、緩やかな命令ロックステップで実行されているので、命令シーケンスを実行するのに必要な実経過時間は、サーバ１１０と１６０との間で変わる。イベントの順序は、場合によっては再生中にこれ自体を反転するよう試みることができる。例えば、図１２のステップ１２０５では、サーバ１１０上のプロセッサＡは、プロセッサＢの前にページＹへの書込みアクセスを試みる。サーバ１６０上での再生中には、プロセッサＢ’がプロセッサＡ’の前にページＹへの書込みアクセスを試みる。図１３のステップ１２０５についてのジャーナルストリームは、プロセッサＡがページＹへの読出し／書込みアクセスを取得することを決定付ける。ジャーナルストリームのステップ１２０６では、プロセッサＢに対する分担がゼロであり、プロセッサＢ’が再生サイクルにおいて機能停止することを示している。このことによって、サーバ１１０で見られる元の順序がプロセッサＡ’及びＢ’上に強制される。ＩＰＩがサーバ１１０に対して行った手法と類似する手法で、プロセッサがアクセスを行う直前に分担値がプロセッサを停止させることができることによって、他のほぼ同時のアクセスをマスクすることができる。ステップ１２０５を実施例として再び用いると、ＩＰＩ割り込みがプロセッサＢに１つの命令分早く到達していた場合、プロセッサＢは命令Ｂ５においてページＸへの書込みアクセス違反を犯すことにはならないが、Ｂ５−１において１つの命令分早く停止していたであろう。従って、ステップ１２０５でのプロセッサＢに対するジャーナルエントリは、ＰＣ＝Ｂ５−１で分担＝（Ｉ，ＱＢ５）となり、１つの命令分早いＩＰＩによって停止することになる。その結果、再生は、サーバ１１０が行ったのと全く同じように、サーバ１６０内のプロセッサＢ’にＢ５−１で停止するよう強制することになる。
【００６７】
タイムライン図１２とタイムライン図１４との間の相違は、命令シーケンスを実行するのに要する実経過時間におけるもののみとすることができる。サーバ１６０内のプロセッサは、サーバ１１０内のプロセッサと異なる挙動を示してはならない。テスト及び待機ループに関与する２つ又はそれ以上のプロセッサは、サーバ１１０とサーバ１６０との間で正確に同じ挙動を生じ、すなわち読出し回数、読出し値、書込み順序付け、及び書込み値が同じである。
【００６８】
図１２の連続再生を生成したサーバ１１０の実行シーケンスは、サーバ１１０が図８の複写システムを生成するのに用いたものと同じルールによって制御される。複写システムにおけるアクセス制御の代替の方法の全ては、連続再生システムにおけるサーバ１１０に当てはまる。連続再生システムにおけるサーバ１６０は、ジャーナルストリームに残された形跡を単に辿るだけであるので、複写システムでは非決定論的となる以下の追加ポリシーを加えることができる：３つ又はそれ以上のプロセッサを有するシステムでは、競合を解決するためにアクセス競合にあるプロセッサのみが機能停止される。他のプロセッサは、これらの分担の有効期限が切れるまで、又は他のプロセッサが別のプロセッサとアクセス競合を有するまで実行を継続する。例えば、プロセッサＡ及びＢはページＪに対して読出し専用状態１０２０（Ｊ（ＲＯ））にある。プロセッサＣは、ページＪに対してアクセスなし状態１０１０（Ｊ（ＮＯＮＥ））にある。プロセッサＡ及びＢの両方は、ページＪに対するＪ（ＲＷ）を獲得するために読出し／書込み状態１０３０への遷移を必要とする。プロセッサＣは、ページＪにアクセスする必要はない。競合を解決するためにはプロセッサＡ及びＢのみを停止する必要がある。
【００６９】
連続再生システムにおける利点は、アクセス競合を迅速に解決するのにＩＰＩを用いることによって、システム性能を改善することができる点である。一般に、全てのプロセッサが機能停止状態にあるときにのみ入力を供給することができ、さもなければ供給は非決定論的イベントとなる。全てのプロセッサが機能停止状態にあるときにのみ時間（これは入力である）を変更することができる。タスクの問題のある組み合わせは、メモリ制限があり計算集中型のアプリケーションと結合された多くのページフォルトを発生させるアプリケーションである。複写システムでは、計算集中型のタスクがそのＱｍａｘ分担の終了を待機している間にページフォルトアプリケーションが機能停止するのを阻止するため、Ｑｍａｘ値が小さいことが必要であるが、オーバーヘッドでプロセッサを浪費する程には小さくない。連続再生システムでは、ページフォルト及びＩＰＩがアプリケーションを追跡する。実際に、機能停止を用いて、Ｑｍａｘ値が入力供給の細分性を調節する間にページフォルトの最小スペースを強制することができる。
【００７０】
仮想アドレス変換
ここで仮想変換構造についての更なる議論を提示する。仮想アドレス変換をサポートするハードウェアメカニズムは、図３に示されるテーブル構造に従う。変換テーブル内に含まれるものを除いて、仮想アドレスと物理アドレスとの間に必要な相関関係は存在しない。オペレーティングシステムは、仮想アドレス空間で実行するが、物理アドレスを含むハードウェア使用に向けての変換テーブルを構築することが必要とされる。オペレーティングシステムは、変換テーブルを維持するために仮想アドレスと物理アドレスとの間の遷移する方法を理解する必要がある。これは、以下の技術によって達成することができる。
１）ページテーブル（ＰＴ）の仮想アドレス空間は線形的に連続である。
２）ページディレクトリ（ＰＤ）は固定位置に仮想的にマッピングされる。
３）ＰＤはまた、自己マッピングＰＤＥ／ＰＴＥを有するＰＴとしても用いられる。
Ｍｉｃｒｏｓｏｆｔによる３２ビットＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムでは、３つのアドレスは以下の通りである。
１）ＰＴはＣ０００＿００００で始まり仮想的にマッピングされる。
２）ＰＤはＣ０３０＿００００に仮想的にマッピングされる。
３）自己マッピングされたＰＤＥ／ＰＴＥは仮想アドレスＣ０３０＿０Ｃ００にある。
【００７１】
オペレーティングシステム（ＯＳ）のメモリ管理の当業者は、これらの事実を利用して、あらゆる仮想アドレスを物理アドレスに変換することができる。加えて、かかる当業者はページテーブル構造を「ウォーク」し、構造自体の仮想及び物理アドレスを完全に識別し、更に当該構造によってアドレス指定可能な全ての物理メモリを識別することができる。変換構造のあらゆる部分にアクセスするために、以下のアドレス指定式のセットを作ることができる。すなわち、
式１）ＰＤｉｎｄｅｘ＝ｖａ＜３１：１２＞≫２２−これは、ＰＤ内へのインデックスが２２ビットだけ右にシフトした仮想アドレスのビット３１から１２であることを表す。これはダブルワード（４バイト）インデックスである。
式２）ＰＴｉｎｄｅｘ＝ｖａ＜２１：１２＞≫１２−これは、ＰＴ内へのインデックスが１２ビットだけ右にシフトした仮想アドレスのビット２１から１２であることを表す。これはダブルワード（４バイト）インデックスである。
式３）ＰＧｉｎｄｅｘ＝ｖａ＜ｌｌ：００＞−これは、メモリのページ内へのインデックスがビット１１から００であることを表す。これはバイトインデックスである。
式４）ＶＡPD（ｖａ）＝Ｃ０３０＿００００−これは、定義によっていずれかの仮想アドレス（ｖａ）がＣ０３０＿００００である場合にページディレクトリ（ＰＤ）の仮想アドレスを表す。
式５）ＰＡPD（ｖａ）＝Ｍｅｍ［Ｃ０３０＿０Ｃ００］＜３１：１２＞−これは、ＰＤの物理アドレスが仮想アドレスＣ０３０＿０Ｃ００におけるメモリ内容のビット３１から１２であることを表す。
式６）ＶＡPDE（ｖａ）＝Ｃ０３０＿００００＋（ＰＤｉｎｄｅｘ≪２）−これは、ページディレクトリエントリ（ＰＤＥ）の仮想アドレスを表す。
式７）ＰＡPDE（ｖａ）＝ＰＡPD（ｖａ）＋（ＰＤｉｎｄｅｘ≪２）−これは、ＰＤＥの物理アドレスがＰＤの物理アドレスにＰＤｉｎｄｅｘのバイトインデックスを加えたものであることを表す。
式８）ＶＡPT（ｖａ）＝Ｃ０００＿００００＋（ＰＤｉｎｄｅｘ≪１２）−これは、定義によるページテーブル（ＰＴ）の仮想アドレスを表す。
式９）ＰＡPT（ｖａ）＝Ｍｅｍ［ＶＡPDE（ｖａ）］＜３１：１２＞−これは、ＰＴの物理アドレスがＶＡPDE（ｖａ）におけるメモリ位置のビット＜３１：１２＞内に含まれることを表す。
式１０）ＶＡPTE（ｖａ）＝ＶＡPT（ｖａ）＋（ＰＴｉｎｄｅｘ≪２）
式１１）ＰＡPTE（ｖａ）＝ＰＡPT（ｖａ）＋（ＰＴｉｎｄｅｘ≪２）
式１２）ＶＡPage（ｖａ）＝（ＰＤｉｎｄｅｘ≪２２）＋（ＰＴｉｎｄｅｘ≪１２）  −定義による。
式１３）ＰＡPage（ｖａ）＝Ｍｅｍ［ＶＡPTE（ｖａ）］＜３１：１２＞
式１４）ＶＡByte（ｖａ）＝ＶＡPage（ｖａ）＋ＰＧｉｎｄｅｘ＝ｖａ  −定義による。
式１５）ＰＡByte（ｖａ）＝ＰＡPage（ｖａ）＋ＰＧｉｎｄｅｘ
式１６）Ｄａｔａ（ｖａ）＝Ｍｅｍ［ｖａ］
【００７２】
このアドレス指定式の集合における重要な点はオペレーティングシステムによる以下の特定の仮想アドレスの存在に対する信頼性である。
１）Ｃ０００＿００００  −線形にマッピングされたページテーブルの仮想アドレスである。
２）Ｃ０３０＿００００  −ページディレクトリ（ＰＤ）の仮想アドレスがページテーブル（ＰＴ）の仮想アドレスでもある。
３）Ｃ０３０＿０Ｃ００  −自己マッピングされたＰＤＥ／ＰＴＥの仮想アドレスである。
【００７３】
別のページテーブル構造を設定する場合、ＰＤとしてのＣ０３０＿００００におけるＰＴの二重使用、及びエントリ３００（仮想アドレスＣ０３０＿０Ｃ００）のページテーブルエントリ（ＰＴＥ）及びページディレクトリエントリ（ＰＤＥ）の両方としての二重使用を考慮しなければならない。
【００７４】
オペレーティングシステムのページテーブル構造を用いて例示的なアドレス変換のセットを示す。実施例の第２のセットでは、シャドーページテーブルを用いた同じ変換をウォークスルーする。上記のアドレス指定式から仮想アドレスＥ８２９＿６４５７に対する様々な変換を示す。
１）ＰＤｉｎｄｅｘ＝ｖａ＜３１：１２＞≫２２＝３Ａ０
２）ＰＴｉｎｄｅｘ＝ｖａ＜２１：１２＞≫１２＝２９６
３）ＰＧｉｎｄｅｘ＝ｖａ＜ｌｌ：００＞＝４５７
４）ＶＡPD（ｖａ）＝Ｃ０３０＿００００  −定義による
５）ＰＡPD（ｖａ）＝Ｍｅｍ［Ｃ０３０＿０Ｃ００］＜３１：１２＞
６）ＶＡPDE（ｖａ）＝Ｃ０３０＿００００＋（ＰＤｉｎｄｅｘ≪２）＝Ｃ０３０＿００００＋Ｅ８０＝Ｃ０３０＿０Ｅ８０
７）ＰＡPDE（ｖａ）＝ＰＡPD（ｖａ）＋（ＰＤｉｎｄｅｘ≪２）＝ＰＡPD（ｖａ）＋Ｅ８０
８）ＶＡPT（ｖａ）＝Ｃ０００＿００００＋（ＰＤｉｎｄｅｘ≪１２）＝Ｃ０００＿００００＋３Ａ＿００００＝Ｃ０３Ａ＿００００
９）ＰＡPT（ｖａ）＝Ｍｅｍ［ＶＡPDE（ｖａ）］＜３１：１２＞
１０）ＶＡPTE（ｖａ）＝ＶＡPT（ｖａ）＋（ＰＴｉｎｄｅｘ≪２）＝Ｃ０３Ａ＿００００＋５５８＝Ｃ０３Ａ＿０５５８
１１）ＰＡPTE（ｖａ）＝ＰＡPT（ｖａ）＋（ＰＴｉｎｄｅｘ≪２）＝ＰＡPT（ｖａ）＋５５８
１２）ＶＡPage（ｖａ）＝（ＰＤｉｎｄｅｘ≪２２）＋（ＰＴｉｎｄｅｘ≪１２）＝Ｅ８００＿００００＋２９＿６０００＝Ｅ８２９＿６０００
１３）ＰＡPage（ｖａ）＝Ｍｅｍ［ＶＡPTE（ｖａ）］＜３１：１２＞
１４）ＶＡByte（ｖａ）＝ＶＡPage（ｖａ）＋Ｂｙｔｅ  Ｉｎｄｅｘ＝ｖａ＝Ｅ８２９＿６０００＋４５７＝Ｅ８２９＿６４５７
１５）ＰＡByte（ｖａ）＝ＰＡPage（ｖａ）＋Ｂｙｔｅ  Ｉｎｄｅｘ＝ＰＡPage（ｖａ）＋４５７
１６）Ｄａｔａ＝Ｍｅｍ［ｖａ］
【００７５】
図１５を参照すると、実施例１５００は、ＰＡPD（ｖａ）＝Ｍｅｍ［Ｃ０３０＿０Ｃ００］＜３１：１２＞の変換を行うためにハードウェア変換技術を適用することを例示している。ＣＲ３レジスタに仮想アドレスＣ０３０＿００００の物理変換がロードされる。また、インデックス３００におけるダブルワードにはＣＲ３におけるものと同じ物理アドレスがロードされる。ハードウェア変換プロセスに続いて：
１）ＣＲ３  １５１０内の物理アドレスをＰＤのベースへのポインタとして用いる。
２）ＰＤＥ１５３０を求めるためにＰＤ１５２０内へのダブルワードインデックスとして仮想アドレスＣ０３０＿０Ｃ００（＝３００）のビット＜３１：２２＞を用いる。
３）ＰＤＥ１５３０はＰＴのベースを指す（物理アドレス）。このアドレスはＣＲ３から取得した物理アドレスと同じ物理アドレスである。
４）ＰＴＥ１５３０を求めるために仮想アドレスＣ０３０＿０Ｃ００（＝３００）のビット＜２１：１２＞をＰＴ内へのダブルワードインデックスとして用いる。
５）ＰＴＥ１５３０はメモリページのベースを指す（物理アドレス）。このアドレスは、ＣＲ３から取得した物理アドレスと同じ物理アドレスである。
６）仮想アドレスＣ０３０＿０Ｃ００（＝３００）のビット＜１１：０２＞をメモリページ内へのダブルワードインデックスとして用いる。
７）このメモリのダブルワードを読み出すことによってＰＤ１５２０のベースの物理アドレスがもたらされる。これはＰＡPD（ｖａ）である。
【００７６】
同様に図１６を参照すると、ｖａ＝Ｅ８２９＿６４５７に対してＰＡPT（ｖａ）＝Ｍｅｍ［ＶＡPDE（ｖａ）］＜３１：１２＞の変換を行うためにハードウェア変換技術を適用する。
１）ＶＡPDE（ｖａ）＝Ｃ０３０＿００００＋（ＰＤｉｎｄｅｘ≪２）＝Ｃ０３０＿００００＋Ｅ８０＝Ｃ０３０＿０Ｅ８０
２）ＣＲ３  １５１０内の物理アドレスをＰＤ１５２０のベースへのポインタとして用いる。
３）ＰＤＥ１５３０を求めるためにＰＤ１５１０内へのダブルワードインデックスとして仮想アドレスＣ０３０＿０Ｅ８０（＝３００）のビット＜３１：２２＞を用いる。
４）ＰＤＥ１５３０はＰＴ１５２０のベースを指す（物理アドレス）。
５）ＰＴＥ１５３０を求めるためにＰＴ１５２０内へのダブルワードインデックスとして仮想アドレスＣ０３０＿０Ｅ８０（＝３００）のビット＜２１：１２＞を用いる。
６）ＰＴＥ１５３０はメモリページ１５２０のベースを指す（物理アドレス）。
７）仮想アドレスＣ０３０＿０Ｅ８０（＝３Ａ０）のビット＜１１：０２＞をメモリページ１６４０内へのダブルワードインデックスとして用いる。
８）メモリのこのダブルワードを読み出すことによって、ＰＴのベースの物理アドレスであるＰＤｉｎｄｅｘ  ３Ａ０に対するＰＤＥがもたらされる。これは、ＰＡPT（ｖａ）＝Ｍｅｍ［ＶＡPDE（ｖａ）］である。
【００７７】
再び図１６を参照すると、ｖａ＝Ｅ８２９＿６４５７に対してＰＡPage（ｖａ）＝Ｍｅｍ［ＶＡPTE（ｖａ）］＜３１：１２＞の変換を行うためにハードウェア変換技術を適用する。
１）ＶＡPTE（ｖａ）＝ＶＡPT（ｖａ）＋（ＰＴｉｎｄｅｘ≪２）＝Ｃ０３Ａ＿００００＋５５８＝Ｃ０３Ａ＿０５５８
２）ＣＲ３  １５１０内の物理アドレスをＰＤ１５２０のベースへのポインタとして用いる。
３）ＰＤＥ１５３０を求めるためにＰＤ１５２０内へのダブルワードインデックスとして仮想アドレスＣ０３Ａ＿０５５８（＝３００）のビット＜３１：２２＞を用いる。
４）ＰＤＥ１５３０はＰＴ１５２０のベースを指す（物理アドレス）。
５）ＰＤＥ１６４０を求めるためにＰＴ１５２０内へのダブルワードインデックスとして仮想アドレスＣ０３Ａ＿０５５８（＝３Ａ０）のビット＜２１：１２＞を用いる。
６）ＰＴＥ１６４０はメモリページ１６５０のベースを指す（物理アドレス）。
７）仮想アドレスＣ０３Ａ＿０５５８（＝２９６）のビット＜１１：０２＞をメモリページ１６５０内へのダブルワードインデックスとして用いて、メモリ位置１６６０を得る。
８）メモリのこのダブルワードを読み出すことによって、メモリページの物理アドレスであるＰＴｉｎｄｅｘ２９６に対するＰＴＥがもたらされる。これは、ＰＡPage（ｖａ）＝Ｍｅｍ［ＶＡPTE（ｖａ）］である。
【００７８】
再び図１６を参照すると、ｖａ＝Ｅ８２９＿６４５７に対してＤａｔａ＝Ｍｅｍ［ｖａ］の変換を行うためにハードウェア変換技術を適用する。
１）ＣＲ３  １５１０内の物理アドレスをＰＤ１５２０のベースへのポインタとして用いる。
２）ＰＤＥ１６４０を求めるためにＰＤ１５２０内へのダブルワードインデックスとして仮想アドレスＥ８２９＿６４５７（＝３Ａ０）のビット＜３１：２２＞を用いる。
３）ＰＤＥはＰＴ１６５０のベースを指す（物理アドレス）。
４）ＰＴＥ１６６０を求めるためにＰＴ１６５０内へのダブルワードインデックスとして仮想アドレスＥ８２９＿６４５７（＝２９６）のビット＜２１：１２＞を用いる。
５）ＰＴＥ１６６０はメモリページ１６７０のベースを指す（物理アドレス）。
６）仮想アドレスＥ８２９＿６４５７（＝４５７）のビット＜１１：００＞をメモリページ１６７０内へのバイトインデックスとして用いる。
７）これはＤａｔａ＝Ｍｅｍ［ｖａ］である。
【００７９】
シャドーページテーブルの仮想アドレス変換
シャドーページテーブル構造を作成する上での目標は、プロセッサ毎の決定論的共有メモリアクセス制御を可能にすることである。シャドーマッピングは、プロセッサを元のページテーブル構造が導くのと正確に同じ物理メモリページに導く。更に、元の変換構造でページテーブル（ＰＴ）又はページディレクトリ（ＰＤ）として用いているあらゆるメモリページは、元の変換構造において変換しなければならず、ページテーブルエントリ（ＰＴＥ）として現れなければならない点に留意されたい。シャドーページテーブルは、元の変換構造内に含まれていた全てのページをマッピングしなければならない。
【００８０】
図１７は、図７及び８にそれぞれ示されているタスクページング構造とシャドーページング構造との組み合わせの概要１７００を示している。タスクページング構造に示されているものは、タスクＰＤ１７１０Ａ並びに２つのタスクＰＴ１７２０Ａ及び１７２２Ａである。一例として、タスクＰＤ１７１０Ａは自己マップＰＤＥ／ＰＴＥ、４Ｍ  ＰＴＥ、及び２つのＰＤＥを示している。シャドーＰＤ  １７１０Ｂは、タスクＰＤ  １７１０Ａと同じアイテムを示している。タスク自己マップＰＤＥ／ＰＴＥの使用は上記で説明した。タスクによる自己マップＰＤＥ／ＰＴＥのあらゆる使用によっても正しいアドレス変換が生成されるように、シャドー自己マップＰＤＥ／ＰＴＥは、タスクＰＤ１７１０Ａを指すように設定される。シャドー自己マップＰＤＥ／ＰＴＥエントリは、読出し専用としてマークされる。これによって、オペレーティングシステムによるタスク変換構造を修正するあらゆる試みがページフォルトを発生させることが保証される。次いで、これに伴いシャドーページテーブルを修正することができる。加えて、シャドーＰＴ１７２０Ｂ及び１７２２Ｂは、タスクＰＴ１７２０Ｂ及び１７２２Ｂに対応する。
【００８１】
４Ｍ  ＰＴＥは単一レベルのマッピングであり、ここでＰＤは、変換プロセスにおいてＰＴを使用せずに直接物理メモリの４メガバイトページを指す。タスク及びシャドーの４Ｍ  ＰＴＥのエントリは、両方とも同じ物理アドレス空間を指す。シャドー４Ｍ  ＰＴＥに示されているＤＳＭＡフィールドは、Ｒ／Ｗと、単一のＣＰＵが書込み権限を有することを保証するように操作されている存在ビットとを含む。
【００８２】
タスクＰＤＥのエントリ及びシャドーＰＤＥのエントリは、対応するタスク及びシャドーＰＴを指す。タスクＰＴ及びシャドーＰＴ内の対応するＰＴＥは、両方とも物理メモリの同じ４ＫＢページを指す。書込みアクセスを制御するためにシャドーＰＴＥは、ＤＳＭＡフィールドを含む。
【００８３】
論理的には、シャドーページテーブル構造の作成は、図７におけるように変換構造内のあらゆるＰＤＥ及びＰＴＥを識別し、図８におけるようにシャドーテーブル構造を作成することであると考えることができる。オペレーティングシステムが図７におけるテーブル構造の内の１つを修正するときは常に、図８において対応する変更を加えなければならない。シャドー変換構造は一斉に作成する必要はない。オペレーティングシステムがタスクをセットアップすると、タスクＰＤ及びタスクＰＴ内にタスクの現在アクセス可能なアドレス空間の完全なマップがセットアップされる。次いで、タスクＣＲ３の値がロードされ、タスク実行が始まる。必要最低限の手法は、必要に応じてシャドーページテーブル構造を構築することである。タスクＣＲ３の値のロードとタスクの最初の命令の実行との間に、シャドーＰＤを指すＣＲ３でシャドーＰＤを作成することができる。全てのエントリで、ＤＳＭＡフィールドが存在しないように設定することができる。シャドー変換テーブル内に未だマッピングされていないメモリページへのアクセスはページフォルトを引き起こす。各ページフォルトに対して、シャドー変換テーブルを拡張し、このフォルトを扱うことができる。
【００８４】
時間が経過すると、シャドー変換テーブルは、タスクが参照しているメモリをカバーするよう拡張する。これは、定義上は当該時間期間におけるこのタスクのワーキングセットである。オペレーティングシステムがこのＣＰＵに割り当てられたタスクをスワップするときには、ＣＲ３の値は、新しいタスクページング構造を指すように変更される。シャドーページング構造を分解し、新しいタスクページング構造を反映する新しいシャドーページング構造が作成される。このプロセスに適用することができる最適化には以下のものがある。
・タスク間で等しいシャドーページング構造部分を保持する。例えば、オペレーティングシステムのアドレス空間の一部分は、全てのタスクにわたって等しくマッピングされる。
・最初にＰＴが参照されるときには、シャドーＰＴ内にＰＴＥエントリのグループ（最大でＰＴ全体）を読み込む。これは、シャドーページング構造のセクションを推論的に作成する時間に対するページフォルトオーバーヘッドをトレードオフしている。
・経時的にシャドーページング構造をトリミングする。タスク参照の局所性は時間と共に変化し、ページング構造内に多くの未使用ページを残す。ある程度小さいアクティブなシャドーページング構造を有することによって、複数のＣＰＵにわたって図１０のＤＳＭＡ状態を維持するために用いるプロセスの性能を改善することができる。更に、小さいシャドーページング構造は、タスクスワップ上で迅速に分解することができる。
・タスクを実行する間にこのタスクに対するアクティブワーキングセットを追跡することができる。プロセッサ上でタスクがもはや実行されていない間にワーキングセットが記憶される。プロセッサ上にタスクがスワップされて戻されると、このタスクに対するワーキングセットを表すシャドーページング構造を読み込み、シャドーページング構造を初期化するのに必要なページフォルトシーケンスを回避することができる。
【００８５】
多段ページテーブルの使用
図１８には多段ページテーブルメモリ管理構造１８００が示されている。ゲスト仮想アドレスは以下のステップによって変換される。
・ゲストＣＲ３（ｇＣＲ３）１８１０レジスタはゲストページディレクトリ（ｇＰＤ）１８２０のベースを指す。
・ゲスト仮想アドレスからのゲストＰＤインデックス（ｇＰＤＩｎｄｅｘ）はゲストＰＤＥ（ｇＰＤＥ）１８２５を識別する。
・ｇＰＤＥ１８２５はゲストページテーブル（ｇＰＴ）１８３０のベースを指す。
・ゲスト仮想アドレスからのゲストＰＴインデックス（ｇＰＴＩｎｄｅｘ）はゲストＰＴＥ（ｇＰＴＥ）１８３５を識別する。
・ｇＰＴＥ１８３５は物理メモリのゲストページ１８４０のベース（ｇＰａｇｅＢａｓｅ）を指す。
・完全なゲスト物理アドレスは、ｇＰａｇｅＢａｓｅにゲスト仮想アドレスからのｇＰａｇｅＩｎｄｅｘを加えたものである。これをホスト仮想アドレスとして用いる。
・ホストＣＲ３（ｈＣＲ３）１８５０レジスタはホストページディレクトリ（ｈＰＤ）１８６０のベースを指す。
・ホスト仮想アドレスからのホストＰＤインデックス（ｈＰＤＩｎｄｅｘ）はホストＰＤＥ（ｈＰＤＥ）１８６５を識別する。
・ｈＰＤＥ１８６５はホストページテーブル（ｈＰＴ）１８７０のベースを指す。
・ホスト仮想アドレスからのホストＰＴインデックス（ｈＰＴＩｎｄｅｘ）はホスト（ｈＰＴＥ）１８７５を識別する。
・ｈＰＴＥ１８７５は物理メモリのホストページ１８８０のベース（ｈＰａｇｅＢａｓｅ）を指す。
・完全なホスト物理アドレスは、ｈＰａｇｅＢａｓｅにゲスト／ホスト仮想アドレスからのｇＰａｇｅＩｎｄｅｘを加えたものである。
【００８６】
この構造はシステム内のあらゆるプロセッサにおいて存在するので、ゲスト仮想アドレスからホスト物理アドレスへの固有のアドレス変換経路が容易に作成され、変換構造のホスト部分のみを操作することができる。ＳＭＰゲストオペレーティングシステムにおける各プロセッサは、ＤＳＭＡ権限を調整するのに用いられているホスト変換構造によってゲスト変換構造を直接操作することが許容される。
【００８７】
図１９は、多段ページテーブルを用いて構成された図７からの仮想アドレス変換を示している。図示しているものは、４プロセッサＳＭＰシステム上で同時に実行されている４つのタスクに対する単一の物理メモリページについての仮想アドレスから物理アドレスへの全てのマッピングである。仮想アドレスから物理アドレスへの変換に対して２つのフェーズが存在する。フェーズ１では、ゲスト仮想アドレスをゲスト物理アドレスに変換する。フェーズ２では、ゲスト物理アドレスをホスト物理アドレスに変換する。図１９は、単一の物理ページに対する全てのマッピングを表しているので、ただ一つのホスト物理アドレスが存在する。ゲストオペレーティングシステムが用いているページテーブル構造は、図７の構造から修正されていない。ゲストオペレーティングシステムのページテーブルは、どのようにも修正されていない。システム内の各プロセッサに対してホスト変換テーブル構造の１つのコピーが存在する。ホスト変換構造は、１対１のマッピングであり、あらゆる可能なゲスト物理アドレスに対して１つのホスト物理アドレスがある。ホスト変換テーブルは論理的に等しいが固有である。図１９は、ホスト物理アドレス１９８０への７つの固有のマッピングを表している。全ての７つのマッピングは、共通のゲスト物理メモリページ７８０及び共通のホスト物理メモリページ１９８０を共有するが、マッピングのいずれもがホスト変換テーブル内の共通要素を共有しない。ホスト変換側の固有性により、ページアクセス権限を操作することが可能になる。
【００８８】
図１８に示すように、ゲスト仮想アドレスは３つのインデックス（ｇＰＤＩｎｄｅｘ、ｇＰＴＩｎｄｅｘ、及びｇＰａｇｅＩｎｄｅｘ）に分割される。ｇＰＤＩｎｄｅｘ及びｇＰＴＩｎｄｅｘは、ｇＰＤＥ及びｇＰＴＥによってそれぞれ固有に識別される。従って、図１９を参照すると、各タスクに対してマッピングしたゲスト仮想アドレス空間は以下のように記述することができる。
・タスク５２１に対するゲストマッピング１＝ＰＤＥ５３１  ＰＴＥ５６１
・タスク５２２に対するゲストマッピング２＝ＰＤＥ５３１  ＰＴＥ５６１
・タスク５２３に対するゲストマッピング３＝ＰＤＥ５４１  ＰＴＥ５６１
・タスク５２３に対するゲストマッピング４＝ＰＤＥ５４２  ＰＴＥ５７１
・タスク５２３に対するゲストマッピング５＝ＰＤＥ５４２  ＰＴＥ５７２
・タスク５２４に対するゲストマッピング６＝ＰＤＥ５５１  ＰＴＥ５７１
・タスク５２４に対するゲストマッピング７＝ＰＤＥ５５１  ＰＴＥ５７２
【００８９】
上記は６つの固有ゲスト仮想アドレスを示しており（タスク５２１及びタスク５２２は同じ仮想アドレス空間を有する）、全てを１つのゲスト物理ページ５８０にマッピングする。ゲスト物理ページ５８０は、４つの定義済みマッピング、すなわちシステム内の各プロセッサに対して１つの定義済みマッピングを有する。全ての４つのマッピングは同じホスト物理メモリページ１９８０に変換する。ホスト物理アドレス空間は以下のように記述することができる。
・ＣＰＵ５０１上のホストマッピング１＝ｈＰＤＥ１９３５Ａ  ｈＰＴＥ１９７５Ａ
・ＣＰＵ５０２上のホストマッピング２＝ｈＰＤＥ１９３５Ｂ  ｈＰＴＥ１９７５Ｂ
・ＣＰＵ５０３上のホストマッピング３＝ｈＰＤＥ１９３５Ｃ  ｈＰＴＥ１９７５Ｃ
・ＣＰＵ５０４上のホストマッピング４＝ｈＰＤＥ１９３５Ｄ  ｈＰＴＥ１９７５Ｄ
【００９０】
ゲスト仮想アドレス変換は、タスクに特定であるゲスト変換テーブルに基づく。ゲストオペレーティングシステムが１つのＣＰＵから別のＣＰＵに移動すると、ゲスト変換テーブルはそのタスクと共に移動する。ゲスト仮想アドレスからゲスト物理アドレスへのマッピングはタスク特有のものである。あらゆるＣＰＵからのメモリページへのアクセス権はアクセスを決定論的にするように制御されているからこそ、ホスト変換テーブルはＣＰＵ特有のものである。ホスト変換テーブルの集合は、ただ１つのＣＰＵが単一のホスト仮想ページ１９８０への書込みアクセスを有することを保証する。ゲストオペレーティングシステムがＣＰＵ５０１からＣＰＵ５２４までのタスク５２１を再スケジュール化するときに、変更されなかったホスト変換テーブルは当該機能を提供することができる。
【００９１】
全てのＣＰＵに対するホスト変換テーブルは、ホスト物理メモリのあらゆる可能なページをマッピングするように構成することができる。ゲストオペレーティングシステムは、タスクを許可されたゲスト物理アドレス空間に制限し、これによって利用可能なホスト物理アドレス空間が制限される。ホスト変換テーブルは、１度だけ作成する必要がある。ホスト変換テーブルのＲ／Ｗ及び存在ビットを修正することによって、ゲスト変換テーブルに加えられたいかなる修正も追跡することなく決定論的な共有メモリアクセスを保証することができる。
【００９２】
連続再生フォルトトレラントコンピュータシステムの幾つかの実装では、ＰＦイベントのマイクロジャーナル処理が生じる場合がある。更に、非同期シャドー更新は、マイクロジャーナルエントリと組み合わせることができる。
【００９３】
通常、ジャーナルエントリは、図１３に示すようにあらゆるプロセッサ対して値のセットを含む。ジャーナルファイル内のステップは、ジャーナルエントリが作成された時点でのコンピュータ環境１１５における各プロセッサの状態を記述している。一般に、プロセッサがページアクセスにおいてフォルトを起こすと、以下のステップをとる。
１．プロセッサは強制的にロックステップ管理部２４０に入れられる。
２．フォルトを起こしているプロセッサに必要なアクセスを与えるようにプロセッサのページアクセス権限が調節される。
３．プロセッサがロックステップ管理部２４０に入る前に各プロセッサの状態を記述するジャーナルエントリが作成される。
４．プロセッサは、修正したページアクセス権限で作動を継続することが許可される。
【００９４】
多くの場合、要求を満たすために利用可能なプロセッサのサブセットの権限だけが修正される。一般に、他のプロセッサの作動への妨害は性能損失を意味する。影響を受けなかったプロセッサの非割り込み作動を可能にする修正制御フローは、以下の通りである。
１．要求されたページアクセスを認可することで影響を受けるプロセッサを判別する。
２．影響を受けるプロセッサをロックステップ管理部２４０に強制的に入れる。
３．影響を受けるプロセッサのページアクセス権限を調節し、フォルトを起こしているプロセッサに必要なアクセスを与える。
４．影響を受けるプロセッサのみを示すマイクロジャーナルエントリを作成する。時間経過は全てのプロセッサに可視であるので、一般にマイクロジャーナルエントリ上では時間挿入が許可されない点に留意されたい。また、現在ロックステップ管理部２４０中にあるプロセッサに対して入力消費が許可されるだけである点に留意されたい。
５．プロセッサは、修正したページアクセス権限によって作動を継続することが許可される。
【００９５】
マイクロジャーナルエントリ中にページング構造に行われている更新は、コンピュータ環境１１５内のプロセッサの一部に対して非同期である。幾つかのマイクロジャーナルエントリは、順次作成することができる。マイクロジャーナルエントリ間の対話の複雑さは、システム１１０内のロックステップ管理部２４０によって追跡しなければならない。完全なジャーナルエントリは、一般に、マイクロジャーナルエントリ間の対話の知識ベースを消去することが必要とされる。
【００９６】
マイクロジャーナルエントリを用いる簡単な実施例は、タスクがロードされるときにメモリページを取得する、プロセッサＣ上で実行される新しいタスクである。プロセッサＡ及びＢは、プロセッサＣ上で実行されるタスクと重複しない。プロセッサＣによるページフォルトは、プロセッサＡ及びＢのアドレス空間に対して影響を与えず、従って、プロセッサＡ及びＢは、プロセッサＣからの要求を認可するのに妨害を受ける必要はない。プロセッサＡ及びＢ上のタスクが共通プロセスからのスレッドである場合には、プロセッサが共通アドレス空間を共有するので、プロセッサＡによる要求はプロセッサＢのアドレス空間に影響を与える。しかしながら、プロセッサＣは影響を受けない。従って、プロセッサＣについてのマイクロジャーナルエントリにより、プロセッサＡ及びＢに影響を及ぼすのが回避され、プロセッサＡ及びＢについてのマイクロジャーナルエントリによりプロセッサＣに影響を与えるのが回避される。
【００９７】
図２０〜２４は、Ｉｎｔｅｌ（登録商標）又はＡＭＤによるｘ８６プロセッサへの６４ビット拡張のために４ｋページを用いる仮想メモリ変換構造を例示している。図２０は仮想メモリ変換プロセスを示している。
【００９８】
図２０を参照すると、例示的な変換プロセス２０００は、４つのテーブル２０３０、２０４０、２０５０、及び２０６０を用いた仮想アドレス２０１０から物理アドレスへの変換を示している。命令は、４８ビットの仮想アドレス２０１０を用いてメモリへの参照を行う。レジスタＣＲ３  ２０２０は、ページマップレベル４テーブル２０３０のベースアドレスを含む。仮想アドレス２０１０のビット＜４７：３９＞２０１２は、ページマップレベル４テーブルのベースからの９ビットのオフセットを提供する。このメモリ位置の内容をページマップレベル４エントリ（ＰＭＬ４Ｅ）２０３５と呼ばれ、これはページディレクトリポインタテーブル２０４０におけるベースアドレスを提供する。仮想アドレス２０１０のビット＜３８：３０＞２０１４は、ページディレクトリポインタテーブルのベースからの９ビットのオフセットを提供する。このメモリ位置の内容は、ページディレクトリポインタエントリ（ＰＤＰＥ）２０４５と呼ばれ、これはページディレクトリテーブル２０５０におけるベースアドレスを提供する。仮想アドレス２０１０のビット＜２９：２１＞２０１５は、ページディレクトリテーブルのベースからの９ビットのオフセットを提供する。このメモリ位置の内容は、ページディレクトリエントリ（ＰＤＥ）２０５５と呼ばれ、これは、ページテーブル２０６０におけるベースアドレスを提供する。仮想アドレス２０１０のビット＜２０：１２＞２０１６は、ページテーブルのベースからの９ビットのオフセットを提供する。このメモリ位置の内容は、ページテーブルエントリ（ＰＴＥ）２０６５と呼ばれ、これは参照している物理メモリページにおけるベースアドレスを提供する。仮想アドレス２０１０のビット＜１１：００＞２０１７は、物理ページ２０７０から参照している物理メモリ位置２０７５への１２ビットのオフセットを提供する。
【００９９】
図２１〜２４は、ページマップレベル４エントリ２１００、ページディレクトリポインタエントリ２２００、ページディレクトリエントリ２３００、及びページテーブルエントリ２４００のフォーマットをそれぞれ示している。これらのテーブルにおいて特に重要なビットは、ビット＜２：０＞２１１０である。ビット０は存在（Ｐ）フラグ２１１２であり、一般にこれはベースアドレス（ビット＜５１：１２＞）２１２０、２２２０、２３２０、又は２４２０によりそれぞれ指されている構造がメモリ内に存在しており、ディスクにページアウトされていないことを示す。ビット１は、エントリが指す構造への読出し／書込み（ＲＡＶ）権限２１１４を示す。ビット２は、エントリが指す構造にユーザ又はシステム（Ｕ／Ｓ）アクセス２１１６が許可されているか否かを示す。
【０１００】
本技術の実装は、方法又はプロセス、システム又は装置、或いはコンピュータアクセス可能な媒体上のコンピュータソフトウェアを含むことができる。添付の請求項の範囲内にある他の実装が存在する。
【図面の簡単な説明】
【０１０１】
【図１】フォルトトレラント対称型マルチプロセッシングコンピュータシステムのブロック図である。
【図２】対称型マルチプロセッシングコンピュータシステムにおけるサーバのブロック図である。
【図３】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける仮想アドレスから物理アドレスへの変換の実施例のブロック図である。
【図４】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおけるページテーブルエントリのフォーマットのブロック図である。
【図５】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおけるページテーブルエントリのフォーマットのブロック図である。
【図６】フォルトトレラント対称型マルチプロセッシングコンピュータシステムのオペレーティングシステムの観点からの仮想メモリから物理メモリへの構成のブロック図である。
【図７】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける仮想アドレスから物理アドレスへの変換の実施例のブロック図である。
【図８】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける仮想アドレスから物理アドレスへの変換の実施例のブロック図である。
【図９】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける２つのプロセッサ間の対話のタイムラインのフロー図である。
【図１０】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおいてプロセッサが維持するシャドーページテーブル構造における決定論的共有メモリアクセスについての状態遷移図である。
【図１１】対称型マルチプロセッシングコンピュータシステムにおけるサーバのブロック図である。
【図１２】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける２つのプロセッサ間の対話のタイムラインのフロー図である。
【図１３】図１２に示すフォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける２つのプロセッサ間の対話のシーケンスについてのジャーナルストリームの図である。
【図１４】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける２つのプロセッサ間の対話のタイムラインのフロー図である。
【図１５】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける仮想アドレスから物理アドレスへの変換の実施例のブロック図である。
【図１６】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける仮想アドレスから物理アドレスへの変換の実施例のブロック図である。
【図１７】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける仮想アドレスから物理アドレスへの変換の実施例のブロック図である。
【図１８】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける仮想アドレスから物理アドレスへの変換の実施例のブロック図である。
【図１９】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける仮想アドレスから物理アドレスへの変換の実施例のブロック図である。
【図２０】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおける仮想アドレスから物理アドレスへの変換の実施例のブロック図である。
【図２１】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおけるページテーブルエントリのフォーマットのブロック図である。
【図２２】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおけるページテーブルエントリのフォーマットのブロック図である。
【図２３】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおけるページテーブルエントリのフォーマットのブロック図である。
【図２４】フォルトトレラント対称型マルチプロセッシングコンピュータシステムにおけるページテーブルエントリのフォーマットのブロック図である。
【符号の説明】
【０１０２】
１１５、１６５  コンピュータ環境
１２０、１７０  Ｉ／Ｏ環境
１３０、１８０  ディスク
１５０  ネットワーク
【図１】
2008542878.tif 000003
【図２】
2008542878.tif 000004
【図３】
2008542878.tif 000005
【図４】
2008542878.tif 000006
【図５】
2008542878.tif 000007
【図６】
2008542878.tif 000008
【図７】
2008542878.tif 000009
【図８】
2008542878.tif 000010
【図９】
2008542878.tif 000011
【図１０】
2008542878.tif 000012
【図１１】
2008542878.tif 000013
【図１２】
2008542878.tif 000014
【図１３】
2008542878.tif 000015
【図１４】
2008542878.tif 000016
【図１５】
2008542878.tif 000017
【図１６】
2008542878.tif 000018
【図１７】
2008542878.tif 000019
【図１８】
2008542878.tif 000020
【図１９】
2008542878.tif 000021
【図２０】
2008542878.tif 000022
【図２１】
2008542878.tif 000023
【図２２】
2008542878.tif 000024
【図２３】
2008542878.tif 000025
【図２４】
2008542878.tif 000026
【国際調査報告】
2008542878.tif 000027