(57)【要約】      （修正有）【課題】別のプロセスのプロセス・ローカル・ストレージにアクセスする方法、装置、コンピュータ・プログラム、およびコンピュータ実装方法を提供する。【解決手段】オペレーティング・システム・カーネルはアタッチ・メカニズムとデタッチ・メカニズムを含む。プロセスは、プロセスをクライアント・プロセス手段またはサーバー・プロセス手段のいずれかに識別するアクセス属性でタグ付けする。アクセス属性に基づいて、プロセスがクライアント・プロセス手段かサーバー・プロセス手段かによって、別々のプロセス・ローカル・アドレス空間をレイアウトする。サーバー・プロセス手段はクライアント・プロセス手段に「アタッチ」して、クライアント・プロセス手段のローカル・ストレージのすべてを参照できる。サーバー・プロセス手段は引き続きそれ自体のプロセス・ローカル・ストレージを参照するが、加えて、他のストレージも参照できる。【選択図】図１
2007226786.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサと、
少なくとも１つのプロセッサに結合されるメモリと、
前記メモリ内に存在し、それ自体のプロセス・ローカル・ストレージしか参照できないクライアント・プロセス手段と、
前記メモリ内に存在し、それ自体のプロセス・ローカル・ストレージを参照でき、前記クライアント・プロセス手段のプロセス・ローカル・ストレージにアクセスする能力を要求するサーバ・プロセス手段と、
前記メモリ内に存在し、少なくとも１つのプロセッサで実行されるオペレーティング・システム・カーネルであって、呼び出されたときに前記サーバ・プロセス手段を前記クライアント・プロセス手段にアタッチさせることを可能にして、前記サーバ・プロセス手段が前記クライアント・プロセス手段のプロセス・ローカル・アドレスを使って前記クライアント・プロセス手段のプロセス・ローカル・ストレージを参照できるとともに、それ自体のプロセス・ローカル・ストレージへのアクセスを維持するようにするアタッチ・メカニズムをもつオペレーティング・システム・カーネルとを有する、装置。
【請求項２】
前記クライアント・プロセス手段がそれ自体に、前記クライアント・プロセス手段をそれ自体のプロセス・ローカル・ストレージの参照に制限することを示す属性値をもつアクセス属性を対応付けるとともに、前記サーバ・プロセス手段がそれ自体に、前記サーバ・プロセス手段が前記クライアント・プロセス手段のプロセス・ローカル・ストレージを参照できる能力を要求することを示す属性値をもつアクセス属性を対応付ける、請求項１に記載の装置。
【請求項３】
アクセス属性の属性値に基づいて、前記オペレーティング・システム・カーネルが、前記クライアント・プロセス手段のプロセス・ローカル・アドレス空間を前記サーバ・プロセス手段のものとは異なるようにレイアウトする、請求項２に記載の装置。
【請求項４】
前記クライアント・プロセス手段のプロセス・ローカル・ストレージが、少なくとも第１部分と第２部分をもつ第１プロセス・ローカル・アドレス範囲で定義され、第１プロセス・ローカル・アドレス範囲の第１部分を前記クライアント・プロセス手段が所有するとともに、第１プロセス・ローカル・アドレス範囲の第２部分は前記クライアント・プロセス手段が所有せず、前記サーバ・プロセス手段のプロセス・ローカル・ストレージが第１プロセス・ローカル・アドレス範囲の第１部分および第２部分にそれぞれ対応する少なくとも第１部分と第２部分をもつ第２プロセス・ローカル・アドレス範囲で定義され、第２プロセス・ローカル・アドレス範囲の第１部分を前記サーバ・プロセス手段が所有しないとともに、第２プロセス・ローカル・アドレス範囲の第２部分を前記サーバ・プロセス手段が所有する、請求項３に記載の装置。
【請求項５】
メモリ内に存在しプロセッサで実行する割込みハンドラとフォルト処理メソッドのうち少なくとも１つをさらに有し、前記サーバ・プロセス手段がそれ自体のプロセス・ローカル・ストレージを参照している場合には、割込みハンドラ／フォルト処理メソッドがアドレス空間コンテキストのセグメント・テーブルとディレクトリのうち少なくとも１つを使ってセグメント・フォルトの解決を試み、前記サーバ・プロセス手段が前記クライアント・プロセス手段のプロセス・ローカル・ストレージを参照している場合には、割込みハンドラ／フォルト処理メソッドが代替アドレス空間コンテキストのセグメント・テーブルとディレクトリのうち少なくとも１つを使ってセグメント・フォルトの解決を試みる、請求項１に記載の装置。
【請求項６】
アドレス空間コンテキストが代替アドレス空間コンテキストへのポインタを有し、アタッチ・メカニズムが呼び出されたら前記オペレーティング・システム・カーネルがポインタを設定する、請求項５に記載の装置。
【請求項７】
前記オペレーティング・システム・カーネルが、呼び出されたときに前記サーバ・プロセス手段を前記クライアント・プロセス手段からデタッチさせて、前記サーバ・プロセス手段が前記クライアント・プロセス手段のプロセス・ローカル・ストレージをもはや参照できないようにするデタッチ・メカニズムをさらに有し、デタッチ・メカニズムが呼び出されたらオペレーティング・システムがポインタをヌルに設定する、請求項６に記載の装置。
【請求項８】
前記オペレーティング・システム・カーネルが、呼び出されたときに前記サーバ・プロセス手段を前記クライアント・プロセス手段からデタッチさせて、前記サーバ・プロセス手段が前記クライアント・プロセス手段のプロセス・ローカル・ストレージをもはや参照できないようにするデタッチ・メカニズムをさらに有する、請求項４に記載の装置。
【請求項９】
前記オペレーティング・システム・カーネルが、呼び出されたときに前記サーバ・プロセス手段を前記クライアント・プロセス手段からデタッチさせて、前記サーバ・プロセス手段が前記クライアント・プロセス手段のプロセス・ローカル・ストレージをもはや参照できないようにするデタッチ・メカニズムをさらに有する、請求項１に記載の装置。
【請求項１０】
少なくとも１つのプロセッサと、
少なくとも１つのプロセッサに結合されるメモリと、
メモリに存在する第１プロセスと、
メモリに存在する第２プロセスと、
少なくとも１つのプロセッサで実行する少なくとも１つの命令によってアドレス指定可能なアドレス空間とを有する装置において、前記アドレス空間が、
少なくとも第１部分と第２部分をもつ第１プロセス・ローカル・アドレス範囲によって定義される第１プロセスの第１プロセス・ローカル・ストレージであって、第１プロセス・ローカル・アドレス範囲の第１部分を第１プロセスが所有するとともに、第１プロセス・ローカル・アドレス範囲の第２部分を第１プロセスが所有しない、前記第１プロセス・ローカル・ストレージと、
第１プロセス・ローカル・アドレス範囲の第１部分および第２部分にそれぞれ対応する少なくとも第１部分と第２部分をもつ第２プロセス・ローカル・アドレス範囲によって定義される第２プロセスの第２プロセス・ローカル・ストレージであって、第２プロセス・ローカル・アドレス範囲の第１部分を第２プロセスが所有しないとともに、第２プロセス・ローカル・アドレス範囲の第２部分を第２プロセスが所有する、前記第２プロセス・ローカル・ストレージとを有する、装置。
【請求項１１】
第１プロセスが、該第１プロセスが第１プロセス・ローカル・ストレージの第１部分の参照に制限されるクライアント・プロセス手段であることを示すクライアントの属性値を備えるアクセス属性をもち、第２プロセスが、該第２プロセスが第１プロセス・ローカル・ストレージの第１部分を参照できる能力を要求するとともに、そのプロセス・ローカル・ストレージの所有部分へのアクセスを保持するサーバ・プロセス手段であることを示すサーバの属性値を備えるアクセス属性をもつ、請求項１０に記載の装置。
【請求項１２】
前記第１プロセス・ローカル・アドレス範囲の第１部分と前記第２プロセス・ローカル・アドレス範囲の前記第１部分が各々、前記第１プロセス・ローカル・アドレス範囲の第２部分と第２プロセス・ローカル・ストレージ・アドレス範囲の第２部分のものよりも大きいアドレス空間を定義する、請求項１０に記載の装置。
【請求項１３】
前記第１プロセス・ローカル・アドレス範囲と前記第２プロセス・ローカル・アドレス範囲が各々、前記第１部分および前記第２部分とは排他的な第３部分をもち、前記第１プロセス・ローカル・アドレス範囲の前記第３部分と前記第２プロセス・ローカル・アドレス範囲の前記第３部分が、それぞれ前記第１プロセスおよび前記第２プロセスによって所有されず、または使用できない、請求項１０に記載の装置。
【請求項１４】
メモリ内に存在し、少なくとも１つのプロセッサで実行するオペレーティング・システム・カーネルをさらに有し、オペレーティング・システム・カーネルが、呼び出されたときに前記第２プロセスを前記第１プロセスにアタッチさせて、前記第２プロセスが第１プロセスのプロセス・ローカル・アドレスを使って前記第１プロセスのプロセス・ローカル・ストレージの前記第１部分を参照できるようにするアタッチ・メカニズムをもつとともに、そのプロセスのローカル・ストレージの所有部分へのアクセスを保持する、請求項１０に記載の装置。
【請求項１５】
レイアウトによってあるプロセスが別のプロセスのプロセス・ローカル・ストレージにアクセスし易くする、アクセス属性の属性値に基づいてプロセス・ローカル・アドレス空間をレイアウトするコンピュータ実装方法であって、前記方法が、
（Ａ）アクセス属性の属性値に基づいて、プロセスがサーバ・プロセス手段かクライアント・プロセス手段かを判定するステップであって、前記クライアント・プロセス手段がそれ自体のプロセス・ローカル・ストレージしか参照できず、前記サーバ・プロセス手段はそれ自体のプロセス・ローカル・ストレージを参照できるとともに、前記クライアント・プロセス手段のプロセス・ローカル・ストレージにアクセスできる能力を要求する、前記判定するステップと、
（Ｂ）プロセスの属性値が、プロセスが前記クライアント・プロセス手段であることを示す場合、前記クライアント・プロセス手段を少なくとも第１部分と第２部分をもつプロセス・ローカル・アドレス範囲によって定義されるようにプロセス・ローカル・アドレス空間をレイアウトするステップであって、前記クライアント・プロセス手段がそのプロセス・ローカル・アドレス範囲の第１部分しか所有しない、前記レイアウトするステップと、
（Ｃ）プロセスの属性値が、プロセスが前記サーバ・プロセス手段であることを示す場合、前記サーバ・プロセス手段を少なくとも第１部分と第２部分をもつプロセス・ローカル・アドレス範囲によって定義されるようにプロセス・ローカル・アドレス空間をレイアウトするステップであって、前記第１部分と前記第２部分がそれぞれ前記クライアント・プロセス手段の前記プロセス・ローカル・アドレス範囲の第１部分と第２部分に対応し、前記サーバ・プロセス手段が、自身のプロセス・ローカル・アドレス範囲のプロセス・ローカル・アドレス範囲の第２部分だけを所有する、前記レイアウトするステップとを有する、方法。
【請求項１６】
（Ｄ）プロセスのいずれかのプログラムを実行する前に、各プロセスについてステップ（Ａ）〜（Ｃ）を繰り返すステップをさらに有する、請求項１５に記載のコンピュータ実装方法。
【請求項１７】
レイアウトによりあるプロセスが別のプロセスのプロセス・ローカル・ストレージにアクセスするのを容易にする、アクセス属性の属性値に基づいてプロセス・ローカル・アドレス空間をレイアウトするコンピュータ・プログラムであって、コンピュータ・プログラムがコンピュータ読み取り可能信号搬送媒体に提供される複数のコンピュータ実行可能命令を有する、前記プログラムが、
（Ａ）アクセス属性の属性値に基づいて、プロセスがサーバ・プロセス手段かクライアント・プロセス手段かを判定するステップで、前記クライアント・プロセス手段がそれ自体のプロセス・ローカル・ストレージしか参照できず、前記サーバ・プロセス手段がそれ自体のプロセス・ローカル・ストレージを参照できるとともに、クライアント・プロセス手段のプロセス・ローカル・ストレージにアクセスできる能力を要求する、前記判定するステップと、
（Ｂ）プロセスの属性値が、プロセスが前記クライアント・プロセス手段であることを示す場合、前記クライアント・プロセス手段を少なくとも第１部分と第２部分をもつプロセス・ローカル・アドレス範囲によって定義されるように、プロセス・ローカル・アドレス空間をレイアウトするステップで、クライアント・プロセス手段がそのプロセス・ローカル・アドレス範囲の第１部分しか所有しない、前記レイアウトするステップと、
（Ｃ）プロセスの属性値が、プロセスが前記サーバ・プロセス手段であることを示す場合、前記サーバ・プロセス手段を少なくとも第１部分と第２部分をもつプロセス・ローカル・アドレス範囲によって定義されるように、プロセス・ローカル・アドレス空間をレイアウトするステップで、第１部分および第２部分がそれぞれクライアント・プロセス手段のプロセス・ローカル・アドレス範囲の第１部分と第２部分に対応し、サーバ・プロセス手段がそのプロセス・ローカル・アドレス範囲のプロセス・ローカル・アドレス範囲の第２部分しか所有しない、前記レイアウトするステップとを有する、コンピュータ・プログラム。
【請求項１８】
（Ｄ）プロセスのいずれかのプログラムを実行する前に、各プロセスについてステップ（Ａ）〜（Ｃ）を繰り返すステップをさらに行う、請求項１７に記載のコンピュータ・プログラム。
【請求項１９】
信号搬送媒体が記録可能な媒体を有する、請求項１７に記載のコンピュータ・プログラム。
【請求項２０】
信号搬送媒体が伝送媒体を有する、請求項１７に記載のコンピュータ・プログラム。
【請求項２１】
あるプロセスが別のプロセスのプロセス・ローカル・ストレージにアクセスすることを可能にするコンピュータ実装方法において、前記方法が、
（Ａ）それ自体のプロセス・ローカル・ストレージしか参照できないクライアント・プロセス手段を生成するステップと、
（Ｂ）それ自体のプロセス・ローカル・ストレージを参照できるとともに、クライアント・プロセス手段のプロセス・ローカル・ストレージにアクセスできる能力を要求するサーバ・プロセス手段を生成するステップと、
（Ｃ）プロセスベースで、セグメント・テーブルと、ディレクトリと、代替アドレス空間コンテキストへのポインタとを有するアドレス空間コンテキストを生成するステップと、
（Ｄ）サーバ・プロセス手段のアドレス空間コンテキストのポインタをクライアント・プロセス手段のアドレス空間コンテキストを指すように設定するステップと、
（Ｅ）セグメント・フォルトが発生したら、前記サーバ・プロセス手段によって参照されるフォルトとなったアドレスが、前記クライアント・プロセス手段のアドレス空間のクライアント所有部分にあるかどうかを判定するステップと、
（Ｆ）ステップ（Ｅ）で、フォルトとなった前記アドレスが前記クライアント・プロセス手段のアドレス空間のクライアント所有部分にないと判定されたら、前記サーバ・プロセス手段のアドレス空間コンテキストのセグメント・テーブルとディレクトリのうち少なくとも１つを使って、セグメント・フォルトの解決を試みるステップと、
（Ｇ）ステップ（Ｅ）で、フォルトとなったアドレスが前記クライアント・プロセス手段のアドレス空間のクライアント所有部分にあると判定されたら、ステップ（Ｄ）で設定したポインタに基づいて、前記クライアント・プロセス手段のアドレス空間コンテキストのセグメント・テーブルとディレクトリのうち少なくとも１つを使って、セグメント・フォルトの解決を試みるステップとを有する、コンピュータ実装方法。
【請求項２２】
ステップ（Ｆ）が、
（Ｆ１）サーバ・プロセス手段のアドレス空間コンテキストのセグメント・テーブルを使って、セグメント・フォルトの解決を試みるステップと、
（Ｆ２）ステップ（Ｆ１）が失敗したら、前記サーバ・プロセス手段のアドレス空間コンテキストのディレクトリを使って、セグメント・フォルトの解決を試みるステップとを有する、請求項２１に記載のコンピュータ実装方法。
【請求項２３】
ステップ（Ｇ）が、
（Ｇ１）前記クライアント・プロセス手段のアドレス空間コンテキストのセグメント・テーブルを使って、セグメント・フォルトの解決を試みるステップと、
（Ｇ２）ステップ（Ｇ１）が失敗したら、前記クライアント・プロセス手段のアドレス空間コンテキストのディレクトリを使って、セグメント・フォルトの解決を試みるステップとを有する、請求項２２に記載のコンピュータ実装方法。
【請求項２４】
ステップ（Ｇ）が、
（Ｇ１）前記クライアント・プロセス手段のアドレス空間コンテキストのセグメント・テーブルを使って、セグメント・フォルトの解決を試みるステップと、
（Ｇ２）ステップ（Ｇ１）が失敗したら、前記クライアント・プロセス手段のアドレス空間コンテキストのディレクトリを使って、セグメント・フォルトの解決を試みるステップとを有する、請求項２１に記載のコンピュータ実装方法。
【請求項２５】
あるプロセスが別のプロセスのプロセス・ローカル・ストレージにアクセスするのを可能にするコンピュータ・プログラムであって、コンピュータ・プログラムがコンピュータ読取可能な信号搬送媒体に提供される複数のコンピュータ実行可能命令を有する、前記プログラムが、
（Ａ）それ自体のプロセス・ローカル・ストレージしか参照できないクライアント・プロセス手段を生成するステップと、
（Ｂ）それ自体のプロセス・ローカル・ストレージを参照できるとともに、クライアント・プロセス手段のプロセス・ローカル・ストレージにアクセスできる能力を要求するサーバ・プロセス手段を生成するステップと、
（Ｃ）プロセスベースで、セグメント・テーブルと、ディレクトリと、代替アドレス空間コンテキストへのポインタとを有するアドレス空間コンテキストを生成するステップと、
（Ｄ）サーバ・プロセス手段のアドレス空間コンテキストのポインタをクライアント・プロセス手段のアドレス空間コンテキストを指すように設定するステップと、
（Ｅ）セグメント・フォルトが発生したら、前記サーバ・プロセス手段によって参照されるフォルトとなったアドレスが、クライアント・プロセス手段のアドレス空間のクライアント所有部分にあるかどうかを判定するステップと、
（Ｆ）ステップ（Ｅ）で、フォルトとなったアドレスが前記クライアント・プロセス手段のアドレス空間のクライアント所有部分にないと判定されたら、前記サーバ・プロセス手段のアドレス空間コンテキストのセグメント・テーブルとディレクトリのうち少なくとも１つを使って、セグメント・フォルトの解決を試みるステップと、
（Ｇ）ステップ（Ｅ）で、フォルトとなったアドレスが前記クライアント・プロセス手段のアドレス空間のクライアント所有部分にあると判定されたら、ステップ（Ｄ）で設定したポインタに基づいて、前記クライアント・プロセス手段のアドレス空間コンテキストのセグメント・テーブルとディレクトリのうち少なくとも１つを使って、セグメント・フォルトの解決を試みるステップとを有する、コンピュータ・プログラム。
【請求項２６】
ステップ（Ｆ）が、
（Ｆ１）前記サーバ・プロセス手段のアドレス空間コンテキストのセグメント・テーブルを使って、セグメント・フォルトの解決を試みるステップと、
（Ｆ２）ステップ（Ｆ１）が失敗したら、前記サーバ・プロセス手段のアドレス空間コンテキストのディレクトリを使って、セグメント・フォルトの解決を試みるステップとを有する、請求項２５に記載のコンピュータ・プログラム。
【請求項２７】
ステップ（Ｇ）が、
（Ｇ１）前記クライアント・プロセス手段のアドレス空間コンテキストのセグメント・テーブルを使って、セグメント・フォルトの解決を試みるステップと、
（Ｇ２）ステップ（Ｇ１）が失敗したら、前記クライアント・プロセス手段のアドレス空間コンテキストのディレクトリを使って、セグメント・フォルトの解決を試みるステップとを有する、請求項２６に記載のコンピュータ・プログラム。
【請求項２８】
ステップ（Ｇ）が、
（Ｇ１）前記クライアント・プロセス手段のアドレス空間コンテキストのセグメント・テーブルを使って、セグメント・フォルトの解決を試みるステップと、
（Ｇ２）ステップ（Ｇ１）が失敗したら、前記クライアント・プロセス手段のアドレス空間コンテキストのディレクトリを使って、セグメント・フォルトの解決を試みるステップとを有する、請求項２５に記載のコンピュータ・プログラム。
【請求項２９】
信号搬送媒体が記録可能な媒体を有する、請求項２５に記載のコンピュータ・プログラム。
【請求項３０】
信号搬送媒体が伝送媒体を有する、請求項２５に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般的にデータ処理分野に関する。さらに具体的には、本発明はコンピュータ・システムのスキームを処理する分野に関する。
【背景技術】
【０００２】
コンピュータ時代の幕開け以降、コンピュータ・システムは多様な環境で目にする極めて高度なデバイスへと進化してきた。コンピュータ・システムは一般に、ハードウェア（例、半導体、回路基板等）とソフトウェア（例、コンピュータ・プログラム）の組み合わせを含む。半導体加工技術とコンピュータ・アーキテクチャの進歩によりコンピュータのハードウェアの性能が高まるにつれて、ハードウェアの性能の向上を生かすためにより高度なコンピュータのソフトウェアが開発されている結果、現在のコンピュータ・システムはほんの数年前に比べはるかに高性能になっている。
【０００３】
コンピュータ・システムは、コンピュータ・ハードウェアで定められる処理能力をもつ。コンピュータ・システムのアドレス空間は参照データ、命令等に利用できるアドレスの範囲であり、アドレスのサイズ（単位ビット）で決定される。アドレスのサイズはコンピュータ・システムの基本的なアーキテクチャの特徴の１つである。初期のコンピュータ・システムは１度に１つのタスクしか処理できないシングルユーザ・コンピュータであり、すべてのデータを１つのアドレス空間にマッピングし、新たなタスクを行う必要があるたびにデータをアドレス空間から出し入れしていた。それから、複数のユーザとプロセスをサポートするコンピュータが開発された。複数のプロセスをサポートするコンピュータ・システムはプロセス間でのアドレス空間の割り当てを管理しなければならない。一般的に、各プロセスは、そのプロセスに固有の独自の作業データをもつ。ユニプロセッサのコンピュータ・システムにおいても、マルチプロセッサのコンピュータ・システムにおいてもそのことに変りはない。
【０００４】
コンピュータのアーキテクチャは一般に「プロセス・ローカル・アドレッシング」をサポートし、ストレージ・アクセスは実行しているプロセスのコンテキストにおいてのみ解決される。プロセッサはプロセス固有のセグメント・テーブル（これは技術上「変換テーブル」ともいう）を利用して、プロセス・ローカル・アドレスを仮想アドレスに変換する。２つの異なるプロセスは同じプロセス・ローカル・アドレスを使ってストレージを参照するが、オペレーティング・システム・カーネルはセグメント・テーブルを各プロセスに個別の仮想アドレス範囲に配置するため、異なる仮想アドレスが参照され、その結果異なるストレージにアクセスされる。プロセス・ローカル・アドレッシングは業界でごく一般に使われる。プロセス・ローカル・アドレッシング・メカニズムを利用して、偶然に、もしくは意図的にあるプロセスが別のプロセスのストレージにアクセスしないようにしている。そのため、オペレーティング・システム・カーネルが各プロセスの作業データをプロセス・ローカル・ストレージに存在するように配列して、プロセス・ローカル・アドレスによって参照付けるのが望ましい。
【０００５】
しかし、協力するプロセスにはその作業ストレージの少なくとも一部を共有する必要がある。その結果、オペレーティング・システム・カーネルは一又は複数の共有メカニズムを備えて、それによって協力するプロセスがその作業ストレージの少なくとも一部を共有するのが普通である。このような共有メカニズムの２つはそれぞれ「共有メモリ」と「メモリ・マップ・ファイル（ｍｅｍｏｒｙ  ｍａｐｐｅｄ  ｆｉｌｅ）」と呼ばれる。最初の共有メカニズム、すなわち、共有メモリとは、オペレーティング・システム・カーネルが各協力するプロセスのセグメント・テーブルの一部を同じ仮想アドレス範囲に配置し、その仮想アドレスをサポートする補助ストレージを備える技術である。こうして、協力するプロセスは同じストレージを参照できる。さらに、オペレーティング・システム・カーネルが、同じプロセス・ローカル・アドレスを各プロセスのセグメント・テーブルの同じ仮想アドレスに対応させる場合、協力するプロセスは同じプロセス・ローカル・アドレスを使って同じストレージを参照できる。
【０００６】
２つ目の共有メカニズム、すなわちメモリ・マップ・ファイルは同じような技術であるが、この場合、補助ストレージはファイル・システムのどこかに存在するファイルによって提供される。協力するプロセスは同じストレージを参照するが、これはファイルの一部である。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
これらの共有メカニズムは便利であるが、プロセス間にある程度の協力が必要である。この点に関し、プロセスの作業データは共有領域の１つに置かれていないことに留意するべきである。プロセスが明示的に共有メモリ・オブジェクトを作成するか、またはファイルをマップしなければならず、次にその作業ストレージのうち共有したい部分を、共有領域の合成アドレスに基づいて定義しなければならない。また、プロセスは共有ストレージのアドレス指定で協力しなければならない。共有ストレージのどれかが共有ストレージの他の部分のアドレスを含む場合、すべてのプロセスは同じプロセス・ローカル・アドレスを使って共有ストレージを参照できなければならないか、または共有ストレージを参照するときにアドレスにオフセットを加えられなければならない。さらに、あるアドレスを共有ストレージに格納するときにも、同じ配慮をしなければならない。
【０００８】
状況によっては、これら共有メカニズムの実施が難しい、もしくは不可能な場合がある。プロセスが、共有メカニズムの１つに要求されるように構成できないデータを共有しなければならないことはよくある。１例として、あるクライアント・プロセス手段に関してある所定のサーバ機能を行うサーバ・プロセス手段を考えてみる。サーバ機能は、クライアント・プロセス手段のストレージから大量のデータを抽出したり、またはクライアント・プロセス手段のストレージに大量のデータを格納する作業を伴うことがある。クライアント・プロセス手段のストレージはどこに存在していてもいいことから、複雑さがもたらされる。例えば、それ自体の作業ストレージにあるかもしれないし、またはそれを呼び出したプロシージャの作業ストレージにあるかもしれない。また、共有メモリ・オブジェクトに対応したストレージにあるかもしれないし、またはメモリ・マップ・ファイルにあるかもしれない。ヒープ・ストレージまたは静的ストレージにあるかもしれない。あるいはこれらの場所のなんらかの組み合わせにあるかもしれない。クライアント・プロセス手段のストレージはアクセスするストレージのすべてを配置するのに、数段レベルの間接参照およびポインタ・デリファレンスを伴う複雑なトラバース構造を必要とすることがある。
【０００９】
このような複雑さに取り組む様々な技術が考えられるが、それぞれ性能に望ましくない影響を与える。１つの技術では、共有メモリを中間バッファとして使用する。サーバ・プロセス手段はこの中間ストレージからデータを抽出し、またはこの中間ストレージにデータを入れて、クライアント・プロセス手段がそれ自体の作業ストレージのデータを共有領域にコピーしてからサーバ機能を呼び出す、もしくはサーバ機能を呼び出した後に共有領域のデータをそれ自体の作業ストレージにコピーする。中間コピーに関連するオーバーヘッドは、中間ストレージの設定の点からも、二重のコピーという点からも、特に大量のデータを伴う場合には望ましくない。
【００１０】
このような複雑さに取り組む別の技術では、オペレーティング・システム・カーネルの機能をサーバ・プロセス手段で使用して、クライアント・プロセス手段のローカル・ストレージ「から出す」またはローカル・ストレージ「に入れる」。実装方法によっては、データの中間コピーも伴うことがある。それにも関わらず、この種の機能は本質的に非常に汎用性があり、例えばある指定のアドレスで始まる特定の数（ｎ）のバイトを出し入れし、クライアントのデータ構造をトラバースするノウハウをもたない。その結果、サーバ・プロセス手段はトラバーサルの行程のたびにこの機能を呼び出す必要があり、ここでも性能に対する影響が望ましくない。
【００１１】
別のプロセスのプロセス・ローカル・ストレージに制御された方法でアクセスする改良されたメカニズムのニーズが存在する。
【課題を解決するための手段】
【００１２】
発明の好適な実施例によると、オペレーティング・システム・カーネルは、アタッチ・メカニズムとデタッチ・メカニズムを含む。加えて、プロセスは、プロセスをクライアント・プロセス手段またはサーバ・プロセス手段として識別するアクセス属性でタグ付けする。アクセス属性に基づいて、オペレーティング・システム・カーネルは、プロセスがクライアント・プロセス手段かサーバ・プロセス手段かによって、別々のプロセス・ローカル・アドレス空間をレイアウトする。サーバ・プロセス手段はクライアント・プロセス手段に「アタッチ」でき、まるでサーバ自体のもののようにクライアント・プロセス手段のローカル・ストレージのすべてを参照する。サーバ・プロセス手段はそれ自体のプロセス・ローカル・ストレージを引き続き参照するが、加えて、クライアント・プロセス手段のローカル・アドレスを使って、クライアント・プロセス手段のローカル・ストレージを参照できる。サーバ・プロセス手段はオペレーティング・システム・カーネルにアタッチ要求を出すことによって、カーネルのアタッチ・メカニズムを呼び出して「アタッチ」を行う。アタッチされてしまえば、他のストレージもカーネル・モードまたはユーザ・モードのいずれかで参照できる。サーバ・プロセス手段がクライアント・プロセス手段のローカル・ストレージへのアクセスを終了する場合、サーバ・プロセス手段はオペレーティング・システム・カーネルにデタッチ要求を出すことによって、カーネルのデタッチ・メカニズムを呼び出して「デタッチ」を行う。デタッチしてしまえば、他のストレージはカーネル・モードまたはユーザ・モードのいずれでももう参照できない。
【００１３】
本発明の前述並びにその他の特徴および利点は、添付の図面に図示するように、本発明の好適な実施例のより具体的な以下の説明から明らかになるであろう。
【発明を実施するための最良の形態】
【００１４】
本発明の例示的な好適な実施例をこれ以降添付の図面と合わせて説明していくが、同じ符号は同じ要素を示す。
【００１５】
本発明は、サーバ・プロセス手段をまるでサーバ自体のものであるかのように、クライアント・プロセス手段のローカル・ストレージのすべてに直接アクセスすることを可能にする。サーバ・プロセス手段はそれ自体のプロセス・ローカル・ストレージを引き続き参照するが、加えて、クライアント・プロセス手段のローカル・アドレスを使って、クライアント・プロセス手段のローカル・ストレージを参照できる。本発明の好適な実施例によると、この能力は、アタッチ・メカニズムとデタッチ・メカニズムを含むオペレーティング・システム・カーネルを使って提供する。加えて、プロセスは、プロセスをクライアント・プロセス手段またはサーバ・プロセス手段のいずれかとして識別するアクセス属性でタグ付けされる。アクセス属性に基づいて、オペレーティング・システム・カーネルは、プロセスがクライアント・プロセス手段かサーバ・プロセス手段かによって、別々にプロセス・ローカル・アドレス空間をレイアウトする。ローカル・アドレッシングの一般的な概念をよく知らない人のために、このアドレッシング・スキームを、本明細書で使用する定義に沿って、以下詳細に述べる。
【００１６】
アドレッシング方式を述べる際、技術上同じ用語を使って、人によっては別々の事柄が表されてきた。例えば、技術上ごく一般に知られる「仮想アドレス」という用語はアクセスでき、またはアドレス計算を行うことによって導いて、実行するプログラムが利用できて、実行するプログラムが操作できるアドレスをいう。しかし、この種の仮想アドレスはパワーＰＣの専門用語では「実効アドレス」といわれる。パワーＰＣの専門用語の「仮想アドレス」とは、実効アドレスから生成し、パワーＰＣアドレス変換スキームで内部で使用するアドレスのことである。本明細書の背景の部分で用いた「仮想アドレス」の使い方が一般的である。一般的にいうと、この種のアドレスは、このアドレスがプログラマーには見えないことを示すために、その後本明細書において「内部アドレス」と呼ぶが、アドレス変換メカニズムで生成して使用するアドレスのことである。パワーＰＣの専門用語における「実アドレス」とは、実（すなわち物理的な）メモリにアクセスするために使うアドレスであり、本明細書では「実アドレス」と呼ぶ。
【００１７】
現在業界で一般に使われる「プロセス・ローカル・アドレッシング」では、ストレージのアクセスは実行するプロセスのコンテキストでのみ解決される。ハードウェアはプロセス固有のセグメント・テーブルを使用して、「プロセス・ローカル・アドレス」を内部アドレスに変換する。以下詳細に述べるオペレーティング・システム・カーネルは、プログラムの作業データにプロセス・ローカル・アドレス空間とストレージを割り当てる。２つの異なるプロセスは同じプロセス・ローカル・アドレスを使ってストレージを参照できるが、オペレーティング・システム・カーネルがセグメント・テーブルを各プロセスに別々の内部アドレス範囲に配置するため、プロセスは異なるストレージにアクセスする。偶然もしくは意図的に、あるプロセスが別のプロセスのストレージにアクセスするのを防ぐ従来のプロセス・ローカル・アドレッシングメカニズムと違って、本発明はサーバ・プロセス手段が制御された方法で、まるでサーバ自体のものであるかのようにクライアント・プロセス手段のローカル・ストレージのすべてに直接アクセスするのを可能にする。本発明の好適な実施例によると、オペレーティング・システム・カーネルは要求されるときこの機能を可能にし、アクセスが認められたら、他のプロセスのストレージへのアクセス権を提供する。
【００１８】
一般的にいうと、ここでの説明のため、この技術分野で共通であるように、プロセス・ローカル・アドレス空間は１セットの連続セグメントから構成される。セグメントベースでは、ハードウェア／ソフトウェアはセグメント・テーブルを使ってプロセス・ローカル・アドレスを内部アドレスに変換する。そこから、ハードウェア／ソフトウェアは続いて、本発明の目的上重要ではない従来の手段を使って、内部アドレスを実アドレスに解決する。
【００１９】
本発明の好適な実施例は、アタッチ・メカニズムとデタッチ・メカニズムを含むオペレーティング・システム・カーネルを提供する。加えて、プロセスは、プロセスがクライアント・プロセス手段またはサーバ・プロセス手段のいずれかであることを識別するアクセス属性でタグ付けされる。アクセス属性に基づいて、オペレーティング・システム・カーネルは、プロセスがクライアント・プロセス手段かサーバ・プロセス手段かによって、別々にプロセス・ローカル・アドレス空間をレイアウトする。サーバ・プロセス手段はクライアント・プロセス手段に「アタッチ」して、まるでサーバ自体のものであるかのようにクライアント・プロセス手段のローカル・ストレージのすべてを参照できる。サーバ・プロセス手段はそれ自体のプロセス・ローカル・ストレージを引き続き参照するが、加えて、クライアント・プロセス手段のローカル・アドレスを使ってクライアント・プロセス手段のローカル・ストレージも参照できる。サーバ・プロセス手段は、オペレーティング・システム・カーネルにアタッチ要求を出すことによって、カーネルのアタッチ・メカニズムを呼び出して「アタッチ」を行う。アタッチしてしまえば、カーネル・モードまたはユーザ・モードのいずれかで他のストレージを参照できる。サーバ・プロセス手段がクライアント・プロセス手段のローカル・ストレージへのアクセスを終了する場合、サーバ・プロセス手段は、オペレーティング・システム・カーネルにデタッチ要求を出すことによって、カーネルのデタッチ・メカニズムを呼び出して「デタッチ」を行う。デタッチしてしまえば、カーネル・モードまたはユーザ・モードのいずれでも他のストレージをもう参照することはできない。
【００２０】
ここで図１を参照して、コンピュータ・システム１００は、本発明の好適な実施例による装置のある適切な実装である。コンピュータ・システム１００はエンハンスドＩＢＭ  ｅＳｅｒｖｅｒ  ｉＳｅｒｉｅｓ（ＩＢＭは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標）のコンピュータ・システムである。ただし、当業者には、本発明のメカニズムおよび装置は、複雑なマルチユーザ・コンピューティング装置、シングルユーザのワークステーション、または埋め込み型制御システムであるかどうかに関わらず、あらゆるコンピュータ・システムにも適用できることは理解されるであろう。図１に示すように、コンピュータ・システム１００は複数のプロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、１１０Ｄと、メインメモリ１２０と、大容量ストレージ・インターフェース１３０と、ディスプレイ・インターフェース１４０と、ネットワーク・インターフェース１５０とを有する。これらシステム・コンポーネントはシステム・バス１６０を使って相互接続される。大容量ストレージ・インターフェース１３０は大容量記憶デバイス（直接アクセス記憶デバイス１５５など）をコンピュータ・システム１００に接続するために使う。直接アクセス記憶デバイス１５５のある具体的な種類が読み書き可能なＣＤ−ＲＷドライブであり、ＣＤ−ＲＷ１９５にデータを格納し、かつＣＤ−ＲＷ１９５からデータを読み込むことができる。
【００２１】
図１はコンピュータ・システム１００の代表的な主要コンポーネントを高次レベルで図示することを意図しており、個々のコンポーネントは図１に表すよりも複雑なこともあり、当該コンポーネントの数、種類、および構成は異なることがあることは了解される。特に、コンピュータ・システム１００は図示する数とは異なる数のプロセッサを内蔵することがある。当業者には、本発明が一又は複数のプロセッサを内蔵するコンピュータ・システムを使って実施できることは理解されるであろう。
【００２２】
好適な実施例によるメインメモリ１２０は、データ１２１と、オペレーティング・システム１２２と、一又は複数のプロセッサ１２５と、一又は複数のプログラム１２７とを内蔵する。データ１２１は、コンピュータ・システム１００内のプログラムからの入出力、またはプログラムの作業ストレージの役割をするあらゆるデータを表す。オペレーティング・システム１２２は業界でＯＳ／４００（Ｒ）またはＩＢＭ  ｉ５／ＯＳ（Ｒ）として知られるマルチタスク・オペレーティング・システムである。ただし、当業者には、本発明の適用範囲が、どれか１つのオペレーティング・システムに制限されないことは理解されるであろう。典型的な場合、オペレーティング・システム１２２はオペレーティング・システム・カーネル１２３（本明細書において単に「カーネル」ともいう）を含む。
【００２３】
カーネル１２３はオペレーティング・システム１２２に統合されて、カーネルレベルのサービスをオペレーティング・システムのコンポーネントとプログラム１２７などの他のプログラムに提供する。例えば、カーネル１２３はオペレーティング・システム１２２で呼び出されるシステム・タスク・ディスパッチャ１２４を含んで、技術上周知の様々なメカニズムのいずれかを使って、プロセス１２５を一又は複数のプロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、１１０Ｄに割り当てる。カーネル１２３はセキュリティ、監査、および制御のアービタである。本発明の好適な実施例によると、カーネル１２３はアタッチ・メカニズム１８０とデタッチ・メカニズム１８２の２つの新たなメカニズムを提供する。アタッチ・メカニズム１８０はサーバ・プロセス手段がクライアント・プロセス手段にアタッチするのを可能にする。デタッチ・メカニズム１８２はサーバ・プロセス手段がクライアント・プロセス手段からデタッチするのを可能にする。
【００２４】
カーネル１２３はまた、各プロセス１２５に対応するする１組の「属性」を生成して維持する。属性の一部はユーザが呼び出したプログラム１２７から派生し、またプログラム自体から派生するものもある。従来の属性のほんの数例をあげると、ユーザＩＤ、グループＩＤ、特権である。加えて、本発明の好適な実施例によると、カーネル１２３は本明細書で「アクセス属性」１２６と呼ぶ各プロセス１２５に対応した新たな属性も付け加える。上記述べたように、アクセス属性１２６はプロセス１２５をクライアント・プロセス手段またはサーバ・プロセス手段のいずれかとしてタグ付けする。
【００２５】
さらに本発明の好適な実施例によると、カーネル１２３は、プログラム１２７を実行する前に、一又は複数のプロセス１２５をレイアウトする。例えば、「ウエブ・ブラウザ」またはワード・プロセッシング・プログラムなどのアプリケーション・プログラムを実行する前に、カーネル１２３は一又は複数のプロセス１２５をレイアウトする。プロセス１２５は、以下詳細に述べるように、各プロセス１２５をアクセス属性１２６によってクライアント・プロセス手段またはサーバ・プロセス手段のいずれかとしてタグ付けしなければならないため、最初にレイアウトされるので（すなわち、プログラムが実行を開始する前）、カーネル１２３はプログラムのプロセス・ローカル・ストレージ空間をどこに配列するかが分かる。
【００２６】
各プロセス１２５は、一又は複数のプロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、１１０Ｄで実行するプログラム命令から構成される。上記述べたように、一又は複数のプロセス１２５はオペレーティング・システム１２２で生成される。これらはクライアント・プロセス手段とサーバ・プロセス手段を含むことがある。通例、プロセスはプログラム・リソースとプログラムの実行状態に関する情報を含む。
【００２７】
コンピュータ・システム１００は、コンピュータ・システム１００のプログラムがメインメモリ１２０およびＤＡＳＤデバイス１５５などの複数の小型のストレージ・エンティティにアクセスするのではなく、１つの巨大なストレージ・エンティティにアクセスするかのように動作させる周知の仮想アドレッシング・メカニズムを利用する。そのため、データ１２１、オペレーティング・システム１２２、オペレーティング・システム・カーネル１２３、システム・タスク・ディスパッチャ１２４、アタッチ・メカニズム１８０、デタッチ・メカニズム１８２、一又は複数のプロセス１２５、アクセス属性１２６、一又は複数のプログラム１２７はメインメモリ１２０に存在するように示しているが、当業者には、これら要素が同時にメインメモリ１２０に必ずしもすべて完全に内蔵されないことは理解されるであろう。
【００２８】
プロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、１１０Ｄの各々は一又は複数のマイクロプロセッサおよび集積回路もしくは一又は複数のマイクロプロセッサまたは集積回路から構成できる。好ましくは、プロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、１１０ＤはパワーＰＣアーキテクチャとして業界で周知のプロセッサ・アーキテクチャ・ファミリーのメンバーである。ただし、当業者には、本発明の適用範囲が、どれか１つのプロセッサ・アーキテクチャに制限されないことは理解されるであろう。プロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、１１０Ｄは、メインメモリ１２０に格納されるプログラム命令を実行する。メインメモリ１２０は、プロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、１１０Ｄがアクセスできるプログラムおよびデータを格納する。コンピュータ・システム１００が始動すると、プロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、１１０Ｄはオペレーティング・システム１２２を構成するプログラム命令を最初に実行する。オペレーティング・システム１２２は、コンピュータ・システム１００のリソースを管理する高度なプログラムである。これらリソースの一部が、プロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、および１１０Ｄ、メインメモリ１２０、大容量ストレージ・インターフェース１３０、ディスプレイ・インターフェース１４０、ネットワーク・インターフェース１５０、システム・バス１６０である。
【００２９】
好ましくは、各プロセッサは、以下詳細に述べるように、プロセス・ローカル・アドレスを内部アドレスに変換する変換情報の対応するセグメント・キャッシュ１１２Ａ、１１２Ｂ、１１２Ｃ、１１２Ｄをもつ。単純にするために、プロセッサとセグメント・キャッシュを本明細書ではそれぞれ参照番号１１０と１１２で総称して呼ぶ。各プロセッサ１１０に１つのセグメント・キャッシュ１１２を図示しているが、複数レベルのセグメント・キャッシュでもよく、またはセグメント・キャッシュが全くなくてもよい。プロセッサ１１０は、メモリのキャッシュなど、他の目的のための他のキャッシュももつことがあり、その一部は命令専用であり、また非実行可能データに対するものもある。
【００３０】
アドレス変換メカニズム１９０は、アドレス空間を利用して、実メモリに間接的にアクセスする、すなわちアドレス空間の間接参照から実メモリにアクセスする能力を提供するメカニズムである。アドレス変換メカニズム１９０は、以下詳細に述べるように、プロセッサ１１０およびセグメント・キャッシュ１１２内に埋め込まれたハードウェア支援機構によって増補される論理型のエンティティである。本発明の好適な実施例によると、アドレス変換メカニズム１９０は、プロセスベースで、プロセス・ローカル・アドレスを内部アドレスに変換するアドレス空間コンテキスト１９１を含む。アドレス空間コンテキスト１９１はユーザがアドレス空間と認識するものを形作るデータ構造および対応するコードと定義される。以下詳細に述べるように、アドレス空間コンテキスト１９１は、プロセスベースで、セグメント・テーブル１９１と、ディレクトリ１９３と、代替アドレス空間コンテキスト１９４へのポインタを含む。本発明の好適な実施例によると、複数レベルのアドレス変換情報を、プロセス・ローカル・アドレスを内部アドレスに変換するときに利用する。サイズの小さい順にあげると、このアドレス変換情報は、セグメント・キャッシュ１１２と、セグメント・テーブル１９２と、ディレクトリ１９３を含む。一般に、アドレス空間コンテキスト１９１は全体がもしくは少なくとも一部がソフトウェアに実装される。上記述べたように、プロセス・ローカル・アドレス空間は１セットの連続セグメントから構成される。従来の技術上周知のように、セグメント・キャッシュ１１２へのエントリを利用して、プロセス・ローカル・アドレスを内部アドレスに変換する。セグメント・キャッシュ１１２は、プロセス・ローカル・アドレスを内部アドレスに変換しようとするときに使われる第１レベルの変換情報である。一般に、セグメント・キャッシュ１１２へのエントリは、一致があるかどうかを素早く判断するために、ハードウェアが並行して（すなわち同時に）検索する。セグメント・キャッシュ１１２へのエントリの中にプロセス・ローカル・アドレスが見つからない場合、セグメント・フォルトが発生する。セグメント・フォルトが発生したら、セグメントベースで、本発明の好適な実施例による、また以下詳細に述べるアドレス変換メカニズム１９０は、セグメント・テーブル１９２、ディレクトリ１９３、代替アドレス空間コンテキスト１９４へのポインタを使って、プロセス・ローカル・アドレスを内部アドレスに変換する。そこから、アドレス変換メカニズム１９０はひき続き、本発明の目的上重要ではない従来の手段を使って内部アドレスを実アドレスに解決する。
【００３１】
技術上周知のように、セグメント・キャッシュ１１２へのエントリ内のプロセス・ローカル・アドレスの検索はハードウェアで行う。ハードウェアがセグメント・キャッシュ１１２へのエントリ内にプロセス・ローカル・アドレスを見つけたら、ハードウェアはプロセス・ローカル・アドレスを内部アドレスに変換し、さらにそれを実アドレスに解決する。通例、ハードウェアがセグメント・キャッシュ１１２へのエントリ内にプロセス・ローカル・アドレスを見つける場合、ソフトウェアには通知されない。他方で、ハードウェアがセグメント・キャッシュ１１２へのエントリの中にプロセス・ローカル・アドレスを見つけなかった場合は、セグメント・フォルトが発生する。この例外の場合では、使用する特定の実装によって、以下詳細に説明するように、セグメント・フォルトが発生したことをソフトウェアに通知する場合もしない場合もある。
【００３２】
セグメント・キャッシュ１１２は、プロセス・ローカル・アドレッシング・セグメントのすべての変換情報を収容するほど大きくない。そのため、現在業界で広く行き渡っているように、より大きな変換情報のセットをもつセグメント・テーブル１９２をプロセスベースで維持する。変換中にセグメント・フォルトが発生したら、割込みが発生して、ソフトウェア割込みハンドラ１９５が迅速に、セグメント・テーブル１９２から変換情報を突き止めて、その変換情報をセグメント・キャッシュ１１２へのエントリとして投入することを試みるので、セグメント・フォルトを生じた命令を再実行できる。ソフトウェア割込みハンドラ１９５は従来のもので技術上周知であるため、本明細書では詳細に述べない。代わりの方法として、これも技術上周知のように、セグメント・テーブルの検索は、通常ソフトウェアに通知しなくても、ハードウェアで実施できる。例えば、プロセッサ１１０はセグメント・テーブルがどこに配置されているかが分かっていることがある。その場合、変換中にセグメント・フォルトが発生したら、プロセッサはセグメント・テーブルに変換情報を見つけて、変換情報をセグメント・キャッシュ１１２へのエントリとして投入することを試みるので、セグメント・フォルトを生じた命令を再実行できる。
【００３３】
ディレクトリ１９３は、プロセスベースで、プロセス１２５のプロセス・ローカル・アドレスから内部アドレス変換情報までのすべてを含むため、セグメント・テーブル１９２より大きい。ソフトウェア割込みハンドラ１９５がセグメント・テーブルに必要な変換情報を見つけられない場合、はるかに時間のかかるフォルト処理ソフトウェア・メソッド１９６が呼び出されて、ディレクトリ１９３の変換情報を探索し、それを使ってセグメント・キャッシュ１１２およびセグメント・テーブル１９２もしくはセグメント・キャッシュ１１２またはセグメント・テーブル１９２を配置した後に、フォルトを生じた命令を再実行する。フォルト処理ソフトウェア・メソッド１９６は従来のものであり、技術上周知であるため、本明細書では詳細に述べない。代わりの方法として、セグメント・テーブルの検索をハードウェアで実施して、ハードウェアがセグメント・テーブルに必要な変換情報を見つけられなかった場合、割込みが発生して、フォルト処理ソフトウェア１９６が呼び出される。
【００３４】
そのため、本発明の好適な実施例によると、ソフトウェア（例、ソフトウェア割込みハンドラ１９５およびフォルト処理ソフトウェア・メソッド１９６）は、セグメント・テーブル１９２またはセグメント・フォルトが発生した場合はディレクトリ１９３で見つかった変換情報からのエントリをセグメント・キャッシュ１１２に与える。また、本発明の好適な実施例によると、ソフトウェアは、以下詳細に述べるように、もはや必要なくなったときまたは無効になったときは、セグメント・キャッシュ１１２からのエントリをフラッシュする。また、本発明の好適な実施例によると、プロセッサ１１０はセグメント・キャッシュ１１２へのエントリを常に参照して使っているため、変換情報の検索がうまくいく限り、すなわちセグメント・キャッシュ１１２へのエントリ内に変換情報が見つかる限り、わざわざソフトウェアに通知しなくてもよい。ただし、検索がうまくいかない場合、ハードウェアはセグメント・フォルトが発生したことをソフトウェアに通知する。
【００３５】
前述したように、アドレス空間コンテキスト１９１は、プロセスベースで、参照番号１９４で示される代替アドレス空間コンテキストへのポインタ（「ポインタ」および「代替アドレス空間コンテキストのポインタ」ともいう）を含む。以下詳細に述べるように、アタッチプロセス中、サーバ・プロセス手段に対応するアドレス空間コンテキストのポインタ１９４は、クライアント・プロセス手段に対応するアドレス空間コンテキストへのポインタに設定される。
【００３６】
アドレス空間コンテキスト１９１、セグメント・テーブル１９２、ディレクトリ１９３、ポインタ１９４、ソフトウェア割込みハンドラ１９５、フォルト処理ソフトウェア・メソッド１９６は、図示するためにアドレス変換メカニズム１９０に存在するように示されているが、当業者には、これら要素を一緒に存在させる必要はなく、これら要素のうち一又は複数の要素が別の場所に存在してもよいことは理解されるであろう。例えば、アドレス空間コンテキスト１９１はカーネル１２３に存在して、ソフトウェア割込みハンドラ１９５およびフォルト処理ソフトウェア・メソッド１９６がメインメモリ１２０の他の場所に存在してもよい。さらに、当業者には、これら要素を組み合わせてもよく、または要素のうち一又は複数の要素を省いてもよいことは理解されるであろう。
【００３７】
コンピュータ・システム１００は１つのシステム・バスだけを内蔵するように図示されているが、当業者には、本発明が複数のバスをもつコンピュータ・システムを使って実施できることは理解されるであろう。さらに、好適な実施例で使用するインターフェースは各々、プロセッサ１１０Ａ、１１０Ｂ、１１０Ｃ、１１０Ｄから計算集約的な処理を移すのに使われる完全にプログラミングされた個別のマイクロプロセッサを含んでいる。ただし、当業者には、本発明がＩ／Ｏアダプタだけを使って同様な機能を果たすコンピュータ・システムにも同様に適用されることは理解されるであろう。
【００３８】
ディスプレイ・インターフェース１４０は、一又は複数のディスプレイ１６５をコンピュータ・システム１００に直接接続するために使う。これらディスプレイはノンインテリジェント（すなわち、ダム）端末でも完全にプログラム可能なワークステーションでもよいが、システム・アドミニストレータおよびユーザがコンピュータ・システム１００と通信できるようにするために使う。ただし、ディスプレイ・インターフェース１４０は一又は複数のディスプレイ１６５との通信をサポートするように設けられているが、ユーザおよびその他のプロセスとの必要なすべてのインタラクションはネットワーク・インターフェース１５０を介して行えるため、コンピュータ・システム１００は必ずしもディスプレイ１６５が必要なわけではないことを述べておく。
【００３９】
ネットワーク・インターフェース１５０は、ネットワーク１７０で他のコンピュータ・システムおよびワークステーション（例、図１の１７５）もしくは他のコンピュータ・システムまたはワークステーションをコンピュータ・システム１００に接続するために使う。本発明は、現在のアナログおよびデジタル技術もしくは現在のアナログまたはデジタル技術を使って、あるいは将来の何らかのネットワーキング・メカニズムを介してコンピュータ・システム１００をネットワーク接続１７０を行うかどうかに関わらず、コンピュータ・システム１００をいかに他のコンピュータ・システムおよびワークステーションもしくは他のコンピュータ・システムまたはワークステーションに接続しようとも同様に適用される。加えて、多くの様々なネットワーク・プロトコルを使ってネットワークを実装できる。これらプロトコルは、コンピュータをネットワーク１７０で通信させる特殊なコンピュータ・プログラムである。ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネット・プロトコル）が適切なネットワーク・プロトコルの一例である。
【００４０】
ここまでで、本発明が説明されたがもう少し説明を続ける。このとき、当業者には、本発明が多様な形態のプログラムとして配布できること、また本発明は実際に配布を行うために使用する特定の種類の信号搬送媒体に関係なく、同様に適用できることは理解されるであろう。適切な信号搬送媒体の例としては、フレキシブルディスクおよびＣＤ−ＲＷ（例、図１の１９５）などの記録型の媒体、並びにデジタルおよびアナログ通信リンクなどの伝送型の媒体がある。
【００４１】
図２は、複数の並行ユーザ・プロセス手段２１４、２１６、２１８の各々に対応する様々なメカニズムを図示する機能的なブロック図を示す。アクセス属性１２６と、アドレス空間コンテキスト１９１と、セグメント・テーブル１９２と、ディレクトリ１９３と、ポインタ１９４を含むこれらメカニズムは、カーネル１２３およびプロセッサ１１０などのハードウェアに存在し、その上で実行する。各プロセスはそれに、「代替」アドレス空間コンテキスト１９１へのポインタ１９４（および代替アドレス空間コンテキストのセグメント・テーブル１９２とディレクトリ１９３、これらはそれぞれ「プロセスの代替セグメント・テーブル」と「プロセスの代替ディレクトリ」という）を対応付けられている。例えば、サーバ・プロセス手段２１４に対応するポインタ１９４は、クライアント・プロセス手段２１６またはクライアント・プロセス手段２１８に対応するアドレス空間コンテキスト１９１を指すことになろう。以下に述べる理由のために、クライアント・プロセス手段（例、クライアント・プロセス手段２１６）に対応するポインタ１９４は、別のクライアント・プロセス手段（例、クライアント・プロセス手段２１８）に対応するアドレス空間コンテキスト１９１を指すことは認められない。同様に、サーバ・プロセス手段（例、サーバ・プロセス手段２１４）に対応するポインタ１９４は、別のサーバ・プロセス手段に対応するアドレス空間コンテキスト１９１を指すことは認められない。当初、ポインタ１９４は、プロセスが現在代替アドレス空間コンテキストをもたないことを示すヌルである。好適な実施例では、クライアント・プロセス手段２１６（またはクライアント・プロセス手段２１８）に対応するポインタ１９４は、クライアント・プロセス手段が代替アドレス空間コンテキストをもたないため、必ずヌルのままである。
【００４２】
プロセス手段２１４、２１６、２１８は、「ユーザ・モード」のプログラムおよび、カーネル１２３（図１に図示）および関連ハードウェア（図２でまとめてカーネル／ハードウェア２５０として示す）などのシステム全体の特権をもつ「カーネル・モード」のプログラムからアクセスできる。カーネル１２３は各プロセスに対応する図２に示す様々なメカニズムに対応するメタ・ディスクリプションのオブジェクトおよびコードにもアクセスできる。
【００４３】
カーネル１２３は、上記述べたように、各プロセスに対応するアクセス属性１２６を提供する。本発明の好適な実施例によると、プロセス手段２１４、２１６、２１８は各々、２つの値のうちの１つをとるアクセス属性１２６をもつ。クライアントは、クライアント・プロセス手段２１６および２１８で例証されるほとんどのプロセスで使われるディフォルトの属性値である。この属性をもつプロセスはそれ自体のプロセス・ローカル・ストレージしか参照できない。サーバは、クライアント・プロセス手段のプロセス・ローカル・ストレージを参照できる必要のあるプロセスに指定される属性値である。サーバ・プロセス手段２１４がこのようなプロセスの例である。
【００４４】
図３は、プロセス手段２１４、２１６、２１８の各々のアドレス空間内の割り当てを図示するブロック図である。各プロセスに対応付けられるアドレス空間は、サーバ・プロセス手段２１４の場合アドレス空間３４２で、クライアント・プロセス手段２１６の場合アドレス空間３４４で、クライアント・プロセス手段２１８の場合アドレス空間３４６で例示している。本明細書では「アドレス空間」という表現は、メモリ上でのプロセス・ローカル・アドレス範囲のマッピングをいうために使う。図３に図示しているが、カーネル／ハードウェア２５０は実際にはアドレス空間の一部ではなく、カーネル／ハードウェア２５０がプロセス手段２１４、２１６、２１８のために備える基礎およびサポートを図示するために示している。例えば、カーネル１２３は、要求されたとき、その要求が様々なセキュリティ、監査および制御ルールに合格したことを検証すると、それをカーネルまたはユーザがそのアドレス空間に関係することを行う何かに影響するデータ構造をセットアップする。図３に示すように、各プロセス手段２１４、２１６、２１８はそれが所有するそのプロセス・ローカル・アドレス範囲の量に制限される。プロセスがそのアドレス空間全体を使う必要があってもおかしくないため、３２ビット・アドレッシングのシステムではこの制限は実用的とはいえないかもしれない。しかし、６４ビット・アドレッシングのシステムなどのより大型のシステムでは、プロセスをそのプロセス・ローカル・アドレッシングの範囲全体よりも小さいものの使用に制限することは問題とはならないのが通例である。
【００４５】
これに限定する訳ではないが、簡略化のため、プロセス手段２１４、２１６、２１８はそのそれぞれのアドレス範囲の約二分の一だけを所有することが認められると仮定する。これは例えば、ディレクトリ１９３に、各それぞれのプロセス手段２１４、２１６、２１８が所有することを認められるアドレス範囲の変換情報だけを含むようにさせれば、比較的簡単に行える。また、アクセス属性１２６の値に基づいて、クライアント・プロセス手段２１６および２１８などのクライアント・プロセス手段がプロセス・ローカル・アドレス範囲のそれぞれ「前半」部分３０２および３０４だけを所有し、サーバ・プロセス手段２１４などのサーバ・プロセス手段がプロセス・ローカル・アドレス範囲の「後半」部分３０６だけを所有すると仮定する。したがって、クライアント・プロセス手段２１６および２１８などのクライアント・プロセス手段は、プロセス・ローカル・アドレス範囲のそれぞれ「後半」部分３１２および３１４を所有しない。また、サーバ・プロセス手段２１４などのサーバ・プロセス手段は、プロセス・ローカル・アドレス範囲の「前半」部分３１６は所有しない。加えて、図３に図示するように、各それぞれのプロセス・ローカル・アドレス範囲の任意の予備部分３２６を含めることも可能である。含める場合、予備部分３２６は未使用で、将来の使用のために確保される。
【００４６】
上記の説明でプロセス・ローカル・アドレス空間を前半と後半に分けたことは、単に説明上の便宜にすぎない。好適な実施例では、アドレス空間の一部をまったく使用せず（例、予備部分３２６）、使用できる部分（例、所有部分３０２、３０４、および３０６と、未所有部分３１２、３１４および３１６）はクライアント・プロセス手段とサーバ・プロセス手段との間で等しく分割されない。サーバ・プロセス手段は通常特殊化され、一般に他のプロセスに利用できなければならないプロセス・ローカル・ストレージのすべてを所有する必要はない。そのため、サーバ・プロセス手段が所有するアドレス空間の割り当て（例、所有部分３０６）は、クライアント・プロセス手段が所有するもの（例、所有部分３０２および３０４）よりもはるかに小さいのが普通である。
【００４７】
アクセス属性に基づくプロセス生成：上記述べたように、カーネルはプロセスを開始してから、そのプロセスのあらゆるプログラムを実行する。各プロセスはアクセス属性によってクライアント・プロセス手段またはサーバ・プロセス手段のいずれかのタグ付けをしなければならないため、カーネルはプログラムのプロセス・ローカル・ストレージを配列するべき場所が分かる。
【００４８】
ここで図４を参照すると、本発明の好適な実施例によるプロセスのアドレス空間をレイアウトする方法４００は、カーネルがプロセスが所望の属性値に基づいてクライアント・プロセス手段かサーバ・プロセス手段かを判定する時点で始まる（ステップ４１０）。アクセス属性はプログラムが実行される時点でまたはその前に指定される。プロセスの生成時点でアクセス属性を指定するのが好ましい。プロセス生成メカニズムは技術上周知である。代わりの方法として、アクセス属性は、アドレス空間がレイアウトされる時点、例えばＵＮＩＸ（登録商標）システムのｅｘｅｃ関数で指定してもよい。
【００４９】
属性値がクライアントの場合、カーネルは、クライアント・プロセス手段がクライアント・プロセス手段のプロセス・ローカル・アドレス範囲の最初の部分（例、図３の「前半」部分３０２）だけを所有するように、プロセス・ローカル・アドレス空間をレイアウトする（ステップ４１２）。この点に関し、カーネルは、クライアント・プロセス手段のプロセス・ローカル・アドレス範囲の残りの部分が未所有または未使用のいずれかになるように、プロセス・ローカル・アドレス空間をレイアウトする。例えば、図３に図示するクライアント・プロセス手段２１６の場合、カーネルは、プロセス・ローカル・アドレス空間３４４を「後半」部分３１２が未所有に、もしあれば、予備部分３２６が未使用になるようにレイアウトする。属性値がサーバの場合、カーネルは、サーバ・プロセス手段がサーバ・プロセス手段のプロセス・ローカル・アドレス範囲の第２の部分（例、図３の「後半」部分３０６）だけを所有するように、プロセス・ローカル・アドレス空間をレイアウトする（ステップ４１４）。この点に関し、カーネルは、サーバ・プロセス手段のプロセス・ローカル・アドレス範囲の残りの部分が未所有または未使用のいずれかになるように、プロセス・ローカル・アドレス空間をレイアウトする。例えば、図３に図示するサーバ・プロセス手段２１４の場合、カーネルは、「前半」部分３１６を未所有に、もしあれば、予備部分３２６を未使用になるようにプロセス・ローカル・アドレス空間３４２をレイアウトする。ステップ４１０、４１２、４１４は各プロセスについて繰り返される。カーネルがプロセスをレイアウトして、プログラムのプロセス・ローカル・ストレージを配列するべき場所が分かったら、プロセス内でプログラムの実行を開始できる（ステップ４１６）。
【００５０】
アタッチ・メカニズム：カーネル１２３は、上記述べたように、サーバ・プロセス手段をクライアント・プロセス手段に制御された方法でアタッチさせる新たな機能を提供する。例えば、一時的に図２に戻ると、サーバ・プロセス手段２１４はカーネルのアタッチ・メカニズムを呼び出すことによってクライアント・プロセス手段２１６にアタッチできる。
【００５１】
ここで図５を参照すると、本発明の好適な実施例によるサーバ・プロセス手段をクライアント・プロセス手段に制御された方法でアタッチすることを可能にする方法５００は、サーバ・プロセス手段がアタッチ・メカニズムを呼び出した時点で始まる（ステップ５１０）。さらに具体的には、サーバ・プロセス手段はアタッチ・メカニズムを呼び出し、パラメータとしてクライアント・プロセス手段への参照を渡す。サーバ・プロセス手段はオペレーティング・システム・カーネルにアタッチ要求を出すことによって、カーネルのアタッチ・メカニズムを呼び出して「アタッチ」を行う。カーネルは要求されたときにこの機能を使用可能にし、アクセスが認められたら（例、カーネルがセキュリティ・チェックを行って、サーバ・プロセス手段がクライアント・プロセス手段にアタッチする権限をもっているかを確認する）、アタッチ・メカニズムを介してクライアント・プロセス手段のストレージへのアクセス権を提供する。アタッチ・メカニズムを実行する際、以下に述べるステップ（ステップ５１２〜５２４）を行う。これらステップはその優先順位で記載される。ただし様々なステップは図示するものとは互いに異なる時点で行っても、または同時に行ってもよいことは理解されなければならない。さらに、当業者には、ステップのうち一又は複数のステップを省けることは理解されるであろう。いずれにしても、アタッチされてしまえば、カーネル・モードまたはユーザ・モードのいずれかで他のストレージを参照できる。サーバ・プロセス手段はそれ自体のプロセス・ローカル・アドレスを使って、それ自体のプロセス・ローカル・ストレージも参照できることを指摘しておく。
【００５２】
カーネルは、実行するプロセスがサーバ属性であり、参照プロセスがクライアント属性であることを検証する（ステップ５１２）。このステップのポイントは、矛盾を避けるために２つのプロセスをプロセス・ローカル・アドレス範囲の異なる部分を所有しなければならないことである。カーネルは、実行するプロセスが現在別のプロセスにアタッチしていないことも検証する（ステップ５１４）。
【００５３】
さらに、カーネルは、サーバ・プロセス手段がクライアント・プロセス手段にアタッチする権限をもつことを確認するのに望ましい、もしくは必要なあらゆるセキュリティ・チェックを行う（ステップ５１６）。クライアント・プロセス手段のストレージに未許可のアクセスがされないように制御された方法でアクセス権を提供するのが望ましい。サーバ・プロセス手段がクライアント・プロセス手段にアタッチする権限をもっている場合、アクセスが認められる。他方で、サーバ・プロセス手段がそのような権限をもたない場合、アクセスは否定される。
【００５４】
望ましいもしくは必要な場合、カーネルは、サーバ・プロセス手段がクライアント・プロセス手段のローカル・ストレージへのアクセス権を取得していることを監査するために必要な情報を生成する（ステップ５１８）。例えば、一部のオペレーティング・システムは監査を要求する。
【００５５】
カーネルはクライアント・プロセス手段のアドレス空間コンテキストで参照カウントを増分する（ステップ５２０）。これによって、クライアント・プロセス手段が終了することになっても、そのセグメント・テーブルおよびディレクトリは存在し続けるので、依然としてサーバ・プロセス手段から参照できることを保証する。
【００５６】
さらに、カーネルは、クライアント・プロセス手段のローカル・アドレス範囲の所有部分に対応した、サーバ・プロセス手段のディレクトリへのエントリを生成するのが好ましい（ステップ５２２）。これらプロセス・ローカル・アドレスを内部アドレスに相関させるというよりも、このディレクトリへのエントリはクライアント・ローカル・アドレス範囲の所有部分全体（そうでなければサーバ・プロセス手段で未所有である）を、クライアント・アドレス空間コンテキストに相関させる。このエントリはフォルト処理には必要ないが、記録の目的でするのが望ましい。例えば、このエントリで、そのコンテンツを見られるようにディレクトリを実体化する機能を追加し易くなるであろう。ディレクトリの実体化は、例えば、サーバ・プロセス手段が別のプロセスのストレージへのアドレス指定能力をもつかどうかを判断できるようにする。
【００５７】
カーネルはまた、サーバ・プロセス手段の代替アドレス空間コンテキストのポインタがクライアント・プロセス手段のアドレス空間コンテキストを指すようにする（ステップ５２４）。
【００５８】
セグメント・フォルトの処理メカニズム：図６は、本発明の好適な実施例によるセグメント・フォルトを処理する方法６００を図示するフロー図である。セグメント・フォルトを処理するメカニズムを実行する際、以下に述べるステップ（ステップ６０２〜６５０）を行う。これらステップはその優先順位で記載される。ただし、様々なステップは図示するのとは互いに異なる時点で行っても、同時に行ってもよいことは理解されなければならない。さらに、当業者には、ステップのうち一又は複数のステップを省けることは理解されるであろう。方法６００は、セグメント・フォルトが発生した時点で始まる（ステップ６０２）。さらに具体的には、ハードウェアはセグメント・キャッシュでの探索が失敗すると、ハードウェアはセグメント・フォルトを提示する。セグメント・フォルトが発生したら必ず、そのプロセスが代替アドレス空間コンテキストをもつかどうかの判定が行われる（ステップ６０４）。さらに具体的には、プロセスのアドレス空間コンテキストのポインタがチェックされて、それが非ヌル値に設定されているかどうかを判定する。プロセスが代替アドレス空間コンテキストをもたないと判定されたら、割込みハンドラがプロセスのセグメント・テーブル内でフォルトになったアドレスを探すことによって、フォルトを解決しようと試みる（ステップ６０８）。当然ながら、当業者には、セグメント・テーブルの検索は、前述したように、代わりにハードウェアで実施できることは理解されるであろう。次に割込みハンドラ（またはハードウェア）によるフォルトになった命令の解決の試みの成否が判定される（ステップ６１０）。割込みハンドラ（またはハードウェア）の試みが成功したら、プロセスのセグメント・テーブルからの変換情報がエントリとしてセグメント・キャッシュに供給されて、プロセッサにロードされ、さらにフォルトになった命令が再実行される（ステップ６１２）。
【００５９】
他方で、割込みハンドラ（またはハードウェア）がセグメント・テーブルを使ってフォルトを解決できなかったら、長い方の経路をとって、プロセスのディレクトリからフォルトを解決する（ステップ６１４）。この点に関し、従来のフォルト処理ソフトウェア・メソッドが呼び出されて、プロセスのディレクトリ内の変換情報を探索する。代わりの方法として、セグメント・テーブルの検索をハードウェアで行って、ハードウェアがセグメント・テーブル内に必要な変換情報を見つけられなかったら、割込みが発生して、フォルト処理ソフトウェアが呼び出される。いずれにしても、次にフォルト処理ソフトウェア・メソッドのフォルトを出した命令の解決の試みの成否が判定される（ステップ６１６）。フォルト処理ソフトウェア・メソッドがプロセスのディレクトリを使ってフォルトを解決できなかったら、エラーを返す（ステップ６１８）。他方で、フォルト処理ソフトウェア・メソッドの試みが成功したら、ディレクトリで見つかった情報を使って、プロセスのセグメント・テーブルを更新して、さらにフォルトとなった命令を再実行する（ステップ６２０）。当業者には、ステップ６２０でのフォルトとなった命令を再実行しても再度セグメント・フォルトになることは理解されるであろう。しかし、この２度目のセグメント・フォルトの発生は短い方の経路をとってステップ６１２に行くことになり、そこで変換情報がセグメント・キャッシュへのエントリとして後入れ先出しされ、さらにフォルトとなった命令をうまく再実行する。代わりの方法として、ステップ６２０で変換情報をセグメント・キャッシュへのエントリとしてロードすると同時に、プロセスのセグメント・テーブルを更新する。
【００６０】
ステップ６０４に戻って、プロセスが代替アドレス空間コンテキストをもつと判定されたら、カーネルは、フォルトとなったアドレスがアドレス空間のクライアント所有部分にあるかどうかを判定する（ステップ６３０）。フォルトとなったアドレスがアドレス空間のクライアント所有部分になければ、方法はステップ６０８に戻る。他方で、フォルトとなったアドレスがアドレス空間のクライアント所有部分にあれば、ステップ６３８〜６５０（これは一般的にそれぞれステップ６０８〜６２０の代替アドレス空間コンテキスト版に相当する）を行う。
【００６１】
アドレスがアドレス空間のクライアント所有部分にある場合、割込みハンドラはプロセスの代替セグメント・テーブル内でフォルトとなったアドレスを探すことによって、フォルトの解決を試みる（ステップ６３８）。最初にサーバ・プロセス手段がクライアント・アドレスを使ってストレージの参照を試みて、セグメント・フォルトが発生すると、割込みハンドラがプロセスの代替セグメント・テーブルを使ってフォルトの解決を試みることに留意する。その後のフォルトはクライアント・アドレスの新たなセグメントを参照するときに発生する。次に、割込みハンドラのフォルトとなった命令の解決の試みの成否が判定される（ステップ６４０）。割込みハンドラの試みが成功したら、プロセスの代替セグメント・テーブルからの変換情報がエントリとしてセグメント・キャッシュに供給され、それがプロセッサにロードされて、さらにフォルトとなった命令を再実行する（ステップ６４２）。プロセスのセグメント・テーブルの検索をハードウェアで行う代替法の場合、プロセスの代替セグメント・テーブルへのエントリがステップ６４２でプロセスのセグメント・テーブルにコピーされて、ハードウェアがそのコピーを見つけられるようにしなければならない。
【００６２】
他方で、割込みハンドラがプロセスの代替セグメント・テーブルを使ってフォルトを解決できない場合、長い方の経路をとって、プロセスの代替ディレクトリからフォルトを解決する（ステップ６４４）。この点に関し、従来のフォルト処理ソフトウェア・メソッドを呼び出して、プロセスの代替ディレクトリ内で変換情報を探索する。代わりの方法として、セグメント・テーブルの検索をハードウェアで行って、ハードウェアがプロセスのセグメント・テーブル内に必要な変換情報のコピーを見つけられない場合、割込みが発生して、フォルト処理ソフトウェアが呼び出される。いずれの場合も、次にフォルト処理ソフトウェア・メソッドのフォルトとなった命令の解決の試みの成否が判定される（ステップ６４６）。フォルト処理ソフトウェア・メソッドがプロセスの代替ディレクトリを使ってフォルトを解決できなかった場合、エラーを返す（ステップ６４８）。他方で、フォルト処理ソフトウェア・メソッドが成功したら、プロセスの代替ディレクトリで見つかった情報を使って、プロセスの代替セグメント・テーブルを更新し、さらにフォルトとなった命令を再実行する（ステップ６５０）。当業者には、ステップ６５０のフォルトとなった命令を再実行しても再度セグメント・フォルトとなることは理解されるであろう。しかし、この２度目のセグメント・フォルトの発生は短い方の経路をとってステップ６４２に行くこととなり、そこで変換情報がセグメント・キャッシュへのエントリとして後入れ先出しされ、さらにフォルトとなった命令をうまく再実行する。代わりの方法として、ステップ６５０で変換情報をセグメント・キャッシュへのエントリとしてロードすると同時に、プロセスの代替セグメント・テーブルを更新する。
【００６３】
デタッチ・メカニズム：カーネル１２３は、前述したように、サーバ・プロセス手段をクライアント・プロセス手段からデタッチさせる新たな機能も提供する。例えば、一時的に図２に戻ると、サーバ・プロセス手段２１４は、カーネルのデタッチ・メカニズムを呼び出すことによって、クライアント・プロセス手段２１６からデタッチできる。
【００６４】
ここで図７を参照すると、本発明の好適な実施例によるサーバ・プロセス手段がクライアント・プロセス手段からデタッチすることを可能にする方法７００は、サーバ・プロセス手段がデタッチ・メカニズムを呼び出す時点で始まる（ステップ７１０）。サーバ・プロセス手段は、クライアント・プロセス手段のローカル・ストレージへのアクセスがもう必要なくなったときに、この機能を呼び出す。サーバ・プロセス手段がクライアント・プロセス手段のローカル・ストレージへのアクセスを終了する場合、サーバ・プロセス手段はオペレーティング・システム・カーネルにデタッチ要求を出すことによって、カーネルのデタッチ・メカニズムを呼び出して「デタッチ」を行う。デタッチ・メカニズムを実行する際、以下に述べるステップ（ステップ７１２〜７２２）を行う。これらステップはその優先順位で記載される。ただし、様々なステップは図示するのとはお互い異なる時点で行っても、または同時に行ってもよい。さらに、当業者には、ステップのうち一又は複数のステップを省けることは理解されるであろう。いずれの場合も、デタッチしてしまえば、カーネル・モードでもユーザ・モードでも他のストレージをそれ以上参照することはできない。その時点で、サーバ・プロセス手段はそれ自体のローカル・ストレージにしかアクセスできない。
【００６５】
カーネルは、サーバ・プロセス手段がクライアント・プロセス手段にアタッチしていることを検証する（ステップ７１２）。カーネルはまた、サーバ・プロセス手段の代替アドレス空間コンテキストのポインタをヌルに設定する（ステップ７１４）。さらに、カーネルは、ステップ５２２で生成した（図５参照）、クライアント・プロセス・ローカル・アドレスをクライアント・プロセス手段のアドレス空間コンテキストに相関させたサーバ・プロセス手段のディレクトリからエントリを削除する（ステップ７１６）。
【００６６】
カーネルは、プロセスのスレッドを現在実行しているすべてのプロセッサのセグメント・キャッシュから関連するエントリをフラッシュする（ステップ７１８）。また、サーバ・プロセス手段のセグメント・テーブルの検索をハードウェアで行う代替法の場合、カーネルはサーバ・プロセス手段のセグメント・テーブル内の関連するエントリを無効にもする。これは、その代替法の場合、前述したように、クライアント・プロセス手段のセグメント・テーブル内のエントリがサーバ・プロセス手段のセグメント・テーブルにコピーされたかもしれないためである。
【００６７】
一般にフラッシングに関して、当業者には、プロセスは別のプロセスを観察しているとき（すなわち、アタッチされるとき）、観察されるプロセスが観察されるプロセスのアドレス空間に変更を行ったら、カーネルはそのプロセスを観察しているすべてのプロセスについて、一定のレベルの通知、セグメント・キャッシュのフラッシング等を行う役割を担うことは理解されるであろう。そうでなければ、観察しているプロセスは、観察されるプロセスが削除された、または別の何かと置換された古いアドレス変換情報を使っていることになろう。言い換えると、正しいデータは観察しているプロセスには見えないはずになっている、すなわち観察しているプロセスは観察されるプロセスが見るものとは異なるデータを見る。一般的に、プロセスがアドレス空間からセグメントまたはメモリを削除すると、プロセスの他のスレッドを実行しているプロセッサに同報通信することは技術上周知である。本発明の実施例によると、変換情報を消してしまう同報通信は、プロセスの他のスレッドを実行しているプロセッサだけでなく、観察しているプロセスを実行しているプロセッサにも行う。
【００６８】
ここで図７に戻ると、カーネルは、クライアント・プロセス手段のアドレス空間コンテキスト内の参照カウントも減少させる（ステップ７２０）。クライアント・プロセス手段がすでに終了している場合、ここでそのプロセスのローカル・アドレッシング構造のすべてを破棄させることになろう。
【００６９】
望ましいまたは必要な場合、カーネルは、サーバ・プロセス手段がクライアント・プロセス手段のローカル・ストレージへのアクセス権をもはやもたないことを監査するために必要な情報を生成する（ステップ７２２）。
【００７０】
当業者には本発明の範囲内で数多くの変型が可能であることは理解されるであろう。例えば、好適な実施例では、わずか２種類のプロセスと、それがアタッチする方法は１つだけしかなかった。しかし、当業者は、このメカニズムの他の拡張型があることを理解するであろう。これら拡張型には、同じサーバ・プロセス手段に逆にアタッチもするクライアント・プロセス手段の能力、または異なるサーバ・プロセス手段にアタッチするクライアント・プロセス手段の能力が含まれる。別の拡張型は複数の種類のプロセッサに関わり、各種類がプロセス・ローカル・アドレス範囲の固有の部分を所有し、プロセスのいずれかの種類がプロセスの別の種類にアタッチできるであろう。さらに別の拡張型では、各プロセスが複数の代替アドレス空間コンテキストへの複数のポインタをもつ場合、あるプロセスは複数の他の種類のプロセスに同時にアタッチできよう。ここでも、衝突を避けるために、各種類のプロセスはプロセス・ローカル・アドレス範囲の固有の部分を所有する。このように、本発明はその好適な実施例を参照しながら具体的に図示、説明してきたが、当業者には本発明の精神および範囲を逸脱することなく、それに形態および細部にこれら並びにその他の変更を行えることは理解されるであろう。
【図面の簡単な説明】
【００７１】
【図１】本発明の好適な実施例によるコンピュータ装置のブロック図である。
【図２】本発明の好適な実施例による複数の例示的な並行プロセスの各々に対応する様々なメカニズムを表すブロック図である。
【図３】本発明の好適な実施例による複数の例示的な並行プロセスの各々のアドレス空間内の割り当てを表すブロック図である。
【図４】本発明の好適な実施例によるアクセス属性に基づいてプロセスのアドレス空間をレイアウトする方法を表すフロー図である。
【図５】本発明の好適な実施例によるサーバ・プロセス手段にクライアント・プロセス手段へのアタッチを可能にする方法を表すフロー図である。
【図６】本発明の好適な実施例によるセグメント・フォルトを処理する方法を表すフロー図である。
【図７】本発明の好適な実施例によるサーバ・プロセス手段にクライアント・プロセス手段からのデタッチを可能にする方法を表すフロー図である。
【図１】
2007226786.tif 000003
【図２】
2007226786.tif 000004
【図３】
2007226786.tif 000005
【図４】
2007226786.tif 000006
【図５】
2007226786.tif 000007
【図６】
2007226786.tif 000008
【図７】
2007226786.tif 000009