(57)【要約】第１のプロセッサ（１０２）と、第１のプロセッサ（１０２）と通信を行う第２のプロセッサ（１０４）と、第１のプロセッサ（１０２）および第２のプロセッサ（１０４）に接続（すなわち共有メモリ）されたメモリ（１０６）と、第１のプロセッサ（１０２）に接続された記憶装置（１１０または１１２）とを含むコンピュータシステム（１００）。第１のプロセッサ（１０２）および第２のプロセッサ（１０４）は、メモリ（１０６）を使って仮想メモリを実現する。第１のプロセッサ（１０２）はメモリ（１０６）内の第１および第２のページテーブルの組を管理する。第１のプロセッサ（１０２）は第１のページテーブルの組を使用してメモリ（１０６）内の記憶位置にアクセスする。第２のプロセッサ（１０４）は、第１のプロセッサ（１０２）が管理している第２のページテーブルの組を使用してメモリ（１０６）内の記憶位置にアクセスする。コンピュータシステム（１００）で用いられる仮想メモリページ差し替え方法も記載される。
2005500592.tif 000002
【特許請求の範囲】
【請求項１】
第１のプロセッサ（１０２）と、
前記第１のプロセッサ（１０２）と通信を行う第２のプロセッサ（１０４）と、
前記第１のプロセッサ（１０２）および前記第２のプロセッサ（１０４）に動作可能に接続され、複数の記憶位置を含むメモリ（１０６）と、
前記第１のプロセッサ（１０２）に動作可能に接続された記憶装置（１１０または１１２）とを含むコンピュータシステムであって、
前記第１のプロセッサ（１０２）および前記第２のプロセッサ（１０４）は、前記メモリ（１０６）を使って仮想メモリを実現するように構成され、
前記第１のプロセッサ（１０２）は、前記メモリ（１０６）内の第１のページテーブルの組と第２のページテーブルの組とを作成および管理し、かつ、前記第１のページテーブルの組を使用して前記メモリ（１０６）内の記憶位置にアクセスするように構成され、
前記第２のプロセッサ（１０４）は、前記第２のページテーブルの組を使用してメモリ（１０６）内の記憶位置にアクセスするように構成されている、コンピュータシステム（１００）。
【請求項２】
前記第１のプロセッサ（１０２）が、前記第１のページテーブルの組を使用して、前記第１のプロセッサ（１０２）内で生成された仮想アドレスを、この仮想アドレスに対応する、前記メモリ（１０６）内の記憶位置の物理アドレスに変換し、この記憶位置の物理アドレスを使用して該当する記憶位置にアクセスするように構成されている、請求項１記載のコンピュータシステム（１００）。
【請求項３】
前記第２のプロセッサ（１０４）が、前記第２のページテーブルの組を使用して、前記第２のプロセッサ（１０４）内で生成された仮想アドレスを、対応するメモリ（１０６）内の記憶位置の物理アドレスに変換し、この記憶位置の物理アドレスを使用して該当する記憶位置にアクセスするように構成されている、請求項１記載のコンピュータシステム（１００）。
【請求項４】
前記第２のページテーブルの組が複数のページテーブルエントリを含み、対応するメモリページがメモリ（１０６）内に存在する場合に、これらのページテーブルエントリをそれぞれ使用して対応するメモリページのベースアドレスを格納する、請求項１記載のコンピュータシステム（１００）。
【請求項５】
前記第２のプロセッサ（１０４）がバッファを含み、このバッファが、最近使われたページテーブルエントリを格納し、かつ、第２のプロセッサ（１０４）によって対応するメモリページに書き込みアクセスを記録するための複数のエントリを含む、請求項４記載のコンピュータシステム（１００）。
【請求項６】
メモリ内に存在するメモリページを記憶装置（１１０または１１２）に格納されたメモリページに差し替える前に、差し替え対象となるメモリページの物理アドレス範囲に対応するバッファのエントリをすべて削除する必要がある旨を前記第１のプロセッサ（１０２）が前記第２のプロセッサ（１０４）に通知するように構成されている、請求項５記載のコンピュータシステム（１００）。
【請求項７】
第１のプロセッサ（１０２）と第２のプロセッサ（１０４）とを含むマルチプロセッサシステムで用いられる仮想メモリページ差し替え方法であって、
ページテーブルエントリの組がそれぞれ前記第２のプロセッサ（１０４）のページセットの異なるページに対応し、前記第２のプロセッサ（１０４）のページセットの各ページが、前記メモリ（１０６）に格納され、かつ前記メモリ（１０６）からの削除対象となる前記第１のプロセッサ（１０２）の第１のページに対応し、前記第２のプロセッサ（１０４）の各ページテーブルエントリが存在ビットとダーティビットとを含み、前記存在ビットが、前記第２のプロセッサ（１０４）の対応するページが前記メモリ（１０６）内に存在するか否かを示す値を有し、前記ダーティビットが、前記第２のプロセッサ（１０４）の対応するページを記憶装置に書き込む必要があるか否かを示す値を有す、前記第２のプロセッサ（１０４）のページテーブルエントリの組にアクセスする処理と、
前記ページテーブルエントリの組各々の前記ダーティビットの値が変わらないような方法で前記ページテーブルエントリの組のそれぞれの前記存在ビットの値を変更して前記第２のプロセッサ（１０４）の対応するページが前記メモリ（１０６）内に存在しないことを示す処理と、
複数のエントリを含むバッファの、前記ページセットのページに対応する前記第２のプロセッサ（１０４）のエントリをすべて削除する必要がある旨を前記第２のプロセッサ（１０４）に通知する処理と、
前記通知の後で前記ページテーブルエントリの組をそれぞれ読み出す処理と、
前記ページテーブルエントリが第１のビットを記憶装置に書き込む必要があるか否かを示す前記ダーティビットを含む、前記第１のプロセッサ（１０２）の前記第１のページに対応するページテーブルエントリを読み出す処理と、
（ｉ）前記ページテーブルエントリの組それぞれの読み出しの際に取得されたページテーブルエントリの組のうちの少なくとも１つのダーティビットが、前記第２のプロセッサ（１０４）の対応するページを前記記憶装置に書き込む必要があることを示す場合または
（ｉｉ）前記第１のプロセッサ（１０２）のページテーブルエントリの読み出しの際に取得されたページテーブルエントリのダーティビットが、前記第１のプロセッサ（１０２）の前記第１のページを前記記憶装置に書き込む必要があることを示す場合、前記第１のプロセッサ（１０２）の前記第１のページをメモリ（１０６）から前記記憶装置に書き込む処理を含む、仮想メモリページ差し替え方法。
【請求項８】
前記通知する処理が、
前記ページセットのページに対応する前記第２のプロセッサ（１０４）のバッファのエントリをすべて削除する必要がある旨を前記第２のプロセッサ（１０４）に通知する処理を含み、前記バッファが複数のエントリを含み、前記バッファの各エントリが、前記第２のプロセッサ（１０４）の対応するページを前記記憶装置に書き込む必要があるか否かを示すダーティビットを含み、
前記仮想メモリページ差し替え方法はさらに、前記通知に応答して、
前記ページセットのページに対応する前記バッファのエントリの位置を求める処理と、
前記ページセットのページに対応するエントリのダーティビットが、前記ページセットのページを前記記憶装置に書き込む必要があることを示す場合は、前記ページセットのページに対応する前記第２のプロセッサ（１０４）のページテーブルエントリのダーティビットを更新して前記ページセットのページを前記記憶装置に書き込む必要があることを示す処理と、
前記ページセットのページに対応するエントリをクリアする処理とを実行する、請求項７記載の仮想メモリページ差し替え方法。
【請求項９】
前記通知する処理が、
前記ページセットのページに対応する前記第２のプロセッサ（１０４）の前記バッファのエントリをすべてクリアする必要があることを示すメッセージを前記第２のプロセッサ（１０４）に送信する処理を含む、請求項７記載の仮想メモリページ差し替え方法。
【請求項１０】
前記第２のプロセッサ（１０４）がページフォールト状態である旨の知らせを受信する処理と、
前記メモリ（１０６）に格納された第１のプロセッサ（１０２）の第１のページを、前記記憶装置に格納された前記第１のプロセッサ（１０２）の第２のページに差し替えなければならないことを判断し、前記第２のプロセッサ（１０４）でのページフォールト状態をクリアする処理とをさらに含む、請求項７記載の仮想メモリページ差し替え方法。
【請求項１１】
第１のプロセッサ（１０２）と、
前記第１のプロセッサ（１０２）と通信を行う第２のプロセッサ（１０４）と、
前記第１のプロセッサ（１０２）および前記第２のプロセッサ（１０４）に動作可能に接続されたメモリ（１０６）と、
前記第１のプロセッサ（１０２）に動作可能に接続された記憶装置（１１０または１１２）と、
ページテーブルエントリの組がそれぞれ第２のプロセッサ（１０４）のページセットの異なるページに対応し、第２のプロセッサ（１０４）のページセットの各ページが、メモリ（１０６）に格納され、かつ前記メモリ（１０６）からの削除対象となる前記第１のプロセッサ（１０２）の第１のページに対応し、前記第２のプロセッサ（１０４）の各ページテーブルエントリが存在ビットとダーティビットとを含み、前記存在ビットが、前記第２のプロセッサ（１０４）の対応するページが前記メモリ（１０６）内に存在するか否かを示す値を有し、前記ダーティビットが、前記第２のプロセッサ（１０４）の対応するページを前記記憶装置（１１０または１１２）に書き込む必要があるか否かを示す値を有す、前記第２のプロセッサ（１０４）のページテーブルエントリの組にアクセスするための手段と、
前記ページテーブルエントリの組各々の前記ダーティビットの値が変わらないような方法で前記ページテーブルエントリの組のそれぞれの前記存在ビットの値を変更して前記第２のプロセッサ（１０４）の対応するページが前記メモリ（１０６）内に存在しないことを示すための手段と、
複数のエントリを含むバッファの、前記ページセットのページに対応する前記第２のプロセッサ（１０４）のエントリをすべて削除する必要がある旨を前記第２のプロセッサ（１０４）に通知するための手段と、
前記通知の後で前記ページテーブルエントリの組をそれぞれ読み出すための手段と、
前記ページテーブルエントリが前記第１のビットを前記記憶装置（１１０または１１２）に書き込む必要があるか否かを示すダーティビットを含む、前記第１のプロセッサ（１０２）の前記第１のページに対応するページテーブルエントリを読み出すための手段と、
（ｉ）前記ページテーブルエントリの組それぞれの読み出しの際に取得された前記ページテーブルエントリの組のうちの少なくとも１つのダーティビットが、前記第２のプロセッサ（１０４）の対応するページを前記記憶装置（１１０または１１２）に書き込む必要があることを示す場合または（ｉｉ）前記第１のプロセッサ（１０２）の前記ページテーブルエントリの読み出しの際に取得されたページテーブルエントリのダーティビットが、前記第１のプロセッサ（１０２）の前記第１のページを記憶装置（１１０または１１２）に書き込む必要があることを示す場合、前記第１のプロセッサ（１０２）の前記第１のページを前記メモリ（１０６）から前記記憶装置（１１０または１１２）に書き込むための手段とを含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、広義にはコンピュータシステムに関し、特に、複数のプロセッサが仮想メモリを実現して共有メモリにアクセスするマルチプロセッサシステムに関する。
【背景技術】
【０００２】
一般的なコンピュータシステムでは比較的低コストで比較的高いレベルの性能を得られるようにメモリ階層が用いられている。通常、比較的大きいが速度の遅い不揮発性の格納ユニット（ディスクドライブユニットなど）に何種類かのソフトウェアプログラムの命令が格納されている。ユーザがこれらのプログラムのうちの１つを選択して実行しようとすると、選択されたプログラムの命令がメインメモリにコピーされ、プロセッサ（中央処理装置すなわちＣＰＵなど）がメインメモリから選択されたプログラムの命令を取得する。周知の仮想メモリ管理法では、常にデータ構造の一部だけをメインメモリに格納することで、プロセッサはメインメモリのデータ構造よりもサイズの大きなデータ構造にアクセスすることができるようになっている。データ構造の残りの部分については比較的大きいが速度の遅い不揮発性の格納ユニットに格納され、必要なときにのみメインメモリにコピーされる。
【０００３】
仮想メモリを実現するには一般に、プロセッサのアドレス空間をページフレームまたは「ページ」と呼ばれる複数のブロックに分割している。常にページの一部に対応するデータだけがメインメモリに格納される。特定のページ内のアドレスがプロセッサによって生成され、そのページのコピーがメインメモリ内にない場合は、必要なデータのページが比較的大きいが速度の遅い不揮発性の格納ユニットからメインメモリにコピーされる。このプロセスで、メインメモリから不揮発性の格納ユニットに別のデータのページをコピーし、必要なページを受け入れるための場所を確保する。
【０００４】
よく知られているプロセッサアーキテクチャ（８０ｘ８６すなわち「ｘ８６」プロセッサアーキテクチャなど）には一般に、仮想メモリの実現をサポートするための専用のハードウェア要素が含まれる。たとえば、ｘ８６プロセッサアーキテクチャには保護された仮想アドレスモード（すなわちプロテクトモード）をサポートするための専用のハードウェア要素が含まれる。このようなプロセッサは、仮想アドレスを生成し、仮想アドレスから物理アドレスへの変換機構を実現して、仮想アドレスをメインメモリの記憶位置の物理アドレスに「マッピング」している。このアドレス変換機構は一般に、階層が形成されるように配置された１以上のデータ構造（すなわち「ページテーブル」）を含む。ページテーブルは一般にメインメモリに格納され、オペレーティングシステムソフトウェア（すなわちオペレーティングシステム）によって管理されている。先頭のページテーブル（ｘ８６のページディレクトリなど）は常にメインメモリ内にある。別のページテーブルについては格納ユニットから取得して必要に応じてメインメモリに格納すればよい。
【０００５】
先頭のページテーブル（ｘ８６ページディレクトリなど）を含むメモリページのベースアドレスは一般にレジスタに格納されている。先頭のページテーブルは複数のエントリを持つ。これらのエントリは他のページテーブルのベースアドレスのこともあれば、仮想アドレスに対応する物理アドレスを含むページのベースアドレスのこともある。複数のページテーブルを使用して仮想アドレスから物理アドレスへの変換を行う場合、先頭のページテーブルのエントリは他のページテーブルのベースアドレスである。プロセッサによって生成される仮想アドレスが複数の部分に分割され、これらの部分がページテーブルへのインデックスとして用いられる。
【０００６】
末尾のページテーブルは、仮想アドレスに対応する物理アドレスを含むページのベースアドレスを格納しているエントリを含む。物理アドレスは、仮想アドレスの末尾の部分すなわち「オフセット」部分を、末尾のページテーブルの選択されたエントリのベースアドレスに加えて形成される。
【０００７】
上述した仮想アドレスから物理アドレスへの変換機構ではメインメモリの１以上のページテーブルにアクセスする（すなわちページテーブルを「ルックアップする（ｌｏｏｋｕｐｓ）」または「ウォークする（ｗａｌｋｓ）」）必要がある。こうしたページテーブルのアクセスには相当な時間を要し、プロセッサの性能に悪影響がおよんでしまう。このため、プロセッサには一般に、最後に使われたページテーブルエントリを格納するための変換索引バッファ（ＴＬＢ）が用いられている。ＴＬＢのエントリは一般にオペレーティングシステムによって管理されている。このＴＬＢを用いることでプロセッサの性能は大幅に向上する。
【０００８】
仮想メモリの持つ利点を、複数のプロセッサを含むマルチプロセッサシステムにまで拡大できれば有益であろう。このようなマルチプロセッサシステムには都合のよいことにすべてのプロセッサで共有するメインメモリを持たせることができる。すべてのプロセッサが共有のメインメモリに格納された命令およびデータ（すなわち「コード」）にアクセスする機能を持つことで、特定のプロセッサだけがアクセスする特定のメモリから他のプロセッサだけがアクセスする他のメモリにコードをコピーする必要がなくなる。さらに、共有のメインメモリの一部をプロセス間通信に使うこともできる。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
仮想メモリを実現して共有のメインメモリを有するマルチプロセッサシステムではいくつかの問題が発生する。ひとつの問題として、仮想メモリのデータ構造（ページテーブルなど）をどのように作成して管理するか、さらにはメインメモリと１以上の格納ユニットとの間でのページ転送をどのようにして調整するかがあげられる。想定されることとして複数のプロセッサが性能を高めるためのＴＬＢを各々独自に持つ場合に、本願明細書で「ＴＬＢの整合性の問題」と呼ぶもうひとつの問題が生じる。上述したように、各ページテーブルエントリは共有のメインメモリ内の異なるページに対応している。いずれかのプロセッサによって共有のメインメモリ内のページが格納ユニットからのページに差し替えられてしまうと、他のプロセッサでは差し替えられたページに対応するＴＬＢエントリが無効になる。１以上の他のプロセッサがそれぞれのＴＬＢでこのような無効なページテーブルエントリを使って仮想アドレスから物理アドレスへの変換を行うことで、メモリ内の不適切なページにアクセスし、場合によってはシステム動作時に間違った結果が得られるおよび／または他のエラーが生じることになりかねない。
【００１０】
また、メインメモリでのページテーブルへのアクセスを一層確実に防ぐことを目的として、メインメモリにあるページに書き込みアクセスがあったことを、これに対応する共有のメインメモリ内のページテーブルエントリのダーティビットにアクセスせずに、ＴＬＢに格納された「ダーティ」ビットに記録する場合がある。自己以外のプロセッサのＴＬＢが見えないことから、差し替えられたページに対して他のプロセッサの１つがすでに書き込みを行っているため、この差し替えられたページを記憶装置に書き戻してはいけないかもしれないことが、共有のメインメモリ内のページを差し替えているプロセッサには分からない場合がある。結果として、差し替えられたページに含まれるデータが正しくなくなることがあり、場合によってはシステム動作時に間違った結果が得られるおよび／または他のエラーが生じることになりかねない。
【００１１】
本発明は、上述した問題のうちのいくつかまたはすべてを解決あるいは少なくとも低減できる方法を実現するシステムを対象とするものである。
【課題を解決するための手段】
【００１２】
発明の開示
第１のプロセッサと、第１のプロセッサと通信を行う第２のプロセッサと、第１および第２のプロセッサに接続され（すなわち共有メモリ）、複数の記憶位置を含むメモリと、第１のプロセッサに接続された記憶装置とを含む、コンピュータシステムが得られる。第１および第２のプロセッサはメモリを使って仮想メモリを実現する。第１のプロセッサは、メモリ内の第１のページテーブルの組と第２のページテーブルの組とを管理し、この第１のページテーブルの組を使用してメモリ内の記憶位置にアクセスする。第２のプロセッサは、第１のプロセッサが管理している第２のページテーブルの組を使用してメモリ内の記憶位置にアクセスする。
【００１３】
第１および第２のページテーブルの組には、少なくとも１つのページテーブルを含むことができる。第１のプロセッサは、第１のページテーブルの組を使用して、第１のプロセッサ内で生成された仮想アドレスを、この仮想アドレスに対応する、メモリ内の記憶位置の物理アドレスに変換することができ、この記憶位置の物理アドレスを使用して該当する記憶位置にアクセスすることができる。同様に、第２のプロセッサは、第２のページテーブルの組を使用して、第２のプロセッサ内で生成された仮想アドレスを、この仮想アドレスに対応する、メモリ内の記憶位置の物理アドレスに変換することができ、この記憶位置の物理アドレスを使用して該当する記憶位置にアクセスすることができる。
【００１４】
第２のページテーブルの組には複数のページテーブルエントリを含むことができる。対応するメモリページがメモリ内に存在する場合に、これらのページテーブルエントリをそれぞれ使用して対応するメモリページのベースアドレスを格納することができる。第２のプロセッサにはバッファを含むことができ、このバッファは、最近使われたページテーブルエントリを格納し、かつ、第２のプロセッサによって対応するメモリページに書き込みアクセスを記録するための複数のエントリを含む。メモリ内に存在するメモリページを記憶装置に格納されたメモリページに差し替える前に、差し替え対象となるメモリページの物理アドレス範囲に対応するバッファのエントリをすべて削除する必要がある旨を第１のプロセッサから第２のプロセッサに通知することができる。
【００１５】
第１および第２のプロセッサを含むコンピュータシステムで用いられ、マルチプロセッサコンピュータシステム内でページ化メモリの整合性を管理しやすくなるように設計されている仮想メモリページ差し替え方法について説明する。一実施形態において、この方法は、第２のプロセッサのページテーブルエントリの組の各ページテーブルエントリにアクセスすることを含む。ページテーブルエントリの組の各ページテーブルエントリが第２のプロセッサのページセットの異なるメモリページ（すなわちページ）に対応している。第２のプロセッサのページセットの各ページは、メモリに格納されており、かつメモリからの削除対象となる第１のプロセッサの第１のページに対応している。第２のプロセッサの各ページテーブルエントリには、第２のプロセッサの対応するページを記憶装置に書き込む必要があるか否かを示すダーティ（Ｄ）ビットが含まれる。
【００１６】
ページテーブルエントリの組の各ページテーブルエントリにマークを付し、第２のプロセッサの対応するページがメモリ内に存在しないことを示す。たとえば、ページテーブルエントリの組の各ページテーブルエントリの存在（Ｐ）ビットを変更（たとえば「クリアする」または論理「０」に設定するなど）し、第２のプロセッサの対応するページがメモリ内に存在しないことを示すことができる。第２のプロセッサは、ページセットのページに対応する第２のプロセッサのバッファのエントリをすべて削除する必要がある旨の通知を受け、バッファは最近使われたページテーブルエントリを格納するための複数のエントリを含む。バッファの各エントリには、第２のプロセッサの対応するページを記憶装置に書き込む必要があるか否かを示すダーティ（Ｄ）ビットを含むことができる。
【００１７】
上述した第２のプロセッサの通知後にページテーブルエントリの組の各ページテーブルエントリの読み出しを行う。第１のプロセッサの第１のページに対応するページテーブルエントリの読み出しを行い、ページテーブルエントリが、第１のビットを記憶装置に書き込む必要があるか否かを示すダーティ（Ｄ）ビットを含む。（ｉ）第２のプロセッサの対応するページを記憶装置に書き込む必要があることが、ページテーブルエントリの組の各ページテーブルエントリの読み出し時に取得された少なくとも１つのページテーブルエントリのダーティ（Ｄ）ビットで示された場合または（ｉｉ）第１のプロセッサの第１のページを記憶装置に書き込む必要があることが、第１のプロセッサのページテーブルエントリの読み出し時に取得されたページテーブルエントリのダーティ（Ｄ）ビットで示された場合に、第１のプロセッサの第１のページがメモリから記憶装置に書き込まれる。
【００１８】
他の実施形態では、ページテーブルエントリの組の各ページテーブルエントリの存在（Ｐ）ビットとダーティ（Ｄ）ビットの両方を上述したマーク付与の際にクリアすることができる。このような実施形態では、ページテーブルエントリの組の各ページテーブルエントリのアクセスに第１の読み出し動作を含むことができ、通知後に行われるページテーブルエントリの組の各ページテーブルエントリの上述した読み出しを第２の読み出し動作で構成することができる。（ｉ）第２のプロセッサの対応するページを記憶装置に書き込む必要があることが、第１の読み出し動作時に取得された少なくとも１つのページテーブルエントリのダーティ（Ｄ）ビットで示された場合または（ｉｉ）第２のプロセッサの対応するページを記憶装置に書き込む必要があることが、第２の読み出し動作時に取得された少なくとも１つのページテーブルエントリのダーティ（Ｄ）ビットで示された場合または（ｉｉｉ）第１のプロセッサの第１のページを記憶装置に書き込む必要があることが、第１のプロセッサのページテーブルエントリの読み出し時に取得されたページテーブルエントリのダーティ（Ｄ）ビットで示された場合に、第１のプロセッサの第１のページをメモリから記憶装置に書き込むことができる。
【００１９】
仮想メモリページ差し替え方法には、（ｉ）ページセットのページに対応するバッファのエントリの位置を求め、（ｉｉ）ページセットのページに対応するエントリのダーティビット（Ｄ）が、ページセットのページを記憶装置に書き込む必要があることを示す場合は、ページセットのページに対応する第２のプロセッサのページテーブルエントリのダーティビット（Ｄ）を更新してページセットのページを記憶装置に書き込む必要があることを示し、（ｉｉｉ）ページセットのページに対応するエントリをクリアする、ことによって上述した第２のプロセッサの通知に応答することを含み得る。
【００２０】
上述した第２のプロセッサの通知を、ページセットのページに対応する第２のプロセッサのバッファのエントリをすべてクリアする必要があることを示すメッセージを第２のプロセッサに送信することを含むものとすることができる。
【００２１】
また、仮想メモリページ差し替え方法は、（ｉ）第２のプロセッサでページフォールト状態である旨の知らせを受信し、（ｉｉ）メモリに格納された第１のプロセッサの第１のページを、記憶装置に格納された第１のプロセッサの第２のページに差し替えなければならないことを判断し、第２のプロセッサでのページフォールト状態をクリアすることをさらに含むものとすることができる。上述した通知の受信には、第２のプロセッサでのページフォールト状態を示すメッセージを第２のプロセッサから受信することを含むことができる。また、この仮想メモリページ差し替え方法は、第２のプロセッサでのページフォールト状態が解決されたときにページフォールト状態の解決を示すメッセージを第２のプロセッサに送信することを含むものであってもよい。
【００２２】
この仮想メモリページ差し替え方法を実行するためのプログラム命令を含むキャリア媒体についても説明する。キャリア媒体については、たとえば、コンピュータ読み出し可能な記憶媒体（フロッピーディスクまたはコンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）ディスクなど）とすることができる。
【００２３】
添付の図面を参照しての以下の説明を参照することで、本発明を理解することができよう。同図において、同様の参照符号は同様の構成要素を示す。
【００２４】
本発明はさまざまな改変や別の形態が可能なものであるが、その具体的な実施形態を一例として図示し、本願明細書にて詳細に説明する。しかしながら、本願明細書に記載の具体的な実施形態についての説明はここに開示の特定の形態に本発明を限定することを意図したものではなく、むしろ、添付の特許請求の範囲に定義したような本発明の趣旨および範囲に包含される改変例、等価物および別の例をすべてカバーすることを想定している点を理解されたい。
【発明を実施するための最良の形態】
【００２５】
以下、実例としての本発明の実施形態について説明する。説明を明確にするため、本願明細書では実際の実施例における特徴をすべて説明したわけではない。もちろん、このような実際の実施形態を開発するにあたっては、いずれの場合もシステム関連の制約やビジネス関連の制約を踏まえるなど、実施例ごとにさまざまな判断を行って開発者らの意図する目的を達成していく必要があり、これは実施例によって異なることは理解できよう。さらに、このような開発作業は複雑かつ時間を要するものになる場合があるが、それでも本願の開示内容を利用できる当業者らにとっては日常業務の一環であろうことも理解できよう。
【００２６】
図１は、メインプロセッサ１０２と、コプロセッサ１０４と、共有メモリ１０６と、第１のデバイス１１０と、第２のデバイス１１２とを含むマルチプロセッサコンピュータシステム１００の一実施形態を示す図であり、それぞれバス１０８に接続されている。メインプロセッサ１０２とコプロセッサ１０４はどちらも命令を実行するように構成されている。メインプロセッサ１０２とコプロセッサ１０４はどちらもバス１０８を介して共有メモリ１０６からデータを読み出し、このメモリにデータを書き込む（すなわちアクセスする）。メインプロセッサ１０２はバス１０８および／または共有メモリ１０６を介してコプロセッサ１０４と通信する。メインプロセッサ１０２および／またはコプロセッサ１０４はバス１０８を介してデバイス１１０および１１２と通信する。デバイス１１０は、たとえば記憶装置（ハードディスクドライブなど）であっても構わない。デバイス１１２は、たとえば通信デバイス（モデム、ネットワークインタフェースカードなど）、入出力デバイス（キーボード、ポインティングデバイス、プリンタ、スキャナなど）あるいは他の記憶装置（他のハードディスクドライブ）であっても構わない。バス１０８は適したバス構造であればどのようなものであってもよい。
【００２７】
図１の実施形態では、コプロセッサ１０４がメインプロセッサ１０２を補助すると言えるような方法でメインプロセッサ１０２がコプロセッサ１０４の行動を指示する。メインプロセッサ１０２とコプロセッサ１０４とは、同じタイプのプロセッサまたは実質的に同様のタイプのプロセッサで同様のアーキテクチャおよび機能を持つもので構わない。あるいは、メインプロセッサ１０２とコプロセッサ１０４とが、異なるタイプのプロセッサで異なるアーキテクチャおよび／または異なる機能を持つものであってもよい。メインプロセッサ１０２とコプロセッサ１０４とは同じ命令セットからの命令を実行してもよいし、異なる命令セットからの命令を実行してもよい。
【００２８】
後述するように、メインプロセッサ１０２は、動作時に共有メモリ１０６に格納されたオペレーティングシステムソフトウェアの命令を実行する。オペレーティングシステムソフトウェアは、共有メモリ１０６およびデバイス１１０および／またはデバイス１１２を用いて仮想メモリを実現し、仮想アドレスから物理アドレスへの変換機構を具体化している。オペレーティングシステムソフトウェアは、メインプロセッサ１０２内での仮想アドレスから物理アドレスへの変換に用いられる共有メモリ１０６にメインプロセッサのページテーブルの組を作成し、これを管理する。共有メモリ１０６に格納された、メインプロセッサ１０２の末尾のページテーブルには、複数のページテーブルエントリが含まれる。メインプロセッサ１０２の末尾のページテーブルからページテーブルエントリを取得するのに必要なメモリアクセス回数を減らすことでメインプロセッサ１０２の性能を向上させるには、最近使われたページテーブルエントリを格納するための任意の変換索引バッファ（ＴＬＢ）１１４をメインプロセッサ１０２に含むと好ましい。
【００２９】
図１の実施形態では、コプロセッサ１０４はカーネル１１６とＴＬＢ１１８とを含む。カーネル１１６は、メインプロセッサ１０２がコプロセッサ１０４に対して発行したプロセスをコプロセッサ１０４が走らせられるようにする命令およびデータ（すなわちコード）を含む。動作時、コプロセッサ１０４はカーネル１１６の命令を実行し、メインプロセッサ１０２がコプロセッサ１０４に対して発行したプロセスを走らせる。コプロセッサ１０４に出された各プロセスは共有メモリ１０６内に存在し、一般にはコードを含むものである。
【００３０】
後述するように、カーネル１１６は仮想アドレスから物理アドレスへの変換機構を具体化し、コプロセッサのページテーブルの組を利用して共有メモリ１０６内の物理アドレスにアクセスする。コプロセッサのページテーブルの組はメインプロセッサ１０２で走っているオペレーティングシステムソフトウェアによって作成および管理される。共有メモリ１０６に格納された、コプロセッサ１０４の末尾のページテーブルには、複数のページテーブルエントリが含まれる。ＴＬＢ１１８は最近使われたページテーブルエントリを格納するのに用いられるもので、コプロセッサ１０４の末尾のページテーブルからページテーブルエントリを取得するのに必要なメモリアクセス回数を減らすことでコプロセッサ１０４の性能を高めるためにコプロセッサ１０４に含まれている。
【００３１】
図２は、図１の共有メモリ１０６の一実施形態を示す図である。図２の実施形態では、共有メモリ１０６は、メインプロセッサのページテーブル２００と、コプロセッサのページテーブル２０２と、プロセス部２０４と、メインプロセッサのオペレーティングシステム２０６とを含む。上述したように、メインプロセッサ１０２（図１）は動作時にメインプロセッサのオペレーティングシステム２０６の命令を実行する。詳細については後述するように、メインプロセッサのオペレーティングシステム２０６は、共有メモリ１０６およびデバイス１１０および／またはデバイス１１２（図１）を利用してメインプロセッサ１０２およびコプロセッサ１０４（図１）内に仮想メモリを実現する。プロセス部２０４は、メインプロセッサ１０２とコプロセッサ１０４の両方からアクセス可能なメモリページを含み、プロセスコードの格納に用いられる。動作時、コプロセッサ１０４はメインプロセッサ１０２からの命令に従って、プロセス部２０４内に格納されたプロセスコードにアクセスしてこれを実行する。
【００３２】
メインプロセッサのオペレーティングシステム２０６はメインプロセッサのページテーブル２００とコプロセッサのページテーブル２０２の両方を作成および管理し、メインプロセッサ１０２およびコプロセッサ１０４の両方の仮想アドレスから物理アドレスへの変換機構を具体化する。メインプロセッサのページテーブル２００は、メインプロセッサ１０２内で生成された仮想アドレスを共有メモリ１０６内の物理アドレスに変換するのにメインプロセッサ１０２が使うものである。コプロセッサのページテーブル２０２は、コプロセッサ１０４内で生成された仮想アドレスを共有メモリ１０６内の物理アドレスに変換するのにコプロセッサ１０４が使うものである。メインプロセッサ１０２とコプロセッサ１０４とは共有メモリ１０６内で共通の物理アドレス空間を共有している。動作を簡単にする目的で、メインプロセッサ１０２とコプロセッサ１０４とが共通の仮想アドレス空間を共有するようにしても構わない。
【００３３】
図２のキャリア媒体２０８はメインプロセッサのオペレーティングシステム２０６を共有メモリ１０６に運ぶ目的で使用できるものである。たとえば、デバイス１１２（図１）をリムーバブルディスクを受け入れられるディスクドライブ（フロッピーディスクドライブ、コンパクトディスク読み出し専用メモリすなわちＣＤ−ＲＯＭドライブなど）とし、キャリア媒体２０８を、メインプロセッサのオペレーティングシステム２０６を形にしたディスク（フロッピーディスク、ＣＤ−ＲＯＭディスクなど）とすることができる。この場合、メインプロセッサ１０２（図１）がメインプロセッサのオペレーティングシステム２０６のコードをデバイス１１２を介してキャリア媒体２０８から読み出し、このコードを共有メモリ１０６に格納する形にすることができる。
【００３４】
あるいは、キャリア媒体２０８がメインプロセッサのオペレーティングシステム２０６の搬送に用いられる信号（キャリア信号など）であっても構わない。たとえば、デバイス１１２をネットワークインタフェースカードとし、キャリア媒体２０８をデバイス１１２に接続された送信媒体経由で搬送される信号（電気信号または光信号など）とすることができる。この場合、メインプロセッサ１０２がメインプロセッサのオペレーティングシステム２０６のコードをデバイス１１２およびキャリア媒体２０８経由で受信し、このコードを共有メモリ１０６に格納することができる。
【００３５】
メインプロセッサのページテーブル２００および／またはコプロセッサのページテーブル２０２には、ページテーブル階層をなすようにアレンジされた複数のページテーブルを含み得る。図３は、図２のメインプロセッサのページテーブル２００とプロセス部２０４の一実施形態を示す図である。図３の実施形態では、メインプロセッサの複数のページテーブル２００にページテーブル３００が含まれる。ページテーブル３００は、たとえばメインプロセッサのページテーブル階層の末尾のページテーブルであればよい。ページテーブル３００は複数のページテーブルエントリ（ＰＴＥ）３０２を含み、プロセス部２０４はメインプロセッサ１０２（図１）の複数のメモリページ（すなわちページ）３０４を含む。ページテーブルエントリ３０２はそれぞれメインプロセッサ１０２のページ３０４のうちの異なる１つに対応し、対応するページ３０４のベースアドレスを含む。
【００３６】
図４は、図２のコプロセッサのページテーブル２０２とプロセス部２０４の一実施形態を示す図である。図４の実施形態では、コプロセッサの複数のページテーブル２０２にページテーブル４００が含まれる。ページテーブル４００は、たとえばコプロセッサのページテーブル階層の末尾のページテーブルであればよい。ページテーブル４００は複数のページテーブルエントリ（ＰＴＥ）４０２を含み、プロセス部２０４はコプロセッサ１０４（図１）の複数のページ４０４を含む。ページテーブルエントリ４０２はそれぞれコプロセッサ１０４のページ４０４のうちの異なる１つに対応し、対応するページ４０４のベースアドレスを含む。
【００３７】
図５は、ページテーブルエントリ（ＰＴＥ）３０２（図３）および４０２（図４）各々のフォーマットの一実施形態を示す図である。図５の実施形態では、ページテーブルエントリ３０２／４０２が各々、ページベースアドレスフィールドと、ダーティ（Ｄ）ビットと、存在（Ｐ）ビットとを含む。存在（Ｐ）ビットは、対応するページ３０４／４０４がプロセス部２０４内に存在するか否かを示すものである。対応するページ３０４／４０４がプロセス部２０４内に存在する場合、ページベースアドレスフィールドには対応するページ３０４／４０４のベースアドレスが明示される。ダーティ（Ｄ）ビットは、デバイス１１０および／またはデバイス１１２（図１）から共有メモリ１０６にコピーされてから対応するページ３０４／４０４が修正されているか否か（すなわち書き換えられたか）、よってデバイス１１０および／またはデバイス１１２から他のページに差し替えられる場合にデバイス１１０および／またはデバイス１１２に書き戻す必要があるか否かを示すものである。
【００３８】
図６は、メインプロセッサ１０２（図１）の各ページの大きさがコプロセッサ１０４（図１）の各ページの大きさの２倍である、図２のメインプロセッサのページテーブル２００、コプロセッサのページテーブル２０２、プロセス部２０４の代表的な一実施形態である。図６の実施形態では、メインプロセッサのページテーブル２００のうちの１つのページテーブル３００が、ページテーブルエントリ３０２Ａを含み、コプロセッサのページテーブル２０２のうちの１つのページテーブル４００が、２つのページテーブルエントリ４０２Ａと４０２Ｂとを含む。ページテーブルエントリ３０２Ａはプロセス部２０４にあるメインプロセッサのメモリページのベースアドレスを含む（すなわち「指し示す」）。図６に示されるように、コプロセッサ１０４の２つの隣り合ったメモリページがメインプロセッサのメモリページと同じ物理メモリ空間を占めている。コプロセッサのページテーブル２０２内のページテーブルエントリ４０２Ａおよび４０２Ｂは、メインプロセッサのメモリページに対応するコプロセッサ１０４の２つの隣り合ったメモリページのベースアドレスを含む（すなわち「指し示す」）。ページテーブルエントリ４０２Ａと４０２Ｂは、図６に示すようにコプロセッサのページテーブル２０２内の隣り合ったページテーブルエントリであってもよい。
【００３９】
図１〜図６の実施形態では、プロセス部２０４（図２〜４および６）内のメモリページ３０４（図３）および４０４（図４）と、対応するページテーブルエントリ３０２（図３）および４０２（図４）のみを図示してあるが、メインプロセッサ１０２（図１）およびコプロセッサ１０４（図１）のどちらも仮想メモリとこれに関連する仮想アドレスから物理アドレスへの変換機構とを介して共有メモリ１０６の物理アドレス空間全体にアクセスできることは理解できよう。
【００４０】
概して、コプロセッサ１０４（図１）とメインプロセッサ１０２（図１）のメモリページサイズは一般に互いに整数倍の関係にある。言葉を変えると、メインプロセッサ１０２のメモリページサイズをコプロセッサ１０４のメモリページサイズのｉ倍（ここでｉは整数かつｉ≧１である）にすることができる。逆に、コプロセッサ１０４のメモリページサイズをメインプロセッサ１０２のメモリページサイズのｉ倍（ここでｉは整数かつｉ≧１である）にしてもよい。ｉ＝１の場合、メインプロセッサ１０２とコプロセッサ１０４のメモリページのサイズは同じである。しかしながら、本願明細書に記載の方法およびシステムはとりわけ、メインプロセッサ１０２とコプロセッサ１０４とでメモリページサイズが異なる場合や、メインプロセッサ１０２のメモリページサイズがコプロセッサ１０４のメモリページサイズのｉ倍または１／ｉ倍である（ここでｉは整数かつｉ≧２である）場合に特に適用可能なものである。メインプロセッサ１０２のメモリページサイズをコプロセッサ１０４のメモリページサイズのｉ倍にすれば、上述したようにメインプロセッサ１０２の各メモリページとコプロセッサ１０４のｉメモリページとにプロセス部２０４（図２〜４）の同じ物理アドレス領域を使うことができる。一方、メインプロセッサ１０２のメモリページサイズをコプロセッサ１０４のメモリページサイズの１／ｉ倍にすれば、コプロセッサ１０４の各メモリページとメインプロセッサ１０２のｉメモリページとにプロセス部２０４の同じ物理アドレス領域を使うことができる。
【００４１】
メモリページサイズは一般にビット数によって決まるため、一般に２の累乗であることに注意されたい。よって、メインプロセッサ１０２のメモリページサイズをコプロセッサ１０４のメモリページサイズの２ｉ倍または１／２ｉ倍（ここでｉは整数かつｉ≧０である）にすることができる。
【００４２】
上述したように、メインプロセッサ１０２（図１）にはない機能をコプロセッサ１０４（図１）に持たせることができる。この場合、デバイス１１０および／またはデバイス１１２（図１）に格納されたプロセスの命令およびデータ（すなわちコード）に、そのプロセスコードを実行するにはコプロセッサ１０４の機能が必要である旨を示すマーカーを付すようにすればよい。また、メインプロセッサのオペレーティングシステム２０６のローダルーチンによって共有メモリ１０６のプロセス部２０４にプロセスコードがロードされる際に、そのプロセスコードの実行にはコプロセッサ１０４の機能が必要である旨をローダルーチンからメインプロセッサのオペレーティングシステム２０６に通知するようにしても構わない。
【００４３】
プロセス部２０４にロードされたプロセスコードにコプロセッサ１０４の機能が必要である旨をローダルーチンからメインプロセッサのオペレーティングシステム２０６に通知する場合、メインプロセッサのオペレーティングシステム２０６でコプロセッサ１０４の機能が必要なプロセスコードの１以上の部分を判断し、メインプロセッサのページテーブル２００とコプロセッサのページテーブル２０２とを同時に（すなわち平行して）更新するようにしてもよい。
【００４４】
以下の説明では、コプロセッサ１０４の機能を必要とするプロセスコードの１以上の部分自体をそれぞれ別のプロセスであるとみなす。メインプロセッサ１０２は、（たとえば適当なプロセス間通信方法などによって）１以上のコード実行メッセージをコプロセッサ１０４に送信することができる。各コード実行メッセージには、たとえば実行（すなわち走らせる）対象となるプロセスに関連したコプロセッサのページテーブル２０２の先頭のページテーブルのベースアドレスと、このプロセスの第１の命令の仮想アドレスとを含み得る。特定のコード実行メッセージに応答して、コプロセッサ１０４が関連のプロセスを実行すべくスケジューリングしてもよい。
【００４５】
コプロセッサ１０４には、コプロセッサのページテーブル２０２の先頭のページテーブルのベースアドレスを格納するためのページテーブルレジスタを持たせるようにしてもよい。コプロセッサ１０４が特定のプロセスの実行を開始する際、このコプロセッサ１０４はまず対応するコード実行メッセージに含まれるコプロセッサのページテーブル２０２の先頭のページテーブルのアドレスをページテーブルレジスタにロードすることができる。
【００４６】
いくつかの実施形態では、メインプロセッサのオペレーティングシステム２０６ではコプロセッサのページテーブル２０２の先頭のページテーブルを共有メモリ１０６の「ロックされた」部分にロードするだけにとどめ、コプロセッサ１０４がページフォールトを信号伝達してコプロセッサのページテーブル２０２の他のページテーブルを共有メモリ１０６にロードするまで待つようにしてもよい。コプロセッサのページテーブル２０２の別のページテーブルは「ロックされた」メモリで管理されていなくてもよい点に注意されたい。コプロセッサのページテーブル２０２のページテーブルを含むいずれかのページが共有メモリ１０６から削除（すなわち「ページアウト」）された場合、この削除の行為をコプロセッサのページテーブル階層の先頭から二番目のレベルに反映させなければならない。
【００４７】
メインプロセッサのオペレーティングシステム２０６によって生成され、コプロセッサ１０４（図１）での実行対象となるそれぞれのプロセスごとにコプロセッサのページテーブル２０２に含まれる、上述の「アプリケーション」の仮想アドレス空間マッピングに加え、メインプロセッサのオペレーティングシステム２０６（図２）もそれぞれのプロセスごとに「スーパーバイザモード」の仮想アドレス空間マッピングを生成する。スーパーバイザモードの仮想アドレス空間マッピングについては、関連のプロセスを走らせながらコプロセッサ１０４のカーネル１１６（図１）からアクセスできるものである。関連のプロセスが走っている途中にフォールト信号または割り込み信号をコプロセッサ１０４で受信すると、カーネル１１６が、スーパーバイザモードの仮想アドレス空間マッピングを介して共有メモリ１０６のプロセス部２０４に格納されたコードにアクセスし、フォールト処理または割り込みを行う。スーパーバイザモードの仮想アドレス空間マッピングはすべてのプロセスについて同一にすることができるため、プロセスごとにメインプロセッサのオペレーティングシステム２０６によって生成されるコプロセッサのページテーブル２０２に同じスーパーバイザモードの仮想アドレス空間マッピングを含み得る。
【００４８】
プロセスを走らせている間、コプロセッサ１０４が共有メモリ１０６には存在しないメモリページ内のコードへのアクセスを試みる場合がある。このような状況では、コプロセッサのページテーブル２０２の対応するページテーブルエントリ４０２（図４）の存在（Ｐ）ビットによって、対応するページが共有メモリ１０６に存在しないことが示される。コプロセッサ１０４のカーネル１１６（図１）はページフォールトの原因となったプロセスを一時停止し、（割り込みをかけるか、あるいはプロセス間通信でメッセージを送信するなどの方法で）メインプロセッサのオペレーティングシステム２０６にページフォールトである旨を通知する。
【００４９】
コプロセッサ１０４でページフォールト状態になったことを受けて、メインプロセッサのオペレーティングシステム２０６は、コプロセッサ１０４が必要としているページをメインプロセッサ１０２の対応するメモリページに「マッピング」し、対応するメモリページを共有メモリ１０６に入れる。メインプロセッサのオペレーティングシステム２０６は対応するメモリページをデバイス１１０および／またはデバイス１１２（図１）から共有メモリ１０６にコピーし、メインプロセッサのページテーブル２００およびコプロセッサのページテーブル２０２の両方を更新する。続いてメインプロセッサのオペレーティングシステム２０６は（プロセス間通信でメッセージを送信するなどの方法で）必要なページが共有メモリ１０６内にきたことをコプロセッサ１０４に通知する。コプロセッサ１０４のカーネル１１６でこのメッセージを受信すると、カーネル１１６は一時停止されたプロセスを待機状態にし、プロセスを再開する。
【００５０】
上述したように、コプロセッサ１０４は、最近使用されたページテーブルエントリ４０２（図４）を格納するためのＴＬＢ１１８（図１）を含む。ＴＬＢ１１８は、コプロセッサのページテーブル２０２のうちの１つのページテーブル４００からページテーブルエントリ４０２を取得するのに必要な共有メモリ１０６へのアクセス回数を減らすことで、コプロセッサ１０４の性能を向上させるものである。上述したように、メモリ内のページテーブルへのアクセスを一層確実に防ぐために、ＴＬＢには一般にメモリに格納されるページへの書き込みアクセスを記録するためのダーティ（Ｄ）ビットが含まれる。ダーティ（Ｄ）ビットの中身はＴＬＢの外からは見えないのが普通である。
【００５１】
図１〜図６の実施形態では、コプロセッサ１０４内でのＴＬＢ１１８の動作はコプロセッサ１０４のカーネル１１６（図１）によって制御される。ＴＬＢ１１８は、コプロセッサ１０４の最後に使われたページテーブルエントリを格納するためのエントリを複数含む。このＴＬＢ１１８の各エントリに、対応するメモリページが共有メモリ１０６にある間に（コプロセッサ１０４によって）修正されたか否かを示すダーティ（Ｄ）ビットを持たせておいてもよい。たとえば（さらに後から使われたページテーブルエントリ４０２用の場所を確保するなどの目的で）カーネル１１６がＴＬＢ１１８のエントリを削除する（またはその削除を指示する）ときにカーネル１１６がエントリのダーティ（Ｄ）ビット値を確認するようにすればよい。対応するメモリページが共有メモリ１０６にある間に（コプロセッサ１０４によって）修正されたことがダーティ（Ｄ）ビットで示された場合は、カーネル１１６は、ページテーブル４００内の対応するページテーブルエントリ４０２の該当するダーティ（Ｄ）ビットを更新し、対応するメモリページが共有メモリ１０６にある間に修正されており、共有メモリ１０６から削除する際には記憶装置（すなわち図１のデバイス１００および／またはデバイス１１２）に書き込む必要があることを反映すればよい。
【００５２】
コプロセッサ１０４にはＴＬＢ１１８があるため、メインプロセッサのオペレーティングシステム２０６によって対応するメモリページがコプロセッサのページテーブル２０２のうちの１つのページテーブル４００から削除された後も、ＴＬＢ１１８に格納されたページテーブルエントリ４０２のうちの１つをコプロセッサ１０４が使い続けることが可能である。このため、メインプロセッサのオペレーティングシステム２０６が共有メモリ１０６からメモリページを削除するときには、メインプロセッサのオペレーティングシステム２０６はまず最初に共有メモリ１０６からの削除対象となるメモリページに対応するＴＬＢ１１８のエントリをすべてＴＬＢ１１８から削除すべきである旨をカーネル１１６に通知しなければならない。共有メモリ１０６からの削除対象となるメモリページに対応するＴＬＢ１１８のエントリは、共有メモリ１０６からの削除対象となるメモリページの物理アドレス範囲に対応することに注意されたい。
【００５３】
上述したように、カーネル１１６が対応するエントリをＴＬＢ１１８から削除する際に、共有メモリ１０６からの削除対象となるメモリページが共有メモリ１０６にある間に（コプロセッサ１０４によって）修正されたことが対応するエントリのダーティ（Ｄ）ビット値から明らかになった場合、カーネル１１６は、コプロセッサのページテーブル２０２のうちの１つのページテーブル４００内の対応するページテーブルエントリ４０２のダーティ（Ｄ）ビットを更新し、共有メモリ１０６からの削除対象となるメモリページが共有メモリ１０６にある間に修正されており、共有メモリ１０６から削除する際には記憶装置（すなわち図１のデバイス１００および／またはデバイス１１２）に書き込む必要があることを反映する。
【００５４】
このようにした後は、メインプロセッサのオペレーティングシステム２０６は共有メモリ１０６からメモリページを削除することができる。メインプロセッサのオペレーティングシステム２０６は、（ｉ）メインプロセッサのページテーブル２００のうちの１つのページテーブル３００で削除対象となるページに対応する１以上のページテーブルエントリ３０２および（ｉｉ）コプロセッサのページテーブル２０２のうちの１つのページテーブル４００で削除対象となるページに対応する１以上のページテーブルエントリ４０２のダーティ（Ｄ）ビット値を確認する。共有メモリ１０６からの削除対象となるメモリページが共有メモリ１０６にある間に修正されたことがいずれかのダーティ（Ｄ）ビットで示された場合、メインプロセッサのオペレーティングシステム２０６は削除対象となるメモリページを共有メモリ１０６から記憶装置（図１のデバイス１１０および／または図１のデバイス１１２など）に書き「戻す」。
【００５５】
対応するエントリがＴＬＢ１１８から削除された後は、共有メモリ１０６からの削除対象となるページにコプロセッサ１０４がアクセスするには常にページテーブル４００にアクセスして共有メモリ１０６からの削除対象となるページに対応するページテーブルエントリ４０２を取得しなければならない点に注意されたい。共有メモリ１０６からの削除対象となるページが共有メモリ１０６から削除された後は、この削除されたページにコプロセッサ１０４がアクセスしようとするとページフォールトが発生する（と望ましい）。
【００５６】
コプロセッサ１０４が第１のプロセスの実行から第２のプロセスの実行に切り替わる際、コプロセッサ１０４は第２のプロセスに関連した新たなページテーブルベースアドレスをページテーブルレジスタにロードし、第１のプロセスに関連するＴＬＢ１１８のすべてのエントリがＴＬＢ１１８から削除される。このため、性能面での特徴として、コプロセッサ１０４が現在共有メモリ１０６からの削除対象となるページへのマッピングのあるプロセスを走らせているのでなければ、メインプロセッサのオペレーティングシステム２０６はコプロセッサ１０４のカーネル１１６に共有メモリ１０６からの削除対象となるページを通知する必要がなくなる。
【００５７】
マルチプロセッサコンピュータシステムで用いられる仮想メモリページ差し替え方法７００の一実施形態のフローチャートを図７Ａ〜図７Ｂの組み合わせで示す。この仮想メモリページ差し替え方法７００は、マルチプロセッサシステム内でのページ化メモリの整合性を管理しやすくなるように設計されている。本願明細書では方法７００を図１のマルチプロセッサコンピュータシステム１００を対象にしたものとして説明するが、方法７００はどのようなマルチプロセッサコンピュータシステムでも実現できるものである。図１のマルチプロセッサコンピュータシステム１００に関していえば、方法７００をメインプロセッサのオペレーティングシステム２０６（図２）内で具体化することができる。
【００５８】
方法７００のステップ７０２では、この時点では共有メモリ１０６に格納されていて差し替えられる予定である、メインプロセッサ１０２のメモリページに対応するコプロセッサ１０４の各ページテーブルエントリ４０２（図４）にアクセスする。ステップ７０４では、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４の各ページテーブルエントリ４０２にマークを付し、コプロセッサ１０４の対応するページが共有メモリ１０６内に存在しないことを示す。
【００５９】
たとえば、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４の各ページテーブルエントリ４０２を、ステップ７０２（第１の読み出し動作の間など）で共有メモリ１０６から読み出すようにしてもよい。特定のページテーブルエントリ４０２を（たとえばステップ７０２で）読み出した後、特定のページテーブルエントリ４０２の存在（Ｐ）ビットの値を変更（たとえば「クリアする」または論理「０」に設定するなど）し、コプロセッサ１０４の対応するページが共有メモリ１０６に存在しないことを示すことができる。その後、（たとえばステップ７０４で）この特定のページテーブルエントリ４０２を共有メモリ１０６に書き戻すようにすればよい。コプロセッサ１０４は特定のページテーブルエントリ４０２にアクセスできることから、特定のページテーブルエントリ４０２の読み出しや書き込みを「極小の」トランザクションとして達成することができる。
【００６０】
ステップ７０６では、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４のページテーブルエントリ４０２の各々に対応するＴＬＢ１１８のエントリを削除しなければならないことをコプロセッサ１０４に通知する。たとえば、メインプロセッサ１０２からコプロセッサ１０４にメッセージ（「ページ削除」メッセージなど）を送信し、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４のメモリページに対応するＴＬＢ１１８のエントリをすべて削除しなければならない旨を示すようにすればよい。ＴＬＢ１１８のこのようなエントリをすべて削除した後、コプロセッサ１０４からメインプロセッサ１０２にメッセージを送信し、削除が完了した旨を示すようにしても構わない。
【００６１】
次に、ステップ７０８において、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４のページテーブルエントリ４０２の読み出しを行う。ステップ７１０では、差し替え対象となるメインプロセッサ１０２のメモリページに対応するページテーブルエントリ３０２（図３）の読み出しを行う。ステップ７１２では、（ｉ）コプロセッサ１０４の対応するメモリページを記憶装置に書き込む必要があることが、ステップ７０８の読み出しの際に取得されたページテーブルエントリ４０２のうちの１つのダーティビットで示された場合または（ｉｉ）差し替え対象となるメインプロセッサ１０２のメモリページを記憶装置に書き込む必要があることが、差し替え対象となるメインプロセッサ１０２のメモリページに対応し、かつステップ７１０の読み出しの間に取得されたページテーブルエントリ３０２のうちの１つのダーティビットで示された場合、差し替え対象となるメインプロセッサ１０２のメモリページを共有メモリ１０６から記憶装置（すなわち、図１のデバイス１１０および／またはデバイス１１２）に書き込む。
【００６２】
上述したように、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４の各ページテーブルエントリ４０２を、ステップ７０２（第１の読み出し動作の間など）で共有メモリ１０６から読み出すようにしてもよい。特定のページテーブルエントリ４０２を（たとえばステップ７０２で）読み出した後、特定のページテーブルエントリ４０２の存在（Ｐ）ビットの値を変更（たとえば「クリアする」または論理「０」に設定するなど）し、コプロセッサ１０４の対応するページが共有メモリ１０６に存在しないことを示すことができる。その後、（たとえばステップ７０４で）この特定のページテーブルエントリ４０２を共有メモリ１０６に書き戻すようにすればよい。存在（Ｐ）ビットが変更されたときに特定のページテーブルエントリ４０２のダーティ（Ｄ）ビットの値を変えない方が都合がよい場合もあるが、必ずしもそうである必要はない。
【００６３】
いくつかの実施形態では、特定のページテーブルエントリ４０２を共有メモリ１０６に書き戻す前に、特定のページテーブルエントリ４０２の存在（Ｐ）ビットとダーティ（Ｄ）ビットをクリアすることができる。このような実施形態では、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４の各ページテーブルエントリ４０２をステップ７０２の第１の読み出し動作で読み出すようにして、ステップ７０８の読み出し動作を第２の読み出し動作とすることができる。上記のステップ７１２では、（ｉ）コプロセッサ１０４の対応するメモリページを記憶装置に書き込む必要があることが、（ステップ７０２などの）第１の読み出し動作で取得されたページテーブルエントリ４０２のうちの１つのダーティビットで示された場合または（ｉｉ）コプロセッサ１０４の対応するメモリページを記憶装置に書き込む必要があることが、（ステップ７０８などの）第２の読み出し動作で取得されたページテーブルエントリ４０２のうちの１つのダーティビットで示された場合または（ｉｉｉ）差し替え対象となるメインプロセッサ１０２のメモリページを記憶装置に書き込む必要があることが、差し替え対象となるメインプロセッサ１０２のメモリページに対応し、ステップ７１０の読み出しの間に取得されたページテーブルエントリ３０２のうちの１つのダーティビットで示された場合に、差し替え対象となるメインプロセッサ１０２のメモリページを共有メモリ１０６から記憶装置（すなわち、図１のデバイス１１０および／またはデバイス１１２）に書き込むことができる。
【００６４】
上述したように、ステップ７０６では、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４のページテーブルエントリ４０２の各々に対応するＴＬＢ１１８のエントリを削除しなければならないことをコプロセッサ１０４に通知する。これを受けて、カーネル１１６のコードを実行しているコプロセッサ１０４は、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４のページテーブルエントリ４０２のうちの１つに対応するＴＬＢ１１８のエントリのうちの１つの位置を特定することができる。コプロセッサ１０４の対応するメモリページを記憶装置に書き込む必要があることがＴＬＢ１１８のエントリのうちの１つのダーティビットで示された場合、コプロセッサ１０４は、共有メモリ１０６のページテーブルエントリ４０２のうちの対応する１つのダーティビットを更新し、コプロセッサ１０４の対応するメモリページを記憶装置に書き込む必要があることを示すことができる。その後、コプロセッサ１０４はＴＬＢ１１８のエントリのうちの１つをクリアすればよい。コプロセッサ１０４は、差し替え対象となるメインプロセッサ１０２のメモリページに対応するコプロセッサ１０４のページテーブルエントリ４０２各々に対応したＴＬＢ１１８のすべてのエントリについて上記の行為を繰り返すことができる。
【００６５】
メインプロセッサ１０２のメモリページ（メインプロセッサ１０２の第１のメモリページなど）を差し替える必要があることを判断するにあたり、コプロセッサ１０４がページフォールト状態にある旨の知らせ（コプロセッサ１０４でのページフォールトを示すコプロセッサ１０４からのメッセージなど）をメインプロセッサ１０２で受けるようにしてもよい。メインプロセッサ１０２は、共有メモリ１０６に格納されたメインプロセッサ１０２の第１のページを、記憶装置（すなわち、図１のデバイス１１０および／またはデバイス１１２）に格納されたメインプロセッサ１０２の第２のページに差し替え、コプロセッサ１０４のページフォールト状態をクリアしなければならないことを判断できる。
【００６６】
図１に戻ると、マルチプロセッサコンピュータネットワーク１００のメインプロセッサ１０２は（上述したようにバス１０８および／または共有メモリ１０６を介するなどして）コプロセッサ１０４と通信する。メインプロセッサ１０２とコプロセッサ１０４とは、たとえばメッセージを使って通信を行うことができる。メインプロセッサ１０２とコプロセッサ１０４との間でやり取りされるメッセージには、たとえば、「プロセス作成」メッセージを含むことができる。メインプロセッサ１０２は、この「プロセス作成」メッセージをコプロセッサ１０４に送信してプロセスの実行が予定されていることを知らせることができる。「プロセス作成」メッセージには、プロセスを特定する「プロセスＩＤ」と、メインプロセッサのオペレーティングシステム２０６（図２）によって生成され、プロセスに関連した先頭のページテーブルのベースアドレスとを含むことができる。プロセスが実行される（すなわちアクティブになる）際、コプロセッサ１０４のカーネル１１６は、上述したように先頭のページテーブルのベースアドレスをコプロセッサ１０４のページテーブルベースアドレスレジスタに格納することができる。
【００６７】
また、メインプロセッサ１０２は「ページ追加」メッセージをコプロセッサ１０４に送信し、コプロセッサ１０４の特定のメモリページが共有メモリ１０６内に格納済みである（すなわち追加されている）ことを知らせることができる。この「ページ追加」メッセージには、追加されたメモリページへのアクセスが必要になるかもしれないプロセスを特定する「プロセスＩＤ」と、追加されたメモリページのベースアドレスとを含むことができる。「プロセスＩＤ」のあるプロセスが実行されると、コプロセッサ１０４のカーネル１１６は、追加されたメモリページのベースアドレスに対応するＴＬＢ１１８のエントリをすべて削除する（またはその削除を指示する）ことができる。追加されたメモリページがプロセス実行時のページフォールト状態が原因で追加されたものである場合は、カーネル１１６がそのプロセスの実行を再開するようにしてもよい。
【００６８】
さらに、メインプロセッサ１０２は「ページ削除」メッセージをコプロセッサ１０４に送信し、コプロセッサ１０４の特定のメモリページが共有メモリ１０６から削除されたことを知らせることができる。「ページ削除」メッセージには、削除されたメモリページへのマッピングを持っているかもしれないプロセスを特定する「プロセスＩＤ」と、削除されたメモリページのベースアドレスとを含むことができる。「プロセスＩＤ」のあるプロセスが実行されると、コプロセッサ１０４のカーネル１１６は、削除されたメモリページのベースアドレスに対応するＴＬＢ１１８のエントリをすべて削除する（またはその削除を指示する）ことができる。
【００６９】
コプロセッサ１０４は「ページフォールトによりプロセス停止」のメッセージをメインプロセッサ１０２に送信し、ページフォールト状態が原因で特定のプロセスの実行が一時停止されたことを知らせることができる。この「ページフォールトによりプロセス停止」のメッセージには、ページフォールトが原因で停止したプロセスを特定する「プロセスＩＤ」と、ページフォールト状態を引き起こした仮想アドレスと、ページフォールト状態をクリアするために追加されたページへのアクセスを読み出し専用にする必要があるか、あるいは読み書きにする必要があるかを示す書き込みフラグとを含むことができる。
【００７０】
コプロセッサ１０４からの「ページフォールトによりプロセス停止」のメッセージに応答して、メインプロセッサのオペレーティングシステム２０６は、メインプロセッサ１０２のメモリページを、ページフォールトを引き起こした仮想アドレスに対応する物理アドレスを含む物理アドレス範囲を有する共有メモリ１０６に持ち込むことができる。メインプロセッサのオペレーティングシステム２０６は、必要なアクセスについてページをマークし、メインプロセッサのページテーブル２００とコプロセッサのページテーブル２０２とを更新することができる。上述したように、メインプロセッサ１０２の追加されたメモリページが、コプロセッサ１０４の１以上の「追加された」メモリページに対応することがある。メインプロセッサ１０２は、１以上の「ページ追加」メッセージをコプロセッサ１０４に送信し、メインプロセッサ１０２の追加されたメモリページに対応するコプロセッサ１０４の１以上の追加されたメモリページを特定することができる。
【００７１】
図７Ａ〜図７Ｂの方法７００を有用なものとするのにコプロセッサ１０４のＴＬＢ１１８（図１）のエントリにはダーティ（Ｄ）ビットを含む必要はない点に注意されたい。さらに、コプロセッサ１０４のカーネル１１６（図１）の動作をハードウェア（デジタル論理回路など）で実行してもよい。
【００７２】
本発明は本願明細書の教示内容の利益を享受する当業者らに自明の上記とは異なるが等価な方法で改変および実施することのできるものであるため、上記にて開示した個々の実施形態は一例にすぎない。さらに、添付の請求の範囲に記載したものを除き、本願明細書に図示した構成または設計の詳細に対する限定を何ら意図するものではない。したがって、上記にて開示した個々の実施形態を変更または改変してもよく、そのような変形例はいずれも本発明の範囲および趣旨に包含されるとみなせることは明白である。よって、本願明細書で求める保護は添付の請求の範囲に記載のとおりである。
【図面の簡単な説明】
【００７３】
【図１】メインプロセッサと、コプロセッサと、共有メモリとを含むマルチプロセッサコンピュータシステムの一実施形態を示す図である。
【図２】共有メモリが、メインプロセッサのページテーブルと、コプロセッサのページテーブルと、プロセス部と、メインプロセッサのオペレーティングシステムとを含む、図１の共有メモリの一実施形態を示す図である。
【図３】プロセス部がメインプロセッサの複数のページを含み、メインプロセッサのページテーブルのうちの１つのページテーブル内の複数のページテーブルエントリ（ＰＴＥ）各々が、メインプロセッサの複数のページのうちの異なる１つに対応し、対応するページのベースアドレスを含む、図２のメインプロセッサのページテーブルとプロセス部の一実施形態を示す図である。
【図４】プロセス部がコプロセッサの複数のページを含み、コプロセッサのページテーブルのうちの１つのページテーブル内の複数のページテーブルエントリ（ＰＴＥ）各々が、コプロセッサの複数のページのうちの異なる１つに対応し、対応するページのベースアドレスを含む、図２のコプロセッサのページテーブルとプロセス部の一実施形態を示す図である。
【図５】ページテーブルエントリが各々、ページベースアドレスフィールドと、ダーティ（Ｄ）ビットと、存在（Ｐ）ビットとを含む、図３〜図４のページテーブルエントリ（ＰＴＥ）各々のフォーマットの一実施形態を示す図である。
【図６】メインプロセッサの各ページの大きさがコプロセッサの各ページの大きさの２倍である、図２のメインプロセッサのページテーブル、コプロセッサのページテーブル、プロセス部の代表的な実施形態である。
【図７Ａ】図７Ｂとの組み合わせで、マルチプロセッサコンピュータシステムで用いられる仮想メモリページ差し替え方法の一実施形態のフローチャートである。
【図７Ｂ】図７Ａとの組み合わせで、マルチプロセッサコンピュータシステムで用いられる仮想メモリページ差し替え方法の一実施形態のフローチャートである。
【図１】
2005500592.tif 000003
【図２】
2005500592.tif 000004
【図３】
2005500592.tif 000005
【図４】
2005500592.tif 000006
【図５】
2005500592.tif 000007
【図６】
2005500592.tif 000008
【図７Ａ】
2005500592.tif 000009
【図７Ｂ】
2005500592.tif 000010
【国際公開パンフレット】
2005500592.tif 000011
2005500592.tif 000012
2005500592.tif 000013
2005500592.tif 000014
2005500592.tif 000015
2005500592.tif 000016
2005500592.tif 000017
2005500592.tif 000018
2005500592.tif 000019
2005500592.tif 000020
2005500592.tif 000021
2005500592.tif 000022
2005500592.tif 000023
2005500592.tif 000024
2005500592.tif 000025
2005500592.tif 000026
2005500592.tif 000027
2005500592.tif 000028
2005500592.tif 000029
2005500592.tif 000030
2005500592.tif 000031
2005500592.tif 000032
2005500592.tif 000033
2005500592.tif 000034
2005500592.tif 000035
2005500592.tif 000036
2005500592.tif 000037
2005500592.tif 000038
【国際公開パンフレット（コレクトバージョン）】
2005500592.tif 000039
2005500592.tif 000040
【手続補正書】
【提出日】平成15年6月24日(2003.6.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１１
【補正方法】変更
【補正の内容】
【請求項１１】
前記第２のページテーブルエントリの組が、存在ビットとダーティビットとを含み、前記存在ビットが、前記第２のプロセッサ（１０４）の対応するページが前記メモリ（１０６）内に存在するか否かを示す値を有し、前記ダーティビットが、前記第２のプロセッサ（１０４）の対応するページを前記記憶装置（１１０または１１２）に書き込む必要があるか否かを示す値を有し、
前記システムはさらに、
前記ページテーブルエントリの組各々の前記ダーティビットの値を変えることなく、前記メモリ（１０６）からの削除対象となる前記第１のプロセッサ（１０２）のページに対応する前記第２のプロセッサ（１０４）のページテーブルエントリの組のそれぞれの前記存在ビットの値を変更して前記第２のプロセッサ（１０４）のページが前記メモリ（１０６）内に存在しないことを示すための手段と、
前記ページテーブルエントリの組のエントリに対応する前記第２のプロセッサ（１０４）の、複数のエントリを含むバッファのエントリをすべて削除する必要がある旨を前記第２のプロセッサ（１０４）に通知するための手段と、
通知の後で前記ページテーブルエントリの組をそれぞれ読み出すための手段と、
前記ページテーブルエントリが第１のページを前記記憶装置（１１０または１１２）に書き込む必要があるか否かを示すダーティビットを含む、前記第１のプロセッサ（１０２）の第１のページに対応するページテーブルエントリを読み出すための手段と、
（ｉ）前記ページテーブルエントリの組それぞれの読み出しの際に取得されたページテーブルエントリの組のうちの少なくとも１つの前記ダーティビットが、前記第２のプロセッサ（１０４）の対応するページを前記記憶装置（１１０または１１２）に書き込む必要があることを示す場合または（ｉｉ）前記第１のプロセッサ（１０２）のページテーブルエントリの読み出しの際に取得されたページテーブルエントリの前記ダーティビットが、前記第１のプロセッサ（１０２）の第１のページを前記記憶装置（１１０または１１２）に書き込む必要があることを示す場合、前記第１のプロセッサ（１０２）の前記第１のページを前記メモリ（１０６）から前記記憶装置（１１０または１１２）に書き込むための手段とを含む、請求項１記載のシステム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
本発明は、上述した問題のうちのいくつかまたはすべてを解決あるいは少なくとも低減できる方法を実現するシステムを対象とするものである。
欧州特許出願公開第０  ７６６  １７７号には、１以上の補助プロセッサ用の有効アドレス変換を含む情報ハンドリングシステムが開示されている。このシステムは、以上のプロセッサと、メモリと、記憶装置とを含む。プロセッサは仮想メモリを実現するように構成されている。プロセッサのうちの１つが、ページテーブルバッファと変換索引バッファとを含む一組のページテーブルを作成および管理するように構成されている。すべてのプロセッサが一組のページテーブルを使用する。
国際特許出願公開第９８／１４８７８号には、連続メモリおよびページテーブル構築用のバッファを得るための方法が開示されている。第１のプロセッサがグラフィックデバイスのページテーブルを構築してグラフィックバッファへのアクセスを可能にする。グラフィックバッファを含む物理的なメモリブロックをロックしてページのスワッピングを防止することで整合性の問題が回避される。




【国際調査報告】
2005500592.tif 000041
2005500592.tif 000042