(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-23
(45)【発行日】2024-01-31
(54)【発明の名称】メモリ・アクセス制御
(51)【国際特許分類】
G06F 12/14 20060101AFI20240124BHJP
G06F 12/1027 20160101ALI20240124BHJP
G06F 12/0842 20160101ALI20240124BHJP
【FI】
G06F12/14 510D
G06F12/1027
G06F12/0842
(21)【出願番号】P 2021510390
(86)(22)【出願日】2019-08-23
(86)【国際出願番号】 GB2019052373
(87)【国際公開番号】W WO2020079387
(87)【国際公開日】2020-04-23
【審査請求日】2022-08-16
(32)【優先日】2018-10-15
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ペッツ、タマス
【審査官】上島 拓也
(56)【参考文献】
【文献】米国特許出願公開第2015/0150145(US,A1)
【文献】特表2018-525749(JP,A)
【文献】特開平02-105240(JP,A)
【文献】国際公開第2008/155841(WO,A1)
【文献】特開2000-276405(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/14
G06F 12/1027
G06F 12/0842
(57)【特許請求の範囲】
【請求項1】
装置であって、
処理スレッドを、それぞれが1つ又は複数の処理スレッドである1つ又は複数のプロセス・グループとして実行するためのマルチスレッド処理要素であって、それぞれのプロセス・グループは前記1つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、マルチスレッド処理要素と、
前記プロセス・グループのうちの1つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートするための、メモリ・アドレス・トランスレーション回路と
を備え、前記メモリ・アドレス・トランスレーション回路は、
所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、前記所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する1つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付けることと、
前記所与の仮想メモリ・アドレスへのアクセスを、前記メモリ・アクセスをリクエストする前記処理スレッドの前記プロセス・グループに関連付けられる前記機能データ、及び前記パーミッション・データが、前記メモリ・アクセスをリクエストする前記処理スレッドの前記プロセス・グループの前記プロセス・グループ識別子を定義するかどうかの検出に依存して、阻止することと
を行うように構成さ
れ、
第1のプロセス・グループ・タイプについて、前記機能データが前記第1のプロセス・グループ・タイプのすべてのプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義し、
第2のプロセス・グループ・タイプの所与のプロセス・グループについて、前記機能データが前記第2のプロセス・グループ・タイプの前記所与のプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義する、装置。
【請求項2】
前記処理要素が、少なくともプロセス・グループ識別子をそれぞれのプロセス・グループに割り当てるよう動作可能であるプロセス・グループ・マネージャを実装するように構成される、請求項1に記載の装置。
【請求項3】
前記第1のプロセス・グループ・タイプの所与のプロセス・グループについて、前記メモリ・アドレス・トランスレーション回路が、
(i)前記機能データが前記所与の仮想メモリ・アドレスが前記所与のプロセス・グループについての前記許容可能なメモリ・アドレス範囲内にあることを示している
(ii)前記所与のプロセス・グループについての前記プロセス・グループ識別子が前記パーミッション・データによって定義されたプロセス・グループ識別子である
のいずれか、又は両方の場合、前記所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される、請求項
1に記載の装置。
【請求項4】
前記第2のプロセス・グループ・タイプの所与のプロセス・グループについて、前記メモリ・アドレス・トランスレーション回路が、
(i)前記機能データが前記所与の仮想メモリ・アドレスが前記所与のプロセス・グループについての前記許容可能なメモリ・アドレス範囲内にあることを示している
(ii)前記所与のプロセス・グループについての前記プロセス・グループ識別子が前記パーミッション・データによって定義されたプロセス・グループ識別子である
の両方の場合、前記所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される、請求項
1に記載の装置。
【請求項5】
前記プロセス・グループ・マネージャが、アクセスが2つ以上のプロセス・グループ間で共有されるメモリ・アドレス範囲のために、前記メモリ・アドレス・トランスレーション回路に、前記2つ以上のプロセス・グループについての前記プロセス・グループ識別子を提供するよう動作可能であり、
前記メモリ・アドレス・トランスレーション回路は前記2つ以上のプロセス・グループについての前記プロセス・グループ識別子を前記パーミッション・データとして記憶するように構成される、請求項2に記載の装置。
【請求項6】
前記プロセス・グループ・マネージャが、所与のプロセス・グループによって、前記メモリ・アドレス・トランスレーション回路によって保持される前記所与のプロセス・グループについての前記プロセス・グループ識別子の前記パーミッション・データからの削除を開始することによりメモリ・アドレス範囲へのアクセスの取り消しを開始するように構成される、請求項
5に記載の装置。
【請求項7】
前記メモリ・アドレス・トランスレーション回路が、メモリ管理ユニット、及びトランスレーション・ルックアサイド・バッファのうち、1つ又は両方を備える、請求項1に記載の装置。
【請求項8】
方法であって、
マルチスレッド処理要素を使用して、それぞれが1つ又は複数の処理スレッドである1つ又は複数のプロセス・グループとして、処理スレッドを実行することであって、それぞれのプロセス・グループは前記1つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、実行することと、
メモリ・アドレス・トランスレーション回路を使用して、前記プロセス・グループのうちの1つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートすることと
を含み、
前記メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、前記所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する1つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付け、
前記メモリ・アドレス・トランスレーション回路は、前記所与の仮想メモリ・アドレスへのアクセスを、前記メモリ・アクセスをリクエストする前記処理スレッドの前記プロセス・グループに関連付けられる前記機能データ、及び前記パーミッション・データが、前記メモリ・アクセスをリクエストする前記処理スレッドの前記プロセス・グループの前記プロセス・グループ識別子を定義するかどうかの検出に依存して、阻止
し、
第1のプロセス・グループ・タイプについて、前記機能データが前記第1のプロセス・グループ・タイプのすべてのプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義し、
第2のプロセス・グループ・タイプの所与のプロセス・グループについて、前記機能データが前記第2のプロセス・グループ・タイプの前記所与のプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義する、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示はメモリ・アクセス制御に関する。
【背景技術】
【0002】
データ処理装置のいくつかの実例は、処理を、それぞれが1つ又は複数のスレッドである、1つ又は複数のいわゆるコンパートメント、又はプロセス・グループとして扱う。メモリ・アクセスは、いわゆるハイブリッド・コンパートメントの場合のアンビエント(汎用)機能(capability)、又はいわゆる純粋なコンパートメントの場合のコンパートメント固有機能のいずれかの、いわゆる機能データによって決定される。
【0003】
そのようなコンパートメントの実例は、その内容が参照により本明細書に組み込まれる論文「CHERI:A Hybrid Capability-System Architecture for Scalable Software Compartmentalization」、2015 IEEE Symposium on Security and Privacy、2015年、5月17~21日、ISBN 978-1-4673-6949-7において議論されている。
【先行技術文献】
【非特許文献】
【0004】
【文献】「CHERI:A Hybrid Capability-System Architecture for Scalable Software Compartmentalization」、2015 IEEE Symposium on Security and Privacy、2015年、5月17~21日、ISBN 978-1-4673-6949-7
【文献】「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁
【発明の概要】
【発明が解決しようとする課題】
【0005】
コンパートメントが共有されるメモリ・アドレス又は領域により互いに通信することに有用であり得る。しかしながら、次に、例えばメモリ・アドレス又は領域を別の目的に再割り当てすることなど、そのような共有アクセスを取り消すことができることが有用であると考えられる。いかなる時でも、共有メモリへのどの進行中の参照がまだ有効かどうか知ることは、システムにとって難しいことがあるため、これは困難な場合がある。
【課題を解決するための手段】
【0006】
一実例の配置構成において、装置であって、処理スレッドを、それぞれが1つ又は複数の処理スレッドである1つ又は複数のプロセス・グループとして実行するためのマルチスレッド処理要素であって、それぞれのプロセス・グループは1つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、マルチスレッド処理要素と、リクエストされたメモリ・アクセスに応答してプロセス・グループのうちの1つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートするための、メモリ・アドレス・トランスレーション回路とを備え、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する1つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付けることと、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止することとを行うように構成される、装置が提供される。
【0007】
別の実例の配置構成において、方法であって、マルチスレッド処理要素を使用して、それぞれが1つ又は複数の処理スレッドである1つ又は複数のプロセス・グループとして、処理スレッドを実行することであって、それぞれのプロセス・グループは1つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、実行することと、メモリ・アドレス・トランスレーション回路を使用して、プロセス・グループのうちの1つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートすることとを含み、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する1つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付け、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止する、方法が提供される。
【0008】
本技術のさらなる個々の態様及び特徴は、添付の特許請求の範囲によって定義される。
【0009】
本技法は、その実施例を参照して添付の図面に図示されるように、単に実例としてさらに説明される。
【図面の簡単な説明】
【0010】
【
図3】機能レジスタの使用を概略的に示す図である。
【
図4】機能フィールドのセットを概略的に表現する図である。
【
図5】トランスレーション・ルックアサイド・バッファ(TLB:translation lookaside buffer)及びメモリ管理ユニット(MMU:memory management unit)の使用を概略的に示す図である。
【
図6】TLB及びMMUによる動作を図示する概略的なフローチャートである。
【
図7】コンパートメントのセットを概略的に示す図である。
【
図8】コンパートメント・マネージャによる共有メモリ領域の確立を概略的に示す図である。
【
図9】共有メモリ領域の使用を概略的に示す図である。
【
図10】共有メモリ領域の再割り当てを概略的に示す図である。
【
図11】メモリ・アドレス・トランスレーション・ユニットを概略的に示す図である。
【
図12】メモリ・アクセス条件を概略的に示す図である。
【
図13】メモリ・アクセス条件を概略的に示す図である。
【
図14】共有メモリ領域の再割り当てを概略的に示す図である。
【
図15】共有メモリ領域の再割り当てを概略的に示す図である。
【
図16】共有メモリ領域の再割り当てを概略的に示す図である。
【
図17】個々の方法を図示する概略的なフローチャートである。
【
図18】個々の方法を図示する概略的なフローチャートである。
【
図19】個々の方法を図示する概略的なフローチャートである。
【
図20】個々の方法を図示する概略的なフローチャートである。
【
図21】個々の方法を図示する概略的なフローチャートである。
【
図22】シミュレータ実装形態を概略的に示す図である。
【発明を実施するための形態】
【0011】
添付の図面を参照して実施例を議論する前に、以下に実施例の説明を与える。
【0012】
一実例の実施例は、装置であって、処理スレッドを、それぞれが1つ又は複数の処理スレッドである1つ又は複数のプロセス・グループとして実行するためのマルチスレッド処理要素であって、それぞれのプロセス・グループは1つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、マルチスレッド処理要素と、リクエストされたメモリ・アクセスに応答してプロセス・グループのうちの1つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートするための、メモリ・アドレス・トランスレーション回路とを備え、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する1つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付けることと、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止することとを行うように構成される、装置を提供する。
【0013】
本技法は、MMU及び/又はTLBなどのメモリ・アドレス・トランスレーション回路によって扱われる制御メカニズムを使用してプロセス・グループ間又はコンパートメント間のメモリ・アドレス又は領域の共有を可能にするため、共有されるアクセスは単純にメモリ・アドレス・トランスレーション回路によって保持されるパーミッション・データを変更することによって取り消すことができる。
【0014】
例示の配置構成において、処理要素は、少なくともプロセス・グループ識別子をそれぞれのプロセス・グループに割り当てるよう動作可能であるプロセス・グループ・マネージャを実装するように構成される。例えば、プロセス・グループ・マネージャは、アクセスが2つ以上のプロセス・グループ間で共有されるメモリ・アドレス範囲のために、メモリ・アドレス・トランスレーション回路に、2つ以上のプロセス・グループについてのプロセス・グループ識別子を提供するよう動作可能であることなど、他の機能性を有することがある。そのような場合、メモリ・アドレス・トランスレーション回路を2つ以上のプロセス・グループについてのプロセス・グループ識別子をパーミッション・データとして記憶するように構成することができる。これは、プロセス・グループ・マネージャ全体がメモリ・アドレス・トランスレーション回路によって保持されるパーミッション・データを維持する便利な方法を提供することができる。いくつかの実例において、プロセス・グループ・マネージャは、所与のプロセス・グループによりメモリ・アドレス範囲へのアクセスの取り消しを開始し、所与のプロセス・グループがメモリ・アドレス・トランスレーション回路によって保持されるパーミッション・データから所与のプロセス・グループについてのプロセス・グループ識別子の削除を開始するように構成される。
【0015】
実例の配置構成において、アクセスの許容度は様々なプロセス・グループ・タイプ間で異なっていてよい。例えば、第1のプロセス・グループ・タイプについて、機能データは第1のタイプのすべてのプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義し、第2のプロセス・グループ・タイプの所与のプロセス・グループについて、機能データは第2のプロセス・グループ・タイプの所与のプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義する。
【0016】
いくつかの実例において、第1のプロセス・グループ・タイプ(例えばいわゆるハイブリッド・タイプなど)の所与のプロセス・グループについて、メモリ・アドレス・トランスレーション回路は、
(i)機能データが所与の仮想メモリ・アドレスが所与のプロセス・グループについての許容可能なメモリ・アドレス範囲内にあることを示している
(ii)所与のプロセス・グループについてのプロセス・グループ識別子がパーミッション・データによって定義されたプロセス・グループ識別子である
のいずれか、又は両方の場合、所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される。
【0017】
いくつかの実例において、第2のプロセス・グループ・タイプ(いわゆる純粋タイプなど)の所与のプロセス・グループについて、メモリ・アドレス・トランスレーション回路は、
(i)機能データが所与の仮想メモリ・アドレスが所与のプロセス・グループについての許容可能なメモリ・アドレス範囲内にあることを示している
(ii)所与のプロセス・グループについてのプロセス・グループ識別子がパーミッション・データによって定義されたプロセス・グループ識別子である
の両方の場合、所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される。
【0018】
例えば、メモリ・アドレス・トランスレーション回路は、メモリ管理ユニット、及びトランスレーション・ルックアサイド・バッファのうち1つ又は両方を備えることができる。
【0019】
別の実例の実施例は、方法であって、マルチスレッド処理要素を使用して、それぞれが1つ又は複数の処理スレッドである1つ又は複数のプロセス・グループとして、処理スレッドを実行することであって、それぞれのプロセス・グループは1つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、実行することと、メモリ・アドレス・トランスレーション回路を使用して、プロセス・グループのうちの1つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートすることとを含み、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する1つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付け、メモリ・アドレス・トランスレーション回路は、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止する、方法を提供する。
【0020】
次に図面を参照すると、
図1は命令を処理するための処理パイプライン4を備えるデータ処理装置2の実例を概略的に図示している。この実例において、処理パイプライン4は、フェッチ工程6、デコード工程8、発行工程10、実行工程又は処理要素12、及びライトバック工程14を含む複数のパイプライン工程を含むが、他のタイプの工程又は工程の組み合わせが提供されてもよいことを了解されたい。例えば、いくつかの実装形態ではレジスタのリネームを実施するためのリネーム工程を含むことができる。処理される命令は工程から工程へと移動し、命令がある工程で待ち状態にある間、別の命令はパイプライン4の異なる工程で待ち状態にあり得る。
【0021】
フェッチ工程6はレベル1(L1:Level 1)の命令キャッシュ20から命令をフェッチする。フェッチ工程6は普通、連続する命令アドレスから逐次に命令をフェッチすることができる。しかしながら、フェッチ工程はまた分岐命令の結果を予測するための分岐予測器22を有することがあり、フェッチ工程6は、分岐すると予測される場合は(非逐次)分岐ターゲット・アドレスから、又は分岐しないと予測される場合は次の連続するアドレスから、命令をフェッチすることができる。分岐予測器22は、ある分岐が取られそうか、又は取られそうにないかを予測するための情報を格納するための1つ又は複数の分岐履歴テーブルを含むことができる。例えば分岐履歴テーブルは、前に実行された分岐の実際の結果を追跡するための、又は分岐についてなされた予測についての信頼度を表すカウンタを含むことができる。分岐予測器22はまた分岐命令の前のターゲット・アドレスをキャッシュするための分岐ターゲット・アドレス・キャッシュ(BTAC:Branch Target Address Cache)24を含むことができ、それによって同一の分岐命令との後続の遭遇の際、これらが予測され得る。
【0022】
フェッチされた命令は、命令をデコードしてデコード命令を生成するためのデコード工程8に渡される。デコード命令は適当な処理演算を実行するために実行工程12を制御するための制御情報を含むことができる。キャッシュ20からフェッチされたいくつかのより複雑な命令について、デコード工程8はこれらの命令を複数のデコード命令にマッピングすることができ、これはマイクロ命令(μop又はuop)として知られ得る。したがって、L1の命令キャッシュ20からフェッチされた命令とパイプラインの後方の工程で見られる命令との間には1対1関係がなくてもよい。一般的には、本出願における「命令」との称し方はマイクロ命令を含むものとして解釈するべきである。
【0023】
デコード命令は発行工程10に渡され、命令の実行に必要なオペランドが利用可能かどうかを判断し、オペランドが利用可能であれば実行のため命令を発行する。いくつかの実装形態はインオーダー処理をサポートしていることがあり、それによって、命令がL1の命令キャッシュ20からフェッチされたプログラム順序に対応する順序での実行のために、命令が発行される。他の実装形態はアウトオブオーダー実行をサポートしていることがあり、それによって命令は、プログラムの順序とは異なる順序で実行工程12に発行され得る。前方の命令がオペランドを待ってストールしている間、オペランドが利用可能であるプログラムの順序において後方の命令を先に実行できるため、アウトオブオーダー処理はパフォーマンスを改善するために有用であり得る。
【0024】
発行工程10は命令を実行工程12に発行し、ここで命令は様々なデータ処理演算を実行するために、実行される。例えば、実行工程は、整数値に対して算術又は論理演算を実行するための算術/論理ユニット(ALU:Arithmetic/Logic Unit)30、浮動小数点形式で表現される値に対して演算を実行するための浮動小数点(FP:Floating-Point)ユニット32、及びレベル1(L1)のデータ・キャッシュ36からのデータ値をレジスタ40にロードするためのロード演算、又はレジスタ40からのデータ値をL1のデータ・キャッシュ36に格納するためのストア演算を実行するためロード/ストア・ユニット34を含む複数の実行ユニット30、32、34を含むことができる。これらは、設けることができる実行ユニットのいくつかの実例のタイプに過ぎず、多くの他の種類も設けることができることを了解されたい。処理演算を実行するために、実行工程12はデータ値をレジスタ40のセットから読み出すことができる。実行された命令の結果は次いでライトバック工程14によってレジスタ40に書き戻すことができる。
【0025】
L1の命令キャッシュ20及びL1のデータ・キャッシュ36は、複数のキャッシュのレベルを含むキャッシュ・ヒエラルキの一部であってもよい。例えば、レベル2(L2:Level 2)のキャッシュ44をやはり設けることができ、任意選択でさらなるレベルのキャッシュが設けられてもよい。この実例において、L2のキャッシュ44はL1の命令キャッシュ20とL1のデータ・キャッシュ36との間で共有されるが、他の実例は別個のL2の命令及びデータ・キャッシュを有することができる。フェッチされることになる命令がL1の命令キャッシュ20にない場合、L2のキャッシュ44からフェッチすることができ、同様に命令がL2のキャッシュ44にない場合、メイン・メモリ50からフェッチすることができる。同様に、ロード命令に応答して、データはL1のデータ・キャッシュ36にない場合L2のキャッシュ44からフェッチすることができ、必要であればメモリ50からフェッチすることができる。あらゆる既知のスキームがキャッシュ・ヒエラルキを管理するために使用され得る。
【0026】
プログラム命令及びデータ値を参照するためにパイプライン4によって使用されるアドレスは、仮想アドレスであってもよいが、少なくともメイン・メモリ50、及び任意選択でやはり少なくともキャッシュ・ヒエラルキのいくつかのレベルは、物理的にアドレッシングされ得る。したがってトランスレーション・ルックアサイド・バッファ(TLB)52が、メモリ管理ユニット(MMU)53の制御の下、パイプライン4によって使用される仮想アドレスを、キャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートするために与えることができる。例えば、TLB52はそれぞれが仮想アドレス空間の対応するページの仮想ページ・アドレス(「VPA」)を指定する複数のエントリを含むことができ、仮想ページがアドレッシングする対応する物理ページ・アドレス(「PPA」)は、対応するページ内の仮想アドレスを物理アドレスにトランスレートするためにマッピングされるべきである。例えば、仮想及び物理ページ・アドレスは対応する仮想アドレス及び物理アドレスの最上位部分に対応することができ、この時残りの最下位部分は仮想アドレスを物理アドレスにマッピングする際変更されないままである。アドレス・トランスレーション情報と同様に、それぞれのTLBエントリはまた、アドレスのあるページがパイプライン4のあるモードでアクセス可能かどうかを示すことなどのアクセス・パーミッションを指定する何らかの情報(「perm」)を含むことができる。いくつかの実装形態において、TLBエントリはまた、キャッシュ・ヒエラルキのどのレベルが読み出し若しくは書き込み動作に応じて更新されるかを定義するキャッシュ・ポリシ情報(例えば、キャッシュがライトバック又はライトスルー・モードで動作すべきであるかどうか)、又は対応するページ内のアドレスへのデータ・アクセスがメモリ・システムによって、データ・アクセスがパイプライン4によって発行された順序と比べてリオーダすることができるかどうかを定義する情報、などのアドレスの対応するページの他のプロパティを定義することができる。
【0027】
図1が単一のレベルのTLB52を示す一方、トランスレーションのヒエラルキがMMU53によって提供され得、及び/又はその複数のTLBが提供され得、それによってレベル1(L1)のTLB52は最近アクセスされた複数のページ内のアドレスをトランスレートするためのTLBエントリを含むことができ、また多数のページについてのエントリを記憶するためにレベル2(L2)のTLBを提供することができることを了解されたい。必要とされるエントリがL1のTLBに存在しない場合、L2のTLBから、又はヒエラルキ内のさらなるTLBからフェッチすることができる。代替的に、いわゆる中間的な物理アドレス(IPA:intermediate physical address)を使用することができ、それによって第1のトランスレーションは仮想アドレスからIPAへのものであり、またトランスレーションの第2のレベルはIPAから物理アドレスへのものである。この方法で複数のレベルのアドレス・トランスレーションを使用することができるため、例えば、第1のTLB(又はTLBのヒエラルキ)は仮想アドレスを中間アドレスにトランスレートするために使用することができ、また1つ又は複数のさらなるTLBを使用するアドレス・トランスレーションの第2のレベルが、次いで中間アドレスをキャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートすることができる。これは例えば、アドレス・トランスレーションの第1のレベルがオペレーティング・システムによって管理され得、アドレス・トランスレーションの第2のレベルがハイパーバイザによって管理され得る場合の仮想化をサポートするために有用であり得る。
【0028】
図1では、図面の明瞭さのため、TLB52の単一の工程及びレベルが示されている。
【0029】
アクセスされることになるページについて必要とされるエントリがTLBのうちいずれにもない場合、メモリ50のいわゆるページ・テーブルにアクセスするためにMMU53によってページ・テーブル・ウォークを実施することができる。本技法では、あらゆる既知のTLB管理スキームを使用することができる。
【0030】
図1に示すように、装置2は有界ポインタ・レジスタ60のセットを有することができる。有界ポインタ・レジスタのセットは
図1において汎用データ・レジスタ40のセットとは物理的に別個であるように示されるが、一実装形態においては汎用データ・レジスタ及び有界ポインタ・レジスタの両方を提供するために同一の物理記憶装置が使用されてもよい。
【0031】
それぞれの有界ポインタ・レジスタ60は、アクセスされることになるデータ値のアドレスを決定するために使用され得るポインタ値62、及び対応するポインタ62を使用する際アドレスの許容範囲を指定する範囲情報64を含む。有界ポインタ・レジスタ60はまたポインタの使用に関して1つ又は複数のリストリクション/パーミッションを定義することができるリストリクション情報66(パーミッション情報とも称する)を含むことができる。例えば、リストリクション66は、ポインタ62を使用し得る命令のタイプ、又はポインタが使用され得るパイプライン4のモードを制限するために使用することができる。したがって、範囲情報64及びリストリクション情報66は、ポインタ62が使用できる機能C0-CM-1を定義すると考えられ得る。定義された機能以外でポインタ62を使用する試行がなされると、エラーがトリガされ得る。範囲情報64は例えば、ポインタがある既知の境界内に留まっており、重要又はセキュアな情報を含み得るメモリ・アドレス空間の他のエリアに迷い込んでいないことを保証することのために有用であり得る。汎用データ・レジスタ及び有界ポインタ・レジスタの両方のために同一の物理記憶装置が使用される一実装形態において、その時一実装形態においてポインタ値62は例えば対応する汎用レジスタについて使用されるのと同一の記憶装置の位置に格納され得る。
【0032】
実行工程12は、マルチスレッド処理要素によって1つ又は複数の処理スレッドを実行するよう実装することができる。
【0033】
図2は、許容範囲が、データ又は命令への認可されていないアクセスに対して保護するために使用される命令のタイプの実例を示す。
図2の上部で示すように、特定の有界ポインタ・レジスタPR(Pointer Register)1は所与のポインタ値62及び範囲情報64を含み、この実例においては許容範囲の下位境界を定義する下位境界アドレス68、及び許容範囲の上位境界を定義する上位境界アドレス69を使用して指定されている。例えば、境界68、69はアドレス範囲80000から81000を定義するために設定される。ある命令が有界ポインタ・レジスタPR1参照し、ポインタ62から決定されるアドレスがこの範囲の外にある場合、エラーがトリガされ得る。
【0034】
例えば、
図2のパートAで示されるように、いくつかのシステムではポインタ・レジスタ60内のポインタ62の値を範囲情報64によって指定される範囲の外にある値に設定しようとする試行があるとエラーがトリガされ得る(ここではポインタがアドレスを直接指定すると仮定している)。これはポインタ62が指定された範囲の外のあらゆる値を取ることを回避し、それによって、ポインタを使用するあらゆるアクセスが許可された範囲内に安全にあることを保証することができる。代替的に、
図2のパートBで示されるように、命令がポインタ62のアドレスによって特定される位置にアクセスしようと試行すると、その時そのアドレスが指定された範囲の外にある場合、エラーがトリガされ得る。したがって、ポインタ62を指定された範囲の外の値に設定することがなお許容され得るが、そのポインタ・アドレスのデータ・アクセス(又はそのポインタから導出されるアドレス)が試行されると、その時そのアドレスが許可された範囲の外にある場合、エラーがトリガされ得る。
図2のパートA及びパートBに示される両方のタイプの命令に応じて、他のシステムがエラーをトリガすることもある。
【0035】
範囲情報64は異なる方法で設定することができ、設定されるやり方は実装形態の詳細であり、本技法は使用される具体的な方法に依拠しない。純粋に実例として、特権を与えられた命令、ユーザ空間コード、セキュアなコード、又はオペレーティング・システム若しくはハイパーバイザは、所与のポインタについて許容される範囲を指定することができる。例えば、命令セット・アーキテクチャは、所与のポインタ62についての範囲情報64を設定するための又は修正するための複数の命令を含むことができ、これらの命令の実行は、あるソフトウェア又はプロセッサ4のあるモード若しくは例外状態に制限することができる。範囲情報64を設定するための又は修正するためのあらゆる既知の技法を使用することができる。
【0036】
ポインタへの参照を行うある命令を実行する際に実行工程12で使用され得る有界ポインタ格納要素60のセットに加えて、プログラム・カウンタ機能(PCC:Program Counter Capability)レジスタ80が、命令がレベル1の命令キャッシュ20からフェッチされる際、フェッチ工程6で類似の機能性を提供するためにやはり使用されてもよい。特に、プログラム・カウンタ・ポインタはフィールド82に格納され得、この時PCC80はまた、有界ポインタ格納要素60のセット内のポインタのそれぞれに与えられる範囲及びリストリクション情報と同様に、範囲情報84及び適当なリストリクション情報86を与える。
図1はデフォルト・データ機能(DDC:Default Data Capability)レジスタ90及びシステム・アクセス機能(SAC:System Access Capability)レジスタ95をやはり概略的に図示しており、両方を以下で議論する。
【0037】
図3は、タグ・ビットが個々のデータ・ブロックに関連付けられて、これらのデータ・ブロックが機能を表しているかどうか(すなわち、有界ポインタ及び関連付けられるリストリクション情報)、又は通常データを表しているかどうかを特定するためにどのように使用されるか概略的に図示している。特に、メモリ・アドレス空間110は、典型的には指定されたサイズを有することになる一連のデータ・ブロック115を格納することになる。純粋に図示のために、この実例において、それぞれのデータ・ブロックは128ビット含むと仮定する。それぞれのデータ・ブロック115に関連して、タグ・フィールド120が提供され、一実例ではこれはタグ・ビットと称される単一のビット・フィールドであり、関連付けられるデータ・ブロックが機能を表すことを特定するためにセットされ、関連付けられるデータ・ブロックが通常データを表し、ひいては機能として取り扱うことができないことを示すためにクリアされる。セットされた又はクリアな状態に関連付けられる実際の値は、実装形態によって異なっていてよいが、純粋に図示のため、一実例の実装形態においては、タグ・ビットが値1を有する場合、関連付けられるデータ・ブロックが機能であることを示し、タグ・ビットが値0を有する場合は関連付けられるデータ・ブロックが通常データを含むことを示すことを了解されたい。
【0038】
機能が、
図3で示される機能レジスタ100などの有界ポインタ・レジスタ(機能レジスタとも称する)60のうちの1つにロードされると、次にタグ・ビットは機能情報を伴って移動する。したがって、機能が機能レジスタ100にロードされると、ポインタ102、範囲情報104及びリストリクション情報106(以降でパーミッション情報と称する)が機能レジスタにロードされることになる。加えて、その機能レジスタに関連して、又はその中の特定のビット・フィールドとして、タグ・ビット108はその内容が機能を表すことを特定するためにセットされることになる。同様に、機能がメモリに格納し戻される場合、関連するタグ・ビット120は機能が格納されるデータ・ブロックに関連付けられてセットされることになる。そのような手法によって、機能と通常データとを区別し、ひいては通常データを機能として使用することができないことを保証することが可能である。
【0039】
図1に戻ると、本明細書で説明される技法によると、有界ポインタに関連付けられる通常の情報に加えて、その有界ポインタがアクセスを制御するために使用される対応するメモリ領域に関連付けられる第1のトークン値を含む取り消し可能な有界ポインタが生成され得る。さらには、メモリ領域の割り当てられたインスタンスに関連する取り消し可能な有界ポインタに関する使用のために、メモリ内のヘッダ位置に格納されるヘッダが設けられ、そのヘッダは、格納値が、取り消し可能な有界ポインタに関して使用される第1のトークン値に初期化される第1のトークン・フィールドを有する。ヘッダ位置は取り消し可能な有界ポインタによって与えられる範囲情報から導出可能であるように構成され、したがって有界ポインタがメモリ・アドレスを生成するために使用される時にヘッダが配置されることを可能にしている。割り当てられたメモリ領域が続いて解放される際、この時第1のトークン・フィールド内の格納値が修正される。
【0040】
機能
高次のアプリケーションはJAVA(登録商標)及びJavaScript(登録商標)などの「安全な」制約された実行環境で実行するよう構成することができるが、システムの低次のレイヤは一般的にハードウェア上で実際の実行へリンクを提供しなければならない。結果として、ほぼすべてのそのようなレイヤは現在C/C++プログラミング言語で書かれており、典型的には信頼されている(しかし信頼できない)コード数千万行から成る。
【0041】
悪意のある攻撃に対して強力で固有の免疫を与えるための基礎的なアーキテクチャを与えることが目的である。機能は、そのような戦略の一部を提供することができる。
【0042】
機能データ・タイプは、1つ又は複数のアーキテクチャ的に定義されたリソースにアクセスするための権限の委任可能なトークンを表現している。機能は広義には3つのタイプに分かれる:
1)データ転送及び命令フェッチ用のメモリの範囲へのアクセスを許可するために使用されるメモリ機能
2)一定のシステム動作へのアクセスを許可するために使用されるシステム・アクセス機能
3)他の機能をオブジェクト・タイプでカプセル化するために使用されるシーリング機能
【0043】
それぞれの機能は複数の論理フィールドを含んでおり、その一部は一定の機能タイプに存在するだけである。そのようなフィールドの実例を
図4に概略的に示す。
【0044】
機能レジスタは、機能を保持するため、及びメモリ・システムへの拡張を定義するために使用されるため、機能が汎用メモリに保持される場合に機能プロパティが強制される。命令は、機能をメモリからロード及びストアするため、メモリ内のデータ及び機能にアクセスするよう機能レジスタを使用するため、機能を使用して分岐するため、並びに新しい権利を作り出すことなく機能レジスタ内に保持される機能を操作するために提供され得る。
【0045】
機能の使用に起因する制限は、既存のMMU及び例外レベル・ベースの制限によって強制される制限を上回る。機能の使用は、これらのメカニズムによって既に与えられている保護を弱めないように構成することができる。
【0046】
アンビエント機能
アンビエント機能を定義する1つ又は複数の(例えば、3つの)アンビエント機能レジスタを与えることができる。これらの機構を使用して、機能拡張のアンビエント効果を、それぞれの例外レベルにおいて有効及び無効にすることができる。ある例外レベルにおいてアンビエント効果を有効にすることにより、アンビエント機能レジスタの効果を有効にし、例外エントリの振る舞い及びそのレベルへのリターンを修正し、自然にアドレス上で動作するいくつかの既存の命令の振る舞いを修正する。いくつかの実例において、3つのアンビエント機能レジスタが与えられる:
(a)プログラム・カウンタ機能(PCC:Program Counter Capability)レジスタ
これは命令フェッチの使用を制限する。PCC境界及びパーミッションは、機能の分岐及びリターン命令を使用して、例外エントリ及びリターンの際に更新することができる。
(b)デフォルト・データ機能(DDC)レジスタ
PCCはプログラム・カウンタに対するデータ・アクセスに影響を及ぼす。他のデータ・アクセスは、デフォルト・データ機能の暗黙的な使用、又はベース・レジスタとしての機能の明示的な使用のいずれかにより制限される。
(c)システム・アクセス機能(SAC)レジスタ
システム・レジスタ及びシステム動作へのアクセスは、SACレジスタ内に保持されるパーミッションによって制限することができる。
【0047】
トランスレーション・ルックアサイド・バッファ及びメモリ管理ユニット
図1の装置において、なぜMMU53が要求されるかの主な理由は、MMU53が現在TLB52のローカルに記憶されていないアドレス・トランスレーションを扱うからである。これが実行される方法を、以下でさらに議論する。これらの事項を扱うことについて、現在TLB52によって保持されていないトランスレーションについて、
図5を参照すると、MMU130はトランスレートされる仮想アドレス500に関してTLBからリクエスト510を受信し、要求される物理アドレス(PA:physical address)530を示すレスポンス520をTLB52にリターンし、次いでこれはTLB52によって出力される。一方、既にTLBによってバッファされているトランスレーションは単純にTLBによって出力され、一般的にはTLBがMMU53から取得しなければならないものよりもいくらか素早い。そのためシステムの残りの部分の観点から、TLBは要求されるトランスレーションを与えるが、これが発生する速度はトランスレーションが既にTLBによってバッファされているかどうかに依存することがある。
【0048】
これらの動作は
図6のフローチャートによってやはり概略的に表現されており、VA500をTLB52に与えることによって対応するPA530についてのリクエストを形成している(
図6ではステップ600として示される)。
【0049】
言及したように、TLBはVAとPAとの間のトランスレーションのキャッシュ又はストアを含む。TLBが特定のVAからPAへのトランスレーションを記憶する基準は、TLBの動作について既知の技法にしたがって確立することができる。キャッシュされたトランスレーションは最近使用されたトランスレーション、頻繁に使用されるトランスレーション、及び/又は近々要求されると期待されるトランスレーション(最近アクセスされたVAに近いVAに関連するトランスレーションなど)を含むことができる。全体的に、TLBはすべての可能なVAからPAへのトランスレーションのセットのサブセットのキャッシュを含み、それによって特定のVAからPAへのトランスレーションが要求されると、トランスレーションが既にTLBでキャッシュ内に保持されていることが見出すことができるか、又は見出すことができない状況である。
【0050】
したがって、次のステップ610において、TLBは要求されたトランスレーションがTLBによって本当に現在キャッシュされているか(「ヒット」)どうかを検出する。答えが「はい」の場合、制御はステップ640に渡り、そこでPA530が要求されるメモリ・アクセスにおける使用のためにリターンされる。
【0051】
答えが「いいえ」の場合、制御はステップ620に渡り、そこでTLB52は要求されるVA510を含むリクエストをMMU53に送信する。MMU53は要求されたVAからPAへのトランスレーション(例えばいわゆるページ・テーブル・ウォーク(PTW:page table walk)技法を使用して)を導き、少なくともVA510に対応するPA520(及び本実例では、以下で議論されるいくつかのパーミッション・データ)をTLB102に送信し戻し、ステップ630でそれらはキャッシュ又はバッファされたトランスレーションとして記憶される。
【0052】
最終的にステップ640で、TLB52はTLB52に記憶されたトランスレーションを適用して出力PA530を与える。
【0053】
コンパートメント
本実例の装置において、プロセスは1つ又は複数のいわゆるコンパートメントの集合としてモデル化される。例えば、実行工程12はマルチスレッド処理要素によって、それぞれが1つ又は複数の処理スレッドである1つ又は複数のプロセス・グループ又はコンパートメントとして、処理スレッドを実行するよう実装され、それぞれのプロセス・グループ又はコンパートメントは1つ又は複数のプロセス・グループの中で一意であるプロセス・グループ・コンパートメント識別子(以下で議論されるCID(compartment identifier))を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる。
【0054】
コンパートメントはハイブリッド(ハイブリッド・コンパートメントすなわちHC(hybrid compartment))又は純粋(純粋なコンパートメントすなわちPC(pure compartment))であることができ、コンパートメント・マネージャ(CM:compartment manager)のインスタンスによって管理される。コンパートメント・マネージャCMは信頼され、且つ信頼できるコンパートメントと考えられ、利用可能な仮想メモリ・アドレス範囲のほとんど又はすべてを見る能力を有している。したがって、例示の配置構成において、処理要素12は、少なくともプロセス・グループ識別子をそれぞれのプロセス・グループに割り当てるよう動作可能であるプロセス・グループ・マネージャを実装するように構成される。
【0055】
コンパートメントのそれぞれは、1つ又は複数のスレッドを含むことができる。スケジューリング可能なエンティティが、スレッドである。
図7は、仮想メモリ・アドレス(VMA:virtual memory address)空間700内のそのような配置構成を概略的に図示している(描かれるように、左から右へアドレスが大きくなるように概略的に示される)。ユーザ空間のエンティティのみが可視化されていることに留意されたい。
【0056】
ハイブリッド・コンパートメント(
図7のHC1、HC2など)について、データ・アクセスは上で議論した関連するDDCによって限定される。ハイブリッド・コンパートメントは典型的にはアプリケーションによって使用することができ、アンビエント機能によって限定される。それらは機能を作成することができるが、これは必要事項ではない。
【0057】
純粋なコンパートメント(
図7のPC1、PC2など)について、動作はその純粋なコンパートメントに特有の1つ又は複数の機能の具体的なセット内でエンコードされた範囲によって制限される。純粋なコンパートメントはポインタを採用せず、排他的に機能を使用する。
【0058】
したがって、これらの実例では、第1の(ハイブリッド)プロセス・グループ・タイプについて、機能データは第1のタイプのすべてのプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義し、第2の(純粋)プロセス・グループ・タイプの所与のプロセス・グループについて、機能データは第2のプロセス・グループ・タイプの所与のプロセス・グループに適用可能な許容可能なメモリ・アドレス範囲を定義する。
【0059】
コンパートメント化の実例の使用において、ある特徴を与えることができ、それにより例えば効率を向上させるために、共有メモリ又はメモリ領域を介してコンパートメントが互いに通信できるようにすることによって、システム・コールの数を削減することができる。要するに、2つ以上のコンパートメントがそのような共有メモリ又はメモリ領域にアクセスすることができる。
【0060】
図8は、コンパートメント・マネージャCM800がコンパートメント810、820の提供だけではなく、複数のコンパートメントによってアクセス可能な仮想メモリ内の1つ又は複数の共有メモリ空間830の作成も監視する、そのような配置構成を概略的に図示している。
【0061】
図9は、実例の純粋なコンパートメントPC1とPC2との間で共有されるメモリ領域SM1、並びにハイブリッド・コンパートメントHC1とHC2との間で共有される別の実例の共有メモリ空間SM2を概略的に図示している(
図7のそれと類似のフォーマットで)。共有メモリ空間へのアクセスは、矢印900などの矢印によって概略的に示されている。
【0062】
本実施例は、本手法の基本的なバージョンの一定の特徴に対処している:
第1の特徴は、ハイブリッド・コンパートメント同士でメモリを共有するために、共有メモリが個々のDDCによって形成される連続的な範囲内になければならないことである。
第2の特徴は、いったんメモリ領域が2つのコンパートメント同士で共有されてしまうと、共有メモリへのすべての支配的な参照のセットは未知であるため、安全なやり方で解放することができないことである。
【0063】
有効な参照は(あらゆる特定の時点で)レジスタ内に記憶され、スタックにプッシュされるか、データとして保存することができる。したがって、共有メモリが解放されても、それに対して有効な参照は実行中のコードの何らかの部分によりこれらの形態のうちの1つとして保たれることができる。そのように保持される参照は、そのメモリ領域が重複するメモリ・アドレス範囲に再割り当てされた後でも、以前共有されていたがもはや共有されていないデータを変更するか、又は「スニッフする」(読み取る、又はサンプリングする)ことができる潜在的な方法を与えることになる。そのような結果は望ましくない「use-after-free」状況と称されることがあり、
図10に概略的に図示されており、ここでは以前(しかし今は違う)認可されていたコンパートメント1000が、今はCM1020によってコンパートメント1030と1040との間での共有のために割り当てられている共有メモリ1010をスニッフ又はアクセスしていることを表現している。
【0064】
本技法の実施例は、メモリ領域にアクセスするため、又はメモリ領域を共有するためにコンパートメントへのパーミッションを効果的に取り消すために取り消しメカニズムを提供することにより、これらの問題に対処している。1つの可能性のある代替的な実例の取り消しメカニズムは、メモリ領域をマッピング及びアンマッピングすることが頻繁に使用されて参照を取り消す高度なMMU構成を伴うことがある。しかしながら、この手法はコンパートメント・マネージャのコードの複雑性を増大させるため、また場合によってはTLB圧力(処理要求)を許容できないレベルまで上昇させることがあるため本実施例では使用されない。
【0065】
したがって、本開示の実施例は、有効な参照を取り残さずにその数は知るという問題に対処するための、別の技法を提供することを目的としている。
【0066】
コンパートメント識別子
コンパートメントはシステム内でいつも一意に特定することができる。これには、適当な識別子生成方法が使用される。コンパートメント識別子(CID)は、プロセスのインライン部分に関連しているということを除いて、ちょうどプロセス識別子(PID:process identifier)に似ている。現在のCIDは、レジスタに記憶されている。それぞれのCIDは(これらの実例では)他の支配的なCIDの中で一意である。
【0067】
トランスレーション記述子(TD:translation descriptor)
解決策の基本は、新しいトランスレーション記述子(TD)のフォーマットを拡張子として実装することである。そのような記述子は、そのメモリ範囲へのアクセスを有するコンパートメントを定義するために(例えば)せいぜい2つのCIDを含むことができる。後に(例えば、純粋なコンパートメントに関連して)議論する少なくともいくつかの状況において、TDにおいてCIDがセットされていなければメモリはアクセス可能ではない。さらには、アーキテクチャは、アンビエント機能を含む機能を通じてストア及びロード動作が実行されている時、異なるメモリ・アクセスをチェックさせるよう変えられるべきである。
【0068】
図11はTLB52’又はMMU53’(例えばTLBが使用されていない場合)の使用を概略的に図示しており、キャッシュ1100において、それぞれVAからPAへのトランスレーションに関連付けられる1つ又は複数の属性1102をバッファしており、属性はTDを含んでいる。TLB52’及び/又はMMU53’は、メモリ管理ユニット、及びトランスレーション・ルックアサイド・バッファのうち、1つ又は両方を備えるメモリ・アドレス・トランスレーション回路の使用の実例を提供する。
【0069】
いくつかの実例において、TLB52’/MMU53’は、特定のメモリ・アドレス、ページ、又は領域へのアクセスを試行しているコンパートメントのCID1110を入力として受信し、コントローラ1120を使用して記憶された属性を参照してアクセスが許容されるかどうかを検出することができる。
【0070】
コントローラ1120によって行われたチェック及び得られるアクセス・パーミッションは、次のように実装することができる。
【0071】
メモリ・アドレス・トランスレーション回路(TLB及び/又はMMUなど)は、プロセス・グループのうちの1つの処理スレッドによりリクエストされたメモリ・アクセスに応答して、仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートするように構成される。それはまた、所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する1つ又は複数のプロセス・グループ識別子(CID)を定義するパーミッション・データ(TDなど)を関連付けることと、所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止することとを行うように構成される。
【0072】
ハイブリッド・コンパートメント用のアクセス
試験は以下の通りである:[DDCに対するチェック]OR[CIDについてMMUをチェック]
【0073】
換言すると、
図12の表で示されるように、左2列のいずれか又は両方が真(アクセスが許容可能なDDC境界内にある;TDがそのCIDを定義している)である場合、アクセスは許容される。
【0074】
提案される配置構成はハイブリッド・コンパートメントとのメモリ共有を単純化することができる。共有メモリはDDC境界の外側にあってもよいが、なおアクセス可能である。アクセスは、共有メモリが新しいTDによって記述され、且つCIDが適当にセットされている場合、MMUによって付与される。共有メモリがDDC境界の外側にあり、且つTDがない場合、アクセスは拒否されることになる。
【0075】
したがって、これらの実例では、第1の(ハイブリッド)プロセス・グループ・タイプの所与のプロセス・グループについて、メモリ・アドレス・トランスレーション回路は、
(i)機能データが所与の仮想メモリ・アドレスが所与のプロセス・グループについての許容可能なメモリ・アドレス範囲内にあることを示している
(ii)所与のプロセス・グループについてのプロセス・グループ識別子がパーミッション・データによって定義されたプロセス・グループ識別子である
のいずれか、又は両方の場合、所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される。
【0076】
純粋なコンパートメント用のアクセス
試験は以下の通りである:[機能に対するチェック]AND[MMU及びセットされていればCIDをチェック]
【0077】
換言すると、
図13の表で示されるように、左2列の両方が真(アクセスが有効な機能によって定義されている;TDがそのCIDを定義している)であり、メモリ・アドレス又は領域が他の方法でマッピングされていない場合、アクセスは許容される。
【0078】
本配置構成は、純粋なコンパートメントのことになると、セキュリティを強化又は強固にすることができる。以前は、そのようなコンパートメントは、有効な機能が存在した場合、データにアクセスすることができた。提案されるTDフォーマットはこの振る舞いを変える。
【0079】
したがって、これらの実例では、第2の(純粋)プロセス・グループ・タイプの所与のプロセス・グループについて、メモリ・アドレス・トランスレーション回路は、
(i)機能データが所与の仮想メモリ・アドレスが所与のプロセス・グループについての許容可能なメモリ・アドレス範囲内にあることを示している
(ii)所与のプロセス・グループについてのプロセス・グループ識別子がパーミッション・データによって定義されたプロセス・グループ識別子である
の両方の場合、所与の仮想メモリ・アドレスへのアクセスを許容するように構成され、そうでなければアクセスを阻止するように構成される。
【0080】
これらの試験についてのMMUの使用
この配置構成は、アクセス・チェックを提供し、MMUを低次のレイヤ・アクセス・コントローラというよりは(先に提案したMMUの場合のように)、上で議論したパーミッション特徴への等価なパーミッション・プロバイダとして取り扱う。
【0081】
実例-
図14~
図16
次に、これらの技法の実例を、コンパートメント・マネージャ1400が、仮想メモリ境界A、Bによって定義される共有メモリ領域1410へのアクセスを作成して監視する
図14~
図16を参照して説明する。共有メモリ領域へのアクセスは、属性データ1102が調べられるTLB52’/MMU53’によるメモリ・アドレスのトランスレーションを要求する。
図14~
図16では、TDのCIDに関連して上で議論した試験のみを図示している。
【0082】
図14において、共有メモリ領域1410が、それぞれCID1及びCID2のCIDを有するコンパートメント1420、1430間で共有されるように確立されている。TDは「CID1又はCID2」を指定しているため、コンパートメント1420、1430によるあらゆるアクセスは(CIDに関連する試験の部分の観点から)許容可能である。
【0083】
図15において、共有メモリが、それぞれCID3及びCID4のCIDを有するコンパートメント1500、1510に再割り当てされている。次も、TDは「CID1又はCID2」を指定しているため、コンパートメント1500、1510によるあらゆるアクセスは(CIDに関連する試験の部分の観点から)許容可能である。しかしながら、コンパートメント1420によってCID=CID1で試行されるアクセスは、メモリ・トランスレーションで実施されるCID試験に失敗し、許可されない。
【0084】
この方法では、共有メモリは正常に再割り当てされている。コンパートメント1420に与えられた以前のパーミッションは、共有メモリへのあらゆる未解決の参照を特定して配置する必要なく、共有メモリ領域に関連付けられるTDを補正することにより除去されている。
【0085】
さらなる実例が
図16に図示されており、ここではメモリ領域1410の共有される性質が取り消されるため、アクセスはCID=CID3のコンパートメント1500のみに許可される。コンパートメント1420、1510(又は実際には他のすべてのコンパートメント)によるあらゆる試行されるアクセスが、メモリ・トランスレーションをリクエストするコンパートメントのCIDとのTD比較の失敗のために許容されない。
【0086】
図17及び
図18はこれらの処理を要約する概略的なフローチャートである。
【0087】
図17はハイブリッド・コンパートメントに言及する。ステップ1710において、メモリ・アクセスは関連するDDCによってセットされる境界を考慮に入れて許容可能かどうかについてチェックされる。(ステップ1710において)答えが「はい」の場合、アクセスは許容される。そうではない場合、ステップ1720においてMMU又はTLBによって、CIDがTDによって指定される1つ又は複数のCIDのグループによってカバーされるかどうかについてチェックがなされる。(ステップ1730において)「はい」の場合アクセスは許容される。そうではない場合、アクセスは許容されない。
【0088】
図18は、純粋なコンパートメントについて言及する。ステップ180において、アクセスを行っているコンパートメントに関連する機能が、有効性についてチェックされる。(ステップ1810において)有効であれば、制御は1820に渡る。そうではない場合、アクセスは許容されない。ステップ1820において、リクエストを行っているコンパートメントのCIDは、TLB/MMUによってTDに対してチェックされる。(ステップ1830において)CIDがTDによって指定された1つ又は複数によってカバーされる場合、アクセスは許容される。そうではない場合、アクセスは許容されない。
【0089】
潜在的な恩恵
上で議論したように、共有メモリの割り当ては、有効な参照がなお存在していても、TDフォーマットを変更することにより容易に取り消すことができる。これに加えて、CIDが新しいTDフォーマットで適切にセットされる場合は、いつでもVMA範囲を再使用することができる。共有メモリはいつでも取り消すことができるが、実際には共有の一方にマッピングを保ったままである(そのため例えばCID3とCID4との間の共有メモリはCID4に関する限り取り消すことができるが、CID3についてはCID3だけを指定するようTDを変更することにより単純に維持される)。
【0090】
とにかく、すべてのメモリ・アクセスがアドレス・トランスレーションを経るため、本解決策はパフォーマンス・ペナルティを持たない。
【0091】
TDフォーマットは潜在的にTLB管理を単純化し、潜在的にTLBフラッシュを減らすことにつながる。純粋なコンパートメントは単一のTLBエントリによって説明され、アクセス・タイプは機能内でエンコードされる。ハイブリッド・コンパートメントはメモリ1種類につき1TLBエントリを持つことができ、アクセス・タイプはMMUによって強制される。
【0092】
TDのポピュレーション
図19を参照すると、実例の配置構成において、コンパートメント・マネージャ(又はプロセス・グループ・マネージャ)は、メモリの共有を監視するために責任を負うプロセスとして動作する。いくつかの実例において、CM自身はTDフィールドをポピュレートすることができ、又は他の実例において、それはTDフィールドをポピュレートするようカーネルにリクエストを行うための特権を有するエンティティである。CM以外のコンパートメントは(実例の配置構成において)、TDフィールドをポピュレートするため又はこれを行うようカーネルにリクエストするための特権を持たない。
【0093】
2つ以上のプロセス・グループ間でアクセスが共有されるメモリ・アドレス範囲について、CMは(ステップ1900において)メモリ・アドレス・トランスレーション回路に2つ以上のプロセス・グループについてのプロセス・グループ識別子を与えるか、又は与えるようカーネルにリクエストを行うことができる;メモリ・アドレス・トランスレーション回路を2つ以上のプロセス・グループについてのプロセス・グループ識別子をパーミッション・データとして記憶するように構成することができる(ステップ1910において)。これは、共有メモリ領域を確立することの一部として実施することができる。
【0094】
同様に、CM(プロセス・グループ・マネージャ)は、所与のプロセス・グループによりメモリ・アドレス範囲へのアクセスの取り消しを開始し(
図20のステップ2000において)、メモリ・アドレス・トランスレーション回路によって保持されるパーミッション・データから所与のプロセス・グループについてのプロセス・グループ識別子の削除を開始することにより(ステップ2010において)構成される。
【0095】
図21は、方法であって、(ステップ2100において)マルチスレッド処理要素を使用して、それぞれが1つ又は複数の処理スレッドである1つ又は複数のプロセス・グループとして、処理スレッドを実行することであって、それぞれのプロセス・グループは1つ又は複数のプロセス・グループの中で一意であるプロセス・グループ識別子を有し、仮想メモリ・アドレス空間内で機能データによって個々のメモリ・アドレス範囲に関連付けられる、実行することと、(ステップ2110において)メモリ・アドレス・トランスレーション回路を使用して、プロセス・グループのうちの1つの処理スレッドによって仮想メモリ・アドレスを物理メモリ・アドレスにトランスレートすることとを含み、メモリ・アドレス・トランスレーション回路は、(ステップ2120において)所与の仮想メモリ・アドレスから対応する物理メモリ・アドレスへのトランスレーションに、所与の仮想メモリ・アドレスへのアクセスを許可された個々のプロセス・グループを表現する1つ又は複数のプロセス・グループ識別子を定義するパーミッション・データを関連付け、メモリ・アドレス・トランスレーション回路は、(ステップ2130において)所与の仮想メモリ・アドレスへのアクセスを、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループに関連付けられる機能データ、及びパーミッション・データが、メモリ・アクセスをリクエストする処理スレッドのプロセス・グループのプロセス・グループ識別子を定義するかどうかの検出に依存して、阻止する、方法を図示する概略的なフローチャートである。
【0096】
図22は、使用され得るシミュレータの実装形態の図である。先に説明された実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本技法を実装している一方、本明細書で説明される実施例にしたがっており、コンピュータ・プログラムの使用を通じて実装される命令実行環境を提供することも可能である。
【0097】
そのようなコンピュータ・プログラムは、それらがハードウェア・アーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、しばしばシミュレータと称される。シミュレータ・コンピュータ・プログラムの種類としては、エミュレータ、仮想マシン、モデル、及びダイナミック・バイナリ変換器を含むバイナリ変換器が挙げられる。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティング・システム2220を実行させ、シミュレータ・プログラム2210をサポートする、ホスト・プロセッサ2230上で実行することができる。いくつかの配置構成において、ハードウェアと提供される命令実行環境との間に複数のシミュレーションのレイヤ、及び/又は同一のホスト・プロセッサ上に設けられる複数の別個の命令実行環境があってもよい。歴史的には、適度な速度で実行するシミュレータ実装形態を提供するためにはパワーのあるプロセッサが要求されてきたが、そのような手法は一定の状況下で正当化されてもよく、例えば互換性又は再利用目的のために別のプロセッサにとってネイティブなコードを実行する所望がある場合などである。例えば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされていない追加的な機能性を伴う命令実行環境を提供すること、又は典型的には異なるハードウェア・アーキテクチャに関連付けられる命令実行環境を提供することができる。シミュレーションの概略は「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁に示されている。
【0098】
実施例が特定のハードウェア構築物又は特徴を参照して以前に説明されてきた範囲で、シミュレートされる実施例において等価な機能性が適切なソフトウェア構築物又は特徴によって提供され得る。例えば、特定の回路がコンピュータ・プログラム・ロジックとしてシミュレートされる実施例に実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアが、ソフトウェア・データ構造体としてシミュレートされた実施例に実装されてもよい。以前に説明された実施例において参照されるハードウェア要素の1つ又は複数がホスト・ハードウェアに存在する配置構成(例えば、ホスト・プロセッサ2230)において、いくつかのシミュレートされる実施例は適切であればホスト・ハードウェアを利用することができる。
【0099】
シミュレータ・プログラム2210はコンピュータ可読記憶媒体(非一時的媒体であってもよい)に記憶することができ、ターゲット・コード2200(アプリケーション、オペレーティング・システム、及びハイパーバイザを含み得る)にプログラム・インターフェース(命令実行環境)を提供するが、ターゲット・コード2200はシミュレータ・プログラム2210によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同一のものである。したがって、上述の機能性を含むターゲット・コード2200のプログラム命令は、命令実行環境内からシミュレータ・プログラム2210を使用して実行することができ、それによって、上で議論した装置のハードウェア特徴を実際には有していないホスト・コンピュータ2230がこれらの特徴をエミュレートすることができる。
【0100】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置構成又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイス(上で議論したような処理要素など)は機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【0101】
本技法の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本技法はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本技法の範囲及び精神を逸脱することなく、その様々な変形、付加、及び修正がそこになされ得ることを理解されたい。例えば、本技法の範囲を逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組み合わせが可能である。