(57)【要約】  装置は、処理スレッドを、それぞれが１つ又は複数の処理スレッドである１つ又は複数のプロセス・グループとして実行するためのマルチスレッド処理要素であって、それぞれのプロセス・グループは１つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、マルチスレッド処理要素と、プロセス・グループのうちの１つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートするための、メモリ・アドレス・トランスレーション回路とを備え、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する１つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付けることと、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止することとを行うように構成される。
2022502729.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
処理スレッドを、それぞれが１つ又は複数の処理スレッドである１つ又は複数のプロセス・グループとして実行するためのマルチスレッド処理要素であって、それぞれのプロセス・グループは前記１つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、マルチスレッド処理要素と、
前記プロセス・グループのうちの１つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートするための、メモリ・アドレス・トランスレーション回路と
を備え、前記メモリ・アドレス・トランスレーション回路は、
所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、前記所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する１つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付けることと、
前記所与の仮想メモリ・アドレスへのアクセスを、前記メモリ・アクセスをリクエストする前記処理スレッドの前記プロセス・グループに関連付けられる前記機能データ、及び前記パーミッション・データが、前記メモリ・アクセスをリクエストする前記処理スレッドの前記プロセス・グループの前記プロセス・グループ識別子を定義するかどうかの検出に依存して、阻止することと
を行うように構成される、装置。
【請求項２】
前記処理要素が、少なくともプロセス・グループ識別子をそれぞれのプロセス・グループに割り当てるよう動作可能であるプロセス・グループ・マネージャを実装するように構成される、請求項１に記載の装置。
【請求項３】
第１のプロセス・グループ・タイプについて、前記機能データが前記第１のタイプのすべてのプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義し、
第２のプロセス・グループ・タイプの所与のプロセス・グループについて、前記機能データが前記第２のプロセス・グループ・タイプの前記所与のプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義する、請求項１に記載の装置。
【請求項４】
前記第１のプロセス・グループ・タイプの所与のプロセス・グループについて、前記メモリ・アドレス・トランスレーション回路が、
（ｉ）前記機能データが前記所与の仮想メモリ・アドレスが前記所与のプロセス・グループについての前記許容可能なメモリ・アドレス範囲内にあることを示している
（ｉｉ）前記所与のプロセス・グループについての前記プロセス・グループ識別子が前記パーミッション・データによって定義されたプロセス・グループ識別子である
のいずれか、又は両方の場合、前記所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される、請求項３に記載の装置。
【請求項５】
前記第２のプロセス・グループ・タイプの所与のプロセス・グループについて、前記メモリ・アドレス・トランスレーション回路が、
（ｉ）前記機能データが前記所与の仮想メモリ・アドレスが前記所与のプロセス・グループについての前記許容可能なメモリ・アドレス範囲内にあることを示している
（ｉｉ）前記所与のプロセス・グループについての前記プロセス・グループ識別子が前記パーミッション・データによって定義されたプロセス・グループ識別子である
の両方の場合、前記所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される、請求項３に記載の装置。
【請求項６】
前記プロセス・グループ・マネージャが、アクセスが２つ以上のプロセス・グループ間で共有されるメモリ・アドレス範囲のために、前記メモリ・アドレス・トランスレーション回路に、前記２つ以上のプロセス・グループについての前記プロセス・グループ識別子を提供するよう動作可能であり、
前記メモリ・アドレス・トランスレーション回路は前記２つ以上のプロセス・グループについての前記プロセス・グループ識別子を前記パーミッション・データとして記憶するように構成される、請求項２に記載の装置。
【請求項７】
前記プロセス・グループ・マネージャが、所与のプロセス・グループによって、前記メモリ・アドレス・トランスレーション回路によって保持される前記所与のプロセス・グループについての前記プロセス・グループ識別子の前記パーミッション・データからの削除を開始することによりメモリ・アドレス範囲へのアクセスの取り消しを開始するように構成される、請求項６に記載の装置。
【請求項８】
前記メモリ・アドレス・トランスレーション回路が、メモリ管理ユニット、及びトランスレーション・ルックアサイド・バッファのうち、１つ又は両方を備える、請求項１に記載の装置。
【請求項９】
方法であって、
マルチスレッド処理要素を使用して、それぞれが１つ又は複数の処理スレッドである１つ又は複数のプロセス・グループとして、処理スレッドを実行することであって、それぞれのプロセス・グループは前記１つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、実行することと、
メモリ・アドレス・トランスレーション回路を使用して、前記プロセス・グループのうちの１つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートすることと
を含み、
前記メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、前記所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する１つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付け、
前記メモリ・アドレス・トランスレーション回路は、前記所与の仮想メモリ・アドレスへのアクセスを、前記メモリ・アクセスをリクエストする前記処理スレッドの前記プロセス・グループに関連付けられる前記機能データ、及び前記パーミッション・データが、前記メモリ・アクセスをリクエストする前記処理スレッドの前記プロセス・グループの前記プロセス・グループ識別子を定義するかどうかの検出に依存して、阻止する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示はメモリ・アクセス制御に関する。
【背景技術】
【０００２】
データ処理装置のいくつかの実例は、処理を、それぞれが１つ又は複数のスレッドである、１つ又は複数のいわゆるコンパートメント、又はプロセス・グループとして扱う。メモリ・アクセスは、いわゆるハイブリッド・コンパートメントの場合のアンビエント（汎用）機能（ｃａｐａｂｉｌｉｔｙ）、又はいわゆる純粋なコンパートメントの場合のコンパートメント固有機能のいずれかの、いわゆる機能データによって決定される。
【０００３】
そのようなコンパートメントの実例は、その内容が参照により本明細書に組み込まれる論文「ＣＨＥＲＩ：Ａ  Ｈｙｂｒｉｄ  Ｃａｐａｂｉｌｉｔｙ−Ｓｙｓｔｅｍ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｓｃａｌａｂｌｅ  Ｓｏｆｔｗａｒｅ  Ｃｏｍｐａｒｔｍｅｎｔａｌｉｚａｔｉｏｎ」、２０１５  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｓｅｃｕｒｉｔｙ  ａｎｄ  Ｐｒｉｖａｃｙ、２０１５年、５月１７〜２１日、ＩＳＢＮ  ９７８−１−４６７３−６９４９−７において議論されている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】「ＣＨＥＲＩ：Ａ  Ｈｙｂｒｉｄ  Ｃａｐａｂｉｌｉｔｙ−Ｓｙｓｔｅｍ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｓｃａｌａｂｌｅ  Ｓｏｆｔｗａｒｅ  Ｃｏｍｐａｒｔｍｅｎｔａｌｉｚａｔｉｏｎ」、２０１５  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｓｅｃｕｒｉｔｙ  ａｎｄ  Ｐｒｉｖａｃｙ、２０１５年、５月１７〜２１日、ＩＳＢＮ  ９７８−１−４６７３−６９４９−７
【非特許文献２】「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁
【発明の概要】
【発明が解決しようとする課題】
【０００５】
コンパートメントが共有されるメモリ・アドレス又は領域により互いに通信することに有用であり得る。しかしながら、次に、例えばメモリ・アドレス又は領域を別の目的に再割り当てすることなど、そのような共有アクセスを取り消すことができることが有用であると考えられる。いかなる時でも、共有メモリへのどの進行中の参照がまだ有効かどうか知ることは、システムにとって難しいことがあるため、これは困難な場合がある。
【課題を解決するための手段】
【０００６】
一実例の配置構成において、装置であって、処理スレッドを、それぞれが１つ又は複数の処理スレッドである１つ又は複数のプロセス・グループとして実行するためのマルチスレッド処理要素であって、それぞれのプロセス・グループは１つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、マルチスレッド処理要素と、リクエストされたメモリ・アクセスに応答してプロセス・グループのうちの１つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートするための、メモリ・アドレス・トランスレーション回路とを備え、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する１つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付けることと、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止することとを行うように構成される、装置が提供される。
【０００７】
別の実例の配置構成において、方法であって、マルチスレッド処理要素を使用して、それぞれが１つ又は複数の処理スレッドである１つ又は複数のプロセス・グループとして、処理スレッドを実行することであって、それぞれのプロセス・グループは１つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、実行することと、メモリ・アドレス・トランスレーション回路を使用して、プロセス・グループのうちの１つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートすることとを含み、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する１つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付け、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止する、方法が提供される。
【０００８】
本技術のさらなる個々の態様及び特徴は、添付の特許請求の範囲によって定義される。
【０００９】
本技法は、その実施例を参照して添付の図面に図示されるように、単に実例としてさらに説明される。
【図面の簡単な説明】
【００１０】
【図１】データ処理装置を概略的に示す図である。
【図２】有界ポインタを概略的に示す図である。
【図３】機能レジスタの使用を概略的に示す図である。
【図４】機能フィールドのセットを概略的に表現する図である。
【図５】トランスレーション・ルックアサイド・バッファ（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）及びメモリ管理ユニット（ＭＭＵ：ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）の使用を概略的に示す図である。
【図６】ＴＬＢ及びＭＭＵによる動作を図示する概略的なフローチャートである。
【図７】コンパートメントのセットを概略的に示す図である。
【図８】コンパートメント・マネージャによる共有メモリ領域の確立を概略的に示す図である。
【図９】共有メモリ領域の使用を概略的に示す図である。
【図１０】共有メモリ領域の再割り当てを概略的に示す図である。
【図１１】メモリ・アドレス・トランスレーション・ユニットを概略的に示す図である。
【図１２】メモリ・アクセス条件を概略的に示す図である。
【図１３】メモリ・アクセス条件を概略的に示す図である。
【図１４】共有メモリ領域の再割り当てを概略的に示す図である。
【図１５】共有メモリ領域の再割り当てを概略的に示す図である。
【図１６】共有メモリ領域の再割り当てを概略的に示す図である。
【図１７】個々の方法を図示する概略的なフローチャートである。
【図１８】個々の方法を図示する概略的なフローチャートである。
【図１９】個々の方法を図示する概略的なフローチャートである。
【図２０】個々の方法を図示する概略的なフローチャートである。
【図２１】個々の方法を図示する概略的なフローチャートである。
【図２２】シミュレータ実装形態を概略的に示す図である。
【発明を実施するための形態】
【００１１】
添付の図面を参照して実施例を議論する前に、以下に実施例の説明を与える。
【００１２】
一実例の実施例は、装置であって、処理スレッドを、それぞれが１つ又は複数の処理スレッドである１つ又は複数のプロセス・グループとして実行するためのマルチスレッド処理要素であって、それぞれのプロセス・グループは１つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、マルチスレッド処理要素と、リクエストされたメモリ・アクセスに応答してプロセス・グループのうちの１つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートするための、メモリ・アドレス・トランスレーション回路とを備え、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する１つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付けることと、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止することとを行うように構成される、装置を提供する。
【００１３】
本技法は、ＭＭＵ及び／又はＴＬＢなどのメモリ・アドレス・トランスレーション回路によって扱われる制御メカニズムを使用してプロセス・グループ間又はコンパートメント間のメモリ・アドレス又は領域の共有を可能にするため、共有されるアクセスは単純にメモリ・アドレス・トランスレーション回路によって保持されるパーミッション・データを変更することによって取り消すことができる。
【００１４】
例示の配置構成において、処理要素は、少なくともプロセス・グループ識別子をそれぞれのプロセス・グループに割り当てるよう動作可能であるプロセス・グループ・マネージャを実装するように構成される。例えば、プロセス・グループ・マネージャは、アクセスが２つ以上のプロセス・グループ間で共有されるメモリ・アドレス範囲のために、メモリ・アドレス・トランスレーション回路に、２つ以上のプロセス・グループについてのプロセス・グループ識別子を提供するよう動作可能であることなど、他の機能性を有することがある。そのような場合、メモリ・アドレス・トランスレーション回路を２つ以上のプロセス・グループについてのプロセス・グループ識別子をパーミッション・データとして記憶するように構成することができる。これは、プロセス・グループ・マネージャ全体がメモリ・アドレス・トランスレーション回路によって保持されるパーミッション・データを維持する便利な方法を提供することができる。いくつかの実例において、プロセス・グループ・マネージャは、所与のプロセス・グループによりメモリ・アドレス範囲へのアクセスの取り消しを開始し、所与のプロセス・グループがメモリ・アドレス・トランスレーション回路によって保持されるパーミッション・データから所与のプロセス・グループについてのプロセス・グループ識別子の削除を開始するように構成される。
【００１５】
実例の配置構成において、アクセスの許容度は様々なプロセス・グループ・タイプ間で異なっていてよい。例えば、第１のプロセス・グループ・タイプについて、機能データは第１のタイプのすべてのプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義し、第２のプロセス・グループ・タイプの所与のプロセス・グループについて、機能データは第２のプロセス・グループ・タイプの所与のプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義する。
【００１６】
いくつかの実例において、第１のプロセス・グループ・タイプ（例えばいわゆるハイブリッド・タイプなど）の所与のプロセス・グループについて、メモリ・アドレス・トランスレーション回路は、
（ｉ）機能データが所与の仮想メモリ・アドレスが所与のプロセス・グループについての許容可能なメモリ・アドレス範囲内にあることを示している
（ｉｉ）所与のプロセス・グループについてのプロセス・グループ識別子がパーミッション・データによって定義されたプロセス・グループ識別子である
のいずれか、又は両方の場合、所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される。
【００１７】
いくつかの実例において、第２のプロセス・グループ・タイプ（いわゆる純粋タイプなど）の所与のプロセス・グループについて、メモリ・アドレス・トランスレーション回路は、
（ｉ）機能データが所与の仮想メモリ・アドレスが所与のプロセス・グループについての許容可能なメモリ・アドレス範囲内にあることを示している
（ｉｉ）所与のプロセス・グループについてのプロセス・グループ識別子がパーミッション・データによって定義されたプロセス・グループ識別子である
の両方の場合、所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される。
【００１８】
例えば、メモリ・アドレス・トランスレーション回路は、メモリ管理ユニット、及びトランスレーション・ルックアサイド・バッファのうち１つ又は両方を備えることができる。
【００１９】
別の実例の実施例は、方法であって、マルチスレッド処理要素を使用して、それぞれが１つ又は複数の処理スレッドである１つ又は複数のプロセス・グループとして、処理スレッドを実行することであって、それぞれのプロセス・グループは１つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、実行することと、メモリ・アドレス・トランスレーション回路を使用して、プロセス・グループのうちの１つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートすることとを含み、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する１つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付け、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止する、方法を提供する。
【００２０】
次に図面を参照すると、図１は命令を処理するための処理パイプライン４を備えるデータ処理装置２の実例を概略的に図示している。この実例において、処理パイプライン４は、フェッチ工程６、デコード工程８、発行工程１０、実行工程又は処理要素１２、及びライトバック工程１４を含む複数のパイプライン工程を含むが、他のタイプの工程又は工程の組み合わせが提供されてもよいことを了解されたい。例えば、いくつかの実装形態ではレジスタのリネームを実施するためのリネーム工程を含むことができる。処理される命令は工程から工程へと移動し、命令がある工程で待ち状態にある間、別の命令はパイプライン４の異なる工程で待ち状態にあり得る。
【００２１】
フェッチ工程６はレベル１（Ｌ１：Ｌｅｖｅｌ  １）の命令キャッシュ２０から命令をフェッチする。フェッチ工程６は普通、連続する命令アドレスから逐次に命令をフェッチすることができる。しかしながら、フェッチ工程はまた分岐命令の結果を予測するための分岐予測器２２を有することがあり、フェッチ工程６は、分岐すると予測される場合は（非逐次）分岐ターゲット・アドレスから、又は分岐しないと予測される場合は次の連続するアドレスから、命令をフェッチすることができる。分岐予測器２２は、ある分岐が取られそうか、又は取られそうにないかを予測するための情報を格納するための１つ又は複数の分岐履歴テーブルを含むことができる。例えば分岐履歴テーブルは、前に実行された分岐の実際の結果を追跡するための、又は分岐についてなされた予測についての信頼度を表すカウンタを含むことができる。分岐予測器２２はまた分岐命令の前のターゲット・アドレスをキャッシュするための分岐ターゲット・アドレス・キャッシュ（ＢＴＡＣ：Ｂｒａｎｃｈ  Ｔａｒｇｅｔ  Ａｄｄｒｅｓｓ  Ｃａｃｈｅ）２４を含むことができ、それによって同一の分岐命令との後続の遭遇の際、これらが予測され得る。
【００２２】
フェッチされた命令は、命令をデコードしてデコード命令を生成するためのデコード工程８に渡される。デコード命令は適当な処理演算を実行するために実行工程１２を制御するための制御情報を含むことができる。キャッシュ２０からフェッチされたいくつかのより複雑な命令について、デコード工程８はこれらの命令を複数のデコード命令にマッピングすることができ、これはマイクロ命令（μｏｐ又はｕｏｐ）として知られ得る。したがって、Ｌ１の命令キャッシュ２０からフェッチされた命令とパイプラインの後方の工程で見られる命令との間には１対１関係がなくてもよい。一般的には、本出願における「命令」との称し方はマイクロ命令を含むものとして解釈するべきである。
【００２３】
デコード命令は発行工程１０に渡され、命令の実行に必要なオペランドが利用可能かどうかを判断し、オペランドが利用可能であれば実行のため命令を発行する。いくつかの実装形態はインオーダー処理をサポートしていることがあり、それによって、命令がＬ１の命令キャッシュ２０からフェッチされたプログラム順序に対応する順序での実行のために、命令が発行される。他の実装形態はアウトオブオーダー実行をサポートしていることがあり、それによって命令は、プログラムの順序とは異なる順序で実行工程１２に発行され得る。前方の命令がオペランドを待ってストールしている間、オペランドが利用可能であるプログラムの順序において後方の命令を先に実行できるため、アウトオブオーダー処理はパフォーマンスを改善するために有用であり得る。
【００２４】
発行工程１０は命令を実行工程１２に発行し、ここで命令は様々なデータ処理演算を実行するために、実行される。例えば、実行工程は、整数値に対して算術又は論理演算を実行するための算術／論理ユニット（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ／Ｌｏｇｉｃ  Ｕｎｉｔ）３０、浮動小数点形式で表現される値に対して演算を実行するための浮動小数点（ＦＰ：Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ）ユニット３２、及びレベル１（Ｌ１）のデータ・キャッシュ３６からのデータ値をレジスタ４０にロードするためのロード演算、又はレジスタ４０からのデータ値をＬ１のデータ・キャッシュ３６に格納するためのストア演算を実行するためロード／ストア・ユニット３４を含む複数の実行ユニット３０、３２、３４を含むことができる。これらは、設けることができる実行ユニットのいくつかの実例のタイプに過ぎず、多くの他の種類も設けることができることを了解されたい。処理演算を実行するために、実行工程１２はデータ値をレジスタ４０のセットから読み出すことができる。実行された命令の結果は次いでライトバック工程１４によってレジスタ４０に書き戻すことができる。
【００２５】
Ｌ１の命令キャッシュ２０及びＬ１のデータ・キャッシュ３６は、複数のキャッシュのレベルを含むキャッシュ・ヒエラルキの一部であってもよい。例えば、レベル２（Ｌ２：Ｌｅｖｅｌ  ２）のキャッシュ４４をやはり設けることができ、任意選択でさらなるレベルのキャッシュが設けられてもよい。この実例において、Ｌ２のキャッシュ４４はＬ１の命令キャッシュ２０とＬ１のデータ・キャッシュ３６との間で共有されるが、他の実例は別個のＬ２の命令及びデータ・キャッシュを有することができる。フェッチされることになる命令がＬ１の命令キャッシュ２０にない場合、Ｌ２のキャッシュ４４からフェッチすることができ、同様に命令がＬ２のキャッシュ４４にない場合、メイン・メモリ５０からフェッチすることができる。同様に、ロード命令に応答して、データはＬ１のデータ・キャッシュ３６にない場合Ｌ２のキャッシュ４４からフェッチすることができ、必要であればメモリ５０からフェッチすることができる。あらゆる既知のスキームがキャッシュ・ヒエラルキを管理するために使用され得る。
【００２６】
プログラム命令及びデータ値を参照するためにパイプライン４によって使用されるアドレスは、仮想アドレスであってもよいが、少なくともメイン・メモリ５０、及び任意選択でやはり少なくともキャッシュ・ヒエラルキのいくつかのレベルは、物理的にアドレッシングされ得る。したがってトランスレーション・ルックアサイド・バッファ（ＴＬＢ）５２が、メモリ管理ユニット（ＭＭＵ）５３の制御の下、パイプライン４によって使用される仮想アドレスを、キャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートするために与えることができる。例えば、ＴＬＢ５２はそれぞれが仮想アドレス空間の対応するページの仮想ページ・アドレス（「ＶＰＡ」）を指定する複数のエントリを含むことができ、仮想ページがアドレッシングする対応する物理ページ・アドレス（「ＰＰＡ」）は、対応するページ内の仮想アドレスを物理アドレスにトランスレートするためにマッピングされるべきである。例えば、仮想及び物理ページ・アドレスは対応する仮想アドレス及び物理アドレスの最上位部分に対応することができ、この時残りの最下位部分は仮想アドレスを物理アドレスにマッピングする際変更されないままである。アドレス・トランスレーション情報と同様に、それぞれのＴＬＢエントリはまた、アドレスのあるページがパイプライン４のあるモードでアクセス可能かどうかを示すことなどのアクセス・パーミッションを指定する何らかの情報（「ｐｅｒｍ」）を含むことができる。いくつかの実装形態において、ＴＬＢエントリはまた、キャッシュ・ヒエラルキのどのレベルが読み出し若しくは書き込み動作に応じて更新されるかを定義するキャッシュ・ポリシ情報（例えば、キャッシュがライトバック又はライトスルー・モードで動作すべきであるかどうか）、又は対応するページ内のアドレスへのデータ・アクセスがメモリ・システムによって、データ・アクセスがパイプライン４によって発行された順序と比べてリオーダすることができるかどうかを定義する情報、などのアドレスの対応するページの他のプロパティを定義することができる。
【００２７】
図１が単一のレベルのＴＬＢ５２を示す一方、トランスレーションのヒエラルキがＭＭＵ５３によって提供され得、及び／又はその複数のＴＬＢが提供され得、それによってレベル１（Ｌ１）のＴＬＢ５２は最近アクセスされた複数のページ内のアドレスをトランスレートするためのＴＬＢエントリを含むことができ、また多数のページについてのエントリを記憶するためにレベル２（Ｌ２）のＴＬＢを提供することができることを了解されたい。必要とされるエントリがＬ１のＴＬＢに存在しない場合、Ｌ２のＴＬＢから、又はヒエラルキ内のさらなるＴＬＢからフェッチすることができる。代替的に、いわゆる中間的な物理アドレス（ＩＰＡ：ｉｎｔｅｒｍｅｄｉａｔｅ  ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ）を使用することができ、それによって第１のトランスレーションは仮想アドレスからＩＰＡへのものであり、またトランスレーションの第２のレベルはＩＰＡから物理アドレスへのものである。この方法で複数のレベルのアドレス・トランスレーションを使用することができるため、例えば、第１のＴＬＢ（又はＴＬＢのヒエラルキ）は仮想アドレスを中間アドレスにトランスレートするために使用することができ、また１つ又は複数のさらなるＴＬＢを使用するアドレス・トランスレーションの第２のレベルが、次いで中間アドレスをキャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートすることができる。これは例えば、アドレス・トランスレーションの第１のレベルがオペレーティング・システムによって管理され得、アドレス・トランスレーションの第２のレベルがハイパーバイザによって管理され得る場合の仮想化をサポートするために有用であり得る。
【００２８】
図１では、図面の明瞭さのため、ＴＬＢ５２の単一の工程及びレベルが示されている。
【００２９】
アクセスされることになるページについて必要とされるエントリがＴＬＢのうちいずれにもない場合、メモリ５０のいわゆるページ・テーブルにアクセスするためにＭＭＵ５３によってページ・テーブル・ウォークを実施することができる。本技法では、あらゆる既知のＴＬＢ管理スキームを使用することができる。
【００３０】
図１に示すように、装置２は有界ポインタ・レジスタ６０のセットを有することができる。有界ポインタ・レジスタのセットは図１において汎用データ・レジスタ４０のセットとは物理的に別個であるように示されるが、一実装形態においては汎用データ・レジスタ及び有界ポインタ・レジスタの両方を提供するために同一の物理記憶装置が使用されてもよい。
【００３１】
それぞれの有界ポインタ・レジスタ６０は、アクセスされることになるデータ値のアドレスを決定するために使用され得るポインタ値６２、及び対応するポインタ６２を使用する際アドレスの許容範囲を指定する範囲情報６４を含む。有界ポインタ・レジスタ６０はまたポインタの使用に関して１つ又は複数のリストリクション／パーミッションを定義することができるリストリクション情報６６（パーミッション情報とも称する）を含むことができる。例えば、リストリクション６６は、ポインタ６２を使用し得る命令のタイプ、又はポインタが使用され得るパイプライン４のモードを制限するために使用することができる。したがって、範囲情報６４及びリストリクション情報６６は、ポインタ６２が使用できる機能Ｃ０−ＣＭ−１を定義すると考えられ得る。定義された機能以外でポインタ６２を使用する試行がなされると、エラーがトリガされ得る。範囲情報６４は例えば、ポインタがある既知の境界内に留まっており、重要又はセキュアな情報を含み得るメモリ・アドレス空間の他のエリアに迷い込んでいないことを保証することのために有用であり得る。汎用データ・レジスタ及び有界ポインタ・レジスタの両方のために同一の物理記憶装置が使用される一実装形態において、その時一実装形態においてポインタ値６２は例えば対応する汎用レジスタについて使用されるのと同一の記憶装置の位置に格納され得る。
【００３２】
実行工程１２は、マルチスレッド処理要素によって１つ又は複数の処理スレッドを実行するよう実装することができる。
【００３３】
図２は、許容範囲が、データ又は命令への認可されていないアクセスに対して保護するために使用される命令のタイプの実例を示す。図２の上部で示すように、特定の有界ポインタ・レジスタＰＲ（Ｐｏｉｎｔｅｒ  Ｒｅｇｉｓｔｅｒ）１は所与のポインタ値６２及び範囲情報６４を含み、この実例においては許容範囲の下位境界を定義する下位境界アドレス６８、及び許容範囲の上位境界を定義する上位境界アドレス６９を使用して指定されている。例えば、境界６８、６９はアドレス範囲８００００から８１０００を定義するために設定される。ある命令が有界ポインタ・レジスタＰＲ１参照し、ポインタ６２から決定されるアドレスがこの範囲の外にある場合、エラーがトリガされ得る。
【００３４】
例えば、図２のパートＡで示されるように、いくつかのシステムではポインタ・レジスタ６０内のポインタ６２の値を範囲情報６４によって指定される範囲の外にある値に設定しようとする試行があるとエラーがトリガされ得る（ここではポインタがアドレスを直接指定すると仮定している）。これはポインタ６２が指定された範囲の外のあらゆる値を取ることを回避し、それによって、ポインタを使用するあらゆるアクセスが許可された範囲内に安全にあることを保証することができる。代替的に、図２のパートＢで示されるように、命令がポインタ６２のアドレスによって特定される位置にアクセスしようと試行すると、その時そのアドレスが指定された範囲の外にある場合、エラーがトリガされ得る。したがって、ポインタ６２を指定された範囲の外の値に設定することがなお許容され得るが、そのポインタ・アドレスのデータ・アクセス（又はそのポインタから導出されるアドレス）が試行されると、その時そのアドレスが許可された範囲の外にある場合、エラーがトリガされ得る。図２のパートＡ及びパートＢに示される両方のタイプの命令に応じて、他のシステムがエラーをトリガすることもある。
【００３５】
範囲情報６４は異なる方法で設定することができ、設定されるやり方は実装形態の詳細であり、本技法は使用される具体的な方法に依拠しない。純粋に実例として、特権を与えられた命令、ユーザ空間コード、セキュアなコード、又はオペレーティング・システム若しくはハイパーバイザは、所与のポインタについて許容される範囲を指定することができる。例えば、命令セット・アーキテクチャは、所与のポインタ６２についての範囲情報６４を設定するための又は修正するための複数の命令を含むことができ、これらの命令の実行は、あるソフトウェア又はプロセッサ４のあるモード若しくは例外状態に制限することができる。範囲情報６４を設定するための又は修正するためのあらゆる既知の技法を使用することができる。
【００３６】
ポインタへの参照を行うある命令を実行する際に実行工程１２で使用され得る有界ポインタ格納要素６０のセットに加えて、プログラム・カウンタ機能（ＰＣＣ：Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ  Ｃａｐａｂｉｌｉｔｙ）レジスタ８０が、命令がレベル１の命令キャッシュ２０からフェッチされる際、フェッチ工程６で類似の機能性を提供するためにやはり使用されてもよい。特に、プログラム・カウンタ・ポインタはフィールド８２に格納され得、この時ＰＣＣ８０はまた、有界ポインタ格納要素６０のセット内のポインタのそれぞれに与えられる範囲及びリストリクション情報と同様に、範囲情報８４及び適当なリストリクション情報８６を与える。図１はデフォルト・データ機能（ＤＤＣ：Ｄｅｆａｕｌｔ  Ｄａｔａ  Ｃａｐａｂｉｌｉｔｙ）レジスタ９０及びシステム・アクセス機能（ＳＡＣ：Ｓｙｓｔｅｍ  Ａｃｃｅｓｓ  Ｃａｐａｂｉｌｉｔｙ）レジスタ９５をやはり概略的に図示しており、両方を以下で議論する。
【００３７】
図３は、タグ・ビットが個々のデータ・ブロックに関連付けられて、これらのデータ・ブロックが機能を表しているかどうか（すなわち、有界ポインタ及び関連付けられるリストリクション情報）、又は通常データを表しているかどうかを特定するためにどのように使用されるか概略的に図示している。特に、メモリ・アドレス空間１１０は、典型的には指定されたサイズを有することになる一連のデータ・ブロック１１５を格納することになる。純粋に図示のために、この実例において、それぞれのデータ・ブロックは１２８ビット含むと仮定する。それぞれのデータ・ブロック１１５に関連して、タグ・フィールド１２０が提供され、一実例ではこれはタグ・ビットと称される単一のビット・フィールドであり、関連付けられるデータ・ブロックが機能を表すことを特定するためにセットされ、関連付けられるデータ・ブロックが通常データを表し、ひいては機能として取り扱うことができないことを示すためにクリアされる。セットされた又はクリアな状態に関連付けられる実際の値は、実装形態によって異なっていてよいが、純粋に図示のため、一実例の実装形態においては、タグ・ビットが値１を有する場合、関連付けられるデータ・ブロックが機能であることを示し、タグ・ビットが値０を有する場合は関連付けられるデータ・ブロックが通常データを含むことを示すことを了解されたい。
【００３８】
機能が、図３で示される機能レジスタ１００などの有界ポインタ・レジスタ（機能レジスタとも称する）６０のうちの１つにロードされると、次にタグ・ビットは機能情報を伴って移動する。したがって、機能が機能レジスタ１００にロードされると、ポインタ１０２、範囲情報１０４及びリストリクション情報１０６（以降でパーミッション情報と称する）が機能レジスタにロードされることになる。加えて、その機能レジスタに関連して、又はその中の特定のビット・フィールドとして、タグ・ビット１０８はその内容が機能を表すことを特定するためにセットされることになる。同様に、機能がメモリに格納し戻される場合、関連するタグ・ビット１２０は機能が格納されるデータ・ブロックに関連付けられてセットされることになる。そのような手法によって、機能と通常データとを区別し、ひいては通常データを機能として使用することができないことを保証することが可能である。
【００３９】
図１に戻ると、本明細書で説明される技法によると、有界ポインタに関連付けられる通常の情報に加えて、その有界ポインタがアクセスを制御するために使用される対応するメモリ領域に関連付けられる第１のトークン値を含む取り消し可能な有界ポインタが生成され得る。さらには、メモリ領域の割り当てられたインスタンスに関連する取り消し可能な有界ポインタに関する使用のために、メモリ内のヘッダ位置に格納されるヘッダが設けられ、そのヘッダは、格納値が、取り消し可能な有界ポインタに関して使用される第１のトークン値に初期化される第１のトークン・フィールドを有する。ヘッダ位置は取り消し可能な有界ポインタによって与えられる範囲情報から導出可能であるように構成され、したがって有界ポインタがメモリ・アドレスを生成するために使用される時にヘッダが配置されることを可能にしている。割り当てられたメモリ領域が続いて解放される際、この時第１のトークン・フィールド内の格納値が修正される。
【００４０】
機能
高次のアプリケーションはＪＡＶＡ（登録商標）及びＪａｖａＳｃｒｉｐｔ（登録商標）などの「安全な」制約された実行環境で実行するよう構成することができるが、システムの低次のレイヤは一般的にハードウェア上で実際の実行へリンクを提供しなければならない。結果として、ほぼすべてのそのようなレイヤは現在Ｃ／Ｃ＋＋プログラミング言語で書かれており、典型的には信頼されている（しかし信頼できない）コード数千万行から成る。
【００４１】
悪意のある攻撃に対して強力で固有の免疫を与えるための基礎的なアーキテクチャを与えることが目的である。機能は、そのような戦略の一部を提供することができる。
【００４２】
機能データ・タイプは、１つ又は複数のアーキテクチャ的に定義されたリソースにアクセスするための権限の委任可能なトークンを表現している。機能は広義には３つのタイプに分かれる：
１）データ転送及び命令フェッチ用のメモリの範囲へのアクセスを許可するために使用されるメモリ機能
２）一定のシステム動作へのアクセスを許可するために使用されるシステム・アクセス機能
３）他の機能をオブジェクト・タイプでカプセル化するために使用されるシーリング機能
【００４３】
それぞれの機能は複数の論理フィールドを含んでおり、その一部は一定の機能タイプに存在するだけである。そのようなフィールドの実例を図４に概略的に示す。
【００４４】
機能レジスタは、機能を保持するため、及びメモリ・システムへの拡張を定義するために使用されるため、機能が汎用メモリに保持される場合に機能プロパティが強制される。命令は、機能をメモリからロード及びストアするため、メモリ内のデータ及び機能にアクセスするよう機能レジスタを使用するため、機能を使用して分岐するため、並びに新しい権利を作り出すことなく機能レジスタ内に保持される機能を操作するために提供され得る。
【００４５】
機能の使用に起因する制限は、既存のＭＭＵ及び例外レベル・ベースの制限によって強制される制限を上回る。機能の使用は、これらのメカニズムによって既に与えられている保護を弱めないように構成することができる。
【００４６】
アンビエント機能
アンビエント機能を定義する１つ又は複数の（例えば、３つの）アンビエント機能レジスタを与えることができる。これらの機構を使用して、機能拡張のアンビエント効果を、それぞれの例外レベルにおいて有効及び無効にすることができる。ある例外レベルにおいてアンビエント効果を有効にすることにより、アンビエント機能レジスタの効果を有効にし、例外エントリの振る舞い及びそのレベルへのリターンを修正し、自然にアドレス上で動作するいくつかの既存の命令の振る舞いを修正する。いくつかの実例において、３つのアンビエント機能レジスタが与えられる：
（ａ）プログラム・カウンタ機能（ＰＣＣ：Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ  Ｃａｐａｂｉｌｉｔｙ）レジスタ
これは命令フェッチの使用を制限する。ＰＣＣ境界及びパーミッションは、機能の分岐及びリターン命令を使用して、例外エントリ及びリターンの際に更新することができる。
（ｂ）デフォルト・データ機能（ＤＤＣ）レジスタ
ＰＣＣはプログラム・カウンタに対するデータ・アクセスに影響を及ぼす。他のデータ・アクセスは、デフォルト・データ機能の暗黙的な使用、又はベース・レジスタとしての機能の明示的な使用のいずれかにより制限される。
（ｃ）システム・アクセス機能（ＳＡＣ）レジスタ
システム・レジスタ及びシステム動作へのアクセスは、ＳＡＣレジスタ内に保持されるパーミッションによって制限することができる。
【００４７】
トランスレーション・ルックアサイド・バッファ及びメモリ管理ユニット
図１の装置において、なぜＭＭＵ５３が要求されるかの主な理由は、ＭＭＵ５３が現在ＴＬＢ５２のローカルに記憶されていないアドレス・トランスレーションを扱うからである。これが実行される方法を、以下でさらに議論する。これらの事項を扱うことについて、現在ＴＬＢ５２によって保持されていないトランスレーションについて、図５を参照すると、ＭＭＵ１３０はトランスレートされる仮想アドレス５００に関してＴＬＢからリクエスト５１０を受信し、要求される物理アドレス（ＰＡ：ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ）５３０を示すレスポンス５２０をＴＬＢ５２にリターンし、次いでこれはＴＬＢ５２によって出力される。一方、既にＴＬＢによってバッファされているトランスレーションは単純にＴＬＢによって出力され、一般的にはＴＬＢがＭＭＵ５３から取得しなければならないものよりもいくらか素早い。そのためシステムの残りの部分の観点から、ＴＬＢは要求されるトランスレーションを与えるが、これが発生する速度はトランスレーションが既にＴＬＢによってバッファされているかどうかに依存することがある。
【００４８】
これらの動作は図６のフローチャートによってやはり概略的に表現されており、ＶＡ５００をＴＬＢ５２に与えることによって対応するＰＡ５３０についてのリクエストを形成している（図６ではステップ６００として示される）。
【００４９】
言及したように、ＴＬＢはＶＡとＰＡとの間のトランスレーションのキャッシュ又はストアを含む。ＴＬＢが特定のＶＡからＰＡへのトランスレーションを記憶する基準は、ＴＬＢの動作について既知の技法にしたがって確立することができる。キャッシュされたトランスレーションは最近使用されたトランスレーション、頻繁に使用されるトランスレーション、及び／又は近々要求されると期待されるトランスレーション（最近アクセスされたＶＡに近いＶＡに関連するトランスレーションなど）を含むことができる。全体的に、ＴＬＢはすべての可能なＶＡからＰＡへのトランスレーションのセットのサブセットのキャッシュを含み、それによって特定のＶＡからＰＡへのトランスレーションが要求されると、トランスレーションが既にＴＬＢでキャッシュ内に保持されていることが見出すことができるか、又は見出すことができない状況である。
【００５０】
したがって、次のステップ６１０において、ＴＬＢは要求されたトランスレーションがＴＬＢによって本当に現在キャッシュされているか（「ヒット」）どうかを検出する。答えが「はい」の場合、制御はステップ６４０に渡り、そこでＰＡ５３０が要求されるメモリ・アクセスにおける使用のためにリターンされる。
【００５１】
答えが「いいえ」の場合、制御はステップ６２０に渡り、そこでＴＬＢ５２は要求されるＶＡ５１０を含むリクエストをＭＭＵ５３に送信する。ＭＭＵ５３は要求されたＶＡからＰＡへのトランスレーション（例えばいわゆるページ・テーブル・ウォーク（ＰＴＷ：ｐａｇｅ  ｔａｂｌｅ  ｗａｌｋ）技法を使用して）を導き、少なくともＶＡ５１０に対応するＰＡ５２０（及び本実例では、以下で議論されるいくつかのパーミッション・データ）をＴＬＢ１０２に送信し戻し、ステップ６３０でそれらはキャッシュ又はバッファされたトランスレーションとして記憶される。
【００５２】
最終的にステップ６４０で、ＴＬＢ５２はＴＬＢ５２に記憶されたトランスレーションを適用して出力ＰＡ５３０を与える。
【００５３】
コンパートメント
本実例の装置において、プロセスは１つ又は複数のいわゆるコンパートメントの集合としてモデル化される。例えば、実行工程１２はマルチスレッド処理要素によって、それぞれが１つ又は複数の処理スレッドである１つ又は複数のプロセス・グループ又はコンパートメントとして、処理スレッドを実行するよう実装され、それぞれのプロセス・グループ又はコンパートメントは１つ又は複数のプロセス・グループの中で一意であるプロセス・グループ・コンパートメント識別子（以下で議論されるＣＩＤ（ｃｏｍｐａｒｔｍｅｎｔ  ｉｄｅｎｔｉｆｉｅｒ））を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる。
【００５４】
コンパートメントはハイブリッド（ハイブリッド・コンパートメントすなわちＨＣ（ｈｙｂｒｉｄ  ｃｏｍｐａｒｔｍｅｎｔ））又は純粋（純粋なコンパートメントすなわちＰＣ（ｐｕｒｅ  ｃｏｍｐａｒｔｍｅｎｔ））であることができ、コンパートメント・マネージャ（ＣＭ：ｃｏｍｐａｒｔｍｅｎｔ  ｍａｎａｇｅｒ）のインスタンスによって管理される。コンパートメント・マネージャＣＭは信頼され、且つ信頼できるコンパートメントと考えられ、利用可能な仮想メモリ・アドレス範囲のほとんど又はすべてを見る能力を有している。したがって、例示の配置構成において、処理要素１２は、少なくともプロセス・グループ識別子をそれぞれのプロセス・グループに割り当てるよう動作可能であるプロセス・グループ・マネージャを実装するように構成される。
【００５５】
コンパートメントのそれぞれは、１つ又は複数のスレッドを含むことができる。スケジューリング可能なエンティティが、スレッドである。図７は、仮想メモリ・アドレス（ＶＭＡ：ｖｉｒｔｕａｌ  ｍｅｍｏｒｙ  ａｄｄｒｅｓｓ）空間７００内のそのような配置構成を概略的に図示している（描かれるように、左から右へアドレスが大きくなるように概略的に示される）。ユーザ空間のエンティティのみが可視化されていることに留意されたい。
【００５６】
ハイブリッド・コンパートメント（図７のＨＣ１、ＨＣ２など）について、データ・アクセスは上で議論した関連するＤＤＣによって限定される。ハイブリッド・コンパートメントは典型的にはアプリケーションによって使用することができ、アンビエント機能によって限定される。それらは機能を作成することができるが、これは必要事項ではない。
【００５７】
純粋なコンパートメント（図７のＰＣ１、ＰＣ２など）について、動作はその純粋なコンパートメントに特有の１つ又は複数の機能の具体的なセット内でエンコードされた範囲によって制限される。純粋なコンパートメントはポインタを採用せず、排他的に機能を使用する。
【００５８】
したがって、これらの実例では、第１の（ハイブリッド）プロセス・グループ・タイプについて、機能データは第１のタイプのすべてのプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義し、第２の（純粋）プロセス・グループ・タイプの所与のプロセス・グループについて、機能データは第２のプロセス・グループ・タイプの所与のプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義する。
【００５９】
コンパートメント化の実例の使用において、ある特徴を与えることができ、それにより例えば効率を向上させるために、共有メモリ又はメモリ領域を介してコンパートメントが互いに通信できるようにすることによって、システム・コールの数を削減することができる。要するに、２つ以上のコンパートメントがそのような共有メモリ又はメモリ領域にアクセスすることができる。
【００６０】
図８は、コンパートメント・マネージャＣＭ８００がコンパートメント８１０、８２０の提供だけではなく、複数のコンパートメントによってアクセス可能な仮想メモリ内の１つ又は複数の共有メモリ空間８３０の作成も監視する、そのような配置構成を概略的に図示している。
【００６１】
図９は、実例の純粋なコンパートメントＰＣ１とＰＣ２との間で共有されるメモリ領域ＳＭ１、並びにハイブリッド・コンパートメントＨＣ１とＨＣ２との間で共有される別の実例の共有メモリ空間ＳＭ２を概略的に図示している（図７のそれと類似のフォーマットで）。共有メモリ空間へのアクセスは、矢印９００などの矢印によって概略的に示されている。
【００６２】
本実施例は、本手法の基本的なバージョンの一定の特徴に対処している：
第１の特徴は、ハイブリッド・コンパートメント同士でメモリを共有するために、共有メモリが個々のＤＤＣによって形成される連続的な範囲内になければならないことである。
第２の特徴は、いったんメモリ領域が２つのコンパートメント同士で共有されてしまうと、共有メモリへのすべての支配的な参照のセットは未知であるため、安全なやり方で解放することができないことである。
【００６３】
有効な参照は（あらゆる特定の時点で）レジスタ内に記憶され、スタックにプッシュされるか、データとして保存することができる。したがって、共有メモリが解放されても、それに対して有効な参照は実行中のコードの何らかの部分によりこれらの形態のうちの１つとして保たれることができる。そのように保持される参照は、そのメモリ領域が重複するメモリ・アドレス範囲に再割り当てされた後でも、以前共有されていたがもはや共有されていないデータを変更するか、又は「スニッフする」（読み取る、又はサンプリングする）ことができる潜在的な方法を与えることになる。そのような結果は望ましくない「ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅ」状況と称されることがあり、図１０に概略的に図示されており、ここでは以前（しかし今は違う）認可されていたコンパートメント１０００が、今はＣＭ１０２０によってコンパートメント１０３０と１０４０との間での共有のために割り当てられている共有メモリ１０１０をスニッフ又はアクセスしていることを表現している。
【００６４】
本技法の実施例は、メモリ領域にアクセスするため、又はメモリ領域を共有するためにコンパートメントへのパーミッションを効果的に取り消すために取り消しメカニズムを提供することにより、これらの問題に対処している。１つの可能性のある代替的な実例の取り消しメカニズムは、メモリ領域をマッピング及びアンマッピングすることが頻繁に使用されて参照を取り消す高度なＭＭＵ構成を伴うことがある。しかしながら、この手法はコンパートメント・マネージャのコードの複雑性を増大させるため、また場合によってはＴＬＢ圧力（処理要求）を許容できないレベルまで上昇させることがあるため本実施例では使用されない。
【００６５】
したがって、本開示の実施例は、有効な参照を取り残さずにその数は知るという問題に対処するための、別の技法を提供することを目的としている。
【００６６】
コンパートメント識別子
コンパートメントはシステム内でいつも一意に特定することができる。これには、適当な識別子生成方法が使用される。コンパートメント識別子（ＣＩＤ）は、プロセスのインライン部分に関連しているということを除いて、ちょうどプロセス識別子（ＰＩＤ：ｐｒｏｃｅｓｓ  ｉｄｅｎｔｉｆｉｅｒ）に似ている。現在のＣＩＤは、レジスタに記憶されている。それぞれのＣＩＤは（これらの実例では）他の支配的なＣＩＤの中で一意である。
【００６７】
トランスレーション記述子（ＴＤ：ｔｒａｎｓｌａｔｉｏｎ  ｄｅｓｃｒｉｐｔｏｒ）
解決策の基本は、新しいトランスレーション記述子（ＴＤ）のフォーマットを拡張子として実装することである。そのような記述子は、そのメモリ範囲へのアクセスを有するコンパートメントを定義するために（例えば）せいぜい２つのＣＩＤを含むことができる。後に（例えば、純粋なコンパートメントに関連して）議論する少なくともいくつかの状況において、ＴＤにおいてＣＩＤがセットされていなければメモリはアクセス可能ではない。さらには、アーキテクチャは、アンビエント機能を含む機能を通じてストア及びロード動作が実行されている時、異なるメモリ・アクセスをチェックさせるよう変えられるべきである。
【００６８】
図１１はＴＬＢ５２’又はＭＭＵ５３’（例えばＴＬＢが使用されていない場合）の使用を概略的に図示しており、キャッシュ１１００において、それぞれＶＡからＰＡへのトランスレーションに関連付けられる１つ又は複数の属性１１０２をバッファしており、属性はＴＤを含んでいる。ＴＬＢ５２’及び／又はＭＭＵ５３’は、メモリ管理ユニット、及びトランスレーション・ルックアサイド・バッファのうち、１つ又は両方を備えるメモリ・アドレス・トランスレーション回路の使用の実例を提供する。
【００６９】
いくつかの実例において、ＴＬＢ５２’／ＭＭＵ５３’は、特定のメモリ・アドレス、ページ、又は領域へのアクセスを試行しているコンパートメントのＣＩＤ１１１０を入力として受信し、コントローラ１１２０を使用して記憶された属性を参照してアクセスが許容されるかどうかを検出することができる。
【００７０】
コントローラ１１２０によって行われたチェック及び得られるアクセス・パーミッションは、次のように実装することができる。
【００７１】
メモリ・アドレス・トランスレーション回路（ＴＬＢ及び／又はＭＭＵなど）は、プロセス・グループのうちの１つの処理スレッドによりリクエストされたメモリ・アクセスに応答して、仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートするように構成される。それはまた、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する１つ又は複数のプロセス・グループ識別子（ＣＩＤ）を定義するパーミッション・データ（ＴＤなど）を関連付けることと、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止することとを行うように構成される。
【００７２】
ハイブリッド・コンパートメント用のアクセス
試験は以下の通りである：［ＤＤＣに対するチェック］ＯＲ［ＣＩＤについてＭＭＵをチェック］
【００７３】
換言すると、図１２の表で示されるように、左２列のいずれか又は両方が真（アクセスが許容可能なＤＤＣ境界内にある；ＴＤがそのＣＩＤを定義している）である場合、アクセスは許容される。
【００７４】
提案される配置構成はハイブリッド・コンパートメントとのメモリ共有を単純化することができる。共有メモリはＤＤＣ境界の外側にあってもよいが、なおアクセス可能である。アクセスは、共有メモリが新しいＴＤによって記述され、且つＣＩＤが適当にセットされている場合、ＭＭＵによって付与される。共有メモリがＤＤＣ境界の外側にあり、且つＴＤがない場合、アクセスは拒否されることになる。
【００７５】
したがって、これらの実例では、第１の（ハイブリッド）プロセス・グループ・タイプの所与のプロセス・グループについて、メモリ・アドレス・トランスレーション回路は、
（ｉ）機能データが所与の仮想メモリ・アドレスが所与のプロセス・グループについての許容可能なメモリ・アドレス範囲内にあることを示している
（ｉｉ）所与のプロセス・グループについてのプロセス・グループ識別子がパーミッション・データによって定義されたプロセス・グループ識別子である
のいずれか、又は両方の場合、所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される。
【００７６】
純粋なコンパートメント用のアクセス
試験は以下の通りである：［機能に対するチェック］ＡＮＤ［ＭＭＵ及びセットされていればＣＩＤをチェック］
【００７７】
換言すると、図１３の表で示されるように、左２列の両方が真（アクセスが有効な機能によって定義されている；ＴＤがそのＣＩＤを定義している）であり、メモリ・アドレス又は領域が他の方法でマッピングされていない場合、アクセスは許容される。
【００７８】
本配置構成は、純粋なコンパートメントのことになると、セキュリティを強化又は強固にすることができる。以前は、そのようなコンパートメントは、有効な機能が存在した場合、データにアクセスすることができた。提案されるＴＤフォーマットはこの振る舞いを変える。
【００７９】
したがって、これらの実例では、第２の（純粋）プロセス・グループ・タイプの所与のプロセス・グループについて、メモリ・アドレス・トランスレーション回路は、
（ｉ）機能データが所与の仮想メモリ・アドレスが所与のプロセス・グループについての許容可能なメモリ・アドレス範囲内にあることを示している
（ｉｉ）所与のプロセス・グループについてのプロセス・グループ識別子がパーミッション・データによって定義されたプロセス・グループ識別子である
の両方の場合、所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される。
【００８０】
これらの試験についてのＭＭＵの使用
この配置構成は、アクセス・チェックを提供し、ＭＭＵを低次のレイヤ・アクセス・コントローラというよりは（先に提案したＭＭＵの場合のように）、上で議論したパーミッション特徴への等価なパーミッション・プロバイダとして取り扱う。
【００８１】
実例−図１４〜図１６
次に、これらの技法の実例を、コンパートメント・マネージャ１４００が、仮想メモリ境界Ａ、Ｂによって定義される共有メモリ領域１４１０へのアクセスを作成して監視する図１４〜図１６を参照して説明する。共有メモリ領域へのアクセスは、属性データ１１０２が調べられるＴＬＢ５２’／ＭＭＵ５３’によるメモリ・アドレスのトランスレーションを要求する。図１４〜図１６では、ＴＤのＣＩＤに関連して上で議論した試験のみを図示している。
【００８２】
図１４において、共有メモリ領域１４１０が、それぞれＣＩＤ１及びＣＩＤ２のＣＩＤを有するコンパートメント１４２０、１４３０間で共有されるように確立されている。ＴＤは「ＣＩＤ１又はＣＩＤ２」を指定しているため、コンパートメント１４２０、１４３０によるあらゆるアクセスは（ＣＩＤに関連する試験の部分の観点から）許容可能である。
【００８３】
図１５において、共有メモリが、それぞれＣＩＤ３及びＣＩＤ４のＣＩＤを有するコンパートメント１５００、１５１０に再割り当てされている。次も、ＴＤは「ＣＩＤ１又はＣＩＤ２」を指定しているため、コンパートメント１５００、１５１０によるあらゆるアクセスは（ＣＩＤに関連する試験の部分の観点から）許容可能である。しかしながら、コンパートメント１４２０によってＣＩＤ＝ＣＩＤ１で試行されるアクセスは、メモリ・トランスレーションで実施されるＣＩＤ試験に失敗し、許可されない。
【００８４】
この方法では、共有メモリは正常に再割り当てされている。コンパートメント１４２０に与えられた以前のパーミッションは、共有メモリへのあらゆる未解決の参照を特定して配置する必要なく、共有メモリ領域に関連付けられるＴＤを補正することにより除去されている。
【００８５】
さらなる実例が図１６に図示されており、ここではメモリ領域１４１０の共有される性質が取り消されるため、アクセスはＣＩＤ＝ＣＩＤ３のコンパートメント１５００のみに許可される。コンパートメント１４２０、１５１０（又は実際には他のすべてのコンパートメント）によるあらゆる試行されるアクセスが、メモリ・トランスレーションをリクエストするコンパートメントのＣＩＤとのＴＤ比較の失敗のために許容されない。
【００８６】
図１７及び図１８はこれらの処理を要約する概略的なフローチャートである。
【００８７】
図１７はハイブリッド・コンパートメントに言及する。ステップ１７１０において、メモリ・アクセスは関連するＤＤＣによってセットされる境界を考慮に入れて許容可能かどうかについてチェックされる。（ステップ１７１０において）答えが「はい」の場合、アクセスは許容される。そうではない場合、ステップ１７２０においてＭＭＵ又はＴＬＢによって、ＣＩＤがＴＤによって指定される１つ又は複数のＣＩＤのグループによってカバーされるかどうかについてチェックがなされる。（ステップ１７３０において）「はい」の場合アクセスは許容される。そうではない場合、アクセスは許容されない。
【００８８】
図１８は、純粋なコンパートメントについて言及する。ステップ１８０において、アクセスを行っているコンパートメントに関連する機能が、有効性についてチェックされる。（ステップ１８１０において）有効であれば、制御は１８２０に渡る。そうではない場合、アクセスは許容されない。ステップ１８２０において、リクエストを行っているコンパートメントのＣＩＤは、ＴＬＢ／ＭＭＵによってＴＤに対してチェックされる。（ステップ１８３０において）ＣＩＤがＴＤによって指定された１つ又は複数によってカバーされる場合、アクセスは許容される。そうではない場合、アクセスは許容されない。
【００８９】
潜在的な恩恵
上で議論したように、共有メモリの割り当ては、有効な参照がなお存在していても、ＴＤフォーマットを変更することにより容易に取り消すことができる。これに加えて、ＣＩＤが新しいＴＤフォーマットで適切にセットされる場合は、いつでもＶＭＡ範囲を再使用することができる。共有メモリはいつでも取り消すことができるが、実際には共有の一方にマッピングを保ったままである（そのため例えばＣＩＤ３とＣＩＤ４との間の共有メモリはＣＩＤ４に関する限り取り消すことができるが、ＣＩＤ３についてはＣＩＤ３だけを指定するようＴＤを変更することにより単純に維持される）。
【００９０】
とにかく、すべてのメモリ・アクセスがアドレス・トランスレーションを経るため、本解決策はパフォーマンス・ペナルティを持たない。
【００９１】
ＴＤフォーマットは潜在的にＴＬＢ管理を単純化し、潜在的にＴＬＢフラッシュを減らすことにつながる。純粋なコンパートメントは単一のＴＬＢエントリによって説明され、アクセス・タイプは機能内でエンコードされる。ハイブリッド・コンパートメントはメモリ１種類につき１ＴＬＢエントリを持つことができ、アクセス・タイプはＭＭＵによって強制される。
【００９２】
ＴＤのポピュレーション
図１９を参照すると、実例の配置構成において、コンパートメント・マネージャ（又はプロセス・グループ・マネージャ）は、メモリの共有を監視するために責任を負うプロセスとして動作する。いくつかの実例において、ＣＭ自身はＴＤフィールドをポピュレートすることができ、又は他の実例において、それはＴＤフィールドをポピュレートするようカーネルにリクエストを行うための特権を有するエンティティである。ＣＭ以外のコンパートメントは（実例の配置構成において）、ＴＤフィールドをポピュレートするため又はこれを行うようカーネルにリクエストするための特権を持たない。
【００９３】
２つ以上のプロセス・グループ間でアクセスが共有されるメモリ・アドレス範囲について、ＣＭは（ステップ１９００において）メモリ・アドレス・トランスレーション回路に２つ以上のプロセス・グループについてのプロセス・グループ識別子を与えるか、又は与えるようカーネルにリクエストを行うことができる；メモリ・アドレス・トランスレーション回路を２つ以上のプロセス・グループについてのプロセス・グループ識別子をパーミッション・データとして記憶するように構成することができる（ステップ１９１０において）。これは、共有メモリ領域を確立することの一部として実施することができる。
【００９４】
同様に、ＣＭ（プロセス・グループ・マネージャ）は、所与のプロセス・グループによりメモリ・アドレス範囲へのアクセスの取り消しを開始し（図２０のステップ２０００において）、メモリ・アドレス・トランスレーション回路によって保持されるパーミッション・データから所与のプロセス・グループについてのプロセス・グループ識別子の削除を開始することにより（ステップ２０１０において）構成される。
【００９５】
図２１は、方法であって、（ステップ２１００において）マルチスレッド処理要素を使用して、それぞれが１つ又は複数の処理スレッドである１つ又は複数のプロセス・グループとして、処理スレッドを実行することであって、それぞれのプロセス・グループは１つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、実行することと、（ステップ２１１０において）メモリ・アドレス・トランスレーション回路を使用して、プロセス・グループのうちの１つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートすることとを含み、メモリ・アドレス・トランスレーション回路は、（ステップ２１２０において）所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する１つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付け、メモリ・アドレス・トランスレーション回路は、（ステップ２１３０において）所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止する、方法を図示する概略的なフローチャートである。
【００９６】
図２２は、使用され得るシミュレータの実装形態の図である。先に説明された実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本技法を実装している一方、本明細書で説明される実施例にしたがっており、コンピュータ・プログラムの使用を通じて実装される命令実行環境を提供することも可能である。
【００９７】
そのようなコンピュータ・プログラムは、それらがハードウェア・アーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、しばしばシミュレータと称される。シミュレータ・コンピュータ・プログラムの種類としては、エミュレータ、仮想マシン、モデル、及びダイナミック・バイナリ変換器を含むバイナリ変換器が挙げられる。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティング・システム２２２０を実行させ、シミュレータ・プログラム２２１０をサポートする、ホスト・プロセッサ２２３０上で実行することができる。いくつかの配置構成において、ハードウェアと提供される命令実行環境との間に複数のシミュレーションのレイヤ、及び／又は同一のホスト・プロセッサ上に設けられる複数の別個の命令実行環境があってもよい。歴史的には、適度な速度で実行するシミュレータ実装形態を提供するためにはパワーのあるプロセッサが要求されてきたが、そのような手法は一定の状況下で正当化されてもよく、例えば互換性又は再利用目的のために別のプロセッサにとってネイティブなコードを実行する所望がある場合などである。例えば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされていない追加的な機能性を伴う命令実行環境を提供すること、又は典型的には異なるハードウェア・アーキテクチャに関連付けられる命令実行環境を提供することができる。シミュレーションの概略は「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁に示されている。
【００９８】
実施例が特定のハードウェア構築物又は特徴を参照して以前に説明されてきた範囲で、シミュレートされる実施例において等価な機能性が適切なソフトウェア構築物又は特徴によって提供され得る。例えば、特定の回路がコンピュータ・プログラム・ロジックとしてシミュレートされる実施例に実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアが、ソフトウェア・データ構造体としてシミュレートされた実施例に実装されてもよい。以前に説明された実施例において参照されるハードウェア要素の１つ又は複数がホスト・ハードウェアに存在する配置構成（例えば、ホスト・プロセッサ２２３０）において、いくつかのシミュレートされる実施例は適切であればホスト・ハードウェアを利用することができる。
【００９９】
シミュレータ・プログラム２２１０はコンピュータ可読記憶媒体（非一時的媒体であってもよい）に記憶することができ、ターゲット・コード２２００（アプリケーション、オペレーティング・システム、及びハイパーバイザを含み得る）にプログラム・インターフェース（命令実行環境）を提供するが、ターゲット・コード２２００はシミュレータ・プログラム２２１０によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同一のものである。したがって、上述の機能性を含むターゲット・コード２２００のプログラム命令は、命令実行環境内からシミュレータ・プログラム２２１０を使用して実行することができ、それによって、上で議論した装置のハードウェア特徴を実際には有していないホスト・コンピュータ２２３０がこれらの特徴をエミュレートすることができる。
【０１００】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置構成又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイス（上で議論したような処理要素など）は機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【０１０１】
本技法の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本技法はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本技法の範囲及び精神を逸脱することなく、その様々な変形、付加、及び修正がそこになされ得ることを理解されたい。例えば、本技法の範囲を逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組み合わせが可能である。
【図１】
2022502729.tif 000003
【図２】
2022502729.tif 000004
【図３】
2022502729.tif 000005
【図４】
2022502729.tif 000006
【図５】
2022502729.tif 000007
【図６】
2022502729.tif 000008
【図７】
2022502729.tif 000009
【図８】
2022502729.tif 000010
【図９】
2022502729.tif 000011
【図１０】
2022502729.tif 000012
【図１１】
2022502729.tif 000013
【図１２】
2022502729.tif 000014
【図１３】
2022502729.tif 000015
【図１４】
2022502729.tif 000016
【図１５】
2022502729.tif 000017
【図１６】
2022502729.tif 000018
【図１７】
2022502729.tif 000019
【図１８】
2022502729.tif 000020
【図１９】
2022502729.tif 000021
【図２０】
2022502729.tif 000022
【図２１】
2022502729.tif 000023
【図２２】
2022502729.tif 000024
【国際調査報告】
2022502729.tif 000025
2022502729.tif 000026
2022502729.tif 000027